feat(compiler): allow multiple exportAs names
This change allows users to specify multiple exportAs names for a directive by giving a comma-delimited list inside the string. The primary motivation for this change is to allow these names to be changed in a backwards compatible way.
This commit is contained in:
@ -1209,6 +1209,24 @@ Binding to attribute 'onEvent' is disallowed for security reasons ("<my-componen
|
||||
]);
|
||||
});
|
||||
|
||||
it('should assign references to directives via exportAs with multiple names', () => {
|
||||
const pizzaTestDirective =
|
||||
compileDirectiveMetadataCreate({
|
||||
selector: 'pizza-test',
|
||||
type: createTypeMeta({reference: {filePath: someModuleUrl, name: 'Pizza'}}),
|
||||
exportAs: 'pizza, cheeseSauceBread'
|
||||
}).toSummary();
|
||||
|
||||
const template = '<pizza-test #food="pizza" #yum="cheeseSauceBread"></pizza-test>';
|
||||
|
||||
expect(humanizeTplAst(parse(template, [pizzaTestDirective]))).toEqual([
|
||||
[ElementAst, 'pizza-test'],
|
||||
[ReferenceAst, 'food', createTokenForReference(pizzaTestDirective.type.reference)],
|
||||
[ReferenceAst, 'yum', createTokenForReference(pizzaTestDirective.type.reference)],
|
||||
[DirectiveAst, pizzaTestDirective],
|
||||
]);
|
||||
});
|
||||
|
||||
it('should report references with values that dont match a directive as errors', () => {
|
||||
expect(() => parse('<div #a="dirA"></div>', [])).toThrowError(`Template parse errors:
|
||||
There is no directive with "exportAs" set to "dirA" ("<div [ERROR ->]#a="dirA"></div>"): TestComp@0:5`);
|
||||
@ -1231,6 +1249,31 @@ Reference "#a" is defined several times ("<div #a></div><div [ERROR ->]#a></div>
|
||||
|
||||
});
|
||||
|
||||
it('should report duplicate reference names when using mutliple exportAs names', () => {
|
||||
const pizzaDirective =
|
||||
compileDirectiveMetadataCreate({
|
||||
selector: '[dessert-pizza]',
|
||||
type: createTypeMeta({reference: {filePath: someModuleUrl, name: 'Pizza'}}),
|
||||
exportAs: 'dessertPizza, chocolate'
|
||||
}).toSummary();
|
||||
|
||||
const chocolateDirective =
|
||||
compileDirectiveMetadataCreate({
|
||||
selector: '[chocolate]',
|
||||
type: createTypeMeta({reference: {filePath: someModuleUrl, name: 'Chocolate'}}),
|
||||
exportAs: 'chocolate'
|
||||
}).toSummary();
|
||||
|
||||
const template = '<div dessert-pizza chocolate #snack="chocolate"></div>';
|
||||
const compileTemplate = () => parse(template, [pizzaDirective, chocolateDirective]);
|
||||
const duplicateReferenceError = 'Template parse errors:\n' +
|
||||
'Reference "#snack" is defined several times ' +
|
||||
'("<div dessert-pizza chocolate [ERROR ->]#snack="chocolate"></div>")' +
|
||||
': TestComp@0:29';
|
||||
|
||||
expect(compileTemplate).toThrowError(duplicateReferenceError);
|
||||
});
|
||||
|
||||
it('should not throw error when there is same reference name in different templates',
|
||||
() => {
|
||||
expect(() => parse('<div #a><template #a><span>OK</span></template></div>', []))
|
||||
|
Reference in New Issue
Block a user