///
import { AbsoluteFsPath, PathManipulation, ReadonlyFileSystem } from '../../../src/ngtsc/file_system';
import { PackageJsonFormatPropertiesMap } from './entry_point';
/**
* The format of a project level configuration file.
*/
export interface NgccProjectConfig {
/**
* The packages that are configured by this project config.
*/
packages?: {
[packagePath: string]: RawNgccPackageConfig | undefined;
};
/**
* Options that control how locking the process is handled.
*/
locking?: ProcessLockingConfiguration;
/**
* Name of hash algorithm used to generate hashes of the configuration.
*
* Defaults to `sha256`.
*/
hashAlgorithm?: string;
}
/**
* Options that control how locking the process is handled.
*/
export interface ProcessLockingConfiguration {
/**
* The number of times the AsyncLocker will attempt to lock the process before failing.
* Defaults to 500.
*/
retryAttempts?: number;
/**
* The number of milliseconds between attempts to lock the process.
* Defaults to 500ms.
* */
retryDelay?: number;
}
/**
* The raw format of a package level configuration (as it appears in configuration files).
*/
export interface RawNgccPackageConfig {
/**
* The entry-points to configure for this package.
*
* In the config file the keys are paths relative to the package path.
*/
entryPoints?: {
[entryPointPath: string]: NgccEntryPointConfig;
};
/**
* A collection of regexes that match deep imports to ignore, for this package, rather than
* displaying a warning.
*/
ignorableDeepImportMatchers?: RegExp[];
}
/**
* Configuration options for an entry-point.
*
* The existence of a configuration for a path tells ngcc that this should be considered for
* processing as an entry-point.
*/
export interface NgccEntryPointConfig {
/** Do not process (or even acknowledge the existence of) this entry-point, if true. */
ignore?: boolean;
/**
* This property, if provided, holds values that will override equivalent properties in an
* entry-point's package.json file.
*/
override?: PackageJsonFormatPropertiesMap;
/**
* Normally, ngcc will skip compilation of entrypoints that contain imports that can't be resolved
* or understood. If this option is specified, ngcc will proceed with compiling the entrypoint
* even in the face of such missing dependencies.
*/
ignoreMissingDependencies?: boolean;
/**
* Enabling this option for an entrypoint tells ngcc that deep imports might be used for the files
* it contains, and that it should generate private re-exports alongside the NgModule of all the
* directives/pipes it makes available in support of those imports.
*/
generateDeepReexports?: boolean;
}
interface VersionedPackageConfig extends RawNgccPackageConfig {
versionRange: string;
}
/**
* The internal representation of a configuration file. Configured packages are transformed into
* `ProcessedNgccPackageConfig` when a certain version is requested.
*/
export declare class PartiallyProcessedConfig {
/**
* The packages that are configured by this project config, keyed by package name.
*/
packages: Map;
/**
* Options that control how locking the process is handled.
*/
locking: ProcessLockingConfiguration;
/**
* Name of hash algorithm used to generate hashes of the configuration.
*
* Defaults to `sha256`.
*/
hashAlgorithm: string;
constructor(projectConfig: NgccProjectConfig);
private splitNameAndVersion;
/**
* Registers the configuration for a particular version of the provided package.
*/
private addPackageConfig;
/**
* Finds the configuration for a particular version of the provided package.
*/
findPackageConfig(packageName: string, version: string | null): VersionedPackageConfig | null;
/**
* Converts the configuration into a JSON representation that is used to compute a hash of the
* configuration.
*/
toJson(): string;
}
/**
* The default configuration for ngcc.
*
* This is the ultimate fallback configuration that ngcc will use if there is no configuration
* for a package at the package level or project level.
*
* This configuration is for packages that are "dead" - i.e. no longer maintained and so are
* unlikely to be fixed to work with ngcc, nor provide a package level config of their own.
*
* The fallback process for looking up configuration is:
*
* Project -> Package -> Default
*
* If a package provides its own configuration then that would override this default one.
*
* Also application developers can always provide configuration at their project level which
* will override everything else.
*
* Note that the fallback is package based not entry-point based.
* For example, if a there is configuration for a package at the project level this will replace all
* entry-point configurations that may have been provided in the package level or default level
* configurations, even if the project level configuration does not provide for a given entry-point.
*/
export declare const DEFAULT_NGCC_CONFIG: NgccProjectConfig;
/**
* The processed package level configuration as a result of processing a raw package level config.
*/
export declare class ProcessedNgccPackageConfig implements Omit {
/**
* The absolute path to this instance of the package.
* Note that there may be multiple instances of a package inside a project in nested
* `node_modules/`. For example, one at `/node_modules/some-package/` and one at
* `/node_modules/other-package/node_modules/some-package/`.
*/
packagePath: AbsoluteFsPath;
/**
* The entry-points to configure for this package.
*
* In contrast to `RawNgccPackageConfig`, the paths are absolute and take the path of the specific
* instance of the package into account.
*/
entryPoints: Map;
/**
* A collection of regexes that match deep imports to ignore, for this package, rather than
* displaying a warning.
*/
ignorableDeepImportMatchers: RegExp[];
constructor(fs: PathManipulation, packagePath: AbsoluteFsPath, { entryPoints, ignorableDeepImportMatchers, }: RawNgccPackageConfig);
}
/**
* Ngcc has a hierarchical configuration system that lets us "fix up" packages that do not
* work with ngcc out of the box.
*
* There are three levels at which configuration can be declared:
*
* * Default level - ngcc comes with built-in configuration for well known cases.
* * Package level - a library author publishes a configuration with their package to fix known
* issues.
* * Project level - the application developer provides a configuration that fixes issues specific
* to the libraries used in their application.
*
* Ngcc will match configuration based on the package name but also on its version. This allows
* configuration to provide different fixes to different version ranges of a package.
*
* * Package level configuration is specific to the package version where the configuration is
* found.
* * Default and project level configuration should provide version ranges to ensure that the
* configuration is only applied to the appropriate versions of a package.
*
* When getting a configuration for a package (via `getConfig()`) the caller should provide the
* version of the package in question, if available. If it is not provided then the first available
* configuration for a package is returned.
*/
export declare class NgccConfiguration {
private fs;
private defaultConfig;
private projectConfig;
private cache;
readonly hash: string;
readonly hashAlgorithm: string;
constructor(fs: ReadonlyFileSystem, baseDir: AbsoluteFsPath);
/**
* Get the configuration options for locking the ngcc process.
*/
getLockingConfig(): Required;
/**
* Get a configuration for the given `version` of a package at `packagePath`.
*
* @param packageName The name of the package whose config we want.
* @param packagePath The path to the package whose config we want.
* @param version The version of the package whose config we want, or `null` if the package's
* package.json did not exist or was invalid.
*/
getPackageConfig(packageName: string, packagePath: AbsoluteFsPath, version: string | null): ProcessedNgccPackageConfig;
private getRawPackageConfig;
private loadProjectConfig;
private loadPackageConfig;
private evalSrcFile;
private computeHash;
}
export {};