diff --git a/locales/index.d.ts b/locales/index.d.ts index d8eb90f4e5..a1b347e5d3 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -11004,6 +11004,44 @@ export interface Locale extends ILocale { * Show warning when opening external URLs */ "warnExternalUrl": string; + /** + * Flash + */ + "flash": string; + "_flash": { + /** + * Flash Content Hidden + */ + "contentHidden": string; + /** + * Powered by Ruffle. + */ + "poweredByRuffle": string; + /** + * Always be wary of arbitrary code execution! + */ + "arbitraryCodeExecutionWarning": string; + /** + * Flash Content Failed To Load: + */ + "failedToLoad": string; + /** + * Flash Content Is Loading + */ + "isLoading": string; + /** + * Loading Ruffle player + */ + "loadingRufflePlayer": string; + /** + * Loading Flash file + */ + "loadingFlashFile": string; + /** + * raw.esm.sh could not be accessed, meaning this instance's Content Security Policy is likely out of date. Please contact your instance administrators. + */ + "cspError": string; + }; "_mfm": { /** * This is not a widespread feature, it may not display properly on most other fedi software, including other Misskey forks diff --git a/packages/frontend-embed/@types/global.d.ts b/packages/frontend-embed/@types/global.d.ts index 15373cbd2d..c8a9bf4323 100644 --- a/packages/frontend-embed/@types/global.d.ts +++ b/packages/frontend-embed/@types/global.d.ts @@ -14,6 +14,7 @@ declare const _PERF_PREFIX_: string; declare const _DATA_TRANSFER_DRIVE_FILE_: string; declare const _DATA_TRANSFER_DRIVE_FOLDER_: string; declare const _DATA_TRANSFER_DECK_COLUMN_: string; +declare const _RUFFLE_VERSION_: string; // for dev-mode declare const _LANGS_FULL_: string[][]; diff --git a/packages/frontend-embed/src/components/EmMediaBanner.vue b/packages/frontend-embed/src/components/EmMediaBanner.vue index 435da238a4..bcf8a23a7d 100644 --- a/packages/frontend-embed/src/components/EmMediaBanner.vue +++ b/packages/frontend-embed/src/components/EmMediaBanner.vue @@ -7,6 +7,7 @@ SPDX-License-Identifier: AGPL-3.0-only <a :href="href" target="_blank" :class="$style.root"> <div :class="$style.label"> <template v-if="media.type.startsWith('audio')"><i class="ti ti-music"></i> {{ i18n.ts.audio }}</template> + <template v-else-if="media.type.startsWith('application') && media.type.includes('flash')"><i class="ti ti-bolt"></i> {{ i18n.ts.flash }}</template> <template v-else><i class="ti ti-file"></i> {{ i18n.ts.file }}</template> </div> <div :class="$style.go"> diff --git a/packages/frontend-shared/@types/global.d.ts b/packages/frontend-shared/@types/global.d.ts index 308515564b..82fb52957b 100644 --- a/packages/frontend-shared/@types/global.d.ts +++ b/packages/frontend-shared/@types/global.d.ts @@ -15,6 +15,7 @@ declare const _PERF_PREFIX_: string; declare const _DATA_TRANSFER_DRIVE_FILE_: string; declare const _DATA_TRANSFER_DRIVE_FOLDER_: string; declare const _DATA_TRANSFER_DECK_COLUMN_: string; +declare const _RUFFLE_VERSION_: string; // for dev-mode declare const _LANGS_FULL_: string[][]; diff --git a/packages/frontend-shared/js/const.ts b/packages/frontend-shared/js/const.ts index 8236cc9a4d..42cbf081e8 100644 --- a/packages/frontend-shared/js/const.ts +++ b/packages/frontend-shared/js/const.ts @@ -99,6 +99,15 @@ export const FILE_EXT_TRACKER_MODULES = [ 'mmcmp', ]; +export const FILE_TYPE_FLASH_CONTENT = [ + 'application/x-shockwave-flash', + 'application/vnd.adobe.flash.movie', +]; + +export const FILE_EXT_FLASH_CONTENT = [ + 'swf', +]; + /* https://github.com/sindresorhus/file-type/blob/main/supported.js https://github.com/sindresorhus/file-type/blob/main/core.js diff --git a/packages/frontend/@types/global.d.ts b/packages/frontend/@types/global.d.ts index 15373cbd2d..c8a9bf4323 100644 --- a/packages/frontend/@types/global.d.ts +++ b/packages/frontend/@types/global.d.ts @@ -14,6 +14,7 @@ declare const _PERF_PREFIX_: string; declare const _DATA_TRANSFER_DRIVE_FILE_: string; declare const _DATA_TRANSFER_DRIVE_FOLDER_: string; declare const _DATA_TRANSFER_DECK_COLUMN_: string; +declare const _RUFFLE_VERSION_: string; // for dev-mode declare const _LANGS_FULL_: string[][]; diff --git a/packages/frontend/eslint.config.js b/packages/frontend/eslint.config.js index 565b3d6ae7..e72c18a854 100644 --- a/packages/frontend/eslint.config.js +++ b/packages/frontend/eslint.config.js @@ -36,6 +36,7 @@ export default [ _DATA_TRANSFER_DRIVE_FILE_: false, _DATA_TRANSFER_DRIVE_FOLDER_: false, _DATA_TRANSFER_DECK_COLUMN_: false, + _RUFFLE_VERSION_: false, }, parser, parserOptions: { diff --git a/packages/frontend/package.json b/packages/frontend/package.json index 6198e02f61..58345d2eda 100644 --- a/packages/frontend/package.json +++ b/packages/frontend/package.json @@ -25,8 +25,9 @@ "@rollup/plugin-json": "6.1.0", "@rollup/plugin-replace": "5.0.7", "@rollup/pluginutils": "5.1.2", - "@transfem-org/sfm-js": "0.24.5", + "@ruffle-rs/ruffle": "0.1.0-nightly.2024.10.15", "@syuilo/aiscript": "0.19.0", + "@transfem-org/sfm-js": "0.24.5", "@twemoji/parser": "15.1.1", "@vitejs/plugin-vue": "5.1.4", "@vue/compiler-sfc": "3.5.10", diff --git a/packages/frontend/src/components/MkMediaList.vue b/packages/frontend/src/components/MkMediaList.vue index 39fa6ff012..5209489046 100644 --- a/packages/frontend/src/components/MkMediaList.vue +++ b/packages/frontend/src/components/MkMediaList.vue @@ -21,7 +21,8 @@ SPDX-License-Identifier: AGPL-3.0-only <template v-for="media in mediaList.filter(media => previewable(media))"> <XVideo v-if="media.type.startsWith('video')" :key="`video:${media.id}`" :class="$style.media" :video="media"/> <XImage v-else-if="media.type.startsWith('image')" :key="`image:${media.id}`" :class="$style.media" class="image" :data-id="media.id" :image="media" :raw="raw"/> - <XModPlayer v-else-if="isModule(media)" :key="media.id" :module="media"/> + <XModPlayer v-else-if="isModule(media)" :key="`module:${media.id}`" :class="$style.media" :module="media"/> + <XFlashPlayer v-else-if="isFlash(media)" :key="`flash:${media.id}`" :class="$style.media" :flashFile="media"/> </template> </div> </div> @@ -38,8 +39,9 @@ import XBanner from '@/components/MkMediaBanner.vue'; import XImage from '@/components/MkMediaImage.vue'; import XVideo from '@/components/MkMediaVideo.vue'; import XModPlayer from '@/components/SkModPlayer.vue'; +import XFlashPlayer from '@/components/SkFlashPlayer.vue'; import * as os from '@/os.js'; -import { FILE_TYPE_BROWSERSAFE, FILE_EXT_TRACKER_MODULES, FILE_TYPE_TRACKER_MODULES } from '@@/js/const.js'; +import { FILE_TYPE_BROWSERSAFE, FILE_EXT_TRACKER_MODULES, FILE_TYPE_TRACKER_MODULES, FILE_TYPE_FLASH_CONTENT, FILE_EXT_FLASH_CONTENT } from '@@/js/const.js'; import { defaultStore } from '@/store.js'; import { focusParent } from '@/scripts/focus.js'; @@ -99,6 +101,12 @@ const isModule = (file: Misskey.entities.DriveFile): boolean => { }); }; +const isFlash = (file: Misskey.entities.DriveFile): boolean => { + return FILE_TYPE_FLASH_CONTENT.includes(file.type) || FILE_EXT_FLASH_CONTENT.some((ext) => { + return (file.name.toLowerCase().endsWith('.' + ext) || file.name.toLowerCase().endsWith('.' + ext + '.unknown')); + }); +}; + onMounted(() => { calcAspectRatio(); @@ -224,6 +232,7 @@ const previewable = (file: Misskey.entities.DriveFile): boolean => { if (file.type === 'image/svg+xml') return true; // svgのwebpublic/thumbnailはpngなのでtrue // FILE_TYPE_BROWSERSAFEに適合しないものはブラウザで表示するのに不適切 if (isModule(file)) return true; + if (isFlash(file)) return true; return (file.type.startsWith('video') || file.type.startsWith('image')) && FILE_TYPE_BROWSERSAFE.includes(file.type); }; diff --git a/packages/frontend/src/components/SkFlashPlayer.vue b/packages/frontend/src/components/SkFlashPlayer.vue new file mode 100644 index 0000000000..739a7bc74c --- /dev/null +++ b/packages/frontend/src/components/SkFlashPlayer.vue @@ -0,0 +1,493 @@ +<!-- +SPDX-FileCopyrightText: CenTdemeern1 and other Sharkey contributors +SPDX-License-Identifier: AGPL-3.0-only +--> + +<template> +<div :class="$style.flash_player_container"> + <canvas :class="$style.ratio" height="300" width="300"></canvas> + + <div v-if="hide" :class="$style.flash_player_disabled" @click="toggleVisible()"> + <div> + <b><i class="ph-eye ph-bold ph-lg"></i> {{ i18n.ts.sensitive }}</b> + <span>{{ i18n.ts.clickToShow }}</span> + </div> + </div> + + <div v-else :class="$style.flash_player_enabled"> + <div :class="$style.flash_display"> + <div v-if="playerHide" :class="$style.player_hide" @click="dismissWarning()"> + <b><i class="ph-eye ph-bold ph-lg"></i> {{ i18n.ts._flash.contentHidden }}</b> + <span>{{ i18n.ts._flash.poweredByRuffle }}</span> + <span>{{ i18n.ts._flash.arbitraryCodeExecutionWarning }}</span> + <span>{{ i18n.ts.clickToShow }}</span> + </div> + <div v-if="ruffleError" :class="$style.player_hide"> + <b><i class="ph-warning ph-bold ph-lg"></i> {{ i18n.ts._flash.failedToLoad }}</b> + <code>{{ ruffleError }}</code> + </div> + <div v-else-if="loadingStatus" :class="$style.player_hide"> + <b>{{ i18n.ts._flash.isLoading }}<MkEllipsis/></b> + <MkLoading/> + <p>{{ loadingStatus }}</p> + </div> + <div ref="ruffleContainer" :class="$style.container"></div> + </div> + <div :class="$style.controls"> + <button :key="playPauseButtonKey" @click="playPause()"> + <i v-if="player?.isPlaying" class="ph-pause ph-bold ph-lg"></i> + <i v-else class="ph-play ph-bold ph-lg"></i> + </button> + <button :disabled="playerHide" @click="stop()"> + <i class="ph-stop ph-bold ph-lg"></i> + </button> + <input v-if="player && !playerHide" v-model="player.volume" type="range" min="0" max="1" step="0.1"/> + <input v-else type="range" min="0" max="1" value="1" disabled/> + <a :title="i18n.ts.download" :href="flashFile.url" :download="flashFile.name" target="_blank"> + <i class="ph-download ph-bold ph-lg"></i> + </a> + <button :class="$style.fullscreen" :disabled="playerHide" @click="fullscreen()"> + <i class="ph-arrows-out ph-bold ph-lg"></i> + </button> + </div> + <div v-if="comment" :class="$style.alt" :title="comment">ALT</div> + <i :class="$style.hide" class="ph-eye-slash ph-bold ph-lg" @click="toggleVisible()"></i> + </div> +</div> +</template> + +<script lang="ts" setup> +import { ref, onDeactivated } from 'vue'; +import * as Misskey from 'misskey-js'; +import MkEllipsis from '@/components/global/MkEllipsis.vue'; +import MkLoading from '@/components/global/MkLoading.vue'; +import { i18n } from '@/i18n.js'; +import { defaultStore } from '@/store.js'; +import { PublicAPI, PublicAPILike } from '@/types/ruffle/setup'; // This gives us the types for window.RufflePlayer, etc via side effects +import { PlayerElement } from '@/types/ruffle/player'; + +const props = defineProps<{ + flashFile: Misskey.entities.DriveFile +}>(); + +const isSensitive = props.flashFile.isSensitive; +const url = props.flashFile.url; +const comment = props.flashFile.comment ?? ''; +let hide = ref((defaultStore.state.nsfw === 'force') || isSensitive && (defaultStore.state.nsfw !== 'ignore')); +let playerHide = ref(true); +let ruffleContainer = ref<HTMLDivElement>(); +let playPauseButtonKey = ref<number>(0); +let loadingStatus = ref<string | undefined>(undefined); +let player = ref<PlayerElement | undefined>(undefined); +let ruffleError = ref<string | undefined>(undefined); + +async function dismissWarning() { + playerHide.value = false; + try { + await loadRuffle(); + createPlayer(); + await loadContent(); + } catch (error) { + handleError(error); + } +} + +function handleError(error: unknown) { + if (error instanceof Error) ruffleError.value = error.stack; + else ruffleError.value = `${error}`; // Fallback for if something is horribly wrong +} + +/** + * @throws if esm.sh shits itself + */ +async function loadRuffle() { + if (window.RufflePlayer !== undefined) return; + loadingStatus.value = i18n.ts._flash.loadingRufflePlayer; + await import('@ruffle-rs/ruffle'); // Assumption: this will throw if esm.sh has a hiccup or something. If not, the next undefined check will catch it. + window.RufflePlayer = window.RufflePlayer as PublicAPILike | PublicAPI | undefined; // Assert unknown type due to side effects + if (window.RufflePlayer === undefined) throw Error('esm.sh has shit itself, but not in an expected way (has esm.sh permanently shut down? how close is the heat death of the universe?)'); + + window.RufflePlayer.config = { + // Options affecting the whole page + 'publicPath': `https://raw.esm.sh/@ruffle-rs/ruffle@${_RUFFLE_VERSION_}/`, + 'polyfills': false, + + // Options affecting files only + 'allowScriptAccess': false, + 'autoplay': true, + 'unmuteOverlay': 'visible', + 'backgroundColor': null, + 'wmode': 'window', + 'letterbox': 'on', + 'warnOnUnsupportedContent': true, + 'contextMenu': 'off', // Prevent two overlapping context menus. Most of the stuff in this context menu is available in the controls below the player. + 'showSwfDownload': false, // Handled by custom download button + 'upgradeToHttps': window.location.protocol === 'https:', + 'maxExecutionDuration': 15, + 'logLevel': 'error', + 'base': null, + 'menu': true, + 'salign': '', + 'forceAlign': false, + 'scale': 'showAll', + 'forceScale': false, + 'frameRate': null, + 'quality': 'high', + 'splashScreen': false, + 'preferredRenderer': null, + 'openUrlMode': 'deny', + 'allowNetworking': 'none', + 'favorFlash': false, + 'socketProxy': [], + 'fontSources': [], + 'defaultFonts': {}, + 'credentialAllowList': [], + 'playerRuntime': 'flashPlayer', + 'allowFullscreen': false, // Handled by custom fullscreen button + }; +} + +/** + * @throws If `ruffle.newest()` fails (impossible) + */ +function createPlayer() { + if (player.value !== undefined) return; + const ruffle = (() => { + const ruffleAPI = (window.RufflePlayer as PublicAPI).newest(); + if (ruffleAPI === null) { + // This error exists because non-null assertions are forbidden, apparently. + throw Error('Ruffle could not get the latest Ruffle source. Since we\'re loading from esm.sh this is genuinely impossible and you must\'ve done something incredibly cursed.'); + } + return ruffleAPI; + })(); + player.value = ruffle.createPlayer(); + player.value.style.width = '100%'; + player.value.style.height = '100%'; +} + +/** + * @throws If `player.value` is uninitialized. + */ +async function loadContent() { + if (player.value === undefined) throw Error('Player is uninitialized.'); + ruffleContainer.value?.appendChild(player.value); + loadingStatus.value = i18n.ts._flash.loadingFlashFile; + try { + await player.value.load(url); + loadingStatus.value = undefined; + } catch (error) { + try { + await fetch('https://raw.esm.sh/', { + mode: 'cors', + }); + handleError(error); // Unexpected error + } catch (_) { + // Must be CSP because esm.sh should be online if `loadRuffle()` didn't fail + handleError(i18n.ts._flash.cspError); + } + } +} + +function playPause() { + if (playerHide.value) { + dismissWarning(); + return; + } + if (player.value === undefined) return; // Not done loading or something + if (player.value.isPlaying) { + player.value.pause(); + } else { + player.value.play(); + } + playPauseButtonKey.value += 1; // HACK: Used to re-render play/pause button +} + +function fullscreen() { + if (player.value === undefined) return; // Can't fullscreen an element that doesn't exist. + if (player.value.isFullscreen) { + player.value.exitFullscreen(); + } else { + player.value.enterFullscreen(); + } +} + +function stop() { + if (player.value === undefined) return; // FIXME: This doesn't stop the loading process. (That said, should this even be implemented?) + try { + ruffleContainer.value?.removeChild(player.value); + } catch { + // This is fine + } + playerHide.value = true; +} + +function toggleVisible() { + hide.value = !hide.value; + playerHide.value = true; +} + +onDeactivated(() => { + stop(); +}); + +</script> + +<style lang="scss" module> + +.flash_player_container { + position: relative; + min-height: 0; +} + +.ratio { + width: 100%; +} + +.hide { + border-radius: var(--radius-sm) !important; + background-color: black !important; + color: var(--accentLighten) !important; + font-size: 12px !important; +} + +.flash_player_enabled { + overflow: hidden; + display: flex; + flex-direction: column; + position: absolute; + inset: 0; + + > i { + display: block; + position: absolute; + border-radius: var(--radius-sm); + background-color: var(--fg); + color: var(--accentLighten); + font-size: 14px; + opacity: .5; + padding: 3px 6px; + text-align: center; + cursor: pointer; + top: 12px; + right: 12px; + z-index: 4; + } + + > .alt { + display: block; + position: absolute; + border-radius: var(--radius-sm); + background-color: black; + color: var(--accentLighten); + font-size: 0.8em; + font-weight: bold; + opacity: .5; + padding: 2px 5px; + cursor: help; + user-select: none; + top: 12px; + left: 12px; + z-index: 4; + } + + > .flash_display { + width: 100%; + height: 100%; + flex-grow: 10; + overflow-x: scroll; + overflow-y: hidden; + background-color: black; + text-align: center; + + scrollbar-width: none; + + &::-webkit-scrollbar { + display: none; + } + + .player_hide { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + background: rgba(64, 64, 64, 0.3); + backdrop-filter: var(--modalBgFilter); + color: #fff; + font-size: 12px; + border-radius: var(--radius-sm); + + position: absolute; + z-index: 4; + width: 100%; + height: 100%; + + > span { + display: block; + } + } + + > .container { + height: 100%; + } + } + + > .controls { + display: flex; + width: 100%; + background-color: var(--bg); + z-index: 5; + + > * { + padding: 4px 8px; + } + + > button, a { + border: none; + background-color: transparent; + color: var(--accent); + text-decoration: none; + cursor: pointer; + + &:hover { + background-color: var(--fg); + } + + &:disabled { + filter: grayscale(100%); + background-color: transparent; + cursor: not-allowed; + } + } + + > .fullscreen { + margin-left: auto; + + &:disabled { + filter: grayscale(100%); + } + } + + > input[type=range] { + height: 21px; + -webkit-appearance: none; + width: 90px; + padding: 0; + margin: 4px 8px; + overflow-x: hidden; + cursor: pointer; + + &:disabled { + filter: grayscale(100%); + cursor: not-allowed; + } + + &:focus { + outline: none; + + &::-webkit-slider-runnable-track { + background: var(--bg); + } + + &::-ms-fill-lower, &::-ms-fill-upper { + background: var(--bg); + } + } + + &::-webkit-slider-runnable-track { + width: 100%; + height: 100%; + border-radius: 0; + animate: 0.2s; + background: var(--bg); + border: 1px solid var(--fg); + overflow-x: hidden; + } + + &::-webkit-slider-thumb { + border: none; + height: 100%; + width: 14px; + border-radius: 0; + background: var(--accentLighten); + -webkit-appearance: none; + box-shadow: calc(-100vw - 14px) 0 0 100vw var(--accent); + clip-path: polygon(1px 0, 100% 0, 100% 100%, 1px 100%, 1px calc(50% + 10.5px), -100vw calc(50% + 10.5px), -100vw calc(50% - 10.5px), 0 calc(50% - 10.5px)); + z-index: 1; + } + + &::-moz-range-track { + width: 100%; + height: 100%; + border-radius: 0; + animate: 0.2s; + background: var(--bg); + border: 1px solid var(--fg); + } + + &::-moz-range-progress { + height: 100%; + background: var(--accent); + } + + &::-moz-range-thumb { + border: none; + height: 100%; + border-radius: 0; + width: 14px; + background: var(--accentLighten); + } + + &::-ms-track { + width: 100%; + height: 100%; + border-radius: 0; + animate: 0.2s; + background: transparent; + border-color: transparent; + color: transparent; + } + + &::-ms-fill-lower { + background: var(--accent); + border: 1px solid var(--fg); + border-radius: 0; + } + + &::-ms-fill-upper { + background: var(--bg); + border: 1px solid var(--fg); + border-radius: 0; + } + + &::-ms-thumb { + margin-top: 1px; + border: none; + height: 100%; + width: 14px; + border-radius: 0; + background: var(--accentLighten); + } + } + } +} + +.flash_player_disabled { + display: flex; + justify-content: center; + align-items: center; + background: #111; + color: #fff; + position: absolute; + inset: 0; + + > div { + display: table-cell; + text-align: center; + font-size: 12px; + + > b { + display: block; + } + } +} +</style> diff --git a/packages/frontend/src/components/SkModPlayer.vue b/packages/frontend/src/components/SkModPlayer.vue index 467665398c..0933806109 100644 --- a/packages/frontend/src/components/SkModPlayer.vue +++ b/packages/frontend/src/components/SkModPlayer.vue @@ -440,9 +440,9 @@ onDeactivated(() => { <style lang="scss" module> .hide { - border-radius: var(--radius-sm) !important; + border-radius: var(--MI-radius-sm) !important; background-color: black !important; - color: var(--accentLighten) !important; + color: var(--MI_THEME-accentLighten) !important; font-size: 12px !important; } @@ -456,9 +456,9 @@ onDeactivated(() => { > i { display: block; position: absolute; - border-radius: var(--radius-sm); - background-color: var(--fg); - color: var(--accentLighten); + border-radius: var(--MI-radius-sm); + background-color: var(--MI_THEME-fg); + color: var(--MI_THEME-accentLighten); font-size: 14px; opacity: .5; padding: 3px 6px; @@ -519,7 +519,7 @@ onDeactivated(() => { justify-content: center; align-items: center; background: rgba(64, 64, 64, 0.3); - backdrop-filter: var(--modalBgFilter); + backdrop-filter: var(--MI-modalBgFilter); color: #fff; font-size: 12px; @@ -537,7 +537,7 @@ onDeactivated(() => { > .controls { display: flex; width: 100%; - background-color: var(--bg); + background-color: var(--MI_THEME-bg); z-index: 5; > * { @@ -547,11 +547,11 @@ onDeactivated(() => { > button, a { border: none; background-color: transparent; - color: var(--accent); + color: var(--MI_THEME-accent); cursor: pointer; &:hover { - background-color: var(--fg); + background-color: var(--MI_THEME-fg); } } @@ -579,11 +579,11 @@ onDeactivated(() => { outline: none; &::-webkit-slider-runnable-track { - background: var(--bg); + background: var(--MI_THEME-bg); } &::-ms-fill-lower, &::-ms-fill-upper { - background: var(--bg); + background: var(--MI_THEME-bg); } } @@ -593,8 +593,8 @@ onDeactivated(() => { cursor: pointer; border-radius: 0; animate: 0.2s; - background: var(--bg); - border: 1px solid var(--fg); + background: var(--MI_THEME-bg); + border: 1px solid var(--MI_THEME-fg); overflow-x: hidden; } @@ -603,10 +603,10 @@ onDeactivated(() => { height: 100%; width: 14px; border-radius: 0; - background: var(--accentLighten); + background: var(--MI_THEME-accentLighten); cursor: pointer; -webkit-appearance: none; - box-shadow: calc(-100vw - 14px) 0 0 100vw var(--accent); + box-shadow: calc(-100vw - 14px) 0 0 100vw var(--MI_THEME-accent); clip-path: polygon(1px 0, 100% 0, 100% 100%, 1px 100%, 1px calc(50% + 10.5px), -100vw calc(50% + 10.5px), -100vw calc(50% - 10.5px), 0 calc(50% - 10.5px)); z-index: 1; } @@ -617,14 +617,14 @@ onDeactivated(() => { cursor: pointer; border-radius: 0; animate: 0.2s; - background: var(--bg); - border: 1px solid var(--fg); + background: var(--MI_THEME-bg); + border: 1px solid var(--MI_THEME-fg); } &::-moz-range-progress { cursor: pointer; height: 100%; - background: var(--accent); + background: var(--MI_THEME-accent); } &::-moz-range-thumb { @@ -632,7 +632,7 @@ onDeactivated(() => { height: 100%; border-radius: 0; width: 14px; - background: var(--accentLighten); + background: var(--MI_THEME-accentLighten); cursor: pointer; } @@ -648,14 +648,14 @@ onDeactivated(() => { } &::-ms-fill-lower { - background: var(--accent); - border: 1px solid var(--fg); + background: var(--MI_THEME-accent); + border: 1px solid var(--MI_THEME-fg); border-radius: 0; } &::-ms-fill-upper { - background: var(--bg); - border: 1px solid var(--fg); + background: var(--MI_THEME-bg); + border: 1px solid var(--MI_THEME-fg); border-radius: 0; } @@ -665,7 +665,7 @@ onDeactivated(() => { height: 100%; width: 14px; border-radius: 0; - background: var(--accentLighten); + background: var(--MI_THEME-accentLighten); cursor: pointer; } diff --git a/packages/frontend/src/index.html b/packages/frontend/src/index.html index 55d6b6cffd..c03902f505 100644 --- a/packages/frontend/src/index.html +++ b/packages/frontend/src/index.html @@ -18,11 +18,11 @@ http-equiv="Content-Security-Policy" content="default-src 'self' https://newassets.hcaptcha.com/ https://challenges.cloudflare.com/ http://localhost:7493/; worker-src 'self' blob:; - script-src 'self' 'unsafe-eval' https://*.hcaptcha.com https://challenges.cloudflare.com https://esm.sh https://cdn.jsdelivr.net; + script-src 'self' 'unsafe-eval' https://*.hcaptcha.com https://challenges.cloudflare.com https://esm.sh https://cdn.jsdelivr.net https://raw.esm.sh; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob: www.google.com xn--931a.moe localhost:3000 localhost:5173 127.0.0.1:5173 127.0.0.1:3000 activitypub.software secure.gravatar.com avatars.githubusercontent.com; media-src 'self' localhost:3000 localhost:5173 127.0.0.1:5173 127.0.0.1:3000; - connect-src 'self' localhost:3000 localhost:5173 127.0.0.1:5173 127.0.0.1:3000 https://newassets.hcaptcha.com https://api.listenbrainz.org https://api.friendlycaptcha.com; + connect-src 'self' localhost:3000 localhost:5173 127.0.0.1:5173 127.0.0.1:3000 https://newassets.hcaptcha.com https://api.listenbrainz.org https://api.friendlycaptcha.com https://raw.esm.sh; frame-src *;" /> <meta property="og:site_name" content="[DEV BUILD] Misskey" /> diff --git a/packages/frontend/src/scripts/hotkey.ts b/packages/frontend/src/scripts/hotkey.ts index 04fb235694..d5304ee210 100644 --- a/packages/frontend/src/scripts/hotkey.ts +++ b/packages/frontend/src/scripts/hotkey.ts @@ -42,7 +42,7 @@ const KEY_ALIASES = { const MODIFIER_KEYS = ['ctrl', 'alt', 'shift']; -const IGNORE_ELEMENTS = ['input', 'textarea']; +const IGNORE_ELEMENTS = ['input', 'textarea', 'ruffle-player']; //#endregion //#region store diff --git a/packages/frontend/src/types/ruffle/config/default.d.ts b/packages/frontend/src/types/ruffle/config/default.d.ts new file mode 100644 index 0000000000..615255f41a --- /dev/null +++ b/packages/frontend/src/types/ruffle/config/default.d.ts @@ -0,0 +1,2 @@ +import type { BaseLoadOptions } from './load-options.d.ts'; +export declare const DEFAULT_CONFIG: Required<BaseLoadOptions>; diff --git a/packages/frontend/src/types/ruffle/config/index.d.ts b/packages/frontend/src/types/ruffle/config/index.d.ts new file mode 100644 index 0000000000..9cb3783972 --- /dev/null +++ b/packages/frontend/src/types/ruffle/config/index.d.ts @@ -0,0 +1,10 @@ +/** + * The Config module contains all the types that Ruffle uses for movie configs. + * + * The main interface of interest here is {@link BaseLoadOptions}, which you can apply to `window.RufflePlayer.config` + * to set the default configuration of all players. + * + * @module + */ +export type * from './default.d.ts'; +export type * from './load-options.d.ts'; diff --git a/packages/frontend/src/types/ruffle/config/load-options.d.ts b/packages/frontend/src/types/ruffle/config/load-options.d.ts new file mode 100644 index 0000000000..8ed0aca03b --- /dev/null +++ b/packages/frontend/src/types/ruffle/config/load-options.d.ts @@ -0,0 +1,620 @@ +/** + * Represents the various types of auto-play behaviours that are supported. + */ +export declare enum AutoPlay { + /** + * The player should automatically play the movie as soon as it is loaded. + * + * If the browser does not support automatic audio, the movie will begin + * muted. + */ + On = "on", + /** + * The player should not attempt to automatically play the movie. + * + * This will leave it to the user or API to actually play when appropriate. + */ + Off = "off", + /** + * The player should automatically play the movie as soon as it is deemed + * "appropriate" to do so. + * + * The exact behaviour depends on the browser, but commonly requires some + * form of user interaction on the page in order to allow auto playing videos + * with sound. + */ + Auto = "auto" +} +/** + * Controls whether the content is letterboxed or pillarboxed when the + * player's aspect ratio does not match the movie's aspect ratio. + * + * When letterboxed, black bars will be rendered around the exterior + * margins of the content. + */ +export declare enum Letterbox { + /** + * The content will never be letterboxed. + */ + Off = "off", + /** + * The content will only be letterboxed if the content is running fullscreen. + */ + Fullscreen = "fullscreen", + /** + * The content will always be letterboxed. + */ + On = "on" +} +/** + * When the player is muted, this controls whether or not Ruffle will show a + * "click to unmute" overlay on top of the movie. + */ +export declare enum UnmuteOverlay { + /** + * Show an overlay explaining that the movie is muted. + */ + Visible = "visible", + /** + * Don't show an overlay and pretend that everything is fine. + */ + Hidden = "hidden" +} +/** + * Console logging level. + */ +export declare enum LogLevel { + Error = "error", + Warn = "warn", + Info = "info", + Debug = "debug", + Trace = "trace" +} +/** + * The window mode of a Ruffle player. + */ +export declare enum WindowMode { + /** + * The Flash content is rendered in its own window and layering is done with the browser's + * default behavior. + * + * In Ruffle, this mode functions like `WindowMode::Opaque` and will layer the Flash content + * together with other HTML elements. + */ + Window = "window", + /** + * The Flash content is layered together with other HTML elements, and the stage color is + * opaque. Content can render above or below Ruffle based on CSS rendering order. + */ + Opaque = "opaque", + /** + * The Flash content is layered together with other HTML elements, and the SWF stage color is + * transparent. Content beneath Ruffle will be visible through transparent areas. + */ + Transparent = "transparent", + /** + * Request compositing with hardware acceleration when possible. + * This mode has no effect in Ruffle and will function like `WindowMode.Opaque`. + */ + Direct = "direct", + /** + * Request a direct rendering path, bypassing browser compositing when possible. + * This mode has no effect in Ruffle and will function like `WindowMode::Opaque`. + */ + Gpu = "gpu" +} +/** + * The render backend of a Ruffle player. + * + * The available backends may change in future releases. + */ +export declare enum RenderBackend { + /** + * An [in-development API](https://caniuse.com/webgpu) that will be preferred if available in the future. + * Should behave the same as wgpu-webgl, except with lower overhead and thus better performance. + */ + WebGpu = "webgpu", + /** + * The most featureful and currently preferred backend. + * Rendering is done the same way as in the desktop app, then translated to WebGL on-the-fly. + */ + WgpuWebgl = "wgpu-webgl", + /** + * A vanilla WebGL backend. Was the default backend until the start of 2023, + * but is now used as a fallback for devices that do not support WebGL 2. + * Supports fewer features and has a faster initialization time; + * may be useful for content that does not need advanced features like bitmap drawing or blend modes. + */ + Webgl = "webgl", + /** + * The slowest and most basic backend, used as a fallback when all else fails. + * However, this is currently the only backend that accurately scales hairline strokes. + * If you notice excessively thick strokes in specific content, + * you may want to use the canvas renderer for that content until the issue is resolved. + */ + Canvas = "canvas" +} +/** + * Represents the various context menu options that are supported. + */ +export declare enum ContextMenu { + /** + * The context menu should appear when right-clicking or long-pressing + * the Ruffle instance. + */ + On = "on", + /** + * The context menu should only appear when right-clicking + * the Ruffle instance. + */ + RightClickOnly = "rightClickOnly", + /** + * The context menu should not appear when right-clicking or long-pressing + * the Ruffle instance. + */ + Off = "off" +} +/** + * Represents the player runtime to emulate. + */ +export declare enum PlayerRuntime { + /** + * Emulate Adobe AIR. + */ + AIR = "air", + /** + * Emulate Adobe Flash Player. + */ + FlashPlayer = "flashPlayer" +} +/** + * Non-negative duration in seconds. + */ +export type SecsDuration = number; +/** + * Deprecated duration type, use SecsDuration instead. + * Based on https://doc.rust-lang.org/stable/std/time/struct.Duration.html#method.new . + */ +export interface ObsoleteDuration { + secs: number; + nanos: number; +} +/** + * Any new duration-based setting should use 'number' or 'SecsDuration' for its type, + * instead of this type. + */ +export type Duration = SecsDuration | ObsoleteDuration; +/** + * The handling mode of links opening a new website. + */ +export declare enum OpenURLMode { + /** + * Allow all links to open a new website. + */ + Allow = "allow", + /** + * A confirmation dialog opens with every link trying to open a new website. + */ + Confirm = "confirm", + /** + * Deny all links to open a new website. + */ + Deny = "deny" +} +/** + * The networking API access mode of the Ruffle player. + */ +export declare enum NetworkingAccessMode { + /** + * All networking APIs are permitted in the SWF file. + */ + All = "all", + /** + * The SWF file may not call browser navigation or browser interaction APIs. + * + * The APIs navigateToURL(), fscommand() and ExternalInterface.call() are + * prevented in this mode. + */ + Internal = "internal", + /** + * The SWF file may not call browser navigation or browser interaction APIs + * and it cannot use any SWF-to-SWF communication APIs. + * + * Additionally to the ones in internal mode, the APIs sendToURL(), + * FileReference.download(), FileReference.upload(), Loader.load(), + * LocalConnection.connect(), LocalConnection.send(), NetConnection.connect(), + * NetStream.play(), Security.loadPolicyFile(), SharedObject.getLocal(), + * SharedObject.getRemote(), Socket.connect(), Sound.load(), URLLoader.load(), + * URLStream.load() and XMLSocket.connect() are prevented in this mode. + * + * This mode is not implemented yet. + */ + None = "none" +} +/** + * Represents a host, port and proxyUrl. Used when a SWF file tries to use a Socket. + */ +export interface SocketProxy { + /** + * Host used by the SWF. + */ + host: string; + /** + * Port used by the SWF. + */ + port: number; + /** + * The proxy URL to use when SWF file tries to connect to the specified host and port. + */ + proxyUrl: string; +} +/** + * Defines the names of the fonts to use for each "default" Flash device font. + * + * The name of each font provided will be used, in priority order. + * + * For example, defining `sans: ["Helvetica", "Arial"]` would use Helvetica if present, before trying Arial. + */ +export interface DefaultFonts { + /** + * `_sans`, a Sans-Serif font (similar to Helvetica or Arial) + */ + sans?: Array<string>; + /** + * `_serif`, a Serif font (similar to Times Roman) + */ + serif?: Array<string>; + /** + * `_typewriter`, a Monospace font (similar to Courier) + */ + typewriter?: Array<string>; + /** + * `_ゴシック`, a Japanese Gothic font + */ + japaneseGothic?: Array<string>; + /** + * `_等幅`, a Japanese Gothic Mono font + */ + japaneseGothicMono?: Array<string>; + /** + * `_明朝`, a Japanese Mincho font + */ + japaneseMincho?: Array<string>; +} +/** + * Any options used for loading a movie. + */ +export interface BaseLoadOptions { + /** + * If set to true, the movie is allowed to interact with the page through + * JavaScript, using a flash concept called `ExternalInterface`. + * + * This should only be enabled for movies you trust. + * + * @default false + */ + allowScriptAccess?: boolean; + /** + * Also known as "flashvars" - these are values that may be passed to + * and loaded by the movie. + * + * If a URL if specified when loading the movie, some parameters will + * be extracted by the query portion of that URL and then overwritten + * by any explicitly set here. + * + * @default {} + */ + parameters?: URLSearchParams | string | Record<string, string> | null; + /** + * Controls the auto-play behaviour of Ruffle. + * + * @default AutoPlay.Auto + */ + autoplay?: AutoPlay; + /** + * Controls the background color of the player. + * Must be an HTML color (e.g. "#FFFFFF"). CSS colors are not allowed. + * `null` uses the background color of the SWF file. + * + * @default null + */ + backgroundColor?: string | null; + /** + * Controls letterbox behavior when the Flash container size does not + * match the movie size. + * + * @default Letterbox.Fullscreen + */ + letterbox?: Letterbox; + /** + * Controls the visibility of the unmute overlay when the player + * is started muted. + * + * @default UnmuteOverlay.Visible + */ + unmuteOverlay?: UnmuteOverlay; + /** + * Whether or not to auto-upgrade all embedded URLs to https. + * + * Flash content that embeds http urls will be blocked from + * accessing those urls by the browser when Ruffle is loaded + * in a https context. Set to `true` to automatically change + * `http://` to `https://` for all embedded URLs when Ruffle is + * loaded in an https context. + * + * @default true + */ + upgradeToHttps?: boolean; + /** + * Enable (true) or disable (false) Ruffle's built in compatibility rules. + * + * These are rules that may make some content work by deliberately changing + * behaviour, for example by rewriting requests or spoofing SWF urls if they + * rely on websites that no longer exist. + * + * @default true + */ + compatibilityRules?: boolean; + /** + * Favor using the real Adobe Flash Player over Ruffle if the browser supports it. + * + * @default true + */ + favorFlash?: boolean; + /** + * This is no longer used and does not affect anything. + * It is only kept for backwards compatibility. + * + * Previously: + * "Whether or not to display an overlay with a warning when + * loading a movie with unsupported content." + * + * @default true + * @deprecated + */ + warnOnUnsupportedContent?: boolean; + /** + * Console logging level. + * + * @default LogLevel.Error + */ + logLevel?: LogLevel; + /** + * If set to true, the context menu has an option to download + * the SWF. + * + * @default false + */ + showSwfDownload?: boolean; + /** + * Whether or not to show a context menu when right-clicking + * a Ruffle instance. + * + * @default ContextMenu.On + */ + contextMenu?: ContextMenu | boolean; + /** + * Whether or not to show a splash screen before the SWF has loaded with Ruffle (backwards-compatibility). + * + * @default true + */ + preloader?: boolean; + /** + * Whether or not to show a splash screen before the SWF has loaded with Ruffle. + * + * @default true + */ + splashScreen?: boolean; + /** + * Maximum amount of time a script can take before scripting + * is disabled. + * + * @default 15 + */ + maxExecutionDuration?: Duration; + /** + * Specifies the base directory or URL used to resolve all relative path statements in the SWF file. + * null means the current directory. + * + * @default null + */ + base?: string | null; + /** + * If set to true, the built-in context menu items are visible + * + * This is equivalent to Stage.showMenu. + * + * @default true + */ + menu?: boolean; + /** + * This is equivalent to Stage.align. + * + * @default "" + */ + salign?: string; + /** + * If set to true, movies are prevented from changing the stage alignment. + * + * @default false + */ + forceAlign?: boolean; + /** + * This is equivalent to Stage.quality. + * + * @default "high" + */ + quality?: string; + /** + * This is equivalent to Stage.scaleMode. + * + * @default "showAll" + */ + scale?: string; + /** + * If set to true, movies are prevented from changing the stage scale mode. + * + * @default false + */ + forceScale?: boolean; + /** + * If set to true, the Stage's displayState can be changed + * + * @default false + */ + allowFullscreen?: boolean; + /** + * Sets and locks the player's frame rate, overriding the movie's frame rate. + * + * @default null + */ + frameRate?: number | null; + /** + * The window mode of the Ruffle player. + * + * This setting controls how the Ruffle container is layered and rendered with other content on the page. + * + * @default WindowMode.Window + */ + wmode?: WindowMode; + /** + * The emulated version of the player. + * + * This controls the version that is reported to the movie. + * null means latest version. + * + * @default null + */ + playerVersion?: number | null; + /** + * The preferred render backend of the Ruffle player. + * + * This option should only be used for testing; + * the available backends may change in future releases. + * By default, Ruffle chooses the most featureful backend supported by the user's system, + * falling back to more basic backends if necessary. + * The available values in order of default preference are: + * "webgpu", "wgpu-webgl", "webgl", "canvas". + * + * @default null + */ + preferredRenderer?: RenderBackend | null; + /** + * The URL at which Ruffle can load its extra files (i.e. `.wasm`). + * + * @default null + */ + publicPath?: string | null; + /** + * Whether or not to enable polyfills on the page. + * + * Polyfills will look for "legacy" flash content like `<object>` + * and `<embed>` elements, and replace them with compatible + * Ruffle elements. + * + * @default true + */ + polyfills?: boolean; + /** + * The handling mode of links opening a new website. + * + * @default OpenURLMode.Allow + */ + openUrlMode?: OpenURLMode; + /** + * Which flash networking APIs may be accessed. + * + * @default NetworkingAccessMode.All + */ + allowNetworking?: NetworkingAccessMode; + /** + * A function to call for opening content in a new tab. + * + * This is only used if the content cannot be loaded due to CORS, + * and the Extension version of Ruffle will override this to provide a local player. + * + * @default null + */ + openInNewTab?: ((swf: URL) => void) | null; + /** + * An array of SocketProxy objects. + * + * When a SWF tries to establish a Socket connection, Ruffle will search for + * a matching SocketProxy object in this array and use it to establish a WebSocket connection, + * through which all communication is tunneled through. + * + * When none are found, Ruffle will fail the connection gracefully. + * When multiple matching SocketProxy objects exist, the first one is used. + * + * @default [] + */ + socketProxy?: Array<SocketProxy>; + /** + * An array of font URLs to eagerly load and provide to Ruffle. + * + * These will be fetched by the browser as part of the loading of Flash content, which may slow down load times. + * + * Currently only SWFs are supported, and each font embedded within that SWF will be used as device font by Flash content. + * + * If any URL fails to load (either it's an invalid file, or a network error occurs), Ruffle will log an error but continue without it. + * + * @default [] + */ + fontSources?: Array<string>; + /** + * The font names to use for each "default" Flash device font. + * + * @default {} + */ + defaultFonts?: DefaultFonts; + /** + * An array of origins that credentials may be sent to. + * Credentials are cookies, authorization headers, or TLS client certificates. + * + * Entries should include the protocol and host, for example `https://example.org` or `http://subdomain.example.org`. + * + * Cookies will always be sent to the same origin as the page the content was loaded on. + * If you configure this to send cookies to an origin but that origin does not configure CORS to allow it, + * then requests will start failing due to CORS. + * See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Credentials. + * + * This directly corresponds to https://developer.mozilla.org/en-US/docs/Web/API/fetch#credentials + * Every request will be `same-origin` unless specified here, in which case it will be `include`. + * + * @default [] + */ + credentialAllowList?: Array<string>; + /** + * The player runtime to emulate + * + * This allows you to emulate Adobe AIR or Adobe Flash Player. + */ + playerRuntime?: PlayerRuntime; +} +/** + * Options to load a movie by URL. + */ +export interface URLLoadOptions extends BaseLoadOptions { + /** + * The URL to load a movie from. + * + * If there is a query portion of this URL, then default {@link parameters} + * will be extracted from that. + */ + url: string; +} +/** + * Options to load a movie by a data stream. + */ +export interface DataLoadOptions extends BaseLoadOptions { + /** + * The data to load a movie from. + */ + data: ArrayLike<number> | ArrayBufferLike; + /** + * The filename of the SWF movie to provide to ActionScript. + * + * @default "movie.swf" + */ + swfFileName?: string; +} diff --git a/packages/frontend/src/types/ruffle/player/flash.d.ts b/packages/frontend/src/types/ruffle/player/flash.d.ts new file mode 100644 index 0000000000..64754bfbf1 --- /dev/null +++ b/packages/frontend/src/types/ruffle/player/flash.d.ts @@ -0,0 +1,17 @@ +/** + * These are properties and methods that Flash added to its `<embed>/<object>` tags. + * These don't seem to be documented in full anywhere, and Ruffle adds them as we encounter some. + * You are discouraged from using these, and they exist only to support legacy websites from decades ago. + * + * Extra methods or properties may appear at any time, due to `ExternalInterface.addCallback()`. + * It may even overwrite existing methods or properties. + */ +export interface FlashAPI { + /** + * Returns the movies loaded process, in a percent from 0 to 100. + * Ruffle may just return 0 or 100. + * + * @returns a value from 0 to 100, inclusive. + */ + PercentLoaded(): number; +} diff --git a/packages/frontend/src/types/ruffle/player/index.d.ts b/packages/frontend/src/types/ruffle/player/index.d.ts new file mode 100644 index 0000000000..242ab86f43 --- /dev/null +++ b/packages/frontend/src/types/ruffle/player/index.d.ts @@ -0,0 +1,9 @@ +/** + * The Player module contains the actual {@link PlayerElement} and the various interfaces that exist to interact with the player. + * + * @module + */ +export type * from './flash.d.ts'; +export type * from './player-element.d.ts'; +export type * from './movie-metadata.d.ts'; +export type * from './legacy.d.ts'; diff --git a/packages/frontend/src/types/ruffle/player/legacy.d.ts b/packages/frontend/src/types/ruffle/player/legacy.d.ts new file mode 100644 index 0000000000..27fc5c0256 --- /dev/null +++ b/packages/frontend/src/types/ruffle/player/legacy.d.ts @@ -0,0 +1,163 @@ +import type { DataLoadOptions, URLLoadOptions } from '../config/index.d.ts'; +import type { MovieMetadata } from './movie-metadata.d.ts'; +/** + * Describes the loading state of an SWF movie. + */ +export enum ReadyState { + /** + * No movie is loaded, or no information is yet available about the movie. + */ + HaveNothing = 0, + /** + * The movie is still loading, but it has started playback, and metadata is available. + */ + Loading = 1, + /** + * The movie has completely loaded. + */ + Loaded = 2 +} +/** + * Legacy interface to the Ruffle API. + * + * These methods are deprecated and only exist for backwards compatibility. + * Due to the nature of Flash, they may be replaced at any time via ActionScript's `ExternalInterface` class. + */ +export interface LegacyRuffleAPI { + /** + * A movie can communicate with the hosting page using fscommand + * as long as script access is allowed. + * + * @param command A string passed to the host application for any use. + * @param args A string passed to the host application for any use. + * @returns True if the command was handled. + */ + onFSCommand: ((command: string, args: string) => boolean) | null; + /** + * Any configuration that should apply to this specific player. + * This will be defaulted with any global configuration. + */ + config: URLLoadOptions | DataLoadOptions | object; + /** + * The effective config loaded with the last call to `load()`. + * If no such call has been made, this will be `null`. + */ + readonly loadedConfig: URLLoadOptions | DataLoadOptions | null; + /** + * Indicates the readiness of the playing movie. + * + * @returns The `ReadyState` of the player. + */ + get readyState(): ReadyState; + /** + * The metadata of the playing movie (such as movie width and height). + * These are inherent properties stored in the SWF file and are not affected by runtime changes. + * For example, `metadata.width` is the width of the SWF file, and not the width of the Ruffle player. + * + * @returns The metadata of the movie, or `null` if the movie metadata has not yet loaded. + */ + get metadata(): MovieMetadata | null; + /** + * Reloads the player, as if you called {@link load} with the same config as the last time it was called. + * + * If this player has never been loaded, this method will return an error. + */ + reload(): Promise<void>; + /** + * Loads a specified movie into this player. + * + * This will replace any existing movie that may be playing. + * + * @param options One of the following: + * - A URL, passed as a string, which will load a URL with default options. + * - A {@link URLLoadOptions} object, to load a URL with options. + * - A {@link DataLoadOptions} object, to load data with options. + * The options, if provided, must only contain values provided for this specific movie. + * They must not contain any default values, since those would overwrite other configuration + * settings with a lower priority (e.g. the general RufflePlayer config). + * + * The options will be defaulted by the {@link config} field, which itself + * is defaulted by a global `window.RufflePlayer.config`. + */ + load(options: string | URLLoadOptions | DataLoadOptions): Promise<void>; + /** + * Plays or resumes the movie. + */ + play(): void; + /** + * Whether this player is currently playing. + * + * @returns True if this player is playing, false if it's paused or hasn't started yet. + */ + get isPlaying(): boolean; + /** + * Returns the master volume of the player. + * + * The volume is linear and not adapted for logarithmic hearing. + * + * @returns The volume. 1.0 is 100% volume. + */ + get volume(): number; + /** + * Sets the master volume of the player. + * + * The volume should be linear and not adapted for logarithmic hearing. + * + * @param value The volume. 1.0 is 100% volume. + */ + set volume(value: number); + /** + * Checks if this player is allowed to be fullscreen by the browser. + * + * @returns True if you may call {@link enterFullscreen}. + */ + get fullscreenEnabled(): boolean; + /** + * Checks if this player is currently fullscreen inside the browser. + * + * @returns True if it is fullscreen. + */ + get isFullscreen(): boolean; + /** + * Exported function that requests the browser to change the fullscreen state if + * it is allowed. + * + * @param isFull Whether to set to fullscreen or return to normal. + */ + setFullscreen(isFull: boolean): void; + /** + * Requests the browser to make this player fullscreen. + * + * This is not guaranteed to succeed, please check {@link fullscreenEnabled} first. + */ + enterFullscreen(): void; + /** + * Requests the browser to no longer make this player fullscreen. + */ + exitFullscreen(): void; + /** + * Pauses this player. + * + * No more frames, scripts or sounds will be executed. + * This movie will be considered inactive and will not wake up until resumed. + */ + pause(): void; + /** + * Sets a trace observer on this flash player. + * + * The observer will be called, as a function, for each message that the playing movie will "trace" (output). + * + * @param observer The observer that will be called for each trace. + */ + set traceObserver(observer: ((message: string) => void) | null); + /** + * Fetches the loaded SWF and downloads it. + */ + downloadSwf(): Promise<void>; + /** + * Show a dismissible message in front of the player. + * + * @param message The message shown to the user. + */ + displayMessage(message: string): void; +} diff --git a/packages/frontend/src/types/ruffle/player/movie-metadata.d.ts b/packages/frontend/src/types/ruffle/player/movie-metadata.d.ts new file mode 100644 index 0000000000..f9fde87636 --- /dev/null +++ b/packages/frontend/src/types/ruffle/player/movie-metadata.d.ts @@ -0,0 +1,38 @@ +/** + * Metadata about a loaded SWF file. + */ +export interface MovieMetadata { + /** + * The width of the movie in pixels. + */ + readonly width: number; + /** + * The height of the movie in pixels. + */ + readonly height: number; + /** + * The frame rate of the movie in frames per second. + */ + readonly frameRate: number; + /** + * The number of frames on the root timeline of the movie. + */ + readonly numFrames: number; + /** + * The SWF version of the movie. + */ + readonly swfVersion: number; + /** + * The background color of the movie as a hex string, such as "#FFFFFF". + * May be `null` if the background color is unavailable. + */ + readonly backgroundColor: string | null; + /** + * Whether this movie is an ActionScript 3.0 movie. + */ + readonly isActionScript3: boolean; + /** + * Uncompressed length in bytes. + */ + readonly uncompressedLength: number; +} diff --git a/packages/frontend/src/types/ruffle/player/player-element.d.ts b/packages/frontend/src/types/ruffle/player/player-element.d.ts new file mode 100644 index 0000000000..04d24e558f --- /dev/null +++ b/packages/frontend/src/types/ruffle/player/player-element.d.ts @@ -0,0 +1,12 @@ +import type { LegacyRuffleAPI } from './legacy.d.ts'; +import type { FlashAPI } from './flash.d.ts'; +/** + * A Ruffle player's HTML element. + * + * This is either created through `window.RufflePlayer.latest().createPlayer()`, or polyfilled from a `<embed>`/`<object>` tag. + * + * In addition to usual HTML attributes, this player contains methods and properties that belong to both + * the **Flash JS API** and **legacy Ruffle API**s. + */ +export interface PlayerElement extends HTMLElement, LegacyRuffleAPI, FlashAPI { +} diff --git a/packages/frontend/src/types/ruffle/setup/index.d.ts b/packages/frontend/src/types/ruffle/setup/index.d.ts new file mode 100644 index 0000000000..40d2e7cd71 --- /dev/null +++ b/packages/frontend/src/types/ruffle/setup/index.d.ts @@ -0,0 +1,19 @@ +/** + * The Setup module contains the interfaces and methods needed to install Ruffle onto a page, + * and create a {@link PlayerElement} with the latest version of Ruffle available. + * + * This is primarily relevant to users of `ruffle-core` as a npm module, as the "selfhosted" version of Ruffle preinstalls itself, + * and without type checking the interfaces here are of limited use. + * + * For users of `ruffle-core` as a npm module, you are encouraged to call {@link installRuffle} once during page load to + * make the `ruffle-core` library register itself as a version of Ruffle on the page. + * + * Multiple sources of Ruffle may exist - for example, the Ruffle browser extension also installs itself on page load. + * For this reason, you are required to call `window.RufflePlayer.latest()` (for example) to grab the latest {@link SourceAPI}, + * from which you can create a {@link PlayerElement} via {@link SourceAPI.createPlayer}. + * + * @module + */ +export type * from './public-api.d.ts'; +export type * from './source-api.d.ts'; +export type * from './install.d.ts'; diff --git a/packages/frontend/src/types/ruffle/setup/install.d.ts b/packages/frontend/src/types/ruffle/setup/install.d.ts new file mode 100644 index 0000000000..13ffaa64b9 --- /dev/null +++ b/packages/frontend/src/types/ruffle/setup/install.d.ts @@ -0,0 +1,28 @@ +/** + * Options to use with this specific installation of Ruffle. + * + * This is mostly to provide a way to configure environmental settings, like using + * `onFirstLoad` to potentially configure webpack prior to loading wasm files. + */ +export interface InstallationOptions { + /** + * A callback to be run before the very first time Ruffle is loaded. + * This may be used to configure a bundler prior to asset loading. + */ + onFirstLoad?: () => void; +} +/** + * Install this version of Ruffle into the current page. + * + * Multiple (or zero) versions of Ruffle may be installed at the same time, + * and you should use `window.RufflePlayer.newest()` or similar to access the appropriate + * installation at time of use. + * + * @param sourceName The name of this particular + * Ruffle source. Common convention is "local" for websites that bundle their own Ruffle, + * "extension" for browser extensions, and something else for other use cases. + * Names are unique, and last-installed will replace earlier installations with the same name, + * regardless of what those installations are or which version they represent. + * @param options Any options used to configure this specific installation of Ruffle. + */ +export declare function installRuffle(sourceName: string, options?: InstallationOptions): void; diff --git a/packages/frontend/src/types/ruffle/setup/public-api.d.ts b/packages/frontend/src/types/ruffle/setup/public-api.d.ts new file mode 100644 index 0000000000..e03e909242 --- /dev/null +++ b/packages/frontend/src/types/ruffle/setup/public-api.d.ts @@ -0,0 +1,133 @@ +import type { SourceAPI } from './source-api.d.ts'; +import type { DataLoadOptions, URLLoadOptions } from '../config/index.d.ts'; +declare global { + interface Window { + /** + * The public API for generating a ruffle player. + * This may be a config holder, which will be converted to a + * {@link PublicAPI} via {@link installRuffle}, or an actual + * {@link PublicAPI} instance itself. + */ + RufflePlayer?: PublicAPILike | PublicAPI; + } +} +/** + * Represents a potential installation of a Ruffle public API. + * + * Unlike {@link PublicAPI}, this may come from any source, past or future. + * It needs to be forwards compatible and convertible into a modern day {@link PublicAPI}. + */ +export interface PublicAPILike { + config?: DataLoadOptions | URLLoadOptions | object; + sources?: Record<string, SourceAPI>; + invoked?: boolean; + newestName?: string | null; + superseded?(): void; +} +/** + * Represents the Ruffle public API. + * + * The public API exists primarily to allow multiple installations of Ruffle on a + * page (e.g. an extension install and a local one) to cooperate. In an ideal + * situation, all Ruffle sources on the page install themselves into a single + * public API, and then the public API picks the newest version by default. + * + * This API *is* versioned, in case we need to upgrade it. However, it must be + * backwards- and forwards-compatible with all known sources. + */ +export declare class PublicAPI implements PublicAPILike { + /** + * The configuration object used when Ruffle is instantiated. + */ + config: DataLoadOptions | URLLoadOptions | object; + sources: Record<string, SourceAPI>; + invoked: boolean; + newestName: string | null; + /** + * Construct the Ruffle public API. + * + * Do not use this function to negotiate a public API. Instead, use + * `public_api` to register your Ruffle source with an existing public API + * if it exists. + * + * Constructing a Public API will also trigger it to initialize Ruffle once + * the page loads, if the API has not already been superseded. + * + * @param prev What used to be in the public API slot. + * + * This is used to upgrade from a prior version of the public API, or from + * a user-defined configuration object placed in the public API slot. + */ + constructor(prev?: PublicAPILike | null); + /** + * The version of the public API. + * + * This is *not* the version of Ruffle itself. + * + * This allows a page with an old version of the Public API to be upgraded + * to a new version of the API. The public API is intended to be changed + * very infrequently, if at all, but this provides an escape mechanism for + * newer Ruffle sources to upgrade older installations. + * + * @returns The version of this public API. + */ + get version(): string; + /** + * Determine the name of the newest registered source in the Public API. + * + * @returns The name of the source, or `null` if no source + * has yet to be registered. + */ + newestSourceName(): string | null; + /** + * Negotiate and start Ruffle. + * + * This function reads the config parameter to determine which polyfills + * should be enabled. If the configuration parameter is missing, then we + * use a built-in set of defaults sufficient to fool sites with static + * content and weak plugin detection. + */ + init(): void; + /** + * Look up the newest Ruffle source and return it's API. + * + * @returns An instance of the Source API. + */ + newest(): SourceAPI | null; + /** + * Look up a specific Ruffle version (or any version satisfying a given set + * of requirements) and return it's API. + * + * @param requirementString A set of semantic version requirement + * strings that the player version must satisfy. + * @returns An instance of the Source API, if one or more + * sources satisfied the requirement. + */ + satisfying(requirementString: string): SourceAPI | null; + /** + * Look up the newest Ruffle version compatible with the `local` source, if + * it's installed. Otherwise, use the latest version. + * + * @returns An instance of the Source API + */ + localCompatible(): SourceAPI | null; + /** + * Look up the newest Ruffle version with the exact same version as the + * `local` source, if it's installed. Otherwise, use the latest version. + * + * @returns An instance of the Source API + */ + local(): SourceAPI | null; + /** + * Indicates that this version of the public API has been superseded by a + * newer version. + * + * This should only be called by a newer version of the Public API. + * Identical versions of the Public API should not supersede older versions + * of that same API. + * + * Unfortunately, we can't disable polyfills after-the-fact, so this + * only lets you disable the init event... + */ + superseded(): void; +} diff --git a/packages/frontend/src/types/ruffle/setup/source-api.d.ts b/packages/frontend/src/types/ruffle/setup/source-api.d.ts new file mode 100644 index 0000000000..2ebad17113 --- /dev/null +++ b/packages/frontend/src/types/ruffle/setup/source-api.d.ts @@ -0,0 +1,34 @@ +import type { PlayerElement } from '../player/index.d.ts'; +/** + * Represents this particular version of Ruffle. + * + * Multiple APIs can be instantiated from different sources; e.g. an "extension" + * version, versus a "local" version. This expresses to the Public API + * negotiator (see {@link PublicAPI}) what this particular version of Ruffle is and + * how to control it. + */ +export interface SourceAPI { + /** + * The version of this particular API, as a string in a semver compatible format. + */ + version: string; + /** + * Start up the polyfills. + * + * Do not run polyfills for more than one Ruffle source at a time. + */ + polyfill(): void; + /** + * Polyfill the plugin detection. + * + * This needs to run before any plugin detection script does. + */ + pluginPolyfill(): void; + /** + * Create a Ruffle player element using this particular version of Ruffle. + * + * @returns The player element. This is a DOM element that may be inserted + * into the current page as you wish. + */ + createPlayer(): PlayerElement; +} diff --git a/packages/frontend/vite.config.ts b/packages/frontend/vite.config.ts index f8bd433335..a51028c2c4 100644 --- a/packages/frontend/vite.config.ts +++ b/packages/frontend/vite.config.ts @@ -28,6 +28,17 @@ const externalPackages = [ : id; }, }, + // sharkey: Used for SkFlashPlayer, has large wasm files so it's loaded via Ruffle's preferred CDN + { + name: 'ruffle', + match: /^@ruffle-rs\/ruffle\/?(?<file>.*)$/, + path(id: string, pattern: RegExp): string { + const match = pattern.exec(id)?.groups; + return match + ? `https://esm.sh/@ruffle-rs/ruffle@${packageInfo.dependencies['@ruffle-rs/ruffle']}/${match['file']}?raw` + : id; + }, + }, ]; const hash = (str: string, seed = 0): number => { @@ -123,6 +134,7 @@ export function getConfig(): UserConfig { _DATA_TRANSFER_DECK_COLUMN_: JSON.stringify('mk_deck_column'), __VUE_OPTIONS_API__: true, __VUE_PROD_DEVTOOLS__: false, + _RUFFLE_VERSION_: JSON.stringify(packageInfo.dependencies['@ruffle-rs/ruffle']) }, build: { diff --git a/packages/misskey-js/src/autogen/types.ts b/packages/misskey-js/src/autogen/types.ts index c821c8eed7..ad30f47f2e 100644 --- a/packages/misskey-js/src/autogen/types.ts +++ b/packages/misskey-js/src/autogen/types.ts @@ -11042,7 +11042,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -11102,7 +11102,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -11173,7 +11173,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -11231,7 +11231,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -11283,7 +11283,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -11351,7 +11351,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -11411,7 +11411,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -11484,7 +11484,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -11672,7 +11672,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -11732,7 +11732,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -11790,7 +11790,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -11853,7 +11853,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -11917,7 +11917,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -11980,7 +11980,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -12164,7 +12164,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -12281,7 +12281,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -12339,7 +12339,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -12403,7 +12403,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -12467,7 +12467,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -12527,7 +12527,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -12604,7 +12604,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -12662,7 +12662,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -12731,7 +12731,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -12789,7 +12789,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -12847,7 +12847,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -12899,7 +12899,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -12969,7 +12969,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -13043,7 +13043,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -13111,7 +13111,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -13188,7 +13188,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -13261,7 +13261,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -13365,7 +13365,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -13452,7 +13452,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -13525,7 +13525,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -13616,7 +13616,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -13692,7 +13692,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -13767,7 +13767,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -13840,7 +13840,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -13915,7 +13915,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -14035,7 +14035,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -14097,7 +14097,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -14155,7 +14155,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -14207,7 +14207,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -14273,7 +14273,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -14333,7 +14333,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -14396,7 +14396,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -14454,7 +14454,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -14512,7 +14512,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -14564,7 +14564,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -14619,7 +14619,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -14693,7 +14693,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -14759,7 +14759,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -14818,7 +14818,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -14952,7 +14952,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -15011,7 +15011,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -15075,7 +15075,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -15136,7 +15136,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -15201,7 +15201,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -15342,7 +15342,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -15462,7 +15462,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -15526,7 +15526,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -15586,7 +15586,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -15649,7 +15649,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -15714,7 +15714,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -15776,7 +15776,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -15844,7 +15844,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -15896,7 +15896,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -16016,7 +16016,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -16085,7 +16085,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -16160,7 +16160,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -16223,7 +16223,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -16281,7 +16281,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -16346,7 +16346,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -16411,7 +16411,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -16772,7 +16772,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -16832,7 +16832,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -16901,7 +16901,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -16970,7 +16970,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -17028,7 +17028,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -17090,7 +17090,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -17142,7 +17142,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -17206,7 +17206,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -17327,7 +17327,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -17385,7 +17385,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -17445,7 +17445,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -17503,7 +17503,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -17622,7 +17622,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -17684,7 +17684,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -17752,7 +17752,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -17815,7 +17815,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -17874,7 +17874,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -17930,7 +17930,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -18003,7 +18003,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -18055,7 +18055,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -18117,7 +18117,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -18241,7 +18241,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -18462,7 +18462,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -18651,7 +18651,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -18726,7 +18726,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -18784,7 +18784,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -19436,7 +19436,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -19504,7 +19504,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -19568,7 +19568,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -20128,7 +20128,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -20192,7 +20192,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -20252,7 +20252,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -20302,7 +20302,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -20360,7 +20360,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -20479,7 +20479,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -20538,7 +20538,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -20603,7 +20603,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -20665,7 +20665,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -20728,7 +20728,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -20789,7 +20789,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -20849,7 +20849,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -20905,7 +20905,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -20966,7 +20966,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -21026,7 +21026,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -21091,7 +21091,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -21151,7 +21151,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -21590,7 +21590,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -21655,7 +21655,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -21728,7 +21728,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -21791,7 +21791,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -21849,7 +21849,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -21966,7 +21966,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -22024,7 +22024,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -22088,7 +22088,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -22142,7 +22142,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -22202,7 +22202,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -22256,7 +22256,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -22315,7 +22315,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -22381,7 +22381,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -22499,7 +22499,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -22563,7 +22563,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -22679,7 +22679,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -22743,7 +22743,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -22805,7 +22805,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -22875,7 +22875,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -22943,7 +22943,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -23003,7 +23003,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -23067,7 +23067,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -23336,7 +23336,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -23400,7 +23400,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -23481,7 +23481,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -23553,7 +23553,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -23625,7 +23625,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -23707,7 +23707,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -23783,7 +23783,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -23850,7 +23850,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -23914,7 +23914,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -23973,7 +23973,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -24031,7 +24031,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -24098,7 +24098,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -24157,7 +24157,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -24274,7 +24274,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -24344,7 +24344,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -24410,7 +24410,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -24488,7 +24488,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -24569,7 +24569,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -24629,7 +24629,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -24692,7 +24692,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -24808,7 +24808,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -24888,7 +24888,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -24956,7 +24956,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -25099,7 +25099,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -25256,7 +25256,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -25365,7 +25365,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -25415,7 +25415,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -25526,7 +25526,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -25663,7 +25663,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -25715,7 +25715,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -25773,7 +25773,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -25835,7 +25835,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -25893,7 +25893,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -26092,7 +26092,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -26144,7 +26144,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -26202,7 +26202,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -26262,7 +26262,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -26320,7 +26320,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -26448,7 +26448,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -26516,7 +26516,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -26570,7 +26570,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -26622,7 +26622,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -26680,7 +26680,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -26732,7 +26732,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -26792,7 +26792,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -26862,7 +26862,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -26930,7 +26930,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -27038,7 +27038,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -27096,7 +27096,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -27161,7 +27161,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -27221,7 +27221,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -27289,7 +27289,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -27354,7 +27354,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -27425,7 +27425,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -27482,7 +27482,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -27556,7 +27556,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -27617,7 +27617,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -27696,7 +27696,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -27762,7 +27762,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -27831,7 +27831,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -27901,7 +27901,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -27967,7 +27967,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -28032,7 +28032,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -28096,7 +28096,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -28155,7 +28155,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -28213,7 +28213,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -28273,7 +28273,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -28333,7 +28333,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -28455,7 +28455,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -28513,7 +28513,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -28571,7 +28571,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -28633,7 +28633,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -28694,7 +28694,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -28755,7 +28755,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -28832,7 +28832,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -28918,7 +28918,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -28984,7 +28984,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -29050,7 +29050,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -29118,7 +29118,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -29180,7 +29180,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -29261,7 +29261,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -29320,7 +29320,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -29384,7 +29384,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -29454,7 +29454,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -29518,7 +29518,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -29581,7 +29581,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -29641,7 +29641,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -29747,7 +29747,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -29870,7 +29870,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -29930,7 +29930,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -30055,7 +30055,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -30113,7 +30113,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -30179,7 +30179,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -30247,7 +30247,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -30299,7 +30299,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -30359,7 +30359,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -30417,7 +30417,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; @@ -30481,7 +30481,7 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ + /** @description Too many requests */ 429: { content: { 'application/json': components['schemas']['Error']; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 76e399d5dc..1c5b624b05 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -736,6 +736,9 @@ importers: '@rollup/pluginutils': specifier: 5.1.2 version: 5.1.2(rollup@4.22.5) + '@ruffle-rs/ruffle': + specifier: 0.1.0-nightly.2024.10.15 + version: 0.1.0-nightly.2024.10.15 '@syuilo/aiscript': specifier: 0.19.0 version: 0.19.0 @@ -1188,7 +1191,7 @@ importers: version: 7.17.0(eslint@9.8.0)(typescript@5.6.2) '@vitest/coverage-v8': specifier: 1.6.0 - version: 1.6.0(vitest@1.6.0(@types/node@20.14.12)(happy-dom@10.0.3)(jsdom@24.1.1)(sass@1.79.3)(terser@5.33.0)) + version: 1.6.0(vitest@1.6.0(@types/node@20.14.12)(happy-dom@10.0.3)(jsdom@24.1.1(bufferutil@4.0.8)(utf-8-validate@6.0.4))(sass@1.79.3)(terser@5.33.0)) '@vue/runtime-core': specifier: 3.5.10 version: 3.5.10 @@ -1420,7 +1423,7 @@ importers: version: 7.47.9(@types/node@20.14.12) '@swc/jest': specifier: 0.2.36 - version: 0.2.36(@swc/core@1.6.13) + version: 0.2.36(@swc/core@1.7.36) '@types/jest': specifier: 29.5.13 version: 29.5.13 @@ -1746,26 +1749,14 @@ packages: resolution: {integrity: sha512-l9XxNcA4HX98rwCC2/KoiWcmEiRfZe4G+mYwDbCFT87JIMj6GBhLDkAzr/W8KAaA2IDr8Vc6J8fZPgVulxxfMA==} engines: {node: '>=16.0.0'} - '@babel/code-frame@7.23.5': - resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} - engines: {node: '>=6.9.0'} - '@babel/code-frame@7.24.7': resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.23.5': - resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} - engines: {node: '>=6.9.0'} - '@babel/compat-data@7.24.7': resolution: {integrity: sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==} engines: {node: '>=6.9.0'} - '@babel/core@7.23.5': - resolution: {integrity: sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g==} - engines: {node: '>=6.9.0'} - '@babel/core@7.24.7': resolution: {integrity: sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==} engines: {node: '>=6.9.0'} @@ -1774,10 +1765,6 @@ packages: resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.22.15': - resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} - engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.24.7': resolution: {integrity: sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==} engines: {node: '>=6.9.0'} @@ -1794,20 +1781,10 @@ packages: resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.22.15': - resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} - engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.24.7': resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.23.3': - resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@babel/helper-module-transforms@7.24.7': resolution: {integrity: sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==} engines: {node: '>=6.9.0'} @@ -1818,8 +1795,8 @@ packages: resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} engines: {node: '>=6.9.0'} - '@babel/helper-simple-access@7.22.5': - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + '@babel/helper-plugin-utils@7.24.7': + resolution: {integrity: sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==} engines: {node: '>=6.9.0'} '@babel/helper-simple-access@7.24.7': @@ -1846,18 +1823,10 @@ packages: resolution: {integrity: sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.23.5': - resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.24.7': resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.23.5': - resolution: {integrity: sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg==} - engines: {node: '>=6.9.0'} - '@babel/helpers@7.24.7': resolution: {integrity: sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==} engines: {node: '>=6.9.0'} @@ -1953,22 +1922,10 @@ packages: resolution: {integrity: sha512-2Yv65nlWnWlSpe3fXEyX5i7fx5kIKo4Qbcj+hMO0odwaneFjfXw5fdum+4yL20O0QiaHpia0cYQ9xpNMqrBwHg==} engines: {node: '>=6.9.0'} - '@babel/template@7.22.15': - resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} - engines: {node: '>=6.9.0'} - - '@babel/template@7.24.0': - resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} - engines: {node: '>=6.9.0'} - '@babel/template@7.24.7': resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.23.5': - resolution: {integrity: sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w==} - engines: {node: '>=6.9.0'} - '@babel/traverse@7.24.7': resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==} engines: {node: '>=6.9.0'} @@ -2895,7 +2852,6 @@ packages: '@humanwhocodes/config-array@0.11.14': resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} @@ -2907,7 +2863,6 @@ packages: '@humanwhocodes/object-schema@2.0.3': resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - deprecated: Use @eslint/object-schema instead '@humanwhocodes/retry@0.3.0': resolution: {integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==} @@ -3143,18 +3098,12 @@ packages: '@jridgewell/source-map@0.3.6': resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} - '@jridgewell/sourcemap-codec@1.4.14': - resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} - '@jridgewell/sourcemap-codec@1.4.15': resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} '@jridgewell/sourcemap-codec@1.5.0': resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - '@jridgewell/trace-mapping@0.3.18': - resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} - '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} @@ -3741,6 +3690,9 @@ packages: '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + '@ruffle-rs/ruffle@0.1.0-nightly.2024.10.15': + resolution: {integrity: sha512-NBR7BIbpOLznwc7XxrCQde1UIWMjsIBsKVkr4zziqMULM+ibOc02VekQuOchHkRTLdTIZ/se2lM4IC7dNBN7vQ==} + '@rushstack/node-core-library@5.9.0': resolution: {integrity: sha512-MMsshEWkTbXqxqFxD4gcIUWQOCeBChlGczdZbHfqmNZQFLHB3yWxDFSMHFUdu2/OB9NUk7Awn5qRL+rws4HQNg==} peerDependencies: @@ -4322,14 +4274,14 @@ packages: cpu: [arm64] os: [darwin] - '@swc/core-darwin-arm64@1.6.13': - resolution: {integrity: sha512-SOF4buAis72K22BGJ3N8y88mLNfxLNprTuJUpzikyMGrvkuBFNcxYtMhmomO0XHsgLDzOJ+hWzcgjRNzjMsUcQ==} + '@swc/core-darwin-arm64@1.6.6': + resolution: {integrity: sha512-5DA8NUGECcbcK1YLKJwNDKqdtTYDVnkfDU1WvQSXq/rU+bjYCLtn5gCe8/yzL7ISXA6rwqPU1RDejhbNt4ARLQ==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-arm64@1.6.6': - resolution: {integrity: sha512-5DA8NUGECcbcK1YLKJwNDKqdtTYDVnkfDU1WvQSXq/rU+bjYCLtn5gCe8/yzL7ISXA6rwqPU1RDejhbNt4ARLQ==} + '@swc/core-darwin-arm64@1.7.36': + resolution: {integrity: sha512-8vDczXzCgv3ceTPhEivlpGprN44YlrCK1nbfU9g2TrhV/Aiqi09W/eM5zLesdoM1Z3mJl492gc/8nlTkpDdusw==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] @@ -4340,14 +4292,14 @@ packages: cpu: [x64] os: [darwin] - '@swc/core-darwin-x64@1.6.13': - resolution: {integrity: sha512-AW8akFSC+tmPE6YQQvK9S2A1B8pjnXEINg+gGgw0KRUUXunvu1/OEOeC5L2Co1wAwhD7bhnaefi06Qi9AiwOag==} + '@swc/core-darwin-x64@1.6.6': + resolution: {integrity: sha512-2nbh/RHpweNRsJiYDFk1KcX7UtaKgzzTNUjwtvK5cp0wWrpbXmPvdlWOx3yzwoiSASDFx78242JHHXCIOlEdsw==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-darwin-x64@1.6.6': - resolution: {integrity: sha512-2nbh/RHpweNRsJiYDFk1KcX7UtaKgzzTNUjwtvK5cp0wWrpbXmPvdlWOx3yzwoiSASDFx78242JHHXCIOlEdsw==} + '@swc/core-darwin-x64@1.7.36': + resolution: {integrity: sha512-Pa2Gao7+Wf5m3SsK4abKRtd48AtoUnJInvaC3d077swBfgZjbjUbQvcpdc2dOeQtWwo49rFqUZJonMsL0jnPgQ==} engines: {node: '>=10'} cpu: [x64] os: [darwin] @@ -4364,14 +4316,14 @@ packages: cpu: [arm] os: [linux] - '@swc/core-linux-arm-gnueabihf@1.6.13': - resolution: {integrity: sha512-f4gxxvDXVUm2HLYXRd311mSrmbpQF2MZ4Ja6XCQz1hWAxXdhRl1gpnZ+LH/xIfGSwQChrtLLVrkxdYUCVuIjFg==} + '@swc/core-linux-arm-gnueabihf@1.6.6': + resolution: {integrity: sha512-YgytuyUfR7b0z0SRHKV+ylr83HmgnROgeT7xryEkth6JGpAEHooCspQ4RrWTU8+WKJ7aXiZlGXPgybQ4TiS+TA==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm-gnueabihf@1.6.6': - resolution: {integrity: sha512-YgytuyUfR7b0z0SRHKV+ylr83HmgnROgeT7xryEkth6JGpAEHooCspQ4RrWTU8+WKJ7aXiZlGXPgybQ4TiS+TA==} + '@swc/core-linux-arm-gnueabihf@1.7.36': + resolution: {integrity: sha512-3YsMWd7V+WZEjbfBnLkkz/olcRBa8nyoK0iIOnNARJBMcYaJxjkJSMZpmSojCnIVwvjA1N83CPAbUL+W+fCnHg==} engines: {node: '>=10'} cpu: [arm] os: [linux] @@ -4382,14 +4334,14 @@ packages: cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-gnu@1.6.13': - resolution: {integrity: sha512-Nf/eoW2CbG8s+9JoLtjl9FByBXyQ5cjdBsA4efO7Zw4p+YSuXDgc8HRPC+E2+ns0praDpKNZtLvDtmF2lL+2Gg==} + '@swc/core-linux-arm64-gnu@1.6.6': + resolution: {integrity: sha512-yGwx9fddzEE0iURqRVwKBQ4IwRHE6hNhl15WliHpi/PcYhzmYkUIpcbRXjr0dssubXAVPVnx6+jZVDSbutvnfg==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-gnu@1.6.6': - resolution: {integrity: sha512-yGwx9fddzEE0iURqRVwKBQ4IwRHE6hNhl15WliHpi/PcYhzmYkUIpcbRXjr0dssubXAVPVnx6+jZVDSbutvnfg==} + '@swc/core-linux-arm64-gnu@1.7.36': + resolution: {integrity: sha512-lqM3aBB7kJazJYOwHeA5OGNLqXoQPZ/76b3dV+XcjN1GhD0CcXz6mW5PRYVin6OSN1eKrKBKJjtDA1mqADDEvw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -4400,14 +4352,14 @@ packages: cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.6.13': - resolution: {integrity: sha512-2OysYSYtdw79prJYuKIiux/Gj0iaGEbpS2QZWCIY4X9sGoETJ5iMg+lY+YCrIxdkkNYd7OhIbXdYFyGs/w5LDg==} + '@swc/core-linux-arm64-musl@1.6.6': + resolution: {integrity: sha512-a6fMbqzSAsS5KCxFJyg1mD5kwN3ZFO8qQLyJ75R/htZP/eCt05jrhmOI7h2n+1HjiG332jLnZ9S8lkVE5O8Nqw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.6.6': - resolution: {integrity: sha512-a6fMbqzSAsS5KCxFJyg1mD5kwN3ZFO8qQLyJ75R/htZP/eCt05jrhmOI7h2n+1HjiG332jLnZ9S8lkVE5O8Nqw==} + '@swc/core-linux-arm64-musl@1.7.36': + resolution: {integrity: sha512-bqei2YDzvUfG0pth5W2xJaj0eG4XWYk0d/NJ75vBX6bkIzK6dC8iuKQ41jOfUWonnrAs7rTDDJW0sTn/evvRdw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -4418,14 +4370,14 @@ packages: cpu: [x64] os: [linux] - '@swc/core-linux-x64-gnu@1.6.13': - resolution: {integrity: sha512-PkR4CZYJNk5hcd2+tMWBpnisnmYsUzazI1O5X7VkIGFcGePTqJ/bWlfUIVVExWxvAI33PQFzLbzmN5scyIUyGQ==} + '@swc/core-linux-x64-gnu@1.6.6': + resolution: {integrity: sha512-hRGsUKNzzZle28YF0dYIpN0bt9PceR9LaVBq7x8+l9TAaDLFbgksSxcnU/ubTtsy+WsYSYGn+A83w3xWC0O8CQ==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-linux-x64-gnu@1.6.6': - resolution: {integrity: sha512-hRGsUKNzzZle28YF0dYIpN0bt9PceR9LaVBq7x8+l9TAaDLFbgksSxcnU/ubTtsy+WsYSYGn+A83w3xWC0O8CQ==} + '@swc/core-linux-x64-gnu@1.7.36': + resolution: {integrity: sha512-03maXTUyaBjeCxlDltmdzHje1ryQt1C4OWmmNgSSRXjLb+GNnAenwOJMSrcvHP/aNClD2pwsFCnYKDGy+sYE6w==} engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -4436,14 +4388,14 @@ packages: cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.6.13': - resolution: {integrity: sha512-OdsY7wryTxCKwGQcwW9jwWg3cxaHBkTTHi91+5nm7hFPpmZMz1HivJrWAMwVE7iXFw+M4l6ugB/wCvpYrUAAjA==} + '@swc/core-linux-x64-musl@1.6.6': + resolution: {integrity: sha512-NokIUtFxJDVv3LzGeEtYMTV3j2dnGKLac59luTeq36DQLZdJQawQIdTbzzWl2jE7lxxTZme+dhsVOH9LxE3ceg==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.6.6': - resolution: {integrity: sha512-NokIUtFxJDVv3LzGeEtYMTV3j2dnGKLac59luTeq36DQLZdJQawQIdTbzzWl2jE7lxxTZme+dhsVOH9LxE3ceg==} + '@swc/core-linux-x64-musl@1.7.36': + resolution: {integrity: sha512-XXysqLkvjtQnXm1zHqLhy00UYPv/gk5OtwR732X+piNisnEbcJBqI8Qp9O7YvLWllRcoP8IMBGDWLGdGLSpViA==} engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -4454,14 +4406,14 @@ packages: cpu: [arm64] os: [win32] - '@swc/core-win32-arm64-msvc@1.6.13': - resolution: {integrity: sha512-ap6uNmYjwk9M/+bFEuWRNl3hq4VqgQ/Lk+ID/F5WGqczNr0L7vEf+pOsRAn0F6EV+o/nyb3ePt8rLhE/wjHpPg==} + '@swc/core-win32-arm64-msvc@1.6.6': + resolution: {integrity: sha512-lzYdI4qb4k1dFG26yv+9Jaq/bUMAhgs/2JsrLncGjLof86+uj74wKYCQnbzKAsq2hDtS5DqnHnl+//J+miZfGA==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-arm64-msvc@1.6.6': - resolution: {integrity: sha512-lzYdI4qb4k1dFG26yv+9Jaq/bUMAhgs/2JsrLncGjLof86+uj74wKYCQnbzKAsq2hDtS5DqnHnl+//J+miZfGA==} + '@swc/core-win32-arm64-msvc@1.7.36': + resolution: {integrity: sha512-k7+dmb13a/zPw+E4XYfPmLZFWJgcOcBRKIjYl9nQErtYsgsg3Ji6TBbsvJVETy23lNHyewZ17V5Vq6NzaG0hzg==} engines: {node: '>=10'} cpu: [arm64] os: [win32] @@ -4472,14 +4424,14 @@ packages: cpu: [ia32] os: [win32] - '@swc/core-win32-ia32-msvc@1.6.13': - resolution: {integrity: sha512-IJ8KH4yIUHTnS/U1jwQmtbfQals7zWPG0a9hbEfIr4zI0yKzjd83lmtS09lm2Q24QBWOCFGEEbuZxR4tIlvfzA==} + '@swc/core-win32-ia32-msvc@1.6.6': + resolution: {integrity: sha512-bvl7FMaXIJQ76WZU0ER4+RyfKIMGb6S2MgRkBhJOOp0i7VFx4WLOnrmMzaeoPJaJSkityVKAftfNh7NBzTIydQ==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-ia32-msvc@1.6.6': - resolution: {integrity: sha512-bvl7FMaXIJQ76WZU0ER4+RyfKIMGb6S2MgRkBhJOOp0i7VFx4WLOnrmMzaeoPJaJSkityVKAftfNh7NBzTIydQ==} + '@swc/core-win32-ia32-msvc@1.7.36': + resolution: {integrity: sha512-ridD3ay6YM2PEYHZXXFN+edYEv0FOynaqOBP+NSnGNHA35azItIjoIe+KNi4WltGtAjpKCHSpjGCNfna12wdYQ==} engines: {node: '>=10'} cpu: [ia32] os: [win32] @@ -4490,20 +4442,20 @@ packages: cpu: [x64] os: [win32] - '@swc/core-win32-x64-msvc@1.6.13': - resolution: {integrity: sha512-f6/sx6LMuEnbuxtiSL/EkR0Y6qUHFw1XVrh6rwzKXptTipUdOY+nXpKoh+1UsBm/r7H0/5DtOdrn3q5ZHbFZjQ==} - engines: {node: '>=10'} - cpu: [x64] - os: [win32] - '@swc/core-win32-x64-msvc@1.6.6': resolution: {integrity: sha512-WAP0JoCTfgeYKgOeYJoJV4ZS0sQUmU3OwvXa2dYYtMLF7zsNqOiW4niU7QlThBHgUv/qNZm2p6ITEgh3w1cltw==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.6.13': - resolution: {integrity: sha512-eailUYex6fkfaQTev4Oa3mwn0/e3mQU4H8y1WPuImYQESOQDtVrowwUGDSc19evpBbHpKtwM+hw8nLlhIsF+Tw==} + '@swc/core-win32-x64-msvc@1.7.36': + resolution: {integrity: sha512-j1z2Z1Ln9d0E3dHsPkC1K9XDh0ojhRPwV+GfRTu4D61PE+aYhYLvbJC6xPvL4/204QrStRS7eDu3m+BcDp3rgQ==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + + '@swc/core@1.6.6': + resolution: {integrity: sha512-sHfmIUPUXNrQTwFMVCY5V5Ena2GTOeaWjS2GFUpjLhAgVfP90OP67DWow7+cYrfFtqBdILHuWnjkTcd0+uPKlg==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '*' @@ -4511,8 +4463,8 @@ packages: '@swc/helpers': optional: true - '@swc/core@1.6.6': - resolution: {integrity: sha512-sHfmIUPUXNrQTwFMVCY5V5Ena2GTOeaWjS2GFUpjLhAgVfP90OP67DWow7+cYrfFtqBdILHuWnjkTcd0+uPKlg==} + '@swc/core@1.7.36': + resolution: {integrity: sha512-bu7ymMX+LCJOSSrKank25Jaq66ymLVA9fOUuy4ck3/6rbXdLw+pIJPnIDKQ9uNcxww8KDxOuJk9Ui9pqR+aGFw==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '*' @@ -4529,6 +4481,9 @@ packages: peerDependencies: '@swc/core': '*' + '@swc/types@0.1.13': + resolution: {integrity: sha512-JL7eeCk6zWCbiYQg2xQSdLXQJl8Qoc9rXmG2cEKvHe3CKwMHwHGpfOb8frzNLmbycOo6I51qxnLnn9ESf4I20Q==} + '@swc/types@0.1.9': resolution: {integrity: sha512-qKnCno++jzcJ4lM4NTfYifm1EFSCeIfKiAHAfkENZAV5Kl9PjJIyd2yeeVv6c/2CckuLyv2NmRC5pv6pm2WQBg==} @@ -4692,7 +4647,6 @@ packages: '@types/form-data@2.5.0': resolution: {integrity: sha512-23/wYiuckYYtFpL+4RPWiWmRQH2BjFuqCUi2+N3amB1a1Drv+i/byTrGvlLwRVLFNAZbwpbQ7JvTK+VCAPMbcg==} - deprecated: This is a stub types definition. form-data provides its own type definitions, so you do not need this installed. '@types/glob@7.2.0': resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} @@ -5715,11 +5669,6 @@ packages: browser-assert@1.2.1: resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==} - browserslist@4.22.2: - resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - browserslist@4.23.0: resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -5837,9 +5786,6 @@ packages: caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} - caniuse-lite@1.0.30001566: - resolution: {integrity: sha512-ggIhCsTxmITBAMmK8yZjEhCO5/47jKXPu6Dha/wuCS4JePVL+3uiDEBuhu2aIoT+bqTOR8L76Ip1ARL9xYsEJA==} - caniuse-lite@1.0.30001591: resolution: {integrity: sha512-PCzRMei/vXjJyL5mJtzNiUCKP59dm8Apqc3PH8gJkMnMXZGox93RbE76jHsmLwmIo6/3nsYIpJtx0O7u5PqFuQ==} @@ -6557,9 +6503,6 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - electron-to-chromium@1.4.601: - resolution: {integrity: sha512-SpwUMDWe9tQu8JX5QCO1+p/hChAi9AE9UpoC3rcHVc+gdCGlbT3SGb5I1klgb952HRIyvt9wZhSz9bNBYz9swA==} - electron-to-chromium@1.4.686: resolution: {integrity: sha512-3avY1B+vUzNxEgkBDpKOP8WarvUAEwpRaiCL0He5OKWEFxzaOFiq4WoZEZe7qh0ReS7DiWoHMnYoQCKxNZNzSg==} @@ -6802,7 +6745,6 @@ packages: eslint@8.57.0: resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true eslint@9.8.0: @@ -7308,12 +7250,10 @@ packages: glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported glob@8.1.0: resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} engines: {node: '>=12'} - deprecated: Glob versions prior to v9 are no longer supported global-dirs@3.0.1: resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} @@ -7619,7 +7559,6 @@ packages: inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -10082,7 +10021,6 @@ packages: rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true rollup@4.22.5: @@ -12207,40 +12145,13 @@ snapshots: '@smithy/types': 3.3.0 tslib: 2.6.3 - '@babel/code-frame@7.23.5': - dependencies: - '@babel/highlight': 7.24.7 - chalk: 2.4.2 - '@babel/code-frame@7.24.7': dependencies: '@babel/highlight': 7.24.7 picocolors: 1.0.1 - '@babel/compat-data@7.23.5': {} - '@babel/compat-data@7.24.7': {} - '@babel/core@7.23.5': - dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.24.7 - '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) - '@babel/helpers': 7.23.5 - '@babel/parser': 7.24.7 - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.5 - '@babel/types': 7.24.7 - convert-source-map: 2.0.0 - debug: 4.3.5(supports-color@8.1.1) - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - '@babel/core@7.24.7': dependencies: '@ampproject/remapping': 2.2.1 @@ -12268,14 +12179,6 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 - '@babel/helper-compilation-targets@7.22.15': - dependencies: - '@babel/compat-data': 7.23.5 - '@babel/helper-validator-option': 7.23.5 - browserslist: 4.22.2 - lru-cache: 5.1.1 - semver: 6.3.1 - '@babel/helper-compilation-targets@7.24.7': dependencies: '@babel/compat-data': 7.24.7 @@ -12297,10 +12200,6 @@ snapshots: dependencies: '@babel/types': 7.24.7 - '@babel/helper-module-imports@7.22.15': - dependencies: - '@babel/types': 7.24.7 - '@babel/helper-module-imports@7.24.7': dependencies: '@babel/traverse': 7.24.7 @@ -12308,15 +12207,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.23.3(@babel/core@7.23.5)': - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - '@babel/helper-module-transforms@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 @@ -12330,9 +12220,7 @@ snapshots: '@babel/helper-plugin-utils@7.22.5': {} - '@babel/helper-simple-access@7.22.5': - dependencies: - '@babel/types': 7.24.7 + '@babel/helper-plugin-utils@7.24.7': {} '@babel/helper-simple-access@7.24.7': dependencies: @@ -12353,18 +12241,8 @@ snapshots: '@babel/helper-validator-identifier@7.25.7': {} - '@babel/helper-validator-option@7.23.5': {} - '@babel/helper-validator-option@7.24.7': {} - '@babel/helpers@7.23.5': - dependencies: - '@babel/template': 7.22.15 - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - transitivePeerDependencies: - - supports-color - '@babel/helpers@7.24.7': dependencies: '@babel/template': 7.24.7 @@ -12385,185 +12263,86 @@ snapshots: dependencies: '@babel/types': 7.25.7 - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.5)': - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.22.5 - optional: true - - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.5)': - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.22.5 - optional: true - - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.5)': - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.22.5 - optional: true - - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.5)': - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.22.5 - optional: true - - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.5)': - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.22.5 - optional: true - '@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.5)': + '@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.24.7)': dependencies: - '@babel/core': 7.23.5 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.5)': - dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.22.5 - optional: true - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.5)': - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.22.5 - optional: true - - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.5)': - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.22.5 - optional: true - - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.5)': - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.22.5 - optional: true - - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.5)': - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.22.5 - optional: true - - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.5)': - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.22.5 - optional: true - - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.5)': - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.22.5 - optional: true - '@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.5)': + '@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.24.7)': dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.22.5 '@babel/runtime@7.23.4': dependencies: regenerator-runtime: 0.14.0 - '@babel/template@7.22.15': - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - - '@babel/template@7.24.0': - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - '@babel/template@7.24.7': dependencies: '@babel/code-frame': 7.24.7 '@babel/parser': 7.24.7 '@babel/types': 7.24.7 - '@babel/traverse@7.23.5': - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - debug: 4.3.5(supports-color@8.1.1) - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - '@babel/traverse@7.24.7': dependencies: '@babel/code-frame': 7.24.7 @@ -13518,7 +13297,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.25 '@types/node': 20.14.12 chalk: 4.1.2 collect-v8-coverage: 1.0.1 @@ -13568,7 +13347,7 @@ snapshots: dependencies: '@babel/core': 7.24.7 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.25 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 @@ -13618,17 +13397,10 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - '@jridgewell/sourcemap-codec@1.4.14': {} - '@jridgewell/sourcemap-codec@1.4.15': {} '@jridgewell/sourcemap-codec@1.5.0': {} - '@jridgewell/trace-mapping@0.3.18': - dependencies: - '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.14 - '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.0 @@ -14271,6 +14043,8 @@ snapshots: '@rtsao/scc@1.1.0': {} + '@ruffle-rs/ruffle@0.1.0-nightly.2024.10.15': {} + '@rushstack/node-core-library@5.9.0(@types/node@20.14.12)': dependencies: ajv: 8.13.0 @@ -15156,19 +14930,19 @@ snapshots: '@swc/core-darwin-arm64@1.3.56': optional: true - '@swc/core-darwin-arm64@1.6.13': + '@swc/core-darwin-arm64@1.6.6': optional: true - '@swc/core-darwin-arm64@1.6.6': + '@swc/core-darwin-arm64@1.7.36': optional: true '@swc/core-darwin-x64@1.3.56': optional: true - '@swc/core-darwin-x64@1.6.13': + '@swc/core-darwin-x64@1.6.6': optional: true - '@swc/core-darwin-x64@1.6.6': + '@swc/core-darwin-x64@1.7.36': optional: true '@swc/core-freebsd-x64@1.3.11': @@ -15179,90 +14953,74 @@ snapshots: '@swc/core-linux-arm-gnueabihf@1.3.56': optional: true - '@swc/core-linux-arm-gnueabihf@1.6.13': + '@swc/core-linux-arm-gnueabihf@1.6.6': optional: true - '@swc/core-linux-arm-gnueabihf@1.6.6': + '@swc/core-linux-arm-gnueabihf@1.7.36': optional: true '@swc/core-linux-arm64-gnu@1.3.56': optional: true - '@swc/core-linux-arm64-gnu@1.6.13': + '@swc/core-linux-arm64-gnu@1.6.6': optional: true - '@swc/core-linux-arm64-gnu@1.6.6': + '@swc/core-linux-arm64-gnu@1.7.36': optional: true '@swc/core-linux-arm64-musl@1.3.56': optional: true - '@swc/core-linux-arm64-musl@1.6.13': + '@swc/core-linux-arm64-musl@1.6.6': optional: true - '@swc/core-linux-arm64-musl@1.6.6': + '@swc/core-linux-arm64-musl@1.7.36': optional: true '@swc/core-linux-x64-gnu@1.3.56': optional: true - '@swc/core-linux-x64-gnu@1.6.13': + '@swc/core-linux-x64-gnu@1.6.6': optional: true - '@swc/core-linux-x64-gnu@1.6.6': + '@swc/core-linux-x64-gnu@1.7.36': optional: true '@swc/core-linux-x64-musl@1.3.56': optional: true - '@swc/core-linux-x64-musl@1.6.13': + '@swc/core-linux-x64-musl@1.6.6': optional: true - '@swc/core-linux-x64-musl@1.6.6': + '@swc/core-linux-x64-musl@1.7.36': optional: true '@swc/core-win32-arm64-msvc@1.3.56': optional: true - '@swc/core-win32-arm64-msvc@1.6.13': + '@swc/core-win32-arm64-msvc@1.6.6': optional: true - '@swc/core-win32-arm64-msvc@1.6.6': + '@swc/core-win32-arm64-msvc@1.7.36': optional: true '@swc/core-win32-ia32-msvc@1.3.56': optional: true - '@swc/core-win32-ia32-msvc@1.6.13': + '@swc/core-win32-ia32-msvc@1.6.6': optional: true - '@swc/core-win32-ia32-msvc@1.6.6': + '@swc/core-win32-ia32-msvc@1.7.36': optional: true '@swc/core-win32-x64-msvc@1.3.56': optional: true - '@swc/core-win32-x64-msvc@1.6.13': - optional: true - '@swc/core-win32-x64-msvc@1.6.6': optional: true - '@swc/core@1.6.13': - dependencies: - '@swc/counter': 0.1.3 - '@swc/types': 0.1.9 - optionalDependencies: - '@swc/core-darwin-arm64': 1.6.13 - '@swc/core-darwin-x64': 1.6.13 - '@swc/core-linux-arm-gnueabihf': 1.6.13 - '@swc/core-linux-arm64-gnu': 1.6.13 - '@swc/core-linux-arm64-musl': 1.6.13 - '@swc/core-linux-x64-gnu': 1.6.13 - '@swc/core-linux-x64-musl': 1.6.13 - '@swc/core-win32-arm64-msvc': 1.6.13 - '@swc/core-win32-ia32-msvc': 1.6.13 - '@swc/core-win32-x64-msvc': 1.6.13 + '@swc/core-win32-x64-msvc@1.7.36': + optional: true '@swc/core@1.6.6': dependencies: @@ -15280,14 +15038,23 @@ snapshots: '@swc/core-win32-ia32-msvc': 1.6.6 '@swc/core-win32-x64-msvc': 1.6.6 - '@swc/counter@0.1.3': {} - - '@swc/jest@0.2.36(@swc/core@1.6.13)': + '@swc/core@1.7.36': dependencies: - '@jest/create-cache-key-function': 29.7.0 - '@swc/core': 1.6.13 '@swc/counter': 0.1.3 - jsonc-parser: 3.2.0 + '@swc/types': 0.1.13 + optionalDependencies: + '@swc/core-darwin-arm64': 1.7.36 + '@swc/core-darwin-x64': 1.7.36 + '@swc/core-linux-arm-gnueabihf': 1.7.36 + '@swc/core-linux-arm64-gnu': 1.7.36 + '@swc/core-linux-arm64-musl': 1.7.36 + '@swc/core-linux-x64-gnu': 1.7.36 + '@swc/core-linux-x64-musl': 1.7.36 + '@swc/core-win32-arm64-msvc': 1.7.36 + '@swc/core-win32-ia32-msvc': 1.7.36 + '@swc/core-win32-x64-msvc': 1.7.36 + + '@swc/counter@0.1.3': {} '@swc/jest@0.2.36(@swc/core@1.6.6)': dependencies: @@ -15296,6 +15063,17 @@ snapshots: '@swc/counter': 0.1.3 jsonc-parser: 3.2.0 + '@swc/jest@0.2.36(@swc/core@1.7.36)': + dependencies: + '@jest/create-cache-key-function': 29.7.0 + '@swc/core': 1.7.36 + '@swc/counter': 0.1.3 + jsonc-parser: 3.2.0 + + '@swc/types@0.1.13': + dependencies: + '@swc/counter': 0.1.3 + '@swc/types@0.1.9': dependencies: '@swc/counter': 0.1.3 @@ -16124,25 +15902,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@1.6.0(vitest@1.6.0(@types/node@20.14.12)(happy-dom@10.0.3)(jsdom@24.1.1)(sass@1.79.3)(terser@5.33.0))': - dependencies: - '@ampproject/remapping': 2.2.1 - '@bcoe/v8-coverage': 0.2.3 - debug: 4.3.5(supports-color@8.1.1) - istanbul-lib-coverage: 3.2.2 - istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 5.0.4 - istanbul-reports: 3.1.6 - magic-string: 0.30.10 - magicast: 0.3.4 - picocolors: 1.0.1 - std-env: 3.7.0 - strip-literal: 2.1.0 - test-exclude: 6.0.0 - vitest: 1.6.0(@types/node@20.14.12)(happy-dom@10.0.3)(jsdom@24.1.1)(sass@1.79.3)(terser@5.33.0) - transitivePeerDependencies: - - supports-color - '@vitest/expect@1.6.0': dependencies: '@vitest/spy': 1.6.0 @@ -16725,19 +16484,6 @@ snapshots: b4a@1.6.4: {} - babel-jest@29.7.0(@babel/core@7.23.5): - dependencies: - '@babel/core': 7.23.5 - '@jest/transform': 29.7.0 - '@types/babel__core': 7.20.0 - babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.23.5) - chalk: 4.1.2 - graceful-fs: 4.2.11 - slash: 3.0.0 - transitivePeerDependencies: - - supports-color - babel-jest@29.7.0(@babel/core@7.24.7): dependencies: '@babel/core': 7.24.7 @@ -16750,11 +16496,10 @@ snapshots: slash: 3.0.0 transitivePeerDependencies: - supports-color - optional: true babel-plugin-istanbul@6.1.1: dependencies: - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.7 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 5.2.1 @@ -16764,27 +16509,11 @@ snapshots: babel-plugin-jest-hoist@29.6.3: dependencies: - '@babel/template': 7.24.0 + '@babel/template': 7.24.7 '@babel/types': 7.24.7 '@types/babel__core': 7.20.0 '@types/babel__traverse': 7.20.0 - babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.5): - dependencies: - '@babel/core': 7.23.5 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.5) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.5) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.5) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.5) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.5) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.5) - babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.7): dependencies: '@babel/core': 7.24.7 @@ -16800,20 +16529,12 @@ snapshots: '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.7) '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7) '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.7) - optional: true - - babel-preset-jest@29.6.3(@babel/core@7.23.5): - dependencies: - '@babel/core': 7.23.5 - babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.5) babel-preset-jest@29.6.3(@babel/core@7.24.7): dependencies: '@babel/core': 7.24.7 babel-plugin-jest-hoist: 29.6.3 babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.7) - optional: true babel-walk@3.0.0-canary-5: dependencies: @@ -16926,13 +16647,6 @@ snapshots: browser-assert@1.2.1: {} - browserslist@4.22.2: - dependencies: - caniuse-lite: 1.0.30001566 - electron-to-chromium: 1.4.601 - node-releases: 2.0.14 - update-browserslist-db: 1.0.13(browserslist@4.22.2) - browserslist@4.23.0: dependencies: caniuse-lite: 1.0.30001591 @@ -17091,8 +16805,6 @@ snapshots: lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 - caniuse-lite@1.0.30001566: {} - caniuse-lite@1.0.30001591: {} canonicalize@1.0.8: {} @@ -17936,8 +17648,6 @@ snapshots: dependencies: jake: 10.8.5 - electron-to-chromium@1.4.601: {} - electron-to-chromium@1.4.686: {} emittery@0.13.1: {} @@ -19877,10 +19587,10 @@ snapshots: jest-config@29.7.0(@types/node@20.14.12): dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.24.7 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.23.5) + babel-jest: 29.7.0(@babel/core@7.24.7) chalk: 4.1.2 ci-info: 3.7.1 deepmerge: 4.2.2 @@ -19972,7 +19682,7 @@ snapshots: jest-message-util@29.7.0: dependencies: - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.24.7 '@jest/types': 29.6.3 '@types/stack-utils': 2.0.1 chalk: 4.1.2 @@ -20068,15 +19778,15 @@ snapshots: jest-snapshot@29.7.0: dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.24.7 '@babel/generator': 7.24.7 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.24.7) + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.24.7) '@babel/types': 7.24.7 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.5) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.7) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -20087,7 +19797,7 @@ snapshots: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.5.4 + semver: 7.6.0 transitivePeerDependencies: - supports-color @@ -20192,35 +19902,6 @@ snapshots: jsdoc-type-pratt-parser@4.1.0: {} - jsdom@24.1.1: - dependencies: - cssstyle: 4.0.1 - data-urls: 5.0.0 - decimal.js: 10.4.3 - form-data: 4.0.0 - html-encoding-sniffer: 4.0.0 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.5 - is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.12 - parse5: 7.1.2 - rrweb-cssom: 0.7.1 - saxes: 6.0.0 - symbol-tree: 3.2.4 - tough-cookie: 4.1.4 - w3c-xmlserializer: 5.0.0 - webidl-conversions: 7.0.0 - whatwg-encoding: 3.1.1 - whatwg-mimetype: 4.0.0 - whatwg-url: 14.0.0 - ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) - xml-name-validator: 5.0.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - optional: true - jsdom@24.1.1(bufferutil@4.0.7)(utf-8-validate@6.0.3): dependencies: cssstyle: 4.0.1 @@ -23600,12 +23281,6 @@ snapshots: untildify@4.0.0: optional: true - update-browserslist-db@1.0.13(browserslist@4.22.2): - dependencies: - browserslist: 4.22.2 - escalade: 3.1.1 - picocolors: 1.0.0 - update-browserslist-db@1.0.13(browserslist@4.23.0): dependencies: browserslist: 4.23.0 @@ -23764,42 +23439,6 @@ snapshots: - supports-color - terser - vitest@1.6.0(@types/node@20.14.12)(happy-dom@10.0.3)(jsdom@24.1.1)(sass@1.79.3)(terser@5.33.0): - dependencies: - '@vitest/expect': 1.6.0 - '@vitest/runner': 1.6.0 - '@vitest/snapshot': 1.6.0 - '@vitest/spy': 1.6.0 - '@vitest/utils': 1.6.0 - acorn-walk: 8.3.2 - chai: 4.3.10 - debug: 4.3.4(supports-color@5.5.0) - execa: 8.0.1 - local-pkg: 0.5.0 - magic-string: 0.30.10 - pathe: 1.1.2 - picocolors: 1.0.0 - std-env: 3.7.0 - strip-literal: 2.1.0 - tinybench: 2.6.0 - tinypool: 0.8.4 - vite: 5.4.8(@types/node@20.14.12)(sass@1.79.3)(terser@5.33.0) - vite-node: 1.6.0(@types/node@20.14.12)(sass@1.79.3)(terser@5.33.0) - why-is-node-running: 2.2.2 - optionalDependencies: - '@types/node': 20.14.12 - happy-dom: 10.0.3 - jsdom: 24.1.1 - transitivePeerDependencies: - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - void-elements@3.1.0: {} vscode-jsonrpc@8.2.0: {} diff --git a/sharkey-locales/en-US.yml b/sharkey-locales/en-US.yml index 1f9b6ef4f5..5813656bf1 100644 --- a/sharkey-locales/en-US.yml +++ b/sharkey-locales/en-US.yml @@ -156,6 +156,16 @@ allowClickingNotifications: "Allow clicking on pop-up notifications" pinnedOnly: "Pinned" blockingYou: "Blocking you" warnExternalUrl: "Show warning when opening external URLs" +flash: "Flash" +_flash: + contentHidden: "Flash Content Hidden" + poweredByRuffle: "Powered by Ruffle." + arbitraryCodeExecutionWarning: "Always be wary of arbitrary code execution!" + failedToLoad: "Flash Content Failed To Load:" + isLoading: "Flash Content Is Loading" + loadingRufflePlayer: "Loading Ruffle player" + loadingFlashFile: "Loading Flash file" + cspError: "raw.esm.sh could not be accessed, meaning this instance's Content Security Policy is likely out of date. Please contact your instance administrators." _delivery: stop: "Suspend delivery" resume: "Resume delivery" diff --git a/sharkey-locales/ja-JP.yml b/sharkey-locales/ja-JP.yml index 0977a2e564..22bd5235ca 100644 --- a/sharkey-locales/ja-JP.yml +++ b/sharkey-locales/ja-JP.yml @@ -142,6 +142,15 @@ sensitiveMediaRevealConfirm: "センシティブなメディアです。表示 severAllFollowRelations: "以下の関係をすべて断ち切る" severAllFollowRelationsConfirm: "すべての人間関係を壊す?これは不可逆です!これは{instanceName}の{followingCount}フォローと{followersCount}フォロワーの関係を壊す!" severAllFollowRelationsQueued: "キューに入れられた{host}とのすべてのフォロー関係を切断する。" +_flash: + contentHidden: "Flashコンテンツ非表示" + poweredByRuffle: "Powered by Ruffle." # Doesn't need a translation, apparently. + arbitraryCodeExecutionWarning: "任意コード実行にご注意!" + failedToLoad: "Flashコンテンツ読込に失敗" + isLoading: "Flashコンテンツ読込中" + loadingRufflePlayer: "Ruffleプレイヤー読込中" + loadingFlashFile: "Flashファイル読込中" + cspError: "raw.esm.shにアクセスできませんでした。このサーバーのコンテンツセキュリティポリシー(CSP) が廃止されている可能性があり、サーバー管理者に連絡してください。" _delivery: stop: "配信停止" resume: "配信再開"