From 37b716b298d2b657e64438a9a9f4134189a0b1c7 Mon Sep 17 00:00:00 2001 From: Alex Rickabaugh Date: Fri, 7 Dec 2018 14:37:32 -0800 Subject: [PATCH] refactor(ivy): move the flat module index generator to its own package (#27743) This commit moves the FlatIndexGenerator to its own package, in preparation to expand its capabilities and support re-exporting of private declarations from NgModules. PR Close #27743 --- packages/compiler-cli/BUILD.bazel | 1 + .../src/ngtsc/entry_point/BUILD.bazel | 18 ++++++++++++++++++ .../src/ngtsc/entry_point/index.ts | 9 +++++++++ .../src/generator.ts} | 8 +++++--- packages/compiler-cli/src/ngtsc/program.ts | 3 ++- packages/compiler-cli/src/ngtsc/shims/index.ts | 1 - .../src/ngtsc/shims/src/factory_generator.ts | 5 +++-- .../src/ngtsc/shims/src/summary_generator.ts | 6 ++++-- .../compiler-cli/src/ngtsc/shims/src/util.ts | 10 ---------- .../src/ngtsc/util/src/typescript.ts | 18 ++++++++++++++++++ 10 files changed, 60 insertions(+), 19 deletions(-) create mode 100644 packages/compiler-cli/src/ngtsc/entry_point/BUILD.bazel create mode 100644 packages/compiler-cli/src/ngtsc/entry_point/index.ts rename packages/compiler-cli/src/ngtsc/{shims/src/flat_index_generator.ts => entry_point/src/generator.ts} (91%) create mode 100644 packages/compiler-cli/src/ngtsc/util/src/typescript.ts diff --git a/packages/compiler-cli/BUILD.bazel b/packages/compiler-cli/BUILD.bazel index 97dfc0ff1f..859161c0c5 100644 --- a/packages/compiler-cli/BUILD.bazel +++ b/packages/compiler-cli/BUILD.bazel @@ -26,6 +26,7 @@ ts_library( "//packages/compiler", "//packages/compiler-cli/src/ngtsc/annotations", "//packages/compiler-cli/src/ngtsc/diagnostics", + "//packages/compiler-cli/src/ngtsc/entry_point", "//packages/compiler-cli/src/ngtsc/metadata", "//packages/compiler-cli/src/ngtsc/shims", "//packages/compiler-cli/src/ngtsc/switch", diff --git a/packages/compiler-cli/src/ngtsc/entry_point/BUILD.bazel b/packages/compiler-cli/src/ngtsc/entry_point/BUILD.bazel new file mode 100644 index 0000000000..d18b2ec729 --- /dev/null +++ b/packages/compiler-cli/src/ngtsc/entry_point/BUILD.bazel @@ -0,0 +1,18 @@ +package(default_visibility = ["//visibility:public"]) + +load("//tools:defaults.bzl", "ts_library") + +ts_library( + name = "entry_point", + srcs = glob([ + "index.ts", + "src/**/*.ts", + ]), + module_name = "@angular/compiler-cli/src/ngtsc/entry_point", + deps = [ + "//packages/compiler-cli/src/ngtsc/shims", + "//packages/compiler-cli/src/ngtsc/util", + "@ngdeps//@types/node", + "@ngdeps//typescript", + ], +) diff --git a/packages/compiler-cli/src/ngtsc/entry_point/index.ts b/packages/compiler-cli/src/ngtsc/entry_point/index.ts new file mode 100644 index 0000000000..128dc708a0 --- /dev/null +++ b/packages/compiler-cli/src/ngtsc/entry_point/index.ts @@ -0,0 +1,9 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * 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 + */ + +export {FlatIndexGenerator} from './src/generator'; diff --git a/packages/compiler-cli/src/ngtsc/shims/src/flat_index_generator.ts b/packages/compiler-cli/src/ngtsc/entry_point/src/generator.ts similarity index 91% rename from packages/compiler-cli/src/ngtsc/shims/src/flat_index_generator.ts rename to packages/compiler-cli/src/ngtsc/entry_point/src/generator.ts index f44296b836..e961188eeb 100644 --- a/packages/compiler-cli/src/ngtsc/shims/src/flat_index_generator.ts +++ b/packages/compiler-cli/src/ngtsc/entry_point/src/generator.ts @@ -6,11 +6,13 @@ * found in the LICENSE file at https://angular.io/license */ +/// + import * as path from 'path'; import * as ts from 'typescript'; -import {ShimGenerator} from './host'; -import {isNonDeclarationTsFile} from './util'; +import {ShimGenerator} from '../../shims'; +import {isNonDeclarationTsPath} from '../../util/src/typescript'; export class FlatIndexGenerator implements ShimGenerator { readonly flatIndexPath: string; @@ -28,7 +30,7 @@ export class FlatIndexGenerator implements ShimGenerator { // If there's only one .ts file in the program, it's the entry. Otherwise, look for the shortest // (in terms of characters in the filename) file that ends in /index.ts. The second behavior is // deprecated; users should always explicitly specify a single .ts entrypoint. - const tsFiles = files.filter(isNonDeclarationTsFile); + const tsFiles = files.filter(file => isNonDeclarationTsPath(file)); if (tsFiles.length === 1) { return new FlatIndexGenerator(flatIndexPath, tsFiles[0], moduleName); } else { diff --git a/packages/compiler-cli/src/ngtsc/program.ts b/packages/compiler-cli/src/ngtsc/program.ts index 293fdb8d5f..f6e7c95816 100644 --- a/packages/compiler-cli/src/ngtsc/program.ts +++ b/packages/compiler-cli/src/ngtsc/program.ts @@ -15,9 +15,10 @@ import {nocollapseHack} from '../transformers/nocollapse_hack'; import {ComponentDecoratorHandler, DirectiveDecoratorHandler, InjectableDecoratorHandler, NgModuleDecoratorHandler, NoopReferencesRegistry, PipeDecoratorHandler, ResourceLoader, SelectorScopeRegistry} from './annotations'; import {BaseDefDecoratorHandler} from './annotations/src/base_def'; +import {FlatIndexGenerator} from './entry_point'; import {TypeScriptReflectionHost} from './metadata'; import {FileResourceLoader, HostResourceLoader} from './resource_loader'; -import {FactoryGenerator, FactoryInfo, FlatIndexGenerator, GeneratedShimsHostWrapper, ShimGenerator, SummaryGenerator, generatedFactoryTransform} from './shims'; +import {FactoryGenerator, FactoryInfo, GeneratedShimsHostWrapper, ShimGenerator, SummaryGenerator, generatedFactoryTransform} from './shims'; import {ivySwitchTransform} from './switch'; import {IvyCompilation, ivyTransformFactory} from './transform'; import {TypeCheckContext, TypeCheckProgramHost} from './typecheck'; diff --git a/packages/compiler-cli/src/ngtsc/shims/index.ts b/packages/compiler-cli/src/ngtsc/shims/index.ts index 115b80d8f9..25e731d29e 100644 --- a/packages/compiler-cli/src/ngtsc/shims/index.ts +++ b/packages/compiler-cli/src/ngtsc/shims/index.ts @@ -9,6 +9,5 @@ /// export {FactoryGenerator, FactoryInfo, generatedFactoryTransform} from './src/factory_generator'; -export {FlatIndexGenerator} from './src/flat_index_generator'; export {GeneratedShimsHostWrapper, ShimGenerator} from './src/host'; export {SummaryGenerator} from './src/summary_generator'; diff --git a/packages/compiler-cli/src/ngtsc/shims/src/factory_generator.ts b/packages/compiler-cli/src/ngtsc/shims/src/factory_generator.ts index 90829bbaac..7fce35e274 100644 --- a/packages/compiler-cli/src/ngtsc/shims/src/factory_generator.ts +++ b/packages/compiler-cli/src/ngtsc/shims/src/factory_generator.ts @@ -10,9 +10,10 @@ import * as path from 'path'; import * as ts from 'typescript'; import {relativePathBetween} from '../../util/src/path'; +import {isNonDeclarationTsPath} from '../../util/src/typescript'; import {ShimGenerator} from './host'; -import {generatedModuleName, isNonDeclarationTsFile} from './util'; +import {generatedModuleName} from './util'; const TS_DTS_SUFFIX = /(\.d)?\.ts$/; const STRIP_NG_FACTORY = /(.*)NgFactory$/; @@ -87,7 +88,7 @@ export class FactoryGenerator implements ShimGenerator { static forRootFiles(files: ReadonlyArray): FactoryGenerator { const map = new Map(); - files.filter(sourceFile => isNonDeclarationTsFile(sourceFile)) + files.filter(sourceFile => isNonDeclarationTsPath(sourceFile)) .forEach(sourceFile => map.set(sourceFile.replace(/\.ts$/, '.ngfactory.ts'), sourceFile)); return new FactoryGenerator(map); } diff --git a/packages/compiler-cli/src/ngtsc/shims/src/summary_generator.ts b/packages/compiler-cli/src/ngtsc/shims/src/summary_generator.ts index 158f0fdba6..fe2b36461d 100644 --- a/packages/compiler-cli/src/ngtsc/shims/src/summary_generator.ts +++ b/packages/compiler-cli/src/ngtsc/shims/src/summary_generator.ts @@ -8,8 +8,10 @@ import * as ts from 'typescript'; +import {isNonDeclarationTsPath} from '../../util/src/typescript'; + import {ShimGenerator} from './host'; -import {generatedModuleName, isNonDeclarationTsFile} from './util'; +import {generatedModuleName} from './util'; export class SummaryGenerator implements ShimGenerator { private constructor(private map: Map) {} @@ -61,7 +63,7 @@ export class SummaryGenerator implements ShimGenerator { static forRootFiles(files: ReadonlyArray): SummaryGenerator { const map = new Map(); - files.filter(sourceFile => isNonDeclarationTsFile(sourceFile)) + files.filter(sourceFile => isNonDeclarationTsPath(sourceFile)) .forEach(sourceFile => map.set(sourceFile.replace(/\.ts$/, '.ngsummary.ts'), sourceFile)); return new SummaryGenerator(map); } diff --git a/packages/compiler-cli/src/ngtsc/shims/src/util.ts b/packages/compiler-cli/src/ngtsc/shims/src/util.ts index d791258db6..6d76f20a10 100644 --- a/packages/compiler-cli/src/ngtsc/shims/src/util.ts +++ b/packages/compiler-cli/src/ngtsc/shims/src/util.ts @@ -6,16 +6,6 @@ * found in the LICENSE file at https://angular.io/license */ -import * as path from 'path'; -import * as ts from 'typescript'; - -const TS_FILE = /\.tsx?$/; -const D_TS_FILE = /\.d\.ts$/; - -export function isNonDeclarationTsFile(file: string): boolean { - return TS_FILE.exec(file) !== null && D_TS_FILE.exec(file) === null; -} - export function generatedModuleName( originalModuleName: string, originalFileName: string, genSuffix: string): string { let moduleName: string; diff --git a/packages/compiler-cli/src/ngtsc/util/src/typescript.ts b/packages/compiler-cli/src/ngtsc/util/src/typescript.ts new file mode 100644 index 0000000000..e557d36ae1 --- /dev/null +++ b/packages/compiler-cli/src/ngtsc/util/src/typescript.ts @@ -0,0 +1,18 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * 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 + */ + +const TS = /\.tsx?$/i; +const D_TS = /\.d\.ts$/i; + +export function isDtsPath(filePath: string): boolean { + return D_TS.test(filePath); +} + +export function isNonDeclarationTsPath(filePath: string): boolean { + return TS.test(filePath) && !D_TS.test(filePath); +}