add config for conversion worker

update packages
This commit is contained in:
rubikscraft
2022-05-02 00:00:29 +02:00
parent 377e6d7709
commit a1a67f0da7
8 changed files with 124 additions and 127 deletions

View File

@@ -37,8 +37,12 @@ export class PreferenceDefaultsService {
[SysPreference.JwtExpiresIn]: () =>
this.jwtConfigService.getJwtExpiresIn() ?? '7d',
[SysPreference.BCryptStrength]: () => 12,
[SysPreference.RemoveDerivativesAfter]: () => '7d',
[SysPreference.SaveDerivatives]: () => true,
[SysPreference.AllowEditing]: () => true,
[SysPreference.ConversionTimeLimit]: () => '10s',
[SysPreference.ConversionMemoryLimit]: () => 512,
};
}

View File

@@ -1,14 +1,20 @@
import { Injectable } from '@nestjs/common';
import ms from 'ms';
import { ImageRequestParams } from 'picsur-shared/dist/dto/api/image.dto';
import {
FullMime, SupportedMimeCategory
FullMime,
SupportedMimeCategory
} from 'picsur-shared/dist/dto/mimes.dto';
import { SysPreference } from 'picsur-shared/dist/dto/sys-preferences.dto';
import { AsyncFailable, Fail, HasFailed } from 'picsur-shared/dist/types';
import { SysPreferenceService } from '../../collections/preference-db/sys-preference-db.service';
import { SharpWrapper } from '../../workers/sharp.wrapper';
import { ImageResult } from './imageresult';
@Injectable()
export class ImageConverterService {
constructor(private readonly sysPref: SysPreferenceService) {}
public async convert(
image: Buffer,
sourcemime: FullMime,
@@ -41,8 +47,16 @@ export class ImageConverterService {
targetmime: FullMime,
options: ImageRequestParams,
): AsyncFailable<ImageResult> {
const sharpWrapper = new SharpWrapper();
const [memLimit, timeLimit] = await Promise.all([
this.sysPref.getNumberPreference(SysPreference.ConversionMemoryLimit),
this.sysPref.getStringPreference(SysPreference.ConversionTimeLimit),
]);
if (HasFailed(memLimit) || HasFailed(timeLimit)) {
return Fail('Failed to get conversion limits');
}
const timeLimitMS = ms(timeLimit);
const sharpWrapper = new SharpWrapper(timeLimitMS, memLimit);
const hasStarted = await sharpWrapper.start(image, sourcemime);
if (HasFailed(hasStarted)) return hasStarted;

View File

@@ -11,7 +11,11 @@ export const SysPreferenceValueTypes: {
[SysPreference.JwtSecret]: 'string',
[SysPreference.JwtExpiresIn]: 'string',
[SysPreference.BCryptStrength]: 'number',
[SysPreference.RemoveDerivativesAfter]: 'string',
[SysPreference.SaveDerivatives]: 'boolean',
[SysPreference.AllowEditing]: 'boolean',
[SysPreference.ConversionTimeLimit]: 'string',
[SysPreference.ConversionMemoryLimit]: 'number',
};

View File

@@ -27,9 +27,6 @@ export class SharpWrapper {
private readonly workerID: number = Math.floor(Math.random() * 100000);
private readonly logger: Logger = new Logger('SharpWrapper' + this.workerID);
private static readonly PROMISE_TIMEOUT = 10000;
private static readonly INSTANCE_TIMEOUT = 10000;
private static readonly MEMORY_LIMIT = 512;
private static readonly WORKER_PATH = path.join(
__dirname,
'./sharp',
@@ -38,18 +35,25 @@ export class SharpWrapper {
private worker: ChildProcess | null = null;
constructor(private instance_timeout: number, private memory_limit: number) {}
public async start(image: Buffer, mime: FullMime): AsyncFailable<true> {
this.worker = fork(SharpWrapper.WORKER_PATH, {
serialization: 'advanced',
timeout: SharpWrapper.INSTANCE_TIMEOUT,
timeout: this.instance_timeout,
env: {
MEMORY_LIMIT_MB: SharpWrapper.MEMORY_LIMIT.toString(),
MEMORY_LIMIT_MB: this.memory_limit.toString(),
NODE_OPTIONS: '--no-warnings',
},
stdio: 'overlapped',
});
this.worker.stdout?.pipe(process.stdout);
this.worker.stderr?.pipe(process.stderr);
this.worker.stdout?.on('data', (data) => {
this.logger.verbose(`Worker log: ${data}`);
});
this.worker.stderr?.on('data', (data) => {
this.logger.warn(`Worker error: ${data}`);
});
this.worker.on('error', (error) => {
this.logger.error(`Worker ${this.workerID} error: ${error}`);
@@ -78,7 +82,9 @@ export class SharpWrapper {
return hasSent;
}
this.logger.verbose(`Worker ${this.workerID} initialized`);
this.logger.verbose(
`Worker ${this.workerID} initialized with ${this.instance_timeout}ms timeout and ${this.memory_limit}MB memory limit`,
);
return true;
}
@@ -138,10 +144,7 @@ export class SharpWrapper {
},
);
const result = await pTimeout(
finishPromise,
SharpWrapper.PROMISE_TIMEOUT,
);
const result = await pTimeout(finishPromise, this.instance_timeout);
this.logger.verbose(
`Worker ${this.workerID} finished in ${result.processingTime}ms`,
@@ -167,7 +170,7 @@ export class SharpWrapper {
});
});
await pTimeout(waitReadyPromise, SharpWrapper.PROMISE_TIMEOUT);
await pTimeout(waitReadyPromise, this.instance_timeout);
return true;
} catch (error) {
return Fail(error);

View File

@@ -13,16 +13,16 @@
"watch": "ng build --watch --configuration development"
},
"dependencies": {
"@angular/animations": "^14.0.0-next.13",
"@angular/cdk": "^14.0.0-next.10",
"@angular/common": "^14.0.0-next.13",
"@angular/compiler": "^14.0.0-next.13",
"@angular/core": "^14.0.0-next.13",
"@angular/forms": "^14.0.0-next.13",
"@angular/material": "^14.0.0-next.10",
"@angular/platform-browser": "^14.0.0-next.13",
"@angular/platform-browser-dynamic": "^14.0.0-next.13",
"@angular/router": "^14.0.0-next.13",
"@angular/animations": "^14.0.0-next.15",
"@angular/cdk": "^14.0.0-next.12",
"@angular/common": "^14.0.0-next.15",
"@angular/compiler": "^14.0.0-next.15",
"@angular/core": "^14.0.0-next.15",
"@angular/forms": "^14.0.0-next.15",
"@angular/material": "^14.0.0-next.12",
"@angular/platform-browser": "^14.0.0-next.15",
"@angular/platform-browser-dynamic": "^14.0.0-next.15",
"@angular/router": "^14.0.0-next.15",
"bootstrap": "^5.1.3",
"fuse.js": "^6.5.3",
"jwt-decode": "^3.1.2",
@@ -36,9 +36,9 @@
"zone.js": "~0.11.5"
},
"devDependencies": {
"@angular-devkit/build-angular": "14.0.0-next.9",
"@angular/cli": "^14.0.0-next.9",
"@angular/compiler-cli": "^14.0.0-next.13",
"@angular-devkit/build-angular": "14.0.0-next.12",
"@angular/cli": "^14.0.0-next.12",
"@angular/compiler-cli": "^14.0.0-next.15",
"@fontsource/material-icons": "^4.5.4",
"@fontsource/material-icons-outlined": "^4.5.4",
"@fontsource/roboto": "^4.5.5",

View File

@@ -6,7 +6,11 @@ export const SysPreferenceFriendlyNames: {
[SysPreference.JwtSecret]: 'JWT Secret',
[SysPreference.JwtExpiresIn]: 'JWT Expiry Time',
[SysPreference.BCryptStrength]: 'BCrypt Strength',
[SysPreference.RemoveDerivativesAfter]: 'Cached Images Expiry Time',
[SysPreference.SaveDerivatives]: 'Cache Trancoded Images',
[SysPreference.AllowEditing]: 'Allow images to be edited (e.g. resize)',
[SysPreference.ConversionTimeLimit]: 'Transcode/Edit Time Limit',
[SysPreference.ConversionMemoryLimit]: 'Transcode/Edit Memory Limit MB',
};

View File

@@ -7,4 +7,7 @@ export enum SysPreference {
SaveDerivatives = 'save_derivatives',
RemoveDerivativesAfter = 'remove_derivatives_after',
AllowEditing = 'allow_editing',
ConversionTimeLimit = 'conversion_time_limit',
ConversionMemoryLimit = 'conversion_memory_limit',
}

163
yarn.lock
View File

@@ -25,23 +25,15 @@
"@angular-devkit/core" "14.0.0-next.12"
rxjs "6.6.7"
"@angular-devkit/architect@0.1400.0-next.9":
version "0.1400.0-next.9"
resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1400.0-next.9.tgz#97b68b08c4babdfd0467366f5fe761c68198bb44"
integrity sha512-u5rSvPyIU1XolXoyaMcwVFgj+8SvAYwuA0rWttDUi58KQJa5bfga7yVNPUT9thMVMIigEkds9UG2TEf1FWBANA==
dependencies:
"@angular-devkit/core" "14.0.0-next.9"
rxjs "6.6.7"
"@angular-devkit/build-angular@14.0.0-next.9":
version "14.0.0-next.9"
resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-14.0.0-next.9.tgz#d6b274bf635047ec38c863c8af1dfb3c432106ed"
integrity sha512-QZtXGv0fq/GfvZaPFOlE+JM4twI50rpYOrm1Z3+pTZN57/ALrdMZc2z0I2i1YmiMH/v8EoiM1uOmLN4HnDxcPw==
"@angular-devkit/build-angular@14.0.0-next.12":
version "14.0.0-next.12"
resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-14.0.0-next.12.tgz#28270cc0dca559481d36ef55d5133558a3831f44"
integrity sha512-GKeXMq2eLoH31f3JZNd2UdkI3m0z/YLKIg6g1kK3bG8cBTayXRCgcyKaIBvCc1nN+DfBduMnTBKBzmaeGl+dXA==
dependencies:
"@ampproject/remapping" "2.1.2"
"@angular-devkit/architect" "0.1400.0-next.9"
"@angular-devkit/build-webpack" "0.1400.0-next.9"
"@angular-devkit/core" "14.0.0-next.9"
"@angular-devkit/architect" "0.1400.0-next.12"
"@angular-devkit/build-webpack" "0.1400.0-next.12"
"@angular-devkit/core" "14.0.0-next.12"
"@babel/core" "7.17.9"
"@babel/generator" "7.17.9"
"@babel/helper-annotate-as-pure" "7.16.7"
@@ -52,7 +44,7 @@
"@babel/runtime" "7.17.9"
"@babel/template" "7.16.7"
"@discoveryjs/json-ext" "0.5.7"
"@ngtools/webpack" "14.0.0-next.9"
"@ngtools/webpack" "14.0.0-next.12"
ansi-colors "4.1.1"
babel-loader "8.2.4"
babel-plugin-istanbul "6.1.1"
@@ -62,8 +54,8 @@
critters "0.0.16"
css-loader "6.7.1"
esbuild-wasm "0.14.36"
glob "7.2.0"
https-proxy-agent "5.0.0"
glob "8.0.1"
https-proxy-agent "5.0.1"
inquirer "8.2.2"
jsonc-parser "3.0.0"
karma-source-map-support "1.4.0"
@@ -84,9 +76,9 @@
regenerator-runtime "0.13.9"
resolve-url-loader "5.0.0"
rxjs "6.6.7"
sass "1.50.0"
sass "1.50.1"
sass-loader "12.6.0"
semver "7.3.6"
semver "7.3.7"
source-map-loader "3.0.1"
source-map-support "0.5.21"
stylus "0.57.0"
@@ -103,12 +95,12 @@
optionalDependencies:
esbuild "0.14.36"
"@angular-devkit/build-webpack@0.1400.0-next.9":
version "0.1400.0-next.9"
resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.1400.0-next.9.tgz#5a65347a00aa9dd4d7b60ac6a3855ef5e0de9f1e"
integrity sha512-O4xzexGG5XiMPBBxYqL602k7TDdOlfVx2mgSRsm6M9Yi7VBzUhErrFOmv9roA8lj5c+vvz8iNpdykiTFgA2+wg==
"@angular-devkit/build-webpack@0.1400.0-next.12":
version "0.1400.0-next.12"
resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.1400.0-next.12.tgz#19c321d13ea92526a2b3414f00e568a9322da1bf"
integrity sha512-PR7e8yQMG0VAdXSHc11xttzT4WKRXxSb10Pe2qQxKubMPpfRiMljoUQ4K39/0zdkiKlNI5XWItk8zA5cwZFU2A==
dependencies:
"@angular-devkit/architect" "0.1400.0-next.9"
"@angular-devkit/architect" "0.1400.0-next.12"
rxjs "6.6.7"
"@angular-devkit/core@13.3.2":
@@ -134,18 +126,6 @@
rxjs "6.6.7"
source-map "0.7.3"
"@angular-devkit/core@14.0.0-next.9":
version "14.0.0-next.9"
resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-14.0.0-next.9.tgz#64e14c132babe43368b50ea0711eba2c950ced5f"
integrity sha512-bw1jmhCMGQK1S/XZ8SB2LGGkGn1j3v9TAkHs3EwM6bBYKSgLPKj9rEnRSz7GArZ+uLU7KVXYWJWxmuWfH0e/LQ==
dependencies:
ajv "8.11.0"
ajv-formats "2.1.1"
fast-json-stable-stringify "2.1.0"
magic-string "0.26.1"
rxjs "6.6.7"
source-map "0.7.3"
"@angular-devkit/schematics-cli@13.3.2":
version "13.3.2"
resolved "https://registry.yarnpkg.com/@angular-devkit/schematics-cli/-/schematics-cli-13.3.2.tgz#50607314ee19828d9bd3fb7cb1e3ab2b480ae934"
@@ -180,14 +160,14 @@
ora "5.4.1"
rxjs "6.6.7"
"@angular/animations@^14.0.0-next.13":
"@angular/animations@^14.0.0-next.15":
version "14.0.0-next.15"
resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-14.0.0-next.15.tgz#8418f07878e2e1016bde17191d305200cc648a00"
integrity sha512-qXCCAQ9SMLF/1ny9lUvCCSTdMNczcr+f1QkvyrzSgr/yW4rmnj1GA+7DcyqPbA55QFeUXFQKkKosLeOZfgPlKg==
dependencies:
tslib "^2.3.0"
"@angular/cdk@^14.0.0-next.10":
"@angular/cdk@^14.0.0-next.12":
version "14.0.0-next.12"
resolved "https://registry.yarnpkg.com/@angular/cdk/-/cdk-14.0.0-next.12.tgz#7236aa4ec270c15a70fd2ab5201f45bca7317a0b"
integrity sha512-cFR3JeZGGKGdSIkG9IjnmWd3+hJbj/oDXSetGuAU5TgL1FaMVnt+TbKQXvvNgF8e7ki4BczZqeAw28a3uWLgSA==
@@ -196,7 +176,7 @@
optionalDependencies:
parse5 "^5.0.0"
"@angular/cli@^14.0.0-next.9":
"@angular/cli@^14.0.0-next.12":
version "14.0.0-next.12"
resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-14.0.0-next.12.tgz#c16286e826628f3f6a89b5e1d57a2a282389c689"
integrity sha512-HUvXvAz5TUOl0EbE1aIIyk4sR6Dp/HbczNcSqL+V9cg4mp3Obx5EHAUt+dbDNx3/5PoG9yDduU1Q3IuNEKd1KA==
@@ -222,14 +202,14 @@
uuid "8.3.2"
yargs "17.4.1"
"@angular/common@^14.0.0-next.13":
"@angular/common@^14.0.0-next.15":
version "14.0.0-next.15"
resolved "https://registry.yarnpkg.com/@angular/common/-/common-14.0.0-next.15.tgz#2240b102b0c8db485b01bca41bc99c3ddfcdfa22"
integrity sha512-wnZmv2ErUTTRmFc9A22viXoGadQcOFiZz4u7Cw8V3/Hmyx3I+OLmfMDG89mSB1WESxoMD/JEcikgG8T4yXSO7A==
dependencies:
tslib "^2.3.0"
"@angular/compiler-cli@^14.0.0-next.13":
"@angular/compiler-cli@^14.0.0-next.15":
version "14.0.0-next.15"
resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-14.0.0-next.15.tgz#810397f5f4b73d25200a141d631fc18705322672"
integrity sha512-X5M18nEuxsD06fg+RUGqhJxZYabg5Re6kEI3bB7Te/3a7/efJ7ObrGMfqVt1PJLrUw1FrmBaLEAOhp3fqcE61A==
@@ -245,49 +225,49 @@
tslib "^2.3.0"
yargs "^17.2.1"
"@angular/compiler@^14.0.0-next.13":
"@angular/compiler@^14.0.0-next.15":
version "14.0.0-next.15"
resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-14.0.0-next.15.tgz#810b98605c11be68877d14a35c6f9e7aa568316e"
integrity sha512-P0V98X5nkdwlv6/OXHsFUp39ESHSkn5vyHdwKEg3BnvvYGZSFM8tEaIFyuKvr9c30idiVBa7Gta83HodMwXuNg==
dependencies:
tslib "^2.3.0"
"@angular/core@^14.0.0-next.13":
"@angular/core@^14.0.0-next.15":
version "14.0.0-next.15"
resolved "https://registry.yarnpkg.com/@angular/core/-/core-14.0.0-next.15.tgz#78fd19f4b84bed67f95e373ccd77e8e1c566d45d"
integrity sha512-sHowm2FhhaOBYQG7m9v8Xq6pAjvt1WCv+njKrOhsrcs2wjYqVs0IbcdIfu1RpIasrwLPn+nwi3hjMohxt0abPw==
dependencies:
tslib "^2.3.0"
"@angular/forms@^14.0.0-next.13":
"@angular/forms@^14.0.0-next.15":
version "14.0.0-next.15"
resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-14.0.0-next.15.tgz#6528cbc8185ea37687d1e85f7686ef375331b883"
integrity sha512-/JzHLE9BvpY7F5mHFvsGo/0bPFO/VE9YYM9PaYFm91AapzlZ8e8DIvfl5zsqULiMjJLX0n/mRUN5PjpIHyBmMQ==
dependencies:
tslib "^2.3.0"
"@angular/material@^14.0.0-next.10":
"@angular/material@^14.0.0-next.12":
version "14.0.0-next.12"
resolved "https://registry.yarnpkg.com/@angular/material/-/material-14.0.0-next.12.tgz#4ee31763101245f8933856e6259b7c8fc79605d7"
integrity sha512-e6k3CoNASHbMeCgW7n5528UKmkQFa6VBCNL7yPsHT5Cnu/6w/tOeSn3QzjH26EOndAv7l5q0OsKZ14gARLFLlg==
dependencies:
tslib "^2.3.0"
"@angular/platform-browser-dynamic@^14.0.0-next.13":
"@angular/platform-browser-dynamic@^14.0.0-next.15":
version "14.0.0-next.15"
resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-14.0.0-next.15.tgz#12c438d5c195bf178ee98f4d0ed0f5c7e682e732"
integrity sha512-meEn9qTeWi+fsmiDHTlaMpPqxnXheV9m3dvuUdGxj7FzdxCxdt2ioSx6vDY7ClFNiKlvMZo+kodcTmS0LS4CgA==
dependencies:
tslib "^2.3.0"
"@angular/platform-browser@^14.0.0-next.13":
"@angular/platform-browser@^14.0.0-next.15":
version "14.0.0-next.15"
resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-14.0.0-next.15.tgz#5d0ad1d723b58ae0d261549b0c5d95f7ddb06494"
integrity sha512-Gq+EDfAIWhHnK+rX+OD6b6CmCwzcnRE4KXUvfyX7ng2G2M4wN3kwFAzF1fMePnfwUzOseqOkZzZs8swPLgDPqQ==
dependencies:
tslib "^2.3.0"
"@angular/router@^14.0.0-next.13":
"@angular/router@^14.0.0-next.15":
version "14.0.0-next.15"
resolved "https://registry.yarnpkg.com/@angular/router/-/router-14.0.0-next.15.tgz#a9407aa1705d0738d0b88eef09dd42b3c78dac71"
integrity sha512-4tXaEV/WD0pJ1RoPNDJjhrpZBPn1RJIQ5qDYDxvryOw7G+x6wOyL4dUtLO2g8jM5KRnJhfuf76liQFeo+phFkA==
@@ -1352,9 +1332,9 @@
stream-wormhole "^1.1.0"
"@fastify/static@^5.0.0", fastify-static@^4.7.0, "fastify-static@npm:@fastify/static":
version "5.0.0"
resolved "https://registry.yarnpkg.com/@fastify/static/-/static-5.0.0.tgz#7aa2527148da067f2a550ac4a585c0f6f0a188ec"
integrity sha512-GGltJkO0idXa7yCZ0PfdTZ6qokWDX/vigCvmRpjOU2A3jc93c9p+oHDvHmwHK60hwWoBEGqHjGofVyn3H1CjZg==
version "5.0.1"
resolved "https://registry.yarnpkg.com/@fastify/static/-/static-5.0.1.tgz#6bb6b94c2b51d9fafb06261b79ed5da5038dd5a1"
integrity sha512-0lReUKWVOt2i5i1KoBLYsbcMBthq5eiEoUQrFceoXJkCv+OyA0iLl6hGxcmnMRxLsl/Netrzt1NNOpg4muCcuw==
dependencies:
content-disposition "^0.5.3"
encoding-negotiator "^2.0.1"
@@ -1585,10 +1565,10 @@
dependencies:
uuid "8.3.2"
"@ngtools/webpack@14.0.0-next.9":
version "14.0.0-next.9"
resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-14.0.0-next.9.tgz#3806bdf6ff0944e289cdcf74995cd592fa3e086b"
integrity sha512-T9J2RUZOzdLm1j3sLu/17OkPwTloCN9d2hxCbDyWLkjwvFz4DVdEfHtotLQ5KPqhv91nAoEmoCqf96CwKds2qA==
"@ngtools/webpack@14.0.0-next.12":
version "14.0.0-next.12"
resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-14.0.0-next.12.tgz#6920a8a54abd2a5bc41f671ed4e18d8b3be0502b"
integrity sha512-i2+IT0i9IicplJaesp4ELUbbtKvH0skQeQvpQ9Md9HHj4miKaGnj1eMIbVxQrY2PCPyz2Mxva2iHXSfVCE1N4w==
"@nodelib/fs.scandir@2.1.5":
version "2.1.5"
@@ -1861,9 +1841,9 @@
"@types/express" "*"
"@types/node@*", "@types/node@^17.0.30":
version "17.0.30"
resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.30.tgz#2c6e8512acac70815e8176aa30c38025067880ef"
integrity sha512-oNBIZjIqyHYP8VCNAV9uEytXVeXG2oR0w9lgAXro20eugRQfY002qr3CUl6BAe+Yf/z3CRjPdz27Pu6WWtuSRw==
version "17.0.31"
resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.31.tgz#a5bb84ecfa27eec5e1c802c6bbf8139bdb163a5d"
integrity sha512-AR0x5HbXGqkEx9CadRH3EBYx/VkiUgZIhP4wvPn/+5KIsgpNoyFaRlVe0Zlx9gRtg8fA06a9tskE2MSN7TcG4Q==
"@types/parse-json@^4.0.0":
version "4.0.0"
@@ -3204,9 +3184,9 @@ css@^3.0.0:
source-map-resolve "^0.6.0"
cssdb@^6.5.0:
version "6.5.0"
resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-6.5.0.tgz#61264b71f29c834f09b59cb3e5b43c8226590122"
integrity sha512-Rh7AAopF2ckPXe/VBcoUS9JrCZNSyc60+KpgE6X25vpVxA32TmiqvExjkfhwP4wGSb6Xe8Z/JIyGqwgx/zZYFA==
version "6.6.0"
resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-6.6.0.tgz#e4562e2aaba5b23e7d9e6555ba64298990e1ba96"
integrity sha512-hXoXDYrxmAGNh+vgg39WJArCpFIaU3O2q7ud+bEobQ6Fbl2tjPasl3Wt8MKkxlNQEIZqieh0DBsz92eSKI4ghw==
cssesc@^3.0.0:
version "3.0.0"
@@ -4310,19 +4290,7 @@ glob-to-regexp@^0.4.1:
resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
glob@7.2.0, glob@^7.0.0, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0:
version "7.2.0"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023"
integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
inherits "2"
minimatch "^3.0.4"
once "^1.3.0"
path-is-absolute "^1.0.0"
glob@^8.0.1:
glob@8.0.1, glob@^8.0.1:
version "8.0.1"
resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.1.tgz#00308f5c035aa0b2a447cd37ead267ddff1577d3"
integrity sha512-cF7FYZZ47YzmCu7dDy50xSRRfO3ErRfrXuLZcNIuyiJEco0XSrGtuilG19L5xp3NcwTx7Gn+X6Tv3fmsUPTbow==
@@ -4334,6 +4302,18 @@ glob@^8.0.1:
once "^1.3.0"
path-is-absolute "^1.0.0"
glob@^7.0.0, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0:
version "7.2.0"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023"
integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
inherits "2"
minimatch "^3.0.4"
once "^1.3.0"
path-is-absolute "^1.0.0"
globals@^11.1.0:
version "11.12.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
@@ -4541,15 +4521,7 @@ http-proxy@^1.18.1:
follow-redirects "^1.0.0"
requires-port "^1.0.0"
https-proxy-agent@5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2"
integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==
dependencies:
agent-base "6"
debug "4"
https-proxy-agent@^5.0.0:
https-proxy-agent@5.0.1, https-proxy-agent@^5.0.0:
version "5.0.1"
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
@@ -5188,7 +5160,7 @@ lru-cache@^6.0.0:
dependencies:
yallist "^4.0.0"
lru-cache@^7.4.0, lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1:
lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1:
version "7.9.0"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.9.0.tgz#29c2a989b6c10f32ceccc66ff44059e1490af3e1"
integrity sha512-lkcNMUKqdJk96TuIXUidxaPuEg5sJo/+ZyVE2BDFnuZGzwXem7d8582eG8vbu4todLfT14snP6iHriCHXXi5Rw==
@@ -6980,10 +6952,10 @@ sass-loader@12.6.0:
klona "^2.0.4"
neo-async "^2.6.2"
sass@1.50.0:
version "1.50.0"
resolved "https://registry.yarnpkg.com/sass/-/sass-1.50.0.tgz#3e407e2ebc53b12f1e35ce45efb226ea6063c7c8"
integrity sha512-cLsD6MEZ5URXHStxApajEh7gW189kkjn4Rc8DQweMyF+o5HF5nfEz8QYLMlPsTOD88DknatTmBWkOcw5/LnJLQ==
sass@1.50.1:
version "1.50.1"
resolved "https://registry.yarnpkg.com/sass/-/sass-1.50.1.tgz#e9b078a1748863013c4712d2466ce8ca4e4ed292"
integrity sha512-noTnY41KnlW2A9P8sdwESpDmo+KBNkukI1i8+hOK3footBUcohNHtdOJbckp46XO95nuvcHDDZ+4tmOnpK3hjw==
dependencies:
chokidar ">=3.0.0 <4.0.0"
immutable "^4.0.0"
@@ -7049,13 +7021,6 @@ semver@7.0.0:
resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==
semver@7.3.6:
version "7.3.6"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.6.tgz#5d73886fb9c0c6602e79440b97165c29581cbb2b"
integrity sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==
dependencies:
lru-cache "^7.4.0"
semver@7.3.7, semver@^7.0.0, semver@^7.1.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7:
version "7.3.7"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f"
@@ -8239,9 +8204,9 @@ wrappy@1:
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
ws@^8.4.2:
version "8.5.0"
resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f"
integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==
version "8.6.0"
resolved "https://registry.yarnpkg.com/ws/-/ws-8.6.0.tgz#e5e9f1d9e7ff88083d0c0dd8281ea662a42c9c23"
integrity sha512-AzmM3aH3gk0aX7/rZLYvjdvZooofDu3fFOzGqcSnQ1tOcTWwhM/o+q++E8mAyVVIyUdajrkzWUGftaVSDLn1bw==
xml2js@^0.4.23:
version "0.4.23"