feat: add nestJS service loading to payments-next

Because:

* We want to be able to call server-side logic with our business classes
  directly from the nextJS app before rendering on the server.

This pull request:

* Adds a NestJS application context to the NextJS app that can be used
  to load services and call methods on them.
This commit is contained in:
Ben Bangert 2023-09-14 08:54:13 -07:00
Родитель 475bfcd713
Коммит e97fd383b8
Не найден ключ, соответствующий данной подписи
14 изменённых файлов: 321 добавлений и 94 удалений

Просмотреть файл

@ -0,0 +1,10 @@
{
"mysqlConfig": {
"database": "fxa",
"port": 3306,
"host": "127.0.0.1",
"user": "root",
"password": "",
"connectionLimitMax": 20
}
}

Просмотреть файл

@ -1,5 +1,8 @@
import { CartService } from '@fxa/payments/cart';
import { PurchaseDetails, TermsAndPrivacy } from '@fxa/payments/ui/server';
import { getCartData, getContentfulContent } from '../../lib/apiClient';
import { getApp } from '../../nestapp/app';
interface CheckoutParams {
offeringId: string;
@ -17,6 +20,8 @@ export default async function Index({ params }: { params: CheckoutParams }) {
const contentfulData = getContentfulContent(params.offeringId, locale);
const cartData = getCartData(cartId);
const [contentful, cart] = await Promise.all([contentfulData, cartData]);
/* eslint-disable @typescript-eslint/no-unused-vars */
const cartService = (await getApp()).get(CartService);
return (
<>

Просмотреть файл

@ -0,0 +1,26 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
import { dotenvLoader, fileLoader, TypedConfigModule } from 'nest-typed-config';
import { CartManager, CartService } from '@fxa/payments/cart';
import { AccountDatabaseFactory } from '@fxa/shared/db/mysql/account';
import { Module } from '@nestjs/common';
import { RootConfig } from './config';
@Module({
imports: [
TypedConfigModule.forRoot({
schema: RootConfig,
load: [
dotenvLoader({ separator: '__', ignoreEnvFile: true }),
fileLoader(),
],
}),
],
controllers: [],
providers: [AccountDatabaseFactory, CartService, CartManager],
})
export class AppModule {}

Просмотреть файл

@ -0,0 +1,17 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
import 'server-only';
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
let app: Awaited<ReturnType<typeof NestFactory.createApplicationContext>>;
export async function getApp() {
if (app) return app;
app = await NestFactory.createApplicationContext(AppModule);
return app;
}

Просмотреть файл

@ -0,0 +1,15 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
import { Type } from 'class-transformer';
import { IsDefined, ValidateNested } from 'class-validator';
import { MySQLConfig } from '@fxa/shared/db/mysql/core';
export class RootConfig {
@Type(() => MySQLConfig)
@ValidateNested()
@IsDefined()
public readonly mysqlConfig!: Partial<MySQLConfig>;
}

Просмотреть файл

@ -13,7 +13,21 @@ const nextConfig = {
svgr: false,
},
experimental: {
serverComponentsExternalPackages: ['knex'],
serverComponentsExternalPackages: [
'@fxa/shared/db/mysql/account',
'@fxa/shared/db/mysql/core',
'@fxa/payments/cart',
'@nestjs/core',
'@nestjs/common',
'class-transformer',
'class-validator',
'hot-shots',
'knex',
'kysely',
'mysql2',
'nest-typed-config',
'rxjs',
],
},
images: {
remotePatterns: [
@ -22,9 +36,9 @@ const nextConfig = {
hostname: 'accounts-static.cdn.mozilla.net',
port: '',
pathname: '/product-icons/**',
}
]
}
},
],
},
};
const plugins = [

Просмотреть файл

@ -4,3 +4,4 @@
export * from './lib/cart.types';
export * from './lib/cart.factories';
export * from './lib/cart.manager';
export * from './lib/cart.service';

Просмотреть файл

@ -3,10 +3,9 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
import { NotFoundError } from 'objection';
import { v4 as uuidv4 } from 'uuid';
import { Injectable } from '@nestjs/common';
import type { AccountDatabase } from '@fxa/shared/db/mysql/account';
import { CartState } from '@fxa/shared/db/mysql/account';
import { AccountDbProvider, CartState } from '@fxa/shared/db/mysql/account';
import { Inject, Injectable } from '@nestjs/common';
import {
CartInvalidStateForActionError,
@ -16,6 +15,12 @@ import {
CartNotUpdatedError,
CartVersionMismatchError,
} from './cart.error';
import {
createCart,
deleteCart,
fetchCartById,
updateCart,
} from './cart.repository';
import {
FinishCart,
FinishErrorCart,
@ -23,13 +28,8 @@ import {
SetupCart,
UpdateCart,
} from './cart.types';
import {
createCart,
deleteCart,
fetchCartById,
updateCart,
} from './cart.repository';
import type { AccountDatabase } from '@fxa/shared/db/mysql/account';
// For an action to be executed, the cart state needs to be in one of
// valid states listed in the array of CartStates below
const ACTIONS_VALID_STATE = {
@ -46,7 +46,7 @@ const isAction = (action: string): action is keyof typeof ACTIONS_VALID_STATE =>
@Injectable()
export class CartManager {
constructor(private db: AccountDatabase) {}
constructor(@Inject(AccountDbProvider) private db: AccountDatabase) {}
/**
* Ensure that the action being executed has a valid Cart state for

Просмотреть файл

@ -1,9 +1,11 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
export * from './lib/associated-types';
export * from './lib/keysley-types';
export { CartFactory } from './lib/factories';
export { setupAccountDatabase } from './lib/setup';
export { setupAccountDatabase, AccountDbProvider } from './lib/setup';
export { testAccountDatabaseSetup } from './lib/tests';
export type { AccountDatabase } from './lib/setup';
export { AccountDatabaseFactory } from './lib/account.provider';

Просмотреть файл

@ -0,0 +1,20 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
import { Provider } from '@nestjs/common';
import { MySQLConfig } from '../../../core/src';
import {
AccountDatabase,
AccountDbProvider,
setupAccountDatabase,
} from './setup';
export const AccountDatabaseFactory: Provider<AccountDatabase> = {
provide: AccountDbProvider,
useFactory: (mysqlConfig: MySQLConfig) => {
return setupAccountDatabase(mysqlConfig);
},
inject: [MySQLConfig],
};

Просмотреть файл

@ -7,6 +7,7 @@ import { createDialect, MySQLConfig } from '../../../core/src';
import { DB } from './keysley-types';
export type AccountDatabase = Kysely<DB>;
export const AccountDbProvider = Symbol('AccountDbProvider');
export async function setupAccountDatabase(opts: MySQLConfig) {
const dialect = await createDialect(opts);

Просмотреть файл

@ -1,22 +1,30 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
import { IsInt, IsOptional, validate } from 'class-validator';
import { IsInt, IsOptional, IsString, validate } from 'class-validator';
export class MySQLConfig {
@IsString()
database!: string;
@IsString()
host!: string;
password!: string;
@IsInt()
port!: number;
@IsString()
user!: string;
@IsString()
password!: string;
@IsOptional()
@IsInt()
connectionLimitMin?: number;
@IsOptional()
@IsInt()
connectionLimitMax?: number;
@IsOptional()

Просмотреть файл

@ -61,7 +61,8 @@
"lint-staged": "^13.2.0",
"mysql": "^2.18.1",
"mysql2": "^3.6.0",
"next": "13.4.1",
"nest-typed-config": "^2.8.0",
"next": "^13.4.19",
"node-fetch": "^2.6.7",
"nps": "^5.10.0",
"objection": "^3.0.1",

259
yarn.lock
Просмотреть файл

@ -8481,6 +8481,13 @@ __metadata:
languageName: node
linkType: hard
"@iarna/toml@npm:>= 2.2.5":
version: 3.0.0
resolution: "@iarna/toml@npm:3.0.0"
checksum: 03fb2b8d67df9631437d1bff56f0474520b3b7256cefdc129306ea3cd79910aad877637e58808e88e53104fa387c7132c337385bf5d4801b51580829d2c91041
languageName: node
linkType: hard
"@ioredis/commands@npm:^1.1.1":
version: 1.1.1
resolution: "@ioredis/commands@npm:1.1.1"
@ -9744,6 +9751,18 @@ __metadata:
languageName: node
linkType: hard
"@nestjs/axios@npm:>= 0.1.0":
version: 3.0.0
resolution: "@nestjs/axios@npm:3.0.0"
peerDependencies:
"@nestjs/common": ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0
axios: ^1.3.1
reflect-metadata: ^0.1.12
rxjs: ^6.0.0 || ^7.0.0
checksum: 0483ef5a10ed920eb84756472de59b5bd83d09f152de9b769f68a57bd9c2c922961545c50001ac3ea45584cf991aee355b8fef4fe249b849fded4f1df92244f6
languageName: node
linkType: hard
"@nestjs/cli@npm:^9.4.0":
version: 9.4.0
resolution: "@nestjs/cli@npm:9.4.0"
@ -10005,10 +10024,10 @@ __metadata:
languageName: node
linkType: hard
"@next/env@npm:13.4.1":
version: 13.4.1
resolution: "@next/env@npm:13.4.1"
checksum: 4736c9c6f75d80b16d3ca0ad3ddb3fcaa171f2144fccf516a67110e3bfcd9121d076e838faad46f815e41ee32e9be0ab68591359de06af13be6cbb860eda3639
"@next/env@npm:13.4.19":
version: 13.4.19
resolution: "@next/env@npm:13.4.19"
checksum: ace4f82890954ade0164fbe2b7ff988268d2b99b2e80caa6707c51fa4cbfaaa31e48fbbcecd4fd142af3503c544e1b4c91e8185d4af253c8fb46550e9e70ad7e
languageName: node
linkType: hard
@ -10021,65 +10040,65 @@ __metadata:
languageName: node
linkType: hard
"@next/swc-darwin-arm64@npm:13.4.1":
version: 13.4.1
resolution: "@next/swc-darwin-arm64@npm:13.4.1"
"@next/swc-darwin-arm64@npm:13.4.19":
version: 13.4.19
resolution: "@next/swc-darwin-arm64@npm:13.4.19"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
"@next/swc-darwin-x64@npm:13.4.1":
version: 13.4.1
resolution: "@next/swc-darwin-x64@npm:13.4.1"
"@next/swc-darwin-x64@npm:13.4.19":
version: 13.4.19
resolution: "@next/swc-darwin-x64@npm:13.4.19"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
"@next/swc-linux-arm64-gnu@npm:13.4.1":
version: 13.4.1
resolution: "@next/swc-linux-arm64-gnu@npm:13.4.1"
"@next/swc-linux-arm64-gnu@npm:13.4.19":
version: 13.4.19
resolution: "@next/swc-linux-arm64-gnu@npm:13.4.19"
conditions: os=linux & cpu=arm64 & libc=glibc
languageName: node
linkType: hard
"@next/swc-linux-arm64-musl@npm:13.4.1":
version: 13.4.1
resolution: "@next/swc-linux-arm64-musl@npm:13.4.1"
"@next/swc-linux-arm64-musl@npm:13.4.19":
version: 13.4.19
resolution: "@next/swc-linux-arm64-musl@npm:13.4.19"
conditions: os=linux & cpu=arm64 & libc=musl
languageName: node
linkType: hard
"@next/swc-linux-x64-gnu@npm:13.4.1":
version: 13.4.1
resolution: "@next/swc-linux-x64-gnu@npm:13.4.1"
"@next/swc-linux-x64-gnu@npm:13.4.19":
version: 13.4.19
resolution: "@next/swc-linux-x64-gnu@npm:13.4.19"
conditions: os=linux & cpu=x64 & libc=glibc
languageName: node
linkType: hard
"@next/swc-linux-x64-musl@npm:13.4.1":
version: 13.4.1
resolution: "@next/swc-linux-x64-musl@npm:13.4.1"
"@next/swc-linux-x64-musl@npm:13.4.19":
version: 13.4.19
resolution: "@next/swc-linux-x64-musl@npm:13.4.19"
conditions: os=linux & cpu=x64 & libc=musl
languageName: node
linkType: hard
"@next/swc-win32-arm64-msvc@npm:13.4.1":
version: 13.4.1
resolution: "@next/swc-win32-arm64-msvc@npm:13.4.1"
"@next/swc-win32-arm64-msvc@npm:13.4.19":
version: 13.4.19
resolution: "@next/swc-win32-arm64-msvc@npm:13.4.19"
conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
"@next/swc-win32-ia32-msvc@npm:13.4.1":
version: 13.4.1
resolution: "@next/swc-win32-ia32-msvc@npm:13.4.1"
"@next/swc-win32-ia32-msvc@npm:13.4.19":
version: 13.4.19
resolution: "@next/swc-win32-ia32-msvc@npm:13.4.19"
conditions: os=win32 & cpu=ia32
languageName: node
linkType: hard
"@next/swc-win32-x64-msvc@npm:13.4.1":
version: 13.4.1
resolution: "@next/swc-win32-x64-msvc@npm:13.4.1"
"@next/swc-win32-x64-msvc@npm:13.4.19":
version: 13.4.19
resolution: "@next/swc-win32-x64-msvc@npm:13.4.19"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
@ -26362,7 +26381,7 @@ __metadata:
languageName: node
linkType: hard
"class-transformer@npm:^0.5.1":
"class-transformer@npm:0.5.1, class-transformer@npm:^0.5.1":
version: 0.5.1
resolution: "class-transformer@npm:0.5.1"
checksum: f191c8b4cc4239990f5efdd790cabdd852c243ed66248e39f6616a349c910c6eed2d9fd1fbf7ee6ea89f69b4f1d0b493b27347fe0cd0ae26b47c3745a805b6d3
@ -27572,6 +27591,23 @@ __metadata:
languageName: node
linkType: hard
"cosmiconfig@npm:>= 8.0.0":
version: 8.3.6
resolution: "cosmiconfig@npm:8.3.6"
dependencies:
import-fresh: ^3.3.0
js-yaml: ^4.1.0
parse-json: ^5.2.0
path-type: ^4.0.0
peerDependencies:
typescript: ">=4.9.5"
peerDependenciesMeta:
typescript:
optional: true
checksum: dc339ebea427898c9e03bf01b56ba7afbac07fc7d2a2d5a15d6e9c14de98275a9565da949375aee1809591c152c0a3877bb86dbeaf74d5bd5aaa79955ad9e7a0
languageName: node
linkType: hard
"cosmiconfig@npm:^5.0.0":
version: 5.2.1
resolution: "cosmiconfig@npm:5.2.1"
@ -29576,7 +29612,7 @@ __metadata:
languageName: node
linkType: hard
"dotenv-expand@npm:10.0.0, dotenv-expand@npm:^10.0.0":
"dotenv-expand@npm:10.0.0, dotenv-expand@npm:>= 10.0.0, dotenv-expand@npm:^10.0.0":
version: 10.0.0
resolution: "dotenv-expand@npm:10.0.0"
checksum: 2a38b470efe0abcb1ac8490421a55e1d764dc9440fd220942bce40965074f3fb00b585f4346020cb0f0f219966ee6b4ee5023458b3e2953fe5b3214de1b314ee
@ -29597,6 +29633,13 @@ __metadata:
languageName: node
linkType: hard
"dotenv@npm:>= 16.0.0, dotenv@npm:^16.0.0":
version: 16.3.1
resolution: "dotenv@npm:16.3.1"
checksum: 15d75e7279018f4bafd0ee9706593dd14455ddb71b3bcba9c52574460b7ccaf67d5cf8b2c08a5af1a9da6db36c956a04a1192b101ee102a3e0cf8817bbcf3dfd
languageName: node
linkType: hard
"dotenv@npm:^10.0.0, dotenv@npm:~10.0.0":
version: 10.0.0
resolution: "dotenv@npm:10.0.0"
@ -29604,13 +29647,6 @@ __metadata:
languageName: node
linkType: hard
"dotenv@npm:^16.0.0":
version: 16.3.1
resolution: "dotenv@npm:16.3.1"
checksum: 15d75e7279018f4bafd0ee9706593dd14455ddb71b3bcba9c52574460b7ccaf67d5cf8b2c08a5af1a9da6db36c956a04a1192b101ee102a3e0cf8817bbcf3dfd
languageName: node
linkType: hard
"dset@npm:^3.1.2":
version: 3.1.2
resolution: "dset@npm:3.1.2"
@ -30091,7 +30127,7 @@ __metadata:
languageName: node
linkType: hard
"error-ex@npm:^1.2.0, error-ex@npm:^1.3.1":
"error-ex@npm:^1.2.0, error-ex@npm:^1.3.1, error-ex@npm:^1.3.2":
version: 1.3.2
resolution: "error-ex@npm:1.3.2"
dependencies:
@ -34791,7 +34827,8 @@ fsevents@~2.1.1:
mocha-multi: ^1.1.7
mysql: ^2.18.1
mysql2: ^3.6.0
next: 13.4.1
nest-typed-config: ^2.8.0
next: ^13.4.19
node-fetch: ^2.6.7
nps: ^5.10.0
nx: 16.6.0
@ -37899,7 +37936,7 @@ fsevents@~2.1.1:
languageName: node
linkType: hard
"import-fresh@npm:^3.0.0, import-fresh@npm:^3.1.0, import-fresh@npm:^3.2.1":
"import-fresh@npm:^3.0.0, import-fresh@npm:^3.1.0, import-fresh@npm:^3.2.1, import-fresh@npm:^3.3.0":
version: 3.3.0
resolution: "import-fresh@npm:3.3.0"
dependencies:
@ -41765,6 +41802,13 @@ fsevents@~2.1.1:
languageName: node
linkType: hard
"json-parse-even-better-errors@npm:^3.0.0":
version: 3.0.0
resolution: "json-parse-even-better-errors@npm:3.0.0"
checksum: f1970b5220c7fa23d888565510752c3d5e863f93668a202fcaa719739fa41485dfc6a1db212f702ebd3c873851cc067aebc2917e3f79763cae2fdb95046f38f3
languageName: node
linkType: hard
"json-schema-traverse@npm:^0.3.0":
version: 0.3.1
resolution: "json-schema-traverse@npm:0.3.1"
@ -42639,7 +42683,7 @@ fsevents@~2.1.1:
languageName: node
linkType: hard
"lines-and-columns@npm:~2.0.3":
"lines-and-columns@npm:^2.0.3, lines-and-columns@npm:~2.0.3":
version: 2.0.3
resolution: "lines-and-columns@npm:2.0.3"
checksum: 5955363dfd7d3d7c476d002eb47944dbe0310d57959e2112dce004c0dc76cecfd479cf8c098fd479ff344acdf04ee0e82b455462a26492231ac152f6c48d17a1
@ -42964,6 +43008,13 @@ fsevents@~2.1.1:
languageName: node
linkType: hard
"lodash.frompairs@npm:4.0.1":
version: 4.0.1
resolution: "lodash.frompairs@npm:4.0.1"
checksum: 8ff2d857f0764325dba5825ef8776cfc6992a504d75d668889bdd617c62fc3f179f1590042e127c98ed14d3fb14b71e66697b0fe8b10f73879c3a46e2d1c23d3
languageName: node
linkType: hard
"lodash.get@npm:^4.4.2":
version: 4.4.2
resolution: "lodash.get@npm:4.4.2"
@ -43097,7 +43148,7 @@ fsevents@~2.1.1:
languageName: node
linkType: hard
"lodash.set@npm:^4.3.2":
"lodash.set@npm:4.3.2, lodash.set@npm:^4.3.2":
version: 4.3.2
resolution: "lodash.set@npm:4.3.2"
checksum: a9122f49eef9f2d0fc9061a33d87f8e5b8c6b23d46e8b9e9ce1529d3588d79741bd1145a3abdfa3b13082703e65af27ff18d8a07bfc22b9be32f3fc36f763f70
@ -45777,6 +45828,47 @@ fsevents@~2.1.1:
languageName: node
linkType: hard
"nest-typed-config@npm:^2.8.0":
version: 2.8.0
resolution: "nest-typed-config@npm:2.8.0"
dependencies:
"@iarna/toml": ">= 2.2.5"
"@nestjs/axios": ">= 0.1.0"
chalk: 4.1.2
class-transformer: 0.5.1
class-validator: ^0.14.0
cosmiconfig: ">= 8.0.0"
debug: 4.3.4
dotenv: ">= 16.0.0"
dotenv-expand: ">= 10.0.0"
lodash.frompairs: 4.0.1
lodash.merge: 4.6.2
lodash.set: 4.3.2
parse-json: ">= 5.2.0"
yaml: ">= 1.10.2"
peerDependencies:
"@nestjs/common": ">= 6.10.0 < 11"
reflect-metadata: ^0.1.12
rxjs: ">= 6.0.0 < 8"
dependenciesMeta:
"@iarna/toml":
optional: true
"@nestjs/axios":
optional: true
cosmiconfig:
optional: true
dotenv:
optional: true
dotenv-expand:
optional: true
parse-json:
optional: true
yaml:
optional: true
checksum: e603fa8cfea52957fb6e937c9da98f6c8b359241403ed9871ddc69010aa1d123f73fb17809c9688194682d22e23a735185ab342cd4578e67656fba5350899919
languageName: node
linkType: hard
"netmask@npm:^2.0.1":
version: 2.0.2
resolution: "netmask@npm:2.0.2"
@ -45784,30 +45876,29 @@ fsevents@~2.1.1:
languageName: node
linkType: hard
"next@npm:13.4.1":
version: 13.4.1
resolution: "next@npm:13.4.1"
"next@npm:^13.4.19":
version: 13.4.19
resolution: "next@npm:13.4.19"
dependencies:
"@next/env": 13.4.1
"@next/swc-darwin-arm64": 13.4.1
"@next/swc-darwin-x64": 13.4.1
"@next/swc-linux-arm64-gnu": 13.4.1
"@next/swc-linux-arm64-musl": 13.4.1
"@next/swc-linux-x64-gnu": 13.4.1
"@next/swc-linux-x64-musl": 13.4.1
"@next/swc-win32-arm64-msvc": 13.4.1
"@next/swc-win32-ia32-msvc": 13.4.1
"@next/swc-win32-x64-msvc": 13.4.1
"@next/env": 13.4.19
"@next/swc-darwin-arm64": 13.4.19
"@next/swc-darwin-x64": 13.4.19
"@next/swc-linux-arm64-gnu": 13.4.19
"@next/swc-linux-arm64-musl": 13.4.19
"@next/swc-linux-x64-gnu": 13.4.19
"@next/swc-linux-x64-musl": 13.4.19
"@next/swc-win32-arm64-msvc": 13.4.19
"@next/swc-win32-ia32-msvc": 13.4.19
"@next/swc-win32-x64-msvc": 13.4.19
"@swc/helpers": 0.5.1
busboy: 1.6.0
caniuse-lite: ^1.0.30001406
postcss: 8.4.14
styled-jsx: 5.1.1
watchpack: 2.4.0
zod: 3.21.4
peerDependencies:
"@opentelemetry/api": ^1.1.0
fibers: ">= 3.1.0"
node-sass: ^6.0.0 || ^7.0.0
react: ^18.2.0
react-dom: ^18.2.0
sass: ^1.3.0
@ -45833,15 +45924,11 @@ fsevents@~2.1.1:
peerDependenciesMeta:
"@opentelemetry/api":
optional: true
fibers:
optional: true
node-sass:
optional: true
sass:
optional: true
bin:
next: dist/bin/next
checksum: 169e3fbbf713fad791a9b016c83d396bce628bb0ddf716c5fe50104a21cbc37af7df1586cbe05ae4ae6a090f4e1107211189cfbeeeab8345fe54e11cfefce87f
checksum: f4873dab8888ed4dae14d36d7cf8dc54cd042695cf7ee41d05e8757f463d11952a594eb066143cc2f7253ea1d41c6efe681cdc3ab8c2fa6eb0815fa5a94de3dc
languageName: node
linkType: hard
@ -47780,6 +47867,19 @@ fsevents@~2.1.1:
languageName: node
linkType: hard
"parse-json@npm:>= 5.2.0":
version: 7.1.0
resolution: "parse-json@npm:7.1.0"
dependencies:
"@babel/code-frame": ^7.21.4
error-ex: ^1.3.2
json-parse-even-better-errors: ^3.0.0
lines-and-columns: ^2.0.3
type-fest: ^3.8.0
checksum: bf9bc646e8b8cb9ae638988a303bf09866c13d2829c2ff75ee87c27631dac06d0d6e81913f8824c3c4586015bf3f0a6fee1dece168b37932d175ef0709e8860a
languageName: node
linkType: hard
"parse-json@npm:^2.2.0":
version: 2.2.0
resolution: "parse-json@npm:2.2.0"
@ -58025,7 +58125,7 @@ resolve@1.1.7:
languageName: node
linkType: hard
"type-fest@npm:^3.11.0":
"type-fest@npm:^3.11.0, type-fest@npm:^3.8.0":
version: 3.13.1
resolution: "type-fest@npm:3.13.1"
checksum: c06b0901d54391dc46de3802375f5579868949d71f93b425ce564e19a428a0d411ae8d8cb0e300d330071d86152c3ea86e744c3f2860a42a79585b6ec2fdae8e
@ -59377,6 +59477,16 @@ resolve@1.1.7:
languageName: node
linkType: hard
"watchpack@npm:2.4.0, watchpack@npm:^2.4.0":
version: 2.4.0
resolution: "watchpack@npm:2.4.0"
dependencies:
glob-to-regexp: ^0.4.1
graceful-fs: ^4.1.2
checksum: 23d4bc58634dbe13b86093e01c6a68d8096028b664ab7139d58f0c37d962d549a940e98f2f201cecdabd6f9c340338dc73ef8bf094a2249ef582f35183d1a131
languageName: node
linkType: hard
"watchpack@npm:^1.7.4":
version: 1.7.5
resolution: "watchpack@npm:1.7.5"
@ -59404,16 +59514,6 @@ resolve@1.1.7:
languageName: node
linkType: hard
"watchpack@npm:^2.4.0":
version: 2.4.0
resolution: "watchpack@npm:2.4.0"
dependencies:
glob-to-regexp: ^0.4.1
graceful-fs: ^4.1.2
checksum: 23d4bc58634dbe13b86093e01c6a68d8096028b664ab7139d58f0c37d962d549a940e98f2f201cecdabd6f9c340338dc73ef8bf094a2249ef582f35183d1a131
languageName: node
linkType: hard
"wbuf@npm:^1.1.0, wbuf@npm:^1.7.3":
version: 1.7.3
resolution: "wbuf@npm:1.7.3"
@ -60852,6 +60952,13 @@ resolve@1.1.7:
languageName: node
linkType: hard
"yaml@npm:>= 1.10.2":
version: 2.3.2
resolution: "yaml@npm:2.3.2"
checksum: acd80cc24df12c808c6dec8a0176d404ef9e6f08ad8786f746ecc9d8974968c53c6e8a67fdfabcc5f99f3dc59b6bb0994b95646ff03d18e9b1dcd59eccc02146
languageName: node
linkType: hard
"yaml@npm:^1.10.0, yaml@npm:^1.10.2, yaml@npm:^1.5.0, yaml@npm:^1.7.2":
version: 1.10.2
resolution: "yaml@npm:1.10.2"