diff --git a/docs/index.html b/docs/index.html index 42a52f4..2a8edbc 100644 --- a/docs/index.html +++ b/docs/index.html @@ -193,104 +193,6 @@

GitHub Feature Support Table

Base Objects & Functions

- - - - Blob Constructor - - -
!
-
5+
-
12+
-
4+
-
6+
-
11+
-
1.0+
- - - - - PerformanceObserver Constructor - - -
!
-
52+
-
79+
-
57+
-
11+
-
39+
-
6.0+
- - - - - Intl Constructor - - -
!
-
24+
-
12+
-
29+
-
10+
-
15+
-
1.5+
- - - - - MutationObserver Constructor - - -
!
-
26+
-
12+
-
14+
-
7+
-
15+
-
1.5+
- - - - - URLSearchParams Constructor - - -
!
-
49+
-
17+
-
29+
-
10.1+
-
36+
-
5.0+
- - - - - WebSocket Constructor - - -
!
-
4+
-
12+
-
11+
-
5+
-
12.1+
-
1.0+
- - - - - IntersectionObserver Constructor - - -
!
-
51+
-
15+
-
55+
-
12.1+
-
38+
-
5.0+
- @@ -307,87 +209,17 @@

GitHub Feature Support Table

-
- TextEncoder Constructor - - -
!
-
38+
-
79+
-
18+
-
10.1+
-
25+
-
3.0+
- - - - - TextDecoder Constructor + + HTMLDialogElement Constructor -
!
-
38+
-
79+
-
19+
-
10.1+
-
25+
-
3.0+
- - - - - customElements - - -
!
-
54+
-
79+
-
63+
-
10.1+
-
41+
-
6.0+
- - - - - HTMLDetailsElement Constructor - - -
!
-
10+
+
!
+
37+
79+
-
49+
-
6+
-
15+
-
1.0+
- - - - - AbortController Constructor - - -
!
-
66+
-
16+
-
57+
-
12.1+
-
53+
-
9.0+
- - - - - AbortSignal Constructor - - -
!
-
66+
-
16+
-
57+
-
11.1+
-
53+
-
9.0+
+
98+
+
24+
+
15.4+
+
4.0+
@@ -403,34 +235,6 @@

GitHub Feature Support Table

58+
10.0+
- - - - FormData.entries - - -
!
-
50+
-
18+
-
44+
-
11.1+
-
37+
-
5.0+
- - - - - Element.toggleAttribute - - -
!
-
69+
-
18+
-
63+
-
12+
-
56+
-
10.0+
- GitHub Feature Support Table String.replaceAll -
*
+
!
85+
85+
77+
@@ -507,34 +311,6 @@

GitHub Feature Support Table

71+
14.0+
- - - - AggregateError - - -
*
-
85+
-
85+
-
79+
-
14+
-
71+
-
14.0+
- - - - - Element.replaceChildren - - -
*
-
86+
-
86+
-
78+
-
14+
-
72+
-
14.0+
- GitHub Feature Support Table Promise.allSettled -
*
+
!
76+
79+
71+
@@ -557,7 +333,7 @@

GitHub Feature Support Table

Promise.any -
*
+
!
85+
85+
79+
@@ -565,9 +341,51 @@

GitHub Feature Support Table

71+
14+
- - -

Polyfilled Features

+ + + + String.prototype.at + + +
!
+
92+
+
92+
+
90+
+
15.4+
+
65+
+
16.0+
+ + + + + Array.prototype.at + + +
!
+
92+
+
92+
+
90+
+
15.4+
+
65+
+
16.0+
+ + + + + Object.hasOwn + + +
!
+
93+
+
93+
+
92+
+
15.4+
+
79+
+
17.0+
@@ -575,7 +393,7 @@

GitHub Feature Support Table

AbortSignal.abort -
*
+
!
93+
93+
88+
@@ -585,32 +403,92 @@

GitHub Feature Support Table

- - AbortSignal.timeout + + AggregateError -
*
-
103+
-
103+
-
100+
-
16+
-
89+
-
16+
+
!
+
85+
+
85+
+
79+
+
14+
+
71+
+
14.0+
- - Array.at + + BroadcastChannel -
*
+
!
+
54+
+
79+
+
38+
+
15.4+
+
41+
+
6.0+
+ + + + + Crypto.randomUUID + + +
!
92+
92+
-
90+
+
95+
15.4+
78+
16.0+
+ + + + Element.replaceChildren + + +
!
+
86+
+
86+
+
78+
+
14+
+
72+
+
14.0+
+ + + + + HTMLFormElement.requestSubmit + + +
!
+
76+
+
79+
+
75+
+
16+
+
63+
+
12.0+
+ + + +

Polyfilled Features

+ + + + + AbortSignal.timeout + + +
*
+
103+
+
103+
+
100+
+
16+
+
89+
+
16+
+ @@ -625,20 +503,6 @@

GitHub Feature Support Table

53+ †
9.0+ †
- - -
- Crypto.randomUUID - - -
*
-
92+
-
92+
-
95+
-
15.4+
-
78+
-
16.0+
- @@ -653,22 +517,6 @@

GitHub Feature Support Table

91+
20.0+
- - -
- EventTarget.addEventListener signal - - -
*
-
90+
-
90+
-
86+
-
15+
-
76+
-
15.0+
- @@ -683,34 +531,6 @@

GitHub Feature Support Table

63+ †
12.0+ †
- - -
- HTMLFormElement.requestSubmit - - -
*
-
76+
-
79+
-
75+
-
16+
-
63+
-
12.0+
- - - - - Object.hasOwn - - -
*
-
93+
-
93+
-
92+
-
15.4+
-
79+
-
17.0+
- @@ -725,36 +545,6 @@

GitHub Feature Support Table

34+
5.0+
- - -
- Array.findLast - - -
*
-
97+
-
97+
-
104+
-
15.4+
-
83+
-
18.0+
- - - - - Array.findLastIndex - - -
*
-
97+
-
97+
-
104+
-
15.4+
-
83+
-
18.0+
-

Native Syntax

diff --git a/package-lock.json b/package-lock.json index 525ecf4..b403a02 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2524,9 +2524,9 @@ "dev": true }, "node_modules/follow-redirects": { - "version": "1.14.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz", - "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==", + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", + "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==", "dev": true, "funding": [ { diff --git a/src/abortsignal-abort.ts b/src/abortsignal-abort.ts deleted file mode 100644 index fb8f8ab..0000000 --- a/src/abortsignal-abort.ts +++ /dev/null @@ -1,27 +0,0 @@ -export function abortSignalAbort(reason: unknown) { - const controller = new AbortController() - controller.abort(reason) - return controller.signal -} - -declare global { - interface AbortController { - abort(reason: unknown): void - } -} - -/*#__PURE__*/ -export function isSupported(): boolean { - return 'abort' in AbortSignal && typeof AbortSignal.abort === 'function' -} - -/*#__PURE__*/ -export function isPolyfilled(): boolean { - return AbortSignal.abort === abortSignalAbort -} - -export function apply(): void { - if (!isSupported()) { - AbortSignal.abort = abortSignalAbort - } -} diff --git a/src/array-findlast.ts b/src/array-findlast.ts deleted file mode 100644 index 516235e..0000000 --- a/src/array-findlast.ts +++ /dev/null @@ -1,26 +0,0 @@ -export function arrayFindLast( - this: T[], - pred: (this: T[], value: T, i: number, array: T[]) => boolean, - recv = this, -): T | void { - for (let i = this.length - 1; i >= 0; i -= 1) { - if (pred.call(recv, this[i], i, this)) return this[i] - } -} - -/*#__PURE__*/ -export function isSupported(): boolean { - return 'findLast' in Array.prototype && typeof Array.prototype.findLast === 'function' -} - -/*#__PURE__*/ -export function isPolyfilled(): boolean { - return Array.prototype.findLast === arrayFindLast -} - -export function apply(): void { - if (!isSupported()) { - const defn = {value: arrayFindLast, writable: true, configurable: true} - Object.defineProperty(Array.prototype, 'findLast', defn) - } -} diff --git a/src/array-findlastindex.ts b/src/array-findlastindex.ts deleted file mode 100644 index 092e350..0000000 --- a/src/array-findlastindex.ts +++ /dev/null @@ -1,31 +0,0 @@ -export function arrayFindLastIndex( - this: T[], - pred: (this: T[], value: T, i: number, array: T[]) => boolean, - recv = this, -): number { - for (let i = this.length - 1; i >= 0; i -= 1) { - if (pred.call(recv, this[i], i, this)) return i - } - return -1 -} - -/*#__PURE__*/ -export function isSupported(): boolean { - return 'findLastIndex' in Array.prototype && typeof Array.prototype.findLastIndex === 'function' -} - -/*#__PURE__*/ -export function isPolyfilled(): boolean { - return Array.prototype.findLastIndex === arrayFindLastIndex -} - -export function apply(): void { - if (!isSupported()) { - const defn = { - value: arrayFindLastIndex, - writable: true, - configurable: true, - } - Object.defineProperty(Array.prototype, 'findLastIndex', defn) - } -} diff --git a/src/arraylike-at.ts b/src/arraylike-at.ts deleted file mode 100644 index 256dbb5..0000000 --- a/src/arraylike-at.ts +++ /dev/null @@ -1,40 +0,0 @@ -const TypedArray = Reflect.getPrototypeOf(Int8Array) as Int8ArrayConstructor | null - -export function arrayLikeAt(this: ArrayLike, i: number): T | void { - const l = this.length - i = Math.trunc(i) || 0 - if (i < 0) i += l - return i < 0 || i >= l ? undefined : this[i] -} - -/*#__PURE__*/ -export function isSupported(): boolean { - return ( - 'at' in Array.prototype && - typeof Array.prototype.at === 'function' && - 'at' in String.prototype && - typeof String.prototype.at === 'function' && - typeof TypedArray === 'function' && - 'at' in TypedArray.prototype && - typeof TypedArray.prototype.at === 'function' - ) -} - -/*#__PURE__*/ -export function isPolyfilled(): boolean { - return ( - Array.prototype.at === arrayLikeAt && - String.prototype.at === arrayLikeAt && - typeof TypedArray === 'function' && - TypedArray.prototype.at === arrayLikeAt - ) -} - -export function apply(): void { - if (!isSupported()) { - const defn = {value: arrayLikeAt, writable: true, configurable: true} - Object.defineProperty(Array.prototype, 'at', defn) - Object.defineProperty(String.prototype, 'at', defn) - Object.defineProperty(TypedArray, 'at', defn) - } -} diff --git a/src/crypto-randomuuid.ts b/src/crypto-randomuuid.ts deleted file mode 100644 index 6fc83cd..0000000 --- a/src/crypto-randomuuid.ts +++ /dev/null @@ -1,33 +0,0 @@ -export function randomUUID(): `${string}-${string}-${string}-${string}-${string}` { - const buf = new Uint32Array(4) - crypto.getRandomValues(buf) - let idx = -1 - return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { - idx++ - const r = (buf[idx >> 3] >> ((idx % 8) * 4)) & 15 - const v = c === 'x' ? r : (r & 0x3) | 0x8 - return v.toString(16) - }) as `${string}-${string}-${string}-${string}-${string}` -} - -declare global { - interface Crypto { - randomUUID(): string - } -} - -/*#__PURE__*/ -export function isSupported(): boolean { - return typeof crypto === 'object' && 'randomUUID' in crypto && typeof crypto.randomUUID === 'function' -} - -/*#__PURE__*/ -export function isPolyfilled(): boolean { - return isSupported() && crypto.randomUUID === randomUUID -} - -export function apply(): void { - if (!isSupported()) { - crypto.randomUUID = randomUUID - } -} diff --git a/src/event-abortsignal.ts b/src/event-abortsignal.ts deleted file mode 100644 index b355519..0000000 --- a/src/event-abortsignal.ts +++ /dev/null @@ -1,48 +0,0 @@ -const originalAddEventListener = EventTarget.prototype.addEventListener -export function addEventListenerWithAbortSignal( - this: EventTarget, - type: string, - callback: EventListenerOrEventListenerObject | null, - options?: AddEventListenerOptions | boolean, -): void { - if (typeof options === 'object' && 'signal' in options && options.signal instanceof AbortSignal) { - if (options.signal.aborted) return - originalAddEventListener.call(options.signal, 'abort', () => { - this.removeEventListener(type, callback, options) - }) - } - return originalAddEventListener.call(this, type, callback, options) -} - -declare global { - interface AddEventListenerOptions { - signal?: AbortSignal - } -} - -export function isSupported(): boolean { - let signalSupported = false - const setSignalSupported = () => (signalSupported = true) - - function noop() {} - const options = Object.create({}, {signal: {get: setSignalSupported}}) - try { - const target = new EventTarget() - target.addEventListener('test', noop, options) - target.removeEventListener('test', noop, options) - return signalSupported - } catch { - return signalSupported - } -} - -/*#__PURE__*/ -export function isPolyfilled(): boolean { - return EventTarget.prototype.addEventListener === addEventListenerWithAbortSignal -} - -export function apply(): void { - if (typeof AbortSignal === 'function' && !isSupported()) { - EventTarget.prototype.addEventListener = addEventListenerWithAbortSignal - } -} diff --git a/src/form-requestsubmit.ts b/src/form-requestsubmit.ts deleted file mode 100644 index 20e1bcc..0000000 --- a/src/form-requestsubmit.ts +++ /dev/null @@ -1,32 +0,0 @@ -export function requestSubmit( - this: HTMLFormElement, - submitter: HTMLButtonElement | HTMLInputElement | null = null, -): void { - const event = new SubmitEvent('submit', {bubbles: true, cancelable: true, submitter}) - let input - if (submitter && submitter.name) { - input = Object.assign(document.createElement('input'), { - type: 'hidden', - hidden: true, - name: submitter.name, - value: submitter.value, - }) - this.append(input) - } - this.checkValidity() && !this.dispatchEvent(event) && this.submit() - input?.remove() -} - -export function isSupported(): boolean { - return 'requestSubmit' in HTMLFormElement.prototype && typeof HTMLFormElement.prototype.requestSubmit === 'function' -} - -export function isPolyfilled(): boolean { - return HTMLFormElement.prototype.requestSubmit === requestSubmit -} - -export function apply(): void { - if (!isSupported()) { - HTMLFormElement.prototype.requestSubmit = requestSubmit - } -} diff --git a/src/index.ts b/src/index.ts index 1581473..52624c4 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,35 +1,11 @@ -import * as abortSignalAbort from './abortsignal-abort.js' import * as abortSignalTimeout from './abortsignal-timeout.js' -import * as arrayAt from './arraylike-at.js' import * as clipboardItem from './clipboarditem.js' -import * as cryptoRandomUUID from './crypto-randomuuid.js' import * as elementCheckVisibility from './element-checkvisibility.js' -import * as eventAbortSignal from './event-abortsignal.js' import * as navigatorClipboard from './navigator-clipboard.js' -import * as formRequestSubmit from './form-requestsubmit.js' -import * as objectHasOwn from './object-hasown.js' import * as requestIdleCallback from './requestidlecallback.js' -import * as arrayFindLast from './array-findlast.js' -import * as arrayFindLastIndex from './array-findlastindex.js' export const baseSupport = - typeof Blob === 'function' && - typeof PerformanceObserver === 'function' && - typeof Intl === 'object' && - typeof MutationObserver === 'function' && - typeof URLSearchParams === 'function' && - typeof WebSocket === 'function' && - typeof IntersectionObserver === 'function' && - typeof queueMicrotask === 'function' && - typeof TextEncoder === 'function' && - typeof TextDecoder === 'function' && - typeof customElements === 'object' && - typeof HTMLDetailsElement === 'function' && - typeof AbortController === 'function' && - typeof AbortSignal === 'function' && typeof globalThis === 'object' && - 'entries' in FormData.prototype && - 'toggleAttribute' in Element.prototype && // ES2019 'fromEntries' in Object && 'flatMap' in Array.prototype && @@ -41,32 +17,29 @@ export const baseSupport = 'replaceAll' in String.prototype && 'any' in Promise && // ES2022 - // 'at' in String.prototype && // Polyfilled - // 'at' in Array.prototype && // Polyfilled - // 'hasOwn' in Object && // Polyfilled + 'at' in String.prototype && + 'at' in Array.prototype && + 'hasOwn' in Object && // ESNext - // 'abort' in AbortSignal && // Polyfilled + 'abort' in AbortSignal && // 'timeout' in AbortSignal && // Polyfilled + // DOM / HTML and other specs + typeof queueMicrotask === 'function' && + typeof HTMLDialogElement === 'function' && typeof AggregateError === 'function' && - // 'randomUUID' in crypto && // Polyfilled + typeof BroadcastChannel === 'function' && + 'randomUUID' in crypto && 'replaceChildren' in Element.prototype && + 'requestSubmit' in HTMLFormElement.prototype && // 'requestIdleCallback' in window && // Polyfilled true export const polyfills = { - abortSignalAbort, abortSignalTimeout, - arrayAt, clipboardItem, - cryptoRandomUUID, elementCheckVisibility, - eventAbortSignal, navigatorClipboard, - formRequestSubmit, - objectHasOwn, requestIdleCallback, - arrayFindLast, - arrayFindLastIndex, } export function isSupported() { diff --git a/src/object-hasown.ts b/src/object-hasown.ts deleted file mode 100644 index 574d42b..0000000 --- a/src/object-hasown.ts +++ /dev/null @@ -1,33 +0,0 @@ -const phasOwn = Object.prototype.hasOwnProperty -export function objectHasOwn(object: unknown, property: PropertyKey) { - if (object == null) { - throw new TypeError('Cannot convert undefined or null to object') - } - return phasOwn.call(Object(object), property) -} - -declare global { - interface Object { - hasOwn: (object: unknown, property: Key) => object is unknown & Record - } -} - -/*#__PURE__*/ -export function isSupported(): boolean { - return 'hasOwn' in Object && typeof Object.hasOwn === 'function' -} - -/*#__PURE__*/ -export function isPolyfilled(): boolean { - return Object.hasOwn === objectHasOwn -} - -export function apply(): void { - if (!isSupported()) { - Object.defineProperty(Object, 'hasOwn', { - value: objectHasOwn, - configurable: true, - writable: true, - }) - } -} diff --git a/test/abortsignal-abort.js b/test/abortsignal-abort.js deleted file mode 100644 index 707cb61..0000000 --- a/test/abortsignal-abort.js +++ /dev/null @@ -1,24 +0,0 @@ -import {abortSignalAbort, apply, isPolyfilled, isSupported} from '../lib/abortsignal-abort.js' - -describe('abortSignalAbort', () => { - it('has standard isSupported, isPolyfilled, apply API', () => { - expect(isSupported).to.be.a('function') - expect(isPolyfilled).to.be.a('function') - expect(apply).to.be.a('function') - expect(isSupported()).to.be.a('boolean') - expect(isPolyfilled()).to.equal(false) - }) - - it('returns already aborted signal', () => { - expect(abortSignalAbort()).to.be.instanceOf(AbortSignal) - expect(abortSignalAbort().aborted).to.equal(true) - }) - - it('creates a new signal each time', () => { - expect(abortSignalAbort()).to.not.equal(abortSignalAbort()) - }) - - it('forwards reason property', () => { - expect(abortSignalAbort('Foo')).to.have.property('reason', 'Foo') - }) -}) diff --git a/test/array-findlast.js b/test/array-findlast.js deleted file mode 100644 index 2933f12..0000000 --- a/test/array-findlast.js +++ /dev/null @@ -1,30 +0,0 @@ -import {apply, arrayFindLast, isPolyfilled, isSupported} from '../lib/array-findlast.js' - -describe('arrayFindLast', () => { - it('has standard isSupported, isPolyfilled, apply API', () => { - expect(isSupported).to.be.a('function') - expect(isPolyfilled).to.be.a('function') - expect(apply).to.be.a('function') - expect(isSupported()).to.be.a('boolean') - expect(isPolyfilled()).to.equal(false) - }) - - it('returns value that passes truthy', () => { - expect(arrayFindLast.call([1, 2, 3], v => v === 3)).to.equal(3) - expect(arrayFindLast.call([1, 2, 3], v => v === 1)).to.equal(1) - const arr = [1, 2, 3] - const recv = {} - expect( - arrayFindLast.call( - arr, - function (v, i, _arr) { - // eslint-disable-next-line @typescript-eslint/no-invalid-this - expect(this).to.equal(recv) - expect(_arr).to.equal(arr) - expect(v).to.equal(arr[i]) - }, - recv, - ), - ) - }) -}) diff --git a/test/array-findlastindex.js b/test/array-findlastindex.js deleted file mode 100644 index eecdfd1..0000000 --- a/test/array-findlastindex.js +++ /dev/null @@ -1,30 +0,0 @@ -import {apply, arrayFindLastIndex, isPolyfilled, isSupported} from '../lib/array-findlastindex.js' - -describe('arrayFindLastIndex', () => { - it('has standard isSupported, isPolyfilled, apply API', () => { - expect(isSupported).to.be.a('function') - expect(isPolyfilled).to.be.a('function') - expect(apply).to.be.a('function') - expect(isSupported()).to.be.a('boolean') - expect(isPolyfilled()).to.equal(false) - }) - - it('returns value that passes truthy', () => { - expect(arrayFindLastIndex.call([1, 2, 3], v => v === 3)).to.equal(2) - expect(arrayFindLastIndex.call([1, 2, 3], v => v === 1)).to.equal(0) - const arr = [1, 2, 3] - const recv = {} - expect( - arrayFindLastIndex.call( - arr, - function (v, i, _arr) { - // eslint-disable-next-line @typescript-eslint/no-invalid-this - expect(this).to.equal(recv) - expect(_arr).to.equal(arr) - expect(v).to.equal(arr[i]) - }, - recv, - ), - ) - }) -}) diff --git a/test/arraylike-at.js b/test/arraylike-at.js deleted file mode 100644 index 8c75106..0000000 --- a/test/arraylike-at.js +++ /dev/null @@ -1,17 +0,0 @@ -import {apply, arrayLikeAt, isPolyfilled, isSupported} from '../lib/arraylike-at.js' - -describe('arrayLikeAt', () => { - it('has standard isSupported, isPolyfilled, apply API', () => { - expect(isSupported).to.be.a('function') - expect(isPolyfilled).to.be.a('function') - expect(apply).to.be.a('function') - expect(isSupported()).to.be.a('boolean') - expect(isPolyfilled()).to.equal(false) - }) - - it('returns value at given index', () => { - expect(arrayLikeAt.call([1, 2, 3], -1)).to.equal(3) - expect(arrayLikeAt.call('bar', -2)).to.equal('a') - expect(arrayLikeAt.call('bar', 1)).to.equal('a') - }) -}) diff --git a/test/crypto-randomuuid.js b/test/crypto-randomuuid.js deleted file mode 100644 index 67ce2f5..0000000 --- a/test/crypto-randomuuid.js +++ /dev/null @@ -1,18 +0,0 @@ -import {apply, isPolyfilled, isSupported, randomUUID} from '../lib/crypto-randomuuid.js' - -describe('randomUUID', () => { - it('has standard isSupported, isPolyfilled, apply API', () => { - expect(isSupported).to.be.a('function') - expect(isPolyfilled).to.be.a('function') - expect(apply).to.be.a('function') - expect(isSupported()).to.be.a('boolean') - expect(isPolyfilled()).to.equal(false) - }) - - it('returns a UUID string', async () => { - expect(randomUUID()).to.match( - /^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/, - ) - expect(randomUUID()).to.not.equal(randomUUID()) - }) -}) diff --git a/test/event-abortsignal.js b/test/event-abortsignal.js deleted file mode 100644 index 2e2edcd..0000000 --- a/test/event-abortsignal.js +++ /dev/null @@ -1,25 +0,0 @@ -import {addEventListenerWithAbortSignal, apply, isPolyfilled, isSupported} from '../lib/event-abortsignal.js' - -describe('addEventListenerWithAbortSignal', () => { - it('has standard isSupported, isPolyfilled, apply API', () => { - expect(isSupported).to.be.a('function') - expect(isPolyfilled).to.be.a('function') - expect(apply).to.be.a('function') - expect(isSupported()).to.be.a('boolean') - expect(isPolyfilled()).to.equal(false) - }) - - it('adds event listener, with abortable signal', async () => { - const et = new EventTarget() - const ac = new AbortController() - let i = 0 - const incr = () => (i += 1) - addEventListenerWithAbortSignal.call(et, 'test', incr, {signal: ac.signal}) - et.dispatchEvent(new Event('test')) - et.dispatchEvent(new Event('test')) - expect(i).to.equal(2) - ac.abort() - et.dispatchEvent(new Event('test')) - expect(i).to.equal(2) - }) -}) diff --git a/test/form-requestsubmit.js b/test/form-requestsubmit.js deleted file mode 100644 index 577c9af..0000000 --- a/test/form-requestsubmit.js +++ /dev/null @@ -1,73 +0,0 @@ -import {requestSubmit, apply, isPolyfilled, isSupported} from '../lib/form-requestsubmit.js' - -describe('requestSubmit', () => { - let form - beforeEach(() => { - form = document.createElement('form') - document.body.append(form) - }) - afterEach(() => { - form.remove() - }) - - it('has standard isSupported, isPolyfilled, apply API', () => { - expect(isSupported).to.be.a('function') - expect(isPolyfilled).to.be.a('function') - expect(apply).to.be.a('function') - expect(isSupported()).to.be.a('boolean') - expect(isPolyfilled()).to.equal(false) - }) - - it('does not dispatch or submit for invalid forms', () => { - const input = document.createElement('input') - input.required = true - form.append(input) - let called = false - form.addEventListener('submit', () => { - called = true - }) - requestSubmit.call(form) - expect(called).to.equal(false) - }) - - it('dispatches submit event', () => { - const input = document.createElement('input') - form.append(input) - let called = false - form.addEventListener('submit', event => { - called = true - event.stopPropagation() - }) - requestSubmit.call(form) - expect(called).to.equal(true) - }) - - it('passes submitter in event', () => { - const input = document.createElement('input') - input.type = 'button' - form.append(input) - let submitter = null - form.addEventListener('submit', event => { - submitter = event.submitter - event.stopPropagation() - }) - requestSubmit.call(form, input) - expect(submitter).to.equal(input) - }) - - it('includes the input value in FormData', () => { - const input = document.createElement('input') - input.type = 'button' - input.name = 'foo' - input.value = '1' - form.append(input) - let formdata = null - form.addEventListener('submit', event => { - formdata = new FormData(form) - event.stopPropagation() - }) - requestSubmit.call(form, input) - expect(formdata.get('foo')).to.equal('1') - expect(Array.from(form.querySelectorAll('input')).length).to.equal(1) - }) -}) diff --git a/test/object-hasown.js b/test/object-hasown.js deleted file mode 100644 index 22b89d2..0000000 --- a/test/object-hasown.js +++ /dev/null @@ -1,16 +0,0 @@ -import {apply, isPolyfilled, isSupported, objectHasOwn} from '../lib/object-hasown.js' - -describe('objectHasOwn', () => { - it('has standard isSupported, isPolyfilled, apply API', () => { - expect(isSupported).to.be.a('function') - expect(isPolyfilled).to.be.a('function') - expect(apply).to.be.a('function') - expect(isSupported()).to.be.a('boolean') - expect(isPolyfilled()).to.equal(false) - }) - - it('returns boolean based on own properties', () => { - expect(objectHasOwn({a: 1}, 'a')).to.equal(true) - expect(objectHasOwn({a: 1}, 'b')).to.equal(false) - }) -}) pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy