Skip to content

Commit c6fb68d

Browse files
committed
Add mediastream-recording IDL and generated code
This is a requirement for `webgl2`, which I'm going to add in a future PR.
1 parent 03bd546 commit c6fb68d

File tree

2 files changed

+254
-0
lines changed

2 files changed

+254
-0
lines changed

Sources/DOMKit/Generated.swift

Lines changed: 253 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -760,6 +760,24 @@ public class BeforeUnloadEvent: Event {
760760
// XXX: member 'returnValue' is ignored
761761
}
762762

763+
public enum BitrateMode: JSString, JSValueCompatible {
764+
case constant = "constant"
765+
case variable = "variable"
766+
767+
@inlinable public static func construct(from jsValue: JSValue) -> Self? {
768+
if let string = jsValue.jsString {
769+
return Self(rawValue: string)
770+
}
771+
return nil
772+
}
773+
774+
@inlinable public init?(string: String) {
775+
self.init(rawValue: JSString(string))
776+
}
777+
778+
@inlinable public var jsValue: JSValue { rawValue.jsValue }
779+
}
780+
763781
public class Blob: JSBridgedClass {
764782
@inlinable public class var constructor: JSFunction { JSObject.global[Strings.Blob].function! }
765783

@@ -813,6 +831,47 @@ public class Blob: JSBridgedClass {
813831
}
814832
}
815833

834+
public class BlobEvent: Event {
835+
@inlinable override public class var constructor: JSFunction { JSObject.global[Strings.BlobEvent].function! }
836+
837+
public required init(unsafelyWrapping jsObject: JSObject) {
838+
_data = ReadonlyAttribute(jsObject: jsObject, name: Strings.data)
839+
_timecode = ReadonlyAttribute(jsObject: jsObject, name: Strings.timecode)
840+
super.init(unsafelyWrapping: jsObject)
841+
}
842+
843+
@inlinable public convenience init(type: String, eventInitDict: BlobEventInit) {
844+
self.init(unsafelyWrapping: Self.constructor.new(arguments: [type.jsValue, eventInitDict.jsValue]))
845+
}
846+
847+
@ReadonlyAttribute
848+
public var data: Blob
849+
850+
@ReadonlyAttribute
851+
public var timecode: DOMHighResTimeStamp
852+
}
853+
854+
public class BlobEventInit: BridgedDictionary {
855+
public convenience init(data: Blob, timecode: DOMHighResTimeStamp) {
856+
let object = JSObject.global[Strings.Object].function!.new()
857+
object[Strings.data] = data.jsValue
858+
object[Strings.timecode] = timecode.jsValue
859+
self.init(unsafelyWrapping: object)
860+
}
861+
862+
public required init(unsafelyWrapping object: JSObject) {
863+
_data = ReadWriteAttribute(jsObject: object, name: Strings.data)
864+
_timecode = ReadWriteAttribute(jsObject: object, name: Strings.timecode)
865+
super.init(unsafelyWrapping: object)
866+
}
867+
868+
@ReadWriteAttribute
869+
public var data: Blob
870+
871+
@ReadWriteAttribute
872+
public var timecode: DOMHighResTimeStamp
873+
}
874+
816875
public class BlobPropertyBag: BridgedDictionary {
817876
public convenience init(type: String, endings: EndingType) {
818877
let object = JSObject.global[Strings.Object].function!.new()
@@ -9918,6 +9977,164 @@ public class MediaError: JSBridgedClass {
99189977
public var message: String
99199978
}
99209979

9980+
public class MediaRecorder: EventTarget {
9981+
@inlinable override public class var constructor: JSFunction { JSObject.global[Strings.MediaRecorder].function! }
9982+
9983+
public required init(unsafelyWrapping jsObject: JSObject) {
9984+
_stream = ReadonlyAttribute(jsObject: jsObject, name: Strings.stream)
9985+
_mimeType = ReadonlyAttribute(jsObject: jsObject, name: Strings.mimeType)
9986+
_state = ReadonlyAttribute(jsObject: jsObject, name: Strings.state)
9987+
_onstart = ClosureAttribute1Optional(jsObject: jsObject, name: Strings.onstart)
9988+
_onstop = ClosureAttribute1Optional(jsObject: jsObject, name: Strings.onstop)
9989+
_ondataavailable = ClosureAttribute1Optional(jsObject: jsObject, name: Strings.ondataavailable)
9990+
_onpause = ClosureAttribute1Optional(jsObject: jsObject, name: Strings.onpause)
9991+
_onresume = ClosureAttribute1Optional(jsObject: jsObject, name: Strings.onresume)
9992+
_onerror = ClosureAttribute1Optional(jsObject: jsObject, name: Strings.onerror)
9993+
_videoBitsPerSecond = ReadonlyAttribute(jsObject: jsObject, name: Strings.videoBitsPerSecond)
9994+
_audioBitsPerSecond = ReadonlyAttribute(jsObject: jsObject, name: Strings.audioBitsPerSecond)
9995+
_audioBitrateMode = ReadonlyAttribute(jsObject: jsObject, name: Strings.audioBitrateMode)
9996+
super.init(unsafelyWrapping: jsObject)
9997+
}
9998+
9999+
@inlinable public convenience init(stream: MediaStream, options: MediaRecorderOptions? = nil) {
10000+
self.init(unsafelyWrapping: Self.constructor.new(arguments: [stream.jsValue, options?.jsValue ?? .undefined]))
10001+
}
10002+
10003+
@ReadonlyAttribute
10004+
public var stream: MediaStream
10005+
10006+
@ReadonlyAttribute
10007+
public var mimeType: String
10008+
10009+
@ReadonlyAttribute
10010+
public var state: RecordingState
10011+
10012+
@ClosureAttribute1Optional
10013+
public var onstart: EventHandler
10014+
10015+
@ClosureAttribute1Optional
10016+
public var onstop: EventHandler
10017+
10018+
@ClosureAttribute1Optional
10019+
public var ondataavailable: EventHandler
10020+
10021+
@ClosureAttribute1Optional
10022+
public var onpause: EventHandler
10023+
10024+
@ClosureAttribute1Optional
10025+
public var onresume: EventHandler
10026+
10027+
@ClosureAttribute1Optional
10028+
public var onerror: EventHandler
10029+
10030+
@ReadonlyAttribute
10031+
public var videoBitsPerSecond: UInt32
10032+
10033+
@ReadonlyAttribute
10034+
public var audioBitsPerSecond: UInt32
10035+
10036+
@ReadonlyAttribute
10037+
public var audioBitrateMode: BitrateMode
10038+
10039+
@inlinable public func start(timeslice: UInt32? = nil) {
10040+
let this = jsObject
10041+
_ = this[Strings.start].function!(this: this, arguments: [timeslice?.jsValue ?? .undefined])
10042+
}
10043+
10044+
@inlinable public func stop() {
10045+
let this = jsObject
10046+
_ = this[Strings.stop].function!(this: this, arguments: [])
10047+
}
10048+
10049+
@inlinable public func pause() {
10050+
let this = jsObject
10051+
_ = this[Strings.pause].function!(this: this, arguments: [])
10052+
}
10053+
10054+
@inlinable public func resume() {
10055+
let this = jsObject
10056+
_ = this[Strings.resume].function!(this: this, arguments: [])
10057+
}
10058+
10059+
@inlinable public func requestData() {
10060+
let this = jsObject
10061+
_ = this[Strings.requestData].function!(this: this, arguments: [])
10062+
}
10063+
10064+
@inlinable public static func isTypeSupported(type: String) -> Bool {
10065+
let this = constructor
10066+
return this[Strings.isTypeSupported].function!(this: this, arguments: [type.jsValue]).fromJSValue()!
10067+
}
10068+
}
10069+
10070+
public class MediaRecorderErrorEvent: Event {
10071+
@inlinable override public class var constructor: JSFunction { JSObject.global[Strings.MediaRecorderErrorEvent].function! }
10072+
10073+
public required init(unsafelyWrapping jsObject: JSObject) {
10074+
_error = ReadonlyAttribute(jsObject: jsObject, name: Strings.error)
10075+
super.init(unsafelyWrapping: jsObject)
10076+
}
10077+
10078+
@inlinable public convenience init(type: String, eventInitDict: MediaRecorderErrorEventInit) {
10079+
self.init(unsafelyWrapping: Self.constructor.new(arguments: [type.jsValue, eventInitDict.jsValue]))
10080+
}
10081+
10082+
@ReadonlyAttribute
10083+
public var error: DOMException
10084+
}
10085+
10086+
public class MediaRecorderErrorEventInit: BridgedDictionary {
10087+
public convenience init(error: DOMException) {
10088+
let object = JSObject.global[Strings.Object].function!.new()
10089+
object[Strings.error] = error.jsValue
10090+
self.init(unsafelyWrapping: object)
10091+
}
10092+
10093+
public required init(unsafelyWrapping object: JSObject) {
10094+
_error = ReadWriteAttribute(jsObject: object, name: Strings.error)
10095+
super.init(unsafelyWrapping: object)
10096+
}
10097+
10098+
@ReadWriteAttribute
10099+
public var error: DOMException
10100+
}
10101+
10102+
public class MediaRecorderOptions: BridgedDictionary {
10103+
public convenience init(mimeType: String, audioBitsPerSecond: UInt32, videoBitsPerSecond: UInt32, bitsPerSecond: UInt32, audioBitrateMode: BitrateMode) {
10104+
let object = JSObject.global[Strings.Object].function!.new()
10105+
object[Strings.mimeType] = mimeType.jsValue
10106+
object[Strings.audioBitsPerSecond] = audioBitsPerSecond.jsValue
10107+
object[Strings.videoBitsPerSecond] = videoBitsPerSecond.jsValue
10108+
object[Strings.bitsPerSecond] = bitsPerSecond.jsValue
10109+
object[Strings.audioBitrateMode] = audioBitrateMode.jsValue
10110+
self.init(unsafelyWrapping: object)
10111+
}
10112+
10113+
public required init(unsafelyWrapping object: JSObject) {
10114+
_mimeType = ReadWriteAttribute(jsObject: object, name: Strings.mimeType)
10115+
_audioBitsPerSecond = ReadWriteAttribute(jsObject: object, name: Strings.audioBitsPerSecond)
10116+
_videoBitsPerSecond = ReadWriteAttribute(jsObject: object, name: Strings.videoBitsPerSecond)
10117+
_bitsPerSecond = ReadWriteAttribute(jsObject: object, name: Strings.bitsPerSecond)
10118+
_audioBitrateMode = ReadWriteAttribute(jsObject: object, name: Strings.audioBitrateMode)
10119+
super.init(unsafelyWrapping: object)
10120+
}
10121+
10122+
@ReadWriteAttribute
10123+
public var mimeType: String
10124+
10125+
@ReadWriteAttribute
10126+
public var audioBitsPerSecond: UInt32
10127+
10128+
@ReadWriteAttribute
10129+
public var videoBitsPerSecond: UInt32
10130+
10131+
@ReadWriteAttribute
10132+
public var bitsPerSecond: UInt32
10133+
10134+
@ReadWriteAttribute
10135+
public var audioBitrateMode: BitrateMode
10136+
}
10137+
992110138
public class MediaStream: EventTarget {
992210139
@inlinable override public class var constructor: JSFunction { JSObject.global[Strings.MediaStream].function! }
992310140

@@ -12529,6 +12746,25 @@ public class ReadableWritablePair: BridgedDictionary {
1252912746
public var writable: WritableStream
1253012747
}
1253112748

12749+
public enum RecordingState: JSString, JSValueCompatible {
12750+
case inactive = "inactive"
12751+
case recording = "recording"
12752+
case paused = "paused"
12753+
12754+
@inlinable public static func construct(from jsValue: JSValue) -> Self? {
12755+
if let string = jsValue.jsString {
12756+
return Self(rawValue: string)
12757+
}
12758+
return nil
12759+
}
12760+
12761+
@inlinable public init?(string: String) {
12762+
self.init(rawValue: JSString(string))
12763+
}
12764+
12765+
@inlinable public var jsValue: JSValue { rawValue.jsValue }
12766+
}
12767+
1253212768
public enum ReferrerPolicy: JSString, JSValueCompatible {
1253312769
case _empty = ""
1253412770
case noReferrer = "no-referrer"
@@ -16206,6 +16442,7 @@ public enum console {
1620616442
@usableFromInline static let BarProp: JSString = "BarProp"
1620716443
@usableFromInline static let BeforeUnloadEvent: JSString = "BeforeUnloadEvent"
1620816444
@usableFromInline static let Blob: JSString = "Blob"
16445+
@usableFromInline static let BlobEvent: JSString = "BlobEvent"
1620916446
@usableFromInline static let BroadcastChannel: JSString = "BroadcastChannel"
1621016447
@usableFromInline static let ByteLengthQueuingStrategy: JSString = "ByteLengthQueuingStrategy"
1621116448
@usableFromInline static let CDATASection: JSString = "CDATASection"
@@ -16346,6 +16583,8 @@ public enum console {
1634616583
@usableFromInline static let MediaDeviceInfo: JSString = "MediaDeviceInfo"
1634716584
@usableFromInline static let MediaDevices: JSString = "MediaDevices"
1634816585
@usableFromInline static let MediaError: JSString = "MediaError"
16586+
@usableFromInline static let MediaRecorder: JSString = "MediaRecorder"
16587+
@usableFromInline static let MediaRecorderErrorEvent: JSString = "MediaRecorderErrorEvent"
1634916588
@usableFromInline static let MediaStream: JSString = "MediaStream"
1635016589
@usableFromInline static let MediaStreamTrack: JSString = "MediaStreamTrack"
1635116590
@usableFromInline static let MediaStreamTrackEvent: JSString = "MediaStreamTrackEvent"
@@ -16542,6 +16781,8 @@ public enum console {
1654216781
@usableFromInline static let attributeOldValue: JSString = "attributeOldValue"
1654316782
@usableFromInline static let attributes: JSString = "attributes"
1654416783
@usableFromInline static let audio: JSString = "audio"
16784+
@usableFromInline static let audioBitrateMode: JSString = "audioBitrateMode"
16785+
@usableFromInline static let audioBitsPerSecond: JSString = "audioBitsPerSecond"
1654516786
@usableFromInline static let audioTracks: JSString = "audioTracks"
1654616787
@usableFromInline static let autoAllocateChunkSize: JSString = "autoAllocateChunkSize"
1654716788
@usableFromInline static let autoGainControl: JSString = "autoGainControl"
@@ -16560,6 +16801,7 @@ public enum console {
1656016801
@usableFromInline static let behavior: JSString = "behavior"
1656116802
@usableFromInline static let bezierCurveTo: JSString = "bezierCurveTo"
1656216803
@usableFromInline static let bgColor: JSString = "bgColor"
16804+
@usableFromInline static let bitsPerSecond: JSString = "bitsPerSecond"
1656316805
@usableFromInline static let blob: JSString = "blob"
1656416806
@usableFromInline static let blocking: JSString = "blocking"
1656516807
@usableFromInline static let blur: JSString = "blur"
@@ -16996,6 +17238,7 @@ public enum console {
1699617238
@usableFromInline static let isSameNode: JSString = "isSameNode"
1699717239
@usableFromInline static let isSecureContext: JSString = "isSecureContext"
1699817240
@usableFromInline static let isTrusted: JSString = "isTrusted"
17241+
@usableFromInline static let isTypeSupported: JSString = "isTypeSupported"
1699917242
@usableFromInline static let item: JSString = "item"
1700017243
@usableFromInline static let items: JSString = "items"
1700117244
@usableFromInline static let iterateNext: JSString = "iterateNext"
@@ -17078,6 +17321,7 @@ public enum console {
1707817321
@usableFromInline static let message: JSString = "message"
1707917322
@usableFromInline static let metaKey: JSString = "metaKey"
1708017323
@usableFromInline static let method: JSString = "method"
17324+
@usableFromInline static let mimeType: JSString = "mimeType"
1708117325
@usableFromInline static let mimeTypes: JSString = "mimeTypes"
1708217326
@usableFromInline static let min: JSString = "min"
1708317327
@usableFromInline static let minLength: JSString = "minLength"
@@ -17152,6 +17396,7 @@ public enum console {
1715217396
@usableFromInline static let oncopy: JSString = "oncopy"
1715317397
@usableFromInline static let oncuechange: JSString = "oncuechange"
1715417398
@usableFromInline static let oncut: JSString = "oncut"
17399+
@usableFromInline static let ondataavailable: JSString = "ondataavailable"
1715517400
@usableFromInline static let ondblclick: JSString = "ondblclick"
1715617401
@usableFromInline static let ondevicechange: JSString = "ondevicechange"
1715717402
@usableFromInline static let ondrag: JSString = "ondrag"
@@ -17210,14 +17455,17 @@ public enum console {
1721017455
@usableFromInline static let onremovetrack: JSString = "onremovetrack"
1721117456
@usableFromInline static let onreset: JSString = "onreset"
1721217457
@usableFromInline static let onresize: JSString = "onresize"
17458+
@usableFromInline static let onresume: JSString = "onresume"
1721317459
@usableFromInline static let onscroll: JSString = "onscroll"
1721417460
@usableFromInline static let onsecuritypolicyviolation: JSString = "onsecuritypolicyviolation"
1721517461
@usableFromInline static let onseeked: JSString = "onseeked"
1721617462
@usableFromInline static let onseeking: JSString = "onseeking"
1721717463
@usableFromInline static let onselect: JSString = "onselect"
1721817464
@usableFromInline static let onslotchange: JSString = "onslotchange"
1721917465
@usableFromInline static let onstalled: JSString = "onstalled"
17466+
@usableFromInline static let onstart: JSString = "onstart"
1722017467
@usableFromInline static let onstatechange: JSString = "onstatechange"
17468+
@usableFromInline static let onstop: JSString = "onstop"
1722117469
@usableFromInline static let onstorage: JSString = "onstorage"
1722217470
@usableFromInline static let onsubmit: JSString = "onsubmit"
1722317471
@usableFromInline static let onsuspend: JSString = "onsuspend"
@@ -17380,6 +17628,7 @@ public enum console {
1738017628
@usableFromInline static let reportError: JSString = "reportError"
1738117629
@usableFromInline static let reportValidity: JSString = "reportValidity"
1738217630
@usableFromInline static let request: JSString = "request"
17631+
@usableFromInline static let requestData: JSString = "requestData"
1738317632
@usableFromInline static let requestSubmit: JSString = "requestSubmit"
1738417633
@usableFromInline static let required: JSString = "required"
1738517634
@usableFromInline static let reset: JSString = "reset"
@@ -17399,6 +17648,7 @@ public enum console {
1739917648
@usableFromInline static let result: JSString = "result"
1740017649
@usableFromInline static let resultType: JSString = "resultType"
1740117650
@usableFromInline static let resultingClientId: JSString = "resultingClientId"
17651+
@usableFromInline static let resume: JSString = "resume"
1740217652
@usableFromInline static let returnValue: JSString = "returnValue"
1740317653
@usableFromInline static let rev: JSString = "rev"
1740417654
@usableFromInline static let reverse: JSString = "reverse"
@@ -17537,6 +17787,7 @@ public enum console {
1753717787
@usableFromInline static let stopImmediatePropagation: JSString = "stopImmediatePropagation"
1753817788
@usableFromInline static let stopPropagation: JSString = "stopPropagation"
1753917789
@usableFromInline static let storageArea: JSString = "storageArea"
17790+
@usableFromInline static let stream: JSString = "stream"
1754017791
@usableFromInline static let stringValue: JSString = "stringValue"
1754117792
@usableFromInline static let stroke: JSString = "stroke"
1754217793
@usableFromInline static let strokeRect: JSString = "strokeRect"
@@ -17577,6 +17828,7 @@ public enum console {
1757717828
@usableFromInline static let timeLog: JSString = "timeLog"
1757817829
@usableFromInline static let timeOrigin: JSString = "timeOrigin"
1757917830
@usableFromInline static let timeStamp: JSString = "timeStamp"
17831+
@usableFromInline static let timecode: JSString = "timecode"
1758017832
@usableFromInline static let timeline: JSString = "timeline"
1758117833
@usableFromInline static let timeout: JSString = "timeout"
1758217834
@usableFromInline static let title: JSString = "title"
@@ -17634,6 +17886,7 @@ public enum console {
1763417886
@usableFromInline static let vendorSub: JSString = "vendorSub"
1763517887
@usableFromInline static let version: JSString = "version"
1763617888
@usableFromInline static let video: JSString = "video"
17889+
@usableFromInline static let videoBitsPerSecond: JSString = "videoBitsPerSecond"
1763717890
@usableFromInline static let videoHeight: JSString = "videoHeight"
1763817891
@usableFromInline static let videoTracks: JSString = "videoTracks"
1763917892
@usableFromInline static let videoWidth: JSString = "videoWidth"

parse-idl/parse-all.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ console.log(
2424
"url",
2525
"streams",
2626
"mediacapture-streams",
27+
"mediastream-recording",
2728
].map((key) => parsedFiles[key]),
2829
null,
2930
2

0 commit comments

Comments
 (0)