diff --git a/CHANGELOG.md b/CHANGELOG.md index dde201c..527fb8c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 predicted from developers (#351). ### Fixed +- Explicitly setting `reflect` to `false` now works. Previously, setting this + explicitly (versus omitting entirely) would cause a runtime error (#354). - Custom element constructors are no longer invoked during template analysis. Previously, the internal computation and caching of a `DocumentFragment` would cause custom element’s constructors to run. Now, an inert document is used at diff --git a/test/test-reflected-properties.js b/test/test-reflected-properties.js index 19ed269..ffe4717 100644 --- a/test/test-reflected-properties.js +++ b/test/test-reflected-properties.js @@ -24,6 +24,10 @@ class TestElement extends XElement { initial: false, reflect: true, }, + explicitlyNotReflected: { + type: Boolean, + reflect: false, + }, }; } static template(html) { @@ -104,3 +108,14 @@ it('does not reflect next false value (Boolean)', async () => { await Promise.resolve(); assert(el.hasAttribute('boolean-property-true')); }); + +// Setting “reflect: false” explicitly should behave the same as omitting it. +// See https://github.com/Netflix/x-element/issues/353. +it('does not error when reflect is explicitly set to false', async () => { + const el = document.createElement('test-element'); + document.body.append(el); + el.explicitlyNotReflected = true; + await Promise.resolve(); + assert(el.explicitlyNotReflected === true); + assert(el.hasAttribute('explicitly-not-reflected') === false); +}); diff --git a/types/x-element.d.ts.map b/types/x-element.d.ts.map index 8b0b300..fbb75e7 100644 --- a/types/x-element.d.ts.map +++ b/types/x-element.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"x-element.d.ts","sourceRoot":"","sources":["../x-element.js"],"names":[],"mappings":"AAEA,uDAAuD;AACvD;IACE;;;OAGG;IACH,iCAFa,MAAM,EAAE,CAKpB;IAGD;;;;;;;;;;;;;;;OAeG;IACH,qBAFa,aAAa,EAAE,CAI3B;IAED;;;;;;OAMG;IAEH;;;;;;;;;;;;;OAaG;IAEH;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,yBAFa;QAAC,CAAC,GAAG,EAAE,MAAM;mBA/BZ,CAAC,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,GAAG,SAAS;wBACjD,MAAM;oBACN,MAAM,EAAE;sBACR,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO;6BAXlC,WAAW,SACX,OAAO,YACP,OAAO;sBAWJ,OAAO;uBACP,OAAO;uBACP,OAAO;sBACP,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC;sBACzB,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC;UAsBF;KAAC,CAIrC;IAED;;;;;OAKG;IAEH;;;;;;;;;;;;;OAaG;IACH,wBAFa;QAAC,CAAC,GAAG,EAAE,MAAM,UAhBf,WAAW,SACX,KAAK,SAeoC;KAAC,CAIpD;IAED;;;;;OAKG;IACH,8BAHW,WAAW,GACT,WAAW,GAAC,UAAU,CAIlC;IAED;;;;;OAKG;IAEH;;;;;;;;;;;OAWG;IACH,sBAHW,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK,OAAO,gBAbhE,MAAM,QACN,WAAW,SAiBrB;IAqJD,gEA6BC;IAGD,+FAqCC;IAED,uFA2FC;IAED,gHAMC;IAGD,8FAaC;IAED,6FAQC;IAGD,uGAiBC;IAGD,+EAUC;IAGD,+EAkBC;IAGD,4EAUC;IAGD,+EAaC;IAGD,+EAsBC;IAGD,+EAYC;IAGD,oDAmDC;IAGD,mFAwBC;IAGD,oDA6CC;IAID,sDA6BC;IAGD,kDAMC;IAED,qDAEC;IAED,wDA4BC;IAGD,2DAMC;IAGD;;;MAqBC;IAED,wGAGC;IAED,mDAMC;IAED,2GAGC;IAED,sDAMC;IAED,gEAMC;IAED,iDAYC;IAGD,qDAeC;IAED,wEAcC;IAED,qEAGC;IAED,6EAUC;IAED,uFAQC;IAED,kFAQC;IAED,kFAOC;IAED,oFAoBC;IAGD,kEAEC;IAED,kDAEC;IAED,qDAEC;IAED,iEAOC;IAED,mDAKC;IAED,yDAAqC;IACrC,kDAA8B;IAC9B,+CAA8I;IAC9I,wGAA+D;IAC/D,4CAA4B;IAC5B,qDAAqF;IAl3BrF;;OAEG;IACH,0BAEC;IAQD;;;;;OAKG;IACH,oCAJW,MAAM,YACN,MAAM,GAAC,IAAI,SACX,MAAM,GAAC,IAAI,QAOrB;IAED;;OAEG;IACH,wBAAoB;IAEpB;;OAEG;IACH,6BAEC;IAED;;;;OAIG;IACH,eAYC;IAED;;;;OAIG;IAEH;;;;;;;OAOG;IACH,gBALW,WAAW,QACX,MAAM,oBAPN,KAAK,oBASL,MAAM,QAoBhB;IAED;;;;;;OAMG;IACH,kBALW,WAAW,QACX,MAAM,oBAlCN,KAAK,oBAoCL,MAAM,QAoBhB;IAED;;;OAGG;IACH,qBAFW,KAAK,QAMf;IAED;;;;;OAKG;IACH,gBAFa,MAAM,CAIlB;CA2uBF"} \ No newline at end of file +{"version":3,"file":"x-element.d.ts","sourceRoot":"","sources":["../x-element.js"],"names":[],"mappings":"AAEA,uDAAuD;AACvD;IACE;;;OAGG;IACH,iCAFa,MAAM,EAAE,CAKpB;IAGD;;;;;;;;;;;;;;;OAeG;IACH,qBAFa,aAAa,EAAE,CAI3B;IAED;;;;;;OAMG;IAEH;;;;;;;;;;;;;OAaG;IAEH;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,yBAFa;QAAC,CAAC,GAAG,EAAE,MAAM;mBA/BZ,CAAC,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,GAAG,SAAS;wBACjD,MAAM;oBACN,MAAM,EAAE;sBACR,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO;6BAXlC,WAAW,SACX,OAAO,YACP,OAAO;sBAWJ,OAAO;uBACP,OAAO;uBACP,OAAO;sBACP,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC;sBACzB,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC;UAsBF;KAAC,CAIrC;IAED;;;;;OAKG;IAEH;;;;;;;;;;;;;OAaG;IACH,wBAFa;QAAC,CAAC,GAAG,EAAE,MAAM,UAhBf,WAAW,SACX,KAAK,SAeoC;KAAC,CAIpD;IAED;;;;;OAKG;IACH,8BAHW,WAAW,GACT,WAAW,GAAC,UAAU,CAIlC;IAED;;;;;OAKG;IAEH;;;;;;;;;;;OAWG;IACH,sBAHW,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK,OAAO,gBAbhE,MAAM,QACN,WAAW,SAiBrB;IAqJD,gEA6BC;IAGD,+FAqCC;IAED,uFA2FC;IAED,gHAMC;IAGD,8FAaC;IAED,6FAQC;IAGD,uGAiBC;IAGD,+EAUC;IAGD,+EAkBC;IAGD,4EAUC;IAGD,+EAeC;IAGD,+EAsBC;IAGD,+EAYC;IAGD,oDAmDC;IAGD,mFAwBC;IAGD,oDA6CC;IAID,sDA6BC;IAGD,kDAMC;IAED,qDAEC;IAED,wDA4BC;IAGD,2DAMC;IAGD;;;MAqBC;IAED,wGAGC;IAED,mDAMC;IAED,2GAGC;IAED,sDAMC;IAED,gEAMC;IAED,iDAYC;IAGD,qDAeC;IAED,wEAcC;IAED,qEAGC;IAED,6EAUC;IAED,uFAQC;IAED,kFAQC;IAED,kFAOC;IAED,oFAoBC;IAGD,kEAEC;IAED,kDAEC;IAED,qDAEC;IAED,iEAOC;IAED,mDAKC;IAED,yDAAqC;IACrC,kDAA8B;IAC9B,+CAA8I;IAC9I,wGAA+D;IAC/D,4CAA4B;IAC5B,qDAAqF;IAp3BrF;;OAEG;IACH,0BAEC;IAQD;;;;;OAKG;IACH,oCAJW,MAAM,YACN,MAAM,GAAC,IAAI,SACX,MAAM,GAAC,IAAI,QAOrB;IAED;;OAEG;IACH,wBAAoB;IAEpB;;OAEG;IACH,6BAEC;IAED;;;;OAIG;IACH,eAYC;IAED;;;;OAIG;IAEH;;;;;;;OAOG;IACH,gBALW,WAAW,QACX,MAAM,oBAPN,KAAK,oBASL,MAAM,QAoBhB;IAED;;;;;;OAMG;IACH,kBALW,WAAW,QACX,MAAM,oBAlCN,KAAK,oBAoCL,MAAM,QAoBhB;IAED;;;OAGG;IACH,qBAFW,KAAK,QAMf;IAED;;;;;OAKG;IACH,gBAFa,MAAM,CAIlB;CA6uBF"} \ No newline at end of file diff --git a/x-element.js b/x-element.js index eb03c5f..b8879a9 100644 --- a/x-element.js +++ b/x-element.js @@ -563,6 +563,8 @@ export default class XElement extends HTMLElement { : host.setAttribute(property.attribute, serialization); hostInfo.reflecting = false; }; + } else { + delete property.reflect; } }