From 6b5af54c00ef06c91db9f7a78177edb144dd0d54 Mon Sep 17 00:00:00 2001 From: enisdenjo Date: Thu, 2 Mar 2023 17:08:36 +0100 Subject: [PATCH] nestjs federation compatibility --- .../Dockerfile | 9 + .../docker-compose.yaml | 6 + .../package.json | 28 ++ .../schema.graphql | 83 ++++ .../src/app.module.ts | 29 ++ .../src/deprecated-products.resolver.ts | 65 +++ .../src/inventory.resolver.ts | 37 ++ .../src/main.ts | 11 + .../src/product-research.resolver.ts | 43 ++ .../src/products.resolver.ts | 105 +++++ .../src/users.resolver.ts | 21 + .../tsconfig.json | 16 + pnpm-lock.yaml | 379 +++++++++++++++++- 13 files changed, 815 insertions(+), 17 deletions(-) create mode 100644 examples/nestjs-apollo-federation-compatibility/Dockerfile create mode 100644 examples/nestjs-apollo-federation-compatibility/docker-compose.yaml create mode 100644 examples/nestjs-apollo-federation-compatibility/package.json create mode 100644 examples/nestjs-apollo-federation-compatibility/schema.graphql create mode 100644 examples/nestjs-apollo-federation-compatibility/src/app.module.ts create mode 100644 examples/nestjs-apollo-federation-compatibility/src/deprecated-products.resolver.ts create mode 100644 examples/nestjs-apollo-federation-compatibility/src/inventory.resolver.ts create mode 100644 examples/nestjs-apollo-federation-compatibility/src/main.ts create mode 100644 examples/nestjs-apollo-federation-compatibility/src/product-research.resolver.ts create mode 100644 examples/nestjs-apollo-federation-compatibility/src/products.resolver.ts create mode 100644 examples/nestjs-apollo-federation-compatibility/src/users.resolver.ts create mode 100644 examples/nestjs-apollo-federation-compatibility/tsconfig.json diff --git a/examples/nestjs-apollo-federation-compatibility/Dockerfile b/examples/nestjs-apollo-federation-compatibility/Dockerfile new file mode 100644 index 0000000000..25223a8b6d --- /dev/null +++ b/examples/nestjs-apollo-federation-compatibility/Dockerfile @@ -0,0 +1,9 @@ +FROM node:18 +WORKDIR /web +COPY package.json schema.graphql tsconfig.json tsconfig.build.json ./ +COPY src ./src +RUN npm install +RUN npm run build +EXPOSE 4001 +USER node +CMD node dist/main diff --git a/examples/nestjs-apollo-federation-compatibility/docker-compose.yaml b/examples/nestjs-apollo-federation-compatibility/docker-compose.yaml new file mode 100644 index 0000000000..6dce9b435d --- /dev/null +++ b/examples/nestjs-apollo-federation-compatibility/docker-compose.yaml @@ -0,0 +1,6 @@ +services: + products: + # must be relative to the root of the project + build: implementations/nestjs + ports: + - 4001:4001 diff --git a/examples/nestjs-apollo-federation-compatibility/package.json b/examples/nestjs-apollo-federation-compatibility/package.json new file mode 100644 index 0000000000..e133dcfd06 --- /dev/null +++ b/examples/nestjs-apollo-federation-compatibility/package.json @@ -0,0 +1,28 @@ +{ + "name": "examples-nestjs-apollo-federation-compatibility", + "version": "1.0.0", + "description": "Apollo Federation implemented with GraphQL Yoga running as a Nest.js driver.", + "private": true, + "scripts": { + "build": "nest build", + "prebuild": "rimraf dist", + "start": "nest start" + }, + "dependencies": { + "@apollo/subgraph": "^2.3.2", + "@envelop/apollo-federation": "^3.0.6", + "@envelop/core": "^3.0.6", + "@graphql-yoga/nestjs": "0.3.1", + "@nestjs/common": "^9.3.9", + "@nestjs/core": "^9.3.9", + "@nestjs/graphql": "^10.2.0", + "graphql": "^16.6.0", + "reflect-metadata": "^0.1.13", + "rxjs": "^7.8.0" + }, + "devDependencies": { + "@nestjs/cli": "^9.2.0", + "rimraf": "^4.1.2", + "typescript": "^4.9.5" + } +} diff --git a/examples/nestjs-apollo-federation-compatibility/schema.graphql b/examples/nestjs-apollo-federation-compatibility/schema.graphql new file mode 100644 index 0000000000..58457552e7 --- /dev/null +++ b/examples/nestjs-apollo-federation-compatibility/schema.graphql @@ -0,0 +1,83 @@ +extend schema + @link( + url: "https://specs.apollo.dev/federation/v2.3" + import: [ + "@composeDirective" + "@extends" + "@external" + "@key" + "@inaccessible" + "@interfaceObject" + "@override" + "@provides" + "@requires" + "@shareable" + "@tag" + ] + ) + @link(url: "https://myspecs.dev/myCustomDirective/v1.0", import: ["@custom"]) + @composeDirective(name: "@custom") + +directive @custom on OBJECT + +type Product + @custom + @key(fields: "id") + @key(fields: "sku package") + @key(fields: "sku variation { id }") { + id: ID! + sku: String + package: String + variation: ProductVariation + dimensions: ProductDimension + createdBy: User @provides(fields: "totalProductsCreated") + notes: String @tag(name: "internal") + research: [ProductResearch!]! +} + +type DeprecatedProduct @key(fields: "sku package") { + sku: String! + package: String! + reason: String + createdBy: User +} + +type ProductVariation { + id: ID! +} + +type ProductResearch @key(fields: "study { caseNumber }") { + study: CaseStudy! + outcome: String +} + +type CaseStudy { + caseNumber: ID! + description: String +} + +type ProductDimension @shareable { + size: String + weight: Float + unit: String @inaccessible +} + +extend type Query { + product(id: ID!): Product + deprecatedProduct(sku: String!, package: String!): DeprecatedProduct + @deprecated(reason: "Use product query instead") +} + +extend type User @key(fields: "email") { + averageProductsCreatedPerYear: Int + @requires(fields: "totalProductsCreated yearsOfEmployment") + email: ID! @external + name: String @override(from: "users") + totalProductsCreated: Int @external + yearsOfEmployment: Int! @external +} + +type Inventory @interfaceObject @key(fields: "id") { + id: ID! + deprecatedProducts: [DeprecatedProduct!]! +} diff --git a/examples/nestjs-apollo-federation-compatibility/src/app.module.ts b/examples/nestjs-apollo-federation-compatibility/src/app.module.ts new file mode 100644 index 0000000000..26dd33698d --- /dev/null +++ b/examples/nestjs-apollo-federation-compatibility/src/app.module.ts @@ -0,0 +1,29 @@ +import { + YogaFederationDriver, + YogaFederationDriverConfig, +} from '@graphql-yoga/nestjs' +import { Module } from '@nestjs/common' +import { GraphQLModule } from '@nestjs/graphql' +import { DeprecatedProductsResolver } from './deprecated-products.resolver' +import { InventoryResolver } from './inventory.resolver' +import { ProductResearchResolver } from './product-research.resolver' +import { ProductsResolver } from './products.resolver' +import { UsersResolver } from './users.resolver' + +@Module({ + imports: [ + GraphQLModule.forRoot({ + driver: YogaFederationDriver, + typePaths: ['**/*.graphql'], + path: '/', + }), + ], + providers: [ + UsersResolver, + ProductsResolver, + ProductResearchResolver, + DeprecatedProductsResolver, + InventoryResolver, + ], +}) +export class AppModule {} diff --git a/examples/nestjs-apollo-federation-compatibility/src/deprecated-products.resolver.ts b/examples/nestjs-apollo-federation-compatibility/src/deprecated-products.resolver.ts new file mode 100644 index 0000000000..4ee2c4b167 --- /dev/null +++ b/examples/nestjs-apollo-federation-compatibility/src/deprecated-products.resolver.ts @@ -0,0 +1,65 @@ +import { + Args, + Query, + ResolveField, + Resolver, + ResolveReference, +} from '@nestjs/graphql' + +interface User { + email: string + name: string + totalProductsCreated: number +} + +interface DeprecatedProduct { + sku: string + package: string + reason: string + createdBy: User +} + +const user = { + email: 'support@apollographql.com', + name: 'Jane Smith', + totalProductsCreated: 1337, +} + +const deprecatedProduct = { + sku: 'apollo-federation-v1', + package: '@apollo/federation-v1', + reason: 'Migrate to Federation V2', +} + +@Resolver('DeprecatedProduct') +export class DeprecatedProductsResolver { + constructor() {} + + @Query() + deprecatedProduct( + @Args('sku') sku: string, + @Args('package') packageName: string, + ) { + return sku === deprecatedProduct.sku && + packageName === deprecatedProduct.package + ? deprecatedProduct + : null + } + + @ResolveField('createdBy') + getCreatedBy() { + return user + } + + @ResolveReference() + resolveReference(reference: DeprecatedProduct) { + if ( + reference.sku === deprecatedProduct.sku && + reference.package === deprecatedProduct.package + ) { + return deprecatedProduct + } else { + return null + } + } +} diff --git a/examples/nestjs-apollo-federation-compatibility/src/inventory.resolver.ts b/examples/nestjs-apollo-federation-compatibility/src/inventory.resolver.ts new file mode 100644 index 0000000000..a92a945505 --- /dev/null +++ b/examples/nestjs-apollo-federation-compatibility/src/inventory.resolver.ts @@ -0,0 +1,37 @@ +import { Resolver, ResolveReference } from '@nestjs/graphql' + +interface DeprecatedProduct { + sku: string + package: string + reason: string +} + +interface Inventory { + id: string + deprecatedProducts: [DeprecatedProduct] +} + +const inventory = { + id: 'apollo-oss', + deprecatedProducts: [ + { + sku: 'apollo-federation-v1', + package: '@apollo/federation-v1', + reason: 'Migrate to Federation V2', + }, + ], +} + +@Resolver('Inventory') +export class InventoryResolver { + constructor() {} + + @ResolveReference() + resolveReference(reference: Inventory) { + if (reference.id == inventory.id) { + return inventory + } else { + return null + } + } +} diff --git a/examples/nestjs-apollo-federation-compatibility/src/main.ts b/examples/nestjs-apollo-federation-compatibility/src/main.ts new file mode 100644 index 0000000000..e938c08f5a --- /dev/null +++ b/examples/nestjs-apollo-federation-compatibility/src/main.ts @@ -0,0 +1,11 @@ +import { Logger } from '@nestjs/common' +import { NestFactory } from '@nestjs/core' +import { AppModule } from './app.module' + +async function bootstrap() { + const logger = new Logger() + const app = await NestFactory.create(AppModule, { logger }) + await app.listen(4001) + logger.log('Nest.js server listening on http://localhost:4001') +} +bootstrap() diff --git a/examples/nestjs-apollo-federation-compatibility/src/product-research.resolver.ts b/examples/nestjs-apollo-federation-compatibility/src/product-research.resolver.ts new file mode 100644 index 0000000000..b9bca265fd --- /dev/null +++ b/examples/nestjs-apollo-federation-compatibility/src/product-research.resolver.ts @@ -0,0 +1,43 @@ +import { ResolveField, Resolver, ResolveReference } from '@nestjs/graphql' + +interface CaseStudy { + caseNumber: string + description: string +} + +interface ProductResearch { + study: CaseStudy + outcome: string +} + +const productResearch = [ + { + study: { + caseNumber: '1234', + description: 'Federation Study', + }, + }, + { + study: { + caseNumber: '1235', + description: 'Studio Study', + }, + }, +] + +@Resolver('ProductResearch') +export class ProductResearchResolver { + constructor() {} + + @ResolveField() + getStudy() { + return productResearch[0].study + } + + @ResolveReference() + resolveReference(reference: ProductResearch) { + return productResearch.find( + (p) => reference.study.caseNumber === p.study.caseNumber, + ) + } +} diff --git a/examples/nestjs-apollo-federation-compatibility/src/products.resolver.ts b/examples/nestjs-apollo-federation-compatibility/src/products.resolver.ts new file mode 100644 index 0000000000..bb1d417924 --- /dev/null +++ b/examples/nestjs-apollo-federation-compatibility/src/products.resolver.ts @@ -0,0 +1,105 @@ +import { + Args, + Parent, + Query, + ResolveField, + Resolver, + ResolveReference, +} from '@nestjs/graphql' + +interface ProductVariation { + id: string +} + +interface Product { + id: string + sku: string + package: string + variation: ProductVariation +} + +const products: Product[] = [ + { + id: 'apollo-federation', + sku: 'federation', + package: '@apollo/federation', + variation: { + id: 'OSS', + }, + }, + { + id: 'apollo-studio', + sku: 'studio', + package: '', + variation: { + id: 'platform', + }, + }, +] + +@Resolver('Product') +export class ProductsResolver { + constructor() {} + + @Query() + product(@Args('id') id: string) { + return products.find((p) => p.id == id) + } + + @ResolveField('variation') + getVariation(@Parent() parent: Product) { + if (parent.variation) return { id: parent.variation.id } + return { id: products.find((p) => p.id == parent.id)?.variation.id } + } + + @ResolveField('dimensions') + getDimensions() { + return { size: 'small', weight: 1, unit: 'kg' } + } + + @ResolveField('createdBy') + getCreatedBy() { + return { email: 'support@apollographql.com', totalProductsCreated: 1337 } + } + + @ResolveField('research') + getResearch(@Parent() parent: Product) { + if (parent.id === 'apollo-federation') { + return [ + { + study: { + caseNumber: '1234', + description: 'Federation Study', + }, + }, + ] + } else if (parent.id === 'apollo-studio') { + return [ + { + study: { + caseNumber: '1235', + description: 'Studio Study', + }, + }, + ] + } else { + return [] + } + } + + @ResolveReference() + resolveReference(productRef: Product) { + if (productRef.id) { + return products.find((p) => p.id == productRef.id) + } else if (productRef.sku && productRef.package) { + return products.find( + (p) => p.sku == productRef.sku && p.package == productRef.package, + ) + } else { + return products.find( + (p) => + p.sku == productRef.sku && p.variation.id == productRef.variation.id, + ) + } + } +} diff --git a/examples/nestjs-apollo-federation-compatibility/src/users.resolver.ts b/examples/nestjs-apollo-federation-compatibility/src/users.resolver.ts new file mode 100644 index 0000000000..18260a8ee2 --- /dev/null +++ b/examples/nestjs-apollo-federation-compatibility/src/users.resolver.ts @@ -0,0 +1,21 @@ +import { ResolveField, Resolver } from '@nestjs/graphql' + +@Resolver('User') +export class UsersResolver { + constructor() {} + + @ResolveField('name') + getName() { + return 'Jane Smith' + } + + @ResolveField('averageProductsCreatedPerYear') + getAverageProductsCreatedPerYear({ + totalProductsCreated, + yearsOfEmployment, + }) { + return totalProductsCreated + ? Math.round(totalProductsCreated / yearsOfEmployment) + : null + } +} diff --git a/examples/nestjs-apollo-federation-compatibility/tsconfig.json b/examples/nestjs-apollo-federation-compatibility/tsconfig.json new file mode 100644 index 0000000000..93c3c5f8b6 --- /dev/null +++ b/examples/nestjs-apollo-federation-compatibility/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "module": "commonjs", + "target": "esnext", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "allowSyntheticDefaultImports": true, + "skipLibCheck": true + // "paths": { + // "@graphql-yoga/nestjs": ["../../src/index.ts"], + // "@graphql-yoga/nestjs/lib/federation": ["../../src/federation.ts"] + // } + }, + "include": ["src"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 542c47e722..0a5333c529 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -601,6 +601,37 @@ importers: ts-node-dev: 2.0.0_typescript@4.9.5 typescript: 4.9.5 + examples/nestjs-apollo-federation-compatibility: + specifiers: + '@apollo/subgraph': ^2.3.2 + '@envelop/apollo-federation': ^3.0.6 + '@envelop/core': 3.0.4 + '@graphql-yoga/nestjs': 0.3.1 + '@nestjs/cli': ^9.2.0 + '@nestjs/common': ^9.3.9 + '@nestjs/core': ^9.3.9 + '@nestjs/graphql': ^10.2.0 + graphql: 16.6.0 + reflect-metadata: ^0.1.13 + rimraf: ^4.1.2 + rxjs: ^7.8.0 + typescript: ^4.9.5 + dependencies: + '@apollo/subgraph': 2.3.2_graphql@16.6.0 + '@envelop/apollo-federation': 3.0.6_a6sekiasy2tqr6d5gj7n2wtjli + '@envelop/core': 3.0.4 + '@graphql-yoga/nestjs': link:../../packages/nestjs + '@nestjs/common': 9.3.9_mnr6j2del53muneqly5h4y27ai + '@nestjs/core': 9.3.9_jrq2rdgfp2sx67wmylmrqliwxe + '@nestjs/graphql': 10.2.0_zoc44tsnxoa5hgmkuj5xclgsm4 + graphql: 16.6.0 + reflect-metadata: 0.1.13 + rxjs: 7.8.0 + devDependencies: + '@nestjs/cli': 9.2.0 + rimraf: 4.1.3 + typescript: 4.9.5 + examples/netlify-edge: specifiers: esbuild: 0.17.10 @@ -1454,6 +1485,81 @@ packages: '@jridgewell/trace-mapping': 0.3.17 dev: true + /@angular-devkit/core/15.0.4_chokidar@3.5.3: + resolution: {integrity: sha512-4ITpRAevd652SxB+qNesIQ9qfbm7wT5UBU5kJOPPwGL77I21g8CQpkmV1n5VSacPvC9Zbz90feOWexf7w7JzcA==} + engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + peerDependencies: + chokidar: ^3.5.2 + peerDependenciesMeta: + chokidar: + optional: true + dependencies: + ajv: 8.11.0 + ajv-formats: 2.1.1 + chokidar: 3.5.3 + jsonc-parser: 3.2.0 + rxjs: 6.6.7 + source-map: 0.7.4 + dev: true + + /@angular-devkit/core/15.1.4_chokidar@3.5.3: + resolution: {integrity: sha512-PW5MRmd9DHJR4FaXchwQtj9pXnsghSTnwRvfZeCRNYgU2sv0DKyTV+YTSJB+kNXnoPNG1Je6amDEkiXecpspXg==} + engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + peerDependencies: + chokidar: ^3.5.2 + peerDependenciesMeta: + chokidar: + optional: true + dependencies: + ajv: 8.12.0 + ajv-formats: 2.1.1 + chokidar: 3.5.3 + jsonc-parser: 3.2.0 + rxjs: 6.6.7 + source-map: 0.7.4 + dev: true + + /@angular-devkit/schematics-cli/15.1.4_chokidar@3.5.3: + resolution: {integrity: sha512-qkM5Mfs28jZzNcJnSM6RlyrKkYvzhQmWFTxBXnn15k5T4EnSs1gI6O054Xn7jo/senfwNNt7h2Mlz2OmBLo6+w==} + engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + hasBin: true + dependencies: + '@angular-devkit/core': 15.1.4_chokidar@3.5.3 + '@angular-devkit/schematics': 15.1.4_chokidar@3.5.3 + ansi-colors: 4.1.3 + inquirer: 8.2.4 + symbol-observable: 4.0.0 + yargs-parser: 21.1.1 + transitivePeerDependencies: + - chokidar + dev: true + + /@angular-devkit/schematics/15.0.4_chokidar@3.5.3: + resolution: {integrity: sha512-/gXiLFS0+xFdx6wPoBpe/c6/K9I5edMpaASqPf4XheKtrsSvL+qTlIi3nsbfItzOiDXbaBmlbxGfkMHz/yg0Ig==} + engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + dependencies: + '@angular-devkit/core': 15.0.4_chokidar@3.5.3 + jsonc-parser: 3.2.0 + magic-string: 0.26.7 + ora: 5.4.1 + rxjs: 6.6.7 + transitivePeerDependencies: + - chokidar + dev: true + + /@angular-devkit/schematics/15.1.4_chokidar@3.5.3: + resolution: {integrity: sha512-jpddxo9Qd2yRQ1t9FLhAx5S+luz6HkyhDytq0LFKbxf9ikf1J4oy9riPBFl4pRmrNARWcHZ6GbD20/Ky8PjmXQ==} + engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + dependencies: + '@angular-devkit/core': 15.1.4_chokidar@3.5.3 + jsonc-parser: 3.2.0 + magic-string: 0.27.0 + ora: 5.4.1 + rxjs: 6.6.7 + transitivePeerDependencies: + - chokidar + dev: true + /@apollo/cache-control-types/1.0.2_graphql@16.6.0: resolution: {integrity: sha512-Por80co1eUm4ATsvjCOoS/tIR8PHxqVjsA6z76I6Vw0rFn4cgyVElQcmQDIZiYsy41k8e5xkrMRECkM2WR8pNw==} peerDependencies: @@ -4367,6 +4473,22 @@ packages: kuler: 2.0.0 dev: true + /@envelop/apollo-federation/3.0.6_a6sekiasy2tqr6d5gj7n2wtjli: + resolution: {integrity: sha512-F2lB58aTVJ7Lwp1OHSd/AGICYSxVuEIelTB5AkwpvMokSEJvOY4HoPLc2+IJ145b35w/glbKrT5F9t3dYofXFw==} + peerDependencies: + '@apollo/gateway': ^0.41.0 || ^0.42.0 || ^0.43.0 + '@envelop/core': ^3.0.6 + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@envelop/core': 3.0.4 + apollo-server-caching: 3.3.0 + apollo-server-types: 3.6.3_graphql@16.6.0 + graphql: 16.6.0 + tslib: 2.5.0 + transitivePeerDependencies: + - encoding + dev: false + /@envelop/apollo-federation/3.0.6_hpmkreirnehz4df5rqtry5bqvi: resolution: {integrity: sha512-F2lB58aTVJ7Lwp1OHSd/AGICYSxVuEIelTB5AkwpvMokSEJvOY4HoPLc2+IJ145b35w/glbKrT5F9t3dYofXFw==} peerDependencies: @@ -7221,7 +7343,6 @@ packages: /@lukeed/csprng/1.0.1: resolution: {integrity: sha512-uSvJdwQU5nK+Vdf6zxcWAY2A8r7uqe+gePwLWzJ+fsQehq18pc0I2hJKwypZ2aLM90+Er9u1xn4iLJPZ+xlL4g==} engines: {node: '>=8'} - dev: true /@lukeed/ms/2.0.1: resolution: {integrity: sha512-Xs/4RZltsAL7pkvaNStUQt7netTkyxrS0K+RILcVr3TRMS/ToOg4I6uNfhB9SlGsnWBym4U+EaXq0f0cEMNkHA==} @@ -7643,6 +7764,41 @@ packages: '@napi-rs/simple-git-win32-x64-msvc': 0.1.8 dev: false + /@nestjs/cli/9.2.0: + resolution: {integrity: sha512-6B1IjDcJbrOu55oMF67L1x5lDUOZ3Zs9l7bKCBH9D78965m8wq/2rlEWl/gJto5TABLQWy3hVvV/s8VzUlRMxw==} + engines: {node: '>= 12.9.0'} + hasBin: true + dependencies: + '@angular-devkit/core': 15.1.4_chokidar@3.5.3 + '@angular-devkit/schematics': 15.1.4_chokidar@3.5.3 + '@angular-devkit/schematics-cli': 15.1.4_chokidar@3.5.3 + '@nestjs/schematics': 9.0.4_n7i3t5jmyrdrkypb5pvfihcmg4 + chalk: 3.0.0 + chokidar: 3.5.3 + cli-table3: 0.6.3 + commander: 4.1.1 + fork-ts-checker-webpack-plugin: 7.3.0_hhrrucqyg4eysmfpujvov2ym5u + inquirer: 7.3.3 + node-emoji: 1.11.0 + ora: 5.4.1 + os-name: 4.0.1 + rimraf: 4.1.2 + shelljs: 0.8.5 + source-map-support: 0.5.21 + tree-kill: 1.2.2 + tsconfig-paths: 4.1.2 + tsconfig-paths-webpack-plugin: 4.0.0 + typescript: 4.9.5 + webpack: 5.75.0 + webpack-node-externals: 3.0.0 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + - vue-template-compiler + - webpack-cli + dev: true + /@nestjs/common/9.3.9_mnr6j2del53muneqly5h4y27ai: resolution: {integrity: sha512-GshTD9Xz+wD2em6NyzU4NXw5IXMUmapgDgD+iuj6XL0258hvDwODmNk37mBBnZvTZlqER+krvIUKnS34etqF/A==} peerDependencies: @@ -7664,7 +7820,36 @@ packages: rxjs: 7.8.0 tslib: 2.5.0 uid: 2.0.1 - dev: true + + /@nestjs/core/9.3.9_jrq2rdgfp2sx67wmylmrqliwxe: + resolution: {integrity: sha512-9g1A1G9eirLXEpH21rc6dKb08zHc2+adhCRz8NW39hbejcsxxD72FApJzt4QBQAKvu862ixt/tdpStnFT7lOSw==} + requiresBuild: true + peerDependencies: + '@nestjs/common': ^9.0.0 + '@nestjs/microservices': ^9.0.0 + '@nestjs/platform-express': ^9.0.0 + '@nestjs/websockets': ^9.0.0 + reflect-metadata: ^0.1.12 + rxjs: ^7.1.0 + peerDependenciesMeta: + '@nestjs/microservices': + optional: true + '@nestjs/platform-express': + optional: true + '@nestjs/websockets': + optional: true + dependencies: + '@nestjs/common': 9.3.9_mnr6j2del53muneqly5h4y27ai + '@nuxtjs/opencollective': 0.3.2 + fast-safe-stringify: 2.1.1 + iterare: 1.2.1 + path-to-regexp: 3.2.0 + reflect-metadata: 0.1.13 + rxjs: 7.8.0 + tslib: 2.5.0 + uid: 2.0.1 + transitivePeerDependencies: + - encoding /@nestjs/core/9.3.9_q6agyr4hwia55oswpsa7zjxcpm: resolution: {integrity: sha512-9g1A1G9eirLXEpH21rc6dKb08zHc2+adhCRz8NW39hbejcsxxD72FApJzt4QBQAKvu862ixt/tdpStnFT7lOSw==} @@ -7724,7 +7909,7 @@ packages: '@graphql-tools/schema': 9.0.16_graphql@16.6.0 '@graphql-tools/utils': 9.2.1_graphql@16.6.0 '@nestjs/common': 9.3.9_mnr6j2del53muneqly5h4y27ai - '@nestjs/core': 9.3.9_q6agyr4hwia55oswpsa7zjxcpm + '@nestjs/core': 9.3.9_jrq2rdgfp2sx67wmylmrqliwxe '@nestjs/mapped-types': 1.2.2_ilxajbd2e536h4oohar7aljlry chokidar: 3.5.3 fast-glob: 3.2.12 @@ -7741,7 +7926,6 @@ packages: transitivePeerDependencies: - bufferutil - utf-8-validate - dev: true /@nestjs/mapped-types/1.2.2_ilxajbd2e536h4oohar7aljlry: resolution: {integrity: sha512-3dHxLXs3M0GPiriAcCFFJQHoDFUuzTD5w6JDhE7TyfT89YKpe6tcCCIqOZWdXmt9AZjjK30RkHRSFF+QEnWFQg==} @@ -7758,7 +7942,6 @@ packages: dependencies: '@nestjs/common': 9.3.9_mnr6j2del53muneqly5h4y27ai reflect-metadata: 0.1.13 - dev: true /@nestjs/platform-express/9.3.9_77foi4w27ghy47yutmnzv7krjy: resolution: {integrity: sha512-f8ja2sYuDGj2QSMmjg05n3WF19wJG5yTiYxRi64nsu5GKL0qLM1LzxNemehkni/knExlvF2bDpbKKpna9nC1JA==} @@ -7803,6 +7986,21 @@ packages: - supports-color dev: true + /@nestjs/schematics/9.0.4_n7i3t5jmyrdrkypb5pvfihcmg4: + resolution: {integrity: sha512-egurCfAc4e5i1r2TmeAF0UrOKejFmT5oTdv4b7HcOVPupc3QGU7CbEfGleL3mkM5AjrixTQeMxU9bJ00ttAbGg==} + peerDependencies: + typescript: ^4.3.5 + dependencies: + '@angular-devkit/core': 15.0.4_chokidar@3.5.3 + '@angular-devkit/schematics': 15.0.4_chokidar@3.5.3 + fs-extra: 11.1.0 + jsonc-parser: 3.2.0 + pluralize: 8.0.0 + typescript: 4.9.5 + transitivePeerDependencies: + - chokidar + dev: true + /@nestjs/testing/9.3.9_yqmogfxzeu633isbftgaoi4ho4: resolution: {integrity: sha512-+mPvSVvSC2SAkYgZZv1mOI2xsdGc1pmq7/sem7iin/JDoFtlvoGSK+pfZHD3IV3EpYtq1v/8/5gi+UFH9yZnDg==} peerDependencies: @@ -8610,7 +8808,6 @@ packages: node-fetch: 2.6.9 transitivePeerDependencies: - encoding - dev: true /@octokit/auth-token/3.0.2: resolution: {integrity: sha512-pq7CwIMV1kmzkFTimdwjAINCXKTajZErLB4wMLYapR2nuB/Jpr66+05wOTZMSCBXP6n4DdDWT2W19Bm17vU69Q==} @@ -12875,7 +13072,6 @@ packages: /backo2/1.0.2: resolution: {integrity: sha512-zj6Z6M7Eq+PBZ7PQxl5NT665MvJdAkzp0f60nAJ+sLaSCBPMwVak5ZegFbgVCzFcCJTKFoMizvM5Ld7+JrRJHA==} - dev: true /backoff/2.5.0: resolution: {integrity: sha512-wC5ihrnUXmR2douXmXLCe5O3zg3GKIyvRi/hi58a/XyRxVI+3/yM0PYueQOZXPXQ9pxBislYkw+sF9b7C/RuMA==} @@ -13734,6 +13930,15 @@ packages: engines: {node: '>=6'} dev: true + /cli-table3/0.6.3: + resolution: {integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==} + engines: {node: 10.* || >= 12.*} + dependencies: + string-width: 4.2.3 + optionalDependencies: + '@colors/colors': 1.5.0 + dev: true + /cli-tableau/2.0.1: resolution: {integrity: sha512-he+WTicka9cl0Fg/y+YyxcN6/bfQ/1O3QmgxRXDhABKqLzvoOSM4fMzp39uMyLBulAFuywD2N7UaoQE7WaADxQ==} engines: {node: '>=8.10.0'} @@ -13822,7 +14027,7 @@ packages: /cloudevents/6.0.3: resolution: {integrity: sha512-ADEHAv2KShH/cDIy2GP+npFz3R6Fu/UCsUO/j4kYA9VqN4yhGdF+Zg6wmjeq6qlUvlaKdrVBwgZuH/w57IsyGQ==} dependencies: - ajv: 8.11.0 + ajv: 8.12.0 ajv-formats: 2.1.1 util: 0.12.5 uuid: 8.3.2 @@ -14106,7 +14311,6 @@ packages: /consola/2.15.3: resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==} - dev: true /console-control-strings/1.1.0: resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} @@ -17092,7 +17296,6 @@ packages: /eventemitter3/3.1.2: resolution: {integrity: sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==} - dev: true /eventemitter3/4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} @@ -17855,6 +18058,33 @@ packages: engines: {node: '>=0.10.0'} dev: true + /fork-ts-checker-webpack-plugin/7.3.0_hhrrucqyg4eysmfpujvov2ym5u: + resolution: {integrity: sha512-IN+XTzusCjR5VgntYFgxbxVx3WraPRnKehBFrf00cMSrtUuW9MsG9dhL6MWpY6MkjC3wVwoujfCDgZZCQwbswA==} + engines: {node: '>=12.13.0', yarn: '>=1.0.0'} + peerDependencies: + typescript: '>3.6.0' + vue-template-compiler: '*' + webpack: ^5.11.0 + peerDependenciesMeta: + vue-template-compiler: + optional: true + dependencies: + '@babel/code-frame': 7.18.6 + chalk: 4.1.2 + chokidar: 3.5.3 + cosmiconfig: 7.0.1 + deepmerge: 4.2.2 + fs-extra: 10.1.0 + memfs: 3.4.13 + minimatch: 3.1.2 + node-abort-controller: 3.0.1 + schema-utils: 3.1.1 + semver: 7.3.8 + tapable: 2.2.1 + typescript: 4.9.5 + webpack: 5.75.0 + dev: true + /form-data-encoder/1.7.2: resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==} dev: true @@ -17947,6 +18177,15 @@ packages: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} dev: true + /fs-extra/10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + dependencies: + graceful-fs: 4.2.10 + jsonfile: 6.1.0 + universalify: 2.0.0 + dev: true + /fs-extra/11.1.0: resolution: {integrity: sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==} engines: {node: '>=14.14'} @@ -18001,6 +18240,10 @@ packages: dependencies: minipass: 4.0.3 + /fs-monkey/1.0.3: + resolution: {integrity: sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==} + dev: true + /fs.realpath/1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -19283,6 +19526,25 @@ packages: through: 2.3.8 dev: true + /inquirer/7.3.3: + resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==} + engines: {node: '>=8.0.0'} + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + run-async: 2.4.1 + rxjs: 6.6.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + dev: true + /inquirer/8.2.4: resolution: {integrity: sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==} engines: {node: '>=12.0.0'} @@ -19317,6 +19579,11 @@ packages: engines: {node: '>=12'} dev: false + /interpret/1.4.0: + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} + engines: {node: '>= 0.10'} + dev: true + /intersection-observer/0.12.2: resolution: {integrity: sha512-7m1vEcPCxXYI8HqnL8CKI6siDyD+eIWSwgB3DZA+ZTogxk9I4CDnj4wilt9x/+/QbHI4YG5YZNmC6458/e9Ktg==} dev: false @@ -20012,7 +20279,6 @@ packages: /iterare/1.2.1: resolution: {integrity: sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==} engines: {node: '>=6'} - dev: true /javascript-natural-sort/0.7.1: resolution: {integrity: sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==} @@ -21490,6 +21756,11 @@ packages: engines: {node: '>=12'} dev: true + /macos-release/2.5.1: + resolution: {integrity: sha512-DXqXhEM7gW59OjZO8NIjBCz9AQ1BEMrfiOAl4AYByHCtVHRF4KoGNO8mqQeM8lRCtQe/UnJ4imO/d2HdkKsd+A==} + engines: {node: '>=6'} + dev: true + /macos-release/3.1.0: resolution: {integrity: sha512-/M/R0gCDgM+Cv1IuBG1XGdfTFnMEG6PZeT+KGWHO/OG+imqmaD9CH5vHBTycEM3+Kc4uG2Il+tFAuUWLqQOeUA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -21866,6 +22137,13 @@ packages: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} + /memfs/3.4.13: + resolution: {integrity: sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg==} + engines: {node: '>= 4.0.0'} + dependencies: + fs-monkey: 1.0.3 + dev: true + /memoize-one/5.2.1: resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} dev: false @@ -23239,6 +23517,12 @@ packages: engines: {node: '>=10.5.0'} dev: true + /node-emoji/1.11.0: + resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} + dependencies: + lodash: 4.17.21 + dev: true + /node-fetch/2.6.7: resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} engines: {node: 4.x || >=6.0.0} @@ -23735,6 +24019,14 @@ packages: wcwidth: 1.0.1 dev: true + /os-name/4.0.1: + resolution: {integrity: sha512-xl9MAoU97MH1Xt5K9ERft2YfCAoaO6msy1OBA0ozxEC0x0TmIoE6K3QvgJMMZA9yKGLmHXNY/YZoDbiGDj4zYw==} + engines: {node: '>=10'} + dependencies: + macos-release: 2.5.1 + windows-release: 4.0.0 + dev: true + /os-name/5.0.1: resolution: {integrity: sha512-0EQpaHUHq7olp2/YFUr+0vZi9tMpDTblHGz+Ch5RntKxiRXOAY0JOz1UlxhSjMSksHvkm13eD6elJj3M8Ht/kw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -24184,7 +24476,6 @@ packages: /path-to-regexp/3.2.0: resolution: {integrity: sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA==} - dev: true /path-to-regexp/6.2.1: resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==} @@ -25757,6 +26048,13 @@ packages: resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} engines: {node: '>= 12.13.0'} + /rechoir/0.6.2: + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} + engines: {node: '>= 0.10'} + dependencies: + resolve: 1.22.1 + dev: true + /redent/3.0.0: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} @@ -26182,6 +26480,18 @@ packages: hasBin: true dev: true + /rimraf/4.1.2: + resolution: {integrity: sha512-BlIbgFryTbw3Dz6hyoWFhKk+unCcHMSkZGrTFVAx2WmttdBSonsdtRlwiuTbDqTKr+UlXIUqJVS4QT5tUzGENQ==} + engines: {node: '>=14'} + hasBin: true + dev: true + + /rimraf/4.1.3: + resolution: {integrity: sha512-iyzalDLo3l5FZxxaIGUY7xI4Bf90Xt7pCipc1Mr7RsdU7H3538z+M0tlsUDrz0aHeGS9uNqiKHUJyTewwRP91Q==} + engines: {node: '>=14'} + hasBin: true + dev: true + /robust-predicates/3.0.1: resolution: {integrity: sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==} dev: false @@ -26254,7 +26564,6 @@ packages: resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==} dependencies: tslib: 2.5.0 - dev: true /sade/1.8.1: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} @@ -26550,6 +26859,16 @@ packages: /shell-quote/1.7.4: resolution: {integrity: sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==} + /shelljs/0.8.5: + resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} + engines: {node: '>=4'} + hasBin: true + dependencies: + glob: 7.2.3 + interpret: 1.4.0 + rechoir: 0.6.2 + dev: true + /shiki/0.14.1: resolution: {integrity: sha512-+Jz4nBkCBe0mEDqo1eKRcCdjRtrCjozmcbTUjbPTX7OOJfEbTZzlUWlZtGe3Gb5oV1/jnojhG//YZc3rs9zSEw==} dependencies: @@ -27293,7 +27612,6 @@ packages: transitivePeerDependencies: - bufferutil - utf-8-validate - dev: true /sucrase/3.28.0: resolution: {integrity: sha512-TK9600YInjuiIhVM3729rH4ZKPOsGeyXUwY+Ugu9eilNbdTFyHr6XcAGYbRVZPDgWj6tgI7bx95aaJjHnbffag==} @@ -27495,7 +27813,6 @@ packages: /symbol-observable/1.2.0: resolution: {integrity: sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==} engines: {node: '>=0.10.0'} - dev: true /symbol-observable/4.0.0: resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==} @@ -28415,6 +28732,15 @@ packages: resolution: {integrity: sha512-8beXMWTGEv1JfDjSxfNhe4uT5jKYdhmEUKzt4gZW9dmHlquq3b+IbEyA7vX9LjBfzHmvKnM4HiomAUCyaW2Pew==} dev: true + /tsconfig-paths-webpack-plugin/4.0.0: + resolution: {integrity: sha512-fw/7265mIWukrSHd0i+wSwx64kYUSAKPfxRDksjKIYTxSAp9W9/xcZVBF4Kl0eqQd5eBpAQ/oQrc5RyM/0c1GQ==} + engines: {node: '>=10.13.0'} + dependencies: + chalk: 4.1.2 + enhanced-resolve: 5.10.0 + tsconfig-paths: 4.1.2 + dev: true + /tsconfig-paths/3.14.1: resolution: {integrity: sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==} dependencies: @@ -28424,6 +28750,15 @@ packages: strip-bom: 3.0.0 dev: true + /tsconfig-paths/4.1.2: + resolution: {integrity: sha512-uhxiMgnXQp1IR622dUXI+9Ehnws7i/y6xvpZB9IbUVOPy0muvdvgXeZOn88UcGPiT98Vp3rJPTa8bFoalZ3Qhw==} + engines: {node: '>=6'} + dependencies: + json5: 2.2.3 + minimist: 1.2.7 + strip-bom: 3.0.0 + dev: true + /tsconfig/7.0.0: resolution: {integrity: sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==} dependencies: @@ -28653,7 +28988,6 @@ packages: engines: {node: '>=8'} dependencies: '@lukeed/csprng': 1.0.1 - dev: true /ulid/2.3.0: resolution: {integrity: sha512-keqHubrlpvT6G2wH0OEfSW4mquYRcbe/J8NMmveoQOjUqmo+hXtO+ORCpWhdbZ7k72UtY61BL7haGxW6enBnjw==} @@ -29340,6 +29674,11 @@ packages: - utf-8-validate dev: false + /webpack-node-externals/3.0.0: + resolution: {integrity: sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==} + engines: {node: '>=6'} + dev: true + /webpack-sources/3.2.3: resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} engines: {node: '>=10.13.0'} @@ -29495,6 +29834,13 @@ packages: string-width: 5.1.2 dev: true + /windows-release/4.0.0: + resolution: {integrity: sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==} + engines: {node: '>=10'} + dependencies: + execa: 4.1.0 + dev: true + /windows-release/5.0.1: resolution: {integrity: sha512-y1xFdFvdMiDXI3xiOhMbJwt1Y7dUxidha0CWPs1NgjZIjZANTcX7+7bMqNjuezhzb8s5JGEiBAbQjQQYYy7ulw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -29669,7 +30015,6 @@ packages: optional: true utf-8-validate: optional: true - dev: true /ws/8.12.1: resolution: {integrity: sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew==}