From 6b1bae5f0b5ffa976a50ebffee944878e84b1e50 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Fri, 17 Apr 2026 00:27:06 +0000 Subject: [PATCH 1/2] build: update all non-major dependencies See associated pull request for more information. Closes #33087 as a pr takeover --- docs/package.json | 2 +- package.json | 4 +-- pnpm-lock.yaml | 61 ++++++++++----------------------- src/youtube-player/package.json | 2 +- 4 files changed, 23 insertions(+), 46 deletions(-) diff --git a/docs/package.json b/docs/package.json index 05f059ea06fc..9a947f0471a7 100644 --- a/docs/package.json +++ b/docs/package.json @@ -61,7 +61,7 @@ "@types/jasmine": "^6.0.0", "@types/node": "^22.14.1", "@types/shelljs": "0.10.0", - "firebase-tools": "15.14.0", + "firebase-tools": "15.15.0", "jasmine-core": "^6.0.0", "jasmine-spec-reporter": "7.0.0", "karma": "~6.4.4", diff --git a/package.json b/package.json index beb45efafd84..c629f3ad7bf5 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "@angular/forms": "catalog:", "@angular/platform-browser": "catalog:", "@types/google.maps": "^3.54.10", - "@types/youtube": "0.1.2", + "@types/youtube": "0.2.0", "date-fns": "^4.1.0", "luxon": "^3.7.2", "moment": "^2.29.1", @@ -105,7 +105,7 @@ "dgeni": "^0.4.14", "dgeni-packages": "^0.30.0", "esbuild": "^0.28.0", - "firebase-tools": "15.14.0", + "firebase-tools": "15.15.0", "fs-extra": "^11.0.0", "glob": "^13.0.0", "highlight.js": "^11.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ad23e2217162..ffc786c5d65e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -92,8 +92,8 @@ importers: specifier: ^3.54.10 version: 3.58.1 '@types/youtube': - specifier: 0.1.2 - version: 0.1.2 + specifier: 0.2.0 + version: 0.2.0 date-fns: specifier: ^4.1.0 version: 4.1.0 @@ -213,8 +213,8 @@ importers: specifier: ^0.28.0 version: 0.28.0 firebase-tools: - specifier: 15.14.0 - version: 15.14.0(@types/node@22.19.17)(bufferutil@4.1.0)(encoding@0.1.13)(typescript@6.0.2) + specifier: 15.15.0 + version: 15.15.0(@types/node@22.19.17)(bufferutil@4.1.0)(encoding@0.1.13)(typescript@6.0.2) fs-extra: specifier: ^11.0.0 version: 11.3.4 @@ -445,8 +445,8 @@ importers: specifier: 0.10.0 version: 0.10.0 firebase-tools: - specifier: 15.14.0 - version: 15.14.0(@types/node@22.19.17)(bufferutil@4.1.0)(encoding@0.1.13)(typescript@6.0.2) + specifier: 15.15.0 + version: 15.15.0(@types/node@22.19.17)(bufferutil@4.1.0)(encoding@0.1.13)(typescript@6.0.2) jasmine-core: specifier: ^6.0.0 version: 6.1.0 @@ -711,8 +711,8 @@ importers: src/youtube-player: dependencies: '@types/youtube': - specifier: 0.1.2 - version: 0.1.2 + specifier: 0.2.0 + version: 0.2.0 safevalues: specifier: ^1.2.0 version: 1.2.0 @@ -4193,8 +4193,8 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@types/youtube@0.1.2': - resolution: {integrity: sha512-n1/KqusanheyQRWHamNZv8K3kydlRqyEsZEKxMTeNWXQTC15lZprITCUt+WgL1vAIvKHCjPBIWz/gf/KQLsB3g==} + '@types/youtube@0.2.0': + resolution: {integrity: sha512-Y+y6RKuqhurm5yWfUt3eT2QdHZNl09+OT86I2yOKGfJzTZCaR5eSf6m7zIGnlUHiUuYm4i/hUTDJ++E53OVh0g==} '@vitejs/plugin-basic-ssl@2.3.0': resolution: {integrity: sha512-bdyo8rB3NnQbikdMpHaML9Z1OZPBu6fFOBo+OtxsBlvMJtysWskmBcnbIDhUqgC8tcxNv/a+BcV5U+2nQMm1OQ==} @@ -5912,8 +5912,8 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - firebase-tools@15.14.0: - resolution: {integrity: sha512-SdI+vxB5tLAgJxTxbRJ89tIv1am3Bc1RPW/TL1MIpNDhW0/naS3j28JyzjaHIy/8qBBkzGIzDakI9qFNlVcnLA==} + firebase-tools@15.15.0: + resolution: {integrity: sha512-WzIDUSe2PRHhsLA2uf1xe8CKTLm+Bbfum4fCduCmjzj4ei5WBszF24Kh9MVS1D3clQbyuIlQKbYhEZZTW+5DUw==} engines: {node: '>=20.0.0 || >=22.0.0 || >=24.0.0'} hasBin: true @@ -6591,9 +6591,6 @@ packages: resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} engines: {node: '>= 0.4'} - is-buffer@1.1.6: - resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} - is-buffer@2.0.5: resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} engines: {node: '>=4'} @@ -6708,10 +6705,6 @@ packages: resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} engines: {node: '>= 0.4'} - is-number@2.1.0: - resolution: {integrity: sha512-QUzH43Gfb9+5yckcrSA0VBDwEtDUchrk4F6tfJZQuNzDJbEDB9cZNzSfXGQ1jqmdDY/kl41lUOWM9syA8z8jlg==} - engines: {node: '>=0.10.0'} - is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -7107,10 +7100,6 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - kind-of@3.2.2: - resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} - engines: {node: '>=0.10.0'} - kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} @@ -7336,8 +7325,9 @@ packages: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} - lsofi@1.0.0: - resolution: {integrity: sha512-MKr9vM1MSm+TSKfI05IYxpKV1NCxpJaBLnELyIf784zYJ5KV9lGCE1EvpA2DtXDNM3fCuFeCwXUzim/fyQRi+A==} + lsofi@2.0.0: + resolution: {integrity: sha512-XTFlOBHeuXnUGuUQI0kBb4O4oQW7qCV7MRGQja1xNpxgrI/jptlly+/5126RiRold1zgyxY520qOZUZ31V0I2A==} + engines: {node: '>=20.0.0'} luxon@3.7.2: resolution: {integrity: sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==} @@ -14105,7 +14095,7 @@ snapshots: '@types/node': 22.19.17 optional: true - '@types/youtube@0.1.2': {} + '@types/youtube@0.2.0': {} '@vitejs/plugin-basic-ssl@2.3.0(vite@7.3.1(@types/node@22.19.17)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: @@ -16107,7 +16097,7 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 - firebase-tools@15.14.0(@types/node@22.19.17)(bufferutil@4.1.0)(encoding@0.1.13)(typescript@6.0.2): + firebase-tools@15.15.0(@types/node@22.19.17)(bufferutil@4.1.0)(encoding@0.1.13)(typescript@6.0.2): dependencies: '@apphosting/build': 0.1.7(@types/node@22.19.17)(typescript@6.0.2) '@apphosting/common': 0.0.8 @@ -16150,7 +16140,7 @@ snapshots: leven: 3.1.0 libsodium-wrappers: 0.7.16 lodash: 4.18.1 - lsofi: 1.0.0 + lsofi: 2.0.0 marked: 13.0.3 marked-terminal: 7.3.0(marked@13.0.3) mime: 2.6.0 @@ -17007,8 +16997,6 @@ snapshots: call-bound: 1.0.4 has-tostringtag: 1.0.2 - is-buffer@1.1.6: {} - is-buffer@2.0.5: {} is-callable@1.2.7: {} @@ -17100,10 +17088,6 @@ snapshots: call-bound: 1.0.4 has-tostringtag: 1.0.2 - is-number@2.1.0: - dependencies: - kind-of: 3.2.2 - is-number@7.0.0: {} is-obj@2.0.0: {} @@ -17542,10 +17526,6 @@ snapshots: dependencies: json-buffer: 3.0.1 - kind-of@3.2.2: - dependencies: - is-buffer: 1.1.6 - kind-of@6.0.3: {} kleur@3.0.3: {} @@ -17833,10 +17813,7 @@ snapshots: lru-cache@7.18.3: {} - lsofi@1.0.0: - dependencies: - is-number: 2.1.0 - through2: 2.0.5 + lsofi@2.0.0: {} luxon@3.7.2: {} diff --git a/src/youtube-player/package.json b/src/youtube-player/package.json index 0b93c4704694..edaebb229501 100644 --- a/src/youtube-player/package.json +++ b/src/youtube-player/package.json @@ -17,7 +17,7 @@ }, "homepage": "https://github.com/angular/components/tree/main/src/youtube-player#readme", "dependencies": { - "@types/youtube": "0.1.2", + "@types/youtube": "0.2.0", "tslib": "^2.3.0", "safevalues": "^1.2.0" }, From 42cf667f7f7b9bb0f2948df37ef7f56e46a9e911 Mon Sep 17 00:00:00 2001 From: Cheng-Hsuan Tsai Date: Thu, 23 Apr 2026 13:29:53 +0000 Subject: [PATCH 2/2] fixup! build: update all non-major dependencies --- goldens/youtube-player/index.api.md | 23 ++++++++++++----------- pkg-externals.bzl | 1 + src/youtube-player/BUILD.bazel | 1 + src/youtube-player/fake-youtube-player.ts | 2 ++ src/youtube-player/youtube-player.spec.ts | 17 +++++++++++++---- src/youtube-player/youtube-player.ts | 13 +++++++++++-- 6 files changed, 40 insertions(+), 17 deletions(-) diff --git a/goldens/youtube-player/index.api.md b/goldens/youtube-player/index.api.md index 23da012a13c9..df90fcbcbf13 100644 --- a/goldens/youtube-player/index.api.md +++ b/goldens/youtube-player/index.api.md @@ -14,6 +14,7 @@ import { Observable } from 'rxjs'; import { OnChanges } from '@angular/core'; import { OnDestroy } from '@angular/core'; import { SimpleChanges } from '@angular/core'; +import * as YT_2 from 'youtube'; // @public export type PlaceholderImageQuality = 'high' | 'standard' | 'low'; @@ -24,18 +25,18 @@ export const YOUTUBE_PLAYER_CONFIG: InjectionToken; // @public export class YouTubePlayer implements AfterViewInit, OnChanges, OnDestroy { constructor(); - readonly apiChange: Observable; + readonly apiChange: Observable; disableCookies: boolean; disablePlaceholder: boolean; endSeconds: number | undefined; - readonly error: Observable; + readonly error: Observable; getAvailablePlaybackRates(): number[]; - getAvailableQualityLevels(): YT.SuggestedVideoQuality[]; + getAvailableQualityLevels(): YT_2.SuggestedVideoQuality[]; getCurrentTime(): number; getDuration(): number; - getPlaybackQuality(): YT.SuggestedVideoQuality; + getPlaybackQuality(): YT_2.SuggestedVideoQuality; getPlaybackRate(): number; - getPlayerState(): YT.PlayerState | undefined; + getPlayerState(): YT_2.PlayerState | undefined; getVideoEmbedCode(): string; getVideoLoadedFraction(): number; getVideoUrl(): string; @@ -75,11 +76,11 @@ export class YouTubePlayer implements AfterViewInit, OnChanges, OnDestroy { pauseVideo(): void; placeholderButtonLabel: string; placeholderImageQuality: PlaceholderImageQuality; - readonly playbackQualityChange: Observable; - readonly playbackRateChange: Observable; - playerVars: YT.PlayerVars | undefined; + readonly playbackQualityChange: Observable; + readonly playbackRateChange: Observable; + playerVars: YT_2.PlayerVars | undefined; playVideo(): void; - readonly ready: Observable; + readonly ready: Observable; requestFullscreen(options?: FullscreenOptions): Promise; seekTo(seconds: number, allowSeekAhead: boolean): void; setPlaybackRate(playbackRate: number): void; @@ -87,9 +88,9 @@ export class YouTubePlayer implements AfterViewInit, OnChanges, OnDestroy { protected _shouldShowPlaceholder(): boolean; showBeforeIframeApiLoads: boolean; startSeconds: number | undefined; - readonly stateChange: Observable; + readonly stateChange: Observable; stopVideo(): void; - suggestedQuality: YT.SuggestedVideoQuality | undefined; + suggestedQuality: YT_2.SuggestedVideoQuality | undefined; unMute(): void; videoId: string | undefined; get width(): number; diff --git a/pkg-externals.bzl b/pkg-externals.bzl index 1729c610c585..1a1dbaafef5e 100644 --- a/pkg-externals.bzl +++ b/pkg-externals.bzl @@ -53,6 +53,7 @@ PKG_EXTERNALS = [ "selenium-webdriver", "safevalues", "safevalues/dom", + "youtube", ] # Creates externals for a given package and its entry-points. diff --git a/src/youtube-player/BUILD.bazel b/src/youtube-player/BUILD.bazel index 38061d0702e1..641ef328868b 100644 --- a/src/youtube-player/BUILD.bazel +++ b/src/youtube-player/BUILD.bazel @@ -79,6 +79,7 @@ ng_project( ":youtube-player", "//:node_modules/@angular/core", "//:node_modules/@angular/platform-browser", + "//:node_modules/@types/youtube", "//:node_modules/rxjs", ], ) diff --git a/src/youtube-player/fake-youtube-player.ts b/src/youtube-player/fake-youtube-player.ts index aed13d65412a..6f6bbbc54e41 100644 --- a/src/youtube-player/fake-youtube-player.ts +++ b/src/youtube-player/fake-youtube-player.ts @@ -6,6 +6,8 @@ * found in the LICENSE file at https://angular.dev/license */ +import type * as YT from 'youtube'; + // A re-creation of YT.PlayerState since enum values cannot be bound to the window object. const playerState = { UNSTARTED: -1, diff --git a/src/youtube-player/youtube-player.spec.ts b/src/youtube-player/youtube-player.spec.ts index 3e05aec13e6e..9b9be4867e33 100644 --- a/src/youtube-player/youtube-player.spec.ts +++ b/src/youtube-player/youtube-player.spec.ts @@ -15,6 +15,7 @@ import { YouTubePlayer, } from './youtube-player'; import {PlaceholderImageQuality} from './youtube-player-placeholder'; +import type * as YT from 'youtube'; declare var window: Window; @@ -200,7 +201,9 @@ describe('YoutubePlayer', () => { fixture.detectChanges(); events.onReady({target: playerSpy}); - const playerVars: YT.PlayerVars = {modestbranding: YT.ModestBranding.Modest}; + const playerVars: YT.PlayerVars = { + modestbranding: (window as Window & {YT?: typeof YT}).YT!.ModestBranding.Modest, + }; fixture.componentInstance.playerVars = playerVars; fixture.changeDetectorRef.markForCheck(); fixture.detectChanges(); @@ -389,7 +392,9 @@ describe('YoutubePlayer', () => { fixture.detectChanges(); testComponent.youtubePlayer.playVideo(); - expect(testComponent.youtubePlayer.getPlayerState()).toBe(YT.PlayerState.PLAYING); + expect(testComponent.youtubePlayer.getPlayerState()).toBe( + (window as Window & {YT?: typeof YT}).YT!.PlayerState.PLAYING, + ); events.onReady({target: playerSpy}); @@ -401,7 +406,9 @@ describe('YoutubePlayer', () => { fixture.detectChanges(); testComponent.youtubePlayer.pauseVideo(); - expect(testComponent.youtubePlayer.getPlayerState()).toBe(YT.PlayerState.PAUSED); + expect(testComponent.youtubePlayer.getPlayerState()).toBe( + (window as Window & {YT?: typeof YT}).YT!.PlayerState.PAUSED, + ); events.onReady({target: playerSpy}); @@ -413,7 +420,9 @@ describe('YoutubePlayer', () => { fixture.detectChanges(); testComponent.youtubePlayer.stopVideo(); - expect(testComponent.youtubePlayer.getPlayerState()).toBe(YT.PlayerState.CUED); + expect(testComponent.youtubePlayer.getPlayerState()).toBe( + (window as Window & {YT?: typeof YT}).YT!.PlayerState.CUED, + ); events.onReady({target: playerSpy}); diff --git a/src/youtube-player/youtube-player.ts b/src/youtube-player/youtube-player.ts index 985ec087e4ec..966112bbd884 100644 --- a/src/youtube-player/youtube-player.ts +++ b/src/youtube-player/youtube-player.ts @@ -9,6 +9,8 @@ // Workaround for: https://github.com/bazelbuild/rules_nodejs/issues/1265 /// +import type * as YT from 'youtube'; + import { ChangeDetectionStrategy, Component, @@ -576,7 +578,10 @@ export class YouTubePlayer implements AfterViewInit, OnChanges, OnDestroy { // A player can't be created if the API isn't loaded, // or there isn't a video or playlist to be played. - if (typeof YT === 'undefined' || (!this.videoId && !this.playerVars?.list)) { + if ( + typeof (window as Window & {YT?: typeof YT}).YT === 'undefined' || + (!this.videoId && !this.playerVars?.list) + ) { return; } @@ -597,7 +602,11 @@ export class YouTubePlayer implements AfterViewInit, OnChanges, OnDestroy { params.videoId = this.videoId; } const player = this._ngZone.runOutsideAngular( - () => new YT.Player(this.youtubeContainer.nativeElement, params), + () => + new (window as Window & {YT?: typeof YT}).YT!.Player( + this.youtubeContainer.nativeElement, + params, + ), ); const whenReady = (event: YT.PlayerEvent) => {