diff --git a/src/index.ts b/src/index.ts index f57f30f..b1de0f7 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,4 +3,48 @@ import RelativeTimeElement from './relative-time-element.js' import TimeAgoElement from './time-ago-element.js' import TimeUntilElement from './time-until-element.js' +const root = (typeof globalThis !== 'undefined' ? globalThis : window) as typeof window +try { + customElements.define('relative-time', RelativeTimeElement) + root.RelativeTimeElement = RelativeTimeElement +} catch (e: unknown) { + if (!(e instanceof DOMException && e.name === 'NotSupportedError') && !(e instanceof ReferenceError)) throw e +} + +try { + customElements.define('local-time', LocalTimeElement) + root.LocalTimeElement = LocalTimeElement +} catch (e: unknown) { + if (!(e instanceof DOMException && e.name === 'NotSupportedError') && !(e instanceof ReferenceError)) throw e +} + +try { + customElements.define('time-ago', TimeAgoElement) + root.TimeAgoElement = TimeAgoElement +} catch (e: unknown) { + if (!(e instanceof DOMException && e.name === 'NotSupportedError') && !(e instanceof ReferenceError)) throw e +} + +try { + customElements.define('time-until', TimeUntilElement) + root.TimeUntilElement = TimeUntilElement +} catch (e: unknown) { + if (!(e instanceof DOMException && e.name === 'NotSupportedError') && !(e instanceof ReferenceError)) throw e +} + +declare global { + interface Window { + RelativeTimeElement: typeof RelativeTimeElement + LocalTimeElement: typeof LocalTimeElement + TimeAgoElement: typeof TimeAgoElement + TimeUntilElement: typeof TimeUntilElement + } + interface HTMLElementTagNameMap { + 'relative-time': RelativeTimeElement + 'local-time': LocalTimeElement + 'time-ago': TimeAgoElement + 'time-until': TimeUntilElement + } +} + export {LocalTimeElement, RelativeTimeElement, TimeAgoElement, TimeUntilElement} diff --git a/src/local-time-element.ts b/src/local-time-element.ts index 956897c..3055c6d 100644 --- a/src/local-time-element.ts +++ b/src/local-time-element.ts @@ -28,22 +28,3 @@ export default class LocalTimeElement extends RelativeTimeElement { if (year === 'numeric' || year === '2-digit') return year } } - -// Public: LocalTimeElement constructor. -// -// var time = new LocalTimeElement() -// # => -// -if (!window.customElements.get('local-time')) { - window.LocalTimeElement = LocalTimeElement - window.customElements.define('local-time', LocalTimeElement) -} - -declare global { - interface Window { - LocalTimeElement: typeof LocalTimeElement - } - interface HTMLElementTagNameMap { - 'local-time': LocalTimeElement - } -} diff --git a/src/relative-time-element.ts b/src/relative-time-element.ts index 3c48216..7d91bd2 100644 --- a/src/relative-time-element.ts +++ b/src/relative-time-element.ts @@ -374,22 +374,3 @@ export default class RelativeTimeElement extends HTMLElement implements Intl.Dat } } } - -// Public: RelativeTimeElement constructor. -// -// var time = new RelativeTimeElement() -// # => -// -if (!window.customElements.get('relative-time')) { - window.RelativeTimeElement = RelativeTimeElement - window.customElements.define('relative-time', RelativeTimeElement) -} - -declare global { - interface Window { - RelativeTimeElement: typeof RelativeTimeElement - } - interface HTMLElementTagNameMap { - 'relative-time': RelativeTimeElement - } -} diff --git a/src/time-ago-element.ts b/src/time-ago-element.ts index c670b41..c022204 100644 --- a/src/time-ago-element.ts +++ b/src/time-ago-element.ts @@ -6,17 +6,3 @@ export default class TimeAgoElement extends RelativeTimeElement { return 'past' } } - -if (!window.customElements.get('time-ago')) { - window.TimeAgoElement = TimeAgoElement - window.customElements.define('time-ago', TimeAgoElement) -} - -declare global { - interface Window { - TimeAgoElement: typeof TimeAgoElement - } - interface HTMLElementTagNameMap { - 'time-ago': TimeAgoElement - } -} diff --git a/src/time-until-element.ts b/src/time-until-element.ts index 6ee58f2..be08fb7 100644 --- a/src/time-until-element.ts +++ b/src/time-until-element.ts @@ -6,17 +6,3 @@ export default class TimeUntilElement extends RelativeTimeElement { return 'future' } } - -if (!window.customElements.get('time-until')) { - window.TimeUntilElement = TimeUntilElement - window.customElements.define('time-until', TimeUntilElement) -} - -declare global { - interface Window { - TimeUntilElement: typeof TimeUntilElement - } - interface HTMLElementTagNameMap { - 'time-until': TimeUntilElement - } -} diff --git a/test/constructor.js b/test/constructor.js index 7750379..e80fd71 100644 --- a/test/constructor.js +++ b/test/constructor.js @@ -1,6 +1,5 @@ import {assert} from '@open-wc/testing' -import '../src/local-time-element.ts' -import '../src/relative-time-element.ts' +import '../src/index.ts' suite('constructor', function () { test('create local-time from document.createElement', function () { diff --git a/test/local-time.js b/test/local-time.js index a70934d..10079cd 100644 --- a/test/local-time.js +++ b/test/local-time.js @@ -1,5 +1,5 @@ import {assert} from '@open-wc/testing' -import '../src/local-time-element.ts' +import '../src/index.ts' suite('local-time', function () { let fixture diff --git a/test/relative-time.js b/test/relative-time.js index 0851329..2c42e50 100644 --- a/test/relative-time.js +++ b/test/relative-time.js @@ -1,5 +1,5 @@ import {assert} from '@open-wc/testing' -import RelativeTimeElement from '../src/relative-time-element.ts' +import {RelativeTimeElement} from '../src/index.ts' suite('relative-time', function () { let dateNow diff --git a/test/time-ago.js b/test/time-ago.js index 01ef85c..1abb9c6 100644 --- a/test/time-ago.js +++ b/test/time-ago.js @@ -1,5 +1,5 @@ import {assert} from '@open-wc/testing' -import '../src/time-ago-element.ts' +import '../src/index.ts' suite('time-ago', function () { let dateNow diff --git a/test/time-until.js b/test/time-until.js index 83b940d..ef9181f 100644 --- a/test/time-until.js +++ b/test/time-until.js @@ -1,5 +1,5 @@ import {assert} from '@open-wc/testing' -import '../src/time-until-element.ts' +import '../src/index.ts' suite('time-until', function () { test('always uses relative dates', function () { diff --git a/test/title-format.js b/test/title-format.js index db3d8e7..0f39c15 100644 --- a/test/title-format.js +++ b/test/title-format.js @@ -1,5 +1,5 @@ import {assert} from '@open-wc/testing' -import '../src/local-time-element.ts' +import '../src/index.ts' suite('title-format', function () { test('null getFormattedTitle if datetime is missing', function () {