Skip to content

Commit 45f476a

Browse files
authored
Add mediastream-recording IDL and generated code (#24)
This is a requirement for `webgl2`, which I'm going to add in a future PR.
1 parent 3730e21 commit 45f476a

File tree

2 files changed

+255
-3
lines changed

2 files changed

+255
-3
lines changed

Sources/DOMKit/Generated.swift

Lines changed: 253 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1847,6 +1847,24 @@ public enum BiquadFilterType: JSString, JSValueCompatible {
18471847
@inlinable public var jsValue: JSValue { rawValue.jsValue }
18481848
}
18491849

1850+
public enum BitrateMode: JSString, JSValueCompatible {
1851+
case constant = "constant"
1852+
case variable = "variable"
1853+
1854+
@inlinable public static func construct(from jsValue: JSValue) -> Self? {
1855+
if let string = jsValue.jsString {
1856+
return Self(rawValue: string)
1857+
}
1858+
return nil
1859+
}
1860+
1861+
@inlinable public init?(string: String) {
1862+
self.init(rawValue: JSString(string))
1863+
}
1864+
1865+
@inlinable public var jsValue: JSValue { rawValue.jsValue }
1866+
}
1867+
18501868
public class Blob: JSBridgedClass {
18511869
@inlinable public class var constructor: JSFunction { JSObject.global[Strings.Blob].function! }
18521870

@@ -1900,6 +1918,47 @@ public class Blob: JSBridgedClass {
19001918
}
19011919
}
19021920

1921+
public class BlobEvent: Event {
1922+
@inlinable override public class var constructor: JSFunction { JSObject.global[Strings.BlobEvent].function! }
1923+
1924+
public required init(unsafelyWrapping jsObject: JSObject) {
1925+
_data = ReadonlyAttribute(jsObject: jsObject, name: Strings.data)
1926+
_timecode = ReadonlyAttribute(jsObject: jsObject, name: Strings.timecode)
1927+
super.init(unsafelyWrapping: jsObject)
1928+
}
1929+
1930+
@inlinable public convenience init(type: String, eventInitDict: BlobEventInit) {
1931+
self.init(unsafelyWrapping: Self.constructor.new(arguments: [type.jsValue, eventInitDict.jsValue]))
1932+
}
1933+
1934+
@ReadonlyAttribute
1935+
public var data: Blob
1936+
1937+
@ReadonlyAttribute
1938+
public var timecode: DOMHighResTimeStamp
1939+
}
1940+
1941+
public class BlobEventInit: BridgedDictionary {
1942+
public convenience init(data: Blob, timecode: DOMHighResTimeStamp) {
1943+
let object = JSObject.global[Strings.Object].function!.new()
1944+
object[Strings.data] = data.jsValue
1945+
object[Strings.timecode] = timecode.jsValue
1946+
self.init(unsafelyWrapping: object)
1947+
}
1948+
1949+
public required init(unsafelyWrapping object: JSObject) {
1950+
_data = ReadWriteAttribute(jsObject: object, name: Strings.data)
1951+
_timecode = ReadWriteAttribute(jsObject: object, name: Strings.timecode)
1952+
super.init(unsafelyWrapping: object)
1953+
}
1954+
1955+
@ReadWriteAttribute
1956+
public var data: Blob
1957+
1958+
@ReadWriteAttribute
1959+
public var timecode: DOMHighResTimeStamp
1960+
}
1961+
19031962
public class BlobPropertyBag: BridgedDictionary {
19041963
public convenience init(type: String, endings: EndingType) {
19051964
let object = JSObject.global[Strings.Object].function!.new()
@@ -11795,6 +11854,164 @@ public class MediaQueryListEventInit: BridgedDictionary {
1179511854
public var matches: Bool
1179611855
}
1179711856

11857+
public class MediaRecorder: EventTarget {
11858+
@inlinable override public class var constructor: JSFunction { JSObject.global[Strings.MediaRecorder].function! }
11859+
11860+
public required init(unsafelyWrapping jsObject: JSObject) {
11861+
_stream = ReadonlyAttribute(jsObject: jsObject, name: Strings.stream)
11862+
_mimeType = ReadonlyAttribute(jsObject: jsObject, name: Strings.mimeType)
11863+
_state = ReadonlyAttribute(jsObject: jsObject, name: Strings.state)
11864+
_onstart = ClosureAttribute1Optional(jsObject: jsObject, name: Strings.onstart)
11865+
_onstop = ClosureAttribute1Optional(jsObject: jsObject, name: Strings.onstop)
11866+
_ondataavailable = ClosureAttribute1Optional(jsObject: jsObject, name: Strings.ondataavailable)
11867+
_onpause = ClosureAttribute1Optional(jsObject: jsObject, name: Strings.onpause)
11868+
_onresume = ClosureAttribute1Optional(jsObject: jsObject, name: Strings.onresume)
11869+
_onerror = ClosureAttribute1Optional(jsObject: jsObject, name: Strings.onerror)
11870+
_videoBitsPerSecond = ReadonlyAttribute(jsObject: jsObject, name: Strings.videoBitsPerSecond)
11871+
_audioBitsPerSecond = ReadonlyAttribute(jsObject: jsObject, name: Strings.audioBitsPerSecond)
11872+
_audioBitrateMode = ReadonlyAttribute(jsObject: jsObject, name: Strings.audioBitrateMode)
11873+
super.init(unsafelyWrapping: jsObject)
11874+
}
11875+
11876+
@inlinable public convenience init(stream: MediaStream, options: MediaRecorderOptions? = nil) {
11877+
self.init(unsafelyWrapping: Self.constructor.new(arguments: [stream.jsValue, options?.jsValue ?? .undefined]))
11878+
}
11879+
11880+
@ReadonlyAttribute
11881+
public var stream: MediaStream
11882+
11883+
@ReadonlyAttribute
11884+
public var mimeType: String
11885+
11886+
@ReadonlyAttribute
11887+
public var state: RecordingState
11888+
11889+
@ClosureAttribute1Optional
11890+
public var onstart: EventHandler
11891+
11892+
@ClosureAttribute1Optional
11893+
public var onstop: EventHandler
11894+
11895+
@ClosureAttribute1Optional
11896+
public var ondataavailable: EventHandler
11897+
11898+
@ClosureAttribute1Optional
11899+
public var onpause: EventHandler
11900+
11901+
@ClosureAttribute1Optional
11902+
public var onresume: EventHandler
11903+
11904+
@ClosureAttribute1Optional
11905+
public var onerror: EventHandler
11906+
11907+
@ReadonlyAttribute
11908+
public var videoBitsPerSecond: UInt32
11909+
11910+
@ReadonlyAttribute
11911+
public var audioBitsPerSecond: UInt32
11912+
11913+
@ReadonlyAttribute
11914+
public var audioBitrateMode: BitrateMode
11915+
11916+
@inlinable public func start(timeslice: UInt32? = nil) {
11917+
let this = jsObject
11918+
_ = this[Strings.start].function!(this: this, arguments: [timeslice?.jsValue ?? .undefined])
11919+
}
11920+
11921+
@inlinable public func stop() {
11922+
let this = jsObject
11923+
_ = this[Strings.stop].function!(this: this, arguments: [])
11924+
}
11925+
11926+
@inlinable public func pause() {
11927+
let this = jsObject
11928+
_ = this[Strings.pause].function!(this: this, arguments: [])
11929+
}
11930+
11931+
@inlinable public func resume() {
11932+
let this = jsObject
11933+
_ = this[Strings.resume].function!(this: this, arguments: [])
11934+
}
11935+
11936+
@inlinable public func requestData() {
11937+
let this = jsObject
11938+
_ = this[Strings.requestData].function!(this: this, arguments: [])
11939+
}
11940+
11941+
@inlinable public static func isTypeSupported(type: String) -> Bool {
11942+
let this = constructor
11943+
return this[Strings.isTypeSupported].function!(this: this, arguments: [type.jsValue]).fromJSValue()!
11944+
}
11945+
}
11946+
11947+
public class MediaRecorderErrorEvent: Event {
11948+
@inlinable override public class var constructor: JSFunction { JSObject.global[Strings.MediaRecorderErrorEvent].function! }
11949+
11950+
public required init(unsafelyWrapping jsObject: JSObject) {
11951+
_error = ReadonlyAttribute(jsObject: jsObject, name: Strings.error)
11952+
super.init(unsafelyWrapping: jsObject)
11953+
}
11954+
11955+
@inlinable public convenience init(type: String, eventInitDict: MediaRecorderErrorEventInit) {
11956+
self.init(unsafelyWrapping: Self.constructor.new(arguments: [type.jsValue, eventInitDict.jsValue]))
11957+
}
11958+
11959+
@ReadonlyAttribute
11960+
public var error: DOMException
11961+
}
11962+
11963+
public class MediaRecorderErrorEventInit: BridgedDictionary {
11964+
public convenience init(error: DOMException) {
11965+
let object = JSObject.global[Strings.Object].function!.new()
11966+
object[Strings.error] = error.jsValue
11967+
self.init(unsafelyWrapping: object)
11968+
}
11969+
11970+
public required init(unsafelyWrapping object: JSObject) {
11971+
_error = ReadWriteAttribute(jsObject: object, name: Strings.error)
11972+
super.init(unsafelyWrapping: object)
11973+
}
11974+
11975+
@ReadWriteAttribute
11976+
public var error: DOMException
11977+
}
11978+
11979+
public class MediaRecorderOptions: BridgedDictionary {
11980+
public convenience init(mimeType: String, audioBitsPerSecond: UInt32, videoBitsPerSecond: UInt32, bitsPerSecond: UInt32, audioBitrateMode: BitrateMode) {
11981+
let object = JSObject.global[Strings.Object].function!.new()
11982+
object[Strings.mimeType] = mimeType.jsValue
11983+
object[Strings.audioBitsPerSecond] = audioBitsPerSecond.jsValue
11984+
object[Strings.videoBitsPerSecond] = videoBitsPerSecond.jsValue
11985+
object[Strings.bitsPerSecond] = bitsPerSecond.jsValue
11986+
object[Strings.audioBitrateMode] = audioBitrateMode.jsValue
11987+
self.init(unsafelyWrapping: object)
11988+
}
11989+
11990+
public required init(unsafelyWrapping object: JSObject) {
11991+
_mimeType = ReadWriteAttribute(jsObject: object, name: Strings.mimeType)
11992+
_audioBitsPerSecond = ReadWriteAttribute(jsObject: object, name: Strings.audioBitsPerSecond)
11993+
_videoBitsPerSecond = ReadWriteAttribute(jsObject: object, name: Strings.videoBitsPerSecond)
11994+
_bitsPerSecond = ReadWriteAttribute(jsObject: object, name: Strings.bitsPerSecond)
11995+
_audioBitrateMode = ReadWriteAttribute(jsObject: object, name: Strings.audioBitrateMode)
11996+
super.init(unsafelyWrapping: object)
11997+
}
11998+
11999+
@ReadWriteAttribute
12000+
public var mimeType: String
12001+
12002+
@ReadWriteAttribute
12003+
public var audioBitsPerSecond: UInt32
12004+
12005+
@ReadWriteAttribute
12006+
public var videoBitsPerSecond: UInt32
12007+
12008+
@ReadWriteAttribute
12009+
public var bitsPerSecond: UInt32
12010+
12011+
@ReadWriteAttribute
12012+
public var audioBitrateMode: BitrateMode
12013+
}
12014+
1179812015
public class MediaStream: EventTarget {
1179912016
@inlinable override public class var constructor: JSFunction { JSObject.global[Strings.MediaStream].function! }
1180012017

@@ -14962,6 +15179,25 @@ public class ReadableWritablePair: BridgedDictionary {
1496215179
public var writable: WritableStream
1496315180
}
1496415181

15182+
public enum RecordingState: JSString, JSValueCompatible {
15183+
case inactive = "inactive"
15184+
case recording = "recording"
15185+
case paused = "paused"
15186+
15187+
@inlinable public static func construct(from jsValue: JSValue) -> Self? {
15188+
if let string = jsValue.jsString {
15189+
return Self(rawValue: string)
15190+
}
15191+
return nil
15192+
}
15193+
15194+
@inlinable public init?(string: String) {
15195+
self.init(rawValue: JSString(string))
15196+
}
15197+
15198+
@inlinable public var jsValue: JSValue { rawValue.jsValue }
15199+
}
15200+
1496515201
public enum ReferrerPolicy: JSString, JSValueCompatible {
1496615202
case _empty = ""
1496715203
case noReferrer = "no-referrer"
@@ -16688,11 +16924,11 @@ public typealias TransformerStartCallback = (TransformStreamDefaultController) -
1668816924
public typealias TransformerFlushCallback = (TransformStreamDefaultController) -> JSPromise
1668916925
public typealias TransformerTransformCallback = (JSValue, TransformStreamDefaultController) -> JSPromise
1669016926
public typealias QueuingStrategySize = (JSValue) -> Double
16691-
public typealias NavigatorUserMediaSuccessCallback = (MediaStream) -> Void
16692-
public typealias NavigatorUserMediaErrorCallback = (DOMException) -> Void
1669316927
public typealias DecodeErrorCallback = (DOMException) -> Void
1669416928
public typealias DecodeSuccessCallback = (AudioBuffer) -> Void
1669516929
public typealias AudioWorkletProcessCallback = ([[Float32Array]], [[Float32Array]], JSObject) -> Bool
16930+
public typealias NavigatorUserMediaSuccessCallback = (MediaStream) -> Void
16931+
public typealias NavigatorUserMediaErrorCallback = (DOMException) -> Void
1669616932
public class UIEvent: Event {
1669716933
@inlinable override public class var constructor: JSFunction { JSObject.global[Strings.UIEvent].function! }
1669816934

@@ -19121,6 +19357,7 @@ public enum console {
1912119357
@usableFromInline static let BeforeUnloadEvent: JSString = "BeforeUnloadEvent"
1912219358
@usableFromInline static let BiquadFilterNode: JSString = "BiquadFilterNode"
1912319359
@usableFromInline static let Blob: JSString = "Blob"
19360+
@usableFromInline static let BlobEvent: JSString = "BlobEvent"
1912419361
@usableFromInline static let BroadcastChannel: JSString = "BroadcastChannel"
1912519362
@usableFromInline static let ByteLengthQueuingStrategy: JSString = "ByteLengthQueuingStrategy"
1912619363
@usableFromInline static let CDATASection: JSString = "CDATASection"
@@ -19275,6 +19512,8 @@ public enum console {
1927519512
@usableFromInline static let MediaError: JSString = "MediaError"
1927619513
@usableFromInline static let MediaQueryList: JSString = "MediaQueryList"
1927719514
@usableFromInline static let MediaQueryListEvent: JSString = "MediaQueryListEvent"
19515+
@usableFromInline static let MediaRecorder: JSString = "MediaRecorder"
19516+
@usableFromInline static let MediaRecorderErrorEvent: JSString = "MediaRecorderErrorEvent"
1927819517
@usableFromInline static let MediaStream: JSString = "MediaStream"
1927919518
@usableFromInline static let MediaStreamAudioDestinationNode: JSString = "MediaStreamAudioDestinationNode"
1928019519
@usableFromInline static let MediaStreamAudioSourceNode: JSString = "MediaStreamAudioSourceNode"
@@ -19486,6 +19725,8 @@ public enum console {
1948619725
@usableFromInline static let attributeOldValue: JSString = "attributeOldValue"
1948719726
@usableFromInline static let attributes: JSString = "attributes"
1948819727
@usableFromInline static let audio: JSString = "audio"
19728+
@usableFromInline static let audioBitrateMode: JSString = "audioBitrateMode"
19729+
@usableFromInline static let audioBitsPerSecond: JSString = "audioBitsPerSecond"
1948919730
@usableFromInline static let audioTracks: JSString = "audioTracks"
1949019731
@usableFromInline static let audioWorklet: JSString = "audioWorklet"
1949119732
@usableFromInline static let autoAllocateChunkSize: JSString = "autoAllocateChunkSize"
@@ -19510,6 +19751,7 @@ public enum console {
1951019751
@usableFromInline static let bezierCurveTo: JSString = "bezierCurveTo"
1951119752
@usableFromInline static let bgColor: JSString = "bgColor"
1951219753
@usableFromInline static let binaryType: JSString = "binaryType"
19754+
@usableFromInline static let bitsPerSecond: JSString = "bitsPerSecond"
1951319755
@usableFromInline static let blob: JSString = "blob"
1951419756
@usableFromInline static let block: JSString = "block"
1951519757
@usableFromInline static let blocking: JSString = "blocking"
@@ -20031,6 +20273,7 @@ public enum console {
2003120273
@usableFromInline static let isSameNode: JSString = "isSameNode"
2003220274
@usableFromInline static let isSecureContext: JSString = "isSecureContext"
2003320275
@usableFromInline static let isTrusted: JSString = "isTrusted"
20276+
@usableFromInline static let isTypeSupported: JSString = "isTypeSupported"
2003420277
@usableFromInline static let isVisible: JSString = "isVisible"
2003520278
@usableFromInline static let item: JSString = "item"
2003620279
@usableFromInline static let items: JSString = "items"
@@ -20129,6 +20372,7 @@ public enum console {
2012920372
@usableFromInline static let message: JSString = "message"
2013020373
@usableFromInline static let metaKey: JSString = "metaKey"
2013120374
@usableFromInline static let method: JSString = "method"
20375+
@usableFromInline static let mimeType: JSString = "mimeType"
2013220376
@usableFromInline static let mimeTypes: JSString = "mimeTypes"
2013320377
@usableFromInline static let min: JSString = "min"
2013420378
@usableFromInline static let minDecibels: JSString = "minDecibels"
@@ -20219,6 +20463,7 @@ public enum console {
2021920463
@usableFromInline static let oncopy: JSString = "oncopy"
2022020464
@usableFromInline static let oncuechange: JSString = "oncuechange"
2022120465
@usableFromInline static let oncut: JSString = "oncut"
20466+
@usableFromInline static let ondataavailable: JSString = "ondataavailable"
2022220467
@usableFromInline static let ondblclick: JSString = "ondblclick"
2022320468
@usableFromInline static let ondevicechange: JSString = "ondevicechange"
2022420469
@usableFromInline static let ondrag: JSString = "ondrag"
@@ -20278,14 +20523,17 @@ public enum console {
2027820523
@usableFromInline static let onremovetrack: JSString = "onremovetrack"
2027920524
@usableFromInline static let onreset: JSString = "onreset"
2028020525
@usableFromInline static let onresize: JSString = "onresize"
20526+
@usableFromInline static let onresume: JSString = "onresume"
2028120527
@usableFromInline static let onscroll: JSString = "onscroll"
2028220528
@usableFromInline static let onsecuritypolicyviolation: JSString = "onsecuritypolicyviolation"
2028320529
@usableFromInline static let onseeked: JSString = "onseeked"
2028420530
@usableFromInline static let onseeking: JSString = "onseeking"
2028520531
@usableFromInline static let onselect: JSString = "onselect"
2028620532
@usableFromInline static let onslotchange: JSString = "onslotchange"
2028720533
@usableFromInline static let onstalled: JSString = "onstalled"
20534+
@usableFromInline static let onstart: JSString = "onstart"
2028820535
@usableFromInline static let onstatechange: JSString = "onstatechange"
20536+
@usableFromInline static let onstop: JSString = "onstop"
2028920537
@usableFromInline static let onstorage: JSString = "onstorage"
2029020538
@usableFromInline static let onsubmit: JSString = "onsubmit"
2029120539
@usableFromInline static let onsuspend: JSString = "onsuspend"
@@ -20481,6 +20729,7 @@ public enum console {
2048120729
@usableFromInline static let reportError: JSString = "reportError"
2048220730
@usableFromInline static let reportValidity: JSString = "reportValidity"
2048320731
@usableFromInline static let request: JSString = "request"
20732+
@usableFromInline static let requestData: JSString = "requestData"
2048420733
@usableFromInline static let requestSubmit: JSString = "requestSubmit"
2048520734
@usableFromInline static let required: JSString = "required"
2048620735
@usableFromInline static let reset: JSString = "reset"
@@ -20707,6 +20956,7 @@ public enum console {
2070720956
@usableFromInline static let timeLog: JSString = "timeLog"
2070820957
@usableFromInline static let timeOrigin: JSString = "timeOrigin"
2070920958
@usableFromInline static let timeStamp: JSString = "timeStamp"
20959+
@usableFromInline static let timecode: JSString = "timecode"
2071020960
@usableFromInline static let timeline: JSString = "timeline"
2071120961
@usableFromInline static let timeout: JSString = "timeout"
2071220962
@usableFromInline static let title: JSString = "title"
@@ -20768,6 +21018,7 @@ public enum console {
2076821018
@usableFromInline static let vendorSub: JSString = "vendorSub"
2076921019
@usableFromInline static let version: JSString = "version"
2077021020
@usableFromInline static let video: JSString = "video"
21021+
@usableFromInline static let videoBitsPerSecond: JSString = "videoBitsPerSecond"
2077121022
@usableFromInline static let videoHeight: JSString = "videoHeight"
2077221023
@usableFromInline static let videoTracks: JSString = "videoTracks"
2077321024
@usableFromInline static let videoWidth: JSString = "videoWidth"

parse-idl/parse-all.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,9 @@ console.log(
2626
"websockets",
2727
"css-pseudo",
2828
"cssom-view",
29-
"mediacapture-streams",
3029
"webaudio",
30+
"mediacapture-streams",
31+
"mediastream-recording",
3132
].map((key) => parsedFiles[key]),
3233
null,
3334
2

0 commit comments

Comments
 (0)