The `ɵɵInjectorDef` interface is internal and should not be published publicly as part of libraries. This commit updates the compiler to render an opaque type, `ɵɵInjectorDeclaration`, for this instead, which appears in the typings for compiled libraries. PR Close #41119
43 lines
1.3 KiB
TypeScript
43 lines
1.3 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright Google LLC 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
|
|
*/
|
|
|
|
import * as o from '../output/output_ast';
|
|
import {Identifiers as R3} from './r3_identifiers';
|
|
import {R3CompiledExpression, R3Reference} from './util';
|
|
import {DefinitionMap} from './view/util';
|
|
|
|
export interface R3InjectorMetadata {
|
|
name: string;
|
|
type: R3Reference;
|
|
internalType: o.Expression;
|
|
providers: o.Expression|null;
|
|
imports: o.Expression[];
|
|
}
|
|
|
|
export function compileInjector(meta: R3InjectorMetadata): R3CompiledExpression {
|
|
const definitionMap = new DefinitionMap<{providers: o.Expression; imports: o.Expression;}>();
|
|
|
|
if (meta.providers !== null) {
|
|
definitionMap.set('providers', meta.providers);
|
|
}
|
|
|
|
if (meta.imports.length > 0) {
|
|
definitionMap.set('imports', o.literalArr(meta.imports));
|
|
}
|
|
|
|
const expression =
|
|
o.importExpr(R3.defineInjector).callFn([definitionMap.toLiteralMap()], undefined, true);
|
|
const type = createInjectorType(meta);
|
|
return {expression, type, statements: []};
|
|
}
|
|
|
|
export function createInjectorType(meta: R3InjectorMetadata): o.Type {
|
|
return new o.ExpressionType(
|
|
o.importExpr(R3.InjectorDeclaration, [new o.ExpressionType(meta.type.type)]));
|
|
}
|