diff --git a/.changeset/little-spoons-walk.md b/.changeset/little-spoons-walk.md new file mode 100644 index 000000000..b21f3d708 --- /dev/null +++ b/.changeset/little-spoons-walk.md @@ -0,0 +1,5 @@ +--- +"@apollo-elements/core": patch +--- + +Fixes the type of `attributeChangedCallback` for generic Custom Elements. [Per the HTML specification](https://html.spec.whatwg.org/multipage/custom-elements.html#custom-element-reactions), attributeChangedCallback takes a fourth parameter, the attribute's namespace. diff --git a/.changeset/pre.json b/.changeset/pre.json new file mode 100644 index 000000000..5e32e52be --- /dev/null +++ b/.changeset/pre.json @@ -0,0 +1,24 @@ +{ + "mode": "exit", + "tag": "next", + "initialVersions": { + "@apollo-elements/atomico": "1.0.0", + "@apollo-elements/components": "2.0.0", + "@apollo-elements/core": "1.0.0", + "@apollo-elements/create": "3.0.3", + "@apollo-elements/fast": "2.0.0", + "@apollo-elements/gluon": "4.0.0", + "@apollo-elements/haunted": "2.0.0", + "@apollo-elements/hybrids": "4.0.0", + "@apollo-elements/lit-apollo": "4.0.0", + "@apollo-elements/mixins": "4.0.0", + "@apollo-elements/polymer": "4.0.0", + "@apollo-elements/cem-preset": "0.0.0", + "esbuild-plugin-monorepo-resolve": "0.0.0", + "rocket-preset-apollo-elements": "0.0.0", + "@apollo-elements/test": "1.3.0" + }, + "changesets": [ + "unlucky-apes-tease" + ] +} diff --git a/.changeset/unlucky-apes-tease.md b/.changeset/unlucky-apes-tease.md new file mode 100644 index 000000000..fb0ed6ca7 --- /dev/null +++ b/.changeset/unlucky-apes-tease.md @@ -0,0 +1,19 @@ +--- +"@apollo-elements/core": patch +--- + +`ApolloQueryController` will stop polling when it's host disconnects. + +This is technically a breaking change if you relied on the previous behaviour. You can continue to poll by maintaining a reference to the controller and calling `startPolling` after disconnecting the component. + +```js +element.queryController = new ApolloQueryController(element, MyQuery, { + pollInterval: 1000 +}); + +const controller = element.queryController; + +element.remove(); // NEW: controller will now stop polling + +controller.startPolling(1000); +``` diff --git a/packages/atomico/CHANGELOG.md b/packages/atomico/CHANGELOG.md index c3ae5fb58..930a89e61 100644 --- a/packages/atomico/CHANGELOG.md +++ b/packages/atomico/CHANGELOG.md @@ -1,5 +1,12 @@ # @apollo-elements/atomico +## 1.0.1-next.0 + +### Patch Changes + +- Updated dependencies [31b95bc] + - @apollo-elements/core@1.0.1-next.0 + ## 1.0.0 ### Major Changes diff --git a/packages/atomico/package.json b/packages/atomico/package.json index 7dc6fa62b..763f1462d 100644 --- a/packages/atomico/package.json +++ b/packages/atomico/package.json @@ -1,6 +1,6 @@ { "name": "@apollo-elements/atomico", - "version": "1.0.0", + "version": "1.0.1-next.0", "description": "👩‍🚀 Atomico Hooks for Apollo GraphQL 🌛", "main": "index.js", "module": "index.js", @@ -54,7 +54,7 @@ "license": "ISC", "homepage": "https://apolloelements.dev/api/libraries/atomico/", "dependencies": { - "@apollo-elements/core": "^1.0.0", + "@apollo-elements/core": "^1.0.1-next.0", "@atomico/hooks": "^3.10.5", "atomico": "^1.26.1" }, diff --git a/packages/atomico/useQuery.test.ts b/packages/atomico/useQuery.test.ts index 37445b398..5ddb39230 100644 --- a/packages/atomico/useQuery.test.ts +++ b/packages/atomico/useQuery.test.ts @@ -1,9 +1,10 @@ import type { ApolloQueryController } from '@apollo-elements/core'; -import type { +import { ApolloClient, ApolloError, NetworkStatus, NormalizedCacheObject, + ObservableQuery, TypedDocumentNode, } from '@apollo/client/core'; @@ -18,7 +19,14 @@ import { useQuery } from './useQuery'; import { aTimeout, defineCE, expect, nextFrame } from '@open-wc/testing'; import { sendKeys } from '@web/test-runner-commands'; -import { assertType, resetMessages, setupClient, teardownClient } from '@apollo-elements/test'; +import { + assertType, + makeClient, + nextNAsync, + resetMessages, + setupClient, + teardownClient, +} from '@apollo-elements/test'; import { spy, useFakeTimers, SinonFakeTimers, SinonSpy } from 'sinon'; @@ -36,16 +44,8 @@ describe('[atomico] useQuery', function() { describe('with HelloQuery and a jaunty little template', function() { let element: HTMLElement & { updated: Promise; }; - let refetchSpy: SinonSpy; - - let startPolling: ApolloQueryController['startPolling']; - let stopPolling: ApolloQueryController['stopPolling']; let executeQuery: ApolloQueryController['executeQuery']; - afterEach(function() { - refetchSpy?.restore?.(); - }); - beforeEach(async function define() { function Hello() { const con = useQuery(S.HelloQuery); @@ -53,8 +53,7 @@ describe('[atomico] useQuery', function() { const { data, error, loading } = con; useEffect(() => { - ({ executeQuery, stopPolling, startPolling } = con); - refetchSpy = spy(con, 'refetch'); + ({ executeQuery } = con); }, [con]); return html` @@ -76,30 +75,6 @@ describe('[atomico] useQuery', function() { beforeEach(nextFrame); - describe('calling startPolling then stopPolling', function() { - let clock: SinonFakeTimers; - - beforeEach(() => clock = useFakeTimers()); - afterEach(() => clock.restore()); - - beforeEach(() => startPolling(1000)); - - beforeEach(() => clock.tick(3500)); - - it('refetches', function() { - expect(refetchSpy).to.have.been.calledThrice; - }); - - describe('then stopPolling', function() { - beforeEach(() => stopPolling()); - beforeEach(() => clock.tick(5000)); - - it('stops calling refetch', function() { - expect(refetchSpy).to.have.been.calledThrice; - }); - }); - }); - describe('calling executeQuery', function() { beforeEach(async function() { await executeQuery({ @@ -469,6 +444,51 @@ describe('[atomico] useQuery', function() { }); }); }); + + describe('polling', function() { + let clock: SinonFakeTimers; + let element: HTMLElement & { updated: Promise; }; + let pollSpy: SinonSpy; + let startPolling: ApolloQueryController['startPolling']; + let stopPolling: ApolloQueryController['stopPolling']; + + beforeEach(teardownClient); + beforeEach(() => clock = useFakeTimers(new Date())); + + beforeEach(async function define() { + const Component = defineCE(c(function Poller() { + const con = useQuery(S.HelloQuery, { client: makeClient(), noAutoSubscribe: true }); + useEffect(() => { + ({ stopPolling, startPolling } = con); + pollSpy = spy(ObservableQuery.prototype, 'reobserve'); + }, [con]); + return html`${JSON.stringify(con.data ?? null)}`; + })); + element = fixture(html`<${Component}>`); + await element.updated; + }); + + afterEach(() => pollSpy?.restore?.()); + afterEach(() => clock.restore()); + + describe('calling startPolling then stopPolling', function() { + beforeEach(() => startPolling(1000)); + beforeEach(() => nextNAsync(clock, 2)); + + it('polls', function() { + expect(pollSpy).to.have.been.calledThrice; + }); + + describe('then stopPolling', function() { + beforeEach(() => stopPolling()); + beforeEach(() => nextNAsync(clock, 5)); + + it('stops polling', function() { + expect(pollSpy).to.have.been.calledThrice; + }); + }); + }); + }); }); type TypeCheckData = { a: 'a'; b: number }; @@ -477,7 +497,7 @@ type TypeCheckVars = { c: 'c'; d: number }; const TDN: TypedDocumentNode = gql`query TypedQuery($c: String, $d: Int) { a b }`; -function TDNTypeCheck() { +(function() { const { called, client, @@ -527,4 +547,4 @@ function TDNTypeCheck() { }, }); }); -} +}); diff --git a/packages/components/CHANGELOG.md b/packages/components/CHANGELOG.md index 8c56cdb1f..eb85c0fd3 100644 --- a/packages/components/CHANGELOG.md +++ b/packages/components/CHANGELOG.md @@ -1,5 +1,13 @@ # @apollo-elements/components +## 2.0.1-next.0 + +### Patch Changes + +- Updated dependencies [31b95bc] + - @apollo-elements/core@1.0.1-next.0 + - @apollo-elements/mixins@4.0.1-next.0 + ## 2.0.0 ### Major Changes diff --git a/packages/components/apollo-query.test.ts b/packages/components/apollo-query.test.ts index 712ef6bf9..bcfa52285 100644 --- a/packages/components/apollo-query.test.ts +++ b/packages/components/apollo-query.test.ts @@ -8,7 +8,7 @@ import { spy, useFakeTimers, SinonFakeTimers, SinonSpy } from 'sinon'; import { html } from 'lit/static-html.js'; -import { setupClient, teardownClient } from '@apollo-elements/test'; +import { nextNAsync, setupClient, teardownClient } from '@apollo-elements/test'; import './apollo-query'; @@ -330,19 +330,19 @@ describe('[components] ', function describeApolloQuery() { }); describe('then calling startPolling(1000)', function() { beforeEach(() => { clock = useFakeTimers(); }); - beforeEach(() => spy(element.controller, 'refetch')); - afterEach(() => (element.controller.refetch as SinonSpy).restore?.()); + beforeEach(() => spy(C.ObservableQuery.prototype, 'reobserve')); + afterEach(() => (C.ObservableQuery.prototype.reobserve as SinonSpy).restore?.()); afterEach(() => clock.restore()); beforeEach(function startPolling() { element.startPolling(1000); }); - beforeEach(() => { clock.tick(3500); }); - it('refetches', function() { - expect(element.controller.refetch).to.have.been.calledThrice; + beforeEach(() => nextNAsync(clock, 3)); + it('polls', function() { + expect(C.ObservableQuery.prototype.reobserve).to.have.been.calledThrice; }); describe('then stopPolling', function() { beforeEach(function stopPolling() { element.stopPolling(); }); - beforeEach(() => { clock.tick(3500); }); - it('stops calling refetch', function() { - expect(element.controller.refetch).to.have.been.calledThrice; + beforeEach(() => nextNAsync(clock, 5)); + it('stops polling', function() { + expect(C.ObservableQuery.prototype.reobserve).to.have.been.calledThrice; }); }); }); diff --git a/packages/components/package.json b/packages/components/package.json index 895dc8e6e..3cc673274 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -1,6 +1,6 @@ { "name": "@apollo-elements/components", - "version": "2.0.0", + "version": "2.0.1-next.0", "description": "👩‍🚀🌛 Web component helpers for Apollo GraphQL 🚀👨‍🚀", "type": "module", "main": "index.js", @@ -58,8 +58,8 @@ }, "homepage": "https://apolloelements.dev/api/components/", "dependencies": { - "@apollo-elements/core": "^1.0.0", - "@apollo-elements/mixins": "^4.0.0", + "@apollo-elements/core": "^1.0.1-next.0", + "@apollo-elements/mixins": "^4.0.1-next.0", "@apollo/client": "^3.3.21 || ^3.4.0-rc", "stampino": "^0.6.2", "tslib": "^2.3.0" diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 1e7b37aec..ccb859626 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -1,5 +1,25 @@ # @apollo-elements/core +## 1.0.1-next.0 + +### Patch Changes + +- 31b95bc: `ApolloQueryController` will stop polling when it's host disconnects. + + This is technically a breaking change if you relied on the previous behaviour. You can continue to poll by maintaining a reference to the controller and calling `startPolling` after disconnecting the component. + + ```js + element.queryController = new ApolloQueryController(element, MyQuery, { + pollInterval: 1000 + }); + + const controller = element.queryController; + + element.remove(); // NEW: controller will now stop polling + + controller.startPolling(1000); + ``` + ## 1.0.0 ### Major Changes diff --git a/packages/core/apollo-query-controller.test.ts b/packages/core/apollo-query-controller.test.ts index 9fa6eacf8..46c98a40b 100644 --- a/packages/core/apollo-query-controller.test.ts +++ b/packages/core/apollo-query-controller.test.ts @@ -1,4 +1,5 @@ import type { TypedDocumentNode, ResultOf } from '@graphql-typed-document-node/core'; +import type { SchemaLink } from '@apollo/client/link/schema'; import * as S from '@apollo-elements/test/schema'; @@ -14,9 +15,9 @@ import { ApolloQueryController } from './apollo-query-controller'; import { aTimeout, defineCE, expect, fixture, nextFrame } from '@open-wc/testing'; -import { resetMessages, setupClient, teardownClient } from '@apollo-elements/test'; +import { nextNAsync, resetMessages, setupClient, teardownClient } from '@apollo-elements/test'; -import { match, spy, useFakeTimers, SinonFakeTimers, SinonSpy } from 'sinon'; +import { match, spy, useFakeTimers, SinonSpy, SinonFakeTimers } from 'sinon'; describe('[core] ApolloQueryController', function() { describe('on a ReactiveElement that mirrors props', function() { @@ -681,16 +682,29 @@ describe('[core] ApolloQueryController', function() { }); }); - describe('calling startPolling', function() { + describe('calling startPolling', function(this: Mocha.Suite) { + beforeEach(() => { + spy((element.query.client!.link as SchemaLink), 'request'); + }); + + afterEach(() => { + ((element.query.client!.link as SchemaLink).request as SinonSpy).restore(); + }); + let clock: SinonFakeTimers; beforeEach(() => clock = useFakeTimers()); + beforeEach(teardownClient); + beforeEach(setupClient); afterEach(() => clock.restore()); - beforeEach(function startPolling() { element.query.startPolling(1000); }); - beforeEach(() => clock.tick(3500)); + beforeEach(function startPolling() { + element.query.startPolling(1000); + }); - it('refetches', function() { - expect(element.query.refetch).to.have.been.calledThrice; + beforeEach(() => nextNAsync(clock, 3)); + + it('polls', function() { + expect((element.query.client!.link as SchemaLink).request).to.have.been.calledThrice; }); describe('then stopPolling', function() { @@ -698,10 +712,24 @@ describe('[core] ApolloQueryController', function() { element.query.stopPolling(); }); - beforeEach(() => clock.tick(3500)); + beforeEach(() => nextNAsync(clock, 3)); + + it('stops polling', function() { + expect((element.query.client!.link as SchemaLink).request).to.have.been.calledThrice; + }); + }); + + describe('then removing the element', function() { + let client: typeof element.query.client; + beforeEach(function stopPolling() { + ({ client } = element.query); + element.remove(); + }); + + beforeEach(() => nextNAsync(clock, 3)); - it('stops calling refetch', function() { - expect(element.query.refetch).to.have.been.calledThrice; + it('stops polling', function() { + expect((client!.link as SchemaLink).request).to.have.been.calledThrice; }); }); }); diff --git a/packages/core/apollo-query-controller.ts b/packages/core/apollo-query-controller.ts index 1b47599e9..c04f059b9 100644 --- a/packages/core/apollo-query-controller.ts +++ b/packages/core/apollo-query-controller.ts @@ -41,8 +41,6 @@ export class ApolloQueryController, Variables>; - private pollingInterval?: number; - /** @summary Options to customize the query and to interface with the controller. */ declare options: ApolloQueryControllerOptions; @@ -115,6 +113,7 @@ export class ApolloQueryController { - this.refetch(); - }, ms); + if (!this.observableQuery) + this.subscribe(); + this.observableQuery?.startPolling?.(ms); } /** * @summary Stop polling this query */ @bound public stopPolling(): void { - clearInterval(this.pollingInterval); + this.observableQuery?.stopPolling?.(); } } diff --git a/packages/core/package.json b/packages/core/package.json index 61b383975..a3c9edac2 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@apollo-elements/core", - "version": "1.0.0", + "version": "1.0.1-next.0", "description": "👩‍🚀🌛 Core Classes for Apollo Elements 🚀👨‍🚀", "main": "index.js", "module": "index.js", diff --git a/packages/core/types.ts b/packages/core/types.ts index a62dcf2aa..235fbd60a 100644 --- a/packages/core/types.ts +++ b/packages/core/types.ts @@ -102,8 +102,14 @@ export declare class CustomElement extends HTMLElement { * @param name name of the observed attribute * @param oldValue previous value of the attribute. null if it was nonexistent * @param newValue current value of the attribute. null if removed. - */ - attributeChangedCallback?(name: string, oldValue: string, newValue: string): void; + * @param namespace Attribute namespace. + */ + attributeChangedCallback?( + name: string, + old: string|null, + value: string|null, + namespace: string|null + ): void; /** * Called when the element is adopted to a document. diff --git a/packages/fast/CHANGELOG.md b/packages/fast/CHANGELOG.md index 8661bf1c3..716a1dd29 100644 --- a/packages/fast/CHANGELOG.md +++ b/packages/fast/CHANGELOG.md @@ -1,5 +1,13 @@ # @apollo-elements/fast +## 2.0.1-next.0 + +### Patch Changes + +- Updated dependencies [31b95bc] + - @apollo-elements/core@1.0.1-next.0 + - @apollo-elements/mixins@4.0.1-next.0 + ## 2.0.0 ### Major Changes diff --git a/packages/fast/bases/apollo-query.test.ts b/packages/fast/bases/apollo-query.test.ts index c2bc6dae1..26f3179a6 100644 --- a/packages/fast/bases/apollo-query.test.ts +++ b/packages/fast/bases/apollo-query.test.ts @@ -1,10 +1,10 @@ -import type * as C from '@apollo/client/core'; - import type * as I from '@apollo-elements/core/types'; import type { ApolloQueryElement } from '@apollo-elements/core'; -import { makeClient, SetupOptions } from '@apollo-elements/test'; +import * as C from '@apollo/client/core'; + +import { makeClient, nextNAsync, SetupOptions } from '@apollo-elements/test'; import { fixture, expect } from '@open-wc/testing'; @@ -109,27 +109,25 @@ describe('[FAST] ApolloQuery', function() { element = await fixture(`<${name}>`); element.client = makeClient(); }); - beforeEach(() => spy(element.controller, 'refetch')); + beforeEach(() => spy(C.ObservableQuery.prototype, 'reobserve')); beforeEach(() => { clock = useFakeTimers(); }); afterEach(() => clock.restore()); afterEach(() => { - (element.controller.refetch as SinonSpy).restore?.(); + (C.ObservableQuery.prototype.reobserve as SinonSpy).restore?.(); }); describe('calling startPolling(1000)', function() { beforeEach(function startPolling() { element.startPolling(1000); }); - beforeEach(() => { - clock.tick(3500); - }); + beforeEach(() => nextNAsync(clock, 3)); it('refetches', function() { - expect(element.controller.refetch).to.have.been.calledThrice; + expect(C.ObservableQuery.prototype.reobserve).to.have.been.calledThrice; }); describe('then stopPolling', function() { beforeEach(function stopPolling() { element.stopPolling(); }); - beforeEach(() => { clock.tick(3500); }); + beforeEach(() => nextNAsync(clock, 5)); it('stops calling refetch', function() { - expect(element.controller.refetch).to.have.been.calledThrice; + expect(C.ObservableQuery.prototype.reobserve).to.have.been.calledThrice; }); }); }); diff --git a/packages/fast/package.json b/packages/fast/package.json index 1e347b1b7..294730b7c 100644 --- a/packages/fast/package.json +++ b/packages/fast/package.json @@ -1,6 +1,6 @@ { "name": "@apollo-elements/fast", - "version": "2.0.0", + "version": "2.0.1-next.0", "description": "👩‍🚀🌛 FastElements for Apollo GraphQL 🚀👨‍🚀", "main": "index.js", "module": "index.js", @@ -68,8 +68,8 @@ }, "homepage": "https://apolloelements.dev/api/libraries/fast/", "dependencies": { - "@apollo-elements/core": "^1.0.0", - "@apollo-elements/mixins": "^4.0.0", + "@apollo-elements/core": "^1.0.1-next.0", + "@apollo-elements/mixins": "^4.0.1-next.0", "@microsoft/fast-element": "^1.4.0", "tslib": "^2.3.0" }, diff --git a/packages/gluon/CHANGELOG.md b/packages/gluon/CHANGELOG.md index 7a38b4920..e83e504cb 100644 --- a/packages/gluon/CHANGELOG.md +++ b/packages/gluon/CHANGELOG.md @@ -1,5 +1,11 @@ # @apollo-elements/gluon +## 4.0.1-next.0 + +### Patch Changes + +- @apollo-elements/mixins@4.0.1-next.0 + ## 4.0.0 ### Major Changes diff --git a/packages/gluon/package.json b/packages/gluon/package.json index 1e8a2e175..bf404f41b 100644 --- a/packages/gluon/package.json +++ b/packages/gluon/package.json @@ -1,6 +1,6 @@ { "name": "@apollo-elements/gluon", - "version": "4.0.0", + "version": "4.0.1-next.0", "description": "👩‍🚀🌛 Gluon Elements for Apollo GraphQL 🚀👨‍🚀", "main": "index.js", "module": "index.js", @@ -59,7 +59,7 @@ }, "homepage": "https://apolloelements.dev/api/libraries/gluon/", "dependencies": { - "@apollo-elements/mixins": "^4.0.0", + "@apollo-elements/mixins": "^4.0.1-next.0", "@gluon/gluon": ">= 2", "tslib": "^2.3.0" }, diff --git a/packages/haunted/CHANGELOG.md b/packages/haunted/CHANGELOG.md index ada233071..f986a6e4d 100644 --- a/packages/haunted/CHANGELOG.md +++ b/packages/haunted/CHANGELOG.md @@ -1,5 +1,12 @@ # @apollo-elements/haunted +## 2.0.1-next.0 + +### Patch Changes + +- Updated dependencies [31b95bc] + - @apollo-elements/core@1.0.1-next.0 + ## 2.0.0 ### Major Changes diff --git a/packages/haunted/package.json b/packages/haunted/package.json index 79bd1d8fd..e307db726 100644 --- a/packages/haunted/package.json +++ b/packages/haunted/package.json @@ -1,6 +1,6 @@ { "name": "@apollo-elements/haunted", - "version": "2.0.0", + "version": "2.0.1-next.0", "description": "👩‍🚀 Haunted Hooks for Apollo GraphQL 🌛", "main": "index.js", "module": "index.js", @@ -54,7 +54,7 @@ "license": "ISC", "homepage": "https://apolloelements.dev/api/libraries/haunted/", "dependencies": { - "@apollo-elements/core": "^1.0.0", + "@apollo-elements/core": "^1.0.1-next.0", "haunted": "^4.8.1" }, "customElements": "custom-elements.json" diff --git a/packages/haunted/useQuery.test.ts b/packages/haunted/useQuery.test.ts index c09695951..c402c5edb 100644 --- a/packages/haunted/useQuery.test.ts +++ b/packages/haunted/useQuery.test.ts @@ -1,8 +1,9 @@ -import type { +import { ApolloClient, ApolloError, NetworkStatus, NormalizedCacheObject, + ObservableQuery, TypedDocumentNode, } from '@apollo/client/core'; @@ -17,7 +18,13 @@ import { component, useState } from 'haunted'; import { aTimeout, defineCE, expect, fixture, nextFrame } from '@open-wc/testing'; import { sendKeys } from '@web/test-runner-commands'; -import { assertType, resetMessages, setupClient, teardownClient } from '@apollo-elements/test'; +import { + assertType, + nextNAsync, + resetMessages, + setupClient, + teardownClient, +} from '@apollo-elements/test'; import { spy, useFakeTimers, SinonFakeTimers, SinonSpy } from 'sinon'; @@ -31,18 +38,20 @@ describe('[haunted] useQuery', function() { describe('with HelloQuery and a jaunty little template', function() { let element: HTMLElement; - let refetchSpy: SinonSpy; + let pollSpy: SinonSpy; + + beforeEach(function() { + pollSpy = spy(ObservableQuery.prototype, 'reobserve'); + }); afterEach(function() { - refetchSpy?.restore?.(); + pollSpy?.restore?.(); }); beforeEach(async function define() { function Hello() { const c = useQuery(S.HelloQuery); - refetchSpy ??= spy(c, 'refetch'); - return html`
@@ -80,18 +89,18 @@ describe('[haunted] useQuery', function() { beforeEach(startPolling); - beforeEach(() => clock.tick(3500)); + beforeEach(() => nextNAsync(clock, 2)); - it('refetches', function() { - expect(refetchSpy).to.have.been.calledThrice; + it('polls', function() { + expect(pollSpy).to.have.been.calledThrice; }); describe('then stopPolling', function() { beforeEach(stopPolling); - beforeEach(() => clock.tick(5000)); + beforeEach(() => nextNAsync(clock, 5)); - it('stops calling refetch', function() { - expect(refetchSpy).to.have.been.calledThrice; + it('stops polling', function() { + expect(pollSpy).to.have.been.calledThrice; }); }); }); diff --git a/packages/hybrids/CHANGELOG.md b/packages/hybrids/CHANGELOG.md index ef0328125..67978d983 100644 --- a/packages/hybrids/CHANGELOG.md +++ b/packages/hybrids/CHANGELOG.md @@ -1,5 +1,12 @@ # @apollo-elements/hybrids +## 4.0.1-next.0 + +### Patch Changes + +- Updated dependencies [31b95bc] + - @apollo-elements/core@1.0.1-next.0 + ## 4.0.0 ### Major Changes diff --git a/packages/hybrids/package.json b/packages/hybrids/package.json index 7e5d9cd25..68a6d76dd 100644 --- a/packages/hybrids/package.json +++ b/packages/hybrids/package.json @@ -1,6 +1,6 @@ { "name": "@apollo-elements/hybrids", - "version": "4.0.0", + "version": "4.0.1-next.0", "description": "👩‍🚀 Hybrids Starter Cultures for Apollo GraphQL 🌛", "main": "index.js", "module": "index.js", @@ -54,7 +54,7 @@ "license": "ISC", "homepage": "https://apolloelements.dev/api/libraries/hybrids", "dependencies": { - "@apollo-elements/core": "^1.0.0", + "@apollo-elements/core": "^1.0.1-next.0", "@lit/reactive-element": "^1.0.0-rc.2", "hybrids": "^5.4.0", "tslib": "^2.3.0" diff --git a/packages/lit-apollo/CHANGELOG.md b/packages/lit-apollo/CHANGELOG.md index fe0b7bc59..8d8868f0a 100644 --- a/packages/lit-apollo/CHANGELOG.md +++ b/packages/lit-apollo/CHANGELOG.md @@ -1,5 +1,12 @@ # @apollo-elements/lit-apollo +## 4.0.1-next.0 + +### Patch Changes + +- Updated dependencies [31b95bc] + - @apollo-elements/core@1.0.1-next.0 + ## 4.0.0 ### Major Changes diff --git a/packages/lit-apollo/apollo-query.test.ts b/packages/lit-apollo/apollo-query.test.ts index be070afc9..7f0562951 100644 --- a/packages/lit-apollo/apollo-query.test.ts +++ b/packages/lit-apollo/apollo-query.test.ts @@ -99,7 +99,10 @@ describe('[lit-apollo] ApolloQuery', function() { }); it('polling', async function() { - class Test extends ApolloQuery { } + class Test extends ApolloQuery { + client = makeClient(); + query = S.NullableParamQuery; + } const tagName = defineCE(Test); const tag = unsafeStatic(tagName); const element = await fixture(html`<${tag}>`); diff --git a/packages/lit-apollo/package.json b/packages/lit-apollo/package.json index 184dcd5fc..02cc377f8 100644 --- a/packages/lit-apollo/package.json +++ b/packages/lit-apollo/package.json @@ -1,6 +1,6 @@ { "name": "@apollo-elements/lit-apollo", - "version": "4.0.0", + "version": "4.0.1-next.0", "description": "👩‍🚀🌛 Lit meets Apollo GraphQL 🚀👨‍🚀", "main": "index.js", "module": "index.js", @@ -59,7 +59,7 @@ }, "homepage": "https://apolloelements.dev/api/libraries/lit-apollo/", "dependencies": { - "@apollo-elements/core": "^1.0.0", + "@apollo-elements/core": "^1.0.1-next.0", "lit": "^2.0.0-rc.2", "tslib": "^2.3.0" }, diff --git a/packages/mixins/CHANGELOG.md b/packages/mixins/CHANGELOG.md index 26ecb814a..5dd785315 100644 --- a/packages/mixins/CHANGELOG.md +++ b/packages/mixins/CHANGELOG.md @@ -1,5 +1,12 @@ # @apollo-elements/mixins +## 4.0.1-next.0 + +### Patch Changes + +- Updated dependencies [31b95bc] + - @apollo-elements/core@1.0.1-next.0 + ## 4.0.0 ### Major Changes diff --git a/packages/mixins/controller-host-mixin.test.ts b/packages/mixins/controller-host-mixin.test.ts index a2b01e915..843de9152 100644 --- a/packages/mixins/controller-host-mixin.test.ts +++ b/packages/mixins/controller-host-mixin.test.ts @@ -190,3 +190,9 @@ describe('ControllerHostMixin', function() { }); }); }); + +import { PolymerElement } from '@polymer/polymer'; +import { FASTElement } from '@microsoft/fast-element'; + +class TypeCheckPolymerElement extends ControllerHostMixin(PolymerElement) {} +class TypeCheckFASTElement extends ControllerHostMixin(FASTElement) {} diff --git a/packages/mixins/package.json b/packages/mixins/package.json index b6f62bcff..8df3556f1 100644 --- a/packages/mixins/package.json +++ b/packages/mixins/package.json @@ -1,6 +1,6 @@ { "name": "@apollo-elements/mixins", - "version": "4.0.0", + "version": "4.0.1-next.0", "description": "👩‍🚀🌛 Custom Element class mixins for Apollo GraphQL 🚀👨‍🚀", "main": "index.js", "module": "index.js", @@ -58,7 +58,7 @@ }, "homepage": "https://apolloelements.dev/api/libraries/mixins/", "dependencies": { - "@apollo-elements/core": "^1.0.0", + "@apollo-elements/core": "^1.0.1-next.0", "@apollo/client": "^3.3.21 || ^3.4.0-rc", "@open-wc/dedupe-mixin": "^1.3.0", "tslib": "^2.3.0" diff --git a/packages/polymer/CHANGELOG.md b/packages/polymer/CHANGELOG.md index ee7fb3fc5..12e27f131 100644 --- a/packages/polymer/CHANGELOG.md +++ b/packages/polymer/CHANGELOG.md @@ -1,5 +1,13 @@ # @apollo-elements/polymer +## 4.0.1-next.0 + +### Patch Changes + +- Updated dependencies [31b95bc] + - @apollo-elements/core@1.0.1-next.0 + - @apollo-elements/mixins@4.0.1-next.0 + ## 4.0.0 ### Major Changes diff --git a/packages/polymer/package.json b/packages/polymer/package.json index 12e7f1457..4aa8ed10b 100644 --- a/packages/polymer/package.json +++ b/packages/polymer/package.json @@ -1,6 +1,6 @@ { "name": "@apollo-elements/polymer", - "version": "4.0.0", + "version": "4.0.1-next.0", "description": "👩‍🚀🌛 Polymer Elements for Apollo GraphQL 🚀👨‍🚀", "main": "index.js", "module": "index.js", @@ -58,8 +58,8 @@ }, "homepage": "https://apolloelements.dev/api/libraries/polymer/", "dependencies": { - "@apollo-elements/core": "^1.0.0", - "@apollo-elements/mixins": "^4.0.0", + "@apollo-elements/core": "^1.0.1-next.0", + "@apollo-elements/mixins": "^4.0.1-next.0", "tslib": "^2.3.0" }, "customElements": "custom-elements.json" diff --git a/test/client.ts b/test/client.ts index 419cf907e..972b3688a 100644 --- a/test/client.ts +++ b/test/client.ts @@ -35,7 +35,7 @@ async function nullableParam(_: any, { nullable = 'Hello World', delay }: S.Null return { nullable }; } -const schema = makeExecutableSchema({ +const makeSchema = () => makeExecutableSchema({ typeDefs: TestSchema.loc!.source.body, resolvers: { Message: { @@ -147,7 +147,7 @@ export function makeClient({ connectToDevTools = false } = {}): ApolloClient { + for (const _ of Array.from({ length })) + await clock.nextAsync(); +}