diff --git a/.release-please-manifest.json b/.release-please-manifest.json index bce1fedf898d..91934e09276d 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "2.48.0" + ".": "2.49.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 088457294820..0a7fcea8b4e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,40 @@ # Changelog +## [2.49.0](https://github.com/mdn/yari/compare/v2.48.0...v2.49.0) (2024-04-18) + + +### Features + +* **experiment:** rewrite Web/API page titles ([#10926](https://github.com/mdn/yari/issues/10926)) ([d8173cc](https://github.com/mdn/yari/commit/d8173cc190686634cd43f0a83b4f6178a133e9f5)) + + +### Bug Fixes + +* **experiment:** replace test group for Web/API page titles ([#10955](https://github.com/mdn/yari/issues/10955)) ([1dfb5b2](https://github.com/mdn/yari/commit/1dfb5b23db7e643e8ad4c7450b9d0ceacb227cbd)) +* **playground:** dispatch DOMContentLoaded event on document + bubble ([7229dd3](https://github.com/mdn/yari/commit/7229dd334ed51281816629db88b9365858c56740)) +* **playground:** dispatch readystatechange + bubble DOMContentLoaded on document ([#10946](https://github.com/mdn/yari/issues/10946)) ([7229dd3](https://github.com/mdn/yari/commit/7229dd334ed51281816629db88b9365858c56740)) +* **playground:** dispatch readystatechange event ([7229dd3](https://github.com/mdn/yari/commit/7229dd334ed51281816629db88b9365858c56740)) +* **stage-build:** provide GH_TOKEN + specify repo in trigger job ([#10932](https://github.com/mdn/yari/issues/10932)) ([d371c0a](https://github.com/mdn/yari/commit/d371c0a8b76a6c47eb8a11d59275860559232678)) + + +### Enhancements + +* **macros/PreviousMenuNext:** use the actual title of the document by default ([#10812](https://github.com/mdn/yari/issues/10812)) ([10da897](https://github.com/mdn/yari/commit/10da8978812024f0bf3d1e21db4a36e68da33d8a)) + + +### Miscellaneous + +* **deps-dev:** bump @swc/core from 1.4.14 to 1.4.15 ([#10941](https://github.com/mdn/yari/issues/10941)) ([28f775d](https://github.com/mdn/yari/commit/28f775d91a3163b446ee8855df66d8d4b56df277)) +* **deps-dev:** bump @swc/core from 1.4.15 to 1.4.16 ([#10951](https://github.com/mdn/yari/issues/10951)) ([d099746](https://github.com/mdn/yari/commit/d09974644971491627705abd5da743fc24f65faf)) +* **deps-dev:** bump mini-css-extract-plugin from 2.8.1 to 2.9.0 ([#10938](https://github.com/mdn/yari/issues/10938)) ([672e79a](https://github.com/mdn/yari/commit/672e79a6d70bc7cd2a17cbe314a6b7e3acb221e9)) +* **deps-dev:** bump sass-loader from 14.2.0 to 14.2.1 ([#10937](https://github.com/mdn/yari/issues/10937)) ([85372d5](https://github.com/mdn/yari/commit/85372d56b9bef30c379a5e3846233feef59a1962)) +* **deps:** bump @mdn/browser-compat-data from 5.5.21 to 5.5.22 ([#10939](https://github.com/mdn/yari/issues/10939)) ([c290528](https://github.com/mdn/yari/commit/c29052859667c74d5be831d56df0c42d13e0aa62)) +* **deps:** bump @webref/css from 6.12.7 to 6.12.8 ([#10949](https://github.com/mdn/yari/issues/10949)) ([3051a61](https://github.com/mdn/yari/commit/3051a613edb2a169d63cf20415e302f56028ad7a)) +* **deps:** bump inquirer from 9.2.18 to 9.2.19 ([#10940](https://github.com/mdn/yari/issues/10940)) ([b4520ff](https://github.com/mdn/yari/commit/b4520ff50ae976be365b6ca0531f4834e3451e7a)) +* **deps:** bump openai from 4.35.0 to 4.36.0 ([#10936](https://github.com/mdn/yari/issues/10936)) ([dcda615](https://github.com/mdn/yari/commit/dcda6157cb8a0722ec43079b66bcf001fe6beb92)) +* **deps:** bump openai from 4.36.0 to 4.37.1 ([#10950](https://github.com/mdn/yari/issues/10950)) ([c6212c4](https://github.com/mdn/yari/commit/c6212c4f155db69dd464e7708cdca33570b53e15)) +* **deps:** bump web-specs from 3.7.1 to 3.8.0 ([#10952](https://github.com/mdn/yari/issues/10952)) ([126088d](https://github.com/mdn/yari/commit/126088dce86f68adeabed833943cd86883899f34)) + ## [2.48.0](https://github.com/mdn/yari/compare/v2.47.0...v2.48.0) (2024-04-16) diff --git a/build/index.ts b/build/index.ts index 0bc3210fce02..ba4a2a08bfbe 100644 --- a/build/index.ts +++ b/build/index.ts @@ -44,6 +44,7 @@ import { postProcessSmallerHeadingIDs, } from "./utils.js"; import { getWebFeatureStatus } from "./web-features.js"; +import { rewritePageTitleForSEO } from "./seo.js"; export { default as SearchIndex } from "./search-index.js"; export { gather as gatherGitHistory } from "./git-history.js"; export { buildSPAs } from "./spas.js"; @@ -536,7 +537,8 @@ export async function buildDocument( // a breadcrumb in the React component. addBreadcrumbData(document.url, doc); - doc.pageTitle = getPageTitle(doc); + const pageTitle = getPageTitle(doc); + doc.pageTitle = rewritePageTitleForSEO(doc.mdn_url, pageTitle); // Decide whether it should be indexed (sitemaps, robots meta tag, search-index) doc.noIndexing = diff --git a/build/seo.ts b/build/seo.ts new file mode 100644 index 000000000000..4cb2639eb446 --- /dev/null +++ b/build/seo.ts @@ -0,0 +1,526 @@ +// URLs of 500 pages randomly sampled from 4824 affected Web/API pages. +const TEST_GROUP = new Set( + [ + "SVGStyleElement/media", + "MutationEvent/initMutationEvent", + "CSSPrimitiveValue/getStringValue", + "RTCIceCandidateStats/candidateType", + "RTCIceCandidate/relatedPort", + "Cache/match", + "URLSearchParams/append", + "XRWebGLBinding/createEquirectLayer", + "Element/ariaBusy", + "GPUQuerySet/count", + "UIEvent/detail", + "Selection/toString", + "MediaTrackConstraints/frameRate", + "FileSystemSyncAccessHandle/truncate", + "StylePropertyMapReadOnly/keys", + "NetworkInformation/type", + "WebGLRenderingContext/uniform", + "DOMMatrixReadOnly/flipX", + "XMLHttpRequest/status", + "RTCIceTransport/getLocalCandidates", + "BroadcastChannel/close", + "GPUDevice/lost", + "RTCOutboundRtpStreamStats/perDscpPacketsSent", + "AudioListener/upZ", + "BackgroundFetchRegistration/id", + "ReadableStream/ReadableStream", + "Notification/body", + "InterventionReportBody/lineNumber", + "WorkerNavigator/locks", + "InterventionReportBody/toJSON", + "ElementInternals/ariaValueMax", + "Response/bodyUsed", + "HTMLMediaElement/setSinkId", + "GPU/getPreferredCanvasFormat", + "WebGL2RenderingContext/beginTransformFeedback", + "CSSScopeRule/start", + "CacheStorage/keys", + "DedicatedWorkerGlobalScope/postMessage", + "RTCDTMFSender/toneBuffer", + "PushSubscriptionOptions/applicationServerKey", + "WebTransportDatagramDuplexStream/incomingMaxAge", + "BatteryManager/charging", + "Navigator/vibrate", + "StylePropertyMapReadOnly/size", + "TextMetrics/fontBoundingBoxAscent", + "XRInputSourcesChangeEvent/XRInputSourcesChangeEvent", + "MediaDeviceInfo/deviceId", + "BaseAudioContext/createChannelMerger", + "ImageData/ImageData", + "URL/origin", + "ServiceWorkerRegistration/active", + "NavigationHistoryEntry/key", + "ContentIndex/add", + "Document/xmlVersion", + "RemotePlayback/watchAvailability", + "Document/documentElement", + "MathMLElement/style", + "WebGL2RenderingContext/uniformMatrix", + "DeprecationReportBody/lineNumber", + "SerialPort/forget", + "GPUDevice/popErrorScope", + "TaskController/TaskController", + "FileSystemEntry/isDirectory", + "console/timelog_static", + "Selection/type", + "XRViewerPose/views", + "CanvasRenderingContext2D/fontStretch", + "BaseAudioContext/createConvolver", + "Touch/radiusX", + "WebGL2RenderingContext/texSubImage3D", + "Event/srcElement", + "Element/ariaPosInSet", + "CSSUnparsedValue/entries", + "XRLightEstimate/primaryLightIntensity", + "XRSession/requestReferenceSpace", + "VideoFrame/allocationSize", + "AudioContext/createMediaStreamTrackSource", + "GPUQueue/onSubmittedWorkDone", + "ExtendableMessageEvent/lastEventId", + "MediaEncryptedEvent/initData", + "HTMLAreaElement/ping", + "EXT_disjoint_timer_query/getQueryObjectEXT", + "Worklet/addModule", + "Request/clone", + "PasswordCredential/name", + "Location/origin", + "MediaTrackConstraints/sampleSize", + "GPURenderPassEncoder/executeBundles", + "XMLHttpRequest/send", + "console/time_static", + "HTMLTableElement/frame", + "IDBObjectStore/getKey", + "TextTrackCue/id", + "WritableStreamDefaultController/signal", + "RadioNodeList/value", + "Element/ariaBrailleRoleDescription", + "NavigatorUAData/toJSON", + "Cache/delete", + "OVR_multiview2/framebufferTextureMultiviewOVR", + "WebGLRenderingContext/getSupportedExtensions", + "DedicatedWorkerGlobalScope/name", + "DOMPointReadOnly/y", + "Range/collapsed", + "USBDevice/controlTransferIn", + "console/profile_static", + "HTMLImageElement/decoding", + "Window/postMessage", + "HTMLVideoElement/videoWidth", + "TextTrack/language", + "Element/getElementsByClassName", + "AudioEncoder/isConfigSupported_static", + "AudioData/AudioData", + "CSSNumericValue/type", + "IDBDatabase/name", + "AnimationEvent/pseudoElement", + "BaseAudioContext/createAnalyser", + "CSSVariableReferenceValue/variable", + "PresentationConnection/binaryType", + "CredentialsContainer/create", + "ElementInternals/setValidity", + "PannerNode/setOrientation", + "DOMPointReadOnly/toJSON", + "SVGAnimatedString/baseVal", + "Document/links", + "GPURenderBundleEncoder/drawIndirect", + "CSSSkewY/ay", + "Window/getSelection", + "IDBObjectStore/clear", + "HTMLElement/click", + "HTMLTableElement/cellPadding", + "RTCIceCandidatePairStats/writable", + "XRRigidTransform/position", + "OffscreenCanvas/width", + "RTCCertificateStats/fingerprint", + "ChannelSplitterNode/ChannelSplitterNode", + "PerformanceResourceTiming/redirectEnd", + "NamedNodeMap/length", + "Path2D/Path2D", + "SecurityPolicyViolationEvent/originalPolicy", + "ServiceWorkerRegistration/navigationPreload", + "GPUTexture/height", + "ValidityState/rangeOverflow", + "SpeechSynthesis/getVoices", + "BluetoothRemoteGATTDescriptor/writeValue", + "PaymentRequestEvent/methodData", + "TaskController/setPriority", + "MouseEvent/screenY", + "XRView/eye", + "ExtendableCookieChangeEvent/ExtendableCookieChangeEvent", + "ContactAddress/recipient", + "Document/prepend", + "MediaTrackSupportedConstraints/channelCount", + "XRMediaBinding/createCylinderLayer", + "Blob/type", + "CustomElementRegistry/whenDefined", + "Navigator/getUserMedia", + "WebGLRenderingContext/viewport", + "Navigator/hid", + "URLPattern/password", + "GamepadPose/orientation", + "HTMLAreaElement/hash", + "Performance/getEntriesByName", + "FileReader/readAsDataURL", + "Location/hash", + "Screen/isExtended", + "StyleSheet/media", + "MIDIOutput/clear", + "Element/tagName", + "BarProp/visible", + "RTCInboundRtpStreamStats/qpSum", + "HTMLMediaElement/networkState", + "ElementInternals/ariaAutoComplete", + "ViewTimeline/ViewTimeline", + "WritableStreamDefaultWriter/write", + "ServiceWorkerContainer/ready", + "Window/scrollY", + "CustomStateSet/has", + "HTMLImageElement/vspace", + "Range/cloneRange", + "TransformStream/writable", + "SVGAnimatedEnumeration/baseVal", + "PositionSensorVRDevice/getImmediateState", + "PaymentResponse/retry", + "Document/createTreeWalker", + "XRSession/requestLightProbe", + "HTMLAnchorElement/username", + "WebGLRenderingContext/deleteShader", + "WebGLRenderingContext/texSubImage2D", + "CanvasRenderingContext2D/clearRect", + "Navigator/productSub", + "HMDVRDevice/setFieldOfView", + "HTMLObjectElement/useMap", + "WebGLRenderingContext/isRenderbuffer", + "Element/closest", + "HTMLElement/blur", + "GPUCommandEncoder/clearBuffer", + "PromiseRejectionEvent/PromiseRejectionEvent", + "GPUDevice/createSampler", + "IDBObjectStore/openKeyCursor", + "Window/speechSynthesis", + "WebGLRenderingContext/stencilMaskSeparate", + "Request/referrer", + "RTCStatsReport/get", + "HTMLSelectElement/namedItem", + "HIDDevice/sendReport", + "XRRay/matrix", + "HTMLImageElement/Image", + "DOMMatrixReadOnly/scale", + "PerformanceLongTaskTiming/attribution", + "SecurityPolicyViolationEvent/referrer", + "HTMLMediaElement/defaultPlaybackRate", + "PushManager/register", + "InterventionReportBody/columnNumber", + "BackgroundFetchRegistration/recordsAvailable", + "HTMLElement/inert", + "ConvolverNode/ConvolverNode", + "HTMLImageElement/height", + "ResizeObserverSize/inlineSize", + "Text/assignedSlot", + "RTCDtlsTransport/state", + "GeolocationCoordinates/altitudeAccuracy", + "WebGLRenderingContext/isContextLost", + "AbortSignal/throwIfAborted", + "CSSCounterStyleRule/negative", + "HTMLLabelElement/form", + "TaskSignal/any_static", + "SVGGeometryElement/getTotalLength", + "CSSMathNegate/CSSMathNegate", + "NavigatorUAData/getHighEntropyValues", + "CSSNumericValue/to", + "URLSearchParams/delete", + "SpeechRecognitionResult/isFinal", + "XRSession/interactionMode", + "SpeechGrammarList/addFromURI", + "PointerEvent/twist", + "XRViewport/x", + "Range/createContextualFragment", + "Navigator/locks", + "MessagePort/start", + "RTCPeerConnection/setRemoteDescription", + "RTCRtpTransceiver/receiver", + "FileSystemDirectoryEntry/getFile", + "Document/lastStyleSheetSet", + "IDBCursor/source", + "VREyeParameters/offset", + "CSSRule/parentStyleSheet", + "Document/childElementCount", + "CSSPropertyRule/syntax", + "VRDisplay/submitFrame", + "HTMLElement/title", + "PaymentAddress/sortingCode", + "RTCVideoSourceStats/id", + "GPURenderPassEncoder/setBindGroup", + "MediaKeyStatusMap/values", + "MediaStream/getVideoTracks", + "ElementInternals/ariaLevel", + "HTMLMediaElement/controls", + "WritableStream/getWriter", + "Selection/setBaseAndExtent", + "RTCIceCandidate/protocol", + "NodeList/values", + "XRWebGLLayer/fixedFoveation", + "UIEvent/sourceCapabilities", + "ShadowRoot/pointerLockElement", + "OrientationSensor/populateMatrix", + "HTMLFormElement/target", + "PeriodicSyncEvent/PeriodicSyncEvent", + "USB/requestDevice", + "HTMLAreaElement/relList", + "HIDConnectionEvent/HIDConnectionEvent", + "MediaStream/addTrack", + "SerialPort/setSignals", + "RTCError/errorDetail", + "HTMLInputElement/disabled", + "BackgroundFetchRegistration/downloadTotal", + "PushSubscriptionOptions/userVisibleOnly", + "VTTCue/align", + "URLSearchParams/sort", + "AbstractRange/startOffset", + "ImageTrackList/selectedIndex", + "Bluetooth/getDevices", + "LargestContentfulPaint/id", + "CSSFontPaletteValuesRule/basePalette", + "OverconstrainedError/constraint", + "ElementInternals/ariaCurrent", + "NDEFRecord/encoding", + "GPURenderBundleEncoder/insertDebugMarker", + "Element/clientTop", + "SVGMarkerElement/markerWidth", + "Performance/mark", + "RTCRemoteOutboundRtpStreamStats/ssrc", + "NodeList/entries", + "Element/clientLeft", + "ServiceWorkerRegistration/paymentManager", + "RTCCodecStats/id", + "TransitionEvent/TransitionEvent", + "RTCDataChannel/bufferedAmountLowThreshold", + "ShadowRoot/adoptedStyleSheets", + "MediaQueryList/media", + "ImageTrack/animated", + "Request/headers", + "PerformanceTiming/domainLookupEnd", + "BackgroundFetchRegistration/uploadTotal", + "PerformanceTiming/domComplete", + "ImageCapture/getPhotoCapabilities", + "Document/selectedStyleSheetSet", + "WebGLRenderingContext/blendFuncSeparate", + "CanvasRenderingContext2D/shadowColor", + "XSLTProcessor/XSLTProcessor", + "XRCylinderLayer/radius", + "RTCRtpStreamStats/pliCount", + "StorageEvent/newValue", + "GPUBuffer/unmap", + "RTCPeerConnection/createAnswer", + "XMLHttpRequest/overrideMimeType", + "WebGL2RenderingContext/transformFeedbackVaryings", + "Window/closed", + "AudioTrack/kind", + "HTMLAnchorElement/search", + "WebGLRenderingContext/createBuffer", + "WebGLRenderingContext/getTexParameter", + "XMLHttpRequest/setRequestHeader", + "MutationRecord/attributeNamespace", + "BaseAudioContext/createConstantSource", + "VREyeParameters/minimumFieldOfView", + "WindowControlsOverlay/getTitlebarAreaRect", + "SVGPointList/appendItem", + "AuthenticatorResponse/clientDataJSON", + "RTCTrackEvent/track", + "AudioDestinationNode/maxChannelCount", + "History/replaceState", + "PaymentRequestUpdateEvent/PaymentRequestUpdateEvent", + "ImageData/data", + "CSSRule/type", + "BeforeInstallPromptEvent/userChoice", + "IDBObjectStore/put", + "NavigateEvent/formData", + "StaticRange/collapsed", + "PannerNode/PannerNode", + "XRWebGLBinding/createCylinderLayer", + "FileSystemFileEntry/createWriter", + "Touch/Touch", + "IDBVersionChangeEvent/IDBVersionChangeEvent", + "HIDInputReportEvent/device", + "PerformanceResourceTiming/domainLookupStart", + "HTMLTableElement/border", + "RTCCertificateStats/timestamp", + "IdentityCredential/isAutoSelected", + "MediaStreamTrack/enabled", + "Range/endOffset", + "IDBTransaction/mode", + "Response/status", + "PaymentAddress/recipient", + "TouchEvent/touches", + "MediaStreamEvent/stream", + "ImageTrack/frameCount", + "URL/hash", + "TextMetrics/ideographicBaseline", + "FileSystemFileHandle/createWritable", + "Event/stopPropagation", + "ScreenDetailed/left", + "EXT_disjoint_timer_query/beginQueryEXT", + "NavigateEvent/userInitiated", + "DocumentFragment/querySelectorAll", + "NavigatorUAData/brands", + "RTCIceCandidate/tcpType", + "HTMLElement/togglePopover", + "MediaTrackConstraints/autoGainControl", + "ElementInternals/ariaLive", + "Navigator/getGamepads", + "DynamicsCompressorNode/attack", + "CharacterData/deleteData", + "ImageCapture/getPhotoSettings", + "WritableStreamDefaultWriter/abort", + "XRDepthInformation/rawValueToMeters", + "WorkerNavigator/serial", + "XRWebGLLayer/XRWebGLLayer", + "Fence/getNestedConfigs", + "AnalyserNode/frequencyBinCount", + "BaseAudioContext/state", + "HTMLAreaElement/origin", + "AudioBuffer/length", + "WebSocket/binaryType", + "SVGElement/style", + "Document/getElementById", + "ScreenOrientation/angle", + "FileReader/FileReader", + "MediaStreamAudioDestinationNode/stream", + "Document/lastElementChild", + "ReadableByteStreamController/close", + "TextUpdateEvent/text", + "CSSStyleSheet/removeRule", + "AudioNode/channelCount", + "ImageData/colorSpace", + "DOMMatrixReadOnly/translate", + "XRInputSourceArray/keys", + "ElementInternals/ariaAtomic", + "DeviceOrientationEvent/DeviceOrientationEvent", + "CountQueuingStrategy/size", + "RTCRtpSender/setStreams", + "BluetoothRemoteGATTCharacteristic/writeValue", + "SecurityPolicyViolationEvent/violatedDirective", + "AudioParam/linearRampToValueAtTime", + "HTMLButtonElement/disabled", + "WaveShaperNode/curve", + "SVGRect/The__X__property", + "CSSTransformValue/keys", + "ServiceWorkerRegistration/getNotifications", + "Notification/timestamp", + "IDBObjectStore/count", + "AudioParam/cancelScheduledValues", + "XREquirectLayer/radius", + "CSSUnparsedValue/CSSUnparsedValue", + "XSLTProcessor/getParameter", + "Navigator/keyboard", + "Metadata/modificationTime", + "MediaDeviceInfo/kind", + "NavigationHistoryEntry/sameDocument", + "ViewTimeline/endOffset", + "PerformanceNavigationTiming/toJSON", + "XRProjectionLayer/fixedFoveation", + "WebGLRenderingContext/compressedTexSubImage2D", + "RTCPeerConnection/getIdentityAssertion", + "Navigation/traverseTo", + "InputEvent/InputEvent", + "Storage/length", + "ReadableStreamBYOBReader/closed", + "VRFrameData/timestamp", + "WheelEvent/WheelEvent", + "Window/window", + "VRDisplayEvent/VRDisplayEvent", + "RTCRtpStreamStats/qpSum", + "TrustedTypePolicy/name", + "StylePropertyMap/set", + "ReadableStreamDefaultController/close", + "RTCSessionDescription/RTCSessionDescription", + "URL/toString", + "OffscreenCanvas/convertToBlob", + "HTMLSlotElement/assign", + "MediaTrackSupportedConstraints/displaySurface", + "GPUAdapter/features", + "HTMLFormElement/encoding", + "PerformanceMeasure/detail", + "OES_vertex_array_object/deleteVertexArrayOES", + "Document/fullscreenEnabled", + "TextUpdateEvent/TextUpdateEvent", + "StorageEvent/storageArea", + "PerformanceServerTiming/name", + "PerformanceNavigation/type", + "InterventionReportBody/id", + "Window/statusbar", + "Document/anchors", + "Navigator/presentation", + "Bluetooth/getAvailability", + "USBDevice/selectConfiguration", + "FileSystemDirectoryHandle/entries", + "Element/ariaAtomic", + "IDBIndex/openKeyCursor", + "BaseAudioContext/createChannelSplitter", + "VideoColorSpace/transfer", + "MediaTrackConstraints/displaySurface", + "CSSPropertyRule/initialvalue", + "KeyframeEffect/setKeyframes", + "RTCStatsReport/forEach", + "SourceBuffer/changeType", + "GPURenderPassEncoder/end", + "RTCRtpScriptTransformer/writable", + "CSSNamespaceRule/prefix", + "ScreenDetailed/label", + "PaymentRequest/shippingType", + "MediaTrackSettings/logicalSurface", + "HTMLTemplateElement/content", + "IDBCursor/continuePrimaryKey", + "window/getDefaultComputedStyle", + "FileSystemWritableFileStream/seek", + "CanvasRenderingContext2D/shadowBlur", + "GPUCommandEncoder/copyTextureToTexture", + "GPURenderBundleEncoder/setPipeline", + "FileSystem/name", + "USBDevice/opened", + "IDBCursor/key", + "HTMLFencedFrameElement/height", + "PerformanceObserver/PerformanceObserver", + "Blob/stream", + "MediaTrackConstraints/volume", + "LaunchQueue/setConsumer", + "HTMLInputElement/stepDown", + "CSSStyleDeclaration/getPropertyCSSValue", + "BaseAudioContext/createPeriodicWave", + "GamepadEvent/gamepad", + "MouseEvent/WEBKIT_FORCE_AT_FORCE_MOUSE_DOWN_static", + "SpeechSynthesisEvent/charIndex", + "MediaTrackSupportedConstraints/volume", + "BluetoothRemoteGATTCharacteristic/stopNotifications", + "Element/prepend", + "FormData/FormData", + "Highlight/priority", + "NavigateEvent/info", + "HTMLAudioElement/Audio", + "MediaKeySession/generateRequest", + ].map((slugSuffix) => `/en-US/docs/Web/API/${slugSuffix}`.toLowerCase()) +); + +export function rewritePageTitleForSEO( + mdn_url: string, + s: string | null +): string | null { + if ( + typeof s !== "string" || + typeof mdn_url !== "string" || + !TEST_GROUP.has(mdn_url.toLowerCase()) + ) { + return s; + } + + return ( + s + // "AudioBuffer: sampleRate property" -> "AudioBuffer.sampleRate property" + .replace(/^(.*): (.*?) (static )?(method|property)/, "$1.$2 $3$4") + // "AudioBuffer: AudioBuffer() constructor" -> "AudioBuffer() constructor" + .replace(/^(.*): (\1\(\)) constructor/, "$2 constructor") ?? null + ); +} diff --git a/client/public/runner.html b/client/public/runner.html index f3cb4e839b3b..a6b75d798221 100644 --- a/client/public/runner.html +++ b/client/public/runner.html @@ -121,8 +121,12 @@ script.textContent = state.js; document.body.appendChild(script); - dispatchEvent(new Event("DOMContentLoaded")); - dispatchEvent(new Event("load")); + document.dispatchEvent( + new Event("DOMContentLoaded", { bubbles: true }) + ); + document.dispatchEvent(new Event("readystatechange")); + window.dispatchEvent(new Event("load")); + initialized = true; } window.addEventListener("message", (event) => { diff --git a/client/src/flaws/index.scss b/client/src/flaws/index.scss index ee4bc40fe8a8..c75394775bf9 100644 --- a/client/src/flaws/index.scss +++ b/client/src/flaws/index.scss @@ -3,10 +3,6 @@ background-color: var(--background-warning); } - h3 { - margin-top: 0; - } - h3 span.page { color: var(--text-inactive); } @@ -66,7 +62,6 @@ gap: 20px; grid-template-columns: 300px 1fr; margin: auto; - width: calc(100% - 40px); .filters { h4 { diff --git a/client/src/translations/dashboard/index.tsx b/client/src/translations/dashboard/index.tsx index 953858a8c9a7..781412785c1c 100644 --- a/client/src/translations/dashboard/index.tsx +++ b/client/src/translations/dashboard/index.tsx @@ -8,6 +8,7 @@ import { import useSWR from "swr"; import { MainContentContainer } from "../../ui/atoms/page-content"; +import { Icon } from "../../ui/atoms/icon"; import { useLocale } from "../../hooks"; interface Data { @@ -193,7 +194,7 @@ export function TranslationDashboard() { )} {error && } {lastData && ( -
+
{ - if (sort === id) { - setSearchParams( - createSearchParams({ - sort: id, - sortReverse: JSON.stringify(!sortReverse), - section: currentSection, - }) - ); - } else { - setSearchParams( - createSearchParams({ sort: id, section: currentSection }) - ); - } - }} - className={`sortable ${sort === id ? "active" : ""} ${ - sort === id && sortReverse ? "reverse" : "" - }`} - > - {title} + function TableHead({ + id, + title, + sortable, + }: { + id: string; + title: string; + sortable?: boolean; + }) { + function getClassName() { + const className = ["sortable"]; + + if (sort === id) { + className.push("active"); + } + + if (sortReverse) { + className.push("reverse"); + } + + return className.join(" "); + } + + function onClick() { + if (sort === id) { + setSearchParams( + createSearchParams({ + sort: id, + sortReverse: JSON.stringify(!sortReverse), + section: currentSection, + }) + ); + } else { + setSearchParams( + createSearchParams({ sort: id, section: currentSection }) + ); + } + } + + return sortable ? ( + + {title} + ) : ( + {title} ); } return (

List of direct subpages

+ - + - + - + + {documents .sort((A, B) => { diff --git a/client/src/translations/differences/index.scss b/client/src/translations/differences/index.scss index 74a471c3bfad..7ca3dbcc545e 100644 --- a/client/src/translations/differences/index.scss +++ b/client/src/translations/differences/index.scss @@ -13,10 +13,6 @@ } } - h3 { - margin-top: 0; - } - h3 span.page { color: var(--text-inactive); } @@ -39,6 +35,21 @@ table { width: 100%; + th.sortable { + cursor: pointer; + } + + th.sortable.active { + background-color: var(--background-secondary); + color: var(--text-primary); + } + + th.sortable.active.reverse { + .icon { + transform: rotate(-180deg); + } + } + td a .url-prefix { color: rgb(159, 159, 159); font-size: 80%; @@ -89,7 +100,6 @@ gap: 20px; grid-template-columns: 300px 1fr; margin: auto; - width: calc(100% - 40px); .filters { h4 { @@ -105,15 +115,5 @@ } } } - - .documents { - h4.subheader { - margin-top: 2px; - } - - th.sortable { - cursor: ns-resize; - } - } } } diff --git a/kumascript/macros/PreviousMenuNext.ejs b/kumascript/macros/PreviousMenuNext.ejs index a016233e163c..820d55c32de1 100644 --- a/kumascript/macros/PreviousMenuNext.ejs +++ b/kumascript/macros/PreviousMenuNext.ejs @@ -6,17 +6,15 @@ Parameter $1 (second parameter): path of Next page $2 (third parameter): path to main menu of module -Issue - * Problem of Apostrophe (https://developer.mozilla.org/fr/docs/JavaScript_Guide/Op%C3%A9rateurs/Op%C3%A9rateurs_sp%C3%A9ciaux) - */ -var lang = env.locale; -var strPrevious = ""; -var strNext = ""; -var strMenu = ""; +const locale = env.locale; +const defaultLocale = "en-US"; +const prevPage = $0?.replace(/ /g, "_"); +const nextPage = $1?.replace(/ /g, "_"); +const mainMenu = $2?.replace(/ /g, "_"); -var s_PreviousNext = mdn.localString({ +const previousNextStr = mdn.localString({ "en-US": [" Previous ", " Next "], "es" : [" Anterior ", " Siguiente "], "fr" : [" Précédent ", " Suivant "], @@ -28,7 +26,7 @@ var s_PreviousNext = mdn.localString({ "zh-TW": [" 前頁 ", " 次頁 "] }); -var s_Menu = mdn.localString({ +const menuStr = mdn.localString({ "en-US": " Overview: ", "pt-BR": " Menu: ", "fr" : " Aperçu : ", @@ -37,29 +35,34 @@ var s_Menu = mdn.localString({ "zh-TW": " 概述:", }); -if ($0) { - strPrevious = '
  • ' + s_PreviousNext[0] + '
  • '; +function generateLink(pageSlug, linkText) { + return `
  • ${linkText}
  • `; } -if ($1) { - strNext = '
  • ' + s_PreviousNext[1] + '
  • '; +function generateMenuLink(pageSlug) { + const url = `/${locale}/docs/${pageSlug}`; + let aPage = info.getPageByURL(url); + if (!aPage.url && locale !== defaultLocale) { + const fallbackUrl = `/${defaultLocale}/docs/${pageSlug}`; + aPage = info.getPageByURL(fallbackUrl); + } + + let title = ""; + if (!aPage.url) { + // fallback to generate title from slug + title = pageSlug.split('/').at(-1).replace(/_/g, " "); + } else { + title = aPage.title; + } + return generateLink(pageSlug, `${menuStr}${title}`); } -if ($2) { - var startString = $2; - var linkTextArray = startString.split('/'); - var linkText = linkTextArray[linkTextArray.length-1]; - var re = /_/gi; - var finalString = linkText.replace(re,' '); - if($0 && $1) { - strMenu = '
  • ' + s_Menu + finalString + '
  • '; - } else if($0) { - strMenu = '
  • ' + s_Menu + finalString + '
  • '; - } else if($1) { - strMenu = '
  • ' + s_Menu + finalString + '
  • '; - } -} +// Output +const strPrevious = prevPage ? generateLink(prevPage, previousNextStr[0]) : ""; +const strNext = nextPage ? generateLink(nextPage, previousNextStr[1]) : ""; +// If there is a main menu with a previous and/or a next page, generate a link to the main menu +const strMenu = (mainMenu && (prevPage || nextPage)) ? generateMenuLink(mainMenu) : ""; %>
      <%- strPrevious %> diff --git a/package.json b/package.json index 9bd022165710..1feec34cab2a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@mdn/yari", - "version": "2.48.0", + "version": "2.49.0", "repository": "https://github.com/mdn/yari", "license": "MPL-2.0", "author": "MDN Web Docs", @@ -71,14 +71,14 @@ "@codemirror/theme-one-dark": "^6.1.2", "@fast-csv/parse": "^5.0.0", "@mdn/bcd-utils-api": "^0.0.7", - "@mdn/browser-compat-data": "^5.5.21", + "@mdn/browser-compat-data": "^5.5.22", "@mozilla/glean": "4.0.0", "@sentry/integrations": "^7.110.1", "@sentry/node": "^7.110.1", "@stripe/stripe-js": "^3.3.0", "@use-it/interval": "^1.0.0", "@vscode/ripgrep": "^1.15.9", - "@webref/css": "^6.12.7", + "@webref/css": "^6.12.8", "accept-language-parser": "^1.5.0", "async": "^3.2.5", "chalk": "^5.3.0", @@ -108,7 +108,7 @@ "imagemin-mozjpeg": "^10.0.0", "imagemin-pngquant": "^9.0.2", "imagemin-svgo": "^10.0.1", - "inquirer": "^9.2.18", + "inquirer": "^9.2.19", "is-svg": "^5.0.0", "js-yaml": "^4.1.0", "loglevel": "^1.9.1", @@ -119,7 +119,7 @@ "mdn-data": "^2.5.0", "open": "^10.1.0", "open-editor": "^4.1.1", - "openai": "^4.35.0", + "openai": "^4.37.1", "pg": "^8.11.5", "pgvector": "^0.1.8", "prism-svelte": "^0.5.0", @@ -146,7 +146,7 @@ "unist-builder": "^4.0.0", "unist-util-visit": "^5.0.0", "web-features": "^0.6.3", - "web-specs": "^3.7.1" + "web-specs": "^3.8.0" }, "devDependencies": { "@babel/core": "^7.24.4", @@ -158,7 +158,7 @@ "@playwright/test": "^1.43.1", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.11", "@svgr/webpack": "^8.1.0", - "@swc/core": "^1.4.14", + "@swc/core": "^1.4.16", "@testing-library/react": "^15.0.2", "@types/async": "^3.2.24", "@types/cli-progress": "^3.11.5", @@ -212,7 +212,7 @@ "jsdom": "^24.0.0", "lint-staged": "^13.2.3", "mdast-util-to-hast": "^13.1.0", - "mini-css-extract-plugin": "^2.8.1", + "mini-css-extract-plugin": "^2.9.0", "node-dev": "^8.0.0", "peggy": "^4.0.2", "postcss": "^8.4.38", @@ -236,7 +236,7 @@ "resolve-url-loader": "^5.0.0", "rough-notation": "^0.5.1", "sass": "^1.75.0", - "sass-loader": "^14.2.0", + "sass-loader": "^14.2.1", "semver": "^7.6.0", "source-map-explorer": "^2.5.3", "source-map-loader": "^5.0.0", diff --git a/yarn.lock b/yarn.lock index 906603dad131..a2efd7d3869a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1909,10 +1909,10 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== -"@inquirer/figures@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.0.tgz#f28ee68d08c5ada5284ee0d58ae1d177e80dabda" - integrity sha512-3fw+7+77/duTnMJTeSS44wneszghI4tkr0m0xdIJabbYRe36ElzmsqyboMZ1nFRon6sT+ckVvYDVjwapKv+2sw== +"@inquirer/figures@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.1.tgz#d65f0bd0e9511a90b4d3543ee6a3ce7211f29417" + integrity sha512-mtup3wVKia3ZwULPHcbs4Mor8Voi+iIXEWD7wCNbIO6lYR62oPCTQyrddi5OMYVXHzeCSoneZwJuS8sBvlEwDw== "@isaacs/cliui@^8.0.2": version "8.0.2" @@ -2305,10 +2305,10 @@ 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.5.21": - version "5.5.21" - resolved "https://registry.yarnpkg.com/@mdn/browser-compat-data/-/browser-compat-data-5.5.21.tgz#32a7017ff0d43bbfc48321b9d6255a55a12a57cb" - integrity sha512-M+KqctZP6J3kIHI+SwQMPbjUM510ex690NRBm0jlFwJ+TNvvuHcp3vCEzUzwtVj5RWEuTROgy5U++3XnN1Przg== +"@mdn/browser-compat-data@^5.5.22": + version "5.5.22" + resolved "https://registry.yarnpkg.com/@mdn/browser-compat-data/-/browser-compat-data-5.5.22.tgz#8cdc3794c4f7f5d44626a1999f2698cdba33f2d9" + integrity sha512-2v+HeCb1J4tAi4M9zMR1AtxMBA08q8HMDXbJ1H64sFpXhTU/8W2kBBjTL9TkUQiHaJDFFU6kAFBlsfslP253WA== "@mdn/dinocons@^0.5.5": version "0.5.5" @@ -2650,74 +2650,74 @@ "@svgr/plugin-jsx" "8.1.0" "@svgr/plugin-svgo" "8.1.0" -"@swc/core-darwin-arm64@1.4.14": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.4.14.tgz#de570252c3f155f55536f0d6bb8bafaec2e99616" - integrity sha512-8iPfLhYNspBl836YYsfv6ErXwDUqJ7IMieddV3Ey/t/97JAEAdNDUdtTKDtbyP0j/Ebyqyn+fKcqwSq7rAof0g== - -"@swc/core-darwin-x64@1.4.14": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.4.14.tgz#4eefbe129e416f4c400656742ab7f30e01aff02e" - integrity sha512-9CqSj8uRZ92cnlgAlVaWMaJJBdxtNvCzJxaGj5KuIseeG6Q0l1g+qk8JcU7h9dAsH9saHTNwNFBVGKQo0W0ujg== - -"@swc/core-linux-arm-gnueabihf@1.4.14": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.4.14.tgz#bea4b94c32bb25de2816126dac299655529ba7f3" - integrity sha512-mfd5JArPITTzMjcezH4DwMw+BdjBV1y25Khp8itEIpdih9ei+fvxOOrDYTN08b466NuE2dF2XuhKtRLA7fXArQ== - -"@swc/core-linux-arm64-gnu@1.4.14": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.4.14.tgz#52063214f4a14d6a0c3c6059ed9e7ba1062f6b46" - integrity sha512-3Lqlhlmy8MVRS9xTShMaPAp0oyUt0KFhDs4ixJsjdxKecE0NJSV/MInuDmrkij1C8/RQ2wySRlV9np5jK86oWw== - -"@swc/core-linux-arm64-musl@1.4.14": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.4.14.tgz#7e7deea7b1b3d0c9944cc8e9ba948fcc785158ea" - integrity sha512-n0YoCa64TUcJrbcXIHIHDWQjdUPdaXeMHNEu7yyBtOpm01oMGTKP3frsUXIABLBmAVWtKvqit4/W1KVKn5gJzg== - -"@swc/core-linux-x64-gnu@1.4.14": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.4.14.tgz#301133ea3ee347568886f2489837e991e96d44db" - integrity sha512-CGmlwLWbfG1dB4jZBJnp2IWlK5xBMNLjN7AR5kKA3sEpionoccEnChOEvfux1UdVJQjLRKuHNV9yGyqGBTpxfQ== - -"@swc/core-linux-x64-musl@1.4.14": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.4.14.tgz#86b8e987a814209cd0dd0f21cbc1134305dfffd5" - integrity sha512-xq4npk8YKYmNwmr8fbvF2KP3kUVdZYfXZMQnW425gP3/sn+yFQO8Nd0bGH40vOVQn41kEesSe0Z5O/JDor2TgQ== - -"@swc/core-win32-arm64-msvc@1.4.14": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.4.14.tgz#eb56b8977e3542665929c3963bd7dc18fe5b2556" - integrity sha512-imq0X+gU9uUe6FqzOQot5gpKoaC00aCUiN58NOzwp0QXEupn8CDuZpdBN93HiZswfLruu5jA1tsc15x6v9p0Yg== - -"@swc/core-win32-ia32-msvc@1.4.14": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.4.14.tgz#72e119038b9d8743b13bb933b8e192acd9f501f9" - integrity sha512-cH6QpXMw5D3t+lpx6SkErHrxN0yFzmQ0lgNAJxoDRiaAdDbqA6Col8UqUJwUS++Ul6aCWgNhCdiEYehPaoyDPA== - -"@swc/core-win32-x64-msvc@1.4.14": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.4.14.tgz#f5a3b1a241708b0628a07458e5bedbf67a1b9595" - integrity sha512-FmZ4Tby4wW65K/36BKzmuu7mlq7cW5XOxzvufaSNVvQ5PN4OodAlqPjToe029oma4Av+ykJiif64scMttyNAzg== - -"@swc/core@^1.4.14": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.4.14.tgz#8bad316c0119f626bb1b181ba7a988ef9d14e9cc" - integrity sha512-tHXg6OxboUsqa/L7DpsCcFnxhLkqN/ht5pCwav1HnvfthbiNIJypr86rNx4cUnQDJepETviSqBTIjxa7pSpGDQ== +"@swc/core-darwin-arm64@1.4.16": + version "1.4.16" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.4.16.tgz#2cd45d709ce76d448d96bf8d0006849541436611" + integrity sha512-UOCcH1GvjRnnM/LWT6VCGpIk0OhHRq6v1U6QXuPt5wVsgXnXQwnf5k3sG5Cm56hQHDvhRPY6HCsHi/p0oek8oQ== + +"@swc/core-darwin-x64@1.4.16": + version "1.4.16" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.4.16.tgz#a5bc7d8b1dd850adb0bb95c6b5c742b92201fd01" + integrity sha512-t3bgqFoYLWvyVtVL6KkFNCINEoOrIlyggT/kJRgi1y0aXSr0oVgcrQ4ezJpdeahZZ4N+Q6vT3ffM30yIunELNA== + +"@swc/core-linux-arm-gnueabihf@1.4.16": + version "1.4.16" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.4.16.tgz#961744908ee5cbb79bc009dcf58cc8b831111f38" + integrity sha512-DvHuwvEF86YvSd0lwnzVcjOTZ0jcxewIbsN0vc/0fqm9qBdMMjr9ox6VCam1n3yYeRtj4VFgrjeNFksqbUejdQ== + +"@swc/core-linux-arm64-gnu@1.4.16": + version "1.4.16" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.4.16.tgz#43713be3f26757d82d2745dc25f8b63400e0a3d0" + integrity sha512-9Uu5YlPbyCvbidjKtYEsPpyZlu16roOZ5c2tP1vHfnU9bgf5Tz5q5VovSduNxPHx+ed2iC1b1URODHvDzbbDuQ== + +"@swc/core-linux-arm64-musl@1.4.16": + version "1.4.16" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.4.16.tgz#394a7d030f3a61902bd3947bb9d70d26d42f3c81" + integrity sha512-/YZq/qB1CHpeoL0eMzyqK5/tYZn/rzKoCYDviFU4uduSUIJsDJQuQA/skdqUzqbheOXKAd4mnJ1hT04RbJ8FPQ== + +"@swc/core-linux-x64-gnu@1.4.16": + version "1.4.16" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.4.16.tgz#71eb108b784f9d551ee8a35ebcdaed972f567981" + integrity sha512-UUjaW5VTngZYDcA8yQlrFmqs1tLi1TxbKlnaJwoNhel9zRQ0yG1YEVGrzTvv4YApSuIiDK18t+Ip927bwucuVQ== + +"@swc/core-linux-x64-musl@1.4.16": + version "1.4.16" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.4.16.tgz#10dbaedb4e3dfc7268e3a9a66ad3431471ef035b" + integrity sha512-aFhxPifevDTwEDKPi4eRYWzC0p/WYJeiFkkpNU5Uc7a7M5iMWPAbPFUbHesdlb9Jfqs5c07oyz86u+/HySBNPQ== + +"@swc/core-win32-arm64-msvc@1.4.16": + version "1.4.16" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.4.16.tgz#80247adff6c245ff32b44d773c1a148858cd655f" + integrity sha512-bTD43MbhIHL2s5QgCwyleaGwl96Gk/scF2TaVKdUe4QlJCDV/YK9h5oIBAp63ckHtE8GHlH4c8dZNBiAXn4Org== + +"@swc/core-win32-ia32-msvc@1.4.16": + version "1.4.16" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.4.16.tgz#e540afc3ccf3224267b4ddfb408f9d9737984686" + integrity sha512-/lmZeAN/qV5XbK2SEvi8e2RkIg8FQNYiSA8y2/Zb4gTUMKVO5JMLH0BSWMiIKMstKDPDSxMWgwJaQHF8UMyPmQ== + +"@swc/core-win32-x64-msvc@1.4.16": + version "1.4.16" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.4.16.tgz#f880939fca32c181adfe7e3abd2b6b7857bd3489" + integrity sha512-BPAfFfODWXtUu6SwaTTftDHvcbDyWBSI/oanUeRbQR5vVWkXoQ3cxLTsDluc3H74IqXS5z1Uyoe0vNo2hB1opA== + +"@swc/core@^1.4.16": + version "1.4.16" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.4.16.tgz#d175bae2acfecd53bcbd4293f1fba5ec316634a0" + integrity sha512-Xaf+UBvW6JNuV131uvSNyMXHn+bh6LyKN4tbv7tOUFQpXyz/t9YWRE04emtlUW9Y0qrm/GKFCbY8n3z6BpZbTA== dependencies: "@swc/counter" "^0.1.2" "@swc/types" "^0.1.5" optionalDependencies: - "@swc/core-darwin-arm64" "1.4.14" - "@swc/core-darwin-x64" "1.4.14" - "@swc/core-linux-arm-gnueabihf" "1.4.14" - "@swc/core-linux-arm64-gnu" "1.4.14" - "@swc/core-linux-arm64-musl" "1.4.14" - "@swc/core-linux-x64-gnu" "1.4.14" - "@swc/core-linux-x64-musl" "1.4.14" - "@swc/core-win32-arm64-msvc" "1.4.14" - "@swc/core-win32-ia32-msvc" "1.4.14" - "@swc/core-win32-x64-msvc" "1.4.14" + "@swc/core-darwin-arm64" "1.4.16" + "@swc/core-darwin-x64" "1.4.16" + "@swc/core-linux-arm-gnueabihf" "1.4.16" + "@swc/core-linux-arm64-gnu" "1.4.16" + "@swc/core-linux-arm64-musl" "1.4.16" + "@swc/core-linux-x64-gnu" "1.4.16" + "@swc/core-linux-x64-musl" "1.4.16" + "@swc/core-win32-arm64-msvc" "1.4.16" + "@swc/core-win32-ia32-msvc" "1.4.16" + "@swc/core-win32-x64-msvc" "1.4.16" "@swc/counter@^0.1.2": version "0.1.3" @@ -3708,10 +3708,10 @@ resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.5.tgz#325db42395cd49fe6c14057f9a900e427df8810e" integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ== -"@webref/css@^6.12.7": - version "6.12.7" - resolved "https://registry.yarnpkg.com/@webref/css/-/css-6.12.7.tgz#49d9f0cb02063733c48eaa1680e67dad41c8311a" - integrity sha512-Mcre228zvhjYZwaJbfQYBROnWa+p1kbGlTIUnYIAFCejmeM9Fz0s7/WNr7UXt9TlcsUDixxJId02t1fy5smnrw== +"@webref/css@^6.12.8": + version "6.12.8" + resolved "https://registry.yarnpkg.com/@webref/css/-/css-6.12.8.tgz#1966b08da3c51fc1076b24ec89506b3873e5b23a" + integrity sha512-4Zu+rFdDF/GrXpuY+8mZpC2bWmaVqrvB2eIhXO1V0Sg4uSAs1q3imZvz5Rao7t2dhyp0c9OZMcvAAbxSt0+ZIQ== "@xtuc/ieee754@^1.2.0": version "1.2.0" @@ -8635,12 +8635,12 @@ inquirer@^6.0.0: strip-ansi "^5.1.0" through "^2.3.6" -inquirer@^9.2.18: - version "9.2.18" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-9.2.18.tgz#eb7dcb2c9d7aa0678b9dc4d1d243c297aacc2629" - integrity sha512-Qzm+UP7L9beFyycZ9Nxzqj7WBgeJIaT4Ue0+2bmQp9yZXiUW2azrmBnp3vlInMw1wXkUmaM0hiMcht7CjJzASw== +inquirer@^9.2.19: + version "9.2.19" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-9.2.19.tgz#e142ebc111b6328a21eb84d8e7dd226ff824239e" + integrity sha512-WpxOT71HGsFya6/mj5PUue0sWwbpbiPfAR+332zLj/siB0QA1PZM8v3GepegFV1Op189UxHUCF6y8AySdtOMVA== dependencies: - "@inquirer/figures" "^1.0.0" + "@inquirer/figures" "^1.0.1" "@ljharb/through" "^2.3.13" ansi-escapes "^4.3.2" chalk "^5.3.0" @@ -10893,10 +10893,10 @@ min-indent@^1.0.0, min-indent@^1.0.1: resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -mini-css-extract-plugin@^2.8.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.8.1.tgz#75245f3f30ce3a56dbdd478084df6fe475f02dc7" - integrity sha512-/1HDlyFRxWIZPI1ZpgqlZ8jMw/1Dp/dl3P0L1jtZ+zVcHqwPhGwaJwKL00WVgfnBy6PWCde9W65or7IIETImuA== +mini-css-extract-plugin@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.0.tgz#c73a1327ccf466f69026ac22a8e8fd707b78a235" + integrity sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA== dependencies: schema-utils "^4.0.0" tapable "^2.2.1" @@ -11361,10 +11361,10 @@ open@^8.4.0: is-docker "^2.1.1" is-wsl "^2.2.0" -openai@^4.35.0: - version "4.35.0" - resolved "https://registry.yarnpkg.com/openai/-/openai-4.35.0.tgz#3a9fa95e87d18df73ef3ff03ed40bd7b4e7770e9" - integrity sha512-K8GY7k4h+dT2GSmn3JGSjkwElpo8cPa4eQ6p++uK1HSrrIBp6NalD3A3DIamvX1AnIyrKqe8M//HoQWgjntUiA== +openai@^4.37.1: + version "4.37.1" + resolved "https://registry.yarnpkg.com/openai/-/openai-4.37.1.tgz#b3d64d61a972d43da2399d86c4b0cc7b07e9c2bc" + integrity sha512-YVuhylpDeTNCWgsfhZe38+c4dDWZuW9VgzNY/sdYiNt6K9pvijroyYENp8YGEUHnuIAKtsLneZX9Qb/iB5XHkw== dependencies: "@types/node" "^18.11.18" "@types/node-fetch" "^2.6.4" @@ -13472,10 +13472,10 @@ sanitize.css@*: resolved "https://registry.yarnpkg.com/sanitize.css/-/sanitize.css-13.0.0.tgz#2675553974b27964c75562ade3bd85d79879f173" integrity sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA== -sass-loader@^14.2.0: - version "14.2.0" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-14.2.0.tgz#0d4440170fd9c9d93684e274a5ef73dbf55f414b" - integrity sha512-jxmjDXD9OYNDb2bp9JvopdE6QjecQY9beTWik/6sEHrsMxyo90Gyc471A4NUz60NLs4WsAh6yVtIvhLwEZcXeg== +sass-loader@^14.2.1: + version "14.2.1" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-14.2.1.tgz#db9ad96b56dc1c1ea546101e76375d5b008fec70" + integrity sha512-G0VcnMYU18a4N7VoNDegg2OuMjYtxnqzQWARVWCIVSZwJeiL9kg8QMsuIZOplsJgTzZLF6jGxI3AClj8I9nRdQ== dependencies: neo-async "^2.6.2" @@ -15541,10 +15541,10 @@ web-namespaces@^2.0.0: resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-2.0.1.tgz#1010ff7c650eccb2592cebeeaf9a1b253fd40692" integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ== -web-specs@^3.7.1: - version "3.7.1" - resolved "https://registry.yarnpkg.com/web-specs/-/web-specs-3.7.1.tgz#231b8253845b1c96a72fb0ad3226bf89a4bb9afd" - integrity sha512-snm7UBheKzwvK2WSUv0QPyZvQquv+S6Eduzuy8lHt/+CwPBY1Ic2vLNkIKhsBeJoDi42rXevTo2j2Axkw7Ln3g== +web-specs@^3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/web-specs/-/web-specs-3.8.0.tgz#8ec021ff94abee98db5491a8ed3c595de3f17293" + integrity sha512-tAJgIFOgHHAQiorvKW8gMCzrTDBzT+wThaXduQswmFuiMbKtQZQtBobQ74v4nIUKgPlIHi/e8ypYptcQ4OblKg== web-streams-polyfill@4.0.0-beta.3: version "4.0.0-beta.3"