diff --git a/.vscode/dictionaries/non-english.txt b/.vscode/dictionaries/non-english.txt index b5b7b57a8d1eec0..34fc0df176ff51e 100644 --- a/.vscode/dictionaries/non-english.txt +++ b/.vscode/dictionaries/non-english.txt @@ -18,9 +18,11 @@ dezembro Donnerstag démonstration erkennst +español Esta Februar fers +français française Früh gangnam diff --git a/.vscode/dictionaries/terms-abbreviations.txt b/.vscode/dictionaries/terms-abbreviations.txt index defc2b74bdd8224..c1b55082d726f0f 100644 --- a/.vscode/dictionaries/terms-abbreviations.txt +++ b/.vscode/dictionaries/terms-abbreviations.txt @@ -284,6 +284,7 @@ iconset idents IERS IMSC +inferencing infobar infobox infoboxes diff --git a/files/en-us/_redirects.txt b/files/en-us/_redirects.txt index c7deb5b7a80f5a3..fefdc6826389914 100644 --- a/files/en-us/_redirects.txt +++ b/files/en-us/_redirects.txt @@ -1110,7 +1110,7 @@ /en-US/docs/Common_CSS_Questions /en-US/docs/Learn/CSS/Howto/CSS_FAQ /en-US/docs/Common_XSLT_Errors /en-US/docs/Web/XSLT/Common_errors /en-US/docs/Configuring_Build_Options https://firefox-source-docs.mozilla.org/setup/configuring_build_options.html -/en-US/docs/Configuring_servers_for_Ogg_media /en-US/docs/Web/HTTP/Configuring_servers_for_Ogg_media +/en-US/docs/Configuring_servers_for_Ogg_media /en-US/docs/Web/Media/Formats/Configuring_servers_for_Ogg_media /en-US/docs/Consistent_List_Indentation /en-US/docs/Web/CSS/CSS_lists/Consistent_list_indentation /en-US/docs/Const_statement /en-US/docs/Web/JavaScript/Reference/Statements/const /en-US/docs/Content_negotiation /en-US/docs/Web/HTTP/Content_negotiation @@ -9479,13 +9479,18 @@ /en-US/docs/Web/API/RTCIceTransport/onselectedcandidatepairchange /en-US/docs/Web/API/RTCIceTransport/selectedcandidatepairchange_event /en-US/docs/Web/API/RTCIceTransport/onstatechange /en-US/docs/Web/API/RTCIceTransport/statechange_event /en-US/docs/Web/API/RTCIceTransportState /en-US/docs/Web/API/RTCIceTransport/state +/en-US/docs/Web/API/RTCInboundRtpStreamStats/firCount /en-US/docs/Web/API/RTCInboundRtpStreamStats /en-US/docs/Web/API/RTCInboundRtpStreamStats/lastPacketReceivedTimesta /en-US/docs/Web/API/RTCInboundRtpStreamStats/lastPacketReceivedTimestamp +/en-US/docs/Web/API/RTCInboundRtpStreamStats/pliCount /en-US/docs/Web/API/RTCInboundRtpStreamStats +/en-US/docs/Web/API/RTCInboundRtpStreamStats/trackId /en-US/docs/Web/API/RTCInboundRtpStreamStats /en-US/docs/Web/API/RTCOfferAnswerOptions /en-US/docs/Web/API/RTCPeerConnection/createAnswer /en-US/docs/Web/API/RTCOfferAnswerOptions/voiceActivityDetection /en-US/docs/Web/API/RTCPeerConnection/createAnswer /en-US/docs/Web/API/RTCOfferOptions /en-US/docs/Web/API/RTCPeerConnection/createOffer /en-US/docs/Web/API/RTCOfferOptions/iceRestart /en-US/docs/Web/API/RTCPeerConnection/createOffer +/en-US/docs/Web/API/RTCOutboundRtpStreamStats/firCount /en-US/docs/Web/API/RTCOutboundRtpStreamStats /en-US/docs/Web/API/RTCOutboundRtpStreamStats/lastPacketSentTimestamp /en-US/docs/Web/API/RTCOutboundRtpStreamStats /en-US/docs/Web/API/RTCOutboundRtpStreamStats/perDscpPacketsReceived /en-US/docs/Web/API/RTCOutboundRtpStreamStats/perDscpPacketsSent +/en-US/docs/Web/API/RTCOutboundRtpStreamStats/pliCount /en-US/docs/Web/API/RTCOutboundRtpStreamStats /en-US/docs/Web/API/RTCPeerConnection.addStream /en-US/docs/Web/API/RTCPeerConnection/addStream /en-US/docs/Web/API/RTCPeerConnection.close /en-US/docs/Web/API/RTCPeerConnection/close /en-US/docs/Web/API/RTCPeerConnection.getIdentityAssertion /en-US/docs/Web/API/RTCPeerConnection/getIdentityAssertion @@ -9552,6 +9557,13 @@ /en-US/docs/Web/API/RTCRtpSendParameters/encodings /en-US/docs/Web/API/RTCRtpSender/setParameters /en-US/docs/Web/API/RTCRtpSender/getCapabilities /en-US/docs/Web/API/RTCRtpSender/getCapabilities_static /en-US/docs/Web/API/RTCRtpSender/getCapabilities() /en-US/docs/Web/API/RTCRtpSender/getCapabilities_static +/en-US/docs/Web/API/RTCRtpStreamStats/codecId /en-US/docs/Web/API/RTCInboundRtpStreamStats +/en-US/docs/Web/API/RTCRtpStreamStats/firCount /en-US/docs/Web/API/RTCInboundRtpStreamStats +/en-US/docs/Web/API/RTCRtpStreamStats/kind /en-US/docs/Web/API/RTCInboundRtpStreamStats +/en-US/docs/Web/API/RTCRtpStreamStats/nackCount /en-US/docs/Web/API/RTCInboundRtpStreamStats/nackCount +/en-US/docs/Web/API/RTCRtpStreamStats/pliCount /en-US/docs/Web/API/RTCOutboundRtpStreamStats +/en-US/docs/Web/API/RTCRtpStreamStats/ssrc /en-US/docs/Web/API/RTCInboundRtpStreamStats +/en-US/docs/Web/API/RTCRtpStreamStats/transportId /en-US/docs/Web/API/RTCInboundRtpStreamStats /en-US/docs/Web/API/RTCRtpSynchronizationSource /en-US/docs/Web/API/RTCRtpReceiver/getSynchronizationSources /en-US/docs/Web/API/RTCRtpSynchronizationSource/voiceActivityFlag /en-US/docs/Web/API/RTCRtpReceiver/getSynchronizationSources /en-US/docs/Web/API/RTCRtpTransceiverDirection /en-US/docs/Web/API/RTCRtpTransceiver/direction @@ -12281,6 +12293,7 @@ /en-US/docs/Web/HTTP/Basics_of_HTTP/Resource_URLs /en-US/docs/Web/URI/Schemes/resource /en-US/docs/Web/HTTP/CORS/Errors/Reason:_CORS_header_‘Origin’_cannot_be_added /en-US/docs/Web/HTTP/CORS/Errors/CORSOriginHeaderNotAdded /en-US/docs/Web/HTTP/Caching_FAQ /en-US/docs/Web/HTTP/Caching +/en-US/docs/Web/HTTP/Configuring_servers_for_Ogg_media /en-US/docs/Web/Media/Formats/Configuring_servers_for_Ogg_media /en-US/docs/Web/HTTP/Controlling_DNS_prefetching /en-US/docs/Web/HTTP/Headers/X-DNS-Prefetch-Control /en-US/docs/Web/HTTP/Cookies/Cookie_Prefixes /en-US/docs/Web/HTTP/Cookies#Cookie_prefixes /en-US/docs/Web/HTTP/Cross-Origin_Resource_Policy_(CORP) /en-US/docs/Web/HTTP/Cross-Origin_Resource_Policy diff --git a/files/en-us/_wikihistory.json b/files/en-us/_wikihistory.json index 0688969f6e05346..42098774ba19b8e 100644 --- a/files/en-us/_wikihistory.json +++ b/files/en-us/_wikihistory.json @@ -54157,10 +54157,6 @@ "modified": "2020-10-15T22:17:12.448Z", "contributors": ["Sheppy"] }, - "Web/API/RTCInboundRtpStreamStats/firCount": { - "modified": "2020-10-15T22:17:11.433Z", - "contributors": ["Sheppy"] - }, "Web/API/RTCInboundRtpStreamStats/framesDecoded": { "modified": "2020-10-15T22:17:13.510Z", "contributors": ["Sheppy"] @@ -54185,10 +54181,6 @@ "modified": "2020-10-15T22:17:13.721Z", "contributors": ["Sheppy"] }, - "Web/API/RTCInboundRtpStreamStats/pliCount": { - "modified": "2020-10-15T22:17:12.837Z", - "contributors": ["Sheppy"] - }, "Web/API/RTCInboundRtpStreamStats/qpSum": { "modified": "2020-10-15T22:17:11.627Z", "contributors": ["Sheppy"] @@ -54205,10 +54197,6 @@ "modified": "2020-10-15T22:17:11.541Z", "contributors": ["Sheppy"] }, - "Web/API/RTCInboundRtpStreamStats/trackId": { - "modified": "2020-10-15T22:17:14.607Z", - "contributors": ["Sheppy"] - }, "Web/API/RTCOutboundRtpStreamStats": { "modified": "2020-10-15T22:17:14.806Z", "contributors": ["Sheppy"] @@ -54217,10 +54205,6 @@ "modified": "2020-10-15T22:17:15.805Z", "contributors": ["Sheppy"] }, - "Web/API/RTCOutboundRtpStreamStats/firCount": { - "modified": "2020-10-15T22:17:15.817Z", - "contributors": ["Sheppy"] - }, "Web/API/RTCOutboundRtpStreamStats/framesEncoded": { "modified": "2020-10-15T22:17:15.823Z", "contributors": ["Sheppy"] @@ -54233,10 +54217,6 @@ "modified": "2020-10-15T22:17:15.897Z", "contributors": ["Sheppy"] }, - "Web/API/RTCOutboundRtpStreamStats/pliCount": { - "modified": "2020-10-15T22:17:15.902Z", - "contributors": ["Sheppy"] - }, "Web/API/RTCOutboundRtpStreamStats/qpSum": { "modified": "2020-10-15T22:17:16.058Z", "contributors": ["Sheppy"] @@ -54819,46 +54799,6 @@ "modified": "2020-10-15T22:33:11.726Z", "contributors": ["Sheppy"] }, - "Web/API/RTCRtpStreamStats": { - "modified": "2020-10-15T22:08:41.982Z", - "contributors": ["Sheppy"] - }, - "Web/API/RTCRtpStreamStats/codecId": { - "modified": "2020-10-15T22:08:51.438Z", - "contributors": ["Sheppy"] - }, - "Web/API/RTCRtpStreamStats/firCount": { - "modified": "2020-10-15T22:08:58.560Z", - "contributors": ["sideshowbarker", "Sheppy"] - }, - "Web/API/RTCRtpStreamStats/kind": { - "modified": "2020-10-15T22:08:45.154Z", - "contributors": ["Sheppy"] - }, - "Web/API/RTCRtpStreamStats/nackCount": { - "modified": "2020-10-15T22:08:57.931Z", - "contributors": ["sideshowbarker", "Sheppy"] - }, - "Web/API/RTCRtpStreamStats/pliCount": { - "modified": "2020-10-15T22:08:57.878Z", - "contributors": ["sideshowbarker", "Sheppy"] - }, - "Web/API/RTCRtpStreamStats/qpSum": { - "modified": "2020-10-15T22:09:08.932Z", - "contributors": ["sideshowbarker", "Sheppy"] - }, - "Web/API/RTCRtpStreamStats/ssrc": { - "modified": "2020-10-15T22:08:52.056Z", - "contributors": ["Sheppy"] - }, - "Web/API/RTCRtpStreamStats/trackId": { - "modified": "2020-10-15T22:08:53.310Z", - "contributors": ["Sheppy"] - }, - "Web/API/RTCRtpStreamStats/transportId": { - "modified": "2020-10-15T22:08:53.444Z", - "contributors": ["Sheppy"] - }, "Web/API/RTCRtpTransceiver": { "modified": "2020-10-15T22:01:30.406Z", "contributors": ["Sheppy", "bwc", "fscholz"] @@ -98759,24 +98699,6 @@ "teoli" ] }, - "Web/HTTP/Configuring_servers_for_Ogg_media": { - "modified": "2019-09-10T19:10:12.290Z", - "contributors": [ - "Sheppy", - "fscholz", - "bholley", - "chrisdavidmills", - "teoli", - "kscarfone", - "Dikrib", - "Sephr", - "BenB", - "cpearce", - "Zcorpan", - "Varmaa", - "sorinelpusti" - ] - }, "Web/HTTP/Connection_management_in_HTTP_1.x": { "modified": "2019-11-27T11:05:48.174Z", "contributors": [ @@ -122592,6 +122514,24 @@ "modified": "2020-06-01T18:13:20.323Z", "contributors": ["atd30", "Sheppy"] }, + "Web/Media/Formats/Configuring_servers_for_Ogg_media": { + "modified": "2019-09-10T19:10:12.290Z", + "contributors": [ + "Sheppy", + "fscholz", + "bholley", + "chrisdavidmills", + "teoli", + "kscarfone", + "Dikrib", + "Sephr", + "BenB", + "cpearce", + "Zcorpan", + "Varmaa", + "sorinelpusti" + ] + }, "Web/Media/Formats/Containers": { "modified": "2020-04-18T23:02:19.945Z", "contributors": ["sideshowbarker", "FFV47", "Sheppy", "mukhtar-github"] diff --git a/files/en-us/games/publishing_games/game_distribution/index.md b/files/en-us/games/publishing_games/game_distribution/index.md index 4c4cf929a6b7782..5654bc8ce97455a 100644 --- a/files/en-us/games/publishing_games/game_distribution/index.md +++ b/files/en-us/games/publishing_games/game_distribution/index.md @@ -56,7 +56,7 @@ If you're working on a side project just for fun, then leaving the source open w As the name may suggest, publishers can handle the publishing of your game for you. Whether you should go that way or not depends on what your plan is for having your game distributed: Do you want to send it wherever possible, or do you want to restrict its presence to those who've bought an [exclusive license](/en-US/docs/Games/Publishing_games/Game_monetization)? It's up to you. Consider various options, experiment and conclude. Publishers will be explained in more detail in the [monetization](/en-US/docs/Games/Publishing_games/Game_monetization) article. -There are also independent portals collecting interesting games like [HTML5Games.com](https://html5games.com/), [GameArter.com](https://www.gamearter.com/), [MarketJS.com](https://www.marketjs.com/), [GameFlare](https://distribution.gameflare.com/), [GameDistribution.com](https://gamedistribution.com/), [GameSaturn.com](https://gamesaturn.com/), [Poki](https://developers.poki.com/), or [CrazyGames](https://developer.crazygames.com/) where you can send your game in and it will get some natural promotion because of the big traffic those sites attract. Some of these take your files and host them on their server, whereas others only link to your website or embed your game on their site. Such exposure may just provide [promotion](/en-US/docs/Games/Publishing_games/Game_promotion) for your game, or if you have adverts shown beside your game (or other money making options) it may also provide monetization. +There are also independent portals collecting interesting games like [HTML5Games.com](https://html5games.com/), [GameArter.com](https://www.gamearter.com/), [MarketJS.com](https://www.marketjs.com/), [GameFlare](https://distribution.gameflare.com/), [GameDistribution.com](https://gamedistribution.com/), [GameSaturn.com](https://gamesaturn.com/), [Playmox.com](https://www.playmox.com/), [Poki](https://developers.poki.com/), or [CrazyGames](https://developer.crazygames.com/) where you can send your game in and it will get some natural promotion because of the big traffic those sites attract. Some of these take your files and host them on their server, whereas others only link to your website or embed your game on their site. Such exposure may just provide [promotion](/en-US/docs/Games/Publishing_games/Game_promotion) for your game, or if you have adverts shown beside your game (or other money making options) it may also provide monetization. ### Web and native stores diff --git a/files/en-us/learn/css/building_blocks/values_tasks/index.md b/files/en-us/learn/css/building_blocks/values_tasks/index.md index 6b26188b8d698be..d5c9f9e8123ec55 100644 --- a/files/en-us/learn/css/building_blocks/values_tasks/index.md +++ b/files/en-us/learn/css/building_blocks/values_tasks/index.md @@ -196,7 +196,7 @@ Try to update the code below to recreate the finished example:
Click here to show the solution -Use `background-position` with ther `center` keyword and a percentage: +Use `background-position` with the `center` keyword and a percentage: ```css .box { diff --git a/files/en-us/learn/server-side/django/development_environment/index.md b/files/en-us/learn/server-side/django/development_environment/index.md index 52fd9ebb22958af..0a15ae06acdbfa9 100644 --- a/files/en-us/learn/server-side/django/development_environment/index.md +++ b/files/en-us/learn/server-side/django/development_environment/index.md @@ -407,7 +407,7 @@ For this tutorial we'll hosting our code on [GitHub](https://github.com/), one o > [!NOTE] > Using SCM tools is good software development practice! -> Ths instructions provide a basic introduction to git and GitHub. +> These instructions provide a basic introduction to git and GitHub. > To learn more, see [Learning Git](https://docs.github.com/en/get-started/start-your-journey/git-and-github-learning-resources). ### Key concepts diff --git a/files/en-us/learn/tools_and_testing/understanding_client-side_tools/introducing_complete_toolchain/index.md b/files/en-us/learn/tools_and_testing/understanding_client-side_tools/introducing_complete_toolchain/index.md index df236e47713d625..26e4578cb06e647 100644 --- a/files/en-us/learn/tools_and_testing/understanding_client-side_tools/introducing_complete_toolchain/index.md +++ b/files/en-us/learn/tools_and_testing/understanding_client-side_tools/introducing_complete_toolchain/index.md @@ -64,7 +64,7 @@ For our sample project, we'll be using a toolchain specifically designed to aid ## Checking prerequisites -You should have most of the softwares already if you've been following along with the previous chapters. Here's what you should have before proceeding to the real setup steps. They only need to be done once and you don't need to repeat these again for future projects. +You should have most of the pieces of software already if you've been following along with the previous chapters. Here's what you should have before proceeding to the real setup steps. They only need to be done once and you don't need to repeat these again for future projects. ### Creating a GitHub account diff --git a/files/en-us/mozilla/add-ons/webextensions/api/identity/launchwebauthflow/index.md b/files/en-us/mozilla/add-ons/webextensions/api/identity/launchwebauthflow/index.md index 0acfd7afa1f2651..f6d6efbed5e13f2 100644 --- a/files/en-us/mozilla/add-ons/webextensions/api/identity/launchwebauthflow/index.md +++ b/files/en-us/mozilla/add-ons/webextensions/api/identity/launchwebauthflow/index.md @@ -44,7 +44,7 @@ let authorizing = browser.identity.launchWebAuthFlow( - : `object`. Options for the flow, containing the following properties: - `url` - - : `string`. The URL offered by the OAuth2 service provider to get an access token. The details of this URL should be given in the documentation for the service provider in question, but the URL parameters should always include: + - : `string`. The URL offered by the OAuth2 service provider to get an access token. The details of this URL should be given in the documentation for the service provider in question, but the URL parameters should always include: the [redirect URL](/en-US/docs/Mozilla/Add-ons/WebExtensions/API/identity#getting_the_redirect_url) and the extension's [client ID](/en-US/docs/Mozilla/Add-ons/WebExtensions/API/identity#registering_your_add-on). - `redirect_uri` {{optional_inline}} - : `string`. This represents the URI your extension is redirected to when the flow has finished. Not required for the flow to work on the browser side if it matches the generated redirect URL. See [Getting the redirect URL](/en-US/docs/Mozilla/Add-ons/WebExtensions/API/identity#getting_the_redirect_url). - `interactive` {{optional_inline}} diff --git a/files/en-us/mozilla/firefox/experimental_features/index.md b/files/en-us/mozilla/firefox/experimental_features/index.md index 1056394b2b8e2b4..0400366fa6ddb47 100644 --- a/files/en-us/mozilla/firefox/experimental_features/index.md +++ b/files/en-us/mozilla/firefox/experimental_features/index.md @@ -22,7 +22,7 @@ Experimental features can be enabled or disabled using the [Firefox Configuratio ### Autocorrection of editable text elements -The HTML [`autocorrect`](/en-US/docs/Web/HTML/Global_attributes/autocorrect) attribute (and correspoinding {{domxref("HTMLElement.autocorrect")}} property) allow autocompletion in editable text elements including: most kinds of text {{htmlelement("input")}} elements, {{htmlelement("textarea")}} elements, and elements that have the [`contenteditable`](/en-US/docs/Web/HTML/Global_attributes/contenteditable) attribute set ([Firefox bug 1725806](https://bugzil.la/1725806)). +The HTML [`autocorrect`](/en-US/docs/Web/HTML/Global_attributes/autocorrect) attribute (and corresponding {{domxref("HTMLElement.autocorrect")}} property) allow autocorrection in editable text elements including: most kinds of text {{htmlelement("input")}} elements, {{htmlelement("textarea")}} elements, and elements that have the [`contenteditable`](/en-US/docs/Web/HTML/Global_attributes/contenteditable) attribute set ([Firefox bug 1725806](https://bugzil.la/1725806)). @@ -1328,6 +1328,46 @@ This includes: `SVGPathSegList`, [SVGPathElement.getPathSegAtLength()](/en-US/do ## JavaScript +### Intl.DurationFormat + +{{jsxref("Intl.DurationFormat")}} enables locale-sensitive formatting of durations. ([Firefox bug 1648139](https://bugzil.la/1648139)). + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Release channelVersion addedEnabled by default?
Nightly134Yes
Developer Edition134No
Beta134No
Release134No
Preference nameNA
+ ### JSON.parse with source The [`JSON.parse` source text access proposal](https://github.com/tc39/proposal-json-parse-with-source) extends [`JSON.parse`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse) behavior to provide features to mitigate issues around loss of precision when converting values such as large floats and date values between JavaScript values and JSON text. ([Firefox bug 1913085](https://bugzil.la/1913085), [Firefox bug 1925334](https://bugzil.la/1925334)). @@ -1458,6 +1498,55 @@ The {{domxref("CloseWatcher")}} interface allows developers to implement UI comp +### Trusted Types API + +The [Trusted Types API](/en-US/docs/Web/API/Trusted_Types_API) provides mechanisms to ensure that functions that can potentially be used as vectors for XSS attacks are only able to be called with data that has been validated or sanitized. + +> [!NOTE] +> At the time of writing not enough of the API has been implemented for it to be effectively testable. +> This note will be removed once it is ready. + +This subset of the API has been implemented: + +- {{domxref("TrustedTypePolicyFactory")}}: + - {{domxref("TrustedTypePolicyFactory/getAttributeType", "getAttributeType()")}} and {{domxref("TrustedTypePolicyFactory/getPropertyType", "getPropertyType()")}} ([Firefox bug 1917783](https://bugzil.la/1917783), [Firefox bug 1917784](https://bugzil.la/1917784)). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Release channelVersion addedEnabled by default?
Nightly133No
Developer Edition133No
Beta133No
Release133No
Preference namedom.security.trusted_types.enabled
+ ### Graphics: Canvas, WebGL, and WebGPU #### Hit regions diff --git a/files/en-us/mozilla/firefox/releases/134/index.md b/files/en-us/mozilla/firefox/releases/134/index.md index 9c4401f0172a315..d49e223a644528a 100644 --- a/files/en-us/mozilla/firefox/releases/134/index.md +++ b/files/en-us/mozilla/firefox/releases/134/index.md @@ -26,7 +26,6 @@ This article provides information about the changes in Firefox 134 that affect d - The {{jsxref("Promise.try()")}} convenience method is now supported. The method takes a callback of any kind (a function that returns or throws, synchronously or asynchronously) and wraps its result in a {{jsxref("Promise")}}. This allows you to use promise semantics ({{jsxref("Promise.then", ".then()")}}, {{jsxref("Promise.catch", ".catch()")}}) to handle the result from any kind of method. ([Firefox bug 1917879](https://bugzil.la/1917879) and [Firefox bug 1905364](https://bugzil.la/1905364)). -- {{jsxref("Intl.DurationFormat")}} is supported, enabling locale-sensitive formatting of durations. ([Firefox bug 1648139](https://bugzil.la/1648139)). #### Removals @@ -75,8 +74,9 @@ This article provides information about the changes in Firefox 134 that affect d These features are newly shipped in Firefox 134 but are disabled by default. To experiment with them, search for the appropriate preference on the `about:config` page and set it to `true`. You can find more such features on the [Experimental features](/en-US/docs/Mozilla/Firefox/Experimental_features) page. +- **`Intl.DurationFormat`** (Nightly release): {{jsxref("Intl.DurationFormat")}} enables locale-sensitive formatting of durations. ([Firefox bug 1648139](https://bugzil.la/1648139)). - **`autocorrect`**: dom.forms.autocorrect. - The HTML [`autocorrect`](/en-US/docs/Web/HTML/Global_attributes/autocorrect) attribute and {{domxref("HTMLElement.autocorrect")}} property allow autocompletion in editable text elements, including: most kinds of text {{htmlelement("input")}} elements, {{htmlelement("textarea")}} elements, and elements that have the [`contenteditable`](/en-US/docs/Web/HTML/Global_attributes/contenteditable) attribute set ([Firefox bug 1725806](https://bugzil.la/1725806)). + The HTML [`autocorrect`](/en-US/docs/Web/HTML/Global_attributes/autocorrect) attribute and {{domxref("HTMLElement.autocorrect")}} property allow autocorrection in editable text elements, including: most kinds of text {{htmlelement("input")}} elements, {{htmlelement("textarea")}} elements, and elements that have the [`contenteditable`](/en-US/docs/Web/HTML/Global_attributes/contenteditable) attribute set ([Firefox bug 1725806](https://bugzil.la/1725806)). ## Older versions diff --git a/files/en-us/mozilla/firefox/releases/63/index.md b/files/en-us/mozilla/firefox/releases/63/index.md index 4897236444f877c..1e6f53c3fa3b7c0 100644 --- a/files/en-us/mozilla/firefox/releases/63/index.md +++ b/files/en-us/mozilla/firefox/releases/63/index.md @@ -99,8 +99,8 @@ _No changes._ - The {{DOMxRef("AudioParam.setValueCurveAtTime()")}} method has been updated to correctly accept an array of floating-point values to indicate the parameter's values to change to over time. Previously, it required a {{jsxref("Float32Array")}} ([Firefox bug 1421091](https://bugzil.la/1421091)). - {{DOMxRef("AudioParam.setValueCurveAtTime()")}} has also been updated to correctly return a proper `TypeError` when a non-finite value is found in the `values` array ([Firefox bug 1472095](https://bugzil.la/1472095)). - In addition, `setValueCurveAtTime()` has been updated to ensure that, when the parameter finishes following the specified value curve after the duration elapses, the value of the parameter is set to the last value in the list of values to curve through ([Firefox bug 1308436](https://bugzil.la/1308436)). -- The `RTCRTPStreamStats` dictionary has been renamed to {{DOMxRef("RTCRtpStreamStats")}} for consistency with other WebRTC dictionaries and the specification ([Firefox bug 1480498](https://bugzil.la/1480498)). -- Support for the `RTCRtpStreamStats` dictionary's {{DOMxRef("RTCRtpStreamStats.kind", "kind")}} property has been added ([Firefox bug 1481851](https://bugzil.la/1481851)). +- The `RTCRTPStreamStats` dictionary has been renamed to `RTCRtpStreamStats` for consistency with other WebRTC dictionaries and the specification ([Firefox bug 1480498](https://bugzil.la/1480498)). +- Support for the `RTCRtpStreamStats` dictionary's `kind` property has been added ([Firefox bug 1481851](https://bugzil.la/1481851)). - The `RTCRtpStreamStats` dictionary's `isRemote` property is deprecated and will be removed in Firefox 65. A warning is now output to console when this property is accessed. See [this blog post on the Advancing WebRTC blog](https://blog.mozilla.org/webrtc/getstats-isremote-65/) for details ([Firefox bug 1393306](https://bugzil.la/1393306)). #### Canvas and WebGL diff --git a/files/en-us/mozilla/firefox/releases/66/index.md b/files/en-us/mozilla/firefox/releases/66/index.md index 80b433ebcf0a152..8efbe628697053f 100644 --- a/files/en-us/mozilla/firefox/releases/66/index.md +++ b/files/en-us/mozilla/firefox/releases/66/index.md @@ -90,7 +90,7 @@ No changes. - The new [AV1 video codec](/en-US/docs/Web/Media/Formats/Video_codecs#av1) is now enabled by default on both macOS and Windows (for Intel processors). Linux support will come in Firefox 67 ([Firefox bug 1521181](https://bugzil.la/1521181), [Firefox bug 1452146](https://bugzil.la/1452146), and [Firefox bug 1534814](https://bugzil.la/1534814)). - The {{domxref("MediaDevices")}} method {{domxref("MediaDevices.getDisplayMedia", "getDisplayMedia()")}}, available as `navigator.mediaDevices.getDisplayMedia()`, has been added and synchronized with the specification. This method lets you capture a screen or part of a screen as a {{domxref("MediaStream")}} for manipulation or sharing ([Firefox bug 1321221](https://bugzil.la/1321221)). - As a step toward eventually deprecating the Firefox-specific {{domxref("MediaDevices.getUserMedia", "getUserMedia()")}}-based method for capturing screen and window contents, the non-standard `mediaSource` constraint now treats the values `screen` and `window` identically. Both now present a list of both screens and windows for the user to choose from ([Firefox bug 1474376](https://bugzil.la/1474376)). -- {{domxref("RTCRtpStreamStats.qpSum", "qpSum")}} has been added to local outbound {{domxref("RTCRTPStreamStats")}} objects. This measures the total of the Quantization Parameter values for every frame sent or received on the video track. The higher this number, the more compressed the stream probably is ([Firefox bug 1347070](https://bugzil.la/1347070)). +- `RTCOutboundRtpStreamStats.qpSum` has been added. This measures the total of the Quantization Parameter values for every frame sent or received on the video track. The higher this number, the more compressed the stream probably is ([Firefox bug 1347070](https://bugzil.la/1347070)). - In a step along the road toward implementing support for Feature Policy in a future Firefox update, {{domxref("MediaDevices.getUserMedia", "getUserMedia()")}} can no longer be used in situations in which there is no proper origin for the content, such as when called from a sandboxed {{HTMLElement("iframe")}} or from a `data` URL entered into the address bar by the user. For more details, see the [Security](/en-US/docs/Web/API/MediaDevices/getUserMedia#security) section on the MediaDevices.getUserMedia() page ([Firefox bug 1371741](https://bugzil.la/1371741)). #### Removals diff --git a/files/en-us/web/api/compositionevent/index.md b/files/en-us/web/api/compositionevent/index.md index 46347b9aa704326..4305ed350a3c41e 100644 --- a/files/en-us/web/api/compositionevent/index.md +++ b/files/en-us/web/api/compositionevent/index.md @@ -23,7 +23,7 @@ _This interface also inherits properties of its parent, {{domxref("UIEvent")}}, - {{domxref("CompositionEvent.data")}} {{ReadOnlyInline}} - : Returns the characters generated by the input method that raised the event; its varies depending on the type of event that generated the `CompositionEvent` object. - {{domxref("CompositionEvent.locale")}} {{ReadOnlyInline}} {{deprecated_inline}} {{Non-standard_Inline}} - - : Returns the locale of current input method (for example, the keyboard layout locale if the composition is associated with {{glossary("IME")}}). + - : Returns the locale of the current input method (for example, the keyboard layout locale if the composition is associated with an {{glossary("Input method editor")}}). ## Instance methods diff --git a/files/en-us/web/api/compositionevent/locale/index.md b/files/en-us/web/api/compositionevent/locale/index.md index b297d36fafe42fb..47c41ea757a8ded 100644 --- a/files/en-us/web/api/compositionevent/locale/index.md +++ b/files/en-us/web/api/compositionevent/locale/index.md @@ -13,7 +13,7 @@ browser-compat: api.CompositionEvent.locale The **`locale`** read-only property of the {{domxref("CompositionEvent")}} interface returns the locale of current input method -(for example, the keyboard layout locale if the composition is associated with {{glossary("IME")}}). +(for example, the keyboard layout locale if the composition is associated with an {{glossary("Input method editor")}}). > [!WARNING] > Even for browsers supporting it, don't trust the value contained in this property. diff --git a/files/en-us/web/api/domquad/index.md b/files/en-us/web/api/domquad/index.md index ea7c75691c91ebc..eb8cfe0312e5d8b 100644 --- a/files/en-us/web/api/domquad/index.md +++ b/files/en-us/web/api/domquad/index.md @@ -30,7 +30,7 @@ A `DOMQuad` is a collection of four `DOMPoint`s defining the corners of an arbit - {{domxref("DOMQuad.fromRect()")}} - : Returns a new `DOMQuad` object based on the passed set of coordinates. - {{domxref("DOMQuad.fromQuad()")}} - - : Returns a new `DOMQuad` object based on the passed set of coordinates. + - : Returns a new `DOMQuad` object or a set of quadrilateral coordinates based on the provided input. - {{domxref("DOMQuad.getBounds()")}} - : Returns a {{domxref("DOMRect")}} object with the coordinates and dimensions of the `DOMQuad` object. - {{domxref("DOMQuad.toJSON()")}} diff --git a/files/en-us/web/api/element/compositionend_event/index.md b/files/en-us/web/api/element/compositionend_event/index.md index b2a0e455c55e303..aa7f9aa7af5103b 100644 --- a/files/en-us/web/api/element/compositionend_event/index.md +++ b/files/en-us/web/api/element/compositionend_event/index.md @@ -10,7 +10,7 @@ browser-compat: api.Element.compositionend_event The **`compositionend`** event is fired when a text composition system such as an {{glossary("input method editor")}} completes or cancels the current composition session. -For example, this event could be fired after a user finishes entering a Chinese character using a [Pinyin](https://en.wikipedia.org/wiki/Pinyin) {{glossary("IME")}}. +For example, this event could be fired after a user finishes entering a Chinese character using a [Pinyin](https://en.wikipedia.org/wiki/Pinyin) {{glossary("Input method editor")}}. ## Syntax @@ -35,7 +35,7 @@ _This interface also inherits properties of its parent, {{domxref("UIEvent")}}, - {{domxref("CompositionEvent.data")}} {{ReadOnlyInline}} - : Returns the characters generated by the input method that raised the event; its varies depending on the type of event that generated the `CompositionEvent` object. - {{domxref("CompositionEvent.locale")}} {{ReadOnlyInline}} {{deprecated_inline}} - - : Returns the locale of current input method (for example, the keyboard layout locale if the composition is associated with {{glossary("IME")}}). + - : Returns the locale of the current input method (for example, the keyboard layout locale if the composition is associated with an {{glossary("Input method editor")}}). ## Examples diff --git a/files/en-us/web/api/element/compositionstart_event/index.md b/files/en-us/web/api/element/compositionstart_event/index.md index 287fd11d383aa44..c4411011451e4aa 100644 --- a/files/en-us/web/api/element/compositionstart_event/index.md +++ b/files/en-us/web/api/element/compositionstart_event/index.md @@ -10,7 +10,7 @@ browser-compat: api.Element.compositionstart_event The **`compositionstart`** event is fired when a text composition system such as an {{glossary("input method editor")}} starts a new composition session. -For example, this event could be fired after a user starts entering a Chinese character using a [Pinyin](https://en.wikipedia.org/wiki/Pinyin) {{glossary("IME")}}. +For example, this event could be fired after a user starts entering a Chinese character using a [Pinyin](https://en.wikipedia.org/wiki/Pinyin) {{glossary("Input method editor")}}. ## Syntax diff --git a/files/en-us/web/api/element/compositionupdate_event/index.md b/files/en-us/web/api/element/compositionupdate_event/index.md index 12335f986df0677..e5e05c08aacd5ed 100644 --- a/files/en-us/web/api/element/compositionupdate_event/index.md +++ b/files/en-us/web/api/element/compositionupdate_event/index.md @@ -10,7 +10,7 @@ browser-compat: api.Element.compositionupdate_event The **`compositionupdate`** event is fired when a new character is received in the context of a text composition session controlled by a text composition system such as an {{glossary("input method editor")}}. -For example, this event could be fired while a user enters a Chinese character using a [Pinyin](https://en.wikipedia.org/wiki/Pinyin) {{glossary("IME")}}. +For example, this event could be fired while a user enters a Chinese character using a [Pinyin](https://en.wikipedia.org/wiki/Pinyin) {{glossary("Input method editor")}}. ## Syntax diff --git a/files/en-us/web/api/element/keydown_event/index.md b/files/en-us/web/api/element/keydown_event/index.md index d1e74ec48fdd8a7..8125e35721a38d8 100644 --- a/files/en-us/web/api/element/keydown_event/index.md +++ b/files/en-us/web/api/element/keydown_event/index.md @@ -95,7 +95,7 @@ function logKey(e) { ### keydown events with IME -Since Firefox 65, the `keydown` and [`keyup`](/en-US/docs/Web/API/Element/keyup_event) events are now fired during {{glossary("IME")}} composition, to improve cross-browser compatibility for CJKT users ([Firefox bug 354358](https://bugzil.la/354358)). To ignore all `keydown` events that are part of composition, do something like this (229 is a special value set for a `keyCode` relating to an event that has been processed by an IME): +Since Firefox 65, the `keydown` and [`keyup`](/en-US/docs/Web/API/Element/keyup_event) events are now fired during {{glossary("Input method editor")}} composition, to improve cross-browser compatibility for CJKT users ([Firefox bug 354358](https://bugzil.la/354358)). To ignore all `keydown` events that are part of composition, do something like this (229 is a special value set for a `keyCode` relating to an event that has been processed by an IME): ```js eventTarget.addEventListener("keydown", (event) => { diff --git a/files/en-us/web/api/element/keyup_event/index.md b/files/en-us/web/api/element/keyup_event/index.md index 9831befe526dcb0..e4dae1438f2c65a 100644 --- a/files/en-us/web/api/element/keyup_event/index.md +++ b/files/en-us/web/api/element/keyup_event/index.md @@ -93,7 +93,7 @@ function logKey(e) { ### keyup events with IME -Since Firefox 65, the [`keydown`](/en-US/docs/Web/API/Element/keydown_event) and `keyup` events are now fired during {{glossary("IME")}} composition, to improve cross-browser compatibility for CJKT users ([Firefox bug 354358](https://bugzil.la/354358)). To ignore all `keyup` events that are part of composition, do something like this: +Since Firefox 65, the [`keydown`](/en-US/docs/Web/API/Element/keydown_event) and `keyup` events are now fired during {{glossary("Input method editor")}} composition, to improve cross-browser compatibility for CJKT users ([Firefox bug 354358](https://bugzil.la/354358)). To ignore all `keyup` events that are part of composition, do something like this: ```js eventTarget.addEventListener("keyup", (event) => { diff --git a/files/en-us/web/api/gamepad/buttons/index.md b/files/en-us/web/api/gamepad/buttons/index.md index a30c6031d9c1841..16f070b829da850 100644 --- a/files/en-us/web/api/gamepad/buttons/index.md +++ b/files/en-us/web/api/gamepad/buttons/index.md @@ -8,19 +8,19 @@ browser-compat: api.Gamepad.buttons {{APIRef("Gamepad API")}}{{SecureContext_Header}} -The **`Gamepad.buttons`** property of the {{domxref("Gamepad")}} interface returns an array of {{domxref("gamepadButton")}} objects representing the -buttons present on the device. +The **`buttons`** property of the {{domxref("Gamepad")}} interface returns an array of {{domxref("gamepadButton")}} objects representing the buttons present on the device. -Each entry in the array is 0 if the button is not pressed, and non-zero (typically 1.0) -if the button is pressed. Each {{domxref("gamepadButton")}} object has two properties: -`pressed` and `value`: +Each entry in the array is `0` if the button is not pressed, and non-zero (typically `1.0`) if the button is pressed. -- The `pressed` property is a boolean indicating whether the button is - currently pressed (`true`) or unpressed (`false`). -- The `value` property is a floating point value used to enable - representing analog buttons, such as the triggers on many modern gamepads. The values - are normalized to the range 0.0 – 1.0, with 0.0 representing a button that is not - pressed, and 1.0 representing a button that is fully pressed. +Each {{domxref("gamepadButton")}} object has two properties: + +- `pressed` + + - : A boolean indicating whether the button is currently pressed (`true`) or unpressed (`false`). + +- `value` + + - : A floating point value used to enable representing analog buttons, such as the triggers on many modern gamepads. The values are normalized to the range 0.0 – 1.0, with 0.0 representing a button that is not pressed, and 1.0 representing a button that is fully pressed. ## Value @@ -28,50 +28,27 @@ An array of {{domxref("gamepadButton")}} objects. ## Examples -The following code is taken from my Gamepad API button demo (you can [view the demo live](https://chrisdavidmills.github.io/gamepad-buttons/), and -[find the source code](https://github.com/chrisdavidmills/gamepad-buttons/tree/master) on GitHub.) Note the code fork — in Chrome -{{domxref("Navigator.getGamepads")}} needs a `webkit` prefix and the button -values are stores as an array of double values, whereas in Firefox -{{domxref("Navigator.getGamepads")}} doesn't need a prefix, and the button values are -stored as an array of {{domxref("GamepadButton")}} objects; it is the -{{domxref("GamepadButton.value")}} or {{domxref("GamepadButton.pressed")}} properties of -these we need to access, depending on what type of buttons they are. In this simple -example I've just allowed either. +Depending on the type of button, we need to access the {{domxref("GamepadButton.value")}} or {{domxref("GamepadButton.pressed")}} properties. This +example supports both: ```js function gameLoop() { - let a = 0; - let b = 0; - if (navigator.webkitGetGamepads) { - const gp = navigator.webkitGetGamepads()[0]; - - if (gp.buttons[0] === 1) { - b--; - } else if (gp.buttons[1] === 1) { - a++; - } else if (gp.buttons[2] === 1) { - b++; - } else if (gp.buttons[3] === 1) { - a--; - } - } else { - const gp = navigator.getGamepads()[0]; - - if (gp.buttons[0].value > 0 || gp.buttons[0].pressed) { - b--; - } else if (gp.buttons[1].value > 0 || gp.buttons[1].pressed) { - a++; - } else if (gp.buttons[2].value > 0 || gp.buttons[2].pressed) { - b++; - } else if (gp.buttons[3].value > 0 || gp.buttons[3].pressed) { - a--; - } + const gp = navigator.getGamepads()[0]; + + if (gp.buttons[0].value > 0 || gp.buttons[0].pressed) { + b--; + } else if (gp.buttons[1].value > 0 || gp.buttons[1].pressed) { + a++; + } else if (gp.buttons[2].value > 0 || gp.buttons[2].pressed) { + b++; + } else if (gp.buttons[3].value > 0 || gp.buttons[3].pressed) { + a--; } - ball.style.left = `${a * 2}px`; + ball.style.left = `${a * 2}px`; // ball is a UI widget ball.style.top = `${b * 2}px`; - const start = rAF(gameLoop); + requestAnimationFrame(gameLoop); } ``` diff --git a/files/en-us/web/api/htmlareaelement/coords/index.md b/files/en-us/web/api/htmlareaelement/coords/index.md new file mode 100644 index 000000000000000..ff8d1dc28d0d41d --- /dev/null +++ b/files/en-us/web/api/htmlareaelement/coords/index.md @@ -0,0 +1,48 @@ +--- +title: "HTMLAreaElement: coords property" +short-title: coords +slug: Web/API/HTMLAreaElement/coords +page-type: web-api-instance-property +browser-compat: api.HTMLAreaElement.coords +--- + +{{APIRef("HTML DOM")}} + +The **`coords`** property of the {{DOMxRef("HTMLAreaElement")}} interface specifies the coordinates of the element's shape as a list of floating-point numbers. It reflects the {{htmlelement("area")}} element's [`coords`](/en-US/docs/Web/HTML/Element/area#coords) attribute. + +If the `shape` is `rect`, the shape is a rectangle and the string value's four comma separated numbers specify the coordinates of the top-left and bottom-right corners of the rectangle. For example, `0,0,200,20` defines the coordinates as `0,0`, which is the top-left of the image map, and `200,20`, which is 200px from the left and 20px from the top of the top-left corner of the image map. + +If the `shape` is `circle`, the three comma-separated numbers represent the x and y coordinates of the circle's center and the radius. + +If the shape is `poly`, the string consists of at least 6 comma-separated numbers representing at least 3 pairs of coordinates that define the vertices of the polygon. + +For all coordinates, the origin is the top-left corner of the {{htmlelement("map")}} element's image. + +## Value + +A string; composed of a comma separated series of numbers. + +## Examples + +```js +const areaElement = document.getElementById("circleArea"); +console.log(areaElement.coords); +areaElement.coords = "25,25,25"; +``` + +## Specifications + +{{Specifications}} + +## Browser compatibility + +{{Compat}} + +## See also + +- {{DOMXref("HTMLAreaElement.shape")}} +- {{DOMXref("HTMLAreaElement.alt")}} +- {{DOMXref("HTMLMapElement")}} +- {{HTMLElement("area")}} +- {{HTMLElement("map")}} +- {{HTMLElement("a")}} diff --git a/files/en-us/web/api/htmlareaelement/shape/index.md b/files/en-us/web/api/htmlareaelement/shape/index.md new file mode 100644 index 000000000000000..45d189200f498f8 --- /dev/null +++ b/files/en-us/web/api/htmlareaelement/shape/index.md @@ -0,0 +1,39 @@ +--- +title: "HTMLAreaElement: shape property" +short-title: shape +slug: Web/API/HTMLAreaElement/shape +page-type: web-api-instance-property +browser-compat: api.HTMLAreaElement.shape +--- + +{{APIRef("HTML DOM")}} + +The **`shape`** property of the {{DOMxRef("HTMLAreaElement")}} interface specifies the shape of an image map area. It reflects the {{htmlelement("area")}} element's [`shape`](/en-US/docs/Web/HTML/Element/area#shape) attribute. + +## Value + +A string; `rect`, `circle`, or `poly`. + +## Examples + +```js +const areaElement = document.getElementById("imageMapArea"); +console.log(areaElement.shape); +``` + +## Specifications + +{{Specifications}} + +## Browser compatibility + +{{Compat}} + +## See also + +- {{DOMXref("HTMLAreaElement.coords")}} +- {{DOMXref("HTMLAreaElement.alt")}} +- {{DOMXref("HTMLMapElement")}} +- {{HTMLElement("area")}} +- {{HTMLElement("map")}} +- {{HTMLElement("a")}} diff --git a/files/en-us/web/api/htmlelement/autocorrect/index.md b/files/en-us/web/api/htmlelement/autocorrect/index.md index 88b33b76f551e9e..fa599cdff60f462 100644 --- a/files/en-us/web/api/htmlelement/autocorrect/index.md +++ b/files/en-us/web/api/htmlelement/autocorrect/index.md @@ -10,7 +10,11 @@ browser-compat: api.HTMLElement.autocorrect {{APIRef("HTML DOM")}}{{SeeCompatTable}} -The **`autocorrect`** property of the {{domxref("HTMLElement")}} interface controls whether or not user text input is automatically corrected for spelling and/or punctuation errors. +The **`autocorrect`** property of the {{domxref("HTMLElement")}} interface controls whether or not autocorrection of editable text is enabled for spelling and/or punctuation errors. + +The specific autocorrection behavior, including which words are substituted, depends on the user agent and the services provided by the underlying device. +For example, on macOS a user agent might rely on [registered replacement text and punctuation](https://support.apple.com/en-vn/guide/mac-help/mh35735/mac). +Other devices and browsers may use a different approach. The property reflects the value of the [`autocorrect`](/en-US/docs/Web/HTML/Global_attributes/autocorrect) HTML global attribute. @@ -88,8 +92,9 @@ if (`autocorrect` in HTMLElement.prototype) { -Activate the button to toggle the autocorrect value. Enter invalid text into the text box, such as "Carot". -This should be corrected automatically when the feature is enabled. +Activate the button to toggle the autocorrect value. +Enter invalid text into the text box, such as "Carot". +When the autocorrect is enabled, and if the implementation has the appropriate substitute word "carrot", the text should automatically be corrected. {{EmbedLiveSample("Enable and disable autocorrection", "100%", "200")}} diff --git a/files/en-us/web/api/htmlmodelement/cite/index.md b/files/en-us/web/api/htmlmodelement/cite/index.md new file mode 100644 index 000000000000000..8cc74e7f0370954 --- /dev/null +++ b/files/en-us/web/api/htmlmodelement/cite/index.md @@ -0,0 +1,36 @@ +--- +title: "HTMLModElement: cite property" +short-title: cite +slug: Web/API/HTMLModElement/cite +page-type: web-api-instance-property +browser-compat: api.HTMLModElement.cite +--- + +{{ApiRef("HTML DOM")}} + +The **`cite`** property of the {{domxref("HTMLModElement")}} interface indicates the URL of the resource explaining the modification. It reflects the `cite` attribute of the {{HTMLElement("del")}} element and {{HTMLElement("ins")}} elements. + +## Value + +A string representing a URL. + +## Example + +```js +const mod = document.querySelector("edit"); +console.log(`Explanation: ${mod.cite}`); // the current value +mod.cite = "https://example.com/edits"; // updates the element's cite +``` + +## Specifications + +{{Specifications}} + +## Browser compatibility + +{{Compat}} + +## See also + +- {{domxref("HTMLModElement.dateTime")}} +- {{domxref("HTMLQuoteElement.cite")}} diff --git a/files/en-us/web/api/htmlquoteelement/cite/index.md b/files/en-us/web/api/htmlquoteelement/cite/index.md new file mode 100644 index 000000000000000..36266a3e4d848de --- /dev/null +++ b/files/en-us/web/api/htmlquoteelement/cite/index.md @@ -0,0 +1,36 @@ +--- +title: "HTMLQuoteElement: cite property" +short-title: cite +slug: Web/API/HTMLQuoteElement/cite +page-type: web-api-instance-property +browser-compat: api.HTMLQuoteElement.cite +--- + +{{ApiRef("HTML DOM")}} + +The **`cite`** property of the {{domxref("HTMLQuoteElement")}} interface indicates the URL for the source of the quotation.. It reflects the {{HTMLElement("q")}} element's [`cite`](/en-US/docs/Web/HTML/Element/q#cite) attribute. + +## Value + +A string representing a URL. + +## Example + +```js +const quote = document.querySelector("q"); +console.log(`Original source: ${quote.cite}`); // the current value +quote.cite = "https://example.com/quotes"; // updates the value +``` + +## Specifications + +{{Specifications}} + +## Browser compatibility + +{{Compat}} + +## See also + +- {{domxref("HTMLQuoteElement")}} +- {{domxref("HTMLModElement.cite")}} diff --git a/files/en-us/web/api/htmltitleelement/text/index.md b/files/en-us/web/api/htmltitleelement/text/index.md index e605bee14da2b2c..2f59907d5101b27 100644 --- a/files/en-us/web/api/htmltitleelement/text/index.md +++ b/files/en-us/web/api/htmltitleelement/text/index.md @@ -8,7 +8,9 @@ browser-compat: api.HTMLTitleElement.text {{APIRef("HTML DOM")}} -The **`text`** property of the {{domxref("HTMLTitleElement")}} interface represents the text of the document's title. Only the text part is included; tags within the element and their content are stripped and ignored. +The **`text`** property of the {{domxref("HTMLTitleElement")}} interface represents the child text content of the document's title as a string. It contains the {{HTMLelement("title")}} element's content as text; if HTML tags are included within the `` element, they are included as part of the string value rather than being parsed as HTML. + +Setting a value for the `text` property replaces the entire text contents of the `<title>`. ## Value @@ -32,10 +34,11 @@ Consider the example below: ```js const title = document.querySelector("title"); -console.log(title.text); // yield: "Hello world! really?" +console.log(title.text); // "Hello world! <span class="highlight">Isn't this wonderful</span> really?" +title.text = "Update the title"; ``` -As you can see, the tag `span` and its content were skipped. +As you can see, the `span` tag remained unparsed; the `<title>` element's contents were treated as plain text and returned exactly as they appear in the `title` element. ## Specifications diff --git a/files/en-us/web/api/keyboardevent/charcode/index.md b/files/en-us/web/api/keyboardevent/charcode/index.md index b2d8fb708fc460a..df04bd98b4b67b8 100644 --- a/files/en-us/web/api/keyboardevent/charcode/index.md +++ b/files/en-us/web/api/keyboardevent/charcode/index.md @@ -67,7 +67,7 @@ input.addEventListener("keypress", (e) => { {{domxref("Element/keyup_event", "keyup")}} events. In these cases, `keyCode` is set instead. - To get the code of the key regardless of whether it was stored in `keyCode` or `charCode`, query the {{domxref("UIEvent/which", "which")}} property. -- Characters entered through an {{glossary("IME")}} do not register through `keyCode` or +- Characters entered through an {{glossary("Input method editor")}} do not register through `keyCode` or `charCode`. - For a list of the `charCode` values associated with particular keys, run [Example 7: Displaying Event Object Properties](/en-US/docs/Web/API/Document_Object_Model/Examples#example_7_displaying_event_object_properties) and view the resulting HTML table. diff --git a/files/en-us/web/api/pushmanager/supportedcontentencodings_static/index.md b/files/en-us/web/api/pushmanager/supportedcontentencodings_static/index.md index faa1e0d65876345..d9e7acaa86be818 100644 --- a/files/en-us/web/api/pushmanager/supportedcontentencodings_static/index.md +++ b/files/en-us/web/api/pushmanager/supportedcontentencodings_static/index.md @@ -8,13 +8,62 @@ browser-compat: api.PushManager.supportedContentEncodings_static {{APIRef("Push API")}}{{SecureContext_Header}}{{AvailableInWorkers}} -The **`supportedContentEncodings`** read-only static property of the -{{domxref("PushManager")}} interface returns an array of supported content codings that -can be used to encrypt the payload of a push message. +The **`supportedContentEncodings`** read-only static property of the {{domxref("PushManager")}} interface returns an array of supported content codings that can be used to encrypt the payload of a push message. + +User agents must support the `aes128gcm` content coding defined in {{rfc("8291")}}, and may also support content codings defined from previous versions of the specification. +The returned array is frozen, and may not be modified by the recipient. + +The application server requires this coding in order to encrypt push messages for sending to the push server. +The coding used for encryption is also included by the app server in the {{httpheader("Content-Encoding")}} HTTP header field of each push message. + +The specification does not define how the client code should send the application server the supported codings, or the information in the {{domxref("PushSubscription")}} that it also needs in order to encrypt and send a push message. +One approach is shown in the examples section below. ## Value An array of strings. +This usually contains just one value: `"aes128gcm"`. + +## Exceptions + +- `TypeError` + - : This is thrown when attempting to set a value in the returned array. + +## Examples + +### Sending coding information to the server + +Push messages are encrypted on the application server for sending to the push server, and decrypted by the browser before being passed to the application service worker. +The public and private keys used are generated by the browser, and only the public key and an associated secret are shared with the web app, and hence the application server. +This ensures that push messages remain private as they pass through the push server infrastructure. + +The [`p256dh`](/en-US/docs/Web/API/PushSubscription/getKey#p256dh) public key and [`auth`](/en-US/docs/Web/API/PushSubscription/getKey#auth) secret used for encrypting the message are provided to the service worker via its push subscription, using the {{domxref("PushSubscription.getKey()")}} method, along with the target endpoint for sending push messages in {{domxref("PushSubscription.endpoint")}}. +The coding that should be used for encryption is provided by `supportedContentEncodings`. + +This information may be sent to the application server using any mechanism. +One approach is to put the needed information from {{domxref("PushSubscription")}} and `supportedContentEncodings` into a JSON object, serialize it using [`JSON.stringify()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify) and post the result to the application server. + +```js +// Get a PushSubscription object +const pushSubscription = await serviceWorkerRegistration.pushManager.subscribe(); + +// Create an object containing the information needed by the app server +const subscriptionObject = { + endpoint: pushSubscription.endpoint, + keys: { + p256dh: pushSubscription.getKeys('p256dh'), + auth: pushSubscription.getKeys('auth'), + }, + encoding: PushManager.supportedContentEncodings, + /* other app-specific data, such as user identity */ +}; + +// Stringify the object an post to the app server +fetch(`https://example.com/push/`, { + method: "post", + body: JSON.stringify(pushSubscription); +}); +``` ## Specifications diff --git a/files/en-us/web/api/pushsubscription/index.md b/files/en-us/web/api/pushsubscription/index.md index ddd64ed5fdf7c3d..7c1a2e486b64c94 100644 --- a/files/en-us/web/api/pushsubscription/index.md +++ b/files/en-us/web/api/pushsubscription/index.md @@ -7,9 +7,10 @@ browser-compat: api.PushSubscription {{ApiRef("Push API")}}{{SecureContext_Header}}{{AvailableInWorkers}} -The `PushSubscription` interface of the [Push API](/en-US/docs/Web/API/Push_API) provides a subscription's URL endpoint and allows unsubscribing from a push service. +The `PushSubscription` interface of the [Push API](/en-US/docs/Web/API/Push_API) provides a subscription's URL endpoint along with the public key and secrets that should be used for encrypting push messages to this subscription. +This information must be passed to the application server, using any desired application-specific method. -An instance of this interface can be serialized. +The interface also provides information about when the subscription will expire, and a method to unsubscribe from the subscription. ## Instance properties @@ -31,8 +32,51 @@ An instance of this interface can be serialized. - {{domxref("PushSubscription.unsubscribe()")}} - : Starts the asynchronous process of unsubscribing from the push service, returning a {{jsxref("Promise")}} that resolves to a boolean value when the current subscription is successfully unregistered. +## Description + +Each browser uses a particular push service. +A service worker can use {{domxref("PushManager.subscribe()")}} to subscribe to the supported service, and use the returned `PushSubscription` to discover the endpoint where push messages should be sent. + +The `PushSubscription` is also used to get the public key and secret that the application server must use to encrypt the messages that it sends to the push service. +Note that the private keys used to decrypt push messages are not shared by the browser, and are used to decrypt messages before they are passed to the service worker. +This ensures that push messages remain private as they pass through the push server infrastructure. + +The service worker doesn't need to know anything about the endpoints or encryption, other than to pass the relevant information onto the application server. +Any mechanism may be used to share the information with the application server. + ## Example +### Sending coding information to the server + +The [`p256dh`](/en-US/docs/Web/API/PushSubscription/getKey#p256dh) public key and [`auth`](/en-US/docs/Web/API/PushSubscription/getKey#auth) secret used for encrypting the message are provided to the service worker via its push subscription, using the {{domxref("PushSubscription.getKey()")}} method, along with the target endpoint for sending push messages in {{domxref("PushSubscription.endpoint")}}. +The coding that should be used for encryption is provided by the {{domxref("PushManager.supportedContentEncodings")}} static property. + +This example shows how you might put the needed information from `PushSubscription` and `supportedContentEncodings` into a JSON object, serialize it using [`JSON.stringify()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify), and post the result to the application server. + +```js +// Get a PushSubscription object +const pushSubscription = await serviceWorkerRegistration.pushManager.subscribe(); + +// Create an object containing the information needed by the app server +const subscriptionObject = { + endpoint: pushSubscription.endpoint, + keys: { + p256dh: pushSubscription.getKeys('p256dh'), + auth: pushSubscription.getKeys('auth'), + }, + encoding: PushManager.supportedContentEncodings, + /* other app-specific data, such as user identity */ +}; + +// Stringify the object an post to the app server +fetch(`https://example.com/push/`, { + method: "post", + body: JSON.stringify(pushSubscription); +}); +``` + +### Unsubscribing from a push manager + ```js navigator.serviceWorker.ready.then((reg) => { reg.pushManager.getSubscription().then((subscription) => { diff --git a/files/en-us/web/api/range/clonerange/index.md b/files/en-us/web/api/range/clonerange/index.md index fbc762a22b7423f..52f4a80c86231ce 100644 --- a/files/en-us/web/api/range/clonerange/index.md +++ b/files/en-us/web/api/range/clonerange/index.md @@ -32,9 +32,9 @@ A {{domxref("Range")}} object. ## Examples ```js -range = document.createRange(); +const range = document.createRange(); range.selectNode(document.getElementsByTagName("div").item(0)); -clone = range.cloneRange(); +const clone = range.cloneRange(); ``` ## Specifications diff --git a/files/en-us/web/api/rtcencodedvideoframe/getmetadata/index.md b/files/en-us/web/api/rtcencodedvideoframe/getmetadata/index.md index 755812d4017e2ce..92b686c6bfe97a3 100644 --- a/files/en-us/web/api/rtcencodedvideoframe/getmetadata/index.md +++ b/files/en-us/web/api/rtcencodedvideoframe/getmetadata/index.md @@ -51,7 +51,7 @@ An object with the following properties: - : A positive integer value indicating synchronization source ("ssrc") of the stream of RTP packets that are described by this encoded video frame. A source might be something like a camera or microphone, or some kind of mixer app that combines multiple sources. All packets from the same source share the same time source and sequence space, and so can be ordered relative to each other. - Note two frames with the same value refer to the same source (for more information see [`RTCRtpStreamStats.ssrc`](/en-US/docs/Web/API/RTCRtpStreamStats/ssrc)). + Note two frames with the same value refer to the same source (for more information see [`RTCInboundRtpStreamStats.ssrc`](/en-US/docs/Web/API/RTCInboundRtpStreamStats#ssrc)). - `payloadType` - : A positive integer value in the range from 0 to 127 that describes the format of the RTP payload. The mappings of values to formats is defined in RFC3550. diff --git a/files/en-us/web/api/rtcinboundrtpstreamstats/codecid/index.md b/files/en-us/web/api/rtcinboundrtpstreamstats/codecid/index.md new file mode 100644 index 000000000000000..499551d87688af1 --- /dev/null +++ b/files/en-us/web/api/rtcinboundrtpstreamstats/codecid/index.md @@ -0,0 +1,25 @@ +--- +title: "RTCInboundRtpStreamStats: codecId property" +short-title: codecId +slug: Web/API/RTCInboundRtpStreamStats/codecId +page-type: web-api-instance-property +browser-compat: api.RTCStatsReport.type_inbound-rtp.codecId +--- + +{{APIRef("WebRTC")}} + +The **`codecId`** property of the {{domxref("RTCInboundRtpStreamStats")}} dictionary is a string that uniquely identifies the object that was inspected to produce the data in the {{domxref("RTCCodecStats")}} for the {{Glossary("RTP")}} stream. + +`RTCInboundRtpStreamStats` and `RTCCodecStats` objects are correlated by iterating the {{domxref("RTCStatsReport")}} to find the statistics objects where `RTCInboundRtpStreamStats.codecId` is equal to {{domxref("RTCCodecStats.id")}}. + +## Value + +A string that contains the {{domxref("RTCCodecStats.id","id")}} of the object that was inspected to produce the {{domxref("RTCCodecStats")}} object associated with this RTP stream. + +## Specifications + +{{Specifications}} + +## Browser compatibility + +{{Compat}} diff --git a/files/en-us/web/api/rtcinboundrtpstreamstats/fircount/index.md b/files/en-us/web/api/rtcinboundrtpstreamstats/fircount/index.md deleted file mode 100644 index 3a173aa72c39627..000000000000000 --- a/files/en-us/web/api/rtcinboundrtpstreamstats/fircount/index.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: "RTCInboundRtpStreamStats: firCount property" -short-title: firCount -slug: Web/API/RTCInboundRtpStreamStats/firCount -page-type: web-api-instance-property -browser-compat: api.RTCInboundRtpStreamStats.firCount ---- - -{{APIRef("WebRTC")}} - -The **`firCount`** property of the -{{domxref("RTCInboundRtpStreamStats")}} dictionary indicates the number of -**Full Intra Request** (**FIR**) packets have been sent by -the receiver to the sender. - -The receiver sends a FIR packet when the stream -falls behind and needs to skip frames in order to catch up. - -## Value - -An integer value indicating how many FIR packets have been received by the sender -during the current connection. This statistic is available only for video tracks. - -The receiver sends a FIR packet to the sender any time it falls behind or loses packets -and cannot decode the incoming stream any longer because of the lost data. This tells -the sender to send a full frame instead of a delta frame, so that the receiver can catch -up. - -The higher `firCount` is, the more often frames were dropped, which may be -an indication that the media's bit rate is too high for the available bandwidth, or that -the receiving device is overburdened and is therefore unable to process the incoming -data. - -## Specifications - -{{Specifications}} - -## Browser compatibility - -{{Compat}} diff --git a/files/en-us/web/api/rtcinboundrtpstreamstats/index.md b/files/en-us/web/api/rtcinboundrtpstreamstats/index.md index d19bafdf4ea1a32..f7cdecaa84f62a5 100644 --- a/files/en-us/web/api/rtcinboundrtpstreamstats/index.md +++ b/files/en-us/web/api/rtcinboundrtpstreamstats/index.md @@ -21,8 +21,6 @@ The statistics can be obtained by iterating the {{domxref("RTCStatsReport")}} re - : An integer value indicating the number of RTP Forward Error Correction (FEC) packets which have been received for this source, for which the error correction payload was discarded. - {{domxref("RTCInboundRtpStreamStats.fecPacketsReceived", "fecPacketsReceived")}} - : An integer value indicating the total number of RTP FEC packets received for this source. This counter may also be incremented when FEC packets arrive in-band along with media content; this can happen with Opus, for example. -- {{domxref("RTCInboundRtpStreamStats.firCount", "firCount")}} - - : An integer value which indicates the total number of Full Intra Request (FIR) packets which this receiver has sent to the sender. This is an indicator of how often the stream has lagged, requiring frames to be skipped in order to catch up. This value is only available for video streams. - {{domxref("RTCInboundRtpStreamStats.framesDecoded", "framesDecoded")}} - : A long integer value indicating the total number of frames of video which have been correctly decoded so far for this media source. This is the number of frames that would have been rendered if none were dropped. _Only valid for video streams._ - {{domxref("RTCInboundRtpStreamStats.lastPacketReceivedTimestamp", "lastPacketReceivedTimestamp")}} @@ -36,10 +34,6 @@ The statistics can be obtained by iterating the {{domxref("RTCStatsReport")}} re - : An integer totaling the number of RTP packets that could not be decrypted. These packets are not counted by {{domxref("RTCInboundRtpStreamStats.packetsDiscarded", "packetsDiscarded")}}. - {{domxref("RTCInboundRtpStreamStats.perDscpPacketsReceived", "perDscpPacketsReceived")}} - : A record of key-value pairs with strings as the keys mapped to 32-bit integer values, each indicating the total number of packets this receiver has received on this RTP stream from this source for each Differentiated Services Code Point (DSCP). -- {{domxref("RTCInboundRtpStreamStats.pliCount", "pliCount")}} - - : An integer specifying the number of times the receiver has notified the sender that some amount of encoded video data for one or more frames has been lost, using Picture Loss Indication (PLI) packets. This is only available for video streams. -- {{domxref("RTCInboundRtpStreamStats.qpSum", "qpSum")}} - - : A 64-bit value containing the sum of the QP values for every frame decoded by this RTP receiver. You can determine the average QP per frame by dividing this value by {{domxref("RTCInboundRtpStreamStats.framesDecoded", "framesDecoded")}}. _Valid only for video streams._ - {{domxref("RTCInboundRtpStreamStats.receiverId", "receiverId")}} - : A string indicating which identifies the {{domxref("RTCAudioReceiverStats")}} or {{domxref("RTCVideoReceiverStats")}} object associated with the stream's receiver. This ID is stable across multiple calls to `getStats()`. - {{domxref("RTCInboundRtpStreamStats.remoteId", "remoteId")}} @@ -65,35 +59,33 @@ These statistics are measured at the receiving end of an RTP stream, regardless - {{domxref("RTCInboundRtpStreamStats.jitter", "jitter")}} - : Packet jitter for this synchronizing source, measured in seconds. -### Standard fields included for all media types +### Local-only measurements + +These properties are computed locally, and are only available to the device receiving the media stream. +Their primary purpose is to examine the error resiliency of the connection, as they provide information about lost packets, lost frames, and how heavily compressed the data is. + +- {{domxref("RTCInboundRtpStreamStats.nackCount", "nackCount")}} + - : The number of times the receiver notified the sender that one or more RTP packets has been lost by sending a Negative ACKnowledgement (NACK, also called "Generic NACK") packet to the sender. This value is only available to the receiver. +- {{domxref("RTCInboundRtpStreamStats.qpSum", "qpSum")}} + - : A 64-bit value containing the sum of the QP values for every frame decoded by this RTP receiver to date on the video track described by this statistics object. + You can approximate the average QP per frame by dividing this value by {{domxref("RTCInboundRtpStreamStats.framesDecoded", "framesDecoded")}}, keeping in mind that codecs often vary the quantizer values even within frames. + Also keep in mind that the values of QP can vary from codec to codec, so this value is only potentially useful when compared against the same codec. + _Valid only for video streams._ + +### Common RTP stream statistics <!-- RTCRtpStreamStats --> - {{domxref("RTCInboundRtpStreamStats.codecId", "codecId")}} - : A string which uniquely identifies the object which was inspected to produce the {{domxref("RTCCodecStats")}} object associated with this {{Glossary("RTP")}} stream. - {{domxref("RTCInboundRtpStreamStats.kind", "kind")}} - - : A string whose value is `"audio"` if the associated {{domxref("MediaStreamTrack")}} is audio-only or `"video"` if the track contains video. This value will match that of the media type indicated by {{domxref("RTCCodecStats.codec")}}, as well as the track's {{domxref("MediaStreamTrack.kind", "kind")}} property. Previously called `mediaType`. + - : A string indicating whether the {{domxref("MediaStreamTrack")}} associated with the stream is an audio or a video track. - {{domxref("RTCInboundRtpStreamStats.ssrc", "ssrc")}} - - : The 32-bit integer which identifies the source of the RTP packets this `RTCRtpStreamStats` object covers. This value is generated per the {{RFC(3550)}} specification. -- {{domxref("RTCInboundRtpStreamStats.trackId", "trackId")}} - - : A string which uniquely identifies the {{domxref("RTCMediaStreamTrackStats")}} object representing the associated {{domxref("MediaStreamTrack")}}. This is _not_ the same as the value of {{domxref("MediaStreamTrack.id")}}. + - : The 32-bit integer which identifies the source of the RTP packets this object provides. + This value is generated per the {{RFC(3550)}} specification. - {{domxref("RTCInboundRtpStreamStats.transportId", "transportId")}} - : A string uniquely identifying the object which was inspected to produce the {{domxref("RTCTransportStats")}} object associated with this RTP stream. -### Local-only measurements - -These properties are computed locally, and are only available to the device receiving the media stream. -Their primary purpose is to examine the error resiliency of the connection, as they provide information about lost packets, lost frames, and how heavily compressed the data is. - -- {{domxref("RTCInboundRtpStreamStats.firCount", "firCount")}} - - : A count of the total number of Full Intra Request (FIR) packets received by the sender. This statistic is only available to the device which is receiving the stream and is only available for video tracks. A FIR packet is sent by the receiving end of the stream when it falls behind or has lost packets and is unable to continue decoding the stream; the sending end of the stream receives the FIR packet and responds by sending a full frame instead of a delta frame, thereby letting the receiver "catch up." The higher this number is, the more often a problem of this nature arose, which can be a sign of network congestion or an overburdened receiving device. -- {{domxref("RTCInboundRtpStreamStats.nackCount", "nackCount")}} - - : The number of times the receiver notified the sender that one or more RTP packets has been lost by sending a Negative ACKnowledgement (NACK, also called "Generic NACK") packet to the sender. This value is only available to the receiver. -- {{domxref("RTCInboundRtpStreamStats.pliCount", "pliCount")}} - - : The number of times the receiving end of the stream sent a Picture Loss Indication (PLI) packet to the sender, indicating that it has lost some amount of encoded video data for one or more frames. Only the receiver has this value, and it's only valid for video tracks. -- {{domxref("RTCInboundRtpStreamStats.qpSum", "qpSum")}} - - : The sum of the Quantization Parameter (QP) values associated with every frame received to date on the video track described by this `RTCRtpStreamStats` object. In general, the higher this number is, the more heavily compressed the video track was. Combined with {{domxref("RTCReceivedRtpStreamStats.framesDecoded")}} or {{domxref("RTCInboundRtpStreamStats.framesEncoded")}}, you can approximate the average QP over those frames, keeping in mind that codecs often vary the quantizer values even within frames. Also keep in mind that the values of QP can vary from codec to codec, so this value is only potentially useful when compared against the same codec. - ### Common instance properties The following properties are common to all WebRTC statistics objects. diff --git a/files/en-us/web/api/rtcinboundrtpstreamstats/kind/index.md b/files/en-us/web/api/rtcinboundrtpstreamstats/kind/index.md new file mode 100644 index 000000000000000..e4436a09e45554e --- /dev/null +++ b/files/en-us/web/api/rtcinboundrtpstreamstats/kind/index.md @@ -0,0 +1,31 @@ +--- +title: "RTCInboundRtpStreamStats: kind property" +short-title: kind +slug: Web/API/RTCInboundRtpStreamStats/kind +page-type: web-api-instance-property +browser-compat: api.RTCStatsReport.type_inbound-rtp.kind +--- + +{{APIRef("WebRTC")}} + +The **`kind`** property of the {{domxref("RTCInboundRtpStreamStats")}} dictionary is a string indicating whether the described {{Glossary("RTP")}} stream contains audio or video media. + +This string will always be the same as the {{domxref("MediaStreamTrack.kind", "kind")}} of the {{domxref("MediaStreamTrack")}} object carried by the stream. +It will also match the media type of the codec associated with this statistics objects (i.e. the MIME type of the associated codec's {{domxref("RTCCodecStats.mimeType")}} property). + +## Value + +The kind is always one of: + +- `"audio"` + - : The stream contains audio media. +- `"video"` + - : The stream contains video media. + +## Specifications + +{{Specifications}} + +## Browser compatibility + +{{Compat}} diff --git a/files/en-us/web/api/rtcinboundrtpstreamstats/plicount/index.md b/files/en-us/web/api/rtcinboundrtpstreamstats/plicount/index.md deleted file mode 100644 index 1ffa1af428f90da..000000000000000 --- a/files/en-us/web/api/rtcinboundrtpstreamstats/plicount/index.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: "RTCInboundRtpStreamStats: pliCount property" -short-title: pliCount -slug: Web/API/RTCInboundRtpStreamStats/pliCount -page-type: web-api-instance-property -browser-compat: api.RTCInboundRtpStreamStats.pliCount ---- - -{{APIRef("WebRTC")}} - -The **`pliCount`** property of the -{{domxref("RTCInboundRtpStreamStats")}} dictionary states the number of times the -{{domxref("RTCRtpReceiver")}} described by these statistics sent a **Picture -Loss Indication** (**PLI**) packet to the sender. - -A PLI -packet indicates that some amount of encoded video data has been lost for one or more -frames. - -## Value - -An integer value indicating the number of times a PLI packet was sent by the -{{domxref("RTCRtpReceiver")}} to the sender. These are sent by the receiver's decoder to -notify the encoder (the sender) that an undefined amount of coded video data, which may -span frame boundaries, has been lost. This information is only available for video -streams. - -This may trigger the sender to send a full frame in order to allow the receiver to -re-synchronize, since lost data may be an irrecoverable situation for decoding media. -However, the primary purpose of this message is to allow the sender to consider -techniques to mitigate network performance issues. This is often achieved by methods -such as increasing the compression, lowering resolution, or finding other ways to reduce -the bit rate of the stream. - -## Specifications - -{{Specifications}} - -## Browser compatibility - -{{Compat}} - -## See also - -- {{RFC(4585, "", "6.3.1")}}: Definition of "PLI messages" in the document _Extended - RTP Profile for Real-time Transport Control Protocol (RTCP)-Based Feedback - (RTP/AVPF)_. diff --git a/files/en-us/web/api/rtcinboundrtpstreamstats/ssrc/index.md b/files/en-us/web/api/rtcinboundrtpstreamstats/ssrc/index.md new file mode 100644 index 000000000000000..c61e282d66bbab8 --- /dev/null +++ b/files/en-us/web/api/rtcinboundrtpstreamstats/ssrc/index.md @@ -0,0 +1,41 @@ +--- +title: "RTCInboundRtpStreamStats: ssrc property" +short-title: ssrc +slug: Web/API/RTCInboundRtpStreamStats/ssrc +page-type: web-api-instance-property +browser-compat: api.RTCStatsReport.type_inbound-rtp.ssrc +--- + +{{APIRef("WebRTC")}} + +The **`ssrc`** property of the {{domxref("RTCInboundRtpStreamStats")}} dictionary contains a positive integer value that identifies the synchronization source (SSRC) of this stream of {{Glossary("RTP")}} packets. + +A source might be something like a microphone, or a mixer application that combines multiple sources. +All packets from the same source share the same time source and sequence space, and so can be ordered relative to each other. +Note that two streams with the same `ssrc` value refer to the same source. + +## Value + +A positive 32-bit integer uniquely identifying the SSRC of the RTP packets whose statistics are covered by this {{domxref("RTCInboundRtpStreamStats")}} object. + +The manner in which SSRC values are generated is not mandated by the specification, although it does make recommendations. +You should not make any assumptions based on the value of `ssrc` other than that any two objects with the same `ssrc` value refer to the same source. +See {{RFC("3550", "", "8")}} for additional information about `ssrc`. + +> [!NOTE] +> The specification includes an example that generates values for `ssrc` using MD5. +> While not part of the standard, exactly, it is a good mechanism that may be used by some browsers; others may use other methods, such as random number generators. +> _Do not_ rely upon these values meaning anything other than "these objects are associated with the same source." + +## Specifications + +{{Specifications}} + +## Browser compatibility + +{{Compat}} + +## See also + +- {{domxref("RTCRtpReceiver.getSynchronizationSources()")}} +- {{domxref("RTCEncodedAudioFrame.getMetadata()")}} diff --git a/files/en-us/web/api/rtcinboundrtpstreamstats/trackid/index.md b/files/en-us/web/api/rtcinboundrtpstreamstats/trackid/index.md deleted file mode 100644 index 6288374da7b7574..000000000000000 --- a/files/en-us/web/api/rtcinboundrtpstreamstats/trackid/index.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: "RTCInboundRtpStreamStats: trackId property" -short-title: trackId -slug: Web/API/RTCInboundRtpStreamStats/trackId -page-type: web-api-instance-property -status: - - deprecated -browser-compat: api.RTCInboundRtpStreamStats.trackId ---- - -{{APIRef("WebRTC")}} {{Deprecated_Header}} - -The **`trackId`** property of the {{domxref("RTCInboundRtpStreamStats")}} dictionary indicates the {{domxref("RTCInboundRtpStreamStats.id", "id")}} of the {{domxref("RTCReceiverAudioTrackAttachmentStats")}} or {{domxref("RTCReceiverVideoTrackAttachmentStats")}} object representing the {{domxref("MediaStreamTrack")}} which is receiving the incoming media. - -## Value - -A string containing the ID of the {{domxref("RTCReceiverAudioTrackAttachmentStats")}} or {{domxref("RTCReceiverVideoTrackAttachmentStats")}} object representing the track which is receiving the media from this RTP session. - -## Specifications - -{{Specifications}} - -## Browser compatibility - -{{Compat}} diff --git a/files/en-us/web/api/rtcinboundrtpstreamstats/transportid/index.md b/files/en-us/web/api/rtcinboundrtpstreamstats/transportid/index.md new file mode 100644 index 000000000000000..9c8c56c213872bd --- /dev/null +++ b/files/en-us/web/api/rtcinboundrtpstreamstats/transportid/index.md @@ -0,0 +1,25 @@ +--- +title: "RTCInboundRtpStreamStats: transportId property" +short-title: transportId +slug: Web/API/RTCInboundRtpStreamStats/transportId +page-type: web-api-instance-property +browser-compat: api.RTCStatsReport.type_inbound-rtp.transportId +--- + +{{APIRef("WebRTC")}} + +The **`transportId`** property of the {{domxref("RTCInboundRtpStreamStats")}} dictionary is a string that uniquely identifies the associated {{domxref("RTCTransportStats")}} statistics object for this RTP stream's underlying transport. + +`RTCInboundRtpStreamStats` and `RTCTransportStats` objects are correlated by iterating the {{domxref("RTCStatsReport")}} to find the statistics objects where `RTCInboundRtpStreamStats.transportId` is equal to {{domxref("RTCTransportStats.id")}}. + +## Value + +A string that contains the {{domxref("RTCTransportStats.id","id")}} of the object that was inspected to produce the {{domxref("RTCTransportStats")}} object associated with this RTP stream. + +## Specifications + +{{Specifications}} + +## Browser compatibility + +{{Compat}} diff --git a/files/en-us/web/api/rtcoutboundrtpstreamstats/codecid/index.md b/files/en-us/web/api/rtcoutboundrtpstreamstats/codecid/index.md new file mode 100644 index 000000000000000..a095fb6957bc158 --- /dev/null +++ b/files/en-us/web/api/rtcoutboundrtpstreamstats/codecid/index.md @@ -0,0 +1,25 @@ +--- +title: "RTCOutboundRtpStreamStats: codecId property" +short-title: codecId +slug: Web/API/RTCOutboundRtpStreamStats/codecId +page-type: web-api-instance-property +browser-compat: api.RTCStatsReport.type_outbound-rtp.codecId +--- + +{{APIRef("WebRTC")}} + +The **`codecId`** property of the {{domxref("RTCOutboundRtpStreamStats")}} dictionary is a string that uniquely identifies the object that was inspected to produce the data in the {{domxref("RTCCodecStats")}} for the {{Glossary("RTP")}} stream. + +`RTCOutboundRtpStreamStats` and `RTCCodecStats` objects are correlated by iterating the {{domxref("RTCStatsReport")}} to find the statistics objects where `RTCOutboundRtpStreamStats.codecId` is equal to {{domxref("RTCCodecStats.id")}}. + +## Value + +A string that contains the {{domxref("RTCCodecStats.id","id")}} of the object that was inspected to produce the {{domxref("RTCCodecStats")}} object associated with this RTP stream. + +## Specifications + +{{Specifications}} + +## Browser compatibility + +{{Compat}} diff --git a/files/en-us/web/api/rtcoutboundrtpstreamstats/fircount/index.md b/files/en-us/web/api/rtcoutboundrtpstreamstats/fircount/index.md deleted file mode 100644 index 964f3ead45e5b99..000000000000000 --- a/files/en-us/web/api/rtcoutboundrtpstreamstats/fircount/index.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: "RTCOutboundRtpStreamStats: firCount property" -short-title: firCount -slug: Web/API/RTCOutboundRtpStreamStats/firCount -page-type: web-api-instance-property -browser-compat: api.RTCOutboundRtpStreamStats.firCount ---- - -{{APIRef("WebRTC")}} - -The **`firCount`** property of the -{{domxref("RTCOutboundRtpStreamStats")}} dictionary indicates the number of -**Full Intra Request** (**FIR**) that the remote -{{domxref("RTCRtpReceiver")}} has sent to this {{domxref("RTCRtpSender")}}. - -A FIR packet is sent when the receiver finds that it has fallen behind and needs to skip -frames in order to catch up; the sender should respond by sending a full frame instead -of a delta frame. - -Available only on video media. - -## Value - -An integer value indicating how many FIR packets have been received by the sender -during the current connection. This statistic is available only for video tracks. - -The receiver sends a FIR packet to the sender any time it falls behind or loses packets -and cannot decode the incoming stream any longer because of the lost data. This tells -the sender to send a full frame instead of a delta frame, so that the receiver can catch -up. - -The higher `firCount` is, the more often frames were dropped, which may be -an indication that the media's bit rate is too high for the available bandwidth, or that -the receiving device is overburdened and is therefore unable to process the incoming -data. - -## Specifications - -{{Specifications}} - -## Browser compatibility - -{{Compat}} diff --git a/files/en-us/web/api/rtcoutboundrtpstreamstats/index.md b/files/en-us/web/api/rtcoutboundrtpstreamstats/index.md index 88f40592f6e71f0..a9ca25b1da57859 100644 --- a/files/en-us/web/api/rtcoutboundrtpstreamstats/index.md +++ b/files/en-us/web/api/rtcoutboundrtpstreamstats/index.md @@ -13,22 +13,12 @@ The statistics can be obtained by iterating the {{domxref("RTCStatsReport")}} re ## Instance properties -<!-- he `RTCOutboundRtpStreamStats` dictionary includes the following properties in addition to those it inherits from {{domxref("RTCSentRtpStreamStats")}}, {{domxref("RTCRtpStreamStats")}}._ --> - - {{domxref("RTCOutboundRtpStreamStats.averageRtcpInterval", "averageRtcpInterval")}} - : A floating-point value indicating the average {{Glossary("RTCP")}} interval between two consecutive compound RTCP packets. -- {{domxref("RTCOutboundRtpStreamStats.firCount", "firCount")}} - - : An integer value which indicates the total number of Full Intra Request (FIR) packets which this {{domxref("RTCRtpSender")}} has sent to the remote {{domxref("RTCRtpReceiver")}}. This is an indicator of how often the stream has lagged, requiring frames to be skipped in order to catch up. _Valid only for video streams._ - {{domxref("RTCOutboundRtpStreamStats.framesEncoded", "framesEncoded")}} - : The number of frames that have been successfully encoded so far for sending on this RTP stream. _Only valid for video streams._ -- {{domxref("RTCOutboundRtpStreamStats.nackCount", "nackCount")}} - - : An integer value indicating the total number of Negative ACKnowledgement (NACK) packets this `RTCRtpSender` has received from the remote {{domxref("RTCRtpReceiver")}}. - {{domxref("RTCOutboundRtpStreamStats.perDscpPacketsSent", "perDscpPacketsSent")}} - : A record of key-value pairs with strings as the keys mapped to 32-bit integer values, each indicating the total number of packets this `RTCRtpSender` has transmitted for this source for each Differentiated Services Code Point (DSCP). -- {{domxref("RTCOutboundRtpStreamStats.pliCount", "pliCount")}} - - : An integer specifying the number of times the remote receiver has notified this `RTCRtpSender` that some amount of encoded video data for one or more frames has been lost, using Picture Loss Indication (PLI) packets. _Only available for video streams._ -- {{domxref("RTCOutboundRtpStreamStats.qpSum", "qpSum")}} - - : A 64-bit value containing the sum of the QP values for every frame encoded by this {{domxref("RTCRtpSender")}}. _Valid only for video streams._ - {{domxref("RTCOutboundRtpStreamStats.qualityLimitationDurations", "qualityLimitationDurations")}} {{experimental_inline}} - : A record mapping each of the quality limitation reasons in the {{domxref("RTCRemoteInboundRtpStreamStats")}} enumeration to a floating-point value indicating the number of seconds the stream has spent with its quality limited for that reason. - {{domxref("RTCOutboundRtpStreamStats.qualityLimitationReason", "qualityLimitationReason")}} {{experimental_inline}} @@ -52,6 +42,30 @@ The statistics can be obtained by iterating the {{domxref("RTCStatsReport")}} re - {{domxref("RTCOutboundRtpStreamStats.trackId", "trackId")}} - : The {{domxref("RTCOutboundRtpStreamStats.id", "id")}} of the {{domxref("RTCSenderAudioTrackAttachmentStats")}} or {{domxref("RTCSenderVideoTrackAttachmentStats")}} object containing the current track attachment to the {{domxref("RTCRtpSender")}} responsible for this stream. +### Local-only measurements + +These properties are computed locally, and are only available to the device receiving the media stream. +Their primary purpose is to examine the error resiliency of the connection, as they provide information about lost packets, lost frames, and how heavily compressed the data is. + +- {{domxref("RTCOutboundRtpStreamStats.nackCount", "nackCount")}} + - : An integer value indicating the total number of Negative ACKnowledgement (NACK) packets this `RTCRtpSender` has received from the remote {{domxref("RTCRtpReceiver")}}. +- {{domxref("RTCOutboundRtpStreamStats.qpSum", "qpSum")}} + - : A 64-bit value containing the sum of the QP values for every frame encoded by this {{domxref("RTCRtpSender")}}. + _Valid only for video streams._ + +### Common RTP stream statistics + +<!-- RTCRtpStreamStats --> + +- {{domxref("RTCOutboundRtpStreamStats.codecId", "codecId")}} {{optional_inline}} + - : A string that uniquely identifies the object that was inspected to produce the {{domxref("RTCCodecStats")}} object associated with this {{Glossary("RTP")}} stream. +- {{domxref("RTCOutboundRtpStreamStats.kind", "kind")}} + - : A string indicating whether the {{domxref("MediaStreamTrack")}} associated with the stream is an audio or a video track. +- {{domxref("RTCOutboundRtpStreamStats.ssrc", "ssrc")}} + - : A positive integer that identifies the SSRC of the RTP packets in this stream. +- {{domxref("RTCOutboundRtpStreamStats.transportId", "transportId")}} {{optional_inline}} + - : A string that uniquely identifies the object which was inspected to produce the {{domxref("RTCTransportStats")}} object associated with this RTP stream. + ### Common instance properties The following properties are common to all WebRTC statistics objects. diff --git a/files/en-us/web/api/rtcoutboundrtpstreamstats/kind/index.md b/files/en-us/web/api/rtcoutboundrtpstreamstats/kind/index.md new file mode 100644 index 000000000000000..1969d2264793e3d --- /dev/null +++ b/files/en-us/web/api/rtcoutboundrtpstreamstats/kind/index.md @@ -0,0 +1,31 @@ +--- +title: "RTCOutboundRtpStreamStats: kind property" +short-title: kind +slug: Web/API/RTCOutboundRtpStreamStats/kind +page-type: web-api-instance-property +browser-compat: api.RTCStatsReport.type_outbound-rtp.kind +--- + +{{APIRef("WebRTC")}} + +The **`kind`** property of the {{domxref("RTCOutboundRtpStreamStats")}} dictionary is a string indicating whether the described {{Glossary("RTP")}} stream contains audio or video media. + +This string will always be the same as the {{domxref("MediaStreamTrack.kind", "kind")}} of the {{domxref("MediaStreamTrack")}} object carried by the stream. +It will also match the media type of the codec associated with this statistics objects (i.e. the MIME type of the associated codec's {{domxref("RTCCodecStats.mimeType")}} property). + +## Value + +The kind is always one of: + +- `"audio"` + - : The stream contains audio media. +- `"video"` + - : The stream contains video media. + +## Specifications + +{{Specifications}} + +## Browser compatibility + +{{Compat}} diff --git a/files/en-us/web/api/rtcoutboundrtpstreamstats/plicount/index.md b/files/en-us/web/api/rtcoutboundrtpstreamstats/plicount/index.md deleted file mode 100644 index d080c7ca9ede2f9..000000000000000 --- a/files/en-us/web/api/rtcoutboundrtpstreamstats/plicount/index.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: "RTCOutboundRtpStreamStats: pliCount property" -short-title: pliCount -slug: Web/API/RTCOutboundRtpStreamStats/pliCount -page-type: web-api-instance-property -browser-compat: api.RTCOutboundRtpStreamStats.pliCount ---- - -{{APIRef("WebRTC")}} - -The **`pliCount`** property of the -{{domxref("RTCOutboundRtpStreamStats")}} dictionary states the number of times the -remote peer's {{domxref("RTCRtpReceiver")}} sent a **Picture Loss -Indication** (**PLI**) packet to the {{domxref("RTCRtpSender")}} -for which this object provides statistics. - -A PLI packet indicates that some -amount of encoded video data has been lost for one or more frames. - -## Value - -An integer value indicating the number of times a PLI packet was sent to this sender by -the remote peer's {{domxref("RTCRtpReceiver")}}. These are sent by the receiver's -decoder to notify the sender's encoder that an undefined amount of coded video data, -which may span frame boundaries, has been lost. - -> [!NOTE] -> This property is only used for video streams. - -## Usage notes - -Upon receiving a PLI packet, the sender may have responded by sending a full frame to -the remote peer to allow it to re-synchronize with the media. However, the primary -purpose of a PLI packet is to allow the `RTCRtpSender` for which this -`RTCOutboundRtpStreamStats` object provides statistics to consider techniques -to mitigate network performance issues. This is often achieved by methods such as -increasing the compression or lowering resolution, although the mechanisms available to -reduce the bit rate of the stream vary from codec to codec. - -## Specifications - -{{Specifications}} - -## Browser compatibility - -{{Compat}} - -## See also - -- {{RFC(4585, "", "6.3.1")}}: Definition of "PLI messages" in the document _Extended - RTP Profile for Real-time Transport Control Protocol (RTCP)-Based Feedback - (RTP/AVPF)_. diff --git a/files/en-us/web/api/rtcoutboundrtpstreamstats/ssrc/index.md b/files/en-us/web/api/rtcoutboundrtpstreamstats/ssrc/index.md new file mode 100644 index 000000000000000..1df1fe65a847281 --- /dev/null +++ b/files/en-us/web/api/rtcoutboundrtpstreamstats/ssrc/index.md @@ -0,0 +1,41 @@ +--- +title: "RTCOutboundRtpStreamStats: ssrc property" +short-title: ssrc +slug: Web/API/RTCOutboundRtpStreamStats/ssrc +page-type: web-api-instance-property +browser-compat: api.RTCStatsReport.type_outbound-rtp.ssrc +--- + +{{APIRef("WebRTC")}} + +The **`ssrc`** property of the {{domxref("RTCOutboundRtpStreamStats")}} dictionary contains a positive integer value that identifies the synchronization source (SSRC) of this stream of {{Glossary("RTP")}} packets. + +A source might be something like a microphone, or a mixer application that combines multiple sources. +All packets from the same source share the same time source and sequence space, and so can be ordered relative to each other. +Note that two streams with the same `ssrc` value refer to the same source. + +## Value + +A positive 32-bit integer uniquely identifying the SSRC of the RTP packets whose statistics are covered by this {{domxref("RTCOutboundRtpStreamStats")}} object. + +The manner in which SSRC values are generated is not mandated by the specification, although it does make recommendations. +You should not make any assumptions based on the value of `ssrc` other than that any two objects with the same `ssrc` value refer to the same source. +See {{RFC("3550", "", "8")}} for additional information about `ssrc`. + +> [!NOTE] +> The specification includes an example that generates values for `ssrc` using MD5. +> While not part of the standard, exactly, it is a good mechanism that may be used by some browsers; others may use other methods, such as random number generators. +> _Do not_ rely upon these values meaning anything other than "these objects are associated with the same source." + +## Specifications + +{{Specifications}} + +## Browser compatibility + +{{Compat}} + +## See also + +- {{domxref("RTCRtpReceiver.getSynchronizationSources()")}} +- {{domxref("RTCEncodedAudioFrame.getMetadata()")}} diff --git a/files/en-us/web/api/rtcoutboundrtpstreamstats/transportid/index.md b/files/en-us/web/api/rtcoutboundrtpstreamstats/transportid/index.md new file mode 100644 index 000000000000000..4f88d7f752e98cc --- /dev/null +++ b/files/en-us/web/api/rtcoutboundrtpstreamstats/transportid/index.md @@ -0,0 +1,25 @@ +--- +title: "RTCOutboundRtpStreamStats: transportId property" +short-title: transportId +slug: Web/API/RTCOutboundRtpStreamStats/transportId +page-type: web-api-instance-property +browser-compat: api.RTCStatsReport.type_outbound-rtp.transportId +--- + +{{APIRef("WebRTC")}} + +The **`transportId`** property of the {{domxref("RTCOutboundRtpStreamStats")}} dictionary is a string that uniquely identifies the associated {{domxref("RTCTransportStats")}} statistics object for this RTP stream's underlying transport. + +`RTCOutboundRtpStreamStats` and `RTCTransportStats` objects are correlated by iterating the {{domxref("RTCStatsReport")}} to find the statistics objects where `RTCOutboundRtpStreamStats.transportId` is equal to {{domxref("RTCTransportStats.id")}}. + +## Value + +A string that contains the {{domxref("RTCTransportStats.id","id")}} of the object that was inspected to produce the {{domxref("RTCTransportStats")}} object associated with this RTP stream. + +## Specifications + +{{Specifications}} + +## Browser compatibility + +{{Compat}} diff --git a/files/en-us/web/api/rtcrtpstreamstats/codecid/index.md b/files/en-us/web/api/rtcrtpstreamstats/codecid/index.md deleted file mode 100644 index d2e515c5bfbc69b..000000000000000 --- a/files/en-us/web/api/rtcrtpstreamstats/codecid/index.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: "RTCRtpStreamStats: codecId property" -short-title: codecId -slug: Web/API/RTCRtpStreamStats/codecId -page-type: web-api-instance-property -browser-compat: api.RTCRtpStreamStats.codecId ---- - -{{APIRef("WebRTC")}} - -The {{domxref("RTCRtpStreamStats")}} dictionary's -**`codecId`** property is a string which uniquely identifies -the object that was inspected to produce the data in the {{domxref("RTCCodecStats")}} -for the {{Glossary("RTP")}} stream. - -## Value - -A string which uniquely identifies the object from which the contents -of the stream's {{domxref("RTCCodecStats")}} are derived. - -## Specifications - -{{Specifications}} - -## Browser compatibility - -{{Compat}} diff --git a/files/en-us/web/api/rtcrtpstreamstats/fircount/index.md b/files/en-us/web/api/rtcrtpstreamstats/fircount/index.md deleted file mode 100644 index a7ebc447518f8af..000000000000000 --- a/files/en-us/web/api/rtcrtpstreamstats/fircount/index.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: "RTCRtpStreamStats: firCount property" -short-title: firCount -slug: Web/API/RTCRtpStreamStats/firCount -page-type: web-api-instance-property -browser-compat: api.RTCRtpStreamStats.firCount ---- - -{{APIRef("WebRTC")}} - -The **`firCount`** property of the -{{domxref("RTCRtpStreamStats")}} dictionary indicates the number of **Full Intra -Request** (**FIR**) packets have been sent by the receiver to -the sender. - -This is a measure of how often the stream falls behind and has to -skip frames in order to catch up. - -## Value - -An integer value indicating how many FIR packets have been received by the sender -during the current connection. This value is available only on receivers for video -tracks. - -The receiver sends a FIR packet to the sender any time it falls behind or loses packets -and cannot decode the incoming stream any longer because of the lost data. This tells -the sender to send a full frame instead of a delta frame, so that the receiver can catch -up. - -The higher `firCount` is, the more often frames were dropped, which may be -an indication that the media's bit rate is too high for the available bandwidth, or that -the receiving device is overburdened and is therefore unable to process the incoming -data. - -## Specifications - -{{Specifications}} - -## Browser compatibility - -{{Compat}} diff --git a/files/en-us/web/api/rtcrtpstreamstats/index.md b/files/en-us/web/api/rtcrtpstreamstats/index.md deleted file mode 100644 index 5964be20d354f1a..000000000000000 --- a/files/en-us/web/api/rtcrtpstreamstats/index.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: RTCRtpStreamStats -slug: Web/API/RTCRtpStreamStats -page-type: web-api-interface -browser-compat: api.RTCRtpStreamStats ---- - -{{APIRef("WebRTC")}} - -The **`RTCRtpStreamStats`** dictionary is returned by the {{domxref("RTCPeerConnection.getStats()")}}, {{domxref("RTCRtpSender.getStats()")}}, and {{domxref("RTCRtpReceiver.getStats()")}} methods to provide detailed statistics about WebRTC connectivity. - -While the dictionary has a base set of properties that are present in each of these cases, there are also additional properties added depending on which interface the method is called on. - -`RTCRtpStreamStats` is the base class for all RTP-related statistics reports. - -> [!NOTE] -> This interface was called `RTCRTPStreamStats` until a specification update in the spring of 2017. -> Check the [Browser compatibility](#browser_compatibility) table to know if and when the name change was implemented in specific browsers. - -## Instance properties - -### Standard fields included for all media types - -- {{domxref("RTCRtpStreamStats.codecId", "codecId")}} - - : A string which uniquely identifies the object which was inspected to produce the {{domxref("RTCCodecStats")}} object associated with this {{Glossary("RTP")}} stream. -- {{domxref("RTCRtpStreamStats.kind", "kind")}} - - : A string whose value is `"audio"` if the associated {{domxref("MediaStreamTrack")}} is audio-only or `"video"` if the track contains video. This value will match that of the media type indicated by {{domxref("RTCCodecStats.codec")}}, as well as the track's {{domxref("MediaStreamTrack.kind", "kind")}} property. Previously called `mediaType`. -- {{domxref("RTCRtpStreamStats.ssrc", "ssrc")}} - - : The 32-bit integer which identifies the source of the RTP packets this `RTCRtpStreamStats` object covers. This value is generated per the {{RFC(3550)}} specification. -- {{domxref("RTCRtpStreamStats.trackId", "trackId")}} - - : A string which uniquely identifies the {{domxref("RTCMediaStreamTrackStats")}} object representing the associated {{domxref("MediaStreamTrack")}}. This is _not_ the same as the value of {{domxref("MediaStreamTrack.id")}}. -- {{domxref("RTCRtpStreamStats.transportId", "transportId")}} - - : A string uniquely identifying the object which was inspected to produce the {{domxref("RTCTransportStats")}} object associated with this RTP stream. - -### Common instance properties - -The following properties are common to all WebRTC statistics objects. - -<!-- RTCStats --> - -- `id - - : A string that uniquely identifies the object that is being monitored to produce this set of statistics. -- `timestamp` - - : A {{domxref("DOMHighResTimeStamp")}} object indicating the time at which the sample was taken for this statistics object. -- `type` - - : A string that indicates the type of statistics that the object contains. - -### Local-only measurements - -These properties are computed locally, and are only available to the device receiving the media stream. Their primary purpose is to examine the error resiliency of the connection, as they provide information about lost packets, lost frames, and how heavily compressed the data is. - -- {{domxref("RTCRtpStreamStats.firCount", "firCount")}} - - : A count of the total number of Full Intra Request (FIR) packets received by the sender. This statistic is only available to the device which is receiving the stream and is only available for video tracks. A FIR packet is sent by the receiving end of the stream when it falls behind or has lost packets and is unable to continue decoding the stream; the sending end of the stream receives the FIR packet and responds by sending a full frame instead of a delta frame, thereby letting the receiver "catch up." The higher this number is, the more often a problem of this nature arose, which can be a sign of network congestion or an overburdened receiving device. -- {{domxref("RTCRtpStreamStats.nackCount", "nackCount")}} - - : The number of times the receiver notified the sender that one or more RTP packets has been lost by sending a Negative ACKnowledgement (NACK, also called "Generic NACK") packet to the sender. This value is only available to the receiver. -- {{domxref("RTCRtpStreamStats.pliCount", "pliCount")}} - - : The number of times the receiving end of the stream sent a Picture Loss Indication (PLI) packet to the sender, indicating that it has lost some amount of encoded video data for one or more frames. Only the receiver has this value, and it's only valid for video tracks. -- {{domxref("RTCRtpStreamStats.qpSum", "qpSum")}} - - : The sum of the Quantization Parameter (QP) values associated with every frame received to date on the video track described by this `RTCRtpStreamStats` object. In general, the higher this number is, the more heavily compressed the video track was. Combined with {{domxref("RTCReceivedRtpStreamStats.framesDecoded")}} or {{domxref("RTCSentRtpStreamStats.framesEncoded")}}, you can approximate the average QP over those frames, keeping in mind that codecs often vary the quantizer values even within frames. Also keep in mind that the values of QP can vary from codec to codec, so this value is only potentially useful when compared against the same codec. - -## Specifications - -{{Specifications}} - -## Browser compatibility - -{{Compat}} diff --git a/files/en-us/web/api/rtcrtpstreamstats/kind/index.md b/files/en-us/web/api/rtcrtpstreamstats/kind/index.md deleted file mode 100644 index eb168df8fb39491..000000000000000 --- a/files/en-us/web/api/rtcrtpstreamstats/kind/index.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: "RTCRtpStreamStats: kind property" -short-title: kind -slug: Web/API/RTCRtpStreamStats/kind -page-type: web-api-instance-property -browser-compat: api.RTCRtpStreamStats.kind ---- - -{{APIRef("WebRTC")}} - -The **`kind`** property of the -{{domxref("RTCRtpStreamStats")}} dictionary is a string indicating whether the -described {{Glossary("RTP")}} stream contains audio or video media. - -Its value -is always either `"audio"` or `"video"`. - -This property was previously called `mediaType`. The name was changed in the -specification in February, 2018. See [Browser compatibility](#browser_compatibility) below to -determine how this affects the browsers you're targeting. - -## Value - -A string whose value is `"audio"` if the track whose -statistics are given by the `RTCRtpStreamStats` object contains audio, or -`"video"` if the track contains video media. - -This string will always be the same as the one provided by the associated -{{domxref("MediaStreamTrack")}} object's {{domxref("MediaStreamTrack.kind", "kind")}} -property. It will also match the statistics object's {{domxref("RTCCodecStats.codec")}} -property's media type. - -## Specifications - -{{Specifications}} - -## Browser compatibility - -{{Compat}} diff --git a/files/en-us/web/api/rtcrtpstreamstats/nackcount/index.md b/files/en-us/web/api/rtcrtpstreamstats/nackcount/index.md deleted file mode 100644 index 088b9f88fdb955c..000000000000000 --- a/files/en-us/web/api/rtcrtpstreamstats/nackcount/index.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: "RTCRtpStreamStats: nackCount property" -short-title: nackCount -slug: Web/API/RTCRtpStreamStats/nackCount -page-type: web-api-instance-property -browser-compat: api.RTCRtpStreamStats.nackCount ---- - -{{APIRef("WebRTC")}} - -The **`nackCount`** property of the -{{domxref("RTCRtpStreamStats")}} dictionary is a numeric value indicating the number -of times the receiver sent a **NACK packet** to the sender. - -A NACK -(Negative ACKnowledgement, also called "Generic NACK") packet tells the sender that one -or more of the {{Glossary("RTP")}} packets it sent were lost in transport. - -## Value - -An integer value indicating how many times the receiver sent a NACK packet to the -sender after detecting that one or more packets were lost during transport. - -> [!NOTE] -> This value is only available on the receiver. - -## Specifications - -{{Specifications}} - -## Browser compatibility - -{{Compat}} diff --git a/files/en-us/web/api/rtcrtpstreamstats/plicount/index.md b/files/en-us/web/api/rtcrtpstreamstats/plicount/index.md deleted file mode 100644 index 434fa36ebe71fdf..000000000000000 --- a/files/en-us/web/api/rtcrtpstreamstats/plicount/index.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: "RTCRtpStreamStats: pliCount property" -short-title: pliCount -slug: Web/API/RTCRtpStreamStats/pliCount -page-type: web-api-instance-property -browser-compat: api.RTCRtpStreamStats.pliCount ---- - -{{APIRef("WebRTC")}} - -The **`pliCount`** property of the -{{domxref("RTCRtpStreamStats")}} dictionary states the number of times the stream's -receiving end sent a **Picture Loss Indication** (**PLI**) -packet to the sender. - -A PLI packet indicates that some amount of encoded video -data has been lost for one or more frames. - -## Value - -An integer value indicating the number of times a PLI packet was sent by the stream's -receiver to the sender. - -A PLI message is used by video decoders (running on the receiving end of the stream) to -notify the encoder (the sender) that an undefined amount of coded video data, which may -span frame boundaries, has been lost. - -This may trigger the sender to send a full frame in order to allow the receiver to -re-synchronize, since lost data may be an irrecoverable situation for decoding media. -However, the primary purpose of this message is to allow the sender to consider -techniques to mitigate network performance issues. This is often achieved by methods -such as increasing the compression, lowering resolution, or finding other ways to reduce -the bit rate of the stream. - -> [!NOTE] -> This value is only available on the receiver, and only for -> video media. - -## Specifications - -{{Specifications}} - -## Browser compatibility - -{{Compat}} - -## See also - -- {{RFC(4585, "", "6.3.1")}}: Definition of "PLI messages" in the document _Extended - RTP Profile for Real-time Transport Control Protocol (RTCP)-Based Feedback - (RTP/AVPF)_. diff --git a/files/en-us/web/api/rtcrtpstreamstats/qpsum/index.md b/files/en-us/web/api/rtcrtpstreamstats/qpsum/index.md deleted file mode 100644 index 4e49b936e7d2409..000000000000000 --- a/files/en-us/web/api/rtcrtpstreamstats/qpsum/index.md +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: "RTCRtpStreamStats: qpSum property" -short-title: qpSum -slug: Web/API/RTCRtpStreamStats/qpSum -page-type: web-api-instance-property -browser-compat: api.RTCRtpStreamStats.qpSum ---- - -{{APIRef("WebRTC")}} - -The **`qpSum`** property of the -{{domxref("RTCRtpStreamStats")}} dictionary is a value generated by adding the -**Quantization Parameter** (**QP**) values for every frame -sent or received to date on the video track corresponding to this -`RTCRtpStreamStats` object. - -In general, the higher this number is, -the more heavily compressed the video data is. - -## Value - -An unsigned 64-bit integer value which indicates the sum of the quantization parameter -(QP) value for every frame sent or received so far on the track described by the -{{domxref("RTCRtpStreamStats")}} object. Since the value of QP is typically larger to -indicate higher compression factors, the larger this sum is, the more heavily compressed -the stream generally has been. - -> [!NOTE] -> This value is only available for video media. - -## Usage notes - -[Quantization](https://en.wikipedia.org/wiki/Quantization) is the process of applying lossy compression -to a range of values, resulting in a single **quantum value**. This value -takes the place of the range of values, thereby reducing the number of different values -that appear in the overall data set, making the data more compressible. The quantization -process and the amount of compression can be controlled using one or more parameters. - -It's important to keep in mind that the value of QP can change periodically—even every -frame—so it's difficult to know for certain how substantial the compression is. The best -you can do is make an estimate. You can, for example, use the value of -{{domxref("RTCReceivedRtpStreamStats.framesDecoded")}} if receiving the media or -{{domxref("RTCSentRtpStreamStats.framesEncoded")}} if sending it to get the number of -frames handled so far, and compute an average from there. See [Calculating average quantization](#calculating_average_quantization) below for a function that does this. - -Also, the exact meaning of the QP value depends on the {{Glossary("codec")}} being -used. For example, for the VP8 codec, the QP value can be anywhere from 1 to 127 and is -found in the frame header element `"y_ac_qi"`, whose value is defined in -{{RFC(6386, "", "19.2")}}. H.264 uses a QP which ranges from 0 to 51; in this case, it's an -index used to derive a scaling matrix used during the quantization process. -Additionally, QP is not likely to be the only parameter the codec uses to adjust the -compression. See the individual codec specifications for details. - -## Examples - -### Calculating average quantization - -The `calculateAverageQP()` function shown below computes the average QP for -the given {{domxref("RTCRtpStreamStats")}} object, returning 0 if the object doesn't -describe an RTP stream. - -```js -function calculateAverageQP(stats) { - let frameCount = 0; - - switch (stats.type) { - case "inbound-rtp": - case "remote-inbound-rtp": - frameCount = stats.framesDecoded; - break; - case "outbound-rtp": - case "remote-outbound-rtp": - frameCount = stats.framesEncoded; - break; - default: - return 0; - } - - return status.qpSum / frameCount; -} -``` - -## Specifications - -{{Specifications}} - -## Browser compatibility - -{{Compat}} diff --git a/files/en-us/web/api/rtcrtpstreamstats/ssrc/index.md b/files/en-us/web/api/rtcrtpstreamstats/ssrc/index.md deleted file mode 100644 index e606c276ec75b59..000000000000000 --- a/files/en-us/web/api/rtcrtpstreamstats/ssrc/index.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: "RTCRtpStreamStats: ssrc property" -short-title: ssrc -slug: Web/API/RTCRtpStreamStats/ssrc -page-type: web-api-instance-property -browser-compat: api.RTCRtpStreamStats.ssrc ---- - -{{APIRef("WebRTC")}} - -The {{domxref("RTCRtpStreamStats")}} dictionary's -**`ssrc`** property provides the Synchronization Source -(SSRC), an integer which uniquely identifies the source of the {{Glossary("RTP")}} -packets whose statistics are covered by the {{domxref("RTCStatsReport")}} that -includes this `RTCRtpStreamStats` dictionary. - -## Value - -The Synchronization Source (SSRC) is a 32-bit integer uniquely identifying the source -of the RTP packets whose statistics are covered by the {{domxref("RTCStatsReport")}} -object of which this `RTCRtpStreamStats` object is a component. - -The manner in which these values are generated is not mandated by the specification, -although it does make recommendations. You should not make any assumptions based on the -value of `ssrc` other than that any two objects with the same -`ssrc` value refer to the same source. See {{RFC("3550", "", "8")}} for -additional information about `ssrc`. - -> [!NOTE] -> The specification includes an example that generates values -> for `ssrc` using MD5. While not part of the standard, exactly, it is a good -> mechanism that may be used by some browsers; others may use other methods, such as -> random number generators. _Do not_ rely upon these values meaning anything -> other than "these objects are associated with the same source." - -## Specifications - -{{Specifications}} - -## Browser compatibility - -{{Compat}} diff --git a/files/en-us/web/api/rtcrtpstreamstats/trackid/index.md b/files/en-us/web/api/rtcrtpstreamstats/trackid/index.md deleted file mode 100644 index 63e2a99dc9b2fb0..000000000000000 --- a/files/en-us/web/api/rtcrtpstreamstats/trackid/index.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: "RTCRtpStreamStats: trackId property" -short-title: trackId -slug: Web/API/RTCRtpStreamStats/trackId -page-type: web-api-instance-property -browser-compat: api.RTCRtpStreamStats.trackId ---- - -{{APIRef("WebRTC")}} - -The {{domxref("RTCRtpStreamStats")}} dictionary's -**`trackId`** property is a string which uniquely identifies -the {{domxref("RTCMediaStreamTrackStats")}} object which contains the track statistics -for the {{domxref("MediaStreamTrack")}} for which statistics are provided in this -object. - -## Value - -A string which uniquely identifies the -{{domxref("RTCMediaStreamTrackStats")}} object that provides statistics for the track -for which statistics are being collected by this {{domxref("RTCStatsReport")}}. - -> [!NOTE] -> This value is _not_ the same as the value of -> {{domxref("MediaStreamTrack.id")}}. - -## Specifications - -{{Specifications}} - -## Browser compatibility - -{{Compat}} diff --git a/files/en-us/web/api/rtcrtpstreamstats/transportid/index.md b/files/en-us/web/api/rtcrtpstreamstats/transportid/index.md deleted file mode 100644 index a3d8707897d3235..000000000000000 --- a/files/en-us/web/api/rtcrtpstreamstats/transportid/index.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: "RTCRtpStreamStats: transportId property" -short-title: transportId -slug: Web/API/RTCRtpStreamStats/transportId -page-type: web-api-instance-property -browser-compat: api.RTCRtpStreamStats.transportId ---- - -{{APIRef("WebRTC")}} - -The {{domxref("RTCRtpStreamStats")}} dictionary's -**`transportId`** property is a string which uniquely -identifies the object from which the statistics contained in the -{{domxref("RTCTransportStats")}} properties in the -{{domxref("RTCStatsReport")}}. - -## Value - -A string uniquely identifying the source of the statistics contained -the {{domxref("RTCTransportStats")}} properties in the {{domxref("RTCStatsReport")}}. - -## Specifications - -{{Specifications}} - -## Browser compatibility - -{{Compat}} diff --git a/files/en-us/web/api/serial/getports/index.md b/files/en-us/web/api/serial/getports/index.md index fcae0e2ed57c67a..3cd0d2f4a3f3b25 100644 --- a/files/en-us/web/api/serial/getports/index.md +++ b/files/en-us/web/api/serial/getports/index.md @@ -29,7 +29,9 @@ A {{jsxref("Promise")}} that resolves with an array of {{domxref("SerialPort")}} ### Exceptions - `SecurityError` {{domxref("DOMException")}} - - : The returned `Promise` rejects with this error if a [Permissions Policy](/en-US/docs/Web/HTTP/Permissions_Policy) blocks the use of this feature or a user permission prompt was denied. + - : The returned `Promise` rejects with this error in either of the following situations: + - A {{httpheader('Permissions-Policy/serial','serial')}} [Permissions Policy](/en-US/docs/Web/HTTP/Permissions_Policy) blocks the use of this feature. + - A user permission prompt was denied. ## Examples diff --git a/files/en-us/web/api/serial/index.md b/files/en-us/web/api/serial/index.md index 46448f4138ffc06..1a5f68bb3219438 100644 --- a/files/en-us/web/api/serial/index.md +++ b/files/en-us/web/api/serial/index.md @@ -17,9 +17,7 @@ The `Serial` interface of the [Web Serial API](/en-US/docs/Web/API/Web_Serial_AP - {{domxref("Serial.requestPort()")}} {{Experimental_Inline}} - - : Returns a {{jsxref("Promise")}} that resolves with an instance of {{domxref("SerialPort")}} representing the device chosen by the user or rejects if no device was selected. - - This method must be called with user activation. + - : Returns a {{jsxref("Promise")}} that resolves with an instance of {{domxref("SerialPort")}} representing the device chosen by the user. This method must be called via [transient activation](/en-US/docs/Glossary/Transient_activation). - {{domxref("Serial.getPorts()")}} {{Experimental_Inline}} - : Returns a {{jsxref("Promise")}} that resolves with an array of {{domxref("SerialPort")}} objects representing serial ports connected to diff --git a/files/en-us/web/api/serial/requestport/index.md b/files/en-us/web/api/serial/requestport/index.md index 2c3d47e483a15ca..59773fc8ad196b6 100644 --- a/files/en-us/web/api/serial/requestport/index.md +++ b/files/en-us/web/api/serial/requestport/index.md @@ -10,7 +10,13 @@ browser-compat: api.Serial.requestPort {{APIRef("Web Serial API")}}{{SecureContext_Header}}{{SeeCompatTable}} -The **`Serial.requestPort()`** method of the {{domxref("Serial")}} interface returns a {{jsxref("Promise")}} that resolves with an instance of {{domxref("SerialPort")}} representing the device chosen by the user or rejects if no device was selected. +The **`Serial.requestPort()`** method of the {{domxref("Serial")}} interface presents the user with a dialog asking them to select a serial device to connect to. It returns a {{jsxref("Promise")}} that resolves with an instance of {{domxref("SerialPort")}} representing the device chosen by the user. + +## Description + +When the user first visits a site it will not have permission to access any serial devices. A site must first call `requestPort()` to prompt the user to select which device the site should be allowed to control. + +This method must be called via [transient activation](/en-US/docs/Glossary/Transient_activation). The user has to interact with the page or a UI element in order for this feature to work. ## Syntax @@ -21,18 +27,20 @@ requestPort(options) ### Parameters -- `options` +- `options` {{optional_inline}} - : An object with the following properties: - - `filters` - - - : A list of objects containing vendor and product IDs used to search for attached devices. The [USB Implementors Forum](https://www.usb.org/) assigns IDs to specific companies. Each company assigns IDs to its products. Filters contain the following values: - - - `usbVendorId` - - : An unsigned short integer that identifies a USB device vendor. - - `usbProductId` - - : An unsigned short integer that identifies a USB device. + - `filters` {{optional_inline}} + - : A list of objects containing vendor, product, or Bluetooth service class IDs used to filter the specific device types made available for the user to request a connection to. If no filters are specified, the user is presented with a list of every available device to choose from. Filters can contain the following values: + - `bluetoothServiceClassId` {{optional_inline}} + - : An unsigned long integer or string representing a Bluetooth service class ID. This can be a 16- or 32-bit UUID alias, any valid UUID, or a valid name from a [GATT assigned services key](https://github.com/WebBluetoothCG/registries/blob/master/gatt_assigned_services.txt). + - `usbVendorId` {{optional_inline}} + - : An unsigned short integer that identifies a USB device vendor. The [USB Implementors Forum](https://www.usb.org/) assigns IDs to specific vendors. + - `usbProductId` {{optional_inline}} + - : An unsigned short integer that identifies a USB device. Each vendor assigns IDs to its products. + - `allowedBluetoothServiceClassIds` {{optional_inline}} + - : A list of unsigned long integers and/or strings representing Bluetooth service class IDs. Bluetooth ports with custom service class IDs are excluded from the list of ports presented to the user unless the service class ID is included in this list. This is true whether you filter the list or not. ### Return value @@ -41,29 +49,76 @@ A {{jsxref("Promise")}} that resolves with an instance of {{domxref("SerialPort" ### Exceptions - `SecurityError` {{domxref("DOMException")}} - - : The returned `Promise` rejects with this error if a [Permissions Policy](/en-US/docs/Web/HTTP/Permissions_Policy) blocks the use of this feature or a user permission prompt was denied. + - : The returned `Promise` rejects with this error in either of the following situations: + - A {{httpheader('Permissions-Policy/serial','serial')}} [Permissions Policy](/en-US/docs/Web/HTTP/Permissions_Policy) blocks the use of this feature. + - A user permission prompt was denied. - `NotFoundError` {{domxref("DOMException")}} - - : The returned `Promise` rejects with this if the user does not select a port when prompted. + - : The returned `Promise` rejects with this exception if the user does not select a port when prompted. -## Security +## Examples -{{Glossary("Transient activation")}} is required. The user has to interact with the page or a UI element in order for this feature to work. +### Allow the user to select any device -## Examples +This example prompts the user to select a device via `requestPort()` when a `<button>` is pressed. It does not include a filter, which means that the selection list will include all available devices: + +```html +<button id="connect">Connect</button> +``` + +```js +const connectBtn = document.getElementById("connect"); +connectBtn.addEventListener("click", () => { + try { + const port = await navigator.serial.requestPort(); + // Connect to port or add it to the list of available ports + } catch (e) { + // The user didn't select a device + } +}); +``` + +### Allow the user to select a specific vendor's device -The following example shows a filter being passed to `requestPort()` with a USB vendor ID in order to limit the set of devices shown to the user to only USB devices built by a particular manufacturer. If this filter was omitted the user would be able to select any available port. +In this case, a filter is passed to `requestPort()` with a USB vendor ID to limit the set of devices shown to the user to only USB devices built by a particular manufacturer. ```js -button.addEventListener("click", () => { +connectBtn.addEventListener("click", () => { const usbVendorId = 0xabcd; - navigator.serial - .requestPort({ filters: [{ usbVendorId }] }) - .then((port) => { - // Connect to `port` or add it to the list of available ports. - }) - .catch((e) => { - // The user didn't select a port. - }); + try { + const port = await navigator.serial.requestPort({ filters: [{ usbVendorId }] }); + // Connect to port or add it to the list of available ports + } catch (e) { + // The user didn't select a device + } +}); +``` + +### Allow the user to select custom RFCOMM-based services + +Although most devices expose SPP-based communication through the standardized Bluetooth Classic Serial Port Profile, some use custom RFCOMM-based services. These devices have a Service Class ID that is not in the standard Bluetooth UUID range. + +You need to pass the `allowedBluetoothServiceClassIds` list to `requestPort()` to access these custom RFCOMM-based services: + +```js +const myBluetoothServiceUuid = "01234567-89ab-cdef-0123-456789abcdef"; + +// Prompt user to select any serial port +// Access to the custom Bluetooth RFCOMM service above will be allowed +const port = await navigator.serial.requestPort({ + allowedBluetoothServiceClassIds: [myBluetoothServiceUuid], +}); +``` + +You can also use the `bluetoothServiceClassId` filter key when calling `requestPort()` to prompt the user with a list of filtered Bluetooth serial ports identified by Service Class IDs: + +```js +const myBluetoothServiceUuid = "01234567-89ab-cdef-0123-456789abcdef"; + +// Prompt the user to select Bluetooth serial ports with +// the custom Bluetooth RFCOMM service above. +const port = await navigator.serial.requestPort({ + allowedBluetoothServiceClassIds: [myBluetoothServiceUuid], + filters: [{ bluetoothServiceClassId: myBluetoothServiceUuid }], }); ``` diff --git a/files/en-us/web/api/serialport/close/index.md b/files/en-us/web/api/serialport/close/index.md index afad3908609c467..97fe9d24c6668a2 100644 --- a/files/en-us/web/api/serialport/close/index.md +++ b/files/en-us/web/api/serialport/close/index.md @@ -12,6 +12,56 @@ browser-compat: api.SerialPort.close The **`SerialPort.close()`** method of the {{domxref("SerialPort")}} interface returns a {{jsxref("Promise")}} that resolves when the port closes. +## Description + +`close()` closes the serial port if previously-locked {{domxref("SerialPort.readable")}} and {{domxref("SerialPort.writable")}} members are unlocked, meaning the `releaseLock()` methods have been called for their respective reader and writer. + +However, when continuously reading data from a serial device using a loop, the associated [readable stream](/en-US/docs/Web/API/ReadableStream) will always be locked until the [reader](/en-US/docs/Web/API/ReadableStreamDefaultReader) encounters an error. In this case, calling [`reader.cancel()`](/en-US/docs/Web/API/ReadableStreamDefaultReader/cancel) will force [`reader.read()`](/en-US/docs/Web/API/ReadableStreamDefaultReader/read) to resolve immediately with `{ value: undefined, done: true }` allowing the loop to call [`reader.releaseLock()`](/en-US/docs/Web/API/ReadableStreamDefaultReader/releaseLock). + +```js +// Without transform streams. + +let keepReading = true; +let reader; + +async function readUntilClosed() { + while (port.readable && keepReading) { + reader = port.readable.getReader(); + try { + while (true) { + const { value, done } = await reader.read(); + if (done) { + // reader.cancel() has been called. + break; + } + // value is a Uint8Array. + console.log(value); + } + } catch (error) { + // Handle error... + } finally { + // Allow the serial port to be closed later. + reader.releaseLock(); + } + } + + await port.close(); +} + +const closedPromise = readUntilClosed(); + +document.querySelector("button").addEventListener("click", async () => { + // User clicked a button to close the serial port. + keepReading = false; + // Force reader.read() to resolve immediately and subsequently + // call reader.releaseLock() in the loop example above. + reader.cancel(); + await closedPromise; +}); +``` + +Closing a serial port is more complicated when using [transform streams](/en-US/docs/Web/API/TransformStream). See [Close a serial port](https://developer.chrome.com/docs/capabilities/serial#close-port) for guidance. + ## Syntax ```js-nolint diff --git a/files/en-us/web/api/serialport/connect_event/index.md b/files/en-us/web/api/serialport/connect_event/index.md index 02613911ec05b36..2a23756bea18935 100644 --- a/files/en-us/web/api/serialport/connect_event/index.md +++ b/files/en-us/web/api/serialport/connect_event/index.md @@ -10,9 +10,20 @@ browser-compat: api.SerialPort.connect_event {{APIRef("Web Serial API")}}{{SecureContext_Header}}{{SeeCompatTable}}{{AvailableInWorkers("window_and_dedicated")}} -The **`connect`** event of the {{domxref("SerialPort")}} interface is fired when a port has connected to the device. This event is only fired for ports associated with removable devices such as those connected via USB. +The **`connect`** event of the {{domxref("SerialPort")}} interface is fired when the port connects to the device. -This event bubbles to the instance of {{domxref("Serial")}} that returned this interface. +## Description + +More specifically, the `connect` event fires when the port becomes **logically connected** to the device after a user grants permission for a site to access the port following a {{domxref("Serial.requestPort()")}} call: + +- In the case of a wired serial port, this occurs when the port is physically connected to the device, for example via USB. +- In the case of a wireless serial port (for example, Bluetooth RFCOMM), this occurs when the port makes one or more active connections to the device (for example via Bluetooth L2CAP channels). + +### Bubbling + +This event bubbles to the instance of {{domxref("Serial")}} that returned this interface. The `event.target` property refers to the {{domxref('SerialPort')}} object that bubbles up. + +For more information, see [Event bubbling](/en-US/docs/Learn/JavaScript/Building_blocks/Event_bubbling). ## Syntax @@ -28,12 +39,6 @@ onconnect = (event) => {}; A generic {{domxref("Event")}}. -## Bubbling - -This event bubbles to {{domxref("Serial")}}. The `event.target` property refers to the {{domxref('SerialPort')}} object that bubbles up. - -For more information, see [Event bubbling](/en-US/docs/Learn/JavaScript/Building_blocks/Event_bubbling). - ## Examples ### Notify when a specific port connects diff --git a/files/en-us/web/api/serialport/connected/index.md b/files/en-us/web/api/serialport/connected/index.md new file mode 100644 index 000000000000000..333d9799ab25b22 --- /dev/null +++ b/files/en-us/web/api/serialport/connected/index.md @@ -0,0 +1,75 @@ +--- +title: "SerialPort: connected property" +short-title: connected +slug: Web/API/SerialPort/connected +page-type: web-api-instance-property +status: + - experimental +browser-compat: api.SerialPort.connected +--- + +{{SecureContext_Header}}{{APIRef("Web Serial API")}}{{SeeCompatTable}}{{AvailableInWorkers("window_and_dedicated")}} + +The **`connected`** read-only property of the {{domxref("SerialPort")}} interface returns a boolean value that indicates whether the port is [logically connected](/en-US/docs/Web/API/SerialPort/connect_event#description) to the device. + +## Description + +When a wireless device goes out of range of the host, any wireless serial port opened by a web app automatically closes, even though it stays logically connected. In such cases, the web app could attempt to reopen the port using {{domxref("SerialPort.open()")}}. + +However, if the wireless device was intentionally disconnected (for example, if the user chose to disconnect it using the operating system control panel), the web app should refrain from reopening the port to prevent reconnecting to the wireless device. + +The following snippet shows how the `connected` property can be used to distinguish between these two cases: + +```js +const ports = await navigator.serial.getPorts(); +for (const port of ports) { + if (port.connected) { + // The port is logically connected + // automatically try to reopen the port + await port.open({ baudRate: 9600 }); + } else { + // The port is not logically connected; at this point you could + // prompt the user to make sure the Bluetooth device is available, and + // Show a "connect" button to allow them to try opening the port if desired + } +} +``` + +## Value + +A boolean — `true` if the port is logically connected, and `false` if not. + +## Examples + +### Logging when a port is connected + +The following snippet invokes {{domxref("Serial.requestPort()")}} when the user presses a {{htmlelement("button")}}, prompting them to choose a serial port to connect to, then logs a message to the console reporting the connection status: + +```js +requestPortButton.addEventListener("click", async () => { + const port = await navigator.serial.requestPort(); + console.log(`Requested serial port. Connected: ${port.connected}`); +}); +``` + +### Logging connection status on connect and disconnect + +You can use the following snippet to log the connection status when the {{domxref("SerialPort.connect_event", "connect")}} and {{domxref("SerialPort.disconnect_event", "disconnect")}} events fire: + +```js +navigator.serial.addEventListener("connect", ({ target: port }) => { + console.log(`Connect event fired. Connected: ${port.connected}`); +}); + +navigator.serial.addEventListener("disconnect", ({ target: port }) => { + console.log(`Disconnect event fired. Connected: ${port.connected}`); +}); +``` + +## Specifications + +{{Specifications}} + +## Browser compatibility + +{{Compat}} diff --git a/files/en-us/web/api/serialport/disconnect_event/index.md b/files/en-us/web/api/serialport/disconnect_event/index.md index 389199062a5d999..e5bf8d546a5bcc5 100644 --- a/files/en-us/web/api/serialport/disconnect_event/index.md +++ b/files/en-us/web/api/serialport/disconnect_event/index.md @@ -10,9 +10,17 @@ browser-compat: api.SerialPort.disconnect_event {{SecureContext_Header}}{{APIRef("Web Serial API")}}{{SeeCompatTable}}{{AvailableInWorkers("window_and_dedicated")}} -The **`disconnect`** event of the {{domxref("SerialPort")}} interface is fired when the port has disconnected from the device. This event is only fired for ports associated with removable devices such as those connected via USB. +The **`disconnect`** event of the {{domxref("SerialPort")}} interface is fired when the port disconnects from the device. -This event bubbles to the instance of {{domxref("Serial")}} that returned this interface. +## Description + +More specifically, the `disconnect` event fires when a port that was previously [logically connected](/en-US/docs/Web/API/SerialPort/connect_event#description) after a user granted permission for a site to access it (following a {{domxref("Serial.requestPort()")}} call) is no longer connected. + +### Bubbling + +This event bubbles to the instance of {{domxref("Serial")}} that returned this interface. The `event.target` property refers to the {{domxref('SerialPort')}} object that bubbles up. + +For more information, see [Event bubbling](/en-US/docs/Learn/JavaScript/Building_blocks/Event_bubbling). ## Syntax @@ -28,12 +36,6 @@ ondisconnect = (event) => {}; A generic {{domxref("Event")}}. -## Bubbling - -This event bubbles to {{domxref("Serial")}}. The `event.target` property refers to the {{domxref('SerialPort')}} object that bubbles up. - -For more information, see [Event bubbling](/en-US/docs/Learn/JavaScript/Building_blocks/Event_bubbling). - ## Examples ### Notify when a specific port disconnects diff --git a/files/en-us/web/api/serialport/forget/index.md b/files/en-us/web/api/serialport/forget/index.md index 2c0dae3d704a02d..a253073cd683d92 100644 --- a/files/en-us/web/api/serialport/forget/index.md +++ b/files/en-us/web/api/serialport/forget/index.md @@ -10,7 +10,13 @@ browser-compat: api.SerialPort.forget {{securecontext_header}}{{APIRef("Web Serial API")}}{{SeeCompatTable}}{{AvailableInWorkers("window_and_dedicated")}} -The **`SerialPort.forget()`** method of the {{domxref("SerialPort")}} interface returns a {{jsxref("Promise")}} that resolves when the serial port is closed and is forgotten. +The **`SerialPort.forget()`** method of the {{domxref("SerialPort")}} interface returns a {{jsxref("Promise")}} that resolves when access to the serial port is revoked. + +## Description + +A website can clean up permissions to access a serial port it is no longer interested in retaining by calling `SerialPort.forget()`. Calling this "forgets" the device, resetting any previously-set permissions so the calling site can no longer communicate with the port. + +For example, for an educational web application used on a shared computer with many devices, a large number of accumulated user-generated permissions creates a poor user experience. ## Syntax @@ -24,7 +30,7 @@ None. ### Return value -A {{jsxref("Promise")}} that resolves with `undefined` once the connection is closed, the device is forgotten, and the permission is reset. +A {{jsxref("Promise")}} that resolves with `undefined` once the connection is revoked. ## Specifications diff --git a/files/en-us/web/api/serialport/getinfo/index.md b/files/en-us/web/api/serialport/getinfo/index.md index 978321fb3c2c4c8..fe7114da9ca008f 100644 --- a/files/en-us/web/api/serialport/getinfo/index.md +++ b/files/en-us/web/api/serialport/getinfo/index.md @@ -10,7 +10,7 @@ browser-compat: api.SerialPort.getInfo {{SecureContext_Header}}{{APIRef("Web Serial API")}}{{SeeCompatTable}}{{AvailableInWorkers("window_and_dedicated")}} -The **`getInfo()`** method of the {{domxref("SerialPort")}} interface returns an object whose properties are the vendor ID and product ID of the device. +The **`getInfo()`** method of the {{domxref("SerialPort")}} interface returns an object containing identifying information for the device available via the port. ## Syntax @@ -24,12 +24,44 @@ None. ### Return value -An object containing the following values. +An object containing the following properties: - `usbVendorId` - - : If the port is part of a USB device, an unsigned short integer that identifies a USB device vendor, otherwise `undefined`. + - : If the port is part of a USB device, this property is an unsigned short integer that identifies the device's vendor. If not, it is `undefined`. - `usbProductId` - - : If the port is part of a USB device, an unsigned short integer that identifies a USB device, otherwise `undefined`. + - : If the port is part of a USB device, this property is an unsigned short integer that identifies the USB device. If not, it is `undefined`. +- `bluetoothServiceClassId` + - : If the port is a Bluetooth RFCOMM service, this property is an unsigned long integer or string representing the device's Bluetooth service class ID. If not, it is `undefined`. + +## Example + +This snippet calls the {{domxref("Serial.requestPort()")}} method when a `<button>` is pressed. We pass a filter to `requestPort()` to filter for Arduino Uno USB devices. Once a port is requested, we call `getInfo()` to return the device's `usbProductId` and `usbVendorId`. + +```html +<button id="connect">Connect</button> +``` + +```js +const connectBtn = document.getElementById("connect"); + +// Filter for devices with the Arduino Uno USB Vendor/Product IDs +const filters = [ + { usbVendorId: 0x2341, usbProductId: 0x0043 }, + { usbVendorId: 0x2341, usbProductId: 0x0001 } +]; + +connectBtn.addEventListener("click", () => { + try { + // Prompt the user to select an Arduino Uno device + const port = await navigator.serial.requestPort({ filters }); + + // Return the device's identifying info + const { usbProductId, usbVendorId } = port.getInfo(); + } catch (e) { + // The user didn't select a device + } +}); +``` ## Specifications diff --git a/files/en-us/web/api/serialport/index.md b/files/en-us/web/api/serialport/index.md index 898f57717df3ddb..b6406f5683c1a62 100644 --- a/files/en-us/web/api/serialport/index.md +++ b/files/en-us/web/api/serialport/index.md @@ -19,6 +19,8 @@ Instances of this interface may be obtained by calling methods of the {{domxref( ## Instance properties +- {{domxref("SerialPort.connected")}} {{ReadOnlyInline}} {{Experimental_Inline}} + - : Returns a boolean value that indicates whether the port is logically connected to the device. - {{domxref("SerialPort.readable")}} {{ReadOnlyInline}} {{Experimental_Inline}} - : Returns a {{domxref("ReadableStream")}} for receiving data from the device connected to the port. - {{domxref("SerialPort.writable")}} {{ReadOnlyInline}} {{Experimental_Inline}} @@ -27,9 +29,9 @@ Instances of this interface may be obtained by calling methods of the {{domxref( ## Instance methods - {{domxref("SerialPort.forget()")}} {{Experimental_Inline}} - - : Returns a {{jsxref("Promise")}} that resolves when the port closes and is forgotten. + - : Returns a {{jsxref("Promise")}} that resolves when access to the serial port is revoked. Calling this "forgets" the device, resetting any previously-set permissions so the calling site can no longer communicate with the port. - {{domxref("SerialPort.getInfo()")}} {{Experimental_Inline}} - - : Returns an object containing properties of the port. + - : Returns an object containing identifying information for the device available via the port. - {{domxref("SerialPort.open()")}} {{Experimental_Inline}} - : Returns a {{jsxref("Promise")}} that resolves when the port is opened. By default the port is opened with 8 data bits, 1 stop bit and no parity checking. - {{domxref("SerialPort.setSignals()")}} {{Experimental_Inline}} @@ -42,9 +44,9 @@ Instances of this interface may be obtained by calling methods of the {{domxref( ## Events - {{domxref("SerialPort.connect_event", "connect")}} {{Experimental_Inline}} - - : An event fired when the port has connected to the device. + - : Fired when the port connects to the device. - {{domxref("SerialPort.disconnect_event", "disconnect")}} {{Experimental_Inline}} - - : An event fired when the port has disconnected from the device. + - : Fired when the port disconnects from the device. ## Examples diff --git a/files/en-us/web/api/svgaelement/href/index.md b/files/en-us/web/api/svgaelement/href/index.md new file mode 100644 index 000000000000000..87c97baeaab2f43 --- /dev/null +++ b/files/en-us/web/api/svgaelement/href/index.md @@ -0,0 +1,44 @@ +--- +title: "SVGAElement: href property" +short-title: href +slug: Web/API/SVGAElement/href +page-type: web-api-instance-property +browser-compat: api.SVGAElement.href +--- + +{{APIRef("SVG")}} + +The **`href`** read-only property of the {{domxref("SVGAElement")}} returns an {{domxref("SVGAnimatedString")}} object reflecting the value of the href attribute, and, in certain cases, the {{SVGAttr("xlink:href")}} {{deprecated_inline}} attribute. It specifies the target URI associated with the link. + +This property enables access to the URI set for a link within an SVG document. + +## Value + +A {{domxref("SVGAnimatedString")}} indicating the value of the href attribute. Additionally, for elements defined to support it, it reflects the value of the {{SVGAttr("xlink:href")}} {{deprecated_inline}} attribute when the href attribute is not set. + +## Examples + +```js +// Select an SVG <a> element +const svgLink = document.querySelector("a"); + +// Access the href property +console.log(svgLink.href.baseVal); // Logs the base URI +console.log(svgLink.href.animVal); // Logs the animated URI if applicable + +// Example: Reflecting xlink:href +const deprecatedLink = document.querySelector("a"); +console.log(deprecatedLink.href.baseVal); // Reflects 'xlink:href' if 'href' is not set +``` + +## Specifications + +{{Specifications}} + +## Browser compatibility + +{{Compat}} + +## See also + +- {{ SVGAttr("href") }} diff --git a/files/en-us/web/api/web_serial_api/index.md b/files/en-us/web/api/web_serial_api/index.md index e6125ec3184be50..673760b42e9ba9c 100644 --- a/files/en-us/web/api/web_serial_api/index.md +++ b/files/en-us/web/api/web_serial_api/index.md @@ -31,6 +31,11 @@ Examples of serial devices include 3D printers, and microcontrollers such as the - {{domxref("WorkerNavigator.serial")}} {{ReadOnlyInline}} {{Experimental_Inline}} - : Returns a {{domxref("Serial")}} object, which represents the entry point into the Web Serial API to enable the control of serial ports. +## HTTP headers + +- {{httpheader("Permissions-Policy")}} {{httpheader('Permissions-Policy/serial','serial')}} directive + - : Controls whether the current document is allowed to use the Web Serial API to communicate with serial devices, either directly connected via a serial port, or via USB or Bluetooth devices emulating a serial port. + ## Examples The following examples demonstrate some of the functionality provided by the Web Serial API. diff --git a/files/en-us/web/api/window/index.md b/files/en-us/web/api/window/index.md index 7c770d2bd543452..dfd55c7c60d173d 100644 --- a/files/en-us/web/api/window/index.md +++ b/files/en-us/web/api/window/index.md @@ -257,8 +257,6 @@ _This interface inherits methods from the {{domxref("EventTarget")}} interface._ - : This method stops window loading. - {{domxref("Window.structuredClone()")}} - : Creates a [deep clone](/en-US/docs/Glossary/Deep_copy) of a given value using the [structured clone algorithm](/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm). -- {{domxref("Window.updateCommands()")}} {{Non-standard_Inline}} - - : Updates the state of commands of the current chrome window (UI). ### Deprecated methods diff --git a/files/en-us/web/css/@font-face/font-weight/index.md b/files/en-us/web/css/@font-face/font-weight/index.md index b9f0c43481ecd7b..af82b6348a19a39 100644 --- a/files/en-us/web/css/@font-face/font-weight/index.md +++ b/files/en-us/web/css/@font-face/font-weight/index.md @@ -7,11 +7,16 @@ browser-compat: css.at-rules.font-face.font-weight {{CSSRef}} -The **`font-weight`** CSS descriptor allows authors to specify font weights for the fonts specified in the {{cssxref("@font-face")}} at-rule. The {{cssxref("font-weight")}} property can separately be used to set how thick or thin characters in text should be displayed. +The **`font-weight`** CSS {{cssxref("@font-face")}} descriptor enables authors to specify a single font weight, or a range of font weights, for the font specified in a {{cssxref("@font-face")}} at-rule. This is then used by the browser to select the appropriate font when a CSS rule sets a desired {{cssxref("font-weight", "font weight")}}. -For a particular font family, authors can download various font faces which correspond to the different styles of the same font family, and then use the `font-weight` descriptor to explicitly specify the font face's weights. The values for the CSS descriptor is same as that of its corresponding font property. +Typically, a developer will want to use fonts from a single font family in a range of different weights. With traditional, or _static_ fonts, a single font file contains characters from a font family in a specific weight and style: for example, "Helvetica bold italic". To enable displaying light, regular, bold, or extra-bold fonts when the `font-weight` property calls a specific weight, you can define multiple {{cssxref("@font-face")}} at-rules for the same family (all with the same {{cssxref("@font-face/font-family", "font-family")}} descriptor value), one for each weight or range of weights. -There are generally limited weights available for a particular font family. When a specified weight doesn't exist, a nearby weight is used. Fonts lacking bold typeface are often synthesized by the user agent. To prevent this, use the {{cssxref('font-synthesis')}} shorthand property. +To declare the font to be used for a range of font weights, declare a space-separated pair of font-weight values as the value for the `font-weight` descriptor. When CSS rules set a font weight by setting the {{cssxref("font-weight")}} property or the {{cssxref("font")}} shorthand property, the appropriate font will then be used. + +For example, if the descriptor is `font-weight: 400 600;`, when the property is `font-weight: 450` or `font-weight: 550`, that font will be use for that font-family. +Whether the font is a static or a [variable font](/en-US/docs/Web/CSS/CSS_fonts/Variable_fonts_guide), the font matching the range will be used. In this case, if the font is a static font, `450` and `550` will appear the same. If the font is a variable font, the latter will be bolder. + +The descriptor is the same for all fonts, but the range you'll set for a variable font will generally be greater, possibly even `1 1000` to use the same font for all font weight property values. ## Syntax @@ -21,15 +26,21 @@ font-weight: normal; font-weight: bold; font-weight: 400; -/* Multiple Values */ +/* Defining a range */ font-weight: normal bold; font-weight: 300 500; ``` -The `font-weight` property is described using any one of the values listed below. - ### Values +The `font-weight` descriptor takes one of the following forms: + +- The keyword `auto`. +- A single `<font-weight-absolute>` value. +- A pair of `<font-weight-absolute>` values, separated by a space. + +Each `<font-weight-absolute>` may be any one of the following: + - `normal` - : Normal font weight. Same as `400`. - `bold` @@ -37,10 +48,6 @@ The `font-weight` property is described using any one of the values listed below - `<number>` - : A {{cssxref("<number>")}} value between 1 and 1000, inclusive. Higher numbers represent weights that are bolder than (or as bold as) lower numbers. Certain commonly used values correspond to common weight names, as described in the [Common weight name mapping](#common_weight_name_mapping) section below. -In earlier versions of the `font-weight` specification, the property accepts only keyword values and the numeric values 100, 200, 300, 400, 500, 600, 700, 800, and 900; non-variable fonts can only really make use of these set values, although fine-grained values (e.g. 451) will be translated to one of these values for non-variable fonts. - -CSS Fonts Level 4 extends the syntax to accept any number between 1 and 1000, inclusive, and introduces [Variable fonts](#variable_fonts), which can make use of this much finer-grained range of font weights. - ### Common weight name mapping The numerical values `100` to `900` roughly correspond to the following common weight names: @@ -80,20 +87,214 @@ People experiencing low vision conditions may have difficulty reading text set w ## Examples -### Setting normal font weight in a @font-face rule +### Selecting normal and bold fonts + +In this example we include two fonts, one normal weight, one bold weight, from the ["Fira Sans"](https://fonts.google.com/specimen/Fira+Sans) font family using two `@font-face` at rules. We set `font-weight` descriptors to match the weight of the fonts. + +After this, CSS rules can select the normal or the bold font for the "Fira Sans" family just by setting the {{cssxref("font-weight")}} property. Note that the {{htmlelement("strong")}} HTML element also selects the bold font, because by default `<strong>` elements have a CSS `font-weight` property value of `bold`. + +#### HTML + +```html +<p class="one">Fira Sans, `normal` weight paragraph</p> +<p class="two">Fira Sans, `bold` weight paragraph</p> +<p><strong>Fira Sans, <strong> element (`bold`)</strong></p> +``` + +#### CSS + +```css +@font-face { + font-family: "Fira Sans"; + font-weight: normal; + src: url("https://mdn.github.io/shared-assets/fonts/FiraSans-Regular.woff2"); +} + +@font-face { + font-family: "Fira Sans"; + font-weight: bold; + src: url("https://mdn.github.io/shared-assets/fonts/FiraSans-Bold.woff2"); +} + +body { + font-family: "Fira Sans", serif; + font-size: 2rem; +} + +p.one { + font-weight: normal; +} + +p.two { + font-weight: bold; +} +``` + +#### Result + +{{embedlivesample("Selecting normal and bold fonts", "", 300)}} + +### Setting font-weight ranges + +This example demonstrates how authors can include multiple fonts for multiple font-weights (and font-styles), by including multiple `@font-face` declarations with the same `font-family` value. By setting the `font-weight` descriptors using ranges from 1 to 1000, in the rest of your stylesheets, you can declare a `font-weight` (or `font-style`), and know the appropriate font will be used. + +#### HTML + +```html +<p class="one">This has a font weight of 100</p> +<p class="three">This has a font weight of 300</p> +<p class="four">This has a font weight of 400</p> +<p class="five">This has a font weight of 500</p> +<p class="seven">This has a font weight of 700</p> +<p class="nine">This has a font weight of 900</p> +``` + +#### CSS -The following finds a local Open Sans font or imports it, and allows using the font for normal font weights. +We include four `@font-face` declarations for four different fonts from the `FireSans` font family, as seen in the previous example. Each declaration is set to a different range of font-weight values, but all use the same font name. + +The first declaration uses `FiraSans-Regular` and its associated `font-weight` range includes the entire possible range of font weight values. + +The other three declarations use the light, bold, and extra-bold versions of the font, and their associated `font-weight` ranges define subsets of the range as follows: + +- the light font is associated with the range 1-300 +- the bold font is associated with the range 500-700 +- the extra-bold font is associated with the range 700-1000 + +The CSS [cascade](/en-US/docs/Web/CSS/Cascade) ensures that the three latter declarations override parts of the the range that was set in the `FiraSans-Regular` declaration. ```css @font-face { - font-family: "Open Sans"; - src: - local("Open Sans") format("woff2"), - url("/fonts/OpenSans-Regular-webfont.woff") format("woff"); + font-family: "Fira Sans"; + font-weight: 1 1000; + src: url("https://mdn.github.io/shared-assets/fonts/FiraSans-Regular.woff2"); +} + +@font-face { + font-family: "Fira Sans"; + font-weight: 1 300; + src: url("https://mdn.github.io/shared-assets/fonts/FiraSans-Light.woff2"); +} + +@font-face { + font-family: "Fira Sans"; + font-weight: 500 700; + src: url("https://mdn.github.io/shared-assets/fonts/FiraSans-Bold.woff2"); +} + +@font-face { + font-family: "Fira Sans"; + font-weight: 700 1000; + src: url("https://mdn.github.io/shared-assets/fonts/FiraSans-ExtraBold.woff2"); +} + +body { + font-family: "Fira Sans", serif; + font-size: 2rem; +} + +p.one { + font-weight: 100; +} + +p.three { + font-weight: 300; +} + +p.four { font-weight: 400; } + +p.five { + font-weight: 500; +} + +p.seven { + font-weight: 700; +} + +p.nine { + font-weight: 900; +} +``` + +#### Result + +{{embedlivesample("Setting font-weight ranges", "", 500)}} + +The `seven` paragraph uses the extra bold font. While `font-weight: 700` matches both the `FiraSans-Bold` and `FiraSans-ExtraBold` declarations, as the FiraSans-ExtraBold is declared later, it overrides the `FiraSans-Bold` for that value. + +Similarly, the `100` and `300` both use the light font; although `FiraSans-Regular` and `FiraSans-Light` both include `300` in their ranges, `FiraSans-Light` is declared later. Alternatively, we could have declared `FiraSans-Regular` after `FiraSans-Light`, but we would need to change the `font-weight` descriptor range if we do so. + +### Setting a range for a variable font + +In this example we're using the `font-weight` descriptor to restrict the range of weights that can be set when using a variable font. + +We include a variable font, ["League Mono"](https://www.theleagueofmoveabletype.com/league-mono), using a single `@font-face` at-rule. We use a `font-weight: 300 700` value to effectively limit the range of weights that are available. If a CSS rule uses our "League Mono" font, then if it specifies a weight outside this range the weight it gets is clamped to the range. + +#### HTML + +We include a paragraph with `<output>` initially set to `400`, as that is the the default font-weight for unstyled paragraph text. This paragraph is nestled between two other paragraphs, so you can compare rendered versus declared font weight values. + +We include an {{htmlelement("input/range")}} of type `range`, nested in a {{htmlelement("label")}}, setting the `step` to `50`. + +```html +<p>LeagueMono, font-weight: 300 (comparison)</p> +<p id="example">LeagueMono, font-weight: <output>400</output> (example)</p> +<p>LeagueMono, font-weight: 700 (comparison)</p> +<label + >Change the font size: + <input type="range" min="50" max="1000" step="50" value="400" /> +</label> +``` + +#### CSS + +We set the `font-weight` descriptor range to `300 700`, clamping the variable font to that range. + +```css +@font-face { + font-family: LeagueMono; + src: url("https://mdn.github.io/shared-assets/fonts/LeagueMono-VF.ttf"); + font-weight: 300 700; +} + +p { + font-family: LeagueMono, serif; + font-size: 1.5rem; +} + +p:first-of-type { + font-weight: 300; +} + +p:last-of-type { + font-weight: 700; +} +``` + +#### JavaScript + +We include an event handler that updates the paragraph's `font-weight` property value, and updates the text to reflect the change: + +```js +const text = document.querySelector("#example"); +const log = document.querySelector("output"); +const range = document.querySelector("input"); + +range.addEventListener("change", () => { + text.style.fontWeight = range.value; + log.innerText = range.value; +}); ``` +#### Result + +{{embedlivesample("Setting a range for a variable font", "", "400")}} + +Change the font weight of the paragraph via the range. +Note that the example paragraph does not get lighter than the `300` paragraph above it or bolder than the `700` paragraph below it; the font weight is clamped to the range defined by the `font-weight` descriptor. + ## Specifications {{Specifications}} diff --git a/files/en-us/web/css/@page/index.md b/files/en-us/web/css/@page/index.md index ec68465c6ad9347..4dedda41e2332a9 100644 --- a/files/en-us/web/css/@page/index.md +++ b/files/en-us/web/css/@page/index.md @@ -154,16 +154,13 @@ Where the `<page-body>` includes: and `<pseudo-page>` represents these pseudo-classes: -- [`:blank`](https://drafts.csswg.org/css-page/#blank-pseudo) +- {{Cssxref(":blank")}} - {{Cssxref(":first")}} - {{Cssxref(":left")}} - {{Cssxref(":right")}} ## Margin at-rules -> [!WARNING] -> The margin at-rules have not been implemented by any user agent (updated: August 2023). - The margin at-rules are used inside of the `@page` at-rule. They each target a different section of the document printed page, styling the area of the printed page based on the property values set in the style block: ```css @@ -385,13 +382,14 @@ button.addEventListener("click", () => { #### Result Clicking the print button will launch a print dialog with the html sections split into individual pages. -{{ EmbedLiveSample('Using the size property to change the page orientation', '100%', 520) }} + +{{EmbedLiveSample('Using the size property to change the page orientation', '100%', 520)}} ### @page pseudo-class examples Please refer to the various [pseudo-classes](/en-US/docs/Web/CSS/Pseudo-classes) of `@page` for examples. -- [`:blank`](https://drafts.csswg.org/css-page/#blank-pseudo) +- {{Cssxref(":blank")}} - {{Cssxref(":first")}} - {{Cssxref(":left")}} - {{Cssxref(":right")}} diff --git a/files/en-us/web/css/_colon_current/index.md b/files/en-us/web/css/_colon_current/index.md index 093657ea56a6b80..6d7c897a3846030 100644 --- a/files/en-us/web/css/_colon_current/index.md +++ b/files/en-us/web/css/_colon_current/index.md @@ -2,10 +2,12 @@ title: ":current" slug: Web/CSS/:current page-type: css-pseudo-class +status: + - experimental spec-urls: https://drafts.csswg.org/selectors/#the-current-pseudo --- -{{CSSRef}} +{{CSSRef}}{{SeeCompatTable}} The **`:current`** [CSS](/en-US/docs/Web/CSS) [pseudo-class](/en-US/docs/Web/CSS/Pseudo-classes) selector is a time-dimensional pseudo-class that represents an element or the ancestor of an element that is currently being displayed. For example, this pseudo-class can be used to represent a video that is being displayed with captions by [WebVTT](/en-US/docs/Web/API/WebVTT_API). diff --git a/files/en-us/web/css/_colon_has-slotted/index.md b/files/en-us/web/css/_colon_has-slotted/index.md new file mode 100644 index 000000000000000..9fb0f6c7294235f --- /dev/null +++ b/files/en-us/web/css/_colon_has-slotted/index.md @@ -0,0 +1,75 @@ +--- +title: ":has-slotted" +slug: Web/CSS/:has-slotted +page-type: css-pseudo-class +browser-compat: css.selectors.has-slotted +--- + +{{CSSRef}} + +The **`:has-slotted`** [CSS](/en-US/docs/Web/CSS) [pseudo-class](/en-US/docs/Web/CSS/Pseudo-classes) matches when the content of a {{HTMLElement("slot")}} element is not empty or not using the default value (see [Using templates and slots](/en-US/docs/Web/API/Web_components/Using_templates_and_slots) for more information). + +> [!NOTE] Even a single whitespace text node is sufficient to make `:has-slotted` apply. + +This only works when used inside CSS placed within a [shadow DOM](/en-US/docs/Web/API/Web_components/Using_shadow_DOM). + +```css +/* Selects the content of a <slot> element that has content that is not default */ +:has-slotted { + color: green; +} + +/* Selects the content of a <slot> element that has no content or default */ +:not(:has-slotted) { + color: red; +} +``` + +## Syntax + +```css-nolint +:has-slotted { + /* ... */ +} +``` + +## Examples + +This example has two `<slot>` elements, one of which has been assigned some content and the other has not. + +### HTML + +```html +<p> + <template shadowrootmode="open"> + <style> + :has-slotted { + color: rebeccapurple; + } + </style> + <slot name="one">Placeholder 1</slot> + <slot name="two">Placeholder 2</slot> + </template> + <span slot="one">Slotted content</span> +</p> +``` + +### Result + +The `<slot>` element that has been assigned content matched the `:has-slotted` pseudo-class and has the `color` value of `rebbecapurple` applied. + +{{EmbedLiveSample("simple_example",100,300)}} + +## Specifications + +{{Specifications}} + +## Browser compatibility + +{{Compat}} + +## See also + +- HTML {{HTMLElement("template")}} element +- HTML {{HTMLElement("slot")}} element +- {{CSSXRef("::slotted")}} diff --git a/files/en-us/web/css/_colon_local-link/index.md b/files/en-us/web/css/_colon_local-link/index.md index 48b44d3f5ff756a..a97563cd020c361 100644 --- a/files/en-us/web/css/_colon_local-link/index.md +++ b/files/en-us/web/css/_colon_local-link/index.md @@ -2,10 +2,12 @@ title: ":local-link" slug: Web/CSS/:local-link page-type: css-pseudo-class +status: + - experimental spec-urls: https://drafts.csswg.org/selectors/#local-link-pseudo --- -{{CSSRef}} +{{CSSRef}}{{SeeCompatTable}} The **`:local-link`** [CSS](/en-US/docs/Web/CSS) [pseudo-class](/en-US/docs/Web/CSS/Pseudo-classes) represents a link to the same document. Therefore an element that is the source anchor of a hyperlink whose target's absolute URL matches the element's own document URL. @@ -51,7 +53,7 @@ a:local-link { ## Browser compatibility -This feature is a proposal integrated into the specification. Currently, no browser supports it. +Currently, no browsers have implemented this feature. ## See also diff --git a/files/en-us/web/css/_colon_target-within/index.md b/files/en-us/web/css/_colon_target-within/index.md index 1677d2884c28bc1..fe1f4f66cef4f6a 100644 --- a/files/en-us/web/css/_colon_target-within/index.md +++ b/files/en-us/web/css/_colon_target-within/index.md @@ -4,7 +4,7 @@ slug: Web/CSS/:target-within page-type: css-pseudo-class status: - experimental -browser-compat: css.selectors.target-within +spec-urls: https://drafts.csswg.org/selectors/#target-within-pseudo --- {{CSSRef}}{{SeeCompatTable}} @@ -85,7 +85,7 @@ p:target i { ## Browser compatibility -{{Compat}} +Currently, no browsers have implemented this feature. ## See also diff --git a/files/en-us/web/css/_doublecolon_slotted/index.md b/files/en-us/web/css/_doublecolon_slotted/index.md index 4caa731c7fa8453..2a9419ad726135c 100644 --- a/files/en-us/web/css/_doublecolon_slotted/index.md +++ b/files/en-us/web/css/_doublecolon_slotted/index.md @@ -122,6 +122,7 @@ Our markup includes three custom elements, including a custom element with an in - {{cssxref(":host")}} - {{cssxref(":host_function", ":host()")}} - {{cssxref(":host-context", ":host-context()")}} +- {{cssxref(":has-slotted")}} - [CSS scoping](/en-US/docs/Web/CSS/CSS_scoping) module - HTML [`slot`](/en-US/docs/Web/HTML/Global_attributes/slot) attribute - HTML {{HTMLElement("slot")}} element diff --git a/files/en-us/web/css/flood-color/index.md b/files/en-us/web/css/flood-color/index.md index 474e62012b37017..6fe13b5ab84b870 100644 --- a/files/en-us/web/css/flood-color/index.md +++ b/files/en-us/web/css/flood-color/index.md @@ -82,7 +82,7 @@ rect { } ``` -We then apply different flood color values to the `<feFlood>` elements using the CSS `flood-color` property. We use a named color and a 3-digit hexidecimal color, but we can use any valid CSS color syntax: +We then apply different flood color values to the `<feFlood>` elements using the CSS `flood-color` property. We use a named color and a 3-digit hexadecimal color, but we can use any valid CSS color syntax: ```css #flood1 feFlood { diff --git a/files/en-us/web/css/gradient/conic-gradient/index.md b/files/en-us/web/css/gradient/conic-gradient/index.md index 2f2b7ecb5fb3f9e..67b6c411fabd7fa 100644 --- a/files/en-us/web/css/gradient/conic-gradient/index.md +++ b/files/en-us/web/css/gradient/conic-gradient/index.md @@ -2,7 +2,7 @@ title: conic-gradient() slug: Web/CSS/gradient/conic-gradient page-type: css-function -browser-compat: css.types.image.gradient.conic-gradient +browser-compat: css.types.gradient.conic-gradient --- {{CSSRef}} diff --git a/files/en-us/web/css/gradient/linear-gradient/index.md b/files/en-us/web/css/gradient/linear-gradient/index.md index cdf84d89ce2e798..e3fbd6d076a64a8 100644 --- a/files/en-us/web/css/gradient/linear-gradient/index.md +++ b/files/en-us/web/css/gradient/linear-gradient/index.md @@ -2,7 +2,7 @@ title: linear-gradient() slug: Web/CSS/gradient/linear-gradient page-type: css-function -browser-compat: css.types.image.gradient.linear-gradient +browser-compat: css.types.gradient.linear-gradient --- {{CSSRef}} diff --git a/files/en-us/web/css/gradient/radial-gradient/index.md b/files/en-us/web/css/gradient/radial-gradient/index.md index 5d93e593c02ec0c..f46f61a5216b271 100644 --- a/files/en-us/web/css/gradient/radial-gradient/index.md +++ b/files/en-us/web/css/gradient/radial-gradient/index.md @@ -2,7 +2,7 @@ title: radial-gradient() slug: Web/CSS/gradient/radial-gradient page-type: css-function -browser-compat: css.types.image.gradient.radial-gradient +browser-compat: css.types.gradient.radial-gradient --- {{CSSRef}} diff --git a/files/en-us/web/css/gradient/repeating-conic-gradient/index.md b/files/en-us/web/css/gradient/repeating-conic-gradient/index.md index a737920c6420cd6..4d1d1ea85c99a9c 100644 --- a/files/en-us/web/css/gradient/repeating-conic-gradient/index.md +++ b/files/en-us/web/css/gradient/repeating-conic-gradient/index.md @@ -2,7 +2,7 @@ title: repeating-conic-gradient() slug: Web/CSS/gradient/repeating-conic-gradient page-type: css-function -browser-compat: css.types.image.gradient.repeating-conic-gradient +browser-compat: css.types.gradient.repeating-conic-gradient --- {{CSSRef}} diff --git a/files/en-us/web/css/gradient/repeating-linear-gradient/index.md b/files/en-us/web/css/gradient/repeating-linear-gradient/index.md index 11c70ecbce614df..5a0c0e417517e79 100644 --- a/files/en-us/web/css/gradient/repeating-linear-gradient/index.md +++ b/files/en-us/web/css/gradient/repeating-linear-gradient/index.md @@ -2,7 +2,7 @@ title: repeating-linear-gradient() slug: Web/CSS/gradient/repeating-linear-gradient page-type: css-function -browser-compat: css.types.image.gradient.repeating-linear-gradient +browser-compat: css.types.gradient.repeating-linear-gradient --- {{CSSRef}} diff --git a/files/en-us/web/css/gradient/repeating-radial-gradient/index.md b/files/en-us/web/css/gradient/repeating-radial-gradient/index.md index 99eb338e262621e..1bc5324ad886a8c 100644 --- a/files/en-us/web/css/gradient/repeating-radial-gradient/index.md +++ b/files/en-us/web/css/gradient/repeating-radial-gradient/index.md @@ -2,7 +2,7 @@ title: repeating-radial-gradient() slug: Web/CSS/gradient/repeating-radial-gradient page-type: css-function -browser-compat: css.types.image.gradient.repeating-radial-gradient +browser-compat: css.types.gradient.repeating-radial-gradient --- {{CSSRef}} diff --git a/files/en-us/web/css/layout_cookbook/sticky_footers/index.md b/files/en-us/web/css/layout_cookbook/sticky_footers/index.md index 5136bbca37a8b80..3a20554cb72ec3d 100644 --- a/files/en-us/web/css/layout_cookbook/sticky_footers/index.md +++ b/files/en-us/web/css/layout_cookbook/sticky_footers/index.md @@ -71,7 +71,7 @@ body { } ``` -{{EmbedLiveSample("stiky-footer-example", "", "400px")}} +{{EmbedLiveSample("sticky-footer-example", "", "400px")}} > [!NOTE] > In this example and the following one we are using a wrapper set to `min-height: 100%`. You can also achieve this for a full page by setting a {{cssxref("min-height")}} of `100vh` on the {{htmlelement("body")}} and then using it as your grid container. @@ -142,7 +142,7 @@ body { } ``` -{{EmbedLiveSample("stiky-footer-flexbox-example", "", "400px")}} +{{EmbedLiveSample("sticky-footer-flexbox-example", "", "400px")}} The flexbox example starts out in the same way, but we use `display:flex` rather than `display:grid` on the `.wrapper`; we also set `flex-direction` to `column`. Then we set our main content to `flex-grow: 1` and the other two elements to `flex-shrink: 0` — this prevents them from shrinking smaller when content fills the main area. diff --git a/files/en-us/web/css/lighting-color/index.md b/files/en-us/web/css/lighting-color/index.md index 796cd25365cd5f2..a71a4c9817ac308 100644 --- a/files/en-us/web/css/lighting-color/index.md +++ b/files/en-us/web/css/lighting-color/index.md @@ -95,7 +95,7 @@ rect { } ``` -We then apply different lighting color values to the filter's child elements using the CSS `lighting-color` property. We use a named color and a 3-digit hexidecimal color, but we can use any valid CSS color syntax: +We then apply different lighting color values to the filter's child elements using the CSS `lighting-color` property. We use a named color and a 3-digit hexadecimal color, but we can use any valid CSS color syntax: ```css feDiffuseLighting { diff --git a/files/en-us/web/css/mod/index.md b/files/en-us/web/css/mod/index.md index ed08de3d19fcbee..6b4fa6bc7863d96 100644 --- a/files/en-us/web/css/mod/index.md +++ b/files/en-us/web/css/mod/index.md @@ -9,7 +9,7 @@ browser-compat: css.types.mod The **`mod()`** [CSS](/en-US/docs/Web/CSS) [function](/en-US/docs/Web/CSS/CSS_Functions) returns a modulus left over when the first parameter is divided by the second parameter, similar to the JavaScript [remainder operator (`%`)](/en-US/docs/Web/JavaScript/Reference/Operators/Remainder). The modulus is the value left over when one operand, the dividend, is divided by a second operand, the divisor. It always takes the sign of the divisor. -> For example, the CSS `mod(21, -4)` function returns the remainder of `-1`. When dividing 21 by -4, the result is 5 with a remainder of -1. The full calculation is `21 / -4 = -4 * 5 - 1`. +The calculation is `a - (Math.floor(a / b) * b)`. For example, the CSS `mod(21, -4)` function returns the remainder of `-3`. The full calculation is `21 - (Math.floor(21 / -4) * -4)`. When dividing `21` by `-4`, the result is `-5.25`. This is floored to `-6`. Multiplying `-6` by `-4` is `24`. Subtracting this `24` from the original `21`, the remainder is -3. ## Syntax diff --git a/files/en-us/web/html/element/index.md b/files/en-us/web/html/element/index.md index c70f5aebb75e3b9..a29231c76566bf1 100644 --- a/files/en-us/web/html/element/index.md +++ b/files/en-us/web/html/element/index.md @@ -30,7 +30,7 @@ Metadata contains information about the page. This includes information about st | {{HTMLElement("link")}} | Specifies relationships between the current document and an external resource. This element is most commonly used to link to CSS but is also used to establish site icons (both "favicon" style icons and icons for the home screen and apps on mobile devices) among other things. | | {{HTMLElement("meta")}} | Represents {{Glossary("Metadata","metadata")}} that cannot be represented by other HTML meta-related elements, like {{HTMLElement("base")}}, {{HTMLElement("link")}}, {{HTMLElement("script")}}, {{HTMLElement("style")}} and {{HTMLElement("title")}}. | | {{HTMLElement("style")}} | Contains style information for a document or part of a document. It contains CSS, which is applied to the contents of the document containing this element. | -| {{HTMLElement("title")}} | Defines the document's title that is shown in a {{glossary("Browser", "browser")}}'s title bar or a page's tab. It only contains text; tags within the element are ignored. | +| {{HTMLElement("title")}} | Defines the document's title that is shown in a {{glossary("Browser", "browser")}}'s title bar or a page's tab. It only contains text; HTML tags within the element, if any, are also treated as plain text. | ## Sectioning root diff --git a/files/en-us/web/html/element/slot/index.md b/files/en-us/web/html/element/slot/index.md index f925c462d8a064c..febf0d2df95e220 100644 --- a/files/en-us/web/html/element/slot/index.md +++ b/files/en-us/web/html/element/slot/index.md @@ -145,4 +145,5 @@ This element includes the [global attributes](/en-US/docs/Web/HTML/Global_attrib - HTML {{HTMLElement("template")}} element - HTML [`slot`](/en-US/docs/Web/HTML/Global_attributes/slot) attribute - CSS {{CSSXref("::slotted")}} pseudo-element +- CSS {{cssxref(":has-slotted")}} pseudo-class - [CSS scoping](/en-US/docs/Web/CSS/CSS_scoping) module diff --git a/files/en-us/web/html/element/template/index.md b/files/en-us/web/html/element/template/index.md index 28d54913f502bb0..ac37005283de8e3 100644 --- a/files/en-us/web/html/element/template/index.md +++ b/files/en-us/web/html/element/template/index.md @@ -380,7 +380,7 @@ Since `firstClone` is a `DocumentFragment`, only its children are added to `cont - [`part`](/en-US/docs/Web/HTML/Global_attributes/part) and [`exportparts`](/en-US/docs/Web/HTML/Global_attributes/exportparts) HTML attributes - {{HTMLElement("slot")}} HTML element -- {{CSSXref(":host")}}, {{CSSXref(":host_function", ":host()")}}, and {{CSSXref(":host-context", ":host-context()")}} CSS pseudo-classes +- {{CSSXref(":has-slotted")}}, {{CSSXref(":host")}}, {{CSSXref(":host_function", ":host()")}}, and {{CSSXref(":host-context", ":host-context()")}} CSS pseudo-classes - {{CSSXref("::part")}} and {{CSSXref("::slotted")}} CSS pseudo-elements - [`ShadowRoot`](/en-US/docs/Web/API/ShadowRoot) interface - [Using templates and slots](/en-US/docs/Web/API/Web_components/Using_templates_and_slots) diff --git a/files/en-us/web/html/element/video/index.md b/files/en-us/web/html/element/video/index.md index d24d7c7d1d419ff..f379af18948cf95 100644 --- a/files/en-us/web/html/element/video/index.md +++ b/files/en-us/web/html/element/video/index.md @@ -540,4 +540,4 @@ Some media file types let you provide more specific information using the [`code - {{htmlelement("audio")}} - [Using HTML audio and video](/en-US/docs/Learn/HTML/Multimedia_and_embedding/Video_and_audio_content) - [Manipulating video using canvas](/en-US/docs/Web/API/Canvas_API/Manipulating_video_using_canvas) -- [Configuring servers for Ogg media](/en-US/docs/Web/HTTP/Configuring_servers_for_Ogg_media) +- [Configuring servers for Ogg media](/en-US/docs/Web/Media/Formats/Configuring_servers_for_Ogg_media) diff --git a/files/en-us/web/html/global_attributes/autocorrect/index.md b/files/en-us/web/html/global_attributes/autocorrect/index.md index 92649984dd65106..1635258a12f174c 100644 --- a/files/en-us/web/html/global_attributes/autocorrect/index.md +++ b/files/en-us/web/html/global_attributes/autocorrect/index.md @@ -9,7 +9,11 @@ browser-compat: html.global_attributes.autocorrect {{HTMLSidebar("Global_attributes")}}{{SeeCompatTable}} -The **`autocorrect`** [global attribute](/en-US/docs/Web/HTML/Global_attributes) is an [enumerated](/en-US/docs/Glossary/Enumerated) attribute that controls whether editable text is automatically corrected for spelling and/or punctuation errors. +The **`autocorrect`** [global attribute](/en-US/docs/Web/HTML/Global_attributes) is an [enumerated](/en-US/docs/Glossary/Enumerated) attribute that controls whether autocorrection of editable text is enabled for spelling and/or punctuation errors. + +The specific autocorrection behavior, including which words are substituted, depends on the user agent and the services provided by the underlying device. +For example, on macOS a user agent might rely on [registered replacement text and punctuation](https://support.apple.com/en-vn/guide/mac-help/mh35735/mac). +Other devices and browsers may use a different approach. Autocorrection is relevant to editable text elements: @@ -62,7 +66,8 @@ We include two text `<input>` elements with different values for their `autocorr {{EmbedLiveSample("Basic example", "100%", "75")}} Enter invalid text into the fruit and vegetable text entry boxes above. -If auto-correction is enabled on your browser, a typo in a vegetable name should be auto-corrected, but not in a fruit name. +If auto-correction is supported on your browser, and there is an appropriate substitution provided by the underlying device, a typo in a vegetable name input should be auto-corrected. +Typos should not be corrected in the fruit name field. ### Enabling and disabling autocorrection @@ -138,11 +143,13 @@ resetButton.addEventListener("click", (e) => { #### Results -Enter invalid text into the name and biography text entry boxes below. -If auto-correction is enabled on your browser (see the log below) the text in the "Biography" should be auto-corrected, but not in the "Name" box. +If auto-correction is supported by your browser, the log area below the "Biography" and "Name" inputs should show that it is enabled for "Biography" inputs but not "Name" inputs. {{EmbedLiveSample("Enabling and disabling autocorrection", "100%", "250")}} +Enter invalid text into the name and biography text entry boxes. +If the device has a substitute for the entered word, this will be used to autocorrect text in the "Biography" input (only). + ## Specifications {{Specifications}} diff --git a/files/en-us/web/html/viewport_meta_tag/index.md b/files/en-us/web/html/viewport_meta_tag/index.md index b7de5f0112edd97..f8ad9993a85d8ed 100644 --- a/files/en-us/web/html/viewport_meta_tag/index.md +++ b/files/en-us/web/html/viewport_meta_tag/index.md @@ -21,7 +21,7 @@ However, this mechanism is not so good for pages that are optimized for narrow s ## Viewport basics -A typical mobile-optimized site contains something like the following: +The viewport is a comma-separated list of feature and value pairs. A typical mobile-optimized site contains something like the following: ```html <meta name="viewport" content="width=device-width, initial-scale=1" /> @@ -82,6 +82,10 @@ Allowed values are: - `overlays-content` - : Neither the {{Glossary("viewport")}} nor the {{Glossary("visual viewport")}} gets resized by the interactive widget. +```html +<meta name="viewport" content="interactive-widget=resizes-content" /> +``` + When the {{Glossary("viewport")}} gets resized, the initial [containing block](/en-US/docs/Web/CSS/Containing_block) also gets resized, thereby affecting the computed size of [viewport units](/en-US/docs/Web/CSS/length#relative_length_units_based_on_viewport). ## Common viewport sizes for mobile and tablet devices diff --git a/files/en-us/web/http/cookies/index.md b/files/en-us/web/http/cookies/index.md index abc3a7e5bcccf6e..9b69ed7b5dfb592 100644 --- a/files/en-us/web/http/cookies/index.md +++ b/files/en-us/web/http/cookies/index.md @@ -59,7 +59,7 @@ Set-Cookie: tasty_cookie=strawberry ``` > [!NOTE] -> Find out how to use the `Set-Cookie` header in various server-side languages/frameworks: [PHP](https://www.php.net/manual/en/function.setcookie.php), [Node.js](https://nodejs.org/dist/latest-v14.x/docs/api/http.html#http_response_setheader_name_value), [Python](https://docs.python.org/3/library/http.cookies.html), [Ruby on Rails](https://api.rubyonrails.org/classes/ActionDispatch/Cookies.html). +> Find out how to use the `Set-Cookie` header in various server-side languages/frameworks: [PHP](https://www.php.net/manual/en/function.setcookie.php), [Node.js](https://nodejs.org/docs/latest-v19.x/api/http.html#responsesetheadername-value), [Python](https://docs.python.org/3/library/http.cookies.html), [Ruby on Rails](https://api.rubyonrails.org/classes/ActionDispatch/Cookies.html). When a new request is made, the browser usually sends previously stored cookies for the current domain back to the server within a {{HTTPHeader("Cookie")}} HTTP header: diff --git a/files/en-us/web/http/csp/index.md b/files/en-us/web/http/csp/index.md index 90db5e6e973d7b7..ac3a1ba0130abaa 100644 --- a/files/en-us/web/http/csp/index.md +++ b/files/en-us/web/http/csp/index.md @@ -581,7 +581,7 @@ The server handling these requests can then store or process the incoming report ## See also -- [Mitigate cross-site scripting with a strict Content Security Policy](https://web.dev/strict-csp) on web.dev (2024) +- [Mitigate cross-site scripting with a strict Content Security Policy](https://web.dev/articles/strict-csp) on web.dev (2024) - [Content Security Policy: A successful mess between hardening and mitigation](https://infocondb.org/con/locomocosec/locomocosec-2019/content-security-policy-a-successful-mess-between-hardening-and-mitigation) - [Content Security Policy Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Content_Security_Policy_Cheat_Sheet.html) on owasp.org - [CSP Evaluator](https://csp-evaluator.withgoogle.com/) diff --git a/files/en-us/web/http/index.md b/files/en-us/web/http/index.md index a4b226900163107..db6bf240bfd6be4 100644 --- a/files/en-us/web/http/index.md +++ b/files/en-us/web/http/index.md @@ -93,7 +93,7 @@ Beginners are encouraged to start with the foundational guides before exploring - [Browser detection using the user agent](/en-US/docs/Web/HTTP/Browser_detection_using_the_user_agent) - : It's very rarely a good idea to use user agent sniffing to detect a browser, but there are edge cases that require it. This document will guide you in doing this as correctly as possible when this is necessary, with an emphasis on considerations to make before embarking on this route. -- [Configuring servers for Ogg media](/en-US/docs/Web/HTTP/Configuring_servers_for_Ogg_media) +- [Configuring servers for Ogg media](/en-US/docs/Web/Media/Formats/Configuring_servers_for_Ogg_media) - : This guide covers a few server configuration changes that may be necessary for your web server to correctly serve Ogg media files. This information may also be useful if you encounter other media types your server isn't already configured to recognize. diff --git a/files/en-us/web/http/methods/delete/index.md b/files/en-us/web/http/methods/delete/index.md index 2d5354d61115402..1fe67d973464052 100644 --- a/files/en-us/web/http/methods/delete/index.md +++ b/files/en-us/web/http/methods/delete/index.md @@ -2,7 +2,7 @@ title: DELETE slug: Web/HTTP/Methods/DELETE page-type: http-method -browser-compat: http.methods.DELETE +spec-urls: https://www.rfc-editor.org/rfc/rfc9110.html#name-delete --- {{HTTPSidebar}} @@ -111,7 +111,8 @@ Content-Length: 1234 ## Browser compatibility -{{Compat}} +The browser doesn't use the `DELETE` method for user-initiated actions, so "browser compatibility" doesn't apply. +Developers can set this request method using [`fetch()`](/en-US/docs/Web/API/Window/fetch). ## See also diff --git a/files/en-us/web/http/methods/patch/index.md b/files/en-us/web/http/methods/patch/index.md index 900733573ffc3e8..8f5dc735b478ccc 100644 --- a/files/en-us/web/http/methods/patch/index.md +++ b/files/en-us/web/http/methods/patch/index.md @@ -117,6 +117,11 @@ ETag: "e0023aa4f" {{Specifications}} +## Browser compatibility + +The browser doesn't use the `PATCH` method for user-initiated actions, so "browser compatibility" doesn't apply. +Developers can set this request method using [`fetch()`](/en-US/docs/Web/API/Window/fetch). + ## See also - [HTTP request methods](/en-US/docs/Web/HTTP/Methods) diff --git a/files/en-us/web/http/methods/put/index.md b/files/en-us/web/http/methods/put/index.md index 794e92d4835e5e0..43b57b5670d6cd9 100644 --- a/files/en-us/web/http/methods/put/index.md +++ b/files/en-us/web/http/methods/put/index.md @@ -90,7 +90,8 @@ Content-Location: /existing.html ## Browser compatibility -{{Compat}} +The browser doesn't use the `PUT` method for user-initiated actions, so "browser compatibility" doesn't apply. +Developers can set this request method using [`fetch()`](/en-US/docs/Web/API/Window/fetch). ## See also diff --git a/files/en-us/web/http/methods/trace/index.md b/files/en-us/web/http/methods/trace/index.md index 206be0fa4b4af64..4b2eff854ceb07a 100644 --- a/files/en-us/web/http/methods/trace/index.md +++ b/files/en-us/web/http/methods/trace/index.md @@ -96,6 +96,11 @@ Accept: */* {{Specifications}} +## Browser compatibility + +The browser doesn't use the `TRACE` method for user-initiated actions, so "browser compatibility" doesn't apply. +Developers can set this request method using [`fetch()`](/en-US/docs/Web/API/Window/fetch). + ## See also - [HTTP request methods](/en-US/docs/Web/HTTP/Methods) diff --git a/files/en-us/web/javascript/guide/regular_expressions/index.md b/files/en-us/web/javascript/guide/regular_expressions/index.md index 251f3b65844efcc..07ab0d0913ab478 100644 --- a/files/en-us/web/javascript/guide/regular_expressions/index.md +++ b/files/en-us/web/javascript/guide/regular_expressions/index.md @@ -157,18 +157,7 @@ For instance, to match the string "C:\\" where "C" can be any letter, you'd use If using the `RegExp` constructor with a string literal, remember that the backslash is an escape in string literals, so to use it in the regular expression, you need to escape it at the string literal level. `/a\*b/` and `new RegExp("a\\*b")` create the same expression, which searches for "a" followed by a literal "\*" followed by "b". -If escape strings are not already part of your pattern you can add them using {{jsxref("String.prototype.replace()")}}: - -```js -function escapeRegExp(string) { - return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string -} -``` - -The "g" after the regular expression is an option or flag that performs a global search, looking in the whole string and returning all matches. -It is explained in detail below in [Advanced Searching With Flags](#advanced_searching_with_flags). - -_Why isn't this built into JavaScript?_ There is a [proposal](https://github.com/tc39/proposal-regex-escaping) to add such a function to RegExp. +The {{jsxref("RegExp.escape()")}} function returns a new string where all special characters in regex syntax are escaped. This allows you to do `new RegExp(RegExp.escape("a*b"))` to create a regular expression that matches only the string `"a*b"`. ### Using parentheses diff --git a/files/en-us/web/javascript/reference/global_objects/object/groupby/index.md b/files/en-us/web/javascript/reference/global_objects/object/groupby/index.md index 5c11871c277c9af..b653f6b857a8c36 100644 --- a/files/en-us/web/javascript/reference/global_objects/object/groupby/index.md +++ b/files/en-us/web/javascript/reference/global_objects/object/groupby/index.md @@ -39,7 +39,7 @@ A [`null`-prototype object](/en-US/docs/Web/JavaScript/Reference/Global_Objects/ ## Description -`Object.groupBy()` calls a provided `callbackFn` function once for each element in an iterable. The callback function should return a string or symbol (values that are neither type are [coerced to strings](/en-US/docs/Web/JavaScript/Reference/Global_Objects/String#string_coercion)) indicating the group of the associated element. The values returned by `callbackFn` are used as keys for the object returned by `Map.groupBy()`. Each key has an associated array containing all the elements for which the callback returned the same value. +`Object.groupBy()` calls a provided `callbackFn` function once for each element in an iterable. The callback function should return a string or symbol (values that are neither type are [coerced to strings](/en-US/docs/Web/JavaScript/Reference/Global_Objects/String#string_coercion)) indicating the group of the associated element. The values returned by `callbackFn` are used as keys for the object returned by `Object.groupBy()`. Each key has an associated array containing all the elements for which the callback returned the same value. The elements in the returned object and the original iterable are the same (not {{Glossary("deep copy", "deep copies")}}). Changing the internal structure of the elements will be reflected in both the original iterable and the returned object. diff --git a/files/en-us/web/javascript/reference/global_objects/regexp/escape/index.md b/files/en-us/web/javascript/reference/global_objects/regexp/escape/index.md new file mode 100644 index 000000000000000..f7a3b0a04c8022b --- /dev/null +++ b/files/en-us/web/javascript/reference/global_objects/regexp/escape/index.md @@ -0,0 +1,108 @@ +--- +title: RegExp.escape() +slug: Web/JavaScript/Reference/Global_Objects/RegExp/escape +page-type: javascript-static-method +browser-compat: javascript.builtins.RegExp.escape +--- + +{{JSRef}} + +The **`RegExp.escape()`** static method [escapes](/en-US/docs/Web/JavaScript/Reference/Regular_expressions#escape_sequences) any potential regex syntax characters in a string, and returns a new string that can be safely used as a [literal](/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Literal_character) pattern for the {{jsxref("RegExp/RegExp", "RegExp()")}} constructor. + +When dynamically creating a {{jsxref("RegExp")}} with user-provided content, consider using this function to sanitize the input (unless the input is actually intended to contain regex syntax). In addition, don't try to re-implement its functionality by, for example, using {{jsxref("String.prototype.replaceAll()")}} to insert a `\` before all syntax characters. `RegExp.escape()` is designed to use escape sequences that work in many more edge cases/contexts than hand-crafted code is likely to achieve. + +## Syntax + +```js-nolint +RegExp.escape(string) +``` + +### Parameters + +- `string` + - : The string to escape. + +### Return value + +A new string that can be safely used as a literal pattern for the {{jsxref("RegExp/RegExp", "RegExp()")}} constructor. Namely, the following things in the input string are replaced: + +- The first character of the string, if it's either a decimal digit (0–9) or ASCII letter (a–z, A–Z), is escaped using the `\x` [character escape](/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Character_escape) syntax. For example, `RegExp.escape("foo")` returns `"\\x66oo"` (here and after, the two backslashes in a string literal denote a single backslash character). This step ensures that if this escaped string is embedded into a bigger pattern where it's immediately preceded by `\1`, `\x0`, `\u000`, etc., the leading character doesn't get interpreted as part of the escape sequence. +- Regex [syntax characters](/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Literal_character#description), including `^`, `$`, `\`, `.`, `*`, `+`, `?`, `(`, `)`, `[`, `]`, `{`, `}`, and `|`, as well as the `/` delimiter, are escaped by inserting a `\` character before them. For example, `RegExp.escape("foo.bar")` returns `"\\x66oo\\.bar"`, and `RegExp.escape("(foo)")` returns `"\\(foo\\)"`. +- Other punctuators, including `,`, `-`, `=`, `<`, `>`, `#`, `&`, `!`, `%`, `:`, `;`, `@`, `~`, `'`, `` ` ``, and `"`, are escaped using the `\x` syntax. For example, `RegExp.escape("foo-bar")` returns `"\\x66oo\\x2dbar"`. These characters cannot be escaped by prefixing with `\` because, for example, `/foo\-bar/u` is a syntax error. +- The characters with their own [character escape](/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Character_escape) sequences: `\f` (U+000C FORM FEED), `\n` (U+000A LINE FEED), `\r` (U+000D CARRIAGE RETURN), `\t` (U+0009 CHARACTER TABULATION), and `\v` (U+000B LINE TABULATION), are replaced with their escape sequences. For example, `RegExp.escape("foo\nbar")` returns `"\\x66oo\\nbar"`. +- The space character is escaped as `"\\x20"`. +- Other non-ASCII [line break and white space characters](/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#white_space) are replaced with one or two `\uXXXX` escape sequences representing their UTF-16 code units. For example, `RegExp.escape("foo\u2028bar")` returns `"\\x66oo\\u2028bar"`. +- [Lone surrogates](/en-US/docs/Web/JavaScript/Reference/Global_Objects/String#utf-16_characters_unicode_code_points_and_grapheme_clusters) are replaced with their `\uXXXX` escape sequences. For example, `RegExp.escape("foo\uD800bar")` returns `"\\x66oo\\ud800bar"`. + +### Exceptions + +- {{jsxref("TypeError")}} + - : Thrown if `string` is not a string. + +## Examples + +### Using RegExp.escape() + +The following examples demonstrate various inputs and outputs for the `RegExp.escape()` method. + +```js +RegExp.escape("Buy it. use it. break it. fix it."); +// "\\x42uy\\x20it\\.\\x20use\\x20it\\.\\x20break\\x20it\\.\\x20fix\\x20it\\." +RegExp.escape("foo.bar"); // "\\x66oo\\.bar" +RegExp.escape("foo-bar"); // "\\x66oo\\x2dbar" +RegExp.escape("foo\nbar"); // "\\x66oo\\nbar" +RegExp.escape("foo\uD800bar"); // "\\x66oo\\ud800bar" +RegExp.escape("foo\u2028bar"); // "\\x66oo\\u2028bar" +``` + +### Using RegExp.escape() with the RegExp constructor + +The primary use case of `RegExp.escape()` is when you want to embed a string into a bigger regex pattern, and you want to ensure that the string is treated as a literal pattern, not as a regex syntax. Consider the following naïve example that replaces URLs: + +```js +function removeDomain(text, domain) { + return text.replace(new RegExp(`https?://${domain}(?=/)`, "g"), ""); +} + +const input = + "Consider using [RegExp.escape()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/escape) to escape special characters in a string."; +const domain = "developer.mozilla.org"; +console.log(removeDomain(input, domain)); +// Consider using [RegExp.escape()](/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/escape) to escape special characters in a string. +``` + +Inserting the `domain` above results in the regular expression literal `https?://developer.mozilla.org(?=/)`, where the "." character is a regex [wildcard](/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Wildcard) character. This means the string will match the string with any character in place of the ".", such as `developer-mozilla-org`. Therefore, it would incorrectly also change the following text: + +```js +const input = + "This is not an MDN link: https://developer-mozilla.org/, be careful!"; +const domain = "developer.mozilla.org"; +console.log(removeDomain(input, domain)); +// This is not an MDN link: /, be careful! +``` + +To fix this, we can use `RegExp.escape()` to ensure that any user input is treated as a literal pattern: + +```js +function removeDomain(text, domain) { + return text.replace( + new RegExp(`https?://${RegExp.escape(domain)}(?=/)`, "g"), + "", + ); +} +``` + +Now this function will do exactly what we intend to, and will not transform `developer-mozilla.org` URLs. + +## Specifications + +{{Specifications}} + +## Browser compatibility + +{{Compat}} + +## See also + +- [Polyfill of `RegExp.escape` in `core-js`](https://github.com/zloirock/core-js#regexp-escaping) +- {{jsxref("RegExp")}} diff --git a/files/en-us/web/javascript/reference/global_objects/regexp/index.md b/files/en-us/web/javascript/reference/global_objects/regexp/index.md index cfc700508d36262..1866385e0c892cb 100644 --- a/files/en-us/web/javascript/reference/global_objects/regexp/index.md +++ b/files/en-us/web/javascript/reference/global_objects/regexp/index.md @@ -115,6 +115,11 @@ Note that several of the `RegExp` properties have both long and short (Perl-like - [`RegExp[Symbol.species]`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/Symbol.species) - : The constructor function that is used to create derived objects. +## Static methods + +- {{jsxref("RegExp.escape()")}} + - : [Escapes](/en-US/docs/Web/JavaScript/Reference/Regular_expressions#escape_sequences) any potential regex syntax characters in a string, and returns a new string that can be safely used as a [literal](/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Literal_character) pattern for the {{jsxref("RegExp/RegExp", "RegExp()")}} constructor. + ## Instance properties These properties are defined on `RegExp.prototype` and shared by all `RegExp` instances. diff --git a/files/en-us/web/javascript/reference/global_objects/string/replaceall/index.md b/files/en-us/web/javascript/reference/global_objects/string/replaceall/index.md index 92406649d173bfc..4b9aa7795b4e49e 100644 --- a/files/en-us/web/javascript/reference/global_objects/string/replaceall/index.md +++ b/files/en-us/web/javascript/reference/global_objects/string/replaceall/index.md @@ -41,7 +41,7 @@ A new string, with all matches of a pattern replaced by a replacement. This method does not mutate the string value it's called on. It returns a new string. -Unlike [`replace()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace), this method would replace all occurrences of a string, not just the first one. This is especially useful if the string is not statically known, as calling the [`RegExp()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/RegExp) constructor without escaping special characters may unintentionally change its semantics. +Unlike [`replace()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace), this method replaces all occurrences of a string, not just the first one. While it is also possible to use `replace()` with a global regex dynamically constructed with [`RegExp()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/RegExp) to replace all instances of a string, this can have unintended consequences if the string contains special characters that have meaning in regular expressions (which might happen if the replacement string comes from user input). While you can mitigate this case using {{jsxref("RegExp.escape()")}} to make the regular expression string into a literal pattern, it is better to just use `replaceAll()` and pass the string without converting it to a regex. ```js function unsafeRedactName(text, name) { diff --git a/files/en-us/web/javascript/reference/regular_expressions/index.md b/files/en-us/web/javascript/reference/regular_expressions/index.md index f57391d0cef144c..fddd05c6ea4cf6e 100644 --- a/files/en-us/web/javascript/reference/regular_expressions/index.md +++ b/files/en-us/web/javascript/reference/regular_expressions/index.md @@ -147,7 +147,7 @@ _Escape sequences_ in regexes refer to any kind of syntax formed by `\` followed [VCC]: /en-US/docs/Web/JavaScript/Reference/Regular_expressions/Character_class#v-mode_character_class [WBA]: /en-US/docs/Web/JavaScript/Reference/Regular_expressions/Word_boundary_assertion -`\` followed by any other digit character becomes a [legacy octal escape sequence](/en-US/docs/Web/JavaScript/Reference/Deprecated_and_obsolete_features#escape_sequences), which is forbidden in [Unicode-aware mode](/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/unicode#unicode-aware_mode). +`\` followed by `0` and another digit becomes a [legacy octal escape sequence](/en-US/docs/Web/JavaScript/Reference/Deprecated_and_obsolete_features#escape_sequences), which is forbidden in [Unicode-aware mode](/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/unicode#unicode-aware_mode). `\` followed by any other digit sequence becomes a [backreference](/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Backreference). In addition, `\` can be followed by some non-letter-or-digit characters, in which case the escape sequence is always a [character escape](/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Character_escape) representing the escaped character itself: diff --git a/files/en-us/web/http/configuring_servers_for_ogg_media/index.md b/files/en-us/web/media/formats/configuring_servers_for_ogg_media/index.md similarity index 52% rename from files/en-us/web/http/configuring_servers_for_ogg_media/index.md rename to files/en-us/web/media/formats/configuring_servers_for_ogg_media/index.md index c372c76bacf91eb..6e43615ffc4634a 100644 --- a/files/en-us/web/http/configuring_servers_for_ogg_media/index.md +++ b/files/en-us/web/media/formats/configuring_servers_for_ogg_media/index.md @@ -1,42 +1,44 @@ --- title: Configuring servers for Ogg media -slug: Web/HTTP/Configuring_servers_for_Ogg_media +slug: Web/Media/Formats/Configuring_servers_for_Ogg_media page-type: guide --- -{{HTTPSidebar}} +{{QuickLinksWithSubpages("/en-US/docs/Web/Media")}} -HTML {{HTMLElement("audio")}} and {{HTMLElement("video")}} elements allow media presentation without the need for the user to install any plug-ins or other software to do so. -This guide covers a few server configuration changes that may be necessary for your web server to correctly serve Ogg media files. +HTML {{HTMLElement("audio")}} and {{HTMLElement("video")}} elements allow media presentation without the need for the user to install extensions or other software. +This guide covers server configuration that may be necessary to correctly serve Ogg media files. This information may also be useful if you encounter other media types your server isn't already configured to recognize. ## Serve media with the correct MIME type -`*.ogg` and `*.ogv` files containing video (possibly with an audio track as well, of course), should be served with the `video/ogg` MIME type. `*.oga` and `*.ogg` files containing only audio should be served with the `audio/ogg` MIME type. - If you don't know whether the Ogg file contains audio or video, you can serve it with the MIME type `application/ogg`, and the browser will treat it as a video file. -Most servers don't by default serve Ogg media with the correct MIME types, so you'll likely need to add the appropriate configuration for this. +- `*.ogg` and `*.ogv` files containing video (possibly with an audio track as well, of course), should be served with the `video/ogg` MIME type. +- `*.oga` and `*.ogg` files containing only audio should be served with the `audio/ogg` MIME type. + +Most servers don't serve Ogg media with the correct MIME types by default, so you'll likely need to add the appropriate configuration for this. For Apache, you can add the following to your configuration: -```plain +```apacheconf AddType audio/ogg .oga AddType video/ogg .ogv AddType application/ogg .ogg ``` -You can find specific information about possible media file types and the codecs used within them in our comprehensive [guide to media types and formats on the web](/en-US/docs/Web/Media/Formats). In particular, the article on [media container formats](/en-US/docs/Web/Media/Formats/Containers) will be especially helpful when configuring servers to host media properly. +The article on [media container formats](/en-US/docs/Web/Media/Formats/Containers) is especially helpful when configuring servers to host media properly. -## Handle HTTP 1.1 byte range requests correctly +## Handle range requests correctly -In order to support seeking and playing back regions of the media that aren't yet downloaded, Firefox uses HTTP 1.1 byte-range requests to retrieve the media from the seek target position. +In order to support seeking and playing back regions of the media that aren't yet downloaded, you can uses [range requests](/en-US/docs/Web/HTTP/Range_requests) to retrieve the media from the seek target position. In addition, it uses byte-range requests to seek to the end of the media (assuming you serve the {{HTTPHeader("Content-Length")}} header) in order to determine the duration of the media. -Your server should accept the {{HTTPHeader("Accept-Ranges")}}`: bytes` HTTP header if it can accept byte-range requests. It must return {{HTTPStatus("206")}}`: Partial content` to all byte range requests; otherwise, browsers can't be sure you actually support byte range requests. +Your server should accept the {{HTTPHeader("Accept-Ranges")}} header if it can accept range requests. +It must return {{HTTPStatus("206", "206 Partial Content")}} to all range requests, otherwise browsers can't determine if the server supports range requests. Your server must also return `206: Partial Content` for the request `Range: bytes=0-` as well. -For more information, see [HTTP range requests](/en-US/docs/Web/HTTP/Range_requests). +See [range requests](/en-US/docs/Web/HTTP/Range_requests) for more information. ## Include regular key frames @@ -49,32 +51,12 @@ By default, [`ffmpeg2theora`](https://gitlab.xiph.org/xiph/ffmpeg2theora) uses o ## Consider using the preload attribute -The HTML {{HTMLElement("audio")}} and {{HTMLElement("video")}} elements provide the `preload` attribute, which tells the browser to attempt to download the entire media when the page loads. Without `preload`, the browser only downloads enough of the media to display the first video frame, and to determine the media's duration. - -`preload` is off by default, so if getting to video is the point of your web page, your users may appreciate it if you include `preload` in your video elements. Using `preload="metadata"` will preload the media file's metadata and possibly the first few frames of video. Setting `payload` to `auto` tells the browser to automatically begin downloading the media as soon as the page is loaded, under the assumption that the user will play it. - -## Configuration for older Firefox versions - -### Serve X-Content-Duration headers - -> [!NOTE] -> As of [Firefox 41](/en-US/docs/Mozilla/Firefox/Releases/41), the `X-Content-Duration` header is no longer supported. See [Firefox bug 1160695](https://bugzil.la/1160695) for more details. - -The Ogg format doesn't encapsulate the duration of media, so for the progress bar on the video controls to display the duration of the video, Gecko needs to determine the length of the media using other means. - -There are two ways Gecko can do this. The best way is to offer an `X-Content-Duration` header when serving Ogg media files. This header provides the duration of the video in seconds (**not** in HH:MM:SS format) as a floating-point value. - -For example, if the video is 1 minute and 32.6 seconds long, this header would be: - -```http -X-Content-Duration: 92.6 -``` - -If your server provides the `X-Content-Duration` header when serving Ogg media, Gecko doesn't have to do any extra HTTP requests to seek to the end of the file to calculate its duration. This makes the entire process much more efficient as well as more accurate. +The HTML {{HTMLElement("audio")}} and {{HTMLElement("video")}} elements provide the `preload` attribute, which tells the browser to attempt to download the entire media when the page loads. Without `preload`, the browser downloads enough of the media to display the first video frame, and to determine the media's duration. -As an inferior alternative, Gecko can estimate the video length based on the Content-Length. See next point. +- `preload` is off by default, so if getting to video is the point of your web page, your users may appreciate it if you include `preload` in your video elements. +- Using `preload="metadata"` will preload the media file's metadata and possibly the first few frames of video. Setting `payload` to `auto` tells the browser to automatically begin downloading the media as soon as the page is loaded, under the assumption that the user will play it. -### Don't use HTTP compression for media files +## Don't use HTTP compression for Ogg media One common way to reduce the load on a web server is to use [gzip or deflate compression](https://betterexplained.com/articles/how-to-optimize-your-site-with-gzip-compression/) when serving to a supporting web browser. @@ -82,11 +64,11 @@ Although it's unlikely, it's possible the browser may advertise that it supports Another problem with allowing HTTP compression for media streaming: Apache servers don't send the {{HTTPHeader("Content-Length")}} response header if gzip encoding is used. -### Getting the duration of Ogg media +## Getting the duration of Ogg media You can use the `oggz-info` tool to get the media duration; this tool is included with the [`oggz-tools`](https://www.xiph.org/oggz/) package. The output from `oggz-info` looks like this: -```plain +```bash $ oggz-info /g/media/bruce_vs_ironman.ogv Content-Duration: 00:01:00.046 @@ -107,12 +89,13 @@ Vorbis: serialno 0708996688 Audio-Channels: 2 ``` -Note that you can't serve up the reported Content-Duration line reported by `oggz-info`, because it's reported in HH:MM:SS format. You'll need to convert it to seconds only, then serve that as your `X-Content-Duration` value. Just parse out the HH, MM, and SS into numbers, then do (HH\*3600)+(MM\*60)+SS to get the value you should report. +Note that you can't serve up the reported Content-Duration line reported by `oggz-info`, because it's reported in `HH:MM:SS` format. +You'll need to convert it to seconds, then serve that as your `X-Content-Duration` value. +You can do this by parsing the `HH`, `MM`, and `SS` segments, then convert to `(HH * 3600) + (MM * 60) + SS` as the value you should report. It's important to note that it appears that `oggz-info` makes a read pass of the media in order to calculate its duration, so it's a good idea to store the duration value in order to avoid lengthy delays while the value is calculated for every HTTP request of your Ogg media. ## See also -- [Guide to media types and formats on the web](/en-US/docs/Web/Media/Formats) - [Video and audio content](/en-US/docs/Learn/HTML/Multimedia_and_embedding/Video_and_audio_content) - [Codecs in common media types](/en-US/docs/Web/Media/Formats/codecs_parameter) diff --git a/files/en-us/web/svg/attribute/zoomandpan/index.md b/files/en-us/web/svg/attribute/zoomandpan/index.md index 22ae9f4b8c89d74..ec42c310af09124 100644 --- a/files/en-us/web/svg/attribute/zoomandpan/index.md +++ b/files/en-us/web/svg/attribute/zoomandpan/index.md @@ -4,7 +4,9 @@ slug: Web/SVG/Attribute/zoomAndPan page-type: svg-attribute status: - deprecated -browser-compat: svg.elements.svg.zoomAndPan +browser-compat: + - svg.elements.svg.zoomAndPan + - svg.elements.view.zoomAndPan --- {{SVGRef}}{{Deprecated_Header}} diff --git a/files/en-us/web/svg/element/a/index.md b/files/en-us/web/svg/element/a/index.md index 35a94048e22e626..50099ba9a6f5b14 100644 --- a/files/en-us/web/svg/element/a/index.md +++ b/files/en-us/web/svg/element/a/index.md @@ -76,7 +76,7 @@ svg|a:active { _Value type_: **[\<URL>](/en-US/docs/Web/SVG/Content_type#url)** ; _Default value_: _none_; _Animatable_: **yes** - [`hreflang`](/en-US/docs/Web/HTML/Element/a#hreflang) - : The human language of the URL or URL fragment that the hyperlink points to. - _Value type_: **\<string>** ; _Default value_: _none_; _Animatable_: **yes** + _Value type_: **\<string>** ; _Default value_: _none_; _Animatable_: **no** - [`ping`](/en-US/docs/Web/HTML/Element/a#ping) {{experimental_inline}} - : A space-separated list of URLs to which, when the hyperlink is followed, {{HTTPMethod("POST")}} requests with the body `PING` will be sent by the browser (in the background). Typically used for tracking. For a more widely-supported feature addressing the same use cases, see {{domxref("Navigator.sendBeacon()")}}. _Value type_: **[\<list-of-URLs>](/en-US/docs/Web/SVG/Content_type#list-of-ts)** ; _Default value_: _none_; _Animatable_: **no** @@ -85,13 +85,13 @@ svg|a:active { _Value type_: `no-referrer`|`no-referrer-when-downgrade`|`same-origin`|`origin`|`strict-origin`|`origin-when-cross-origin`|`strict-origin-when-cross-origin`|`unsafe-url` ; _Default value_: _none_; _Animatable_: **no** - [`rel`](/en-US/docs/Web/HTML/Element/a#rel) - : The relationship of the target object to the link object. - _Value type_: **[\<list-of-Link-Types>](/en-US/docs/Web/HTML/Attributes/rel)** ; _Default value_: _none_; _Animatable_: **yes** + _Value type_: **[\<list-of-Link-Types>](/en-US/docs/Web/HTML/Attributes/rel)** ; _Default value_: _none_; _Animatable_: **no** - {{SVGAttr("target")}} - : Where to display the linked {{Glossary("URL")}}. - _Value type_: `_self`|`_parent`|`_top`|`_blank`|**\<name>** ; _Default value_: `_self`; _Animatable_: **yes** + _Value type_: `_self`|`_parent`|`_top`|`_blank`|**\<XML-Name>** ; _Default value_: `_self`; _Animatable_: **yes** - [`type`](/en-US/docs/Web/HTML/Element/a#type) - : A {{Glossary("MIME type")}} for the linked URL. - _Value type_: **\<string>** ; _Default value_: _none_; _Animatable_: **yes** + _Value type_: **\<string>** ; _Default value_: _none_; _Animatable_: **no** - {{SVGAttr("xlink:href")}} {{deprecated_inline}} - : The URL or URL fragment that the hyperlink points to. May be required for backwards compatibility for older browsers. _Value type_: **[\<URL>](/en-US/docs/Web/SVG/Content_type#url)** ; _Default value_: _none_; _Animatable_: **yes** diff --git a/files/en-us/web/svg/element/view/index.md b/files/en-us/web/svg/element/view/index.md index 607a2ec46aa4a53..7d8738696d11b92 100644 --- a/files/en-us/web/svg/element/view/index.md +++ b/files/en-us/web/svg/element/view/index.md @@ -15,9 +15,15 @@ The **`<view>`** [SVG](/en-US/docs/Web/SVG) element defines a particular view of ## Attributes -- {{SVGAttr("viewBox")}} - {{SVGAttr("preserveAspectRatio")}} + - : This attribute defines how the SVG fragment must be deformed if it is embedded in a container with a different {{glossary("aspect ratio")}}. + _Value type_: (`none`| `xMinYMin`| `xMidYMin`| `xMaxYMin`| `xMinYMid`| `xMidYMid`| `xMaxYMid`| `xMinYMax`| `xMidYMax`| `xMaxYMax`) (`meet`|`slice`)? ; _Default value_: `xMidYMid meet`; _Animatable_: **yes** +- {{SVGAttr("viewBox")}} + - : This attribute defines the bound of the SVG viewport for the pattern fragment. + _Value type_: **[\<list-of-numbers>](/en-US/docs/Web/SVG/Content_type#list-of-ts)** ; _Default value_: none; _Animatable_: **yes** - {{SVGAttr("zoomAndPan")}} {{Deprecated_Inline}} {{Non-standard_Inline}} + - : This attribute specifies whether the SVG document can be magnified and panned. + _Value type_: **disable | magnify** ; _Default value_: magnify; _Animatable_: **no** ## Example @@ -50,10 +56,6 @@ The **`<view>`** [SVG](/en-US/docs/Web/SVG) element defines a particular view of {{EmbedLiveSample("Example", "85ch", "240px")}} -## DOM Interface - -This element implements the {{domxref("SVGViewElement")}} interface. - ## Specifications {{Specifications}} diff --git a/files/jsondata/InterfaceData.json b/files/jsondata/InterfaceData.json index 252c1d71b5676f5..f14933242f584c0 100644 --- a/files/jsondata/InterfaceData.json +++ b/files/jsondata/InterfaceData.json @@ -2252,6 +2252,10 @@ "inh": "", "impl": [] }, + "MLTensor": { + "inh": "", + "impl": [] + }, "Module": { "inh": "", "impl": [] diff --git a/files/jsondata/SVGData.json b/files/jsondata/SVGData.json index d72439d48b53884..dad3a9f05bbdf8c 100644 --- a/files/jsondata/SVGData.json +++ b/files/jsondata/SVGData.json @@ -29,19 +29,19 @@ ] }, "attributes": [ + "ariaAttributes", "conditionalProcessingAttributes", "coreAttributes", - "graphicalEventAttributes", "presentationAttributes", "xLinkAttributes", - "'class'", - "'style'", - "'externalResourcesRequired'", - "'transform'", - "'xlink:show'", - "'xlink:actuate'", - "'xlink:href'", - "'target'" + "'href'", + "'target'", + "'download'", + "'ping'", + "'rel'", + "'hreflang'", + "'type'", + "'referrerpolicy'" ], "interfaces": ["SVGAElement"] }, diff --git a/files/sidebars/httpsidebar.yaml b/files/sidebars/httpsidebar.yaml index 0fcf158711bd206..82f26486005abd7 100644 --- a/files/sidebars/httpsidebar.yaml +++ b/files/sidebars/httpsidebar.yaml @@ -17,7 +17,7 @@ sidebar: - /Web/HTTP/Conditional_requests - /Web/HTTP/Range_requests - /Web/HTTP/Content_negotiation - - /Web/HTTP/Connection_management_in_HTTP_1 + - /Web/HTTP/Connection_management_in_HTTP_1.x - /Web/HTTP/Evolution_of_HTTP - /Web/HTTP/Protocol_upgrade_mechanism - /Web/HTTP/Proxy_servers_and_tunneling @@ -31,7 +31,7 @@ sidebar: - /Web/HTTP/Permissions_Policy - /Web/HTTP/CSP - /Web/HTTP/CORS - - /Web/HTTP/Cross + - /Web/HTTP/Cross-Origin_Resource_Policy - /Web/HTTP/Headers - type: section title: Reference diff --git a/package.json b/package.json index d04d4029a6f9026..c95466c28cf574a 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "lint:yml": "prettier -c \"**/*.yml\"", "prepare": "husky || true", "start": "yarn up-to-date-check && env-cmd --silent cross-env CONTENT_ROOT=files REACT_APP_DISABLE_AUTH=true BUILD_OUT_ROOT=build yari-server", + "start:rari": "yarn up-to-date-check && env-cmd --silent cross-env CONTENT_ROOT=files REACT_APP_DISABLE_AUTH=true BUILD_OUT_ROOT=build rari-server", "up-to-date-check": "node scripts/up-to-date-check.js", "jest": "cross-env NODE_OPTIONS=--experimental-vm-modules jest", "test:front-matter-linter": "yarn jest tests" @@ -41,7 +42,7 @@ "dependencies": { "@apideck/better-ajv-errors": "^0.3.6", "@caporal/core": "^2.0.7", - "@mdn/yari": "2.65.1", + "@mdn/yari": "3.0.1", "ajv": "^8.17.1", "ajv-formats": "^3.0.1", "async": "^3.2.6", diff --git a/yarn.lock b/yarn.lock index 2e19cf4b11fc2df..b5327dbf7cc480f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -19,6 +19,15 @@ jsonpointer "^5.0.0" leven "^3.1.0" +"@apidevtools/json-schema-ref-parser@^11.5.5": + version "11.7.2" + resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-11.7.2.tgz#cdf3e0aded21492364a70e193b45b7cf4177f031" + integrity sha512-4gY54eEGEstClvEkGnwVkTkrx0sqwemEFG5OSRRn3tD91XH0+Q8XIkYIfo7IwEWPpJZwILb9GUXeShtplRc/eA== + dependencies: + "@jsdevtools/ono" "^7.1.3" + "@types/json-schema" "^7.0.15" + js-yaml "^4.1.0" + "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" @@ -339,10 +348,10 @@ "@codemirror/view" "^6.27.0" "@lezer/common" "^1.1.0" -"@codemirror/lang-css@^6.0.0", "@codemirror/lang-css@^6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@codemirror/lang-css/-/lang-css-6.3.0.tgz#607628559f2471b385c6070ec795072a55cffc0b" - integrity sha512-CyR4rUNG9OYcXDZwMPvJdtb6PHbBDKUc/6Na2BIwZ6dKab1JQqKa4di+RNRY9Myn7JB81vayKwJeQ7jEdmNVDA== +"@codemirror/lang-css@^6.0.0", "@codemirror/lang-css@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@codemirror/lang-css/-/lang-css-6.3.1.tgz#763ca41aee81bb2431be55e3cfcc7cc8e91421a3" + integrity sha512-kr5fwBGiGtmz6l0LSJIbno9QrifNMUusivHbnA1H6Dmqy4HZFte3UAICix1VuKo0lMPKQr2rqB+0BkKi/S3Ejg== dependencies: "@codemirror/autocomplete" "^6.0.0" "@codemirror/language" "^6.0.0" @@ -458,32 +467,32 @@ lodash.isundefined "^3.0.1" lodash.uniq "^4.5.0" -"@inquirer/checkbox@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-4.0.1.tgz#adf127d4fe161a939a1d8cafee25e50d878d1184" - integrity sha512-ehJjmNPdguajc1hStvjN7DJNVjwG5LC1mgGMGFjCmdkn2fxB2GtULftMnlaqNmvMdPpqdaSoOFpl86VkLtG4pQ== +"@inquirer/checkbox@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-4.0.2.tgz#e45e0ad2611f2cb2d337ba36c7d955b53f195914" + integrity sha512-+gznPl8ip8P8HYHYecDtUtdsh1t2jvb+sWCD72GAiZ9m45RqwrLmReDaqdC0umQfamtFXVRoMVJ2/qINKGm9Tg== dependencies: - "@inquirer/core" "^10.0.1" - "@inquirer/figures" "^1.0.7" - "@inquirer/type" "^3.0.0" + "@inquirer/core" "^10.1.0" + "@inquirer/figures" "^1.0.8" + "@inquirer/type" "^3.0.1" ansi-escapes "^4.3.2" yoctocolors-cjs "^2.1.2" -"@inquirer/confirm@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-5.0.1.tgz#35e0aa0f9fdaadee3acb1c42024e707af308fced" - integrity sha512-6ycMm7k7NUApiMGfVc32yIPp28iPKxhGRMqoNDiUjq2RyTAkbs5Fx0TdzBqhabcKvniDdAAvHCmsRjnNfTsogw== +"@inquirer/confirm@^5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-5.0.2.tgz#2b9dcf6b7da5f518c74abe4aeaf3173253d83c93" + integrity sha512-KJLUHOaKnNCYzwVbryj3TNBxyZIrr56fR5N45v6K9IPrbT6B7DcudBMfylkV1A8PUdJE15mybkEQyp2/ZUpxUA== dependencies: - "@inquirer/core" "^10.0.1" - "@inquirer/type" "^3.0.0" + "@inquirer/core" "^10.1.0" + "@inquirer/type" "^3.0.1" -"@inquirer/core@^10.0.1": - version "10.0.1" - resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-10.0.1.tgz#22068da87d8f6317452172dfd521e811ccbcb90e" - integrity sha512-KKTgjViBQUi3AAssqjUFMnMO3CM3qwCHvePV9EW+zTKGKafFGFF01sc1yOIYjLJ7QU52G/FbzKc+c01WLzXmVQ== +"@inquirer/core@^10.1.0": + version "10.1.0" + resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-10.1.0.tgz#c5fdc34c4cafd7248da29a3c3b3120fe6e1c45be" + integrity sha512-I+ETk2AL+yAVbvuKx5AJpQmoaWhpiTFOg/UJb7ZkMAK4blmtG8ATh5ct+T/8xNld0CZG/2UhtkdMwpgvld92XQ== dependencies: - "@inquirer/figures" "^1.0.7" - "@inquirer/type" "^3.0.0" + "@inquirer/figures" "^1.0.8" + "@inquirer/type" "^3.0.1" ansi-escapes "^4.3.2" cli-width "^4.1.0" mute-stream "^2.0.0" @@ -492,104 +501,123 @@ wrap-ansi "^6.2.0" yoctocolors-cjs "^2.1.2" -"@inquirer/editor@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-4.0.1.tgz#5db61ad3f1ce1b468b4b353d661787dcfa52a3a3" - integrity sha512-qAHHJ6hs343eNtCKgV2wV5CImFxYG8J1pl/YCeI5w9VoW7QpulRUU26+4NsMhjR6zDRjKBsH/rRjCIcaAOHsrg== +"@inquirer/editor@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-4.1.0.tgz#bc1a8bebe5897d4b44b0bfab1aeb1b5172f8d812" + integrity sha512-K1gGWsxEqO23tVdp5MT3H799OZ4ER1za7Dlc8F4um0W7lwSv0KGR/YyrUEyimj0g7dXZd8XknM/5QA2/Uy+TbA== dependencies: - "@inquirer/core" "^10.0.1" - "@inquirer/type" "^3.0.0" + "@inquirer/core" "^10.1.0" + "@inquirer/type" "^3.0.1" external-editor "^3.1.0" -"@inquirer/expand@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-4.0.1.tgz#e699d53c62312f097333208bb6ad777036438536" - integrity sha512-9anjpdc802YInXekwePsa5LWySzVMHbhVS6v6n5IJxrl8w09mODOeP69wZ1d0WrOvot2buQSmYp4lW/pq8y+zQ== +"@inquirer/expand@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-4.0.2.tgz#7b5c332ad604d7d076e7052b8e5006a3b61c3274" + integrity sha512-WdgCX1cUtinz+syKyZdJomovULYlKUWZbVYZzhf+ZeeYf4htAQ3jLymoNs3koIAKfZZl3HUBb819ClCBfyznaw== dependencies: - "@inquirer/core" "^10.0.1" - "@inquirer/type" "^3.0.0" + "@inquirer/core" "^10.1.0" + "@inquirer/type" "^3.0.1" yoctocolors-cjs "^2.1.2" -"@inquirer/figures@^1.0.7": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.7.tgz#d050ccc0eabfacc0248c4ff647a9dfba1b01594b" - integrity sha512-m+Trk77mp54Zma6xLkLuY+mvanPxlE4A7yNKs2HBiyZ4UkVs28Mv5c/pgWrHeInx+USHeX/WEPzjrWrcJiQgjw== +"@inquirer/figures@^1.0.8": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.8.tgz#d9e414a1376a331a0e71b151fea27c48845788b0" + integrity sha512-tKd+jsmhq21AP1LhexC0pPwsCxEhGgAkg28byjJAd+xhmIs8LUX8JbUc3vBf3PhLxWiB5EvyBE5X7JSPAqMAqg== -"@inquirer/input@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-4.0.1.tgz#7b676aad726e8a3baf3793cf1e9cec665a815a2b" - integrity sha512-m+SliZ2m43cDRIpAdQxfv5QOeAQCuhS8TGLvtzEP1An4IH1kBES4RLMRgE/fC+z29aN8qYG8Tq/eXQQKTYwqAg== +"@inquirer/input@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-4.0.2.tgz#be77b79a1ed182444a6eef2d850309639aa9df22" + integrity sha512-yCLCraigU085EcdpIVEDgyfGv4vBiE4I+k1qRkc9C5dMjWF42ADMGy1RFU94+eZlz4YlkmFsiyHZy0W1wdhaNg== dependencies: - "@inquirer/core" "^10.0.1" - "@inquirer/type" "^3.0.0" + "@inquirer/core" "^10.1.0" + "@inquirer/type" "^3.0.1" -"@inquirer/number@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@inquirer/number/-/number-3.0.1.tgz#21666eff686c9f97396d23ae58f62d244d6338d6" - integrity sha512-gF3erqfm0snpwBjbyKXUUe17QJ7ebm49btXApajrM0rgCCoYX0o9W5NCuYNae87iPxaIJVjtuoQ42DX32IdbMA== +"@inquirer/number@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@inquirer/number/-/number-3.0.2.tgz#7e8315b41601d377cc09802b66f32b481e14fd68" + integrity sha512-MKQhYofdUNk7eqJtz52KvM1dH6R93OMrqHduXCvuefKrsiMjHiMwjc3NZw5Imm2nqY7gWd9xdhYrtcHMJQZUxA== dependencies: - "@inquirer/core" "^10.0.1" - "@inquirer/type" "^3.0.0" + "@inquirer/core" "^10.1.0" + "@inquirer/type" "^3.0.1" -"@inquirer/password@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-4.0.1.tgz#22f47e9a40255c2244eb57aeeeee76b6642759c5" - integrity sha512-D7zUuX4l4ZpL3D7/SWu9ibijP09jigwHi/gfUHLx5GMS5oXzuMfPV2xPMG1tskco4enTx70HA0VtMXecerpvbg== +"@inquirer/password@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-4.0.2.tgz#5913e2818b3de1ee6f63ec1b0891a43c1d4bdca9" + integrity sha512-tQXGSu7IO07gsYlGy3VgXRVsbOWqFBMbqAUrJSc1PDTQQ5Qdm+QVwkP0OC0jnUZ62D19iPgXOMO+tnWG+HhjNQ== dependencies: - "@inquirer/core" "^10.0.1" - "@inquirer/type" "^3.0.0" + "@inquirer/core" "^10.1.0" + "@inquirer/type" "^3.0.1" ansi-escapes "^4.3.2" -"@inquirer/prompts@^7.0.1": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@inquirer/prompts/-/prompts-7.0.1.tgz#089dbb83b34a6f68a515d77ad7f9f0a42b4ba758" - integrity sha512-cu2CpGC2hz7WTt2VBvdkzahDvYice6vYA/8Dm7Fy3tRNzKuQTF2EY3CV4H2GamveWE6tA2XzyXtbWX8+t4WMQg== - dependencies: - "@inquirer/checkbox" "^4.0.1" - "@inquirer/confirm" "^5.0.1" - "@inquirer/editor" "^4.0.1" - "@inquirer/expand" "^4.0.1" - "@inquirer/input" "^4.0.1" - "@inquirer/number" "^3.0.1" - "@inquirer/password" "^4.0.1" - "@inquirer/rawlist" "^4.0.1" - "@inquirer/search" "^3.0.1" - "@inquirer/select" "^4.0.1" - -"@inquirer/rawlist@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-4.0.1.tgz#3f3a46881c0b50dc8361ec9add14b38568bc34c8" - integrity sha512-0LuMOgaWs7W8JNcbiKkoFwyWFDEeCmLqDCygF0hidQUVa6J5grFVRZxrpompiWDFM49Km2rf7WoZwRo1uf1yWQ== +"@inquirer/prompts@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@inquirer/prompts/-/prompts-7.1.0.tgz#a55ee589c0eed0ca2ee0fbc7fc63f42f4c31a24e" + integrity sha512-5U/XiVRH2pp1X6gpNAjWOglMf38/Ys522ncEHIKT1voRUvSj/DQnR22OVxHnwu5S+rCFaUiPQ57JOtMFQayqYA== + dependencies: + "@inquirer/checkbox" "^4.0.2" + "@inquirer/confirm" "^5.0.2" + "@inquirer/editor" "^4.1.0" + "@inquirer/expand" "^4.0.2" + "@inquirer/input" "^4.0.2" + "@inquirer/number" "^3.0.2" + "@inquirer/password" "^4.0.2" + "@inquirer/rawlist" "^4.0.2" + "@inquirer/search" "^3.0.2" + "@inquirer/select" "^4.0.2" + +"@inquirer/rawlist@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-4.0.2.tgz#78a58294505bed2a5e133153340f187967916702" + integrity sha512-3XGcskMoVF8H0Dl1S5TSZ3rMPPBWXRcM0VeNVsS4ByWeWjSeb0lPqfnBg6N7T0608I1B2bSVnbi2cwCrmOD1Yw== dependencies: - "@inquirer/core" "^10.0.1" - "@inquirer/type" "^3.0.0" + "@inquirer/core" "^10.1.0" + "@inquirer/type" "^3.0.1" yoctocolors-cjs "^2.1.2" -"@inquirer/search@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-3.0.1.tgz#68a4d23f6fca5a8eb99a61a72f74dc6b193be20a" - integrity sha512-ehMqjiO0pAf+KtdONKeCLVy4i3fy3feyRRhDrvzWhiwB8JccgKn7eHFr39l+Nx/FaZAhr0YxIJvkK5NuNvG+Ww== +"@inquirer/search@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-3.0.2.tgz#71fccc766045f2ec37afc402d72ce31838768281" + integrity sha512-Zv4FC7w4dJ13BOJfKRQCICQfShinGjb1bCEIHxTSnjj2telu3+3RHwHubPG9HyD4aix5s+lyAMEK/wSFD75HLA== dependencies: - "@inquirer/core" "^10.0.1" - "@inquirer/figures" "^1.0.7" - "@inquirer/type" "^3.0.0" + "@inquirer/core" "^10.1.0" + "@inquirer/figures" "^1.0.8" + "@inquirer/type" "^3.0.1" yoctocolors-cjs "^2.1.2" -"@inquirer/select@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-4.0.1.tgz#fb651f0e0fb7da1256cc75a399dc2ac72a7f7df4" - integrity sha512-tVRatFRGU49bxFCKi/3P+C0E13KZduNFbWuHWRx0L2+jbiyKRpXgHp9qiRHWRk/KarhYBXzH/di6w3VQ5aJd5w== +"@inquirer/select@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-4.0.2.tgz#c38ef154524a6859de4a1af11a90ad3f9638c9f2" + integrity sha512-uSWUzaSYAEj0hlzxa1mUB6VqrKaYx0QxGBLZzU4xWFxaSyGaXxsSE4OSOwdU24j0xl8OajgayqFXW0l2bkl2kg== dependencies: - "@inquirer/core" "^10.0.1" - "@inquirer/figures" "^1.0.7" - "@inquirer/type" "^3.0.0" + "@inquirer/core" "^10.1.0" + "@inquirer/figures" "^1.0.8" + "@inquirer/type" "^3.0.1" ansi-escapes "^4.3.2" yoctocolors-cjs "^2.1.2" -"@inquirer/type@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-3.0.0.tgz#1762ebe667ec1d838012b20bf0cf90b841ba68bc" - integrity sha512-YYykfbw/lefC7yKj7nanzQXILM7r3suIvyFlCcMskc99axmsSewXWkAfXKwMbgxL76iAFVmRwmYdwNZNc8gjog== +"@inquirer/type@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-3.0.1.tgz#619ce9f65c3e114d8e39c41822bed3440d20b478" + integrity sha512-+ksJMIy92sOAiAccGpcKZUc3bYO07cADnscIxHBknEm3uNts3movSmBofc1908BNy5edKscxYeAdaX1NXkHS6A== + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + +"@isaacs/fs-minipass@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz#2d59ae3ab4b38fb4270bfa23d30f8e2e86c7fe32" + integrity sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w== + dependencies: + minipass "^7.0.4" "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" @@ -839,6 +867,11 @@ jsbi "^4.3.0" tslib "^2.4.1" +"@jsdevtools/ono@^7.1.3": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796" + integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg== + "@lezer/common@^1.0.0", "@lezer/common@^1.0.2", "@lezer/common@^1.1.0", "@lezer/common@^1.2.0": version "1.2.1" resolved "https://registry.yarnpkg.com/@lezer/common/-/common-1.2.1.tgz#198b278b7869668e1bebbe687586e12a42731049" @@ -907,46 +940,59 @@ resolved "https://registry.yarnpkg.com/@mdn/bcd-utils-api/-/bcd-utils-api-0.0.7.tgz#555e80c33df520df068943e6b18ebc07f0e24d19" integrity sha512-IHkkypEjlIkBkx4mJ2//Xbzog9M/Lzne1Sl8db2cIHJ/5pe3NCqSLwSchmqzcUN+/WJr/U+V3tNAbWunk2xZcA== -"@mdn/browser-compat-data@^5.6.11": - version "5.6.11" - resolved "https://registry.yarnpkg.com/@mdn/browser-compat-data/-/browser-compat-data-5.6.11.tgz#2beda3664297a3083b7c84a7e6eadc8bf843b90e" - integrity sha512-kJUu7JcRSOf3uEs0jK0RZCckaBfjhtWpgKyJUyAk8LRlQl9Yj/R/ddwfjo37dfzkvNYtHvH4Eg+NFkTDzd08Eg== +"@mdn/browser-compat-data@^5.6.20": + version "5.6.20" + resolved "https://registry.yarnpkg.com/@mdn/browser-compat-data/-/browser-compat-data-5.6.20.tgz#7ead33170b82fbdd6d0967182b9e7da6b9e8ef14" + integrity sha512-TOxHxwNNtZ+HWnmhBgBCKYwevIqxi5HOshnBg7Fac3R95EFGm3ir0HDUG1ujBG3i8zjXimp3GZK1lfsjkbmydg== -"@mdn/yari@2.65.1": - version "2.65.1" - resolved "https://registry.yarnpkg.com/@mdn/yari/-/yari-2.65.1.tgz#06231ff50a7983a5c1f94e3af36d535fe72e7bde" - integrity sha512-Juj9zMSUxC+NVah0SI/10ESN1SfFVIVvs0/djVajq9gX2nKQAoVJSs2uisJV0U/gaoobfWXPHFp3xlCOFmEhvg== +"@mdn/rari@^0.0.26": + version "0.0.26" + resolved "https://registry.yarnpkg.com/@mdn/rari/-/rari-0.0.26.tgz#dd2814f246aeab3d874ad971dd22257200612629" + integrity sha512-B2GuJOmuv+MapB7O0xoh8fzrkWI3Lo0Yq7M5S8bfNVU5NunSIZwzJsYFZ0VeRTBuAkWxYb6BO1l5Rq31HWu9gQ== + dependencies: + extract-zip "^2.0.1" + https-proxy-agent "^7.0.2" + json-schema-to-typescript "^15.0.0" + proxy-from-env "^1.1.0" + tar "^7.4.3" + +"@mdn/yari@3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@mdn/yari/-/yari-3.0.1.tgz#ee958fcefc28acc4bffacb708a19ecb277d98143" + integrity sha512-4HM0z3Q+a//WzOt08GuehYX88TPcfJ7tTB0eAQ0hA1YG321XfOLijopFGOCp6vly0K3AngqDnsxy7m1OiiL21w== dependencies: "@caporal/core" "^2.0.7" - "@codemirror/lang-css" "^6.3.0" + "@codemirror/lang-css" "^6.3.1" "@codemirror/lang-html" "^6.4.9" "@codemirror/lang-javascript" "^6.2.2" "@codemirror/state" "^6.4.1" "@codemirror/theme-one-dark" "^6.1.2" "@fast-csv/parse" "^5.0.2" - "@inquirer/prompts" "^7.0.1" + "@inquirer/prompts" "^7.1.0" "@lit/react" "^1.0.6" "@mdn/bcd-utils-api" "^0.0.7" - "@mdn/browser-compat-data" "^5.6.11" + "@mdn/browser-compat-data" "^5.6.20" + "@mdn/rari" "^0.0.26" "@mozilla/glean" "5.0.3" - "@sentry/node" "^8.35.0" - "@stripe/stripe-js" "^4.9.0" + "@sentry/node" "^8.41.0" + "@stripe/stripe-js" "^4.10.0" "@use-it/interval" "^1.0.0" "@vscode/ripgrep" "^1.15.9" - "@webref/css" "^6.17.0" + "@webref/css" "^6.17.4" accept-language-parser "^1.5.0" async "^3.2.6" chalk "^5.3.0" cheerio "1.0.0-rc.12" cli-progress "^3.12.0" codemirror "^6.0.1" - compression "^1.7.4" + compression "^1.7.5" compute-baseline "^0.1.1" + concurrently "^9.1.0" cookie "^0.7.2" cookie-parser "^1.4.7" css-tree "^2.3.1" dayjs "^1.11.13" - dexie "^4.0.9" + dexie "^4.0.10" dotenv "^16.4.5" ejs "^3.1.10" express "^4.21.1" @@ -972,10 +1018,10 @@ md5-file "^5.0.0" mdast-util-from-markdown "^2.0.2" mdast-util-phrasing "^4.1.0" - mdn-data "^2.12.1" + mdn-data "^2.12.2" open "^10.1.0" open-editor "^5.0.0" - openai "^4.68.4" + openai "^4.73.1" pg "^8.13.1" pgvector "^0.2.0" prism-svelte "^0.5.0" @@ -1001,8 +1047,8 @@ unified "^11.0.5" unist-builder "^4.0.0" unist-util-visit "^5.0.0" - web-features "^2.3.0" - web-specs "^3.23.0" + web-features "^2.8.0" + web-specs "^3.28.0" "@mozilla/glean@5.0.3": version "5.0.3" @@ -1072,13 +1118,13 @@ dependencies: "@opentelemetry/semantic-conventions" "1.27.0" -"@opentelemetry/instrumentation-amqplib@^0.42.0": - version "0.42.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-amqplib/-/instrumentation-amqplib-0.42.0.tgz#b3cab5a7207736a30d769962eed3af3838f986c4" - integrity sha512-fiuU6OKsqHJiydHWgTRQ7MnIrJ2lEqsdgFtNIH4LbAUJl/5XmrIeoDzDnox+hfkgWK65jsleFuQDtYb5hW1koQ== +"@opentelemetry/instrumentation-amqplib@^0.43.0": + version "0.43.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-amqplib/-/instrumentation-amqplib-0.43.0.tgz#e18b7d763b69c605a7abf9869e1c278f9bfdc1eb" + integrity sha512-ALjfQC+0dnIEcvNYsbZl/VLh7D2P1HhFF4vicRKHhHFIUV3Shpg4kXgiek5PLhmeKSIPiUB25IYH5RIneclL4A== dependencies: "@opentelemetry/core" "^1.8.0" - "@opentelemetry/instrumentation" "^0.53.0" + "@opentelemetry/instrumentation" "^0.54.0" "@opentelemetry/semantic-conventions" "^1.27.0" "@opentelemetry/instrumentation-connect@0.40.0": @@ -1107,13 +1153,13 @@ "@opentelemetry/instrumentation" "^0.54.0" "@opentelemetry/semantic-conventions" "^1.27.0" -"@opentelemetry/instrumentation-fastify@0.40.0": - version "0.40.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-fastify/-/instrumentation-fastify-0.40.0.tgz#0c57608ac202337d56b53338f1fc9369d224306b" - integrity sha512-74qj4nG3zPtU7g2x4sm2T4R3/pBMyrYstTsqSZwdlhQk1SD4l8OSY9sPRX1qkhfxOuW3U4KZQAV/Cymb3fB6hg== +"@opentelemetry/instrumentation-fastify@0.41.0": + version "0.41.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-fastify/-/instrumentation-fastify-0.41.0.tgz#5e1d00383756f3a8cc2ea4a9d15f9f7510cec571" + integrity sha512-pNRjFvf0mvqfJueaeL/qEkuGJwgtE5pgjIHGYwjc2rMViNCrtY9/Sf+Nu8ww6dDd/Oyk2fwZZP7i0XZfCnETrA== dependencies: "@opentelemetry/core" "^1.8.0" - "@opentelemetry/instrumentation" "^0.53.0" + "@opentelemetry/instrumentation" "^0.54.0" "@opentelemetry/semantic-conventions" "^1.27.0" "@opentelemetry/instrumentation-fs@0.16.0": @@ -1131,12 +1177,12 @@ dependencies: "@opentelemetry/instrumentation" "^0.53.0" -"@opentelemetry/instrumentation-graphql@0.43.0": - version "0.43.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.43.0.tgz#71bb94ea775c70dbd388c739b397ec1418f3f170" - integrity sha512-aI3YMmC2McGd8KW5du1a2gBA0iOMOGLqg4s9YjzwbjFwjlmMNFSK1P3AIg374GWg823RPUGfVTIgZ/juk9CVOA== +"@opentelemetry/instrumentation-graphql@0.44.0": + version "0.44.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.44.0.tgz#6fce8e2f303d16810bf8a03148cad6e8e6119de1" + integrity sha512-FYXTe3Bv96aNpYktqm86BFUTpjglKD0kWI5T5bxYkLUPEPvFn38vWGMJTGrDMVou/i55E4jlWvcm6hFIqLsMbg== dependencies: - "@opentelemetry/instrumentation" "^0.53.0" + "@opentelemetry/instrumentation" "^0.54.0" "@opentelemetry/instrumentation-hapi@0.41.0": version "0.41.0" @@ -1174,6 +1220,14 @@ "@opentelemetry/instrumentation" "^0.54.0" "@opentelemetry/semantic-conventions" "^1.27.0" +"@opentelemetry/instrumentation-knex@0.41.0": + version "0.41.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-knex/-/instrumentation-knex-0.41.0.tgz#74d611489e823003a825097bac019c6c2ad061a5" + integrity sha512-OhI1SlLv5qnsnm2dOVrian/x3431P75GngSpnR7c4fcVFv7prXGYu29Z6ILRWJf/NJt6fkbySmwdfUUnFnHCTg== + dependencies: + "@opentelemetry/instrumentation" "^0.54.0" + "@opentelemetry/semantic-conventions" "^1.27.0" + "@opentelemetry/instrumentation-koa@0.43.0": version "0.43.0" resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.43.0.tgz#963fd192a1b5f6cbae5dabf4ec82e3105cbb23b1" @@ -1190,13 +1244,12 @@ dependencies: "@opentelemetry/instrumentation" "^0.53.0" -"@opentelemetry/instrumentation-mongodb@0.47.0": - version "0.47.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.47.0.tgz#f8107d878281433905e717f223fb4c0f10356a7b" - integrity sha512-yqyXRx2SulEURjgOQyJzhCECSh5i1uM49NUaq9TqLd6fA7g26OahyJfsr9NE38HFqGRHpi4loyrnfYGdrsoVjQ== +"@opentelemetry/instrumentation-mongodb@0.48.0": + version "0.48.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.48.0.tgz#40fb8c705cb4bf8d8c5bf8752c60c5a0aaaaf617" + integrity sha512-9YWvaGvrrcrydMsYGLu0w+RgmosLMKe3kv/UNlsPy8RLnCkN2z+bhhbjjjuxtUmvEuKZMCoXFluABVuBr1yhjw== dependencies: - "@opentelemetry/instrumentation" "^0.53.0" - "@opentelemetry/sdk-metrics" "^1.9.1" + "@opentelemetry/instrumentation" "^0.54.0" "@opentelemetry/semantic-conventions" "^1.27.0" "@opentelemetry/instrumentation-mongoose@0.42.0": @@ -1254,6 +1307,15 @@ "@opentelemetry/redis-common" "^0.36.2" "@opentelemetry/semantic-conventions" "^1.27.0" +"@opentelemetry/instrumentation-tedious@0.15.0": + version "0.15.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-tedious/-/instrumentation-tedious-0.15.0.tgz#da82f4d153fb6ff7d1f85d39872ac40bf9db12ea" + integrity sha512-Kb7yo8Zsq2TUwBbmwYgTAMPK0VbhoS8ikJ6Bup9KrDtCx2JC01nCb+M0VJWXt7tl0+5jARUbKWh5jRSoImxdCw== + dependencies: + "@opentelemetry/instrumentation" "^0.54.0" + "@opentelemetry/semantic-conventions" "^1.27.0" + "@types/tedious" "^4.0.14" + "@opentelemetry/instrumentation-undici@0.6.0": version "0.6.0" resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-undici/-/instrumentation-undici-0.6.0.tgz#9436ee155c8dcb0b760b66947c0e0f347688a5ef" @@ -1311,14 +1373,6 @@ "@opentelemetry/core" "1.26.0" "@opentelemetry/semantic-conventions" "1.27.0" -"@opentelemetry/sdk-metrics@^1.9.1": - version "1.26.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-metrics/-/sdk-metrics-1.26.0.tgz#37bb0afb1d4447f50aab9cdd05db6f2d8b86103e" - integrity sha512-0SvDXmou/JjzSDOjUmetAAvcKQW6ZrvosU0rkbDGpXvvZN+pQF6JbK/Kd4hNdK4q/22yeruqvukXEJyySTzyTQ== - dependencies: - "@opentelemetry/core" "1.26.0" - "@opentelemetry/resources" "1.26.0" - "@opentelemetry/sdk-trace-base@^1.22", "@opentelemetry/sdk-trace-base@^1.26.0": version "1.26.0" resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.26.0.tgz#0c913bc6d2cfafd901de330e4540952269ae579c" @@ -1340,6 +1394,11 @@ dependencies: "@opentelemetry/core" "^1.1.0" +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + "@prisma/instrumentation@5.19.1": version "5.19.1" resolved "https://registry.yarnpkg.com/@prisma/instrumentation/-/instrumentation-5.19.1.tgz#146319cf85f22b7a43296f0f40cfeac55516e66e" @@ -1354,75 +1413,67 @@ resolved "https://registry.yarnpkg.com/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz#60de891bb126abfdc5410fdc6166aca065f10a0c" integrity sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg== -"@sentry/core@8.36.0": - version "8.36.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-8.36.0.tgz#34276354f0cd2298803c2f8d86ba571473435ff1" - integrity sha512-cbq1WQyRqc/+YpPhjwQxfniUM3ZxmO3Pm1oisTB8dw6mlbgQfGD6aznEIjXWWJY6k6acewJlMUx09N7DnprtBw== +"@sentry/core@8.41.0": + version "8.41.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-8.41.0.tgz#e8a25cacd25fe4358f3179e85f3c2697427fe5a6" + integrity sha512-3v7u3t4LozCA5SpZY4yqUN2U3jSrkXNoLgz6L2SUUiydyCuSwXZIFEwpLJfgQyidpNDifeQbBI5E1O910XkPsA== dependencies: - "@sentry/types" "8.36.0" - "@sentry/utils" "8.36.0" + "@sentry/types" "8.41.0" -"@sentry/node@^8.35.0": - version "8.36.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-8.36.0.tgz#6b4b6714c6c925e353e7c7eff0e45f8675bb530e" - integrity sha512-2RRbSck90TGpVz8F3OaNbq5Q9RXgeRlq5leGWHU7NfQOl3LmkG+vkzTbOqPDPZLtiYcw5KQ3G5G+vybrDS6AGg== +"@sentry/node@^8.41.0": + version "8.41.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-8.41.0.tgz#52f970648d961f6e82a1b23a88c0000aa72ba21a" + integrity sha512-eYD5S8Lti9efBHFSIhZ/0C5uI1DQtGqjuNWQ62CKC47G2qgJddBtb2HgqRFAnMajYL9FXEtiDT6uqQhKQnmLcQ== dependencies: "@opentelemetry/api" "^1.9.0" "@opentelemetry/context-async-hooks" "^1.25.1" "@opentelemetry/core" "^1.25.1" - "@opentelemetry/instrumentation" "^0.53.0" - "@opentelemetry/instrumentation-amqplib" "^0.42.0" + "@opentelemetry/instrumentation" "^0.54.0" + "@opentelemetry/instrumentation-amqplib" "^0.43.0" "@opentelemetry/instrumentation-connect" "0.40.0" "@opentelemetry/instrumentation-dataloader" "0.12.0" "@opentelemetry/instrumentation-express" "0.44.0" - "@opentelemetry/instrumentation-fastify" "0.40.0" + "@opentelemetry/instrumentation-fastify" "0.41.0" "@opentelemetry/instrumentation-fs" "0.16.0" "@opentelemetry/instrumentation-generic-pool" "0.39.0" - "@opentelemetry/instrumentation-graphql" "0.43.0" + "@opentelemetry/instrumentation-graphql" "0.44.0" "@opentelemetry/instrumentation-hapi" "0.41.0" "@opentelemetry/instrumentation-http" "0.53.0" "@opentelemetry/instrumentation-ioredis" "0.43.0" "@opentelemetry/instrumentation-kafkajs" "0.4.0" + "@opentelemetry/instrumentation-knex" "0.41.0" "@opentelemetry/instrumentation-koa" "0.43.0" "@opentelemetry/instrumentation-lru-memoizer" "0.40.0" - "@opentelemetry/instrumentation-mongodb" "0.47.0" + "@opentelemetry/instrumentation-mongodb" "0.48.0" "@opentelemetry/instrumentation-mongoose" "0.42.0" "@opentelemetry/instrumentation-mysql" "0.41.0" "@opentelemetry/instrumentation-mysql2" "0.41.0" "@opentelemetry/instrumentation-nestjs-core" "0.40.0" "@opentelemetry/instrumentation-pg" "0.44.0" "@opentelemetry/instrumentation-redis-4" "0.42.0" + "@opentelemetry/instrumentation-tedious" "0.15.0" "@opentelemetry/instrumentation-undici" "0.6.0" "@opentelemetry/resources" "^1.26.0" "@opentelemetry/sdk-trace-base" "^1.26.0" "@opentelemetry/semantic-conventions" "^1.27.0" "@prisma/instrumentation" "5.19.1" - "@sentry/core" "8.36.0" - "@sentry/opentelemetry" "8.36.0" - "@sentry/types" "8.36.0" - "@sentry/utils" "8.36.0" + "@sentry/core" "8.41.0" + "@sentry/opentelemetry" "8.41.0" + "@sentry/types" "8.41.0" import-in-the-middle "^1.11.2" -"@sentry/opentelemetry@8.36.0": - version "8.36.0" - resolved "https://registry.yarnpkg.com/@sentry/opentelemetry/-/opentelemetry-8.36.0.tgz#4e4330fa67cfeb7f2e23d4e078659ac61806b3b0" - integrity sha512-pMKMphH0j1Mh8zknLWEEUaaaxeYn76rniGOxKLoQVk1pCUhhzkFEJdxKC41aR8yin/uN8X3CGWQb9vp/przwSg== +"@sentry/opentelemetry@8.41.0": + version "8.41.0" + resolved "https://registry.yarnpkg.com/@sentry/opentelemetry/-/opentelemetry-8.41.0.tgz#0e5c4bb8d5b58f07eb80e312fc66b8709a688c61" + integrity sha512-Ld6KdBQsmSk2IfFSoZ7CMpmuQbfb3viV6nTDCz6+11wL9S+1b+hadCN+38yBW4CmI4/hEpYfwwWQPseQQTvBCg== dependencies: - "@sentry/core" "8.36.0" - "@sentry/types" "8.36.0" - "@sentry/utils" "8.36.0" - -"@sentry/types@8.36.0": - version "8.36.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-8.36.0.tgz#b58397eb672d896b65b06103feb59dba74da9d39" - integrity sha512-K1pVFfdGHw115RzGHpwSOqoEPeayn4N1F9IfM0kxrYpQSbFT1X29eak88GBfC8gPiLEF0iFGlSaQ4ERmF7oRcA== + "@sentry/core" "8.41.0" + "@sentry/types" "8.41.0" -"@sentry/utils@8.36.0": - version "8.36.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-8.36.0.tgz#e733042ae231fdeeafe6970e49283dcd9ac9700f" - integrity sha512-oJ3EDPj0I00z+AwC3EWBpSidXYUoKW0Id8MfMQP5Hflniz3gif7UEReblT+FJgPEVo6+6uNzAncY0MuNMxmDKQ== - dependencies: - "@sentry/types" "8.36.0" +"@sentry/types@8.41.0": + version "8.41.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-8.41.0.tgz#db40c93bcedad26569c5dfe10a4b31253c349a10" + integrity sha512-eqdnGr9k9H++b9CjVUoTNUVahPVWeNnMy0YGkqS5+cjWWC+x43p56202oidGFmWo6702ub/xwUNH6M5PC4kq6A== "@sinclair/typebox@^0.27.8": version "0.27.8" @@ -1468,10 +1519,10 @@ dependencies: "@sinonjs/commons" "^3.0.0" -"@stripe/stripe-js@^4.9.0": - version "4.9.0" - resolved "https://registry.yarnpkg.com/@stripe/stripe-js/-/stripe-js-4.9.0.tgz#95dc000b2f90aeb4db2f2bab82a2fc574f26d1fd" - integrity sha512-tMPZQZZXGWyNX7hbgenq+1xEj2oigJ54XddbtSX36VedoKsPBq7dxwRXu4Xd5FdpT3JDyyDtnmvYkaSnH1yHTQ== +"@stripe/stripe-js@^4.10.0": + version "4.10.0" + resolved "https://registry.yarnpkg.com/@stripe/stripe-js/-/stripe-js-4.10.0.tgz#5c785f9a5a500113d69d98c16061e0addd1c0305" + integrity sha512-KrMOL+sH69htCIXCaZ4JluJ35bchuCCznyPyrbN8JXSGQfwBI1SuIEMZNwvy8L8ykj29t6sa5BAAiL7fNoLZ8A== "@szmarczak/http-timer@^5.0.1": version "5.0.1" @@ -1602,11 +1653,21 @@ dependencies: "@types/istanbul-lib-report" "*" +"@types/json-schema@^7.0.15": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + "@types/lodash@^4.14.149": version "4.17.7" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.7.tgz#2f776bcb53adc9e13b2c0dfd493dfcbd7de43612" integrity sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA== +"@types/lodash@^4.17.7": + version "4.17.13" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.13.tgz#786e2d67cfd95e32862143abe7463a7f90c300eb" + integrity sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg== + "@types/mdast@^4.0.0": version "4.0.4" resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-4.0.4.tgz#7ccf72edd2f1aa7dd3437e180c64373585804dd6" @@ -1705,6 +1766,13 @@ dependencies: "@types/node" "*" +"@types/tedious@^4.0.14": + version "4.0.14" + resolved "https://registry.yarnpkg.com/@types/tedious/-/tedious-4.0.14.tgz#868118e7a67808258c05158e9cad89ca58a2aec1" + integrity sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw== + dependencies: + "@types/node" "*" + "@types/triple-beam@^1.3.2": version "1.3.5" resolved "https://registry.yarnpkg.com/@types/triple-beam/-/triple-beam-1.3.5.tgz#74fef9ffbaa198eb8b588be029f38b00299caa2c" @@ -1742,6 +1810,13 @@ dependencies: "@types/yargs-parser" "*" +"@types/yauzl@^2.9.1": + version "2.10.3" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.3.tgz#e9b2808b4f109504a03cda958259876f61017999" + integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q== + dependencies: + "@types/node" "*" + "@ungap/structured-clone@^1.0.0", "@ungap/structured-clone@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" @@ -1761,10 +1836,10 @@ proxy-from-env "^1.1.0" yauzl "^2.9.2" -"@webref/css@^6.17.0": - version "6.17.0" - resolved "https://registry.yarnpkg.com/@webref/css/-/css-6.17.0.tgz#1b7e7bb2c75f610c8ae11c8d1e063494b1e522ea" - integrity sha512-5flhd3Wuokf9gNKhFmJ+SlG4tb2+qCXXBB3jo0RG7i9LuigYaZxJd0FqyNsVtTqJwSEXHt9AshTjN82ESr5k6g== +"@webref/css@^6.17.4": + version "6.17.4" + resolved "https://registry.yarnpkg.com/@webref/css/-/css-6.17.4.tgz#1722ced57468d44ea7ee230dd458657534710206" + integrity sha512-c7HoBCO3RCIOeeM0aBxCXhfljwwnDCjZAYKxHsmvymu5/nmk4uQDTM4uecIu/SUiAmYCb7a1DGKN6mCKg489kA== abort-controller@^3.0.0: version "3.0.0" @@ -1778,7 +1853,7 @@ accept-language-parser@^1.5.0: resolved "https://registry.yarnpkg.com/accept-language-parser/-/accept-language-parser-1.5.0.tgz#8877c54040a8dcb59e0a07d9c1fde42298334791" integrity sha512-QhyTbMLYo0BBGg1aWbeMG4ekWtds/31BrEU+DONOg/7ax23vxpL03Pb7/zBmha2v7vdD3AyzZVWBVGEZxKOXWw== -accepts@~1.3.5, accepts@~1.3.8: +accepts@~1.3.8: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== @@ -1910,7 +1985,7 @@ ansi-styles@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== -ansi-styles@^6.0.0, ansi-styles@^6.2.1: +ansi-styles@^6.0.0, ansi-styles@^6.1.0, ansi-styles@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== @@ -2231,11 +2306,6 @@ bundle-name@^4.1.0: dependencies: run-applescript "^7.0.0" -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== - bytes@3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" @@ -2366,7 +2436,7 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.0.0, chalk@^4.0.2: +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -2439,6 +2509,11 @@ cheerio@1.0.0-rc.12: parse5 "^7.0.0" parse5-htmlparser2-tree-adapter "^7.0.0" +chownr@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-3.0.0.tgz#9855e64ecd240a9cc4267ce8a4aa5d24a1da15e4" + integrity sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g== + ci-info@^3.2.0: version "3.9.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" @@ -2654,24 +2729,24 @@ compare-versions@^6.1.0: resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-6.1.1.tgz#7af3cc1099ba37d244b3145a9af5201b629148a9" integrity sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg== -compressible@~2.0.16: +compressible@~2.0.18: version "2.0.18" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== dependencies: mime-db ">= 1.43.0 < 2" -compression@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== +compression@^1.7.5: + version "1.7.5" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.5.tgz#fdd256c0a642e39e314c478f6c2cd654edd74c93" + integrity sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q== dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" + bytes "3.1.2" + compressible "~2.0.18" debug "2.6.9" + negotiator "~0.6.4" on-headers "~1.0.2" - safe-buffer "5.1.2" + safe-buffer "5.2.1" vary "~1.1.2" compute-baseline@^0.1.1: @@ -2697,6 +2772,19 @@ concat-stream@^1.4.7: readable-stream "^2.2.2" typedarray "^0.0.6" +concurrently@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-9.1.0.tgz#8da6d609f4321752912dab9be8710232ac496aa0" + integrity sha512-VxkzwMAn4LP7WyMnJNbHN5mKV9L2IbyDjpzemKr99sXNR3GqRNMMHdm7prV1ws9wg7ETj6WUkNOigZVsptwbgg== + dependencies: + chalk "^4.1.2" + lodash "^4.17.21" + rxjs "^7.8.1" + shell-quote "^1.8.1" + supports-color "^8.1.1" + tree-kill "^1.2.2" + yargs "^17.7.2" + config-chain@^1.1.11: version "1.1.13" resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" @@ -3037,10 +3125,10 @@ devlop@^1.0.0, devlop@^1.1.0: dependencies: dequal "^2.0.0" -dexie@^4.0.9: - version "4.0.9" - resolved "https://registry.yarnpkg.com/dexie/-/dexie-4.0.9.tgz#8c4e827815a84ef4fdc6aa7923f89ea2cda87610" - integrity sha512-VQG1huEVSAdDZssb9Bb9mFy+d3jAE0PT4d1nIRYlT46ip1fzbs1tXi0SlUayRDgV3tTbJG8ZRqAo2um49gtynA== +dexie@^4.0.10: + version "4.0.10" + resolved "https://registry.yarnpkg.com/dexie/-/dexie-4.0.10.tgz#979e3ee75993b44eea3852f97ceb198019d5b287" + integrity sha512-eM2RzuR3i+M046r2Q0Optl3pS31qTWf8aFuA7H9wnsHTwl8EPvroVLwvQene/6paAs39Tbk6fWZcn2aZaHkc/w== diff-sequences@^29.6.3: version "29.6.3" @@ -3129,6 +3217,11 @@ duplexer3@^0.1.4: resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -3166,6 +3259,11 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + enabled@2.0.x: version "2.0.0" resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" @@ -3494,6 +3592,17 @@ external-editor@^3.0.3, external-editor@^3.1.0: iconv-lite "^0.4.24" tmp "^0.0.33" +extract-zip@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" + integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== + dependencies: + debug "^4.1.1" + get-stream "^5.1.0" + yauzl "^2.10.0" + optionalDependencies: + "@types/yauzl" "^2.9.1" + eyes@0.1.x: version "0.1.8" resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" @@ -3713,6 +3822,14 @@ follow-redirects@^1.0.0: resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== +foreground-child@^3.1.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77" + integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + form-data-encoder@1.7.2: version "1.7.2" resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-1.7.2.tgz#1f1ae3dccf58ed4690b86d87e4f57c654fbab040" @@ -3868,6 +3985,13 @@ get-stream@^4.0.0: dependencies: pump "^3.0.0" +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + get-stream@^6.0.0, get-stream@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" @@ -3902,6 +4026,18 @@ glob-parent@^5.1.2: dependencies: is-glob "^4.0.1" +glob@^10.3.7: + version "10.4.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" + integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== + dependencies: + foreground-child "^3.1.0" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" + glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" @@ -4709,7 +4845,7 @@ is-gif@^3.0.0: dependencies: file-type "^10.4.0" -is-glob@^4.0.1: +is-glob@^4.0.1, is-glob@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== @@ -4896,6 +5032,15 @@ isurl@^1.0.0-alpha5: has-to-string-tag-x "^1.2.0" is-object "^1.0.1" +jackspeak@^3.1.2: + version "3.4.3" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" + integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + jake@^10.8.5: version "10.9.2" resolved "https://registry.yarnpkg.com/jake/-/jake-10.9.2.tgz#6ae487e6a69afec3a5e167628996b59f35ae2b7f" @@ -5309,6 +5454,21 @@ json-parse-even-better-errors@^2.3.0: resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== +json-schema-to-typescript@^15.0.0: + version "15.0.3" + resolved "https://registry.yarnpkg.com/json-schema-to-typescript/-/json-schema-to-typescript-15.0.3.tgz#a58bc3e00e4480e76a8ee79471c01233494913be" + integrity sha512-iOKdzTUWEVM4nlxpFudFsWyUiu/Jakkga4OZPEt7CGoSEsAsUgdOZqR6pcgx2STBek9Gm4hcarJpXSzIvZ/hKA== + dependencies: + "@apidevtools/json-schema-ref-parser" "^11.5.5" + "@types/json-schema" "^7.0.15" + "@types/lodash" "^4.17.7" + is-glob "^4.0.3" + js-yaml "^4.1.0" + lodash "^4.17.21" + minimist "^1.2.8" + prettier "^3.2.5" + tinyglobby "^0.2.9" + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -5586,7 +5746,7 @@ lowercase-keys@^3.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2" integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== -lru-cache@^10.4.3: +lru-cache@^10.2.0, lru-cache@^10.4.3: version "10.4.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== @@ -5887,10 +6047,10 @@ mdn-data@2.0.30: resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== -mdn-data@^2.12.1: - version "2.12.1" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.12.1.tgz#10cb462215c13d95c92ff60d0fb3becac1bbb924" - integrity sha512-rsfnCbOHjqrhWxwt5/wtSLzpoKTzW7OXdT5lLOIH1OTYhWu9rRJveGq0sKvDZODABH7RX+uoR+DYcpFnq4Tf6Q== +mdn-data@^2.12.2: + version "2.12.2" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.12.2.tgz#9ae6c41a9e65adf61318b32bff7b64fbfb13f8cf" + integrity sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA== mdurl@^2.0.0: version "2.0.0" @@ -6281,11 +6441,31 @@ minimatch@^5.0.1: dependencies: brace-expansion "^2.0.1" -minimist@^1.2.0, minimist@^1.2.6: +minimatch@^9.0.4: + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.0, minimist@^1.2.6, minimist@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4, minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + +minizlib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-3.0.1.tgz#46d5329d1eb3c83924eff1d3b858ca0a31581012" + integrity sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg== + dependencies: + minipass "^7.0.4" + rimraf "^5.0.5" + mkdirp@^0.5.1: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" @@ -6293,6 +6473,11 @@ mkdirp@^0.5.1: dependencies: minimist "^1.2.6" +mkdirp@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50" + integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== + module-details-from-path@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/module-details-from-path/-/module-details-from-path-1.0.3.tgz#114c949673e2a8a35e9d35788527aa37b679da2b" @@ -6341,6 +6526,11 @@ negotiator@0.6.3: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== +negotiator@~0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7" + integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== + nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" @@ -6531,10 +6721,10 @@ open@^10.1.0: is-inside-container "^1.0.0" is-wsl "^3.1.0" -openai@^4.68.4: - version "4.69.0" - resolved "https://registry.yarnpkg.com/openai/-/openai-4.69.0.tgz#ac2463719280987e506e4bd62dd477337e2406a1" - integrity sha512-S3hOHSkk609KqwgH+7dwFrSvO3Gm3Nk0YWGyPHNscoMH/Y2tH1qunMi7gtZnLbUv4/N1elqCp6bDior2401kCQ== +openai@^4.73.1: + version "4.73.1" + resolved "https://registry.yarnpkg.com/openai/-/openai-4.73.1.tgz#532bd000d5f1a558e4fff1119da6749992ac41e4" + integrity sha512-nWImDJBcUsqrhy7yJScXB4+iqjzbUEgzfA3un/6UnHFdwWhjX24oztj69Ped/njABfOdLcO/F7CeWTI5dt8Xmg== dependencies: "@types/node" "^18.11.18" "@types/node-fetch" "^2.6.4" @@ -6669,6 +6859,11 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +package-json-from-dist@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" + integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== + parse-entities@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-4.0.1.tgz#4e2a01111fb1c986549b944af39eeda258fc9e4e" @@ -6748,6 +6943,14 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-scurry@^1.11.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== + dependencies: + lru-cache "^10.2.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-to-regexp@0.1.10: version "0.1.10" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.10.tgz#67e9108c5c0551b9e5326064387de4763c4d5f8b" @@ -6862,6 +7065,11 @@ picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +picomatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab" + integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== + pidtree@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" @@ -6974,7 +7182,7 @@ prepend-http@^2.0.0: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== -prettier@3.4.1: +prettier@3.4.1, prettier@^3.2.5: version "3.4.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.4.1.tgz#e211d451d6452db0a291672ca9154bc8c2579f7b" integrity sha512-G+YdqtITVZmOJje6QkXQWzl3fSfMxFwm1tjTyo9exhkmWSqC4Yhd1+lug++IlR2mvRVAxEDDWYkQdeSztajqgg== @@ -7417,6 +7625,13 @@ rfdc@^1.4.1: resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== +rimraf@^5.0.5: + version "5.0.10" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.10.tgz#23b9843d3dc92db71f96e1a2ce92e39fd2a8221c" + integrity sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ== + dependencies: + glob "^10.3.7" + run-applescript@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-7.0.0.tgz#e5a553c2bffd620e169d276c1cd8f1b64778fbeb" @@ -7446,16 +7661,23 @@ rxjs@^6.4.0: dependencies: tslib "^1.9.0" -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +rxjs@^7.8.1: + version "7.8.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== + dependencies: + tslib "^2.1.0" safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + safe-stable-stringify@^2.3.1: version "2.5.0" resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz#4ca2f8e385f2831c432a719b108a3bf7af42a1dd" @@ -7590,6 +7812,11 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +shell-quote@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.2.tgz#d2d83e057959d53ec261311e9e9b8f51dcb2934a" + integrity sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA== + shimmer@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.2.1.tgz#610859f7de327b587efebf501fb43117f9aff337" @@ -7610,7 +7837,7 @@ signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -signal-exit@^4.1.0: +signal-exit@^4.0.1, signal-exit@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== @@ -7772,6 +7999,15 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -7807,6 +8043,15 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + string-width@^7.0.0: version "7.2.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-7.2.0.tgz#b5bb8e2165ce275d4d43476dd2700ad9091db6dc" @@ -7838,6 +8083,13 @@ stringify-entities@^4.0.0: character-entities-html4 "^2.0.0" character-entities-legacy "^3.0.0" +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" @@ -7866,7 +8118,7 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" -strip-ansi@^7.1.0: +strip-ansi@^7.0.1, strip-ansi@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== @@ -7974,7 +8226,7 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -supports-color@^8.0.0: +supports-color@^8.0.0, supports-color@^8.1.1: version "8.1.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== @@ -8048,6 +8300,18 @@ tar-stream@^1.5.2: to-buffer "^1.1.1" xtend "^4.0.0" +tar@^7.4.3: + version "7.4.3" + resolved "https://registry.yarnpkg.com/tar/-/tar-7.4.3.tgz#88bbe9286a3fcd900e94592cda7a22b192e80571" + integrity sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw== + dependencies: + "@isaacs/fs-minipass" "^4.0.0" + chownr "^3.0.0" + minipass "^7.1.2" + minizlib "^3.0.1" + mkdirp "^3.0.1" + yallist "^5.0.0" + temp-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" @@ -8107,6 +8371,14 @@ timed-out@^4.0.0, timed-out@^4.0.1: resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== +tinyglobby@^0.2.9: + version "0.2.10" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.10.tgz#e712cf2dc9b95a1f5c5bbd159720e15833977a0f" + integrity sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew== + dependencies: + fdir "^6.4.2" + picomatch "^4.0.2" + tmp@^0.0.29: version "0.0.29" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.29.tgz#f25125ff0dd9da3ccb0c2dd371ee1288bb9128c0" @@ -8161,6 +8433,11 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== +tree-kill@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== + trim-lines@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" @@ -8200,6 +8477,11 @@ tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@^2.1.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + tslib@^2.3.1, tslib@^2.4.1: version "2.7.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" @@ -8487,20 +8769,20 @@ warning@^4.0.3: dependencies: loose-envify "^1.0.0" -web-features@^2.3.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/web-features/-/web-features-2.4.0.tgz#f7526ed890d96c8fbdd82e92247a396b16f119a5" - integrity sha512-DFmvcroc3T+oFP6cOvYQ7QWh0QBwd8oX1ktt/987GkKqzdNQniyvy9jFDZ+5IutP/BLYi42W+kwydm5bGsdNAg== +web-features@^2.8.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/web-features/-/web-features-2.9.0.tgz#719b5dd0456f9a7fbe7a73be5dc06a5c5653e8fb" + integrity sha512-zWafkYZ87WR6SiD97OhNM758BJYh40HFH/0rzDE6Q5Q76sFSuIJhPyknjZsC4jG/94eJqS1AJNa5b9qzbCzetw== web-namespaces@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-2.0.1.tgz#1010ff7c650eccb2592cebeeaf9a1b253fd40692" integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ== -web-specs@^3.23.0: - version "3.23.0" - resolved "https://registry.yarnpkg.com/web-specs/-/web-specs-3.23.0.tgz#96bafd7ab1eb90faf521e81e1707a688fcd3c85e" - integrity sha512-90theeC0B4FPGc0dugJzYL8RIoMf+y/lpQqWcsjE39KmMqy0c/f1xmx1CorCCNqBBF7VvRMh376tb7qHgh1Q6A== +web-specs@^3.28.0: + version "3.28.0" + resolved "https://registry.yarnpkg.com/web-specs/-/web-specs-3.28.0.tgz#ed3d3dca0fd0d006f7c9ec9deec38f177dc641fa" + integrity sha512-haQUHO54+bbRD6BBtsJN1yHJFuq3Ug7+jiJYX7VxaI8ECGByAXvasampzvgXmotufjg61Q9avly5zcPDH3ucLQ== web-streams-polyfill@4.0.0-beta.3: version "4.0.0-beta.3" @@ -8572,6 +8854,15 @@ winston@^3.2.1: triple-beam "^1.3.0" winston-transport "^4.7.0" +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" @@ -8590,6 +8881,15 @@ wrap-ansi@^7.0.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + wrap-ansi@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-9.0.0.tgz#1a3dc8b70d85eeb8398ddfb1e4a02cd186e58b3e" @@ -8639,6 +8939,11 @@ yallist@^3.0.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== +yallist@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-5.0.0.tgz#00e2de443639ed0d78fd87de0d27469fbcffb533" + integrity sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw== + yaml@~2.5.0: version "2.5.1" resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.5.1.tgz#c9772aacf62cb7494a95b0c4f1fb065b563db130" @@ -8649,7 +8954,7 @@ yargs-parser@^21.1.1: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^17.3.1: +yargs@^17.3.1, yargs@^17.7.2: version "17.7.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== @@ -8662,7 +8967,7 @@ yargs@^17.3.1: y18n "^5.0.5" yargs-parser "^21.1.1" -yauzl@^2.4.2, yauzl@^2.9.2: +yauzl@^2.10.0, yauzl@^2.4.2, yauzl@^2.9.2: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==