diff --git a/backend/src/managers/auth/guest.service.ts b/backend/src/managers/auth/guest.service.ts index 6a31fc0..12ca7f1 100644 --- a/backend/src/managers/auth/guest.service.ts +++ b/backend/src/managers/auth/guest.service.ts @@ -5,7 +5,6 @@ import { EUserBackend } from '../../models/entities/user.entity'; export class GuestService { public createGuest(): EUserBackend { const guest = new EUserBackend(); - guest.id = -1; guest.roles = ['guest']; guest.username = 'guest'; diff --git a/frontend/package.json b/frontend/package.json index c723a19..a7057e1 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -13,16 +13,16 @@ "watch": "ng build --watch --configuration development" }, "dependencies": { - "@angular/animations": "^14.0.0-next.5", - "@angular/cdk": "^14.0.0-next.5", - "@angular/common": "^14.0.0-next.5", - "@angular/compiler": "^14.0.0-next.5", - "@angular/core": "^14.0.0-next.5", - "@angular/forms": "^14.0.0-next.5", - "@angular/material": "^14.0.0-next.5", - "@angular/platform-browser": "^14.0.0-next.5", - "@angular/platform-browser-dynamic": "^14.0.0-next.5", - "@angular/router": "^14.0.0-next.5", + "@angular/animations": "^14.0.0-next.7", + "@angular/cdk": "^14.0.0-next.7", + "@angular/common": "^14.0.0-next.7", + "@angular/compiler": "^14.0.0-next.7", + "@angular/core": "^14.0.0-next.7", + "@angular/forms": "^14.0.0-next.7", + "@angular/material": "^14.0.0-next.7", + "@angular/platform-browser": "^14.0.0-next.7", + "@angular/platform-browser-dynamic": "^14.0.0-next.7", + "@angular/router": "^14.0.0-next.7", "bootstrap": "^5.1.3", "class-transformer": "^0.5.1", "class-validator": "^0.13.2", @@ -37,10 +37,10 @@ }, "devDependencies": { "@angular-devkit/build-angular": "14.0.0-next.4", - "@angular/cli": "^14.0.0-next.4", - "@angular/compiler-cli": "^14.0.0-next.5", + "@angular/cli": "^14.0.0-next.6", + "@angular/compiler-cli": "^14.0.0-next.7", "@types/jasmine": "~4.0.0", - "@types/node": "^17.0.21", + "@types/node": "^17.0.22", "@types/validator": "^13.7.1", "jasmine-core": "~4.0.1", "karma": "~6.3.17", diff --git a/frontend/src/app/services/api/key.service.ts b/frontend/src/app/services/api/key.service.ts index b220332..50d0b15 100644 --- a/frontend/src/app/services/api/key.service.ts +++ b/frontend/src/app/services/api/key.service.ts @@ -26,11 +26,11 @@ export class KeyService { public set(key: string) { this.key = key; - setTimeout(this.store.bind(this), 0); + this.store(); } public clear() { this.key = null; - setTimeout(this.store.bind(this), 0); + this.store(); } } diff --git a/frontend/src/app/services/api/user.service.ts b/frontend/src/app/services/api/user.service.ts index 93f14bc..7a7bea5 100644 --- a/frontend/src/app/services/api/user.service.ts +++ b/frontend/src/app/services/api/user.service.ts @@ -83,6 +83,7 @@ export class UserService { } public async logout(): AsyncFailable { + console.log('logging out'); const value = this.userSubject.getValue(); this.key.clear(); this.userSubject.next(null); diff --git a/package.json b/package.json index d91339e..7c3a4ae 100644 --- a/package.json +++ b/package.json @@ -14,5 +14,8 @@ }, "resolutions": { "minimist": "npm:minimist-lite" + }, + "dependencies": { + "minimist": "npm:minimist-lite" } } diff --git a/shared/src/dto/api/user.dto.ts b/shared/src/dto/api/user.dto.ts index 326b82f..c2ca229 100644 --- a/shared/src/dto/api/user.dto.ts +++ b/shared/src/dto/api/user.dto.ts @@ -4,13 +4,13 @@ import { IsEnum, IsString, ValidateNested } from 'class-validator'; -import { EUser, SimpleUser } from '../../entities/user.entity'; +import { EUser, NamePassUser } from '../../entities/user.entity'; import { Permissions, PermissionsList } from '../permissions'; // Api // UserLogin -export class UserLoginRequest extends SimpleUser {} +export class UserLoginRequest extends NamePassUser {} export class UserLoginResponse { @IsString() @@ -19,7 +19,7 @@ export class UserLoginResponse { } // UserRegister -export class UserRegisterRequest extends SimpleUser {} +export class UserRegisterRequest extends NamePassUser {} export class UserRegisterResponse extends EUser {} diff --git a/shared/src/dto/api/usermanage.dto.ts b/shared/src/dto/api/usermanage.dto.ts index 3b0067c..299d8f3 100644 --- a/shared/src/dto/api/usermanage.dto.ts +++ b/shared/src/dto/api/usermanage.dto.ts @@ -2,11 +2,12 @@ import { Type } from 'class-transformer'; import { IsArray, IsDefined, - IsInt, IsString, + IsInt, + IsString, Min, ValidateNested } from 'class-validator'; -import { EUser, SimpleUser, SimpleUsername } from '../../entities/user.entity'; +import { EUser, NamePassUser, UsernameUser } from '../../entities/user.entity'; import { Roles } from '../roles.dto'; // UserList @@ -41,19 +42,19 @@ export class UserListResponse { } // UserCreate -export class UserCreateRequest extends SimpleUser {} +export class UserCreateRequest extends NamePassUser {} export class UserCreateResponse extends EUser {} // UserDelete -export class UserDeleteRequest extends SimpleUsername {} +export class UserDeleteRequest extends UsernameUser {} export class UserDeleteResponse extends EUser {} // UserInfo -export class UserInfoRequest extends SimpleUsername {} +export class UserInfoRequest extends UsernameUser {} export class UserInfoResponse extends EUser {} // UserUpdateRoles -export class UserUpdateRolesRequest extends SimpleUsername { +export class UserUpdateRolesRequest extends UsernameUser { @IsArray() @IsDefined() @IsString({ each: true }) diff --git a/shared/src/dto/idobject.dto.ts b/shared/src/dto/idobject.dto.ts new file mode 100644 index 0000000..dfea5a9 --- /dev/null +++ b/shared/src/dto/idobject.dto.ts @@ -0,0 +1,6 @@ +import { EntityID } from '../validators/entity-id.validator'; + +export class EntityIDObject { + @EntityID() + id: number; +} diff --git a/shared/src/dto/jwt.dto.ts b/shared/src/dto/jwt.dto.ts index da96409..599449f 100644 --- a/shared/src/dto/jwt.dto.ts +++ b/shared/src/dto/jwt.dto.ts @@ -1,12 +1,12 @@ import { Type } from 'class-transformer'; import { IsDefined, IsInt, IsOptional, ValidateNested } from 'class-validator'; -import { RoledUser } from '../entities/user.entity'; +import { NameRolesUser } from '../entities/user.entity'; export class JwtDataDto { @IsDefined() @ValidateNested() - @Type(() => RoledUser) - user: RoledUser; + @Type(() => NameRolesUser) + user: NameRolesUser; @IsOptional() @IsInt() diff --git a/shared/src/entities/image.entity.ts b/shared/src/entities/image.entity.ts index b13b011..c9f4a83 100644 --- a/shared/src/entities/image.entity.ts +++ b/shared/src/entities/image.entity.ts @@ -1,10 +1,10 @@ import { Exclude } from 'class-transformer'; -import { IsDefined, IsEnum, IsHash, IsInt, IsOptional } from 'class-validator'; +import { IsDefined, IsEnum, IsHash, IsOptional } from 'class-validator'; import { SupportedMime, SupportedMimes } from '../dto/mimes.dto'; +import { EntityID } from '../validators/entity-id.validator'; export class EImage { - @IsOptional() - @IsInt() + @EntityID() id?: number; @IsHash('sha256') diff --git a/shared/src/entities/role.entity.ts b/shared/src/entities/role.entity.ts index 668dfd9..c05d59e 100644 --- a/shared/src/entities/role.entity.ts +++ b/shared/src/entities/role.entity.ts @@ -1,9 +1,9 @@ -import { IsArray, IsEnum, IsInt, IsNotEmpty, IsOptional, IsString } from 'class-validator'; +import { IsArray, IsEnum, IsNotEmpty, IsString } from 'class-validator'; import { Permissions, PermissionsList } from '../dto/permissions'; +import { EntityID } from '../validators/entity-id.validator'; export class ERole { - @IsOptional() - @IsInt() + @EntityID() id?: number; @IsNotEmpty() diff --git a/shared/src/entities/syspreference.entity.ts b/shared/src/entities/syspreference.entity.ts index df70b0a..33de49d 100644 --- a/shared/src/entities/syspreference.entity.ts +++ b/shared/src/entities/syspreference.entity.ts @@ -1,9 +1,9 @@ -import { IsEnum, IsInt, IsNotEmpty, IsOptional, IsString } from 'class-validator'; +import { IsEnum, IsNotEmpty, IsString } from 'class-validator'; import { SysPreferences } from '../dto/syspreferences.dto'; +import { EntityID } from '../validators/entity-id.validator'; export class ESysPreference { - @IsOptional() - @IsInt() + @EntityID() id?: number; @IsNotEmpty() diff --git a/shared/src/entities/user.entity.ts b/shared/src/entities/user.entity.ts index 6cba91d..dcd146a 100644 --- a/shared/src/entities/user.entity.ts +++ b/shared/src/entities/user.entity.ts @@ -1,45 +1,33 @@ import { Exclude } from 'class-transformer'; import { - IsAlphanumeric, - IsArray, - IsInt, - IsNotEmpty, - IsOptional, - IsString, - Length + IsArray, IsOptional, + IsString } from 'class-validator'; import { Roles } from '../dto/roles.dto'; +import { EntityID } from '../validators/entity-id.validator'; +import { IsPlainTextPwd, IsUsername } from '../validators/user.validators'; -// Match this with user validators in frontend -// (Not security focused, but it tells the user what is wrong) - -export class SimpleUsername { - @IsNotEmpty() - @IsString() - @Length(4, 32) - @IsAlphanumeric() +export class UsernameUser { + @IsUsername() username: string; } // This is a simple user object with just the username and unhashed password -export class SimpleUser extends SimpleUsername { - @IsNotEmpty() - @IsString() - @Length(4, 1024) +export class NamePassUser extends UsernameUser { + @IsPlainTextPwd() password: string; } // Add a user object with just the username and roles for jwt -export class RoledUser extends SimpleUsername { +export class NameRolesUser extends UsernameUser { @IsArray() @IsString({ each: true }) roles: Roles; } // Actual entity that goes in the db -export class EUser extends RoledUser { - @IsOptional() - @IsInt() +export class EUser extends NameRolesUser { + @EntityID() id?: number; @IsOptional() diff --git a/shared/src/validators/compose.validator.ts b/shared/src/validators/compose.validator.ts new file mode 100644 index 0000000..b0bb0a2 --- /dev/null +++ b/shared/src/validators/compose.validator.ts @@ -0,0 +1,10 @@ + +export const ComposeValidators = (...validators: PropertyDecorator[]): () => PropertyDecorator => { + return () => { + const decorators = [...validators]; + + return (target: Object, propertyKey: string | symbol): void => { + decorators.forEach((decorator) => decorator(target, propertyKey)); + }; + } +}; diff --git a/shared/src/validators/entity-id.validator.ts b/shared/src/validators/entity-id.validator.ts new file mode 100644 index 0000000..c22cd25 --- /dev/null +++ b/shared/src/validators/entity-id.validator.ts @@ -0,0 +1,5 @@ +import { IsInt, IsNotEmpty, IsOptional, Min } from 'class-validator'; +import { ComposeValidators } from './compose.validator'; + +export const EntityID = ComposeValidators(IsOptional(), IsInt(), Min(0)); +export const EntityIDRequired = ComposeValidators(IsNotEmpty(), IsInt(), Min(0)); diff --git a/shared/src/validators/user.validators.ts b/shared/src/validators/user.validators.ts new file mode 100644 index 0000000..df6d8b8 --- /dev/null +++ b/shared/src/validators/user.validators.ts @@ -0,0 +1,18 @@ +import { IsAlphanumeric, IsNotEmpty, IsString, Length } from 'class-validator'; +import { ComposeValidators } from './compose.validator'; + +// Match this with user validators in frontend +// (Frontend is not security focused, but it tells the user what is wrong) + +export const IsUsername = ComposeValidators( + IsNotEmpty(), + IsString(), + Length(4, 32), + IsAlphanumeric(), +); + +export const IsPlainTextPwd = ComposeValidators( + IsNotEmpty(), + IsString(), + Length(4, 1024), +); diff --git a/yarn.lock b/yarn.lock index bf16d1d..556c26f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -197,14 +197,14 @@ ora "5.4.1" rxjs "6.6.7" -"@angular/animations@^14.0.0-next.5": +"@angular/animations@^14.0.0-next.7": version "14.0.0-next.7" resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-14.0.0-next.7.tgz#5936364100a84893bd53643ed65746326c9e5aaa" integrity sha512-aewapXQ8m8RusSNJHZHSSfE16EZcmETMhZL3L7JHRjb6vWkd83uhNa9D8WzZv34Ad2BVvk7M/u7bFXBYIj+3Fg== dependencies: tslib "^2.3.0" -"@angular/cdk@^14.0.0-next.5": +"@angular/cdk@^14.0.0-next.7": version "14.0.0-next.7" resolved "https://registry.yarnpkg.com/@angular/cdk/-/cdk-14.0.0-next.7.tgz#66bd6e40ff80674d6c8bd75267468c3583d04278" integrity sha512-7Nk6+6GIT2dHZ00yDZwbdUBGjzvPg+X/4yonqlc4cPgGkae8a/AsWlHt14SAFGLoIBUAhu8OAOdqpl6rNjk3bA== @@ -213,7 +213,7 @@ optionalDependencies: parse5 "^5.0.0" -"@angular/cli@^14.0.0-next.4": +"@angular/cli@^14.0.0-next.6": version "14.0.0-next.6" resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-14.0.0-next.6.tgz#e57f4164a0ff810fe7fbfdcb7151b8f4b34c0921" integrity sha512-g+w5PwilyErPTEzg+P9HtPmWSYZl4glduz7ZI6VmOyNfwJ/pJHUwqvPOakJRwpfy99AHX9JjuS+i5L6KtttGyg== @@ -239,14 +239,14 @@ uuid "8.3.2" yargs "17.3.1" -"@angular/common@^14.0.0-next.5": +"@angular/common@^14.0.0-next.7": version "14.0.0-next.7" resolved "https://registry.yarnpkg.com/@angular/common/-/common-14.0.0-next.7.tgz#36092b2163277c63ab414efb42db1798d2e4457c" integrity sha512-v7uivPO1Ngui7mjMs/sZ/iVb0X+24t7eN6Gkww3btfP5oK2VQ0hZwMx2oUAqhY6Ijv8mD3cDnopl38bKBSw46w== dependencies: tslib "^2.3.0" -"@angular/compiler-cli@^14.0.0-next.5": +"@angular/compiler-cli@^14.0.0-next.7": version "14.0.0-next.7" resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-14.0.0-next.7.tgz#ac993806ce4af49716322b00c096451df4df445c" integrity sha512-5JW+/nlNDKFuN8tSxVXzQMbkXhzr5YxCuC3qR0vdPzFG8cBlBAwyrt6Er0Z5fIWxmxngnmPvPDUpbpO1FHZnpA== @@ -262,49 +262,49 @@ tslib "^2.3.0" yargs "^17.2.1" -"@angular/compiler@^14.0.0-next.5": +"@angular/compiler@^14.0.0-next.7": version "14.0.0-next.7" resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-14.0.0-next.7.tgz#21cab07cf8ca1445dbf39b93f7fa43ee965003dc" integrity sha512-9r27doQ3Yl8z6/cf5BWgoPNk3bVOL82BB4X/utyyJhozFQgU0lUlUGdPksc+wFereSblEN7wx1LXYuSID17DJA== dependencies: tslib "^2.3.0" -"@angular/core@^14.0.0-next.5": +"@angular/core@^14.0.0-next.7": version "14.0.0-next.7" resolved "https://registry.yarnpkg.com/@angular/core/-/core-14.0.0-next.7.tgz#b65d45987fd70c2fdb70060b87b3a6f032f08bd4" integrity sha512-yoSTPTYTnu+a89ZiA+WdneBJO+E+oNnyC/3o4R51V/GugE+BwzKBOm51zAh1Ypg7MJDcO9Ft+ESsLtquxmuOiw== dependencies: tslib "^2.3.0" -"@angular/forms@^14.0.0-next.5": +"@angular/forms@^14.0.0-next.7": version "14.0.0-next.7" resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-14.0.0-next.7.tgz#9312bb6a4dda4c732f2cc1e2c35fce521de6be6a" integrity sha512-ygZNM9nuGHdtcJA9eHQxqgoJWNOVpEHaBgVgspvC9uKufkPVRWFifxaO0hus9aHrBhR1zHLjPod/iNkIBhT7aQ== dependencies: tslib "^2.3.0" -"@angular/material@^14.0.0-next.5": +"@angular/material@^14.0.0-next.7": version "14.0.0-next.7" resolved "https://registry.yarnpkg.com/@angular/material/-/material-14.0.0-next.7.tgz#3475e78159195cf775d4f576878089f6dd4b1a0d" integrity sha512-cD9k/mwNFxbb6ryNcDQjrcsgydzPXzt5gzun7/zDsnArsbmRtqoRssZVdNwgkuZNpUDTQF4QLeZDBlsMtWoYIw== dependencies: tslib "^2.3.0" -"@angular/platform-browser-dynamic@^14.0.0-next.5": +"@angular/platform-browser-dynamic@^14.0.0-next.7": version "14.0.0-next.7" resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-14.0.0-next.7.tgz#9653b2ca6b263cf31f9b6e66d26ef851c49eb55d" integrity sha512-gm8QqUgDytWvg9xn0H23t2KVAIHZnuCq2EavTWvJHuJAsL7b0KBF3FL8IBJyEgJY0AzQtAs1JTEfC6PG8sLleg== dependencies: tslib "^2.3.0" -"@angular/platform-browser@^14.0.0-next.5": +"@angular/platform-browser@^14.0.0-next.7": version "14.0.0-next.7" resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-14.0.0-next.7.tgz#06f73ad008fa460cd230bac3888e4a420dc36156" integrity sha512-wNiKdd67CLJiNh8g5vfuIy9XvC6I5oyslui8/kRKnj627nVby0JQ/kVYtb9+W+yWhYcdEH4QTvmznXjM3U5tgA== dependencies: tslib "^2.3.0" -"@angular/router@^14.0.0-next.5": +"@angular/router@^14.0.0-next.7": version "14.0.0-next.7" resolved "https://registry.yarnpkg.com/@angular/router/-/router-14.0.0-next.7.tgz#9c515958c91134d1e33c699b5f21e37bfd0d0ec8" integrity sha512-HNeAWU6BCbG4XqLXHCDeRZce4DcvtjiGhnBcaOg5OVUadPITaWP/57G4nWvszLqROhdoXMDkmEBy1buc7vy4JA== @@ -1361,7 +1361,7 @@ dependencies: text-decoding "^1.0.0" -"@gar/promisify@^1.0.1": +"@gar/promisify@^1.0.1", "@gar/promisify@^1.1.3": version "1.1.3" resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== @@ -1583,6 +1583,14 @@ "@gar/promisify" "^1.0.1" semver "^7.3.5" +"@npmcli/fs@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.0.tgz#f2a21c28386e299d1a9fae8051d35ad180e33109" + integrity sha512-DmfBvNXGaetMxj9LTp8NAN9vEidXURrf5ZTslQzEAi/6GbW+4yjaLFQc6Tue5cpZ9Frlk4OBo/Snf1Bh/S7qTQ== + dependencies: + "@gar/promisify" "^1.1.3" + semver "^7.3.5" + "@npmcli/git@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-3.0.0.tgz#466a18980da6b646a8112a7676688ae5347deba3" @@ -1839,7 +1847,7 @@ dependencies: "@types/express" "*" -"@types/node@*", "@types/node@>=10.0.0", "@types/node@^17.0.21": +"@types/node@*", "@types/node@>=10.0.0", "@types/node@^17.0.21", "@types/node@^17.0.22": version "17.0.22" resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.22.tgz#38b6c4b9b2f3ed9f2e376cce42a298fb2375251e" integrity sha512-8FwbVoG4fy+ykY86XCAclKZDORttqE5/s7dyWZKLXTdv3vRy5HozBEinG5IqhvPXXzIZEcTVbuHlQEI6iuwcmw== @@ -2261,7 +2269,7 @@ ajv-keywords@^5.0.0: dependencies: fast-deep-equal "^3.1.3" -ajv@8.10.0, ajv@^8.0.0, ajv@^8.1.0, ajv@^8.8.0: +ajv@8.10.0: version "8.10.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.10.0.tgz#e573f719bd3af069017e3b66538ab968d040e54d" integrity sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw== @@ -2291,6 +2299,16 @@ ajv@^6.10.0, ajv@^6.11.0, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.12.6: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^8.0.0, ajv@^8.1.0, ajv@^8.8.0: + version "8.11.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" + integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + ansi-colors@4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" @@ -2705,17 +2723,17 @@ cacache@15.3.0: unique-filename "^1.1.1" cacache@^16.0.0: - version "16.0.2" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.0.2.tgz#b18d630b707554d7d5ce96f53bfe845233c84933" - integrity sha512-Q17j7s8X81i/QYVrKVQ/qwWGT+pYLfpTcZ+X+p/Qw9FULy9JEfb2FECYTTt6mPV6A/vk92nRZ80ncpKxiGTrIA== + version "16.0.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.0.3.tgz#0b6314bde969bd4098b03a5f90a351e8a1483f48" + integrity sha512-eC7wYodNCVb97kuHGk5P+xZsvUJHkhSEOyNwkenqQPAsOtrTjvWOE5vSPNBpz9d8X3acIf6w2Ub5s4rvOCTs4g== dependencies: - "@npmcli/fs" "^1.0.0" + "@npmcli/fs" "^2.1.0" "@npmcli/move-file" "^1.1.2" chownr "^2.0.0" fs-minipass "^2.1.0" glob "^7.2.0" infer-owner "^1.0.4" - lru-cache "^7.5.1" + lru-cache "^7.7.1" minipass "^3.1.6" minipass-collect "^1.0.2" minipass-flush "^1.0.5" @@ -3178,10 +3196,10 @@ custom-event@~1.0.0: resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" integrity sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU= -date-format@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.5.tgz#ba385f89782c6cb114cf45dfa4704c6bb29fca51" - integrity sha512-zBhRiN/M0gDxUoM2xRtzTjJzSg0XEi1ofYpF84PfXeS3hN2PsGxmc7jw3DNQtFlimRbMmob5FC3G0cJq6jQQpw== +date-format@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.6.tgz#f6138b8f17968df9815b3d101fc06b0523f066c5" + integrity sha512-B9vvg5rHuQ8cbUXE/RMWMyX2YA5TecT3jKF5fLtGNlzPlU7zblSPmAm2OImDbWL+LDOQ6pUm+4LOFz+ywS41Zw== debug@2.6.9: version "2.6.9" @@ -3190,7 +3208,7 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@~4.3.1, debug@~4.3.2: +debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -3425,9 +3443,9 @@ ee-first@1.1.1: integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= electron-to-chromium@^1.4.84: - version "1.4.88" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.88.tgz#ebe6a2573b563680c7a7bf3a51b9e465c9c501db" - integrity sha512-oA7mzccefkvTNi9u7DXmT0LqvhnOiN2BhSrKerta7HeUC1cLoIwtbf2wL+Ah2ozh5KQd3/1njrGrwDBXx6d14Q== + version "1.4.90" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.90.tgz#4a518590f118828d54fff045728f547fef08143f" + integrity sha512-ZwKgSA0mQMyEhz+NR0F8dRzkrCLeHLzLkjx/CWf16+zV85hQ6meXPQbKanvhnpkYb7b2uJNj+enQJ/N877ND4Q== emoji-regex@^8.0.0: version "8.0.0" @@ -5286,15 +5304,15 @@ log-symbols@^4.1.0: is-unicode-supported "^0.1.0" log4js@^6.4.1: - version "6.4.3" - resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.4.3.tgz#8bddd981846873895bcc55c0961560c7214a8ad7" - integrity sha512-H/oQKcCVIhQ8zCtUh5aftdp9eRpGyVB1M5sKzAJ0i10q5jS+YXk133vtLgzT1RIoWMbIn7QD1LUto8a1hqh6gA== + version "6.4.4" + resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.4.4.tgz#c9bc75569f3f40bba22fe1bd0677afa7a6a13bac" + integrity sha512-ncaWPsuw9Vl1CKA406hVnJLGQKy1OHx6buk8J4rE2lVW+NW5Y82G5/DIloO7NkqLOUtNPEANaWC1kZYVjXssPw== dependencies: - date-format "^4.0.5" - debug "^4.3.3" + date-format "^4.0.6" + debug "^4.3.4" flatted "^3.2.5" rfdc "^1.3.0" - streamroller "^3.0.5" + streamroller "^3.0.6" lru-cache@^6.0.0: version "6.0.0" @@ -5303,7 +5321,7 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -lru-cache@^7.3.1, lru-cache@^7.5.1: +lru-cache@^7.3.1, lru-cache@^7.5.1, lru-cache@^7.7.1: version "7.7.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.7.1.tgz#03d2846b1ad2dcc7931a9340b8711d9798fcb0c6" integrity sha512-cRffBiTW8s73eH4aTXqBcTLU0xQnwGV3/imttRHGWCrbergmnK4D6JXQd8qin5z43HnDwRI+o7mVW0LEB+tpAw== @@ -5347,7 +5365,7 @@ make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -make-fetch-happen@^10.0.3: +make-fetch-happen@^10.0.3, make-fetch-happen@^10.0.6: version "10.0.6" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.0.6.tgz#671269de09cc51208413460898efb7b36adf5534" integrity sha512-4Gfh6lV3TLXmj7qz79hBFuvVqjYSMW6v2+sxtdX4LFQU0rK3V/txRjE0DoZb7X0IF3t9f8NO3CxPSWlvdckhVA== @@ -5476,10 +5494,10 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist@1.2.5, minimist@^1.2.0, minimist@^1.2.5, "minimist@npm:minimist-lite": - version "2.2.0" - resolved "https://registry.yarnpkg.com/minimist-lite/-/minimist-lite-2.2.0.tgz#43992acac6bb17e78acb6eee784d1da2f7cc3216" - integrity sha512-o9M0Iz5ELqCT4NzeaZHBBlV4+ruOGGWV6lVxFoghC6Wvp4W6ECbBBpmDRHdk72O/sMh3QT0c/0XDKhtGlztRZw== +minimist@1.2.5, minimist@^1.2.0, minimist@^1.2.6, "minimist@npm:minimist-lite": + version "2.2.1" + resolved "https://registry.yarnpkg.com/minimist-lite/-/minimist-lite-2.2.1.tgz#abb71db2c9b454d7cf4496868c03e9802de9934d" + integrity sha512-RSrWIRWGYoM2TDe102s7aIyeSipXMIXKb1fSHYx1tAbxAV0z4g2xR6ra3oPzkTqFb0EIUz1H3A/qvYYeDd+/qQ== minipass-collect@^1.0.2: version "1.0.2" @@ -5488,7 +5506,7 @@ minipass-collect@^1.0.2: dependencies: minipass "^3.0.0" -minipass-fetch@^2.0.1, minipass-fetch@^2.0.3: +minipass-fetch@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.0.3.tgz#688bbd0c2b019642778dc808b6950dd908d192b3" integrity sha512-VA+eiiUtaIvpQJXISwE3OiMvQwAWrgKb97F0aXlCS1Ahikr8fEQq8m3Hf7Kv9KT3nokuHigJKsDMB6atU04olQ== @@ -5544,11 +5562,11 @@ minizlib@^2.1.1, minizlib@^2.1.2: yallist "^4.0.0" mkdirp@^0.5.5: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: - minimist "^1.2.5" + minimist "^1.2.6" mkdirp@^1.0.3, mkdirp@^1.0.4: version "1.0.4" @@ -5749,7 +5767,7 @@ npm-normalize-package-bin@^1.0.1: resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== -npm-package-arg@9.0.1, npm-package-arg@^9.0.0: +npm-package-arg@9.0.1, npm-package-arg@^9.0.0, npm-package-arg@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-9.0.1.tgz#db9c6379c45d79db88ee6dd40d3ec6a9d9a4d13a" integrity sha512-Xs9wznfEAmZAR61qsYH3iN24V/qMYYkvAR5CRQNMvC6PjN2fHtO8y9XP/xdp5K+Icx+u1wMBMgWRPCmAEChSog== @@ -5779,16 +5797,16 @@ npm-pick-manifest@7.0.0, npm-pick-manifest@^7.0.0: semver "^7.3.5" npm-registry-fetch@^13.0.1: - version "13.0.1" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-13.0.1.tgz#ceecbaab9f1d0d911e1c01a5be2be96d45e472f5" - integrity sha512-Ak+LXVtSrCLOdscFW/apUw67OPNph8waHsPKM9UOJosL7i59EF5XoSWQMEsXEOeifM9Bb4/2+WrQC4t/pd8DGg== + version "13.1.0" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-13.1.0.tgz#71bed52e30a4b27441604bbba79c7db8e0e34cb5" + integrity sha512-TIYL5X8CcwDhbFMXFDShNcpG6OMCYK6VzvSr6MUWP20tCU2DJ4ao2qQg3DT+3Pet8mO6/cgbZpon4LMh3duYLg== dependencies: - make-fetch-happen "^10.0.3" + make-fetch-happen "^10.0.6" minipass "^3.1.6" - minipass-fetch "^2.0.1" + minipass-fetch "^2.0.3" minipass-json-stream "^1.0.1" minizlib "^2.1.2" - npm-package-arg "^9.0.0" + npm-package-arg "^9.0.1" proc-log "^2.0.0" npm-run-path@^4.0.0, npm-run-path@^4.0.1: @@ -7427,13 +7445,13 @@ stream-wormhole@^1.1.0: resolved "https://registry.yarnpkg.com/stream-wormhole/-/stream-wormhole-1.1.0.tgz#300aff46ced553cfec642a05251885417693c33d" integrity sha512-gHFfL3px0Kctd6Po0M8TzEvt3De/xu6cnRrjlfYNhwbhLPLwigI2t1nc6jrzNuaYg5C4YF78PPFuQPzRiqn9ew== -streamroller@^3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-3.0.5.tgz#17e348dc2a662f9f325373549ab91d55316051ab" - integrity sha512-5uzTEUIi4OB5zy/H30kbUN/zpDNJsFUA+Z47ZL8EfrP93lcZvRLEqdbhdunEPa7CouuAzXXsHpCJ9dg90Umw7g== +streamroller@^3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-3.0.6.tgz#52823415800ded79a49aa3f7712f50a422b97493" + integrity sha512-Qz32plKq/MZywYyhEatxyYc8vs994Gz0Hu2MSYXXLD233UyPeIeRBZARIIGwFer4Mdb8r3Y2UqKkgyDghM6QCg== dependencies: - date-format "^4.0.5" - debug "^4.3.3" + date-format "^4.0.6" + debug "^4.3.4" fs-extra "^10.0.1" string-argv@^0.1.1: @@ -7752,7 +7770,7 @@ tsconfig-paths-webpack-plugin@3.5.2: enhanced-resolve "^5.7.0" tsconfig-paths "^3.9.0" -tsconfig-paths@3.14.0, tsconfig-paths@^3.14.0, tsconfig-paths@^3.9.0: +tsconfig-paths@3.14.0: version "3.14.0" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.0.tgz#4fcc48f9ccea8826c41b9ca093479de7f5018976" integrity sha512-cg/1jAZoL57R39+wiw4u/SCC6Ic9Q5NqjBOb+9xISedOYurfog9ZNmKJSxAnb2m/5Bq4lE9lhUcau33Ml8DM0g== @@ -7762,6 +7780,16 @@ tsconfig-paths@3.14.0, tsconfig-paths@^3.14.0, tsconfig-paths@^3.9.0: minimist "^1.2.0" strip-bom "^3.0.0" +tsconfig-paths@^3.14.0, tsconfig-paths@^3.9.0: + version "3.14.1" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" + integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.6" + strip-bom "^3.0.0" + tslib@2.3.1, tslib@^2.0.0, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01"