Add metadata query resolvers (#1929)

* Add metadata queries resolvers

* remove hello field

* fix linter
This commit is contained in:
Weiko
2023-10-09 22:54:14 +02:00
committed by GitHub
parent 34d3c452c1
commit ca492808cf
9 changed files with 290 additions and 26 deletions

View File

@@ -50,6 +50,9 @@
"@nestjs/typeorm": "^10.0.0",
"@paljs/plugins": "^5.3.3",
"@prisma/client": "4.13.0",
"@ptc-org/nestjs-query-core": "^4.2.0",
"@ptc-org/nestjs-query-graphql": "^4.2.0",
"@ptc-org/nestjs-query-typeorm": "^4.2.1-alpha.2",
"@sentry/node": "^7.66.0",
"@sentry/tracing": "^7.66.0",
"@types/lodash.camelcase": "^4.3.7",
@@ -62,10 +65,12 @@
"bytes": "^3.1.2",
"class-transformer": "^0.5.1",
"class-validator": "^0.14.0",
"dataloader": "^2.2.2",
"date-fns": "^2.30.0",
"file-type": "16.5.4",
"graphql": "^16.8.0",
"graphql": "16.8.0",
"graphql-fields": "^2.0.3",
"graphql-subscriptions": "2.0.0",
"graphql-type-json": "^0.3.2",
"graphql-upload": "^13.0.0",
"graphql-yoga": "^4.0.4",

View File

@@ -0,0 +1,60 @@
diff --git a/node_modules/@ptc-org/nestjs-query-graphql/src/types/connection/cursor/page-info.type.js b/node_modules/@ptc-org/nestjs-query-graphql/src/types/connection/cursor/page-info.type.js
index 00d836d..8eef442 100644
--- a/node_modules/@ptc-org/nestjs-query-graphql/src/types/connection/cursor/page-info.type.js
+++ b/node_modules/@ptc-org/nestjs-query-graphql/src/types/connection/cursor/page-info.type.js
@@ -39,7 +39,6 @@ const getOrCreatePageInfoType = () => {
tslib_1.__metadata("design:type", String)
], PageInfoTypeImpl.prototype, "endCursor", void 0);
PageInfoTypeImpl = tslib_1.__decorate([
- (0, graphql_1.Directive)('@shareable'),
(0, graphql_1.ObjectType)('PageInfo'),
tslib_1.__metadata("design:paramtypes", [Boolean, Boolean, String, String])
], PageInfoTypeImpl);
diff --git a/node_modules/@ptc-org/nestjs-query-graphql/src/types/connection/offset/offset-connection.type.js b/node_modules/@ptc-org/nestjs-query-graphql/src/types/connection/offset/offset-connection.type.js
index b47564f..d33f391 100644
--- a/node_modules/@ptc-org/nestjs-query-graphql/src/types/connection/offset/offset-connection.type.js
+++ b/node_modules/@ptc-org/nestjs-query-graphql/src/types/connection/offset/offset-connection.type.js
@@ -64,7 +64,6 @@ function getOrCreateOffsetConnectionType(TItemClass, opts) {
tslib_1.__metadata("design:paramtypes", [])
], AbstractConnection.prototype, "totalCount", null);
AbstractConnection = AbstractConnection_1 = tslib_1.__decorate([
- (0, graphql_1.Directive)('@shareable'),
(0, graphql_1.ObjectType)(connectionName),
tslib_1.__metadata("design:paramtypes", [Object, Array, Function])
], AbstractConnection);
diff --git a/node_modules/@ptc-org/nestjs-query-graphql/src/types/connection/offset/offset-page-info.type.js b/node_modules/@ptc-org/nestjs-query-graphql/src/types/connection/offset/offset-page-info.type.js
index 4803306..d459b16 100644
--- a/node_modules/@ptc-org/nestjs-query-graphql/src/types/connection/offset/offset-page-info.type.js
+++ b/node_modules/@ptc-org/nestjs-query-graphql/src/types/connection/offset/offset-page-info.type.js
@@ -25,7 +25,6 @@ const getOrCreateOffsetPageInfoType = () => {
tslib_1.__metadata("design:type", Boolean)
], PageInfoTypeImpl.prototype, "hasPreviousPage", void 0);
PageInfoTypeImpl = tslib_1.__decorate([
- (0, graphql_1.Directive)('@shareable'),
(0, graphql_1.ObjectType)('OffsetPageInfo'),
tslib_1.__metadata("design:paramtypes", [Boolean, Boolean])
], PageInfoTypeImpl);
diff --git a/node_modules/@ptc-org/nestjs-query-graphql/src/types/delete-many-reponse.type.js b/node_modules/@ptc-org/nestjs-query-graphql/src/types/delete-many-reponse.type.js
index 4de72de..b42f05f 100644
--- a/node_modules/@ptc-org/nestjs-query-graphql/src/types/delete-many-reponse.type.js
+++ b/node_modules/@ptc-org/nestjs-query-graphql/src/types/delete-many-reponse.type.js
@@ -16,7 +16,6 @@ const DeleteManyResponseType = () => {
tslib_1.__metadata("design:type", Number)
], DeleteManyResponseTypeImpl.prototype, "deletedCount", void 0);
DeleteManyResponseTypeImpl = tslib_1.__decorate([
- (0, graphql_1.Directive)('@shareable'),
(0, graphql_1.ObjectType)('DeleteManyResponse')
], DeleteManyResponseTypeImpl);
deleteManyResponseType = DeleteManyResponseTypeImpl;
diff --git a/node_modules/@ptc-org/nestjs-query-graphql/src/types/update-many-response.type.js b/node_modules/@ptc-org/nestjs-query-graphql/src/types/update-many-response.type.js
index c525d14..74be84f 100644
--- a/node_modules/@ptc-org/nestjs-query-graphql/src/types/update-many-response.type.js
+++ b/node_modules/@ptc-org/nestjs-query-graphql/src/types/update-many-response.type.js
@@ -16,7 +16,6 @@ const UpdateManyResponseType = () => {
tslib_1.__metadata("design:type", Number)
], UpdateManyResponseTypeImpl.prototype, "updatedCount", void 0);
UpdateManyResponseTypeImpl = tslib_1.__decorate([
- (0, graphql_1.Directive)('@shareable'),
(0, graphql_1.ObjectType)('UpdateManyResponse')
], UpdateManyResponseTypeImpl);
updateManyResponseType = UpdateManyResponseTypeImpl;

View File

@@ -1,3 +1,5 @@
import { Field, ID, ObjectType } from '@nestjs/graphql';
import {
Column,
CreateDateColumn,
@@ -7,6 +9,11 @@ import {
PrimaryGeneratedColumn,
UpdateDateColumn,
} from 'typeorm';
import {
Authorize,
IDField,
QueryOptions,
} from '@ptc-org/nestjs-query-graphql';
import { ObjectMetadata } from 'src/metadata/object-metadata/object-metadata.entity';
@@ -14,29 +21,47 @@ export type FieldMetadataTargetColumnMap = {
[key: string]: string;
};
@ObjectType('field')
@QueryOptions({
defaultResultSize: 10,
maxResultsSize: 100,
disableFilter: true,
disableSort: true,
})
@Authorize({
authorize: (context: any) => ({
workspaceId: { eq: context?.req?.user?.workspace?.id },
}),
})
@Entity('field_metadata')
export class FieldMetadata {
@IDField(() => ID)
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({ nullable: false, name: 'object_id' })
objectId: string;
@Field()
@Column({ nullable: false })
type: string;
@Field()
@Column({ nullable: false, name: 'display_name' })
displayName: string;
@Column({ nullable: false, name: 'target_column_name' })
targetColumnName: string;
@Field({ nullable: true })
@Column({ nullable: true, name: 'description', type: 'text' })
description: string;
@Field({ nullable: true })
@Column({ nullable: true, name: 'icon' })
icon: string;
@Field({ nullable: true })
@Column({ nullable: true, name: 'placeholder' })
placeholder: string;
@@ -46,12 +71,15 @@ export class FieldMetadata {
@Column('text', { nullable: true, array: true })
enums: string[];
@Field()
@Column({ default: false, name: 'is_custom' })
isCustom: boolean;
@Field()
@Column({ default: false, name: 'is_active' })
isActive: boolean;
@Field()
@Column({ nullable: true, default: true, name: 'is_nullable' })
isNullable: boolean;

View File

@@ -1,11 +1,36 @@
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import {
NestjsQueryGraphQLModule,
PagingStrategies,
} from '@ptc-org/nestjs-query-graphql';
import { NestjsQueryTypeOrmModule } from '@ptc-org/nestjs-query-typeorm';
import { JwtAuthGuard } from 'src/guards/jwt.auth.guard';
import { FieldMetadataService } from './field-metadata.service';
import { FieldMetadata } from './field-metadata.entity';
@Module({
imports: [TypeOrmModule.forFeature([FieldMetadata], 'metadata')],
imports: [
NestjsQueryGraphQLModule.forFeature({
imports: [
NestjsQueryTypeOrmModule.forFeature([FieldMetadata], 'metadata'),
],
resolvers: [
{
EntityClass: FieldMetadata,
DTOClass: FieldMetadata,
enableTotalCount: true,
pagingStrategy: PagingStrategies.CURSOR,
create: { disabled: true },
update: { disabled: true },
delete: { disabled: true },
guards: [JwtAuthGuard],
},
],
}),
],
providers: [FieldMetadataService],
exports: [FieldMetadataService],
})

View File

@@ -1,5 +1,5 @@
import { UseGuards } from '@nestjs/common';
import { Args, Mutation, Query, Resolver } from '@nestjs/graphql';
import { Args, Mutation, Resolver } from '@nestjs/graphql';
import { Workspace } from '@prisma/client';
@@ -15,11 +15,6 @@ import { CreateCustomFieldInput } from './args/create-custom-field.input';
export class MetadataResolver {
constructor(private readonly metadataService: MetadataService) {}
@Query(() => String)
async hello(): Promise<string> {
return 'Hello World!';
}
@Mutation(() => String)
async createCustomField(
@Args() createCustomFieldInput: CreateCustomFieldInput,

View File

@@ -1,3 +1,5 @@
import { ObjectType, ID, Field } from '@nestjs/graphql';
import {
Column,
CreateDateColumn,
@@ -6,11 +8,31 @@ import {
PrimaryGeneratedColumn,
UpdateDateColumn,
} from 'typeorm';
import {
Authorize,
CursorConnection,
IDField,
QueryOptions,
} from '@ptc-org/nestjs-query-graphql';
import { FieldMetadata } from 'src/metadata/field-metadata/field-metadata.entity';
@ObjectType('object')
@QueryOptions({
defaultResultSize: 10,
maxResultsSize: 100,
disableFilter: true,
disableSort: true,
})
@Authorize({
authorize: (context: any) => ({
workspaceId: { eq: context?.req?.user?.workspace?.id },
}),
})
@CursorConnection('fields', () => FieldMetadata)
@Entity('object_metadata')
export class ObjectMetadata {
@IDField(() => ID)
@PrimaryGeneratedColumn('uuid')
id: string;
@@ -18,27 +40,34 @@ export class ObjectMetadata {
dataSourceId: string;
// Deprecated
@Field()
@Column({ nullable: false, name: 'display_name' })
displayName: string;
@Field()
@Column({ nullable: true, name: 'display_name_singular' })
displayNameSingular: string;
@Field()
@Column({ nullable: true, name: 'display_name_plural' })
displayNamePlural: string;
@Field()
@Column({ nullable: true, name: 'description', type: 'text' })
description: string;
@Field()
@Column({ nullable: true, name: 'icon' })
icon: string;
@Column({ nullable: false, name: 'target_table_name' })
targetTableName: string;
@Field()
@Column({ default: false, name: 'is_custom' })
isCustom: boolean;
@Field()
@Column({ default: false, name: 'is_active' })
isActive: boolean;
@@ -48,9 +77,11 @@ export class ObjectMetadata {
@OneToMany(() => FieldMetadata, (field) => field.object)
fields: FieldMetadata[];
@Field()
@CreateDateColumn({ name: 'created_at' })
createdAt: Date;
@Field()
@UpdateDateColumn({ name: 'updated_at' })
updatedAt: Date;
}

View File

@@ -1,11 +1,36 @@
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import {
NestjsQueryGraphQLModule,
PagingStrategies,
} from '@ptc-org/nestjs-query-graphql';
import { NestjsQueryTypeOrmModule } from '@ptc-org/nestjs-query-typeorm';
import { JwtAuthGuard } from 'src/guards/jwt.auth.guard';
import { ObjectMetadataService } from './object-metadata.service';
import { ObjectMetadata } from './object-metadata.entity';
@Module({
imports: [TypeOrmModule.forFeature([ObjectMetadata], 'metadata')],
imports: [
NestjsQueryGraphQLModule.forFeature({
imports: [
NestjsQueryTypeOrmModule.forFeature([ObjectMetadata], 'metadata'),
],
resolvers: [
{
EntityClass: ObjectMetadata,
DTOClass: ObjectMetadata,
enableTotalCount: true,
pagingStrategy: PagingStrategies.CURSOR,
create: { disabled: true },
update: { disabled: true },
delete: { disabled: true },
guards: [JwtAuthGuard],
},
],
}),
],
providers: [ObjectMetadataService],
exports: [ObjectMetadataService],
})

View File

@@ -1,9 +1,5 @@
import {
GraphQLBoolean,
GraphQLNonNull,
GraphQLObjectType,
GraphQLString,
} from 'graphql';
import { ConnectionCursorScalar } from '@ptc-org/nestjs-query-graphql';
import { GraphQLBoolean, GraphQLNonNull, GraphQLObjectType } from 'graphql';
/**
* GraphQL PageInfo type.
@@ -11,8 +7,8 @@ import {
export const PageInfoType = new GraphQLObjectType({
name: 'PageInfo',
fields: {
startCursor: { type: GraphQLString },
endCursor: { type: GraphQLString },
startCursor: { type: ConnectionCursorScalar },
endCursor: { type: ConnectionCursorScalar },
hasNextPage: { type: new GraphQLNonNull(GraphQLBoolean) },
hasPreviousPage: { type: new GraphQLNonNull(GraphQLBoolean) },
},

View File

@@ -2206,6 +2206,43 @@
resolved "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz"
integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==
"@ptc-org/nestjs-query-core@4.2.0", "@ptc-org/nestjs-query-core@^4.2.0":
version "4.2.0"
resolved "https://registry.yarnpkg.com/@ptc-org/nestjs-query-core/-/nestjs-query-core-4.2.0.tgz#0724056c0de4846cf5f06833a72f0dfe127a7609"
integrity sha512-6IDHTmQI32jjOQj+yQp0zGZ/Y7E9IUH5nAO8XLNNZ1IN76cDNQcoYYrS06JopQ/LP9wJRusHQgD0cEVUMobh7g==
dependencies:
lodash.merge "^4.6.2"
reflect-metadata "^0.1.13"
tslib "^2.6.2"
"@ptc-org/nestjs-query-graphql@^4.2.0":
version "4.2.0"
resolved "https://registry.yarnpkg.com/@ptc-org/nestjs-query-graphql/-/nestjs-query-graphql-4.2.0.tgz#e4209569a87465b5af7a78733fbb494b19231c24"
integrity sha512-BjPoNjT5UjhpvSK0wJ/exeWpjzOTQsgQgOuYOuPzMx9pwf2zYL1GD+aH08vog3OkK5o/0g/pV3I6XTIBsxAN4g==
dependencies:
"@ptc-org/nestjs-query-core" "4.2.0"
dataloader "^2.2.2"
graphql-fields "^2.0.3"
lodash.merge "4.6.2"
lodash.omit "^4.5.0"
lower-case-first "^2.0.2"
pluralize "^8.0.0"
reflect-metadata "0.1.13"
tslib "^2.6.2"
upper-case-first "^2.0.2"
"@ptc-org/nestjs-query-typeorm@^4.2.1-alpha.2":
version "4.2.1-alpha.2"
resolved "https://registry.yarnpkg.com/@ptc-org/nestjs-query-typeorm/-/nestjs-query-typeorm-4.2.1-alpha.2.tgz#8cc44ce9e8322662e45cbb773f8d1c1fed6acec1"
integrity sha512-100zvXIfWhI7Nk3aURuk1xPmAYd/9RXrt/mFqXPhJDVOHtzi30r/42+vOIq8l38uIQNeT78eYRlV2C/glzRIBA==
dependencies:
camel-case "^4.1.2"
lodash.filter "^4.6.0"
lodash.merge "^4.6.2"
lodash.omit "^4.5.0"
tslib "^2.6.2"
uuid "^9.0.0"
"@repeaterjs/repeater@^3.0.4":
version "3.0.4"
resolved "https://registry.yarnpkg.com/@repeaterjs/repeater/-/repeater-3.0.4.tgz#a04d63f4d1bf5540a41b01a921c9a7fddc3bd1ca"
@@ -4195,6 +4232,14 @@ callsites@^3.0.0:
resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz"
integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
camel-case@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a"
integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==
dependencies:
pascal-case "^3.1.2"
tslib "^2.0.3"
camelcase@^5.3.1:
version "5.3.1"
resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz"
@@ -4608,6 +4653,11 @@ cssfilter@0.0.10:
resolved "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz"
integrity sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==
dataloader@^2.2.2:
version "2.2.2"
resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-2.2.2.tgz#216dc509b5abe39d43a9b9d97e6e5e473dfbe3e0"
integrity sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==
date-fns@*, date-fns@^2.29.3, date-fns@^2.30.0:
version "2.30.0"
resolved "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz"
@@ -5261,7 +5311,7 @@ fast-diff@^1.1.2:
fast-glob@3.2.12, fast-glob@^3.2.11, fast-glob@^3.2.9:
version "3.2.12"
resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80"
integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==
dependencies:
"@nodelib/fs.stat" "^2.0.2"
@@ -5792,6 +5842,13 @@ graphql-parse-resolve-info@^4.13.0:
debug "^4.1.1"
tslib "^2.0.1"
graphql-subscriptions@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/graphql-subscriptions/-/graphql-subscriptions-2.0.0.tgz#11ec181d475852d8aec879183e8e1eb94f2eb79a"
integrity sha512-s6k2b8mmt9gF9pEfkxsaO1lTxaySfKoEJzEfmwguBbQ//Oq23hIXCfR1hm4kdh5hnR20RdwB+s3BCb+0duHSZA==
dependencies:
iterall "^1.3.0"
graphql-tag@2.12.6, graphql-tag@^2.11.0, graphql-tag@^2.12.6:
version "2.12.6"
resolved "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz"
@@ -5836,7 +5893,7 @@ graphql-yoga@^4.0.4:
lru-cache "^10.0.0"
tslib "^2.5.2"
graphql@*, "graphql@0.13.1 - 16", graphql@16.8.0, graphql@^16.8.0:
graphql@*, "graphql@0.13.1 - 16", graphql@16.8.0:
version "16.8.0"
resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.0.tgz#374478b7f27b2dc6153c8f42c1b80157f79d79d4"
integrity sha512-0oKGaR+y3qcS5mCu1vb7KG+a89vjn06C7Ihq/dDl3jA+A8B3TKomvi3CiEcVLJQGalbu8F52LxkOym7U5sSfbg==
@@ -6356,7 +6413,7 @@ istanbul-reports@^3.1.3:
html-escaper "^2.0.0"
istanbul-lib-report "^3.0.0"
iterall@1.3.0, iterall@^1.2.1:
iterall@1.3.0, iterall@^1.2.1, iterall@^1.3.0:
version "1.3.0"
resolved "https://registry.npmjs.org/iterall/-/iterall-1.3.0.tgz"
integrity sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==
@@ -6931,6 +6988,11 @@ lodash.difference@^4.5.0:
resolved "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz"
integrity sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==
lodash.filter@^4.6.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace"
integrity sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ==
lodash.flatten@^4.4.0:
version "4.4.0"
resolved "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz"
@@ -6961,12 +7023,12 @@ lodash.memoize@4.x:
resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz"
integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==
lodash.merge@^4.6.2:
lodash.merge@4.6.2, lodash.merge@^4.6.2:
version "4.6.2"
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
lodash.omit@4.5.0:
lodash.omit@4.5.0, lodash.omit@^4.5.0:
version "4.5.0"
resolved "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz"
integrity sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg==
@@ -7009,6 +7071,20 @@ long@^4.0.0:
resolved "https://registry.npmjs.org/long/-/long-4.0.0.tgz"
integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==
lower-case-first@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/lower-case-first/-/lower-case-first-2.0.2.tgz#64c2324a2250bf7c37c5901e76a5b5309301160b"
integrity sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg==
dependencies:
tslib "^2.0.3"
lower-case@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28"
integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==
dependencies:
tslib "^2.0.3"
"lru-cache@7.10.1 - 7.13.1":
version "7.13.1"
resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.1.tgz"
@@ -7306,6 +7382,14 @@ new-github-issue-url@0.2.1:
resolved "https://registry.npmjs.org/new-github-issue-url/-/new-github-issue-url-0.2.1.tgz"
integrity sha512-md4cGoxuT4T4d/HDOXbrUHkTKrp/vp+m3aOA7XXVYwNsUNMK49g3SQicTSeV5GIz/5QVGAeYRAOlyp9OvlgsYA==
no-case@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d"
integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==
dependencies:
lower-case "^2.0.2"
tslib "^2.0.3"
node-abi@^3.3.0:
version "3.45.0"
resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.45.0.tgz#f568f163a3bfca5aacfce1fbeee1fa2cc98441f5"
@@ -7635,6 +7719,14 @@ parseurl@^1.3.3, parseurl@~1.3.3:
resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz"
integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
pascal-case@^3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb"
integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==
dependencies:
no-case "^3.0.4"
tslib "^2.0.3"
passport-google-oauth20@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/passport-google-oauth20/-/passport-google-oauth20-2.0.0.tgz"
@@ -8156,7 +8248,7 @@ rechoir@^0.6.2:
dependencies:
resolve "^1.1.6"
reflect-metadata@^0.1.13:
reflect-metadata@0.1.13, reflect-metadata@^0.1.13:
version "0.1.13"
resolved "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz"
integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==
@@ -9097,7 +9189,7 @@ tslib@^1.11.1, tslib@^1.8.1:
resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
"tslib@^2.4.1 || ^1.9.3", tslib@^2.5.2:
tslib@^2.0.3, "tslib@^2.4.1 || ^1.9.3", tslib@^2.5.2, tslib@^2.6.2:
version "2.6.2"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
@@ -9283,6 +9375,13 @@ update-browserslist-db@^1.0.11:
escalade "^3.1.1"
picocolors "^1.0.0"
upper-case-first@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-2.0.2.tgz#992c3273f882abd19d1e02894cc147117f844324"
integrity sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==
dependencies:
tslib "^2.0.3"
uri-js@^4.2.2:
version "4.4.1"
resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz"