From 3fa19104cb9c4a38f5e815caa40443c152343ca7 Mon Sep 17 00:00:00 2001 From: tomast1337 Date: Sun, 11 Jan 2026 11:51:10 -0300 Subject: [PATCH 1/3] update dev script in package.json to include webpack --- apps/frontend/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/frontend/package.json b/apps/frontend/package.json index f6186544..09e6a894 100644 --- a/apps/frontend/package.json +++ b/apps/frontend/package.json @@ -3,7 +3,7 @@ "version": "0.1.0", "private": true, "scripts": { - "dev": "next dev", + "dev": "next dev --webpack", "build": "next build --webpack", "start": "next start", "lint": "eslint \"src/**/*.{ts,tsx}\" --fix", From c332eb5f0ed80d3173bf095ca9b8c09ae36cb2ec Mon Sep 17 00:00:00 2001 From: tomast1337 Date: Sun, 11 Jan 2026 14:31:04 -0300 Subject: [PATCH 2/3] refactor: update TypeScript configurations and improve type handling in auth and song modules --- apps/backend/src/auth/auth.service.spec.ts | 2 +- apps/backend/src/auth/auth.service.ts | 22 ++++++++++------- .../src/auth/strategies/JWT.strategy.spec.ts | 4 ++-- .../discord.strategy/discord.strategy.spec.ts | 2 +- .../auth/strategies/discord.strategy/index.ts | 2 +- .../auth/strategies/github.strategy.spec.ts | 2 +- .../src/auth/strategies/github.strategy.ts | 4 ++-- .../auth/strategies/google.strategy.spec.ts | 2 +- apps/backend/src/lib/GetRequestUser.spec.ts | 2 +- apps/backend/src/song/song.controller.spec.ts | 24 +++++++++---------- apps/backend/src/song/song.controller.ts | 4 +++- apps/backend/src/song/song.service.spec.ts | 2 -- apps/backend/src/types/thumbnail.d.ts | 14 +++++++++++ apps/backend/tsconfig.json | 2 ++ bun.lock | 1 - 15 files changed, 55 insertions(+), 34 deletions(-) create mode 100644 apps/backend/src/types/thumbnail.d.ts diff --git a/apps/backend/src/auth/auth.service.spec.ts b/apps/backend/src/auth/auth.service.spec.ts index 311fece9..2fb54343 100644 --- a/apps/backend/src/auth/auth.service.spec.ts +++ b/apps/backend/src/auth/auth.service.spec.ts @@ -192,7 +192,7 @@ describe('AuthService', () => { const refreshToken = 'refresh-token'; spyOn(jwtService, 'signAsync').mockImplementation( - (payload, options: any) => { + (payload: any, options: any) => { if (options.secret === 'test-jwt-secret') { return Promise.resolve(accessToken); } else if (options.secret === 'test-jwt-refresh-secret') { diff --git a/apps/backend/src/auth/auth.service.ts b/apps/backend/src/auth/auth.service.ts index aab47ca4..36072a8b 100644 --- a/apps/backend/src/auth/auth.service.ts +++ b/apps/backend/src/auth/auth.service.ts @@ -171,14 +171,20 @@ export class AuthService { public async createJwtPayload(payload: TokenPayload): Promise { const [accessToken, refreshToken] = await Promise.all([ - this.jwtService.signAsync(payload, { - secret: this.JWT_SECRET, - expiresIn: this.JWT_EXPIRES_IN, - }), - this.jwtService.signAsync(payload, { - secret: this.JWT_REFRESH_SECRET, - expiresIn: this.JWT_REFRESH_EXPIRES_IN, - }), + this.jwtService.signAsync( + payload as object, + { + secret: this.JWT_SECRET, + expiresIn: this.JWT_EXPIRES_IN, + } as any, + ), + this.jwtService.signAsync( + payload as object, + { + secret: this.JWT_REFRESH_SECRET, + expiresIn: this.JWT_REFRESH_EXPIRES_IN, + } as any, + ), ]); return { diff --git a/apps/backend/src/auth/strategies/JWT.strategy.spec.ts b/apps/backend/src/auth/strategies/JWT.strategy.spec.ts index 052cae9e..c17b4f3f 100644 --- a/apps/backend/src/auth/strategies/JWT.strategy.spec.ts +++ b/apps/backend/src/auth/strategies/JWT.strategy.spec.ts @@ -33,7 +33,7 @@ describe('JwtStrategy', () => { it('should throw an error if JWT_SECRET is not set', () => { jest.spyOn(configService, 'getOrThrow').mockReturnValue(null); - expect(() => new JwtStrategy(configService)).toThrowError( + expect(() => new JwtStrategy(configService)).toThrow( 'JwtStrategy requires a secret or key', ); }); @@ -84,7 +84,7 @@ describe('JwtStrategy', () => { const payload = { userId: 'test-user-id' }; - expect(() => jwtStrategy.validate(req, payload)).toThrowError( + expect(() => jwtStrategy.validate(req, payload)).toThrow( 'No refresh token', ); }); diff --git a/apps/backend/src/auth/strategies/discord.strategy/discord.strategy.spec.ts b/apps/backend/src/auth/strategies/discord.strategy/discord.strategy.spec.ts index 0dbc8608..588074d7 100644 --- a/apps/backend/src/auth/strategies/discord.strategy/discord.strategy.spec.ts +++ b/apps/backend/src/auth/strategies/discord.strategy/discord.strategy.spec.ts @@ -43,7 +43,7 @@ describe('DiscordStrategy', () => { it('should throw an error if Discord config is missing', () => { jest.spyOn(configService, 'getOrThrow').mockReturnValueOnce(null); - expect(() => new DiscordStrategy(configService)).toThrowError( + expect(() => new DiscordStrategy(configService)).toThrow( 'OAuth2Strategy requires a clientID option', ); }); diff --git a/apps/backend/src/auth/strategies/discord.strategy/index.ts b/apps/backend/src/auth/strategies/discord.strategy/index.ts index c31ea7e0..de2d6ebd 100644 --- a/apps/backend/src/auth/strategies/discord.strategy/index.ts +++ b/apps/backend/src/auth/strategies/discord.strategy/index.ts @@ -27,7 +27,7 @@ export class DiscordStrategy extends PassportStrategy(strategy, 'discord') { callbackUrl: `${SERVER_URL}/v1/auth/discord/callback`, scope: [DiscordPermissionScope.Email, DiscordPermissionScope.Identify], fetchScope: true, - prompt: 'none', + prompt: 'none' as const, }; super(config); diff --git a/apps/backend/src/auth/strategies/github.strategy.spec.ts b/apps/backend/src/auth/strategies/github.strategy.spec.ts index c8793e00..a13b099b 100644 --- a/apps/backend/src/auth/strategies/github.strategy.spec.ts +++ b/apps/backend/src/auth/strategies/github.strategy.spec.ts @@ -43,7 +43,7 @@ describe('GithubStrategy', () => { it('should throw an error if GitHub config is missing', () => { jest.spyOn(configService, 'getOrThrow').mockReturnValueOnce(null); - expect(() => new GithubStrategy(configService)).toThrowError( + expect(() => new GithubStrategy(configService)).toThrow( 'OAuth2Strategy requires a clientID option', ); }); diff --git a/apps/backend/src/auth/strategies/github.strategy.ts b/apps/backend/src/auth/strategies/github.strategy.ts index b7ea82ab..fbcc74d2 100644 --- a/apps/backend/src/auth/strategies/github.strategy.ts +++ b/apps/backend/src/auth/strategies/github.strategy.ts @@ -22,10 +22,10 @@ export class GithubStrategy extends PassportStrategy(strategy, 'github') { super({ clientID: GITHUB_CLIENT_ID, clientSecret: GITHUB_CLIENT_SECRET, - redirect_uri: `${SERVER_URL}/v1/auth/github/callback`, + callbackURL: `${SERVER_URL}/v1/auth/github/callback`, scope: 'user:read,user:email', state: false, - }); + } as any); } async validate(accessToken: string, refreshToken: string, profile: any) { diff --git a/apps/backend/src/auth/strategies/google.strategy.spec.ts b/apps/backend/src/auth/strategies/google.strategy.spec.ts index c1f1233e..ccee9e71 100644 --- a/apps/backend/src/auth/strategies/google.strategy.spec.ts +++ b/apps/backend/src/auth/strategies/google.strategy.spec.ts @@ -44,7 +44,7 @@ describe('GoogleStrategy', () => { it('should throw an error if Google config is missing', () => { jest.spyOn(configService, 'getOrThrow').mockReturnValueOnce(null); - expect(() => new GoogleStrategy(configService)).toThrowError( + expect(() => new GoogleStrategy(configService)).toThrow( 'OAuth2Strategy requires a clientID option', ); }); diff --git a/apps/backend/src/lib/GetRequestUser.spec.ts b/apps/backend/src/lib/GetRequestUser.spec.ts index ebc2e65f..e85694fd 100644 --- a/apps/backend/src/lib/GetRequestUser.spec.ts +++ b/apps/backend/src/lib/GetRequestUser.spec.ts @@ -28,7 +28,7 @@ describe('validateUser', () => { }); it('should throw an error if the user does not exist', () => { - expect(() => validateUser(null)).toThrowError( + expect(() => validateUser(null)).toThrow( new HttpException( { error: { diff --git a/apps/backend/src/song/song.controller.spec.ts b/apps/backend/src/song/song.controller.spec.ts index 51865a09..1a2fa4d6 100644 --- a/apps/backend/src/song/song.controller.spec.ts +++ b/apps/backend/src/song/song.controller.spec.ts @@ -249,7 +249,7 @@ describe('SongController', () => { const query: SongListQueryDTO = { page: 1, limit: 10 }; const songList: SongPreviewDto[] = Array(10) .fill(null) - .map((_, i) => ({ id: `song-${i}` } as SongPreviewDto)); + .map((_, i) => ({ id: `song-${i}` } as unknown as SongPreviewDto)); mockSongService.querySongs.mockResolvedValueOnce({ content: songList, @@ -271,7 +271,7 @@ describe('SongController', () => { const query: SongListQueryDTO = { page: 1, limit: 10 }; const songList: SongPreviewDto[] = Array(5) .fill(null) - .map((_, i) => ({ id: `song-${i}` } as SongPreviewDto)); + .map((_, i) => ({ id: `song-${i}` } as unknown as SongPreviewDto)); mockSongService.querySongs.mockResolvedValueOnce({ content: songList, @@ -291,7 +291,7 @@ describe('SongController', () => { const query: SongListQueryDTO = { page: 3, limit: 10 }; const songList: SongPreviewDto[] = Array(10) .fill(null) - .map((_, i) => ({ id: `song-${20 + i}` } as SongPreviewDto)); + .map((_, i) => ({ id: `song-${20 + i}` } as unknown as SongPreviewDto)); mockSongService.querySongs.mockResolvedValueOnce({ content: songList, @@ -312,7 +312,7 @@ describe('SongController', () => { const query: SongListQueryDTO = { page: 1, limit: 10, q: 'test search' }; const songList: SongPreviewDto[] = Array(8) .fill(null) - .map((_, i) => ({ id: `song-${i}` } as SongPreviewDto)); + .map((_, i) => ({ id: `song-${i}` } as unknown as SongPreviewDto)); mockSongService.querySongs.mockResolvedValueOnce({ content: songList, @@ -337,7 +337,7 @@ describe('SongController', () => { }; const songList: SongPreviewDto[] = Array(3) .fill(null) - .map((_, i) => ({ id: `rock-song-${i}` } as SongPreviewDto)); + .map((_, i) => ({ id: `rock-song-${i}` } as unknown as SongPreviewDto)); mockSongService.querySongs.mockResolvedValueOnce({ content: songList, @@ -421,7 +421,7 @@ describe('SongController', () => { const q = 'test query'; const songList: SongPreviewDto[] = Array(5) .fill(null) - .map((_, i) => ({ id: `song-${i}` } as SongPreviewDto)); + .map((_, i) => ({ id: `song-${i}` } as unknown as SongPreviewDto)); mockSongService.querySongs.mockResolvedValueOnce({ content: songList, @@ -484,7 +484,7 @@ describe('SongController', () => { const q = 'test search'; const songList: SongPreviewDto[] = Array(10) .fill(null) - .map((_, i) => ({ id: `song-${10 + i}` } as SongPreviewDto)); + .map((_, i) => ({ id: `song-${10 + i}` } as unknown as SongPreviewDto)); mockSongService.querySongs.mockResolvedValueOnce({ content: songList, @@ -507,7 +507,7 @@ describe('SongController', () => { const q = 'popular song'; const songList: SongPreviewDto[] = Array(50) .fill(null) - .map((_, i) => ({ id: `song-${i}` } as SongPreviewDto)); + .map((_, i) => ({ id: `song-${i}` } as unknown as SongPreviewDto)); mockSongService.querySongs.mockResolvedValueOnce({ content: songList, @@ -529,7 +529,7 @@ describe('SongController', () => { const q = 'search term'; const songList: SongPreviewDto[] = Array(3) .fill(null) - .map((_, i) => ({ id: `song-${40 + i}` } as SongPreviewDto)); + .map((_, i) => ({ id: `song-${40 + i}` } as unknown as SongPreviewDto)); mockSongService.querySongs.mockResolvedValueOnce({ content: songList, @@ -587,7 +587,7 @@ describe('SongController', () => { const q = 'test'; const songList: SongPreviewDto[] = Array(25) .fill(null) - .map((_, i) => ({ id: `song-${i}` } as SongPreviewDto)); + .map((_, i) => ({ id: `song-${i}` } as unknown as SongPreviewDto)); mockSongService.querySongs.mockResolvedValueOnce({ content: songList, @@ -614,7 +614,7 @@ describe('SongController', () => { const q = 'trending'; const songList: SongPreviewDto[] = Array(10) .fill(null) - .map((_, i) => ({ id: `song-${i}` } as SongPreviewDto)); + .map((_, i) => ({ id: `song-${i}` } as unknown as SongPreviewDto)); mockSongService.querySongs.mockResolvedValueOnce({ content: songList, @@ -635,7 +635,7 @@ describe('SongController', () => { const q = 'search'; const songList: SongPreviewDto[] = Array(20) .fill(null) - .map((_, i) => ({ id: `song-${40 + i}` } as SongPreviewDto)); + .map((_, i) => ({ id: `song-${40 + i}` } as unknown as SongPreviewDto)); mockSongService.querySongs.mockResolvedValueOnce({ content: songList, diff --git a/apps/backend/src/song/song.controller.ts b/apps/backend/src/song/song.controller.ts index d50f2a8f..2d311b8b 100644 --- a/apps/backend/src/song/song.controller.ts +++ b/apps/backend/src/song/song.controller.ts @@ -129,7 +129,9 @@ export class SongController { [SongSortType.NOTE_COUNT, 'stats.noteCount'], ]); - const sortField = sortFieldMap.get(query.sort) ?? 'createdAt'; + const sortField = query.sort + ? sortFieldMap.get(query.sort) ?? 'createdAt' + : 'createdAt'; const isDescending = query.order ? query.order === 'desc' : true; // Build PageQueryDTO with the sort field diff --git a/apps/backend/src/song/song.service.spec.ts b/apps/backend/src/song/song.service.spec.ts index 4a944f7f..4d0e7f21 100644 --- a/apps/backend/src/song/song.service.spec.ts +++ b/apps/backend/src/song/song.service.spec.ts @@ -1212,7 +1212,6 @@ describe('SongService', () => { }; jest.spyOn(songModel, 'aggregate').mockReturnValue(mockAggregate as any); - jest.spyOn(songModel, 'populate').mockResolvedValue(songList); const result = await service.getRandomSongs(count); @@ -1236,7 +1235,6 @@ describe('SongService', () => { }; jest.spyOn(songModel, 'aggregate').mockReturnValue(mockAggregate as any); - jest.spyOn(songModel, 'populate').mockResolvedValue(songList); const result = await service.getRandomSongs(count, category); diff --git a/apps/backend/src/types/thumbnail.d.ts b/apps/backend/src/types/thumbnail.d.ts new file mode 100644 index 00000000..172e7cde --- /dev/null +++ b/apps/backend/src/types/thumbnail.d.ts @@ -0,0 +1,14 @@ +declare module '@nbw/thumbnail/node' { + interface DrawParams { + notes: unknown; + startTick: number; + startLayer: number; + zoomLevel: number; + backgroundColor: string; + imgWidth: number; + imgHeight: number; + } + + export function drawToImage(params: DrawParams): Promise; + export function drawNotesOffscreen(params: DrawParams): Promise; +} diff --git a/apps/backend/tsconfig.json b/apps/backend/tsconfig.json index 400170a1..35b9a8d0 100644 --- a/apps/backend/tsconfig.json +++ b/apps/backend/tsconfig.json @@ -9,6 +9,8 @@ "allowSyntheticDefaultImports": true, "sourceMap": true, "emitDecoratorMetadata": true, + "moduleResolution": "node", + "noEmit": true, // Path mapping "baseUrl": ".", diff --git a/bun.lock b/bun.lock index b2cdbafe..d68c86ae 100644 --- a/bun.lock +++ b/bun.lock @@ -206,7 +206,6 @@ "name": "@nbw/song", "dependencies": { "@encode42/nbs.js": "^5.0.2", - "@nbw/database": "workspace:*", "@timohausmann/quadtree-ts": "^2.2.2", "jszip": "^3.10.1", "unidecode": "^1.1.0", From 57c969c2dc7ff2dc76ee351cbcbf1531bd59a1dd Mon Sep 17 00:00:00 2001 From: tomast1337 Date: Sun, 11 Jan 2026 14:46:06 -0300 Subject: [PATCH 3/3] chore(deps): update Next.js and related packages to version 16.0.10 --- bun.lock | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/bun.lock b/bun.lock index d68c86ae..c5cf1237 100644 --- a/bun.lock +++ b/bun.lock @@ -140,7 +140,7 @@ "i": "^0.3.7", "js-confetti": "^0.13.1", "lucide-react": "^0.556.0", - "next": "16.0.8", + "next": "16.0.10", "next-recaptcha-v3": "^1.5.3", "nextjs-toploader": "^3.9.17", "npm": "^11.7.0", @@ -720,27 +720,27 @@ "@nestjs/throttler": ["@nestjs/throttler@6.5.0", "", { "peerDependencies": { "@nestjs/common": "^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0", "@nestjs/core": "^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0", "reflect-metadata": "^0.1.13 || ^0.2.0" } }, "sha512-9j0ZRfH0QE1qyrj9JjIRDz5gQLPqq9yVC2nHsrosDVAfI5HHw08/aUAWx9DZLSdQf4HDkmhTTEGLrRFHENvchQ=="], - "@next/env": ["@next/env@16.0.8", "", {}, "sha512-xP4WrQZuj9MdmLJy3eWFHepo+R3vznsMSS8Dy3wdA7FKpjCiesQ6DxZvdGziQisj0tEtCgBKJzjcAc4yZOgLEQ=="], + "@next/env": ["@next/env@16.0.10", "", {}, "sha512-8tuaQkyDVgeONQ1MeT9Mkk8pQmZapMKFh5B+OrFUlG3rVmYTXcXlBetBgTurKXGaIZvkoqRT9JL5K3phXcgang=="], "@next/eslint-plugin-next": ["@next/eslint-plugin-next@16.0.8", "", { "dependencies": { "fast-glob": "3.3.1" } }, "sha512-1miV0qXDcLUaOdHridVPCh4i39ElRIAraseVIbb3BEqyZ5ol9sPyjTP/GNTPV5rBxqxjF6/vv5zQTVbhiNaLqA=="], "@next/mdx": ["@next/mdx@16.0.8", "", { "dependencies": { "source-map": "^0.7.0" }, "peerDependencies": { "@mdx-js/loader": ">=0.15.0", "@mdx-js/react": ">=0.15.0" }, "optionalPeers": ["@mdx-js/loader", "@mdx-js/react"] }, "sha512-GPv0ouRVp6T/qaOZj3LJiiIUFputrHvC/FVgyedbCaIsfbXmfu+Ky24KWWjf6uQSvDWQnQTk3UMSHqHb5UMYLw=="], - "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@16.0.8", "", { "os": "darwin", "cpu": "arm64" }, "sha512-yjVMvTQN21ZHOclQnhSFbjBTEizle+1uo4NV6L4rtS9WO3nfjaeJYw+H91G+nEf3Ef43TaEZvY5mPWfB/De7tA=="], + "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@16.0.10", "", { "os": "darwin", "cpu": "arm64" }, "sha512-4XgdKtdVsaflErz+B5XeG0T5PeXKDdruDf3CRpnhN+8UebNa5N2H58+3GDgpn/9GBurrQ1uWW768FfscwYkJRg=="], - "@next/swc-darwin-x64": ["@next/swc-darwin-x64@16.0.8", "", { "os": "darwin", "cpu": "x64" }, "sha512-+zu2N3QQ0ZOb6RyqQKfcu/pn0UPGmg+mUDqpAAEviAcEVEYgDckemOpiMRsBP3IsEKpcoKuNzekDcPczEeEIzA=="], + "@next/swc-darwin-x64": ["@next/swc-darwin-x64@16.0.10", "", { "os": "darwin", "cpu": "x64" }, "sha512-spbEObMvRKkQ3CkYVOME+ocPDFo5UqHb8EMTS78/0mQ+O1nqE8toHJVioZo4TvebATxgA8XMTHHrScPrn68OGw=="], - "@next/swc-linux-arm64-gnu": ["@next/swc-linux-arm64-gnu@16.0.8", "", { "os": "linux", "cpu": "arm64" }, "sha512-LConttk+BeD0e6RG0jGEP9GfvdaBVMYsLJ5aDDweKiJVVCu6sGvo+Ohz9nQhvj7EQDVVRJMCGhl19DmJwGr6bQ=="], + "@next/swc-linux-arm64-gnu": ["@next/swc-linux-arm64-gnu@16.0.10", "", { "os": "linux", "cpu": "arm64" }, "sha512-uQtWE3X0iGB8apTIskOMi2w/MKONrPOUCi5yLO+v3O8Mb5c7K4Q5KD1jvTpTF5gJKa3VH/ijKjKUq9O9UhwOYw=="], - "@next/swc-linux-arm64-musl": ["@next/swc-linux-arm64-musl@16.0.8", "", { "os": "linux", "cpu": "arm64" }, "sha512-JaXFAlqn8fJV+GhhA9lpg6da/NCN/v9ub98n3HoayoUSPOVdoxEEt86iT58jXqQCs/R3dv5ZnxGkW8aF4obMrQ=="], + "@next/swc-linux-arm64-musl": ["@next/swc-linux-arm64-musl@16.0.10", "", { "os": "linux", "cpu": "arm64" }, "sha512-llA+hiDTrYvyWI21Z0L1GiXwjQaanPVQQwru5peOgtooeJ8qx3tlqRV2P7uH2pKQaUfHxI/WVarvI5oYgGxaTw=="], - "@next/swc-linux-x64-gnu": ["@next/swc-linux-x64-gnu@16.0.8", "", { "os": "linux", "cpu": "x64" }, "sha512-O7M9it6HyNhsJp3HNAsJoHk5BUsfj7hRshfptpGcVsPZ1u0KQ/oVy8oxF7tlwxA5tR43VUP0yRmAGm1us514ng=="], + "@next/swc-linux-x64-gnu": ["@next/swc-linux-x64-gnu@16.0.10", "", { "os": "linux", "cpu": "x64" }, "sha512-AK2q5H0+a9nsXbeZ3FZdMtbtu9jxW4R/NgzZ6+lrTm3d6Zb7jYrWcgjcpM1k8uuqlSy4xIyPR2YiuUr+wXsavA=="], - "@next/swc-linux-x64-musl": ["@next/swc-linux-x64-musl@16.0.8", "", { "os": "linux", "cpu": "x64" }, "sha512-8+KClEC/GLI2dLYcrWwHu5JyC5cZYCFnccVIvmxpo6K+XQt4qzqM5L4coofNDZYkct/VCCyJWGbZZDsg6w6LFA=="], + "@next/swc-linux-x64-musl": ["@next/swc-linux-x64-musl@16.0.10", "", { "os": "linux", "cpu": "x64" }, "sha512-1TDG9PDKivNw5550S111gsO4RGennLVl9cipPhtkXIFVwo31YZ73nEbLjNC8qG3SgTz/QZyYyaFYMeY4BKZR/g=="], - "@next/swc-win32-arm64-msvc": ["@next/swc-win32-arm64-msvc@16.0.8", "", { "os": "win32", "cpu": "arm64" }, "sha512-rpQ/PgTEgH68SiXmhu/cJ2hk9aZ6YgFvspzQWe2I9HufY6g7V02DXRr/xrVqOaKm2lenBFPNQ+KAaeveywqV+A=="], + "@next/swc-win32-arm64-msvc": ["@next/swc-win32-arm64-msvc@16.0.10", "", { "os": "win32", "cpu": "arm64" }, "sha512-aEZIS4Hh32xdJQbHz121pyuVZniSNoqDVx1yIr2hy+ZwJGipeqnMZBJHyMxv2tiuAXGx6/xpTcQJ6btIiBjgmg=="], - "@next/swc-win32-x64-msvc": ["@next/swc-win32-x64-msvc@16.0.8", "", { "os": "win32", "cpu": "x64" }, "sha512-jWpWjWcMQu2iZz4pEK2IktcfR+OA9+cCG8zenyLpcW8rN4rzjfOzH4yj/b1FiEAZHKS+5Vq8+bZyHi+2yqHbFA=="], + "@next/swc-win32-x64-msvc": ["@next/swc-win32-x64-msvc@16.0.10", "", { "os": "win32", "cpu": "x64" }, "sha512-E+njfCoFLb01RAFEnGZn6ERoOqhK1Gl3Lfz1Kjnj0Ulfu7oJbuMyvBKNj/bw8XZnenHDASlygTjZICQW+rYW1Q=="], "@next/third-parties": ["@next/third-parties@16.0.8", "", { "dependencies": { "third-party-capital": "1.0.20" }, "peerDependencies": { "next": "^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0-beta.0", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0" } }, "sha512-F8TNI1GFm7ivZX6HBMDVsDklAXOHlACbtw7w3WFbDk2oFXdVgKZBfdK+ILhjTBK4ibIXzLMWO1Py3bgSETKHYQ=="], @@ -2474,7 +2474,7 @@ "neo-async": ["neo-async@2.6.2", "", {}, "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="], - "next": ["next@16.0.8", "", { "dependencies": { "@next/env": "16.0.8", "@swc/helpers": "0.5.15", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "16.0.8", "@next/swc-darwin-x64": "16.0.8", "@next/swc-linux-arm64-gnu": "16.0.8", "@next/swc-linux-arm64-musl": "16.0.8", "@next/swc-linux-x64-gnu": "16.0.8", "@next/swc-linux-x64-musl": "16.0.8", "@next/swc-win32-arm64-msvc": "16.0.8", "@next/swc-win32-x64-msvc": "16.0.8", "sharp": "^0.34.4" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.51.1", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-LmcZzG04JuzNXi48s5P+TnJBsTGPJunViNKV/iE4uM6kstjTQsQhvsAv+xF6MJxU2Pr26tl15eVbp0jQnsv6/g=="], + "next": ["next@16.0.10", "", { "dependencies": { "@next/env": "16.0.10", "@swc/helpers": "0.5.15", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "16.0.10", "@next/swc-darwin-x64": "16.0.10", "@next/swc-linux-arm64-gnu": "16.0.10", "@next/swc-linux-arm64-musl": "16.0.10", "@next/swc-linux-x64-gnu": "16.0.10", "@next/swc-linux-x64-musl": "16.0.10", "@next/swc-win32-arm64-msvc": "16.0.10", "@next/swc-win32-x64-msvc": "16.0.10", "sharp": "^0.34.4" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.51.1", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-RtWh5PUgI+vxlV3HdR+IfWA1UUHu0+Ram/JBO4vWB54cVPentCD0e+lxyAYEsDTqGGMg7qpjhKh6dc6aW7W/sA=="], "next-recaptcha-v3": ["next-recaptcha-v3@1.5.3", "", { "peerDependencies": { "next": "^13 || ^14 || ^15 || ^16", "react": "^18 || ^19" } }, "sha512-Osnt1gj0+Mor8rc42NCzpteQrrSbcxskGLOeWLU/T0xdXtJE90y/gFyp87/yN1goIMI+gXs5f0PMymMa29nuLA=="],