Skip to content

Add mediastream-recording IDL and generated code #24

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
May 3, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
255 changes: 253 additions & 2 deletions Sources/DOMKit/Generated.swift
Original file line number Diff line number Diff line change
Expand Up @@ -1847,6 +1847,24 @@ public enum BiquadFilterType: JSString, JSValueCompatible {
@inlinable public var jsValue: JSValue { rawValue.jsValue }
}

public enum BitrateMode: JSString, JSValueCompatible {
case constant = "constant"
case variable = "variable"

@inlinable public static func construct(from jsValue: JSValue) -> Self? {
if let string = jsValue.jsString {
return Self(rawValue: string)
}
return nil
}

@inlinable public init?(string: String) {
self.init(rawValue: JSString(string))
}

@inlinable public var jsValue: JSValue { rawValue.jsValue }
}

public class Blob: JSBridgedClass {
@inlinable public class var constructor: JSFunction { JSObject.global[Strings.Blob].function! }

Expand Down Expand Up @@ -1900,6 +1918,47 @@ public class Blob: JSBridgedClass {
}
}

public class BlobEvent: Event {
@inlinable override public class var constructor: JSFunction { JSObject.global[Strings.BlobEvent].function! }

public required init(unsafelyWrapping jsObject: JSObject) {
_data = ReadonlyAttribute(jsObject: jsObject, name: Strings.data)
_timecode = ReadonlyAttribute(jsObject: jsObject, name: Strings.timecode)
super.init(unsafelyWrapping: jsObject)
}

@inlinable public convenience init(type: String, eventInitDict: BlobEventInit) {
self.init(unsafelyWrapping: Self.constructor.new(arguments: [type.jsValue, eventInitDict.jsValue]))
}

@ReadonlyAttribute
public var data: Blob

@ReadonlyAttribute
public var timecode: DOMHighResTimeStamp
}

public class BlobEventInit: BridgedDictionary {
public convenience init(data: Blob, timecode: DOMHighResTimeStamp) {
let object = JSObject.global[Strings.Object].function!.new()
object[Strings.data] = data.jsValue
object[Strings.timecode] = timecode.jsValue
self.init(unsafelyWrapping: object)
}

public required init(unsafelyWrapping object: JSObject) {
_data = ReadWriteAttribute(jsObject: object, name: Strings.data)
_timecode = ReadWriteAttribute(jsObject: object, name: Strings.timecode)
super.init(unsafelyWrapping: object)
}

@ReadWriteAttribute
public var data: Blob

@ReadWriteAttribute
public var timecode: DOMHighResTimeStamp
}

public class BlobPropertyBag: BridgedDictionary {
public convenience init(type: String, endings: EndingType) {
let object = JSObject.global[Strings.Object].function!.new()
Expand Down Expand Up @@ -11795,6 +11854,164 @@ public class MediaQueryListEventInit: BridgedDictionary {
public var matches: Bool
}

public class MediaRecorder: EventTarget {
@inlinable override public class var constructor: JSFunction { JSObject.global[Strings.MediaRecorder].function! }

public required init(unsafelyWrapping jsObject: JSObject) {
_stream = ReadonlyAttribute(jsObject: jsObject, name: Strings.stream)
_mimeType = ReadonlyAttribute(jsObject: jsObject, name: Strings.mimeType)
_state = ReadonlyAttribute(jsObject: jsObject, name: Strings.state)
_onstart = ClosureAttribute1Optional(jsObject: jsObject, name: Strings.onstart)
_onstop = ClosureAttribute1Optional(jsObject: jsObject, name: Strings.onstop)
_ondataavailable = ClosureAttribute1Optional(jsObject: jsObject, name: Strings.ondataavailable)
_onpause = ClosureAttribute1Optional(jsObject: jsObject, name: Strings.onpause)
_onresume = ClosureAttribute1Optional(jsObject: jsObject, name: Strings.onresume)
_onerror = ClosureAttribute1Optional(jsObject: jsObject, name: Strings.onerror)
_videoBitsPerSecond = ReadonlyAttribute(jsObject: jsObject, name: Strings.videoBitsPerSecond)
_audioBitsPerSecond = ReadonlyAttribute(jsObject: jsObject, name: Strings.audioBitsPerSecond)
_audioBitrateMode = ReadonlyAttribute(jsObject: jsObject, name: Strings.audioBitrateMode)
super.init(unsafelyWrapping: jsObject)
}

@inlinable public convenience init(stream: MediaStream, options: MediaRecorderOptions? = nil) {
self.init(unsafelyWrapping: Self.constructor.new(arguments: [stream.jsValue, options?.jsValue ?? .undefined]))
}

@ReadonlyAttribute
public var stream: MediaStream

@ReadonlyAttribute
public var mimeType: String

@ReadonlyAttribute
public var state: RecordingState

@ClosureAttribute1Optional
public var onstart: EventHandler

@ClosureAttribute1Optional
public var onstop: EventHandler

@ClosureAttribute1Optional
public var ondataavailable: EventHandler

@ClosureAttribute1Optional
public var onpause: EventHandler

@ClosureAttribute1Optional
public var onresume: EventHandler

@ClosureAttribute1Optional
public var onerror: EventHandler

@ReadonlyAttribute
public var videoBitsPerSecond: UInt32

@ReadonlyAttribute
public var audioBitsPerSecond: UInt32

@ReadonlyAttribute
public var audioBitrateMode: BitrateMode

@inlinable public func start(timeslice: UInt32? = nil) {
let this = jsObject
_ = this[Strings.start].function!(this: this, arguments: [timeslice?.jsValue ?? .undefined])
}

@inlinable public func stop() {
let this = jsObject
_ = this[Strings.stop].function!(this: this, arguments: [])
}

@inlinable public func pause() {
let this = jsObject
_ = this[Strings.pause].function!(this: this, arguments: [])
}

@inlinable public func resume() {
let this = jsObject
_ = this[Strings.resume].function!(this: this, arguments: [])
}

@inlinable public func requestData() {
let this = jsObject
_ = this[Strings.requestData].function!(this: this, arguments: [])
}

@inlinable public static func isTypeSupported(type: String) -> Bool {
let this = constructor
return this[Strings.isTypeSupported].function!(this: this, arguments: [type.jsValue]).fromJSValue()!
}
}

public class MediaRecorderErrorEvent: Event {
@inlinable override public class var constructor: JSFunction { JSObject.global[Strings.MediaRecorderErrorEvent].function! }

public required init(unsafelyWrapping jsObject: JSObject) {
_error = ReadonlyAttribute(jsObject: jsObject, name: Strings.error)
super.init(unsafelyWrapping: jsObject)
}

@inlinable public convenience init(type: String, eventInitDict: MediaRecorderErrorEventInit) {
self.init(unsafelyWrapping: Self.constructor.new(arguments: [type.jsValue, eventInitDict.jsValue]))
}

@ReadonlyAttribute
public var error: DOMException
}

public class MediaRecorderErrorEventInit: BridgedDictionary {
public convenience init(error: DOMException) {
let object = JSObject.global[Strings.Object].function!.new()
object[Strings.error] = error.jsValue
self.init(unsafelyWrapping: object)
}

public required init(unsafelyWrapping object: JSObject) {
_error = ReadWriteAttribute(jsObject: object, name: Strings.error)
super.init(unsafelyWrapping: object)
}

@ReadWriteAttribute
public var error: DOMException
}

public class MediaRecorderOptions: BridgedDictionary {
public convenience init(mimeType: String, audioBitsPerSecond: UInt32, videoBitsPerSecond: UInt32, bitsPerSecond: UInt32, audioBitrateMode: BitrateMode) {
let object = JSObject.global[Strings.Object].function!.new()
object[Strings.mimeType] = mimeType.jsValue
object[Strings.audioBitsPerSecond] = audioBitsPerSecond.jsValue
object[Strings.videoBitsPerSecond] = videoBitsPerSecond.jsValue
object[Strings.bitsPerSecond] = bitsPerSecond.jsValue
object[Strings.audioBitrateMode] = audioBitrateMode.jsValue
self.init(unsafelyWrapping: object)
}

public required init(unsafelyWrapping object: JSObject) {
_mimeType = ReadWriteAttribute(jsObject: object, name: Strings.mimeType)
_audioBitsPerSecond = ReadWriteAttribute(jsObject: object, name: Strings.audioBitsPerSecond)
_videoBitsPerSecond = ReadWriteAttribute(jsObject: object, name: Strings.videoBitsPerSecond)
_bitsPerSecond = ReadWriteAttribute(jsObject: object, name: Strings.bitsPerSecond)
_audioBitrateMode = ReadWriteAttribute(jsObject: object, name: Strings.audioBitrateMode)
super.init(unsafelyWrapping: object)
}

@ReadWriteAttribute
public var mimeType: String

@ReadWriteAttribute
public var audioBitsPerSecond: UInt32

@ReadWriteAttribute
public var videoBitsPerSecond: UInt32

@ReadWriteAttribute
public var bitsPerSecond: UInt32

@ReadWriteAttribute
public var audioBitrateMode: BitrateMode
}

public class MediaStream: EventTarget {
@inlinable override public class var constructor: JSFunction { JSObject.global[Strings.MediaStream].function! }

Expand Down Expand Up @@ -14962,6 +15179,25 @@ public class ReadableWritablePair: BridgedDictionary {
public var writable: WritableStream
}

public enum RecordingState: JSString, JSValueCompatible {
case inactive = "inactive"
case recording = "recording"
case paused = "paused"

@inlinable public static func construct(from jsValue: JSValue) -> Self? {
if let string = jsValue.jsString {
return Self(rawValue: string)
}
return nil
}

@inlinable public init?(string: String) {
self.init(rawValue: JSString(string))
}

@inlinable public var jsValue: JSValue { rawValue.jsValue }
}

public enum ReferrerPolicy: JSString, JSValueCompatible {
case _empty = ""
case noReferrer = "no-referrer"
Expand Down Expand Up @@ -16688,11 +16924,11 @@ public typealias TransformerStartCallback = (TransformStreamDefaultController) -
public typealias TransformerFlushCallback = (TransformStreamDefaultController) -> JSPromise
public typealias TransformerTransformCallback = (JSValue, TransformStreamDefaultController) -> JSPromise
public typealias QueuingStrategySize = (JSValue) -> Double
public typealias NavigatorUserMediaSuccessCallback = (MediaStream) -> Void
public typealias NavigatorUserMediaErrorCallback = (DOMException) -> Void
public typealias DecodeErrorCallback = (DOMException) -> Void
public typealias DecodeSuccessCallback = (AudioBuffer) -> Void
public typealias AudioWorkletProcessCallback = ([[Float32Array]], [[Float32Array]], JSObject) -> Bool
public typealias NavigatorUserMediaSuccessCallback = (MediaStream) -> Void
public typealias NavigatorUserMediaErrorCallback = (DOMException) -> Void
public class UIEvent: Event {
@inlinable override public class var constructor: JSFunction { JSObject.global[Strings.UIEvent].function! }

Expand Down Expand Up @@ -19121,6 +19357,7 @@ public enum console {
@usableFromInline static let BeforeUnloadEvent: JSString = "BeforeUnloadEvent"
@usableFromInline static let BiquadFilterNode: JSString = "BiquadFilterNode"
@usableFromInline static let Blob: JSString = "Blob"
@usableFromInline static let BlobEvent: JSString = "BlobEvent"
@usableFromInline static let BroadcastChannel: JSString = "BroadcastChannel"
@usableFromInline static let ByteLengthQueuingStrategy: JSString = "ByteLengthQueuingStrategy"
@usableFromInline static let CDATASection: JSString = "CDATASection"
Expand Down Expand Up @@ -19275,6 +19512,8 @@ public enum console {
@usableFromInline static let MediaError: JSString = "MediaError"
@usableFromInline static let MediaQueryList: JSString = "MediaQueryList"
@usableFromInline static let MediaQueryListEvent: JSString = "MediaQueryListEvent"
@usableFromInline static let MediaRecorder: JSString = "MediaRecorder"
@usableFromInline static let MediaRecorderErrorEvent: JSString = "MediaRecorderErrorEvent"
@usableFromInline static let MediaStream: JSString = "MediaStream"
@usableFromInline static let MediaStreamAudioDestinationNode: JSString = "MediaStreamAudioDestinationNode"
@usableFromInline static let MediaStreamAudioSourceNode: JSString = "MediaStreamAudioSourceNode"
Expand Down Expand Up @@ -19486,6 +19725,8 @@ public enum console {
@usableFromInline static let attributeOldValue: JSString = "attributeOldValue"
@usableFromInline static let attributes: JSString = "attributes"
@usableFromInline static let audio: JSString = "audio"
@usableFromInline static let audioBitrateMode: JSString = "audioBitrateMode"
@usableFromInline static let audioBitsPerSecond: JSString = "audioBitsPerSecond"
@usableFromInline static let audioTracks: JSString = "audioTracks"
@usableFromInline static let audioWorklet: JSString = "audioWorklet"
@usableFromInline static let autoAllocateChunkSize: JSString = "autoAllocateChunkSize"
Expand All @@ -19510,6 +19751,7 @@ public enum console {
@usableFromInline static let bezierCurveTo: JSString = "bezierCurveTo"
@usableFromInline static let bgColor: JSString = "bgColor"
@usableFromInline static let binaryType: JSString = "binaryType"
@usableFromInline static let bitsPerSecond: JSString = "bitsPerSecond"
@usableFromInline static let blob: JSString = "blob"
@usableFromInline static let block: JSString = "block"
@usableFromInline static let blocking: JSString = "blocking"
Expand Down Expand Up @@ -20031,6 +20273,7 @@ public enum console {
@usableFromInline static let isSameNode: JSString = "isSameNode"
@usableFromInline static let isSecureContext: JSString = "isSecureContext"
@usableFromInline static let isTrusted: JSString = "isTrusted"
@usableFromInline static let isTypeSupported: JSString = "isTypeSupported"
@usableFromInline static let isVisible: JSString = "isVisible"
@usableFromInline static let item: JSString = "item"
@usableFromInline static let items: JSString = "items"
Expand Down Expand Up @@ -20129,6 +20372,7 @@ public enum console {
@usableFromInline static let message: JSString = "message"
@usableFromInline static let metaKey: JSString = "metaKey"
@usableFromInline static let method: JSString = "method"
@usableFromInline static let mimeType: JSString = "mimeType"
@usableFromInline static let mimeTypes: JSString = "mimeTypes"
@usableFromInline static let min: JSString = "min"
@usableFromInline static let minDecibels: JSString = "minDecibels"
Expand Down Expand Up @@ -20219,6 +20463,7 @@ public enum console {
@usableFromInline static let oncopy: JSString = "oncopy"
@usableFromInline static let oncuechange: JSString = "oncuechange"
@usableFromInline static let oncut: JSString = "oncut"
@usableFromInline static let ondataavailable: JSString = "ondataavailable"
@usableFromInline static let ondblclick: JSString = "ondblclick"
@usableFromInline static let ondevicechange: JSString = "ondevicechange"
@usableFromInline static let ondrag: JSString = "ondrag"
Expand Down Expand Up @@ -20278,14 +20523,17 @@ public enum console {
@usableFromInline static let onremovetrack: JSString = "onremovetrack"
@usableFromInline static let onreset: JSString = "onreset"
@usableFromInline static let onresize: JSString = "onresize"
@usableFromInline static let onresume: JSString = "onresume"
@usableFromInline static let onscroll: JSString = "onscroll"
@usableFromInline static let onsecuritypolicyviolation: JSString = "onsecuritypolicyviolation"
@usableFromInline static let onseeked: JSString = "onseeked"
@usableFromInline static let onseeking: JSString = "onseeking"
@usableFromInline static let onselect: JSString = "onselect"
@usableFromInline static let onslotchange: JSString = "onslotchange"
@usableFromInline static let onstalled: JSString = "onstalled"
@usableFromInline static let onstart: JSString = "onstart"
@usableFromInline static let onstatechange: JSString = "onstatechange"
@usableFromInline static let onstop: JSString = "onstop"
@usableFromInline static let onstorage: JSString = "onstorage"
@usableFromInline static let onsubmit: JSString = "onsubmit"
@usableFromInline static let onsuspend: JSString = "onsuspend"
Expand Down Expand Up @@ -20481,6 +20729,7 @@ public enum console {
@usableFromInline static let reportError: JSString = "reportError"
@usableFromInline static let reportValidity: JSString = "reportValidity"
@usableFromInline static let request: JSString = "request"
@usableFromInline static let requestData: JSString = "requestData"
@usableFromInline static let requestSubmit: JSString = "requestSubmit"
@usableFromInline static let required: JSString = "required"
@usableFromInline static let reset: JSString = "reset"
Expand Down Expand Up @@ -20707,6 +20956,7 @@ public enum console {
@usableFromInline static let timeLog: JSString = "timeLog"
@usableFromInline static let timeOrigin: JSString = "timeOrigin"
@usableFromInline static let timeStamp: JSString = "timeStamp"
@usableFromInline static let timecode: JSString = "timecode"
@usableFromInline static let timeline: JSString = "timeline"
@usableFromInline static let timeout: JSString = "timeout"
@usableFromInline static let title: JSString = "title"
Expand Down Expand Up @@ -20768,6 +21018,7 @@ public enum console {
@usableFromInline static let vendorSub: JSString = "vendorSub"
@usableFromInline static let version: JSString = "version"
@usableFromInline static let video: JSString = "video"
@usableFromInline static let videoBitsPerSecond: JSString = "videoBitsPerSecond"
@usableFromInline static let videoHeight: JSString = "videoHeight"
@usableFromInline static let videoTracks: JSString = "videoTracks"
@usableFromInline static let videoWidth: JSString = "videoWidth"
Expand Down
3 changes: 2 additions & 1 deletion parse-idl/parse-all.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,9 @@ console.log(
"websockets",
"css-pseudo",
"cssom-view",
"mediacapture-streams",
"webaudio",
"mediacapture-streams",
"mediastream-recording",
].map((key) => parsedFiles[key]),
null,
2
Expand Down