This commit addresses the review feedback from #32052, which was merged before addressing the feedback there. PR Close #32427
This commit is contained in:
parent
bf15d3eea8
commit
bd1de32b33
|
@ -9,23 +9,23 @@
|
||||||
import {EntryPoint, EntryPointJsonProperty} from '../packages/entry_point';
|
import {EntryPoint, EntryPointJsonProperty} from '../packages/entry_point';
|
||||||
|
|
||||||
/** The type of the function that analyzes entry-points and creates the list of tasks. */
|
/** The type of the function that analyzes entry-points and creates the list of tasks. */
|
||||||
export type AnalyzeFn = () => {
|
export type AnalyzeEntryPointsFn = () => {
|
||||||
processingMetadataPerEntryPoint: Map<string, EntryPointProcessingMetadata>;
|
processingMetadataPerEntryPoint: Map<string, EntryPointProcessingMetadata>;
|
||||||
tasks: Task[];
|
tasks: Task[];
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/** The type of the function that can process/compile a task. */
|
||||||
* The type of the function that creates the `compile()` function, which in turn can be used to
|
export type CompileFn = (task: Task) => void;
|
||||||
* process tasks.
|
|
||||||
*/
|
/** The type of the function that creates the `CompileFn` function used to process tasks. */
|
||||||
export type CreateCompileFn =
|
export type CreateCompileFn = (onTaskCompleted: TaskCompletedCallback) => CompileFn;
|
||||||
(onTaskCompleted: (task: Task, outcome: TaskProcessingOutcome) => void) => (task: Task) => void;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The type of the function that orchestrates and executes the required work (i.e. analyzes the
|
* The type of the function that orchestrates and executes the required work (i.e. analyzes the
|
||||||
* entry-points, processes the resulting tasks, does book-keeping and validates the final outcome).
|
* entry-points, processes the resulting tasks, does book-keeping and validates the final outcome).
|
||||||
*/
|
*/
|
||||||
export type ExecuteFn = (analyzeFn: AnalyzeFn, createCompileFn: CreateCompileFn) => void;
|
export type ExecuteFn =
|
||||||
|
(analyzeEntryPoints: AnalyzeEntryPointsFn, createCompileFn: CreateCompileFn) => void;
|
||||||
|
|
||||||
/** Represents metadata related to the processing of an entry-point. */
|
/** Represents metadata related to the processing of an entry-point. */
|
||||||
export interface EntryPointProcessingMetadata {
|
export interface EntryPointProcessingMetadata {
|
||||||
|
@ -64,6 +64,9 @@ export interface Task {
|
||||||
processDts: boolean;
|
processDts: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** A function to be called once a task has been processed. */
|
||||||
|
export type TaskCompletedCallback = (task: Task, outcome: TaskProcessingOutcome) => void;
|
||||||
|
|
||||||
/** Represents the outcome of processing a `Task`. */
|
/** Represents the outcome of processing a `Task`. */
|
||||||
export const enum TaskProcessingOutcome {
|
export const enum TaskProcessingOutcome {
|
||||||
/** The target format property was already processed - didn't have to do anything. */
|
/** The target format property was already processed - didn't have to do anything. */
|
||||||
|
|
|
@ -16,12 +16,12 @@ import {ModuleResolver} from './dependencies/module_resolver';
|
||||||
import {UmdDependencyHost} from './dependencies/umd_dependency_host';
|
import {UmdDependencyHost} from './dependencies/umd_dependency_host';
|
||||||
import {DirectoryWalkerEntryPointFinder} from './entry_point_finder/directory_walker_entry_point_finder';
|
import {DirectoryWalkerEntryPointFinder} from './entry_point_finder/directory_walker_entry_point_finder';
|
||||||
import {TargetedEntryPointFinder} from './entry_point_finder/targeted_entry_point_finder';
|
import {TargetedEntryPointFinder} from './entry_point_finder/targeted_entry_point_finder';
|
||||||
import {AnalyzeFn, CreateCompileFn, EntryPointProcessingMetadata, ExecuteFn, Task, TaskProcessingOutcome} from './execution/api';
|
import {AnalyzeEntryPointsFn, CreateCompileFn, EntryPointProcessingMetadata, ExecuteFn, Task, TaskProcessingOutcome} from './execution/api';
|
||||||
import {ConsoleLogger, LogLevel} from './logging/console_logger';
|
import {ConsoleLogger, LogLevel} from './logging/console_logger';
|
||||||
import {Logger} from './logging/logger';
|
import {Logger} from './logging/logger';
|
||||||
import {hasBeenProcessed, markAsProcessed} from './packages/build_marker';
|
import {hasBeenProcessed, markAsProcessed} from './packages/build_marker';
|
||||||
import {NgccConfiguration} from './packages/configuration';
|
import {NgccConfiguration} from './packages/configuration';
|
||||||
import {EntryPoint, EntryPointJsonProperty, EntryPointPackageJson, SUPPORTED_FORMAT_PROPERTIES, getEntryPointFormat} from './packages/entry_point';
|
import {EntryPoint, EntryPointJsonProperty, EntryPointPackageJson, PackageJsonFormatProperties, SUPPORTED_FORMAT_PROPERTIES, getEntryPointFormat} from './packages/entry_point';
|
||||||
import {makeEntryPointBundle} from './packages/entry_point_bundle';
|
import {makeEntryPointBundle} from './packages/entry_point_bundle';
|
||||||
import {Transformer} from './packages/transformer';
|
import {Transformer} from './packages/transformer';
|
||||||
import {PathMappings} from './utils';
|
import {PathMappings} from './utils';
|
||||||
|
@ -87,7 +87,7 @@ export function mainNgcc(
|
||||||
const fileSystem = getFileSystem();
|
const fileSystem = getFileSystem();
|
||||||
|
|
||||||
// The function for performing the analysis.
|
// The function for performing the analysis.
|
||||||
const analyzeFn: AnalyzeFn = () => {
|
const analyzeEntryPoints: AnalyzeEntryPointsFn = () => {
|
||||||
const supportedPropertiesToConsider = ensureSupportedProperties(propertiesToConsider);
|
const supportedPropertiesToConsider = ensureSupportedProperties(propertiesToConsider);
|
||||||
|
|
||||||
const moduleResolver = new ModuleResolver(fileSystem, pathMappings);
|
const moduleResolver = new ModuleResolver(fileSystem, pathMappings);
|
||||||
|
@ -113,13 +113,12 @@ export function mainNgcc(
|
||||||
for (const entryPoint of entryPoints) {
|
for (const entryPoint of entryPoints) {
|
||||||
const packageJson = entryPoint.packageJson;
|
const packageJson = entryPoint.packageJson;
|
||||||
const hasProcessedTypings = hasBeenProcessed(packageJson, 'typings', entryPoint.path);
|
const hasProcessedTypings = hasBeenProcessed(packageJson, 'typings', entryPoint.path);
|
||||||
const {propertiesToProcess, propertyToPropertiesToMarkAsProcessed} =
|
const {propertiesToProcess, equivalentPropertiesMap} =
|
||||||
getPropertiesToProcessAndMarkAsProcessed(packageJson, supportedPropertiesToConsider);
|
getPropertiesToProcess(packageJson, supportedPropertiesToConsider);
|
||||||
let processDts = !hasProcessedTypings;
|
let processDts = !hasProcessedTypings;
|
||||||
|
|
||||||
for (const formatProperty of propertiesToProcess) {
|
for (const formatProperty of propertiesToProcess) {
|
||||||
const formatPropertiesToMarkAsProcessed =
|
const formatPropertiesToMarkAsProcessed = equivalentPropertiesMap.get(formatProperty) !;
|
||||||
propertyToPropertiesToMarkAsProcessed.get(formatProperty) !;
|
|
||||||
tasks.push({entryPoint, formatProperty, formatPropertiesToMarkAsProcessed, processDts});
|
tasks.push({entryPoint, formatProperty, formatPropertiesToMarkAsProcessed, processDts});
|
||||||
|
|
||||||
// Only process typings for the first property (if not already processed).
|
// Only process typings for the first property (if not already processed).
|
||||||
|
@ -189,54 +188,55 @@ export function mainNgcc(
|
||||||
};
|
};
|
||||||
|
|
||||||
// The function for actually planning and getting the work done.
|
// The function for actually planning and getting the work done.
|
||||||
const executeFn: ExecuteFn = (analyzeFn: AnalyzeFn, createCompileFn: CreateCompileFn) => {
|
const execute: ExecuteFn =
|
||||||
const {processingMetadataPerEntryPoint, tasks} = analyzeFn();
|
(analyzeEntryPoints: AnalyzeEntryPointsFn, createCompileFn: CreateCompileFn) => {
|
||||||
const compile = createCompileFn((task, outcome) => {
|
const {processingMetadataPerEntryPoint, tasks} = analyzeEntryPoints();
|
||||||
const {entryPoint, formatPropertiesToMarkAsProcessed, processDts} = task;
|
const compile = createCompileFn((task, outcome) => {
|
||||||
const processingMeta = processingMetadataPerEntryPoint.get(entryPoint.path) !;
|
const {entryPoint, formatPropertiesToMarkAsProcessed, processDts} = task;
|
||||||
processingMeta.hasAnyProcessedFormat = true;
|
const processingMeta = processingMetadataPerEntryPoint.get(entryPoint.path) !;
|
||||||
|
processingMeta.hasAnyProcessedFormat = true;
|
||||||
|
|
||||||
if (outcome === TaskProcessingOutcome.Processed) {
|
if (outcome === TaskProcessingOutcome.Processed) {
|
||||||
const packageJsonPath = fileSystem.resolve(entryPoint.path, 'package.json');
|
const packageJsonPath = fileSystem.resolve(entryPoint.path, 'package.json');
|
||||||
const propsToMarkAsProcessed: (EntryPointJsonProperty | 'typings')[] =
|
const propsToMarkAsProcessed: PackageJsonFormatProperties[] =
|
||||||
[...formatPropertiesToMarkAsProcessed];
|
[...formatPropertiesToMarkAsProcessed];
|
||||||
|
|
||||||
if (processDts) {
|
if (processDts) {
|
||||||
processingMeta.hasProcessedTypings = true;
|
processingMeta.hasProcessedTypings = true;
|
||||||
propsToMarkAsProcessed.push('typings');
|
propsToMarkAsProcessed.push('typings');
|
||||||
|
}
|
||||||
|
|
||||||
|
markAsProcessed(
|
||||||
|
fileSystem, entryPoint.packageJson, packageJsonPath, propsToMarkAsProcessed);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Process all tasks.
|
||||||
|
for (const task of tasks) {
|
||||||
|
const processingMeta = processingMetadataPerEntryPoint.get(task.entryPoint.path) !;
|
||||||
|
|
||||||
|
// If we only need one format processed and we already have one for the corresponding
|
||||||
|
// entry-point, skip the task.
|
||||||
|
if (!compileAllFormats && processingMeta.hasAnyProcessedFormat) continue;
|
||||||
|
|
||||||
|
compile(task);
|
||||||
}
|
}
|
||||||
|
|
||||||
markAsProcessed(
|
// Check for entry-points for which we could not process any format at all.
|
||||||
fileSystem, entryPoint.packageJson, packageJsonPath, propsToMarkAsProcessed);
|
const unprocessedEntryPointPaths =
|
||||||
}
|
Array.from(processingMetadataPerEntryPoint.entries())
|
||||||
});
|
.filter(([, processingMeta]) => !processingMeta.hasAnyProcessedFormat)
|
||||||
|
.map(([entryPointPath]) => `\n - ${entryPointPath}`)
|
||||||
|
.join('');
|
||||||
|
|
||||||
// Process all tasks.
|
if (unprocessedEntryPointPaths) {
|
||||||
for (const task of tasks) {
|
throw new Error(
|
||||||
const processingMeta = processingMetadataPerEntryPoint.get(task.entryPoint.path) !;
|
'Failed to compile any formats for the following entry-points (tried ' +
|
||||||
|
`${propertiesToConsider.join(', ')}): ${unprocessedEntryPointPaths}`);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// If we only need one format processed and we already have one for the corresponding
|
return execute(analyzeEntryPoints, createCompileFn);
|
||||||
// entry-point, skip the task.
|
|
||||||
if (!compileAllFormats && processingMeta.hasAnyProcessedFormat) continue;
|
|
||||||
|
|
||||||
compile(task);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check for entry-points for which we could not process any format at all.
|
|
||||||
const unprocessedEntryPointPaths =
|
|
||||||
Array.from(processingMetadataPerEntryPoint.entries())
|
|
||||||
.filter(([, processingMeta]) => !processingMeta.hasAnyProcessedFormat)
|
|
||||||
.map(([entryPointPath]) => `\n - ${entryPointPath}`)
|
|
||||||
.join('');
|
|
||||||
|
|
||||||
if (unprocessedEntryPointPaths) {
|
|
||||||
throw new Error(
|
|
||||||
'Failed to compile any formats for the following entry-points (tried ' +
|
|
||||||
`${propertiesToConsider.join(', ')}): ${unprocessedEntryPointPaths}`);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
return executeFn(analyzeFn, createCompileFn);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function ensureSupportedProperties(properties: string[]): EntryPointJsonProperty[] {
|
function ensureSupportedProperties(properties: string[]): EntryPointJsonProperty[] {
|
||||||
|
@ -370,16 +370,16 @@ function logInvalidEntryPoints(logger: Logger, invalidEntryPoints: InvalidEntryP
|
||||||
/**
|
/**
|
||||||
* This function computes and returns the following:
|
* This function computes and returns the following:
|
||||||
* - `propertiesToProcess`: An (ordered) list of properties that exist and need to be processed,
|
* - `propertiesToProcess`: An (ordered) list of properties that exist and need to be processed,
|
||||||
* based on the specified `propertiesToConsider`, the properties in `package.json` and their
|
* based on the provided `propertiesToConsider`, the properties in `package.json` and their
|
||||||
* corresponding format-paths. NOTE: Only one property per format-path needs to be processed.
|
* corresponding format-paths. NOTE: Only one property per format-path needs to be processed.
|
||||||
* - `propertyToPropertiesToMarkAsProcessed`: A mapping from each property in `propertiesToProcess`
|
* - `equivalentPropertiesMap`: A mapping from each property in `propertiesToProcess` to the list of
|
||||||
* to the list of other properties in `package.json` that need to be marked as processed as soon
|
* other format properties in `package.json` that need to be marked as processed as soon as the
|
||||||
* as of the former being processed.
|
* former has been processed.
|
||||||
*/
|
*/
|
||||||
function getPropertiesToProcessAndMarkAsProcessed(
|
function getPropertiesToProcess(
|
||||||
packageJson: EntryPointPackageJson, propertiesToConsider: EntryPointJsonProperty[]): {
|
packageJson: EntryPointPackageJson, propertiesToConsider: EntryPointJsonProperty[]): {
|
||||||
propertiesToProcess: EntryPointJsonProperty[];
|
propertiesToProcess: EntryPointJsonProperty[];
|
||||||
propertyToPropertiesToMarkAsProcessed: Map<EntryPointJsonProperty, EntryPointJsonProperty[]>;
|
equivalentPropertiesMap: Map<EntryPointJsonProperty, EntryPointJsonProperty[]>;
|
||||||
} {
|
} {
|
||||||
const formatPathsToConsider = new Set<string>();
|
const formatPathsToConsider = new Set<string>();
|
||||||
|
|
||||||
|
@ -413,13 +413,12 @@ function getPropertiesToProcessAndMarkAsProcessed(
|
||||||
list.push(prop);
|
list.push(prop);
|
||||||
}
|
}
|
||||||
|
|
||||||
const propertyToPropertiesToMarkAsProcessed =
|
const equivalentPropertiesMap = new Map<EntryPointJsonProperty, EntryPointJsonProperty[]>();
|
||||||
new Map<EntryPointJsonProperty, EntryPointJsonProperty[]>();
|
|
||||||
for (const prop of propertiesToConsider) {
|
for (const prop of propertiesToConsider) {
|
||||||
const formatPath = packageJson[prop] !;
|
const formatPath = packageJson[prop] !;
|
||||||
const propertiesToMarkAsProcessed = formatPathToProperties[formatPath];
|
const equivalentProperties = formatPathToProperties[formatPath];
|
||||||
propertyToPropertiesToMarkAsProcessed.set(prop, propertiesToMarkAsProcessed);
|
equivalentPropertiesMap.set(prop, equivalentProperties);
|
||||||
}
|
}
|
||||||
|
|
||||||
return {propertiesToProcess, propertyToPropertiesToMarkAsProcessed};
|
return {propertiesToProcess, equivalentPropertiesMap};
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
* found in the LICENSE file at https://angular.io/license
|
* found in the LICENSE file at https://angular.io/license
|
||||||
*/
|
*/
|
||||||
import {AbsoluteFsPath, FileSystem, dirname} from '../../../src/ngtsc/file_system';
|
import {AbsoluteFsPath, FileSystem, dirname} from '../../../src/ngtsc/file_system';
|
||||||
import {EntryPointJsonProperty, EntryPointPackageJson} from './entry_point';
|
import {EntryPointPackageJson, PackageJsonFormatProperties} from './entry_point';
|
||||||
|
|
||||||
export const NGCC_VERSION = '0.0.0-PLACEHOLDER';
|
export const NGCC_VERSION = '0.0.0-PLACEHOLDER';
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ export const NGCC_VERSION = '0.0.0-PLACEHOLDER';
|
||||||
* @throws Error if the entry-point has already been processed with a different ngcc version.
|
* @throws Error if the entry-point has already been processed with a different ngcc version.
|
||||||
*/
|
*/
|
||||||
export function hasBeenProcessed(
|
export function hasBeenProcessed(
|
||||||
packageJson: EntryPointPackageJson, format: EntryPointJsonProperty | 'typings',
|
packageJson: EntryPointPackageJson, format: PackageJsonFormatProperties,
|
||||||
entryPointPath: AbsoluteFsPath): boolean {
|
entryPointPath: AbsoluteFsPath): boolean {
|
||||||
if (!packageJson.__processed_by_ivy_ngcc__) {
|
if (!packageJson.__processed_by_ivy_ngcc__) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -50,7 +50,7 @@ export function hasBeenProcessed(
|
||||||
*/
|
*/
|
||||||
export function markAsProcessed(
|
export function markAsProcessed(
|
||||||
fs: FileSystem, packageJson: EntryPointPackageJson, packageJsonPath: AbsoluteFsPath,
|
fs: FileSystem, packageJson: EntryPointPackageJson, packageJsonPath: AbsoluteFsPath,
|
||||||
properties: (EntryPointJsonProperty | 'typings')[]) {
|
properties: PackageJsonFormatProperties[]) {
|
||||||
const processed =
|
const processed =
|
||||||
packageJson.__processed_by_ivy_ngcc__ || (packageJson.__processed_by_ivy_ngcc__ = {});
|
packageJson.__processed_by_ivy_ngcc__ || (packageJson.__processed_by_ivy_ngcc__ = {});
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
*/
|
*/
|
||||||
import * as vm from 'vm';
|
import * as vm from 'vm';
|
||||||
import {AbsoluteFsPath, FileSystem, dirname, join, resolve} from '../../../src/ngtsc/file_system';
|
import {AbsoluteFsPath, FileSystem, dirname, join, resolve} from '../../../src/ngtsc/file_system';
|
||||||
import {PackageJsonFormatProperties} from './entry_point';
|
import {PackageJsonFormatPropertiesMap} from './entry_point';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The format of a project level configuration file.
|
* The format of a project level configuration file.
|
||||||
|
@ -41,7 +41,7 @@ export interface NgccEntryPointConfig {
|
||||||
* This property, if provided, holds values that will override equivalent properties in an
|
* This property, if provided, holds values that will override equivalent properties in an
|
||||||
* entry-point's package.json file.
|
* entry-point's package.json file.
|
||||||
*/
|
*/
|
||||||
override?: PackageJsonFormatProperties;
|
override?: PackageJsonFormatPropertiesMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
const NGCC_CONFIG_FILENAME = 'ngcc.config.js';
|
const NGCC_CONFIG_FILENAME = 'ngcc.config.js';
|
||||||
|
@ -121,4 +121,4 @@ export class NgccConfiguration {
|
||||||
}
|
}
|
||||||
return processedEntryPoints;
|
return processedEntryPoints;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,7 +38,7 @@ export interface EntryPoint {
|
||||||
compiledByAngular: boolean;
|
compiledByAngular: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface PackageJsonFormatProperties {
|
export interface PackageJsonFormatPropertiesMap {
|
||||||
fesm2015?: string;
|
fesm2015?: string;
|
||||||
fesm5?: string;
|
fesm5?: string;
|
||||||
es2015?: string; // if exists then it is actually FESM2015
|
es2015?: string; // if exists then it is actually FESM2015
|
||||||
|
@ -50,16 +50,18 @@ export interface PackageJsonFormatProperties {
|
||||||
typings?: string; // TypeScript .d.ts files
|
typings?: string; // TypeScript .d.ts files
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type PackageJsonFormatProperties = keyof PackageJsonFormatPropertiesMap;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The properties that may be loaded from the `package.json` file.
|
* The properties that may be loaded from the `package.json` file.
|
||||||
*/
|
*/
|
||||||
export interface EntryPointPackageJson extends PackageJsonFormatProperties {
|
export interface EntryPointPackageJson extends PackageJsonFormatPropertiesMap {
|
||||||
name: string;
|
name: string;
|
||||||
scripts?: Record<string, string>;
|
scripts?: Record<string, string>;
|
||||||
__processed_by_ivy_ngcc__?: Record<string, string>;
|
__processed_by_ivy_ngcc__?: Record<string, string>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type EntryPointJsonProperty = Exclude<keyof PackageJsonFormatProperties, 'types'|'typings'>;
|
export type EntryPointJsonProperty = Exclude<PackageJsonFormatProperties, 'types'|'typings'>;
|
||||||
// We need to keep the elements of this const and the `EntryPointJsonProperty` type in sync.
|
// We need to keep the elements of this const and the `EntryPointJsonProperty` type in sync.
|
||||||
export const SUPPORTED_FORMAT_PROPERTIES: EntryPointJsonProperty[] =
|
export const SUPPORTED_FORMAT_PROPERTIES: EntryPointJsonProperty[] =
|
||||||
['fesm2015', 'fesm5', 'es2015', 'esm2015', 'esm5', 'main', 'module'];
|
['fesm2015', 'fesm5', 'es2015', 'esm2015', 'esm5', 'main', 'module'];
|
||||||
|
|
|
@ -6,8 +6,7 @@
|
||||||
* found in the LICENSE file at https://angular.io/license
|
* found in the LICENSE file at https://angular.io/license
|
||||||
*/
|
*/
|
||||||
import * as ts from 'typescript';
|
import * as ts from 'typescript';
|
||||||
import {AbsoluteFsPath, FileSystem, absoluteFrom} from '../../../src/ngtsc/file_system';
|
import {AbsoluteFsPath, FileSystem, NgtscCompilerHost, absoluteFrom} from '../../../src/ngtsc/file_system';
|
||||||
import {NgtscCompilerHost} from '../../../src/ngtsc/file_system/src/compiler_host';
|
|
||||||
import {PathMappings} from '../utils';
|
import {PathMappings} from '../utils';
|
||||||
import {BundleProgram, makeBundleProgram} from './bundle_program';
|
import {BundleProgram, makeBundleProgram} from './bundle_program';
|
||||||
import {EntryPoint, EntryPointFormat} from './entry_point';
|
import {EntryPoint, EntryPointFormat} from './entry_point';
|
||||||
|
|
|
@ -7,8 +7,7 @@
|
||||||
*/
|
*/
|
||||||
import * as ts from 'typescript';
|
import * as ts from 'typescript';
|
||||||
|
|
||||||
import {FileSystem} from '../../../src/ngtsc/file_system';
|
import {FileSystem, NgtscCompilerHost} from '../../../src/ngtsc/file_system';
|
||||||
import {NgtscCompilerHost} from '../../../src/ngtsc/file_system/src/compiler_host';
|
|
||||||
import {isRelativePath} from '../utils';
|
import {isRelativePath} from '../utils';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue