Skip to content

Commit 6c9e6b6

Browse files
authored
Merge pull request #806 from FabioPinheiro/Web_NFC_API
Add support for Web NFC API
2 parents aa2ece4 + 65a35e3 commit 6c9e6b6

File tree

10 files changed

+374
-0
lines changed

10 files changed

+374
-0
lines changed

api-reports/2_12.txt

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16464,6 +16464,62 @@ MutationRecord[JT] def previousSibling: Node
1646416464
MutationRecord[JT] def removedNodes: NodeList[Node]
1646516465
MutationRecord[JT] def target: Node
1646616466
MutationRecord[JT] def `type`: String
16467+
NDEFMessage[JC] def records: FrozenArray[NDEFRecord]
16468+
NDEFReader[JC] def addEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], options: EventListenerOptions): Unit
16469+
NDEFReader[JC] def addEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], useCapture: Boolean?): Unit
16470+
NDEFReader[JC] def dispatchEvent(evt: Event): Boolean
16471+
NDEFReader[JC] var onreading: js.Function1[NDEFReadingEvent, Any]
16472+
NDEFReader[JC] var onreadingerror: js.Function1[Event, Any]
16473+
NDEFReader[JC] def removeEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], options: EventListenerOptions): Unit
16474+
NDEFReader[JC] def removeEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], useCapture: Boolean?): Unit
16475+
NDEFReader[JC] def scan(options: NDEFScanOptions?): js.Promise[Unit]
16476+
NDEFReader[JC] def write(message: String): js.Promise[Unit]
16477+
NDEFReader[JC] def write(message: String, options: NDEFWriteOptions): js.Promise[Unit]
16478+
NDEFReader[JC] def write(message: js.Array[NDEFRecord]): js.Promise[Unit]
16479+
NDEFReader[JC] def write(message: js.Array[NDEFRecord], options: NDEFWriteOptions): js.Promise[Unit]
16480+
NDEFReader[JC] def write(message: js.typedarray.ArrayBuffer): js.Promise[Unit]
16481+
NDEFReader[JC] def write(message: js.typedarray.ArrayBuffer, options: NDEFWriteOptions): js.Promise[Unit]
16482+
NDEFReader[JC] def write(message: js.typedarray.DataView): js.Promise[Unit]
16483+
NDEFReader[JC] def write(message: js.typedarray.DataView, options: NDEFWriteOptions): js.Promise[Unit]
16484+
NDEFReader[JC] def write(message: js.typedarray.TypedArray[_, _], options: NDEFWriteOptions?): js.Promise[Unit]
16485+
NDEFReadingEvent[JC] def bubbles: Boolean
16486+
NDEFReadingEvent[JC] def cancelBubble: Boolean
16487+
NDEFReadingEvent[JC] def cancelable: Boolean
16488+
NDEFReadingEvent[JC] def composed: Boolean
16489+
NDEFReadingEvent[JC] def currentTarget: EventTarget
16490+
NDEFReadingEvent[JC] def defaultPrevented: Boolean
16491+
NDEFReadingEvent[JC] def eventPhase: Int
16492+
NDEFReadingEvent[JC] def isTrusted: Boolean
16493+
NDEFReadingEvent[JC] def message: NDEFMessage
16494+
NDEFReadingEvent[JC] def preventDefault(): Unit
16495+
NDEFReadingEvent[JC] def serialNumber: String
16496+
NDEFReadingEvent[JC] def stopImmediatePropagation(): Unit
16497+
NDEFReadingEvent[JC] def stopPropagation(): Unit
16498+
NDEFReadingEvent[JC] def target: EventTarget
16499+
NDEFReadingEvent[JC] def timeStamp: Double
16500+
NDEFReadingEvent[JC] def `type`: String
16501+
NDEFReadingEventInit[JT] var bubbles: js.UndefOr[Boolean]
16502+
NDEFReadingEventInit[JT] var cancelable: js.UndefOr[Boolean]
16503+
NDEFReadingEventInit[JT] var composed: js.UndefOr[Boolean]
16504+
NDEFReadingEventInit[JT] var message: NDEFRecordInit
16505+
NDEFReadingEventInit[JT] var scoped: js.UndefOr[Boolean]
16506+
NDEFReadingEventInit[JT] var serialNumber: js.UndefOr[AbortSignal]
16507+
NDEFRecord[JC] def data: js.typedarray.DataView
16508+
NDEFRecord[JC] def encoding: js.UndefOr[String]
16509+
NDEFRecord[JC] def id: js.UndefOr[String]
16510+
NDEFRecord[JC] def lang: js.UndefOr[String]
16511+
NDEFRecord[JC] def mediaType: js.UndefOr[String]
16512+
NDEFRecord[JC] def recordType: String
16513+
NDEFRecord[JC] def toRecords(): js.UndefOr[js.Array[NDEFRecord]]
16514+
NDEFRecordInit[JT] var data: js.UndefOr[String | js.typedarray.DataView | js.typedarray.ArrayBuffer | js.typedarray.TypedArray[_, _] | js.typedarray.DataView | js.Array[NDEFRecord]]
16515+
NDEFRecordInit[JT] var encoding: js.UndefOr[String]
16516+
NDEFRecordInit[JT] var id: js.UndefOr[String]
16517+
NDEFRecordInit[JT] var lang: js.UndefOr[String]
16518+
NDEFRecordInit[JT] var mediaType: js.UndefOr[String]
16519+
NDEFRecordInit[JT] var recordType: String
16520+
NDEFScanOptions[JT] var signal: js.UndefOr[AbortSignal]
16521+
NDEFWriteOptions[JT] var overwrite: js.UndefOr[Boolean]
16522+
NDEFWriteOptions[JT] var signal: js.UndefOr[AbortSignal]
1646716523
NamedNodeMap[JC] @scala.scalajs.js.annotation.JSBracketAccess def apply(index: Int): Attr
1646816524
NamedNodeMap[JC] def getNamedItem(name: String): Attr
1646916525
NamedNodeMap[JC] def getNamedItemNS(namespaceURI: String, localName: String): Attr

api-reports/2_13.txt

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16464,6 +16464,62 @@ MutationRecord[JT] def previousSibling: Node
1646416464
MutationRecord[JT] def removedNodes: NodeList[Node]
1646516465
MutationRecord[JT] def target: Node
1646616466
MutationRecord[JT] def `type`: String
16467+
NDEFMessage[JC] def records: FrozenArray[NDEFRecord]
16468+
NDEFReader[JC] def addEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], options: EventListenerOptions): Unit
16469+
NDEFReader[JC] def addEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], useCapture: Boolean?): Unit
16470+
NDEFReader[JC] def dispatchEvent(evt: Event): Boolean
16471+
NDEFReader[JC] var onreading: js.Function1[NDEFReadingEvent, Any]
16472+
NDEFReader[JC] var onreadingerror: js.Function1[Event, Any]
16473+
NDEFReader[JC] def removeEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], options: EventListenerOptions): Unit
16474+
NDEFReader[JC] def removeEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], useCapture: Boolean?): Unit
16475+
NDEFReader[JC] def scan(options: NDEFScanOptions?): js.Promise[Unit]
16476+
NDEFReader[JC] def write(message: String): js.Promise[Unit]
16477+
NDEFReader[JC] def write(message: String, options: NDEFWriteOptions): js.Promise[Unit]
16478+
NDEFReader[JC] def write(message: js.Array[NDEFRecord]): js.Promise[Unit]
16479+
NDEFReader[JC] def write(message: js.Array[NDEFRecord], options: NDEFWriteOptions): js.Promise[Unit]
16480+
NDEFReader[JC] def write(message: js.typedarray.ArrayBuffer): js.Promise[Unit]
16481+
NDEFReader[JC] def write(message: js.typedarray.ArrayBuffer, options: NDEFWriteOptions): js.Promise[Unit]
16482+
NDEFReader[JC] def write(message: js.typedarray.DataView): js.Promise[Unit]
16483+
NDEFReader[JC] def write(message: js.typedarray.DataView, options: NDEFWriteOptions): js.Promise[Unit]
16484+
NDEFReader[JC] def write(message: js.typedarray.TypedArray[_, _], options: NDEFWriteOptions?): js.Promise[Unit]
16485+
NDEFReadingEvent[JC] def bubbles: Boolean
16486+
NDEFReadingEvent[JC] def cancelBubble: Boolean
16487+
NDEFReadingEvent[JC] def cancelable: Boolean
16488+
NDEFReadingEvent[JC] def composed: Boolean
16489+
NDEFReadingEvent[JC] def currentTarget: EventTarget
16490+
NDEFReadingEvent[JC] def defaultPrevented: Boolean
16491+
NDEFReadingEvent[JC] def eventPhase: Int
16492+
NDEFReadingEvent[JC] def isTrusted: Boolean
16493+
NDEFReadingEvent[JC] def message: NDEFMessage
16494+
NDEFReadingEvent[JC] def preventDefault(): Unit
16495+
NDEFReadingEvent[JC] def serialNumber: String
16496+
NDEFReadingEvent[JC] def stopImmediatePropagation(): Unit
16497+
NDEFReadingEvent[JC] def stopPropagation(): Unit
16498+
NDEFReadingEvent[JC] def target: EventTarget
16499+
NDEFReadingEvent[JC] def timeStamp: Double
16500+
NDEFReadingEvent[JC] def `type`: String
16501+
NDEFReadingEventInit[JT] var bubbles: js.UndefOr[Boolean]
16502+
NDEFReadingEventInit[JT] var cancelable: js.UndefOr[Boolean]
16503+
NDEFReadingEventInit[JT] var composed: js.UndefOr[Boolean]
16504+
NDEFReadingEventInit[JT] var message: NDEFRecordInit
16505+
NDEFReadingEventInit[JT] var scoped: js.UndefOr[Boolean]
16506+
NDEFReadingEventInit[JT] var serialNumber: js.UndefOr[AbortSignal]
16507+
NDEFRecord[JC] def data: js.typedarray.DataView
16508+
NDEFRecord[JC] def encoding: js.UndefOr[String]
16509+
NDEFRecord[JC] def id: js.UndefOr[String]
16510+
NDEFRecord[JC] def lang: js.UndefOr[String]
16511+
NDEFRecord[JC] def mediaType: js.UndefOr[String]
16512+
NDEFRecord[JC] def recordType: String
16513+
NDEFRecord[JC] def toRecords(): js.UndefOr[js.Array[NDEFRecord]]
16514+
NDEFRecordInit[JT] var data: js.UndefOr[String | js.typedarray.DataView | js.typedarray.ArrayBuffer | js.typedarray.TypedArray[_, _] | js.typedarray.DataView | js.Array[NDEFRecord]]
16515+
NDEFRecordInit[JT] var encoding: js.UndefOr[String]
16516+
NDEFRecordInit[JT] var id: js.UndefOr[String]
16517+
NDEFRecordInit[JT] var lang: js.UndefOr[String]
16518+
NDEFRecordInit[JT] var mediaType: js.UndefOr[String]
16519+
NDEFRecordInit[JT] var recordType: String
16520+
NDEFScanOptions[JT] var signal: js.UndefOr[AbortSignal]
16521+
NDEFWriteOptions[JT] var overwrite: js.UndefOr[Boolean]
16522+
NDEFWriteOptions[JT] var signal: js.UndefOr[AbortSignal]
1646716523
NamedNodeMap[JC] @scala.scalajs.js.annotation.JSBracketAccess def apply(index: Int): Attr
1646816524
NamedNodeMap[JC] def getNamedItem(name: String): Attr
1646916525
NamedNodeMap[JC] def getNamedItemNS(namespaceURI: String, localName: String): Attr
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package org.scalajs.dom
2+
3+
import scala.scalajs.js
4+
import scala.scalajs.js.annotation.JSGlobal
5+
6+
/** The [[NDEFMessage]] interface of the Web NFC API represents the content of an NDEF message that has been read from
7+
* or could be written to an NFC tag. An instance is acquired by calling the NDEFMessage() constructor or from the
8+
* NDEFReadingEvent.message property, which is passed to the reading event.
9+
*
10+
* @see
11+
* https://w3c.github.io/web-nfc/#the-ndefmessage-interface
12+
*
13+
* @param messageInit
14+
* property of NDEFMessage interface represents a list of NDEFRecords present in the NDEF message.
15+
*/
16+
@js.native
17+
@JSGlobal
18+
class NDEFMessage(messageInit: js.Array[NDEFRecordInit]) extends js.Object {
19+
20+
/** Returns the list of NDEF records contained in the message. */
21+
def records: FrozenArray[NDEFRecord] = js.native
22+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package org.scalajs.dom
2+
3+
import scala.scalajs.js
4+
import scala.scalajs.js.annotation.JSGlobal
5+
6+
/** The [[NDEFReader]] interface of the Web NFC API (https://developer.mozilla.org/en-US/docs/Web/API/Web_NFC_API) is
7+
* used to read from and write data to compatible NFC devices, e.g. NFC tags supporting NDEF, when these devices are
8+
* within the reader's magnetic induction field.
9+
*
10+
* @see
11+
* https://w3c.github.io/web-nfc/#the-ndefreader-object
12+
*/
13+
@JSGlobal("NDEFReader")
14+
@js.native
15+
class NDEFReader() extends EventTarget {
16+
17+
/** Activates a reading device and returns a Promise that either resolves when an NFC tag read operation is scheduled
18+
* or rejects if a hardware or permission error is encountered. This method triggers a permission prompt if the "nfc"
19+
* permission has not been previously granted.
20+
*
21+
* @return
22+
* a Promise that resolves immediately after scheduling read operations for the NFC adapter.
23+
*/
24+
def scan(options: NDEFScanOptions = js.native): js.Promise[Unit] = js.native
25+
26+
/** Attempts to write an NDEF message to a tag and returns a Promise that either resolves when a message has been
27+
* written to the tag or rejects if a hardware or permission error is encountered. This method triggers a permission
28+
* prompt if the "nfc" permission has not been previously granted.
29+
*
30+
* @param message
31+
* The message to be written, either a string object or literal, an ArrayBuffer, a TypedArray, a DataView, or an
32+
* array of records. A record has the following members:
33+
* @param options
34+
* An object with the following properties:
35+
*
36+
* @return
37+
* a Promise that either resolves when a message has been written to the tag or rejects if a hardware or permission
38+
* error is encountered.
39+
*/
40+
def write(message: String, options: NDEFWriteOptions): js.Promise[Unit] = js.native
41+
def write(message: js.typedarray.ArrayBuffer, options: NDEFWriteOptions): js.Promise[Unit] = js.native
42+
43+
def write(message: js.typedarray.TypedArray[_, _],
44+
options: NDEFWriteOptions = js.native): js.Promise[Unit] = js.native
45+
def write(message: js.typedarray.DataView, options: NDEFWriteOptions): js.Promise[Unit] = js.native
46+
def write(message: js.Array[NDEFRecord], options: NDEFWriteOptions): js.Promise[Unit] = js.native
47+
48+
def write(message: String): js.Promise[Unit] = js.native
49+
def write(message: js.typedarray.ArrayBuffer): js.Promise[Unit] = js.native
50+
// def write(message:js.typedarray.TypedArray[NDEFRecord, ???]): js.Promise[Unit] = js.native
51+
def write(message: js.typedarray.DataView): js.Promise[Unit] = js.native
52+
def write(message: js.Array[NDEFRecord]): js.Promise[Unit] = js.native
53+
54+
/** The reading event of the NDEFReader interface is fired whenever a new reading is available from compatible NFC
55+
* devices (e.g. NFC tags supporting NDEF) when these devices are within the reader's magnetic induction field.
56+
*/
57+
var onreading: js.Function1[NDEFReadingEvent, Any] = js.native
58+
59+
/** The readingerror event of the NDEFReader interface is fired whenever an error occurs during reading of NFC tags,
60+
* e.g. when tags leave the reader's magnetic induction field.
61+
*/
62+
var onreadingerror: js.Function1[Event, Any] = js.native
63+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package org.scalajs.dom
2+
3+
import scala.scalajs.js
4+
import scala.scalajs.js.annotation.JSGlobal
5+
6+
/** The NDEFReadingEvent interface of the Web NFC API represents events dispatched on new NFC readings obtained by
7+
* NDEFReader.
8+
*
9+
* @see
10+
* https://developer.mozilla.org/en-US/docs/Web/API/NDEFReadingEvent
11+
* @see
12+
* https://w3c.github.io/web-nfc/#the-ndefreader-object
13+
*/
14+
@js.native
15+
@JSGlobal
16+
class NDEFReadingEvent(typeArg: String, init: NDEFReadingEventInit) extends Event(typeArg, init) {
17+
18+
/** Returns an NDEFMessage object containing the received message. */
19+
def message: NDEFMessage = js.native
20+
21+
/** Returns the serial number of the device, which is used for anti-collision and identification, or an empty string
22+
* if no serial number is available.
23+
*/
24+
def serialNumber: String = js.native
25+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package org.scalajs.dom
2+
3+
import scala.scalajs.js
4+
5+
/** NDEFReadingEventInit is used to initialize a new event with a serial number and the NDEFMessageInit data via the
6+
* message member. If serialNumber is not present or is null, empty string will be used to init the event.
7+
*
8+
* @see
9+
* https://developer.mozilla.org/en-US/docs/Web/API/NDEFReadingEvent/NDEFReadingEvent#parameters
10+
* @see
11+
* https://w3c.github.io/web-nfc/#the-ndefreader-object
12+
*/
13+
trait NDEFReadingEventInit extends EventInit {
14+
15+
/** A string with the name of the event. It is case-sensitive and browsers always set it to reading. Default is "" an
16+
* empty string
17+
*/
18+
var serialNumber: js.UndefOr[AbortSignal] = js.undefined
19+
20+
/** An object that, in addition of the properties defined in Event(), can have the following properties: serialNumber;
21+
* message
22+
*/
23+
var message: NDEFRecordInit
24+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package org.scalajs.dom
2+
3+
import scala.scalajs.js
4+
import scala.scalajs.js.annotation.JSGlobal
5+
6+
/** The [[NDEFRecord]] interface of the Web NFC API provides data that can be read from, or written to, compatible NFC
7+
* devices, e.g. NFC tags supporting NDEF.
8+
*
9+
* @see
10+
* https://w3c.github.io/web-nfc/#the-ndefrecord-interface
11+
*/
12+
@js.native
13+
@JSGlobal
14+
class NDEFRecord(init: NDEFRecordInit) extends js.Object {
15+
16+
/** Returns the record type of the record. Records must have either a standardized well-known type name such as
17+
* "empty", "text", "url", "smart-poster", "absolute-url", "mime", or "unknown" or else an external type name, which
18+
* consists of a domain name and custom type name separated by a colon (":").
19+
*/
20+
def recordType: String = js.native
21+
22+
/** Returns the MIME type of the record. This value will be null if recordType is not equal to "mime". */
23+
def mediaType: js.UndefOr[String] = js.native
24+
25+
/** Returns the record identifier, which is an absolute or relative URL used to identify the record.
26+
*
27+
* Note: The uniqueness of the identifier is enforced only by the generator of the record.
28+
*/
29+
def id: js.UndefOr[String] = js.native
30+
31+
/** Returns a DataView containing the raw bytes of the record's payload. */
32+
def data: js.typedarray.DataView = js.native
33+
34+
/** Returns the encoding of a textual payload, or null otherwise. */
35+
def encoding: js.UndefOr[String] = js.native
36+
37+
/** Returns the language of a textual payload, or null if one was not supplied. */
38+
def lang: js.UndefOr[String] = js.native
39+
40+
/** Converts [[NDEFRecord.data]] to a sequence of records. This allows parsing the payloads of record types which may
41+
* contain nested records, such as smart poster and external type records.
42+
*/
43+
def toRecords(): js.UndefOr[js.Array[NDEFRecord]] = js.native
44+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package org.scalajs.dom
2+
3+
import scala.scalajs.js
4+
import scala.scalajs.js.|
5+
6+
/** The NDEFRecordInit dictionary is used to initialize an NDEF record with its record type recordType, and optional
7+
* record identifier id and payload data data.
8+
* @see
9+
* https://developer.mozilla.org/en-US/docs/Web/API/NDEFMessage/NDEFMessage
10+
* @see
11+
* https://developer.mozilla.org/en-US/docs/Web/API/NDEFRecord/NDEFRecord
12+
* @see
13+
* https://w3c.github.io/web-nfc/#the-ndefrecord-interface
14+
*/
15+
trait NDEFRecordInit extends js.Object {
16+
17+
/** Contains the data to be transmitted. It can be a string object or literal, an ArrayBuffer, a TypedArray, a
18+
* DataView, or an array of nested records.
19+
*/
20+
var data: js.UndefOr[
21+
String |
22+
js.typedarray.DataView |
23+
js.typedarray.ArrayBuffer |
24+
js.typedarray.TypedArray[_, _] |
25+
js.typedarray.DataView |
26+
js.Array[NDEFRecord]
27+
] = js.undefined
28+
29+
/** A string specifying the record's encoding. */
30+
var encoding: js.UndefOr[String] = js.undefined
31+
32+
/** A developer-defined identifier for the record. */
33+
var id: js.UndefOr[String] = js.undefined
34+
35+
/** A valid language tag according to [RFC 5646: Tags for Identifying Languages (also known as BCP
36+
* 47)](https://datatracker.ietf.org/doc/html/rfc5646).
37+
*/
38+
var lang: js.UndefOr[String] = js.undefined
39+
40+
/** A valid MIME type. */
41+
var mediaType: js.UndefOr[String] = js.undefined
42+
43+
/** A string indicating the type of data stored in data.
44+
*
45+
* It must be one of the following values:
46+
* - "absolute-url" - An absolute URL to the data.
47+
* - "empty" - An empty NDEFRecord.
48+
* - "mime" - A valid MIME type.
49+
* - "smart-poster" - A smart poster as defined by the NDEF-SMARTPOSTER specification.
50+
* - "text" - Text as defined by the NDEF-TEXT specification.
51+
* - "unknown" - The record type is not known.
52+
* - "URL" - A URL as defined by the NDEF-URI specification.
53+
*/
54+
var recordType: String
55+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package org.scalajs.dom
2+
3+
import scala.scalajs.js
4+
5+
/** @see https://w3c.github.io/web-nfc/#the-ndefscanoptions-dictionary */
6+
trait NDEFScanOptions extends js.Object {
7+
8+
/** An AbortSignal that allows the current write operation to be canceled. */
9+
var `signal`: js.UndefOr[AbortSignal] = js.undefined
10+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package org.scalajs.dom
2+
3+
import scala.scalajs.js
4+
5+
/** @see
6+
* https://w3c.github.io/web-nfc/#the-ndefwriteoptions-dictionary
7+
* @see
8+
* https://developer.mozilla.org/en-US/docs/Web/API/NDEFReader/write
9+
*/
10+
trait NDEFWriteOptions extends js.Object {
11+
12+
/** A boolean value specifying whether or not existing records should be overwritten, if such exists. Default is true
13+
*/
14+
var `overwrite`: js.UndefOr[Boolean] = js.undefined
15+
16+
/** An AbortSignal that allows the current write operation to be canceled. */
17+
var `signal`: js.UndefOr[AbortSignal] = js.undefined
18+
19+
}

0 commit comments

Comments
 (0)