From db7ece6d4d0896cf39b3472cf5f00e1a47e18821 Mon Sep 17 00:00:00 2001 From: Rob Eisenberg Date: Mon, 15 Aug 2022 11:19:03 -0400 Subject: [PATCH 1/5] refactor: remove dependency of DI on FASTElement --- packages/web-components/fast-element/src/di/di.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/web-components/fast-element/src/di/di.ts b/packages/web-components/fast-element/src/di/di.ts index 8fb6e91f813..f1de316e263 100644 --- a/packages/web-components/fast-element/src/di/di.ts +++ b/packages/web-components/fast-element/src/di/di.ts @@ -2,7 +2,6 @@ * Big thanks to https://github.com/fkleuver and the https://github.com/aurelia/aurelia project * for the bulk of this code and many of the associated tests. */ -import { FASTElement } from "../components/fast-element.js"; import { Context, ContextDecorator, ContextEvent, UnknownContext } from "../context.js"; import { Class, Constructable, Message } from "../interfaces.js"; import { Metadata } from "../metadata.js"; @@ -777,8 +776,8 @@ export const DI = Object.freeze({ value = container.get(key); this[diPropertyKey] = value; - if (respectConnection && this instanceof FASTElement) { - const notifier = (this as FASTElement).$fastController; + if (respectConnection) { + const notifier = (this as any).$fastController; const handleChange = () => { const newContainer = DI.findResponsibleContainer(this); const newValue = newContainer.get(key) as any; From de092807f6dbd38f799db0447ceae58222662eb6 Mon Sep 17 00:00:00 2001 From: Rob Eisenberg Date: Mon, 15 Aug 2022 14:06:32 -0400 Subject: [PATCH 2/5] feat: throw if attempting to respect DOM connect without a FASTElement --- packages/web-components/fast-element/src/debug.ts | 1 + packages/web-components/fast-element/src/di/di.ts | 5 +++++ packages/web-components/fast-element/src/interfaces.ts | 1 + 3 files changed, 7 insertions(+) diff --git a/packages/web-components/fast-element/src/debug.ts b/packages/web-components/fast-element/src/debug.ts index 1e7c0c375ee..94479df003e 100644 --- a/packages/web-components/fast-element/src/debug.ts +++ b/packages/web-components/fast-element/src/debug.ts @@ -32,6 +32,7 @@ const debugMessages = { [1511 /* invalidKey */]: "Key/value cannot be null or undefined. Are you trying to inject/register something that doesn't exist with DI?", [1512 /* noDefaultResolver */]: "'${key}' not registered. Did you forget to add @singleton()?", [1513 /* cyclicDependency */]: "Cyclic dependency found '${name}'.", + [1514 /* connectUpdateRequiresController */]: "Injected properties that are updated on changes to DOM connectivity require the target object to be an instance of FASTElement.", }; const allPlaceholders = /(\$\{\w+?})/g; diff --git a/packages/web-components/fast-element/src/di/di.ts b/packages/web-components/fast-element/src/di/di.ts index f1de316e263..2b1b902d571 100644 --- a/packages/web-components/fast-element/src/di/di.ts +++ b/packages/web-components/fast-element/src/di/di.ts @@ -778,6 +778,11 @@ export const DI = Object.freeze({ if (respectConnection) { const notifier = (this as any).$fastController; + + if (!notifier) { + throw FAST.error(Message.connectUpdateRequiresController); + } + const handleChange = () => { const newContainer = DI.findResponsibleContainer(this); const newValue = newContainer.get(key) as any; diff --git a/packages/web-components/fast-element/src/interfaces.ts b/packages/web-components/fast-element/src/interfaces.ts index 3f1b4f02000..ffcfa6ff798 100644 --- a/packages/web-components/fast-element/src/interfaces.ts +++ b/packages/web-components/fast-element/src/interfaces.ts @@ -216,6 +216,7 @@ export const enum Message { invalidKey = 1511, noDefaultResolver = 1512, cyclicDependency = 1513, + connectUpdateRequiresController = 1514 } /** From b4098d71fff9a907e4c95a574d1e30e71887cfa1 Mon Sep 17 00:00:00 2001 From: EisenbergEffect Date: Mon, 15 Aug 2022 14:10:03 -0400 Subject: [PATCH 3/5] Change files --- ...-fast-element-953ae13a-b331-48b2-b410-0881b9fcfce2.json | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 change/@microsoft-fast-element-953ae13a-b331-48b2-b410-0881b9fcfce2.json diff --git a/change/@microsoft-fast-element-953ae13a-b331-48b2-b410-0881b9fcfce2.json b/change/@microsoft-fast-element-953ae13a-b331-48b2-b410-0881b9fcfce2.json new file mode 100644 index 00000000000..b3c71d290e8 --- /dev/null +++ b/change/@microsoft-fast-element-953ae13a-b331-48b2-b410-0881b9fcfce2.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "refactor: remove dependency of DI on FASTElement", + "packageName": "@microsoft/fast-element", + "email": "roeisenb@microsoft.com", + "dependentChangeType": "patch" +} From fd6ecf46d6feef5b5cfc24a66cb9bb53adab5fd4 Mon Sep 17 00:00:00 2001 From: Rob Eisenberg Date: Mon, 15 Aug 2022 15:25:58 -0400 Subject: [PATCH 4/5] fix change file Co-authored-by: Nicholas Rice <3213292+nicholasrice@users.noreply.github.com> --- ...osoft-fast-element-953ae13a-b331-48b2-b410-0881b9fcfce2.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/change/@microsoft-fast-element-953ae13a-b331-48b2-b410-0881b9fcfce2.json b/change/@microsoft-fast-element-953ae13a-b331-48b2-b410-0881b9fcfce2.json index b3c71d290e8..ee5999eaed6 100644 --- a/change/@microsoft-fast-element-953ae13a-b331-48b2-b410-0881b9fcfce2.json +++ b/change/@microsoft-fast-element-953ae13a-b331-48b2-b410-0881b9fcfce2.json @@ -3,5 +3,5 @@ "comment": "refactor: remove dependency of DI on FASTElement", "packageName": "@microsoft/fast-element", "email": "roeisenb@microsoft.com", - "dependentChangeType": "patch" + "dependentChangeType": "prerelease" } From 4607cbdd0264a643aa8dd91f9e90a8101391f209 Mon Sep 17 00:00:00 2001 From: Rob Eisenberg Date: Mon, 15 Aug 2022 22:51:04 -0400 Subject: [PATCH 5/5] chore: fix prettier missing comma in enum --- packages/web-components/fast-element/src/interfaces.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/web-components/fast-element/src/interfaces.ts b/packages/web-components/fast-element/src/interfaces.ts index ffcfa6ff798..e2a43510fa3 100644 --- a/packages/web-components/fast-element/src/interfaces.ts +++ b/packages/web-components/fast-element/src/interfaces.ts @@ -216,7 +216,7 @@ export const enum Message { invalidKey = 1511, noDefaultResolver = 1512, cyclicDependency = 1513, - connectUpdateRequiresController = 1514 + connectUpdateRequiresController = 1514, } /**