refactor(ivy): rename objectLiteral to pureFn to prep for pipes (#22214)
PR Close #22214
This commit is contained in:
parent
e1bf067090
commit
a73d5308e0
|
@ -21,6 +21,7 @@ export {
|
||||||
PublicFeature as ɵPublicFeature,
|
PublicFeature as ɵPublicFeature,
|
||||||
NgOnChangesFeature as ɵNgOnChangesFeature,
|
NgOnChangesFeature as ɵNgOnChangesFeature,
|
||||||
CssSelector as ɵCssSelector,
|
CssSelector as ɵCssSelector,
|
||||||
|
NC as ɵNC,
|
||||||
C as ɵC,
|
C as ɵC,
|
||||||
E as ɵE,
|
E as ɵE,
|
||||||
L as ɵL,
|
L as ɵL,
|
||||||
|
@ -43,15 +44,15 @@ export {
|
||||||
pb3 as ɵpb3,
|
pb3 as ɵpb3,
|
||||||
pb4 as ɵpb4,
|
pb4 as ɵpb4,
|
||||||
pbV as ɵpbV,
|
pbV as ɵpbV,
|
||||||
o1 as ɵo1,
|
f1 as ɵf1,
|
||||||
o2 as ɵo2,
|
f2 as ɵf2,
|
||||||
o3 as ɵo3,
|
f3 as ɵf3,
|
||||||
o4 as ɵo4,
|
f4 as ɵf4,
|
||||||
o5 as ɵo5,
|
f5 as ɵf5,
|
||||||
o6 as ɵo6,
|
f6 as ɵf6,
|
||||||
o7 as ɵo7,
|
f7 as ɵf7,
|
||||||
o8 as ɵo8,
|
f8 as ɵf8,
|
||||||
oV as ɵoV,
|
fV as ɵfV,
|
||||||
cR as ɵcR,
|
cR as ɵcR,
|
||||||
cr as ɵcr,
|
cr as ɵcr,
|
||||||
qR as ɵqR,
|
qR as ɵqR,
|
||||||
|
|
|
@ -79,16 +79,16 @@ export {
|
||||||
queryRefresh as qR,
|
queryRefresh as qR,
|
||||||
} from './query';
|
} from './query';
|
||||||
export {
|
export {
|
||||||
objectLiteral1 as o1,
|
pureFunction1 as f1,
|
||||||
objectLiteral2 as o2,
|
pureFunction2 as f2,
|
||||||
objectLiteral3 as o3,
|
pureFunction3 as f3,
|
||||||
objectLiteral4 as o4,
|
pureFunction4 as f4,
|
||||||
objectLiteral5 as o5,
|
pureFunction5 as f5,
|
||||||
objectLiteral6 as o6,
|
pureFunction6 as f6,
|
||||||
objectLiteral7 as o7,
|
pureFunction7 as f7,
|
||||||
objectLiteral8 as o8,
|
pureFunction8 as f8,
|
||||||
objectLiteralV as oV,
|
pureFunctionV as fV,
|
||||||
} from './object_literal';
|
} from './pure_function';
|
||||||
|
|
||||||
|
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
|
@ -9,31 +9,31 @@
|
||||||
import {NO_CHANGE, bind, peekBinding} from './instructions';
|
import {NO_CHANGE, bind, peekBinding} from './instructions';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If the object or array has changed, returns a copy with the updated expression.
|
* If the value of the provided exp has changed, calls the pure function to
|
||||||
* Or if the expression hasn't changed, returns NO_CHANGE.
|
* return an updated value. Or if the value has not changed, returns NO_CHANGE.
|
||||||
*
|
*
|
||||||
* @param factoryFn Function that returns an updated instance of the object/array
|
* @param pureFn Function that returns an updated value
|
||||||
* @param exp Updated expression value
|
* @param exp Updated expression value
|
||||||
* @returns A copy of the object/array or NO_CHANGE
|
* @returns Updated value or NO_CHANGE
|
||||||
*/
|
*/
|
||||||
export function objectLiteral1(factoryFn: (v: any) => any, exp: any): any {
|
export function pureFunction1(pureFn: (v: any) => any, exp: any): any {
|
||||||
let different = false;
|
let different = false;
|
||||||
const latestValue = exp === NO_CHANGE ? peekBinding() : exp;
|
const latestValue = exp === NO_CHANGE ? peekBinding() : exp;
|
||||||
if (bind(exp) !== NO_CHANGE) different = true;
|
if (bind(exp) !== NO_CHANGE) different = true;
|
||||||
|
|
||||||
return different ? factoryFn(latestValue) : NO_CHANGE;
|
return different ? pureFn(latestValue) : NO_CHANGE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If the object or array has changed, returns a copy with all updated expressions.
|
* If the value of any provided exp has changed, calls the pure function to
|
||||||
* Or if no expressions have changed, returns NO_CHANGE.
|
* return an updated value. Or if no values have changed, returns NO_CHANGE.
|
||||||
*
|
*
|
||||||
* @param factoryFn
|
* @param pureFn
|
||||||
* @param exp1
|
* @param exp1
|
||||||
* @param exp2
|
* @param exp2
|
||||||
* @returns A copy of the object/array or NO_CHANGE
|
* @returns Updated value or NO_CHANGE
|
||||||
*/
|
*/
|
||||||
export function objectLiteral2(factoryFn: (v1: any, v2: any) => any, exp1: any, exp2: any): any {
|
export function pureFunction2(pureFn: (v1: any, v2: any) => any, exp1: any, exp2: any): any {
|
||||||
let different = false;
|
let different = false;
|
||||||
|
|
||||||
const latestVal1 = exp1 === NO_CHANGE ? peekBinding() : exp1;
|
const latestVal1 = exp1 === NO_CHANGE ? peekBinding() : exp1;
|
||||||
|
@ -42,21 +42,21 @@ export function objectLiteral2(factoryFn: (v1: any, v2: any) => any, exp1: any,
|
||||||
const latestVal2 = exp2 === NO_CHANGE ? peekBinding() : exp2;
|
const latestVal2 = exp2 === NO_CHANGE ? peekBinding() : exp2;
|
||||||
if (bind(exp2) !== NO_CHANGE) different = true;
|
if (bind(exp2) !== NO_CHANGE) different = true;
|
||||||
|
|
||||||
return different ? factoryFn(latestVal1, latestVal2) : NO_CHANGE;
|
return different ? pureFn(latestVal1, latestVal2) : NO_CHANGE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If the object or array has changed, returns a copy with all updated expressions.
|
* If the value of any provided exp has changed, calls the pure function to
|
||||||
* Or if no expressions have changed, returns NO_CHANGE.
|
* return an updated value. Or if no values have changed, returns NO_CHANGE.
|
||||||
*
|
*
|
||||||
* @param factoryFn
|
* @param pureFn
|
||||||
* @param exp1
|
* @param exp1
|
||||||
* @param exp2
|
* @param exp2
|
||||||
* @param exp3
|
* @param exp3
|
||||||
* @returns A copy of the object/array or NO_CHANGE
|
* @returns Updated value or NO_CHANGE
|
||||||
*/
|
*/
|
||||||
export function objectLiteral3(
|
export function pureFunction3(
|
||||||
factoryFn: (v1: any, v2: any, v3: any) => any, exp1: any, exp2: any, exp3: any): any {
|
pureFn: (v1: any, v2: any, v3: any) => any, exp1: any, exp2: any, exp3: any): any {
|
||||||
let different = false;
|
let different = false;
|
||||||
|
|
||||||
const latestVal1 = exp1 === NO_CHANGE ? peekBinding() : exp1;
|
const latestVal1 = exp1 === NO_CHANGE ? peekBinding() : exp1;
|
||||||
|
@ -68,22 +68,22 @@ export function objectLiteral3(
|
||||||
const latestVal3 = exp3 === NO_CHANGE ? peekBinding() : exp3;
|
const latestVal3 = exp3 === NO_CHANGE ? peekBinding() : exp3;
|
||||||
if (bind(exp3) !== NO_CHANGE) different = true;
|
if (bind(exp3) !== NO_CHANGE) different = true;
|
||||||
|
|
||||||
return different ? factoryFn(latestVal1, latestVal2, latestVal3) : NO_CHANGE;
|
return different ? pureFn(latestVal1, latestVal2, latestVal3) : NO_CHANGE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If the object or array has changed, returns a copy with all updated expressions.
|
* If the value of any provided exp has changed, calls the pure function to
|
||||||
* Or if no expressions have changed, returns NO_CHANGE.
|
* return an updated value. Or if no values have changed, returns NO_CHANGE.
|
||||||
*
|
*
|
||||||
* @param factoryFn
|
* @param pureFn
|
||||||
* @param exp1
|
* @param exp1
|
||||||
* @param exp2
|
* @param exp2
|
||||||
* @param exp3
|
* @param exp3
|
||||||
* @param exp4
|
* @param exp4
|
||||||
* @returns A copy of the object/array or NO_CHANGE
|
* @returns Updated value or NO_CHANGE
|
||||||
*/
|
*/
|
||||||
export function objectLiteral4(
|
export function pureFunction4(
|
||||||
factoryFn: (v1: any, v2: any, v3: any, v4: any) => any, exp1: any, exp2: any, exp3: any,
|
pureFn: (v1: any, v2: any, v3: any, v4: any) => any, exp1: any, exp2: any, exp3: any,
|
||||||
exp4: any): any {
|
exp4: any): any {
|
||||||
let different = false;
|
let different = false;
|
||||||
|
|
||||||
|
@ -99,24 +99,24 @@ export function objectLiteral4(
|
||||||
const latestVal4 = exp4 === NO_CHANGE ? peekBinding() : exp4;
|
const latestVal4 = exp4 === NO_CHANGE ? peekBinding() : exp4;
|
||||||
if (bind(exp4) !== NO_CHANGE) different = true;
|
if (bind(exp4) !== NO_CHANGE) different = true;
|
||||||
|
|
||||||
return different ? factoryFn(latestVal1, latestVal2, latestVal3, latestVal4) : NO_CHANGE;
|
return different ? pureFn(latestVal1, latestVal2, latestVal3, latestVal4) : NO_CHANGE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If the object or array has changed, returns a copy with all updated expressions.
|
* If the value of any provided exp has changed, calls the pure function to
|
||||||
* Or if no expressions have changed, returns NO_CHANGE.
|
* return an updated value. Or if no values have changed, returns NO_CHANGE.
|
||||||
*
|
*
|
||||||
* @param factoryFn
|
* @param pureFn
|
||||||
* @param exp1
|
* @param exp1
|
||||||
* @param exp2
|
* @param exp2
|
||||||
* @param exp3
|
* @param exp3
|
||||||
* @param exp4
|
* @param exp4
|
||||||
* @param exp5
|
* @param exp5
|
||||||
* @returns A copy of the object/array or NO_CHANGE
|
* @returns Updated value or NO_CHANGE
|
||||||
*/
|
*/
|
||||||
export function objectLiteral5(
|
export function pureFunction5(
|
||||||
factoryFn: (v1: any, v2: any, v3: any, v4: any, v5: any) => any, exp1: any, exp2: any,
|
pureFn: (v1: any, v2: any, v3: any, v4: any, v5: any) => any, exp1: any, exp2: any, exp3: any,
|
||||||
exp3: any, exp4: any, exp5: any): any {
|
exp4: any, exp5: any): any {
|
||||||
let different = false;
|
let different = false;
|
||||||
|
|
||||||
const latestVal1 = exp1 === NO_CHANGE ? peekBinding() : exp1;
|
const latestVal1 = exp1 === NO_CHANGE ? peekBinding() : exp1;
|
||||||
|
@ -134,25 +134,24 @@ export function objectLiteral5(
|
||||||
const latestVal5 = exp5 === NO_CHANGE ? peekBinding() : exp5;
|
const latestVal5 = exp5 === NO_CHANGE ? peekBinding() : exp5;
|
||||||
if (bind(exp5) !== NO_CHANGE) different = true;
|
if (bind(exp5) !== NO_CHANGE) different = true;
|
||||||
|
|
||||||
return different ? factoryFn(latestVal1, latestVal2, latestVal3, latestVal4, latestVal5) :
|
return different ? pureFn(latestVal1, latestVal2, latestVal3, latestVal4, latestVal5) : NO_CHANGE;
|
||||||
NO_CHANGE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If the object or array has changed, returns a copy with all updated expressions.
|
* If the value of any provided exp has changed, calls the pure function to
|
||||||
* Or if no expressions have changed, returns NO_CHANGE.
|
* return an updated value. Or if no values have changed, returns NO_CHANGE.
|
||||||
*
|
*
|
||||||
* @param factoryFn
|
* @param pureFn
|
||||||
* @param exp1
|
* @param exp1
|
||||||
* @param exp2
|
* @param exp2
|
||||||
* @param exp3
|
* @param exp3
|
||||||
* @param exp4
|
* @param exp4
|
||||||
* @param exp5
|
* @param exp5
|
||||||
* @param exp6
|
* @param exp6
|
||||||
* @returns A copy of the object/array or NO_CHANGE
|
* @returns Updated value or NO_CHANGE
|
||||||
*/
|
*/
|
||||||
export function objectLiteral6(
|
export function pureFunction6(
|
||||||
factoryFn: (v1: any, v2: any, v3: any, v4: any, v5: any, v6: any) => any, exp1: any, exp2: any,
|
pureFn: (v1: any, v2: any, v3: any, v4: any, v5: any, v6: any) => any, exp1: any, exp2: any,
|
||||||
exp3: any, exp4: any, exp5: any, exp6: any): any {
|
exp3: any, exp4: any, exp5: any, exp6: any): any {
|
||||||
let different = false;
|
let different = false;
|
||||||
|
|
||||||
|
@ -175,15 +174,15 @@ export function objectLiteral6(
|
||||||
if (bind(exp6) !== NO_CHANGE) different = true;
|
if (bind(exp6) !== NO_CHANGE) different = true;
|
||||||
|
|
||||||
return different ?
|
return different ?
|
||||||
factoryFn(latestVal1, latestVal2, latestVal3, latestVal4, latestVal5, latestVal6) :
|
pureFn(latestVal1, latestVal2, latestVal3, latestVal4, latestVal5, latestVal6) :
|
||||||
NO_CHANGE;
|
NO_CHANGE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If the object or array has changed, returns a copy with all updated expressions.
|
* If the value of any provided exp has changed, calls the pure function to
|
||||||
* Or if no expressions have changed, returns NO_CHANGE.
|
* return an updated value. Or if no values have changed, returns NO_CHANGE.
|
||||||
*
|
*
|
||||||
* @param factoryFn
|
* @param pureFn
|
||||||
* @param exp1
|
* @param exp1
|
||||||
* @param exp2
|
* @param exp2
|
||||||
* @param exp3
|
* @param exp3
|
||||||
|
@ -191,10 +190,10 @@ export function objectLiteral6(
|
||||||
* @param exp5
|
* @param exp5
|
||||||
* @param exp6
|
* @param exp6
|
||||||
* @param exp7
|
* @param exp7
|
||||||
* @returns A copy of the object/array or NO_CHANGE
|
* @returns Updated value or NO_CHANGE
|
||||||
*/
|
*/
|
||||||
export function objectLiteral7(
|
export function pureFunction7(
|
||||||
factoryFn: (v1: any, v2: any, v3: any, v4: any, v5: any, v6: any, v7: any) => any, exp1: any,
|
pureFn: (v1: any, v2: any, v3: any, v4: any, v5: any, v6: any, v7: any) => any, exp1: any,
|
||||||
exp2: any, exp3: any, exp4: any, exp5: any, exp6: any, exp7: any): any {
|
exp2: any, exp3: any, exp4: any, exp5: any, exp6: any, exp7: any): any {
|
||||||
let different = false;
|
let different = false;
|
||||||
|
|
||||||
|
@ -220,16 +219,15 @@ export function objectLiteral7(
|
||||||
if (bind(exp7) !== NO_CHANGE) different = true;
|
if (bind(exp7) !== NO_CHANGE) different = true;
|
||||||
|
|
||||||
return different ?
|
return different ?
|
||||||
factoryFn(
|
pureFn(latestVal1, latestVal2, latestVal3, latestVal4, latestVal5, latestVal6, latestVal7) :
|
||||||
latestVal1, latestVal2, latestVal3, latestVal4, latestVal5, latestVal6, latestVal7) :
|
|
||||||
NO_CHANGE;
|
NO_CHANGE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If the object or array has changed, returns a copy with all updated expressions.
|
* If the value of any provided exp has changed, calls the pure function to
|
||||||
* Or if no expressions have changed, returns NO_CHANGE.
|
* return an updated value. Or if no values have changed, returns NO_CHANGE.
|
||||||
*
|
*
|
||||||
* @param factoryFn
|
* @param pureFn
|
||||||
* @param exp1
|
* @param exp1
|
||||||
* @param exp2
|
* @param exp2
|
||||||
* @param exp3
|
* @param exp3
|
||||||
|
@ -238,10 +236,10 @@ export function objectLiteral7(
|
||||||
* @param exp6
|
* @param exp6
|
||||||
* @param exp7
|
* @param exp7
|
||||||
* @param exp8
|
* @param exp8
|
||||||
* @returns A copy of the object/array or NO_CHANGE
|
* @returns Updated value or NO_CHANGE
|
||||||
*/
|
*/
|
||||||
export function objectLiteral8(
|
export function pureFunction8(
|
||||||
factoryFn: (v1: any, v2: any, v3: any, v4: any, v5: any, v6: any, v7: any, v8: any) => any,
|
pureFn: (v1: any, v2: any, v3: any, v4: any, v5: any, v6: any, v7: any, v8: any) => any,
|
||||||
exp1: any, exp2: any, exp3: any, exp4: any, exp5: any, exp6: any, exp7: any, exp8: any): any {
|
exp1: any, exp2: any, exp3: any, exp4: any, exp5: any, exp6: any, exp7: any, exp8: any): any {
|
||||||
let different = false;
|
let different = false;
|
||||||
|
|
||||||
|
@ -269,24 +267,24 @@ export function objectLiteral8(
|
||||||
const latestVal8 = exp8 === NO_CHANGE ? peekBinding() : exp8;
|
const latestVal8 = exp8 === NO_CHANGE ? peekBinding() : exp8;
|
||||||
if (bind(exp8) !== NO_CHANGE) different = true;
|
if (bind(exp8) !== NO_CHANGE) different = true;
|
||||||
|
|
||||||
return different ? factoryFn(
|
return different ? pureFn(
|
||||||
latestVal1, latestVal2, latestVal3, latestVal4, latestVal5, latestVal6,
|
latestVal1, latestVal2, latestVal3, latestVal4, latestVal5, latestVal6,
|
||||||
latestVal7, latestVal8) :
|
latestVal7, latestVal8) :
|
||||||
NO_CHANGE;
|
NO_CHANGE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* objectLiteral instruction that can support any number of bindings.
|
* pureFunction instruction that can support any number of bindings.
|
||||||
*
|
*
|
||||||
* If the object or array has changed, returns a copy with all updated expressions.
|
* If the value of any provided exp has changed, calls the pure function to
|
||||||
* Or if no expressions have changed, returns NO_CHANGE.
|
* return an updated value. Or if no values have changed, returns NO_CHANGE.
|
||||||
*
|
*
|
||||||
* @param factoryFn A factory function that takes binding values and builds an object or array
|
* @param pureFn A pure function that takes binding values and builds an object or array
|
||||||
* containing those values.
|
* containing those values.
|
||||||
* @param exp An array of binding values
|
* @param exp An array of binding values
|
||||||
* @returns A copy of the object/array or NO_CHANGE
|
* @returns Updated value or NO_CHANGE
|
||||||
*/
|
*/
|
||||||
export function objectLiteralV(factoryFn: (v: any[]) => any, exps: any[]): any {
|
export function pureFunctionV(pureFn: (v: any[]) => any, exps: any[]): any {
|
||||||
let different = false;
|
let different = false;
|
||||||
|
|
||||||
for (let i = 0; i < exps.length; i++) {
|
for (let i = 0; i < exps.length; i++) {
|
||||||
|
@ -295,5 +293,5 @@ export function objectLiteralV(factoryFn: (v: any[]) => any, exps: any[]): any {
|
||||||
if (bind(exp) !== NO_CHANGE) different = true;
|
if (bind(exp) !== NO_CHANGE) different = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return different ? factoryFn(exps) : NO_CHANGE;
|
return different ? pureFn(exps) : NO_CHANGE;
|
||||||
}
|
}
|
|
@ -190,41 +190,69 @@ describe('compiler specification', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('value composition', () => {
|
describe('value composition', () => {
|
||||||
|
type $MyArrayComp$ = MyArrayComp;
|
||||||
it('should support array literals', () => {
|
|
||||||
type $MyComp$ = MyComp;
|
|
||||||
type $MyApp$ = MyApp;
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'my-comp',
|
selector: 'my-array-comp',
|
||||||
template: `
|
template: `
|
||||||
<p>{{ names[0] }}</p>
|
{{ names[0] }} {{ names[1] }}
|
||||||
<p>{{ names[1] }}</p>
|
|
||||||
`
|
`
|
||||||
})
|
})
|
||||||
class MyComp {
|
class MyArrayComp {
|
||||||
@Input() names: string[];
|
@Input() names: string[];
|
||||||
|
|
||||||
static ngComponentDef = $r3$.ɵdefineComponent({
|
static ngComponentDef = $r3$.ɵdefineComponent({
|
||||||
type: MyComp,
|
type: MyArrayComp,
|
||||||
tag: 'my-comp',
|
tag: 'my-array-comp',
|
||||||
factory: function MyComp_Factory() { return new MyComp(); },
|
factory: function MyArrayComp_Factory() { return new MyArrayComp(); },
|
||||||
template: function MyComp_Template(ctx: $MyComp$, cm: $boolean$) {
|
template: function MyArrayComp_Template(ctx: $MyArrayComp$, cm: $boolean$) {
|
||||||
if (cm) {
|
if (cm) {
|
||||||
$r3$.ɵE(0, 'p');
|
$r3$.ɵT(0);
|
||||||
$r3$.ɵT(1);
|
|
||||||
$r3$.ɵe();
|
|
||||||
$r3$.ɵE(2, 'p');
|
|
||||||
$r3$.ɵT(3);
|
|
||||||
$r3$.ɵe();
|
|
||||||
}
|
}
|
||||||
$r3$.ɵt(1, $r3$.ɵb(ctx.names[0]));
|
$r3$.ɵt(0, $r3$.ɵb2('', ctx.names[0], ' ', ctx.names[1], ''));
|
||||||
$r3$.ɵt(3, $r3$.ɵb(ctx.names[1]));
|
|
||||||
},
|
},
|
||||||
inputs: {names: 'names'}
|
inputs: {names: 'names'}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
it('should support array literals of constants', () => {
|
||||||
|
type $MyApp$ = MyApp;
|
||||||
|
|
||||||
|
// NORMATIVE
|
||||||
|
const $e0_arr$ = ['Nancy', 'Bess'];
|
||||||
|
// /NORMATIVE
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'my-app',
|
||||||
|
template: `
|
||||||
|
<my-array-comp [names]="['Nancy', 'Bess']"></my-array-comp>
|
||||||
|
`
|
||||||
|
})
|
||||||
|
class MyApp {
|
||||||
|
// NORMATIVE
|
||||||
|
static ngComponentDef = $r3$.ɵdefineComponent({
|
||||||
|
type: MyApp,
|
||||||
|
tag: 'my-app',
|
||||||
|
factory: function MyApp_Factory() { return new MyApp(); },
|
||||||
|
template: function MyApp_Template(ctx: $MyApp$, cm: $boolean$) {
|
||||||
|
if (cm) {
|
||||||
|
$r3$.ɵE(0, MyArrayComp);
|
||||||
|
$r3$.ɵe();
|
||||||
|
}
|
||||||
|
$r3$.ɵp(0, 'names', $r3$.ɵb0($e0_arr$));
|
||||||
|
MyArrayComp.ngComponentDef.h(1, 0);
|
||||||
|
$r3$.ɵr(1, 0);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// /NORMATIVE
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(renderComp(MyApp)).toEqual(`<my-array-comp>Nancy Bess</my-array-comp>`);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should support array literals', () => {
|
||||||
|
type $MyApp$ = MyApp;
|
||||||
|
|
||||||
// NORMATIVE
|
// NORMATIVE
|
||||||
const $e0_ff$ = (v: any) => ['Nancy', v];
|
const $e0_ff$ = (v: any) => ['Nancy', v];
|
||||||
// /NORMATIVE
|
// /NORMATIVE
|
||||||
|
@ -232,7 +260,7 @@ describe('compiler specification', () => {
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'my-app',
|
selector: 'my-app',
|
||||||
template: `
|
template: `
|
||||||
<my-comp [names]="['Nancy', customName]"></my-comp>
|
<my-array-comp [names]="['Nancy', customName]"></my-array-comp>
|
||||||
`
|
`
|
||||||
})
|
})
|
||||||
class MyApp {
|
class MyApp {
|
||||||
|
@ -245,18 +273,18 @@ describe('compiler specification', () => {
|
||||||
factory: function MyApp_Factory() { return new MyApp(); },
|
factory: function MyApp_Factory() { return new MyApp(); },
|
||||||
template: function MyApp_Template(ctx: $MyApp$, cm: $boolean$) {
|
template: function MyApp_Template(ctx: $MyApp$, cm: $boolean$) {
|
||||||
if (cm) {
|
if (cm) {
|
||||||
$r3$.ɵE(0, MyComp);
|
$r3$.ɵE(0, MyArrayComp);
|
||||||
$r3$.ɵe();
|
$r3$.ɵe();
|
||||||
}
|
}
|
||||||
$r3$.ɵp(0, 'names', $r3$.ɵo1($e0_ff$, ctx.customName));
|
$r3$.ɵp(0, 'names', $r3$.ɵf1($e0_ff$, ctx.customName));
|
||||||
MyComp.ngComponentDef.h(1, 0);
|
MyArrayComp.ngComponentDef.h(1, 0);
|
||||||
$r3$.ɵr(1, 0);
|
$r3$.ɵr(1, 0);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
// /NORMATIVE
|
// /NORMATIVE
|
||||||
}
|
}
|
||||||
|
|
||||||
expect(renderComp(MyApp)).toEqual(`<my-comp><p>Nancy</p><p>Bess</p></my-comp>`);
|
expect(renderComp(MyApp)).toEqual(`<my-array-comp>Nancy Bess</my-array-comp>`);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should support 9+ bindings in array literals', () => {
|
it('should support 9+ bindings in array literals', () => {
|
||||||
|
@ -352,7 +380,7 @@ describe('compiler specification', () => {
|
||||||
}
|
}
|
||||||
$r3$.ɵp(
|
$r3$.ɵp(
|
||||||
0, 'names',
|
0, 'names',
|
||||||
$r3$.ɵoV($e0_ff$, [c.n0, c.n1, c.n2, c.n3, c.n4, c.n5, c.n6, c.n7, c.n8]));
|
$r3$.ɵfV($e0_ff$, [c.n0, c.n1, c.n2, c.n3, c.n4, c.n5, c.n6, c.n7, c.n8]));
|
||||||
MyComp.ngComponentDef.h(1, 0);
|
MyComp.ngComponentDef.h(1, 0);
|
||||||
$r3$.ɵr(1, 0);
|
$r3$.ɵr(1, 0);
|
||||||
}
|
}
|
||||||
|
@ -420,7 +448,7 @@ describe('compiler specification', () => {
|
||||||
$r3$.ɵE(0, ObjectComp);
|
$r3$.ɵE(0, ObjectComp);
|
||||||
$r3$.ɵe();
|
$r3$.ɵe();
|
||||||
}
|
}
|
||||||
$r3$.ɵp(0, 'config', $r3$.ɵo1($e0_ff$, ctx.name));
|
$r3$.ɵp(0, 'config', $r3$.ɵf1($e0_ff$, ctx.name));
|
||||||
ObjectComp.ngComponentDef.h(1, 0);
|
ObjectComp.ngComponentDef.h(1, 0);
|
||||||
$r3$.ɵr(1, 0);
|
$r3$.ɵr(1, 0);
|
||||||
}
|
}
|
||||||
|
@ -500,8 +528,8 @@ describe('compiler specification', () => {
|
||||||
}
|
}
|
||||||
$r3$.ɵp(
|
$r3$.ɵp(
|
||||||
0, 'config',
|
0, 'config',
|
||||||
$r3$.ɵo2(
|
$r3$.ɵf2(
|
||||||
$e0_ff_2$, ctx.name, $r3$.ɵo1($e0_ff_1$, $r3$.ɵo1($e0_ff$, ctx.duration))));
|
$e0_ff_2$, ctx.name, $r3$.ɵf1($e0_ff_1$, $r3$.ɵf1($e0_ff$, ctx.duration))));
|
||||||
NestedComp.ngComponentDef.h(1, 0);
|
NestedComp.ngComponentDef.h(1, 0);
|
||||||
$r3$.ɵr(1, 0);
|
$r3$.ɵr(1, 0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,7 +72,7 @@ describe('render3 integration test', () => {
|
||||||
if (cm) {
|
if (cm) {
|
||||||
text(0);
|
text(0);
|
||||||
}
|
}
|
||||||
textBinding(0, cm ? value : NO_CHANGE);
|
textBinding(0, bind0(value));
|
||||||
}
|
}
|
||||||
expect(renderToHtml(Template, 'once')).toEqual('once');
|
expect(renderToHtml(Template, 'once')).toEqual('once');
|
||||||
expect(renderToHtml(Template, 'twice')).toEqual('once');
|
expect(renderToHtml(Template, 'twice')).toEqual('once');
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
*/
|
*/
|
||||||
import {defineComponent} from '../../src/render3/index';
|
import {defineComponent} from '../../src/render3/index';
|
||||||
import {componentRefresh, container, containerRefreshEnd, containerRefreshStart, elementEnd, elementProperty, elementStart, embeddedViewEnd, embeddedViewStart, memory} from '../../src/render3/instructions';
|
import {componentRefresh, container, containerRefreshEnd, containerRefreshStart, elementEnd, elementProperty, elementStart, embeddedViewEnd, embeddedViewStart, memory} from '../../src/render3/instructions';
|
||||||
import {objectLiteral1, objectLiteral2, objectLiteral3, objectLiteral4, objectLiteral5, objectLiteral6, objectLiteral7, objectLiteral8, objectLiteralV} from '../../src/render3/object_literal';
|
import {pureFunction1, pureFunction2, pureFunction3, pureFunction4, pureFunction5, pureFunction6, pureFunction7, pureFunction8, pureFunctionV} from '../../src/render3/pure_function';
|
||||||
import {renderToHtml} from '../../test/render3/render_util';
|
import {renderToHtml} from '../../test/render3/render_util';
|
||||||
|
|
||||||
describe('array literals', () => {
|
describe('array literals', () => {
|
||||||
|
@ -32,7 +32,7 @@ describe('array literals', () => {
|
||||||
elementStart(0, MyComp);
|
elementStart(0, MyComp);
|
||||||
elementEnd();
|
elementEnd();
|
||||||
}
|
}
|
||||||
elementProperty(0, 'names', objectLiteral1(e0_ff, ctx.customName));
|
elementProperty(0, 'names', pureFunction1(e0_ff, ctx.customName));
|
||||||
MyComp.ngComponentDef.h(1, 0);
|
MyComp.ngComponentDef.h(1, 0);
|
||||||
componentRefresh(1, 0);
|
componentRefresh(1, 0);
|
||||||
}
|
}
|
||||||
|
@ -79,8 +79,8 @@ describe('array literals', () => {
|
||||||
elementStart(0, ManyPropComp);
|
elementStart(0, ManyPropComp);
|
||||||
elementEnd();
|
elementEnd();
|
||||||
}
|
}
|
||||||
elementProperty(0, 'names1', objectLiteral1(e0_ff, ctx.customName));
|
elementProperty(0, 'names1', pureFunction1(e0_ff, ctx.customName));
|
||||||
elementProperty(0, 'names2', objectLiteral1(e0_ff_1, ctx.customName2));
|
elementProperty(0, 'names2', pureFunction1(e0_ff_1, ctx.customName2));
|
||||||
ManyPropComp.ngComponentDef.h(1, 0);
|
ManyPropComp.ngComponentDef.h(1, 0);
|
||||||
componentRefresh(1, 0);
|
componentRefresh(1, 0);
|
||||||
}
|
}
|
||||||
|
@ -105,7 +105,7 @@ describe('array literals', () => {
|
||||||
elementStart(0, MyComp);
|
elementStart(0, MyComp);
|
||||||
elementEnd();
|
elementEnd();
|
||||||
}
|
}
|
||||||
elementProperty(0, 'names', objectLiteral2(e0_ff, ctx.customName, ctx.customName2));
|
elementProperty(0, 'names', pureFunction2(e0_ff, ctx.customName, ctx.customName2));
|
||||||
MyComp.ngComponentDef.h(1, 0);
|
MyComp.ngComponentDef.h(1, 0);
|
||||||
componentRefresh(1, 0);
|
componentRefresh(1, 0);
|
||||||
}
|
}
|
||||||
|
@ -129,41 +129,41 @@ describe('array literals', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should work up to 8 bindings', () => {
|
it('should work up to 8 bindings', () => {
|
||||||
let o3Comp: MyComp;
|
let f3Comp: MyComp;
|
||||||
let o4Comp: MyComp;
|
let f4Comp: MyComp;
|
||||||
let o5Comp: MyComp;
|
let f5Comp: MyComp;
|
||||||
let o6Comp: MyComp;
|
let f6Comp: MyComp;
|
||||||
let o7Comp: MyComp;
|
let f7Comp: MyComp;
|
||||||
let o8Comp: MyComp;
|
let f8Comp: MyComp;
|
||||||
|
|
||||||
function Template(c: any, cm: boolean) {
|
function Template(c: any, cm: boolean) {
|
||||||
if (cm) {
|
if (cm) {
|
||||||
elementStart(0, MyComp);
|
elementStart(0, MyComp);
|
||||||
o3Comp = memory(1);
|
f3Comp = memory(1);
|
||||||
elementEnd();
|
elementEnd();
|
||||||
elementStart(2, MyComp);
|
elementStart(2, MyComp);
|
||||||
o4Comp = memory(3);
|
f4Comp = memory(3);
|
||||||
elementEnd();
|
elementEnd();
|
||||||
elementStart(4, MyComp);
|
elementStart(4, MyComp);
|
||||||
o5Comp = memory(5);
|
f5Comp = memory(5);
|
||||||
elementEnd();
|
elementEnd();
|
||||||
elementStart(6, MyComp);
|
elementStart(6, MyComp);
|
||||||
o6Comp = memory(7);
|
f6Comp = memory(7);
|
||||||
elementEnd();
|
elementEnd();
|
||||||
elementStart(8, MyComp);
|
elementStart(8, MyComp);
|
||||||
o7Comp = memory(9);
|
f7Comp = memory(9);
|
||||||
elementEnd();
|
elementEnd();
|
||||||
elementStart(10, MyComp);
|
elementStart(10, MyComp);
|
||||||
o8Comp = memory(11);
|
f8Comp = memory(11);
|
||||||
elementEnd();
|
elementEnd();
|
||||||
}
|
}
|
||||||
elementProperty(0, 'names', objectLiteral3(e0_ff, c[5], c[6], c[7]));
|
elementProperty(0, 'names', pureFunction3(e0_ff, c[5], c[6], c[7]));
|
||||||
elementProperty(2, 'names', objectLiteral4(e2_ff, c[4], c[5], c[6], c[7]));
|
elementProperty(2, 'names', pureFunction4(e2_ff, c[4], c[5], c[6], c[7]));
|
||||||
elementProperty(4, 'names', objectLiteral5(e4_ff, c[3], c[4], c[5], c[6], c[7]));
|
elementProperty(4, 'names', pureFunction5(e4_ff, c[3], c[4], c[5], c[6], c[7]));
|
||||||
elementProperty(6, 'names', objectLiteral6(e6_ff, c[2], c[3], c[4], c[5], c[6], c[7]));
|
elementProperty(6, 'names', pureFunction6(e6_ff, c[2], c[3], c[4], c[5], c[6], c[7]));
|
||||||
elementProperty(8, 'names', objectLiteral7(e8_ff, c[1], c[2], c[3], c[4], c[5], c[6], c[7]));
|
elementProperty(8, 'names', pureFunction7(e8_ff, c[1], c[2], c[3], c[4], c[5], c[6], c[7]));
|
||||||
elementProperty(
|
elementProperty(
|
||||||
10, 'names', objectLiteral8(e10_ff, c[0], c[1], c[2], c[3], c[4], c[5], c[6], c[7]));
|
10, 'names', pureFunction8(e10_ff, c[0], c[1], c[2], c[3], c[4], c[5], c[6], c[7]));
|
||||||
MyComp.ngComponentDef.h(1, 0);
|
MyComp.ngComponentDef.h(1, 0);
|
||||||
MyComp.ngComponentDef.h(3, 2);
|
MyComp.ngComponentDef.h(3, 2);
|
||||||
MyComp.ngComponentDef.h(5, 4);
|
MyComp.ngComponentDef.h(5, 4);
|
||||||
|
@ -193,23 +193,23 @@ describe('array literals', () => {
|
||||||
v8: any) => [v1, v2, v3, v4, v5, v6, v7, v8];
|
v8: any) => [v1, v2, v3, v4, v5, v6, v7, v8];
|
||||||
|
|
||||||
renderToHtml(Template, ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']);
|
renderToHtml(Template, ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']);
|
||||||
expect(o3Comp !.names).toEqual(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']);
|
expect(f3Comp !.names).toEqual(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']);
|
||||||
expect(o4Comp !.names).toEqual(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']);
|
expect(f4Comp !.names).toEqual(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']);
|
||||||
expect(o5Comp !.names).toEqual(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']);
|
expect(f5Comp !.names).toEqual(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']);
|
||||||
expect(o6Comp !.names).toEqual(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']);
|
expect(f6Comp !.names).toEqual(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']);
|
||||||
expect(o7Comp !.names).toEqual(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']);
|
expect(f7Comp !.names).toEqual(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']);
|
||||||
expect(o8Comp !.names).toEqual(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']);
|
expect(f8Comp !.names).toEqual(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']);
|
||||||
|
|
||||||
renderToHtml(Template, ['a1', 'b1', 'c1', 'd1', 'e1', 'f1', 'g1', 'h1', 'i1']);
|
renderToHtml(Template, ['a1', 'b1', 'c1', 'd1', 'e1', 'f1', 'g1', 'h1', 'i1']);
|
||||||
expect(o3Comp !.names).toEqual(['a', 'b', 'c', 'd', 'e', 'f1', 'g1', 'h1']);
|
expect(f3Comp !.names).toEqual(['a', 'b', 'c', 'd', 'e', 'f1', 'g1', 'h1']);
|
||||||
expect(o4Comp !.names).toEqual(['a', 'b', 'c', 'd', 'e1', 'f1', 'g1', 'h1']);
|
expect(f4Comp !.names).toEqual(['a', 'b', 'c', 'd', 'e1', 'f1', 'g1', 'h1']);
|
||||||
expect(o5Comp !.names).toEqual(['a', 'b', 'c', 'd1', 'e1', 'f1', 'g1', 'h1']);
|
expect(f5Comp !.names).toEqual(['a', 'b', 'c', 'd1', 'e1', 'f1', 'g1', 'h1']);
|
||||||
expect(o6Comp !.names).toEqual(['a', 'b', 'c1', 'd1', 'e1', 'f1', 'g1', 'h1']);
|
expect(f6Comp !.names).toEqual(['a', 'b', 'c1', 'd1', 'e1', 'f1', 'g1', 'h1']);
|
||||||
expect(o7Comp !.names).toEqual(['a', 'b1', 'c1', 'd1', 'e1', 'f1', 'g1', 'h1']);
|
expect(f7Comp !.names).toEqual(['a', 'b1', 'c1', 'd1', 'e1', 'f1', 'g1', 'h1']);
|
||||||
expect(o8Comp !.names).toEqual(['a1', 'b1', 'c1', 'd1', 'e1', 'f1', 'g1', 'h1']);
|
expect(f8Comp !.names).toEqual(['a1', 'b1', 'c1', 'd1', 'e1', 'f1', 'g1', 'h1']);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should work with objectLiteralV for 9+ bindings', () => {
|
it('should work with pureFunctionV for 9+ bindings', () => {
|
||||||
/**
|
/**
|
||||||
* <my-comp [names]="['start', v0, v1, v2, v3, {name: v4}, v5, v6, v7, v8, 'end']">
|
* <my-comp [names]="['start', v0, v1, v2, v3, {name: v4}, v5, v6, v7, v8, 'end']">
|
||||||
* </my-comp>
|
* </my-comp>
|
||||||
|
@ -219,9 +219,8 @@ describe('array literals', () => {
|
||||||
elementStart(0, MyComp);
|
elementStart(0, MyComp);
|
||||||
elementEnd();
|
elementEnd();
|
||||||
}
|
}
|
||||||
elementProperty(
|
elementProperty(0, 'names', pureFunctionV(e0_ff, [
|
||||||
0, 'names', objectLiteralV(e0_ff, [
|
c[0], c[1], c[2], c[3], pureFunction1(e0_ff_1, c[4]), c[5], c[6], c[7], c[8]
|
||||||
c[0], c[1], c[2], c[3], objectLiteral1(e0_ff_1, c[4]), c[5], c[6], c[7], c[8]
|
|
||||||
]));
|
]));
|
||||||
MyComp.ngComponentDef.h(1, 0);
|
MyComp.ngComponentDef.h(1, 0);
|
||||||
componentRefresh(1, 0);
|
componentRefresh(1, 0);
|
||||||
|
@ -271,7 +270,7 @@ describe('object literals', () => {
|
||||||
elementStart(0, ObjectComp);
|
elementStart(0, ObjectComp);
|
||||||
elementEnd();
|
elementEnd();
|
||||||
}
|
}
|
||||||
elementProperty(0, 'config', objectLiteral1(e0_ff, ctx.name));
|
elementProperty(0, 'config', pureFunction1(e0_ff, ctx.name));
|
||||||
ObjectComp.ngComponentDef.h(1, 0);
|
ObjectComp.ngComponentDef.h(1, 0);
|
||||||
componentRefresh(1, 0);
|
componentRefresh(1, 0);
|
||||||
}
|
}
|
||||||
|
@ -306,8 +305,8 @@ describe('object literals', () => {
|
||||||
}
|
}
|
||||||
elementProperty(
|
elementProperty(
|
||||||
0, 'config',
|
0, 'config',
|
||||||
objectLiteral2(
|
pureFunction2(
|
||||||
e0_ff, ctx.name, objectLiteral1(e0_ff_1, objectLiteral1(e0_ff_2, ctx.duration))));
|
e0_ff, ctx.name, pureFunction1(e0_ff_1, pureFunction1(e0_ff_2, ctx.duration))));
|
||||||
ObjectComp.ngComponentDef.h(1, 0);
|
ObjectComp.ngComponentDef.h(1, 0);
|
||||||
componentRefresh(1, 0);
|
componentRefresh(1, 0);
|
||||||
}
|
}
|
||||||
|
@ -372,7 +371,7 @@ describe('object literals', () => {
|
||||||
elementEnd();
|
elementEnd();
|
||||||
}
|
}
|
||||||
elementProperty(
|
elementProperty(
|
||||||
0, 'config', objectLiteral2(e0_ff, ctx.configs[i].opacity, ctx.configs[i].duration));
|
0, 'config', pureFunction2(e0_ff, ctx.configs[i].opacity, ctx.configs[i].duration));
|
||||||
ObjectComp.ngComponentDef.h(1, 0);
|
ObjectComp.ngComponentDef.h(1, 0);
|
||||||
componentRefresh(1, 0);
|
componentRefresh(1, 0);
|
||||||
embeddedViewEnd();
|
embeddedViewEnd();
|
Loading…
Reference in New Issue