diff --git a/js/js.libraries/src/generated/org.khronos.webgl.kt b/js/js.libraries/src/generated/org.khronos.webgl.kt index 45d1ae869fa..bf176325c77 100644 --- a/js/js.libraries/src/generated/org.khronos.webgl.kt +++ b/js/js.libraries/src/generated/org.khronos.webgl.kt @@ -20,15 +20,30 @@ import org.w3c.performance.* import org.w3c.workers.* import org.w3c.xhr.* -native public open class WebGLContextAttributes { - var alpha: Boolean = true - var depth: Boolean = true - var stencil: Boolean = false - var antialias: Boolean = true - var premultipliedAlpha: Boolean = true - var preserveDrawingBuffer: Boolean = false - var preferLowPowerToHighPerformance: Boolean = false - var failIfMajorPerformanceCaveat: Boolean = false +native public interface WebGLContextAttributes { + var alpha: Boolean + var depth: Boolean + var stencil: Boolean + var antialias: Boolean + var premultipliedAlpha: Boolean + var preserveDrawingBuffer: Boolean + var preferLowPowerToHighPerformance: Boolean + var failIfMajorPerformanceCaveat: Boolean +} + +inline fun WebGLContextAttributes(alpha: Boolean = true, depth: Boolean = true, stencil: Boolean = false, antialias: Boolean = true, premultipliedAlpha: Boolean = true, preserveDrawingBuffer: Boolean = false, preferLowPowerToHighPerformance: Boolean = false, failIfMajorPerformanceCaveat: Boolean = false): WebGLContextAttributes { + val o = js("({})") as WebGLContextAttributes + + o.`alpha` = alpha + o.`depth` = depth + o.`stencil` = stencil + o.`antialias` = antialias + o.`premultipliedAlpha` = premultipliedAlpha + o.`preserveDrawingBuffer` = preserveDrawingBuffer + o.`preferLowPowerToHighPerformance` = preferLowPowerToHighPerformance + o.`failIfMajorPerformanceCaveat` = failIfMajorPerformanceCaveat + + return o } native public interface WebGLObject { @@ -541,10 +556,20 @@ native public open class WebGLContextEvent(type: String, eventInit: WebGLContext get() = noImpl } -native public open class WebGLContextEventInit : EventInit() { +native public interface WebGLContextEventInit : EventInit { var statusMessage: String } +inline fun WebGLContextEventInit(statusMessage: String, bubbles: Boolean = false, cancelable: Boolean = false): WebGLContextEventInit { + val o = js("({})") as WebGLContextEventInit + + o.`statusMessage` = statusMessage + o.`bubbles` = bubbles + o.`cancelable` = cancelable + + return o +} + native public open class ArrayBuffer(length: Int) : Transferable { open val byteLength: Int get() = noImpl diff --git a/js/js.libraries/src/generated/org.w3c.dom.events.kt b/js/js.libraries/src/generated/org.w3c.dom.events.kt index 0094b17189f..7e6938fbdc6 100644 --- a/js/js.libraries/src/generated/org.w3c.dom.events.kt +++ b/js/js.libraries/src/generated/org.w3c.dom.events.kt @@ -121,9 +121,20 @@ native public open class UIEvent(type: String, eventInitDict: UIEventInit = noIm fun initUIEvent(typeArg: String, bubblesArg: Boolean, cancelableArg: Boolean, viewArg: Window?, detailArg: Int): Unit = noImpl } -native public open class UIEventInit : EventInit() { - var view: Window? = null - var detail: Int = 0 +native public interface UIEventInit : EventInit { + var view: Window? + var detail: Int +} + +inline fun UIEventInit(view: Window? = null, detail: Int = 0, bubbles: Boolean = false, cancelable: Boolean = false): UIEventInit { + val o = js("({})") as UIEventInit + + o.`view` = view + o.`detail` = detail + o.`bubbles` = bubbles + o.`cancelable` = cancelable + + return o } native public open class FocusEvent(typeArg: String, focusEventInitDict: FocusEventInit = noImpl) : UIEvent(noImpl, noImpl) { @@ -132,36 +143,107 @@ native public open class FocusEvent(typeArg: String, focusEventInitDict: FocusEv fun initFocusEvent(typeArg: String, bubblesArg: Boolean, cancelableArg: Boolean, viewArg: Window?, detailArg: Int, relatedTargetArg: EventTarget?): Unit = noImpl } -native public open class FocusEventInit : UIEventInit() { - var relatedTarget: EventTarget? = null +native public interface FocusEventInit : UIEventInit { + var relatedTarget: EventTarget? } -native public open class MouseEventInit : EventModifierInit() { - var screenX: Int = 0 - var screenY: Int = 0 - var clientX: Int = 0 - var clientY: Int = 0 - var button: Short = 0 - var buttons: Short = 0 - var relatedTarget: EventTarget? = null +inline fun FocusEventInit(relatedTarget: EventTarget? = null, view: Window? = null, detail: Int = 0, bubbles: Boolean = false, cancelable: Boolean = false): FocusEventInit { + val o = js("({})") as FocusEventInit + + o.`relatedTarget` = relatedTarget + o.`view` = view + o.`detail` = detail + o.`bubbles` = bubbles + o.`cancelable` = cancelable + + return o } -native public open class EventModifierInit : UIEventInit() { - var ctrlKey: Boolean = false - var shiftKey: Boolean = false - var altKey: Boolean = false - var metaKey: Boolean = false - var modifierAltGraph: Boolean = false - var modifierCapsLock: Boolean = false - var modifierFn: Boolean = false - var modifierFnLock: Boolean = false - var modifierHyper: Boolean = false - var modifierNumLock: Boolean = false - var modifierOS: Boolean = false - var modifierScrollLock: Boolean = false - var modifierSuper: Boolean = false - var modifierSymbol: Boolean = false - var modifierSymbolLock: Boolean = false +native public interface MouseEventInit : EventModifierInit { + var screenX: Int + var screenY: Int + var clientX: Int + var clientY: Int + var button: Short + var buttons: Short + var relatedTarget: EventTarget? +} + +inline fun MouseEventInit(screenX: Int = 0, screenY: Int = 0, clientX: Int = 0, clientY: Int = 0, button: Short = 0, buttons: Short = 0, relatedTarget: EventTarget? = null, ctrlKey: Boolean = false, shiftKey: Boolean = false, altKey: Boolean = false, metaKey: Boolean = false, modifierAltGraph: Boolean = false, modifierCapsLock: Boolean = false, modifierFn: Boolean = false, modifierFnLock: Boolean = false, modifierHyper: Boolean = false, modifierNumLock: Boolean = false, modifierOS: Boolean = false, modifierScrollLock: Boolean = false, modifierSuper: Boolean = false, modifierSymbol: Boolean = false, modifierSymbolLock: Boolean = false, view: Window? = null, detail: Int = 0, bubbles: Boolean = false, cancelable: Boolean = false): MouseEventInit { + val o = js("({})") as MouseEventInit + + o.`screenX` = screenX + o.`screenY` = screenY + o.`clientX` = clientX + o.`clientY` = clientY + o.`button` = button + o.`buttons` = buttons + o.`relatedTarget` = relatedTarget + o.`ctrlKey` = ctrlKey + o.`shiftKey` = shiftKey + o.`altKey` = altKey + o.`metaKey` = metaKey + o.`modifierAltGraph` = modifierAltGraph + o.`modifierCapsLock` = modifierCapsLock + o.`modifierFn` = modifierFn + o.`modifierFnLock` = modifierFnLock + o.`modifierHyper` = modifierHyper + o.`modifierNumLock` = modifierNumLock + o.`modifierOS` = modifierOS + o.`modifierScrollLock` = modifierScrollLock + o.`modifierSuper` = modifierSuper + o.`modifierSymbol` = modifierSymbol + o.`modifierSymbolLock` = modifierSymbolLock + o.`view` = view + o.`detail` = detail + o.`bubbles` = bubbles + o.`cancelable` = cancelable + + return o +} + +native public interface EventModifierInit : UIEventInit { + var ctrlKey: Boolean + var shiftKey: Boolean + var altKey: Boolean + var metaKey: Boolean + var modifierAltGraph: Boolean + var modifierCapsLock: Boolean + var modifierFn: Boolean + var modifierFnLock: Boolean + var modifierHyper: Boolean + var modifierNumLock: Boolean + var modifierOS: Boolean + var modifierScrollLock: Boolean + var modifierSuper: Boolean + var modifierSymbol: Boolean + var modifierSymbolLock: Boolean +} + +inline fun EventModifierInit(ctrlKey: Boolean = false, shiftKey: Boolean = false, altKey: Boolean = false, metaKey: Boolean = false, modifierAltGraph: Boolean = false, modifierCapsLock: Boolean = false, modifierFn: Boolean = false, modifierFnLock: Boolean = false, modifierHyper: Boolean = false, modifierNumLock: Boolean = false, modifierOS: Boolean = false, modifierScrollLock: Boolean = false, modifierSuper: Boolean = false, modifierSymbol: Boolean = false, modifierSymbolLock: Boolean = false, view: Window? = null, detail: Int = 0, bubbles: Boolean = false, cancelable: Boolean = false): EventModifierInit { + val o = js("({})") as EventModifierInit + + o.`ctrlKey` = ctrlKey + o.`shiftKey` = shiftKey + o.`altKey` = altKey + o.`metaKey` = metaKey + o.`modifierAltGraph` = modifierAltGraph + o.`modifierCapsLock` = modifierCapsLock + o.`modifierFn` = modifierFn + o.`modifierFnLock` = modifierFnLock + o.`modifierHyper` = modifierHyper + o.`modifierNumLock` = modifierNumLock + o.`modifierOS` = modifierOS + o.`modifierScrollLock` = modifierScrollLock + o.`modifierSuper` = modifierSuper + o.`modifierSymbol` = modifierSymbol + o.`modifierSymbolLock` = modifierSymbolLock + o.`view` = view + o.`detail` = detail + o.`bubbles` = bubbles + o.`cancelable` = cancelable + + return o } native public open class WheelEvent(typeArg: String, wheelEventInitDict: WheelEventInit = noImpl) : MouseEvent(typeArg, noImpl) { @@ -182,11 +264,48 @@ native public open class WheelEvent(typeArg: String, wheelEventInitDict: WheelEv } } -native public open class WheelEventInit : MouseEventInit() { - var deltaX: Double = 0.0 - var deltaY: Double = 0.0 - var deltaZ: Double = 0.0 - var deltaMode: Int = 0 +native public interface WheelEventInit : MouseEventInit { + var deltaX: Double + var deltaY: Double + var deltaZ: Double + var deltaMode: Int +} + +inline fun WheelEventInit(deltaX: Double = 0.0, deltaY: Double = 0.0, deltaZ: Double = 0.0, deltaMode: Int = 0, screenX: Int = 0, screenY: Int = 0, clientX: Int = 0, clientY: Int = 0, button: Short = 0, buttons: Short = 0, relatedTarget: EventTarget? = null, ctrlKey: Boolean = false, shiftKey: Boolean = false, altKey: Boolean = false, metaKey: Boolean = false, modifierAltGraph: Boolean = false, modifierCapsLock: Boolean = false, modifierFn: Boolean = false, modifierFnLock: Boolean = false, modifierHyper: Boolean = false, modifierNumLock: Boolean = false, modifierOS: Boolean = false, modifierScrollLock: Boolean = false, modifierSuper: Boolean = false, modifierSymbol: Boolean = false, modifierSymbolLock: Boolean = false, view: Window? = null, detail: Int = 0, bubbles: Boolean = false, cancelable: Boolean = false): WheelEventInit { + val o = js("({})") as WheelEventInit + + o.`deltaX` = deltaX + o.`deltaY` = deltaY + o.`deltaZ` = deltaZ + o.`deltaMode` = deltaMode + o.`screenX` = screenX + o.`screenY` = screenY + o.`clientX` = clientX + o.`clientY` = clientY + o.`button` = button + o.`buttons` = buttons + o.`relatedTarget` = relatedTarget + o.`ctrlKey` = ctrlKey + o.`shiftKey` = shiftKey + o.`altKey` = altKey + o.`metaKey` = metaKey + o.`modifierAltGraph` = modifierAltGraph + o.`modifierCapsLock` = modifierCapsLock + o.`modifierFn` = modifierFn + o.`modifierFnLock` = modifierFnLock + o.`modifierHyper` = modifierHyper + o.`modifierNumLock` = modifierNumLock + o.`modifierOS` = modifierOS + o.`modifierScrollLock` = modifierScrollLock + o.`modifierSuper` = modifierSuper + o.`modifierSymbol` = modifierSymbol + o.`modifierSymbolLock` = modifierSymbolLock + o.`view` = view + o.`detail` = detail + o.`bubbles` = bubbles + o.`cancelable` = cancelable + + return o } native public open class KeyboardEvent(typeArg: String, keyboardEventInitDict: KeyboardEventInit = noImpl) : UIEvent(noImpl, noImpl) { @@ -225,12 +344,43 @@ native public open class KeyboardEvent(typeArg: String, keyboardEventInitDict: K } } -native public open class KeyboardEventInit : EventModifierInit() { - var key: String = "" - var code: String = "" - var location: Int = 0 - var repeat: Boolean = false - var isComposing: Boolean = false +native public interface KeyboardEventInit : EventModifierInit { + var key: String + var code: String + var location: Int + var repeat: Boolean + var isComposing: Boolean +} + +inline fun KeyboardEventInit(key: String = "", code: String = "", location: Int = 0, repeat: Boolean = false, isComposing: Boolean = false, ctrlKey: Boolean = false, shiftKey: Boolean = false, altKey: Boolean = false, metaKey: Boolean = false, modifierAltGraph: Boolean = false, modifierCapsLock: Boolean = false, modifierFn: Boolean = false, modifierFnLock: Boolean = false, modifierHyper: Boolean = false, modifierNumLock: Boolean = false, modifierOS: Boolean = false, modifierScrollLock: Boolean = false, modifierSuper: Boolean = false, modifierSymbol: Boolean = false, modifierSymbolLock: Boolean = false, view: Window? = null, detail: Int = 0, bubbles: Boolean = false, cancelable: Boolean = false): KeyboardEventInit { + val o = js("({})") as KeyboardEventInit + + o.`key` = key + o.`code` = code + o.`location` = location + o.`repeat` = repeat + o.`isComposing` = isComposing + o.`ctrlKey` = ctrlKey + o.`shiftKey` = shiftKey + o.`altKey` = altKey + o.`metaKey` = metaKey + o.`modifierAltGraph` = modifierAltGraph + o.`modifierCapsLock` = modifierCapsLock + o.`modifierFn` = modifierFn + o.`modifierFnLock` = modifierFnLock + o.`modifierHyper` = modifierHyper + o.`modifierNumLock` = modifierNumLock + o.`modifierOS` = modifierOS + o.`modifierScrollLock` = modifierScrollLock + o.`modifierSuper` = modifierSuper + o.`modifierSymbol` = modifierSymbol + o.`modifierSymbolLock` = modifierSymbolLock + o.`view` = view + o.`detail` = detail + o.`bubbles` = bubbles + o.`cancelable` = cancelable + + return o } native public open class CompositionEvent(typeArg: String, compositionEventInitDict: CompositionEventInit = noImpl) : UIEvent(noImpl, noImpl) { @@ -239,8 +389,20 @@ native public open class CompositionEvent(typeArg: String, compositionEventInitD fun initCompositionEvent(typeArg: String, bubblesArg: Boolean, cancelableArg: Boolean, viewArg: Window?, dataArg: String, locale: String): Unit = noImpl } -native public open class CompositionEventInit : UIEventInit() { - var data: String = "" +native public interface CompositionEventInit : UIEventInit { + var data: String +} + +inline fun CompositionEventInit(data: String = "", view: Window? = null, detail: Int = 0, bubbles: Boolean = false, cancelable: Boolean = false): CompositionEventInit { + val o = js("({})") as CompositionEventInit + + o.`data` = data + o.`view` = view + o.`detail` = detail + o.`bubbles` = bubbles + o.`cancelable` = cancelable + + return o } native public open class MutationEvent : Event(noImpl, noImpl) { diff --git a/js/js.libraries/src/generated/org.w3c.dom.kt b/js/js.libraries/src/generated/org.w3c.dom.kt index e6d87338e55..de52b0fb431 100644 --- a/js/js.libraries/src/generated/org.w3c.dom.kt +++ b/js/js.libraries/src/generated/org.w3c.dom.kt @@ -1617,10 +1617,20 @@ native public open class TrackEvent(type: String, eventInitDict: TrackEventInit get() = noImpl } -native public open class TrackEventInit : EventInit() { +native public interface TrackEventInit : EventInit { var track: UnionAudioTrackOrTextTrackOrVideoTrack? } +inline fun TrackEventInit(track: UnionAudioTrackOrTextTrackOrVideoTrack?, bubbles: Boolean = false, cancelable: Boolean = false): TrackEventInit { + val o = js("({})") as TrackEventInit + + o.`track` = track + o.`bubbles` = bubbles + o.`cancelable` = cancelable + + return o +} + native public interface HTMLMapElement : HTMLElement { var name: String get() = noImpl @@ -2453,10 +2463,20 @@ native public open class AutocompleteErrorEvent(type: String, eventInitDict: Aut get() = noImpl } -native public open class AutocompleteErrorEventInit : EventInit() { +native public interface AutocompleteErrorEventInit : EventInit { var reason: String } +inline fun AutocompleteErrorEventInit(reason: String, bubbles: Boolean = false, cancelable: Boolean = false): AutocompleteErrorEventInit { + val o = js("({})") as AutocompleteErrorEventInit + + o.`reason` = reason + o.`bubbles` = bubbles + o.`cancelable` = cancelable + + return o +} + native public interface ValidityState { val valueMissing: Boolean get() = noImpl @@ -2531,10 +2551,20 @@ native public open class RelatedEvent(type: String, eventInitDict: RelatedEventI get() = noImpl } -native public open class RelatedEventInit : EventInit() { +native public interface RelatedEventInit : EventInit { var relatedTarget: EventTarget? } +inline fun RelatedEventInit(relatedTarget: EventTarget?, bubbles: Boolean = false, cancelable: Boolean = false): RelatedEventInit { + val o = js("({})") as RelatedEventInit + + o.`relatedTarget` = relatedTarget + o.`bubbles` = bubbles + o.`cancelable` = cancelable + + return o +} + native public interface HTMLDialogElement : HTMLElement { var open: Boolean get() = noImpl @@ -2601,8 +2631,16 @@ native public interface CanvasProxy : Transferable { fun setContext(context: RenderingContext): Unit = noImpl } -native public open class CanvasRenderingContext2DSettings { - var alpha: Boolean = true +native public interface CanvasRenderingContext2DSettings { + var alpha: Boolean +} + +inline fun CanvasRenderingContext2DSettings(alpha: Boolean = true): CanvasRenderingContext2DSettings { + val o = js("({})") as CanvasRenderingContext2DSettings + + o.`alpha` = alpha + + return o } native public open class CanvasRenderingContext2D() : RenderingContext, CanvasImageSource, ImageBitmapSource { @@ -2766,15 +2804,30 @@ native public interface TextMetrics { get() = noImpl } -native public open class HitRegionOptions { - var path: Path2D? = null - var fillRule: String = "nonzero" - var id: String = "" - var parentID: String? = null - var cursor: String = "inherit" - var control: Element? = null - var label: String? = null - var role: String? = null +native public interface HitRegionOptions { + var path: Path2D? + var fillRule: String + var id: String + var parentID: String? + var cursor: String + var control: Element? + var label: String? + var role: String? +} + +inline fun HitRegionOptions(path: Path2D? = null, fillRule: String = "nonzero", id: String = "", parentID: String? = null, cursor: String = "inherit", control: Element? = null, label: String? = null, role: String? = null): HitRegionOptions { + val o = js("({})") as HitRegionOptions + + o.`path` = path + o.`fillRule` = fillRule + o.`id` = id + o.`parentID` = parentID + o.`cursor` = cursor + o.`control` = control + o.`label` = label + o.`role` = role + + return o } native public open class ImageData : ImageBitmapSource { @@ -2890,10 +2943,44 @@ native public open class DragEvent(type: String, eventInitDict: DragEventInit = get() = noImpl } -native public open class DragEventInit : MouseEventInit() { +native public interface DragEventInit : MouseEventInit { var dataTransfer: DataTransfer? } +inline fun DragEventInit(dataTransfer: DataTransfer?, screenX: Int = 0, screenY: Int = 0, clientX: Int = 0, clientY: Int = 0, button: Short = 0, buttons: Short = 0, relatedTarget: EventTarget? = null, ctrlKey: Boolean = false, shiftKey: Boolean = false, altKey: Boolean = false, metaKey: Boolean = false, modifierAltGraph: Boolean = false, modifierCapsLock: Boolean = false, modifierFn: Boolean = false, modifierFnLock: Boolean = false, modifierHyper: Boolean = false, modifierNumLock: Boolean = false, modifierOS: Boolean = false, modifierScrollLock: Boolean = false, modifierSuper: Boolean = false, modifierSymbol: Boolean = false, modifierSymbolLock: Boolean = false, view: Window? = null, detail: Int = 0, bubbles: Boolean = false, cancelable: Boolean = false): DragEventInit { + val o = js("({})") as DragEventInit + + o.`dataTransfer` = dataTransfer + o.`screenX` = screenX + o.`screenY` = screenY + o.`clientX` = clientX + o.`clientY` = clientY + o.`button` = button + o.`buttons` = buttons + o.`relatedTarget` = relatedTarget + o.`ctrlKey` = ctrlKey + o.`shiftKey` = shiftKey + o.`altKey` = altKey + o.`metaKey` = metaKey + o.`modifierAltGraph` = modifierAltGraph + o.`modifierCapsLock` = modifierCapsLock + o.`modifierFn` = modifierFn + o.`modifierFnLock` = modifierFnLock + o.`modifierHyper` = modifierHyper + o.`modifierNumLock` = modifierNumLock + o.`modifierOS` = modifierOS + o.`modifierScrollLock` = modifierScrollLock + o.`modifierSuper` = modifierSuper + o.`modifierSymbol` = modifierSymbol + o.`modifierSymbolLock` = modifierSymbolLock + o.`view` = view + o.`detail` = detail + o.`bubbles` = bubbles + o.`cancelable` = cancelable + + return o +} + native public interface Window : EventTarget, UnionMessagePortOrWindow { val caches: CacheStorage get() = noImpl @@ -3311,10 +3398,20 @@ native public open class PopStateEvent(type: String, eventInitDict: PopStateEven get() = noImpl } -native public open class PopStateEventInit : EventInit() { +native public interface PopStateEventInit : EventInit { var state: Any? } +inline fun PopStateEventInit(state: Any?, bubbles: Boolean = false, cancelable: Boolean = false): PopStateEventInit { + val o = js("({})") as PopStateEventInit + + o.`state` = state + o.`bubbles` = bubbles + o.`cancelable` = cancelable + + return o +} + native public open class HashChangeEvent(type: String, eventInitDict: HashChangeEventInit = noImpl) : Event(type, eventInitDict) { open val oldURL: String get() = noImpl @@ -3322,20 +3419,41 @@ native public open class HashChangeEvent(type: String, eventInitDict: HashChange get() = noImpl } -native public open class HashChangeEventInit : EventInit() { +native public interface HashChangeEventInit : EventInit { var oldURL: String var newURL: String } +inline fun HashChangeEventInit(oldURL: String, newURL: String, bubbles: Boolean = false, cancelable: Boolean = false): HashChangeEventInit { + val o = js("({})") as HashChangeEventInit + + o.`oldURL` = oldURL + o.`newURL` = newURL + o.`bubbles` = bubbles + o.`cancelable` = cancelable + + return o +} + native public open class PageTransitionEvent(type: String, eventInitDict: PageTransitionEventInit = noImpl) : Event(type, eventInitDict) { open val persisted: Boolean get() = noImpl } -native public open class PageTransitionEventInit : EventInit() { +native public interface PageTransitionEventInit : EventInit { var persisted: Boolean } +inline fun PageTransitionEventInit(persisted: Boolean, bubbles: Boolean = false, cancelable: Boolean = false): PageTransitionEventInit { + val o = js("({})") as PageTransitionEventInit + + o.`persisted` = persisted + o.`bubbles` = bubbles + o.`cancelable` = cancelable + + return o +} + native public open class BeforeUnloadEvent : Event(noImpl, noImpl) { var returnValue: String get() = noImpl @@ -3396,7 +3514,7 @@ native public open class ErrorEvent(type: String, eventInitDict: ErrorEventInit get() = noImpl } -native public open class ErrorEventInit : EventInit() { +native public interface ErrorEventInit : EventInit { var message: String var filename: String var lineno: Int @@ -3404,6 +3522,20 @@ native public open class ErrorEventInit : EventInit() { var error: Any? } +inline fun ErrorEventInit(message: String, filename: String, lineno: Int, colno: Int, error: Any?, bubbles: Boolean = false, cancelable: Boolean = false): ErrorEventInit { + val o = js("({})") as ErrorEventInit + + o.`message` = message + o.`filename` = filename + o.`lineno` = lineno + o.`colno` = colno + o.`error` = error + o.`bubbles` = bubbles + o.`cancelable` = cancelable + + return o +} + native public interface Navigator { val serviceWorker: ServiceWorkerContainer get() = noImpl @@ -3517,7 +3649,7 @@ native public open class MessageEvent(type: String, eventInitDict: MessageEventI fun initMessageEvent(typeArg: String, canBubbleArg: Boolean, cancelableArg: Boolean, dataArg: Any?, originArg: String, lastEventIdArg: String, sourceArg: UnionMessagePortOrWindow, portsArg: Array?): Unit = noImpl } -native public open class MessageEventInit : EventInit() { +native public interface MessageEventInit : EventInit { var data: Any? var origin: String var lastEventId: String @@ -3525,6 +3657,20 @@ native public open class MessageEventInit : EventInit() { var ports: Array } +inline fun MessageEventInit(data: Any?, origin: String, lastEventId: String, source: UnionMessagePortOrWindow?, ports: Array, bubbles: Boolean = false, cancelable: Boolean = false): MessageEventInit { + val o = js("({})") as MessageEventInit + + o.`data` = data + o.`origin` = origin + o.`lastEventId` = lastEventId + o.`source` = source + o.`ports` = ports + o.`bubbles` = bubbles + o.`cancelable` = cancelable + + return o +} + native public open class EventSource(url: String, eventSourceInitDict: EventSourceInit = noImpl) : EventTarget { open val url: String get() = noImpl @@ -3550,8 +3696,16 @@ native public open class EventSource(url: String, eventSourceInitDict: EventSour } } -native public open class EventSourceInit { - var withCredentials: Boolean = false +native public interface EventSourceInit { + var withCredentials: Boolean +} + +inline fun EventSourceInit(withCredentials: Boolean = false): EventSourceInit { + val o = js("({})") as EventSourceInit + + o.`withCredentials` = withCredentials + + return o } native public open class WebSocket(url: String, protocols: dynamic = noImpl) : EventTarget { @@ -3603,12 +3757,24 @@ native public open class CloseEvent(type: String, eventInitDict: CloseEventInit get() = noImpl } -native public open class CloseEventInit : EventInit() { +native public interface CloseEventInit : EventInit { var wasClean: Boolean var code: Short var reason: String } +inline fun CloseEventInit(wasClean: Boolean, code: Short, reason: String, bubbles: Boolean = false, cancelable: Boolean = false): CloseEventInit { + val o = js("({})") as CloseEventInit + + o.`wasClean` = wasClean + o.`code` = code + o.`reason` = reason + o.`bubbles` = bubbles + o.`cancelable` = cancelable + + return o +} + native public open class MessageChannel { open val port1: MessagePort get() = noImpl @@ -3787,7 +3953,7 @@ native public open class StorageEvent(type: String, eventInitDict: StorageEventI get() = noImpl } -native public open class StorageEventInit : EventInit() { +native public interface StorageEventInit : EventInit { var key: String? var oldValue: String? var newValue: String? @@ -3795,6 +3961,20 @@ native public open class StorageEventInit : EventInit() { var storageArea: Storage? } +inline fun StorageEventInit(key: String?, oldValue: String?, newValue: String?, url: String, storageArea: Storage?, bubbles: Boolean = false, cancelable: Boolean = false): StorageEventInit { + val o = js("({})") as StorageEventInit + + o.`key` = key + o.`oldValue` = oldValue + o.`newValue` = newValue + o.`url` = url + o.`storageArea` = storageArea + o.`bubbles` = bubbles + o.`cancelable` = cancelable + + return o +} + native public interface HTMLAppletElement : HTMLElement { var align: String get() = noImpl @@ -4041,9 +4221,18 @@ native public interface HTMLImageElement : HTMLElement, CanvasImageSource, Image native public interface HTMLPictureElement : HTMLElement { } -native public open class EventInit { - var bubbles: Boolean = false - var cancelable: Boolean = false +native public interface EventInit { + var bubbles: Boolean + var cancelable: Boolean +} + +inline fun EventInit(bubbles: Boolean = false, cancelable: Boolean = false): EventInit { + val o = js("({})") as EventInit + + o.`bubbles` = bubbles + o.`cancelable` = cancelable + + return o } native public open class CustomEvent(type: String, eventInitDict: CustomEventInit = noImpl) : Event(type, eventInitDict) { @@ -4052,8 +4241,18 @@ native public open class CustomEvent(type: String, eventInitDict: CustomEventIni fun initCustomEvent(type: String, bubbles: Boolean, cancelable: Boolean, detail: Any?): Unit = noImpl } -native public open class CustomEventInit : EventInit() { - var detail: Any? = null +native public interface CustomEventInit : EventInit { + var detail: Any? +} + +inline fun CustomEventInit(detail: Any? = null, bubbles: Boolean = false, cancelable: Boolean = false): CustomEventInit { + val o = js("({})") as CustomEventInit + + o.`detail` = detail + o.`bubbles` = bubbles + o.`cancelable` = cancelable + + return o } native public interface NodeList { @@ -4078,16 +4277,30 @@ native public open class MutationObserver(callback: (Array, Muta fun takeRecords(): Array = noImpl } -native public open class MutationObserverInit { - var childList: Boolean = false +native public interface MutationObserverInit { + var childList: Boolean var attributes: Boolean var characterData: Boolean - var subtree: Boolean = false + var subtree: Boolean var attributeOldValue: Boolean var characterDataOldValue: Boolean var attributeFilter: Array } +inline fun MutationObserverInit(childList: Boolean = false, attributes: Boolean, characterData: Boolean, subtree: Boolean = false, attributeOldValue: Boolean, characterDataOldValue: Boolean, attributeFilter: Array): MutationObserverInit { + val o = js("({})") as MutationObserverInit + + o.`childList` = childList + o.`attributes` = attributes + o.`characterData` = characterData + o.`subtree` = subtree + o.`attributeOldValue` = attributeOldValue + o.`characterDataOldValue` = characterDataOldValue + o.`attributeFilter` = attributeFilter + + return o +} + native public interface MutationRecord { val type: String get() = noImpl @@ -4548,11 +4761,22 @@ native public open class EditingBeforeInputEvent(type: String, eventInitDict: Ed get() = noImpl } -native public open class EditingBeforeInputEventInit : EventInit() { +native public interface EditingBeforeInputEventInit : EventInit { var command: String var value: String } +inline fun EditingBeforeInputEventInit(command: String, value: String, bubbles: Boolean = false, cancelable: Boolean = false): EditingBeforeInputEventInit { + val o = js("({})") as EditingBeforeInputEventInit + + o.`command` = command + o.`value` = value + o.`bubbles` = bubbles + o.`cancelable` = cancelable + + return o +} + native public open class EditingInputEvent(type: String, eventInitDict: EditingInputEventInit = noImpl) : Event(type, eventInitDict) { open val command: String get() = noImpl @@ -4560,11 +4784,22 @@ native public open class EditingInputEvent(type: String, eventInitDict: EditingI get() = noImpl } -native public open class EditingInputEventInit : EventInit() { +native public interface EditingInputEventInit : EventInit { var command: String var value: String } +inline fun EditingInputEventInit(command: String, value: String, bubbles: Boolean = false, cancelable: Boolean = false): EditingInputEventInit { + val o = js("({})") as EditingInputEventInit + + o.`command` = command + o.`value` = value + o.`bubbles` = bubbles + o.`cancelable` = cancelable + + return o +} + native public open class DOMPointReadOnly(x: Double, y: Double, z: Double, w: Double) { open val x: Double get() = noImpl @@ -4594,11 +4829,22 @@ native public open class DOMPoint : DOMPointReadOnly { set(value) = noImpl } -native public open class DOMPointInit { - var x: Double = 0.0 - var y: Double = 0.0 - var z: Double = 0.0 - var w: Double = 1.0 +native public interface DOMPointInit { + var x: Double + var y: Double + var z: Double + var w: Double +} + +inline fun DOMPointInit(x: Double = 0.0, y: Double = 0.0, z: Double = 0.0, w: Double = 1.0): DOMPointInit { + val o = js("({})") as DOMPointInit + + o.`x` = x + o.`y` = y + o.`z` = z + o.`w` = w + + return o } native public open class DOMRect(x: Double = 0.0, y: Double = 0.0, width: Double = 0.0, height: Double = 0.0) : DOMRectReadOnly(x, y, width, height) { @@ -4635,11 +4881,22 @@ native public open class DOMRectReadOnly(x: Double, y: Double, width: Double, he get() = noImpl } -native public open class DOMRectInit { - var x: Double = 0.0 - var y: Double = 0.0 - var width: Double = 0.0 - var height: Double = 0.0 +native public interface DOMRectInit { + var x: Double + var y: Double + var width: Double + var height: Double +} + +inline fun DOMRectInit(x: Double = 0.0, y: Double = 0.0, width: Double = 0.0, height: Double = 0.0): DOMRectInit { + val o = js("({})") as DOMRectInit + + o.`x` = x + o.`y` = y + o.`width` = width + o.`height` = height + + return o } native public open class DOMQuad { @@ -4811,8 +5068,16 @@ native public open class DOMMatrix() : DOMMatrixReadOnly(noImpl) { fun setMatrixValue(transformList: String): DOMMatrix = noImpl } -native public open class ScrollOptions { - var behavior: String = "auto" +native public interface ScrollOptions { + var behavior: String +} + +inline fun ScrollOptions(behavior: String = "auto"): ScrollOptions { + val o = js("({})") as ScrollOptions + + o.`behavior` = behavior + + return o } native public interface MediaQueryList { @@ -4847,22 +5112,58 @@ native public interface CaretPosition { fun getClientRect(): DOMRect? = noImpl } -native public open class ScrollOptionsHorizontal : ScrollOptions() { +native public interface ScrollOptionsHorizontal : ScrollOptions { var x: Double } -native public open class ScrollOptionsVertical : ScrollOptions() { +inline fun ScrollOptionsHorizontal(x: Double, behavior: String = "auto"): ScrollOptionsHorizontal { + val o = js("({})") as ScrollOptionsHorizontal + + o.`x` = x + o.`behavior` = behavior + + return o +} + +native public interface ScrollOptionsVertical : ScrollOptions { var y: Double } -native public open class BoxQuadOptions { - var box: String = "border" +inline fun ScrollOptionsVertical(y: Double, behavior: String = "auto"): ScrollOptionsVertical { + val o = js("({})") as ScrollOptionsVertical + + o.`y` = y + o.`behavior` = behavior + + return o +} + +native public interface BoxQuadOptions { + var box: String var relativeTo: GeometryNode } -native public open class ConvertCoordinateOptions { - var fromBox: String = "border" - var toBox: String = "border" +inline fun BoxQuadOptions(box: String = "border", relativeTo: GeometryNode): BoxQuadOptions { + val o = js("({})") as BoxQuadOptions + + o.`box` = box + o.`relativeTo` = relativeTo + + return o +} + +native public interface ConvertCoordinateOptions { + var fromBox: String + var toBox: String +} + +inline fun ConvertCoordinateOptions(fromBox: String = "border", toBox: String = "border"): ConvertCoordinateOptions { + val o = js("({})") as ConvertCoordinateOptions + + o.`fromBox` = fromBox + o.`toBox` = toBox + + return o } native public marker interface UnionElementOrHTMLCollection { diff --git a/js/js.libraries/src/generated/org.w3c.fetch.kt b/js/js.libraries/src/generated/org.w3c.fetch.kt index 3260156cc77..bdd9c7a6650 100644 --- a/js/js.libraries/src/generated/org.w3c.fetch.kt +++ b/js/js.libraries/src/generated/org.w3c.fetch.kt @@ -58,7 +58,7 @@ native public open class Request(input: dynamic, init: RequestInit = noImpl) { fun text(): dynamic = noImpl } -native public open class RequestInit { +native public interface RequestInit { var method: String var headers: dynamic var body: dynamic @@ -68,6 +68,20 @@ native public open class RequestInit { var redirect: String } +inline fun RequestInit(method: String, headers: dynamic, body: dynamic, mode: String, credentials: String, cache: String, redirect: String): RequestInit { + val o = js("({})") as RequestInit + + o.`method` = method + o.`headers` = headers + o.`body` = body + o.`mode` = mode + o.`credentials` = credentials + o.`cache` = cache + o.`redirect` = redirect + + return o +} + native public open class Response(body: dynamic = noImpl, init: ResponseInit = noImpl) { open val type: String get() = noImpl @@ -96,9 +110,19 @@ native public open class Response(body: dynamic = noImpl, init: ResponseInit = n } } -native public open class ResponseInit { - var status: Short = 200 - var statusText: String = "OK" +native public interface ResponseInit { + var status: Short + var statusText: String var headers: dynamic } +inline fun ResponseInit(status: Short = 200, statusText: String = "OK", headers: dynamic): ResponseInit { + val o = js("({})") as ResponseInit + + o.`status` = status + o.`statusText` = statusText + o.`headers` = headers + + return o +} + diff --git a/js/js.libraries/src/generated/org.w3c.files.kt b/js/js.libraries/src/generated/org.w3c.files.kt index a74ca876d34..5d74106b2af 100644 --- a/js/js.libraries/src/generated/org.w3c.files.kt +++ b/js/js.libraries/src/generated/org.w3c.files.kt @@ -32,8 +32,16 @@ native public open class Blob() : ImageBitmapSource { fun close(): Unit = noImpl } -native public open class BlobPropertyBag { - var type: String = "" +native public interface BlobPropertyBag { + var type: String +} + +inline fun BlobPropertyBag(type: String = ""): BlobPropertyBag { + val o = js("({})") as BlobPropertyBag + + o.`type` = type + + return o } native public open class File(fileBits: Array, fileName: String, options: FilePropertyBag = noImpl) : Blob() { @@ -43,11 +51,20 @@ native public open class File(fileBits: Array, fileName: String, option get() = noImpl } -native public open class FilePropertyBag { - var type: String = "" +native public interface FilePropertyBag { + var type: String var lastModified: Long } +inline fun FilePropertyBag(type: String = "", lastModified: Long): FilePropertyBag { + val o = js("({})") as FilePropertyBag + + o.`type` = type + o.`lastModified` = lastModified + + return o +} + native public interface FileList { val length: Int get() = noImpl diff --git a/js/js.libraries/src/generated/org.w3c.notifications.kt b/js/js.libraries/src/generated/org.w3c.notifications.kt index c13ee9df069..6ec1052442e 100644 --- a/js/js.libraries/src/generated/org.w3c.notifications.kt +++ b/js/js.libraries/src/generated/org.w3c.notifications.kt @@ -61,23 +61,50 @@ native public open class Notification(title: String, options: NotificationOption } } -native public open class NotificationOptions { - var dir: String = "auto" - var lang: String = "" - var body: String = "" - var tag: String = "" +native public interface NotificationOptions { + var dir: String + var lang: String + var body: String + var tag: String var icon: String var sound: String var vibrate: dynamic - var renotify: Boolean = false - var silent: Boolean = false - var noscreen: Boolean = false - var sticky: Boolean = false - var data: Any? = null + var renotify: Boolean + var silent: Boolean + var noscreen: Boolean + var sticky: Boolean + var data: Any? } -native public open class GetNotificationOptions { - var tag: String = "" +inline fun NotificationOptions(dir: String = "auto", lang: String = "", body: String = "", tag: String = "", icon: String, sound: String, vibrate: dynamic, renotify: Boolean = false, silent: Boolean = false, noscreen: Boolean = false, sticky: Boolean = false, data: Any? = null): NotificationOptions { + val o = js("({})") as NotificationOptions + + o.`dir` = dir + o.`lang` = lang + o.`body` = body + o.`tag` = tag + o.`icon` = icon + o.`sound` = sound + o.`vibrate` = vibrate + o.`renotify` = renotify + o.`silent` = silent + o.`noscreen` = noscreen + o.`sticky` = sticky + o.`data` = data + + return o +} + +native public interface GetNotificationOptions { + var tag: String +} + +inline fun GetNotificationOptions(tag: String = ""): GetNotificationOptions { + val o = js("({})") as GetNotificationOptions + + o.`tag` = tag + + return o } native public open class NotificationEvent(type: String, eventInitDict: NotificationEventInit = noImpl) : ExtendableEvent(type, eventInitDict) { @@ -85,7 +112,17 @@ native public open class NotificationEvent(type: String, eventInitDict: Notifica get() = noImpl } -native public open class NotificationEventInit : ExtendableEventInit() { +native public interface NotificationEventInit : ExtendableEventInit { var notification: Notification } +inline fun NotificationEventInit(notification: Notification, bubbles: Boolean = false, cancelable: Boolean = false): NotificationEventInit { + val o = js("({})") as NotificationEventInit + + o.`notification` = notification + o.`bubbles` = bubbles + o.`cancelable` = cancelable + + return o +} + diff --git a/js/js.libraries/src/generated/org.w3c.workers.kt b/js/js.libraries/src/generated/org.w3c.workers.kt index ba12a5fe879..f017be5e824 100644 --- a/js/js.libraries/src/generated/org.w3c.workers.kt +++ b/js/js.libraries/src/generated/org.w3c.workers.kt @@ -102,10 +102,18 @@ native public interface ServiceWorkerContainer : EventTarget { fun getRegistrations(): dynamic = noImpl } -native public open class RegistrationOptions { +native public interface RegistrationOptions { var scope: String } +inline fun RegistrationOptions(scope: String): RegistrationOptions { + val o = js("({})") as RegistrationOptions + + o.`scope` = scope + + return o +} + native public open class ServiceWorkerMessageEvent(type: String, eventInitDict: ServiceWorkerMessageEventInit = noImpl) : Event(type, eventInitDict) { open val data: Any? get() = noImpl @@ -120,7 +128,7 @@ native public open class ServiceWorkerMessageEvent(type: String, eventInitDict: fun initServiceWorkerMessageEvent(typeArg: String, canBubbleArg: Boolean, cancelableArg: Boolean, dataArg: Any?, originArg: String, lastEventIdArg: String, sourceArg: UnionMessagePortOrServiceWorker, portsArg: Array?): Unit = noImpl } -native public open class ServiceWorkerMessageEventInit : EventInit() { +native public interface ServiceWorkerMessageEventInit : EventInit { var data: Any? var origin: String var lastEventId: String @@ -128,6 +136,20 @@ native public open class ServiceWorkerMessageEventInit : EventInit() { var ports: Array } +inline fun ServiceWorkerMessageEventInit(data: Any?, origin: String, lastEventId: String, source: UnionMessagePortOrServiceWorker?, ports: Array, bubbles: Boolean = false, cancelable: Boolean = false): ServiceWorkerMessageEventInit { + val o = js("({})") as ServiceWorkerMessageEventInit + + o.`data` = data + o.`origin` = origin + o.`lastEventId` = lastEventId + o.`source` = source + o.`ports` = ports + o.`bubbles` = bubbles + o.`cancelable` = cancelable + + return o +} + native public interface Client : UnionClientOrMessagePortOrServiceWorker { val url: String get() = noImpl @@ -152,16 +174,34 @@ native public interface Clients { fun claim(): dynamic = noImpl } -native public open class ClientQueryOptions { - var includeUncontrolled: Boolean = false - var type: String = "window" +native public interface ClientQueryOptions { + var includeUncontrolled: Boolean + var type: String +} + +inline fun ClientQueryOptions(includeUncontrolled: Boolean = false, type: String = "window"): ClientQueryOptions { + val o = js("({})") as ClientQueryOptions + + o.`includeUncontrolled` = includeUncontrolled + o.`type` = type + + return o } native public open class ExtendableEvent(type: String, eventInitDict: ExtendableEventInit = noImpl) : Event(type, eventInitDict) { fun waitUntil(f: dynamic): Unit = noImpl } -native public open class ExtendableEventInit : EventInit() { +native public interface ExtendableEventInit : EventInit { +} + +inline fun ExtendableEventInit(bubbles: Boolean = false, cancelable: Boolean = false): ExtendableEventInit { + val o = js("({})") as ExtendableEventInit + + o.`bubbles` = bubbles + o.`cancelable` = cancelable + + return o } native public open class FetchEvent(type: String, eventInitDict: FetchEventInit = noImpl) : ExtendableEvent(type, eventInitDict) { @@ -174,10 +214,22 @@ native public open class FetchEvent(type: String, eventInitDict: FetchEventInit fun respondWith(r: dynamic): Unit = noImpl } -native public open class FetchEventInit : ExtendableEventInit() { +native public interface FetchEventInit : ExtendableEventInit { var request: Request var client: Client - var isReload: Boolean = false + var isReload: Boolean +} + +inline fun FetchEventInit(request: Request, client: Client, isReload: Boolean = false, bubbles: Boolean = false, cancelable: Boolean = false): FetchEventInit { + val o = js("({})") as FetchEventInit + + o.`request` = request + o.`client` = client + o.`isReload` = isReload + o.`bubbles` = bubbles + o.`cancelable` = cancelable + + return o } native public open class ExtendableMessageEvent(type: String, eventInitDict: ExtendableMessageEventInit = noImpl) : ExtendableEvent(type, eventInitDict) { @@ -194,7 +246,7 @@ native public open class ExtendableMessageEvent(type: String, eventInitDict: Ext fun initExtendableMessageEvent(typeArg: String, canBubbleArg: Boolean, cancelableArg: Boolean, dataArg: Any?, originArg: String, lastEventIdArg: String, sourceArg: UnionClientOrMessagePortOrServiceWorker, portsArg: Array?): Unit = noImpl } -native public open class ExtendableMessageEventInit : ExtendableEventInit() { +native public interface ExtendableMessageEventInit : ExtendableEventInit { var data: Any? var origin: String var lastEventId: String @@ -202,6 +254,20 @@ native public open class ExtendableMessageEventInit : ExtendableEventInit() { var ports: Array } +inline fun ExtendableMessageEventInit(data: Any?, origin: String, lastEventId: String, source: UnionClientOrMessagePortOrServiceWorker?, ports: Array, bubbles: Boolean = false, cancelable: Boolean = false): ExtendableMessageEventInit { + val o = js("({})") as ExtendableMessageEventInit + + o.`data` = data + o.`origin` = origin + o.`lastEventId` = lastEventId + o.`source` = source + o.`ports` = ports + o.`bubbles` = bubbles + o.`cancelable` = cancelable + + return o +} + native public interface Cache { fun match(request: dynamic, options: CacheQueryOptions = noImpl): dynamic = noImpl fun matchAll(request: dynamic = noImpl, options: CacheQueryOptions = noImpl): dynamic = noImpl @@ -212,20 +278,42 @@ native public interface Cache { fun keys(request: dynamic = noImpl, options: CacheQueryOptions = noImpl): dynamic = noImpl } -native public open class CacheQueryOptions { - var ignoreSearch: Boolean = false - var ignoreMethod: Boolean = false - var ignoreVary: Boolean = false +native public interface CacheQueryOptions { + var ignoreSearch: Boolean + var ignoreMethod: Boolean + var ignoreVary: Boolean var cacheName: String } -native public open class CacheBatchOperation { +inline fun CacheQueryOptions(ignoreSearch: Boolean = false, ignoreMethod: Boolean = false, ignoreVary: Boolean = false, cacheName: String): CacheQueryOptions { + val o = js("({})") as CacheQueryOptions + + o.`ignoreSearch` = ignoreSearch + o.`ignoreMethod` = ignoreMethod + o.`ignoreVary` = ignoreVary + o.`cacheName` = cacheName + + return o +} + +native public interface CacheBatchOperation { var type: String var request: Request var response: Response var options: CacheQueryOptions } +inline fun CacheBatchOperation(type: String, request: Request, response: Response, options: CacheQueryOptions): CacheBatchOperation { + val o = js("({})") as CacheBatchOperation + + o.`type` = type + o.`request` = request + o.`response` = response + o.`options` = options + + return o +} + native public interface CacheStorage { fun match(request: dynamic, options: CacheQueryOptions = noImpl): dynamic = noImpl fun has(cacheName: String): dynamic = noImpl diff --git a/js/js.libraries/src/generated/org.w3c.xhr.kt b/js/js.libraries/src/generated/org.w3c.xhr.kt index 1058d23603a..9c055ada5a3 100644 --- a/js/js.libraries/src/generated/org.w3c.xhr.kt +++ b/js/js.libraries/src/generated/org.w3c.xhr.kt @@ -112,9 +112,21 @@ native public open class ProgressEvent(type: String, eventInitDict: ProgressEven get() = noImpl } -native public open class ProgressEventInit : EventInit() { - var lengthComputable: Boolean = false - var loaded: Long = 0 - var total: Long = 0 +native public interface ProgressEventInit : EventInit { + var lengthComputable: Boolean + var loaded: Long + var total: Long +} + +inline fun ProgressEventInit(lengthComputable: Boolean = false, loaded: Long = 0, total: Long = 0, bubbles: Boolean = false, cancelable: Boolean = false): ProgressEventInit { + val o = js("({})") as ProgressEventInit + + o.`lengthComputable` = lengthComputable + o.`loaded` = loaded + o.`total` = total + o.`bubbles` = bubbles + o.`cancelable` = cancelable + + return o } diff --git a/libraries/tools/idl2k/src/main/kotlin/gen.kt b/libraries/tools/idl2k/src/main/kotlin/gen.kt index dfd61b5ce79..7343a127f8f 100644 --- a/libraries/tools/idl2k/src/main/kotlin/gen.kt +++ b/libraries/tools/idl2k/src/main/kotlin/gen.kt @@ -1,5 +1,6 @@ package org.jetbrains.idl2k +import com.sun.org.apache.bcel.internal.generic.IF_ACMPEQ import java.util.* private fun Operation.getterOrSetter() = this.attributes.map { it.call }.toSet().let { attributes -> @@ -22,7 +23,7 @@ fun generateFunction(repository: Repository, function: Operation, functionName: initializer = it.defaultValue, getterSetterNoImpl = false, override = false, - readOnly = true, + kind = AttributeKind.ARGUMENT, vararg = it.vararg, static = it.static ) @@ -66,7 +67,7 @@ fun generateAttribute(putNoImpl: Boolean, repository: Repository, attribute: Att type = mapType(repository, attribute.type), initializer = attribute.defaultValue, getterSetterNoImpl = putNoImpl, - readOnly = attribute.readOnly, + kind = if (attribute.readOnly) AttributeKind.VAL else AttributeKind.VAR, override = false, vararg = attribute.vararg, static = attribute.static @@ -74,7 +75,7 @@ fun generateAttribute(putNoImpl: Boolean, repository: Repository, attribute: Att private fun InterfaceDefinition.superTypes(repository: Repository) = superTypes.map { repository.interfaces[it] }.filterNotNull() private fun resolveDefinitionKind(repository: Repository, iface: InterfaceDefinition, constructors: List = iface.findConstructors()): GenerateDefinitionKind = - if (iface.dictionary || constructors.isNotEmpty() || iface.superTypes(repository).any { resolveDefinitionKind(repository, it) == GenerateDefinitionKind.CLASS }) { + if (constructors.isNotEmpty() || iface.superTypes(repository).any { resolveDefinitionKind(repository, it) == GenerateDefinitionKind.CLASS }) { GenerateDefinitionKind.CLASS } else { GenerateDefinitionKind.TRAIT @@ -82,7 +83,7 @@ private fun resolveDefinitionKind(repository: Repository, iface: InterfaceDefini private fun InterfaceDefinition.mapAttributes(repository: Repository) = attributes.map { generateAttribute(!dictionary, repository, it) } private fun InterfaceDefinition.mapOperations(repository: Repository) = operations.flatMap { generateFunctions(repository, it) } -private fun Constant.mapConstant(repository : Repository) = GenerateAttribute(name, mapType(repository, type), value, false, true, false, false, true) +private fun Constant.mapConstant(repository : Repository) = GenerateAttribute(name, mapType(repository, type), value, false, AttributeKind.VAL, false, false, true) private val EMPTY_CONSTRUCTOR = ExtendedAttribute(null, "Constructor", emptyList()) fun generateTrait(repository: Repository, iface: InterfaceDefinition): GenerateTraitOrClass { @@ -132,7 +133,8 @@ fun generateTrait(repository: Repository, iface: InterfaceDefinition): GenerateT memberFunctions = (iface.mapOperations(repository) + extensions.flatMap { it.mapOperations(repository) }).distinct().toList(), constants = (iface.constants.map { it.mapConstant(repository) } + extensions.flatMap { it.constants.map { it.mapConstant(repository) } }.distinct().toList()), primaryConstructor = primaryConstructorWithCall, - secondaryConstructors = secondaryConstructorsWithCall + secondaryConstructors = secondaryConstructorsWithCall, + generateBuilderFunction = iface.dictionary ) } @@ -161,7 +163,8 @@ fun mapUnionType(it: UnionType) = GenerateTraitOrClass( memberFunctions = emptyList(), constants = emptyList(), primaryConstructor = null, - secondaryConstructors = emptyList() + secondaryConstructors = emptyList(), + generateBuilderFunction = false ) fun generateUnionTypeTraits(allUnionTypes: Sequence): Sequence = allUnionTypes.map(::mapUnionType) diff --git a/libraries/tools/idl2k/src/main/kotlin/model.kt b/libraries/tools/idl2k/src/main/kotlin/model.kt index 5acb8410eaf..1f2e1a04609 100644 --- a/libraries/tools/idl2k/src/main/kotlin/model.kt +++ b/libraries/tools/idl2k/src/main/kotlin/model.kt @@ -25,12 +25,19 @@ data class Repository( val enums: Map ) -data class GenerateAttribute(val name: String, val type: Type, val initializer: String?, val getterSetterNoImpl: Boolean, val readOnly: Boolean, val override: Boolean, var vararg: Boolean, val static: Boolean) +enum class AttributeKind { + VAL, VAR, ARGUMENT +} +data class GenerateAttribute(val name: String, val type: Type, val initializer: String?, val getterSetterNoImpl: Boolean, val kind: AttributeKind, val override: Boolean, var vararg: Boolean, val static: Boolean) val GenerateAttribute.getterNoImpl: Boolean get() = getterSetterNoImpl val GenerateAttribute.setterNoImpl: Boolean - get() = getterSetterNoImpl && !readOnly + get() = getterSetterNoImpl && kind == AttributeKind.VAR +val GenerateAttribute.isVal: Boolean + get() = kind == AttributeKind.VAL +val GenerateAttribute.isVar: Boolean + get() = kind == AttributeKind.VAR val Type.typeSignature: String get() = when { @@ -74,7 +81,8 @@ data class GenerateTraitOrClass( val memberFunctions: List, val constants: List, val primaryConstructor: ConstructorWithSuperTypeCall?, - val secondaryConstructors: List + val secondaryConstructors: List, + val generateBuilderFunction: Boolean ) val GenerateFunction.signature: String diff --git a/libraries/tools/idl2k/src/main/kotlin/render.kt b/libraries/tools/idl2k/src/main/kotlin/render.kt index 3a4e352a8c2..16fa5680675 100644 --- a/libraries/tools/idl2k/src/main/kotlin/render.kt +++ b/libraries/tools/idl2k/src/main/kotlin/render.kt @@ -2,7 +2,7 @@ package org.jetbrains.idl2k import java.math.BigInteger -private fun O.indent(commented: Boolean, level: Int) { +private fun O.indent(commented: Boolean = false, level: Int) { if (commented) { append("//") } @@ -11,23 +11,31 @@ private fun O.indent(commented: Boolean, level: Int) { } } -private fun Appendable.renderAttributeDeclaration(arg: GenerateAttribute, override: Boolean, open: Boolean, commented: Boolean, level: Int = 1) { - indent(commented, level) - +private fun Appendable.renderAttributeDeclaration(arg: GenerateAttribute, override: Boolean, open: Boolean, omitDefaults: Boolean = false) { when { override -> append("override ") open -> append("open ") + arg.vararg -> append("vararg ") } - append(if (arg.readOnly) "val" else "var") - append(" ") - append(arg.name) + append(when(arg.kind) { + AttributeKind.VAL -> "val " + AttributeKind.VAR -> "var " + AttributeKind.ARGUMENT -> "" + }) + append(arg.name.replaceKeywords()) append(": ") append(arg.type.render()) - if (arg.initializer != null) { + if (arg.initializer != null && !omitDefaults) { append(" = ") append(arg.initializer.replaceWrongConstants(arg.type)) } +} + +private fun Appendable.renderAttributeDeclarationAsProperty(arg: GenerateAttribute, override: Boolean, open: Boolean, commented: Boolean, level: Int, omitDefaults: Boolean) { + indent(commented, level) + + renderAttributeDeclaration(arg, override, open, omitDefaults) appendln() if (arg.getterNoImpl) { @@ -50,19 +58,10 @@ private fun String.replaceWrongConstants(type: Type) = when { } private fun String.replaceKeywords() = if (this in keywords) this + "_" else this -private fun Appendable.renderArgumentsDeclaration(args: List, omitDefaults: Boolean) = +private fun Appendable.renderArgumentsDeclaration(args: List, omitDefaults: Boolean = false) = args.map { StringBuilder { - if (it.vararg) { - append("vararg ") - } - append(it.name.replaceKeywords()) - append(": ") - append(it.type.render()) - if (!omitDefaults && it.initializer != null && it.initializer != "") { - append(" = ") - append(it.initializer.replaceWrongConstants(it.type)) - } + renderAttributeDeclaration(it, it.override, false, omitDefaults) } }.joinTo(this, ", ", "(", ")") @@ -90,10 +89,6 @@ private fun Appendable.renderFunctionDeclaration(f: GenerateFunction, override: } private fun List.hasNoVars() = none { it.isVar } -private val GenerateAttribute.isVal: Boolean - get() = readOnly -private val GenerateAttribute.isVar: Boolean - get() = !readOnly private fun GenerateAttribute.isCommented(parent: String) = "$parent.$name" in commentOutDeclarations || "$parent.$name: ${type.render()}" in commentOutDeclarations private fun GenerateFunction.isCommented(parent: String) = @@ -154,7 +149,13 @@ fun Appendable.render(allTypes: Map, typeNamesToUn .filter { it !in superAttributes && !it.static && (it.isVar || (it.isVal && superAttributesByName[it.name]?.hasNoVars() ?: true)) } .map { it.dynamicIfUnknownType(allTypes.keySet()) } .groupBy { it.signature }.reduceValues().values().forEach { arg -> - renderAttributeDeclaration(arg, override = arg.signature in superSignatures, open = iface.kind == GenerateDefinitionKind.CLASS && arg.readOnly, commented = arg.isCommented(iface.name)) + renderAttributeDeclarationAsProperty(arg, + override = arg.signature in superSignatures, + open = iface.kind == GenerateDefinitionKind.CLASS && arg.isVal, + commented = arg.isCommented(iface.name), + omitDefaults = iface.kind == GenerateDefinitionKind.TRAIT, + level = 1 + ) } iface.memberFunctions.filter { it !in superFunctions && !it.static }.map { it.dynamicIfUnknownType(allTypes.keySet()) }.groupBy { it.signature }.reduceValues(::betterFunction).values().forEach { renderFunctionDeclaration(it.fixRequiredArguments(iface.name), it.signature in superSignatures, commented = it.isCommented(iface.name)) @@ -168,10 +169,10 @@ fun Appendable.render(allTypes: Map, typeNamesToUn indent(false, 1) appendln("companion object {") iface.constants.forEach { - renderAttributeDeclaration(it, override = false, open = false, level = 2, commented = it.isCommented(iface.name)) + renderAttributeDeclarationAsProperty(it, override = false, open = false, level = 2, commented = it.isCommented(iface.name), omitDefaults = false) } staticAttributes.forEach { - renderAttributeDeclaration(it, override = false, open = false, level = 2, commented = it.isCommented(iface.name)) + renderAttributeDeclarationAsProperty(it, override = false, open = false, level = 2, commented = it.isCommented(iface.name), omitDefaults = false) } staticFunctions.forEach { renderFunctionDeclaration(it.fixRequiredArguments(iface.name), override = false, level = 2, commented = it.isCommented(iface.name)) @@ -182,6 +183,35 @@ fun Appendable.render(allTypes: Map, typeNamesToUn appendln("}") appendln() + + if (iface.generateBuilderFunction) { + renderBuilderFunction(iface, allSuperTypes, allTypes.keySet()) + } +} + +fun Appendable.renderBuilderFunction(dictionary: GenerateTraitOrClass, allSuperTypes: List, allTypes: Set) { + val fields = (dictionary.memberAttributes + allSuperTypes.flatMap { it.memberAttributes }).distinctBy { it.signature }.map { it.copy(kind = AttributeKind.ARGUMENT) }.dynamicIfUnknownType(allTypes) + + append("inline fun ${dictionary.name}") + renderArgumentsDeclaration(fields) + appendln(": ${dictionary.name} {") + + indent(level = 1) + appendln("val o = js(\"({})\") as ${dictionary.name}") + appendln() + + for (field in fields) { + indent(level = 1) + appendln("o.`${field.name}` = ${field.name.replaceKeywords()}") + } + + appendln() + + indent(level = 1) + appendln("return o") + + appendln("}") + appendln() } fun betterFunction(f1: GenerateFunction, f2: GenerateFunction): GenerateFunction =