Skip to content

Commit

Permalink
add define export for custom element registration
Browse files Browse the repository at this point in the history
  • Loading branch information
keithamus committed Nov 23, 2022
1 parent 11b35f5 commit 344cef3
Show file tree
Hide file tree
Showing 6 changed files with 120 additions and 48 deletions.
12 changes: 12 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,18 @@
"dist",
"custom-elements.json"
],
"exports": {
".": "./dist/index.js",
"./define": "./dist/index.js",
"./relative-time": "./dist/relative-time-element.js",
"./relative-time/define": "./dist/relative-time-element-define.js",
"./local-time": "./dist/local-time-element.js",
"./local-time/define": "./dist/local-time-element-define.js",
"./time-ago": "./dist/time-ago-element.js",
"./time-ago/define": "./dist/time-ago-element-define.js",
"./time-until": "./dist/time-until-element.js",
"./time-until/define": "./dist/time-until-element-define.js"
},
"scripts": {
"clean": "rm -rf dist",
"lint": "eslint . --ext .js,.ts && tsc --noEmit",
Expand Down
52 changes: 4 additions & 48 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -1,50 +1,6 @@
import LocalTimeElement from './local-time-element.js'
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
}
}
import LocalTimeElement from './local-time-element-define.js'
import RelativeTimeElement from './relative-time-element-define.js'
import TimeAgoElement from './time-ago-element-define.js'
import TimeUntilElement from './time-until-element-define.js'

export {LocalTimeElement, RelativeTimeElement, TimeAgoElement, TimeUntilElement}
26 changes: 26 additions & 0 deletions src/local-time-element-define.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import LocalTimeElement from './local-time-element.js'

const root = (typeof globalThis !== 'undefined' ? globalThis : window) as typeof window
try {
customElements.define('local-time', LocalTimeElement)
root.LocalTimeElement = LocalTimeElement
} catch (e: unknown) {
if (
!(root.DOMException && e instanceof DOMException && e.name === 'NotSupportedError') &&
!(e instanceof ReferenceError)
) {
throw e
}
}

declare global {
interface Window {
LocalTimeElement: typeof LocalTimeElement
}
interface HTMLElementTagNameMap {
'local-time': LocalTimeElement
}
}

export default LocalTimeElement
export * from './local-time-element.js'
26 changes: 26 additions & 0 deletions src/relative-time-element-define.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import RelativeTimeElement from './relative-time-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 (
!(root.DOMException && e instanceof DOMException && e.name === 'NotSupportedError') &&
!(e instanceof ReferenceError)
) {
throw e
}
}

declare global {
interface Window {
RelativeTimeElement: typeof RelativeTimeElement
}
interface HTMLElementTagNameMap {
'relative-time': RelativeTimeElement
}
}

export default RelativeTimeElement
export * from './relative-time-element.js'
26 changes: 26 additions & 0 deletions src/time-ago-element-define.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import TimeAgoElement from './time-ago-element.js'

const root = (typeof globalThis !== 'undefined' ? globalThis : window) as typeof window
try {
customElements.define('time-ago', TimeAgoElement)
root.TimeAgoElement = TimeAgoElement
} catch (e: unknown) {
if (
!(root.DOMException && e instanceof DOMException && e.name === 'NotSupportedError') &&
!(e instanceof ReferenceError)
) {
throw e
}
}

declare global {
interface Window {
TimeAgoElement: typeof TimeAgoElement
}
interface HTMLElementTagNameMap {
'time-ago': TimeAgoElement
}
}

export default TimeAgoElement
export * from './time-ago-element.js'
26 changes: 26 additions & 0 deletions src/time-until-element-define.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import TimeUntilElement from './time-until-element.js'

const root = (typeof globalThis !== 'undefined' ? globalThis : window) as typeof window
try {
customElements.define('time-until', TimeUntilElement)
root.TimeUntilElement = TimeUntilElement
} catch (e: unknown) {
if (
!(root.DOMException && e instanceof DOMException && e.name === 'NotSupportedError') &&
!(e instanceof ReferenceError)
) {
throw e
}
}

declare global {
interface Window {
TimeUntilElement: typeof TimeUntilElement
}
interface HTMLElementTagNameMap {
'time-until': TimeUntilElement
}
}

export default TimeUntilElement
export * from './time-until-element.js'

0 comments on commit 344cef3

Please sign in to comment.