refactor(ivy): ngcc - use a fixed set of properties to compile if none provided (#29092)

Previously we always considered all the properties in the package.json
if no `propertiesToConsidere` were provided.
But this results in computing a new set of properties for each entry-point
plus iterating through many of the package.json properties that are
not related to bundle-format paths.

PR Close #29092
This commit is contained in:
Pete Bacon Darwin 2019-03-20 13:47:59 +00:00 committed by Matias Niemelä
parent bdcbd9ed4b
commit 7ea0d1bd3a
2 changed files with 11 additions and 7 deletions

View File

@ -7,14 +7,16 @@
*/ */
import {AbsoluteFsPath} from '../../src/ngtsc/path'; import {AbsoluteFsPath} from '../../src/ngtsc/path';
import {checkMarker, writeMarker} from './packages/build_marker'; import {checkMarker, writeMarker} from './packages/build_marker';
import {DependencyHost} from './packages/dependency_host'; import {DependencyHost} from './packages/dependency_host';
import {DependencyResolver} from './packages/dependency_resolver'; import {DependencyResolver} from './packages/dependency_resolver';
import {EntryPointFormat, EntryPointJsonProperty, getEntryPointFormat} from './packages/entry_point'; import {EntryPointFormat, EntryPointJsonProperty, SUPPORTED_FORMAT_PROPERTIES, getEntryPointFormat} from './packages/entry_point';
import {makeEntryPointBundle} from './packages/entry_point_bundle'; import {makeEntryPointBundle} from './packages/entry_point_bundle';
import {EntryPointFinder} from './packages/entry_point_finder'; import {EntryPointFinder} from './packages/entry_point_finder';
import {Transformer} from './packages/transformer'; import {Transformer} from './packages/transformer';
/** /**
* The options to configure the ngcc compiler. * The options to configure the ngcc compiler.
*/ */
@ -48,7 +50,8 @@ const SUPPORTED_FORMATS: EntryPointFormat[] = ['esm5', 'esm2015'];
* *
* @param options The options telling ngcc what to compile and how. * @param options The options telling ngcc what to compile and how.
*/ */
export function mainNgcc({baseSourcePath, targetEntryPointPath, propertiesToConsider, export function mainNgcc({baseSourcePath, targetEntryPointPath,
propertiesToConsider = SUPPORTED_FORMAT_PROPERTIES,
compileAllFormats = true}: NgccOptions): void { compileAllFormats = true}: NgccOptions): void {
const transformer = new Transformer(baseSourcePath, baseSourcePath); const transformer = new Transformer(baseSourcePath, baseSourcePath);
const host = new DependencyHost(); const host = new DependencyHost();
@ -61,12 +64,10 @@ export function mainNgcc({baseSourcePath, targetEntryPointPath, propertiesToCons
// Are we compiling the Angular core? // Are we compiling the Angular core?
const isCore = entryPoint.name === '@angular/core'; const isCore = entryPoint.name === '@angular/core';
const propertiesToCompile =
propertiesToConsider || Object.keys(entryPoint.packageJson) as EntryPointJsonProperty[];
const compiledFormats = new Set<string>(); const compiledFormats = new Set<string>();
for (let i = 0; i < propertiesToCompile.length; i++) { for (let i = 0; i < propertiesToConsider.length; i++) {
const property = propertiesToCompile[i]; const property = propertiesToConsider[i];
const formatPath = entryPoint.packageJson[property]; const formatPath = entryPoint.packageJson[property];
const format = getEntryPointFormat(property); const format = getEntryPointFormat(property);
@ -106,7 +107,7 @@ export function mainNgcc({baseSourcePath, targetEntryPointPath, propertiesToCons
if (compiledFormats.size === 0) { if (compiledFormats.size === 0) {
throw new Error( throw new Error(
`Failed to compile any formats for entry-point at (${entryPoint.path}). Tried ${propertiesToCompile}.`); `Failed to compile any formats for entry-point at (${entryPoint.path}). Tried ${propertiesToConsider}.`);
} }
}); });
} }

View File

@ -55,6 +55,9 @@ export interface EntryPointPackageJson extends PackageJsonFormatProperties {
} }
export type EntryPointJsonProperty = keyof(PackageJsonFormatProperties); export type EntryPointJsonProperty = keyof(PackageJsonFormatProperties);
// We need to keep the elements of this const and the `EntryPointJsonProperty` type in sync.
export const SUPPORTED_FORMAT_PROPERTIES: EntryPointJsonProperty[] =
['fesm2015', 'fesm5', 'es2015', 'esm2015', 'esm5', 'main', 'module'];
/** /**
* Try to create an entry-point from the given paths and properties. * Try to create an entry-point from the given paths and properties.