diff --git a/packages/compiler-cli/ngcc/index.ts b/packages/compiler-cli/ngcc/index.ts index 0c1a5810b0..db94fc695a 100644 --- a/packages/compiler-cli/ngcc/index.ts +++ b/packages/compiler-cli/ngcc/index.ts @@ -7,9 +7,10 @@ */ import {CachedFileSystem, NodeJSFileSystem, setFileSystem} from '../src/ngtsc/file_system'; -import {AsyncNgccOptions, NgccOptions, SyncNgccOptions, mainNgcc} from './src/main'; +import {AsyncNgccOptions, mainNgcc, NgccOptions, SyncNgccOptions} from './src/main'; + export {ConsoleLogger} from './src/logging/console_logger'; -export {LogLevel, Logger} from './src/logging/logger'; +export {Logger, LogLevel} from './src/logging/logger'; export {AsyncNgccOptions, NgccOptions, SyncNgccOptions} from './src/main'; export {PathMappings} from './src/utils'; diff --git a/packages/compiler-cli/ngcc/main-ngcc.ts b/packages/compiler-cli/ngcc/main-ngcc.ts index cd88da9518..05279057c1 100644 --- a/packages/compiler-cli/ngcc/main-ngcc.ts +++ b/packages/compiler-cli/ngcc/main-ngcc.ts @@ -125,7 +125,7 @@ if (require.main === module) { // And we have to convert the option to a string to handle `no-tsconfig`, which will be `false`. const tsConfigPath = `${options['tsconfig']}` === 'false' ? null : options['tsconfig']; - (async() => { + (async () => { try { const logger = logLevel && new ConsoleLogger(LogLevel[logLevel]); @@ -137,7 +137,10 @@ if (require.main === module) { createNewEntryPointFormats, logger, enableI18nLegacyMessageIdFormat, - async: options['async'], invalidateEntryPointManifest, errorOnFailedEntryPoint, tsConfigPath + async: options['async'], + invalidateEntryPointManifest, + errorOnFailedEntryPoint, + tsConfigPath }); if (logger) { diff --git a/packages/compiler-cli/ngcc/src/analysis/decoration_analyzer.ts b/packages/compiler-cli/ngcc/src/analysis/decoration_analyzer.ts index a8e02ccc3f..2b66c5662d 100644 --- a/packages/compiler-cli/ngcc/src/analysis/decoration_analyzer.ts +++ b/packages/compiler-cli/ngcc/src/analysis/decoration_analyzer.ts @@ -12,7 +12,7 @@ import {ParsedConfiguration} from '../../..'; import {ComponentDecoratorHandler, DirectiveDecoratorHandler, InjectableDecoratorHandler, NgModuleDecoratorHandler, PipeDecoratorHandler, ReferencesRegistry, ResourceLoader} from '../../../src/ngtsc/annotations'; import {CycleAnalyzer, ImportGraph} from '../../../src/ngtsc/cycles'; import {isFatalDiagnosticError} from '../../../src/ngtsc/diagnostics'; -import {FileSystem, LogicalFileSystem, absoluteFrom, dirname, resolve} from '../../../src/ngtsc/file_system'; +import {absoluteFrom, dirname, FileSystem, LogicalFileSystem, resolve} from '../../../src/ngtsc/file_system'; import {AbsoluteModuleStrategy, LocalIdentifierStrategy, LogicalProjectStrategy, ModuleResolver, NOOP_DEFAULT_IMPORT_RECORDER, PrivateExportAliasingHost, Reexport, ReferenceEmitter} from '../../../src/ngtsc/imports'; import {CompoundMetadataReader, CompoundMetadataRegistry, DtsMetadataReader, InjectableClassRegistry, LocalMetadataRegistry} from '../../../src/ngtsc/metadata'; import {PartialEvaluator} from '../../../src/ngtsc/partial_evaluator'; @@ -28,7 +28,7 @@ import {EntryPointBundle} from '../packages/entry_point_bundle'; import {DefaultMigrationHost} from './migration_host'; import {NgccTraitCompiler} from './ngcc_trait_compiler'; import {CompiledClass, CompiledFile, DecorationAnalyses} from './types'; -import {NOOP_DEPENDENCY_TRACKER, isWithinPackage} from './util'; +import {isWithinPackage, NOOP_DEPENDENCY_TRACKER} from './util'; @@ -38,8 +38,12 @@ import {NOOP_DEPENDENCY_TRACKER, isWithinPackage} from './util'; class NgccResourceLoader implements ResourceLoader { constructor(private fs: FileSystem) {} canPreload = false; - preload(): undefined|Promise { throw new Error('Not implemented.'); } - load(url: string): string { return this.fs.readFile(resolve(url)); } + preload(): undefined|Promise { + throw new Error('Not implemented.'); + } + load(url: string): string { + return this.fs.readFile(resolve(url)); + } resolve(url: string, containingFile: string): string { return resolve(dirname(absoluteFrom(containingFile)), url); } @@ -56,7 +60,7 @@ export class DecorationAnalyzer { private rootDirs = this.bundle.rootDirs; private packagePath = this.bundle.entryPoint.package; private isCore = this.bundle.isCore; - private compilerOptions = this.tsConfig !== null? this.tsConfig.options: {}; + private compilerOptions = this.tsConfig !== null ? this.tsConfig.options : {}; moduleResolver = new ModuleResolver(this.program, this.options, this.host, /* moduleResolutionCache */ null); @@ -73,8 +77,9 @@ export class DecorationAnalyzer { // based on whether a bestGuessOwningModule is present in the Reference. new LogicalProjectStrategy(this.reflectionHost, new LogicalFileSystem(this.rootDirs)), ]); - aliasingHost = this.bundle.entryPoint.generateDeepReexports? - new PrivateExportAliasingHost(this.reflectionHost): null; + aliasingHost = this.bundle.entryPoint.generateDeepReexports ? + new PrivateExportAliasingHost(this.reflectionHost) : + null; dtsModuleScopeResolver = new MetadataDtsModuleScopeResolver(this.dtsMetaReader, this.aliasingHost); scopeRegistry = new LocalModuleScopeRegistry( @@ -191,7 +196,9 @@ export class DecorationAnalyzer { }); } - protected reportDiagnostics() { this.compiler.diagnostics.forEach(this.diagnosticHandler); } + protected reportDiagnostics() { + this.compiler.diagnostics.forEach(this.diagnosticHandler); + } protected compileFile(sourceFile: ts.SourceFile): CompiledFile { const constantPool = new ConstantPool(); @@ -211,7 +218,8 @@ export class DecorationAnalyzer { compiledClasses.push({ name: record.node.name.text, decorators: this.compiler.getAllDecorators(record.node), - declaration: record.node, compilation + declaration: record.node, + compilation }); } @@ -224,7 +232,7 @@ export class DecorationAnalyzer { if (!exportStatements.has(sf.fileName)) { return []; } - const exports = exportStatements.get(sf.fileName) !; + const exports = exportStatements.get(sf.fileName)!; const reexports: Reexport[] = []; exports.forEach(([fromModule, symbolName], asAlias) => { diff --git a/packages/compiler-cli/ngcc/src/analysis/module_with_providers_analyzer.ts b/packages/compiler-cli/ngcc/src/analysis/module_with_providers_analyzer.ts index 8c6ad1ee83..eb7a0b4a8c 100644 --- a/packages/compiler-cli/ngcc/src/analysis/module_with_providers_analyzer.ts +++ b/packages/compiler-cli/ngcc/src/analysis/module_with_providers_analyzer.ts @@ -75,10 +75,9 @@ export class ModuleWithProvidersAnalyzer { const dtsClass = this.host.getDtsDeclaration(containerClass.declaration.valueDeclaration); // Get the declaration of the matching static method dtsFn = dtsClass && ts.isClassDeclaration(dtsClass) ? - dtsClass.members - .find( - member => ts.isMethodDeclaration(member) && ts.isIdentifier(member.name) && - member.name.text === fn.name) as ts.Declaration : + dtsClass.members.find( + member => ts.isMethodDeclaration(member) && ts.isIdentifier(member.name) && + member.name.text === fn.name) as ts.Declaration : null; } else { dtsFn = this.host.getDtsDeclaration(fn.declaration); @@ -87,8 +86,8 @@ export class ModuleWithProvidersAnalyzer { throw new Error(`Matching type declaration for ${fn.declaration.getText()} is missing`); } if (!isFunctionOrMethod(dtsFn)) { - throw new Error( - `Matching type declaration for ${fn.declaration.getText()} is not a function: ${dtsFn.getText()}`); + throw new Error(`Matching type declaration for ${ + fn.declaration.getText()} is not a function: ${dtsFn.getText()}`); } return dtsFn; } @@ -106,12 +105,14 @@ export class ModuleWithProvidersAnalyzer { // to its type declaration. const dtsNgModule = this.host.getDtsDeclaration(ngModule.node); if (!dtsNgModule) { - throw new Error( - `No typings declaration can be found for the referenced NgModule class in ${fn.declaration.getText()}.`); + throw new Error(`No typings declaration can be found for the referenced NgModule class in ${ + fn.declaration.getText()}.`); } if (!ts.isClassDeclaration(dtsNgModule) || !hasNameIdentifier(dtsNgModule)) { - throw new Error( - `The referenced NgModule in ${fn.declaration.getText()} is not a named class declaration in the typings program; instead we get ${dtsNgModule.getText()}`); + throw new Error(`The referenced NgModule in ${ + fn.declaration + .getText()} is not a named class declaration in the typings program; instead we get ${ + dtsNgModule.getText()}`); } return {node: dtsNgModule, known: null, viaModule: null}; diff --git a/packages/compiler-cli/ngcc/src/analysis/ngcc_references_registry.ts b/packages/compiler-cli/ngcc/src/analysis/ngcc_references_registry.ts index ba8e0dbb2d..f557cd9d6c 100644 --- a/packages/compiler-cli/ngcc/src/analysis/ngcc_references_registry.ts +++ b/packages/compiler-cli/ngcc/src/analysis/ngcc_references_registry.ts @@ -45,5 +45,7 @@ export class NgccReferencesRegistry implements ReferencesRegistry { * Create and return a mapping for the registered resolved references. * @returns A map of reference identifiers to reference declarations. */ - getDeclarationMap(): Map { return this.map; } + getDeclarationMap(): Map { + return this.map; + } } diff --git a/packages/compiler-cli/ngcc/src/analysis/ngcc_trait_compiler.ts b/packages/compiler-cli/ngcc/src/analysis/ngcc_trait_compiler.ts index f4d7f80fba..1c526bc78a 100644 --- a/packages/compiler-cli/ngcc/src/analysis/ngcc_trait_compiler.ts +++ b/packages/compiler-cli/ngcc/src/analysis/ngcc_trait_compiler.ts @@ -29,7 +29,9 @@ export class NgccTraitCompiler extends TraitCompiler { /* compileNonExportedClasses */ true, new DtsTransformRegistry()); } - get analyzedFiles(): ts.SourceFile[] { return Array.from(this.fileToClasses.keys()); } + get analyzedFiles(): ts.SourceFile[] { + return Array.from(this.fileToClasses.keys()); + } /** * Analyzes the source file in search for classes to process. For any class that is found in the @@ -81,5 +83,7 @@ export class NgccTraitCompiler extends TraitCompiler { } class NoIncrementalBuild implements IncrementalBuild { - priorWorkFor(sf: ts.SourceFile): any[]|null { return null; } + priorWorkFor(sf: ts.SourceFile): any[]|null { + return null; + } } diff --git a/packages/compiler-cli/ngcc/src/analysis/private_declarations_analyzer.ts b/packages/compiler-cli/ngcc/src/analysis/private_declarations_analyzer.ts index d005345201..afc99f2561 100644 --- a/packages/compiler-cli/ngcc/src/analysis/private_declarations_analyzer.ts +++ b/packages/compiler-cli/ngcc/src/analysis/private_declarations_analyzer.ts @@ -7,10 +7,11 @@ */ import * as ts from 'typescript'; -import {AbsoluteFsPath, absoluteFromSourceFile} from '../../../src/ngtsc/file_system'; +import {absoluteFromSourceFile, AbsoluteFsPath} from '../../../src/ngtsc/file_system'; import {ConcreteDeclaration} from '../../../src/ngtsc/reflection'; import {NgccReflectionHost} from '../host/ngcc_host'; import {hasNameIdentifier, isDefined} from '../utils'; + import {NgccReferencesRegistry} from './ngcc_references_registry'; export interface ExportInfo { @@ -48,7 +49,7 @@ export class PrivateDeclarationsAnalyzer { exports.forEach((declaration, exportedName) => { if (declaration.node !== null && hasNameIdentifier(declaration.node)) { if (privateDeclarations.has(declaration.node.name)) { - const privateDeclaration = privateDeclarations.get(declaration.node.name) !; + const privateDeclaration = privateDeclarations.get(declaration.node.name)!; if (privateDeclaration.node !== declaration.node) { throw new Error(`${declaration.node.name.text} is declared multiple times.`); } @@ -62,7 +63,7 @@ export class PrivateDeclarationsAnalyzer { return Array.from(privateDeclarations.keys()).map(id => { const from = absoluteFromSourceFile(id.getSourceFile()); - const declaration = privateDeclarations.get(id) !; + const declaration = privateDeclarations.get(id)!; const dtsDeclaration = this.host.getDtsDeclaration(declaration.node); const dtsFrom = dtsDeclaration && absoluteFromSourceFile(dtsDeclaration.getSourceFile()); diff --git a/packages/compiler-cli/ngcc/src/analysis/util.ts b/packages/compiler-cli/ngcc/src/analysis/util.ts index a953d4608c..ef4a3931da 100644 --- a/packages/compiler-cli/ngcc/src/analysis/util.ts +++ b/packages/compiler-cli/ngcc/src/analysis/util.ts @@ -7,7 +7,7 @@ */ import * as ts from 'typescript'; -import {AbsoluteFsPath, absoluteFromSourceFile, relative} from '../../../src/ngtsc/file_system'; +import {absoluteFromSourceFile, AbsoluteFsPath, relative} from '../../../src/ngtsc/file_system'; import {DependencyTracker} from '../../../src/ngtsc/incremental/api'; export function isWithinPackage(packagePath: AbsoluteFsPath, sourceFile: ts.SourceFile): boolean { diff --git a/packages/compiler-cli/ngcc/src/dependencies/commonjs_dependency_host.ts b/packages/compiler-cli/ngcc/src/dependencies/commonjs_dependency_host.ts index 3d4ab17b8e..ef783179ca 100644 --- a/packages/compiler-cli/ngcc/src/dependencies/commonjs_dependency_host.ts +++ b/packages/compiler-cli/ngcc/src/dependencies/commonjs_dependency_host.ts @@ -6,8 +6,10 @@ * found in the LICENSE file at https://angular.io/license */ import * as ts from 'typescript'; + import {AbsoluteFsPath} from '../../../src/ngtsc/file_system'; -import {RequireCall, isReexportStatement, isRequireCall} from '../host/commonjs_umd_utils'; +import {isReexportStatement, isRequireCall, RequireCall} from '../host/commonjs_umd_utils'; + import {DependencyHostBase} from './dependency_host'; import {ResolvedDeepImport, ResolvedRelativeModule} from './module_resolver'; @@ -120,5 +122,7 @@ export class CommonJsDependencyHost extends DependencyHostBase { * @returns false if there are definitely no require calls * in this file, true otherwise. */ - private hasRequireCalls(source: string): boolean { return /require\(['"]/.test(source); } + private hasRequireCalls(source: string): boolean { + return /require\(['"]/.test(source); + } } diff --git a/packages/compiler-cli/ngcc/src/dependencies/dependency_resolver.ts b/packages/compiler-cli/ngcc/src/dependencies/dependency_resolver.ts index ef9d2c4e55..9570ddcf4a 100644 --- a/packages/compiler-cli/ngcc/src/dependencies/dependency_resolver.ts +++ b/packages/compiler-cli/ngcc/src/dependencies/dependency_resolver.ts @@ -7,12 +7,14 @@ */ import {DepGraph} from 'dependency-graph'; + import {AbsoluteFsPath, FileSystem, resolve} from '../../../src/ngtsc/file_system'; import {Logger} from '../logging/logger'; import {NgccConfiguration} from '../packages/configuration'; -import {EntryPoint, EntryPointFormat, SUPPORTED_FORMAT_PROPERTIES, getEntryPointFormat} from '../packages/entry_point'; +import {EntryPoint, EntryPointFormat, getEntryPointFormat, SUPPORTED_FORMAT_PROPERTIES} from '../packages/entry_point'; import {PartiallyOrderedList} from '../utils'; -import {DependencyHost, DependencyInfo, createDependencyInfo} from './dependency_host'; + +import {createDependencyInfo, DependencyHost, DependencyInfo} from './dependency_host'; const builtinNodeJsModules = new Set(require('module').builtinModules); @@ -123,7 +125,8 @@ export class DependencyResolver { const host = this.hosts[formatInfo.format]; if (!host) { throw new Error( - `Could not find a suitable format for computing dependencies of entry-point: '${entryPoint.path}'.`); + `Could not find a suitable format for computing dependencies of entry-point: '${ + entryPoint.path}'.`); } const depInfo = createDependencyInfo(); host.collectDependencies(formatInfo.path, depInfo); diff --git a/packages/compiler-cli/ngcc/src/dependencies/module_resolver.ts b/packages/compiler-cli/ngcc/src/dependencies/module_resolver.ts index 1179dcd53f..82fc8e5f3c 100644 --- a/packages/compiler-cli/ngcc/src/dependencies/module_resolver.ts +++ b/packages/compiler-cli/ngcc/src/dependencies/module_resolver.ts @@ -5,8 +5,8 @@ * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ -import {AbsoluteFsPath, FileSystem, absoluteFrom, dirname, isRoot, join, resolve} from '../../../src/ngtsc/file_system'; -import {PathMappings, isRelativePath, resolveFileWithPostfixes} from '../utils'; +import {absoluteFrom, AbsoluteFsPath, dirname, FileSystem, isRoot, join, resolve} from '../../../src/ngtsc/file_system'; +import {isRelativePath, PathMappings, resolveFileWithPostfixes} from '../utils'; /** * This is a very cut-down implementation of the TypeScript module resolution strategy. @@ -222,7 +222,7 @@ export class ModuleResolver { } /** The result of resolving an import to a module. */ -export type ResolvedModule = ResolvedExternalModule | ResolvedRelativeModule | ResolvedDeepImport; +export type ResolvedModule = ResolvedExternalModule|ResolvedRelativeModule|ResolvedDeepImport; /** * A module that is external to the package doing the importing. diff --git a/packages/compiler-cli/ngcc/src/dependencies/umd_dependency_host.ts b/packages/compiler-cli/ngcc/src/dependencies/umd_dependency_host.ts index ab2eb677e5..7cc1b1c172 100644 --- a/packages/compiler-cli/ngcc/src/dependencies/umd_dependency_host.ts +++ b/packages/compiler-cli/ngcc/src/dependencies/umd_dependency_host.ts @@ -84,5 +84,7 @@ export class UmdDependencyHost extends DependencyHostBase { * @returns false if there are definitely no require calls * in this file, true otherwise. */ - private hasRequireCalls(source: string): boolean { return /require\(['"]/.test(source); } + private hasRequireCalls(source: string): boolean { + return /require\(['"]/.test(source); + } } diff --git a/packages/compiler-cli/ngcc/src/entry_point_finder/directory_walker_entry_point_finder.ts b/packages/compiler-cli/ngcc/src/entry_point_finder/directory_walker_entry_point_finder.ts index bf9e6cca9c..4e238a576e 100644 --- a/packages/compiler-cli/ngcc/src/entry_point_finder/directory_walker_entry_point_finder.ts +++ b/packages/compiler-cli/ngcc/src/entry_point_finder/directory_walker_entry_point_finder.ts @@ -9,10 +9,11 @@ import {AbsoluteFsPath, FileSystem, PathSegment} from '../../../src/ngtsc/file_s import {DependencyResolver, SortedEntryPointsInfo} from '../dependencies/dependency_resolver'; import {Logger} from '../logging/logger'; import {NgccConfiguration} from '../packages/configuration'; -import {EntryPoint, INCOMPATIBLE_ENTRY_POINT, NO_ENTRY_POINT, getEntryPointInfo} from '../packages/entry_point'; +import {EntryPoint, getEntryPointInfo, INCOMPATIBLE_ENTRY_POINT, NO_ENTRY_POINT} from '../packages/entry_point'; import {EntryPointManifest} from '../packages/entry_point_manifest'; import {PathMappings} from '../utils'; import {NGCC_DIRECTORY} from '../writing/new_entry_point_file_writer'; + import {EntryPointFinder} from './interface'; import {getBasePaths, trackDuration} from './utils'; diff --git a/packages/compiler-cli/ngcc/src/entry_point_finder/targeted_entry_point_finder.ts b/packages/compiler-cli/ngcc/src/entry_point_finder/targeted_entry_point_finder.ts index f21d4cd64c..3258561805 100644 --- a/packages/compiler-cli/ngcc/src/entry_point_finder/targeted_entry_point_finder.ts +++ b/packages/compiler-cli/ngcc/src/entry_point_finder/targeted_entry_point_finder.ts @@ -5,13 +5,14 @@ * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ -import {AbsoluteFsPath, FileSystem, PathSegment, join, relative, relativeFrom} from '../../../src/ngtsc/file_system'; +import {AbsoluteFsPath, FileSystem, join, PathSegment, relative, relativeFrom} from '../../../src/ngtsc/file_system'; import {DependencyResolver, SortedEntryPointsInfo} from '../dependencies/dependency_resolver'; import {Logger} from '../logging/logger'; import {hasBeenProcessed} from '../packages/build_marker'; import {NgccConfiguration} from '../packages/configuration'; -import {EntryPoint, EntryPointJsonProperty, INCOMPATIBLE_ENTRY_POINT, NO_ENTRY_POINT, getEntryPointInfo} from '../packages/entry_point'; +import {EntryPoint, EntryPointJsonProperty, getEntryPointInfo, INCOMPATIBLE_ENTRY_POINT, NO_ENTRY_POINT} from '../packages/entry_point'; import {PathMappings} from '../utils'; + import {EntryPointFinder} from './interface'; import {getBasePaths} from './utils'; @@ -76,7 +77,7 @@ export class TargetedEntryPointFinder implements EntryPointFinder { } private processNextPath(): void { - const path = this.unprocessedPaths.shift() !; + const path = this.unprocessedPaths.shift()!; const entryPoint = this.getEntryPoint(path); if (entryPoint === null || !entryPoint.compiledByAngular) { return; @@ -130,7 +131,7 @@ export class TargetedEntryPointFinder implements EntryPointFinder { // Start the search at the deepest nested `node_modules` folder that is below the `basePath` // but above the `entryPointPath`, if there are any. while (nodeModulesIndex >= 0) { - packagePath = join(packagePath, segments.shift() !); + packagePath = join(packagePath, segments.shift()!); nodeModulesIndex--; } diff --git a/packages/compiler-cli/ngcc/src/entry_point_finder/utils.ts b/packages/compiler-cli/ngcc/src/entry_point_finder/utils.ts index f2ea90da10..67f2a2f332 100644 --- a/packages/compiler-cli/ngcc/src/entry_point_finder/utils.ts +++ b/packages/compiler-cli/ngcc/src/entry_point_finder/utils.ts @@ -30,7 +30,7 @@ import {PathMappings} from '../utils'; */ export function getBasePaths( logger: Logger, sourceDirectory: AbsoluteFsPath, - pathMappings: PathMappings | undefined): AbsoluteFsPath[] { + pathMappings: PathMappings|undefined): AbsoluteFsPath[] { const fs = getFileSystem(); const basePaths = [sourceDirectory]; if (pathMappings) { @@ -51,7 +51,8 @@ export function getBasePaths( basePaths.push(basePath); } else { logger.warn( - `The basePath "${basePath}" computed from baseUrl "${baseUrl}" and path mapping "${path}" does not exist in the file-system.\n` + + `The basePath "${basePath}" computed from baseUrl "${baseUrl}" and path mapping "${ + path}" does not exist in the file-system.\n` + `It will not be scanned for entry-points.`); } })); @@ -109,8 +110,8 @@ function removeContainedPaths(value: AbsoluteFsPath, index: number, array: Absol * @param log The function to call with the duration of the task * @returns The result of calling `task`. */ -export function trackDuration( - task: () => T extends Promise? never : T, log: (duration: number) => void): T { +export function trackDuration(task: () => T extends Promise? never : T, + log: (duration: number) => void): T { const startTime = Date.now(); const result = task(); const duration = Math.round((Date.now() - startTime) / 100) / 10; diff --git a/packages/compiler-cli/ngcc/src/execution/cluster/api.ts b/packages/compiler-cli/ngcc/src/execution/cluster/api.ts index 970e3fd5be..2325d52670 100644 --- a/packages/compiler-cli/ngcc/src/execution/cluster/api.ts +++ b/packages/compiler-cli/ngcc/src/execution/cluster/api.ts @@ -44,7 +44,7 @@ export interface UpdatePackageJsonMessage extends JsonObject { } /** The type of messages sent from cluster workers to the cluster master. */ -export type MessageFromWorker = ErrorMessage | TaskCompletedMessage | UpdatePackageJsonMessage; +export type MessageFromWorker = ErrorMessage|TaskCompletedMessage|UpdatePackageJsonMessage; /** The type of messages sent from the cluster master to cluster workers. */ export type MessageToWorker = ProcessTaskMessage; diff --git a/packages/compiler-cli/ngcc/src/execution/cluster/executor.ts b/packages/compiler-cli/ngcc/src/execution/cluster/executor.ts index dd381bb81c..333a8e4e72 100644 --- a/packages/compiler-cli/ngcc/src/execution/cluster/executor.ts +++ b/packages/compiler-cli/ngcc/src/execution/cluster/executor.ts @@ -35,8 +35,8 @@ export class ClusterExecutor implements Executor { if (cluster.isMaster) { // This process is the cluster master. return this.lockFile.lock(() => { - this.logger.debug( - `Running ngcc on ${this.constructor.name} (using ${this.workerCount} worker processes).`); + this.logger.debug(`Running ngcc on ${this.constructor.name} (using ${ + this.workerCount} worker processes).`); const master = new ClusterMaster( this.workerCount, this.logger, this.pkgJsonUpdater, analyzeEntryPoints, this.createTaskCompletedCallback); diff --git a/packages/compiler-cli/ngcc/src/execution/cluster/master.ts b/packages/compiler-cli/ngcc/src/execution/cluster/master.ts index 9976b4b327..e40e42009a 100644 --- a/packages/compiler-cli/ngcc/src/execution/cluster/master.ts +++ b/packages/compiler-cli/ngcc/src/execution/cluster/master.ts @@ -262,7 +262,7 @@ export class ClusterMaster { */ private wrapEventHandler(fn: (...args: Args) => void|Promise): (...args: Args) => Promise { - return async(...args: Args) => { + return async (...args: Args) => { try { await fn(...args); } catch (err) { diff --git a/packages/compiler-cli/ngcc/src/execution/cluster/package_json_updater.ts b/packages/compiler-cli/ngcc/src/execution/cluster/package_json_updater.ts index 6014045507..7196cce6b4 100644 --- a/packages/compiler-cli/ngcc/src/execution/cluster/package_json_updater.ts +++ b/packages/compiler-cli/ngcc/src/execution/cluster/package_json_updater.ts @@ -12,7 +12,7 @@ import * as cluster from 'cluster'; import {AbsoluteFsPath} from '../../../../src/ngtsc/file_system'; import {JsonObject} from '../../packages/entry_point'; -import {PackageJsonChange, PackageJsonUpdate, PackageJsonUpdater, applyChange} from '../../writing/package_json_updater'; +import {applyChange, PackageJsonChange, PackageJsonUpdate, PackageJsonUpdater} from '../../writing/package_json_updater'; import {sendMessageToMaster} from './utils'; diff --git a/packages/compiler-cli/ngcc/src/execution/cluster/utils.ts b/packages/compiler-cli/ngcc/src/execution/cluster/utils.ts index 351cf58e73..b9ca051299 100644 --- a/packages/compiler-cli/ngcc/src/execution/cluster/utils.ts +++ b/packages/compiler-cli/ngcc/src/execution/cluster/utils.ts @@ -23,14 +23,14 @@ export class Deferred { * * @param value The value to resolve the promise with. */ - resolve !: (value: T) => void; + resolve!: (value: T) => void; /** * Rejects the associated promise with the specified reason. * * @param reason The rejection reason. */ - reject !: (reason: any) => void; + reject!: (reason: any) => void; /** The `Promise` instance associated with this deferred. */ promise = new Promise((resolve, reject) => { diff --git a/packages/compiler-cli/ngcc/src/execution/single_process_executor.ts b/packages/compiler-cli/ngcc/src/execution/single_process_executor.ts index 6d6dbf0553..20f494af19 100644 --- a/packages/compiler-cli/ngcc/src/execution/single_process_executor.ts +++ b/packages/compiler-cli/ngcc/src/execution/single_process_executor.ts @@ -30,7 +30,7 @@ export abstract class SingleProcessorExecutorBase { const startTime = Date.now(); while (!taskQueue.allTasksCompleted) { - const task = taskQueue.getNextTask() !; + const task = taskQueue.getNextTask()!; compile(task); taskQueue.markTaskCompleted(task); } @@ -65,6 +65,6 @@ export class SingleProcessExecutorAsync extends SingleProcessorExecutorBase impl } async execute(analyzeEntryPoints: AnalyzeEntryPointsFn, createCompileFn: CreateCompileFn): Promise { - await this.lockFile.lock(async() => this.doExecute(analyzeEntryPoints, createCompileFn)); + await this.lockFile.lock(async () => this.doExecute(analyzeEntryPoints, createCompileFn)); } } diff --git a/packages/compiler-cli/ngcc/src/execution/tasks/api.ts b/packages/compiler-cli/ngcc/src/execution/tasks/api.ts index ed2fd2165b..0516b66db8 100644 --- a/packages/compiler-cli/ngcc/src/execution/tasks/api.ts +++ b/packages/compiler-cli/ngcc/src/execution/tasks/api.ts @@ -66,7 +66,7 @@ export type CreateTaskCompletedCallback = (taskQueue: TaskQueue) => TaskComplete * A function to be called once a task has been processed. */ export type TaskCompletedCallback = - (task: Task, outcome: TaskProcessingOutcome, message: string | null) => void; + (task: Task, outcome: TaskProcessingOutcome, message: string|null) => void; /** * Represents the outcome of processing a `Task`. diff --git a/packages/compiler-cli/ngcc/src/execution/tasks/completion.ts b/packages/compiler-cli/ngcc/src/execution/tasks/completion.ts index 5a8111fa9a..88f2879aab 100644 --- a/packages/compiler-cli/ngcc/src/execution/tasks/completion.ts +++ b/packages/compiler-cli/ngcc/src/execution/tasks/completion.ts @@ -8,8 +8,9 @@ import {FileSystem, resolve} from '../../../../src/ngtsc/file_system'; import {Logger} from '../../logging/logger'; import {markAsProcessed} from '../../packages/build_marker'; -import {PackageJsonFormatProperties, getEntryPointFormat} from '../../packages/entry_point'; +import {getEntryPointFormat, PackageJsonFormatProperties} from '../../packages/entry_point'; import {PackageJsonUpdater} from '../../writing/package_json_updater'; + import {Task, TaskCompletedCallback, TaskProcessingOutcome, TaskQueue} from './api'; /** @@ -18,7 +19,7 @@ import {Task, TaskCompletedCallback, TaskProcessingOutcome, TaskQueue} from './a * These functions can be composed using the `composeTaskCompletedCallbacks()` * to create a `TaskCompletedCallback` function that can be passed to an `Executor`. */ -export type TaskCompletedHandler = (task: Task, message: string | null) => void; +export type TaskCompletedHandler = (task: Task, message: string|null) => void; /** * Compose a group of TaskCompletedHandlers into a single TaskCompletedCallback. @@ -30,11 +31,11 @@ export type TaskCompletedHandler = (task: Task, message: string | null) => void; */ export function composeTaskCompletedCallbacks( callbacks: Record): TaskCompletedCallback { - return (task: Task, outcome: TaskProcessingOutcome, message: string | null): void => { + return (task: Task, outcome: TaskProcessingOutcome, message: string|null): void => { const callback = callbacks[outcome]; if (callback === undefined) { - throw new Error( - `Unknown task outcome: "${outcome}" - supported outcomes: ${JSON.stringify(Object.keys(callbacks))}`); + throw new Error(`Unknown task outcome: "${outcome}" - supported outcomes: ${ + JSON.stringify(Object.keys(callbacks))}`); } callback(task, message); }; @@ -64,10 +65,11 @@ export function createMarkAsProcessedHandler(pkgJsonUpdater: PackageJsonUpdater) * Create a handler that will throw an error. */ export function createThrowErrorHandler(fs: FileSystem): TaskCompletedHandler { - return (task: Task, message: string | null): void => { + return (task: Task, message: string|null): void => { const format = getEntryPointFormat(fs, task.entryPoint, task.formatProperty); throw new Error( - `Failed to compile entry-point ${task.entryPoint.name} (${task.formatProperty} as ${format})` + + `Failed to compile entry-point ${task.entryPoint.name} (${task.formatProperty} as ${ + format})` + (message !== null ? ` due to ${message}` : '')); }; } @@ -77,11 +79,12 @@ export function createThrowErrorHandler(fs: FileSystem): TaskCompletedHandler { */ export function createLogErrorHandler( logger: Logger, fs: FileSystem, taskQueue: TaskQueue): TaskCompletedHandler { - return (task: Task, message: string | null): void => { + return (task: Task, message: string|null): void => { taskQueue.markAsFailed(task); const format = getEntryPointFormat(fs, task.entryPoint, task.formatProperty); logger.error( - `Failed to compile entry-point ${task.entryPoint.name} (${task.formatProperty} as ${format})` + + `Failed to compile entry-point ${task.entryPoint.name} (${task.formatProperty} as ${ + format})` + (message !== null ? ` due to ${message}` : '')); }; } diff --git a/packages/compiler-cli/ngcc/src/execution/tasks/queues/base_task_queue.ts b/packages/compiler-cli/ngcc/src/execution/tasks/queues/base_task_queue.ts index de1497fb66..cd709f1a1c 100644 --- a/packages/compiler-cli/ngcc/src/execution/tasks/queues/base_task_queue.ts +++ b/packages/compiler-cli/ngcc/src/execution/tasks/queues/base_task_queue.ts @@ -38,9 +38,9 @@ export abstract class BaseTaskQueue implements TaskQueue { } // We are skipping this task so mark it as complete this.markTaskCompleted(nextTask); - const failedTask = this.tasksToSkip.get(nextTask) !; - this.logger.warn( - `Skipping processing of ${nextTask.entryPoint.name} because its dependency ${failedTask.entryPoint.name} failed to compile.`); + const failedTask = this.tasksToSkip.get(nextTask)!; + this.logger.warn(`Skipping processing of ${nextTask.entryPoint.name} because its dependency ${ + failedTask.entryPoint.name} failed to compile.`); nextTask = this.computeNextTask(); } return nextTask; @@ -48,7 +48,7 @@ export abstract class BaseTaskQueue implements TaskQueue { markAsFailed(task: Task) { if (this.dependencies.has(task)) { - for (const dependentTask of this.dependencies.get(task) !) { + for (const dependentTask of this.dependencies.get(task)!) { this.skipDependentTasks(dependentTask, task); } } @@ -81,7 +81,7 @@ export abstract class BaseTaskQueue implements TaskQueue { protected skipDependentTasks(task: Task, failedTask: Task) { this.tasksToSkip.set(task, failedTask); if (this.dependencies.has(task)) { - for (const dependentTask of this.dependencies.get(task) !) { + for (const dependentTask of this.dependencies.get(task)!) { this.skipDependentTasks(dependentTask, failedTask); } } diff --git a/packages/compiler-cli/ngcc/src/execution/tasks/queues/parallel_task_queue.ts b/packages/compiler-cli/ngcc/src/execution/tasks/queues/parallel_task_queue.ts index b7f7ef9fc2..2718a0ee05 100644 --- a/packages/compiler-cli/ngcc/src/execution/tasks/queues/parallel_task_queue.ts +++ b/packages/compiler-cli/ngcc/src/execution/tasks/queues/parallel_task_queue.ts @@ -49,9 +49,9 @@ export class ParallelTaskQueue extends BaseTaskQueue { } // Unblock the tasks that are dependent upon `task` - for (const dependentTask of this.dependencies.get(task) !) { + for (const dependentTask of this.dependencies.get(task)!) { if (this.blockedTasks.has(dependentTask)) { - const blockingTasks = this.blockedTasks.get(dependentTask) !; + const blockingTasks = this.blockedTasks.get(dependentTask)!; // Remove the completed task from the lists of tasks blocking other tasks. blockingTasks.delete(task); if (blockingTasks.size === 0) { diff --git a/packages/compiler-cli/ngcc/src/execution/tasks/utils.ts b/packages/compiler-cli/ngcc/src/execution/tasks/utils.ts index 26682a82ac..22846a361e 100644 --- a/packages/compiler-cli/ngcc/src/execution/tasks/utils.ts +++ b/packages/compiler-cli/ngcc/src/execution/tasks/utils.ts @@ -10,8 +10,8 @@ import {EntryPoint} from '../../packages/entry_point'; import {PartiallyOrderedTasks, Task, TaskDependencies} from './api'; /** Stringify a task for debugging purposes. */ -export const stringifyTask = (task: Task): string => - `{entryPoint: ${task.entryPoint.name}, formatProperty: ${task.formatProperty}, processDts: ${task.processDts}}`; +export const stringifyTask = (task: Task): string => `{entryPoint: ${ + task.entryPoint.name}, formatProperty: ${task.formatProperty}, processDts: ${task.processDts}}`; /** * Compute a mapping of tasks to the tasks that are dependent on them (if any). @@ -45,7 +45,7 @@ export function computeTaskDependencies( // Find the earlier tasks (`candidateDependencies`) that this task depends upon. const deps = graph.dependenciesOf(entryPointPath); const taskDependencies = deps.filter(dep => candidateDependencies.has(dep)) - .map(dep => candidateDependencies.get(dep) !); + .map(dep => candidateDependencies.get(dep)!); // If this task has dependencies, add it to the dependencies and dependents maps. if (taskDependencies.length > 0) { @@ -61,7 +61,7 @@ export function computeTaskDependencies( // dependency of other tasks), so the following should theoretically never happen, but check // just in case. if (candidateDependencies.has(entryPointPath)) { - const otherTask = candidateDependencies.get(entryPointPath) !; + const otherTask = candidateDependencies.get(entryPointPath)!; throw new Error( 'Invariant violated: Multiple tasks are assigned generating typings for ' + `'${entryPointPath}':\n - ${stringifyTask(otherTask)}\n - ${stringifyTask(task)}`); @@ -73,7 +73,7 @@ export function computeTaskDependencies( // This task is not generating typings so we need to add it to the dependents of the task that // does generate typings, if that exists if (candidateDependencies.has(entryPointPath)) { - const typingsTask = candidateDependencies.get(entryPointPath) !; + const typingsTask = candidateDependencies.get(entryPointPath)!; const typingsTaskDependents = getDependentsSet(dependencies, typingsTask); typingsTaskDependents.add(task); } @@ -87,7 +87,7 @@ export function getDependentsSet(map: TaskDependencies, task: Task): Set { if (!map.has(task)) { map.set(task, new Set()); } - return map.get(task) !; + return map.get(task)!; } /** @@ -125,13 +125,13 @@ export function sortTasksByPriority( tasks: PartiallyOrderedTasks, dependencies: TaskDependencies): PartiallyOrderedTasks { const priorityPerTask = new Map(); const computePriority = (task: Task, idx: number): - [number, number] => [dependencies.has(task) ? dependencies.get(task) !.size : 0, idx]; + [number, number] => [dependencies.has(task) ? dependencies.get(task)!.size : 0, idx]; tasks.forEach((task, i) => priorityPerTask.set(task, computePriority(task, i))); return tasks.slice().sort((task1, task2) => { - const [p1, idx1] = priorityPerTask.get(task1) !; - const [p2, idx2] = priorityPerTask.get(task2) !; + const [p1, idx1] = priorityPerTask.get(task1)!; + const [p2, idx2] = priorityPerTask.get(task2)!; return (p2 - p1) || (idx1 - idx2); }); diff --git a/packages/compiler-cli/ngcc/src/host/commonjs_host.ts b/packages/compiler-cli/ngcc/src/host/commonjs_host.ts index 00b4bf4f5b..a2ba25cfbf 100644 --- a/packages/compiler-cli/ngcc/src/host/commonjs_host.ts +++ b/packages/compiler-cli/ngcc/src/host/commonjs_host.ts @@ -7,13 +7,14 @@ */ import * as ts from 'typescript'; + import {absoluteFrom} from '../../../src/ngtsc/file_system'; import {Declaration, Import} from '../../../src/ngtsc/reflection'; import {Logger} from '../logging/logger'; import {BundleProgram} from '../packages/bundle_program'; import {FactoryMap, getTsHelperFnFromIdentifier, isDefined, stripExtension} from '../utils'; -import {ExportDeclaration, ExportStatement, ReexportStatement, RequireCall, findNamespaceOfIdentifier, findRequireCallReference, isExportStatement, isReexportStatement, isRequireCall} from './commonjs_umd_utils'; +import {ExportDeclaration, ExportStatement, findNamespaceOfIdentifier, findRequireCallReference, isExportStatement, isReexportStatement, isRequireCall, ReexportStatement, RequireCall} from './commonjs_umd_utils'; import {Esm5ReflectionHost} from './esm5_host'; import {NgccClassSymbol} from './ngcc_host'; diff --git a/packages/compiler-cli/ngcc/src/host/commonjs_umd_utils.ts b/packages/compiler-cli/ngcc/src/host/commonjs_umd_utils.ts index 86ddc95503..e871034f99 100644 --- a/packages/compiler-cli/ngcc/src/host/commonjs_umd_utils.ts +++ b/packages/compiler-cli/ngcc/src/host/commonjs_umd_utils.ts @@ -16,7 +16,12 @@ export interface ExportDeclaration { } export interface ExportStatement extends ts.ExpressionStatement { - expression: ts.BinaryExpression&{left: ts.PropertyAccessExpression & {expression: ts.Identifier}}; + expression: ts.BinaryExpression&{ + left: ts.PropertyAccessExpression & + { + expression: ts.Identifier + } + }; } /** @@ -34,7 +39,9 @@ export interface ExportStatement extends ts.ExpressionStatement { * expression and can be either a `require('...')` call or an identifier (initialized via a * `require('...')` call). */ -export interface ReexportStatement extends ts.ExpressionStatement { expression: ts.CallExpression; } +export interface ReexportStatement extends ts.ExpressionStatement { + expression: ts.CallExpression; +} export interface RequireCall extends ts.CallExpression { arguments: ts.CallExpression['arguments']&[ts.StringLiteral]; diff --git a/packages/compiler-cli/ngcc/src/host/umd_host.ts b/packages/compiler-cli/ngcc/src/host/umd_host.ts index b053820c77..a9ef6bb565 100644 --- a/packages/compiler-cli/ngcc/src/host/umd_host.ts +++ b/packages/compiler-cli/ngcc/src/host/umd_host.ts @@ -13,7 +13,8 @@ import {Declaration, Import} from '../../../src/ngtsc/reflection'; import {Logger} from '../logging/logger'; import {BundleProgram} from '../packages/bundle_program'; import {FactoryMap, getTsHelperFnFromIdentifier, stripExtension} from '../utils'; -import {ExportDeclaration, ExportStatement, ReexportStatement, findNamespaceOfIdentifier, findRequireCallReference, isExportStatement, isReexportStatement, isRequireCall} from './commonjs_umd_utils'; + +import {ExportDeclaration, ExportStatement, findNamespaceOfIdentifier, findRequireCallReference, isExportStatement, isReexportStatement, isRequireCall, ReexportStatement} from './commonjs_umd_utils'; import {Esm5ReflectionHost, stripParentheses} from './esm5_host'; export class UmdReflectionHost extends Esm5ReflectionHost { @@ -61,7 +62,8 @@ export class UmdReflectionHost extends Esm5ReflectionHost { return this.umdImportPaths.get(importParameter); } - /** Get the top level statements for a module. + /** + * Get the top level statements for a module. * * In UMD modules these are the body of the UMD factory function. * diff --git a/packages/compiler-cli/ngcc/src/locking/async_locker.ts b/packages/compiler-cli/ngcc/src/locking/async_locker.ts index 56bc531357..f0ee1b7393 100644 --- a/packages/compiler-cli/ngcc/src/locking/async_locker.ts +++ b/packages/compiler-cli/ngcc/src/locking/async_locker.ts @@ -52,7 +52,7 @@ export class AsyncLocker { if (attempts === 0) { this.logger.info( `Another process, with id ${pid}, is currently running ngcc.\n` + - `Waiting up to ${this.retryDelay*this.retryAttempts/1000}s for it to finish.`); + `Waiting up to ${this.retryDelay * this.retryAttempts / 1000}s for it to finish.`); } // The file is still locked by another process so wait for a bit and retry await new Promise(resolve => setTimeout(resolve, this.retryDelay)); @@ -60,7 +60,10 @@ export class AsyncLocker { } // If we fall out of the loop then we ran out of rety attempts throw new Error( - `Timed out waiting ${this.retryAttempts * this.retryDelay/1000}s for another ngcc process, with id ${pid}, to complete.\n` + - `(If you are sure no ngcc process is running then you should delete the lock-file at ${this.lockFile.path}.)`); + `Timed out waiting ${ + this.retryAttempts * this.retryDelay / + 1000}s for another ngcc process, with id ${pid}, to complete.\n` + + `(If you are sure no ngcc process is running then you should delete the lock-file at ${ + this.lockFile.path}.)`); } } diff --git a/packages/compiler-cli/ngcc/src/locking/lock_file_with_child_process/index.ts b/packages/compiler-cli/ngcc/src/locking/lock_file_with_child_process/index.ts index 8cde3e462b..cbabff7719 100644 --- a/packages/compiler-cli/ngcc/src/locking/lock_file_with_child_process/index.ts +++ b/packages/compiler-cli/ngcc/src/locking/lock_file_with_child_process/index.ts @@ -8,8 +8,8 @@ import {ChildProcess, fork} from 'child_process'; import {AbsoluteFsPath, CachedFileSystem, FileSystem} from '../../../../src/ngtsc/file_system'; -import {LogLevel, Logger} from '../../logging/logger'; -import {LockFile, getLockFilePath} from '../lock_file'; +import {Logger, LogLevel} from '../../logging/logger'; +import {getLockFilePath, LockFile} from '../lock_file'; import {removeLockFile} from './util'; diff --git a/packages/compiler-cli/ngcc/src/locking/lock_file_with_child_process/unlocker.ts b/packages/compiler-cli/ngcc/src/locking/lock_file_with_child_process/unlocker.ts index 798613541a..b31f21f966 100644 --- a/packages/compiler-cli/ngcc/src/locking/lock_file_with_child_process/unlocker.ts +++ b/packages/compiler-cli/ngcc/src/locking/lock_file_with_child_process/unlocker.ts @@ -20,14 +20,14 @@ const fs = new NodeJSFileSystem(); // We create a logger that has the same logging level as the parent process, since it should have // been passed through as one of the args -const logLevel = parseInt(process.argv.pop() !, 10); +const logLevel = parseInt(process.argv.pop()!, 10); const logger = new ConsoleLogger(logLevel); // We must store the parent PID now as it changes if the parent process is killed early const ppid = process.ppid.toString(); // The path to the lock-file to remove should have been passed as one of the args -const lockFilePath = fs.resolve(process.argv.pop() !); +const lockFilePath = fs.resolve(process.argv.pop()!); logger.debug(`Starting unlocker at process ${process.pid} on behalf of process ${ppid}`); logger.debug(`The lock-file path is ${lockFilePath}`); @@ -36,4 +36,6 @@ logger.debug(`The lock-file path is ${lockFilePath}`); * When the parent process exits (for whatever reason) remove the loc-file if it exists and as long * as it was one that was created by the parent process. */ -process.on('disconnect', () => { removeLockFile(fs, logger, lockFilePath, ppid); }); +process.on('disconnect', () => { + removeLockFile(fs, logger, lockFilePath, ppid); +}); diff --git a/packages/compiler-cli/ngcc/src/locking/sync_locker.ts b/packages/compiler-cli/ngcc/src/locking/sync_locker.ts index 391ca822e3..6c58cbe41d 100644 --- a/packages/compiler-cli/ngcc/src/locking/sync_locker.ts +++ b/packages/compiler-cli/ngcc/src/locking/sync_locker.ts @@ -57,6 +57,7 @@ export class SyncLocker { `ngcc is already running at process with id ${pid}.\n` + `If you are running multiple builds in parallel then you should pre-process your node_modules via the command line ngcc tool before starting the builds;\n` + `See https://v9.angular.io/guide/ivy#speeding-up-ngcc-compilation.\n` + - `(If you are sure no ngcc process is running then you should delete the lock-file at ${this.lockFile.path}.)`); + `(If you are sure no ngcc process is running then you should delete the lock-file at ${ + this.lockFile.path}.)`); } } diff --git a/packages/compiler-cli/ngcc/src/logging/console_logger.ts b/packages/compiler-cli/ngcc/src/logging/console_logger.ts index 040bce9513..66acf79b8a 100644 --- a/packages/compiler-cli/ngcc/src/logging/console_logger.ts +++ b/packages/compiler-cli/ngcc/src/logging/console_logger.ts @@ -5,7 +5,7 @@ * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ -import {LogLevel, Logger} from './logger'; +import {Logger, LogLevel} from './logger'; const RESET = '\x1b[0m'; const RED = '\x1b[31m'; diff --git a/packages/compiler-cli/ngcc/src/main.ts b/packages/compiler-cli/ngcc/src/main.ts index a069b8b03b..e0565b4c5b 100644 --- a/packages/compiler-cli/ngcc/src/main.ts +++ b/packages/compiler-cli/ngcc/src/main.ts @@ -14,7 +14,7 @@ import * as ts from 'typescript'; import {readConfiguration} from '../..'; import {replaceTsWithNgInErrors} from '../../src/ngtsc/diagnostics'; -import {AbsoluteFsPath, FileSystem, absoluteFrom, dirname, getFileSystem, resolve} from '../../src/ngtsc/file_system'; +import {absoluteFrom, AbsoluteFsPath, dirname, FileSystem, getFileSystem, resolve} from '../../src/ngtsc/file_system'; import {CommonJsDependencyHost} from './dependencies/commonjs_dependency_host'; import {DependencyResolver, InvalidEntryPoint} from './dependencies/dependency_resolver'; @@ -38,10 +38,10 @@ import {AsyncLocker} from './locking/async_locker'; import {LockFileWithChildProcess} from './locking/lock_file_with_child_process'; import {SyncLocker} from './locking/sync_locker'; import {ConsoleLogger} from './logging/console_logger'; -import {LogLevel, Logger} from './logging/logger'; +import {Logger, LogLevel} from './logging/logger'; import {hasBeenProcessed} from './packages/build_marker'; import {NgccConfiguration} from './packages/configuration'; -import {EntryPoint, EntryPointJsonProperty, EntryPointPackageJson, SUPPORTED_FORMAT_PROPERTIES, getEntryPointFormat} from './packages/entry_point'; +import {EntryPoint, EntryPointJsonProperty, EntryPointPackageJson, getEntryPointFormat, SUPPORTED_FORMAT_PROPERTIES} from './packages/entry_point'; import {makeEntryPointBundle} from './packages/entry_point_bundle'; import {EntryPointManifest, InvalidatingEntryPointManifest} from './packages/entry_point_manifest'; import {Transformer} from './packages/transformer'; @@ -164,12 +164,12 @@ export interface SyncNgccOptions { /** * The options to configure the ngcc compiler for asynchronous execution. */ -export type AsyncNgccOptions = Omit& {async: true}; +export type AsyncNgccOptions = Omit&{async: true}; /** * The options to configure the ngcc compiler. */ -export type NgccOptions = AsyncNgccOptions | SyncNgccOptions; +export type NgccOptions = AsyncNgccOptions|SyncNgccOptions; /** * This is the main entry-point into ngcc (aNGular Compatibility Compiler). @@ -181,12 +181,20 @@ export type NgccOptions = AsyncNgccOptions | SyncNgccOptions; */ export function mainNgcc(options: AsyncNgccOptions): Promise; export function mainNgcc(options: SyncNgccOptions): void; -export function mainNgcc( - {basePath, targetEntryPointPath, propertiesToConsider = SUPPORTED_FORMAT_PROPERTIES, - compileAllFormats = true, createNewEntryPointFormats = false, - logger = new ConsoleLogger(LogLevel.info), pathMappings, async = false, - errorOnFailedEntryPoint = false, enableI18nLegacyMessageIdFormat = true, - invalidateEntryPointManifest = false, tsConfigPath}: NgccOptions): void|Promise { +export function mainNgcc({ + basePath, + targetEntryPointPath, + propertiesToConsider = SUPPORTED_FORMAT_PROPERTIES, + compileAllFormats = true, + createNewEntryPointFormats = false, + logger = new ConsoleLogger(LogLevel.info), + pathMappings, + async = false, + errorOnFailedEntryPoint = false, + enableI18nLegacyMessageIdFormat = true, + invalidateEntryPointManifest = false, + tsConfigPath +}: NgccOptions): void|Promise { if (!!targetEntryPointPath) { // targetEntryPointPath forces us to error if an entry-point fails. errorOnFailedEntryPoint = true; @@ -279,7 +287,7 @@ export function mainNgcc( continue; } - const formatPropertiesToMarkAsProcessed = equivalentPropertiesMap.get(formatProperty) !; + const formatPropertiesToMarkAsProcessed = equivalentPropertiesMap.get(formatProperty)!; tasks.push({entryPoint, formatProperty, formatPropertiesToMarkAsProcessed, processDts}); // Only process typings for the first property (if not already processed). @@ -442,7 +450,7 @@ function getExecutor( function getDependencyResolver( fileSystem: FileSystem, logger: Logger, config: NgccConfiguration, - pathMappings: PathMappings | undefined): DependencyResolver { + pathMappings: PathMappings|undefined): DependencyResolver { const moduleResolver = new ModuleResolver(fileSystem, pathMappings); const esmDependencyHost = new EsmDependencyHost(fileSystem, moduleResolver); const umdDependencyHost = new UmdDependencyHost(fileSystem, moduleResolver); @@ -461,8 +469,8 @@ function getDependencyResolver( function getEntryPointFinder( fs: FileSystem, logger: Logger, resolver: DependencyResolver, config: NgccConfiguration, entryPointManifest: EntryPointManifest, basePath: AbsoluteFsPath, - absoluteTargetEntryPointPath: AbsoluteFsPath | null, - pathMappings: PathMappings | undefined): EntryPointFinder { + absoluteTargetEntryPointPath: AbsoluteFsPath|null, + pathMappings: PathMappings|undefined): EntryPointFinder { if (absoluteTargetEntryPointPath !== null) { return new TargetedEntryPointFinder( fs, config, logger, resolver, basePath, absoluteTargetEntryPointPath, pathMappings); @@ -533,7 +541,7 @@ function getPropertiesToProcess( const equivalentPropertiesMap = new Map(); for (const prop of propertiesToConsider) { - const formatPath = packageJson[prop] !; + const formatPath = packageJson[prop]!; const equivalentProperties = formatPathToProperties[formatPath]; equivalentPropertiesMap.set(prop, equivalentProperties); } diff --git a/packages/compiler-cli/ngcc/src/migrations/missing_injectable_migration.ts b/packages/compiler-cli/ngcc/src/migrations/missing_injectable_migration.ts index 8c590a0887..1affab1b79 100644 --- a/packages/compiler-cli/ngcc/src/migrations/missing_injectable_migration.ts +++ b/packages/compiler-cli/ngcc/src/migrations/missing_injectable_migration.ts @@ -102,7 +102,7 @@ function migrateProviders(metadata: ResolvedValueMap, field: string, host: Migra if (!metadata.has(field)) { return; } - const providers = metadata.get(field) !; + const providers = metadata.get(field)!; if (!Array.isArray(providers)) { return; } @@ -127,10 +127,10 @@ function migrateProvider(provider: ResolvedValue, host: MigrationHost): void { // as the provider itself configures 'deps'. Only if 'deps' is missing will this require a // factory to exist on SomeClass. if (!provider.has('deps')) { - migrateProviderClass(provider.get('useClass') !, host); + migrateProviderClass(provider.get('useClass')!, host); } } else { - migrateProviderClass(provider.get('provide') !, host); + migrateProviderClass(provider.get('provide')!, host); } } else if (Array.isArray(provider)) { for (const v of provider) { diff --git a/packages/compiler-cli/ngcc/src/migrations/utils.ts b/packages/compiler-cli/ngcc/src/migrations/utils.ts index c51b95014b..1437f46b35 100644 --- a/packages/compiler-cli/ngcc/src/migrations/utils.ts +++ b/packages/compiler-cli/ngcc/src/migrations/utils.ts @@ -43,7 +43,7 @@ export function hasConstructor(host: MigrationHost, clazz: ClassDeclaration): bo */ export function createDirectiveDecorator( clazz: ClassDeclaration, - metadata?: {selector: string | null, exportAs: string[] | null}): Decorator { + metadata?: {selector: string|null, exportAs: string[]|null}): Decorator { const args: ts.Expression[] = []; if (metadata !== undefined) { const metaArgs: ts.PropertyAssignment[] = []; @@ -60,7 +60,8 @@ export function createDirectiveDecorator( identifier: null, import: {name: 'Directive', from: '@angular/core'}, node: null, - synthesizedFor: clazz.name, args, + synthesizedFor: clazz.name, + args, }; } @@ -69,7 +70,7 @@ export function createDirectiveDecorator( */ export function createComponentDecorator( clazz: ClassDeclaration, - metadata: {selector: string | null, exportAs: string[] | null}): Decorator { + metadata: {selector: string|null, exportAs: string[]|null}): Decorator { const metaArgs: ts.PropertyAssignment[] = [ property('template', ''), ]; @@ -127,5 +128,5 @@ function reifySourceFile(expr: ts.Expression): ts.Expression { if (!ts.isVariableStatement(stmt)) { throw new Error(`Expected VariableStatement, got ${ts.SyntaxKind[stmt.kind]}`); } - return stmt.declarationList.declarations[0].initializer !; + return stmt.declarationList.declarations[0].initializer!; } diff --git a/packages/compiler-cli/ngcc/src/packages/bundle_program.ts b/packages/compiler-cli/ngcc/src/packages/bundle_program.ts index cbea96d34b..a094a03c07 100644 --- a/packages/compiler-cli/ngcc/src/packages/bundle_program.ts +++ b/packages/compiler-cli/ngcc/src/packages/bundle_program.ts @@ -6,17 +6,19 @@ * found in the LICENSE file at https://angular.io/license */ import * as ts from 'typescript'; -import {AbsoluteFsPath, FileSystem, dirname, resolve} from '../../../src/ngtsc/file_system'; + +import {AbsoluteFsPath, dirname, FileSystem, resolve} from '../../../src/ngtsc/file_system'; + import {patchTsGetExpandoInitializer, restoreGetExpandoInitializer} from './patch_ts_expando_initializer'; /** -* An entry point bundle contains one or two programs, e.g. `src` and `dts`, -* that are compiled via TypeScript. -* -* To aid with processing the program, this interface exposes the program itself, -* as well as path and TS file of the entry-point to the program and the r3Symbols -* file, if appropriate. -*/ + * An entry point bundle contains one or two programs, e.g. `src` and `dts`, + * that are compiled via TypeScript. + * + * To aid with processing the program, this interface exposes the program itself, + * as well as path and TS file of the entry-point to the program and the r3Symbols + * file, if appropriate. + */ export interface BundleProgram { program: ts.Program; options: ts.CompilerOptions; @@ -46,7 +48,7 @@ export function makeBundleProgram( program.getTypeChecker(); restoreGetExpandoInitializer(originalGetExpandoInitializer); - const file = program.getSourceFile(path) !; + const file = program.getSourceFile(path)!; const r3SymbolsFile = r3SymbolsPath && program.getSourceFile(r3SymbolsPath) || null; return {program, options, host, package: pkg, path, file, r3SymbolsPath, r3SymbolsFile}; diff --git a/packages/compiler-cli/ngcc/src/packages/configuration.ts b/packages/compiler-cli/ngcc/src/packages/configuration.ts index ea1660e917..10b45e9b31 100644 --- a/packages/compiler-cli/ngcc/src/packages/configuration.ts +++ b/packages/compiler-cli/ngcc/src/packages/configuration.ts @@ -8,7 +8,9 @@ import {createHash} from 'crypto'; import {satisfies} from 'semver'; import * as vm from 'vm'; -import {AbsoluteFsPath, FileSystem, dirname, join, resolve} from '../../../src/ngtsc/file_system'; + +import {AbsoluteFsPath, dirname, FileSystem, join, resolve} from '../../../src/ngtsc/file_system'; + import {PackageJsonFormatPropertiesMap} from './entry_point'; /** @@ -178,7 +180,7 @@ export class NgccConfiguration { getConfig(packagePath: AbsoluteFsPath, version: string|null): VersionedPackageConfig { const cacheKey = packagePath + (version !== null ? `@${version}` : ''); if (this.cache.has(cacheKey)) { - return this.cache.get(cacheKey) !; + return this.cache.get(cacheKey)!; } const projectLevelConfig = @@ -256,7 +258,8 @@ export class NgccConfiguration { const theExports = {}; const sandbox = { module: {exports: theExports}, - exports: theExports, require, + exports: theExports, + require, __dirname: dirname(srcPath), __filename: srcPath }; @@ -292,9 +295,8 @@ export class NgccConfiguration { } } -function findSatisfactoryVersion( - configs: VersionedPackageConfig[] | undefined, version: string | null): VersionedPackageConfig| - null { +function findSatisfactoryVersion(configs: VersionedPackageConfig[]|undefined, version: string|null): + VersionedPackageConfig|null { if (configs === undefined) { return null; } diff --git a/packages/compiler-cli/ngcc/src/packages/entry_point.ts b/packages/compiler-cli/ngcc/src/packages/entry_point.ts index 08bcf8e4f1..cc74e8e82a 100644 --- a/packages/compiler-cli/ngcc/src/packages/entry_point.ts +++ b/packages/compiler-cli/ngcc/src/packages/entry_point.ts @@ -17,7 +17,7 @@ import {NgccConfiguration, NgccEntryPointConfig} from './configuration'; /** * The possible values for the format of an entry-point. */ -export type EntryPointFormat = 'esm5' | 'esm2015' | 'umd' | 'commonjs'; +export type EntryPointFormat = 'esm5'|'esm2015'|'umd'|'commonjs'; /** * An object containing information about an entry-point, including paths @@ -42,10 +42,12 @@ export interface EntryPoint extends JsonObject { generateDeepReexports: boolean; } -export type JsonPrimitive = string | number | boolean | null; -export type JsonValue = JsonPrimitive | JsonArray | JsonObject | undefined; +export type JsonPrimitive = string|number|boolean|null; +export type JsonValue = JsonPrimitive|JsonArray|JsonObject|undefined; export interface JsonArray extends Array {} -export interface JsonObject { [key: string]: JsonValue; } +export interface JsonObject { + [key: string]: JsonValue; +} export interface PackageJsonFormatPropertiesMap { fesm2015?: string; @@ -97,8 +99,7 @@ export const INCOMPATIBLE_ENTRY_POINT = 'incompatible-entry-point'; * * INCOMPATIBLE_ENTRY_POINT - the path was a non-processable entry-point that should be searched * for sub-entry-points */ -export type GetEntryPointResult = - EntryPoint | typeof INCOMPATIBLE_ENTRY_POINT | typeof NO_ENTRY_POINT; +export type GetEntryPointResult = EntryPoint|typeof INCOMPATIBLE_ENTRY_POINT|typeof NO_ENTRY_POINT; /** @@ -161,7 +162,8 @@ export function getEntryPointInfo( packageJson: entryPointPackageJson, package: packagePath, path: entryPointPath, - typings: resolve(entryPointPath, typings), compiledByAngular, + typings: resolve(entryPointPath, typings), + compiledByAngular, ignoreMissingDependencies: entryPointConfig !== undefined ? !!entryPointConfig.ignoreMissingDependencies : false, generateDeepReexports: @@ -236,7 +238,7 @@ function isUmdModule(fs: FileSystem, sourceFilePath: AbsoluteFsPath): boolean { } function mergeConfigAndPackageJson( - entryPointPackageJson: EntryPointPackageJson | null, entryPointConfig: NgccEntryPointConfig, + entryPointPackageJson: EntryPointPackageJson|null, entryPointConfig: NgccEntryPointConfig, packagePath: AbsoluteFsPath, entryPointPath: AbsoluteFsPath): EntryPointPackageJson { if (entryPointPackageJson !== null) { return {...entryPointPackageJson, ...entryPointConfig.override}; diff --git a/packages/compiler-cli/ngcc/src/packages/entry_point_bundle.ts b/packages/compiler-cli/ngcc/src/packages/entry_point_bundle.ts index 89d28e2398..74b4173006 100644 --- a/packages/compiler-cli/ngcc/src/packages/entry_point_bundle.ts +++ b/packages/compiler-cli/ngcc/src/packages/entry_point_bundle.ts @@ -48,10 +48,8 @@ export function makeEntryPointBundle( enableI18nLegacyMessageIdFormat: boolean = true): EntryPointBundle { // Create the TS program and necessary helpers. const rootDir = entryPoint.package; - const options: ts.CompilerOptions = { - allowJs: true, - maxNodeModuleJsDepth: Infinity, rootDir, ...pathMappings - }; + const options: ts + .CompilerOptions = {allowJs: true, maxNodeModuleJsDepth: Infinity, rootDir, ...pathMappings}; const srcHost = new NgccSourcesCompilerHost(fs, options, entryPoint.path); const dtsHost = new NgtscCompilerHost(fs, options); @@ -72,7 +70,12 @@ export function makeEntryPointBundle( return { entryPoint, format, - rootDirs: [rootDir], isCore, isFlatCore, src, dts, enableI18nLegacyMessageIdFormat + rootDirs: [rootDir], + isCore, + isFlatCore, + src, + dts, + enableI18nLegacyMessageIdFormat }; } diff --git a/packages/compiler-cli/ngcc/src/packages/entry_point_manifest.ts b/packages/compiler-cli/ngcc/src/packages/entry_point_manifest.ts index ab9c3cc669..60d78df97e 100644 --- a/packages/compiler-cli/ngcc/src/packages/entry_point_manifest.ts +++ b/packages/compiler-cli/ngcc/src/packages/entry_point_manifest.ts @@ -12,7 +12,7 @@ import {Logger} from '../logging/logger'; import {NGCC_VERSION} from './build_marker'; import {NgccConfiguration} from './configuration'; -import {EntryPoint, INCOMPATIBLE_ENTRY_POINT, NO_ENTRY_POINT, getEntryPointInfo} from './entry_point'; +import {EntryPoint, getEntryPointInfo, INCOMPATIBLE_ENTRY_POINT, NO_ENTRY_POINT} from './entry_point'; /** * Manages reading and writing a manifest file that contains a list of all the entry-points that @@ -63,8 +63,8 @@ export class EntryPointManifest { return null; } - this.logger.debug( - `Entry-point manifest found for ${basePath} so loading entry-point information directly.`); + this.logger.debug(`Entry-point manifest found for ${ + basePath} so loading entry-point information directly.`); const startTime = Date.now(); const entryPoints: EntryPoint[] = []; @@ -72,8 +72,9 @@ export class EntryPointManifest { const result = getEntryPointInfo(this.fs, this.config, this.logger, packagePath, entryPointPath); if (result === NO_ENTRY_POINT || result === INCOMPATIBLE_ENTRY_POINT) { - throw new Error( - `The entry-point manifest at ${manifestPath} contained an invalid pair of package paths: [${packagePath}, ${entryPointPath}]`); + throw new Error(`The entry-point manifest at ${ + manifestPath} contained an invalid pair of package paths: [${packagePath}, ${ + entryPointPath}]`); } else { entryPoints.push(result); } @@ -142,7 +143,9 @@ export class EntryPointManifest { * called. */ export class InvalidatingEntryPointManifest extends EntryPointManifest { - readEntryPointsUsingManifest(basePath: AbsoluteFsPath): EntryPoint[]|null { return null; } + readEntryPointsUsingManifest(basePath: AbsoluteFsPath): EntryPoint[]|null { + return null; + } } /** diff --git a/packages/compiler-cli/ngcc/src/packages/patch_ts_expando_initializer.ts b/packages/compiler-cli/ngcc/src/packages/patch_ts_expando_initializer.ts index 0d6a20b039..b2d5428d2f 100644 --- a/packages/compiler-cli/ngcc/src/packages/patch_ts_expando_initializer.ts +++ b/packages/compiler-cli/ngcc/src/packages/patch_ts_expando_initializer.ts @@ -58,17 +58,16 @@ export function patchTsGetExpandoInitializer(): unknown { } // Override the function to add support for recognizing the IIFE structure used in ES5 bundles. - (ts as any).getExpandoInitializer = - (initializer: ts.Node, isPrototypeAssignment: boolean): ts.Expression | undefined => { - // If the initializer is a call expression within parenthesis, unwrap the parenthesis - // upfront such that unsupported IIFE syntax `(function(){}())` becomes `function(){}()`, - // which is supported. - if (ts.isParenthesizedExpression(initializer) && - ts.isCallExpression(initializer.expression)) { - initializer = initializer.expression; - } - return originalGetExpandoInitializer(initializer, isPrototypeAssignment); - }; + (ts as any).getExpandoInitializer = (initializer: ts.Node, + isPrototypeAssignment: boolean): ts.Expression|undefined => { + // If the initializer is a call expression within parenthesis, unwrap the parenthesis + // upfront such that unsupported IIFE syntax `(function(){}())` becomes `function(){}()`, + // which is supported. + if (ts.isParenthesizedExpression(initializer) && ts.isCallExpression(initializer.expression)) { + initializer = initializer.expression; + } + return originalGetExpandoInitializer(initializer, isPrototypeAssignment); + }; return originalGetExpandoInitializer; } @@ -125,16 +124,36 @@ function checkIfExpandoPropertyIsPresent(): boolean { const sourceFile = ts.createSourceFile('test.js', sourceText, ts.ScriptTarget.ES5, true, ts.ScriptKind.JS); const host: ts.CompilerHost = { - getSourceFile(): ts.SourceFile | undefined{return sourceFile;}, - fileExists(): boolean{return true;}, - readFile(): string | undefined{return '';}, + getSourceFile(): ts.SourceFile | + undefined { + return sourceFile; + }, + fileExists(): boolean { + return true; + }, + readFile(): string | + undefined { + return ''; + }, writeFile() {}, - getDefaultLibFileName(): string{return '';}, - getCurrentDirectory(): string{return '';}, - getDirectories(): string[]{return [];}, - getCanonicalFileName(fileName: string): string{return fileName;}, - useCaseSensitiveFileNames(): boolean{return true;}, - getNewLine(): string{return '\n';}, + getDefaultLibFileName(): string { + return ''; + }, + getCurrentDirectory(): string { + return ''; + }, + getDirectories(): string[] { + return []; + }, + getCanonicalFileName(fileName: string): string { + return fileName; + }, + useCaseSensitiveFileNames(): boolean { + return true; + }, + getNewLine(): string { + return '\n'; + }, }; const options = {noResolve: true, noLib: true, noEmit: true, allowJs: true}; const program = ts.createProgram(['test.js'], options, host); diff --git a/packages/compiler-cli/ngcc/src/packages/transformer.ts b/packages/compiler-cli/ngcc/src/packages/transformer.ts index f7a30944f7..005482f3f7 100644 --- a/packages/compiler-cli/ngcc/src/packages/transformer.ts +++ b/packages/compiler-cli/ngcc/src/packages/transformer.ts @@ -36,8 +36,7 @@ import {EntryPointBundle} from './entry_point_bundle'; export type TransformResult = { success: true; diagnostics: ts.Diagnostic[]; transformedFiles: FileToWrite[]; -} | -{ +}|{ success: false; diagnostics: ts.Diagnostic[]; }; @@ -79,8 +78,13 @@ export class Transformer { const reflectionHost = new DelegatingReflectionHost(tsReflectionHost, ngccReflectionHost); // Parse and analyze the files. - const {decorationAnalyses, switchMarkerAnalyses, privateDeclarationsAnalyses, - moduleWithProvidersAnalyses, diagnostics} = this.analyzeProgram(reflectionHost, bundle); + const { + decorationAnalyses, + switchMarkerAnalyses, + privateDeclarationsAnalyses, + moduleWithProvidersAnalyses, + diagnostics + } = this.analyzeProgram(reflectionHost, bundle); // Bail if the analysis produced any errors. if (hasErrors(diagnostics)) { @@ -162,8 +166,13 @@ export class Transformer { const privateDeclarationsAnalyses = privateDeclarationsAnalyzer.analyzeProgram(bundle.src.program); - return {decorationAnalyses, switchMarkerAnalyses, privateDeclarationsAnalyses, - moduleWithProvidersAnalyses, diagnostics}; + return { + decorationAnalyses, + switchMarkerAnalyses, + privateDeclarationsAnalyses, + moduleWithProvidersAnalyses, + diagnostics + }; } } diff --git a/packages/compiler-cli/ngcc/src/rendering/commonjs_rendering_formatter.ts b/packages/compiler-cli/ngcc/src/rendering/commonjs_rendering_formatter.ts index bdac597093..1ddfeb64fe 100644 --- a/packages/compiler-cli/ngcc/src/rendering/commonjs_rendering_formatter.ts +++ b/packages/compiler-cli/ngcc/src/rendering/commonjs_rendering_formatter.ts @@ -6,13 +6,15 @@ * found in the LICENSE file at https://angular.io/license */ import {dirname, relative} from 'canonical-path'; -import * as ts from 'typescript'; import MagicString from 'magic-string'; +import * as ts from 'typescript'; + import {Reexport} from '../../../src/ngtsc/imports'; import {Import, ImportManager} from '../../../src/ngtsc/translator'; import {ExportInfo} from '../analysis/private_declarations_analyzer'; import {isRequireCall} from '../host/commonjs_umd_utils'; import {NgccReflectionHost} from '../host/ngcc_host'; + import {Esm5RenderingFormatter} from './esm5_rendering_formatter'; import {stripExtension} from './utils'; diff --git a/packages/compiler-cli/ngcc/src/rendering/dts_renderer.ts b/packages/compiler-cli/ngcc/src/rendering/dts_renderer.ts index 25cc214d52..91ab5ea398 100644 --- a/packages/compiler-cli/ngcc/src/rendering/dts_renderer.ts +++ b/packages/compiler-cli/ngcc/src/rendering/dts_renderer.ts @@ -7,20 +7,22 @@ */ import MagicString from 'magic-string'; import * as ts from 'typescript'; + import {FileSystem} from '../../../src/ngtsc/file_system'; import {Reexport} from '../../../src/ngtsc/imports'; import {CompileResult} from '../../../src/ngtsc/transform'; -import {translateType, ImportManager} from '../../../src/ngtsc/translator'; +import {ImportManager, translateType} from '../../../src/ngtsc/translator'; +import {ModuleWithProvidersAnalyses, ModuleWithProvidersInfo} from '../analysis/module_with_providers_analyzer'; +import {ExportInfo, PrivateDeclarationsAnalyses} from '../analysis/private_declarations_analyzer'; import {DecorationAnalyses} from '../analysis/types'; -import {ModuleWithProvidersInfo, ModuleWithProvidersAnalyses} from '../analysis/module_with_providers_analyzer'; -import {PrivateDeclarationsAnalyses, ExportInfo} from '../analysis/private_declarations_analyzer'; import {IMPORT_PREFIX} from '../constants'; import {NgccReflectionHost} from '../host/ngcc_host'; -import {EntryPointBundle} from '../packages/entry_point_bundle'; import {Logger} from '../logging/logger'; -import {FileToWrite, getImportRewriter} from './utils'; +import {EntryPointBundle} from '../packages/entry_point_bundle'; + import {RenderingFormatter} from './rendering_formatter'; import {renderSourceAndMap} from './source_maps'; +import {FileToWrite, getImportRewriter} from './utils'; /** * A structure that captures information about what needs to be rendered @@ -84,7 +86,7 @@ export class DtsRenderer { const outputText = new MagicString(dtsFile.text); const printer = ts.createPrinter(); const importManager = new ImportManager( - getImportRewriter(this.bundle.dts !.r3SymbolsFile, this.bundle.isCore, false), + getImportRewriter(this.bundle.dts!.r3SymbolsFile, this.bundle.isCore, false), IMPORT_PREFIX); renderInfo.classInfo.forEach(dtsClass => { @@ -129,7 +131,7 @@ export class DtsRenderer { const dtsDeclaration = this.host.getDtsDeclaration(compiledClass.declaration); if (dtsDeclaration) { const dtsFile = dtsDeclaration.getSourceFile(); - const renderInfo = dtsMap.has(dtsFile) ? dtsMap.get(dtsFile) ! : new DtsRenderInfo(); + const renderInfo = dtsMap.has(dtsFile) ? dtsMap.get(dtsFile)! : new DtsRenderInfo(); renderInfo.classInfo.push({dtsDeclaration, compilation: compiledClass.compilation}); // Only add re-exports if the .d.ts tree is overlayed with the .js tree, as re-exports in // ngcc are only used to support deep imports into e.g. commonjs code. For a deep import @@ -150,7 +152,7 @@ export class DtsRenderer { // Capture the ModuleWithProviders functions/methods that need updating if (moduleWithProvidersAnalyses !== null) { moduleWithProvidersAnalyses.forEach((moduleWithProvidersToFix, dtsFile) => { - const renderInfo = dtsMap.has(dtsFile) ? dtsMap.get(dtsFile) ! : new DtsRenderInfo(); + const renderInfo = dtsMap.has(dtsFile) ? dtsMap.get(dtsFile)! : new DtsRenderInfo(); renderInfo.moduleWithProviders = moduleWithProvidersToFix; dtsMap.set(dtsFile, renderInfo); }); @@ -167,9 +169,9 @@ export class DtsRenderer { `The simplest fix for this is to ensure that this class is exported from the package's entry-point.`); } }); - const dtsEntryPoint = this.bundle.dts !.file; + const dtsEntryPoint = this.bundle.dts!.file; const renderInfo = - dtsMap.has(dtsEntryPoint) ? dtsMap.get(dtsEntryPoint) ! : new DtsRenderInfo(); + dtsMap.has(dtsEntryPoint) ? dtsMap.get(dtsEntryPoint)! : new DtsRenderInfo(); renderInfo.privateExports = privateDeclarationsAnalyses; dtsMap.set(dtsEntryPoint, renderInfo); } diff --git a/packages/compiler-cli/ngcc/src/rendering/esm5_rendering_formatter.ts b/packages/compiler-cli/ngcc/src/rendering/esm5_rendering_formatter.ts index 0feb106de0..40a3474578 100644 --- a/packages/compiler-cli/ngcc/src/rendering/esm5_rendering_formatter.ts +++ b/packages/compiler-cli/ngcc/src/rendering/esm5_rendering_formatter.ts @@ -25,14 +25,14 @@ export class Esm5RenderingFormatter extends EsmRenderingFormatter { addDefinitions(output: MagicString, compiledClass: CompiledClass, definitions: string): void { const iifeBody = getIifeBody(compiledClass.declaration); if (!iifeBody) { - throw new Error( - `Compiled class declaration is not inside an IIFE: ${compiledClass.name} in ${compiledClass.declaration.getSourceFile().fileName}`); + throw new Error(`Compiled class declaration is not inside an IIFE: ${compiledClass.name} in ${ + compiledClass.declaration.getSourceFile().fileName}`); } const returnStatement = iifeBody.statements.find(ts.isReturnStatement); if (!returnStatement) { - throw new Error( - `Compiled class wrapper IIFE does not have a return statement: ${compiledClass.name} in ${compiledClass.declaration.getSourceFile().fileName}`); + throw new Error(`Compiled class wrapper IIFE does not have a return statement: ${ + compiledClass.name} in ${compiledClass.declaration.getSourceFile().fileName}`); } const insertionPoint = returnStatement.getFullStart(); diff --git a/packages/compiler-cli/ngcc/src/rendering/esm_rendering_formatter.ts b/packages/compiler-cli/ngcc/src/rendering/esm_rendering_formatter.ts index d2b42d5522..d2b1cae500 100644 --- a/packages/compiler-cli/ngcc/src/rendering/esm_rendering_formatter.ts +++ b/packages/compiler-cli/ngcc/src/rendering/esm_rendering_formatter.ts @@ -8,17 +8,19 @@ import {Statement} from '@angular/compiler'; import MagicString from 'magic-string'; import * as ts from 'typescript'; -import {relative, dirname, AbsoluteFsPath, absoluteFromSourceFile} from '../../../src/ngtsc/file_system'; + +import {absoluteFromSourceFile, AbsoluteFsPath, dirname, relative} from '../../../src/ngtsc/file_system'; import {NOOP_DEFAULT_IMPORT_RECORDER, Reexport} from '../../../src/ngtsc/imports'; import {Import, ImportManager, translateStatement} from '../../../src/ngtsc/translator'; import {isDtsPath} from '../../../src/ngtsc/util/src/typescript'; -import {CompiledClass} from '../analysis/types'; -import {NgccReflectionHost, POST_R3_MARKER, PRE_R3_MARKER, SwitchableVariableDeclaration} from '../host/ngcc_host'; import {ModuleWithProvidersInfo} from '../analysis/module_with_providers_analyzer'; import {ExportInfo} from '../analysis/private_declarations_analyzer'; -import {RenderingFormatter, RedundantDecoratorMap} from './rendering_formatter'; -import {stripExtension} from './utils'; +import {CompiledClass} from '../analysis/types'; import {isAssignment} from '../host/esm2015_host'; +import {NgccReflectionHost, POST_R3_MARKER, PRE_R3_MARKER, SwitchableVariableDeclaration} from '../host/ngcc_host'; + +import {RedundantDecoratorMap, RenderingFormatter} from './rendering_formatter'; +import {stripExtension} from './utils'; /** * A RenderingFormatter that works with ECMAScript Module import and export statements. @@ -226,7 +228,8 @@ export class EsmRenderingFormatter implements RenderingFormatter { info.declaration.getEnd(); outputText.appendLeft( insertPoint, - `: ${generateImportString(importManager, '@angular/core', 'ModuleWithProviders')}<${ngModule}>`); + `: ${generateImportString(importManager, '@angular/core', 'ModuleWithProviders')}<${ + ngModule}>`); } }); } @@ -296,7 +299,7 @@ function findStatement(node: ts.Node): ts.Statement|undefined { } function generateImportString( - importManager: ImportManager, importPath: string | null, importName: string) { + importManager: ImportManager, importPath: string|null, importName: string) { const importAs = importPath ? importManager.generateNamedImport(importPath, importName) : null; return importAs ? `${importAs.moduleImport}.${importAs.symbol}` : `${importName}`; } diff --git a/packages/compiler-cli/ngcc/src/rendering/renderer.ts b/packages/compiler-cli/ngcc/src/rendering/renderer.ts index 54480b7df7..033d05530c 100644 --- a/packages/compiler-cli/ngcc/src/rendering/renderer.ts +++ b/packages/compiler-cli/ngcc/src/rendering/renderer.ts @@ -8,16 +8,18 @@ import {ConstantPool, Expression, Statement, WrappedNodeExpr, WritePropExpr} from '@angular/compiler'; import MagicString from 'magic-string'; import * as ts from 'typescript'; + +import {FileSystem} from '../../../src/ngtsc/file_system'; import {ImportManager} from '../../../src/ngtsc/translator'; -import {CompiledClass, CompiledFile, DecorationAnalyses} from '../analysis/types'; import {PrivateDeclarationsAnalyses} from '../analysis/private_declarations_analyzer'; import {SwitchMarkerAnalyses, SwitchMarkerAnalysis} from '../analysis/switch_marker_analyzer'; +import {CompiledClass, CompiledFile, DecorationAnalyses} from '../analysis/types'; import {IMPORT_PREFIX} from '../constants'; -import {FileSystem} from '../../../src/ngtsc/file_system'; import {NgccReflectionHost} from '../host/ngcc_host'; import {Logger} from '../logging/logger'; import {EntryPointBundle} from '../packages/entry_point_bundle'; -import {RenderingFormatter, RedundantDecoratorMap} from './rendering_formatter'; + +import {RedundantDecoratorMap, RenderingFormatter} from './rendering_formatter'; import {renderSourceAndMap} from './source_maps'; import {FileToWrite, getImportRewriter, stripExtension} from './utils'; @@ -138,11 +140,11 @@ export class Renderer { if (dec.node === null) { return; } - const decoratorArray = dec.node.parent !; + const decoratorArray = dec.node.parent!; if (!decoratorsToRemove.has(decoratorArray)) { decoratorsToRemove.set(decoratorArray, [dec.node]); } else { - decoratorsToRemove.get(decoratorArray) !.push(dec.node); + decoratorsToRemove.get(decoratorArray)!.push(dec.node); } }); }); @@ -160,8 +162,9 @@ export class Renderer { private renderDefinitions( sourceFile: ts.SourceFile, compiledClass: CompiledClass, imports: ImportManager): string { const name = this.host.getInternalNameOfClass(compiledClass.declaration); - const statements: Statement[] = compiledClass.compilation.map( - c => { return createAssignmentStatement(name, c.name, c.initializer); }); + const statements: Statement[] = compiledClass.compilation.map(c => { + return createAssignmentStatement(name, c.name, c.initializer); + }); return this.renderStatements(sourceFile, statements, imports); } diff --git a/packages/compiler-cli/ngcc/src/rendering/rendering_formatter.ts b/packages/compiler-cli/ngcc/src/rendering/rendering_formatter.ts index e97b106568..4cfeadeb05 100644 --- a/packages/compiler-cli/ngcc/src/rendering/rendering_formatter.ts +++ b/packages/compiler-cli/ngcc/src/rendering/rendering_formatter.ts @@ -8,12 +8,13 @@ import {Statement} from '@angular/compiler'; import MagicString from 'magic-string'; import * as ts from 'typescript'; + import {Reexport} from '../../../src/ngtsc/imports'; import {Import, ImportManager} from '../../../src/ngtsc/translator'; +import {ModuleWithProvidersInfo} from '../analysis/module_with_providers_analyzer'; import {ExportInfo} from '../analysis/private_declarations_analyzer'; import {CompiledClass} from '../analysis/types'; import {SwitchableVariableDeclaration} from '../host/ngcc_host'; -import {ModuleWithProvidersInfo} from '../analysis/module_with_providers_analyzer'; /** * The collected decorators that have become redundant after the compilation diff --git a/packages/compiler-cli/ngcc/src/rendering/source_maps.ts b/packages/compiler-cli/ngcc/src/rendering/source_maps.ts index ff836bdc60..07d040db86 100644 --- a/packages/compiler-cli/ngcc/src/rendering/source_maps.ts +++ b/packages/compiler-cli/ngcc/src/rendering/source_maps.ts @@ -5,14 +5,16 @@ * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ -import {SourceMapConverter, fromObject, generateMapFileComment} from 'convert-source-map'; +import {fromObject, generateMapFileComment, SourceMapConverter} from 'convert-source-map'; import MagicString from 'magic-string'; import * as ts from 'typescript'; -import {FileSystem, absoluteFromSourceFile, basename, absoluteFrom} from '../../../src/ngtsc/file_system'; -import {FileToWrite} from './utils'; -import {SourceFileLoader} from '../sourcemaps/source_file_loader'; -import {RawSourceMap} from '../sourcemaps/raw_source_map'; + +import {absoluteFrom, absoluteFromSourceFile, basename, FileSystem} from '../../../src/ngtsc/file_system'; import {Logger} from '../logging/logger'; +import {RawSourceMap} from '../sourcemaps/raw_source_map'; +import {SourceFileLoader} from '../sourcemaps/source_file_loader'; + +import {FileToWrite} from './utils'; export interface SourceMapInfo { source: string; @@ -53,8 +55,8 @@ export function renderSourceAndMap( ]; } } catch (e) { - logger.error( - `Error when flattening the source-map "${generatedMapPath}" for "${generatedPath}": ${e.toString()}`); + logger.error(`Error when flattening the source-map "${generatedMapPath}" for "${ + generatedPath}": ${e.toString()}`); return [ {path: generatedPath, contents: generatedContent}, {path: generatedMapPath, contents: fromObject(generatedMap).toJSON()}, diff --git a/packages/compiler-cli/ngcc/src/rendering/umd_rendering_formatter.ts b/packages/compiler-cli/ngcc/src/rendering/umd_rendering_formatter.ts index 4860cda6b8..8051f79c15 100644 --- a/packages/compiler-cli/ngcc/src/rendering/umd_rendering_formatter.ts +++ b/packages/compiler-cli/ngcc/src/rendering/umd_rendering_formatter.ts @@ -6,17 +6,19 @@ * found in the LICENSE file at https://angular.io/license */ import {dirname, relative} from 'canonical-path'; -import * as ts from 'typescript'; import MagicString from 'magic-string'; +import * as ts from 'typescript'; + +import {Reexport} from '../../../src/ngtsc/imports'; import {Import, ImportManager} from '../../../src/ngtsc/translator'; import {ExportInfo} from '../analysis/private_declarations_analyzer'; import {UmdReflectionHost} from '../host/umd_host'; + import {Esm5RenderingFormatter} from './esm5_rendering_formatter'; import {stripExtension} from './utils'; -import {Reexport} from '../../../src/ngtsc/imports'; -type CommonJsConditional = ts.ConditionalExpression & {whenTrue: ts.CallExpression}; -type AmdConditional = ts.ConditionalExpression & {whenTrue: ts.CallExpression}; +type CommonJsConditional = ts.ConditionalExpression&{whenTrue: ts.CallExpression}; +type AmdConditional = ts.ConditionalExpression&{whenTrue: ts.CallExpression}; /** * A RenderingFormatter that works with UMD files, instead of `import` and `export` statements @@ -24,7 +26,9 @@ type AmdConditional = ts.ConditionalExpression & {whenTrue: ts.CallExpression}; * wrapper function for AMD, CommonJS and global module formats. */ export class UmdRenderingFormatter extends Esm5RenderingFormatter { - constructor(protected umdHost: UmdReflectionHost, isCore: boolean) { super(umdHost, isCore); } + constructor(protected umdHost: UmdReflectionHost, isCore: boolean) { + super(umdHost, isCore); + } /** * Add the imports to the UMD module IIFE. diff --git a/packages/compiler-cli/ngcc/src/rendering/utils.ts b/packages/compiler-cli/ngcc/src/rendering/utils.ts index 29cafaa785..9b9d25303e 100644 --- a/packages/compiler-cli/ngcc/src/rendering/utils.ts +++ b/packages/compiler-cli/ngcc/src/rendering/utils.ts @@ -24,11 +24,11 @@ export interface FileToWrite { * Create an appropriate ImportRewriter given the parameters. */ export function getImportRewriter( - r3SymbolsFile: ts.SourceFile | null, isCore: boolean, isFlat: boolean): ImportRewriter { + r3SymbolsFile: ts.SourceFile|null, isCore: boolean, isFlat: boolean): ImportRewriter { if (isCore && isFlat) { return new NgccFlatImportRewriter(); } else if (isCore) { - return new R3SymbolsImportRewriter(r3SymbolsFile !.fileName); + return new R3SymbolsImportRewriter(r3SymbolsFile!.fileName); } else { return new NoopImportRewriter(); } diff --git a/packages/compiler-cli/ngcc/src/sourcemaps/segment_marker.ts b/packages/compiler-cli/ngcc/src/sourcemaps/segment_marker.ts index 78d71f1053..2fa738ace3 100644 --- a/packages/compiler-cli/ngcc/src/sourcemaps/segment_marker.ts +++ b/packages/compiler-cli/ngcc/src/sourcemaps/segment_marker.ts @@ -8,11 +8,11 @@ /** -* A marker that indicates the start of a segment in a mapping. -* -* The end of a segment is indicated by the the first segment-marker of another mapping whose start -* is greater or equal to this one. -*/ + * A marker that indicates the start of a segment in a mapping. + * + * The end of a segment is indicated by the the first segment-marker of another mapping whose start + * is greater or equal to this one. + */ export interface SegmentMarker { readonly line: number; readonly column: number; diff --git a/packages/compiler-cli/ngcc/src/sourcemaps/source_file.ts b/packages/compiler-cli/ngcc/src/sourcemaps/source_file.ts index 839eec56f0..f860d162fc 100644 --- a/packages/compiler-cli/ngcc/src/sourcemaps/source_file.ts +++ b/packages/compiler-cli/ngcc/src/sourcemaps/source_file.ts @@ -6,10 +6,12 @@ * found in the LICENSE file at https://angular.io/license */ import {removeComments, removeMapFileComments} from 'convert-source-map'; -import {SourceMapMappings, SourceMapSegment, decode, encode} from 'sourcemap-codec'; +import {decode, encode, SourceMapMappings, SourceMapSegment} from 'sourcemap-codec'; + import {AbsoluteFsPath, dirname, relative} from '../../../src/ngtsc/file_system'; + import {RawSourceMap} from './raw_source_map'; -import {SegmentMarker, compareSegments, offsetSegment} from './segment_marker'; +import {compareSegments, offsetSegment, SegmentMarker} from './segment_marker'; export function removeSourceMapComments(contents: string): string { return removeMapFileComments(removeComments(contents)).replace(/\n\n$/, '\n'); @@ -77,7 +79,8 @@ export class SourceFile { const sourceMap: RawSourceMap = { version: 3, file: relative(sourcePathDir, this.sourcePath), - sources: sources.map(sf => relative(sourcePathDir, sf.sourcePath)), names, + sources: sources.map(sf => relative(sourcePathDir, sf.sourcePath)), + names, mappings: encode(mappings), sourcesContent: sources.map(sf => sf.contents), }; @@ -302,7 +305,7 @@ export function mergeMappings(generatedSource: SourceFile, ab: Mapping, bc: Mapp * in the `sources` parameter. */ export function parseMappings( - rawMap: RawSourceMap | null, sources: (SourceFile | null)[], + rawMap: RawSourceMap|null, sources: (SourceFile|null)[], generatedSourceStartOfLinePositions: number[]): Mapping[] { if (rawMap === null) { return []; @@ -318,15 +321,15 @@ export function parseMappings( const generatedLineMappings = rawMappings[generatedLine]; for (const rawMapping of generatedLineMappings) { if (rawMapping.length >= 4) { - const originalSource = sources[rawMapping[1] !]; + const originalSource = sources[rawMapping[1]!]; if (originalSource === null || originalSource === undefined) { // the original source is missing so ignore this mapping continue; } const generatedColumn = rawMapping[0]; const name = rawMapping.length === 5 ? rawMap.names[rawMapping[4]] : undefined; - const line = rawMapping[2] !; - const column = rawMapping[3] !; + const line = rawMapping[2]!; + const column = rawMapping[3]!; const generatedSegment: SegmentMarker = { line: generatedLine, column: generatedColumn, @@ -361,7 +364,7 @@ export function extractOriginalSegments(mappings: Mapping[]): Map segmentMarkers.sort(compareSegments)); diff --git a/packages/compiler-cli/ngcc/src/sourcemaps/source_file_loader.ts b/packages/compiler-cli/ngcc/src/sourcemaps/source_file_loader.ts index 76b7966c49..50626436c3 100644 --- a/packages/compiler-cli/ngcc/src/sourcemaps/source_file_loader.ts +++ b/packages/compiler-cli/ngcc/src/sourcemaps/source_file_loader.ts @@ -6,7 +6,9 @@ * found in the LICENSE file at https://angular.io/license */ import {commentRegex, fromComment, mapFileCommentRegex} from 'convert-source-map'; -import {AbsoluteFsPath, FileSystem, absoluteFrom} from '../../../src/ngtsc/file_system'; + +import {absoluteFrom, AbsoluteFsPath, FileSystem} from '../../../src/ngtsc/file_system'; + import {RawSourceMap} from './raw_source_map'; import {SourceFile} from './source_file'; @@ -51,8 +53,8 @@ export class SourceFileLoader { // Track source file paths if we have loaded them from disk so that we don't get into an // infinite recursion if (previousPaths.includes(sourcePath)) { - throw new Error( - `Circular source file mapping dependency: ${previousPaths.join(' -> ')} -> ${sourcePath}`); + throw new Error(`Circular source file mapping dependency: ${ + previousPaths.join(' -> ')} -> ${sourcePath}`); } previousPaths = previousPaths.concat([sourcePath]); @@ -66,7 +68,7 @@ export class SourceFileLoader { let map: RawSourceMap|null = null; let inline = true; - let sources: (SourceFile | null)[] = []; + let sources: (SourceFile|null)[] = []; if (mapAndPath !== null) { const basePath = mapAndPath.mapPath || sourcePath; sources = this.processSources(basePath, mapAndPath.map, previousPaths); @@ -87,7 +89,7 @@ export class SourceFileLoader { private loadSourceMap(sourcePath: AbsoluteFsPath, contents: string): MapAndPath|null { const inline = commentRegex.exec(contents); if (inline !== null) { - return {map: fromComment(inline.pop() !).sourcemap, mapPath: null}; + return {map: fromComment(inline.pop()!).sourcemap, mapPath: null}; } const external = mapFileCommentRegex.exec(contents); diff --git a/packages/compiler-cli/ngcc/src/utils.ts b/packages/compiler-cli/ngcc/src/utils.ts index fc633164f8..f729abe386 100644 --- a/packages/compiler-cli/ngcc/src/utils.ts +++ b/packages/compiler-cli/ngcc/src/utils.ts @@ -6,7 +6,8 @@ * found in the LICENSE file at https://angular.io/license */ import * as ts from 'typescript'; -import {AbsoluteFsPath, FileSystem, absoluteFrom} from '../../src/ngtsc/file_system'; + +import {absoluteFrom, AbsoluteFsPath, FileSystem} from '../../src/ngtsc/file_system'; import {KnownDeclaration} from '../../src/ngtsc/reflection'; /** @@ -37,11 +38,11 @@ export function getOriginalSymbol(checker: ts.TypeChecker): (symbol: ts.Symbol) }; } -export function isDefined(value: T | undefined | null): value is T { +export function isDefined(value: T|undefined|null): value is T { return (value !== undefined) && (value !== null); } -export function getNameText(name: ts.PropertyName | ts.BindingName): string { +export function getNameText(name: ts.PropertyName|ts.BindingName): string { return ts.isIdentifier(name) || ts.isLiteralExpression(name) ? name.text : name.getText(); } @@ -111,10 +112,12 @@ export class FactoryMap { this.internalMap.set(key, this.factory(key)); } - return this.internalMap.get(key) !; + return this.internalMap.get(key)!; } - set(key: K, value: V): void { this.internalMap.set(key, value); } + set(key: K, value: V): void { + this.internalMap.set(key, value); + } } /** diff --git a/packages/compiler-cli/ngcc/src/writing/cleaning/cleaning_strategies.ts b/packages/compiler-cli/ngcc/src/writing/cleaning/cleaning_strategies.ts index 3bf1861955..12c1ccfcea 100644 --- a/packages/compiler-cli/ngcc/src/writing/cleaning/cleaning_strategies.ts +++ b/packages/compiler-cli/ngcc/src/writing/cleaning/cleaning_strategies.ts @@ -5,15 +5,16 @@ * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ -import {AbsoluteFsPath, FileSystem, PathSegment, absoluteFrom} from '../../../../src/ngtsc/file_system'; +import {absoluteFrom, AbsoluteFsPath, FileSystem, PathSegment} from '../../../../src/ngtsc/file_system'; import {cleanPackageJson} from '../../packages/build_marker'; import {NGCC_BACKUP_EXTENSION} from '../in_place_file_writer'; import {NGCC_DIRECTORY} from '../new_entry_point_file_writer'; + import {isLocalDirectory} from './utils'; /** -* Implement this interface to extend the cleaning strategies of the `PackageCleaner`. -*/ + * Implement this interface to extend the cleaning strategies of the `PackageCleaner`. + */ export interface CleaningStrategy { canClean(path: AbsoluteFsPath, basename: PathSegment): boolean; clean(path: AbsoluteFsPath, basename: PathSegment): void; @@ -44,7 +45,9 @@ export class NgccDirectoryCleaner implements CleaningStrategy { canClean(path: AbsoluteFsPath, basename: PathSegment): boolean { return basename === NGCC_DIRECTORY && isLocalDirectory(this.fs, path); } - clean(path: AbsoluteFsPath, _basename: PathSegment): void { this.fs.removeDeep(path); } + clean(path: AbsoluteFsPath, _basename: PathSegment): void { + this.fs.removeDeep(path); + } } /** diff --git a/packages/compiler-cli/ngcc/src/writing/in_place_file_writer.ts b/packages/compiler-cli/ngcc/src/writing/in_place_file_writer.ts index ab390f2c6f..52c6022053 100644 --- a/packages/compiler-cli/ngcc/src/writing/in_place_file_writer.ts +++ b/packages/compiler-cli/ngcc/src/writing/in_place_file_writer.ts @@ -5,11 +5,12 @@ * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ -import {FileSystem, absoluteFrom, dirname} from '../../../src/ngtsc/file_system'; +import {absoluteFrom, dirname, FileSystem} from '../../../src/ngtsc/file_system'; import {Logger} from '../logging/logger'; import {EntryPointJsonProperty} from '../packages/entry_point'; import {EntryPointBundle} from '../packages/entry_point_bundle'; import {FileToWrite} from '../rendering/utils'; + import {FileWriter} from './file_writer'; export const NGCC_BACKUP_EXTENSION = '.__ivy_ngcc_bak'; @@ -37,7 +38,9 @@ export class InPlaceFileWriter implements FileWriter { `Tried to overwrite ${backPath} with an ngcc back up file, which is disallowed.`); } else { this.logger.error( - `Tried to write ${backPath} with an ngcc back up file but it already exists so not writing, nor backing up, ${file.path}.\n` + + `Tried to write ${ + backPath} with an ngcc back up file but it already exists so not writing, nor backing up, ${ + file.path}.\n` + `This error may be because two or more entry-points overlap and ngcc has been asked to process some files more than once.\n` + `You should check other entry-points in this package and set up a config to ignore any that you are not using.`); } diff --git a/packages/compiler-cli/ngcc/src/writing/new_entry_point_file_writer.ts b/packages/compiler-cli/ngcc/src/writing/new_entry_point_file_writer.ts index 0d78265f3a..40c8fa2c73 100644 --- a/packages/compiler-cli/ngcc/src/writing/new_entry_point_file_writer.ts +++ b/packages/compiler-cli/ngcc/src/writing/new_entry_point_file_writer.ts @@ -6,7 +6,7 @@ * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ -import {AbsoluteFsPath, FileSystem, absoluteFromSourceFile, dirname, join, relative} from '../../../src/ngtsc/file_system'; +import {absoluteFromSourceFile, AbsoluteFsPath, dirname, FileSystem, join, relative} from '../../../src/ngtsc/file_system'; import {isDtsPath} from '../../../src/ngtsc/util/src/typescript'; import {Logger} from '../logging/logger'; import {EntryPoint, EntryPointJsonProperty} from '../packages/entry_point'; @@ -83,8 +83,8 @@ export class NewEntryPointFileWriter extends InPlaceFileWriter { const packageJsonPath = join(entryPoint.path, 'package.json'); // All format properties point to the same format-path. - const oldFormatProp = formatProperties[0] !; - const oldFormatPath = packageJson[oldFormatProp] !; + const oldFormatProp = formatProperties[0]!; + const oldFormatPath = packageJson[oldFormatProp]!; const oldAbsFormatPath = join(entryPoint.path, oldFormatPath); const newAbsFormatPath = join(ngccFolder, relative(entryPoint.package, oldAbsFormatPath)); const newFormatPath = relative(entryPoint.path, newAbsFormatPath); diff --git a/packages/compiler-cli/ngcc/src/writing/package_json_updater.ts b/packages/compiler-cli/ngcc/src/writing/package_json_updater.ts index bfd5295ad4..bf36458300 100644 --- a/packages/compiler-cli/ngcc/src/writing/package_json_updater.ts +++ b/packages/compiler-cli/ngcc/src/writing/package_json_updater.ts @@ -6,12 +6,12 @@ * found in the LICENSE file at https://angular.io/license */ -import {AbsoluteFsPath, FileSystem, dirname} from '../../../src/ngtsc/file_system'; +import {AbsoluteFsPath, dirname, FileSystem} from '../../../src/ngtsc/file_system'; import {JsonObject, JsonValue} from '../packages/entry_point'; export type PackageJsonChange = [string[], JsonValue, PackageJsonPropertyPositioning]; -export type PackageJsonPropertyPositioning = 'unimportant' | 'alphabetic' | {before: string}; +export type PackageJsonPropertyPositioning = 'unimportant'|'alphabetic'|{before: string}; export type WritePackageJsonChangesFn = (changes: PackageJsonChange[], packageJsonPath: AbsoluteFsPath, parsedJson?: JsonObject) => void; diff --git a/packages/compiler-cli/ngcc/test/analysis/decoration_analyzer_spec.ts b/packages/compiler-cli/ngcc/test/analysis/decoration_analyzer_spec.ts index 12b4b62b21..42e932da7d 100644 --- a/packages/compiler-cli/ngcc/test/analysis/decoration_analyzer_spec.ts +++ b/packages/compiler-cli/ngcc/test/analysis/decoration_analyzer_spec.ts @@ -9,7 +9,7 @@ import * as ts from 'typescript'; import {FatalDiagnosticError, makeDiagnostic} from '../../../src/ngtsc/diagnostics'; import {absoluteFrom, getFileSystem, getSourceFileOrError} from '../../../src/ngtsc/file_system'; -import {TestFile, runInEachFileSystem} from '../../../src/ngtsc/file_system/testing'; +import {runInEachFileSystem, TestFile} from '../../../src/ngtsc/file_system/testing'; import {ClassDeclaration, Decorator} from '../../../src/ngtsc/reflection'; import {AnalysisOutput, CompileResult, DecoratorHandler, DetectResult, HandlerPrecedence} from '../../../src/ngtsc/transform'; import {loadFakeCore, loadTestFiles} from '../../../test/helpers'; @@ -21,7 +21,7 @@ import {Migration, MigrationHost} from '../../src/migrations/migration'; import {MockLogger} from '../helpers/mock_logger'; import {getRootFiles, makeTestEntryPointBundle} from '../helpers/utils'; -type DecoratorHandlerWithResolve = DecoratorHandler& { +type DecoratorHandlerWithResolve = DecoratorHandler&{ resolve: NonNullable['resolve']>; }; @@ -29,7 +29,9 @@ runInEachFileSystem(() => { describe('DecorationAnalyzer', () => { let _: typeof absoluteFrom; - beforeEach(() => { _ = absoluteFrom; }); + beforeEach(() => { + _ = absoluteFrom; + }); describe('analyzeProgram()', () => { let logs: string[]; @@ -50,8 +52,8 @@ runInEachFileSystem(() => { ]); // Only detect the Component and Directive decorators handler.detect.and.callFake( - (node: ts.Declaration, decorators: Decorator[] | null): DetectResult| - undefined => { + (node: ts.Declaration, decorators: Decorator[]|null): DetectResult| + undefined => { const className = (node as any).name.text; if (decorators === null) { logs.push(`detect: ${className} (no decorators)`); @@ -94,17 +96,17 @@ runInEachFileSystem(() => { // The "test" compilation result is just the name of the decorator being compiled // (suffixed with `(compiled)`) handler.compile.and.callFake((decl: ts.Declaration, analysis: any) => { - logs.push( - `compile: ${(decl as any).name.text}@${analysis.decoratorName} (resolved: ${analysis.resolved})`); + logs.push(`compile: ${(decl as any).name.text}@${analysis.decoratorName} (resolved: ${ + analysis.resolved})`); return `@${analysis.decoratorName} (compiled)`; }); return handler; }; - function setUpAnalyzer( - testFiles: TestFile[], - options: {analyzeError: boolean, - resolveError: boolean} = {analyzeError: false, resolveError: false}) { + function setUpAnalyzer(testFiles: TestFile[], options: { + analyzeError: boolean, + resolveError: boolean + } = {analyzeError: false, resolveError: false}) { logs = []; loadTestFiles(testFiles); loadFakeCore(getFileSystem()); @@ -173,9 +175,9 @@ runInEachFileSystem(() => { it('should return an object containing a reference to the original source file', () => { const testFile = getSourceFileOrError(program, _('/node_modules/test-package/test.js')); - expect(result.get(testFile) !.sourceFile).toBe(testFile); + expect(result.get(testFile)!.sourceFile).toBe(testFile); const otherFile = getSourceFileOrError(program, _('/node_modules/test-package/other.js')); - expect(result.get(otherFile) !.sourceFile).toBe(otherFile); + expect(result.get(otherFile)!.sourceFile).toBe(otherFile); }); it('should call detect on the decorator handlers with each class from the parsed file', @@ -192,20 +194,23 @@ runInEachFileSystem(() => { it('should return an object containing the classes that were analyzed', () => { const file1 = getSourceFileOrError(program, _('/node_modules/test-package/test.js')); - const compiledFile1 = result.get(file1) !; + const compiledFile1 = result.get(file1)!; expect(compiledFile1.compiledClasses.length).toEqual(2); expect(compiledFile1.compiledClasses[0]).toEqual(jasmine.objectContaining({ - name: 'MyComponent', compilation: ['@Component (compiled)'], + name: 'MyComponent', + compilation: ['@Component (compiled)'], } as unknown as CompiledClass)); expect(compiledFile1.compiledClasses[1]).toEqual(jasmine.objectContaining({ - name: 'MyDirective', compilation: ['@Directive (compiled)'], + name: 'MyDirective', + compilation: ['@Directive (compiled)'], } as unknown as CompiledClass)); const file2 = getSourceFileOrError(program, _('/node_modules/test-package/other.js')); - const compiledFile2 = result.get(file2) !; + const compiledFile2 = result.get(file2)!; expect(compiledFile2.compiledClasses.length).toEqual(1); expect(compiledFile2.compiledClasses[0]).toEqual(jasmine.objectContaining({ - name: 'MyOtherComponent', compilation: ['@Component (compiled)'], + name: 'MyOtherComponent', + compilation: ['@Component (compiled)'], } as unknown as CompiledClass)); }); @@ -284,18 +289,18 @@ runInEachFileSystem(() => { () => { const file = getSourceFileOrError(program, _('/node_modules/test-package/component.js')); - const analysis = result.get(file) !; + const analysis = result.get(file)!; expect(analysis).toBeDefined(); const ImportedComponent = - analysis.compiledClasses.find(f => f.name === 'ImportedComponent') !; + analysis.compiledClasses.find(f => f.name === 'ImportedComponent')!; expect(ImportedComponent).toBeDefined(); }); it('should analyze an internally defined component, which is not exported at all', () => { const file = getSourceFileOrError(program, _('/node_modules/test-package/entrypoint.js')); - const analysis = result.get(file) !; + const analysis = result.get(file)!; expect(analysis).toBeDefined(); - const LocalComponent = analysis.compiledClasses.find(f => f.name === 'LocalComponent') !; + const LocalComponent = analysis.compiledClasses.find(f => f.name === 'LocalComponent')!; expect(LocalComponent).toBeDefined(); }); }); @@ -341,7 +346,7 @@ runInEachFileSystem(() => { }); it('should ignore classes from an externally imported file', () => { - const file = program.getSourceFile(_('/node_modules/other/component.js')) !; + const file = program.getSourceFile(_('/node_modules/other/component.js'))!; expect(result.has(file)).toBe(false); }); }); @@ -427,11 +432,15 @@ runInEachFileSystem(() => { name = 'FakeDecoratorHandler'; precedence = HandlerPrecedence.PRIMARY; - detect(): undefined { throw new Error('detect should not have been called'); } + detect(): undefined { + throw new Error('detect should not have been called'); + } analyze(): AnalysisOutput { throw new Error('analyze should not have been called'); } - compile(): CompileResult { throw new Error('compile should not have been called'); } + compile(): CompileResult { + throw new Error('compile should not have been called'); + } } const analyzer = setUpAnalyzer([{ diff --git a/packages/compiler-cli/ngcc/test/analysis/migration_host_spec.ts b/packages/compiler-cli/ngcc/test/analysis/migration_host_spec.ts index bceeadc9f3..57c3da663f 100644 --- a/packages/compiler-cli/ngcc/test/analysis/migration_host_spec.ts +++ b/packages/compiler-cli/ngcc/test/analysis/migration_host_spec.ts @@ -62,7 +62,7 @@ runInEachFileSystem(() => { const {host, compiler} = createMigrationHost({entryPoint, handlers: [handler]}); host.injectSyntheticDecorator(mockClazz, injectedDecorator); - const record = compiler.recordFor(mockClazz) !; + const record = compiler.recordFor(mockClazz)!; expect(record).toBeDefined(); expect(record.traits.length).toBe(1); expect(record.traits[0].detected.decorator).toBe(injectedDecorator); @@ -77,7 +77,7 @@ runInEachFileSystem(() => { const decorator = createComponentDecorator(mockClazz, {selector: 'comp', exportAs: null}); host.injectSyntheticDecorator(mockClazz, decorator); - const record = compiler.recordFor(mockClazz) !; + const record = compiler.recordFor(mockClazz)!; const migratedTrait = record.traits[0]; if (migratedTrait.state !== TraitState.ERRORED) { return fail('Expected migrated class trait to be in an error state'); @@ -120,7 +120,7 @@ runInEachFileSystem(() => { host.injectSyntheticDecorator(myClass, injectedDecorator); - const decorators = host.getAllDecorators(myClass) !; + const decorators = host.getAllDecorators(myClass)!; expect(decorators.length).toBe(2); expect(decorators[0].name).toBe('Directive'); expect(decorators[1].name).toBe('InjectedDecorator'); @@ -183,9 +183,13 @@ class DetectDecoratorHandler implements DecoratorHandler { return {}; } + analyze(node: ClassDeclaration): AnalysisOutput { + return {}; + } - compile(node: ClassDeclaration): CompileResult|CompileResult[] { return []; } + compile(node: ClassDeclaration): CompileResult|CompileResult[] { + return []; + } } class DiagnosticProducingHandler implements DecoratorHandler { @@ -201,5 +205,7 @@ class DiagnosticProducingHandler implements DecoratorHandler { 'test-package', 'esm2015', false, getRootFiles(TEST_PROGRAM), getRootFiles(TEST_DTS_PROGRAM)); program = bundle.src.program; - dtsProgram = bundle.dts !; + dtsProgram = bundle.dts!; const host = new Esm2015ReflectionHost(new MockLogger(), false, bundle.src, dtsProgram); referencesRegistry = new NgccReferencesRegistry(host); @@ -367,8 +367,8 @@ runInEachFileSystem(() => { const libraryModuleDeclaration = getDeclaration( program, absoluteFrom('/node_modules/some-library/index.d.ts'), 'LibraryModule', ts.isClassDeclaration); - expect(declarations.has(externalModuleDeclaration.name !)).toBe(true); - expect(declarations.has(libraryModuleDeclaration.name !)).toBe(false); + expect(declarations.has(externalModuleDeclaration.name!)).toBe(true); + expect(declarations.has(libraryModuleDeclaration.name!)).toBe(false); }); it('should find declarations that have implicit return types', () => { @@ -414,13 +414,12 @@ runInEachFileSystem(() => { analyses: ModuleWithProvidersAnalyses, fileName: AbsoluteFsPath) { const file = getSourceFileOrError(dtsProgram.program, fileName); const analysis = analyses.get(file); - return analysis ? - analysis.map( - info => - [info.declaration.name !.getText(), - (info.ngModule.node as ts.ClassDeclaration).name !.getText(), - info.ngModule.viaModule]) : - []; + return analysis ? analysis.map( + info => + [info.declaration.name!.getText(), + (info.ngModule.node as ts.ClassDeclaration).name!.getText(), + info.ngModule.viaModule]) : + []; } }); }); @@ -536,7 +535,7 @@ runInEachFileSystem(() => { 'test-package', 'esm2015', false, getRootFiles(TEST_PROGRAM), getRootFiles(TEST_DTS_PROGRAM)); const program = bundle.src.program; - const dtsProgram = bundle.dts !; + const dtsProgram = bundle.dts!; const host = new Esm2015ReflectionHost(new MockLogger(), false, bundle.src, dtsProgram); const referencesRegistry = new NgccReferencesRegistry(host); @@ -558,9 +557,9 @@ runInEachFileSystem(() => { const libraryModuleDeclaration = getDeclaration( program, absoluteFrom('/node_modules/some-library/index.d.ts'), 'LibraryModule', ts.isClassDeclaration); - expect(declarations.has(explicitInternalModuleDeclaration.name !)).toBe(true); - expect(declarations.has(externalModuleDeclaration.name !)).toBe(true); - expect(declarations.has(libraryModuleDeclaration.name !)).toBe(false); + expect(declarations.has(explicitInternalModuleDeclaration.name!)).toBe(true); + expect(declarations.has(externalModuleDeclaration.name!)).toBe(true); + expect(declarations.has(libraryModuleDeclaration.name!)).toBe(false); }); it('should track references even when typings have already been processed', () => { @@ -586,9 +585,9 @@ runInEachFileSystem(() => { const libraryModuleDeclaration = getDeclaration( program, absoluteFrom('/node_modules/some-library/index.d.ts'), 'LibraryModule', ts.isClassDeclaration); - expect(declarations.has(explicitInternalModuleDeclaration.name !)).toBe(true); - expect(declarations.has(externalModuleDeclaration.name !)).toBe(true); - expect(declarations.has(libraryModuleDeclaration.name !)).toBe(false); + expect(declarations.has(explicitInternalModuleDeclaration.name!)).toBe(true); + expect(declarations.has(externalModuleDeclaration.name!)).toBe(true); + expect(declarations.has(libraryModuleDeclaration.name!)).toBe(false); }); }); }); diff --git a/packages/compiler-cli/ngcc/test/analysis/ngcc_trait_compiler_spec.ts b/packages/compiler-cli/ngcc/test/analysis/ngcc_trait_compiler_spec.ts index c164a76a5e..776be92f05 100644 --- a/packages/compiler-cli/ngcc/test/analysis/ngcc_trait_compiler_spec.ts +++ b/packages/compiler-cli/ngcc/test/analysis/ngcc_trait_compiler_spec.ts @@ -91,7 +91,7 @@ runInEachFileSystem(() => { const record = compiler.recordFor(mockClazz); expect(record).toBeDefined(); - expect(record !.traits.length).toBe(1); + expect(record!.traits.length).toBe(1); }); it('should add a new trait to an existing class record', () => { @@ -118,11 +118,11 @@ runInEachFileSystem(() => { compiler.analyzeFile(entryPoint.src.file); compiler.injectSyntheticDecorator(myClass, injectedDecorator); - const record = compiler.recordFor(myClass) !; + const record = compiler.recordFor(myClass)!; expect(record).toBeDefined(); expect(record.traits.length).toBe(2); - expect(record.traits[0].detected.decorator !.name).toBe('Directive'); - expect(record.traits[1].detected.decorator !.name).toBe('InjectedDecorator'); + expect(record.traits[0].detected.decorator!.name).toBe('Directive'); + expect(record.traits[1].detected.decorator!.name).toBe('InjectedDecorator'); }); it('should not add a weak handler when a primary handler already exists', () => { @@ -150,10 +150,10 @@ runInEachFileSystem(() => { compiler.injectSyntheticDecorator(myClass, injectedDecorator); - const record = compiler.recordFor(myClass) !; + const record = compiler.recordFor(myClass)!; expect(record).toBeDefined(); expect(record.traits.length).toBe(1); - expect(record.traits[0].detected.decorator !.name).toBe('Directive'); + expect(record.traits[0].detected.decorator!.name).toBe('Directive'); }); it('should replace an existing weak handler when injecting a primary handler', () => { @@ -181,10 +181,10 @@ runInEachFileSystem(() => { compiler.injectSyntheticDecorator(myClass, injectedDecorator); - const record = compiler.recordFor(myClass) !; + const record = compiler.recordFor(myClass)!; expect(record).toBeDefined(); expect(record.traits.length).toBe(1); - expect(record.traits[0].detected.decorator !.name).toBe('InjectedDecorator'); + expect(record.traits[0].detected.decorator!.name).toBe('InjectedDecorator'); }); it('should produce an error when a primary handler is added when a primary handler is already present', @@ -214,12 +214,11 @@ runInEachFileSystem(() => { compiler.injectSyntheticDecorator(myClass, injectedDecorator); - const record = compiler.recordFor(myClass) !; + const record = compiler.recordFor(myClass)!; expect(record).toBeDefined(); expect(record.metaDiagnostics).toBeDefined(); - expect(record.metaDiagnostics !.length).toBe(1); - expect(record.metaDiagnostics ![0].code) - .toBe(ngErrorCode(ErrorCode.DECORATOR_COLLISION)); + expect(record.metaDiagnostics!.length).toBe(1); + expect(record.metaDiagnostics![0].code).toBe(ngErrorCode(ErrorCode.DECORATOR_COLLISION)); expect(record.traits.length).toBe(0); }); @@ -233,7 +232,7 @@ runInEachFileSystem(() => { const decorator = createComponentDecorator(mockClazz, {selector: 'comp', exportAs: null}); compiler.injectSyntheticDecorator(mockClazz, decorator); - const record = compiler.recordFor(mockClazz) !; + const record = compiler.recordFor(mockClazz)!; const migratedTrait = record.traits[0]; if (migratedTrait.state !== TraitState.ERRORED) { return fail('Expected migrated class trait to be in an error state'); @@ -286,13 +285,12 @@ runInEachFileSystem(() => { compiler.injectSyntheticDecorator(myClass, injectedDecorator); - const decorators = compiler.getAllDecorators(myClass) !; + const decorators = compiler.getAllDecorators(myClass)!; expect(decorators.length).toBe(2); expect(decorators[0].name).toBe('Directive'); expect(decorators[1].name).toBe('InjectedDecorator'); }); }); - }); }); @@ -302,7 +300,7 @@ class TestHandler implements DecoratorHandler { precedence = HandlerPrecedence.PRIMARY; detect(node: ClassDeclaration, decorators: Decorator[]|null): DetectResult|undefined { - this.log.push(`${this.name}:detect:${node.name.text}:${decorators !.map(d => d.name)}`); + this.log.push(`${this.name}:detect:${node.name.text}:${decorators!.map(d => d.name)}`); return undefined; } diff --git a/packages/compiler-cli/ngcc/test/analysis/private_declarations_analyzer_spec.ts b/packages/compiler-cli/ngcc/test/analysis/private_declarations_analyzer_spec.ts index f31e9c003c..ec9ed520bc 100644 --- a/packages/compiler-cli/ngcc/test/analysis/private_declarations_analyzer_spec.ts +++ b/packages/compiler-cli/ngcc/test/analysis/private_declarations_analyzer_spec.ts @@ -7,8 +7,8 @@ */ import * as ts from 'typescript'; -import {AbsoluteFsPath, absoluteFrom} from '../../../src/ngtsc/file_system'; -import {TestFile, runInEachFileSystem} from '../../../src/ngtsc/file_system/testing'; +import {absoluteFrom, AbsoluteFsPath} from '../../../src/ngtsc/file_system'; +import {runInEachFileSystem, TestFile} from '../../../src/ngtsc/file_system/testing'; import {Reference} from '../../../src/ngtsc/imports'; import {getDeclaration} from '../../../src/ngtsc/testing'; import {loadTestFiles} from '../../../test/helpers/src/mock_file_loading'; @@ -192,6 +192,6 @@ runInEachFileSystem(() => { program: ts.Program, registry: NgccReferencesRegistry, fileName: AbsoluteFsPath, componentName: string) { const declaration = getDeclaration(program, fileName, componentName, ts.isClassDeclaration); - registry.add(null !, new Reference(declaration)); + registry.add(null!, new Reference(declaration)); } }); diff --git a/packages/compiler-cli/ngcc/test/analysis/references_registry_spec.ts b/packages/compiler-cli/ngcc/test/analysis/references_registry_spec.ts index 73e2d542b1..83d56e5a9a 100644 --- a/packages/compiler-cli/ngcc/test/analysis/references_registry_spec.ts +++ b/packages/compiler-cli/ngcc/test/analysis/references_registry_spec.ts @@ -8,7 +8,7 @@ import * as ts from 'typescript'; import {absoluteFrom} from '../../../src/ngtsc/file_system'; -import {TestFile, runInEachFileSystem} from '../../../src/ngtsc/file_system/testing'; +import {runInEachFileSystem, TestFile} from '../../../src/ngtsc/file_system/testing'; import {Reference} from '../../../src/ngtsc/imports'; import {PartialEvaluator} from '../../../src/ngtsc/partial_evaluator'; import {TypeScriptReflectionHost} from '../../../src/ngtsc/reflection'; @@ -44,19 +44,19 @@ runInEachFileSystem(() => { getDeclaration(program, indexPath, 'someFunction', ts.isFunctionDeclaration); const someVariableDecl = getDeclaration(program, indexPath, 'someVariable', ts.isVariableDeclaration); - const testArrayExpression = testArrayDeclaration.initializer !; + const testArrayExpression = testArrayDeclaration.initializer!; const reflectionHost = new TypeScriptReflectionHost(checker); const evaluator = new PartialEvaluator(reflectionHost, checker, /* dependencyTracker */ null); const registry = new NgccReferencesRegistry(reflectionHost); const references = (evaluator.evaluate(testArrayExpression) as any[]).filter(isReference); - registry.add(null !, ...references); + registry.add(null!, ...references); const map = registry.getDeclarationMap(); expect(map.size).toEqual(2); - expect(map.get(someClassDecl.name !) !.node).toBe(someClassDecl); - expect(map.get(someFunctionDecl.name !) !.node).toBe(someFunctionDecl); + expect(map.get(someClassDecl.name!)!.node).toBe(someClassDecl); + expect(map.get(someFunctionDecl.name!)!.node).toBe(someFunctionDecl); expect(map.has(someVariableDecl.name as ts.Identifier)).toBe(false); }); }); diff --git a/packages/compiler-cli/ngcc/test/analysis/switch_marker_analyzer_spec.ts b/packages/compiler-cli/ngcc/test/analysis/switch_marker_analyzer_spec.ts index b67ab259b8..53f91a7d46 100644 --- a/packages/compiler-cli/ngcc/test/analysis/switch_marker_analyzer_spec.ts +++ b/packages/compiler-cli/ngcc/test/analysis/switch_marker_analyzer_spec.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ import {absoluteFrom, getSourceFileOrError} from '../../../src/ngtsc/file_system'; -import {TestFile, runInEachFileSystem} from '../../../src/ngtsc/file_system/testing'; +import {runInEachFileSystem, TestFile} from '../../../src/ngtsc/file_system/testing'; import {loadTestFiles} from '../../../test/helpers'; import {SwitchMarkerAnalyzer} from '../../src/analysis/switch_marker_analyzer'; import {Esm2015ReflectionHost} from '../../src/host/esm2015_host'; @@ -15,7 +15,6 @@ import {makeTestEntryPointBundle} from '../helpers/utils'; runInEachFileSystem(() => { describe('SwitchMarkerAnalyzer', () => { - let _: typeof absoluteFrom; let TEST_PROGRAM: TestFile[]; @@ -87,14 +86,14 @@ runInEachFileSystem(() => { expect(analysis.has(entrypoint)).toBe(false); expect(analysis.has(a)).toBe(false); expect(analysis.has(b)).toBe(true); - expect(analysis.get(b) !.sourceFile).toBe(b); - expect(analysis.get(b) !.declarations.map(decl => decl.getText())).toEqual([ + expect(analysis.get(b)!.sourceFile).toBe(b); + expect(analysis.get(b)!.declarations.map(decl => decl.getText())).toEqual([ 'factoryB = factory__PRE_R3__' ]); expect(analysis.has(c)).toBe(true); - expect(analysis.get(c) !.sourceFile).toBe(c); - expect(analysis.get(c) !.declarations.map(decl => decl.getText())).toEqual([ + expect(analysis.get(c)!.sourceFile).toBe(c); + expect(analysis.get(c)!.declarations.map(decl => decl.getText())).toEqual([ 'factoryC = factory__PRE_R3__', 'factoryD = factory__PRE_R3__', ]); diff --git a/packages/compiler-cli/ngcc/test/dependencies/commonjs_dependency_host_spec.ts b/packages/compiler-cli/ngcc/test/dependencies/commonjs_dependency_host_spec.ts index e0966c775e..9244efe96d 100644 --- a/packages/compiler-cli/ngcc/test/dependencies/commonjs_dependency_host_spec.ts +++ b/packages/compiler-cli/ngcc/test/dependencies/commonjs_dependency_host_spec.ts @@ -387,7 +387,7 @@ runInEachFileSystem(() => { reExportsWithoutRequire?: string[]; } - function commonJs(importsPerType: ImportsPerType | string[], exportNames: string[] = []): string { + function commonJs(importsPerType: ImportsPerType|string[], exportNames: string[] = []): string { if (Array.isArray(importsPerType)) { importsPerType = {varDeclaration: importsPerType}; } @@ -414,8 +414,9 @@ runInEachFileSystem(() => { } = importsPerType; // var foo = require('...'); - importsOfTypeVarDeclaration.forEach( - p => { importStatements.push(`var ${pathToVarName(p)} = require('${p}');`); }); + importsOfTypeVarDeclaration.forEach(p => { + importStatements.push(`var ${pathToVarName(p)} = require('${p}');`); + }); // var foo = require('...'), bar = require('...'); importsOfTypeVarDeclarations.forEach(pp => { @@ -424,8 +425,9 @@ runInEachFileSystem(() => { }); // exports.foo = require('...'); - importsOfTypePropAssignment.forEach( - p => { importStatements.push(`exports.${pathToVarName(p)} = require('${p}');`); }); + importsOfTypePropAssignment.forEach(p => { + importStatements.push(`exports.${pathToVarName(p)} = require('${p}');`); + }); // module.exports = {foo: require('...')}; const propAssignments = @@ -434,15 +436,19 @@ runInEachFileSystem(() => { importStatements.push(`module.exports = {${propAssignments}\n};`); // require('...'); - importsOfTypeForSideEffects.forEach(p => { importStatements.push(`require('${p}');`); }); + importsOfTypeForSideEffects.forEach(p => { + importStatements.push(`require('${p}');`); + }); // __export(require('...')); - importsOfTypeReExportsWithEmittedHelper.forEach( - p => { importStatements.push(`__export(require('${p}'));`); }); + importsOfTypeReExportsWithEmittedHelper.forEach(p => { + importStatements.push(`__export(require('${p}'));`); + }); // tslib_1.__exportStar(require('...'), exports); - importsOfTypeReExportsWithImportedHelper.forEach( - p => { importStatements.push(`tslib_1.__exportStar(require('${p}'), exports);`); }); + importsOfTypeReExportsWithImportedHelper.forEach(p => { + importStatements.push(`tslib_1.__exportStar(require('${p}'), exports);`); + }); // var foo = require('...'); // __export(foo); diff --git a/packages/compiler-cli/ngcc/test/dependencies/dependency_resolver_spec.ts b/packages/compiler-cli/ngcc/test/dependencies/dependency_resolver_spec.ts index 65ac921e24..0fffdbcf90 100644 --- a/packages/compiler-cli/ngcc/test/dependencies/dependency_resolver_spec.ts +++ b/packages/compiler-cli/ngcc/test/dependencies/dependency_resolver_spec.ts @@ -8,7 +8,7 @@ import {DepGraph} from 'dependency-graph'; -import {AbsoluteFsPath, FileSystem, absoluteFrom, getFileSystem, relativeFrom} from '../../../src/ngtsc/file_system'; +import {absoluteFrom, AbsoluteFsPath, FileSystem, getFileSystem, relativeFrom} from '../../../src/ngtsc/file_system'; import {runInEachFileSystem} from '../../../src/ngtsc/file_system/testing'; import {DependencyInfo} from '../../src/dependencies/dependency_host'; import {DependencyResolver, SortedEntryPointsInfo} from '../../src/dependencies/dependency_resolver'; @@ -254,7 +254,8 @@ runInEachFileSystem(() => { const result = resolver.sortEntryPointsByDependency([first]); expect(result.entryPoints).toEqual([first]); expect(logger.logs.warn).toEqual([[ - `Entry point 'first' contains deep imports into '${_('/deep/one')}'. This is probably not a problem, but may cause the compilation of entry points to be out of order.` + `Entry point 'first' contains deep imports into '${ + _('/deep/one')}'. This is probably not a problem, but may cause the compilation of entry points to be out of order.` ]]); }); @@ -292,14 +293,14 @@ runInEachFileSystem(() => { const result = resolver.sortEntryPointsByDependency([testEntryPoint]); expect(result.entryPoints).toEqual([testEntryPoint]); expect(logger.logs.warn).toEqual([[ - `Entry point 'test-package' contains deep imports into '${_('/project/node_modules/deeper/one')}'. This is probably not a problem, but may cause the compilation of entry points to be out of order.` + `Entry point 'test-package' contains deep imports into '${ + _('/project/node_modules/deeper/one')}'. This is probably not a problem, but may cause the compilation of entry points to be out of order.` ]]); - }); it('should error if the entry point does not have a suitable format', () => { expect(() => resolver.sortEntryPointsByDependency([ - { path: '/first', packageJson: {}, compiledByAngular: true } as EntryPoint + {path: '/first', packageJson: {}, compiledByAngular: true} as EntryPoint ])).toThrowError(`There is no appropriate source code format in '/first' entry-point.`); }); @@ -307,7 +308,8 @@ runInEachFileSystem(() => { resolver = new DependencyResolver(fs, new MockLogger(), config, {esm2015: host}, host); expect(() => resolver.sortEntryPointsByDependency([first])) .toThrowError( - `Could not find a suitable format for computing dependencies of entry-point: '${first.path}'.`); + `Could not find a suitable format for computing dependencies of entry-point: '${ + first.path}'.`); }); it('should capture any dependencies that were ignored', () => { @@ -462,7 +464,7 @@ runInEachFileSystem(() => { deps[entryPointPath].missing.forEach( dep => missing.add(fs.isRooted(dep) ? absoluteFrom(dep) : relativeFrom(dep))); if (deps[entryPointPath].deepImports) { - deps[entryPointPath].deepImports !.forEach(dep => deepImports.add(dep)); + deps[entryPointPath].deepImports!.forEach(dep => deepImports.add(dep)); } return {dependencies, missing, deepImports}; }; diff --git a/packages/compiler-cli/ngcc/test/dependencies/dts_dependency_host_spec.ts b/packages/compiler-cli/ngcc/test/dependencies/dts_dependency_host_spec.ts index eb7986c8f8..48a9623934 100644 --- a/packages/compiler-cli/ngcc/test/dependencies/dts_dependency_host_spec.ts +++ b/packages/compiler-cli/ngcc/test/dependencies/dts_dependency_host_spec.ts @@ -14,7 +14,6 @@ import {createDependencyInfo} from '../../src/dependencies/dependency_host'; import {DtsDependencyHost} from '../../src/dependencies/dts_dependency_host'; runInEachFileSystem(() => { - describe('DtsDependencyHost', () => { let _: typeof absoluteFrom; let host: DtsDependencyHost; diff --git a/packages/compiler-cli/ngcc/test/dependencies/esm_dependency_host_spec.ts b/packages/compiler-cli/ngcc/test/dependencies/esm_dependency_host_spec.ts index 259e8d5cac..b0c79838d8 100644 --- a/packages/compiler-cli/ngcc/test/dependencies/esm_dependency_host_spec.ts +++ b/packages/compiler-cli/ngcc/test/dependencies/esm_dependency_host_spec.ts @@ -16,7 +16,6 @@ import {EsmDependencyHost, hasImportOrReexportStatements, isStringImportOrReexpo import {ModuleResolver} from '../../src/dependencies/module_resolver'; runInEachFileSystem(() => { - describe('EsmDependencyHost', () => { let _: typeof absoluteFrom; let host: EsmDependencyHost; diff --git a/packages/compiler-cli/ngcc/test/dependencies/umd_dependency_host_spec.ts b/packages/compiler-cli/ngcc/test/dependencies/umd_dependency_host_spec.ts index f778abfca3..b736790fdd 100644 --- a/packages/compiler-cli/ngcc/test/dependencies/umd_dependency_host_spec.ts +++ b/packages/compiler-cli/ngcc/test/dependencies/umd_dependency_host_spec.ts @@ -251,8 +251,10 @@ runInEachFileSystem(() => { exportNames.map(e => ` exports.${e.replace(/.+\./, '')} = ${e};`).join('\n'); return ` (function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports${commonJsRequires}) : - typeof define === 'function' && define.amd ? define('${moduleName}', ['exports'${amdDeps}], factory) : + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports${ + commonJsRequires}) : + typeof define === 'function' && define.amd ? define('${moduleName}', ['exports'${ + amdDeps}], factory) : (factory(global.${moduleName}${globalParams})); }(this, (function (exports${params}) { 'use strict'; ${exportStatements} diff --git a/packages/compiler-cli/ngcc/test/entry_point_finder/directory_walker_entry_point_finder_spec.ts b/packages/compiler-cli/ngcc/test/entry_point_finder/directory_walker_entry_point_finder_spec.ts index 9d9c873fab..a8990eb5d1 100644 --- a/packages/compiler-cli/ngcc/test/entry_point_finder/directory_walker_entry_point_finder_spec.ts +++ b/packages/compiler-cli/ngcc/test/entry_point_finder/directory_walker_entry_point_finder_spec.ts @@ -5,8 +5,8 @@ * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ -import {AbsoluteFsPath, FileSystem, absoluteFrom, getFileSystem, relative} from '../../../src/ngtsc/file_system'; -import {TestFile, runInEachFileSystem} from '../../../src/ngtsc/file_system/testing'; +import {absoluteFrom, AbsoluteFsPath, FileSystem, getFileSystem, relative} from '../../../src/ngtsc/file_system'; +import {runInEachFileSystem, TestFile} from '../../../src/ngtsc/file_system/testing'; import {loadTestFiles} from '../../../test/helpers'; import {DependencyResolver} from '../../src/dependencies/dependency_resolver'; import {DtsDependencyHost} from '../../src/dependencies/dts_dependency_host'; diff --git a/packages/compiler-cli/ngcc/test/entry_point_finder/targeted_entry_point_finder_spec.ts b/packages/compiler-cli/ngcc/test/entry_point_finder/targeted_entry_point_finder_spec.ts index 0bbd51fbfb..e8555324b8 100644 --- a/packages/compiler-cli/ngcc/test/entry_point_finder/targeted_entry_point_finder_spec.ts +++ b/packages/compiler-cli/ngcc/test/entry_point_finder/targeted_entry_point_finder_spec.ts @@ -5,8 +5,8 @@ * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ -import {AbsoluteFsPath, FileSystem, absoluteFrom, getFileSystem, relative} from '../../../src/ngtsc/file_system'; -import {TestFile, runInEachFileSystem} from '../../../src/ngtsc/file_system/testing'; +import {absoluteFrom, AbsoluteFsPath, FileSystem, getFileSystem, relative} from '../../../src/ngtsc/file_system'; +import {runInEachFileSystem, TestFile} from '../../../src/ngtsc/file_system/testing'; import {loadTestFiles} from '../../../test/helpers'; import {DependencyResolver} from '../../src/dependencies/dependency_resolver'; import {DtsDependencyHost} from '../../src/dependencies/dts_dependency_host'; @@ -365,7 +365,6 @@ runInEachFileSystem(() => { basePath: AbsoluteFsPath, entryPoints: EntryPoint[]): [string, string][] { return entryPoints.map(x => [relative(basePath, x.package), relative(basePath, x.path)]); } - }); describe('targetNeedsProcessingOrCleaning()', () => { diff --git a/packages/compiler-cli/ngcc/test/entry_point_finder/utils_spec.ts b/packages/compiler-cli/ngcc/test/entry_point_finder/utils_spec.ts index 996370b9da..840a3e1b45 100644 --- a/packages/compiler-cli/ngcc/test/entry_point_finder/utils_spec.ts +++ b/packages/compiler-cli/ngcc/test/entry_point_finder/utils_spec.ts @@ -132,9 +132,12 @@ runInEachFileSystem(() => { fs.resolve(projectDirectory, 'dist-1'), ]); expect(logger.logs.warn).toEqual([ - [`The basePath "${fs.resolve(projectDirectory, 'sub-folder/dist-2')}" computed from baseUrl "${projectDirectory}" and path mapping "sub-folder/dist-2" does not exist in the file-system.\n` + + [`The basePath "${ + fs.resolve(projectDirectory, 'sub-folder/dist-2')}" computed from baseUrl "${ + projectDirectory}" and path mapping "sub-folder/dist-2" does not exist in the file-system.\n` + `It will not be scanned for entry-points.`], - [`The basePath "${fs.resolve(projectDirectory, 'libs')}" computed from baseUrl "${projectDirectory}" and path mapping "libs/*" does not exist in the file-system.\n` + + [`The basePath "${fs.resolve(projectDirectory, 'libs')}" computed from baseUrl "${ + projectDirectory}" and path mapping "libs/*" does not exist in the file-system.\n` + `It will not be scanned for entry-points.`], ]); }); diff --git a/packages/compiler-cli/ngcc/test/execution/cluster/executor_spec.ts b/packages/compiler-cli/ngcc/test/execution/cluster/executor_spec.ts index 1fc5696786..87d264ab5a 100644 --- a/packages/compiler-cli/ngcc/test/execution/cluster/executor_spec.ts +++ b/packages/compiler-cli/ngcc/test/execution/cluster/executor_spec.ts @@ -51,7 +51,7 @@ describe('ClusterExecutor', () => { describe('(on cluster master)', () => { beforeEach(() => runAsClusterMaster(true)); - it('should log debug info about the executor', async() => { + it('should log debug info about the executor', async () => { const anyFn: () => any = () => undefined; await executor.execute(anyFn, anyFn); @@ -60,7 +60,7 @@ describe('ClusterExecutor', () => { ]); }); - it('should delegate to `ClusterMaster#run()`', async() => { + it('should delegate to `ClusterMaster#run()`', async () => { const analyzeEntryPointsSpy = jasmine.createSpy('analyzeEntryPoints'); const createCompilerFnSpy = jasmine.createSpy('createCompilerFn'); @@ -75,13 +75,13 @@ describe('ClusterExecutor', () => { }); it('should call LockFile.write() and LockFile.remove() if master runner completes successfully', - async() => { + async () => { const anyFn: () => any = () => undefined; await executor.execute(anyFn, anyFn); expect(lockFileLog).toEqual(['write()', 'remove()']); }); - it('should call LockFile.write() and LockFile.remove() if master runner fails', async() => { + it('should call LockFile.write() and LockFile.remove() if master runner fails', async () => { const anyFn: () => any = () => undefined; masterRunSpy.and.returnValue(Promise.reject(new Error('master runner error'))); let error = ''; @@ -94,7 +94,7 @@ describe('ClusterExecutor', () => { expect(lockFileLog).toEqual(['write()', 'remove()']); }); - it('should not call master runner if LockFile.write() fails', async() => { + it('should not call master runner if LockFile.write() fails', async () => { const anyFn: () => any = () => undefined; spyOn(mockLockFile, 'write').and.callFake(() => { lockFileLog.push('write()'); @@ -114,7 +114,7 @@ describe('ClusterExecutor', () => { expect(masterRunSpy).not.toHaveBeenCalled(); }); - it('should fail if LockFile.remove() fails', async() => { + it('should fail if LockFile.remove() fails', async () => { const anyFn: () => any = () => undefined; spyOn(mockLockFile, 'remove').and.callFake(() => { lockFileLog.push('remove()'); @@ -139,14 +139,14 @@ describe('ClusterExecutor', () => { describe('(on cluster worker)', () => { beforeEach(() => runAsClusterMaster(false)); - it('should not log debug info about the executor', async() => { + it('should not log debug info about the executor', async () => { const anyFn: () => any = () => undefined; await executor.execute(anyFn, anyFn); expect(mockLogger.logs.debug).toEqual([]); }); - it('should delegate to `ClusterWorker#run()`', async() => { + it('should delegate to `ClusterWorker#run()`', async () => { const analyzeEntryPointsSpy = jasmine.createSpy('analyzeEntryPoints'); const createCompilerFnSpy = jasmine.createSpy('createCompilerFn'); @@ -160,7 +160,7 @@ describe('ClusterExecutor', () => { expect(createCompilerFnSpy).toHaveBeenCalledWith(jasmine.any(Function)); }); - it('should not call LockFile.write() or LockFile.remove()', async() => { + it('should not call LockFile.write() or LockFile.remove()', async () => { const anyFn: () => any = () => undefined; await executor.execute(anyFn, anyFn); expect(lockFileLog).toEqual([]); diff --git a/packages/compiler-cli/ngcc/test/execution/cluster/package_json_updater_spec.ts b/packages/compiler-cli/ngcc/test/execution/cluster/package_json_updater_spec.ts index d2cea43299..9a556f8f42 100644 --- a/packages/compiler-cli/ngcc/test/execution/cluster/package_json_updater_spec.ts +++ b/packages/compiler-cli/ngcc/test/execution/cluster/package_json_updater_spec.ts @@ -39,8 +39,9 @@ runInEachFileSystem(() => { isMaster => describe(`(on cluster ${isMaster ? 'master' : 'worker'})`, () => { beforeEach(() => runAsClusterMaster(isMaster)); - it('should return a `PackageJsonUpdate` instance', - () => { expect(updater.createUpdate()).toEqual(jasmine.any(PackageJsonUpdate)); }); + it('should return a `PackageJsonUpdate` instance', () => { + expect(updater.createUpdate()).toEqual(jasmine.any(PackageJsonUpdate)); + }); it('should wire up the `PackageJsonUpdate` with its `writeChanges()` method', () => { const writeChangesSpy = spyOn(updater, 'writeChanges'); diff --git a/packages/compiler-cli/ngcc/test/execution/cluster/worker_spec.ts b/packages/compiler-cli/ngcc/test/execution/cluster/worker_spec.ts index 89463a3b92..b9d92e47d9 100644 --- a/packages/compiler-cli/ngcc/test/execution/cluster/worker_spec.ts +++ b/packages/compiler-cli/ngcc/test/execution/cluster/worker_spec.ts @@ -60,11 +60,9 @@ describe('ClusterWorker', () => { onTaskCompleted(null as any, TaskProcessingOutcome.Processed, null); expect(processSendSpy).toHaveBeenCalledTimes(1); - expect(processSendSpy).toHaveBeenCalledWith({ - type: 'task-completed', - outcome: TaskProcessingOutcome.Processed, - message: null - }); + expect(processSendSpy) + .toHaveBeenCalledWith( + {type: 'task-completed', outcome: TaskProcessingOutcome.Processed, message: null}); processSendSpy.calls.reset(); @@ -137,7 +135,9 @@ describe('ClusterWorker', () => { } as unknown as Task; let err: string|Error; - compileFnSpy.and.callFake(() => { throw err; }); + compileFnSpy.and.callFake(() => { + throw err; + }); worker.run(); diff --git a/packages/compiler-cli/ngcc/test/execution/helpers.ts b/packages/compiler-cli/ngcc/test/execution/helpers.ts index 0cd3fbd139..a72ad23452 100644 --- a/packages/compiler-cli/ngcc/test/execution/helpers.ts +++ b/packages/compiler-cli/ngcc/test/execution/helpers.ts @@ -14,8 +14,8 @@ import {EntryPoint} from '../../src/packages/entry_point'; * * NOTE 1: The first task for each entry-point generates typings (which is similar to what happens * in the actual code). - * NOTE 2: The `computeTaskDependencies()` implementation relies on the fact that tasks are sorted in such - * a way that a task can only depend upon earlier tasks (i.e. dependencies always come + * NOTE 2: The `computeTaskDependencies()` implementation relies on the fact that tasks are sorted + * in such a way that a task can only depend upon earlier tasks (i.e. dependencies always come * before dependents in the list of tasks). * To preserve this attribute, you need to ensure that entry-points will only depend on * entry-points with a lower index. Take this into account when defining `entryPointDeps`. @@ -52,7 +52,7 @@ export function createTasksAndGraph( graph.addNode(entryPoint.path); for (let tIdx = 0; tIdx < tasksPerEntryPointCount; tIdx++) { - tasks.push({ entryPoint, formatProperty: `prop-${tIdx}`, processDts: tIdx === 0 } as Task); + tasks.push({entryPoint, formatProperty: `prop-${tIdx}`, processDts: tIdx === 0} as Task); } } diff --git a/packages/compiler-cli/ngcc/test/execution/single_processor_executor_spec.ts b/packages/compiler-cli/ngcc/test/execution/single_processor_executor_spec.ts index b6e7c09db8..a1fdb16e79 100644 --- a/packages/compiler-cli/ngcc/test/execution/single_processor_executor_spec.ts +++ b/packages/compiler-cli/ngcc/test/execution/single_processor_executor_spec.ts @@ -33,11 +33,13 @@ describe('SingleProcessExecutor', () => { executor = new SingleProcessExecutorSync(mockLogger, locker, createTaskCompletedCallback); }); - const noTasks = () => ({ allTasksCompleted: true, getNextTask: () => null } as TaskQueue); + const noTasks = () => ({allTasksCompleted: true, getNextTask: () => null} as TaskQueue); const oneTask = () => { let tasksCount = 1; return { - get allTasksCompleted() { return tasksCount === 0; }, + get allTasksCompleted() { + return tasksCount === 0; + }, getNextTask() { tasksCount--; return {}; @@ -55,7 +57,9 @@ describe('SingleProcessExecutor', () => { }); it('should call LockFile.write() and LockFile.remove() if `analyzeEntryPoints` fails', () => { - const errorFn: () => never = () => { throw new Error('analyze error'); }; + const errorFn: () => never = () => { + throw new Error('analyze error'); + }; const createCompileFn: () => any = () => undefined; let error: string = ''; try { @@ -68,7 +72,9 @@ describe('SingleProcessExecutor', () => { }); it('should call LockFile.write() and LockFile.remove() if `createCompileFn` fails', () => { - const createErrorCompileFn: () => any = () => { throw new Error('compile error'); }; + const createErrorCompileFn: () => any = () => { + throw new Error('compile error'); + }; let error: string = ''; try { executor.execute(oneTask, createErrorCompileFn); @@ -85,7 +91,9 @@ describe('SingleProcessExecutor', () => { throw new Error('LockFile.write() error'); }); - const analyzeFn: () => any = () => { lockFileLog.push('analyzeFn'); }; + const analyzeFn: () => any = () => { + lockFileLog.push('analyzeFn'); + }; const anyFn: () => any = () => undefined; executor = new SingleProcessExecutorSync(mockLogger, locker, createTaskCompletedCallback); let error = ''; diff --git a/packages/compiler-cli/ngcc/test/execution/tasks/queues/parallel_task_queue_spec.ts b/packages/compiler-cli/ngcc/test/execution/tasks/queues/parallel_task_queue_spec.ts index 03d196fe37..cb524d970e 100644 --- a/packages/compiler-cli/ngcc/test/execution/tasks/queues/parallel_task_queue_spec.ts +++ b/packages/compiler-cli/ngcc/test/execution/tasks/queues/parallel_task_queue_spec.ts @@ -77,9 +77,9 @@ describe('ParallelTaskQueue', () => { it('should be `true`, when there are no unprocess or in-progress tasks', () => { const {queue} = createQueue(3); - const task1 = queue.getNextTask() !; - const task2 = queue.getNextTask() !; - const task3 = queue.getNextTask() !; + const task1 = queue.getNextTask()!; + const task2 = queue.getNextTask()!; + const task3 = queue.getNextTask()!; expect(queue.allTasksCompleted).toBe(false); queue.markTaskCompleted(task1); @@ -266,8 +266,8 @@ describe('ParallelTaskQueue', () => { it('should mark a task as completed', () => { const {queue} = createQueue(2); - const task1 = queue.getNextTask() !; - const task2 = queue.getNextTask() !; + const task1 = queue.getNextTask()!; + const task2 = queue.getNextTask()!; expect(queue.allTasksCompleted).toBe(false); queue.markTaskCompleted(task1); @@ -327,7 +327,7 @@ describe('ParallelTaskQueue', () => { processNextTask(queue2); processNextTask(queue2); - const task = queue2.getNextTask() !; + const task = queue2.getNextTask()!; expect(queue2.toString()).toContain(' All tasks completed: false\n'); @@ -344,7 +344,7 @@ describe('ParallelTaskQueue', () => { ' - {entryPoint: entry-point-1, formatProperty: prop-0, processDts: true}\n' + ' - {entryPoint: entry-point-2, formatProperty: prop-0, processDts: true}\n'); - const task1 = queue.getNextTask() !; + const task1 = queue.getNextTask()!; expect(queue.toString()) .toContain( ' Unprocessed tasks (2): \n' + @@ -352,7 +352,7 @@ describe('ParallelTaskQueue', () => { ' - {entryPoint: entry-point-2, formatProperty: prop-0, processDts: true}\n'); queue.markTaskCompleted(task1); - const task2 = queue.getNextTask() !; + const task2 = queue.getNextTask()!; expect(queue.toString()) .toContain( ' Unprocessed tasks (1): \n' + @@ -367,14 +367,14 @@ describe('ParallelTaskQueue', () => { const {queue} = createQueue(3); expect(queue.toString()).toContain(' In-progress tasks (0): \n'); - const task1 = queue.getNextTask() !; + const task1 = queue.getNextTask()!; expect(queue.toString()) .toContain( ' In-progress tasks (1): \n' + ' - {entryPoint: entry-point-0, formatProperty: prop-0, processDts: true}\n'); queue.markTaskCompleted(task1); - const task2 = queue.getNextTask() !; + const task2 = queue.getNextTask()!; expect(queue.toString()) .toContain( ' In-progress tasks (1): \n' + diff --git a/packages/compiler-cli/ngcc/test/execution/tasks/queues/serial_task_queue_spec.ts b/packages/compiler-cli/ngcc/test/execution/tasks/queues/serial_task_queue_spec.ts index ea53af115e..c5cd05c5f4 100644 --- a/packages/compiler-cli/ngcc/test/execution/tasks/queues/serial_task_queue_spec.ts +++ b/packages/compiler-cli/ngcc/test/execution/tasks/queues/serial_task_queue_spec.ts @@ -30,12 +30,10 @@ describe('SerialTaskQueue', () => { const tasks: PartiallyOrderedTasks = [] as any; const graph = new DepGraph(); for (let i = 0; i < taskCount; i++) { - const entryPoint = { - name: `entry-point-${i}`, - path: `/path/to/entry/point/${i}` - } as EntryPoint; + const entryPoint = {name: `entry-point-${i}`, path: `/path/to/entry/point/${i}`} as + EntryPoint; tasks.push( - { entryPoint: entryPoint, formatProperty: `prop-${i}`, processDts: i % 2 === 0 } as Task); + {entryPoint: entryPoint, formatProperty: `prop-${i}`, processDts: i % 2 === 0} as Task); graph.addNode(entryPoint.path); } const dependencies = computeTaskDependencies(tasks, graph); @@ -140,7 +138,7 @@ describe('SerialTaskQueue', () => { describe('markTaskCompleted()', () => { it('should mark a task as completed, so that the next task can be picked', () => { const {queue} = createQueue(3); - const task = queue.getNextTask() !; + const task = queue.getNextTask()!; expect(() => queue.getNextTask()).toThrow(); @@ -174,7 +172,7 @@ describe('SerialTaskQueue', () => { processNextTask(queue2); processNextTask(queue2); - const task = queue2.getNextTask() !; + const task = queue2.getNextTask()!; expect(queue2.toString()).toContain(' All tasks completed: false\n'); @@ -191,7 +189,7 @@ describe('SerialTaskQueue', () => { ' - {entryPoint: entry-point-1, formatProperty: prop-1, processDts: false}\n' + ' - {entryPoint: entry-point-2, formatProperty: prop-2, processDts: true}\n'); - const task1 = queue.getNextTask() !; + const task1 = queue.getNextTask()!; expect(queue.toString()) .toContain( ' Unprocessed tasks (2): \n' + @@ -199,7 +197,7 @@ describe('SerialTaskQueue', () => { ' - {entryPoint: entry-point-2, formatProperty: prop-2, processDts: true}\n'); queue.markTaskCompleted(task1); - const task2 = queue.getNextTask() !; + const task2 = queue.getNextTask()!; expect(queue.toString()) .toContain( ' Unprocessed tasks (1): \n' + @@ -214,14 +212,14 @@ describe('SerialTaskQueue', () => { const {queue} = createQueue(3); expect(queue.toString()).toContain(' In-progress tasks (0): '); - const task1 = queue.getNextTask() !; + const task1 = queue.getNextTask()!; expect(queue.toString()) .toContain( ' In-progress tasks (1): \n' + ' - {entryPoint: entry-point-0, formatProperty: prop-0, processDts: true}'); queue.markTaskCompleted(task1); - const task2 = queue.getNextTask() !; + const task2 = queue.getNextTask()!; expect(queue.toString()) .toContain( ' In-progress tasks (1): \n' + @@ -253,7 +251,7 @@ describe('SerialTaskQueue', () => { ' In-progress tasks (0): '); processNextTask(queue2); - const task = queue2.getNextTask() !; + const task = queue2.getNextTask()!; expect(queue2.toString()) .toBe( 'SerialTaskQueue\n' + diff --git a/packages/compiler-cli/ngcc/test/helpers/mock_lock_file.ts b/packages/compiler-cli/ngcc/test/helpers/mock_lock_file.ts index c4271216b8..5917df00a5 100644 --- a/packages/compiler-cli/ngcc/test/helpers/mock_lock_file.ts +++ b/packages/compiler-cli/ngcc/test/helpers/mock_lock_file.ts @@ -15,10 +15,14 @@ export class MockLockFile implements LockFile { constructor( fs: FileSystem, private log: string[] = [], public path = fs.resolve('/lockfile'), private pid = '1234') {} - write() { this.log.push('write()'); } + write() { + this.log.push('write()'); + } read(): string { this.log.push('read()'); return this.pid; } - remove() { this.log.push('remove()'); } + remove() { + this.log.push('remove()'); + } } diff --git a/packages/compiler-cli/ngcc/test/helpers/mock_logger.ts b/packages/compiler-cli/ngcc/test/helpers/mock_logger.ts index bc686a994f..83e5afe09d 100644 --- a/packages/compiler-cli/ngcc/test/helpers/mock_logger.ts +++ b/packages/compiler-cli/ngcc/test/helpers/mock_logger.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ -import {LogLevel, Logger} from '../../src/logging/logger'; +import {Logger, LogLevel} from '../../src/logging/logger'; export class MockLogger implements Logger { constructor(public level = LogLevel.info) {} @@ -17,8 +17,16 @@ export class MockLogger implements Logger { warn: [], error: [], }; - debug(...args: string[]) { this.logs.debug.push(args); } - info(...args: string[]) { this.logs.info.push(args); } - warn(...args: string[]) { this.logs.warn.push(args); } - error(...args: string[]) { this.logs.error.push(args); } + debug(...args: string[]) { + this.logs.debug.push(args); + } + info(...args: string[]) { + this.logs.info.push(args); + } + warn(...args: string[]) { + this.logs.warn.push(args); + } + error(...args: string[]) { + this.logs.error.push(args); + } } \ No newline at end of file diff --git a/packages/compiler-cli/ngcc/test/helpers/utils.ts b/packages/compiler-cli/ngcc/test/helpers/utils.ts index 781be94e3d..cfd4315b1a 100644 --- a/packages/compiler-cli/ngcc/test/helpers/utils.ts +++ b/packages/compiler-cli/ngcc/test/helpers/utils.ts @@ -7,7 +7,7 @@ */ import * as ts from 'typescript'; -import {AbsoluteFsPath, NgtscCompilerHost, absoluteFrom, getFileSystem} from '../../../src/ngtsc/file_system'; +import {absoluteFrom, AbsoluteFsPath, getFileSystem, NgtscCompilerHost} from '../../../src/ngtsc/file_system'; import {TestFile} from '../../../src/ngtsc/file_system/testing'; import {BundleProgram, makeBundleProgram} from '../../src/packages/bundle_program'; import {NgccEntryPointConfig} from '../../src/packages/configuration'; @@ -49,7 +49,12 @@ export function makeTestEntryPointBundle( return { entryPoint, format, - rootDirs: [absoluteFrom('/')], src, dts, isCore, isFlatCore, enableI18nLegacyMessageIdFormat + rootDirs: [absoluteFrom('/')], + src, + dts, + isCore, + isFlatCore, + enableI18nLegacyMessageIdFormat }; } diff --git a/packages/compiler-cli/ngcc/test/host/commonjs_host_import_helper_spec.ts b/packages/compiler-cli/ngcc/test/host/commonjs_host_import_helper_spec.ts index 0d9554a810..cb3e012f4e 100644 --- a/packages/compiler-cli/ngcc/test/host/commonjs_host_import_helper_spec.ts +++ b/packages/compiler-cli/ngcc/test/host/commonjs_host_import_helper_spec.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ import {absoluteFrom, getFileSystem} from '../../../src/ngtsc/file_system'; -import {TestFile, runInEachFileSystem} from '../../../src/ngtsc/file_system/testing'; +import {runInEachFileSystem, TestFile} from '../../../src/ngtsc/file_system/testing'; import {isNamedVariableDeclaration} from '../../../src/ngtsc/reflection'; import {getDeclaration} from '../../../src/ngtsc/testing'; import {loadFakeCore, loadTestFiles} from '../../../test/helpers'; @@ -90,15 +90,15 @@ exports.AliasedDirective$1 = AliasedDirective$1; const classNode = getDeclaration( bundle.program, TOPLEVEL_DECORATORS_FILE.name, 'SomeDirective', isNamedVariableDeclaration); - const decorators = host.getDecoratorsOfDeclaration(classNode) !; + const decorators = host.getDecoratorsOfDeclaration(classNode)!; expect(decorators.length).toEqual(1); const decorator = decorators[0]; expect(decorator.name).toEqual('Directive'); - expect(decorator.identifier !.getText()).toEqual('core.Directive'); + expect(decorator.identifier!.getText()).toEqual('core.Directive'); expect(decorator.import).toEqual({name: 'Directive', from: '@angular/core'}); - expect(decorator.args !.map(arg => arg.getText())).toEqual([ + expect(decorator.args!.map(arg => arg.getText())).toEqual([ '{ selector: \'[someDirective]\' }', ]); }); @@ -111,15 +111,15 @@ exports.AliasedDirective$1 = AliasedDirective$1; const classNode = getDeclaration( bundle.program, TOPLEVEL_DECORATORS_FILE.name, 'AliasedDirective$1', isNamedVariableDeclaration); - const decorators = host.getDecoratorsOfDeclaration(classNode) !; + const decorators = host.getDecoratorsOfDeclaration(classNode)!; expect(decorators.length).toEqual(1); const decorator = decorators[0]; expect(decorator.name).toEqual('Directive'); - expect(decorator.identifier !.getText()).toEqual('core.Directive'); + expect(decorator.identifier!.getText()).toEqual('core.Directive'); expect(decorator.import).toEqual({name: 'Directive', from: '@angular/core'}); - expect(decorator.args !.map(arg => arg.getText())).toEqual([ + expect(decorator.args!.map(arg => arg.getText())).toEqual([ '{ selector: \'[someDirective]\' }', ]); }); diff --git a/packages/compiler-cli/ngcc/test/host/esm2015_host_import_helper_spec.ts b/packages/compiler-cli/ngcc/test/host/esm2015_host_import_helper_spec.ts index e9baddd052..554862120e 100644 --- a/packages/compiler-cli/ngcc/test/host/esm2015_host_import_helper_spec.ts +++ b/packages/compiler-cli/ngcc/test/host/esm2015_host_import_helper_spec.ts @@ -9,7 +9,7 @@ import * as ts from 'typescript'; import {absoluteFrom, getFileSystem, getSourceFileOrError} from '../../../src/ngtsc/file_system'; -import {TestFile, runInEachFileSystem} from '../../../src/ngtsc/file_system/testing'; +import {runInEachFileSystem, TestFile} from '../../../src/ngtsc/file_system/testing'; import {ClassMemberKind, Import, isNamedVariableDeclaration} from '../../../src/ngtsc/reflection'; import {getDeclaration} from '../../../src/ngtsc/testing'; import {loadFakeCore, loadTestFiles, loadTsLib} from '../../../test/helpers'; @@ -168,16 +168,16 @@ runInEachFileSystem(() => { const classNode = getDeclaration( bundle.program, _('/some_directive.js'), 'SomeDirective', isNamedVariableDeclaration); - const decorators = host.getDecoratorsOfDeclaration(classNode) !; + const decorators = host.getDecoratorsOfDeclaration(classNode)!; expect(decorators).toBeDefined(); expect(decorators.length).toEqual(1); const decorator = decorators[0]; expect(decorator.name).toEqual('Directive'); - expect(decorator.identifier !.getText()).toEqual('Directive'); + expect(decorator.identifier!.getText()).toEqual('Directive'); expect(decorator.import).toEqual({name: 'Directive', from: '@angular/core'}); - expect(decorator.args !.map(arg => arg.getText())).toEqual([ + expect(decorator.args!.map(arg => arg.getText())).toEqual([ '{ selector: \'[someDirective]\' }', ]); }); @@ -189,16 +189,16 @@ runInEachFileSystem(() => { const classNode = getDeclaration( bundle.program, _('/some_directive_ctor_parameters.js'), 'SomeDirective', isNamedVariableDeclaration); - const decorators = host.getDecoratorsOfDeclaration(classNode) !; + const decorators = host.getDecoratorsOfDeclaration(classNode)!; expect(decorators).toBeDefined(); expect(decorators.length).toEqual(1); const decorator = decorators[0]; expect(decorator.name).toEqual('Directive'); - expect(decorator.identifier !.getText()).toEqual('Directive'); + expect(decorator.identifier!.getText()).toEqual('Directive'); expect(decorator.import).toEqual({name: 'Directive', from: '@angular/core'}); - expect(decorator.args !.map(arg => arg.getText())).toEqual([ + expect(decorator.args!.map(arg => arg.getText())).toEqual([ '{ selector: \'[someDirective]\' }', ]); }); @@ -210,16 +210,16 @@ runInEachFileSystem(() => { const classNode = getDeclaration( bundle.program, _('/node_modules/@angular/core/some_directive.js'), 'SomeDirective', isNamedVariableDeclaration); - const decorators = host.getDecoratorsOfDeclaration(classNode) !; + const decorators = host.getDecoratorsOfDeclaration(classNode)!; expect(decorators).toBeDefined(); expect(decorators.length).toEqual(1); const decorator = decorators[0]; expect(decorator.name).toEqual('Directive'); - expect(decorator.identifier !.getText()).toEqual('Directive'); + expect(decorator.identifier!.getText()).toEqual('Directive'); expect(decorator.import).toEqual({name: 'Directive', from: './directives'}); - expect(decorator.args !.map(arg => arg.getText())).toEqual([ + expect(decorator.args!.map(arg => arg.getText())).toEqual([ '{ selector: \'[someDirective]\' }', ]); }); @@ -234,15 +234,15 @@ runInEachFileSystem(() => { isNamedVariableDeclaration); const members = host.getMembersOfClass(classNode); - const input1 = members.find(member => member.name === 'input1') !; + const input1 = members.find(member => member.name === 'input1')!; expect(input1.kind).toEqual(ClassMemberKind.Property); expect(input1.isStatic).toEqual(false); - expect(input1.decorators !.map(d => d.name)).toEqual(['Input']); + expect(input1.decorators!.map(d => d.name)).toEqual(['Input']); - const input2 = members.find(member => member.name === 'input2') !; + const input2 = members.find(member => member.name === 'input2')!; expect(input2.kind).toEqual(ClassMemberKind.Property); expect(input2.isStatic).toEqual(false); - expect(input1.decorators !.map(d => d.name)).toEqual(['Input']); + expect(input1.decorators!.map(d => d.name)).toEqual(['Input']); }); it('should find decorated members on a class when mixing `ctorParameters` and `__decorate`', @@ -254,10 +254,10 @@ runInEachFileSystem(() => { isNamedVariableDeclaration); const members = host.getMembersOfClass(classNode); - const input1 = members.find(member => member.name === 'input1') !; + const input1 = members.find(member => member.name === 'input1')!; expect(input1.kind).toEqual(ClassMemberKind.Property); expect(input1.isStatic).toEqual(false); - expect(input1.decorators !.map(d => d.name)).toEqual(['Input']); + expect(input1.decorators!.map(d => d.name)).toEqual(['Input']); }); it('should find non decorated properties on a class', () => { @@ -268,11 +268,11 @@ runInEachFileSystem(() => { isNamedVariableDeclaration); const members = host.getMembersOfClass(classNode); - const instanceProperty = members.find(member => member.name === 'instanceProperty') !; + const instanceProperty = members.find(member => member.name === 'instanceProperty')!; expect(instanceProperty.kind).toEqual(ClassMemberKind.Property); expect(instanceProperty.isStatic).toEqual(false); - expect(ts.isBinaryExpression(instanceProperty.implementation !)).toEqual(true); - expect(instanceProperty.value !.getText()).toEqual(`'instance'`); + expect(ts.isBinaryExpression(instanceProperty.implementation!)).toEqual(true); + expect(instanceProperty.value!.getText()).toEqual(`'instance'`); }); it('should find static methods on a class', () => { @@ -283,10 +283,10 @@ runInEachFileSystem(() => { isNamedVariableDeclaration); const members = host.getMembersOfClass(classNode); - const staticMethod = members.find(member => member.name === 'staticMethod') !; + const staticMethod = members.find(member => member.name === 'staticMethod')!; expect(staticMethod.kind).toEqual(ClassMemberKind.Method); expect(staticMethod.isStatic).toEqual(true); - expect(ts.isMethodDeclaration(staticMethod.implementation !)).toEqual(true); + expect(ts.isMethodDeclaration(staticMethod.implementation!)).toEqual(true); }); it('should find static properties on a class', () => { @@ -297,11 +297,11 @@ runInEachFileSystem(() => { isNamedVariableDeclaration); const members = host.getMembersOfClass(classNode); - const staticProperty = members.find(member => member.name === 'staticProperty') !; + const staticProperty = members.find(member => member.name === 'staticProperty')!; expect(staticProperty.kind).toEqual(ClassMemberKind.Property); expect(staticProperty.isStatic).toEqual(true); - expect(ts.isPropertyAccessExpression(staticProperty.implementation !)).toEqual(true); - expect(staticProperty.value !.getText()).toEqual(`'static'`); + expect(ts.isPropertyAccessExpression(staticProperty.implementation!)).toEqual(true); + expect(staticProperty.value!.getText()).toEqual(`'static'`); }); it('should find static properties on a class that has an intermediate variable assignment', @@ -313,11 +313,11 @@ runInEachFileSystem(() => { isNamedVariableDeclaration); const members = host.getMembersOfClass(classNode); - const staticProperty = members.find(member => member.name === 'staticProperty') !; + const staticProperty = members.find(member => member.name === 'staticProperty')!; expect(staticProperty.kind).toEqual(ClassMemberKind.Property); expect(staticProperty.isStatic).toEqual(true); - expect(ts.isPropertyAccessExpression(staticProperty.implementation !)).toEqual(true); - expect(staticProperty.value !.getText()).toEqual(`'static'`); + expect(ts.isPropertyAccessExpression(staticProperty.implementation!)).toEqual(true); + expect(staticProperty.value!.getText()).toEqual(`'static'`); }); it('should support decorators being used inside @angular/core', () => { @@ -329,10 +329,10 @@ runInEachFileSystem(() => { isNamedVariableDeclaration); const members = host.getMembersOfClass(classNode); - const input1 = members.find(member => member.name === 'input1') !; + const input1 = members.find(member => member.name === 'input1')!; expect(input1.kind).toEqual(ClassMemberKind.Property); expect(input1.isStatic).toEqual(false); - expect(input1.decorators !.map(d => d.name)).toEqual(['Input']); + expect(input1.decorators!.map(d => d.name)).toEqual(['Input']); }); }); @@ -346,10 +346,10 @@ runInEachFileSystem(() => { const parameters = host.getConstructorParameters(classNode); expect(parameters).toBeDefined(); - expect(parameters !.map(parameter => parameter.name)).toEqual([ + expect(parameters!.map(parameter => parameter.name)).toEqual([ '_viewContainer', '_template', 'injected' ]); - expectTypeValueReferencesForParameters(parameters !, [ + expectTypeValueReferencesForParameters(parameters!, [ 'ViewContainerRef', 'TemplateRef', 'String', @@ -366,20 +366,20 @@ runInEachFileSystem(() => { const parameters = host.getConstructorParameters(classNode); expect(parameters).toBeDefined(); - expect(parameters !.map(parameter => parameter.name)).toEqual([ + expect(parameters!.map(parameter => parameter.name)).toEqual([ '_viewContainer', '_template', 'injected' ]); - expectTypeValueReferencesForParameters(parameters !, [ + expectTypeValueReferencesForParameters(parameters!, [ 'ViewContainerRef', 'TemplateRef', null, ]); - const decorators = parameters ![2].decorators !; + const decorators = parameters![2].decorators!; expect(decorators.length).toEqual(1); expect(decorators[0].name).toBe('Inject'); - expect(decorators[0].import !.from).toBe('@angular/core'); - expect(decorators[0].import !.name).toBe('Inject'); + expect(decorators[0].import!.from).toBe('@angular/core'); + expect(decorators[0].import!.name).toBe('Inject'); }); }); @@ -390,8 +390,8 @@ runInEachFileSystem(() => { const classNode = getDeclaration( bundle.program, _('/some_directive.js'), 'SomeDirective', isNamedVariableDeclaration); - const ctrDecorators = host.getConstructorParameters(classNode) !; - const identifierOfViewContainerRef = (ctrDecorators[0].typeValueReference !as{ + const ctrDecorators = host.getConstructorParameters(classNode)!; + const identifierOfViewContainerRef = (ctrDecorators[0].typeValueReference! as { local: true, expression: ts.Identifier, defaultImportStatement: null, @@ -401,8 +401,8 @@ runInEachFileSystem(() => { bundle.program, _('/some_directive.js'), 'ViewContainerRef', ts.isClassDeclaration); const actualDeclaration = host.getDeclarationOfIdentifier(identifierOfViewContainerRef); expect(actualDeclaration).not.toBe(null); - expect(actualDeclaration !.node).toBe(expectedDeclarationNode); - expect(actualDeclaration !.viaModule).toBe(null); + expect(actualDeclaration!.node).toBe(expectedDeclarationNode); + expect(actualDeclaration!.viaModule).toBe(null); }); it('should return the declaration of an externally defined identifier', () => { @@ -411,8 +411,8 @@ runInEachFileSystem(() => { const classNode = getDeclaration( bundle.program, _('/some_directive.js'), 'SomeDirective', isNamedVariableDeclaration); - const classDecorators = host.getDecoratorsOfDeclaration(classNode) !; - const decoratorNode = classDecorators[0].node !; + const classDecorators = host.getDecoratorsOfDeclaration(classNode)!; + const decoratorNode = classDecorators[0].node!; const identifierOfDirective = ts.isCallExpression(decoratorNode) && ts.isIdentifier(decoratorNode.expression) ? decoratorNode.expression : @@ -421,10 +421,10 @@ runInEachFileSystem(() => { const expectedDeclarationNode = getDeclaration( bundle.program, _('/node_modules/@angular/core/index.d.ts'), 'Directive', isNamedVariableDeclaration); - const actualDeclaration = host.getDeclarationOfIdentifier(identifierOfDirective !); + const actualDeclaration = host.getDeclarationOfIdentifier(identifierOfDirective!); expect(actualDeclaration).not.toBe(null); - expect(actualDeclaration !.node).toBe(expectedDeclarationNode); - expect(actualDeclaration !.viaModule).toBe('@angular/core'); + expect(actualDeclaration!.node).toBe(expectedDeclarationNode); + expect(actualDeclaration!.viaModule).toBe('@angular/core'); }); }); @@ -435,13 +435,13 @@ runInEachFileSystem(() => { const ngModuleRef = findVariableDeclaration( getSourceFileOrError(bundle.program, _('/ngmodule.js')), 'HttpClientXsrfModule_1'); - const value = host.getVariableValue(ngModuleRef !); + const value = host.getVariableValue(ngModuleRef!); expect(value).not.toBe(null); if (!value || !ts.isClassExpression(value)) { throw new Error( `Expected value to be a class expression: ${value && value.getText()}.`); } - expect(value.name !.text).toBe('HttpClientXsrfModule'); + expect(value.name!.text).toBe('HttpClientXsrfModule'); }); it('should return null if the variable has no assignment', () => { @@ -449,7 +449,7 @@ runInEachFileSystem(() => { const host = new Esm2015ReflectionHost(new MockLogger(), false, bundle); const missingValue = findVariableDeclaration( getSourceFileOrError(bundle.program, _('/ngmodule.js')), 'missingValue'); - const value = host.getVariableValue(missingValue !); + const value = host.getVariableValue(missingValue!); expect(value).toBe(null); }); @@ -458,7 +458,7 @@ runInEachFileSystem(() => { const host = new Esm2015ReflectionHost(new MockLogger(), false, bundle); const nonDecoratedVar = findVariableDeclaration( getSourceFileOrError(bundle.program, _('/ngmodule.js')), 'nonDecoratedVar'); - const value = host.getVariableValue(nonDecoratedVar !); + const value = host.getVariableValue(nonDecoratedVar!); expect(value).toBe(null); }); }); @@ -468,7 +468,7 @@ runInEachFileSystem(() => { const bundle = makeTestBundleProgram(_('/ngmodule.js')); const host = new Esm2015ReflectionHost(new MockLogger(), false, bundle); const classSymbol = - host.findClassSymbols(bundle.program.getSourceFile(_('/ngmodule.js')) !)[0]; + host.findClassSymbols(bundle.program.getSourceFile(_('/ngmodule.js'))!)[0]; const endOfClass = host.getEndOfClass(classSymbol); expect(endOfClass.getText()) .toMatch( @@ -479,7 +479,7 @@ runInEachFileSystem(() => { }); function findVariableDeclaration( - node: ts.Node | undefined, variableName: string): ts.VariableDeclaration|undefined { + node: ts.Node|undefined, variableName: string): ts.VariableDeclaration|undefined { if (!node) { return; } diff --git a/packages/compiler-cli/ngcc/test/host/esm5_host_import_helper_spec.ts b/packages/compiler-cli/ngcc/test/host/esm5_host_import_helper_spec.ts index 16c6deb129..6ad45d394a 100644 --- a/packages/compiler-cli/ngcc/test/host/esm5_host_import_helper_spec.ts +++ b/packages/compiler-cli/ngcc/test/host/esm5_host_import_helper_spec.ts @@ -8,7 +8,7 @@ import * as ts from 'typescript'; import {absoluteFrom, getFileSystem, getSourceFileOrError} from '../../../src/ngtsc/file_system'; -import {TestFile, runInEachFileSystem} from '../../../src/ngtsc/file_system/testing'; +import {runInEachFileSystem, TestFile} from '../../../src/ngtsc/file_system/testing'; import {ClassMemberKind, isNamedFunctionDeclaration, isNamedVariableDeclaration} from '../../../src/ngtsc/reflection'; import {getDeclaration} from '../../../src/ngtsc/testing'; import {loadFakeCore, loadTestFiles, loadTsLib} from '../../../test/helpers'; @@ -227,19 +227,18 @@ export { AliasedDirective$1 }; const classNode = getDeclaration( bundle.program, _('/some_directive.js'), 'SomeDirective', isNamedVariableDeclaration); - const decorators = host.getDecoratorsOfDeclaration(classNode) !; + const decorators = host.getDecoratorsOfDeclaration(classNode)!; expect(decorators).toBeDefined(); expect(decorators.length).toEqual(1); const decorator = decorators[0]; expect(decorator.name).toEqual('Directive'); - expect(decorator.identifier !.getText()).toEqual('Directive'); + expect(decorator.identifier!.getText()).toEqual('Directive'); expect(decorator.import).toEqual({name: 'Directive', from: '@angular/core'}); - expect(decorator.args !.map(arg => arg.getText())).toEqual([ + expect(decorator.args!.map(arg => arg.getText())).toEqual([ '{ selector: \'[someDirective]\' }', ]); - }); it('should find the decorators on a minified class', () => { @@ -248,19 +247,18 @@ export { AliasedDirective$1 }; const classNode = getDeclaration( bundle.program, _('/some_minified_directive.js'), 'SomeDirective', isNamedVariableDeclaration); - const decorators = host.getDecoratorsOfDeclaration(classNode) !; + const decorators = host.getDecoratorsOfDeclaration(classNode)!; expect(decorators).toBeDefined(); expect(decorators.length).toEqual(1); const decorator = decorators[0]; expect(decorator.name).toEqual('Directive'); - expect(decorator.identifier !.getText()).toEqual('Directive'); + expect(decorator.identifier!.getText()).toEqual('Directive'); expect(decorator.import).toEqual({name: 'Directive', from: '@angular/core'}); - expect(decorator.args !.map(arg => arg.getText())).toEqual([ + expect(decorator.args!.map(arg => arg.getText())).toEqual([ '{ selector: \'[someDirective]\' }', ]); - }); it('should find the decorators on an aliased class', () => { @@ -269,16 +267,16 @@ export { AliasedDirective$1 }; const classNode = getDeclaration( bundle.program, _('/some_aliased_directive.js'), 'AliasedDirective$1', isNamedVariableDeclaration); - const decorators = host.getDecoratorsOfDeclaration(classNode) !; + const decorators = host.getDecoratorsOfDeclaration(classNode)!; expect(decorators).toBeDefined(); expect(decorators.length).toEqual(1); const decorator = decorators[0]; expect(decorator.name).toEqual('Directive'); - expect(decorator.identifier !.getText()).toEqual('Directive'); + expect(decorator.identifier!.getText()).toEqual('Directive'); expect(decorator.import).toEqual({name: 'Directive', from: '@angular/core'}); - expect(decorator.args !.map(arg => arg.getText())).toEqual([ + expect(decorator.args!.map(arg => arg.getText())).toEqual([ '{ selector: \'[someDirective]\' }', ]); }); @@ -290,16 +288,16 @@ export { AliasedDirective$1 }; const classNode = getDeclaration( bundle.program, _('/some_directive_ctor_parameters.js'), 'SomeDirective', isNamedVariableDeclaration); - const decorators = host.getDecoratorsOfDeclaration(classNode) !; + const decorators = host.getDecoratorsOfDeclaration(classNode)!; expect(decorators).toBeDefined(); expect(decorators.length).toEqual(1); const decorator = decorators[0]; expect(decorator.name).toEqual('Directive'); - expect(decorator.identifier !.getText()).toEqual('Directive'); + expect(decorator.identifier!.getText()).toEqual('Directive'); expect(decorator.import).toEqual({name: 'Directive', from: '@angular/core'}); - expect(decorator.args !.map(arg => arg.getText())).toEqual([ + expect(decorator.args!.map(arg => arg.getText())).toEqual([ '{ selector: \'[someDirective]\' }', ]); }); @@ -311,16 +309,16 @@ export { AliasedDirective$1 }; const classNode = getDeclaration( bundle.program, _('/node_modules/@angular/core/some_directive.js'), 'SomeDirective', isNamedVariableDeclaration); - const decorators = host.getDecoratorsOfDeclaration(classNode) !; + const decorators = host.getDecoratorsOfDeclaration(classNode)!; expect(decorators).toBeDefined(); expect(decorators.length).toEqual(1); const decorator = decorators[0]; expect(decorator.name).toEqual('Directive'); - expect(decorator.identifier !.getText()).toEqual('Directive'); + expect(decorator.identifier!.getText()).toEqual('Directive'); expect(decorator.import).toEqual({name: 'Directive', from: './directives'}); - expect(decorator.args !.map(arg => arg.getText())).toEqual([ + expect(decorator.args!.map(arg => arg.getText())).toEqual([ '{ selector: \'[someDirective]\' }', ]); }); @@ -333,13 +331,12 @@ export { AliasedDirective$1 }; const classNode = getDeclaration( bundle.program, _('/some_minified_directive.js'), 'SomeDirective', isNamedVariableDeclaration); - const innerNode = - getIifeBody(classNode) !.statements.find(isNamedFunctionDeclaration) !; + const innerNode = getIifeBody(classNode)!.statements.find(isNamedFunctionDeclaration)!; const classSymbol = host.getClassSymbol(classNode); expect(classSymbol).toBeDefined(); - expect(classSymbol !.declaration.valueDeclaration).toBe(classNode); - expect(classSymbol !.implementation.valueDeclaration).toBe(innerNode); + expect(classSymbol!.declaration.valueDeclaration).toBe(classNode); + expect(classSymbol!.implementation.valueDeclaration).toBe(innerNode); }); }); @@ -352,15 +349,15 @@ export { AliasedDirective$1 }; isNamedVariableDeclaration); const members = host.getMembersOfClass(classNode); - const input1 = members.find(member => member.name === 'input1') !; + const input1 = members.find(member => member.name === 'input1')!; expect(input1.kind).toEqual(ClassMemberKind.Property); expect(input1.isStatic).toEqual(false); - expect(input1.decorators !.map(d => d.name)).toEqual(['Input']); + expect(input1.decorators!.map(d => d.name)).toEqual(['Input']); - const input2 = members.find(member => member.name === 'input2') !; + const input2 = members.find(member => member.name === 'input2')!; expect(input2.kind).toEqual(ClassMemberKind.Property); expect(input2.isStatic).toEqual(false); - expect(input1.decorators !.map(d => d.name)).toEqual(['Input']); + expect(input1.decorators!.map(d => d.name)).toEqual(['Input']); }); it('should find decorated members on a class when mixing `ctorParameters` and `__decorate`', @@ -372,10 +369,10 @@ export { AliasedDirective$1 }; isNamedVariableDeclaration); const members = host.getMembersOfClass(classNode); - const input1 = members.find(member => member.name === 'input1') !; + const input1 = members.find(member => member.name === 'input1')!; expect(input1.kind).toEqual(ClassMemberKind.Property); expect(input1.isStatic).toEqual(false); - expect(input1.decorators !.map(d => d.name)).toEqual(['Input']); + expect(input1.decorators!.map(d => d.name)).toEqual(['Input']); }); it('should find non decorated properties on a class', () => { @@ -386,11 +383,11 @@ export { AliasedDirective$1 }; isNamedVariableDeclaration); const members = host.getMembersOfClass(classNode); - const instanceProperty = members.find(member => member.name === 'instanceProperty') !; + const instanceProperty = members.find(member => member.name === 'instanceProperty')!; expect(instanceProperty.kind).toEqual(ClassMemberKind.Property); expect(instanceProperty.isStatic).toEqual(false); - expect(ts.isBinaryExpression(instanceProperty.implementation !)).toEqual(true); - expect(instanceProperty.value !.getText()).toEqual(`'instance'`); + expect(ts.isBinaryExpression(instanceProperty.implementation!)).toEqual(true); + expect(instanceProperty.value!.getText()).toEqual(`'instance'`); }); it('should find static methods on a class', () => { @@ -401,10 +398,10 @@ export { AliasedDirective$1 }; isNamedVariableDeclaration); const members = host.getMembersOfClass(classNode); - const staticMethod = members.find(member => member.name === 'staticMethod') !; + const staticMethod = members.find(member => member.name === 'staticMethod')!; expect(staticMethod.kind).toEqual(ClassMemberKind.Method); expect(staticMethod.isStatic).toEqual(true); - expect(ts.isFunctionExpression(staticMethod.implementation !)).toEqual(true); + expect(ts.isFunctionExpression(staticMethod.implementation!)).toEqual(true); }); it('should find static properties on a class', () => { @@ -415,11 +412,11 @@ export { AliasedDirective$1 }; isNamedVariableDeclaration); const members = host.getMembersOfClass(classNode); - const staticProperty = members.find(member => member.name === 'staticProperty') !; + const staticProperty = members.find(member => member.name === 'staticProperty')!; expect(staticProperty.kind).toEqual(ClassMemberKind.Property); expect(staticProperty.isStatic).toEqual(true); - expect(ts.isPropertyAccessExpression(staticProperty.implementation !)).toEqual(true); - expect(staticProperty.value !.getText()).toEqual(`'static'`); + expect(ts.isPropertyAccessExpression(staticProperty.implementation!)).toEqual(true); + expect(staticProperty.value!.getText()).toEqual(`'static'`); }); it('should support decorators being used inside @angular/core', () => { @@ -431,10 +428,10 @@ export { AliasedDirective$1 }; isNamedVariableDeclaration); const members = host.getMembersOfClass(classNode); - const input1 = members.find(member => member.name === 'input1') !; + const input1 = members.find(member => member.name === 'input1')!; expect(input1.kind).toEqual(ClassMemberKind.Property); expect(input1.isStatic).toEqual(false); - expect(input1.decorators !.map(d => d.name)).toEqual(['Input']); + expect(input1.decorators!.map(d => d.name)).toEqual(['Input']); }); }); describe('getConstructorParameters', () => { @@ -447,10 +444,10 @@ export { AliasedDirective$1 }; const parameters = host.getConstructorParameters(classNode); expect(parameters).toBeDefined(); - expect(parameters !.map(parameter => parameter.name)).toEqual([ + expect(parameters!.map(parameter => parameter.name)).toEqual([ '_viewContainer', '_template', 'injected' ]); - expectTypeValueReferencesForParameters(parameters !, [ + expectTypeValueReferencesForParameters(parameters!, [ 'ViewContainerRef', 'TemplateRef', 'String', @@ -467,10 +464,10 @@ export { AliasedDirective$1 }; const parameters = host.getConstructorParameters(classNode); expect(parameters).toBeDefined(); - expect(parameters !.map(parameter => parameter.name)).toEqual([ + expect(parameters!.map(parameter => parameter.name)).toEqual([ '_viewContainer', '_template', 'injected' ]); - expectTypeValueReferencesForParameters(parameters !, [ + expectTypeValueReferencesForParameters(parameters!, [ 'ViewContainerRef', 'TemplateRef', null, @@ -485,7 +482,7 @@ export { AliasedDirective$1 }; bundle.program, _('/some_directive.js'), 'SomeDirective', isNamedVariableDeclaration); const parameters = host.getConstructorParameters(classNode); - const decorators = parameters ![2].decorators !; + const decorators = parameters![2].decorators!; expect(decorators.length).toEqual(1); expect(decorators[0].import).toEqual({name: 'Inject', from: '@angular/core'}); @@ -522,7 +519,7 @@ export { AliasedDirective$1 }; const ngModuleDecorators = ngModuleClasses.map(s => host.getDecoratorsOfSymbol(s)); expect(ngModuleClasses.length).toEqual(1); - expect(ngModuleDecorators[0] !.map(d => d.name)).toEqual(['NgModule']); + expect(ngModuleDecorators[0]!.map(d => d.name)).toEqual(['NgModule']); const someDirectiveFile = getSourceFileOrError(bundle.program, _('/some_directive.js')); const someDirectiveClasses = host.findClassSymbols(someDirectiveFile); @@ -532,7 +529,7 @@ export { AliasedDirective$1 }; expect(someDirectiveDecorators.length).toEqual(3); expect(someDirectiveDecorators[0]).toBe(null); expect(someDirectiveDecorators[1]).toBe(null); - expect(someDirectiveDecorators[2] !.map(d => d.name)).toEqual(['Directive']); + expect(someDirectiveDecorators[2]!.map(d => d.name)).toEqual(['Directive']); }); }); @@ -543,8 +540,8 @@ export { AliasedDirective$1 }; const classNode = getDeclaration( bundle.program, _('/some_directive.js'), 'SomeDirective', isNamedVariableDeclaration); - const ctrDecorators = host.getConstructorParameters(classNode) !; - const identifierOfViewContainerRef = (ctrDecorators[0].typeValueReference !as{ + const ctrDecorators = host.getConstructorParameters(classNode)!; + const identifierOfViewContainerRef = (ctrDecorators[0].typeValueReference! as { local: true, expression: ts.Identifier, defaultImportStatement: null, @@ -555,8 +552,8 @@ export { AliasedDirective$1 }; isNamedVariableDeclaration); const actualDeclaration = host.getDeclarationOfIdentifier(identifierOfViewContainerRef); expect(actualDeclaration).not.toBe(null); - expect(actualDeclaration !.node).toBe(expectedDeclarationNode); - expect(actualDeclaration !.viaModule).toBe(null); + expect(actualDeclaration!.node).toBe(expectedDeclarationNode); + expect(actualDeclaration!.viaModule).toBe(null); }); it('should return the declaration of an externally defined identifier', () => { @@ -565,8 +562,8 @@ export { AliasedDirective$1 }; const classNode = getDeclaration( bundle.program, _('/some_directive.js'), 'SomeDirective', isNamedVariableDeclaration); - const classDecorators = host.getDecoratorsOfDeclaration(classNode) !; - const decoratorNode = classDecorators[0].node !; + const classDecorators = host.getDecoratorsOfDeclaration(classNode)!; + const decoratorNode = classDecorators[0].node!; const identifierOfDirective = ts.isCallExpression(decoratorNode) && ts.isIdentifier(decoratorNode.expression) ? @@ -576,10 +573,10 @@ export { AliasedDirective$1 }; const expectedDeclarationNode = getDeclaration( bundle.program, _('/node_modules/@angular/core/index.d.ts'), 'Directive', isNamedVariableDeclaration); - const actualDeclaration = host.getDeclarationOfIdentifier(identifierOfDirective !); + const actualDeclaration = host.getDeclarationOfIdentifier(identifierOfDirective!); expect(actualDeclaration).not.toBe(null); - expect(actualDeclaration !.node).toBe(expectedDeclarationNode); - expect(actualDeclaration !.viaModule).toBe('@angular/core'); + expect(actualDeclaration!.node).toBe(expectedDeclarationNode); + expect(actualDeclaration!.viaModule).toBe('@angular/core'); }); it('should find the "actual" declaration of an aliased variable identifier', () => { @@ -589,9 +586,9 @@ export { AliasedDirective$1 }; getSourceFileOrError(bundle.program, _('/ngmodule.js')), 'HttpClientXsrfModule_1', isNgModulePropertyAssignment); - const declaration = host.getDeclarationOfIdentifier(ngModuleRef !); + const declaration = host.getDeclarationOfIdentifier(ngModuleRef!); expect(declaration).not.toBe(null); - expect(declaration !.node !.getText()).toContain('function HttpClientXsrfModule()'); + expect(declaration!.node!.getText()).toContain('function HttpClientXsrfModule()'); }); }); describe('getVariableValue', () => { @@ -601,7 +598,7 @@ export { AliasedDirective$1 }; const ngModuleRef = findVariableDeclaration( getSourceFileOrError(bundle.program, _('/ngmodule.js')), 'HttpClientXsrfModule_1'); - const value = host.getVariableValue(ngModuleRef !); + const value = host.getVariableValue(ngModuleRef!); expect(value).not.toBe(null); if (!value || !ts.isFunctionDeclaration(value.parent)) { throw new Error( @@ -615,7 +612,7 @@ export { AliasedDirective$1 }; const host = new Esm5ReflectionHost(new MockLogger(), false, bundle); const missingValue = findVariableDeclaration( getSourceFileOrError(bundle.program, _('/ngmodule.js')), 'missingValue'); - const value = host.getVariableValue(missingValue !); + const value = host.getVariableValue(missingValue!); expect(value).toBe(null); }); @@ -624,7 +621,7 @@ export { AliasedDirective$1 }; const host = new Esm5ReflectionHost(new MockLogger(), false, bundle); const nonDecoratedVar = findVariableDeclaration( getSourceFileOrError(bundle.program, _('/ngmodule.js')), 'nonDecoratedVar'); - const value = host.getVariableValue(nonDecoratedVar !); + const value = host.getVariableValue(nonDecoratedVar!); expect(value).toBe(null); }); }); @@ -634,7 +631,7 @@ export { AliasedDirective$1 }; const bundle = makeTestBundleProgram(_('/ngmodule.js')); const host = new Esm5ReflectionHost(new MockLogger(), false, bundle); const classSymbol = - host.findClassSymbols(bundle.program.getSourceFile(_('/ngmodule.js')) !)[0]; + host.findClassSymbols(bundle.program.getSourceFile(_('/ngmodule.js'))!)[0]; const endOfClass = host.getEndOfClass(classSymbol); expect(endOfClass.getText()) .toMatch( @@ -644,7 +641,7 @@ export { AliasedDirective$1 }; }); function findVariableDeclaration( - node: ts.Node | undefined, variableName: string): ts.VariableDeclaration|undefined { + node: ts.Node|undefined, variableName: string): ts.VariableDeclaration|undefined { if (!node) { return; } @@ -656,7 +653,7 @@ export { AliasedDirective$1 }; }); function findIdentifier( - node: ts.Node | undefined, identifierName: string, + node: ts.Node|undefined, identifierName: string, requireFn: (node: ts.Identifier) => boolean): ts.Identifier|undefined { if (!node) { return undefined; diff --git a/packages/compiler-cli/ngcc/test/host/umd_host_import_helper_spec.ts b/packages/compiler-cli/ngcc/test/host/umd_host_import_helper_spec.ts index 35929b4f71..9be9a1f3a2 100644 --- a/packages/compiler-cli/ngcc/test/host/umd_host_import_helper_spec.ts +++ b/packages/compiler-cli/ngcc/test/host/umd_host_import_helper_spec.ts @@ -7,7 +7,7 @@ */ import {absoluteFrom} from '../../../src/ngtsc/file_system'; -import {TestFile, runInEachFileSystem} from '../../../src/ngtsc/file_system/testing'; +import {runInEachFileSystem, TestFile} from '../../../src/ngtsc/file_system/testing'; import {ClassMemberKind, isNamedVariableDeclaration} from '../../../src/ngtsc/reflection'; import {getDeclaration} from '../../../src/ngtsc/testing'; import {loadTestFiles} from '../../../test/helpers'; @@ -81,16 +81,16 @@ runInEachFileSystem(() => { const host = new UmdReflectionHost(new MockLogger(), false, bundle); const classNode = getDeclaration( bundle.program, SOME_DIRECTIVE_FILE.name, 'SomeDirective', isNamedVariableDeclaration); - const decorators = host.getDecoratorsOfDeclaration(classNode) !; + const decorators = host.getDecoratorsOfDeclaration(classNode)!; expect(decorators).toBeDefined(); expect(decorators.length).toEqual(1); const decorator = decorators[0]; expect(decorator.name).toEqual('Directive'); - expect(decorator.identifier !.getText()).toEqual('core.Directive'); + expect(decorator.identifier!.getText()).toEqual('core.Directive'); expect(decorator.import).toEqual({name: 'Directive', from: '@angular/core'}); - expect(decorator.args !.map(arg => arg.getText())).toEqual([ + expect(decorator.args!.map(arg => arg.getText())).toEqual([ '{ selector: \'[someDirective]\' }', ]); }); @@ -102,16 +102,16 @@ runInEachFileSystem(() => { const classNode = getDeclaration( bundle.program, SOME_DIRECTIVE_FILE.name, 'AliasedDirective$1', isNamedVariableDeclaration); - const decorators = host.getDecoratorsOfDeclaration(classNode) !; + const decorators = host.getDecoratorsOfDeclaration(classNode)!; expect(decorators).toBeDefined(); expect(decorators.length).toEqual(1); const decorator = decorators[0]; expect(decorator.name).toEqual('Directive'); - expect(decorator.identifier !.getText()).toEqual('core.Directive'); + expect(decorator.identifier!.getText()).toEqual('core.Directive'); expect(decorator.import).toEqual({name: 'Directive', from: '@angular/core'}); - expect(decorator.args !.map(arg => arg.getText())).toEqual([ + expect(decorator.args!.map(arg => arg.getText())).toEqual([ '{ selector: \'[someDirective]\' }', ]); }); @@ -126,15 +126,15 @@ runInEachFileSystem(() => { bundle.program, SOME_DIRECTIVE_FILE.name, 'SomeDirective', isNamedVariableDeclaration); const members = host.getMembersOfClass(classNode); - const input1 = members.find(member => member.name === 'input1') !; + const input1 = members.find(member => member.name === 'input1')!; expect(input1.kind).toEqual(ClassMemberKind.Property); expect(input1.isStatic).toEqual(false); - expect(input1.decorators !.map(d => d.name)).toEqual(['Input']); + expect(input1.decorators!.map(d => d.name)).toEqual(['Input']); - const input2 = members.find(member => member.name === 'input2') !; + const input2 = members.find(member => member.name === 'input2')!; expect(input2.kind).toEqual(ClassMemberKind.Property); expect(input2.isStatic).toEqual(false); - expect(input1.decorators !.map(d => d.name)).toEqual(['Input']); + expect(input1.decorators!.map(d => d.name)).toEqual(['Input']); }); describe('getConstructorParameters', () => { @@ -148,10 +148,10 @@ runInEachFileSystem(() => { const parameters = host.getConstructorParameters(classNode); expect(parameters).toBeDefined(); - expect(parameters !.map(parameter => parameter.name)).toEqual([ + expect(parameters!.map(parameter => parameter.name)).toEqual([ '_viewContainer', '_template', 'injected' ]); - expectTypeValueReferencesForParameters(parameters !, [ + expectTypeValueReferencesForParameters(parameters!, [ 'ViewContainerRef', 'TemplateRef', null, diff --git a/packages/compiler-cli/ngcc/test/host/util.ts b/packages/compiler-cli/ngcc/test/host/util.ts index 7e6a9de5ee..1214e90cf4 100644 --- a/packages/compiler-cli/ngcc/test/host/util.ts +++ b/packages/compiler-cli/ngcc/test/host/util.ts @@ -14,9 +14,8 @@ import {CtorParameter} from '../../../src/ngtsc/reflection'; * names. */ export function expectTypeValueReferencesForParameters( - parameters: CtorParameter[], expectedParams: (string | null)[], - fromModule: string | null = null) { - parameters !.forEach((param, idx) => { + parameters: CtorParameter[], expectedParams: (string|null)[], fromModule: string|null = null) { + parameters!.forEach((param, idx) => { const expected = expectedParams[idx]; if (expected !== null) { if (param.typeValueReference === null) { @@ -32,7 +31,7 @@ export function expectTypeValueReferencesForParameters( expect(param.typeValueReference.expression.text).toEqual(expected); } } else if (param.typeValueReference !== null) { - expect(param.typeValueReference.moduleName).toBe(fromModule !); + expect(param.typeValueReference.moduleName).toBe(fromModule!); expect(param.typeValueReference.name).toBe(expected); } } diff --git a/packages/compiler-cli/ngcc/test/integration/ngcc_spec.ts b/packages/compiler-cli/ngcc/test/integration/ngcc_spec.ts index 4cc67792d5..8092d757b7 100644 --- a/packages/compiler-cli/ngcc/test/integration/ngcc_spec.ts +++ b/packages/compiler-cli/ngcc/test/integration/ngcc_spec.ts @@ -8,8 +8,9 @@ /// import * as os from 'os'; -import {AbsoluteFsPath, FileSystem, absoluteFrom, getFileSystem, join} from '../../../src/ngtsc/file_system'; -import {Folder, MockFileSystem, TestFile, runInEachFileSystem} from '../../../src/ngtsc/file_system/testing'; + +import {absoluteFrom, AbsoluteFsPath, FileSystem, getFileSystem, join} from '../../../src/ngtsc/file_system'; +import {Folder, MockFileSystem, runInEachFileSystem, TestFile} from '../../../src/ngtsc/file_system/testing'; import {loadStandardTestFiles, loadTestFiles} from '../../../test/helpers'; import {getLockFilePath} from '../../src/locking/lock_file'; import {mainNgcc} from '../../src/main'; @@ -19,6 +20,7 @@ import {EntryPointManifestFile} from '../../src/packages/entry_point_manifest'; import {Transformer} from '../../src/packages/transformer'; import {DirectPackageJsonUpdater, PackageJsonUpdater} from '../../src/writing/package_json_updater'; import {MockLogger} from '../helpers/mock_logger'; + import {compileIntoApf, compileIntoFlatEs5Package} from './util'; const testFiles = loadStandardTestFiles({fakeCore: false, rxjs: true}); @@ -145,7 +147,8 @@ runInEachFileSystem(() => { }); ['esm5', 'esm2015'].forEach(target => { - it(`should be able to process spread operator inside objects for ${target} format (imported helpers)`, + it(`should be able to process spread operator inside objects for ${ + target} format (imported helpers)`, () => { compileIntoApf( 'test-package', { @@ -184,7 +187,8 @@ runInEachFileSystem(() => { expect(jsContents).toContain('ngcc0.ɵɵclassProp("a", true)("b", true)("c", false)'); }); - it(`should be able to process emitted spread operator inside objects for ${target} format (emitted helpers)`, + it(`should be able to process emitted spread operator inside objects for ${ + target} format (emitted helpers)`, () => { compileIntoApf( 'test-package', { @@ -326,7 +330,7 @@ runInEachFileSystem(() => { }); const before = fs.readFile(_(`/node_modules/test-package/index.js`)); - const originalProp = /ɵprov[^;]+/.exec(before) ![0]; + const originalProp = /ɵprov[^;]+/.exec(before)![0]; mainNgcc({ basePath: '/node_modules', targetEntryPointPath: 'test-package', @@ -496,7 +500,7 @@ runInEachFileSystem(() => { }); describe('in async mode', () => { - it('should run ngcc without errors for fesm2015', async() => { + it('should run ngcc without errors for fesm2015', async () => { const promise = mainNgcc({ basePath: '/node_modules', propertiesToConsider: ['fesm2015'], @@ -507,7 +511,7 @@ runInEachFileSystem(() => { await promise; }); - it('should reject, if some of the entry-points are unprocessable', async() => { + it('should reject, if some of the entry-points are unprocessable', async () => { const createEntryPoint = (name: string, prop: EntryPointJsonProperty): TestFile[] => { return [ { @@ -541,7 +545,7 @@ runInEachFileSystem(() => { ` - ${_('/dist/unprocessable-3')}`))); }); - it('should reject, if an error happens during processing', async() => { + it('should reject, if an error happens during processing', async () => { spyOn(Transformer.prototype, 'transform').and.throwError('Test error.'); const promise = mainNgcc({ @@ -651,7 +655,8 @@ runInEachFileSystem(() => { markPropertiesAsProcessed('@angular/common/http/testing', SUPPORTED_FORMAT_PROPERTIES); mainNgcc({ basePath: '/node_modules', - targetEntryPointPath: '@angular/common/http/testing', logger, + targetEntryPointPath: '@angular/common/http/testing', + logger, }); expect(logger.logs.debug).toContain([ 'The target entry-point has already been processed' @@ -665,7 +670,8 @@ runInEachFileSystem(() => { mainNgcc({ basePath: '/node_modules', targetEntryPointPath: '@angular/common/http/testing', - propertiesToConsider: ['fesm2015', 'esm5', 'esm2015'], logger, + propertiesToConsider: ['fesm2015', 'esm5', 'esm2015'], + logger, }); expect(logger.logs.debug).not.toContain([ 'The target entry-point has already been processed' @@ -682,7 +688,8 @@ runInEachFileSystem(() => { basePath: '/node_modules', targetEntryPointPath: '@angular/common/http/testing', propertiesToConsider: ['esm5', 'esm2015'], - compileAllFormats: false, logger, + compileAllFormats: false, + logger, }); expect(logger.logs.debug).not.toContain([ @@ -699,7 +706,8 @@ runInEachFileSystem(() => { targetEntryPointPath: '@angular/common/http/testing', // Simulate a property that does not exist on the package.json and will be ignored. propertiesToConsider: ['missing', 'esm2015', 'esm5'], - compileAllFormats: false, logger, + compileAllFormats: false, + logger, }); expect(logger.logs.debug).toContain([ @@ -717,7 +725,8 @@ runInEachFileSystem(() => { targetEntryPointPath: '@angular/common/http/testing', // Simulate a property that does not exist on the package.json and will be ignored. propertiesToConsider: ['missing', 'esm2015', 'esm5'], - compileAllFormats: false, logger, + compileAllFormats: false, + logger, }); expect(logger.logs.debug).toContain([ @@ -752,7 +761,7 @@ runInEachFileSystem(() => { // Now hack the files to look like it was processed by an outdated version of ngcc const packageJson = loadPackage('test-package', _('/node_modules')); - packageJson.__processed_by_ivy_ngcc__ !.typings = '8.0.0'; + packageJson.__processed_by_ivy_ngcc__!.typings = '8.0.0'; packageJson.main_ivy_ngcc = '__ivy_ngcc__/main.js'; fs.writeFile(_('/node_modules/test-package/package.json'), JSON.stringify(packageJson)); fs.writeFile(_('/node_modules/test-package/x.js'), 'processed content'); @@ -838,7 +847,8 @@ runInEachFileSystem(() => { // `fesm2015` and `es2015` map to the same file: `./fesm2015/common.js` mainNgcc({ basePath: '/node_modules/@angular/common', - propertiesToConsider: ['fesm2015'], logger, + propertiesToConsider: ['fesm2015'], + logger, }); expect(logs).not.toContain(['Skipping @angular/common : es2015 (already compiled).']); @@ -851,7 +861,8 @@ runInEachFileSystem(() => { // Now, compiling `es2015` should be a no-op. mainNgcc({ basePath: '/node_modules/@angular/common', - propertiesToConsider: ['es2015'], logger, + propertiesToConsider: ['es2015'], + logger, }); expect(logs).toContain(['Skipping @angular/common : es2015 (already compiled).']); @@ -997,21 +1008,21 @@ runInEachFileSystem(() => { expectNotToHaveProp(pkg, 'esm5_ivy_ngcc'); expectToHaveProp(pkg, 'fesm2015_ivy_ngcc'); expectNotToHaveProp(pkg, 'fesm5_ivy_ngcc'); - expectToHaveProp(pkg.__processed_by_ivy_ngcc__ !, 'fesm2015'); + expectToHaveProp(pkg.__processed_by_ivy_ngcc__!, 'fesm2015'); // Process `fesm5` and update `package.json`. pkg = processFormatAndUpdatePackageJson('fesm5'); expectNotToHaveProp(pkg, 'esm5_ivy_ngcc'); expectToHaveProp(pkg, 'fesm2015_ivy_ngcc'); expectToHaveProp(pkg, 'fesm5_ivy_ngcc'); - expectToHaveProp(pkg.__processed_by_ivy_ngcc__ !, 'fesm5'); + expectToHaveProp(pkg.__processed_by_ivy_ngcc__!, 'fesm5'); // Process `esm5` and update `package.json`. pkg = processFormatAndUpdatePackageJson('esm5'); expectToHaveProp(pkg, 'esm5_ivy_ngcc'); expectToHaveProp(pkg, 'fesm2015_ivy_ngcc'); expectToHaveProp(pkg, 'fesm5_ivy_ngcc'); - expectToHaveProp(pkg.__processed_by_ivy_ngcc__ !, 'esm5'); + expectToHaveProp(pkg.__processed_by_ivy_ngcc__!, 'esm5'); // Ensure the properties are in deterministic order (regardless of processing order). const pkgKeys = stringifyKeys(pkg); @@ -1026,7 +1037,7 @@ runInEachFileSystem(() => { // For example: // - `fesm2015` <=> `es2015` // - `fesm5` <=> `module` - expect(stringifyKeys(pkg.__processed_by_ivy_ngcc__ !)) + expect(stringifyKeys(pkg.__processed_by_ivy_ngcc__!)) .toBe('|es2015|esm5|fesm2015|fesm5|module|typings|'); // Helpers @@ -1034,7 +1045,8 @@ runInEachFileSystem(() => { expect(obj.hasOwnProperty(prop)) .toBe( false, - `Expected object not to have property '${prop}': ${JSON.stringify(obj, null, 2)}`); + `Expected object not to have property '${prop}': ${ + JSON.stringify(obj, null, 2)}`); } function expectToHaveProp(obj: object, prop: string) { @@ -1053,7 +1065,9 @@ runInEachFileSystem(() => { return loadPackage('@angular/core'); } - function stringifyKeys(obj: object) { return `|${Object.keys(obj).join('|')}|`; } + function stringifyKeys(obj: object) { + return `|${Object.keys(obj).join('|')}|`; + } }); }); @@ -1206,7 +1220,8 @@ runInEachFileSystem(() => { mainNgcc({ basePath: '/node_modules', propertiesToConsider: ['es2015'], - errorOnFailedEntryPoint: false, logger, + errorOnFailedEntryPoint: false, + logger, }); expect(logger.logs.error.length).toEqual(1); const message = logger.logs.error[0][0]; @@ -1236,7 +1251,8 @@ runInEachFileSystem(() => { const logger = new MockLogger(); mainNgcc({ basePath: '/node_modules', - propertiesToConsider: ['esm2015'], logger, + propertiesToConsider: ['esm2015'], + logger, }); expect(logger.logs.info).toContain(['Compiling @angular/common/http : esm2015 as esm2015']); }); @@ -1281,7 +1297,8 @@ runInEachFileSystem(() => { mainNgcc({ basePath: '/dist', propertiesToConsider: ['es2015'], - tsConfigPath: _('/tsconfig.app.json'), logger + tsConfigPath: _('/tsconfig.app.json'), + logger }); expect(loadPackage('local-package', _('/dist')).__processed_by_ivy_ngcc__).toEqual({ es2015: '0.0.0-PLACEHOLDER', @@ -1316,7 +1333,8 @@ runInEachFileSystem(() => { mainNgcc({ basePath: '/node_modules', propertiesToConsider: ['es2015'], - pathMappings: {paths: {'*': ['dist/*']}, baseUrl: '/'}, logger + pathMappings: {paths: {'*': ['dist/*']}, baseUrl: '/'}, + logger }); expect(loadPackage('@angular/core').__processed_by_ivy_ngcc__).toEqual({ es2015: '0.0.0-PLACEHOLDER', @@ -1356,7 +1374,8 @@ runInEachFileSystem(() => { mainNgcc({ basePath: '/dist', propertiesToConsider: ['es2015'], - tsConfigPath: null, logger, + tsConfigPath: null, + logger, }); expect(loadPackage('local-package', _('/dist')).__processed_by_ivy_ngcc__).toEqual({ es2015: '0.0.0-PLACEHOLDER', @@ -1821,7 +1840,7 @@ runInEachFileSystem(() => { expect(jsContents).toContain('exports.ɵngExportɵFooModuleɵFoo = ɵngcc1.Foo;'); expect(dtsContents) .toContain(`export {Foo as ɵngExportɵFooModuleɵFoo} from './directive';`); - expect(dtsContents.match(/ɵngExportɵFooModuleɵFoo/g) !.length).toBe(1); + expect(dtsContents.match(/ɵngExportɵFooModuleɵFoo/g)!.length).toBe(1); expect(dtsContents).not.toContain(`ɵngExportɵFooModuleɵLocalDir`); }); }); diff --git a/packages/compiler-cli/ngcc/test/integration/util.ts b/packages/compiler-cli/ngcc/test/integration/util.ts index e088007483..735b33d13b 100644 --- a/packages/compiler-cli/ngcc/test/integration/util.ts +++ b/packages/compiler-cli/ngcc/test/integration/util.ts @@ -234,11 +234,21 @@ class MockCompilerHost implements ts.CompilerHost { this.fs.writeFile(this.fs.resolve(fileName), data); } - getCurrentDirectory(): string { return this.fs.pwd(); } - getCanonicalFileName(fileName: string): string { return fileName; } - useCaseSensitiveFileNames(): boolean { return true; } - getNewLine(): string { return '\n'; } - fileExists(fileName: string): boolean { return this.fs.exists(this.fs.resolve(fileName)); } + getCurrentDirectory(): string { + return this.fs.pwd(); + } + getCanonicalFileName(fileName: string): string { + return fileName; + } + useCaseSensitiveFileNames(): boolean { + return true; + } + getNewLine(): string { + return '\n'; + } + fileExists(fileName: string): boolean { + return this.fs.exists(this.fs.resolve(fileName)); + } readFile(fileName: string): string|undefined { const abs = this.fs.resolve(fileName); return this.fs.exists(abs) ? this.fs.readFile(abs) : undefined; diff --git a/packages/compiler-cli/ngcc/test/locking/async_locker_spec.ts b/packages/compiler-cli/ngcc/test/locking/async_locker_spec.ts index 0922c92f35..d9a045758a 100644 --- a/packages/compiler-cli/ngcc/test/locking/async_locker_spec.ts +++ b/packages/compiler-cli/ngcc/test/locking/async_locker_spec.ts @@ -14,13 +14,13 @@ import {MockLogger} from '../helpers/mock_logger'; runInEachFileSystem(() => { describe('AsyncLocker', () => { describe('lock()', () => { - it('should guard the `fn()` with calls to `write()` and `remove()`', async() => { + it('should guard the `fn()` with calls to `write()` and `remove()`', async () => { const fs = getFileSystem(); const log: string[] = []; const lockFile = new MockLockFile(fs, log); const locker = new AsyncLocker(lockFile, new MockLogger(), 100, 10); - await locker.lock(async() => { + await locker.lock(async () => { log.push('fn() - before'); // This promise forces node to do a tick in this function, ensuring that we are truly // testing an async scenario. @@ -31,7 +31,7 @@ runInEachFileSystem(() => { }); it('should guard the `fn()` with calls to `write()` and `remove()`, even if it throws', - async() => { + async () => { let error: string = ''; const fs = getFileSystem(); const log: string[] = []; @@ -39,7 +39,7 @@ runInEachFileSystem(() => { const locker = new AsyncLocker(lockFile, new MockLogger(), 100, 10); try { - await locker.lock(async() => { + await locker.lock(async () => { log.push('fn()'); throw new Error('ERROR'); }); @@ -50,7 +50,7 @@ runInEachFileSystem(() => { expect(log).toEqual(['write()', 'fn()', 'remove()']); }); - it('should retry if another process is locking', async() => { + it('should retry if another process is locking', async () => { const fs = getFileSystem(); const log: string[] = []; const lockFile = new MockLockFile(fs, log); @@ -69,7 +69,7 @@ runInEachFileSystem(() => { return lockFileContents; }); - const promise = locker.lock(async() => log.push('fn()')); + const promise = locker.lock(async () => log.push('fn()')); // The lock is now waiting on the lock-file becoming free, so no `fn()` in the log. expect(log).toEqual(['write()', 'read() => 188']); expect(logger.logs.info).toEqual([[ @@ -83,7 +83,7 @@ runInEachFileSystem(() => { expect(log).toEqual(['write()', 'read() => 188', 'write()', 'fn()', 'remove()']); }); - it('should extend the retry timeout if the other process locking the file changes', async() => { + it('should extend the retry timeout if the other process locking the file changes', async () => { const fs = getFileSystem(); const log: string[] = []; const lockFile = new MockLockFile(fs, log); @@ -102,7 +102,7 @@ runInEachFileSystem(() => { return lockFileContents; }); - const promise = locker.lock(async() => log.push('fn()')); + const promise = locker.lock(async () => log.push('fn()')); // The lock is now waiting on the lock-file becoming free, so no `fn()` in the log. expect(log).toEqual(['write()', 'read() => 188']); expect(logger.logs.info).toEqual([[ @@ -132,7 +132,7 @@ runInEachFileSystem(() => { }); it('should error if another process does not release the lock-file before this times out', - async() => { + async () => { const fs = getFileSystem(); const log: string[] = []; const lockFile = new MockLockFile(fs, log); @@ -151,7 +151,7 @@ runInEachFileSystem(() => { return lockFileContents; }); - const promise = locker.lock(async() => log.push('fn()')); + const promise = locker.lock(async () => log.push('fn()')); // The lock is now waiting on the lock-file becoming free, so no `fn()` in the log. expect(log).toEqual(['write()', 'read() => 188']); @@ -159,10 +159,11 @@ runInEachFileSystem(() => { let error: Error; await promise.catch(e => error = e); expect(log).toEqual(['write()', 'read() => 188', 'write()', 'read() => 188']); - expect(error !.message) + expect(error!.message) .toEqual( `Timed out waiting 0.2s for another ngcc process, with id 188, to complete.\n` + - `(If you are sure no ngcc process is running then you should delete the lock-file at ${lockFile.path}.)`); + `(If you are sure no ngcc process is running then you should delete the lock-file at ${ + lockFile.path}.)`); }); }); }); diff --git a/packages/compiler-cli/ngcc/test/locking/lockfile_with_child_process/index_spec.ts b/packages/compiler-cli/ngcc/test/locking/lockfile_with_child_process/index_spec.ts index ae7287b917..049660ba94 100644 --- a/packages/compiler-cli/ngcc/test/locking/lockfile_with_child_process/index_spec.ts +++ b/packages/compiler-cli/ngcc/test/locking/lockfile_with_child_process/index_spec.ts @@ -23,7 +23,7 @@ runInEachFileSystem(() => { class LockFileUnderTest extends LockFileWithChildProcess { // Note that log is initialized in the `createUnlocker()` function that is called from // super(), so we can't initialize it here. - log !: string[]; + log!: string[]; constructor(fs: FileSystem) { super(fs, new MockLogger()); fs.ensureDir(fs.dirname(this.path)); @@ -47,7 +47,11 @@ runInEachFileSystem(() => { const log = this.log; // Normally this would fork a child process and return it. // But we don't want to do that in these tests. - return {disconnect() { log.push('unlocker.disconnect()'); }}; + return { + disconnect() { + log.push('unlocker.disconnect()'); + } + }; } } diff --git a/packages/compiler-cli/ngcc/test/locking/lockfile_with_child_process/util_spec.ts b/packages/compiler-cli/ngcc/test/locking/lockfile_with_child_process/util_spec.ts index b0ffe4c672..171d4625a4 100644 --- a/packages/compiler-cli/ngcc/test/locking/lockfile_with_child_process/util_spec.ts +++ b/packages/compiler-cli/ngcc/test/locking/lockfile_with_child_process/util_spec.ts @@ -5,7 +5,7 @@ * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ -import {AbsoluteFsPath, FileSystem, absoluteFrom, getFileSystem} from '../../../../src/ngtsc/file_system'; +import {absoluteFrom, AbsoluteFsPath, FileSystem, getFileSystem} from '../../../../src/ngtsc/file_system'; import {runInEachFileSystem} from '../../../../src/ngtsc/file_system/testing'; import {removeLockFile} from '../../../src/locking/lock_file_with_child_process/util'; import {MockLogger} from '../../helpers/mock_logger'; @@ -24,8 +24,9 @@ runInEachFileSystem(() => { }); describe('removeLockFile()', () => { - it('should do nothing if there is no file to remove', - () => { removeLockFile(fs, logger, absoluteFrom('/lockfile/path'), '1234'); }); + it('should do nothing if there is no file to remove', () => { + removeLockFile(fs, logger, absoluteFrom('/lockfile/path'), '1234'); + }); it('should do nothing if the pid does not match', () => { fs.writeFile(lockFilePath, '888'); diff --git a/packages/compiler-cli/ngcc/test/locking/sync_locker_spec.ts b/packages/compiler-cli/ngcc/test/locking/sync_locker_spec.ts index 8cd9687d07..05e18987d7 100644 --- a/packages/compiler-cli/ngcc/test/locking/sync_locker_spec.ts +++ b/packages/compiler-cli/ngcc/test/locking/sync_locker_spec.ts @@ -50,7 +50,9 @@ runInEachFileSystem(() => { const lockFile = new MockLockFile(fs, log); const locker = new SyncLocker(lockFile); - spyOn(lockFile, 'write').and.callFake(() => { throw {code: 'EEXIST'}; }); + spyOn(lockFile, 'write').and.callFake(() => { + throw {code: 'EEXIST'}; + }); spyOn(lockFile, 'read').and.returnValue('188'); expect(() => locker.lock(() => {})) @@ -58,7 +60,8 @@ runInEachFileSystem(() => { `ngcc is already running at process with id 188.\n` + `If you are running multiple builds in parallel then you should pre-process your node_modules via the command line ngcc tool before starting the builds;\n` + `See https://v9.angular.io/guide/ivy#speeding-up-ngcc-compilation.\n` + - `(If you are sure no ngcc process is running then you should delete the lock-file at ${lockFile.path}.)`); + `(If you are sure no ngcc process is running then you should delete the lock-file at ${ + lockFile.path}.)`); }); }); }); diff --git a/packages/compiler-cli/ngcc/test/migrations/missing_injectable_migration_spec.ts b/packages/compiler-cli/ngcc/test/migrations/missing_injectable_migration_spec.ts index 8ae41906d4..f8553bda29 100644 --- a/packages/compiler-cli/ngcc/test/migrations/missing_injectable_migration_spec.ts +++ b/packages/compiler-cli/ngcc/test/migrations/missing_injectable_migration_spec.ts @@ -7,14 +7,14 @@ */ import * as ts from 'typescript'; -import {AbsoluteFsPath, absoluteFrom, getFileSystem} from '../../../src/ngtsc/file_system'; -import {TestFile, runInEachFileSystem} from '../../../src/ngtsc/file_system/testing'; +import {absoluteFrom, AbsoluteFsPath, getFileSystem} from '../../../src/ngtsc/file_system'; +import {runInEachFileSystem, TestFile} from '../../../src/ngtsc/file_system/testing'; import {loadFakeCore, loadTestFiles} from '../../../test/helpers'; import {DecorationAnalyzer} from '../../src/analysis/decoration_analyzer'; import {NgccReferencesRegistry} from '../../src/analysis/ngcc_references_registry'; import {DecorationAnalyses} from '../../src/analysis/types'; import {Esm2015ReflectionHost} from '../../src/host/esm2015_host'; -import {MissingInjectableMigration, getAngularCoreDecoratorName} from '../../src/migrations/missing_injectable_migration'; +import {getAngularCoreDecoratorName, MissingInjectableMigration} from '../../src/migrations/missing_injectable_migration'; import {MockLogger} from '../helpers/mock_logger'; import {getRootFiles, makeTestEntryPointBundle} from '../helpers/utils'; @@ -58,7 +58,7 @@ runInEachFileSystem(() => { `, }]); - const index = program.getSourceFile(INDEX_FILENAME) !; + const index = program.getSourceFile(INDEX_FILENAME)!; expect(hasInjectableDecorator(index, analysis, 'ServiceA')).toBe(true); expect(hasInjectableDecorator(index, analysis, 'ServiceB')).toBe(true); expect(hasInjectableDecorator(index, analysis, 'ServiceC')).toBe(false); @@ -66,7 +66,7 @@ runInEachFileSystem(() => { }); function runTests( - type: 'NgModule' | 'Directive' | 'Component', propName: 'providers' | 'viewProviders') { + type: 'NgModule'|'Directive'|'Component', propName: 'providers'|'viewProviders') { const args = type === 'Component' ? 'template: "", ' : ''; it(`should migrate type provider in ${type}`, () => { @@ -85,7 +85,7 @@ runInEachFileSystem(() => { `, }]); - const index = program.getSourceFile(INDEX_FILENAME) !; + const index = program.getSourceFile(INDEX_FILENAME)!; expect(hasInjectableDecorator(index, analysis, 'MyService')).toBe(true); expect(hasInjectableDecorator(index, analysis, 'OtherService')).toBe(false); }); @@ -106,12 +106,12 @@ runInEachFileSystem(() => { `, }]); - const index = program.getSourceFile(INDEX_FILENAME) !; + const index = program.getSourceFile(INDEX_FILENAME)!; expect(hasInjectableDecorator(index, analysis, 'MyService')).toBe(true); expect(hasInjectableDecorator(index, analysis, 'OtherService')).toBe(false); }); - it(`should migrate object literal provider with forwardRef in ${type}`, async() => { + it(`should migrate object literal provider with forwardRef in ${type}`, async () => { const {program, analysis} = setUpAndAnalyzeProgram([{ name: INDEX_FILENAME, contents: ` @@ -121,12 +121,13 @@ runInEachFileSystem(() => { export class TestClass {} TestClass.decorators = [ - { type: ${type}, args: [{${args}${propName}: [{provide: forwardRef(() => MyService) }]}] } + { type: ${type}, args: [{${args}${ + propName}: [{provide: forwardRef(() => MyService) }]}] } ]; `, }]); - const index = program.getSourceFile(INDEX_FILENAME) !; + const index = program.getSourceFile(INDEX_FILENAME)!; expect(hasInjectableDecorator(index, analysis, 'MyService')).toBe(true); }); @@ -140,12 +141,13 @@ runInEachFileSystem(() => { export class TestClass {} TestClass.decorators = [ - { type: ${type}, args: [{${args}${propName}: [{provide: MyService, useValue: null }]}] } + { type: ${type}, args: [{${args}${ + propName}: [{provide: MyService, useValue: null }]}] } ]; `, }]); - const index = program.getSourceFile(INDEX_FILENAME) !; + const index = program.getSourceFile(INDEX_FILENAME)!; expect(hasInjectableDecorator(index, analysis, 'MyService')).toBe(false); }); @@ -159,12 +161,13 @@ runInEachFileSystem(() => { export class TestClass {} TestClass.decorators = [ - { type: ${type}, args: [{${args}${propName}: [{provide: MyService, useFactory: () => null }]}] } + { type: ${type}, args: [{${args}${ + propName}: [{provide: MyService, useFactory: () => null }]}] } ]; `, }]); - const index = program.getSourceFile(INDEX_FILENAME) !; + const index = program.getSourceFile(INDEX_FILENAME)!; expect(hasInjectableDecorator(index, analysis, 'MyService')).toBe(false); }); @@ -189,7 +192,7 @@ runInEachFileSystem(() => { `, }]); - const index = program.getSourceFile(INDEX_FILENAME) !; + const index = program.getSourceFile(INDEX_FILENAME)!; expect(hasInjectableDecorator(index, analysis, 'MyService')).toBe(true); expect(hasInjectableDecorator(index, analysis, 'MyToken')).toBe(false); expect(hasInjectableDecorator(index, analysis, 'MyTokenAlias')).toBe(false); @@ -206,12 +209,13 @@ runInEachFileSystem(() => { export class TestClass {} TestClass.decorators = [ - { type: ${type}, args: [{${args}${propName}: [{provide: MyToken, useClass: MyService}]}] } + { type: ${type}, args: [{${args}${ + propName}: [{provide: MyToken, useClass: MyService}]}] } ]; `, }]); - const index = program.getSourceFile(INDEX_FILENAME) !; + const index = program.getSourceFile(INDEX_FILENAME)!; expect(hasInjectableDecorator(index, analysis, 'MyService')).toBe(true); expect(hasInjectableDecorator(index, analysis, 'MyToken')).toBe(false); }); @@ -234,7 +238,7 @@ runInEachFileSystem(() => { `, }]); - const index = program.getSourceFile(INDEX_FILENAME) !; + const index = program.getSourceFile(INDEX_FILENAME)!; expect(getInjectableDecorators(index, analysis, 'MyService').length).toBe(1); }); @@ -256,7 +260,7 @@ runInEachFileSystem(() => { `, }]); - const index = program.getSourceFile(INDEX_FILENAME) !; + const index = program.getSourceFile(INDEX_FILENAME)!; expect(hasInjectableDecorator(index, analysis, 'MyService')).toBe(false); }); @@ -278,7 +282,7 @@ runInEachFileSystem(() => { `, }]); - const index = program.getSourceFile(INDEX_FILENAME) !; + const index = program.getSourceFile(INDEX_FILENAME)!; expect(hasInjectableDecorator(index, analysis, 'MyService')).toBe(false); }); @@ -300,7 +304,7 @@ runInEachFileSystem(() => { `, }]); - const index = program.getSourceFile(INDEX_FILENAME) !; + const index = program.getSourceFile(INDEX_FILENAME)!; expect(hasInjectableDecorator(index, analysis, 'MyService')).toBe(false); }); @@ -320,7 +324,7 @@ runInEachFileSystem(() => { `, }]); - const index = program.getSourceFile(INDEX_FILENAME) !; + const index = program.getSourceFile(INDEX_FILENAME)!; expect(hasInjectableDecorator(index, analysis, 'ServiceA')).toBe(true); expect(hasInjectableDecorator(index, analysis, 'ServiceB')).toBe(true); }); @@ -348,7 +352,7 @@ runInEachFileSystem(() => { `, }]); - const index = program.getSourceFile(INDEX_FILENAME) !; + const index = program.getSourceFile(INDEX_FILENAME)!; expect(hasInjectableDecorator(index, analysis, 'ServiceA')).toBe(true); expect(hasInjectableDecorator(index, analysis, 'ServiceB')).toBe(true); expect(hasInjectableDecorator(index, analysis, 'ServiceC')).toBe(true); @@ -381,7 +385,7 @@ runInEachFileSystem(() => { `, }]); - const index = program.getSourceFile(INDEX_FILENAME) !; + const index = program.getSourceFile(INDEX_FILENAME)!; expect(hasInjectableDecorator(index, analysis, 'ServiceA')).toBe(true); expect(hasInjectableDecorator(index, analysis, 'ServiceB')).toBe(true); expect(hasInjectableDecorator(index, analysis, 'ServiceC')).toBe(true); @@ -407,7 +411,7 @@ runInEachFileSystem(() => { ` }]); - const index = program.getSourceFile(INDEX_FILENAME) !; + const index = program.getSourceFile(INDEX_FILENAME)!; expect(hasInjectableDecorator(index, analysis, 'ServiceA')).toBe(true); expect(hasInjectableDecorator(index, analysis, 'ServiceB')).toBe(true); expect(hasInjectableDecorator(index, analysis, 'ServiceC')).toBe(false); @@ -434,7 +438,7 @@ runInEachFileSystem(() => { ` }]); - const index = program.getSourceFile(INDEX_FILENAME) !; + const index = program.getSourceFile(INDEX_FILENAME)!; expect(getInjectableDecorators(index, analysis, 'ServiceA').length).toBe(1); expect(getInjectableDecorators(index, analysis, 'ServiceB').length).toBe(1); }); @@ -454,7 +458,7 @@ runInEachFileSystem(() => { `, }]); - const index = program.getSourceFile(INDEX_FILENAME) !; + const index = program.getSourceFile(INDEX_FILENAME)!; expect(hasInjectableDecorator(index, analysis, 'ServiceA')).toBe(false); }); @@ -481,7 +485,7 @@ runInEachFileSystem(() => { } ]); - const index = program.getSourceFile(SERVICE_FILENAME) !; + const index = program.getSourceFile(SERVICE_FILENAME)!; expect(hasInjectableDecorator(index, analysis, 'MyService')).toBe(true); }); @@ -508,7 +512,7 @@ runInEachFileSystem(() => { } ]); - const index = program.getSourceFile(SERVICE_FILENAME) !; + const index = program.getSourceFile(SERVICE_FILENAME)!; expect(hasInjectableDecorator(index, analysis, 'MyService')).toBe(false); }); @@ -527,7 +531,7 @@ runInEachFileSystem(() => { `, }]); - const index = program.getSourceFile(INDEX_FILENAME) !; + const index = program.getSourceFile(INDEX_FILENAME)!; expect(hasInjectableDecorator(index, analysis, 'MyService')).toBe(true); }); @@ -546,7 +550,7 @@ runInEachFileSystem(() => { `, }]); - const index = program.getSourceFile(INDEX_FILENAME) !; + const index = program.getSourceFile(INDEX_FILENAME)!; expect(hasInjectableDecorator(index, analysis, 'MyService')).toBe(false); }); } diff --git a/packages/compiler-cli/ngcc/test/migrations/undecorated_parent_migration_spec.ts b/packages/compiler-cli/ngcc/test/migrations/undecorated_parent_migration_spec.ts index 91ca55a152..064aa26b96 100644 --- a/packages/compiler-cli/ngcc/test/migrations/undecorated_parent_migration_spec.ts +++ b/packages/compiler-cli/ngcc/test/migrations/undecorated_parent_migration_spec.ts @@ -6,8 +6,9 @@ * found in the LICENSE file at https://angular.io/license */ import * as ts from 'typescript'; -import {AbsoluteFsPath, absoluteFrom, getFileSystem} from '../../../src/ngtsc/file_system'; -import {TestFile, runInEachFileSystem} from '../../../src/ngtsc/file_system/testing'; + +import {absoluteFrom, AbsoluteFsPath, getFileSystem} from '../../../src/ngtsc/file_system'; +import {runInEachFileSystem, TestFile} from '../../../src/ngtsc/file_system/testing'; import {loadFakeCore, loadTestFiles} from '../../../test/helpers'; import {DecorationAnalyzer} from '../../src/analysis/decoration_analyzer'; import {NgccReferencesRegistry} from '../../src/analysis/ngcc_references_registry'; @@ -34,7 +35,7 @@ runInEachFileSystem(() => { ` }]); expect(errors).toEqual([]); - const file = analysis.get(program.getSourceFile(INDEX_FILENAME) !); + const file = analysis.get(program.getSourceFile(INDEX_FILENAME)!); expect(file).toBeUndefined(); }); @@ -56,7 +57,7 @@ runInEachFileSystem(() => { ` }]); expect(errors).toEqual([]); - const file = analysis.get(program.getSourceFile(INDEX_FILENAME) !) !; + const file = analysis.get(program.getSourceFile(INDEX_FILENAME)!)!; expect(file.compiledClasses.find(c => c.name === 'DerivedClass')).toBeDefined(); expect(file.compiledClasses.find(c => c.name === 'BaseClass')).toBeUndefined(); }); @@ -81,15 +82,15 @@ runInEachFileSystem(() => { ` }]); expect(errors).toEqual([]); - const file = analysis.get(program.getSourceFile(INDEX_FILENAME) !) !; + const file = analysis.get(program.getSourceFile(INDEX_FILENAME)!)!; expect(file.compiledClasses.find(c => c.name === 'DerivedClass')).toBeDefined(); - const baseClass = file.compiledClasses.find(c => c.name === 'BaseClass') !; - expect(baseClass.decorators !.length).toEqual(1); - const decorator = baseClass.decorators ![0]; + const baseClass = file.compiledClasses.find(c => c.name === 'BaseClass')!; + expect(baseClass.decorators!.length).toEqual(1); + const decorator = baseClass.decorators![0]; expect(decorator.name).toEqual('Directive'); expect(decorator.identifier).toBeNull('The decorator must be synthesized'); expect(decorator.import).toEqual({from: '@angular/core', name: 'Directive'}); - expect(decorator.args !.length).toEqual(0); + expect(decorator.args!.length).toEqual(0); }); it('should not add a decorator to a base class that is already decorated', () => { @@ -114,11 +115,11 @@ runInEachFileSystem(() => { ` }]); expect(errors).toEqual([]); - const file = analysis.get(program.getSourceFile(INDEX_FILENAME) !) !; + const file = analysis.get(program.getSourceFile(INDEX_FILENAME)!)!; expect(file.compiledClasses.find(c => c.name === 'DerivedClass')).toBeDefined(); - const baseClass = file.compiledClasses.find(c => c.name === 'BaseClass') !; - expect(baseClass.decorators !.length).toEqual(1); - const decorator = baseClass.decorators ![0]; + const baseClass = file.compiledClasses.find(c => c.name === 'BaseClass')!; + expect(baseClass.decorators!.length).toEqual(1); + const decorator = baseClass.decorators![0]; expect(decorator.name).toEqual('Directive'); expect(decorator.identifier).not.toBeNull('The decorator must not be synthesized'); }); @@ -145,25 +146,25 @@ runInEachFileSystem(() => { ` }]); expect(errors).toEqual([]); - const file = analysis.get(program.getSourceFile(INDEX_FILENAME) !) !; + const file = analysis.get(program.getSourceFile(INDEX_FILENAME)!)!; expect(file.compiledClasses.find(c => c.name === 'DerivedClass')).toBeDefined(); expect(file.compiledClasses.find(c => c.name === 'RealBaseClass')).toBeUndefined(); - const intermediateClass = file.compiledClasses.find(c => c.name === 'IntermediateClass') !; - expect(intermediateClass.decorators !.length).toEqual(1); - const intermediateDecorator = intermediateClass.decorators ![0]; + const intermediateClass = file.compiledClasses.find(c => c.name === 'IntermediateClass')!; + expect(intermediateClass.decorators!.length).toEqual(1); + const intermediateDecorator = intermediateClass.decorators![0]; expect(intermediateDecorator.name).toEqual('Directive'); expect(intermediateDecorator.identifier).toBeNull('The decorator must be synthesized'); expect(intermediateDecorator.import).toEqual({from: '@angular/core', name: 'Directive'}); - expect(intermediateDecorator.args !.length).toEqual(0); + expect(intermediateDecorator.args!.length).toEqual(0); - const baseClass = file.compiledClasses.find(c => c.name === 'BaseClass') !; - expect(baseClass.decorators !.length).toEqual(1); - const baseDecorator = baseClass.decorators ![0]; + const baseClass = file.compiledClasses.find(c => c.name === 'BaseClass')!; + expect(baseClass.decorators!.length).toEqual(1); + const baseDecorator = baseClass.decorators![0]; expect(baseDecorator.name).toEqual('Directive'); expect(baseDecorator.identifier).toBeNull('The decorator must be synthesized'); expect(baseDecorator.import).toEqual({from: '@angular/core', name: 'Directive'}); - expect(baseDecorator.args !.length).toEqual(0); + expect(baseDecorator.args!.length).toEqual(0); }); it('should handle the base class being in a different file (same package) as the derived class', @@ -195,14 +196,14 @@ runInEachFileSystem(() => { } ]); expect(errors).toEqual([]); - const file = analysis.get(program.getSourceFile(BASE_FILENAME) !) !; - const baseClass = file.compiledClasses.find(c => c.name === 'BaseClass') !; - expect(baseClass.decorators !.length).toEqual(1); - const decorator = baseClass.decorators ![0]; + const file = analysis.get(program.getSourceFile(BASE_FILENAME)!)!; + const baseClass = file.compiledClasses.find(c => c.name === 'BaseClass')!; + expect(baseClass.decorators!.length).toEqual(1); + const decorator = baseClass.decorators![0]; expect(decorator.name).toEqual('Directive'); expect(decorator.identifier).toBeNull('The decorator must be synthesized'); expect(decorator.import).toEqual({from: '@angular/core', name: 'Directive'}); - expect(decorator.args !.length).toEqual(0); + expect(decorator.args!.length).toEqual(0); }); it('should skip the base class if it is in a different package from the derived class', () => { diff --git a/packages/compiler-cli/ngcc/test/packages/build_marker_spec.ts b/packages/compiler-cli/ngcc/test/packages/build_marker_spec.ts index e6637cf99d..ff9f414c7a 100644 --- a/packages/compiler-cli/ngcc/test/packages/build_marker_spec.ts +++ b/packages/compiler-cli/ngcc/test/packages/build_marker_spec.ts @@ -8,7 +8,7 @@ import {absoluteFrom, getFileSystem} from '../../../src/ngtsc/file_system'; import {runInEachFileSystem} from '../../../src/ngtsc/file_system/testing'; import {loadTestFiles} from '../../../test/helpers'; -import {NGCC_VERSION, cleanPackageJson, hasBeenProcessed, markAsProcessed, needsCleaning} from '../../src/packages/build_marker'; +import {cleanPackageJson, hasBeenProcessed, markAsProcessed, needsCleaning, NGCC_VERSION} from '../../src/packages/build_marker'; import {EntryPointPackageJson} from '../../src/packages/entry_point'; import {DirectPackageJsonUpdater} from '../../src/writing/package_json_updater'; @@ -192,8 +192,9 @@ runInEachFileSystem(() => { .toBe(false); }); - it('should return false if no markers exist', - () => { expect(hasBeenProcessed({name: 'test'}, 'module')).toBe(false); }); + it('should return false if no markers exist', () => { + expect(hasBeenProcessed({name: 'test'}, 'module')).toBe(false); + }); }); describe('needsCleaning()', () => { diff --git a/packages/compiler-cli/ngcc/test/packages/configuration_spec.ts b/packages/compiler-cli/ngcc/test/packages/configuration_spec.ts index f91abd6c7d..b9c0667397 100644 --- a/packages/compiler-cli/ngcc/test/packages/configuration_spec.ts +++ b/packages/compiler-cli/ngcc/test/packages/configuration_spec.ts @@ -7,7 +7,7 @@ */ import {createHash} from 'crypto'; -import {FileSystem, absoluteFrom, getFileSystem} from '../../../src/ngtsc/file_system'; +import {absoluteFrom, FileSystem, getFileSystem} from '../../../src/ngtsc/file_system'; import {runInEachFileSystem} from '../../../src/ngtsc/file_system/testing'; import {loadTestFiles} from '../../../test/helpers'; import {DEFAULT_NGCC_CONFIG, NgccConfiguration} from '../../src/packages/configuration'; @@ -27,8 +27,8 @@ runInEachFileSystem(() => { it('should error if a project level config file is badly formatted', () => { loadTestFiles([{name: _Abs('/project-1/ngcc.config.js'), contents: `bad js code`}]); expect(() => new NgccConfiguration(fs, _Abs('/project-1'))) - .toThrowError( - `Invalid project configuration file at "${_Abs('/project-1/ngcc.config.js')}": Unexpected identifier`); + .toThrowError(`Invalid project configuration file at "${ + _Abs('/project-1/ngcc.config.js')}": Unexpected identifier`); }); }); @@ -50,8 +50,8 @@ runInEachFileSystem(() => { };` }]); const project1Conf = new NgccConfiguration(fs, project1); - const expectedProject1Config = - `{"packages":{"${project1Package1}":[{"entryPoints":{"${project1Package1EntryPoint1}":{}},"versionRange":"*"}]}}`; + const expectedProject1Config = `{"packages":{"${project1Package1}":[{"entryPoints":{"${ + project1Package1EntryPoint1}":{}},"versionRange":"*"}]}}`; expect(project1Conf.hash) .toEqual(createHash('md5').update(expectedProject1Config).digest('hex')); @@ -71,8 +71,8 @@ runInEachFileSystem(() => { };` }]); const project2Conf = new NgccConfiguration(fs, project2); - const expectedProject2Config = - `{"packages":{"${project2Package1}":[{"entryPoints":{"${project2Package1EntryPoint1}":{"ignore":true}},"versionRange":"*"}]}}`; + const expectedProject2Config = `{"packages":{"${project2Package1}":[{"entryPoints":{"${ + project2Package1EntryPoint1}":{"ignore":true}},"versionRange":"*"}]}}`; expect(project2Conf.hash) .toEqual(createHash('md5').update(expectedProject2Config).digest('hex')); }); @@ -136,8 +136,9 @@ runInEachFileSystem(() => { }]); const configuration = new NgccConfiguration(fs, _Abs('/project-1')); expect(() => configuration.getConfig(_Abs('/project-1/node_modules/package-1'), '1.0.0')) - .toThrowError( - `Invalid package configuration file at "${_Abs('/project-1/node_modules/package-1/ngcc.config.js')}": Unexpected identifier`); + .toThrowError(`Invalid package configuration file at "${ + _Abs( + '/project-1/node_modules/package-1/ngcc.config.js')}": Unexpected identifier`); }); }); @@ -243,7 +244,7 @@ runInEachFileSystem(() => { ]); const configuration = new NgccConfiguration(fs, _Abs('/project-1')); - const getConfig = (packageName: string, version: string | null) => + const getConfig = (packageName: string, version: string|null) => configuration.getConfig(_Abs(`/project-1/node_modules/${packageName}`), version); // Default version range: * @@ -343,7 +344,6 @@ runInEachFileSystem(() => { versionRange: '*', entryPoints: {[_Abs('/project-1/node_modules/@angular/common')]: {}} }); - }); it('should override package level config with project level config per package', () => { @@ -412,8 +412,7 @@ runInEachFileSystem(() => { configuration.getConfig(_Abs('/project-1/node_modules/package-1'), '1.0.0'); expect(config).toEqual({ versionRange: '*', - entryPoints: - {[_Abs('/project-1/node_modules/package-1/default-level-entry-point')]: {}} + entryPoints: {[_Abs('/project-1/node_modules/package-1/default-level-entry-point')]: {}} }); }); @@ -427,8 +426,7 @@ runInEachFileSystem(() => { // merge entry-points. expect(config).toEqual({ versionRange: '1.0.0', - entryPoints: - {[_Abs('/project-1/node_modules/package-1/package-level-entry-point')]: {}} + entryPoints: {[_Abs('/project-1/node_modules/package-1/package-level-entry-point')]: {}} }); }); @@ -465,8 +463,7 @@ runInEachFileSystem(() => { // merge entry-points. expect(config).toEqual({ versionRange: '*', - entryPoints: - {[_Abs('/project-1/node_modules/package-1/project-level-entry-point')]: {}} + entryPoints: {[_Abs('/project-1/node_modules/package-1/project-level-entry-point')]: {}} }); }); @@ -490,7 +487,7 @@ runInEachFileSystem(() => { }); const configuration = new NgccConfiguration(fs, _Abs('/project-1')); - const getConfig = (packageName: string, version: string | null) => + const getConfig = (packageName: string, version: string|null) => configuration.getConfig(_Abs(`/project-1/node_modules/${packageName}`), version); // Default version range: * diff --git a/packages/compiler-cli/ngcc/test/packages/entry_point_bundle_spec.ts b/packages/compiler-cli/ngcc/test/packages/entry_point_bundle_spec.ts index 9bec20881b..8f9b1df83d 100644 --- a/packages/compiler-cli/ngcc/test/packages/entry_point_bundle_spec.ts +++ b/packages/compiler-cli/ngcc/test/packages/entry_point_bundle_spec.ts @@ -13,7 +13,6 @@ import {makeEntryPointBundle} from '../../src/packages/entry_point_bundle'; runInEachFileSystem(() => { describe('entry point bundle', () => { - function setupMockFileSystem(): void { const _ = absoluteFrom; loadTestFiles([ @@ -196,7 +195,7 @@ runInEachFileSystem(() => { '/node_modules/other/index.d.ts', ].map(p => absoluteFrom(p).toString()))); - expect(esm5bundle.dts !.program.getSourceFiles().map(sf => sf.fileName)) + expect(esm5bundle.dts!.program.getSourceFiles().map(sf => sf.fileName)) .toEqual(jasmine.arrayWithExactContents([ // All modules in the dts program should be declaration files '/node_modules/test/index.d.ts', @@ -231,7 +230,7 @@ runInEachFileSystem(() => { /* pathMappings */ undefined, /* mirrorDtsFromSrc */ true); expect(esm5bundle.src.program.getSourceFiles().map(sf => sf.fileName)) .toContain(absoluteFrom('/node_modules/test/internal.js')); - expect(esm5bundle.dts !.program.getSourceFiles().map(sf => sf.fileName)) + expect(esm5bundle.dts!.program.getSourceFiles().map(sf => sf.fileName)) .toContain(absoluteFrom('/node_modules/test/internal.d.ts')); }); @@ -253,7 +252,7 @@ runInEachFileSystem(() => { /* pathMappings */ undefined, /* mirrorDtsFromSrc */ true); expect(esm5bundle.src.program.getSourceFiles().map(sf => sf.fileName)) .toContain(absoluteFrom('/node_modules/internal/esm2015/src/internal.js')); - expect(esm5bundle.dts !.program.getSourceFiles().map(sf => sf.fileName)) + expect(esm5bundle.dts!.program.getSourceFiles().map(sf => sf.fileName)) .toContain(absoluteFrom('/node_modules/internal/src/internal.d.ts')); }); @@ -275,7 +274,7 @@ runInEachFileSystem(() => { /* pathMappings */ undefined, /* mirrorDtsFromSrc */ false); expect(esm5bundle.src.program.getSourceFiles().map(sf => sf.fileName)) .toContain(absoluteFrom('/node_modules/test/internal.js')); - expect(esm5bundle.dts !.program.getSourceFiles().map(sf => sf.fileName)) + expect(esm5bundle.dts!.program.getSourceFiles().map(sf => sf.fileName)) .not.toContain(absoluteFrom('/node_modules/test/internal.d.ts')); }); }); diff --git a/packages/compiler-cli/ngcc/test/packages/entry_point_manifest_spec.ts b/packages/compiler-cli/ngcc/test/packages/entry_point_manifest_spec.ts index b67eaa73c9..12debe0965 100644 --- a/packages/compiler-cli/ngcc/test/packages/entry_point_manifest_spec.ts +++ b/packages/compiler-cli/ngcc/test/packages/entry_point_manifest_spec.ts @@ -7,7 +7,7 @@ */ import {createHash} from 'crypto'; -import {FileSystem, absoluteFrom, getFileSystem} from '../../../src/ngtsc/file_system'; +import {absoluteFrom, FileSystem, getFileSystem} from '../../../src/ngtsc/file_system'; import {runInEachFileSystem} from '../../../src/ngtsc/file_system/testing'; import {loadTestFiles} from '../../../test/helpers'; import {NGCC_VERSION} from '../../src/packages/build_marker'; @@ -135,13 +135,15 @@ runInEachFileSystem(() => { _Abs('/project/node_modules/__ngcc_entry_points__.json'), JSON.stringify(manifestFile)); const entryPoints = manifest.readEntryPointsUsingManifest(_Abs('/project/node_modules')); expect(entryPoints).toEqual([{ - name: 'some_package/valid_entry_point', packageJson: jasmine.any(Object), - package: _Abs('/project/node_modules/some_package'), - path: _Abs('/project/node_modules/some_package/valid_entry_point'), - typings: _Abs( - '/project/node_modules/some_package/valid_entry_point/valid_entry_point.d.ts'), - compiledByAngular: true, ignoreMissingDependencies: false, - generateDeepReexports: false, + name: 'some_package/valid_entry_point', + packageJson: jasmine.any(Object), + package: _Abs('/project/node_modules/some_package'), + path: _Abs('/project/node_modules/some_package/valid_entry_point'), + typings: + _Abs('/project/node_modules/some_package/valid_entry_point/valid_entry_point.d.ts'), + compiledByAngular: true, + ignoreMissingDependencies: false, + generateDeepReexports: false, } as any]); }); diff --git a/packages/compiler-cli/ngcc/test/packages/entry_point_spec.ts b/packages/compiler-cli/ngcc/test/packages/entry_point_spec.ts index 9a0e7957b7..3ac8b1f32c 100644 --- a/packages/compiler-cli/ngcc/test/packages/entry_point_spec.ts +++ b/packages/compiler-cli/ngcc/test/packages/entry_point_spec.ts @@ -6,11 +6,11 @@ * found in the LICENSE file at https://angular.io/license */ -import {AbsoluteFsPath, FileSystem, absoluteFrom, getFileSystem} from '../../../src/ngtsc/file_system'; +import {absoluteFrom, AbsoluteFsPath, FileSystem, getFileSystem} from '../../../src/ngtsc/file_system'; import {runInEachFileSystem} from '../../../src/ngtsc/file_system/testing'; import {loadTestFiles} from '../../../test/helpers'; import {NgccConfiguration} from '../../src/packages/configuration'; -import {EntryPoint, INCOMPATIBLE_ENTRY_POINT, NO_ENTRY_POINT, SUPPORTED_FORMAT_PROPERTIES, getEntryPointFormat, getEntryPointInfo} from '../../src/packages/entry_point'; +import {EntryPoint, getEntryPointFormat, getEntryPointInfo, INCOMPATIBLE_ENTRY_POINT, NO_ENTRY_POINT, SUPPORTED_FORMAT_PROPERTIES} from '../../src/packages/entry_point'; import {MockLogger} from '../helpers/mock_logger'; runInEachFileSystem(() => { @@ -69,8 +69,7 @@ runInEachFileSystem(() => { ]); const config = new NgccConfiguration(fs, _('/project')); spyOn(config, 'getConfig').and.returnValue({ - entryPoints: - {[_('/project/node_modules/some_package/valid_entry_point')]: {ignore: true}} + entryPoints: {[_('/project/node_modules/some_package/valid_entry_point')]: {ignore: true}} }); const entryPoint = getEntryPointInfo( fs, config, new MockLogger(), SOME_PACKAGE, @@ -102,8 +101,9 @@ runInEachFileSystem(() => { fs, config, new MockLogger(), SOME_PACKAGE, _('/project/node_modules/some_package/valid_entry_point')); const overriddenPackageJson = { - ...loadPackageJson(fs, '/project/node_modules/some_package/valid_entry_point'), - ...override}; + ...loadPackageJson(fs, '/project/node_modules/some_package/valid_entry_point'), + ...override + }; expect(entryPoint).toEqual({ name: 'some_package/valid_entry_point', package: SOME_PACKAGE, @@ -145,8 +145,7 @@ runInEachFileSystem(() => { const override = JSON.parse(createPackageJson('missing_package_json', {excludes: ['name']})); spyOn(config, 'getConfig').and.returnValue({ - entryPoints: - {[_('/project/node_modules/some_package/missing_package_json')]: {override}} + entryPoints: {[_('/project/node_modules/some_package/missing_package_json')]: {override}} }); const entryPoint = getEntryPointInfo( fs, config, new MockLogger(), SOME_PACKAGE, @@ -211,37 +210,38 @@ runInEachFileSystem(() => { // Let's give 'module' a specific path, otherwise compute it based on the property. const typingsPath = prop === 'module' ? 'index' : `${prop}/missing_typings`; - it(`should return an object if it can guess the typings path from the "${prop}" field`, () => { - loadTestFiles([ - { - name: _('/project/node_modules/some_package/missing_typings/package.json'), - contents: createPackageJson('missing_typings', {excludes: ['typings']}), - }, - { - name: _( - `/project/node_modules/some_package/missing_typings/${typingsPath}.metadata.json`), - contents: 'some meta data', - }, - { - name: _(`/project/node_modules/some_package/missing_typings/${typingsPath}.d.ts`), - contents: '// some typings file', - }, - ]); - const config = new NgccConfiguration(fs, _('/project')); - const entryPoint = getEntryPointInfo( - fs, config, new MockLogger(), SOME_PACKAGE, - _('/project/node_modules/some_package/missing_typings')); - expect(entryPoint).toEqual({ - name: 'some_package/missing_typings', - package: SOME_PACKAGE, - path: _('/project/node_modules/some_package/missing_typings'), - typings: _(`/project/node_modules/some_package/missing_typings/${typingsPath}.d.ts`), - packageJson: loadPackageJson(fs, '/project/node_modules/some_package/missing_typings'), - compiledByAngular: true, - ignoreMissingDependencies: false, - generateDeepReexports: false, - }); - }); + it(`should return an object if it can guess the typings path from the "${prop}" field`, + () => { + loadTestFiles([ + { + name: _('/project/node_modules/some_package/missing_typings/package.json'), + contents: createPackageJson('missing_typings', {excludes: ['typings']}), + }, + { + name: _(`/project/node_modules/some_package/missing_typings/${ + typingsPath}.metadata.json`), + contents: 'some meta data', + }, + { + name: _(`/project/node_modules/some_package/missing_typings/${typingsPath}.d.ts`), + contents: '// some typings file', + }, + ]); + const config = new NgccConfiguration(fs, _('/project')); + const entryPoint = getEntryPointInfo( + fs, config, new MockLogger(), SOME_PACKAGE, + _('/project/node_modules/some_package/missing_typings')); + expect(entryPoint).toEqual({ + name: 'some_package/missing_typings', + package: SOME_PACKAGE, + path: _('/project/node_modules/some_package/missing_typings'), + typings: _(`/project/node_modules/some_package/missing_typings/${typingsPath}.d.ts`), + packageJson: loadPackageJson(fs, '/project/node_modules/some_package/missing_typings'), + compiledByAngular: true, + ignoreMissingDependencies: false, + generateDeepReexports: false, + }); + }); } it('should return an object with `compiledByAngular` set to false if there is no metadata.json file next to the typing file', @@ -401,23 +401,29 @@ runInEachFileSystem(() => { entryPoint = result; }); - it('should return `esm2015` format for `fesm2015` property', - () => { expect(getEntryPointFormat(fs, entryPoint, 'fesm2015')).toBe('esm2015'); }); + it('should return `esm2015` format for `fesm2015` property', () => { + expect(getEntryPointFormat(fs, entryPoint, 'fesm2015')).toBe('esm2015'); + }); - it('should return `esm5` format for `fesm5` property', - () => { expect(getEntryPointFormat(fs, entryPoint, 'fesm5')).toBe('esm5'); }); + it('should return `esm5` format for `fesm5` property', () => { + expect(getEntryPointFormat(fs, entryPoint, 'fesm5')).toBe('esm5'); + }); - it('should return `esm2015` format for `es2015` property', - () => { expect(getEntryPointFormat(fs, entryPoint, 'es2015')).toBe('esm2015'); }); + it('should return `esm2015` format for `es2015` property', () => { + expect(getEntryPointFormat(fs, entryPoint, 'es2015')).toBe('esm2015'); + }); - it('should return `esm2015` format for `esm2015` property', - () => { expect(getEntryPointFormat(fs, entryPoint, 'esm2015')).toBe('esm2015'); }); + it('should return `esm2015` format for `esm2015` property', () => { + expect(getEntryPointFormat(fs, entryPoint, 'esm2015')).toBe('esm2015'); + }); - it('should return `esm5` format for `esm5` property', - () => { expect(getEntryPointFormat(fs, entryPoint, 'esm5')).toBe('esm5'); }); + it('should return `esm5` format for `esm5` property', () => { + expect(getEntryPointFormat(fs, entryPoint, 'esm5')).toBe('esm5'); + }); - it('should return `esm5` format for `module` property', - () => { expect(getEntryPointFormat(fs, entryPoint, 'module')).toBe('esm5'); }); + it('should return `esm5` format for `module` property', () => { + expect(getEntryPointFormat(fs, entryPoint, 'module')).toBe('esm5'); + }); it('should return `umd` for `main` if the file contains a UMD wrapper function', () => { loadTestFiles([{ diff --git a/packages/compiler-cli/ngcc/test/rendering/commonjs_rendering_formatter_spec.ts b/packages/compiler-cli/ngcc/test/rendering/commonjs_rendering_formatter_spec.ts index 2071a8555e..914208bedc 100644 --- a/packages/compiler-cli/ngcc/test/rendering/commonjs_rendering_formatter_spec.ts +++ b/packages/compiler-cli/ngcc/test/rendering/commonjs_rendering_formatter_spec.ts @@ -8,19 +8,20 @@ import {DeclareVarStmt, LiteralExpr, StmtModifier} from '@angular/compiler'; import MagicString from 'magic-string'; import * as ts from 'typescript'; + +import {absoluteFrom, absoluteFromSourceFile, AbsoluteFsPath, getFileSystem, getSourceFileOrError} from '../../../src/ngtsc/file_system'; +import {runInEachFileSystem, TestFile} from '../../../src/ngtsc/file_system/testing'; import {NoopImportRewriter} from '../../../src/ngtsc/imports'; -import {AbsoluteFsPath, getFileSystem, getSourceFileOrError, absoluteFrom, absoluteFromSourceFile} from '../../../src/ngtsc/file_system'; -import {TestFile, runInEachFileSystem} from '../../../src/ngtsc/file_system/testing'; -import {loadTestFiles} from '../../../test/helpers'; import {getDeclaration} from '../../../src/ngtsc/testing'; import {ImportManager} from '../../../src/ngtsc/translator'; +import {loadTestFiles} from '../../../test/helpers'; import {DecorationAnalyzer} from '../../src/analysis/decoration_analyzer'; import {NgccReferencesRegistry} from '../../src/analysis/ngcc_references_registry'; import {SwitchMarkerAnalyzer} from '../../src/analysis/switch_marker_analyzer'; import {CommonJsReflectionHost} from '../../src/host/commonjs_host'; import {CommonJsRenderingFormatter} from '../../src/rendering/commonjs_rendering_formatter'; -import {makeTestEntryPointBundle} from '../helpers/utils'; import {MockLogger} from '../helpers/mock_logger'; +import {makeTestEntryPointBundle} from '../helpers/utils'; runInEachFileSystem(() => { describe('CommonJsRenderingFormatter', () => { @@ -273,7 +274,7 @@ var A = (function() {`); const file = getSourceFileOrError(program, _('/node_modules/test-package/some/file.js')); const output = new MagicString(PROGRAM.contents); renderer.rewriteSwitchableDeclarations( - output, file, switchMarkerAnalyses.get(sourceFile) !.declarations); + output, file, switchMarkerAnalyses.get(sourceFile)!.declarations); expect(output.toString()) .not.toContain(`var compileNgModuleFactory = compileNgModuleFactory__PRE_R3__;`); expect(output.toString()) @@ -295,7 +296,7 @@ var A = (function() {`); const {renderer, decorationAnalyses, sourceFile} = setup(PROGRAM); const output = new MagicString(PROGRAM.contents); const compiledClass = - decorationAnalyses.get(sourceFile) !.compiledClasses.find(c => c.name === 'A') !; + decorationAnalyses.get(sourceFile)!.compiledClasses.find(c => c.name === 'A')!; renderer.addDefinitions(output, compiledClass, 'SOME DEFINITION TEXT'); expect(output.toString()).toContain(` A.prototype.ngDoCheck = function() { @@ -314,15 +315,16 @@ SOME DEFINITION TEXT program, absoluteFromSourceFile(sourceFile), 'NoIife', ts.isFunctionDeclaration); const mockNoIifeClass: any = {declaration: noIifeDeclaration, name: 'NoIife'}; expect(() => renderer.addDefinitions(output, mockNoIifeClass, 'SOME DEFINITION TEXT')) - .toThrowError( - `Compiled class declaration is not inside an IIFE: NoIife in ${_('/node_modules/test-package/some/file.js')}`); + .toThrowError(`Compiled class declaration is not inside an IIFE: NoIife in ${ + _('/node_modules/test-package/some/file.js')}`); const badIifeDeclaration = getDeclaration( program, absoluteFromSourceFile(sourceFile), 'BadIife', ts.isVariableDeclaration); const mockBadIifeClass: any = {declaration: badIifeDeclaration, name: 'BadIife'}; expect(() => renderer.addDefinitions(output, mockBadIifeClass, 'SOME DEFINITION TEXT')) .toThrowError( - `Compiled class wrapper IIFE does not have a return statement: BadIife in ${_('/node_modules/test-package/some/file.js')}`); + `Compiled class wrapper IIFE does not have a return statement: BadIife in ${ + _('/node_modules/test-package/some/file.js')}`); }); }); @@ -347,8 +349,8 @@ SOME DEFINITION TEXT const program = {name: _('/node_modules/test-package/some/file.js'), contents}; const {renderer, decorationAnalyses, sourceFile} = setup(program); const output = new MagicString(contents); - const compiledClass = decorationAnalyses.get(sourceFile) !.compiledClasses.find( - c => c.name === 'SomeDirective') !; + const compiledClass = decorationAnalyses.get(sourceFile)!.compiledClasses.find( + c => c.name === 'SomeDirective')!; renderer.addAdjacentStatements(output, compiledClass, 'SOME STATEMENTS'); expect(output.toString()) .toContain( @@ -364,8 +366,8 @@ SOME DEFINITION TEXT const program = {name: _('/node_modules/test-package/some/file.js'), contents}; const {renderer, decorationAnalyses, sourceFile} = setup(program); const output = new MagicString(contents); - const compiledClass = decorationAnalyses.get(sourceFile) !.compiledClasses.find( - c => c.name === 'SomeDirective') !; + const compiledClass = decorationAnalyses.get(sourceFile)!.compiledClasses.find( + c => c.name === 'SomeDirective')!; renderer.addDefinitions(output, compiledClass, 'SOME DEFINITIONS'); renderer.addAdjacentStatements(output, compiledClass, 'SOME STATEMENTS'); const definitionsPosition = output.toString().indexOf('SOME DEFINITIONS'); @@ -377,16 +379,15 @@ SOME DEFINITION TEXT }); describe('removeDecorators', () => { - it('should delete the decorator (and following comma) that was matched in the analysis', () => { const {renderer, decorationAnalyses, sourceFile} = setup(PROGRAM); const output = new MagicString(PROGRAM.contents); const compiledClass = - decorationAnalyses.get(sourceFile) !.compiledClasses.find(c => c.name === 'A') !; - const decorator = compiledClass.decorators ![0]; + decorationAnalyses.get(sourceFile)!.compiledClasses.find(c => c.name === 'A')!; + const decorator = compiledClass.decorators![0]; const decoratorsToRemove = new Map(); - decoratorsToRemove.set(decorator.node !.parent !, [decorator.node !]); + decoratorsToRemove.set(decorator.node!.parent!, [decorator.node!]); renderer.removeDecorators(output, decoratorsToRemove); expect(output.toString()) .not.toContain(`{ type: core.Directive, args: [{ selector: '[a]' }] },`); @@ -404,10 +405,10 @@ SOME DEFINITION TEXT const {renderer, decorationAnalyses, sourceFile} = setup(PROGRAM); const output = new MagicString(PROGRAM.contents); const compiledClass = - decorationAnalyses.get(sourceFile) !.compiledClasses.find(c => c.name === 'B') !; - const decorator = compiledClass.decorators ![0]; + decorationAnalyses.get(sourceFile)!.compiledClasses.find(c => c.name === 'B')!; + const decorator = compiledClass.decorators![0]; const decoratorsToRemove = new Map(); - decoratorsToRemove.set(decorator.node !.parent !, [decorator.node !]); + decoratorsToRemove.set(decorator.node!.parent!, [decorator.node!]); renderer.removeDecorators(output, decoratorsToRemove); expect(output.toString()) .toContain(`{ type: core.Directive, args: [{ selector: '[a]' }] },`); @@ -425,10 +426,10 @@ SOME DEFINITION TEXT const {renderer, decorationAnalyses, sourceFile} = setup(PROGRAM); const output = new MagicString(PROGRAM.contents); const compiledClass = - decorationAnalyses.get(sourceFile) !.compiledClasses.find(c => c.name === 'C') !; - const decorator = compiledClass.decorators ![0]; + decorationAnalyses.get(sourceFile)!.compiledClasses.find(c => c.name === 'C')!; + const decorator = compiledClass.decorators![0]; const decoratorsToRemove = new Map(); - decoratorsToRemove.set(decorator.node !.parent !, [decorator.node !]); + decoratorsToRemove.set(decorator.node!.parent!, [decorator.node!]); renderer.removeDecorators(output, decoratorsToRemove); renderer.addDefinitions(output, compiledClass, 'SOME DEFINITION TEXT'); expect(output.toString()) @@ -441,7 +442,6 @@ SOME DEFINITION TEXT .toContain(`function C() {}\nSOME DEFINITION TEXT\n return C;`); expect(output.toString()).not.toContain(`C.decorators`); }); - }); describe('[__decorate declarations]', () => { @@ -450,10 +450,10 @@ SOME DEFINITION TEXT const {renderer, decorationAnalyses, sourceFile} = setup(PROGRAM_DECORATE_HELPER); const output = new MagicString(PROGRAM_DECORATE_HELPER.contents); const compiledClass = - decorationAnalyses.get(sourceFile) !.compiledClasses.find(c => c.name === 'A') !; - const decorator = compiledClass.decorators !.find(d => d.name === 'Directive') !; + decorationAnalyses.get(sourceFile)!.compiledClasses.find(c => c.name === 'A')!; + const decorator = compiledClass.decorators!.find(d => d.name === 'Directive')!; const decoratorsToRemove = new Map(); - decoratorsToRemove.set(decorator.node !.parent !, [decorator.node !]); + decoratorsToRemove.set(decorator.node!.parent!, [decorator.node!]); renderer.removeDecorators(output, decoratorsToRemove); expect(output.toString()).not.toContain(`Directive({ selector: '[a]' }),`); expect(output.toString()).toContain(`OtherA()`); @@ -467,10 +467,10 @@ SOME DEFINITION TEXT const {renderer, decorationAnalyses, sourceFile} = setup(PROGRAM_DECORATE_HELPER); const output = new MagicString(PROGRAM_DECORATE_HELPER.contents); const compiledClass = - decorationAnalyses.get(sourceFile) !.compiledClasses.find(c => c.name === 'B') !; - const decorator = compiledClass.decorators !.find(d => d.name === 'Directive') !; + decorationAnalyses.get(sourceFile)!.compiledClasses.find(c => c.name === 'B')!; + const decorator = compiledClass.decorators!.find(d => d.name === 'Directive')!; const decoratorsToRemove = new Map(); - decoratorsToRemove.set(decorator.node !.parent !, [decorator.node !]); + decoratorsToRemove.set(decorator.node!.parent!, [decorator.node!]); renderer.removeDecorators(output, decoratorsToRemove); expect(output.toString()).toContain(`Directive({ selector: '[a]' }),`); expect(output.toString()).toContain(`OtherA()`); @@ -485,10 +485,10 @@ SOME DEFINITION TEXT const {renderer, decorationAnalyses, sourceFile} = setup(PROGRAM_DECORATE_HELPER); const output = new MagicString(PROGRAM_DECORATE_HELPER.contents); const compiledClass = - decorationAnalyses.get(sourceFile) !.compiledClasses.find(c => c.name === 'C') !; - const decorator = compiledClass.decorators !.find(d => d.name === 'Directive') !; + decorationAnalyses.get(sourceFile)!.compiledClasses.find(c => c.name === 'C')!; + const decorator = compiledClass.decorators!.find(d => d.name === 'Directive')!; const decoratorsToRemove = new Map(); - decoratorsToRemove.set(decorator.node !.parent !, [decorator.node !]); + decoratorsToRemove.set(decorator.node!.parent!, [decorator.node!]); renderer.removeDecorators(output, decoratorsToRemove); expect(output.toString()).toContain(`Directive({ selector: '[a]' }),`); expect(output.toString()).toContain(`OtherA()`); diff --git a/packages/compiler-cli/ngcc/test/rendering/dts_renderer_spec.ts b/packages/compiler-cli/ngcc/test/rendering/dts_renderer_spec.ts index cb78fa5f42..101427f31c 100644 --- a/packages/compiler-cli/ngcc/test/rendering/dts_renderer_spec.ts +++ b/packages/compiler-cli/ngcc/test/rendering/dts_renderer_spec.ts @@ -7,21 +7,22 @@ */ import MagicString from 'magic-string'; import * as ts from 'typescript'; + import {absoluteFrom, getFileSystem} from '../../../src/ngtsc/file_system'; -import {TestFile, runInEachFileSystem} from '../../../src/ngtsc/file_system/testing'; +import {runInEachFileSystem, TestFile} from '../../../src/ngtsc/file_system/testing'; import {Reexport} from '../../../src/ngtsc/imports'; -import {loadTestFiles} from '../../../test/helpers'; import {Import, ImportManager} from '../../../src/ngtsc/translator'; +import {loadTestFiles} from '../../../test/helpers'; import {DecorationAnalyzer} from '../../src/analysis/decoration_analyzer'; -import {CompiledClass} from '../../src/analysis/types'; -import {NgccReferencesRegistry} from '../../src/analysis/ngcc_references_registry'; import {ModuleWithProvidersAnalyzer, ModuleWithProvidersInfo} from '../../src/analysis/module_with_providers_analyzer'; -import {PrivateDeclarationsAnalyzer, ExportInfo} from '../../src/analysis/private_declarations_analyzer'; +import {NgccReferencesRegistry} from '../../src/analysis/ngcc_references_registry'; +import {ExportInfo, PrivateDeclarationsAnalyzer} from '../../src/analysis/private_declarations_analyzer'; +import {CompiledClass} from '../../src/analysis/types'; import {Esm2015ReflectionHost} from '../../src/host/esm2015_host'; -import {RenderingFormatter, RedundantDecoratorMap} from '../../src/rendering/rendering_formatter'; import {DtsRenderer} from '../../src/rendering/dts_renderer'; +import {RedundantDecoratorMap, RenderingFormatter} from '../../src/rendering/rendering_formatter'; import {MockLogger} from '../helpers/mock_logger'; -import {makeTestEntryPointBundle, getRootFiles} from '../helpers/utils'; +import {getRootFiles, makeTestEntryPointBundle} from '../helpers/utils'; class TestRenderingFormatter implements RenderingFormatter { addImports(output: MagicString, imports: Import[], sf: ts.SourceFile) { @@ -53,7 +54,9 @@ class TestRenderingFormatter implements RenderingFormatter { importManager: ImportManager): void { output.prepend('\n// ADD MODUlE WITH PROVIDERS PARAMS\n'); } - printStatement(): string { return 'IGNORED'; } + printStatement(): string { + return 'IGNORED'; + } } function createTestRenderer( @@ -92,12 +95,14 @@ function createTestRenderer( const renderer = new DtsRenderer(testFormatter, fs, logger, host, bundle); - return {renderer, - testFormatter, - decorationAnalyses, - moduleWithProvidersAnalyses, - privateDeclarationsAnalyses, - bundle}; + return { + renderer, + testFormatter, + decorationAnalyses, + moduleWithProvidersAnalyses, + privateDeclarationsAnalyses, + bundle + }; } runInEachFileSystem(() => { @@ -120,35 +125,44 @@ runInEachFileSystem(() => { }); it('should render extract types into typings files', () => { - const {renderer, decorationAnalyses, privateDeclarationsAnalyses, - moduleWithProvidersAnalyses} = - createTestRenderer('test-package', [INPUT_PROGRAM], [INPUT_DTS_PROGRAM]); + const { + renderer, + decorationAnalyses, + privateDeclarationsAnalyses, + moduleWithProvidersAnalyses + } = createTestRenderer('test-package', [INPUT_PROGRAM], [INPUT_DTS_PROGRAM]); const result = renderer.renderProgram( decorationAnalyses, privateDeclarationsAnalyses, moduleWithProvidersAnalyses); const typingsFile = - result.find(f => f.path === _('/node_modules/test-package/typings/file.d.ts')) !; + result.find(f => f.path === _('/node_modules/test-package/typings/file.d.ts'))!; expect(typingsFile.contents) .toContain( 'foo(x: number): number;\n static ɵfac: ɵngcc0.ɵɵFactoryDef;\n static ɵdir: ɵngcc0.ɵɵDirectiveDefWithMeta'); }); it('should render imports into typings files', () => { - const {renderer, decorationAnalyses, privateDeclarationsAnalyses, - moduleWithProvidersAnalyses} = - createTestRenderer('test-package', [INPUT_PROGRAM], [INPUT_DTS_PROGRAM]); + const { + renderer, + decorationAnalyses, + privateDeclarationsAnalyses, + moduleWithProvidersAnalyses + } = createTestRenderer('test-package', [INPUT_PROGRAM], [INPUT_DTS_PROGRAM]); const result = renderer.renderProgram( decorationAnalyses, privateDeclarationsAnalyses, moduleWithProvidersAnalyses); const typingsFile = - result.find(f => f.path === _('/node_modules/test-package/typings/file.d.ts')) !; + result.find(f => f.path === _('/node_modules/test-package/typings/file.d.ts'))!; expect(typingsFile.contents).toContain(`\n// ADD IMPORTS\n`); }); it('should render exports into typings files', () => { - const {renderer, decorationAnalyses, privateDeclarationsAnalyses, - moduleWithProvidersAnalyses} = - createTestRenderer('test-package', [INPUT_PROGRAM], [INPUT_DTS_PROGRAM]); + const { + renderer, + decorationAnalyses, + privateDeclarationsAnalyses, + moduleWithProvidersAnalyses + } = createTestRenderer('test-package', [INPUT_PROGRAM], [INPUT_DTS_PROGRAM]); // Add a mock export to trigger export rendering privateDeclarationsAnalyses.push({ @@ -161,20 +175,23 @@ runInEachFileSystem(() => { decorationAnalyses, privateDeclarationsAnalyses, moduleWithProvidersAnalyses); const typingsFile = - result.find(f => f.path === _('/node_modules/test-package/typings/file.d.ts')) !; + result.find(f => f.path === _('/node_modules/test-package/typings/file.d.ts'))!; expect(typingsFile.contents).toContain(`\n// ADD EXPORTS\n`); }); it('should render ModuleWithProviders type params', () => { - const {renderer, decorationAnalyses, privateDeclarationsAnalyses, - moduleWithProvidersAnalyses} = - createTestRenderer('test-package', [INPUT_PROGRAM], [INPUT_DTS_PROGRAM]); + const { + renderer, + decorationAnalyses, + privateDeclarationsAnalyses, + moduleWithProvidersAnalyses + } = createTestRenderer('test-package', [INPUT_PROGRAM], [INPUT_DTS_PROGRAM]); const result = renderer.renderProgram( decorationAnalyses, privateDeclarationsAnalyses, moduleWithProvidersAnalyses); const typingsFile = - result.find(f => f.path === _('/node_modules/test-package/typings/file.d.ts')) !; + result.find(f => f.path === _('/node_modules/test-package/typings/file.d.ts'))!; expect(typingsFile.contents).toContain(`\n// ADD MODUlE WITH PROVIDERS PARAMS\n`); }); }); diff --git a/packages/compiler-cli/ngcc/test/rendering/esm5_rendering_formatter_spec.ts b/packages/compiler-cli/ngcc/test/rendering/esm5_rendering_formatter_spec.ts index 8a4c4e0bc5..72edb0a840 100644 --- a/packages/compiler-cli/ngcc/test/rendering/esm5_rendering_formatter_spec.ts +++ b/packages/compiler-cli/ngcc/test/rendering/esm5_rendering_formatter_spec.ts @@ -8,20 +8,21 @@ import {DeclareVarStmt, LiteralExpr, StmtModifier} from '@angular/compiler'; import MagicString from 'magic-string'; import * as ts from 'typescript'; + +import {absoluteFrom, absoluteFromSourceFile, AbsoluteFsPath, getFileSystem, getSourceFileOrError} from '../../../src/ngtsc/file_system'; +import {runInEachFileSystem, TestFile} from '../../../src/ngtsc/file_system/testing'; import {NoopImportRewriter} from '../../../src/ngtsc/imports'; -import {AbsoluteFsPath, absoluteFrom, absoluteFromSourceFile, getFileSystem, getSourceFileOrError} from '../../../src/ngtsc/file_system'; -import {TestFile, runInEachFileSystem} from '../../../src/ngtsc/file_system/testing'; import {getDeclaration} from '../../../src/ngtsc/testing'; import {ImportManager} from '../../../src/ngtsc/translator'; -import {DecorationAnalyzer} from '../../src/analysis/decoration_analyzer'; import {loadTestFiles} from '../../../test/helpers'; +import {DecorationAnalyzer} from '../../src/analysis/decoration_analyzer'; import {NgccReferencesRegistry} from '../../src/analysis/ngcc_references_registry'; import {SwitchMarkerAnalyzer} from '../../src/analysis/switch_marker_analyzer'; import {IMPORT_PREFIX} from '../../src/constants'; import {Esm5ReflectionHost} from '../../src/host/esm5_host'; import {Esm5RenderingFormatter} from '../../src/rendering/esm5_rendering_formatter'; -import {makeTestEntryPointBundle} from '../helpers/utils'; import {MockLogger} from '../helpers/mock_logger'; +import {makeTestEntryPointBundle} from '../helpers/utils'; function setup(file: {name: AbsoluteFsPath, contents: string}) { loadTestFiles([file]); @@ -39,13 +40,16 @@ function setup(file: {name: AbsoluteFsPath, contents: string}) { return { host, program: bundle.src.program, - sourceFile: bundle.src.file, renderer, decorationAnalyses, switchMarkerAnalyses, importManager + sourceFile: bundle.src.file, + renderer, + decorationAnalyses, + switchMarkerAnalyses, + importManager }; } runInEachFileSystem(() => { describe('Esm5RenderingFormatter', () => { - let _: typeof absoluteFrom; let PROGRAM: TestFile; let PROGRAM_DECORATE_HELPER: TestFile; @@ -276,7 +280,7 @@ var A = (function() {`); const file = getSourceFileOrError(program, _('/node_modules/test-package/some/file.js')); const output = new MagicString(PROGRAM.contents); renderer.rewriteSwitchableDeclarations( - output, file, switchMarkerAnalyses.get(sourceFile) !.declarations); + output, file, switchMarkerAnalyses.get(sourceFile)!.declarations); expect(output.toString()) .not.toContain(`var compileNgModuleFactory = compileNgModuleFactory__PRE_R3__;`); expect(output.toString()) @@ -298,7 +302,7 @@ var A = (function() {`); const {renderer, decorationAnalyses, sourceFile} = setup(PROGRAM); const output = new MagicString(PROGRAM.contents); const compiledClass = - decorationAnalyses.get(sourceFile) !.compiledClasses.find(c => c.name === 'A') !; + decorationAnalyses.get(sourceFile)!.compiledClasses.find(c => c.name === 'A')!; renderer.addDefinitions(output, compiledClass, 'SOME DEFINITION TEXT'); expect(output.toString()).toContain(` A.prototype.ngDoCheck = function() { @@ -317,15 +321,16 @@ SOME DEFINITION TEXT program, absoluteFromSourceFile(sourceFile), 'NoIife', ts.isFunctionDeclaration); const mockNoIifeClass: any = {declaration: noIifeDeclaration, name: 'NoIife'}; expect(() => renderer.addDefinitions(output, mockNoIifeClass, 'SOME DEFINITION TEXT')) - .toThrowError( - `Compiled class declaration is not inside an IIFE: NoIife in ${_('/node_modules/test-package/some/file.js')}`); + .toThrowError(`Compiled class declaration is not inside an IIFE: NoIife in ${ + _('/node_modules/test-package/some/file.js')}`); const badIifeDeclaration = getDeclaration( program, absoluteFromSourceFile(sourceFile), 'BadIife', ts.isVariableDeclaration); const mockBadIifeClass: any = {declaration: badIifeDeclaration, name: 'BadIife'}; expect(() => renderer.addDefinitions(output, mockBadIifeClass, 'SOME DEFINITION TEXT')) .toThrowError( - `Compiled class wrapper IIFE does not have a return statement: BadIife in ${_('/node_modules/test-package/some/file.js')}`); + `Compiled class wrapper IIFE does not have a return statement: BadIife in ${ + _('/node_modules/test-package/some/file.js')}`); }); }); @@ -350,8 +355,8 @@ SOME DEFINITION TEXT const program = {name: _('/node_modules/test-package/some/file.js'), contents}; const {renderer, decorationAnalyses, sourceFile} = setup(program); const output = new MagicString(contents); - const compiledClass = decorationAnalyses.get(sourceFile) !.compiledClasses.find( - c => c.name === 'SomeDirective') !; + const compiledClass = decorationAnalyses.get(sourceFile)!.compiledClasses.find( + c => c.name === 'SomeDirective')!; renderer.addAdjacentStatements(output, compiledClass, 'SOME STATEMENTS'); expect(output.toString()) .toContain( @@ -367,8 +372,8 @@ SOME DEFINITION TEXT const program = {name: _('/node_modules/test-package/some/file.js'), contents}; const {renderer, decorationAnalyses, sourceFile} = setup(program); const output = new MagicString(contents); - const compiledClass = decorationAnalyses.get(sourceFile) !.compiledClasses.find( - c => c.name === 'SomeDirective') !; + const compiledClass = decorationAnalyses.get(sourceFile)!.compiledClasses.find( + c => c.name === 'SomeDirective')!; renderer.addDefinitions(output, compiledClass, 'SOME DEFINITIONS'); renderer.addAdjacentStatements(output, compiledClass, 'SOME STATEMENTS'); const definitionsPosition = output.toString().indexOf('SOME DEFINITIONS'); @@ -381,16 +386,15 @@ SOME DEFINITION TEXT describe('removeDecorators', () => { - it('should delete the decorator (and following comma) that was matched in the analysis', () => { const {renderer, decorationAnalyses, sourceFile} = setup(PROGRAM); const output = new MagicString(PROGRAM.contents); const compiledClass = - decorationAnalyses.get(sourceFile) !.compiledClasses.find(c => c.name === 'A') !; - const decorator = compiledClass.decorators ![0]; + decorationAnalyses.get(sourceFile)!.compiledClasses.find(c => c.name === 'A')!; + const decorator = compiledClass.decorators![0]; const decoratorsToRemove = new Map(); - decoratorsToRemove.set(decorator.node !.parent !, [decorator.node !]); + decoratorsToRemove.set(decorator.node!.parent!, [decorator.node!]); renderer.removeDecorators(output, decoratorsToRemove); expect(output.toString()) .not.toContain(`{ type: Directive, args: [{ selector: '[a]' }] },`); @@ -406,10 +410,10 @@ SOME DEFINITION TEXT const {renderer, decorationAnalyses, sourceFile} = setup(PROGRAM); const output = new MagicString(PROGRAM.contents); const compiledClass = - decorationAnalyses.get(sourceFile) !.compiledClasses.find(c => c.name === 'B') !; - const decorator = compiledClass.decorators ![0]; + decorationAnalyses.get(sourceFile)!.compiledClasses.find(c => c.name === 'B')!; + const decorator = compiledClass.decorators![0]; const decoratorsToRemove = new Map(); - decoratorsToRemove.set(decorator.node !.parent !, [decorator.node !]); + decoratorsToRemove.set(decorator.node!.parent!, [decorator.node!]); renderer.removeDecorators(output, decoratorsToRemove); expect(output.toString()).toContain(`{ type: Directive, args: [{ selector: '[a]' }] },`); expect(output.toString()).toContain(`{ type: OtherA }`); @@ -425,10 +429,10 @@ SOME DEFINITION TEXT const {renderer, decorationAnalyses, sourceFile} = setup(PROGRAM); const output = new MagicString(PROGRAM.contents); const compiledClass = - decorationAnalyses.get(sourceFile) !.compiledClasses.find(c => c.name === 'C') !; - const decorator = compiledClass.decorators ![0]; + decorationAnalyses.get(sourceFile)!.compiledClasses.find(c => c.name === 'C')!; + const decorator = compiledClass.decorators![0]; const decoratorsToRemove = new Map(); - decoratorsToRemove.set(decorator.node !.parent !, [decorator.node !]); + decoratorsToRemove.set(decorator.node!.parent!, [decorator.node!]); renderer.removeDecorators(output, decoratorsToRemove); renderer.addDefinitions(output, compiledClass, 'SOME DEFINITION TEXT'); expect(output.toString()).toContain(`{ type: Directive, args: [{ selector: '[a]' }] },`); @@ -447,10 +451,10 @@ SOME DEFINITION TEXT const {renderer, decorationAnalyses, sourceFile} = setup(PROGRAM_DECORATE_HELPER); const output = new MagicString(PROGRAM_DECORATE_HELPER.contents); const compiledClass = - decorationAnalyses.get(sourceFile) !.compiledClasses.find(c => c.name === 'A') !; - const decorator = compiledClass.decorators !.find(d => d.name === 'Directive') !; + decorationAnalyses.get(sourceFile)!.compiledClasses.find(c => c.name === 'A')!; + const decorator = compiledClass.decorators!.find(d => d.name === 'Directive')!; const decoratorsToRemove = new Map(); - decoratorsToRemove.set(decorator.node !.parent !, [decorator.node !]); + decoratorsToRemove.set(decorator.node!.parent!, [decorator.node!]); renderer.removeDecorators(output, decoratorsToRemove); expect(output.toString()).not.toContain(`Directive({ selector: '[a]' }),`); expect(output.toString()).toContain(`OtherA()`); @@ -464,10 +468,10 @@ SOME DEFINITION TEXT const {renderer, decorationAnalyses, sourceFile} = setup(PROGRAM_DECORATE_HELPER); const output = new MagicString(PROGRAM_DECORATE_HELPER.contents); const compiledClass = - decorationAnalyses.get(sourceFile) !.compiledClasses.find(c => c.name === 'B') !; - const decorator = compiledClass.decorators !.find(d => d.name === 'Directive') !; + decorationAnalyses.get(sourceFile)!.compiledClasses.find(c => c.name === 'B')!; + const decorator = compiledClass.decorators!.find(d => d.name === 'Directive')!; const decoratorsToRemove = new Map(); - decoratorsToRemove.set(decorator.node !.parent !, [decorator.node !]); + decoratorsToRemove.set(decorator.node!.parent!, [decorator.node!]); renderer.removeDecorators(output, decoratorsToRemove); expect(output.toString()).toContain(`Directive({ selector: '[a]' }),`); expect(output.toString()).toContain(`OtherA()`); @@ -481,10 +485,10 @@ SOME DEFINITION TEXT const {renderer, decorationAnalyses, sourceFile} = setup(PROGRAM_DECORATE_HELPER); const output = new MagicString(PROGRAM_DECORATE_HELPER.contents); const compiledClass = - decorationAnalyses.get(sourceFile) !.compiledClasses.find(c => c.name === 'C') !; - const decorator = compiledClass.decorators !.find(d => d.name === 'Directive') !; + decorationAnalyses.get(sourceFile)!.compiledClasses.find(c => c.name === 'C')!; + const decorator = compiledClass.decorators!.find(d => d.name === 'Directive')!; const decoratorsToRemove = new Map(); - decoratorsToRemove.set(decorator.node !.parent !, [decorator.node !]); + decoratorsToRemove.set(decorator.node!.parent!, [decorator.node!]); renderer.removeDecorators(output, decoratorsToRemove); expect(output.toString()).toContain(`Directive({ selector: '[a]' }),`); expect(output.toString()).toContain(`OtherA()`); @@ -500,10 +504,10 @@ SOME DEFINITION TEXT const {renderer, decorationAnalyses, sourceFile} = setup(PROGRAM_DECORATE_HELPER); const output = new MagicString(PROGRAM_DECORATE_HELPER.contents); const compiledClass = - decorationAnalyses.get(sourceFile) !.compiledClasses.find(c => c.name === 'E') !; - const decorator = compiledClass.decorators !.find(d => d.name === 'Directive') !; + decorationAnalyses.get(sourceFile)!.compiledClasses.find(c => c.name === 'E')!; + const decorator = compiledClass.decorators!.find(d => d.name === 'Directive')!; const decoratorsToRemove = new Map(); - decoratorsToRemove.set(decorator.node !.parent !, [decorator.node !]); + decoratorsToRemove.set(decorator.node!.parent!, [decorator.node!]); renderer.removeDecorators(output, decoratorsToRemove); expect(output.toString()).not.toContain(`Directive({ selector: '[e]' })`); expect(output.toString()).not.toContain(`E = tslib_1.__decorate([`); @@ -515,10 +519,10 @@ SOME DEFINITION TEXT const {renderer, decorationAnalyses, sourceFile} = setup(PROGRAM_DECORATE_HELPER); const output = new MagicString(PROGRAM_DECORATE_HELPER.contents); const compiledClass = - decorationAnalyses.get(sourceFile) !.compiledClasses.find(c => c.name === 'F') !; - const decorator = compiledClass.decorators !.find(d => d.name === 'Directive') !; + decorationAnalyses.get(sourceFile)!.compiledClasses.find(c => c.name === 'F')!; + const decorator = compiledClass.decorators!.find(d => d.name === 'Directive')!; const decoratorsToRemove = new Map(); - decoratorsToRemove.set(decorator.node !.parent !, [decorator.node !]); + decoratorsToRemove.set(decorator.node!.parent!, [decorator.node!]); renderer.removeDecorators(output, decoratorsToRemove); expect(output.toString()).not.toContain(`Directive({ selector: '[f]' })`); expect(output.toString()).not.toContain(`F = tslib_1.__decorate([`); diff --git a/packages/compiler-cli/ngcc/test/rendering/esm_rendering_formatter_spec.ts b/packages/compiler-cli/ngcc/test/rendering/esm_rendering_formatter_spec.ts index 275c42e5c7..43f39e3080 100644 --- a/packages/compiler-cli/ngcc/test/rendering/esm_rendering_formatter_spec.ts +++ b/packages/compiler-cli/ngcc/test/rendering/esm_rendering_formatter_spec.ts @@ -8,20 +8,21 @@ import {DeclareVarStmt, LiteralExpr, StmtModifier} from '@angular/compiler'; import MagicString from 'magic-string'; import * as ts from 'typescript'; -import {NoopImportRewriter} from '../../../src/ngtsc/imports'; + import {absoluteFrom, getFileSystem, getSourceFileOrError} from '../../../src/ngtsc/file_system'; -import {loadTestFiles, loadFakeCore} from '../../../test/helpers'; -import {TestFile, runInEachFileSystem} from '../../../src/ngtsc/file_system/testing'; +import {runInEachFileSystem, TestFile} from '../../../src/ngtsc/file_system/testing'; +import {NoopImportRewriter} from '../../../src/ngtsc/imports'; import {ImportManager} from '../../../src/ngtsc/translator'; +import {loadFakeCore, loadTestFiles} from '../../../test/helpers'; import {DecorationAnalyzer} from '../../src/analysis/decoration_analyzer'; +import {ModuleWithProvidersAnalyzer} from '../../src/analysis/module_with_providers_analyzer'; import {NgccReferencesRegistry} from '../../src/analysis/ngcc_references_registry'; import {SwitchMarkerAnalyzer} from '../../src/analysis/switch_marker_analyzer'; import {IMPORT_PREFIX} from '../../src/constants'; import {Esm2015ReflectionHost} from '../../src/host/esm2015_host'; import {EsmRenderingFormatter} from '../../src/rendering/esm_rendering_formatter'; -import {makeTestEntryPointBundle, getRootFiles} from '../helpers/utils'; import {MockLogger} from '../helpers/mock_logger'; -import {ModuleWithProvidersAnalyzer} from '../../src/analysis/module_with_providers_analyzer'; +import {getRootFiles, makeTestEntryPointBundle} from '../helpers/utils'; function setup(files: TestFile[], dtsFiles?: TestFile[]) { const fs = getFileSystem(); @@ -32,7 +33,7 @@ function setup(files: TestFile[], dtsFiles?: TestFile[]) { } const logger = new MockLogger(); const bundle = makeTestEntryPointBundle( - 'test-package', 'esm2015', false, getRootFiles(files), dtsFiles && getRootFiles(dtsFiles)) !; + 'test-package', 'esm2015', false, getRootFiles(files), dtsFiles && getRootFiles(dtsFiles))!; const host = new Esm2015ReflectionHost(logger, false, bundle.src, bundle.dts); const referencesRegistry = new NgccReferencesRegistry(host); const decorationAnalyses = @@ -45,13 +46,16 @@ function setup(files: TestFile[], dtsFiles?: TestFile[]) { host, bundle, program: bundle.src.program, - sourceFile: bundle.src.file, renderer, decorationAnalyses, switchMarkerAnalyses, importManager, + sourceFile: bundle.src.file, + renderer, + decorationAnalyses, + switchMarkerAnalyses, + importManager, }; } runInEachFileSystem(() => { describe('EsmRenderingFormatter', () => { - let _: typeof absoluteFrom; let PROGRAM: TestFile; @@ -195,7 +199,7 @@ export class A {`); const file = getSourceFileOrError(program, _('/node_modules/test-package/some/file.js')); const output = new MagicString(PROGRAM.contents); renderer.rewriteSwitchableDeclarations( - output, file, switchMarkerAnalyses.get(sourceFile) !.declarations); + output, file, switchMarkerAnalyses.get(sourceFile)!.declarations); expect(output.toString()) .not.toContain(`let compileNgModuleFactory = compileNgModuleFactory__PRE_R3__;`); expect(output.toString()) @@ -216,7 +220,7 @@ export class A {`); const {renderer, decorationAnalyses, sourceFile} = setup([PROGRAM]); const output = new MagicString(PROGRAM.contents); const compiledClass = - decorationAnalyses.get(sourceFile) !.compiledClasses.find(c => c.name === 'A') !; + decorationAnalyses.get(sourceFile)!.compiledClasses.find(c => c.name === 'A')!; renderer.addDefinitions(output, compiledClass, 'SOME DEFINITION TEXT'); expect(output.toString()).toContain(` export class A {} @@ -230,7 +234,7 @@ A.decorators = [ const {renderer, decorationAnalyses, sourceFile} = setup([PROGRAM]); const output = new MagicString(PROGRAM.contents); const compiledClass = - decorationAnalyses.get(sourceFile) !.compiledClasses.find(c => c.name === 'C') !; + decorationAnalyses.get(sourceFile)!.compiledClasses.find(c => c.name === 'C')!; renderer.addDefinitions(output, compiledClass, 'SOME DEFINITION TEXT'); expect(output.toString()).toContain(` let C = C_1 = class C {}; @@ -259,8 +263,8 @@ C.decorators = [ const program = {name: _('/node_modules/test-package/some/file.js'), contents}; const {renderer, decorationAnalyses, sourceFile} = setup([program]); const output = new MagicString(contents); - const compiledClass = decorationAnalyses.get(sourceFile) !.compiledClasses.find( - c => c.name === 'SomeDirective') !; + const compiledClass = decorationAnalyses.get(sourceFile)!.compiledClasses.find( + c => c.name === 'SomeDirective')!; renderer.addAdjacentStatements(output, compiledClass, 'SOME STATEMENTS'); expect(output.toString()) .toContain( @@ -275,8 +279,8 @@ C.decorators = [ const program = {name: _('/node_modules/test-package/some/file.js'), contents}; const {renderer, decorationAnalyses, sourceFile} = setup([program]); const output = new MagicString(contents); - const compiledClass = decorationAnalyses.get(sourceFile) !.compiledClasses.find( - c => c.name === 'SomeDirective') !; + const compiledClass = decorationAnalyses.get(sourceFile)!.compiledClasses.find( + c => c.name === 'SomeDirective')!; renderer.addDefinitions(output, compiledClass, 'SOME DEFINITIONS'); renderer.addAdjacentStatements(output, compiledClass, 'SOME STATEMENTS'); const definitionsPosition = output.toString().indexOf('SOME DEFINITIONS'); @@ -294,10 +298,10 @@ C.decorators = [ const {decorationAnalyses, sourceFile, renderer} = setup([PROGRAM]); const output = new MagicString(PROGRAM.contents); const compiledClass = - decorationAnalyses.get(sourceFile) !.compiledClasses.find(c => c.name === 'A') !; - const decorator = compiledClass.decorators ![0]; + decorationAnalyses.get(sourceFile)!.compiledClasses.find(c => c.name === 'A')!; + const decorator = compiledClass.decorators![0]; const decoratorsToRemove = new Map(); - decoratorsToRemove.set(decorator.node !.parent !, [decorator.node !]); + decoratorsToRemove.set(decorator.node!.parent!, [decorator.node!]); renderer.removeDecorators(output, decoratorsToRemove); expect(output.toString()) .not.toContain(`{ type: Directive, args: [{ selector: '[a]' }] },`); @@ -315,10 +319,10 @@ C.decorators = [ const {decorationAnalyses, sourceFile, renderer} = setup([PROGRAM]); const output = new MagicString(PROGRAM.contents); const compiledClass = - decorationAnalyses.get(sourceFile) !.compiledClasses.find(c => c.name === 'B') !; - const decorator = compiledClass.decorators ![0]; + decorationAnalyses.get(sourceFile)!.compiledClasses.find(c => c.name === 'B')!; + const decorator = compiledClass.decorators![0]; const decoratorsToRemove = new Map(); - decoratorsToRemove.set(decorator.node !.parent !, [decorator.node !]); + decoratorsToRemove.set(decorator.node!.parent!, [decorator.node!]); renderer.removeDecorators(output, decoratorsToRemove); expect(output.toString()) .toContain(`{ type: Directive, args: [{ selector: '[a]' }] },`); @@ -343,10 +347,10 @@ A.decorators = [ const {decorationAnalyses, sourceFile, renderer} = setup([file]); const output = new MagicString(text); const compiledClass = - decorationAnalyses.get(sourceFile) !.compiledClasses.find(c => c.name === 'A') !; - const decorator = compiledClass.decorators ![0]; + decorationAnalyses.get(sourceFile)!.compiledClasses.find(c => c.name === 'A')!; + const decorator = compiledClass.decorators![0]; const decoratorsToRemove = new Map(); - decoratorsToRemove.set(decorator.node !.parent !, [decorator.node !]); + decoratorsToRemove.set(decorator.node!.parent!, [decorator.node!]); renderer.removeDecorators(output, decoratorsToRemove); // The decorator should have been removed correctly. expect(output.toString()).toContain('A.decorators = [ { type: OtherA }'); @@ -358,10 +362,10 @@ A.decorators = [ const {decorationAnalyses, sourceFile, renderer} = setup([PROGRAM]); const output = new MagicString(PROGRAM.contents); const compiledClass = - decorationAnalyses.get(sourceFile) !.compiledClasses.find(c => c.name === 'C') !; - const decorator = compiledClass.decorators ![0]; + decorationAnalyses.get(sourceFile)!.compiledClasses.find(c => c.name === 'C')!; + const decorator = compiledClass.decorators![0]; const decoratorsToRemove = new Map(); - decoratorsToRemove.set(decorator.node !.parent !, [decorator.node !]); + decoratorsToRemove.set(decorator.node!.parent!, [decorator.node!]); renderer.removeDecorators(output, decoratorsToRemove); expect(output.toString()) .toContain(`{ type: Directive, args: [{ selector: '[a]' }] },`); @@ -424,10 +428,10 @@ export { D }; const {renderer, decorationAnalyses, sourceFile} = setup([PROGRAM_DECORATE_HELPER]); const output = new MagicString(PROGRAM_DECORATE_HELPER.contents); const compiledClass = - decorationAnalyses.get(sourceFile) !.compiledClasses.find(c => c.name === 'A') !; - const decorator = compiledClass.decorators !.find(d => d.name === 'Directive') !; + decorationAnalyses.get(sourceFile)!.compiledClasses.find(c => c.name === 'A')!; + const decorator = compiledClass.decorators!.find(d => d.name === 'Directive')!; const decoratorsToRemove = new Map(); - decoratorsToRemove.set(decorator.node !.parent !, [decorator.node !]); + decoratorsToRemove.set(decorator.node!.parent!, [decorator.node!]); renderer.removeDecorators(output, decoratorsToRemove); expect(output.toString()).not.toContain(`Directive({ selector: '[a]' }),`); expect(output.toString()).toContain(`OtherA()`); @@ -441,10 +445,10 @@ export { D }; const {renderer, decorationAnalyses, sourceFile} = setup([PROGRAM_DECORATE_HELPER]); const output = new MagicString(PROGRAM_DECORATE_HELPER.contents); const compiledClass = - decorationAnalyses.get(sourceFile) !.compiledClasses.find(c => c.name === 'B') !; - const decorator = compiledClass.decorators !.find(d => d.name === 'Directive') !; + decorationAnalyses.get(sourceFile)!.compiledClasses.find(c => c.name === 'B')!; + const decorator = compiledClass.decorators!.find(d => d.name === 'Directive')!; const decoratorsToRemove = new Map(); - decoratorsToRemove.set(decorator.node !.parent !, [decorator.node !]); + decoratorsToRemove.set(decorator.node!.parent!, [decorator.node!]); renderer.removeDecorators(output, decoratorsToRemove); expect(output.toString()).toContain(`Directive({ selector: '[a]' }),`); expect(output.toString()).toContain(`OtherA()`); @@ -459,10 +463,10 @@ export { D }; const {renderer, decorationAnalyses, sourceFile} = setup([PROGRAM_DECORATE_HELPER]); const output = new MagicString(PROGRAM_DECORATE_HELPER.contents); const compiledClass = - decorationAnalyses.get(sourceFile) !.compiledClasses.find(c => c.name === 'C') !; - const decorator = compiledClass.decorators !.find(d => d.name === 'Directive') !; + decorationAnalyses.get(sourceFile)!.compiledClasses.find(c => c.name === 'C')!; + const decorator = compiledClass.decorators!.find(d => d.name === 'Directive')!; const decoratorsToRemove = new Map(); - decoratorsToRemove.set(decorator.node !.parent !, [decorator.node !]); + decoratorsToRemove.set(decorator.node!.parent!, [decorator.node!]); renderer.removeDecorators(output, decoratorsToRemove); expect(output.toString()).toContain(`Directive({ selector: '[a]' }),`); expect(output.toString()).toContain(`OtherA()`); @@ -573,8 +577,8 @@ export { D }; new ModuleWithProvidersAnalyzer(host, referencesRegistry, true) .analyzeProgram(bundle.src.program); const typingsFile = getSourceFileOrError( - bundle.dts !.program, _('/node_modules/test-package/typings/index.d.ts')); - const moduleWithProvidersInfo = moduleWithProvidersAnalyses.get(typingsFile) !; + bundle.dts!.program, _('/node_modules/test-package/typings/index.d.ts')); + const moduleWithProvidersInfo = moduleWithProvidersAnalyses.get(typingsFile)!; const output = new MagicString(MODULE_WITH_PROVIDERS_DTS_PROGRAM[0].contents); const importManager = new ImportManager(new NoopImportRewriter(), 'i'); @@ -610,8 +614,8 @@ export { D }; new ModuleWithProvidersAnalyzer(host, referencesRegistry, true) .analyzeProgram(bundle.src.program); const typingsFile = getSourceFileOrError( - bundle.dts !.program, _('/node_modules/test-package/typings/module.d.ts')); - const moduleWithProvidersInfo = moduleWithProvidersAnalyses.get(typingsFile) !; + bundle.dts!.program, _('/node_modules/test-package/typings/module.d.ts')); + const moduleWithProvidersInfo = moduleWithProvidersAnalyses.get(typingsFile)!; const output = new MagicString(MODULE_WITH_PROVIDERS_DTS_PROGRAM[1].contents); const importManager = new ImportManager(new NoopImportRewriter(), 'i'); diff --git a/packages/compiler-cli/ngcc/test/rendering/renderer_spec.ts b/packages/compiler-cli/ngcc/test/rendering/renderer_spec.ts index dc3d144d18..ff450182c4 100644 --- a/packages/compiler-cli/ngcc/test/rendering/renderer_spec.ts +++ b/packages/compiler-cli/ngcc/test/rendering/renderer_spec.ts @@ -6,27 +6,28 @@ * found in the LICENSE file at https://angular.io/license */ import {Statement} from '@angular/compiler'; -import {SourceMapMappings, encode} from 'sourcemap-codec'; -import MagicString from 'magic-string'; -import * as ts from 'typescript'; import {fromObject, generateMapFileComment, SourceMapConverter} from 'convert-source-map'; +import MagicString from 'magic-string'; +import {encode, SourceMapMappings} from 'sourcemap-codec'; +import * as ts from 'typescript'; + import {absoluteFrom, getFileSystem} from '../../../src/ngtsc/file_system'; -import {TestFile, runInEachFileSystem} from '../../../src/ngtsc/file_system/testing'; +import {runInEachFileSystem, TestFile} from '../../../src/ngtsc/file_system/testing'; import {NOOP_DEFAULT_IMPORT_RECORDER, Reexport} from '../../../src/ngtsc/imports'; -import {loadTestFiles} from '../../../test/helpers'; import {Import, ImportManager, translateStatement} from '../../../src/ngtsc/translator'; +import {loadTestFiles} from '../../../test/helpers'; import {DecorationAnalyzer} from '../../src/analysis/decoration_analyzer'; -import {CompiledClass} from '../../src/analysis/types'; -import {NgccReferencesRegistry} from '../../src/analysis/ngcc_references_registry'; import {ModuleWithProvidersInfo} from '../../src/analysis/module_with_providers_analyzer'; -import {PrivateDeclarationsAnalyzer, ExportInfo} from '../../src/analysis/private_declarations_analyzer'; +import {NgccReferencesRegistry} from '../../src/analysis/ngcc_references_registry'; +import {ExportInfo, PrivateDeclarationsAnalyzer} from '../../src/analysis/private_declarations_analyzer'; import {SwitchMarkerAnalyzer} from '../../src/analysis/switch_marker_analyzer'; +import {CompiledClass} from '../../src/analysis/types'; import {Esm2015ReflectionHost} from '../../src/host/esm2015_host'; import {Esm5ReflectionHost} from '../../src/host/esm5_host'; import {Renderer} from '../../src/rendering/renderer'; +import {RedundantDecoratorMap, RenderingFormatter} from '../../src/rendering/rendering_formatter'; import {MockLogger} from '../helpers/mock_logger'; -import {RenderingFormatter, RedundantDecoratorMap} from '../../src/rendering/rendering_formatter'; -import {makeTestEntryPointBundle, getRootFiles} from '../helpers/utils'; +import {getRootFiles, makeTestEntryPointBundle} from '../helpers/utils'; class TestRenderingFormatter implements RenderingFormatter { private printer = ts.createPrinter({newLine: ts.NewLineKind.LineFeed}); @@ -106,12 +107,14 @@ function createTestRenderer( const renderer = new Renderer(host, testFormatter, fs, logger, bundle); - return {renderer, - testFormatter, - decorationAnalyses, - switchMarkerAnalyses, - privateDeclarationsAnalyses, - bundle}; + return { + renderer, + testFormatter, + decorationAnalyses, + switchMarkerAnalyses, + privateDeclarationsAnalyses, + bundle + }; } runInEachFileSystem(() => { @@ -227,8 +230,13 @@ runInEachFileSystem(() => { it('should render as JavaScript', () => { - const {renderer, decorationAnalyses, switchMarkerAnalyses, privateDeclarationsAnalyses, - testFormatter} = createTestRenderer('test-package', [COMPONENT_PROGRAM]); + const { + renderer, + decorationAnalyses, + switchMarkerAnalyses, + privateDeclarationsAnalyses, + testFormatter + } = createTestRenderer('test-package', [COMPONENT_PROGRAM]); renderer.renderProgram( decorationAnalyses, switchMarkerAnalyses, privateDeclarationsAnalyses); const addDefinitionsSpy = testFormatter.addDefinitions as jasmine.Spy; @@ -253,8 +261,13 @@ A.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: A, selectors: [["a"]], decls: 1, v describe('calling RenderingFormatter methods', () => { it('should call addImports with the source code and info about the core Angular library.', () => { - const {renderer, decorationAnalyses, switchMarkerAnalyses, privateDeclarationsAnalyses, - testFormatter} = createTestRenderer('test-package', [JS_CONTENT]); + const { + renderer, + decorationAnalyses, + switchMarkerAnalyses, + privateDeclarationsAnalyses, + testFormatter + } = createTestRenderer('test-package', [JS_CONTENT]); const result = renderer.renderProgram( decorationAnalyses, switchMarkerAnalyses, privateDeclarationsAnalyses); const addImportsSpy = testFormatter.addImports as jasmine.Spy; @@ -266,8 +279,13 @@ A.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: A, selectors: [["a"]], decls: 1, v it('should call addDefinitions with the source code, the analyzed class and the rendered definitions.', () => { - const {renderer, decorationAnalyses, switchMarkerAnalyses, privateDeclarationsAnalyses, - testFormatter} = createTestRenderer('test-package', [JS_CONTENT]); + const { + renderer, + decorationAnalyses, + switchMarkerAnalyses, + privateDeclarationsAnalyses, + testFormatter + } = createTestRenderer('test-package', [JS_CONTENT]); renderer.renderProgram( decorationAnalyses, switchMarkerAnalyses, privateDeclarationsAnalyses); const addDefinitionsSpy = testFormatter.addDefinitions as jasmine.Spy; @@ -284,8 +302,13 @@ A.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: A, selectors: [["", "a", ""]] });` it('should call addAdjacentStatements with the source code, the analyzed class and the rendered statements', () => { - const {renderer, decorationAnalyses, switchMarkerAnalyses, privateDeclarationsAnalyses, - testFormatter} = createTestRenderer('test-package', [JS_CONTENT]); + const { + renderer, + decorationAnalyses, + switchMarkerAnalyses, + privateDeclarationsAnalyses, + testFormatter + } = createTestRenderer('test-package', [JS_CONTENT]); renderer.renderProgram( decorationAnalyses, switchMarkerAnalyses, privateDeclarationsAnalyses); const addAdjacentStatementsSpy = testFormatter.addAdjacentStatements as jasmine.Spy; @@ -303,8 +326,13 @@ A.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: A, selectors: [["", "a", ""]] });` it('should call removeDecorators with the source code, a map of class decorators that have been analyzed', () => { - const {renderer, decorationAnalyses, switchMarkerAnalyses, privateDeclarationsAnalyses, - testFormatter} = createTestRenderer('test-package', [JS_CONTENT]); + const { + renderer, + decorationAnalyses, + switchMarkerAnalyses, + privateDeclarationsAnalyses, + testFormatter + } = createTestRenderer('test-package', [JS_CONTENT]); renderer.renderProgram( decorationAnalyses, switchMarkerAnalyses, privateDeclarationsAnalyses); const removeDecoratorsSpy = testFormatter.removeDecorators as jasmine.Spy; @@ -326,8 +354,13 @@ A.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: A, selectors: [["", "a", ""]] });` }); it('should render definitions as static fields', () => { - const {renderer, decorationAnalyses, switchMarkerAnalyses, privateDeclarationsAnalyses, - testFormatter} = createTestRenderer('test-package', [NGMODULE_PROGRAM]); + const { + renderer, + decorationAnalyses, + switchMarkerAnalyses, + privateDeclarationsAnalyses, + testFormatter + } = createTestRenderer('test-package', [NGMODULE_PROGRAM]); renderer.renderProgram( decorationAnalyses, switchMarkerAnalyses, privateDeclarationsAnalyses); const addDefinitionsSpy = testFormatter.addDefinitions as jasmine.Spy; @@ -337,8 +370,13 @@ A.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: A, selectors: [["", "a", ""]] });` }); it('should render adjacent statements', () => { - const {renderer, decorationAnalyses, switchMarkerAnalyses, privateDeclarationsAnalyses, - testFormatter} = createTestRenderer('test-package', [NGMODULE_PROGRAM]); + const { + renderer, + decorationAnalyses, + switchMarkerAnalyses, + privateDeclarationsAnalyses, + testFormatter + } = createTestRenderer('test-package', [NGMODULE_PROGRAM]); renderer.renderProgram( decorationAnalyses, switchMarkerAnalyses, privateDeclarationsAnalyses); const addAdjacentStatementsSpy = testFormatter.addAdjacentStatements as jasmine.Spy; @@ -347,8 +385,13 @@ A.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: A, selectors: [["", "a", ""]] });` }); it('should render directives using the inner class name if different from outer', () => { - const {renderer, decorationAnalyses, switchMarkerAnalyses, privateDeclarationsAnalyses, - testFormatter} = + const { + renderer, + decorationAnalyses, + switchMarkerAnalyses, + privateDeclarationsAnalyses, + testFormatter + } = createTestRenderer( 'test-package', [{ name: _('/node_modules/test-package/src/file.js'), @@ -379,8 +422,13 @@ A.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: A, selectors: [["", "a", ""]] });` }); it('should render injectables using the inner class name if different from outer', () => { - const {renderer, decorationAnalyses, switchMarkerAnalyses, privateDeclarationsAnalyses, - testFormatter} = + const { + renderer, + decorationAnalyses, + switchMarkerAnalyses, + privateDeclarationsAnalyses, + testFormatter + } = createTestRenderer( 'test-package', [{ name: _('/node_modules/test-package/src/file.js'), @@ -411,8 +459,13 @@ A.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: A, selectors: [["", "a", ""]] });` }); it('should render ng-modules using the inner class name if different from outer', () => { - const {renderer, decorationAnalyses, switchMarkerAnalyses, privateDeclarationsAnalyses, - testFormatter} = + const { + renderer, + decorationAnalyses, + switchMarkerAnalyses, + privateDeclarationsAnalyses, + testFormatter + } = createTestRenderer( 'test-package', [{ name: _('/node_modules/test-package/src/file.js'), @@ -448,8 +501,13 @@ A.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: A, selectors: [["", "a", ""]] });` }); it('should render pipes using the inner class name if different from outer', () => { - const {renderer, decorationAnalyses, switchMarkerAnalyses, privateDeclarationsAnalyses, - testFormatter} = + const { + renderer, + decorationAnalyses, + switchMarkerAnalyses, + privateDeclarationsAnalyses, + testFormatter + } = createTestRenderer( 'test-package', [{ name: _('/node_modules/test-package/src/file.js'), @@ -479,9 +537,13 @@ A.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: A, selectors: [["", "a", ""]] });` }); it('should render classes without decorators if class fields are decorated', () => { - const {renderer, decorationAnalyses, switchMarkerAnalyses, privateDeclarationsAnalyses, - testFormatter} = - createTestRenderer('test-package', [{ + const { + renderer, + decorationAnalyses, + switchMarkerAnalyses, + privateDeclarationsAnalyses, + testFormatter + } = createTestRenderer('test-package', [{ name: _('/node_modules/test-package/src/file.js'), contents: ` import { Directive, ViewChild } from '@angular/core'; @@ -514,8 +576,13 @@ UndecoratedBase.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: UndecoratedBase, vie it('should call renderImports after other abstract methods', () => { // This allows the other methods to add additional imports if necessary - const {renderer, decorationAnalyses, switchMarkerAnalyses, privateDeclarationsAnalyses, - testFormatter} = createTestRenderer('test-package', [JS_CONTENT]); + const { + renderer, + decorationAnalyses, + switchMarkerAnalyses, + privateDeclarationsAnalyses, + testFormatter + } = createTestRenderer('test-package', [JS_CONTENT]); const addExportsSpy = testFormatter.addExports as jasmine.Spy; const addDefinitionsSpy = testFormatter.addDefinitions as jasmine.Spy; const addAdjacentStatementsSpy = testFormatter.addAdjacentStatements as jasmine.Spy; @@ -537,8 +604,12 @@ UndecoratedBase.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: UndecoratedBase, vie name: JS_CONTENT.name, contents: JS_CONTENT.contents + '\n' + JS_CONTENT_MAP.toComment() }]; - const {decorationAnalyses, renderer, switchMarkerAnalyses, - privateDeclarationsAnalyses} = createTestRenderer('test-package', sourceFiles); + const { + decorationAnalyses, + renderer, + switchMarkerAnalyses, + privateDeclarationsAnalyses + } = createTestRenderer('test-package', sourceFiles); const [sourceFile, mapFile] = renderer.renderProgram( decorationAnalyses, switchMarkerAnalyses, privateDeclarationsAnalyses); expect(sourceFile.path).toEqual(_('/node_modules/test-package/src/file.js')); @@ -555,9 +626,12 @@ UndecoratedBase.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: UndecoratedBase, vie }]; const mappingFiles: TestFile[] = [{name: _(JS_CONTENT.name + '.map'), contents: JS_CONTENT_MAP.toJSON()}]; - const {decorationAnalyses, renderer, switchMarkerAnalyses, - privateDeclarationsAnalyses} = - createTestRenderer('test-package', sourceFiles, undefined, mappingFiles); + const { + decorationAnalyses, + renderer, + switchMarkerAnalyses, + privateDeclarationsAnalyses + } = createTestRenderer('test-package', sourceFiles, undefined, mappingFiles); const [sourceFile, mapFile] = renderer.renderProgram( decorationAnalyses, switchMarkerAnalyses, privateDeclarationsAnalyses); expect(sourceFile.path).toEqual(_('/node_modules/test-package/src/file.js')); @@ -582,8 +656,13 @@ UndecoratedBase.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: UndecoratedBase, vie contents: `export const NgModule = () => null;` }; // The package name of `@angular/core` indicates that we are compiling the core library. - const {decorationAnalyses, renderer, switchMarkerAnalyses, privateDeclarationsAnalyses, - testFormatter} = createTestRenderer('@angular/core', [CORE_FILE, R3_SYMBOLS_FILE]); + const { + decorationAnalyses, + renderer, + switchMarkerAnalyses, + privateDeclarationsAnalyses, + testFormatter + } = createTestRenderer('@angular/core', [CORE_FILE, R3_SYMBOLS_FILE]); renderer.renderProgram( decorationAnalyses, switchMarkerAnalyses, privateDeclarationsAnalyses); const addAdjacentStatementsSpy = testFormatter.addAdjacentStatements as jasmine.Spy; @@ -602,8 +681,13 @@ UndecoratedBase.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: UndecoratedBase, vie export class MyModule {}\nMyModule.decorators = [\n { type: NgModule, args: [] }\n];\n` }; - const {decorationAnalyses, renderer, switchMarkerAnalyses, privateDeclarationsAnalyses, - testFormatter} = createTestRenderer('@angular/core', [CORE_FILE]); + const { + decorationAnalyses, + renderer, + switchMarkerAnalyses, + privateDeclarationsAnalyses, + testFormatter + } = createTestRenderer('@angular/core', [CORE_FILE]); renderer.renderProgram( decorationAnalyses, switchMarkerAnalyses, privateDeclarationsAnalyses); const addAdjacentStatementsSpy = testFormatter.addAdjacentStatements as jasmine.Spy; diff --git a/packages/compiler-cli/ngcc/test/rendering/umd_rendering_formatter_spec.ts b/packages/compiler-cli/ngcc/test/rendering/umd_rendering_formatter_spec.ts index e56f777511..b260b54b99 100644 --- a/packages/compiler-cli/ngcc/test/rendering/umd_rendering_formatter_spec.ts +++ b/packages/compiler-cli/ngcc/test/rendering/umd_rendering_formatter_spec.ts @@ -8,16 +8,17 @@ import {DeclareVarStmt, LiteralExpr, StmtModifier} from '@angular/compiler'; import MagicString from 'magic-string'; import * as ts from 'typescript'; -import {NoopImportRewriter} from '../../../src/ngtsc/imports'; + import {absoluteFrom, absoluteFromSourceFile, getFileSystem, getSourceFileOrError} from '../../../src/ngtsc/file_system'; -import {TestFile, runInEachFileSystem} from '../../../src/ngtsc/file_system/testing'; -import {loadTestFiles} from '../../../test/helpers'; +import {runInEachFileSystem, TestFile} from '../../../src/ngtsc/file_system/testing'; +import {NoopImportRewriter} from '../../../src/ngtsc/imports'; import {getDeclaration} from '../../../src/ngtsc/testing'; +import {ImportManager} from '../../../src/ngtsc/translator'; +import {loadTestFiles} from '../../../test/helpers'; import {DecorationAnalyzer} from '../../src/analysis/decoration_analyzer'; import {NgccReferencesRegistry} from '../../src/analysis/ngcc_references_registry'; import {SwitchMarkerAnalyzer} from '../../src/analysis/switch_marker_analyzer'; import {UmdReflectionHost} from '../../src/host/umd_host'; -import {ImportManager} from '../../../src/ngtsc/translator'; import {UmdRenderingFormatter} from '../../src/rendering/umd_rendering_formatter'; import {MockLogger} from '../helpers/mock_logger'; import {makeTestEntryPointBundle} from '../helpers/utils'; @@ -40,14 +41,15 @@ function setup(file: TestFile) { decorationAnalyses, host, importManager, - program: src.program, renderer, - sourceFile: src.file, switchMarkerAnalyses + program: src.program, + renderer, + sourceFile: src.file, + switchMarkerAnalyses }; } runInEachFileSystem(() => { describe('UmdRenderingFormatter', () => { - let _: typeof absoluteFrom; let PROGRAM: TestFile; let PROGRAM_DECORATE_HELPER: TestFile; @@ -438,7 +440,7 @@ var A = (function() {`); const file = getSourceFileOrError(program, _('/node_modules/test-package/some/file.js')); const output = new MagicString(PROGRAM.contents); renderer.rewriteSwitchableDeclarations( - output, file, switchMarkerAnalyses.get(sourceFile) !.declarations); + output, file, switchMarkerAnalyses.get(sourceFile)!.declarations); expect(output.toString()) .not.toContain(`var compileNgModuleFactory = compileNgModuleFactory__PRE_R3__;`); expect(output.toString()) @@ -460,7 +462,7 @@ var A = (function() {`); const {renderer, decorationAnalyses, sourceFile} = setup(PROGRAM); const output = new MagicString(PROGRAM.contents); const compiledClass = - decorationAnalyses.get(sourceFile) !.compiledClasses.find(c => c.name === 'A') !; + decorationAnalyses.get(sourceFile)!.compiledClasses.find(c => c.name === 'A')!; renderer.addDefinitions(output, compiledClass, 'SOME DEFINITION TEXT'); expect(output.toString()).toContain(` A.prototype.ngDoCheck = function() { @@ -479,15 +481,16 @@ SOME DEFINITION TEXT program, absoluteFromSourceFile(sourceFile), 'NoIife', ts.isFunctionDeclaration); const mockNoIifeClass: any = {declaration: noIifeDeclaration, name: 'NoIife'}; expect(() => renderer.addDefinitions(output, mockNoIifeClass, 'SOME DEFINITION TEXT')) - .toThrowError( - `Compiled class declaration is not inside an IIFE: NoIife in ${_('/node_modules/test-package/some/file.js')}`); + .toThrowError(`Compiled class declaration is not inside an IIFE: NoIife in ${ + _('/node_modules/test-package/some/file.js')}`); const badIifeDeclaration = getDeclaration( program, absoluteFromSourceFile(sourceFile), 'BadIife', ts.isVariableDeclaration); const mockBadIifeClass: any = {declaration: badIifeDeclaration, name: 'BadIife'}; expect(() => renderer.addDefinitions(output, mockBadIifeClass, 'SOME DEFINITION TEXT')) .toThrowError( - `Compiled class wrapper IIFE does not have a return statement: BadIife in ${_('/node_modules/test-package/some/file.js')}`); + `Compiled class wrapper IIFE does not have a return statement: BadIife in ${ + _('/node_modules/test-package/some/file.js')}`); }); }); @@ -518,8 +521,8 @@ SOME DEFINITION TEXT const program = {name: _('/node_modules/test-package/some/file.js'), contents}; const {renderer, decorationAnalyses, sourceFile} = setup(program); const output = new MagicString(contents); - const compiledClass = decorationAnalyses.get(sourceFile) !.compiledClasses.find( - c => c.name === 'SomeDirective') !; + const compiledClass = decorationAnalyses.get(sourceFile)!.compiledClasses.find( + c => c.name === 'SomeDirective')!; renderer.addAdjacentStatements(output, compiledClass, 'SOME STATEMENTS'); expect(output.toString()) .toContain( @@ -535,8 +538,8 @@ SOME DEFINITION TEXT const program = {name: _('/node_modules/test-package/some/file.js'), contents}; const {renderer, decorationAnalyses, sourceFile} = setup(program); const output = new MagicString(contents); - const compiledClass = decorationAnalyses.get(sourceFile) !.compiledClasses.find( - c => c.name === 'SomeDirective') !; + const compiledClass = decorationAnalyses.get(sourceFile)!.compiledClasses.find( + c => c.name === 'SomeDirective')!; renderer.addDefinitions(output, compiledClass, 'SOME DEFINITIONS'); renderer.addAdjacentStatements(output, compiledClass, 'SOME STATEMENTS'); const definitionsPosition = output.toString().indexOf('SOME DEFINITIONS'); @@ -548,16 +551,15 @@ SOME DEFINITION TEXT }); describe('removeDecorators', () => { - it('should delete the decorator (and following comma) that was matched in the analysis', () => { const {renderer, decorationAnalyses, sourceFile} = setup(PROGRAM); const output = new MagicString(PROGRAM.contents); const compiledClass = - decorationAnalyses.get(sourceFile) !.compiledClasses.find(c => c.name === 'A') !; - const decorator = compiledClass.decorators ![0]; + decorationAnalyses.get(sourceFile)!.compiledClasses.find(c => c.name === 'A')!; + const decorator = compiledClass.decorators![0]; const decoratorsToRemove = new Map(); - decoratorsToRemove.set(decorator.node !.parent !, [decorator.node !]); + decoratorsToRemove.set(decorator.node!.parent!, [decorator.node!]); renderer.removeDecorators(output, decoratorsToRemove); expect(output.toString()) .not.toContain(`{ type: core.Directive, args: [{ selector: '[a]' }] },`); @@ -575,10 +577,10 @@ SOME DEFINITION TEXT const {renderer, decorationAnalyses, sourceFile} = setup(PROGRAM); const output = new MagicString(PROGRAM.contents); const compiledClass = - decorationAnalyses.get(sourceFile) !.compiledClasses.find(c => c.name === 'B') !; - const decorator = compiledClass.decorators ![0]; + decorationAnalyses.get(sourceFile)!.compiledClasses.find(c => c.name === 'B')!; + const decorator = compiledClass.decorators![0]; const decoratorsToRemove = new Map(); - decoratorsToRemove.set(decorator.node !.parent !, [decorator.node !]); + decoratorsToRemove.set(decorator.node!.parent!, [decorator.node!]); renderer.removeDecorators(output, decoratorsToRemove); expect(output.toString()) .toContain(`{ type: core.Directive, args: [{ selector: '[a]' }] },`); @@ -596,10 +598,10 @@ SOME DEFINITION TEXT const {renderer, decorationAnalyses, sourceFile} = setup(PROGRAM); const output = new MagicString(PROGRAM.contents); const compiledClass = - decorationAnalyses.get(sourceFile) !.compiledClasses.find(c => c.name === 'C') !; - const decorator = compiledClass.decorators ![0]; + decorationAnalyses.get(sourceFile)!.compiledClasses.find(c => c.name === 'C')!; + const decorator = compiledClass.decorators![0]; const decoratorsToRemove = new Map(); - decoratorsToRemove.set(decorator.node !.parent !, [decorator.node !]); + decoratorsToRemove.set(decorator.node!.parent!, [decorator.node!]); renderer.removeDecorators(output, decoratorsToRemove); renderer.addDefinitions(output, compiledClass, 'SOME DEFINITION TEXT'); expect(output.toString()) @@ -610,7 +612,6 @@ SOME DEFINITION TEXT expect(output.toString()).toContain(`{ type: OtherB }`); expect(output.toString()).not.toContain(`C.decorators`); }); - }); describe('[__decorate declarations]', () => { @@ -619,10 +620,10 @@ SOME DEFINITION TEXT const {renderer, decorationAnalyses, sourceFile} = setup(PROGRAM_DECORATE_HELPER); const output = new MagicString(PROGRAM_DECORATE_HELPER.contents); const compiledClass = - decorationAnalyses.get(sourceFile) !.compiledClasses.find(c => c.name === 'A') !; - const decorator = compiledClass.decorators !.find(d => d.name === 'Directive') !; + decorationAnalyses.get(sourceFile)!.compiledClasses.find(c => c.name === 'A')!; + const decorator = compiledClass.decorators!.find(d => d.name === 'Directive')!; const decoratorsToRemove = new Map(); - decoratorsToRemove.set(decorator.node !.parent !, [decorator.node !]); + decoratorsToRemove.set(decorator.node!.parent!, [decorator.node!]); renderer.removeDecorators(output, decoratorsToRemove); expect(output.toString()).not.toContain(`core.Directive({ selector: '[a]' }),`); expect(output.toString()).toContain(`OtherA()`); @@ -636,10 +637,10 @@ SOME DEFINITION TEXT const {renderer, decorationAnalyses, sourceFile} = setup(PROGRAM_DECORATE_HELPER); const output = new MagicString(PROGRAM_DECORATE_HELPER.contents); const compiledClass = - decorationAnalyses.get(sourceFile) !.compiledClasses.find(c => c.name === 'B') !; - const decorator = compiledClass.decorators !.find(d => d.name === 'Directive') !; + decorationAnalyses.get(sourceFile)!.compiledClasses.find(c => c.name === 'B')!; + const decorator = compiledClass.decorators!.find(d => d.name === 'Directive')!; const decoratorsToRemove = new Map(); - decoratorsToRemove.set(decorator.node !.parent !, [decorator.node !]); + decoratorsToRemove.set(decorator.node!.parent!, [decorator.node!]); renderer.removeDecorators(output, decoratorsToRemove); expect(output.toString()).toContain(`core.Directive({ selector: '[a]' }),`); expect(output.toString()).toContain(`OtherA()`); @@ -654,10 +655,10 @@ SOME DEFINITION TEXT const {renderer, decorationAnalyses, sourceFile} = setup(PROGRAM_DECORATE_HELPER); const output = new MagicString(PROGRAM_DECORATE_HELPER.contents); const compiledClass = - decorationAnalyses.get(sourceFile) !.compiledClasses.find(c => c.name === 'C') !; - const decorator = compiledClass.decorators !.find(d => d.name === 'Directive') !; + decorationAnalyses.get(sourceFile)!.compiledClasses.find(c => c.name === 'C')!; + const decorator = compiledClass.decorators!.find(d => d.name === 'Directive')!; const decoratorsToRemove = new Map(); - decoratorsToRemove.set(decorator.node !.parent !, [decorator.node !]); + decoratorsToRemove.set(decorator.node!.parent!, [decorator.node!]); renderer.removeDecorators(output, decoratorsToRemove); expect(output.toString()).toContain(`core.Directive({ selector: '[a]' }),`); expect(output.toString()).toContain(`OtherA()`); diff --git a/packages/compiler-cli/ngcc/test/sourcemaps/source_file_loader_spec.ts b/packages/compiler-cli/ngcc/test/sourcemaps/source_file_loader_spec.ts index 51d656601f..c0d644b288 100644 --- a/packages/compiler-cli/ngcc/test/sourcemaps/source_file_loader_spec.ts +++ b/packages/compiler-cli/ngcc/test/sourcemaps/source_file_loader_spec.ts @@ -5,7 +5,7 @@ * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ -import {FileSystem, absoluteFrom, getFileSystem} from '@angular/compiler-cli/src/ngtsc/file_system'; +import {absoluteFrom, FileSystem, getFileSystem} from '@angular/compiler-cli/src/ngtsc/file_system'; import {fromObject} from 'convert-source-map'; import {runInEachFileSystem} from '../../../src/ngtsc/file_system/testing'; @@ -75,7 +75,8 @@ runInEachFileSystem(() => { const encodedSourceMap = Buffer.from(JSON.stringify(sourceMap)).toString('base64'); const sourceFile = registry.loadSourceFile( _('/foo/src/index.js'), - `some inline content\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,${encodedSourceMap}`); + `some inline content\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,${ + encodedSourceMap}`); if (sourceFile === null) { return fail('Expected source file to be defined'); } @@ -139,26 +140,26 @@ runInEachFileSystem(() => { expect(sourceFile.sources.length).toEqual(3); - expect(sourceFile.sources[0] !.contents).toEqual('x content'); - expect(sourceFile.sources[0] !.sourcePath).toEqual(_('/foo/src/x.js')); - expect(sourceFile.sources[0] !.rawMap).toEqual(null); - expect(sourceFile.sources[0] !.sources).toEqual([]); + expect(sourceFile.sources[0]!.contents).toEqual('x content'); + expect(sourceFile.sources[0]!.sourcePath).toEqual(_('/foo/src/x.js')); + expect(sourceFile.sources[0]!.rawMap).toEqual(null); + expect(sourceFile.sources[0]!.sources).toEqual([]); - expect(sourceFile.sources[1] !.contents).toEqual('y content'); - expect(sourceFile.sources[1] !.sourcePath).toEqual(_('/foo/src/y.js')); - expect(sourceFile.sources[1] !.rawMap).toEqual(ySourceMap); + expect(sourceFile.sources[1]!.contents).toEqual('y content'); + expect(sourceFile.sources[1]!.sourcePath).toEqual(_('/foo/src/y.js')); + expect(sourceFile.sources[1]!.rawMap).toEqual(ySourceMap); - expect(sourceFile.sources[1] !.sources.length).toEqual(1); - expect(sourceFile.sources[1] !.sources[0] !.contents).toEqual('a content'); - expect(sourceFile.sources[1] !.sources[0] !.sourcePath).toEqual(_('/foo/src/a.js')); - expect(sourceFile.sources[1] !.sources[0] !.rawMap).toEqual(null); - expect(sourceFile.sources[1] !.sources[0] !.sources).toEqual([]); + expect(sourceFile.sources[1]!.sources.length).toEqual(1); + expect(sourceFile.sources[1]!.sources[0]!.contents).toEqual('a content'); + expect(sourceFile.sources[1]!.sources[0]!.sourcePath).toEqual(_('/foo/src/a.js')); + expect(sourceFile.sources[1]!.sources[0]!.rawMap).toEqual(null); + expect(sourceFile.sources[1]!.sources[0]!.sources).toEqual([]); - expect(sourceFile.sources[2] !.contents).toEqual('z content'); - expect(sourceFile.sources[2] !.sourcePath).toEqual(_('/foo/src/z.js')); - expect(sourceFile.sources[2] !.rawMap).toEqual(null); - expect(sourceFile.sources[2] !.sources).toEqual([]); + expect(sourceFile.sources[2]!.contents).toEqual('z content'); + expect(sourceFile.sources[2]!.sourcePath).toEqual(_('/foo/src/z.js')); + expect(sourceFile.sources[2]!.rawMap).toEqual(null); + expect(sourceFile.sources[2]!.sources).toEqual([]); }); it('should handle a missing source file referenced from a source-map', () => { @@ -186,22 +187,25 @@ runInEachFileSystem(() => { const aPath = _('/foo/src/a.js'); fs.writeFile( - aPath, 'a content\n' + + aPath, + 'a content\n' + fromObject(createRawSourceMap({file: 'a.js', sources: ['b.js']})).toComment()); const bPath = _('/foo/src/b.js'); fs.writeFile( - bPath, 'b content\n' + + bPath, + 'b content\n' + fromObject(createRawSourceMap({file: 'b.js', sources: ['c.js']})).toComment()); const cPath = _('/foo/src/c.js'); fs.writeFile( - cPath, 'c content\n' + + cPath, + 'c content\n' + fromObject(createRawSourceMap({file: 'c.js', sources: ['a.js']})).toComment()); expect(() => registry.loadSourceFile(aPath)) - .toThrowError( - `Circular source file mapping dependency: ${aPath} -> ${bPath} -> ${cPath} -> ${aPath}`); + .toThrowError(`Circular source file mapping dependency: ${aPath} -> ${bPath} -> ${ + cPath} -> ${aPath}`); }); it('should not fail if there is a cyclic dependency in filenames of inline sources', () => { @@ -209,7 +213,8 @@ runInEachFileSystem(() => { const aPath = _('/foo/src/a.js'); fs.writeFile( - aPath, 'a content\n' + + aPath, + 'a content\n' + fromObject(createRawSourceMap({file: 'a.js', sources: ['b.js']})).toComment()); const bPath = _('/foo/src/b.js'); @@ -238,6 +243,7 @@ function createRawSourceMap(custom: Partial): RawSourceMap { 'sources': [], 'sourcesContent': [], 'names': [], - 'mappings': '', ...custom + 'mappings': '', + ...custom }; } \ No newline at end of file diff --git a/packages/compiler-cli/ngcc/test/sourcemaps/source_file_spec.ts b/packages/compiler-cli/ngcc/test/sourcemaps/source_file_spec.ts index 5c0456bc39..7b7f44c529 100644 --- a/packages/compiler-cli/ngcc/test/sourcemaps/source_file_spec.ts +++ b/packages/compiler-cli/ngcc/test/sourcemaps/source_file_spec.ts @@ -11,13 +11,15 @@ import {absoluteFrom} from '../../../src/ngtsc/file_system'; import {runInEachFileSystem} from '../../../src/ngtsc/file_system/testing'; import {RawSourceMap} from '../../src/sourcemaps/raw_source_map'; import {SegmentMarker} from '../../src/sourcemaps/segment_marker'; -import {Mapping, SourceFile, computeStartOfLinePositions, ensureOriginalSegmentLinks, extractOriginalSegments, findLastMappingIndexBefore, parseMappings} from '../../src/sourcemaps/source_file'; +import {computeStartOfLinePositions, ensureOriginalSegmentLinks, extractOriginalSegments, findLastMappingIndexBefore, Mapping, parseMappings, SourceFile} from '../../src/sourcemaps/source_file'; runInEachFileSystem(() => { describe('SourceFile and utilities', () => { let _: typeof absoluteFrom; - beforeEach(() => { _ = absoluteFrom; }); + beforeEach(() => { + _ = absoluteFrom; + }); describe('parseMappings()', () => { it('should be an empty array for source files with no source map', () => { @@ -118,7 +120,7 @@ runInEachFileSystem(() => { const marker2: SegmentMarker = {line: 0, column: 20, position: 20, next: marker3}; const marker1: SegmentMarker = {line: 0, column: 10, position: 10, next: marker2}; const mappings: Mapping[] = [marker1, marker2, marker3, marker4, marker5].map( - marker => ({ generatedSegment: marker } as Mapping)); + marker => ({generatedSegment: marker} as Mapping)); const marker: SegmentMarker = {line: 0, column: 35, position: 35, next: undefined}; const index = findLastMappingIndexBefore(mappings, marker, /* exclusive */ false, 0); @@ -133,7 +135,7 @@ runInEachFileSystem(() => { const marker2: SegmentMarker = {line: 0, column: 20, position: 20, next: marker3}; const marker1: SegmentMarker = {line: 0, column: 10, position: 10, next: marker2}; const mappings: Mapping[] = [marker1, marker2, marker3, marker4, marker5].map( - marker => ({ generatedSegment: marker } as Mapping)); + marker => ({generatedSegment: marker} as Mapping)); const marker: SegmentMarker = {line: 0, column: 35, position: 35, next: undefined}; const index = findLastMappingIndexBefore(mappings, marker, /* exclusive */ false, 0); @@ -147,7 +149,7 @@ runInEachFileSystem(() => { const marker2: SegmentMarker = {line: 0, column: 20, position: 20, next: marker3}; const marker1: SegmentMarker = {line: 0, column: 10, position: 10, next: marker2}; const mappings: Mapping[] = [marker1, marker2, marker3, marker4, marker5].map( - marker => ({ generatedSegment: marker } as Mapping)); + marker => ({generatedSegment: marker} as Mapping)); const marker: SegmentMarker = {line: 0, column: 60, position: 60, next: undefined}; @@ -162,7 +164,7 @@ runInEachFileSystem(() => { const marker2: SegmentMarker = {line: 0, column: 20, position: 20, next: marker3}; const marker1: SegmentMarker = {line: 0, column: 10, position: 10, next: marker2}; const mappings: Mapping[] = [marker1, marker2, marker3, marker4, marker5].map( - marker => ({ generatedSegment: marker } as Mapping)); + marker => ({generatedSegment: marker} as Mapping)); const marker: SegmentMarker = {line: 0, column: 5, position: 5, next: undefined}; @@ -180,7 +182,7 @@ runInEachFileSystem(() => { const marker1: SegmentMarker = {line: 0, column: 10, position: 10, next: marker2}; const mappings: Mapping[] = [marker1, marker2, marker3, marker4, marker5].map( - marker => ({ generatedSegment: marker } as Mapping)); + marker => ({generatedSegment: marker} as Mapping)); const index = findLastMappingIndexBefore(mappings, marker3, /* exclusive */ false, 0); expect(index).toEqual(2); }); @@ -194,7 +196,7 @@ runInEachFileSystem(() => { const marker1: SegmentMarker = {line: 0, column: 10, position: 10, next: marker2}; const mappings: Mapping[] = [marker1, marker2, marker3, marker4, marker5].map( - marker => ({ generatedSegment: marker } as Mapping)); + marker => ({generatedSegment: marker} as Mapping)); const index = findLastMappingIndexBefore(mappings, marker3, /* exclusive */ false, 0); expect(index).toEqual(3); }); @@ -209,7 +211,7 @@ runInEachFileSystem(() => { const marker1: SegmentMarker = {line: 0, column: 10, position: 10, next: marker2}; const mappings: Mapping[] = [marker1, marker2, marker3, marker4, marker5].map( - marker => ({ generatedSegment: marker } as Mapping)); + marker => ({generatedSegment: marker} as Mapping)); const index = findLastMappingIndexBefore(mappings, marker3, /* exclusive */ true, 0); expect(index).toEqual(1); }); @@ -223,7 +225,7 @@ runInEachFileSystem(() => { const marker1: SegmentMarker = {line: 0, column: 10, position: 10, next: marker2}; const mappings: Mapping[] = [marker1, marker2, marker3, marker4, marker5].map( - marker => ({ generatedSegment: marker } as Mapping)); + marker => ({generatedSegment: marker} as Mapping)); const index = findLastMappingIndexBefore(mappings, marker3, /* exclusive */ false, 0); expect(index).toEqual(3); }); @@ -238,7 +240,7 @@ runInEachFileSystem(() => { const marker2: SegmentMarker = {line: 0, column: 20, position: 20, next: marker3}; const marker1: SegmentMarker = {line: 0, column: 10, position: 10, next: marker2}; const mappings: Mapping[] = [marker1, marker2, marker3, marker4, marker5].map( - marker => ({ generatedSegment: marker } as Mapping)); + marker => ({generatedSegment: marker} as Mapping)); const marker: SegmentMarker = {line: 0, column: 35, position: 35, next: undefined}; const index = findLastMappingIndexBefore(mappings, marker, /* exclusive */ false, 1); @@ -253,7 +255,7 @@ runInEachFileSystem(() => { const marker2: SegmentMarker = {line: 0, column: 20, position: 20, next: marker3}; const marker1: SegmentMarker = {line: 0, column: 10, position: 10, next: marker2}; const mappings: Mapping[] = [marker1, marker2, marker3, marker4, marker5].map( - marker => ({ generatedSegment: marker } as Mapping)); + marker => ({generatedSegment: marker} as Mapping)); const marker: SegmentMarker = {line: 0, column: 30, position: 30, next: undefined}; const index = findLastMappingIndexBefore(mappings, marker, /* exclusive */ false, 2); @@ -268,7 +270,7 @@ runInEachFileSystem(() => { const marker2: SegmentMarker = {line: 0, column: 20, position: 20, next: marker3}; const marker1: SegmentMarker = {line: 0, column: 10, position: 10, next: marker2}; const mappings: Mapping[] = [marker1, marker2, marker3, marker4, marker5].map( - marker => ({ generatedSegment: marker } as Mapping)); + marker => ({generatedSegment: marker} as Mapping)); const marker: SegmentMarker = {line: 0, column: 30, position: 30, next: undefined}; const index = findLastMappingIndexBefore(mappings, marker, /* exclusive */ false, 3); @@ -282,7 +284,7 @@ runInEachFileSystem(() => { const marker2: SegmentMarker = {line: 0, column: 20, position: 20, next: marker3}; const marker1: SegmentMarker = {line: 0, column: 10, position: 10, next: marker2}; const mappings: Mapping[] = [marker1, marker2, marker3, marker4, marker5].map( - marker => ({ generatedSegment: marker } as Mapping)); + marker => ({generatedSegment: marker} as Mapping)); const marker: SegmentMarker = {line: 0, column: 25, position: 25, next: undefined}; @@ -298,7 +300,7 @@ runInEachFileSystem(() => { const marker2: SegmentMarker = {line: 0, column: 20, position: 20, next: marker3}; const marker1: SegmentMarker = {line: 0, column: 10, position: 10, next: marker2}; const mappings: Mapping[] = [marker1, marker2, marker3, marker4, marker5].map( - marker => ({ generatedSegment: marker } as Mapping)); + marker => ({generatedSegment: marker} as Mapping)); const marker: SegmentMarker = {line: 0, column: 30, position: 30, next: undefined}; diff --git a/packages/compiler-cli/ngcc/test/utils_spec.ts b/packages/compiler-cli/ngcc/test/utils_spec.ts index e6c292df72..f373e5313a 100644 --- a/packages/compiler-cli/ngcc/test/utils_spec.ts +++ b/packages/compiler-cli/ngcc/test/utils_spec.ts @@ -126,7 +126,7 @@ describe('getTsHelperFnFromDeclaration()', () => { const classDecl = ts.createClassDeclaration(undefined, undefined, '__assign', undefined, undefined, []); - expect(classDecl.name !.text).toBe('__assign'); + expect(classDecl.name!.text).toBe('__assign'); expect(getTsHelperFnFromDeclaration(classDecl)).toBe(null); }); }); diff --git a/packages/compiler-cli/ngcc/test/writing/cleaning/cleaning_strategies_spec.ts b/packages/compiler-cli/ngcc/test/writing/cleaning/cleaning_strategies_spec.ts index e8b2b5ec71..5678d41a64 100644 --- a/packages/compiler-cli/ngcc/test/writing/cleaning/cleaning_strategies_spec.ts +++ b/packages/compiler-cli/ngcc/test/writing/cleaning/cleaning_strategies_spec.ts @@ -5,7 +5,7 @@ * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ -import {AbsoluteFsPath, FileSystem, PathSegment, absoluteFrom, getFileSystem} from '../../../../src/ngtsc/file_system'; +import {absoluteFrom, AbsoluteFsPath, FileSystem, getFileSystem, PathSegment} from '../../../../src/ngtsc/file_system'; import {runInEachFileSystem} from '../../../../src/ngtsc/file_system/testing'; import {EntryPointPackageJson} from '../../../src/packages/entry_point'; import {BackupFileCleaner, NgccDirectoryCleaner, PackageJsonCleaner} from '../../../src/writing/cleaning/cleaning_strategies'; @@ -21,9 +21,10 @@ runInEachFileSystem(() => { }); describe('PackageJsonCleaner', () => { - let packageJsonPath: AbsoluteFsPath; - beforeEach(() => { packageJsonPath = _abs('/node_modules/pkg/package.json'); }); + beforeEach(() => { + packageJsonPath = _abs('/node_modules/pkg/package.json'); + }); describe('canClean()', () => { it('should return true if the basename is package.json', () => { @@ -150,7 +151,6 @@ runInEachFileSystem(() => { }); describe('canClean()', () => { - it('should return true if the file name ends in .__ivy_ngcc_bak and the processed file exists', () => { const strategy = new BackupFileCleaner(fs); @@ -192,7 +192,9 @@ runInEachFileSystem(() => { describe('NgccDirectoryCleaner', () => { let ivyDirectory: AbsoluteFsPath; - beforeEach(() => { ivyDirectory = _abs('/node_modules/pkg/__ivy_ngcc__'); }); + beforeEach(() => { + ivyDirectory = _abs('/node_modules/pkg/__ivy_ngcc__'); + }); describe('canClean()', () => { it('should return true if the path is a directory and is called __ivy_ngcc__', () => { diff --git a/packages/compiler-cli/ngcc/test/writing/cleaning/package_cleaner_spec.ts b/packages/compiler-cli/ngcc/test/writing/cleaning/package_cleaner_spec.ts index 762d024461..7260845cfe 100644 --- a/packages/compiler-cli/ngcc/test/writing/cleaning/package_cleaner_spec.ts +++ b/packages/compiler-cli/ngcc/test/writing/cleaning/package_cleaner_spec.ts @@ -5,7 +5,7 @@ * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ -import {AbsoluteFsPath, FileSystem, PathSegment, absoluteFrom, getFileSystem} from '@angular/compiler-cli/src/ngtsc/file_system'; +import {absoluteFrom, AbsoluteFsPath, FileSystem, getFileSystem, PathSegment} from '@angular/compiler-cli/src/ngtsc/file_system'; import {runInEachFileSystem} from '../../../../src/ngtsc/file_system/testing'; import {CleaningStrategy} from '../../../src/writing/cleaning/cleaning_strategies'; diff --git a/packages/compiler-cli/ngcc/test/writing/in_place_file_writer_spec.ts b/packages/compiler-cli/ngcc/test/writing/in_place_file_writer_spec.ts index 95eeae821f..0b3d249bd3 100644 --- a/packages/compiler-cli/ngcc/test/writing/in_place_file_writer_spec.ts +++ b/packages/compiler-cli/ngcc/test/writing/in_place_file_writer_spec.ts @@ -14,7 +14,6 @@ import {MockLogger} from '../helpers/mock_logger'; runInEachFileSystem(() => { describe('InPlaceFileWriter', () => { - let _: typeof absoluteFrom; beforeEach(() => { @@ -79,8 +78,8 @@ runInEachFileSystem(() => { () => fileWriter.writeBundle( {} as EntryPointBundle, [{path: absoluteBackupPath, contents: 'MODIFIED BACKED UP'}])) - .toThrowError( - `Tried to overwrite ${absoluteBackupPath}.__ivy_ngcc_bak with an ngcc back up file, which is disallowed.`); + .toThrowError(`Tried to overwrite ${ + absoluteBackupPath}.__ivy_ngcc_bak with an ngcc back up file, which is disallowed.`); }); it('should log an error, and skip writing the file, if the backup file already exists and errorOnFailedEntryPoint is false', @@ -95,7 +94,9 @@ runInEachFileSystem(() => { expect(fs.readFile(absoluteBackupPath)).toEqual('ORIGINAL ALREADY BACKED UP'); expect(fs.readFile(_(absoluteBackupPath + '.__ivy_ngcc_bak'))).toEqual('BACKED UP'); expect(logger.logs.error).toEqual([[ - `Tried to write ${absoluteBackupPath}.__ivy_ngcc_bak with an ngcc back up file but it already exists so not writing, nor backing up, ${absoluteBackupPath}.\n` + + `Tried to write ${ + absoluteBackupPath}.__ivy_ngcc_bak with an ngcc back up file but it already exists so not writing, nor backing up, ${ + absoluteBackupPath}.\n` + `This error may be because two or more entry-points overlap and ngcc has been asked to process some files more than once.\n` + `You should check other entry-points in this package and set up a config to ignore any that you are not using.` ]]); diff --git a/packages/compiler-cli/ngcc/test/writing/new_entry_point_file_writer_spec.ts b/packages/compiler-cli/ngcc/test/writing/new_entry_point_file_writer_spec.ts index a0a01c0911..5f361cbb4e 100644 --- a/packages/compiler-cli/ngcc/test/writing/new_entry_point_file_writer_spec.ts +++ b/packages/compiler-cli/ngcc/test/writing/new_entry_point_file_writer_spec.ts @@ -5,11 +5,11 @@ * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ -import {FileSystem, absoluteFrom, getFileSystem} from '../../../src/ngtsc/file_system'; +import {absoluteFrom, FileSystem, getFileSystem} from '../../../src/ngtsc/file_system'; import {runInEachFileSystem} from '../../../src/ngtsc/file_system/testing'; import {loadTestFiles} from '../../../test/helpers'; import {NgccConfiguration} from '../../src/packages/configuration'; -import {EntryPoint, EntryPointFormat, EntryPointJsonProperty, INCOMPATIBLE_ENTRY_POINT, NO_ENTRY_POINT, getEntryPointInfo} from '../../src/packages/entry_point'; +import {EntryPoint, EntryPointFormat, EntryPointJsonProperty, getEntryPointInfo, INCOMPATIBLE_ENTRY_POINT, NO_ENTRY_POINT} from '../../src/packages/entry_point'; import {EntryPointBundle, makeEntryPointBundle} from '../../src/packages/entry_point_bundle'; import {FileWriter} from '../../src/writing/file_writer'; import {NewEntryPointFileWriter} from '../../src/writing/new_entry_point_file_writer'; @@ -19,7 +19,6 @@ import {loadPackageJson} from '../packages/entry_point_spec'; runInEachFileSystem(() => { describe('NewEntryPointFileWriter', () => { - let _: typeof absoluteFrom; let fs: FileSystem; let fileWriter: FileWriter; @@ -107,7 +106,7 @@ runInEachFileSystem(() => { fs, logger, /* errorOnFailedEntryPoint */ true, new DirectPackageJsonUpdater(fs)); const config = new NgccConfiguration(fs, _('/')); const result = getEntryPointInfo( - fs, config, logger, _('/node_modules/test'), _('/node_modules/test')) !; + fs, config, logger, _('/node_modules/test'), _('/node_modules/test'))!; if (result === NO_ENTRY_POINT || result === INCOMPATIBLE_ENTRY_POINT) { return fail(`Expected an entry point but got ${result}`); } @@ -247,7 +246,7 @@ runInEachFileSystem(() => { fs, logger, /* errorOnFailedEntryPoint */ true, new DirectPackageJsonUpdater(fs)); const config = new NgccConfiguration(fs, _('/')); const result = getEntryPointInfo( - fs, config, logger, _('/node_modules/test'), _('/node_modules/test/a')) !; + fs, config, logger, _('/node_modules/test'), _('/node_modules/test/a'))!; if (result === NO_ENTRY_POINT || result === INCOMPATIBLE_ENTRY_POINT) { return fail(`Expected an entry point but got ${result}`); } @@ -376,7 +375,7 @@ runInEachFileSystem(() => { fs, logger, /* errorOnFailedEntryPoint */ true, new DirectPackageJsonUpdater(fs)); const config = new NgccConfiguration(fs, _('/')); const result = getEntryPointInfo( - fs, config, new MockLogger(), _('/node_modules/test'), _('/node_modules/test/b')) !; + fs, config, new MockLogger(), _('/node_modules/test'), _('/node_modules/test/b'))!; if (result === NO_ENTRY_POINT || result === INCOMPATIBLE_ENTRY_POINT) { return fail(`Expected an entry point but got ${result}`); } @@ -501,6 +500,6 @@ runInEachFileSystem(() => { fs: FileSystem, entryPoint: EntryPoint, formatProperty: EntryPointJsonProperty, format: EntryPointFormat): EntryPointBundle { return makeEntryPointBundle( - fs, entryPoint, entryPoint.packageJson[formatProperty] !, false, format, true); + fs, entryPoint, entryPoint.packageJson[formatProperty]!, false, format, true); } }); diff --git a/packages/compiler-cli/ngcc/test/writing/package_json_updater_spec.ts b/packages/compiler-cli/ngcc/test/writing/package_json_updater_spec.ts index 56f6a9a643..8efe32c3ba 100644 --- a/packages/compiler-cli/ngcc/test/writing/package_json_updater_spec.ts +++ b/packages/compiler-cli/ngcc/test/writing/package_json_updater_spec.ts @@ -5,7 +5,7 @@ * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ -import {AbsoluteFsPath, FileSystem, absoluteFrom, getFileSystem} from '../../../src/ngtsc/file_system'; +import {absoluteFrom, AbsoluteFsPath, FileSystem, getFileSystem} from '../../../src/ngtsc/file_system'; import {runInEachFileSystem} from '../../../src/ngtsc/file_system/testing'; import {loadTestFiles} from '../../../test/helpers'; import {JsonObject} from '../../src/packages/entry_point';