diff --git a/package.json b/package.json index db4786d..7711606 100644 --- a/package.json +++ b/package.json @@ -1,111 +1,112 @@ -{ - "name": "backend-image", - "version": "1.0.0", - "description": "Service backend image", - "author": "Mạnh Tiến", - "main": "/src/index.js", - "private": true, - "license": "MIT", - "engines": { - "node": ">=8", - "yarn": "*" - }, - "nyc": { - "require": [ - "babel-register" - ], - "sourceMap": false, - "instrument": false - }, - "scripts": { - "clean": "./node_modules/.bin/rimraf dist -p", - "build": "yarn run clean && mkdir -p dist && ./node_modules/.bin/babel src -s -D -d dist", - "start": "cross-env NODE_ENV=production pm2 start ./dist/index.js", - "start-worker": "cross-env NODE_ENV=production pm2 start docker-process.yml --only worker", - "start-event-dispatcher": "cross-env NODE_ENV=production pm2 start docker-process.yml --only event-dispatcher", - "dev": "nodemon src/index.js --exec ./node_modules/.bin/babel-node", - "dev-worker": "nodemon src/index-worker.js --exec ./node_modules/.bin/babel-node", - "dev-event-dispatcher": "nodemon src/index-event-dispatcher.js --exec ./node_modules/.bin/babel-node", - "lint": "eslint **/*.js --ignore-path .gitignore --ignore-pattern internals/scripts", - "lint:fix": "yarn lint -- --fix", - "lint:watch": "yarn lint -- --watch", - "test": "cross-env NODE_ENV=test nyc --reporter=html --reporter=text mocha --timeout 20000 --recursive src/api/tests", - "test:unit": "cross-env NODE_ENV=test mocha dist/api/tests/unit", - "test:integration": "cross-env NODE_ENV=test mocha --timeout 20000 dist/api/tests/integration", - "test:watch": "cross-env NODE_ENV=test mocha --watch dist/api/tests/unit", - "coverage": "nyc report --reporter=text-lcov | coveralls", - "validate": "yarn lint && yarn test", - "postpublish": "git push --tags", - "docker:start": "node ./dist/index.js --exec ./node_modules/.bin/babel-node", - "docker:dev": "docker-compose -f docker-compose.yml -f docker-compose.dev.yml up", - "docker:test": "docker-compose -f docker-compose.yml -f docker-compose.test.yml up --abort-on-container-exit" - }, - "repository": { - "type": "git", - "url": "git@gitlab.com:csell-team/b2c/sv-backend-file.git" - }, - "dependencies": { - "amqplib": "^0.5.2", - "archiver": "^5.3.1", - "auth-adapter": "1.1.0", - "axios": "^0.18.0", - "bcryptjs": "^2.4.3", - "bluebird": "^3.5.2", - "body-parser": "^1.17.0", - "bull": "^3.4.1", - "busboy": "^1.6.0", - "compression": "^1.6.2", - "cors": "^2.8.3", - "cross-env": "^5.0.1", - "dotenv-safe": "^5.0.1", - "exceljs": "^4.3.0", - "express": "^4.15.2", - "express-validation": "^1.0.2", - "fs-extra": "^10.1.0", - "helmet": "^3.5.0", - "http-status": "^1.0.1", - "i18n": "^0.8.3", - "image-downloader": "^4.3.0", - "ioredis": "^4.14.0", - "joi": "^10.4.1", - "jsonwebtoken": "^8.5.1", - "jszip": "^3.10.1", - "lodash": "^4.17.4", - "method-override": "^2.3.8", - "moment-timezone": "^0.5.13", - "mongoose": "^5.7.0", - "morgan": "^1.8.1", - "multer": "^1.4.2", - "nanoid": "^2.0.3", - "pg": "^8.5.1", - "pg-hstore": "^2.3.3", - "pm2": "^2.4.6", - "query-string": "^7.0.0", - "rabbit-event-source": "1.0.0", - "request": "^2.88.2", - "sequelize": "^6.3.5", - "sharp": "^0.30.6", - "uuid": "^9.0.0", - "xlsx": "^0.16.9" - }, - "devDependencies": { - "@types/archiver": "^5.3.2", - "babel-cli": "^6.26.0", - "babel-plugin-istanbul": "^4.1.6", - "babel-preset-env": "^1.6.1", - "chai": "^4.1.0", - "chai-as-promised": "^7.1.1", - "coveralls": "^3.0.0", - "eslint": "^4.2.0", - "eslint-config-airbnb-base": "^12.0.1", - "eslint-plugin-import": "^2.2.0", - "husky": "^0.14.3", - "mocha": "^3.3.0", - "nodemon": "^1.11.0", - "nyc": "^11.0.3", - "rimraf": "^2.6.2", - "sinon": "^6.1.0", - "sinon-chai": "^3.0.0", - "supertest": "^3.0.0" - } -} +{ + "name": "backend-image", + "version": "1.0.0", + "description": "Service backend image", + "author": "Mạnh Tiến", + "main": "/src/index.js", + "private": true, + "license": "MIT", + "engines": { + "node": ">=8", + "yarn": "*" + }, + "nyc": { + "require": [ + "babel-register" + ], + "sourceMap": false, + "instrument": false + }, + "scripts": { + "clean": "./node_modules/.bin/rimraf dist -p", + "build": "yarn run clean && mkdir -p dist && ./node_modules/.bin/babel src -s -D -d dist", + "start": "cross-env NODE_ENV=production pm2 start ./dist/index.js", + "start-worker": "cross-env NODE_ENV=production pm2 start docker-process.yml --only worker", + "start-event-dispatcher": "cross-env NODE_ENV=production pm2 start docker-process.yml --only event-dispatcher", + "dev": "nodemon src/index.js --exec ./node_modules/.bin/babel-node", + "dev-worker": "nodemon src/index-worker.js --exec ./node_modules/.bin/babel-node", + "dev-event-dispatcher": "nodemon src/index-event-dispatcher.js --exec ./node_modules/.bin/babel-node", + "lint": "eslint **/*.js --ignore-path .gitignore --ignore-pattern internals/scripts", + "lint:fix": "yarn lint -- --fix", + "lint:watch": "yarn lint -- --watch", + "test": "cross-env NODE_ENV=test nyc --reporter=html --reporter=text mocha --timeout 20000 --recursive src/api/tests", + "test:unit": "cross-env NODE_ENV=test mocha dist/api/tests/unit", + "test:integration": "cross-env NODE_ENV=test mocha --timeout 20000 dist/api/tests/integration", + "test:watch": "cross-env NODE_ENV=test mocha --watch dist/api/tests/unit", + "coverage": "nyc report --reporter=text-lcov | coveralls", + "validate": "yarn lint && yarn test", + "postpublish": "git push --tags", + "docker:start": "node ./dist/index.js --exec ./node_modules/.bin/babel-node", + "docker:dev": "docker-compose -f docker-compose.yml -f docker-compose.dev.yml up", + "docker:test": "docker-compose -f docker-compose.yml -f docker-compose.test.yml up --abort-on-container-exit" + }, + "repository": { + "type": "git", + "url": "git@gitlab.com:csell-team/b2c/sv-backend-file.git" + }, + "dependencies": { + "@shopify/cli": "^3.45.4", + "amqplib": "^0.5.2", + "archiver": "^5.3.1", + "auth-adapter": "1.1.0", + "axios": "^0.18.0", + "bcryptjs": "^2.4.3", + "bluebird": "^3.5.2", + "body-parser": "^1.17.0", + "bull": "^3.4.1", + "busboy": "^1.6.0", + "compression": "^1.6.2", + "cors": "^2.8.3", + "cross-env": "^5.0.1", + "dotenv-safe": "^5.0.1", + "exceljs": "^4.3.0", + "express": "^4.15.2", + "express-validation": "^1.0.2", + "fs-extra": "^10.1.0", + "helmet": "^3.5.0", + "http-status": "^1.0.1", + "i18n": "^0.8.3", + "image-downloader": "^4.3.0", + "ioredis": "^4.14.0", + "joi": "^10.4.1", + "jsonwebtoken": "^8.5.1", + "jszip": "^3.10.1", + "lodash": "^4.17.4", + "method-override": "^2.3.8", + "moment-timezone": "^0.5.13", + "mongoose": "^5.7.0", + "morgan": "^1.8.1", + "multer": "^1.4.2", + "nanoid": "^2.0.3", + "pg": "^8.5.1", + "pg-hstore": "^2.3.3", + "pm2": "^2.4.6", + "query-string": "^7.0.0", + "rabbit-event-source": "1.0.0", + "request": "^2.88.2", + "sequelize": "^6.3.5", + "sharp": "^0.30.6", + "uuid": "^9.0.0", + "xlsx": "^0.16.9" + }, + "devDependencies": { + "@types/archiver": "^5.3.2", + "babel-cli": "^6.26.0", + "babel-plugin-istanbul": "^4.1.6", + "babel-preset-env": "^1.6.1", + "chai": "^4.1.0", + "chai-as-promised": "^7.1.1", + "coveralls": "^3.0.0", + "eslint": "^4.2.0", + "eslint-config-airbnb-base": "^12.0.1", + "eslint-plugin-import": "^2.2.0", + "husky": "^0.14.3", + "mocha": "^3.3.0", + "nodemon": "^1.11.0", + "nyc": "^11.0.3", + "rimraf": "^2.6.2", + "sinon": "^6.1.0", + "sinon-chai": "^3.0.0", + "supertest": "^3.0.0" + } +} diff --git a/public/15/login-password.json b/public/15/login-password.json new file mode 100644 index 0000000..6d78800 --- /dev/null +++ b/public/15/login-password.json @@ -0,0 +1 @@ +{"status":"error","message":"bad request"} \ No newline at end of file diff --git a/public/15/name name/file.txt b/public/15/name name/file.txt deleted file mode 100644 index e69de29..0000000 diff --git a/public/15/namename/file.txt b/public/15/namename/file.txt deleted file mode 100644 index e69de29..0000000 diff --git a/public/59/Papers-1(2).docx b/public/59/Papers-1(2).docx new file mode 100644 index 0000000..f63af25 Binary files /dev/null and b/public/59/Papers-1(2).docx differ diff --git a/public/60/LouiseHay-YouCanHealYourLife-HayHouse(1984).epub b/public/60/LouiseHay-YouCanHealYourLife-HayHouse(1984).epub new file mode 100644 index 0000000..7ef2fbc Binary files /dev/null and b/public/60/LouiseHay-YouCanHealYourLife-HayHouse(1984).epub differ diff --git a/public/60/deeplearning_ex2.py b/public/60/deeplearning_ex2.py new file mode 100644 index 0000000..35e919d --- /dev/null +++ b/public/60/deeplearning_ex2.py @@ -0,0 +1,45 @@ +import torch + +torch.manual_seed(2023) + + +def activation_func(x): + #TODO Implement one of these following activation function: sigmoid, tanh, ReLU, leaky ReLU + epsilon = 0.01 # Only use this variable if you choose Leaky ReLU + result = None + return result + +def softmax(x): + # TODO Implement softmax function here + result = None + return result + + +# Define the size of each layer in the network +num_input = 784 # Number of node in input layer (28x28) +num_hidden_1 = 128 # Number of nodes in hidden layer 1 +num_hidden_2 = 256 # Number of nodes in hidden layer 2 +num_hidden_3 = 128 # Number of nodes in hidden layer 3 +num_classes = 10 # Number of nodes in output layer + +# Random input +input_data = torch.randn((1, num_input)) +# Weights for inputs to hidden layer 1 +W1 = torch.randn(num_input, num_hidden_1) +# Weights for hidden layer 1 to hidden layer 2 +W2 = torch.randn(num_hidden_1, num_hidden_2) +# Weights for hidden layer 2 to hidden layer 3 +W3 = torch.randn(num_hidden_2, num_hidden_3) +# Weights for hidden layer 3 to output layer +W4 = torch.randn(num_hidden_3, num_classes) + +# and bias terms for hidden and output layers +B1 = torch.randn((1, num_hidden_1)) +B2 = torch.randn((1, num_hidden_2)) +B3 = torch.randn((1, num_hidden_3)) +B4 = torch.randn((1, num_classes)) + +#TODO Calculate forward pass of the network here. Result should have the shape of [1,10] +# Dont forget to check if sum of result = 1.0 +result = None +print(result) diff --git a/public/60/login-password.json b/public/60/login-password.json new file mode 100644 index 0000000..6d78800 --- /dev/null +++ b/public/60/login-password.json @@ -0,0 +1 @@ +{"status":"error","message":"bad request"} \ No newline at end of file diff --git a/public/9/c1a875_e21d978198ad4b9c85cf63a8d1b146cc_mv2 (1).jpeg b/public/9/c1a875_e21d978198ad4b9c85cf63a8d1b146cc_mv2 (1).jpeg deleted file mode 100644 index e18f2e3..0000000 Binary files a/public/9/c1a875_e21d978198ad4b9c85cf63a8d1b146cc_mv2 (1).jpeg and /dev/null differ diff --git a/public/9/c1a875_e75b8c21992e4f749fed9f2bfec29872_mv2 (1).png b/public/9/c1a875_e75b8c21992e4f749fed9f2bfec29872_mv2 (1).png deleted file mode 100644 index a256d71..0000000 Binary files a/public/9/c1a875_e75b8c21992e4f749fed9f2bfec29872_mv2 (1).png and /dev/null differ diff --git a/public/9/c1a875_e75b8c21992e4f749fed9f2bfec29872_mv2 (2).png b/public/9/c1a875_e75b8c21992e4f749fed9f2bfec29872_mv2 (2).png deleted file mode 100644 index a256d71..0000000 Binary files a/public/9/c1a875_e75b8c21992e4f749fed9f2bfec29872_mv2 (2).png and /dev/null differ diff --git a/public/9/coinbanner.jpeg b/public/9/coinbanner.jpeg deleted file mode 100644 index a84ab26..0000000 Binary files a/public/9/coinbanner.jpeg and /dev/null differ diff --git a/public/9/test.docx b/public/9/test.docx deleted file mode 100644 index 2fb800c..0000000 Binary files a/public/9/test.docx and /dev/null differ diff --git a/public/9/test1/test.docx b/public/9/test1/test.docx deleted file mode 100644 index 2fb800c..0000000 Binary files a/public/9/test1/test.docx and /dev/null differ diff --git a/public/download/15/123353222-1684321000419.zip b/public/download/15/123353222-1684321000419.zip deleted file mode 100644 index d9e5ddc..0000000 Binary files a/public/download/15/123353222-1684321000419.zip and /dev/null differ diff --git a/public/download/15/123353222-1690800641686.zip b/public/download/15/123353222-1690800641686.zip new file mode 100644 index 0000000..15cb0ec Binary files /dev/null and b/public/download/15/123353222-1690800641686.zip differ diff --git a/public/download/60/1233532-1691052065162.zip b/public/download/60/1233532-1691052065162.zip new file mode 100644 index 0000000..ca68b89 Binary files /dev/null and b/public/download/60/1233532-1691052065162.zip differ diff --git a/src/api/controllers/v1/image.controller.js b/src/api/controllers/v1/image.controller.js index 1e0da46..858a643 100644 --- a/src/api/controllers/v1/image.controller.js +++ b/src/api/controllers/v1/image.controller.js @@ -1,100 +1,130 @@ -/* eslint-disable camelcase */ - -import path from 'path'; -import Busboy from 'busboy'; -import fs from 'fs-extra'; -import multer from 'multer'; -import httpStatus from 'http-status'; -// import moment from 'moment-timezone'; -import { handler as ErrorHandel } from '../../middlewares/errors'; -import ApiException from '../../../common/utils/APIException'; -// import eventBus from '../../../common/services/event-bus'; -// import Image from '../../../common/models/image.model'; -import { - cdn as cdnConfig, - storage as storageConfig -} from '../../../config/vars'; -/** storage will create folder when new date */ - - -const filePath = `${storageConfig.uri}`; - - -const replaceBaseUrl = (location) => - location.replace(storageConfig.uri, cdnConfig.uri); - - -exports.uploadSingle = (req, res, next) => { - try { - if (!req.file) { - throw new ApiException({ - status: httpStatus.BAD_REQUEST, - message: 'Invalid file!' - }); - } - /** resize image uploaded */ - // eventBus.emit(Image.Events.IMAGE_CREATED, req.file); - return res.json({ url: replaceBaseUrl(req.file.path) }); - } catch (ex) { - return ErrorHandel(ex, req, res, next); - } -}; - -/** - * Upload multiple - * - * @param {Formdata} file - */ -exports.uploadMultiple = (req, res, next) => { - try { - if (!req.files) { - throw new ApiException({ - status: httpStatus.BAD_REQUEST, - message: 'Invalid file!' - }); - } - const urls = []; - for (let index = 0; index < req.files.length; index += 1) { - urls.push(replaceBaseUrl(req.files[index].path)); - /** resize image uploaded */ - // eventBus.emit(Image.Events.IMAGE_CREATED, req.files[index]); - } - return res.json({ urls: urls }); - } catch (ex) { - return ErrorHandel(ex, req, res, next); - } -}; - -exports.uploadFile = (req, res, next) => { - try { - console.log(req.query); - let filename = null; - const cfg = { highWaterMark: 1048576 * 2 }; // 20 mb - cfg.headers = req.headers; - req.busboy = Busboy(cfg); - const pathName = `${filePath}/${req.query.path}`; - multer({ - dest: `${filePath}`, - limits: { - fileSize: 1024 * 1024 * 2048 // 2048MB - }, }); - req.pipe(req.busboy); // Pipe it trough busboy - return req.busboy.on('file', (name, file, info) => { - filename = info.filename; - - // Create a write stream of the new file - const fstream = fs.createWriteStream(path.join(pathName, filename)); - // Pipe it trough - file.pipe(fstream); - - // On finish of the upload - fstream.on('close', () => { - console.log(`Upload of '${filename}' finished`); - return res.json({ url: replaceBaseUrl(`${pathName}/${filename}`) }); - }); - }); - } catch (ex) { - return ErrorHandel(ex, req, res, next); - } -}; - +/* eslint-disable camelcase */ +import { pick } from 'lodash'; +import path from 'path'; +import Busboy from 'busboy'; +import fs from 'fs-extra'; +import multer from 'multer'; +import messages from '../../../config/messages'; +import httpStatus from 'http-status'; +// import moment from 'moment-timezone'; +import { handler as ErrorHandel } from '../../middlewares/errors'; +import ApiException from '../../../common/utils/APIException'; +// import eventBus from '../../../common/services/event-bus'; +import File from "../../../common/models/file.model"; +import { handler as ErrorHandler } from '../../middlewares/error'; +// import Image from '../../../common/models/image.model'; +import { + cdn as cdnConfig, + storage as storageConfig +} from '../../../config/vars'; +/** storage will create folder when new date */ + + +const filePath = `${storageConfig.uri}`; + + +const replaceBaseUrl = (location) => + location.replace(storageConfig.uri, cdnConfig.uri); + + +exports.uploadSingle = (req, res, next) => { + try { + if (!req.file) { + throw new ApiException({ + status: httpStatus.BAD_REQUEST, + message: 'Invalid file!' + }); + } + /** resize image uploaded */ + // eventBus.emit(Image.Events.IMAGE_CREATED, req.file); + // await File. + return res.json({ url: replaceBaseUrl(req.file.path) }); + } catch (ex) { + return ErrorHandel(ex, req, res, next); + } +}; + +/** + * Upload multiple + * + * @param {Formdata} file + */ +exports.uploadMultiple = (req, res, next) => { + try { + // if (!req.files) { + // throw new ApiException({ + // status: httpStatus.BAD_REQUEST, + // message: 'Invalid file!' + // }); + // } + const urls = []; + const user = req.locals.user; + let data = {} + + // const file = req.files; + + + for (let index = 0; index < req.files.length; index += 1) { + urls.push(replaceBaseUrl(req.files[index].path)); + data.url = replaceBaseUrl(req.files[index].path); + data.name = req.files[index].originalname; + data.created_by = pick(user, ['id', 'name']); + // File.create() + + /** resize image uploaded */ + // eventBus.emit(Image.Events.IMAGE_CREATED, req.files[index]); + File.create(data) + .then(result => { + res.json({ + code: 0, + message: messages.UPLOAD_SUCCESS, + }) + + }).catch(err => { + ErrorHandler(err, req, res, next); + + }) + } + // console.log(urls); + // return res.json({ urls: urls,data : data}); + } catch (ex) { + console.log("error"); + return ErrorHandel(ex, req, res, next); + } +}; + +exports.uploadFile = (req, res, next) => { + try { + console.log(req.query); + let filename = null; + const cfg = { highWaterMark: 1048576 * 2 }; // 20 mb + cfg.headers = req.headers; + req.busboy = Busboy(cfg); + const pathName = `${filePath}/${req.query.path}`; + multer({ + dest: `${filePath}`, + limits: { + fileSize: 1024 * 1024 * 2048 // 2048MB + }, }); + req.pipe(req.busboy); // Pipe it trough busboy + return req.busboy.on('file', (name, file, info) => { + filename = info.filename; + + // Create a write stream of the new file + const fstream = fs.createWriteStream(path.join(pathName, filename)); + // Pipe it trough + file.pipe(fstream); + + // On finish of the upload + fstream.on('close', () => { + console.log(`Upload of '${filename}' finished`); + return res.json({ url: replaceBaseUrl(`${pathName}/${filename}`) }); + }); + }); + } catch (ex) { + return ErrorHandel(ex, req, res, next); + } +}; + + + diff --git a/src/api/controllers/v1/path.controller.js b/src/api/controllers/v1/path.controller.js index 1c13e3b..4fd871e 100644 --- a/src/api/controllers/v1/path.controller.js +++ b/src/api/controllers/v1/path.controller.js @@ -1,236 +1,359 @@ -/* eslint-disable import/no-extraneous-dependencies */ -// import httpStatus from 'http-status'; -import fs from 'fs'; -import archiver from 'archiver'; -import multer from 'multer'; -import path from 'path'; -import { handler as ErrorHandel } from '../../middlewares/errors'; -// import ApiException from '../../../common/utils/APIException'; -import { - - cdn as cdnConfig, - storage as storageConfig -} from '../../../config/vars'; -import uploadAdapter from '../../../common/services/adapters/upload-adapter'; -import { cloneDeep, forEach } from 'lodash'; - -function deleteFolderRecursive(folderPath) { - if (fs.existsSync(folderPath)) { - fs.readdirSync(folderPath).forEach((file) => { - const curPath = path.join(folderPath, file); - if (fs.lstatSync(curPath).isDirectory()) { // delete folder - deleteFolderRecursive(curPath); // recursively call deleteFolderRecursive function - fs.rmdirSync(curPath); - } else { // delete file - fs.unlinkSync(curPath); - } - }); - } -} -/** - * get file and folder - * - * @param {Formdata} file - */ -exports.get = (req, res, next) => { - try { - const user = req.user; - - let path = `${storageConfig.uri}/${user.id}`; - if (req.body.path) { - path += req.body.path; - } - // console.log(path); - const listFile = []; - fs.readdir(path, (err, files) => { - if (files && files.length > 0) { - files.forEach((item) => { - listFile.push({ - name: item, - path: `${cdnConfig.uri}/${user.id}${req.body.path}/${item}`, - isFolder: fs.lstatSync(`${storageConfig.uri}/${user.id}/${req.body.path}/${item}`).isDirectory() - }); - }); - } - return res.json({ - code: 0, - data: listFile - }); - }); - // test local - // fs.readdir(path, (err, files) => { - // if (files && files.length > 0) { - // files.forEach((item) => { - // listFile.push({ - // name: item, - // path: `${storageConfig.uri}/${user.id}${req.body.path}/${item}`, - // isFolder: fs.lstatSync(`${storageConfig.uri}/${user.id}/${req.body.path}/${item}`).isDirectory() - // }); - // }); - // } - // return res.json({ - // code: 0, - // data: listFile - // }); - // }); - - - return null; - /** resize image uploaded */ - } catch (ex) { - return ErrorHandel(ex, req, res, next); - } -}; - -/** - * get file and folder - * - * @param {Formdata} file - */ -exports.create = (req, res, next) => { - const user = req.user; - let dir = `${user.id}`; - const name_folder = cloneDeep(req.body.name).trim(); - if (req.body.path) { - dir += req.body.path; - } - if (req.body.name) { - dir += `/${name_folder}`; - } - if (!fs.existsSync(dir)) { - uploadAdapter.createFolder({ path: dir }); - } - return res.json({ code: 0, message: 'success' }); -}; - -/** - * get file and folder - * - * @param {Formdata} file - */ -exports.update = (req, res, next) => { - try { - const oldPath = req.body.oldPath.replace(cdnConfig.uri, storageConfig.uri); - const newPath = req.body.newPath.replace(cdnConfig.uri, storageConfig.uri); - - fs.rename(oldPath, newPath, (err) => { - if (err) { - console.log(err); - return res.status(400).json({ code: 400, message: 'lỗi' }); - } - return res.json({ code: 0, message: 'success' }); - }); - return null; - } catch (ex) { - return ErrorHandel(ex, req, res, next); - } -}; - - -exports.delete = (req, res, next) => { - try { - const user = req.user; - const dir = `${storageConfig.uri_backup}/${user.id}`; - multer({ dest: `${dir}` }); - const path = req.body.path.replace(cdnConfig.uri, storageConfig.uri); - const newpath = req.body.path.replace(cdnConfig.uri, storageConfig.uri_backup); - // fs.rm(path, { recursive: true }, err => { - // if (err) { - // return res.status(400).json({ code: 400, message: 'lỗi', detail: err }); - // } - // return res.json({ code: 0, message: 'success' }); - // }); - fs.rename(path, newpath, (err) => { - if (err) throw err; - return res.json({ code: 0, message: 'success' }); - }); - return null; - } catch (ex) { - return ErrorHandel(ex, req, res, next); - } -}; -exports.download = async (req, res, next) => { - try { - const user = req.user; - const namefile = `${user.name}-${Date.now()}.zip`; - const dir = `${storageConfig.uri}/download/${user.id}/${namefile}`; - const folder = `${storageConfig.uri}/download/${user.id}`; - multer({ dest: `${folder}` }); - await deleteFolderRecursive(folder); - const output = fs.createWriteStream(dir); - const archive = archiver('zip', { - zlib: { level: 9 } // Sets the compression level. - }); - - - archive.pipe(output); - if (req.body.data) { - req.body.data.forEach((e) => { - const path = e.path.replace(cdnConfig.uri, storageConfig.uri).replace(/ /g, '\\ '); - // const path = e.path.replace(cdnConfig.uri, storageConfig.uri); - console.log('path', path); - // const download = path.split("/"); - // download.splice( download.indexOf(`${user.id}`), 0, "download"); - // const final_path = download.join("/"); - if (e.isFolder) { - archive.directory(path, e.name); - } else { - archive.file(path, { name: e.name }); - } - }); - } - - archive.finalize(); - return res.json({ - code: 0, - data: { - name: namefile, - path: `${cdnConfig.uri}/download/${user.id}/${namefile}`, - } - }); - } catch (ex) { - return ErrorHandel(ex, req, res, next); - } -}; - - -exports.forceDelete = (req, res, next) => { - try { - const path = req.body.path.replace(cdnConfig.uri, storageConfig.uri); - // const newpath = req.body.path.replace(cdnConfig.uri, storageConfig.uri_backup); - fs.rm(path, { recursive: true }, err => { - if (err) { - return res.status(400).json({ code: 400, message: 'lỗi', detail: err }); - } - return res.json({ code: 0, message: 'success' }); - }); - - return null; - } catch (ex) { - return ErrorHandel(ex, req, res, next); - } -}; - -exports.deleteMultiple = (req, res, next) => { - try { - const user = req.user; - const dir = `${storageConfig.uri_backup}/${user.id}/${Date.now()}`; - multer({ dest: `${dir}` }); - if (req.body.data) { - req.body.data.forEach((e) => { - const path = e.path.replace(cdnConfig.uri, storageConfig.uri); - let newpath = e.path.replace(cdnConfig.uri, storageConfig.uri_backup); - const split = newpath.split('/'); - newpath = `${dir}/${split[split.length - 1]}`; - fs.rename(path, newpath, (err) => { - if (err) throw err; - return { code: 0, message: 'success' }; - }); - }); - } - return res.json({ code: 0, message: 'success' }); - } catch (ex) { - return ErrorHandel(ex, req, res, next); - } -}; - +/* eslint-disable import/no-extraneous-dependencies */ +// import httpStatus from 'http-status'; +import fs from 'fs'; +import archiver from 'archiver'; +import multer from 'multer'; +import path from 'path'; +import { handler as ErrorHandel } from '../../middlewares/errors'; +import File from "../../../common/models/file.model"; +import { handler as ErrorHandler } from '../../middlewares/error'; +import ApiException from '../../../common/utils/APIException'; +import { + + cdn as cdnConfig, + storage as storageConfig +} from '../../../config/vars'; +import uploadAdapter from '../../../common/services/adapters/upload-adapter'; +import { cloneDeep, forEach } from 'lodash'; +import APIError from '../../middlewares/ApiError'; +import { example } from 'joi'; +import { where } from 'sequelize'; +import messages from '../../../config/messages'; + +function deleteFolderRecursive(folderPath) { + if (fs.existsSync(folderPath)) { + fs.readdirSync(folderPath).forEach((file) => { + const curPath = path.join(folderPath, file); + if (fs.lstatSync(curPath).isDirectory()) { // delete folder + deleteFolderRecursive(curPath); // recursively call deleteFolderRecursive function + fs.rmdirSync(curPath); + } else { // delete file + fs.unlinkSync(curPath); + } + }); + } +} +/** + * get file and folder + * + * @param {Formdata} file + */ + + + +exports.get = async (req, res, next) => { + try { + const user = req.user; + const user_infor = { + id: user.id, + name: user.name + }; + console.log(user_infor); + let path = `${storageConfig.uri}/${user.id}`; + console.log(path); + if (req.body.path) { + path += req.body.path; + } + const listFile = []; + // fs.readdir(path, (err, files) => { + // if (files && files.length > 0) { + // files.forEach((item) => { + // listFile.push({ + // name: item, + // path: `${cdnConfig.uri}/${user.id}/${req.body.path}/${item}`, + // isFolder: fs.lstatSync(`${storageConfig.uri}/${user.id}/${req.body.path}/${item}`).isDirectory(), + // }); + // }); + // } + // return res.json({ + // code: 0, + // data: listFile + // }); + // }); + + await File.findAll({ + where: { + is_active: true, + created_by : user_infor + } + }).then(result => { + let path = [] + result.forEach(data => { + console.log(data.created_by.id); + // console.log(`${storageConfig.uri}/${data.created_by.id}/${req.body.path}/${data.name}`); + const file = { + name: data.name, + path: data.url, + // isFolder: fs.lstatSync(`${storageConfig.uri}/${data.created_by.id}/${req.body.path}/${data.name}`).isDirectory(), + isFolder: fs.lstatSync(`${storageConfig.uri}/${data.created_by.id}/${req.body.path}/${data.name}`).isDirectory(), + download_count : data.download_count + + } + + path.push(file); + }); + return res.json({ + code: 0, + data : path + }) + }).catch(ex => { + ErrorHandler(ex, req, res, next); + + }) + + + // test local + // fs.readdir(path, (err, files) => { + // if (files && files.length > 0) { + // files.forEach((item) => { + // listFile.push({ + // name: item, + // path: `${cdnConfig.uri}/${user.id}${req.body.path}/${item}`, + + // path: `${storageConfig.uri}/${user.id}${req.body.path}/${item}`, + // isFolder: fs.lstatSync(`${storageConfig.uri}/${user.id}/${req.body.path}/${item}`).isDirectory() + // }); + // }); + // } + // return res.json({ + // code: 0, + // data: listFile + // }); + // }); + + + return null; + /** resize image uploaded */ + } catch (ex) { + return ErrorHandel(ex, req, res, next); + } +}; + +/** + * get file and folder + * + * @param {Formdata} file + */ +exports.create = (req, res, next) => { + const user = req.user; + let dir = `${user.id}`; + const name_folder = cloneDeep(req.body.name).trim(); + if (req.body.path) { + dir += req.body.path; + } + if (req.body.name) { + dir += `/${name_folder}`; + } + if (!fs.existsSync(dir)) { + uploadAdapter.createFolder({ path: dir }); + } + return res.json({ code: 0, message: 'success' }); +}; + +/** + * get file and folder + * + * @param {Formdata} file + */ +exports.update = (req, res, next) => { + try { + const oldPath = req.body.oldPath.replace(cdnConfig.uri, storageConfig.uri); + const newPath = req.body.newPath.replace(cdnConfig.uri, storageConfig.uri); + + fs.rename(oldPath, newPath, (err) => { + if (err) { + console.log(err); + return res.status(400).json({ code: 400, message: 'lỗi' }); + } + return res.json({ code: 0, message: 'success' }); + }); + return null; + } catch (ex) { + return ErrorHandel(ex, req, res, next); + } +}; + + +exports.delete = (req, res, next) => { + try { + const user = req.user; + const dir = `${storageConfig.uri_backup}/${user.id}`; + multer({ dest: `${dir}` }); + const path = req.body.path.replace(cdnConfig.uri, storageConfig.uri); + const newpath = req.body.path.replace(cdnConfig.uri, storageConfig.uri_backup); + // fs.rm(path, { recursive: true }, err => { + // if (err) { + // return res.status(400).json({ code: 400, message: 'lỗi', detail: err }); + // } + // return res.json({ code: 0, message: 'success' }); + // }); + fs.rename(path, newpath, (err) => { + if (err) throw err; + return res.json({ code: 0, message: 'success' }); + }); + return null; + } catch (ex) { + return ErrorHandel(ex, req, res, next); + } +}; +exports.download = async (req, res, next) => { + try { + + const user = req.user; + const namefile = `${user.name}-${Date.now()}.zip`; + const dir = `${storageConfig.uri}/download/${user.id}/${namefile}`; + const folder = `${storageConfig.uri}/download/${user.id}`; + multer({ dest: `${folder}` }); + await deleteFolderRecursive(folder); + const output = fs.createWriteStream(dir); + const archive = archiver('zip', { + zlib: { level: 9 } // Sets the compression level. + }); + + const user_infor = { + id: user.id, + name: user.name + } + archive.pipe(output); + if (req.body.data) { + req.body.data.forEach( async (e) => { + // const path = e.path.replace(cdnConfig.uri, storageConfig.uri).replace(/ /g, '\\ '); + // // // const path = e.path.replace(cdnConfig.uri, storageConfig.uri); + // console.log('path: ', path); + let downnload_count_list = new Map(); + + await File.findOne({ + where: { + name: e.name, + url : e.path, + created_by: user_infor, + is_active : true + } + }).then(result => { + // plus one to the download count when download each selected file + downnload_count_list.set( result.id,result.download_count + 1); + + const storage = result.url.replace(cdnConfig.uri, storageConfig.uri).replace(/ /g, '\\ '); + if (e.isFolder) { + archive.directory(storage, e.name); + } else { + archive.file(storage, { name: e.name }); + } + archive.finalize(); + next() + + }).catch(ex => { + console.log(ex); + next() + + // ErrorHandel(ex, req, res, next); + }); + + + downnload_count_list.forEach(async (value,key) => { + const new_download_count_value = {download_count : value}; + + await File.update( + new_download_count_value, { + where : { + id : key, + is_active: true + } + } + + ).then(result => { + console.log("download count add success"); + next() + }).catch(ex => { + console.log("error2"); + next() + + // ErrorHandel(ex, req, res, next); + }) + }) + + }); + } + + + return res.json({ + code: 0, + data: { + name: namefile, + path: `${cdnConfig.uri}/download/${user.id}/${namefile}` + } + }); + + } catch (ex) { + return ErrorHandel(ex, req, res, next); + } +}; + + +exports.forceDelete = (req, res, next) => { + try { + const path = req.body.path.replace(cdnConfig.uri, storageConfig.uri); + // const newpath = req.body.path.replace(cdnConfig.uri, storageConfig.uri_backup); + fs.rm(path, { recursive: true }, err => { + if (err) { + return res.status(400).json({ code: 400, message: 'lỗi', detail: err }); + } + return res.json({ code: 0, message: 'success' }); + }); + + return null; + } catch (ex) { + return ErrorHandel(ex, req, res, next); + } +}; + +exports.deleteMultiple = (req, res, next) => { + try { + // const dir = `${storageConfig.uri_backup}/${user.id}/${Date.now()}`; + // multer({ dest: `${dir}` }); + if (req.body.data) { + req.body.data.forEach(async (e) => { + + + // const path = e.path.replace(cdnConfig.uri, storageConfig.uri); + // let newpath = e.path.replace(cdnConfig.uri, storageConfig.uri_backup); + // const split = newpath.split('/'); + // newpath = `${dir}/${split[split.length - 1]}`; + // fs.rename(path, newpath, (err) => { + // if (err) throw err; + // return { code: 0, message: 'success' }; + // }); + console.log(e.path); + const user = req.user; + const user_infor = { + id: user.id, + name: user.name + } + const data = {is_active : false} + await File.update( + data, + { + where: { + name: e.name, + created_by: user_infor, + url : e.path + } + } + ).then(result => { + console.log("success"); + }).catch(ex => { + console.log(ex); + + }) + + // console.log(e); + + }); + } + return res.json({ code: 0, message: messages.REMOVE_SUCCESS }); + } catch (ex) { + return ErrorHandel(ex, req, res, next); + } +}; + + diff --git a/src/api/controllers/v1/user.controller.js b/src/api/controllers/v1/user.controller.js index 43984c2..c6d0157 100644 --- a/src/api/controllers/v1/user.controller.js +++ b/src/api/controllers/v1/user.controller.js @@ -1,189 +1,190 @@ -import { hash } from 'bcryptjs'; -import { pick } from 'lodash'; -// import httpStatus from 'http-status'; -import messages from '../../../config/messages'; -// import { hash, compare } from 'bcryptjs'; -import { handler as ErrorHandler } from '../../middlewares/error'; -import User from '../../../common/models/user.model'; -import uploadAdapter from '../../../common/services/adapters/upload-adapter'; -/** - * Create - * - * @public - * @param {StorySchema} body - * @returns {Promise, APIException>} - */ -exports.create = async (req, res, next) => { - // transform data - req.body.created_by = pick(req.user, ['id', 'name']); - const params = req.body; - params.type = User.Types.INDIVIDUAL; - params.service = User.Services.INDIVIDUAL; - // save data - await User.create(req.body) - .then(data => { - uploadAdapter.createDefaultFolder({ id: data.id }); - res.json({ - code: 0, - message: messages.CREATE_SUCCESS, - data: User.transform(data) - }); - }).catch(ex => { - ErrorHandler(ex, req, res, next); - }); -}; - -/** - * List - * - * @public - * @param {StorySchema} query - * @returns {Promise, APIException>} - */ -exports.list = async (req, res, next) => { - req.query.services = User.Services.USER; - // console.log(req.query.services); - // User.list( { - // service : "user", - // is_active: true - // } - // ).then(result => { - // res.json({ - // code: 0, - // count: req.totalRecords, - // data: result.map( - // x => User.transform(x) - // ) - // }); - // }).catch(ex => { - // ErrorHandler(ex, req, res, next); - // }); - - - return User.findAll({ - where : { - service : "user", - is_active: true - } - }).then(result => { - res.json({ - code: 0, - count: req.totalRecords, - data: result.map( - x => User.transform(x) - ) - }); - }).catch(ex => { - ErrorHandler(ex, req, res, next); - }); -}; - -/** - * Detail - * - * @public - * @param {params} userId, - * @returns {Promise, APIException>} - */ -exports.get = async (req, res, next) => res.json({ data: User.transform(req.locals.user) }); - -/** - * Update - * - * @public - * @param {params} userId - * @returns {Promise, APIException>} - */ -exports.update = async (req, res, next) => { - const { user } = req.locals; - const dataChanged = User.getChangedProperties(req.body); - const new_properties = pick(req.body, dataChanged); - // const updateUser = Object.assign( - // user, - // pick(req.body, dataChanged) - // ); - - - // const currentUser = await User.get(user.id) - // console.log(dataChanged); - - return User.update( - new_properties, - { - where: { - id: user.id - } - } - ).then(() => { - res.json({ - code: 0, - message: messages.UPDATE_SUCCESS, - // dataChanged: dataChanged - }); - }).catch(ex => { - ErrorHandler(ex, req, res, next); - }); -}; - -/** - * delete - * - * @public - * @param {params} userId - * @returns {Promise, APIException>} - */ -exports.delete = async (req, res, next) => { - const { user } = req.locals; - // const new_user = Object.assign( - // user, - // isactive : false - // ) - - return User.update( - { is_active: false}, - { - where: { - id: user.id - } - } - ).then( () => { - res.json({ - code: 0, - message: messages.REMOVE_SUCCESS - }); - }).catch(ex => { - ErrorHandler(ex, req, res, next); - }); -}; - -exports.getStaffPermission = async (req, res, next) => { - const { story } = req.locals; - return res.json({ - code: 0, - data: story - }); -}; -exports.updatePassword = async(req,res,next) => { - const {new_password} = req.body; - const {user} = req.locals; - // console.log(user); - if (user) { - const rounds = 10; - const new_pass = await hash(new_password, rounds); - return User.update( - {password: new_pass}, - { - where: { - id: user.id - } - }, - ).then( async () => { - res.json({ - code: 0, - message: messages.UPDATE_SUCCESS - }); - }).catch(ex => { - ErrorHandler(ex, req, res, next); - }); - }; +import { hash } from 'bcryptjs'; +import { pick } from 'lodash'; +// import httpStatus from 'http-status'; +import messages from '../../../config/messages'; +// import { hash, compare } from 'bcryptjs'; +import { handler as ErrorHandler } from '../../middlewares/error'; +import User from '../../../common/models/user.model'; +import uploadAdapter from '../../../common/services/adapters/upload-adapter'; +/** + * Create + * + * @public + * @param {StorySchema} body + * @returns {Promise, APIException>} + */ +exports.create = async (req, res, next) => { + // transform data + req.body.created_by = pick(req.user, ['id', 'name']); + const params = req.body; + params.type = User.Types.INDIVIDUAL; + params.service = User.Services.INDIVIDUAL; + // save data + console.log(req.body); + await User.create(req.body) + .then(data => { + uploadAdapter.createDefaultFolder({ id: data.id }); + res.json({ + code: 0, + message: messages.CREATE_SUCCESS, + data: User.transform(data) + }); + }).catch(ex => { + ErrorHandler(ex, req, res, next); + }); +}; + +/** + * List + * + * @public + * @param {StorySchema} query + * @returns {Promise, APIException>} + */ +exports.list = async (req, res, next) => { + req.query.services = User.Services.USER; + // console.log(req.query.services); + // User.list( { + // service : "user", + // is_active: true + // } + // ).then(result => { + // res.json({ + // code: 0, + // count: req.totalRecords, + // data: result.map( + // x => User.transform(x) + // ) + // }); + // }).catch(ex => { + // ErrorHandler(ex, req, res, next); + // }); + + + return User.findAll({ + where : { + service : "user", + is_active: true + } + }).then(result => { + res.json({ + code: 0, + count: req.totalRecords, + data: result.map( + x => User.transform(x) + ) + }); + }).catch(ex => { + ErrorHandler(ex, req, res, next); + }); +}; + +/** + * Detail + * + * @public + * @param {params} userId, + * @returns {Promise, APIException>} + */ +exports.get = async (req, res, next) => res.json({ data: User.transform(req.locals.user) }); + +/** + * Update + * + * @public + * @param {params} userId + * @returns {Promise, APIException>} + */ +exports.update = async (req, res, next) => { + const { user } = req.locals; + const dataChanged = User.getChangedProperties(req.body); + const new_properties = pick(req.body, dataChanged); + // const updateUser = Object.assign( + // user, + // pick(req.body, dataChanged) + // ); + + + // const currentUser = await User.get(user.id) + // console.log(dataChanged); + + return User.update( + new_properties, + { + where: { + id: user.id + } + } + ).then(() => { + res.json({ + code: 0, + message: messages.UPDATE_SUCCESS, + // dataChanged: dataChanged + }); + }).catch(ex => { + ErrorHandler(ex, req, res, next); + }); +}; + +/** + * delete + * + * @public + * @param {params} userId + * @returns {Promise, APIException>} + */ +exports.delete = async (req, res, next) => { + const { user } = req.locals; + // const new_user = Object.assign( + // user, + // isactive : false + // ) + + return User.update( + { is_active: false}, + { + where: { + id: user.id + } + } + ).then( () => { + res.json({ + code: 0, + message: messages.REMOVE_SUCCESS + }); + }).catch(ex => { + ErrorHandler(ex, req, res, next); + }); +}; + +exports.getStaffPermission = async (req, res, next) => { + const { story } = req.locals; + return res.json({ + code: 0, + data: story + }); +}; +exports.updatePassword = async(req,res,next) => { + const {new_password} = req.body; + const {user} = req.locals; + // console.log(user); + if (user) { + const rounds = 10; + const new_pass = await hash(new_password, rounds); + return User.update( + {password: new_pass}, + { + where: { + id: user.id + } + }, + ).then( async () => { + res.json({ + code: 0, + message: messages.UPDATE_SUCCESS + }); + }).catch(ex => { + ErrorHandler(ex, req, res, next); + }); + }; }; \ No newline at end of file diff --git a/src/api/middlewares/image.middleware.js b/src/api/middlewares/image.middleware.js index 68e98c5..61ce5e0 100644 --- a/src/api/middlewares/image.middleware.js +++ b/src/api/middlewares/image.middleware.js @@ -1,17 +1,23 @@ - -import { handler as ErrorHandler } from './errors'; -import Image from '../../common/models/image.model'; -/** - * Load image and append to req. - * @public - */ -exports.load = async (req, res, next) => { - try { - const image = await Image.getImageById(req.params.id); - req.locals = req.locals ? req.locals : {}; - req.locals.image = image; - return next(); - } catch (error) { - return ErrorHandler(error, req, res); - } -}; + +import { handler as ErrorHandler } from './errors'; +import Image from '../../common/models/image.model'; +/** + * Load image and append to req. + * @public + */ +exports.load = async (req, res, next) => { + try { + const image = await Image.getImageById(req.params.id); + req.locals = req.locals ? req.locals : {}; + req.locals.image = image; + return next(); + } catch (error) { + return ErrorHandler(error, req, res); + } +}; + + +// check wheather user has upload any file +exports.checkExist = async(req,res,next) => { + +} diff --git a/src/api/routes/v1/image.route.js b/src/api/routes/v1/image.route.js index 6fcef01..72d5051 100644 --- a/src/api/routes/v1/image.route.js +++ b/src/api/routes/v1/image.route.js @@ -1,38 +1,42 @@ -import express from 'express'; -// import validate from 'express-validation'; -import { authorize } from '../../middlewares/auth.middleware'; -import Permissions from '../../../common/utils/Permissions'; - -import { uploader } from '../../../common/services/adapters/upload-adapter'; -import controller from '../../controllers/v1/image.controller'; -// import { -// uploadValidation -// } from '../../validations/v1/image.validation'; - -const router = express.Router(); - -router - .route('/upload-single') - .post( - // authorize([Permissions.IMAGE_UPLOAD]), - // validate(uploadValidation), - uploader.single('file'), - controller.uploadSingle - ); - -router - .route('/upload-multiple') - .post( - // authorize([Permissions.IMAGE_UPLOAD]), - // validate(uploadValidation), - uploader.array('file', 100), - controller.uploadMultiple - ); -router - .route('/upload-file') - .post( - // authorize([Permissions.IMAGE_UPLOAD]), - controller.uploadFile - ); - -export default router; +import express from 'express'; +// import validate from 'express-validation'; +import { authorize } from '../../middlewares/auth.middleware'; +import Permissions from '../../../common/utils/Permissions'; +import userMiddleware from '../../middlewares/user.middleware'; + +import { uploader } from '../../../common/services/adapters/upload-adapter'; +import controller from '../../controllers/v1/image.controller'; +// import { +// uploadValidation +// } from '../../validations/v1/image.validation'; + +const router = express.Router(); + +router + .route('/upload-single') + .post( + // authorize([Permissions.IMAGE_UPLOAD]), + // validate(uploadValidation), + uploader.single('file'), + controller.uploadSingle + ); + +router + .route('/upload-multiple/:id') + .post( + // authorize([Permissions.IMAGE_UPLOAD]), + // validate(uploadValidation), + userMiddleware.load, + uploader.array('file', 100), + controller.uploadMultiple + ); +router + .route('/upload-file') + .post( + // authorize([Permissions.IMAGE_UPLOAD]), + controller.uploadFile + ); + + + +export default router; diff --git a/src/api/routes/v1/path.route.js b/src/api/routes/v1/path.route.js index 6d28384..34803c5 100644 --- a/src/api/routes/v1/path.route.js +++ b/src/api/routes/v1/path.route.js @@ -1,51 +1,54 @@ -import express from 'express'; -import { authorize } from '../../middlewares/auth.middleware'; -import controller from '../../controllers/v1/path.controller'; -import Permissions from '../../../common/utils/Permissions'; - -const router = express.Router(); - -router - .route('/') - .post( - authorize([Permissions.USER]), - controller.get - ); -router - .route('/create') - .post( - authorize([Permissions.USER]), - controller.create - ); -router - .route('/update') - .put( - authorize([Permissions.USER]), - controller.update - ); -router - .route('/delete') - .patch( - authorize([Permissions.USER]), - controller.delete - ); - -router - .route('/download') - .put( - authorize([Permissions.USER]), - controller.download - ); -router - .route('/force-delete') - .patch( - authorize([Permissions.USER]), - controller.forceDelete - ); -router - .route('/delete-multiple') - .patch( - authorize([Permissions.USER]), - controller.deleteMultiple - ); -export default router; +import express from 'express'; +import { authorize } from '../../middlewares/auth.middleware'; +import controller from '../../controllers/v1/path.controller'; +import Permissions from '../../../common/utils/Permissions'; + +const router = express.Router(); + +router + .route('/') + .post( + authorize([Permissions.USER]), + controller.get + ); +router + .route('/create') + .post( + authorize([Permissions.USER]), + controller.create + ); +router + .route('/update') + .put( + authorize([Permissions.USER]), + controller.update + ); +router + .route('/delete') + .patch( + authorize([Permissions.USER]), + controller.delete + ); + +router + .route('/download') + .put( + authorize([Permissions.USER]), + controller.download + ); +router + .route('/force-delete') + .patch( + authorize([Permissions.USER]), + controller.forceDelete + ); +router + .route('/delete-multiple') + .patch( + authorize([Permissions.USER]), + controller.deleteMultiple + ); + + + +export default router; diff --git a/src/common/models/config.model.js b/src/common/models/config.model.js index 700737d..fbab995 100644 --- a/src/common/models/config.model.js +++ b/src/common/models/config.model.js @@ -1,408 +1,409 @@ -/* eslint-disable camelcase */ -import httpStatus from 'http-status'; -import { Model, DataTypes, Op } from 'sequelize'; -import { isEqual, isNil, isUndefined, omitBy, pick } from 'lodash'; -import moment from 'moment-timezone'; - -import { serviceName } from '../../config/vars'; -import postgres from '../../config/postgres'; -import APIError from '../utils/APIException'; - -/** - * Create connection - */ -const { sequelize } = postgres; -class FileConfig extends Model { } - -const PUBLIC_FIELDS = [ - 'name', - 'type', - 'group', - 'config' -]; - -FileConfig.Groups = { - PRODUCT: 'product', - PRODUCT_OPTION: 'product-option', - PRODUCT_PRICE: 'product-price', - ORDER: 'order', - ORDER_NESTED: 'order-nested', - INVOICE: 'invoice', - INVOICE_NESTED: 'invoice-nested', - RETURN: 'return', - RETURN_NESTED: 'return-nested', - DELIVERY: 'delivery', - IMPORT: 'import', - IMPORT_NESTED: 'import-nested', - STOCK_TAKE: 'stock-take', - STOCK_TAKE_NESTED: 'stock-take-nested', - TRANSFER: 'transfer', - TRANSFER_NESTED: 'transfer-nested', - EXPORT: 'export', - EXPORT_NESTED: 'export-nested', - PAYMENT: 'payment', - CUSTOMER: 'customer', - SUPPLIER: 'supplier', - DELIVERY_PAYMENT: 'delivery-payment', - DELIVERY_PAYMENT_NESTED: 'delivery-payment-nested', - /** Sale Report */ - SALE_REPORT_TIME: 'sale-report-time', - SALE_REPORT_TIME_NESTED: 'sale-report-time-nested', - SALE_REPORT_TIME_INVOICE: 'sale-report-time-invoice', - SALE_REPORT_PROFIT: 'sale-report-profit', - SALE_REPORT_PROFIT_NESTED: 'sale-report-profit-nested', - SALE_REPORT_PROFIT_INVOICE: 'sale-report-profit-invoice', - SALE_REPORT_PROFIT_PRODUCT: 'sale-report-profit-product', - SALE_REPORT_DISCOUNT: 'sale-report-discount', - SALE_REPORT_DISCOUNT_NESTED: 'sale-report-discount-nested', - SALE_REPORT_DISCOUNT_INVOICE: 'sale-report-discount-invoice', - SALE_REPORT_RETURN: 'sale-report-return', - SALE_REPORT_RETURN_NESTED: 'sale-report-return-nested', - SALE_REPORT_RETURN_INVOICE: 'sale-report-return-invoice', - SALE_REPORT_STAFF: 'sale-report-staff', - SALE_REPORT_STAFF_NESTED: 'sale-report-staff-nested', - SALE_REPORT_STAFF_TIME: 'sale-report-staff-time', - SALE_REPORT_STAFF_TIME_NESTED: 'sale-report-staff-time-nested', - SALE_REPORT_STAFF_INVOICE: 'sale-report-staff-invoice', - SALE_REPORT_STORE: 'sale-report-store', - SALE_REPORT_STORE_NESTED: 'sale-report-store-nested', - SALE_REPORT_STORE_TIME: 'sale-report-store-time', - SALE_REPORT_STORE_TIME_NESTED: 'sale-report-store-time-nested', - SALE_REPORT_STORE_INVOICE: 'sale-report-store-invoice', - - /** product report */ - PRODUCT_REPORT_SALE: 'product-report-sale', - PRODUCT_REPORT_SALE_SPECIFIC: 'product-report-sale-specific', - PRODUCT_REPORT_SALE_GROUP_CATEGORIES: 'product-report-sale-group-categories', - PRODUCT_REPORT_SALE_DETAIL: 'product-report-sale-detail', - - PRODUCT_REPORT_PROFIT: 'product-report-profit', - PRODUCT_REPORT_PROFIT_GROUP_CATEGORIES: 'product-report-profit-group-categories', - - PRODUCT_REPORT_STOCK_VALUE: 'product-report-stock-value', - PRODUCT_REPORT_STOCK_VALUE_GROUP_CATEGORIES: 'product-report-stock-value-group-categories', - PRODUCT_REPORT_STOCK_VALUE_DETAIL: 'product-report-stock-value-detail', - PRODUCT_REPORT_STOCK_VALUE_STORE: 'product-report-stock-value-store', - PRODUCT_REPORT_STOCK_VALUE_GENERAL: 'product-report-stock-value-general', - - PRODUCT_REPORT_STOCK: 'product-report-stock', - PRODUCT_REPORT_STOCK_STORE: 'product-report-stock-store', - PRODUCT_REPORT_STOCK_ONE_STORE: 'product-report-stock-one-store', - PRODUCT_REPORT_STOCK_GROUP_CATEGORIES: 'product-report-stock-group-categories', - PRODUCT_REPORT_STOCK_MORE_STORE: 'product-report-stock-more-store', - - PRODUCT_REPORT_STOCK_DETAIL: 'product-report-stock-detail', - PRODUCT_REPORT_STOCK_DETAIL_STORE: 'product-report-stock-detail-store', - PRODUCT_REPORT_STOCK_DETAIL_DETAIL: 'product-report-stock-detail-detail', - PRODUCT_REPORT_STOCK_DETAIL_GROUP_CATEGORIES: 'product-report-stock-detail-group-categories', - PRODUCT_REPORT_STOCK_DETAIL_GENERAL: 'product-report-stock-detail-general', - - PRODUCT_REPORT_STAFF: 'product-report-staff', - PRODUCT_REPORT_STAFF_SPECIFIC: 'product-report-staff-specific', - PRODUCT_REPORT_STAFF_DETAIL: 'product-report-staff-detail', - PRODUCT_REPORT_STAFF_GROUP_CATEGORIES: 'product-report-staff-group-categories', - - PRODUCT_REPORT_EXPORT: 'product-report-export', - PRODUCT_REPORT_EXPORT_SPECIFIC: 'product-report-export-specific', - PRODUCT_REPORT_EXPORT_DETAIL: 'product-report-export-detail', - PRODUCT_REPORT_EXPORT_GROUP_CATEGORIES: 'product-report-export-group-categories', - - PRODUCT_REPORT_CUSTOMER: 'product-report-customer', - PRODUCT_REPORT_CUSTOMER_SPECIFIC: 'product-report-customer-specific', - PRODUCT_REPORT_CUSTOMER_DETAIL: 'product-report-customer-detail', - PRODUCT_REPORT_CUSTOMER_GROUP_CATEGORIES: 'product-report-customer-group-categories', - - PRODUCT_REPORT_SUPPLIER: 'product-report-supplier', - PRODUCT_REPORT_SUPPLIER_DETAIL: 'product-report-supplier-detail', - PRODUCT_REPORT_SUPPLIER_SPECIFIC: 'product-report-supplier-specific', - PRODUCT_REPORT_SUPPLIER_GROUP_CATEGORIES: 'product-report-supplier-group-categories', - - PRODUCT_REPORT_STOCK_SPECIFIC: 'product-report-stock-specific', - PRODUCT_REPORT_STOCK_DETAIL_SPECIFIC: 'product-report-stock-detail-specific', - PRODUCT_REPORT_CUSTOMER_INVOICE: 'product-report-customer-invoice', - PRODUCT_REPORT_STAFF_INVOICE: 'product-report-staff-invoice', - - /** start end of day report */ - END_OF_DAY_REPORT_SALE: 'end-of-day-report-sale', - END_OF_DAY_REPORT_SALE_DETAIL: 'end-of-day-report-sale-detail', - END_OF_DAY_REPORT_SALE_DETAIL_TIME: 'end-of-day-report-sale-detail-time', - END_OF_DAY_REPORT_PAYMENT: 'end-of-day-report-payment', - END_OF_DAY_REPORT_PRODUCT: 'end-of-day-report-product', - END_OF_DAY_REPORT_PRODUCT_DETAIL: 'end-of-day-report-product-detail', -}; - -FileConfig.Types = { - IMPORT: 'import', - EXPORT: 'export' -}; - -FileConfig.Configs = [ - 'name', // file name, - 'path', // file path, - 'content', // file data -]; - -/** - * FileConfig Schema - * @public - */ -FileConfig.init( - { - id: { - type: DataTypes.INTEGER, - autoIncrement: true, - primaryKey: true - }, - name: { - type: DataTypes.STRING(255), - defaultValue: null - }, - type: { - type: DataTypes.STRING(50), - allowNull: false - }, - group: { - type: DataTypes.STRING(100), - defaultValue: null - }, - path: { - type: DataTypes.STRING(155), - defaultValue: null - }, - config: { - type: DataTypes.JSONB, - defaultValue: null - }, - - // manager - is_active: { - type: DataTypes.BOOLEAN, - defaultValue: true - }, - created_at: { - type: DataTypes.DATE, - defaultValue: DataTypes.NOW - }, - updated_at: { - type: DataTypes.DATE, - defaultValue: DataTypes.NOW - }, - created_by: { - type: DataTypes.JSONB, - defaultValue: null // id | name - } - }, - { - timestamps: false, - schema: serviceName, - sequelize: sequelize, - modelName: 'file_config', - tableName: 'tbl_file_configs' - } -); - -/** - * Register event emiter - */ -FileConfig.Events = { - FILE_CONFIG_CREATED: `${serviceName}.file-config.created`, - FILE_CONFIG_UPDATED: `${serviceName}.file-config.updated`, - FILE_CONFIG_DELETED: `${serviceName}.file-config.deleted`, -}; -FileConfig.EVENT_SOURCE = `${serviceName}.file-config`; - -/** - * Add your - * - pre-save hooks - * - validations - * - virtuals - */ -FileConfig.addHook('afterCreate', () => { }); - -FileConfig.addHook('afterUpdate', () => { }); - -FileConfig.addHook('afterDestroy', () => { }); - -/** - * Load query - * @param {*} params - */ -function filterConditions(params) { - const options = omitBy(params, isNil); - options.is_active = true; - - // TODO: load condition - if (options.name) { - options.name = { - [Op.iLike]: `%${options.name}%` - }; - } - - return options; -} - -/** - * Load sort query - * @param {*} sort_by - * @param {*} order_by - */ -function sortConditions({ sort_by, order_by }) { - let sort = null; - switch (sort_by) { - case 'created_at': - sort = ['created_at', order_by]; - break; - case 'updated_at': - sort = ['updated_at', order_by]; - break; - default: sort = ['created_at', 'DESC']; - break; - } - return sort; -} - -/** - * Transform postgres model to expose object - */ -FileConfig.transform = (params) => { - const transformed = {}; - const fields = [ - 'id', - 'name', - 'type', - 'group', - 'config', - 'created_by' - ]; - fields.forEach((field) => { - transformed[field] = params[field]; - }); - - // pipe date - const dateFields = [ - 'created_at', - 'updated_at' - ]; - dateFields.forEach((field) => { - if (params[field]) { - transformed[field] = moment(params[field]).unix(); - } else { - transformed[field] = null; - } - }); - - return transformed; -}; - -/** - * Get all changed properties - */ -FileConfig.getChangedProperties = ({ newModel, oldModel }) => { - const changedProperties = []; - const allChangableProperties = [ - 'name', - 'type', - 'group', - 'config', - 'status', - 'status_name' - ]; - if (!oldModel) { - return allChangableProperties; - } - - allChangableProperties.forEach((field) => { - if ( - !isUndefined(newModel[field]) && - !isEqual(newModel[field], oldModel[field]) - ) { - changedProperties.push(field); - } - }); - - return changedProperties; -}; - -/** - * Detail - * - * @public - * @param {string} group - */ -FileConfig.get = async (operation) => { - try { - const data = await FileConfig.findOne({ - where: { - type: operation.type, - group: operation.group, - is_active: true - } - }); - if (!data) { - throw new APIError({ - status: httpStatus.NOT_FOUND, - message: 'Không tìm thấy file!' - }); - } - return data; - } catch (ex) { - throw ex; - } -}; - -/** - * List users in descending order of 'createdAt' timestamp. - * - * @param {number} skip - Number of users to be skipped. - * @param {number} limit - Limit number of users to be returned. - * @returns {Promise} - */ -FileConfig.list = async ({ - name, - - // sort - sort_by, - order_by, - skip = 0, - limit = 20, -}) => { - const options = filterConditions({ - name - }); - const sort = sortConditions({ sort_by, order_by }); - return FileConfig.findAll({ - where: options, - order: [sort], - offset: skip, - limit: limit - }); -}; - -/** - * Total records. - * - * @param {number} skip - Number of users to be skipped. - * @param {number} limit - Limit number of users to be returned. - * @returns {Promise} - */ -FileConfig.totalRecords = ({ - name -}) => { - const options = filterConditions({ - name - }); - - return FileConfig.count({ where: options }); -}; - -/** - * Filter only allowed fields from Province - * - * @param {Object} params - */ -FileConfig.filterParams = (params) => pick(params, PUBLIC_FIELDS); - -/** - * @typedef Province - */ -export default FileConfig; +/* eslint-disable camelcase */ +import httpStatus from 'http-status'; +import { Model, DataTypes, Op } from 'sequelize'; +import { isEqual, isNil, isUndefined, omitBy, pick } from 'lodash'; +import moment from 'moment-timezone'; + +import { serviceName } from '../../config/vars'; +import postgres from '../../config/postgres'; +import APIError from '../utils/APIException'; + +/** + * Create connection + */ +const { sequelize } = postgres; +class FileConfig extends Model { } + +const PUBLIC_FIELDS = [ + 'name', + 'type', + 'group', + 'config' +]; + +FileConfig.Groups = { + PRODUCT: 'product', + PRODUCT_OPTION: 'product-option', + PRODUCT_PRICE: 'product-price', + ORDER: 'order', + ORDER_NESTED: 'order-nested', + INVOICE: 'invoice', + INVOICE_NESTED: 'invoice-nested', + RETURN: 'return', + RETURN_NESTED: 'return-nested', + DELIVERY: 'delivery', + IMPORT: 'import', + IMPORT_NESTED: 'import-nested', + STOCK_TAKE: 'stock-take', + STOCK_TAKE_NESTED: 'stock-take-nested', + TRANSFER: 'transfer', + TRANSFER_NESTED: 'transfer-nested', + EXPORT: 'export', + EXPORT_NESTED: 'export-nested', + PAYMENT: 'payment', + CUSTOMER: 'customer', + SUPPLIER: 'supplier', + DELIVERY_PAYMENT: 'delivery-payment', + DELIVERY_PAYMENT_NESTED: 'delivery-payment-nested', + /** Sale Report */ + SALE_REPORT_TIME: 'sale-report-time', + SALE_REPORT_TIME_NESTED: 'sale-report-time-nested', + SALE_REPORT_TIME_INVOICE: 'sale-report-time-invoice', + SALE_REPORT_PROFIT: 'sale-report-profit', + SALE_REPORT_PROFIT_NESTED: 'sale-report-profit-nested', + SALE_REPORT_PROFIT_INVOICE: 'sale-report-profit-invoice', + SALE_REPORT_PROFIT_PRODUCT: 'sale-report-profit-product', + SALE_REPORT_DISCOUNT: 'sale-report-discount', + SALE_REPORT_DISCOUNT_NESTED: 'sale-report-discount-nested', + SALE_REPORT_DISCOUNT_INVOICE: 'sale-report-discount-invoice', + SALE_REPORT_RETURN: 'sale-report-return', + SALE_REPORT_RETURN_NESTED: 'sale-report-return-nested', + SALE_REPORT_RETURN_INVOICE: 'sale-report-return-invoice', + SALE_REPORT_STAFF: 'sale-report-staff', + SALE_REPORT_STAFF_NESTED: 'sale-report-staff-nested', + SALE_REPORT_STAFF_TIME: 'sale-report-staff-time', + SALE_REPORT_STAFF_TIME_NESTED: 'sale-report-staff-time-nested', + SALE_REPORT_STAFF_INVOICE: 'sale-report-staff-invoice', + SALE_REPORT_STORE: 'sale-report-store', + SALE_REPORT_STORE_NESTED: 'sale-report-store-nested', + SALE_REPORT_STORE_TIME: 'sale-report-store-time', + SALE_REPORT_STORE_TIME_NESTED: 'sale-report-store-time-nested', + SALE_REPORT_STORE_INVOICE: 'sale-report-store-invoice', + + /** product report */ + PRODUCT_REPORT_SALE: 'product-report-sale', + PRODUCT_REPORT_SALE_SPECIFIC: 'product-report-sale-specific', + PRODUCT_REPORT_SALE_GROUP_CATEGORIES: 'product-report-sale-group-categories', + PRODUCT_REPORT_SALE_DETAIL: 'product-report-sale-detail', + + PRODUCT_REPORT_PROFIT: 'product-report-profit', + PRODUCT_REPORT_PROFIT_GROUP_CATEGORIES: 'product-report-profit-group-categories', + + PRODUCT_REPORT_STOCK_VALUE: 'product-report-stock-value', + PRODUCT_REPORT_STOCK_VALUE_GROUP_CATEGORIES: 'product-report-stock-value-group-categories', + PRODUCT_REPORT_STOCK_VALUE_DETAIL: 'product-report-stock-value-detail', + PRODUCT_REPORT_STOCK_VALUE_STORE: 'product-report-stock-value-store', + PRODUCT_REPORT_STOCK_VALUE_GENERAL: 'product-report-stock-value-general', + + PRODUCT_REPORT_STOCK: 'product-report-stock', + PRODUCT_REPORT_STOCK_STORE: 'product-report-stock-store', + PRODUCT_REPORT_STOCK_ONE_STORE: 'product-report-stock-one-store', + PRODUCT_REPORT_STOCK_GROUP_CATEGORIES: 'product-report-stock-group-categories', + PRODUCT_REPORT_STOCK_MORE_STORE: 'product-report-stock-more-store', + + PRODUCT_REPORT_STOCK_DETAIL: 'product-report-stock-detail', + PRODUCT_REPORT_STOCK_DETAIL_STORE: 'product-report-stock-detail-store', + PRODUCT_REPORT_STOCK_DETAIL_DETAIL: 'product-report-stock-detail-detail', + PRODUCT_REPORT_STOCK_DETAIL_GROUP_CATEGORIES: 'product-report-stock-detail-group-categories', + PRODUCT_REPORT_STOCK_DETAIL_GENERAL: 'product-report-stock-detail-general', + + PRODUCT_REPORT_STAFF: 'product-report-staff', + PRODUCT_REPORT_STAFF_SPECIFIC: 'product-report-staff-specific', + PRODUCT_REPORT_STAFF_DETAIL: 'product-report-staff-detail', + PRODUCT_REPORT_STAFF_GROUP_CATEGORIES: 'product-report-staff-group-categories', + + PRODUCT_REPORT_EXPORT: 'product-report-export', + PRODUCT_REPORT_EXPORT_SPECIFIC: 'product-report-export-specific', + PRODUCT_REPORT_EXPORT_DETAIL: 'product-report-export-detail', + PRODUCT_REPORT_EXPORT_GROUP_CATEGORIES: 'product-report-export-group-categories', + + PRODUCT_REPORT_CUSTOMER: 'product-report-customer', + PRODUCT_REPORT_CUSTOMER_SPECIFIC: 'product-report-customer-specific', + PRODUCT_REPORT_CUSTOMER_DETAIL: 'product-report-customer-detail', + PRODUCT_REPORT_CUSTOMER_GROUP_CATEGORIES: 'product-report-customer-group-categories', + + PRODUCT_REPORT_SUPPLIER: 'product-report-supplier', + PRODUCT_REPORT_SUPPLIER_DETAIL: 'product-report-supplier-detail', + PRODUCT_REPORT_SUPPLIER_SPECIFIC: 'product-report-supplier-specific', + PRODUCT_REPORT_SUPPLIER_GROUP_CATEGORIES: 'product-report-supplier-group-categories', + + PRODUCT_REPORT_STOCK_SPECIFIC: 'product-report-stock-specific', + PRODUCT_REPORT_STOCK_DETAIL_SPECIFIC: 'product-report-stock-detail-specific', + PRODUCT_REPORT_CUSTOMER_INVOICE: 'product-report-customer-invoice', + PRODUCT_REPORT_STAFF_INVOICE: 'product-report-staff-invoice', + + /** start end of day report */ + END_OF_DAY_REPORT_SALE: 'end-of-day-report-sale', + END_OF_DAY_REPORT_SALE_DETAIL: 'end-of-day-report-sale-detail', + END_OF_DAY_REPORT_SALE_DETAIL_TIME: 'end-of-day-report-sale-detail-time', + END_OF_DAY_REPORT_PAYMENT: 'end-of-day-report-payment', + END_OF_DAY_REPORT_PRODUCT: 'end-of-day-report-product', + END_OF_DAY_REPORT_PRODUCT_DETAIL: 'end-of-day-report-product-detail', +}; + +FileConfig.Types = { + IMPORT: 'import', + EXPORT: 'export' +}; + +FileConfig.Configs = [ + 'name', // file name, + 'path', // file path, + 'content', // file data +]; + +/** + * FileConfig Schema + * @public + */ +FileConfig.init( + { + id: { + type: DataTypes.INTEGER, + autoIncrement: true, + primaryKey: true + }, + name: { + type: DataTypes.STRING(255), + defaultValue: null + }, + type: { + type: DataTypes.STRING(50), + allowNull: false + }, + group: { + type: DataTypes.STRING(100), + defaultValue: null + }, + path: { + type: DataTypes.STRING(155), + defaultValue: null + }, + config: { + type: DataTypes.JSONB, + defaultValue: null + }, + + // manager + is_active: { + type: DataTypes.BOOLEAN, + defaultValue: true + }, + created_at: { + type: DataTypes.DATE, + defaultValue: DataTypes.NOW + }, + updated_at: { + type: DataTypes.DATE, + defaultValue: DataTypes.NOW + }, + created_by: { + type: DataTypes.JSONB, + defaultValue: null // id | name + }, + + }, + { + timestamps: false, + schema: serviceName, + sequelize: sequelize, + modelName: 'file_config', + tableName: 'tbl_file_configs' + } +); + +/** + * Register event emiter + */ +FileConfig.Events = { + FILE_CONFIG_CREATED: `${serviceName}.file-config.created`, + FILE_CONFIG_UPDATED: `${serviceName}.file-config.updated`, + FILE_CONFIG_DELETED: `${serviceName}.file-config.deleted`, +}; +FileConfig.EVENT_SOURCE = `${serviceName}.file-config`; + +/** + * Add your + * - pre-save hooks + * - validations + * - virtuals + */ +FileConfig.addHook('afterCreate', () => { }); + +FileConfig.addHook('afterUpdate', () => { }); + +FileConfig.addHook('afterDestroy', () => { }); + +/** + * Load query + * @param {*} params + */ +function filterConditions(params) { + const options = omitBy(params, isNil); + options.is_active = true; + + // TODO: load condition + if (options.name) { + options.name = { + [Op.iLike]: `%${options.name}%` + }; + } + + return options; +} + +/** + * Load sort query + * @param {*} sort_by + * @param {*} order_by + */ +function sortConditions({ sort_by, order_by }) { + let sort = null; + switch (sort_by) { + case 'created_at': + sort = ['created_at', order_by]; + break; + case 'updated_at': + sort = ['updated_at', order_by]; + break; + default: sort = ['created_at', 'DESC']; + break; + } + return sort; +} + +/** + * Transform postgres model to expose object + */ +FileConfig.transform = (params) => { + const transformed = {}; + const fields = [ + 'id', + 'name', + 'type', + 'group', + 'config', + 'created_by' + ]; + fields.forEach((field) => { + transformed[field] = params[field]; + }); + + // pipe date + const dateFields = [ + 'created_at', + 'updated_at' + ]; + dateFields.forEach((field) => { + if (params[field]) { + transformed[field] = moment(params[field]).unix(); + } else { + transformed[field] = null; + } + }); + + return transformed; +}; + +/** + * Get all changed properties + */ +FileConfig.getChangedProperties = ({ newModel, oldModel }) => { + const changedProperties = []; + const allChangableProperties = [ + 'name', + 'type', + 'group', + 'config', + 'status', + 'status_name' + ]; + if (!oldModel) { + return allChangableProperties; + } + + allChangableProperties.forEach((field) => { + if ( + !isUndefined(newModel[field]) && + !isEqual(newModel[field], oldModel[field]) + ) { + changedProperties.push(field); + } + }); + + return changedProperties; +}; + +/** + * Detail + * + * @public + * @param {string} group + */ +FileConfig.get = async (operation) => { + try { + const data = await FileConfig.findOne({ + where: { + type: operation.type, + group: operation.group, + is_active: true + } + }); + if (!data) { + throw new APIError({ + status: httpStatus.NOT_FOUND, + message: 'Không tìm thấy file!' + }); + } + return data; + } catch (ex) { + throw ex; + } +}; + +/** + * List users in descending order of 'createdAt' timestamp. + * + * @param {number} skip - Number of users to be skipped. + * @param {number} limit - Limit number of users to be returned. + * @returns {Promise} + */ +FileConfig.list = async ({ + name, + + // sort + sort_by, + order_by, + skip = 0, + limit = 20, +}) => { + const options = filterConditions({ + name + }); + const sort = sortConditions({ sort_by, order_by }); + return FileConfig.findAll({ + where: options, + order: [sort], + offset: skip, + limit: limit + }); +}; + +/** + * Total records. + * + * @param {number} skip - Number of users to be skipped. + * @param {number} limit - Limit number of users to be returned. + * @returns {Promise} + */ +FileConfig.totalRecords = ({ + name +}) => { + const options = filterConditions({ + name + }); + + return FileConfig.count({ where: options }); +}; + +/** + * Filter only allowed fields from Province + * + * @param {Object} params + */ +FileConfig.filterParams = (params) => pick(params, PUBLIC_FIELDS); + +/** + * @typedef Province + */ +export default FileConfig; diff --git a/src/common/models/file.model.js b/src/common/models/file.model.js index 770c512..3eeb888 100644 --- a/src/common/models/file.model.js +++ b/src/common/models/file.model.js @@ -1,276 +1,278 @@ -/* eslint-disable camelcase */ -import httpStatus from 'http-status'; -import { Model, DataTypes, Op } from 'sequelize'; -import { isEqual, isNil, isUndefined, omitBy, pick } from 'lodash'; -import moment from 'moment-timezone'; - -import { serviceName } from '../../config/vars'; -import postgres from '../../config/postgres'; -import APIError from '../utils/APIException'; - -/** - * Create connection - */ -const { sequelize } = postgres; -class File extends Model { } - -const PUBLIC_FIELDS = [ - 'name', - 'title', - 'payload' -]; - -/** - * File Schema - * @public - */ -File.init( - { - id: { - type: DataTypes.INTEGER, - autoIncrement: true, - primaryKey: true - }, - url: { - type: DataTypes.STRING(255), - allowNull: false - }, - name: { - type: DataTypes.STRING(255), - defaultValue: null - }, - title: { - type: DataTypes.STRING(255), - defaultValue: null - }, - payload: { - type: DataTypes.JSONB, - defaultValue: null // id | code | name - }, - - // manager - is_active: { - type: DataTypes.BOOLEAN, - defaultValue: true - }, - created_at: { - type: DataTypes.DATE, - defaultValue: DataTypes.NOW - }, - updated_at: { - type: DataTypes.DATE, - defaultValue: DataTypes.NOW - }, - created_by: { - type: DataTypes.JSONB, - defaultValue: null // id | name - } - }, - { - timestamps: false, - sequelize: sequelize, - schema: serviceName, - modelName: 'file', - tableName: 'tbl_files' - } -); - -/** - * Register event emiter - */ -File.Events = { - File_CREATED: `${serviceName}.file.created`, - File_UPDATED: `${serviceName}.file.updated`, - File_DELETED: `${serviceName}.file.deleted`, -}; -File.EVENT_SOURCE = `${serviceName}.file`; - -/** - * Add your - * - pre-save hooks - * - validations - * - virtuals - */ -File.addHook('afterCreate', () => { }); - -File.addHook('afterUpdate', () => { }); - -File.addHook('afterDestroy', () => { }); - -/** - * Load query - * @param {*} params - */ -function filterConditions(params) { - const options = omitBy(params, isNil); - options.is_active = true; - - // TODO: load condition - if (options.name) { - options.name = { - [Op.iLike]: `%${options.name}%` - }; - } - - return options; -} - -/** - * Load sort query - * @param {*} sort_by - * @param {*} order_by - */ -function sortConditions({ sort_by, order_by }) { - let sort = null; - switch (sort_by) { - case 'created_at': - sort = ['created_at', order_by]; - break; - case 'updated_at': - sort = ['updated_at', order_by]; - break; - default: sort = ['created_at', 'DESC']; - break; - } - return sort; -} - -/** - * Transform postgres model to expose object - */ -File.transform = (params) => { - const transformed = {}; - const fields = [ - 'id', - 'name', - 'payload', - 'created_by' - ]; - fields.forEach((field) => { - transformed[field] = params[field]; - }); - - // pipe date - const dateFields = [ - 'created_at', - 'updated_at' - ]; - dateFields.forEach((field) => { - if (params[field]) { - transformed[field] = moment(params[field]).unix(); - } else { - transformed[field] = null; - } - }); - - return transformed; -}; - -/** - * Get all changed properties - */ -File.getChangedProperties = ({ newModel, oldModel }) => { - const changedProperties = []; - const allChangableProperties = [ - 'id', - 'name', - 'payload', - ]; - if (!oldModel) { - return allChangableProperties; - } - - allChangableProperties.forEach((field) => { - if ( - !isUndefined(newModel[field]) && - !isEqual(newModel[field], oldModel[field]) - ) { - changedProperties.push(field); - } - }); - - return changedProperties; -}; - -/** - * Detail - * - * @public - * @param {string} id - */ -File.get = async (id) => { - try { - const data = await File.findOne({ - where: { - id, - is_active: true - } - }); - if (!data) { - throw new APIError({ - status: httpStatus.NOT_FOUND, - message: 'Không tìm thấy địa chỉ tỉnh/thành!' - }); - } - return data; - } catch (ex) { - throw ex; - } -}; - -/** - * List users in descending order of 'createdAt' timestamp. - * - * @param {number} skip - Number of users to be skipped. - * @param {number} limit - Limit number of users to be returned. - * @returns {Promise} - */ -File.list = async ({ - name, - - // sort - sort_by, - order_by, - skip = 0, - limit = 20, -}) => { - const options = filterConditions({ - name - }); - const sort = sortConditions({ sort_by, order_by }); - return File.findAll({ - where: options, - order: [sort], - offset: skip, - limit: limit - }); -}; - -/** - * Total records. - * - * @param {number} skip - Number of users to be skipped. - * @param {number} limit - Limit number of users to be returned. - * @returns {Promise} - */ -File.totalRecords = ({ - name -}) => { - const options = filterConditions({ - name - }); - - return File.count({ where: options }); -}; - -/** - * Filter only allowed fields from File - * - * @param {Object} params - */ -File.filterParams = (params) => pick(params, PUBLIC_FIELDS); - -/** - * @typedef File - */ -export default File; +/* eslint-disable camelcase */ +import httpStatus from 'http-status'; +import { Model, DataTypes, Op } from 'sequelize'; +import { isEqual, isNil, isUndefined, omitBy, pick } from 'lodash'; +import moment from 'moment-timezone'; +import { serviceName } from '../../config/vars'; +import postgres from '../../config/postgres'; +import APIError from '../utils/APIException'; + +/** + * Create connection + */ +const { sequelize } = postgres; +class File extends Model { } + +const PUBLIC_FIELDS = [ + 'name', + 'title', + 'payload' +]; + +/** + * File Schema + * @public + */ +File.init( + { + id: { + type: DataTypes.INTEGER, + autoIncrement: true, + primaryKey: true + }, + url: { + type: DataTypes.STRING(255), + allowNull: false + }, + name: { + type: DataTypes.STRING(255), + defaultValue: null + }, + title: { + type: DataTypes.STRING(255), + defaultValue: null + }, + payload: { + type: DataTypes.JSONB, + defaultValue: null // id | code | name + }, + + // manager + is_active: { + type: DataTypes.BOOLEAN, + defaultValue: true + }, + created_at: { + type: DataTypes.DATE, + defaultValue: DataTypes.NOW + }, + updated_at: { + type: DataTypes.DATE, + defaultValue: DataTypes.NOW + }, + created_by: { + type: DataTypes.JSONB, + defaultValue: null // id | name + }, + download_count: { + type: DataTypes.INTEGER, + defaultValue: 0 + } + }, + { + timestamps: false, + sequelize: sequelize, + schema: serviceName, + modelName: 'file', + tableName: 'tbl_files' + } +); + +/** + * Register event emiter + */ +File.Events = { + File_CREATED: `${serviceName}.file.created`, + File_UPDATED: `${serviceName}.file.updated`, + File_DELETED: `${serviceName}.file.deleted`, +}; +File.EVENT_SOURCE = `${serviceName}.file`; + +/** + * Add your + * - pre-save hooks + * - validations + * - virtuals + */ +File.addHook('afterCreate', () => { }); + +File.addHook('afterUpdate', () => { }); + +File.addHook('afterDestroy', () => { }); + +/** + * Load query + * @param {*} params + */ +function filterConditions(params) { + const options = omitBy(params, isNil); + options.is_active = true; + + // TODO: load condition + if (options.name) { + options.name = { + [Op.iLike]: `%${options.name}%` + }; + } + + return options; +} + +/** + * Load sort query + * @param {*} sort_by + * @param {*} order_by + */ +function sortConditions({ sort_by, order_by }) { + let sort = null; + switch (sort_by) { + case 'created_at': + sort = ['created_at', order_by]; + break; + case 'updated_at': + sort = ['updated_at', order_by]; + break; + default: sort = ['created_at', 'DESC']; + break; + } + return sort; +} + +/** + * Transform postgres model to expose object + */ +File.transform = (params) => { + const transformed = {}; + const fields = [ + 'id', + 'name', + 'payload', + 'created_by' + ]; + fields.forEach((field) => { + transformed[field] = params[field]; + }); + + // pipe date + const dateFields = [ + 'created_at', + 'updated_at' + ]; + dateFields.forEach((field) => { + if (params[field]) { + transformed[field] = moment(params[field]).unix(); + } else { + transformed[field] = null; + } + }); + + return transformed; +}; + +/** + * Get all changed properties + */ +File.getChangedProperties = ({ newModel, oldModel }) => { + const changedProperties = []; + const allChangableProperties = [ + 'id', + 'name', + 'payload', + ]; + if (!oldModel) { + return allChangableProperties; + } + + allChangableProperties.forEach((field) => { + if ( + !isUndefined(newModel[field]) && + !isEqual(newModel[field], oldModel[field]) + ) { + changedProperties.push(field); + } + }); + + return changedProperties; +}; + +/** + * Detail + * + * @public + * @param {string} id + */ +File.get = async (id) => { + try { + const data = await File.findOne({ + where: { + id, + is_active: true + } + }); + if (!data) { + throw new APIError({ + status: httpStatus.NOT_FOUND, + message: 'Không tìm thấy địa chỉ tỉnh/thành!' + }); + } + return data; + } catch (ex) { + throw ex; + } +}; + +/** + * List users in descending order of 'createdAt' timestamp. + * + * @param {number} skip - Number of users to be skipped. + * @param {number} limit - Limit number of users to be returned. + * @returns {Promise} + */ +File.list = async ({ + name, + // sort + sort_by, + order_by, + skip = 0, + limit = 20, +}) => { + const options = filterConditions({ + name + }); + const sort = sortConditions({ sort_by, order_by }); + return File.findAll({ + where: options, + order: [sort], + offset: skip, + limit: limit + }); +}; + +/** + * Total records. + * + * @param {number} skip - Number of users to be skipped. + * @param {number} limit - Limit number of users to be returned. + * @returns {Promise} + */ +File.totalRecords = ({ + name +}) => { + const options = filterConditions({ + name + }); + + return File.count({ where: options }); +}; + +/** + * Filter only allowed fields from File + * + * @param {Object} params + */ +File.filterParams = (params) => pick(params, PUBLIC_FIELDS); + +/** + * @typedef File + */ +export default File; diff --git a/src/common/models/image.model.js b/src/common/models/image.model.js index 1d97280..de8cbea 100644 --- a/src/common/models/image.model.js +++ b/src/common/models/image.model.js @@ -1,292 +1,293 @@ -/* eslint-disable camelcase */ -import httpStatus from 'http-status'; -import { Model, DataTypes, Op } from 'sequelize'; -import { isEqual, isNil, isUndefined, omitBy, pick } from 'lodash'; -import moment from 'moment-timezone'; - -import { serviceName } from '../../config/vars'; -import postgres from '../../config/postgres'; -import APIError from '../utils/APIException'; - -/** - * Create connection - */ -const { sequelize } = postgres; -class Image extends Model { } - -const PUBLIC_FIELDS = [ - 'name', - 'title', - 'payload' -]; - -Image.Groups = { - USER: 'users', - STORE: 'stores', - VOUCHER: 'vouchers', - STORIES: 'stories', - CHAPTERS: 'chapters', - GAMES: 'games', - CUSTOMER: 'customers', - PROMOTION: 'promotions', - PRODUCT: 'products', - // configration - BANNER: 'banners', - CATEGORY: 'categories', - DEFAULT: 'defaults' -}; - -/** - * Image Schema - * @public - */ -Image.init( - { - id: { - type: DataTypes.INTEGER, - autoIncrement: true, - primaryKey: true - }, - url: { - type: DataTypes.STRING(255), - allowNull: false - }, - name: { - type: DataTypes.STRING(255), - defaultValue: null - }, - title: { - type: DataTypes.STRING(255), - defaultValue: null - }, - payload: { - type: DataTypes.JSONB, - defaultValue: null // id | code | name - }, - - // manager - is_active: { - type: DataTypes.BOOLEAN, - defaultValue: true - }, - created_at: { - type: DataTypes.DATE, - defaultValue: DataTypes.NOW - }, - updated_at: { - type: DataTypes.DATE, - defaultValue: DataTypes.NOW - }, - created_by: { - type: DataTypes.JSONB, - defaultValue: null // id | name - } - }, - { - timestamps: false, - sequelize: sequelize, - schema: serviceName, - modelName: 'image', - tableName: 'tbl_images' - } -); - -/** - * Register event emiter - */ -Image.Events = { - IMAGE_CREATED: `${serviceName}.image.created`, - IMAGE_UPDATED: `${serviceName}.image.updated`, - IMAGE_DELETED: `${serviceName}.image.deleted`, -}; -Image.EVENT_SOURCE = `${serviceName}.image`; - -/** - * Add your - * - pre-save hooks - * - validations - * - virtuals - */ -Image.addHook('afterCreate', () => { }); - -Image.addHook('afterUpdate', () => { }); - -Image.addHook('afterDestroy', () => { }); - -/** - * Load query - * @param {*} params - */ -function filterConditions(params) { - const options = omitBy(params, isNil); - options.is_active = true; - - // TODO: load condition - if (options.name) { - options.name = { - [Op.iLike]: `%${options.name}%` - }; - } - - return options; -} - -/** - * Load sort query - * @param {*} sort_by - * @param {*} order_by - */ -function sortConditions({ sort_by, order_by }) { - let sort = null; - switch (sort_by) { - case 'created_at': - sort = ['created_at', order_by]; - break; - case 'updated_at': - sort = ['updated_at', order_by]; - break; - default: sort = ['created_at', 'DESC']; - break; - } - return sort; -} - -/** - * Transform postgres model to expose object - */ -Image.transform = (params) => { - const transformed = {}; - const fields = [ - 'id', - 'name', - 'payload', - 'created_by' - ]; - fields.forEach((field) => { - transformed[field] = params[field]; - }); - - // pipe date - const dateFields = [ - 'created_at', - 'updated_at' - ]; - dateFields.forEach((field) => { - if (params[field]) { - transformed[field] = moment(params[field]).unix(); - } else { - transformed[field] = null; - } - }); - - return transformed; -}; - -/** - * Get all changed properties - */ -Image.getChangedProperties = ({ newModel, oldModel }) => { - const changedProperties = []; - const allChangableProperties = [ - 'id', - 'name', - 'payload', - ]; - if (!oldModel) { - return allChangableProperties; - } - - allChangableProperties.forEach((field) => { - if ( - !isUndefined(newModel[field]) && - !isEqual(newModel[field], oldModel[field]) - ) { - changedProperties.push(field); - } - }); - - return changedProperties; -}; - -/** - * Detail - * - * @public - * @param {string} id - */ -Image.get = async (id) => { - try { - const data = await Image.findOne({ - where: { - id, - is_active: true - } - }); - if (!data) { - throw new APIError({ - status: httpStatus.NOT_FOUND, - message: 'Không tìm thấy địa chỉ tỉnh/thành!' - }); - } - return data; - } catch (ex) { - throw ex; - } -}; - -/** - * List users in descending order of 'createdAt' timestamp. - * - * @param {number} skip - Number of users to be skipped. - * @param {number} limit - Limit number of users to be returned. - * @returns {Promise} - */ -Image.list = async ({ - name, - - // sort - sort_by, - order_by, - skip = 0, - limit = 20, -}) => { - const options = filterConditions({ - name - }); - const sort = sortConditions({ sort_by, order_by }); - return Image.findAll({ - where: options, - order: [sort], - offset: skip, - limit: limit - }); -}; - -/** - * Total records. - * - * @param {number} skip - Number of users to be skipped. - * @param {number} limit - Limit number of users to be returned. - * @returns {Promise} - */ -Image.totalRecords = ({ - name -}) => { - const options = filterConditions({ - name - }); - - return Image.count({ where: options }); -}; - -/** - * Filter only allowed fields from Province - * - * @param {Object} params - */ -Image.filterParams = (params) => pick(params, PUBLIC_FIELDS); - -/** - * @typedef Province - */ -export default Image; +/* eslint-disable camelcase */ +import httpStatus from 'http-status'; +import { Model, DataTypes, Op } from 'sequelize'; +import { isEqual, isNil, isUndefined, omitBy, pick } from 'lodash'; +import moment from 'moment-timezone'; + +import { serviceName } from '../../config/vars'; +import postgres from '../../config/postgres'; +import APIError from '../utils/APIException'; + +/** + * Create connection + */ +const { sequelize } = postgres; +class Image extends Model { } + +const PUBLIC_FIELDS = [ + 'name', + 'title', + 'payload' +]; + +Image.Groups = { + USER: 'users', + STORE: 'stores', + VOUCHER: 'vouchers', + STORIES: 'stories', + CHAPTERS: 'chapters', + GAMES: 'games', + CUSTOMER: 'customers', + PROMOTION: 'promotions', + PRODUCT: 'products', + // configration + BANNER: 'banners', + CATEGORY: 'categories', + DEFAULT: 'defaults' +}; + +/** + * Image Schema + * @public + */ +Image.init( + { + id: { + type: DataTypes.INTEGER, + autoIncrement: true, + primaryKey: true + }, + url: { + type: DataTypes.STRING(255), + allowNull: false + }, + name: { + type: DataTypes.STRING(255), + defaultValue: null + }, + title: { + type: DataTypes.STRING(255), + defaultValue: null + }, + payload: { + type: DataTypes.JSONB, + defaultValue: null // id | code | name + }, + + // manager + is_active: { + type: DataTypes.BOOLEAN, + defaultValue: true + }, + created_at: { + type: DataTypes.DATE, + defaultValue: DataTypes.NOW + }, + updated_at: { + type: DataTypes.DATE, + defaultValue: DataTypes.NOW + }, + created_by: { + type: DataTypes.JSONB, + defaultValue: null // id | name + } + }, + { + timestamps: false, + sequelize: sequelize, + schema: serviceName, + modelName: 'image', + tableName: 'tbl_images' + } +); + +/** + * Register event emiter + */ +Image.Events = { + IMAGE_CREATED: `${serviceName}.image.created`, + IMAGE_UPDATED: `${serviceName}.image.updated`, + IMAGE_DELETED: `${serviceName}.image.deleted`, +}; + +Image.EVENT_SOURCE = `${serviceName}.image`; + +/** + * Add your + * - pre-save hooks + * - validations + * - virtuals + */ +Image.addHook('afterCreate', () => { }); + +Image.addHook('afterUpdate', () => { }); + +Image.addHook('afterDestroy', () => { }); + +/** + * Load query + * @param {*} params + */ +function filterConditions(params) { + const options = omitBy(params, isNil); + options.is_active = true; + + // TODO: load condition + if (options.name) { + options.name = { + [Op.iLike]: `%${options.name}%` + }; + } + + return options; +} + +/** + * Load sort query + * @param {*} sort_by + * @param {*} order_by + */ +function sortConditions({ sort_by, order_by }) { + let sort = null; + switch (sort_by) { + case 'created_at': + sort = ['created_at', order_by]; + break; + case 'updated_at': + sort = ['updated_at', order_by]; + break; + default: sort = ['created_at', 'DESC']; + break; + } + return sort; +} + +/** + * Transform postgres model to expose object + */ +Image.transform = (params) => { + const transformed = {}; + const fields = [ + 'id', + 'name', + 'payload', + 'created_by' + ]; + fields.forEach((field) => { + transformed[field] = params[field]; + }); + + // pipe date + const dateFields = [ + 'created_at', + 'updated_at' + ]; + dateFields.forEach((field) => { + if (params[field]) { + transformed[field] = moment(params[field]).unix(); + } else { + transformed[field] = null; + } + }); + + return transformed; +}; + +/** + * Get all changed properties + */ +Image.getChangedProperties = ({ newModel, oldModel }) => { + const changedProperties = []; + const allChangableProperties = [ + 'id', + 'name', + 'payload', + ]; + if (!oldModel) { + return allChangableProperties; + } + + allChangableProperties.forEach((field) => { + if ( + !isUndefined(newModel[field]) && + !isEqual(newModel[field], oldModel[field]) + ) { + changedProperties.push(field); + } + }); + + return changedProperties; +}; + +/** + * Detail + * + * @public + * @param {string} id + */ +Image.get = async (id) => { + try { + const data = await Image.findOne({ + where: { + id, + is_active: true + } + }); + if (!data) { + throw new APIError({ + status: httpStatus.NOT_FOUND, + message: 'Không tìm thấy địa chỉ tỉnh/thành!' + }); + } + return data; + } catch (ex) { + throw ex; + } +}; + +/** + * List users in descending order of 'createdAt' timestamp. + * + * @param {number} skip - Number of users to be skipped. + * @param {number} limit - Limit number of users to be returned. + * @returns {Promise} + */ +Image.list = async ({ + name, + + // sort + sort_by, + order_by, + skip = 0, + limit = 20, +}) => { + const options = filterConditions({ + name + }); + const sort = sortConditions({ sort_by, order_by }); + return Image.findAll({ + where: options, + order: [sort], + offset: skip, + limit: limit + }); +}; + +/** + * Total records. + * + * @param {number} skip - Number of users to be skipped. + * @param {number} limit - Limit number of users to be returned. + * @returns {Promise} + */ +Image.totalRecords = ({ + name +}) => { + const options = filterConditions({ + name + }); + + return Image.count({ where: options }); +}; + +/** + * Filter only allowed fields from Province + * + * @param {Object} params + */ +Image.filterParams = (params) => pick(params, PUBLIC_FIELDS); + +/** + * @typedef Province + */ +export default Image; diff --git a/src/common/models/user.model.js b/src/common/models/user.model.js index 9f43eda..17142bf 100644 --- a/src/common/models/user.model.js +++ b/src/common/models/user.model.js @@ -1,1018 +1,1018 @@ -/* eslint-disable camelcase */ -/* eslint-disable no-param-reassign */ -import { Model, DataTypes, Op } from 'sequelize'; -import { values, pick, isEqual, isNil, omitBy } from 'lodash'; -import { hash, compare } from 'bcryptjs'; -import moment from 'moment-timezone'; -import httpStatus from 'http-status'; -import { v4 as uuidv4 } from 'uuid'; -import APIError from '../utils/APIException'; -import postgres from '../../config/postgres'; -import { serviceName } from '../../config/vars'; -import Permissions from '../../common/utils/Permissions'; - -/** - * Create connection - */ -class User extends Model { } -const { sequelize } = postgres; - -User.Providers = { - APPLE: 'apple', - GOOGLE: 'google', - FACEBOOK: 'facebook', -}; - -User.Statuses = { - INACTIVE: 'inactive', - ACTIVE: 'active', - BANNED: 'banned' -}; - -User.NameStatuses = { - INACTIVE: 'inactive', - ACTIVE: 'active', - BANNED: 'banned' -}; - -User.Genders = { - MALE: 'male', - FEMALE: 'female' -}; - -User.Services = { - USER: 'user', - STAFF: 'staff', - SERVICE: 'service' -}; - -User.Types = { - STAFF: 'staff', - COMPANY: 'company', - SUPPLIER: 'supplier', - INDIVIDUAL: 'individual' -}; - -const PUBLIC_FIELDS = [ - 'type', - 'role', - 'name', - 'note', - 'phone', - 'email', - 'avatar', - 'cover', - 'group', - 'stores', - 'gender', - 'birthday', - 'barcode', - 'tax_code', - 'company', - 'country', - 'address', - 'province', - 'district', - 'ward', - 'password', - 'permissions' -]; - -const PUBLIC_PROFILE_FIELDS = [ - 'name', - 'note', - 'phone', - 'email', - 'avatar', - 'cover', - 'gender', - 'birthday', - 'barcode', - 'password', - 'tax_code', - 'company', - 'country', - 'address', - 'province', - 'district', - 'ward' -]; - -/** - * User Schema - * @public - */ -User.init( - { - id: { - type: DataTypes.INTEGER, - autoIncrement: true, - primaryKey: true - }, - type: { - type: DataTypes.STRING(10), - defaultValue: User.Types.INDIVIDUAL - }, - name: { - type: DataTypes.STRING(155), - allowNull: false - }, - note: { - type: DataTypes.STRING(255), - defaultValue: null - }, - phone: { - type: DataTypes.STRING(20), - defaultValue: null - }, - email: { - type: DataTypes.STRING(255), - validate: { isEmail: true }, - defaultValue: null - }, - avatar: { - type: DataTypes.STRING(255), - defaultValue: null - }, - cover: { - type: DataTypes.STRING(255), - defaultValue: null - }, - birthday: { - type: DataTypes.DATE, - defaultValue: null - }, - barcode: { - type: DataTypes.STRING(255), - defaultValue: null - }, - gender: { - type: DataTypes.STRING(50), - values: values(User.Genders), - defaultValue: User.Genders.FEMALE - }, - tax_code: { - type: DataTypes.STRING(25), - defaultValue: null - }, - company: { - type: DataTypes.STRING(100), - defaultValue: null - }, - country: { - type: DataTypes.STRING(3), - defaultValue: 'vn' - }, - language: { - type: DataTypes.STRING(3), - default: 'vi' - }, - timezone: { - type: DataTypes.INTEGER, - default: 7 - }, - address: { - type: DataTypes.STRING(255), - defaultValue: null - }, - province: { - type: DataTypes.JSONB, - defaultValue: null // id || name - }, - district: { - type: DataTypes.JSONB, - defaultValue: null // id || name - }, - ward: { - type: DataTypes.JSONB, - defaultValue: null // id || name - }, - role: { - type: DataTypes.JSONB, - defaultValue: null // id | name - }, - group: { - type: DataTypes.JSONB, - defaultValue: null // id | name - }, - status: { - type: DataTypes.STRING(50), - values: values(User.Statuses), - defaultValue: User.Statuses.ACTIVE - }, - status_name: { - type: DataTypes.STRING(50), - values: values(User.NameStatuses), - defaultValue: User.NameStatuses.ACTIVE - }, - // stores: { - // type: DataTypes.JSONB, - // defaultValue: [] // id, name, phone, address - // }, - service: { - type: DataTypes.STRING(50), - values: values(User.Services), - defaultValue: User.Services.USER - }, - password: { - type: DataTypes.STRING(255), - defaultValue: uuidv4() - }, - permissions: { - type: DataTypes.ARRAY(DataTypes.STRING(155)), - defaultValue: [Permissions.USER] - }, - - // third party account - apple: { - type: DataTypes.JSONB, - defaultValue: { - id: null, - email: null, - name: null, - avatar: null, - } - }, - facebook: { - type: DataTypes.JSONB, - defaultValue: { - id: null, - email: null, - name: null, - avatar: null, - } - }, - google: { - type: DataTypes.JSONB, - defaultValue: { - id: null, - email: null, - name: null, - avatar: null, - } - }, - - normalize_name: { - type: DataTypes.STRING(255), - defaultValue: null - }, - normalize_dob: { - type: DataTypes.INTEGER, - defaultValue: null - }, - normalize_mob: { - type: DataTypes.INTEGER, - defaultValue: null - }, - - // metric - - // config - is_active: { - type: DataTypes.BOOLEAN, - defaultValue: true - }, - device_id: { - type: DataTypes.STRING(255), - defaultValue: 'unkown' - }, - ip_address: { - type: DataTypes.STRING(12), - defaultValue: 'unkown' - }, - is_verified_phone: { - type: DataTypes.BOOLEAN, - defaultValue: false - }, - is_verified_email: { - type: DataTypes.BOOLEAN, - defaultValue: false - }, - is_verified_password: { - type: DataTypes.BOOLEAN, - defaultValue: false - }, - created_at: { - type: DataTypes.DATE, - defaultValue: () => new Date() - }, - updated_at: { - type: DataTypes.DATE, - defaultValue: () => new Date() - }, - created_by: { - type: DataTypes.JSONB, - allowNull: false, - defaultValue: { - id: null, - name: null - } - } - }, - { - timestamps: false, - sequelize: sequelize, - schema: serviceName, - tableName: 'tbl_users', - modelName: 'user' - } -); - -/** - * Register event emiter - */ -User.Events = { - USER_CREATED: `${serviceName}.user.created`, - USER_UPDATED: `${serviceName}.user.updated`, - USER_DELETED: `${serviceName}.user.deleted`, -}; -User.EVENT_SOURCE = `${serviceName}.user`; - -/** - * Add your - * - pre-save hooks - * - validations - * - virtuals - */ -User.addHook('beforeCreate', async (model) => { - const user = model; - if (user.password) { - const rounds = 10; - user.password = await hash(user.password, rounds); - console.log("pass created"); - } - - return user; -}); - -User.addHook('beforeUpdate', async (model, options) => { - const user = model; - const { password } = options; - // has pass - if (password) { - const rounds = 10; - user.password = await hash(password, rounds); - } - - return user; -}); - -User.addHook('afterCreate', () => { }); - -User.addHook('afterUpdate', () => { }); - -User.addHook('afterDestroy', () => { }); - - -/** - * Check min or max in condition - * @param {*} options - * @param {*} field - * @param {*} type - */ -function checkMinMaxOfConditionFields(options, field, type = 'Number') { - let _min = null; - let _max = null; - - // Transform min max - if (type === 'Date') { - _min = new Date(options[`min_${field}`]); - _min.setHours(0, 0, 0, 0); - - _max = new Date(options[`max_${field}`]); - _max.setHours(23, 59, 59, 999); - } - if (type === 'Number') { - _min = parseFloat(options[`min_${field}`]); - _max = parseFloat(options[`max_${field}`]); - } - - // Transform condition - if ( - !isNil(options[`min_${field}`]) || - !isNil(options[`max_${field}`]) - ) { - if ( - options[`min_${field}`] && - !options[`max_${field}`] - ) { - options[field] = { - [Op.gte]: _min - }; - } else if ( - !options[`min_${field}`] && - options[`max_${field}`] - ) { - options[field] = { - [Op.lte]: _max - }; - } else { - options[field] = { - [Op.gte]: _min || 0, - [Op.lte]: _max || 0 - }; - } - } - - // Remove first condition - delete options[`max_${field}`]; - delete options[`min_${field}`]; -} - -/** - * Load query - * @param {*} params - */ -function filterConditions(params) { - const options = omitBy(params, isNil); - options.is_active = true; - - if (options.types) { - options.type = { [Op.in]: options.types.split(',') }; - } - delete options.types; - - if (options.roles) { - options['role.id'] = { [Op.in]: options.roles.split(',') }; - } - delete options.roles; - - if (options.groups) { - options['group.id'] = { [Op.in]: options.groups.split(',') }; - } - delete options.groups; - - if (options.statuses) { - options.status = { [Op.in]: options.statuses.split(',') }; - } - delete options.statuses; - - if (options.services) { - options.service = { [Op.in]: options.services.split(',') }; - } - delete options.services; - - // console.log("delete services from asfsd"); - - if (options.genders) { - options.gender = { [Op.in]: options.genders.split(',') }; - } - delete options.genders; - - if (options.staffs) { - options['created_by.id'] = { [Op.in]: options.staffs.split(',') }; - } - delete options.staffs; - - if (options.stores) { - options.store_path = { [Op.overlap]: options.stores.split(',') }; - } - delete options.stores; - - if (options.provinces) { - options['province.id'] = { [Op.in]: options.provinces.split(',') }; - } - delete options.provinces; - - if (options.keyword) { - options.normalize_name = { [Op.iLike]: `%${options.keyword}%` }; - } - delete options.keyword; - - // Date Filter - checkMinMaxOfConditionFields(options, 'created_at', 'Date'); - - - return options; -} - -/** - * Load sort query - * @param {*} sort_by - * @param {*} order_by - */ -function sortConditions({ sort_by, order_by }) { - let sort = null; - switch (sort_by) { - case 'created_at': - sort = ['created_at', order_by]; - break; - case 'updated_at': - sort = ['updated_at', order_by]; - break; - case 'total_debt': - sort = ['total_debt', order_by]; - break; - case 'total_point': - sort = ['total_point', order_by]; - break; - case 'total_purchase': - sort = ['total_purchase', order_by]; - break; - case 'total_invoice_price': - sort = ['total_invoice_price', order_by]; - break; - case 'total_return_price': - sort = ['total_return_price', order_by]; - break; - default: sort = ['created_at', 'DESC']; - break; - } - return sort; -} - -/** - * Transform postgres model to expose object - */ -User.transform = (params, includeRestrictedFields = true) => { - const transformed = {}; - const fields = [ - 'id', - 'name', - 'note', - 'phone', - 'email', - 'avatar', - 'role', - 'cover', - 'gender', - 'birthday', - 'barcode', - 'tax_code', - 'company', - 'country', - 'address', - 'province', - 'district', - 'ward', - - // manager - 'is_active', - 'is_verified_phone', - 'is_verified_email', - 'is_verified_password' - ]; - if (includeRestrictedFields) { - const privateFiles = [ - 'type', - 'role', - 'group', - 'stores', - 'status', - 'status_name', - 'permissions', - 'created_by' - ]; - fields.push(...privateFiles); - }; - - // console.log(fields + "@@@"); - - fields.forEach((field) => { - transformed[field] = params[field]; - }); - - // pipe decimal - const decimalFields = [ - 'total_debt', - 'total_order_price', - 'total_invoice_price', - 'total_return_price', - 'total_purchase', - 'total_point', - ]; - decimalFields.forEach((field) => { - transformed[field] = parseInt(params[field], 0); - }); - - // pipe date - const dateFields = [ - 'birthday', - 'created_at', - 'updated_at', - 'last_purchase' - ]; - dateFields.forEach((field) => { - transformed[field] = moment(params[field]).unix(); - }); - // console.log(transformed); - - return transformed; -}; - -/** - * Get all changed properties - */ -User.getChangedProperties = ({ newModel, oldModel }, includeRestrictedFields = true) => { - const changedProperties = []; - const allChangableProperties = [ - 'name', - 'note', - 'phone', - 'email', - 'avatar', - 'cover', - 'gender', - 'birthday', - 'barcode', - 'tax_code', - 'company', - 'country', - 'address', - 'province', - 'district', - 'ward', - ]; - if (includeRestrictedFields) { - const privateFiles = [ - 'type', - 'role', - 'group', - 'password', - 'stores', - 'status', - 'permissions' - ]; - allChangableProperties.push(...privateFiles); - // console.log(allChangableProperties); - } - if (!oldModel) { - // console.log("old model"); - return allChangableProperties; - } - - allChangableProperties.forEach((field) => { - if (!isEqual(newModel[field], oldModel[field])) { - changedProperties.push(field); - } - }); - - return changedProperties; -}; - -/** - * Check user by phone - email - * - * @public - * @param {object} data email || phone - */ -User.getUserByPhoneOrEmail = async ({ phone, email, validate = false }) => { - try { - let user = null; - if (phone) { - user = await User.findOne({ - where: { - is_active: true, - phone: phone - } - }); - } - if (email) { - user = await User.findOne({ - where: { - is_active: true, - email: email, - } - }); - } - if (!user) { - throw new APIError({ - status: httpStatus.NOT_FOUND, - message: 'Không tìm thấy tài khoản này!' - }); - } - if (validate) { - if (user.status === User.Statuses.INACTIVE) { - throw new APIError({ - message: 'Tài khoản chưa được kích hoạt!', - status: httpStatus.UNAUTHORIZED - }); - } - if (user.status === User.Statuses.BANNED) { - throw new APIError({ - message: 'Tài khoản đã bị khoá!', - status: httpStatus.UNAUTHORIZED - }); - } - } - return user; - } catch (ex) { - throw (ex); - } -}; -User.getUserByPhoneOrEmailRegister = async ({ phone, email }) => { - try { - let user = null; - if (phone) { - user = await User.findOne({ - where: { - is_active: true, - phone: phone - } - }); - } - if (email) { - user = await User.findOne({ - where: { - is_active: true, - email: email, - } - }); - } - if (user) { - throw new APIError({ - status: httpStatus.NOT_FOUND, - message: 'Tài khoản này đã được đăng kí' - }); - } - // if (validate) { - // if (user.status === User.Statuses.INACTIVE) { - // throw new APIError({ - // message: 'Tài khoản chưa được kích hoạt!', - // status: httpStatus.UNAUTHORIZED - // }); - // } - // if (user.status === User.Statuses.BANNED) { - // throw new APIError({ - // message: 'Tài khoản đã bị khoá!', - // status: httpStatus.UNAUTHORIZED - // }); - // } - // } - return true; - } catch (ex) { - throw (ex); - } -}; - -User.getStaffPermissions = async (staffId) => { - const user = await User.findOne({ - attributes: ['permissions'], - where: { - status: User.Statuses.ACTIVE, - is_active: true, - id: staffId - } - }); - return user.permissions; -}; -/** - * Get Store By Id - * - * @public - * @param {String} userId - */ -User.get = async (userId) => { - try { - const user = await User.findOne({ - where: { - id: userId, - is_active: true - } - }); - // console.log(user); - if (isNil(user)) { - throw new APIError({ - status: httpStatus.NOT_FOUND, - message: 'Không tìm thấy người dùng này!' - }); - } - return user; - } catch (ex) { - throw (ex); - } -}; - -/** - * List - * - * @param {number} skip - Number of records to be skipped. - * @param {number} limit - Limit number of records to be returned. - * @returns {Promise} - */ -User.list = async ({ - roles, - types, - groups, - stores, - provinces, - staffs, - genders, - statuses, - services, - keyword, - min_created_at, - max_created_at, - min_last_purchase, - max_last_purchase, - min_total_order_price, - max_total_order_price, - min_total_invoice_price, - max_total_invoice_price, - min_total_point, - max_total_point, - min_total_debt, - max_total_debt, - - // sort condition - skip = 0, - limit = 20, - sort_by = 'desc', - order_by = 'created_at', -}) => { - const options = filterConditions({ - roles, - types, - groups, - stores, - provinces, - staffs, - genders, - statuses, - services, - keyword, - min_created_at, - max_created_at, - min_last_purchase, - max_last_purchase, - min_total_order_price, - max_total_order_price, - min_total_invoice_price, - max_total_invoice_price, - min_total_point, - max_total_point, - min_total_debt, - max_total_debt, - }); - - const sorts = sortConditions({ - sort_by, - order_by - }); - - - return User.findAll({ - where: options, - order: [sorts], - offset: skip, - limit: limit - }); -}; - -/** - * Total records. - * - * @param {number} skip - Number of records to be skipped. - * @param {number} limit - Limit number of records to be returned. - * @returns {Promise} - */ -User.totalRecords = ({ - roles, - types, - groups, - stores, - provinces, - staffs, - genders, - statuses, - services, - keyword, - min_created_at, - max_created_at, - min_last_purchase, - max_last_purchase, - min_total_order_price, - max_total_order_price, - min_total_invoice_price, - max_total_invoice_price, - min_total_point, - max_total_point, - min_total_debt, - max_total_debt, -}) => { - const options = filterConditions({ - roles, - types, - groups, - stores, - provinces, - staffs, - genders, - statuses, - services, - keyword, - min_created_at, - max_created_at, - min_last_purchase, - max_last_purchase, - min_total_order_price, - max_total_order_price, - min_total_invoice_price, - max_total_invoice_price, - min_total_point, - max_total_point, - min_total_debt, - max_total_debt, - }); - - return User.count({ where: options }); -}; - -/** - * Check Duplicate Account Info - * - * @public - * @param {object} data email || phone - */ -User.checkDuplicate = async ({ userId, service, email, phone }) => { - let user = null; - let message = null; - - if (phone) { - user = await User.findOne({ - where: { - phone, - service, - is_active: true, - id: userId ? { [Op.ne]: userId } : { [Op.ne]: null } - } - }); - message = '"Phone already in use'; - } - - if (email) { - user = await User.findOne({ - where: { - email, - service, - is_active: true, - id: userId ? { [Op.ne]: userId } : { [Op.ne]: null } - } - }); - message = '"Email" already exist'; - } - - if (user) { - throw new APIError({ - message: message, - errors: [ - { - field: 'username', - location: 'body', - messages: [message] - } - ], - status: httpStatus.CONFLICT - }); - } - - return null; -}; - -/** - * Compare password - * - * @param {String} password - * @param {User} model - */ -User.passwordMatches = async (model, password) => compare(password, model.password); - -/** - * Check if current user is expired - * - * @param {Date} currentTime - * @param {User} model - * @returns {Boolean} - */ -User.isExpired = (model, currentTime = null) => { - const currentTimeToCheck = currentTime !== null ? currentTime : new Date(); - return currentTimeToCheck >= model.expired_at; -}; - -/** - * Filter only allowed fields from user - * - * @param {Object} params - */ -User.filterParams = (params, includeRestrictedFields = true) => { - if (includeRestrictedFields) { - return pick(params, PUBLIC_FIELDS); - } - return pick(params, PUBLIC_PROFILE_FIELDS); -}; - -/** - * Return fully qualified phone number - * - * @param {String} phone - */ -User.normalizePhoneNumber = (phone) => - `+84${phone - .replace(/\D/g, '') - .replace(/^84/, '') - .replace(/^0*/, '')}`; - -/** - * @typedef User - */ -export default User; +/* eslint-disable camelcase */ +/* eslint-disable no-param-reassign */ +import { Model, DataTypes, Op } from 'sequelize'; +import { values, pick, isEqual, isNil, omitBy } from 'lodash'; +import { hash, compare } from 'bcryptjs'; +import moment from 'moment-timezone'; +import httpStatus from 'http-status'; +import { v4 as uuidv4 } from 'uuid'; +import APIError from '../utils/APIException'; +import postgres from '../../config/postgres'; +import { serviceName } from '../../config/vars'; +import Permissions from '../../common/utils/Permissions'; + +/** + * Create connection + */ +class User extends Model { } +const { sequelize } = postgres; + +User.Providers = { + APPLE: 'apple', + GOOGLE: 'google', + FACEBOOK: 'facebook', +}; + +User.Statuses = { + INACTIVE: 'inactive', + ACTIVE: 'active', + BANNED: 'banned' +}; + +User.NameStatuses = { + INACTIVE: 'inactive', + ACTIVE: 'active', + BANNED: 'banned' +}; + +User.Genders = { + MALE: 'male', + FEMALE: 'female' +}; + +User.Services = { + USER: 'user', + STAFF: 'staff', + SERVICE: 'service' +}; + +User.Types = { + STAFF: 'staff', + COMPANY: 'company', + SUPPLIER: 'supplier', + INDIVIDUAL: 'individual' +}; + +const PUBLIC_FIELDS = [ + 'type', + 'role', + 'name', + 'note', + 'phone', + 'email', + 'avatar', + 'cover', + 'group', + 'stores', + 'gender', + 'birthday', + 'barcode', + 'tax_code', + 'company', + 'country', + 'address', + 'province', + 'district', + 'ward', + 'password', + 'permissions' +]; + +const PUBLIC_PROFILE_FIELDS = [ + 'name', + 'note', + 'phone', + 'email', + 'avatar', + 'cover', + 'gender', + 'birthday', + 'barcode', + 'password', + 'tax_code', + 'company', + 'country', + 'address', + 'province', + 'district', + 'ward' +]; + +/** + * User Schema + * @public + */ +User.init( + { + id: { + type: DataTypes.INTEGER, + autoIncrement: true, + primaryKey: true + }, + type: { + type: DataTypes.STRING(10), + defaultValue: User.Types.INDIVIDUAL + }, + name: { + type: DataTypes.STRING(155), + allowNull: false + }, + note: { + type: DataTypes.STRING(255), + defaultValue: null + }, + phone: { + type: DataTypes.STRING(20), + defaultValue: null + }, + email: { + type: DataTypes.STRING(255), + validate: { isEmail: true }, + defaultValue: null + }, + avatar: { + type: DataTypes.STRING(255), + defaultValue: null + }, + cover: { + type: DataTypes.STRING(255), + defaultValue: null + }, + birthday: { + type: DataTypes.DATE, + defaultValue: null + }, + barcode: { + type: DataTypes.STRING(255), + defaultValue: null + }, + gender: { + type: DataTypes.STRING(50), + values: values(User.Genders), + defaultValue: User.Genders.FEMALE + }, + tax_code: { + type: DataTypes.STRING(25), + defaultValue: null + }, + company: { + type: DataTypes.STRING(100), + defaultValue: null + }, + country: { + type: DataTypes.STRING(3), + defaultValue: 'vn' + }, + language: { + type: DataTypes.STRING(3), + default: 'vi' + }, + timezone: { + type: DataTypes.INTEGER, + default: 7 + }, + address: { + type: DataTypes.STRING(255), + defaultValue: null + }, + province: { + type: DataTypes.JSONB, + defaultValue: null // id || name + }, + district: { + type: DataTypes.JSONB, + defaultValue: null // id || name + }, + ward: { + type: DataTypes.JSONB, + defaultValue: null // id || name + }, + role: { + type: DataTypes.JSONB, + defaultValue: null // id | name + }, + group: { + type: DataTypes.JSONB, + defaultValue: null // id | name + }, + status: { + type: DataTypes.STRING(50), + values: values(User.Statuses), + defaultValue: User.Statuses.ACTIVE + }, + status_name: { + type: DataTypes.STRING(50), + values: values(User.NameStatuses), + defaultValue: User.NameStatuses.ACTIVE + }, + // stores: { + // type: DataTypes.JSONB, + // defaultValue: [] // id, name, phone, address + // }, + service: { + type: DataTypes.STRING(50), + values: values(User.Services), + defaultValue: User.Services.USER + }, + password: { + type: DataTypes.STRING(255), + defaultValue: uuidv4() + }, + permissions: { + type: DataTypes.ARRAY(DataTypes.STRING(155)), + defaultValue: [Permissions.USER] + }, + + // third party account + apple: { + type: DataTypes.JSONB, + defaultValue: { + id: null, + email: null, + name: null, + avatar: null, + } + }, + facebook: { + type: DataTypes.JSONB, + defaultValue: { + id: null, + email: null, + name: null, + avatar: null, + } + }, + google: { + type: DataTypes.JSONB, + defaultValue: { + id: null, + email: null, + name: null, + avatar: null, + } + }, + + normalize_name: { + type: DataTypes.STRING(255), + defaultValue: null + }, + normalize_dob: { + type: DataTypes.INTEGER, + defaultValue: null + }, + normalize_mob: { + type: DataTypes.INTEGER, + defaultValue: null + }, + + // metric + + // config + is_active: { + type: DataTypes.BOOLEAN, + defaultValue: true + }, + device_id: { + type: DataTypes.STRING(255), + defaultValue: 'unkown' + }, + ip_address: { + type: DataTypes.STRING(12), + defaultValue: 'unkown' + }, + is_verified_phone: { + type: DataTypes.BOOLEAN, + defaultValue: false + }, + is_verified_email: { + type: DataTypes.BOOLEAN, + defaultValue: false + }, + is_verified_password: { + type: DataTypes.BOOLEAN, + defaultValue: false + }, + created_at: { + type: DataTypes.DATE, + defaultValue: () => new Date() + }, + updated_at: { + type: DataTypes.DATE, + defaultValue: () => new Date() + }, + created_by: { + type: DataTypes.JSONB, + allowNull: false, + defaultValue: { + id: null, + name: null + } + } + }, + { + timestamps: false, + sequelize: sequelize, + schema: serviceName, + tableName: 'tbl_users', + modelName: 'user' + } +); + +/** + * Register event emiter + */ +User.Events = { + USER_CREATED: `${serviceName}.user.created`, + USER_UPDATED: `${serviceName}.user.updated`, + USER_DELETED: `${serviceName}.user.deleted`, +}; +User.EVENT_SOURCE = `${serviceName}.user`; + +/** + * Add your + * - pre-save hooks + * - validations + * - virtuals + */ +User.addHook('beforeCreate', async (model) => { + const user = model; + if (user.password) { + const rounds = 10; + user.password = await hash(user.password, rounds); + console.log("pass created"); + } + + return user; +}); + +User.addHook('beforeUpdate', async (model, options) => { + const user = model; + const { password } = options; + // has pass + if (password) { + const rounds = 10; + user.password = await hash(password, rounds); + } + + return user; +}); + +User.addHook('afterCreate', () => { }); + +User.addHook('afterUpdate', () => { }); + +User.addHook('afterDestroy', () => { }); + + +/** + * Check min or max in condition + * @param {*} options + * @param {*} field + * @param {*} type + */ +function checkMinMaxOfConditionFields(options, field, type = 'Number') { + let _min = null; + let _max = null; + + // Transform min max + if (type === 'Date') { + _min = new Date(options[`min_${field}`]); + _min.setHours(0, 0, 0, 0); + + _max = new Date(options[`max_${field}`]); + _max.setHours(23, 59, 59, 999); + } + if (type === 'Number') { + _min = parseFloat(options[`min_${field}`]); + _max = parseFloat(options[`max_${field}`]); + } + + // Transform condition + if ( + !isNil(options[`min_${field}`]) || + !isNil(options[`max_${field}`]) + ) { + if ( + options[`min_${field}`] && + !options[`max_${field}`] + ) { + options[field] = { + [Op.gte]: _min + }; + } else if ( + !options[`min_${field}`] && + options[`max_${field}`] + ) { + options[field] = { + [Op.lte]: _max + }; + } else { + options[field] = { + [Op.gte]: _min || 0, + [Op.lte]: _max || 0 + }; + } + } + + // Remove first condition + delete options[`max_${field}`]; + delete options[`min_${field}`]; +} + +/** + * Load query + * @param {*} params + */ +function filterConditions(params) { + const options = omitBy(params, isNil); + options.is_active = true; + + if (options.types) { + options.type = { [Op.in]: options.types.split(',') }; + } + delete options.types; + + if (options.roles) { + options['role.id'] = { [Op.in]: options.roles.split(',') }; + } + delete options.roles; + + if (options.groups) { + options['group.id'] = { [Op.in]: options.groups.split(',') }; + } + delete options.groups; + + if (options.statuses) { + options.status = { [Op.in]: options.statuses.split(',') }; + } + delete options.statuses; + + if (options.services) { + options.service = { [Op.in]: options.services.split(',') }; + } + delete options.services; + + // console.log("delete services from asfsd"); + + if (options.genders) { + options.gender = { [Op.in]: options.genders.split(',') }; + } + delete options.genders; + + if (options.staffs) { + options['created_by.id'] = { [Op.in]: options.staffs.split(',') }; + } + delete options.staffs; + + if (options.stores) { + options.store_path = { [Op.overlap]: options.stores.split(',') }; + } + delete options.stores; + + if (options.provinces) { + options['province.id'] = { [Op.in]: options.provinces.split(',') }; + } + delete options.provinces; + + if (options.keyword) { + options.normalize_name = { [Op.iLike]: `%${options.keyword}%` }; + } + delete options.keyword; + + // Date Filter + checkMinMaxOfConditionFields(options, 'created_at', 'Date'); + + + return options; +} + +/** + * Load sort query + * @param {*} sort_by + * @param {*} order_by + */ +function sortConditions({ sort_by, order_by }) { + let sort = null; + switch (sort_by) { + case 'created_at': + sort = ['created_at', order_by]; + break; + case 'updated_at': + sort = ['updated_at', order_by]; + break; + case 'total_debt': + sort = ['total_debt', order_by]; + break; + case 'total_point': + sort = ['total_point', order_by]; + break; + case 'total_purchase': + sort = ['total_purchase', order_by]; + break; + case 'total_invoice_price': + sort = ['total_invoice_price', order_by]; + break; + case 'total_return_price': + sort = ['total_return_price', order_by]; + break; + default: sort = ['created_at', 'DESC']; + break; + } + return sort; +} + +/** + * Transform postgres model to expose object + */ +User.transform = (params, includeRestrictedFields = true) => { + const transformed = {}; + const fields = [ + 'id', + 'name', + 'note', + 'phone', + 'email', + 'avatar', + 'role', + 'cover', + 'gender', + 'birthday', + 'barcode', + 'tax_code', + 'company', + 'country', + 'address', + 'province', + 'district', + 'ward', + + // manager + 'is_active', + 'is_verified_phone', + 'is_verified_email', + 'is_verified_password' + ]; + if (includeRestrictedFields) { + const privateFiles = [ + 'type', + 'role', + 'group', + 'stores', + 'status', + 'status_name', + 'permissions', + 'created_by' + ]; + fields.push(...privateFiles); + }; + + // console.log(fields + "@@@"); + + fields.forEach((field) => { + transformed[field] = params[field]; + }); + + // pipe decimal + const decimalFields = [ + 'total_debt', + 'total_order_price', + 'total_invoice_price', + 'total_return_price', + 'total_purchase', + 'total_point', + ]; + decimalFields.forEach((field) => { + transformed[field] = parseInt(params[field], 0); + }); + + // pipe date + const dateFields = [ + 'birthday', + 'created_at', + 'updated_at', + 'last_purchase' + ]; + dateFields.forEach((field) => { + transformed[field] = moment(params[field]).unix(); + }); + // console.log(transformed); + + return transformed; +}; + +/** + * Get all changed properties + */ +User.getChangedProperties = ({ newModel, oldModel }, includeRestrictedFields = true) => { + const changedProperties = []; + const allChangableProperties = [ + 'name', + 'note', + 'phone', + 'email', + 'avatar', + 'cover', + 'gender', + 'birthday', + 'barcode', + 'tax_code', + 'company', + 'country', + 'address', + 'province', + 'district', + 'ward', + ]; + if (includeRestrictedFields) { + const privateFiles = [ + 'type', + 'role', + 'group', + 'password', + 'stores', + 'status', + 'permissions' + ]; + allChangableProperties.push(...privateFiles); + // console.log(allChangableProperties); + } + if (!oldModel) { + // console.log("old model"); + return allChangableProperties; + } + + allChangableProperties.forEach((field) => { + if (!isEqual(newModel[field], oldModel[field])) { + changedProperties.push(field); + } + }); + + return changedProperties; +}; + +/** + * Check user by phone - email + * + * @public + * @param {object} data email || phone + */ +User.getUserByPhoneOrEmail = async ({ phone, email, validate = false }) => { + try { + let user = null; + if (phone) { + user = await User.findOne({ + where: { + is_active: true, + phone: phone + } + }); + } + if (email) { + user = await User.findOne({ + where: { + is_active: true, + email: email, + } + }); + } + if (!user) { + throw new APIError({ + status: httpStatus.NOT_FOUND, + message: 'Không tìm thấy tài khoản này!' + }); + } + if (validate) { + if (user.status === User.Statuses.INACTIVE) { + throw new APIError({ + message: 'Tài khoản chưa được kích hoạt!', + status: httpStatus.UNAUTHORIZED + }); + } + if (user.status === User.Statuses.BANNED) { + throw new APIError({ + message: 'Tài khoản đã bị khoá!', + status: httpStatus.UNAUTHORIZED + }); + } + } + return user; + } catch (ex) { + throw (ex); + } +}; +User.getUserByPhoneOrEmailRegister = async ({ phone, email }) => { + try { + let user = null; + if (phone) { + user = await User.find({ + where: { + is_active: true, + phone: phone + } + }); + } + if (email) { + user = await User.findOne({ + where: { + is_active: true, + email: email, + } + }); + } + if (user) { + throw new APIError({ + status: httpStatus.NOT_FOUND, + message: 'Tài khoản này đã được đăng kí' + }); + } + // if (validate) { + // if (user.status === User.Statuses.INACTIVE) { + // throw new APIError({ + // message: 'Tài khoản chưa được kích hoạt!', + // status: httpStatus.UNAUTHORIZED + // }); + // } + // if (user.status === User.Statuses.BANNED) { + // throw new APIError({ + // message: 'Tài khoản đã bị khoá!', + // status: httpStatus.UNAUTHORIZED + // }); + // } + // } + return true; + } catch (ex) { + throw (ex); + } +}; + +User.getStaffPermissions = async (staffId) => { + const user = await User.findOne({ + attributes: ['permissions'], + where: { + status: User.Statuses.ACTIVE, + is_active: true, + id: staffId + } + }); + return user.permissions; +}; +/** + * Get Store By Id + * + * @public + * @param {String} userId + */ +User.get = async (userId) => { + try { + const user = await User.findOne({ + where: { + id: userId, + is_active: true + } + }); + // console.log(user); + if (isNil(user)) { + throw new APIError({ + status: httpStatus.NOT_FOUND, + message: 'Không tìm thấy người dùng này!' + }); + } + return user; + } catch (ex) { + throw (ex); + } +}; + +/** + * List + * + * @param {number} skip - Number of records to be skipped. + * @param {number} limit - Limit number of records to be returned. + * @returns {Promise} + */ +User.list = async ({ + roles, + types, + groups, + stores, + provinces, + staffs, + genders, + statuses, + services, + keyword, + min_created_at, + max_created_at, + min_last_purchase, + max_last_purchase, + min_total_order_price, + max_total_order_price, + min_total_invoice_price, + max_total_invoice_price, + min_total_point, + max_total_point, + min_total_debt, + max_total_debt, + + // sort condition + skip = 0, + limit = 20, + sort_by = 'desc', + order_by = 'created_at', +}) => { + const options = filterConditions({ + roles, + types, + groups, + stores, + provinces, + staffs, + genders, + statuses, + services, + keyword, + min_created_at, + max_created_at, + min_last_purchase, + max_last_purchase, + min_total_order_price, + max_total_order_price, + min_total_invoice_price, + max_total_invoice_price, + min_total_point, + max_total_point, + min_total_debt, + max_total_debt, + }); + + const sorts = sortConditions({ + sort_by, + order_by + }); + + + return User.findAll({ + where: options, + order: [sorts], + offset: skip, + limit: limit + }); +}; + +/** + * Total records. + * + * @param {number} skip - Number of records to be skipped. + * @param {number} limit - Limit number of records to be returned. + * @returns {Promise} + */ +User.totalRecords = ({ + roles, + types, + groups, + stores, + provinces, + staffs, + genders, + statuses, + services, + keyword, + min_created_at, + max_created_at, + min_last_purchase, + max_last_purchase, + min_total_order_price, + max_total_order_price, + min_total_invoice_price, + max_total_invoice_price, + min_total_point, + max_total_point, + min_total_debt, + max_total_debt, +}) => { + const options = filterConditions({ + roles, + types, + groups, + stores, + provinces, + staffs, + genders, + statuses, + services, + keyword, + min_created_at, + max_created_at, + min_last_purchase, + max_last_purchase, + min_total_order_price, + max_total_order_price, + min_total_invoice_price, + max_total_invoice_price, + min_total_point, + max_total_point, + min_total_debt, + max_total_debt, + }); + + return User.count({ where: options }); +}; + +/** + * Check Duplicate Account Info + * + * @public + * @param {object} data email || phone + */ +User.checkDuplicate = async ({ userId, service, email, phone }) => { + let user = null; + let message = null; + + if (phone) { + user = await User.findOne({ + where: { + phone, + service, + is_active: true, + id: userId ? { [Op.ne]: userId } : { [Op.ne]: null } + } + }); + message = '"Phone already in use'; + } + + if (email) { + user = await User.findOne({ + where: { + email, + service, + is_active: true, + id: userId ? { [Op.ne]: userId } : { [Op.ne]: null } + } + }); + message = '"Email" already exist'; + } + + if (user) { + throw new APIError({ + message: message, + errors: [ + { + field: 'username', + location: 'body', + messages: [message] + } + ], + status: httpStatus.CONFLICT + }); + } + + return null; +}; + +/** + * Compare password + * + * @param {String} password + * @param {User} model + */ +User.passwordMatches = async (model, password) => compare(password, model.password); + +/** + * Check if current user is expired + * + * @param {Date} currentTime + * @param {User} model + * @returns {Boolean} + */ +User.isExpired = (model, currentTime = null) => { + const currentTimeToCheck = currentTime !== null ? currentTime : new Date(); + return currentTimeToCheck >= model.expired_at; +}; + +/** + * Filter only allowed fields from user + * + * @param {Object} params + */ +User.filterParams = (params, includeRestrictedFields = true) => { + if (includeRestrictedFields) { + return pick(params, PUBLIC_FIELDS); + } + return pick(params, PUBLIC_PROFILE_FIELDS); +}; + +/** + * Return fully qualified phone number + * + * @param {String} phone + */ +User.normalizePhoneNumber = (phone) => + `+84${phone + .replace(/\D/g, '') + .replace(/^84/, '') + .replace(/^0*/, '')}`; + +/** + * @typedef User + */ +export default User; diff --git a/src/common/services/adapters/upload-adapter.js b/src/common/services/adapters/upload-adapter.js index f59892c..6c0e17e 100644 --- a/src/common/services/adapters/upload-adapter.js +++ b/src/common/services/adapters/upload-adapter.js @@ -1,114 +1,124 @@ -import multer from 'multer'; -// import moment from 'moment-timezone'; -import { storage as storageConfig } from '../../../config/vars'; -import { forIn } from 'lodash'; -import { equal } from 'joi'; - -/** storage will create folder when new date */ -// const date = new Date(); -// const year = moment(date).format('YYYY'); -// const month = moment(date).format('MM'); -const filePath = `${storageConfig.uri}`; - -const createDefaultFolder = ({ id }) => { - try { - if (id) { - multer({ dest: `${filePath}/${id}` }); - } else { - multer({ dest: `${filePath}` }); - } - // multer({ dest: `${filePath}/images/games` }); - // multer({ dest: `${filePath}/images/stories` }); - // multer({ dest: `${filePath}/images/chapters` }); - // multer({ dest: `${filePath}/images/vouchers` }); - // multer({ dest: `${filePath}/images/products` }); - // multer({ dest: `${filePath}/images/customers` }); - // multer({ dest: `${filePath}/images/promotions` }); - - // // configuration - // multer({ dest: `${filePath}/images/banners` }); - // multer({ dest: `${filePath}/images/categories` }); - // multer({ dest: `${filePath}/images/upload/default` }); - return true; - } catch (ex) { - return false; - } -}; -const createFolder = ({ path }) => { - try { - console.log(`${filePath}/${path}`); - multer({ dest: `${filePath}/${path}` }); - - - // multer({ dest: `${filePath}/images/games` }); - // multer({ dest: `${filePath}/images/stories` }); - // multer({ dest: `${filePath}/images/chapters` }); - // multer({ dest: `${filePath}/images/vouchers` }); - // multer({ dest: `${filePath}/images/products` }); - // multer({ dest: `${filePath}/images/customers` }); - // multer({ dest: `${filePath}/images/promotions` }); - - // // configuration - // multer({ dest: `${filePath}/images/banners` }); - // multer({ dest: `${filePath}/images/categories` }); - // multer({ dest: `${filePath}/images/upload/default` }); - // console.log(multer); - return true; - } catch (ex) { - return false; - } -}; -/** add image to storage follow group */ -const storage = multer.diskStorage({ - destination: (req, file, cb) => { - cb(null, filePath); - }, - filename: (req, file, cb) => { - /** - * setup folder follow date - */ - createDefaultFolder({}); - console.log('run in herer', req.query.path, file); - /** - * save image follow type - */ - const path = req.query.path; - - // const fileName = file.originalname.includes('.') - // ? file.originalname.slice(0, file.originalname.lastIndexOf('.')) - // : file.originalname; - cb( - null, - `/${path}/${file.originalname.replace(/\s/g, '')}` - ); - } -}); - -const fileFilter = (req, file, cb) => { - // if ( - // file.mimetype === 'image/jpeg' || - // file.mimetype === 'image/webp' || - // file.mimetype === 'image/png' || - // file.mimetype === 'image/gif' || - // ) { - // cb(null, true); - // } else { - // cb(null, false); - // } - cb(null, true); -}; - -const uploader = multer({ - storage, - limits: { - fileSize: 1024 * 1024 * 2048 // 5MB - }, - fileFilter -}); - -module.exports = { - createDefaultFolder, - createFolder, - uploader, - fileFilter -}; +import multer from 'multer'; +// import moment from 'moment-timezone'; +import { storage as storageConfig } from '../../../config/vars'; +import { forIn } from 'lodash'; +import { equal } from 'joi'; + +/** storage will create folder when new date */ +// const date = new Date(); +// const year = moment(date).format('YYYY'); +// const month = moment(date).format('MM'); +const filePath = `${storageConfig.uri}`; + +const createDefaultFolder = ( id ) => { + try { + if (id) { + multer({ dest: `${filePath}/${id}` }); + console.log(`creat default ${filePath}/${id}` ); + + } else { + multer({ dest: `${filePath}` }); + console.log(`creat default ${filePath}` ); + + } + // multer({ dest: `${filePath}/images/games` }); + // multer({ dest: `${filePath}/images/stories` }); + // multer({ dest: `${filePath}/images/chapters` }); + // multer({ dest: `${filePath}/images/vouchers` }); + // multer({ dest: `${filePath}/images/products` }); + // multer({ dest: `${filePath}/images/customers` }); + // multer({ dest: `${filePath}/images/promotions` }); + + // // configuration + // multer({ dest: `${filePath}/images/banners` }); + // multer({ dest: `${filePath}/images/categories` }); + // multer({ dest: `${filePath}/images/upload/default` }); + return true; + } catch (ex) { + return false; + } +}; +const createFolder = ({ path }) => { + try { + console.log(`${filePath}/${path}`); + multer({ dest: `${filePath}/${path}` }); + + + // multer({ dest: `${filePath}/images/games` }); + // multer({ dest: `${filePath}/images/stories` }); + // multer({ dest: `${filePath}/images/chapters` }); + // multer({ dest: `${filePath}/images/vouchers` }); + // multer({ dest: `${filePath}/images/products` }); + // multer({ dest: `${filePath}/images/customers` }); + // multer({ dest: `${filePath}/images/promotions` }); + + // // configuration + // multer({ dest: `${filePath}/images/banners` }); + // multer({ dest: `${filePath}/images/categories` }); + // multer({ dest: `${filePath}/images/upload/default` }); + // console.log(multer); + return true; + } catch (ex) { + return false; + } +}; +/** add image to storage follow group */ +const storage = multer.diskStorage({ + destination: (req, file, cb) => { + cb(null, filePath); + }, + filename: (req, file, cb) => { + /** + * setup folder follow date + */ + createDefaultFolder(req.params.id); + console.log('run in herer', req.query.path, file); + + /** + * save image follow type + */ + + // let path = req.locals.user.id; + // console.log(path); + let path = req.params.id; + console.log(path); + console.log(file); + + // const fileName = file.originalname.includes('.') + // ? file.originalname.slice(0, file.originalname.lastIndexOf('.')) + // : file.originalname; + cb( + null, + `/${path}/${file.originalname.replace(/\s/g, '')}` + ); + } +}); + +const fileFilter = (req, file, cb) => { + // if ( + // file.mimetype === 'image/jpeg' || + // file.mimetype === 'image/webp' || + // file.mimetype === 'image/png' || + // file.mimetype === 'image/gif' || + // ) { + // cb(null, true); + // } else { + // cb(null, false); + // } + cb(null, true); +}; + +const uploader = multer({ + storage, + limits: { + fileSize: 1024 * 1024 * 2048 // 5MB + }, + fileFilter +}); + +module.exports = { + createDefaultFolder, + createFolder, + uploader, + fileFilter +}; diff --git a/src/config/locales/en.json b/src/config/locales/en.json index 5d6d879..4344fe9 100644 --- a/src/config/locales/en.json +++ b/src/config/locales/en.json @@ -35,5 +35,33 @@ "_ is not defined": "_ is not defined", "Cannot access 'splited_dir' before initialization": "Cannot access 'splited_dir' before initialization", "main_dir is not defined": "main_dir is not defined", - "Cannot read properties of undefined (reading 'trim')": "Cannot read properties of undefined (reading 'trim')" + "Cannot read properties of undefined (reading 'trim')": "Cannot read properties of undefined (reading 'trim')", + "relation \"file_service.tbl_files\" does not exist": "relation \"file_service.tbl_files\" does not exist", + "ENOENT: no such file or directory, open 'C:\\Users\\TUNG DO\\upload-file-backend\\public\\12\\755296-200.png'": "ENOENT: no such file or directory, open 'C:\\Users\\TUNG DO\\upload-file-backend\\public\\12\\755296-200.png'", + "ENOENT: no such file or directory, open 'C:\\Users\\TUNG DO\\upload-file-backend\\public\\undefined\\755296-200.png'": "ENOENT: no such file or directory, open 'C:\\Users\\TUNG DO\\upload-file-backend\\public\\undefined\\755296-200.png'", + "ENOENT: no such file or directory, open 'C:\\Users\\TUNG DO\\upload-file-backend\\public\\undefined\\Papers-1(2).docx'": "ENOENT: no such file or directory, open 'C:\\Users\\TUNG DO\\upload-file-backend\\public\\undefined\\Papers-1(2).docx'", + "ENOENT: no such file or directory, open 'C:\\Users\\TUNG DO\\upload-file-backend\\public\\undefined\\style.txt'": "ENOENT: no such file or directory, open 'C:\\Users\\TUNG DO\\upload-file-backend\\public\\undefined\\style.txt'", + "ENOENT: no such file or directory, open 'C:\\Users\\TUNG DO\\upload-file-backend\\public\\12\\style.txt'": "ENOENT: no such file or directory, open 'C:\\Users\\TUNG DO\\upload-file-backend\\public\\12\\style.txt'", + "Cannot read properties of undefined (reading 'locals')": "Cannot read properties of undefined (reading 'locals')", + "body is not defined": "body is not defined", + "Tài khoản này đã được đăng kí": "Tài khoản này đã được đăng kí", + "file is not defined": "file is not defined", + "pick is not defined": "pick is not defined", + "path is not defined": "path is not defined", + "Cannot read properties of undefined (reading 'isFolder')": "Cannot read properties of undefined (reading 'isFolder')", + "Cannot read properties of undefined (reading 'isDirectory')": "Cannot read properties of undefined (reading 'isDirectory')", + "data.url.isDirectory is not a function": "data.url.isDirectory is not a function", + "ENOENT: no such file or directory, lstat 'http://103.162.31.170\\15\\login-password.json'": "ENOENT: no such file or directory, lstat 'http://103.162.31.170\\15\\login-password.json'", + "ENOENT: no such file or directory, lstat 'public/15/undefined/login-password.json'": "ENOENT: no such file or directory, lstat 'public/15/undefined/login-password.json'", + "ENOENT: no such file or directory, open 'C:\\Users\\TUNG DO\\upload-file-backend\\public\\59\\Papers-1(2).docx'": "ENOENT: no such file or directory, open 'C:\\Users\\TUNG DO\\upload-file-backend\\public\\59\\Papers-1(2).docx'", + "ENOENT: no such file or directory, open 'C:\\Users\\TUNG DO\\upload-file-backend\\public\\60\\Papers-1(2).docx'": "ENOENT: no such file or directory, open 'C:\\Users\\TUNG DO\\upload-file-backend\\public\\60\\Papers-1(2).docx'", + "ENOENT: no such file or directory, lstat 'public/60//Papers-1 (2).docx'": "ENOENT: no such file or directory, lstat 'public/60//Papers-1 (2).docx'", + "Converting circular structure to JSON\n --> starting at object with constructor 'Object'\n --- property 'win32' closes the circle": "Converting circular structure to JSON\n --> starting at object with constructor 'Object'\n --- property 'win32' closes the circle", + "EPERM: operation not permitted, lstat 'public\\download\\60\\1233532-1691036912591.zip'": "EPERM: operation not permitted, lstat 'public\\download\\60\\1233532-1691036912591.zip'", + "_file2.default.find is not a function": "_file2.default.find is not a function", + "storage is not defined": "storage is not defined", + "queue closed": "queue closed", + "downnload_count_list is not defined": "downnload_count_list is not defined", + "ENOENT: no such file or directory, open 'C:\\Users\\TUNG DO\\upload-file-backend\\public\\undefined\\deeplearning_ex2.py'": "ENOENT: no such file or directory, open 'C:\\Users\\TUNG DO\\upload-file-backend\\public\\undefined\\deeplearning_ex2.py'", + "invalid input syntax for type integer: \"deeplearning_ex2.py\"": "invalid input syntax for type integer: \"deeplearning_ex2.py\"" } \ No newline at end of file diff --git a/src/config/postgres.js b/src/config/postgres.js index 4ba92c2..f961a18 100644 --- a/src/config/postgres.js +++ b/src/config/postgres.js @@ -1,40 +1,40 @@ -import Sequelize from 'sequelize'; -import bluebird from 'bluebird'; -import { postgres, env } from './vars'; - -Sequelize.Promise = bluebird; - -const defaultErrorHandler = (err) => { - console.log(`Connection to Postgres error: ${err}`); -}; - -const app = { - sequelize: new Sequelize( - postgres.uri, - { - dialect: 'postgres' - } - ), - connect(errorHandler = defaultErrorHandler) { - this.sequelize.authenticate() - .then(() => { - console.log('Postgres connection established!'); - if (env === '1') { - this.sequelize.sync({ - alter: true, - logging: true - }); - } - }).catch((error) => { - errorHandler(error); - }); - return this.sequelize; - }, - disconnect() { - // close connection - console.log('Closing postgres connection!'); - this.sequelize.close(); - } -}; - -export default app; +import Sequelize from 'sequelize'; +import bluebird from 'bluebird'; +import { postgres, env } from './vars'; + +Sequelize.Promise = bluebird; + +const defaultErrorHandler = (err) => { + console.log(`Connection to Postgres error: ${err}`); +}; + +const app = { + sequelize: new Sequelize( + postgres.uri, + { + dialect: 'postgres' + } + ), + connect(errorHandler = defaultErrorHandler) { + this.sequelize.authenticate() + .then(() => { + console.log('Postgres connection established!'); + if (env === '1') { + this.sequelize.sync({ + alter: true, + logging: true + }); + } + }).catch((error) => { + errorHandler(error); + }); + return this.sequelize; + }, + disconnect() { + // close connection + console.log('Closing postgres connection!'); + this.sequelize.close(); + } +}; + +export default app; diff --git a/yarn.lock b/yarn.lock index 75e6f3f..35a851b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,61 @@ # yarn lockfile v1 +"@bugsnag/browser@^7.16.7": + "integrity" "sha512-4J4s53ZpYr3hHA+QjxUjOI6U+A8+XuUVH45UshE87Jp2Y4mV8ML2DovejqJS8J8yjdbnh2z1Wtg/v3WUNt4ayQ==" + "resolved" "https://registry.npmjs.org/@bugsnag/browser/-/browser-7.20.2.tgz" + "version" "7.20.2" + dependencies: + "@bugsnag/core" "^7.19.0" + +"@bugsnag/core@^7.19.0": + "integrity" "sha512-2KGwdaLD9PhR7Wk7xPi3jGuGsKTatc/28U4TOZIDU3CgC2QhGjubwiXSECel5gwxhZ3jACKcMKSV2ovHhv1NrA==" + "resolved" "https://registry.npmjs.org/@bugsnag/core/-/core-7.19.0.tgz" + "version" "7.19.0" + dependencies: + "@bugsnag/cuid" "^3.0.0" + "@bugsnag/safe-json-stringify" "^6.0.0" + "error-stack-parser" "^2.0.3" + "iserror" "0.0.2" + "stack-generator" "^2.0.3" + +"@bugsnag/cuid@^3.0.0": + "integrity" "sha512-cIwzC93r3PQ/INeuwtZwkZIG2K8WWN0rRLZQhu+mr48Ay+i6sEki4GYfTsflse7hZ1BeDWrNb/Q9vgY3B31xHQ==" + "resolved" "https://registry.npmjs.org/@bugsnag/cuid/-/cuid-3.0.2.tgz" + "version" "3.0.2" + +"@bugsnag/js@7.16.7": + "integrity" "sha512-i4MDIKhnPUMSpx5+XmKxrvFGAY6qZXcdBu+nplr2TrPymkJ+NNEpLyR6dijeqy5ehXaUnogN4RBfFeS9Btu1pw==" + "resolved" "https://registry.npmjs.org/@bugsnag/js/-/js-7.16.7.tgz" + "version" "7.16.7" + dependencies: + "@bugsnag/browser" "^7.16.7" + "@bugsnag/node" "^7.16.7" + +"@bugsnag/node@^7.16.7": + "integrity" "sha512-c4snyxx5d/fsMogmgehFBGc//daH6+4XCplia4zrEQYltjaQ+l8ud0dPx623DgJl/2j1+2zlRc7y7IHSd7Gm5w==" + "resolved" "https://registry.npmjs.org/@bugsnag/node/-/node-7.19.0.tgz" + "version" "7.19.0" + dependencies: + "@bugsnag/core" "^7.19.0" + "byline" "^5.0.0" + "error-stack-parser" "^2.0.2" + "iserror" "^0.0.2" + "pump" "^3.0.0" + "stack-generator" "^2.0.3" + +"@bugsnag/safe-json-stringify@^6.0.0": + "integrity" "sha512-htzFO1Zc57S8kgdRK9mLcPVTW1BY2ijfH7Dk2CeZmspTWKdKqSo1iwmqrq2WtRjFlo8aRZYgLX0wFrDXF/9DLA==" + "resolved" "https://registry.npmjs.org/@bugsnag/safe-json-stringify/-/safe-json-stringify-6.0.0.tgz" + "version" "6.0.0" + +"@cspotcode/source-map-support@^0.8.0": + "integrity" "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==" + "resolved" "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" + "version" "0.8.1" + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + "@fast-csv/format@4.3.5": "integrity" "sha512-8iRn6QF3I8Ak78lNAa+Gdl5MJJBM5vRHivFtMRUWINdevNo00K7OXxS2PshawLKTejVwieIlPmK5YlLu6w4u8A==" "resolved" "https://registry.npmjs.org/@fast-csv/format/-/format-4.3.5.tgz" @@ -27,6 +82,323 @@ "lodash.isundefined" "^3.0.1" "lodash.uniq" "^4.5.0" +"@graphql-typed-document-node/core@^3.1.1": + "integrity" "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==" + "resolved" "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz" + "version" "3.2.0" + +"@iarna/toml@2.2.5": + "integrity" "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==" + "resolved" "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz" + "version" "2.2.5" + +"@jridgewell/resolve-uri@^3.0.3": + "integrity" "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==" + "resolved" "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz" + "version" "3.1.1" + +"@jridgewell/sourcemap-codec@^1.4.10": + "integrity" "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + "resolved" "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" + "version" "1.4.15" + +"@jridgewell/trace-mapping@0.3.9": + "integrity" "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==" + "resolved" "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" + "version" "0.3.9" + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@kwsites/file-exists@^1.1.1": + "integrity" "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==" + "resolved" "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "debug" "^4.1.1" + +"@kwsites/promise-deferred@^1.1.1": + "integrity" "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==" + "resolved" "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz" + "version" "1.1.1" + +"@nodelib/fs.scandir@2.1.5": + "integrity" "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + "version" "2.1.5" + dependencies: + "@nodelib/fs.stat" "2.0.5" + "run-parallel" "^1.1.9" + +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": + "integrity" "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + "version" "2.0.5" + +"@nodelib/fs.walk@^1.2.3": + "integrity" "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + "version" "1.2.8" + dependencies: + "@nodelib/fs.scandir" "2.1.5" + "fastq" "^1.6.0" + +"@oclif/color@^1.0.4": + "integrity" "sha512-HEcVnSzpQkjskqWJyVN3tGgR0H0F8GrBmDjgQ1N0ZwwktYa4y9kfV07P/5vt5BjPXNyslXHc4KAO8Bt7gmErCA==" + "resolved" "https://registry.npmjs.org/@oclif/color/-/color-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "ansi-styles" "^4.2.1" + "chalk" "^4.1.0" + "strip-ansi" "^6.0.1" + "supports-color" "^8.1.1" + "tslib" "^2" + +"@oclif/core@^2.1.1", "@oclif/core@2.1.4": + "integrity" "sha512-8rPS/gsjLgWp//nraRs5/yf7EkueFHBLRTMUli3yTu88XrQ2czbXIP2HsF2rxmtCqUUfXUTllHfr8OzqBs0Dcw==" + "resolved" "https://registry.npmjs.org/@oclif/core/-/core-2.1.4.tgz" + "version" "2.1.4" + dependencies: + "@types/cli-progress" "^3.11.0" + "ansi-escapes" "^4.3.2" + "ansi-styles" "^4.3.0" + "cardinal" "^2.1.1" + "chalk" "^4.1.2" + "clean-stack" "^3.0.1" + "cli-progress" "^3.11.2" + "debug" "^4.3.4" + "ejs" "^3.1.6" + "fs-extra" "^9.1.0" + "get-package-type" "^0.1.0" + "globby" "^11.1.0" + "hyperlinker" "^1.0.0" + "indent-string" "^4.0.0" + "is-wsl" "^2.2.0" + "js-yaml" "^3.14.1" + "natural-orderby" "^2.0.3" + "object-treeify" "^1.1.33" + "password-prompt" "^1.1.2" + "semver" "^7.3.7" + "string-width" "^4.2.3" + "strip-ansi" "^6.0.1" + "supports-color" "^8.1.1" + "supports-hyperlinks" "^2.2.0" + "tslib" "^2.5.0" + "widest-line" "^3.1.0" + "wordwrap" "^1.0.0" + "wrap-ansi" "^7.0.0" + +"@oclif/core@^2.1.6": + "integrity" "sha512-316DLfrHQDYmWDriI4Woxk9y1wVUrPN1sZdbQLHdOdlTA9v/twe7TdHpWOriEypfl6C85NWEJKc1870yuLtjrQ==" + "resolved" "https://registry.npmjs.org/@oclif/core/-/core-2.8.5.tgz" + "version" "2.8.5" + dependencies: + "@types/cli-progress" "^3.11.0" + "ansi-escapes" "^4.3.2" + "ansi-styles" "^4.3.0" + "cardinal" "^2.1.1" + "chalk" "^4.1.2" + "clean-stack" "^3.0.1" + "cli-progress" "^3.12.0" + "debug" "^4.3.4" + "ejs" "^3.1.8" + "fs-extra" "^9.1.0" + "get-package-type" "^0.1.0" + "globby" "^11.1.0" + "hyperlinker" "^1.0.0" + "indent-string" "^4.0.0" + "is-wsl" "^2.2.0" + "js-yaml" "^3.14.1" + "natural-orderby" "^2.0.3" + "object-treeify" "^1.1.33" + "password-prompt" "^1.1.2" + "semver" "^7.3.7" + "string-width" "^4.2.3" + "strip-ansi" "^6.0.1" + "supports-color" "^8.1.1" + "supports-hyperlinks" "^2.2.0" + "ts-node" "^10.9.1" + "tslib" "^2.5.0" + "widest-line" "^3.1.0" + "wordwrap" "^1.0.0" + "wrap-ansi" "^7.0.0" + +"@oclif/core@^2.3.1": + "integrity" "sha512-316DLfrHQDYmWDriI4Woxk9y1wVUrPN1sZdbQLHdOdlTA9v/twe7TdHpWOriEypfl6C85NWEJKc1870yuLtjrQ==" + "resolved" "https://registry.npmjs.org/@oclif/core/-/core-2.8.5.tgz" + "version" "2.8.5" + dependencies: + "@types/cli-progress" "^3.11.0" + "ansi-escapes" "^4.3.2" + "ansi-styles" "^4.3.0" + "cardinal" "^2.1.1" + "chalk" "^4.1.2" + "clean-stack" "^3.0.1" + "cli-progress" "^3.12.0" + "debug" "^4.3.4" + "ejs" "^3.1.8" + "fs-extra" "^9.1.0" + "get-package-type" "^0.1.0" + "globby" "^11.1.0" + "hyperlinker" "^1.0.0" + "indent-string" "^4.0.0" + "is-wsl" "^2.2.0" + "js-yaml" "^3.14.1" + "natural-orderby" "^2.0.3" + "object-treeify" "^1.1.33" + "password-prompt" "^1.1.2" + "semver" "^7.3.7" + "string-width" "^4.2.3" + "strip-ansi" "^6.0.1" + "supports-color" "^8.1.1" + "supports-hyperlinks" "^2.2.0" + "ts-node" "^10.9.1" + "tslib" "^2.5.0" + "widest-line" "^3.1.0" + "wordwrap" "^1.0.0" + "wrap-ansi" "^7.0.0" + +"@oclif/plugin-commands@2.2.10": + "integrity" "sha512-fUOegX6RrJLC+euU/gPbBH6VX6aqh5vRpsg4r1NUlKvCSIJjCI78TSHUKECU+GQmvNA+3ql6tlD7hZ4rBTjKbg==" + "resolved" "https://registry.npmjs.org/@oclif/plugin-commands/-/plugin-commands-2.2.10.tgz" + "version" "2.2.10" + dependencies: + "@oclif/core" "^2.1.6" + "lodash" "^4.17.11" + +"@oclif/plugin-help@5.2.6": + "integrity" "sha512-nvpSbIOGtPIct3+OqXca3OIu5liyIynascncAXZy4JDD7z8rIGZ3NYJH2M4JhMVyGxCDZxQuLVsdALyIt67G5g==" + "resolved" "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-5.2.6.tgz" + "version" "5.2.6" + dependencies: + "@oclif/core" "^2.3.1" + +"@oclif/plugin-plugins@2.3.2": + "integrity" "sha512-jq/ik7A7bCO/oQp0/Znnpu8/JBXifAQ2OF2KmswbNYt7EpsLqz2DaI/CvkrXRSb+Edzx4Xx3usEgSyocVN/u2A==" + "resolved" "https://registry.npmjs.org/@oclif/plugin-plugins/-/plugin-plugins-2.3.2.tgz" + "version" "2.3.2" + dependencies: + "@oclif/color" "^1.0.4" + "@oclif/core" "^2.1.1" + "chalk" "^4.1.2" + "debug" "^4.3.4" + "fs-extra" "^9.0" + "http-call" "^5.2.2" + "load-json-file" "^5.3.0" + "npm-run-path" "^4.0.1" + "semver" "^7.3.8" + "tslib" "^2.4.1" + "yarn" "^1.22.18" + +"@pnpm/config.env-replace@^1.1.0": + "integrity" "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==" + "resolved" "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz" + "version" "1.1.0" + +"@pnpm/network.ca-file@^1.0.1": + "integrity" "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==" + "resolved" "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "graceful-fs" "4.2.10" + +"@pnpm/npm-conf@^2.1.0": + "integrity" "sha512-roLI1ul/GwzwcfcVpZYPdrgW2W/drLriObl1h+yLF5syc8/5ULWw2ALbCHUWF+4YltIqA3xFSbG4IwyJz37e9g==" + "resolved" "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "@pnpm/config.env-replace" "^1.1.0" + "@pnpm/network.ca-file" "^1.0.1" + "config-chain" "^1.1.11" + +"@shopify/cli-kit@3.45.4": + "integrity" "sha512-bdebfbgTvaKROPpZZ6RogzTHU8jhIiCsroVZKxeTq1CRinRO6EtG8oLOlFTxkMcS4IaxTvU7N0LtoGZMnz4Pbg==" + "resolved" "https://registry.npmjs.org/@shopify/cli-kit/-/cli-kit-3.45.4.tgz" + "version" "3.45.4" + dependencies: + "@bugsnag/js" "7.16.7" + "@iarna/toml" "2.2.5" + "@oclif/core" "2.1.4" + "@types/archiver" "5.3.1" + "abort-controller" "3.0.0" + "ansi-escapes" "6.0.0" + "archiver" "5.3.1" + "chalk" "5.2.0" + "change-case" "4.1.2" + "color-json" "3.0.5" + "commondir" "1.0.1" + "conf" "11.0.1" + "cross-zip" "4.0.0" + "deepmerge" "4.3.0" + "del" "6.0.0" + "env-paths" "3.0.0" + "envfile" "6.18.0" + "execa" "6.0.0" + "fast-glob" "3.2.12" + "figures" "5.0.0" + "find-process" "1.4.7" + "find-up" "6.3.0" + "find-versions" "5.1.0" + "form-data" "4.0.0" + "fs-extra" "11.1.0" + "fuzzy" "0.1.3" + "get-port-please" "3.0.1" + "gradient-string" "2.0.2" + "graphql" "16.4.0" + "graphql-request" "5.2.0" + "ink" "4.0.0" + "is-interactive" "2.0.0" + "js-yaml" "4.1.0" + "kill-port-process" "3.1.0" + "latest-version" "7.0.0" + "liquidjs" "10.6.0" + "lodash" "4.17.21" + "macaddress" "0.5.3" + "node-abort-controller" "3.0.1" + "node-fetch" "3.2.4" + "open" "8.4.2" + "pathe" "1.0.0" + "react" "18.2.0" + "semver" "7.3.6" + "simple-git" "3.16.0" + "source-map-support" "0.5.21" + "stacktracey" "2.1.8" + "strip-ansi" "7.0.1" + "supports-hyperlinks" "3.0.0" + "tempy" "3.0.0" + "term-size" "3.0.2" + "terminal-link" "3.0.0" + "tree-kill" "1.2.2" + "ts-error" "1.0.6" + "unique-string" "3.0.0" + "zod" "3.17.3" + +"@shopify/cli@^3.45.4": + "integrity" "sha512-yjQZ1WbRxPgJrL9bk6kOgelVEqx0+hyWhcgMlfA0pdwS2EXASzZ3eo20r/daHIlkqf2sEAqm3UjCOYlymFllTw==" + "resolved" "https://registry.npmjs.org/@shopify/cli/-/cli-3.45.4.tgz" + "version" "3.45.4" + dependencies: + "@oclif/core" "2.1.4" + "@oclif/plugin-commands" "2.2.10" + "@oclif/plugin-help" "5.2.6" + "@oclif/plugin-plugins" "2.3.2" + "@shopify/cli-kit" "3.45.4" + "@shopify/plugin-did-you-mean" "3.45.4" + +"@shopify/plugin-did-you-mean@3.45.4": + "integrity" "sha512-8vGZ0xd+fjadhUQvM+FS5eoN3J/Q0bSrZctuduRe7a4ze8I3G3ZrGg2MtQt+++s+h+9FpFzizWuOvJz0j8RcJQ==" + "resolved" "https://registry.npmjs.org/@shopify/plugin-did-you-mean/-/plugin-did-you-mean-3.45.4.tgz" + "version" "3.45.4" + dependencies: + "@oclif/core" "2.1.4" + "@shopify/cli-kit" "3.45.4" + "n-gram" "2.0.2" + +"@sindresorhus/is@^5.2.0": + "integrity" "sha512-CX6t4SYQ37lzxicAqsBtxA3OseeoVrh9cSJ5PFYam0GksYlupRfy1A+Q4aYD3zvcfECLc0zO2u+ZnR2UYKvCrw==" + "resolved" "https://registry.npmjs.org/@sindresorhus/is/-/is-5.3.0.tgz" + "version" "5.3.0" + "@sinonjs/commons@^1", "@sinonjs/commons@^1.0.2", "@sinonjs/commons@^1.3.0", "@sinonjs/commons@^1.7.0": "integrity" "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==" "resolved" "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz" @@ -61,6 +433,47 @@ "resolved" "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz" "version" "0.7.1" +"@szmarczak/http-timer@^5.0.1": + "integrity" "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==" + "resolved" "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "defer-to-connect" "^2.0.1" + +"@tsconfig/node10@^1.0.7": + "integrity" "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" + "resolved" "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" + "version" "1.0.9" + +"@tsconfig/node12@^1.0.7": + "integrity" "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" + "resolved" "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" + "version" "1.0.11" + +"@tsconfig/node14@^1.0.0": + "integrity" "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + "resolved" "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" + "version" "1.0.3" + +"@tsconfig/node16@^1.0.2": + "integrity" "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" + "resolved" "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" + "version" "1.0.4" + +"@types/archiver@^5.3.2": + "integrity" "sha512-IctHreBuWE5dvBDz/0WeKtyVKVRs4h75IblxOACL92wU66v+HGAfEYAOyXkOFphvRJMhuXdI9huDXpX0FC6lCw==" + "resolved" "https://registry.npmjs.org/@types/archiver/-/archiver-5.3.2.tgz" + "version" "5.3.2" + dependencies: + "@types/readdir-glob" "*" + +"@types/archiver@5.3.1": + "integrity" "sha512-wKYZaSXaDvTZuInAWjCeGG7BEAgTWG2zZW0/f7IYFcoHB2X2d9lkVFnrOlXl3W6NrvO6Ml3FLLu8Uksyymcpnw==" + "resolved" "https://registry.npmjs.org/@types/archiver/-/archiver-5.3.1.tgz" + "version" "5.3.1" + dependencies: + "@types/glob" "*" + "@types/bson@*", "@types/bson@1.x || 4.0.x": "integrity" "sha512-vVLwMUqhYJSQ/WKcE60eFqcyuWse5fGH+NMAXHuKrUAPoryq3ATxk5o4bgYNtg5aOM4APVg7Hnb3ASqUYG0PKg==" "resolved" "https://registry.npmjs.org/@types/bson/-/bson-4.0.5.tgz" @@ -68,6 +481,26 @@ dependencies: "@types/node" "*" +"@types/cli-progress@^3.11.0": + "integrity" "sha512-XhXhBv1R/q2ahF3BM7qT5HLzJNlIL0wbcGyZVjqOTqAybAnsLisd7gy1UCyIqpL+5Iv6XhlSyzjLCnI2sIdbCg==" + "resolved" "https://registry.npmjs.org/@types/cli-progress/-/cli-progress-3.11.0.tgz" + "version" "3.11.0" + dependencies: + "@types/node" "*" + +"@types/glob@*": + "integrity" "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==" + "resolved" "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz" + "version" "8.1.0" + dependencies: + "@types/minimatch" "^5.1.2" + "@types/node" "*" + +"@types/http-cache-semantics@^4.0.1": + "integrity" "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" + "resolved" "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz" + "version" "4.0.1" + "@types/joi@^14.3.3": "integrity" "sha512-1TQNDJvIKlgYXGNIABfgFp9y0FziDpuGrd799Q5RcnsDu+krD+eeW/0Fs5PHARvWWFelOhIG2OPCo6KbadBM4A==" "resolved" "https://registry.npmjs.org/@types/joi/-/joi-14.3.4.tgz" @@ -78,6 +511,11 @@ "resolved" "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" "version" "0.0.29" +"@types/minimatch@^5.1.2": + "integrity" "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" + "resolved" "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz" + "version" "5.1.2" + "@types/mongodb@^3.5.27": "integrity" "sha512-WcdpPJCakFzcWWD9juKoZbRtQxKIMYF/JIAM4JrNHrMcnJL6/a2NWjXxW7fo9hxboxxkg+icff8d7+WIEvKgYQ==" "resolved" "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.6.20.tgz" @@ -91,11 +529,35 @@ "resolved" "https://registry.npmjs.org/@types/node/-/node-14.18.4.tgz" "version" "14.18.4" +"@types/readdir-glob@*": + "integrity" "sha512-ImM6TmoF8bgOwvehGviEj3tRdRBbQujr1N+0ypaln/GWjaerOB26jb93vsRHmdMtvVQZQebOlqt2HROark87mQ==" + "resolved" "https://registry.npmjs.org/@types/readdir-glob/-/readdir-glob-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "@types/node" "*" + +"@types/tinycolor2@^1.4.0": + "integrity" "sha512-Kf1w9NE5HEgGxCRyIcRXR/ZYtDv0V8FVPtYHwLxl0O+maGX0erE77pQlD0gpP+/KByMZ87mOA79SjifhSB3PjQ==" + "resolved" "https://registry.npmjs.org/@types/tinycolor2/-/tinycolor2-1.4.3.tgz" + "version" "1.4.3" + +"@types/yoga-layout@1.9.2": + "integrity" "sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw==" + "resolved" "https://registry.npmjs.org/@types/yoga-layout/-/yoga-layout-1.9.2.tgz" + "version" "1.9.2" + "abbrev@1": "integrity" "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" "resolved" "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" "version" "1.1.1" +"abort-controller@3.0.0": + "integrity" "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==" + "resolved" "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "event-target-shim" "^5.0.0" + "accepts@~1.3.5", "accepts@~1.3.7": "integrity" "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==" "resolved" "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz" @@ -111,6 +573,11 @@ dependencies: "acorn" "^3.0.4" +"acorn-walk@^8.1.1": + "integrity" "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" + "resolved" "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" + "version" "8.2.0" + "acorn@^3.0.4": "integrity" "sha1-ReN/s56No/JbruP/U2niu18iAXo= sha512-OLUyIIZ7mF5oaAUT1w0TFqQS81q3saT46x8t7ukpPjMNk+nbs4ZHhs7ToV8EWnLYLepjETXd4XaCE4uxkMeqUw==" "resolved" "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz" @@ -121,6 +588,11 @@ "resolved" "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz" "version" "5.7.4" +"acorn@^8.4.1": + "integrity" "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==" + "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz" + "version" "8.8.2" + "adler-32@~1.2.0": "integrity" "sha1-aj5r8KY5ALoVZSgIyxXGgT0aXyU= sha512-/vUqU/UY4MVeFsg+SsK6c+/05RZXIHZMGJA+PX5JyWI0ZRcBpupnRuPLU/NXXoFwMYCPCoxIfElM2eS+DUXCqQ==" "resolved" "https://registry.npmjs.org/adler-32/-/adler-32-1.2.0.tgz" @@ -136,6 +608,21 @@ dependencies: "printj" "~1.2.2" +"aggregate-error@^3.0.0": + "integrity" "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==" + "resolved" "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "clean-stack" "^2.0.0" + "indent-string" "^4.0.0" + +"ajv-formats@^2.1.1": + "integrity" "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==" + "resolved" "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "ajv" "^8.0.0" + "ajv-keywords@^2.1.0": "integrity" "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I= sha512-ZFztHzVRdGLAzJmpUT9LNFLe1YiVOEylcaNpEutM26PVTCtOD919IMfD01CgbRouB42Dd9atjx1HseC15DgOZA==" "resolved" "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz" @@ -161,6 +648,26 @@ "json-schema-traverse" "^0.4.1" "uri-js" "^4.2.2" +"ajv@^8.0.0": + "integrity" "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==" + "resolved" "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" + "version" "8.12.0" + dependencies: + "fast-deep-equal" "^3.1.1" + "json-schema-traverse" "^1.0.0" + "require-from-string" "^2.0.2" + "uri-js" "^4.2.2" + +"ajv@^8.12.0": + "integrity" "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==" + "resolved" "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" + "version" "8.12.0" + dependencies: + "fast-deep-equal" "^3.1.1" + "json-schema-traverse" "^1.0.0" + "require-from-string" "^2.0.2" + "uri-js" "^4.2.2" + "align-text@^0.1.1", "align-text@^0.1.3": "version" "0.1.4" dependencies: @@ -202,11 +709,39 @@ dependencies: "string-width" "^2.0.0" -"ansi-escapes@^3.0.0": +"ansi-escapes@^3.0.0", "ansi-escapes@^3.1.0": "integrity" "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" "resolved" "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz" "version" "3.2.0" +"ansi-escapes@^4.3.2": + "integrity" "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==" + "resolved" "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" + "version" "4.3.2" + dependencies: + "type-fest" "^0.21.3" + +"ansi-escapes@^5.0.0": + "integrity" "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==" + "resolved" "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "type-fest" "^1.0.2" + +"ansi-escapes@^6.0.0": + "integrity" "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==" + "resolved" "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz" + "version" "6.2.0" + dependencies: + "type-fest" "^3.0.0" + +"ansi-escapes@6.0.0": + "integrity" "sha512-IG23inYII3dWlU2EyiAiGj6Bwal5GzsgPMwjYGvc1HPE2dgbj4ZB5ToWBKSquKw74nB3TIuOwaI6/jSULzfgrw==" + "resolved" "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "type-fest" "^3.0.0" + "ansi-regex@^2.0.0": "integrity" "sha1-w7M6te42DYbg5ijwRorn7yfWVN8= sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" @@ -217,6 +752,16 @@ "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz" "version" "3.0.0" +"ansi-regex@^5.0.1": + "integrity" "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + "version" "5.0.1" + +"ansi-regex@^6.0.1": + "integrity" "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" + "version" "6.0.1" + "ansi-styles@^2.2.1": "integrity" "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==" "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz" @@ -229,6 +774,30 @@ dependencies: "color-convert" "^1.9.0" +"ansi-styles@^4.0.0": + "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "color-convert" "^2.0.1" + +"ansi-styles@^4.1.0", "ansi-styles@^4.2.1", "ansi-styles@^4.3.0": + "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "color-convert" "^2.0.1" + +"ansi-styles@^6.0.0", "ansi-styles@^6.1.0": + "integrity" "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" + "version" "6.2.1" + +"ansicolors@~0.3.2": + "integrity" "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==" + "resolved" "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz" + "version" "0.3.2" + "any-promise@^1.3.0": "integrity" "sha1-q8av7tzqUugJzcA3au0845Y10X8= sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" "resolved" "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz" @@ -283,13 +852,13 @@ "normalize-path" "^3.0.0" "readable-stream" "^2.0.0" -"archiver@^5.0.0": - "integrity" "sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==" - "resolved" "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz" - "version" "5.3.0" +"archiver@^5.0.0", "archiver@^5.3.1", "archiver@5.3.1": + "integrity" "sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w==" + "resolved" "https://registry.npmjs.org/archiver/-/archiver-5.3.1.tgz" + "version" "5.3.1" dependencies: "archiver-utils" "^2.1.0" - "async" "^3.2.0" + "async" "^3.2.3" "buffer-crc32" "^0.2.1" "readable-stream" "^3.6.0" "readdir-glob" "^1.0.0" @@ -309,6 +878,11 @@ "delegates" "^1.0.0" "readable-stream" "^2.0.6" +"arg@^4.1.0": + "integrity" "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + "resolved" "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" + "version" "4.1.3" + "argparse@^1.0.7": "integrity" "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==" "resolved" "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" @@ -316,6 +890,11 @@ dependencies: "sprintf-js" "~1.0.2" +"argparse@^2.0.1": + "integrity" "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "resolved" "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + "version" "2.0.1" + "arr-diff@^2.0.0": "integrity" "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8= sha512-dtXTVMkh6VkEEA7OhXnN1Ecb8aAGFdZ1LFxtOCoqj4qkyOJMt7+qs6Ahdy6p/NQCPYsRSXXivhSB/J5E9jmYKA==" "resolved" "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz" @@ -359,6 +938,11 @@ "get-intrinsic" "^1.1.1" "is-string" "^1.0.7" +"array-union@^2.1.0": + "integrity" "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + "resolved" "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + "version" "2.1.0" + "array-unique@^0.2.1": "integrity" "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM= sha512-G2n5bG5fSUCpnsXz4+8FUkYsGPkNfLn9YvS66U5qbTIXI2Ynnlo4Bi42bWv+omKUCqz+ejzfClwne0alJWJPhg==" "resolved" "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz" @@ -383,6 +967,13 @@ "resolved" "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" "version" "1.0.1" +"as-table@^1.0.36": + "integrity" "sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==" + "resolved" "https://registry.npmjs.org/as-table/-/as-table-1.0.55.tgz" + "version" "1.0.55" + dependencies: + "printable-characters" "^1.0.42" + "asn1@~0.2.3": "integrity" "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==" "resolved" "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" @@ -435,10 +1026,10 @@ dependencies: "lodash" "^4.17.14" -"async@^3.2.0": - "integrity" "sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g==" - "resolved" "https://registry.npmjs.org/async/-/async-3.2.2.tgz" - "version" "3.2.2" +"async@^3.2.3": + "integrity" "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + "resolved" "https://registry.npmjs.org/async/-/async-3.2.4.tgz" + "version" "3.2.4" "async@1.5": "integrity" "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==" @@ -450,6 +1041,11 @@ "resolved" "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" "version" "0.4.0" +"at-least-node@^1.0.0": + "integrity" "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" + "resolved" "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" + "version" "1.0.0" + "atob@^2.0.0": "version" "2.1.1" @@ -458,6 +1054,14 @@ "resolved" "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz" "version" "2.1.2" +"atomically@^2.0.0": + "integrity" "sha512-sxBhVZUFBFhqSAsYMM3X2oaUi2NVDJ8U026FsIusM8gYXls9AYs/eXzgGrufs1Qjpkxi9zunds+75QUFz+m7UQ==" + "resolved" "https://registry.npmjs.org/atomically/-/atomically-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "stubborn-fs" "^1.2.4" + "when-exit" "^2.0.0" + "auth-adapter@1.1.0": "integrity" "sha512-qVomBD3Z14jaXeezMFrVwciziYVTfTHJzgXgdELusR9+NFYavsr4EkKbfv/arYjUOtPxZgDGYRKxdCGMVkhDIg==" "resolved" "https://registry.npmjs.org/auth-adapter/-/auth-adapter-1.1.0.tgz" @@ -466,6 +1070,11 @@ "http-status" "^1.2.0" "jsonwebtoken" "^8.3.0" +"auto-bind@^5.0.1": + "integrity" "sha512-ooviqdwwgfIfNmDwo94wlshcdzfO64XV0Cg6oDsDYBJfITDz1EngD2z7DkbvCWn+XIMsIqW27sEVF6qcpJrRcg==" + "resolved" "https://registry.npmjs.org/auto-bind/-/auto-bind-5.0.1.tgz" + "version" "5.0.1" + "aws-sign2@~0.7.0": "integrity" "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==" "resolved" "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz" @@ -1189,6 +1798,13 @@ "balanced-match" "^1.0.0" "concat-map" "0.0.1" +"brace-expansion@^2.0.1": + "integrity" "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==" + "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "balanced-match" "^1.0.0" + "braces@^1.8.2": "integrity" "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc= sha512-xU7bpz2ytJl1bH9cgIurjpg/n8Gohy9GTw81heDYLJQ4RU60dlyJsa+atVF2pI0yMMvKxI9HkKwjePCj5XI1hw==" "resolved" "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz" @@ -1214,6 +1830,13 @@ "split-string" "^3.0.2" "to-regex" "^3.0.1" +"braces@^3.0.2": + "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==" + "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "fill-range" "^7.0.1" + "browser-stdout@1.3.0": "integrity" "sha1-81HTKWnTL6XXpVZxVCY9korjvR8= sha512-7Rfk377tpSM9TWBEeHs0FlDZGoAIei2V/4MdZJoFMBFAK6BqLpxAIUepGRHGdPFgGsLb02PXovC4qddyHvQqTg==" "resolved" "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz" @@ -1309,6 +1932,11 @@ dependencies: "streamsearch" "^1.1.0" +"byline@^5.0.0": + "integrity" "sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==" + "resolved" "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz" + "version" "5.0.0" + "bytes@3.0.0": "integrity" "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" "resolved" "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz" @@ -1334,6 +1962,24 @@ "union-value" "^1.0.0" "unset-value" "^1.0.0" +"cacheable-lookup@^7.0.0": + "integrity" "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==" + "resolved" "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz" + "version" "7.0.0" + +"cacheable-request@^10.2.8": + "integrity" "sha512-v6WB+Epm/qO4Hdlio/sfUn69r5Shgh39SsE9DSd4bIezP0mblOlObI+I0kUEM7J0JFc+I7pSeMeYaOYtX1N/VQ==" + "resolved" "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.10.tgz" + "version" "10.2.10" + dependencies: + "@types/http-cache-semantics" "^4.0.1" + "get-stream" "^6.0.1" + "http-cache-semantics" "^4.1.1" + "keyv" "^4.5.2" + "mimic-response" "^4.0.0" + "normalize-url" "^8.0.0" + "responselike" "^3.0.0" + "caching-transform@^1.0.0": "integrity" "sha1-bb2y8g+Nj7znnz6U6dF0Lc31wKE=" "resolved" "https://registry.npmjs.org/caching-transform/-/caching-transform-1.0.1.tgz" @@ -1363,6 +2009,14 @@ "resolved" "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz" "version" "0.2.0" +"camel-case@^4.1.2": + "integrity" "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==" + "resolved" "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz" + "version" "4.1.2" + dependencies: + "pascal-case" "^3.1.2" + "tslib" "^2.0.3" + "camelcase@^1.0.2": "version" "1.2.1" @@ -1386,11 +2040,28 @@ "resolved" "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001282.tgz" "version" "1.0.30001282" +"capital-case@^1.0.4": + "integrity" "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==" + "resolved" "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "no-case" "^3.0.4" + "tslib" "^2.0.3" + "upper-case-first" "^2.0.2" + "capture-stack-trace@^1.0.0": "integrity" "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==" "resolved" "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz" "version" "1.0.1" +"cardinal@^2.1.1": + "integrity" "sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==" + "resolved" "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "ansicolors" "~0.3.2" + "redeyed" "~2.1.0" + "caseless@~0.12.0": "integrity" "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" "resolved" "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz" @@ -1475,6 +2146,66 @@ "escape-string-regexp" "^1.0.5" "supports-color" "^5.3.0" +"chalk@^4.0.0": + "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + "version" "4.1.2" + dependencies: + "ansi-styles" "^4.1.0" + "supports-color" "^7.1.0" + +"chalk@^4.0.2": + "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + "version" "4.1.2" + dependencies: + "ansi-styles" "^4.1.0" + "supports-color" "^7.1.0" + +"chalk@^4.1.0": + "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + "version" "4.1.2" + dependencies: + "ansi-styles" "^4.1.0" + "supports-color" "^7.1.0" + +"chalk@^4.1.2": + "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + "version" "4.1.2" + dependencies: + "ansi-styles" "^4.1.0" + "supports-color" "^7.1.0" + +"chalk@^5.2.0": + "integrity" "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz" + "version" "5.2.0" + +"chalk@5.2.0": + "integrity" "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz" + "version" "5.2.0" + +"change-case@4.1.2": + "integrity" "sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==" + "resolved" "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz" + "version" "4.1.2" + dependencies: + "camel-case" "^4.1.2" + "capital-case" "^1.0.4" + "constant-case" "^3.0.4" + "dot-case" "^3.0.4" + "header-case" "^2.0.4" + "no-case" "^3.0.4" + "param-case" "^3.0.4" + "pascal-case" "^3.1.2" + "path-case" "^3.0.4" + "sentence-case" "^3.0.4" + "snake-case" "^3.0.4" + "tslib" "^2.0.3" + "chardet@^0.4.0": "integrity" "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I= sha512-j/Toj7f1z98Hh2cYo2BVr85EpIRWqUi7rtRSGxh/cqUjqrnJe9l9UE7IUGd2vQ2p+kSHLkSzObQPZPLUC6TQwg==" "resolved" "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz" @@ -1554,6 +2285,11 @@ "resolved" "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz" "version" "1.6.0" +"ci-info@^3.2.0": + "integrity" "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==" + "resolved" "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz" + "version" "3.8.0" + "circular-json@^0.3.1": "integrity" "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==" "resolved" "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz" @@ -1569,11 +2305,28 @@ "isobject" "^3.0.0" "static-extend" "^0.1.1" +"clean-stack@^2.0.0": + "integrity" "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + "resolved" "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" + "version" "2.2.0" + +"clean-stack@^3.0.1": + "integrity" "sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==" + "resolved" "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "escape-string-regexp" "4.0.0" + "cli-boxes@^1.0.0": "integrity" "sha1-T6kXw+WclKAEzWH47lCdplFocUM= sha512-3Fo5wu8Ytle8q9iCzS4D2MWVL2X7JVWRiS1BnXbTFDhS9c/REkM9vd1AmabsoZoY5/dGi5TT9iKL8Kb6DeBRQg==" "resolved" "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz" "version" "1.0.0" +"cli-boxes@^3.0.0": + "integrity" "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==" + "resolved" "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz" + "version" "3.0.0" + "cli-cursor@^2.1.0": "integrity" "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==" "resolved" "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz" @@ -1581,6 +2334,20 @@ dependencies: "restore-cursor" "^2.0.0" +"cli-cursor@^4.0.0": + "integrity" "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==" + "resolved" "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "restore-cursor" "^4.0.0" + +"cli-progress@^3.11.2", "cli-progress@^3.12.0": + "integrity" "sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==" + "resolved" "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz" + "version" "3.12.0" + dependencies: + "string-width" "^4.2.3" + "cli-table-redemption@^1.0.0": "integrity" "sha512-SjVCciRyx01I4azo2K2rcc0NP/wOceXGzG1ZpYkEulbbIxDA/5YWv0oxG2HtQ4v8zPC6bgbRI7SbNaTZCxMNkg==" "resolved" "https://registry.npmjs.org/cli-table-redemption/-/cli-table-redemption-1.0.1.tgz" @@ -1588,6 +2355,14 @@ dependencies: "chalk" "^1.1.3" +"cli-truncate@^3.1.0": + "integrity" "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==" + "resolved" "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "slice-ansi" "^5.0.0" + "string-width" "^5.0.0" + "cli-width@^2.0.0": "integrity" "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" "resolved" "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz" @@ -1617,6 +2392,13 @@ "resolved" "https://registry.npmjs.org/co/-/co-4.6.0.tgz" "version" "4.6.0" +"code-excerpt@^4.0.0": + "integrity" "sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==" + "resolved" "https://registry.npmjs.org/code-excerpt/-/code-excerpt-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "convert-to-spaces" "^2.0.1" + "code-point-at@^1.0.0": "integrity" "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==" "resolved" "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz" @@ -1652,6 +2434,11 @@ dependencies: "color-name" "~1.1.4" +"color-json@3.0.5": + "integrity" "sha512-DG4zae1GmHDBNsYTUe+GJiDnuKutxs2vVSkPRQqbeA6oEGBRQyRixV+HmIByasCfyf9L0CwHo8vOoiHqe7Lzng==" + "resolved" "https://registry.npmjs.org/color-json/-/color-json-3.0.5.tgz" + "version" "3.0.5" + "color-name@^1.0.0", "color-name@~1.1.4": "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" @@ -1678,18 +2465,28 @@ "color-convert" "^2.0.1" "color-string" "^1.9.0" -"combined-stream@^1.0.6", "combined-stream@~1.0.6": +"combined-stream@^1.0.6", "combined-stream@^1.0.8", "combined-stream@~1.0.6": "integrity" "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==" "resolved" "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" "version" "1.0.8" dependencies: "delayed-stream" "~1.0.0" +"commander@^10.0.0": + "integrity" "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==" + "resolved" "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz" + "version" "10.0.1" + "commander@^2.11.0": "integrity" "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" "resolved" "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" "version" "2.20.3" +"commander@^5.1.0": + "integrity" "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" + "resolved" "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz" + "version" "5.1.0" + "commander@~2.14.1": "integrity" "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==" "resolved" "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz" @@ -1717,6 +2514,11 @@ "resolved" "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" "version" "1.0.1" +"commondir@1.0.1": + "integrity" "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" + "resolved" "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" + "version" "1.0.1" + "component-emitter@^1.2.0", "component-emitter@^1.2.1": "integrity" "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" "resolved" "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz" @@ -1767,6 +2569,28 @@ "readable-stream" "^2.2.2" "typedarray" "^0.0.6" +"conf@11.0.1": + "integrity" "sha512-WlLiQboEjKx0bYx2IIRGedBgNjLAxtwPaCSnsjWPST5xR0DB4q8lcsO/bEH9ZRYNcj63Y9vj/JG/5Fg6uWzI0Q==" + "resolved" "https://registry.npmjs.org/conf/-/conf-11.0.1.tgz" + "version" "11.0.1" + dependencies: + "ajv" "^8.12.0" + "ajv-formats" "^2.1.1" + "atomically" "^2.0.0" + "debounce-fn" "^5.1.2" + "dot-prop" "^7.2.0" + "env-paths" "^3.0.0" + "json-schema-typed" "^8.0.1" + "semver" "^7.3.8" + +"config-chain@^1.1.11": + "integrity" "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==" + "resolved" "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz" + "version" "1.1.13" + dependencies: + "ini" "^1.3.4" + "proto-list" "~1.2.1" + "configstore@^3.0.0": "integrity" "sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA==" "resolved" "https://registry.npmjs.org/configstore/-/configstore-3.1.5.tgz" @@ -1784,6 +2608,15 @@ "resolved" "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" "version" "1.1.0" +"constant-case@^3.0.4": + "integrity" "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==" + "resolved" "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "no-case" "^3.0.4" + "tslib" "^2.0.3" + "upper-case" "^2.0.2" + "content-disposition@0.5.3": "integrity" "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==" "resolved" "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz" @@ -1796,7 +2629,7 @@ "resolved" "https://registry.npmjs.org/content-security-policy-builder/-/content-security-policy-builder-2.1.0.tgz" "version" "2.1.0" -"content-type@~1.0.4": +"content-type@^1.0.4", "content-type@~1.0.4": "integrity" "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" "resolved" "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz" "version" "1.0.4" @@ -1816,6 +2649,11 @@ dependencies: "safe-buffer" "~5.1.1" +"convert-to-spaces@^2.0.1": + "integrity" "sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==" + "resolved" "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-2.0.1.tgz" + "version" "2.0.1" + "cookie-signature@1.0.6": "integrity" "sha1-4wOogrNCzD7oylE6eZmXNNqzriw= sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" "resolved" "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" @@ -1893,6 +2731,11 @@ dependencies: "capture-stack-trace" "^1.0.0" +"create-require@^1.1.0": + "integrity" "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + "resolved" "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" + "version" "1.1.1" + "cron-parser@^2.13.0": "integrity" "sha512-s4odpheTyydAbTBQepsqd2rNWGa2iV3cyo8g7zbI2QQYGLVsfbhmwukayS1XHppe02Oy1fg7mg6xoaraVJeEcg==" "resolved" "https://registry.npmjs.org/cron-parser/-/cron-parser-2.18.0.tgz" @@ -1915,6 +2758,13 @@ dependencies: "cross-spawn" "^6.0.5" +"cross-fetch@^3.1.5": + "integrity" "sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==" + "resolved" "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz" + "version" "3.1.6" + dependencies: + "node-fetch" "^2.6.11" + "cross-spawn@^4": "integrity" "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=" "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz" @@ -1952,11 +2802,32 @@ "shebang-command" "^1.2.0" "which" "^1.2.9" +"cross-spawn@^7.0.3": + "integrity" "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==" + "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + "version" "7.0.3" + dependencies: + "path-key" "^3.1.0" + "shebang-command" "^2.0.0" + "which" "^2.0.1" + +"cross-zip@4.0.0": + "integrity" "sha512-MEzGfZo0rqE10O/B+AEcCSJLZsrWuRUvmqJTqHNqBtALhaJc3E3ixLGLJNTRzEA2K34wbmOHC4fwYs9sVsdcCA==" + "resolved" "https://registry.npmjs.org/cross-zip/-/cross-zip-4.0.0.tgz" + "version" "4.0.0" + "crypto-random-string@^1.0.0": "integrity" "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg==" "resolved" "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz" "version" "1.0.0" +"crypto-random-string@^4.0.0": + "integrity" "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==" + "resolved" "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "type-fest" "^1.0.1" + "dashdash@^1.12.0": "integrity" "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==" "resolved" "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" @@ -1969,11 +2840,28 @@ "resolved" "https://registry.npmjs.org/dasherize/-/dasherize-2.0.0.tgz" "version" "2.0.0" +"data-uri-to-buffer@^2.0.0": + "integrity" "sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==" + "resolved" "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-2.0.2.tgz" + "version" "2.0.2" + +"data-uri-to-buffer@^4.0.0": + "integrity" "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==" + "resolved" "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz" + "version" "4.0.1" + "dayjs@^1.8.34": "integrity" "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==" "resolved" "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz" "version" "1.10.7" +"debounce-fn@^5.1.2": + "integrity" "sha512-Sr4SdOZ4vw6eQDvPYNxHogvrxmCIld/VenC5JbNrFwMiwd7lY/Z18ZFfo+EWNG4DD9nFlAujWAo/wGuOPHmy5A==" + "resolved" "https://registry.npmjs.org/debounce-fn/-/debounce-fn-5.1.2.tgz" + "version" "5.1.2" + dependencies: + "mimic-fn" "^4.0.0" + "debug-log@^1.0.1": "integrity" "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=" "resolved" "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz" @@ -2022,9 +2910,9 @@ "ms" "^2.1.1" "debug@^4.1.1": - "integrity" "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==" - "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz" - "version" "4.3.2" + "integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" + "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + "version" "4.3.4" dependencies: "ms" "2.1.2" @@ -2035,6 +2923,13 @@ dependencies: "ms" "2.1.2" +"debug@^4.3.4": + "integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" + "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + "version" "4.3.4" + dependencies: + "ms" "2.1.2" + "debug@=3.1.0": "integrity" "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==" "resolved" "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz" @@ -2102,6 +2997,11 @@ dependencies: "semver" "^5.3.0" +"deepmerge@4.3.0": + "integrity" "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==" + "resolved" "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz" + "version" "4.3.0" + "default-require-extensions@^1.0.0": "integrity" "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=" "resolved" "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz" @@ -2109,6 +3009,16 @@ dependencies: "strip-bom" "^2.0.0" +"defer-to-connect@^2.0.1": + "integrity" "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==" + "resolved" "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz" + "version" "2.0.1" + +"define-lazy-prop@^2.0.0": + "integrity" "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" + "resolved" "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" + "version" "2.0.0" + "define-properties@^1.1.3": "integrity" "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==" "resolved" "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz" @@ -2138,6 +3048,20 @@ "is-descriptor" "^1.0.2" "isobject" "^3.0.1" +"del@6.0.0": + "integrity" "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==" + "resolved" "https://registry.npmjs.org/del/-/del-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "globby" "^11.0.1" + "graceful-fs" "^4.2.4" + "is-glob" "^4.0.1" + "is-path-cwd" "^2.2.0" + "is-path-inside" "^3.0.2" + "p-map" "^4.0.0" + "rimraf" "^3.0.2" + "slash" "^3.0.0" + "delayed-stream@~1.0.0": "integrity" "sha1-3zrhmayt+31ECqrgsp4icrJOxhk= sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" "resolved" "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" @@ -2198,11 +3122,23 @@ "resolved" "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz" "version" "3.5.0" +"diff@^4.0.1": + "integrity" "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + "resolved" "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" + "version" "4.0.2" + "diff@3.2.0": "integrity" "sha1-yc45Okt8vQsFinJck98pkCeGj/k= sha512-597ykPFhtJYaXqPq6fF7Vl1fXTKgPdLOntyxpmdzUOKiYGqK7zcnbplj5088+8qJnWdzXhyeau5iVr8HVo9dgg==" "resolved" "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz" "version" "3.2.0" +"dir-glob@^3.0.1": + "integrity" "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==" + "resolved" "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "path-type" "^4.0.0" + "doctrine@^2.1.0": "integrity" "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==" "resolved" "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" @@ -2215,6 +3151,14 @@ "resolved" "https://registry.npmjs.org/dont-sniff-mimetype/-/dont-sniff-mimetype-1.1.0.tgz" "version" "1.1.0" +"dot-case@^3.0.4": + "integrity" "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==" + "resolved" "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "no-case" "^3.0.4" + "tslib" "^2.0.3" + "dot-prop@^4.2.1": "integrity" "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==" "resolved" "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz" @@ -2222,6 +3166,13 @@ dependencies: "is-obj" "^1.0.0" +"dot-prop@^7.2.0": + "integrity" "sha512-Ol/IPXUARn9CSbkrdV4VJo7uCy1I3VuSiWCaFSg+8BdUOzF9n3jefIpcgAydvUZbTdEBZs2vEiTiS9m61ssiDA==" + "resolved" "https://registry.npmjs.org/dot-prop/-/dot-prop-7.2.0.tgz" + "version" "7.2.0" + dependencies: + "type-fest" "^2.11.2" + "dotenv-safe@^5.0.1": "integrity" "sha512-NiS92uLQHKThcQIB4pNEQHLaosz+O1VaJ1yuBaZNj0BASGpQliSzfPKgaoFs/WvE+p8pS9STXOMW30b5uxBZog==" "resolved" "https://registry.npmjs.org/dotenv-safe/-/dotenv-safe-5.0.1.tgz" @@ -2251,6 +3202,11 @@ "resolved" "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz" "version" "0.1.4" +"eastasianwidth@^0.2.0": + "integrity" "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + "resolved" "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" + "version" "0.2.0" + "ecc-jsbn@~0.1.1": "integrity" "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==" "resolved" "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" @@ -2271,6 +3227,13 @@ "resolved" "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" "version" "1.1.1" +"ejs@^3.1.6", "ejs@^3.1.8": + "integrity" "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==" + "resolved" "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz" + "version" "3.1.9" + dependencies: + "jake" "^10.8.5" + "electron-to-chromium@^1.3.47": "integrity" "sha512-xoUPSkjimw51d9ryeH38XUwmR3HmCA+eky4hk0YEgsWeBWGyhb35OCvT3lWAdmvIkcGYCRNOB8LvtO00dJQpOA==" "resolved" "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.907.tgz" @@ -2283,6 +3246,16 @@ dependencies: "shimmer" "^1.2.0" +"emoji-regex@^8.0.0": + "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + "version" "8.0.0" + +"emoji-regex@^9.2.2": + "integrity" "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" + "version" "9.2.2" + "encodeurl@~1.0.2": "integrity" "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" "resolved" "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" @@ -2295,13 +3268,30 @@ dependencies: "once" "^1.4.0" -"error-ex@^1.2.0": +"env-paths@^3.0.0", "env-paths@3.0.0": + "integrity" "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==" + "resolved" "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz" + "version" "3.0.0" + +"envfile@6.18.0": + "integrity" "sha512-IsYv64dtlNXTm4huvCBpbXsdZQurYUju9WoYCkSj+SDYpO3v4/dq346QsCnNZ3JcnWw0G3E6+saVkVtmPw98Gg==" + "resolved" "https://registry.npmjs.org/envfile/-/envfile-6.18.0.tgz" + "version" "6.18.0" + +"error-ex@^1.2.0", "error-ex@^1.3.1": "integrity" "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==" "resolved" "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" "version" "1.3.2" dependencies: "is-arrayish" "^0.2.1" +"error-stack-parser@^2.0.2", "error-stack-parser@^2.0.3": + "integrity" "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==" + "resolved" "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz" + "version" "2.1.4" + dependencies: + "stackframe" "^1.3.4" + "es-abstract@^1.19.0", "es-abstract@^1.19.1": "integrity" "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==" "resolved" "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz" @@ -2352,6 +3342,21 @@ "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" "version" "1.0.5" +"escape-string-regexp@^2.0.0": + "integrity" "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" + "version" "2.0.0" + +"escape-string-regexp@^5.0.0": + "integrity" "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz" + "version" "5.0.0" + +"escape-string-regexp@4.0.0": + "integrity" "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + "version" "4.0.0" + "eslint-config-airbnb-base@^12.0.1": "integrity" "sha512-/vjm0Px5ZCpmJqnjIzcFb9TKZrKWz0gnuG/7Gfkt0Db1ELJR51xkZth+t14rYdqWgX836XbuxtArbIHlVhbLBA==" "resolved" "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-12.1.0.tgz" @@ -2465,7 +3470,7 @@ "acorn" "^5.5.0" "acorn-jsx" "^3.0.0" -"esprima@^4.0.0": +"esprima@^4.0.0", "esprima@~4.0.0": "integrity" "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" "resolved" "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" "version" "4.0.1" @@ -2509,6 +3514,11 @@ "resolved" "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" "version" "1.8.1" +"event-target-shim@^5.0.0": + "integrity" "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" + "resolved" "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz" + "version" "5.0.1" + "eventemitter2@~0.4.14": "integrity" "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas= sha512-K7J4xq5xAD5jHsGM5ReWXRTFa3JRGofHiMcVgQ8PRwgWxzjHpMWCIzsmyf60+mh8KLsqYPcjUMa0AC4hd6lPyQ==" "resolved" "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz" @@ -2547,6 +3557,34 @@ "signal-exit" "^3.0.0" "strip-eof" "^1.0.0" +"execa@^0.9.0": + "integrity" "sha512-BbUMBiX4hqiHZUA5+JujIjNb6TyAlp2D5KLheMjMluwOuzcnylDL4AxZYLLn1n2AGB49eSWwyKvvEQoRpnAtmA==" + "resolved" "https://registry.npmjs.org/execa/-/execa-0.9.0.tgz" + "version" "0.9.0" + dependencies: + "cross-spawn" "^5.0.1" + "get-stream" "^3.0.0" + "is-stream" "^1.1.0" + "npm-run-path" "^2.0.0" + "p-finally" "^1.0.0" + "signal-exit" "^3.0.0" + "strip-eof" "^1.0.0" + +"execa@6.0.0": + "integrity" "sha512-m4wU9j4Z9nXXoqT8RSfl28JSwmMNLFF69OON8H/lL3NeU0tNpGz313bcOfYoBBHokB0dC2tMl3VUcKgHELhL2Q==" + "resolved" "https://registry.npmjs.org/execa/-/execa-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "cross-spawn" "^7.0.3" + "get-stream" "^6.0.1" + "human-signals" "^3.0.1" + "is-stream" "^3.0.0" + "merge-stream" "^2.0.0" + "npm-run-path" "^5.0.1" + "onetime" "^6.0.0" + "signal-exit" "^3.0.5" + "strip-final-newline" "^3.0.0" + "exit-on-epipe@~1.0.1": "integrity" "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==" "resolved" "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz" @@ -2686,6 +3724,11 @@ "snapdragon" "^0.8.1" "to-regex" "^3.0.1" +"extract-files@^9.0.0": + "integrity" "sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ==" + "resolved" "https://registry.npmjs.org/extract-files/-/extract-files-9.0.0.tgz" + "version" "9.0.0" + "extsprintf@^1.2.0", "extsprintf@1.3.0": "integrity" "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" "resolved" "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" @@ -2709,6 +3752,17 @@ "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" "version" "3.1.3" +"fast-glob@^3.2.9", "fast-glob@3.2.12": + "integrity" "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==" + "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz" + "version" "3.2.12" + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + "glob-parent" "^5.1.2" + "merge2" "^1.3.0" + "micromatch" "^4.0.4" + "fast-json-stable-stringify@^2.0.0": "integrity" "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" "resolved" "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" @@ -2719,6 +3773,13 @@ "resolved" "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" "version" "2.0.6" +"fastq@^1.6.0": + "integrity" "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==" + "resolved" "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" + "version" "1.15.0" + dependencies: + "reusify" "^1.0.4" + "fclone@1.0.11": "integrity" "sha1-EOhdo4v+p/xZk0HClu4ddyZu5kA= sha512-GDqVQezKzRABdeqflsgMr7ktzgF9CyS+p2oe0jJqUY6izSSbhPIQJDpoU4PtGcD7VPM9xh/dVrTu6z1nwgmEGw==" "resolved" "https://registry.npmjs.org/fclone/-/fclone-1.0.11.tgz" @@ -2729,6 +3790,14 @@ "resolved" "https://registry.npmjs.org/feature-policy/-/feature-policy-0.3.0.tgz" "version" "0.3.0" +"fetch-blob@^3.1.2", "fetch-blob@^3.1.4": + "integrity" "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==" + "resolved" "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz" + "version" "3.2.0" + dependencies: + "node-domexception" "^1.0.0" + "web-streams-polyfill" "^3.0.3" + "fflate@^0.3.8": "integrity" "sha512-Rr5QlUeGN1mbOHlaqcSYMKVpPbgLy0AWT/W0EHxA6NGI12yO1jpoui2zBBvU2G824ltM6Ut8BFgfHSBGfkmS0A==" "resolved" "https://registry.npmjs.org/fflate/-/fflate-0.3.11.tgz" @@ -2741,6 +3810,14 @@ dependencies: "escape-string-regexp" "^1.0.5" +"figures@5.0.0": + "integrity" "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==" + "resolved" "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "escape-string-regexp" "^5.0.0" + "is-unicode-supported" "^1.2.0" + "file-entry-cache@^2.0.0": "integrity" "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E= sha512-uXP/zGzxxFvFfcZGgBIwotm+Tdc55ddPAzF7iHshP4YGaXMww7rSF9peD9D1sui5ebONg5UobsZv+FfgEpGv/w==" "resolved" "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz" @@ -2749,6 +3826,13 @@ "flat-cache" "^1.2.1" "object-assign" "^4.0.1" +"filelist@^1.0.4": + "integrity" "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==" + "resolved" "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "minimatch" "^5.0.1" + "filename-regex@^2.0.0": "integrity" "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY= sha512-BTCqyBaWBTsauvnHiE8i562+EdJj+oUpkqWp2R1iCoR8f6oo8STRu3of7WJJ0TqWtxN50a5YFpzYK4Jj9esYfQ==" "resolved" "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz" @@ -2775,6 +3859,13 @@ "repeat-string" "^1.6.1" "to-regex-range" "^2.1.0" +"fill-range@^7.0.1": + "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==" + "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + "version" "7.0.1" + dependencies: + "to-regex-range" "^5.0.1" + "filter-obj@^1.1.0": "integrity" "sha1-mzERErxsYSehbgFsbF1/GeCAXFs= sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==" "resolved" "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz" @@ -2802,6 +3893,15 @@ "mkdirp" "^0.5.1" "pkg-dir" "^1.0.0" +"find-process@1.4.7": + "integrity" "sha512-/U4CYp1214Xrp3u3Fqr9yNynUrr5Le4y0SsJh2lMDDSbpwYSz3M2SMWQC+wqcx79cN8PQtHQIL8KnuY9M66fdg==" + "resolved" "https://registry.npmjs.org/find-process/-/find-process-1.4.7.tgz" + "version" "1.4.7" + dependencies: + "chalk" "^4.0.0" + "commander" "^5.1.0" + "debug" "^4.1.1" + "find-up@^1.0.0": "integrity" "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==" "resolved" "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz" @@ -2817,6 +3917,21 @@ dependencies: "locate-path" "^2.0.0" +"find-up@6.3.0": + "integrity" "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz" + "version" "6.3.0" + dependencies: + "locate-path" "^7.1.0" + "path-exists" "^5.0.0" + +"find-versions@5.1.0": + "integrity" "sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==" + "resolved" "https://registry.npmjs.org/find-versions/-/find-versions-5.1.0.tgz" + "version" "5.1.0" + dependencies: + "semver-regex" "^4.0.5" + "flat-cache@^1.2.1": "integrity" "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==" "resolved" "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz" @@ -2871,6 +3986,11 @@ "resolved" "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" "version" "0.6.1" +"form-data-encoder@^2.1.2": + "integrity" "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==" + "resolved" "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz" + "version" "2.1.4" + "form-data@^2.3.1", "form-data@~2.3.2": "integrity" "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==" "resolved" "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz" @@ -2880,6 +4000,31 @@ "combined-stream" "^1.0.6" "mime-types" "^2.1.12" +"form-data@^3.0.0": + "integrity" "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==" + "resolved" "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "asynckit" "^0.4.0" + "combined-stream" "^1.0.8" + "mime-types" "^2.1.12" + +"form-data@4.0.0": + "integrity" "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==" + "resolved" "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "asynckit" "^0.4.0" + "combined-stream" "^1.0.8" + "mime-types" "^2.1.12" + +"formdata-polyfill@^4.0.10": + "integrity" "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==" + "resolved" "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz" + "version" "4.0.10" + dependencies: + "fetch-blob" "^3.1.2" + "formidable@^1.2.0": "integrity" "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==" "resolved" "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz" @@ -2921,6 +4066,35 @@ "jsonfile" "^6.0.1" "universalify" "^2.0.0" +"fs-extra@^9.0": + "integrity" "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==" + "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" + "version" "9.1.0" + dependencies: + "at-least-node" "^1.0.0" + "graceful-fs" "^4.2.0" + "jsonfile" "^6.0.1" + "universalify" "^2.0.0" + +"fs-extra@^9.1.0": + "integrity" "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==" + "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" + "version" "9.1.0" + dependencies: + "at-least-node" "^1.0.0" + "graceful-fs" "^4.2.0" + "jsonfile" "^6.0.1" + "universalify" "^2.0.0" + +"fs-extra@11.1.0": + "integrity" "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==" + "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz" + "version" "11.1.0" + dependencies: + "graceful-fs" "^4.2.0" + "jsonfile" "^6.0.1" + "universalify" "^2.0.0" + "fs-readdir-recursive@^1.0.0": "integrity" "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==" "resolved" "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz" @@ -2951,6 +4125,11 @@ "resolved" "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" "version" "1.0.1" +"fuzzy@0.1.3": + "integrity" "sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w==" + "resolved" "https://registry.npmjs.org/fuzzy/-/fuzzy-0.1.3.tgz" + "version" "0.1.3" + "gauge@~2.7.3": "integrity" "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==" "resolved" "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz" @@ -2982,16 +4161,39 @@ "has" "^1.0.3" "has-symbols" "^1.0.1" +"get-package-type@^0.1.0": + "integrity" "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==" + "resolved" "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" + "version" "0.1.0" + +"get-port-please@3.0.1": + "integrity" "sha512-R5pcVO8Z1+pVDu8Ml3xaJCEkBiiy1VQN9za0YqH8GIi1nIqD4IzQhzY6dDzMRtdS1lyiGlucRzm8IN8wtLIXng==" + "resolved" "https://registry.npmjs.org/get-port-please/-/get-port-please-3.0.1.tgz" + "version" "3.0.1" + "get-port@^5.1.1": "integrity" "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==" "resolved" "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz" "version" "5.1.1" +"get-source@^2.0.12": + "integrity" "sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==" + "resolved" "https://registry.npmjs.org/get-source/-/get-source-2.0.12.tgz" + "version" "2.0.12" + dependencies: + "data-uri-to-buffer" "^2.0.0" + "source-map" "^0.6.1" + "get-stream@^3.0.0": "integrity" "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==" "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz" "version" "3.0.0" +"get-stream@^6.0.1": + "integrity" "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" + "version" "6.0.1" + "get-symbol-description@^1.0.0": "integrity" "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==" "resolved" "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" @@ -3000,6 +4202,11 @@ "call-bind" "^1.0.2" "get-intrinsic" "^1.1.1" +"get-them-args@1.3.2": + "integrity" "sha512-LRn8Jlk+DwZE4GTlDbT3Hikd1wSHgLMme/+7ddlqKd7ldwR6LjJgTVWzBnR01wnYGe4KgrXjg287RaI22UHmAw==" + "resolved" "https://registry.npmjs.org/get-them-args/-/get-them-args-1.3.2.tgz" + "version" "1.3.2" + "get-value@^2.0.3", "get-value@^2.0.6": "integrity" "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==" "resolved" "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz" @@ -3045,6 +4252,13 @@ "is-glob" "^3.1.0" "path-dirname" "^1.0.0" +"glob-parent@^5.1.2": + "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + "version" "5.1.2" + dependencies: + "is-glob" "^4.0.1" + "glob@^7.0.0", "glob@^7.0.5", "glob@^7.1.2", "glob@^7.1.3", "glob@^7.1.4": "integrity" "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==" "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" @@ -3096,6 +4310,35 @@ "resolved" "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz" "version" "9.18.0" +"globby@^11.0.1", "globby@^11.1.0": + "integrity" "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==" + "resolved" "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" + "version" "11.1.0" + dependencies: + "array-union" "^2.1.0" + "dir-glob" "^3.0.1" + "fast-glob" "^3.2.9" + "ignore" "^5.2.0" + "merge2" "^1.4.1" + "slash" "^3.0.0" + +"got@^12.1.0": + "integrity" "sha512-WTcaQ963xV97MN3x0/CbAriXFZcXCfgxVp91I+Ze6pawQOa7SgzwSx2zIJJsX+kTajMnVs0xcFD1TxZKFqhdnQ==" + "resolved" "https://registry.npmjs.org/got/-/got-12.6.0.tgz" + "version" "12.6.0" + dependencies: + "@sindresorhus/is" "^5.2.0" + "@szmarczak/http-timer" "^5.0.1" + "cacheable-lookup" "^7.0.0" + "cacheable-request" "^10.2.8" + "decompress-response" "^6.0.0" + "form-data-encoder" "^2.1.2" + "get-stream" "^6.0.1" + "http2-wrapper" "^2.1.10" + "lowercase-keys" "^3.0.0" + "p-cancelable" "^3.0.0" + "responselike" "^3.0.0" + "got@^6.7.1": "integrity" "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= sha512-Y/K3EDuiQN9rTZhBvPRWMLXIKdeD1Rj0nzunfoi0Yyn5WBEbzxXKU9Ub2X41oZBagVWOBU3MuDonFMgPWQFnwg==" "resolved" "https://registry.npmjs.org/got/-/got-6.7.1.tgz" @@ -3113,16 +4356,39 @@ "unzip-response" "^2.0.1" "url-parse-lax" "^1.0.0" -"graceful-fs@^4.1.11", "graceful-fs@^4.1.2", "graceful-fs@^4.1.4", "graceful-fs@^4.1.6", "graceful-fs@^4.2.0", "graceful-fs@^4.2.2": - "integrity" "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" - "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz" - "version" "4.2.8" +"graceful-fs@^4.1.11", "graceful-fs@^4.1.15", "graceful-fs@^4.1.2", "graceful-fs@^4.1.4", "graceful-fs@^4.1.6", "graceful-fs@^4.2.0", "graceful-fs@^4.2.2", "graceful-fs@^4.2.4", "graceful-fs@4.2.10": + "integrity" "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" + "version" "4.2.10" "graceful-readlink@>= 1.0.0": "integrity" "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU= sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==" "resolved" "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz" "version" "1.0.1" +"gradient-string@2.0.2": + "integrity" "sha512-rEDCuqUQ4tbD78TpzsMtt5OIf0cBCSDWSJtUDaF6JsAh+k0v9r++NzxNEG87oDZx9ZwGhD8DaezR2L/yrw0Jdw==" + "resolved" "https://registry.npmjs.org/gradient-string/-/gradient-string-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "chalk" "^4.1.2" + "tinygradient" "^1.1.5" + +"graphql-request@5.2.0": + "integrity" "sha512-pLhKIvnMyBERL0dtFI3medKqWOz/RhHdcgbZ+hMMIb32mEPa5MJSzS4AuXxfI4sRAu6JVVk5tvXuGfCWl9JYWQ==" + "resolved" "https://registry.npmjs.org/graphql-request/-/graphql-request-5.2.0.tgz" + "version" "5.2.0" + dependencies: + "@graphql-typed-document-node/core" "^3.1.1" + "cross-fetch" "^3.1.5" + "extract-files" "^9.0.0" + "form-data" "^3.0.0" + +"graphql@^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0", "graphql@14 - 16", "graphql@16.4.0": + "integrity" "sha512-tYDNcRvKCcfHREZYje3v33NSrSD/ZpbWWdPtBtUUuXx9NCo/2QDxYzNqCnMvfsrnbwRpEHMovVrPu/ERoLrIRg==" + "resolved" "https://registry.npmjs.org/graphql/-/graphql-16.4.0.tgz" + "version" "16.4.0" + "growl@1.9.2": "integrity" "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8= sha512-RTBwDHhNuOx4F0hqzItc/siXCasGfC4DeWcBamclWd+6jWtBaeB/SGbMkGf0eiQoW7ib8JpvOgnUsmgMHI3Mfw==" "resolved" "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz" @@ -3172,6 +4438,11 @@ "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" "version" "3.0.0" +"has-flag@^4.0.0": + "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + "version" "4.0.0" + "has-symbols@^1.0.1", "has-symbols@^1.0.2": "integrity" "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" "resolved" "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz" @@ -3232,6 +4503,14 @@ "resolved" "https://registry.npmjs.org/he/-/he-1.1.1.tgz" "version" "1.1.1" +"header-case@^2.0.4": + "integrity" "sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==" + "resolved" "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz" + "version" "2.0.4" + dependencies: + "capital-case" "^1.0.4" + "tslib" "^2.0.3" + "helmet-crossdomain@0.4.0": "integrity" "sha512-AB4DTykRw3HCOxovD1nPR16hllrVImeFp5VBV9/twj66lJ2nU75DP8FPL0/Jp4jj79JhTfG+pFI2MD02kWJ+fA==" "resolved" "https://registry.npmjs.org/helmet-crossdomain/-/helmet-crossdomain-0.4.0.tgz" @@ -3299,6 +4578,23 @@ dependencies: "depd" "2.0.0" +"http-cache-semantics@^4.1.1": + "integrity" "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" + "resolved" "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" + "version" "4.1.1" + +"http-call@^5.2.2": + "integrity" "sha512-ahwimsC23ICE4kPl9xTBjKB4inbRaeLyZeRunC/1Jy/Z6X8tv22MEAjK+KBOMSVLaqXPTTmd8638waVIKLGx2w==" + "resolved" "https://registry.npmjs.org/http-call/-/http-call-5.3.0.tgz" + "version" "5.3.0" + dependencies: + "content-type" "^1.0.4" + "debug" "^4.1.1" + "is-retry-allowed" "^1.1.0" + "is-stream" "^2.0.0" + "parse-json" "^4.0.0" + "tunnel-agent" "^0.6.0" + "http-errors@~1.7.2", "http-errors@1.7.2": "integrity" "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==" "resolved" "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz" @@ -3324,6 +4620,19 @@ "resolved" "https://registry.npmjs.org/http-status/-/http-status-1.5.0.tgz" "version" "1.5.0" +"http2-wrapper@^2.1.10": + "integrity" "sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==" + "resolved" "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "quick-lru" "^5.1.1" + "resolve-alpn" "^1.2.0" + +"human-signals@^3.0.1": + "integrity" "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==" + "resolved" "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz" + "version" "3.0.1" + "husky@^0.14.3": "integrity" "sha512-e21wivqHpstpoiWA/Yi8eFti8E+sQDSS53cpJsPptPs295QTOQR0ZwnHo2TXy1XOpZFD9rPOd3NpmqTK6uMLJA==" "resolved" "https://registry.npmjs.org/husky/-/husky-0.14.3.tgz" @@ -3333,6 +4642,11 @@ "normalize-path" "^1.0.0" "strip-indent" "^2.0.0" +"hyperlinker@^1.0.0": + "integrity" "sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==" + "resolved" "https://registry.npmjs.org/hyperlinker/-/hyperlinker-1.0.0.tgz" + "version" "1.0.0" + "i18n@^0.8.3": "integrity" "sha512-aMsJq8i1XXrb+BBsgmJBwak9mr69zPEIAUPb6c5yw2G/O4k1Q52lBxL+agZdQDN/RGf1ylQzrCswsOOgIiC1FA==" "resolved" "https://registry.npmjs.org/i18n/-/i18n-0.8.6.tgz" @@ -3367,6 +4681,11 @@ "resolved" "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz" "version" "3.3.10" +"ignore@^5.2.0": + "integrity" "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" + "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" + "version" "5.2.4" + "image-downloader@^4.3.0": "integrity" "sha512-UBioN0E+8zu8N0lLC6wkZmPA/MA1A3yx9B1whjy5O/YiOV9XrSxLLKi7JqLLj6knQ3n9N1OBoHFS7shp8sehBQ==" "resolved" "https://registry.npmjs.org/image-downloader/-/image-downloader-4.3.0.tgz" @@ -3389,6 +4708,16 @@ "resolved" "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" "version" "0.1.4" +"indent-string@^4.0.0": + "integrity" "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + "resolved" "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" + "version" "4.0.0" + +"indent-string@^5.0.0": + "integrity" "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==" + "resolved" "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz" + "version" "5.0.0" + "inflection@1.13.1": "integrity" "sha512-dldYtl2WlN0QDkIDtg8+xFwOS2Tbmp12t1cHa5/YClU6ZQjTFm7B66UcVbh9NQB+HvT5BAd2t5+yKsBkw5pcqA==" "resolved" "https://registry.npmjs.org/inflection/-/inflection-1.13.1.tgz" @@ -3417,6 +4746,34 @@ "resolved" "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" "version" "1.3.8" +"ink@4.0.0": + "integrity" "sha512-PmYgFfkTJYAxK+8pkvDghOTTLY5rAa58s7aLCd5lsiWBWxEil2f5VCjWP1I/7uLmgZDver/wXmVzF4sJhZvSIw==" + "resolved" "https://registry.npmjs.org/ink/-/ink-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "ansi-escapes" "^6.0.0" + "auto-bind" "^5.0.1" + "chalk" "^5.2.0" + "cli-boxes" "^3.0.0" + "cli-cursor" "^4.0.0" + "cli-truncate" "^3.1.0" + "code-excerpt" "^4.0.0" + "indent-string" "^5.0.0" + "is-ci" "^3.0.1" + "lodash-es" "^4.17.21" + "patch-console" "^2.0.0" + "react-reconciler" "^0.29.0" + "scheduler" "^0.23.0" + "signal-exit" "^3.0.7" + "slice-ansi" "^5.0.0" + "stack-utils" "^2.0.6" + "string-width" "^5.1.2" + "type-fest" "^0.12.0" + "widest-line" "^4.0.1" + "wrap-ansi" "^8.1.0" + "ws" "^8.12.0" + "yoga-layout-prebuilt" "^1.9.6" + "inquirer@^3.0.6": "integrity" "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==" "resolved" "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz" @@ -3558,6 +4915,13 @@ dependencies: "ci-info" "^1.5.0" +"is-ci@^3.0.1": + "integrity" "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==" + "resolved" "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "ci-info" "^3.2.0" + "is-core-module@^2.2.0", "is-core-module@^2.8.0": "integrity" "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==" "resolved" "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz" @@ -3604,6 +4968,11 @@ "is-data-descriptor" "^1.0.0" "kind-of" "^6.0.2" +"is-docker@^2.0.0", "is-docker@^2.1.1": + "integrity" "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" + "resolved" "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" + "version" "2.2.1" + "is-dotfile@^1.0.0": "integrity" "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE= sha512-9YclgOGtN/f8zx0Pr4FQYMdibBiTaH3sn52vjYip4ZSf6C4/6RfTEZ+MR4GvKhCxdPh21Bg42/WL55f6KSnKpg==" "resolved" "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz" @@ -3633,11 +5002,16 @@ "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz" "version" "1.0.0" -"is-extglob@^2.1.0", "is-extglob@^2.1.1": +"is-extglob@^2.1.0": "integrity" "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" "version" "2.1.1" +"is-extglob@^2.1.1": + "integrity" "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + "version" "2.1.1" + "is-finite@^1.0.0": "integrity" "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==" "resolved" "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz" @@ -3655,6 +5029,16 @@ "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" "version" "2.0.0" +"is-fullwidth-code-point@^3.0.0": + "integrity" "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + "version" "3.0.0" + +"is-fullwidth-code-point@^4.0.0": + "integrity" "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz" + "version" "4.0.0" + "is-glob@^2.0.0", "is-glob@^2.0.1": "integrity" "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==" "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz" @@ -3676,6 +5060,13 @@ dependencies: "is-extglob" "^2.1.1" +"is-glob@^4.0.1": + "integrity" "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==" + "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "is-extglob" "^2.1.1" + "is-glob@^4.0.3": "integrity" "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==" "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" @@ -3691,6 +5082,11 @@ "global-dirs" "^0.1.0" "is-path-inside" "^1.0.0" +"is-interactive@2.0.0": + "integrity" "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==" + "resolved" "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz" + "version" "2.0.0" + "is-nan@^1.3.0": "integrity" "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==" "resolved" "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz" @@ -3735,6 +5131,11 @@ "resolved" "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz" "version" "4.0.0" +"is-number@^7.0.0": + "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + "version" "7.0.0" + "is-obj@^1.0.0": "integrity" "sha1-PkcprB9f3gJc19g6iW2rn09n2w8= sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==" "resolved" "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz" @@ -3745,6 +5146,11 @@ dependencies: "is-number" "^4.0.0" +"is-path-cwd@^2.2.0": + "integrity" "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" + "resolved" "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz" + "version" "2.2.0" + "is-path-inside@^1.0.0": "integrity" "sha1-jvW33lBDej/cprToZe96pVy0gDY= sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==" "resolved" "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz" @@ -3752,6 +5158,11 @@ dependencies: "path-is-inside" "^1.0.1" +"is-path-inside@^3.0.2": + "integrity" "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" + "resolved" "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" + "version" "3.0.3" + "is-plain-object@^2.0.1", "is-plain-object@^2.0.3", "is-plain-object@^2.0.4": "integrity" "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==" "resolved" "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" @@ -3787,7 +5198,7 @@ "resolved" "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz" "version" "1.1.0" -"is-retry-allowed@^1.0.0": +"is-retry-allowed@^1.0.0", "is-retry-allowed@^1.1.0": "integrity" "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" "resolved" "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz" "version" "1.2.0" @@ -3802,6 +5213,16 @@ "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" "version" "1.1.0" +"is-stream@^2.0.0": + "integrity" "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" + "version" "2.0.1" + +"is-stream@^3.0.0": + "integrity" "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==" + "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz" + "version" "3.0.0" + "is-string@^1.0.5", "is-string@^1.0.7": "integrity" "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==" "resolved" "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" @@ -3821,6 +5242,11 @@ "resolved" "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" "version" "1.0.0" +"is-unicode-supported@^1.2.0": + "integrity" "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==" + "resolved" "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz" + "version" "1.3.0" + "is-utf8@^0.2.0": "integrity" "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==" "resolved" "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz" @@ -3838,6 +5264,13 @@ "resolved" "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" "version" "1.0.2" +"is-wsl@^2.2.0": + "integrity" "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==" + "resolved" "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "is-docker" "^2.0.0" + "is@^3.2.0": "integrity" "sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==" "resolved" "https://registry.npmjs.org/is/-/is-3.3.0.tgz" @@ -3858,6 +5291,11 @@ "resolved" "https://registry.npmjs.org/isemail/-/isemail-2.2.1.tgz" "version" "2.2.1" +"iserror@^0.0.2", "iserror@0.0.2": + "integrity" "sha512-oKGGrFVaWwETimP3SiWwjDeY27ovZoyZPHtxblC4hCq9fXxed/jasx+ATWFFjCVSRZng8VTMsN1nDnGo6zMBSw==" + "resolved" "https://registry.npmjs.org/iserror/-/iserror-0.0.2.tgz" + "version" "0.0.2" + "isexe@^2.0.0": "integrity" "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" @@ -3949,6 +5387,16 @@ "resolved" "https://registry.npmjs.org/items/-/items-2.1.2.tgz" "version" "2.1.2" +"jake@^10.8.5": + "integrity" "sha512-G43Ub9IYEFfu72sua6rzooi8V8Gz2lkfk48rW20vEWCGizeaEPlKB1Kh8JIA84yQbiAEfqlPmSpGgCKKxH3rDA==" + "resolved" "https://registry.npmjs.org/jake/-/jake-10.8.6.tgz" + "version" "10.8.6" + dependencies: + "async" "^3.2.3" + "chalk" "^4.0.2" + "filelist" "^1.0.4" + "minimatch" "^3.1.2" + "joi@*", "joi@^10.4.1": "integrity" "sha512-hBF3LcqyAid+9X/pwg+eXjD2QBZI5eXnBFJYaAkH4SK3mp9QSRiiQnDYlmlz5pccMvnLcJRS4whhDOTCkmsAdQ==" "resolved" "https://registry.npmjs.org/joi/-/joi-10.6.0.tgz" @@ -3969,7 +5417,7 @@ "resolved" "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz" "version" "3.0.2" -"js-yaml@^3.13.1", "js-yaml@^3.9.1": +"js-yaml@^3.13.1", "js-yaml@^3.14.1", "js-yaml@^3.9.1": "integrity" "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==" "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" "version" "3.14.1" @@ -3977,6 +5425,13 @@ "argparse" "^1.0.7" "esprima" "^4.0.0" +"js-yaml@4.1.0": + "integrity" "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "argparse" "^2.0.1" + "jsbn@~0.1.0": "integrity" "sha1-peZUwuWi3rXyAdls77yoDA7y9RM= sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" "resolved" "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" @@ -3992,6 +5447,16 @@ "resolved" "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz" "version" "0.5.0" +"json-buffer@3.0.1": + "integrity" "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + "resolved" "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" + "version" "3.0.1" + +"json-parse-better-errors@^1.0.1": + "integrity" "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + "resolved" "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" + "version" "1.0.2" + "json-schema-traverse@^0.3.0": "integrity" "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A= sha512-4JD/Ivzg7PoW8NzdrBSr3UFwC9mHgvI7Z6z3QGBsSHgKaRTUDmyZAAKJo2UbG1kUVfS9WS8bi36N49U1xw43DA==" "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz" @@ -4002,6 +5467,16 @@ "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" "version" "0.4.1" +"json-schema-traverse@^1.0.0": + "integrity" "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" + "version" "1.0.0" + +"json-schema-typed@^8.0.1": + "integrity" "sha512-XQmWYj2Sm4kn4WeTYvmpKEbyPsL7nBsb647c7pMe6l02/yx2+Jfc4dT6UZkEXnIUb5LhD55r2HPsJ1milQ4rDg==" + "resolved" "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.1.tgz" + "version" "8.0.1" + "json-schema@0.2.3": "integrity" "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= sha512-a3xHnILGMtk+hDOqNwHzF6e2fNbiMrXZvxKQiEv2MlgQP+pjIOzqAmKYD2mDpXYE/44M7g+n9p2bKkYWDUcXCQ==" "resolved" "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz" @@ -4069,15 +5544,15 @@ "json-schema" "0.2.3" "verror" "1.10.0" -"jszip@^3.5.0": - "integrity" "sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg==" - "resolved" "https://registry.npmjs.org/jszip/-/jszip-3.7.1.tgz" - "version" "3.7.1" +"jszip@^3.10.1", "jszip@^3.5.0": + "integrity" "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==" + "resolved" "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz" + "version" "3.10.1" dependencies: "lie" "~3.3.0" "pako" "~1.0.2" "readable-stream" "~2.3.6" - "set-immediate-shim" "~1.0.1" + "setimmediate" "^1.0.5" "just-extend@^4.0.2": "integrity" "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==" @@ -4106,6 +5581,21 @@ "resolved" "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz" "version" "2.3.2" +"keyv@^4.5.2": + "integrity" "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==" + "resolved" "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz" + "version" "4.5.2" + dependencies: + "json-buffer" "3.0.1" + +"kill-port-process@3.1.0": + "integrity" "sha512-sVODd2xDGzN3OaLGhHcJPiaRwWK0QZc+bD5YQTo3Xgh1AUg1AZgDYDeqRI6ILg4AhWrmSpupGwQEFK1G0Sy2fw==" + "resolved" "https://registry.npmjs.org/kill-port-process/-/kill-port-process-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "get-them-args" "1.3.2" + "pid-from-port" "1.1.3" + "kind-of@^3.0.2", "kind-of@^3.0.3", "kind-of@^3.2.0": "integrity" "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==" "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" @@ -4137,6 +5627,13 @@ dependencies: "package-json" "^4.0.0" +"latest-version@7.0.0": + "integrity" "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==" + "resolved" "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "package-json" "^8.1.0" + "lazy-cache@^1.0.3": "version" "1.0.4" @@ -4179,6 +5676,13 @@ dependencies: "immediate" "~3.0.5" +"liquidjs@10.6.0": + "integrity" "sha512-FyC0mJdS5B/tOd27LjGm+qX5TLQmXsnL2VnD5mnEZfTmNoAKx85YM+odke2lU/vME5R6r5Ef4Sig36Fb+umUhQ==" + "resolved" "https://registry.npmjs.org/liquidjs/-/liquidjs-10.6.0.tgz" + "version" "10.6.0" + dependencies: + "commander" "^10.0.0" + "listenercount@~1.0.1": "integrity" "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc= sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==" "resolved" "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz" @@ -4195,6 +5699,17 @@ "pinkie-promise" "^2.0.0" "strip-bom" "^2.0.0" +"load-json-file@^5.3.0": + "integrity" "sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==" + "resolved" "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz" + "version" "5.3.0" + dependencies: + "graceful-fs" "^4.1.15" + "parse-json" "^4.0.0" + "pify" "^4.0.1" + "strip-bom" "^3.0.0" + "type-fest" "^0.3.0" + "locate-path@^2.0.0": "integrity" "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==" "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz" @@ -4203,6 +5718,18 @@ "p-locate" "^2.0.0" "path-exists" "^3.0.0" +"locate-path@^7.1.0": + "integrity" "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==" + "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz" + "version" "7.2.0" + dependencies: + "p-locate" "^6.0.0" + +"lodash-es@^4.17.21": + "integrity" "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + "resolved" "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz" + "version" "4.17.21" + "lodash._baseassign@^3.0.0": "integrity" "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4= sha512-t3N26QR2IdSN+gqSy9Ds9pBu/J1EAFEshKlUHpJG3rvyJOYgcELIxcIeKKfZk7sjOz11cFfzJRsyFry/JyabJQ==" "resolved" "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz" @@ -4364,7 +5891,7 @@ "resolved" "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz" "version" "4.5.0" -"lodash@^4.17.14", "lodash@^4.17.15", "lodash@^4.17.20", "lodash@^4.17.21", "lodash@^4.17.4", "lodash@^4.3.0": +"lodash@^4.17.11", "lodash@^4.17.14", "lodash@^4.17.15", "lodash@^4.17.20", "lodash@^4.17.21", "lodash@^4.17.4", "lodash@^4.3.0", "lodash@4.17.21": "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" "version" "4.17.21" @@ -4389,18 +5916,30 @@ "longest@^1.0.1": "version" "1.0.1" -"loose-envify@^1.0.0": +"loose-envify@^1.0.0", "loose-envify@^1.1.0": "integrity" "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==" "resolved" "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" "version" "1.4.0" dependencies: "js-tokens" "^3.0.0 || ^4.0.0" +"lower-case@^2.0.2": + "integrity" "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==" + "resolved" "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "tslib" "^2.0.3" + "lowercase-keys@^1.0.0": "integrity" "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" "resolved" "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz" "version" "1.0.1" +"lowercase-keys@^3.0.0": + "integrity" "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==" + "resolved" "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz" + "version" "3.0.0" + "lru-cache@^4.0.1": "integrity" "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==" "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz" @@ -4416,6 +5955,16 @@ dependencies: "yallist" "^4.0.0" +"lru-cache@^7.4.0": + "integrity" "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz" + "version" "7.18.3" + +"macaddress@0.5.3": + "integrity" "sha512-vGBKTA+jwM4KgjGZ+S/8/Mkj9rWzePyGY6jManXPGhiWu63RYwW8dKPyk5koP+8qNVhPhHgFa1y/MJ4wrjsNrg==" + "resolved" "https://registry.npmjs.org/macaddress/-/macaddress-0.5.3.tgz" + "version" "0.5.3" + "make-dir@^1.0.0": "integrity" "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==" "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz" @@ -4423,6 +5972,11 @@ dependencies: "pify" "^3.0.0" +"make-error@^1.1.1": + "integrity" "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + "resolved" "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" + "version" "1.3.6" + "make-plural@^4.3.0": "integrity" "sha512-xTYd4JVHpSCW+aqDof6w/MebaMVNTVYBZhbB/vi513xXdiPT92JMVCo0Jq8W2UZnzYRFeVbQiQ+I25l13JuKvA==" "resolved" "https://registry.npmjs.org/make-plural/-/make-plural-4.3.0.tgz" @@ -4498,6 +6052,16 @@ dependencies: "source-map" "^0.6.1" +"merge-stream@^2.0.0": + "integrity" "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "resolved" "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + "version" "2.0.0" + +"merge2@^1.3.0", "merge2@^1.4.1": + "integrity" "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + "resolved" "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + "version" "1.4.1" + "messageformat-formatters@^2.0.1": "integrity" "sha512-E/lQRXhtHwGuiQjI7qxkLp8AHbMD5r2217XNe/SREbBlSawe0lOqsFb7rflZJmlQFSULNLIqlcjjsCPlB3m3Mg==" "resolved" "https://registry.npmjs.org/messageformat-formatters/-/messageformat-formatters-2.0.1.tgz" @@ -4606,6 +6170,14 @@ "snapdragon" "^0.8.1" "to-regex" "^3.0.2" +"micromatch@^4.0.4": + "integrity" "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==" + "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" + "version" "4.0.5" + dependencies: + "braces" "^3.0.2" + "picomatch" "^2.3.1" + "mime-db@>= 1.43.0 < 2", "mime-db@1.51.0": "integrity" "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" "resolved" "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz" @@ -4628,11 +6200,26 @@ "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz" "version" "1.2.0" +"mimic-fn@^2.1.0": + "integrity" "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + "version" "2.1.0" + +"mimic-fn@^4.0.0": + "integrity" "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==" + "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz" + "version" "4.0.0" + "mimic-response@^3.1.0": "integrity" "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" "resolved" "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" "version" "3.1.0" +"mimic-response@^4.0.0": + "integrity" "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==" + "resolved" "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz" + "version" "4.0.0" + "minimatch@^3.0.2", "minimatch@^3.0.4": "integrity" "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==" "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" @@ -4640,6 +6227,20 @@ dependencies: "brace-expansion" "^1.1.7" +"minimatch@^3.1.2": + "integrity" "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + "version" "3.1.2" + dependencies: + "brace-expansion" "^1.1.7" + +"minimatch@^5.0.1": + "integrity" "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" + "version" "5.1.6" + dependencies: + "brace-expansion" "^2.0.1" + "minimist@^1.2.0", "minimist@^1.2.3", "minimist@^1.2.5": "integrity" "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz" @@ -4826,6 +6427,11 @@ "resolved" "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz" "version" "0.0.7" +"n-gram@2.0.2": + "integrity" "sha512-S24aGsn+HLBxUGVAUFOwGpKs7LBcG4RudKU//eWzt/mQ97/NMKQxDWHyHx63UNWk/OOdihgmzoETn1tf5nQDzQ==" + "resolved" "https://registry.npmjs.org/n-gram/-/n-gram-2.0.2.tgz" + "version" "2.0.2" + "nanoid@^2.0.3": "integrity" "sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA==" "resolved" "https://registry.npmjs.org/nanoid/-/nanoid-2.1.11.tgz" @@ -4858,6 +6464,11 @@ "resolved" "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" "version" "1.4.0" +"natural-orderby@^2.0.3": + "integrity" "sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q==" + "resolved" "https://registry.npmjs.org/natural-orderby/-/natural-orderby-2.0.3.tgz" + "version" "2.0.3" + "needle@^2.1.0": "integrity" "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==" "resolved" "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz" @@ -4888,6 +6499,14 @@ "lolex" "^5.0.1" "path-to-regexp" "^1.7.0" +"no-case@^3.0.4": + "integrity" "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==" + "resolved" "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "lower-case" "^2.0.2" + "tslib" "^2.0.3" + "nocache@2.1.0": "integrity" "sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q==" "resolved" "https://registry.npmjs.org/nocache/-/nocache-2.1.0.tgz" @@ -4900,11 +6519,37 @@ dependencies: "semver" "^7.3.5" +"node-abort-controller@3.0.1": + "integrity" "sha512-/ujIVxthRs+7q6hsdjHMaj8hRG9NuWmwrz+JdRwZ14jdFoKSkm+vDsCbF9PLpnSqjaWQJuTmVtcWHNLr+vrOFw==" + "resolved" "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.0.1.tgz" + "version" "3.0.1" + "node-addon-api@^5.0.0": "integrity" "sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA==" "resolved" "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.0.0.tgz" "version" "5.0.0" +"node-domexception@^1.0.0": + "integrity" "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==" + "resolved" "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz" + "version" "1.0.0" + +"node-fetch@^2.6.11": + "integrity" "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==" + "resolved" "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz" + "version" "2.6.11" + dependencies: + "whatwg-url" "^5.0.0" + +"node-fetch@3.2.4": + "integrity" "sha512-WvYJRN7mMyOLurFR2YpysQGuwYrJN+qrrpHjJDuKMcSPdfFccRUla/kng2mz6HWSBxJcqPbvatS6Gb4RhOzCJw==" + "resolved" "https://registry.npmjs.org/node-fetch/-/node-fetch-3.2.4.tgz" + "version" "3.2.4" + dependencies: + "data-uri-to-buffer" "^4.0.0" + "fetch-blob" "^3.1.4" + "formdata-polyfill" "^4.0.10" + "nodemon@^1.11.0": "integrity" "sha512-VGPaqQBNk193lrJFotBU8nvWZPqEZY2eIzymy2jjY0fJ9qIsxA0sxQ8ATPl0gZC645gijYEc1jtZvpS8QWzJGQ==" "resolved" "https://registry.npmjs.org/nodemon/-/nodemon-1.19.4.tgz" @@ -4955,6 +6600,11 @@ "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" "version" "3.0.0" +"normalize-url@^8.0.0": + "integrity" "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==" + "resolved" "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz" + "version" "8.0.0" + "npm-run-path@^2.0.0": "integrity" "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==" "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz" @@ -4962,6 +6612,20 @@ dependencies: "path-key" "^2.0.0" +"npm-run-path@^4.0.1": + "integrity" "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==" + "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "path-key" "^3.0.0" + +"npm-run-path@^5.0.1": + "integrity" "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==" + "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz" + "version" "5.1.0" + dependencies: + "path-key" "^4.0.0" + "npmlog@^4.0.1": "integrity" "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==" "resolved" "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz" @@ -5047,6 +6711,11 @@ "resolved" "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" "version" "1.1.1" +"object-treeify@^1.1.33": + "integrity" "sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==" + "resolved" "https://registry.npmjs.org/object-treeify/-/object-treeify-1.1.33.tgz" + "version" "1.1.33" + "object-visit@^1.0.0": "integrity" "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==" "resolved" "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz" @@ -5123,6 +6792,29 @@ dependencies: "mimic-fn" "^1.0.0" +"onetime@^5.1.0": + "integrity" "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==" + "resolved" "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" + "version" "5.1.2" + dependencies: + "mimic-fn" "^2.1.0" + +"onetime@^6.0.0": + "integrity" "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==" + "resolved" "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "mimic-fn" "^4.0.0" + +"open@8.4.2": + "integrity" "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==" + "resolved" "https://registry.npmjs.org/open/-/open-8.4.2.tgz" + "version" "8.4.2" + dependencies: + "define-lazy-prop" "^2.0.0" + "is-docker" "^2.1.1" + "is-wsl" "^2.2.0" + "optimist@^0.6.1": "version" "0.6.1" dependencies: @@ -5186,6 +6878,11 @@ "mkdirp" "^0.5.1" "object-assign" "^4.1.0" +"p-cancelable@^3.0.0": + "integrity" "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==" + "resolved" "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz" + "version" "3.0.0" + "p-finally@^1.0.0": "integrity" "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==" "resolved" "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" @@ -5198,6 +6895,13 @@ dependencies: "p-try" "^1.0.0" +"p-limit@^4.0.0": + "integrity" "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==" + "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "yocto-queue" "^1.0.0" + "p-locate@^2.0.0": "integrity" "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==" "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz" @@ -5205,11 +6909,25 @@ dependencies: "p-limit" "^1.1.0" +"p-locate@^6.0.0": + "integrity" "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==" + "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "p-limit" "^4.0.0" + "p-map@^2.1.0": "integrity" "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" "resolved" "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz" "version" "2.1.0" +"p-map@^4.0.0": + "integrity" "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==" + "resolved" "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "aggregate-error" "^3.0.0" + "p-timeout@^3.2.0": "integrity" "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==" "resolved" "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz" @@ -5232,6 +6950,16 @@ "registry-url" "^3.0.3" "semver" "^5.1.0" +"package-json@^8.1.0": + "integrity" "sha512-hySwcV8RAWeAfPsXb9/HGSPn8lwDnv6fabH+obUZKX169QknRkRhPxd1yMubpKDskLFATkl3jHpNtVtDPFA0Wg==" + "resolved" "https://registry.npmjs.org/package-json/-/package-json-8.1.0.tgz" + "version" "8.1.0" + dependencies: + "got" "^12.1.0" + "registry-auth-token" "^5.0.1" + "registry-url" "^6.0.0" + "semver" "^7.3.7" + "packet-reader@1.0.0": "integrity" "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" "resolved" "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz" @@ -5242,6 +6970,14 @@ "resolved" "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz" "version" "1.0.11" +"param-case@^3.0.4": + "integrity" "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==" + "resolved" "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "dot-case" "^3.0.4" + "tslib" "^2.0.3" + "parse-glob@^3.0.4": "integrity" "sha1-ssN2z7EfNVE7rdFz7wu246OIORw= sha512-FC5TeK0AwXzq3tUBFtH74naWkPQCEWs4K+xMxWZBlKDWu0bVHXGZa+KKqxKidd7xwhdZ19ZNuF2uO1M/r196HA==" "resolved" "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz" @@ -5259,16 +6995,53 @@ dependencies: "error-ex" "^1.2.0" +"parse-json@^4.0.0": + "integrity" "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==" + "resolved" "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "error-ex" "^1.3.1" + "json-parse-better-errors" "^1.0.1" + "parseurl@~1.3.2", "parseurl@~1.3.3": "integrity" "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" "resolved" "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" "version" "1.3.3" +"pascal-case@^3.1.2": + "integrity" "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==" + "resolved" "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz" + "version" "3.1.2" + dependencies: + "no-case" "^3.0.4" + "tslib" "^2.0.3" + "pascalcase@^0.1.1": "integrity" "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==" "resolved" "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz" "version" "0.1.1" +"password-prompt@^1.1.2": + "integrity" "sha512-bpuBhROdrhuN3E7G/koAju0WjVw9/uQOG5Co5mokNj0MiOSBVZS1JTwM4zl55hu0WFmIEFvO9cU9sJQiBIYeIA==" + "resolved" "https://registry.npmjs.org/password-prompt/-/password-prompt-1.1.2.tgz" + "version" "1.1.2" + dependencies: + "ansi-escapes" "^3.1.0" + "cross-spawn" "^6.0.5" + +"patch-console@^2.0.0": + "integrity" "sha512-0YNdUceMdaQwoKce1gatDScmMo5pu/tfABfnzEqeG0gtTmd7mh/WcwgUjtAeOU7N8nFFlbQBnFK2gXW5fGvmMA==" + "resolved" "https://registry.npmjs.org/patch-console/-/patch-console-2.0.0.tgz" + "version" "2.0.0" + +"path-case@^3.0.4": + "integrity" "sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==" + "resolved" "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "dot-case" "^3.0.4" + "tslib" "^2.0.3" + "path-dirname@^1.0.0": "integrity" "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==" "resolved" "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz" @@ -5286,6 +7059,11 @@ "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" "version" "3.0.0" +"path-exists@^5.0.0": + "integrity" "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==" + "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz" + "version" "5.0.0" + "path-is-absolute@^1.0.0", "path-is-absolute@^1.0.1": "integrity" "sha1-F0uSaHNVNP+8es5r9TpanhtcX18= sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" @@ -5301,6 +7079,21 @@ "resolved" "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" "version" "2.0.1" +"path-key@^3.0.0": + "integrity" "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + "resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + "version" "3.1.1" + +"path-key@^3.1.0": + "integrity" "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + "resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + "version" "3.1.1" + +"path-key@^4.0.0": + "integrity" "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==" + "resolved" "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz" + "version" "4.0.0" + "path-parse@^1.0.5": "version" "1.0.5" @@ -5330,6 +7123,16 @@ "pify" "^2.0.0" "pinkie-promise" "^2.0.0" +"path-type@^4.0.0": + "integrity" "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + "resolved" "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + "version" "4.0.0" + +"pathe@1.0.0": + "integrity" "sha512-nPdMG0Pd09HuSsr7QOKUXO2Jr9eqaDiZvDwdyIhNG5SHYujkQHYKDfGQkulBxvbDHz8oHLsTgKN86LSwYzSHAg==" + "resolved" "https://registry.npmjs.org/pathe/-/pathe-1.0.0.tgz" + "version" "1.0.0" + "pathval@^1.1.1": "integrity" "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==" "resolved" "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz" @@ -5398,6 +7201,18 @@ dependencies: "split2" "^3.1.1" +"picomatch@^2.3.1": + "integrity" "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + "version" "2.3.1" + +"pid-from-port@1.1.3": + "integrity" "sha512-OlE82n3yMOE5dY9RMOwxhoWefeMlxwk5IVxoj0sSzSFIlmvhN4obzTvO3s/d/b5JhcgXikjaspsy/HuUDTqbBg==" + "resolved" "https://registry.npmjs.org/pid-from-port/-/pid-from-port-1.1.3.tgz" + "version" "1.1.3" + dependencies: + "execa" "^0.9.0" + "pidusage@^1.2.0": "integrity" "sha512-OGo+iSOk44HRJ8q15AyG570UYxcm5u+R99DI8Khu8P3tKGkVu5EZX4ywHglWSTMNNXQ274oeGpYrvFEhDIFGPg==" "resolved" "https://registry.npmjs.org/pidusage/-/pidusage-1.2.0.tgz" @@ -5413,6 +7228,11 @@ "resolved" "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" "version" "3.0.0" +"pify@^4.0.1": + "integrity" "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + "resolved" "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" + "version" "4.0.1" + "pinkie-promise@^2.0.0": "integrity" "sha1-ITXW36ejWMBprJsXh3YogihFD/o= sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==" "resolved" "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" @@ -5584,6 +7404,11 @@ "resolved" "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz" "version" "0.2.0" +"printable-characters@^1.0.42": + "integrity" "sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==" + "resolved" "https://registry.npmjs.org/printable-characters/-/printable-characters-1.0.42.tgz" + "version" "1.0.42" + "printj@~1.1.0": "integrity" "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==" "resolved" "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz" @@ -5630,6 +7455,11 @@ dependencies: "read" "^1.0.4" +"proto-list@~1.2.1": + "integrity" "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" + "resolved" "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz" + "version" "1.2.4" + "proxy-addr@~2.0.5": "integrity" "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==" "resolved" "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" @@ -5691,6 +7521,16 @@ "resolved" "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz" "version" "2.2.0" +"queue-microtask@^1.2.2": + "integrity" "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + "resolved" "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + "version" "1.2.3" + +"quick-lru@^5.1.1": + "integrity" "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" + "resolved" "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" + "version" "5.1.1" + "rabbit-adapter@^1.0.0": "integrity" "sha512-VeaxKATn6WOdgvZA0OtbBrzqbhrB51P98b/8MYnOlD0/I9ec4c1VBNxGzfRd7tTyGJ7RJY2Qg7X4QV6ob7cl3Q==" "resolved" "https://registry.npmjs.org/rabbit-adapter/-/rabbit-adapter-1.0.0.tgz" @@ -5730,7 +7570,7 @@ "iconv-lite" "0.4.24" "unpipe" "1.0.0" -"rc@^1.0.1", "rc@^1.1.6", "rc@^1.2.7": +"rc@^1.0.1", "rc@^1.1.6", "rc@^1.2.7", "rc@1.2.8": "integrity" "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==" "resolved" "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" "version" "1.2.8" @@ -5740,6 +7580,21 @@ "minimist" "^1.2.0" "strip-json-comments" "~2.0.1" +"react-reconciler@^0.29.0": + "integrity" "sha512-wa0fGj7Zht1EYMRhKWwoo1H9GApxYLBuhoAuXN0TlltESAjDssB+Apf0T/DngVqaMyPypDmabL37vw/2aRM98Q==" + "resolved" "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.29.0.tgz" + "version" "0.29.0" + dependencies: + "loose-envify" "^1.1.0" + "scheduler" "^0.23.0" + +"react@^18.2.0", "react@>=18.0.0", "react@18.2.0": + "integrity" "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==" + "resolved" "https://registry.npmjs.org/react/-/react-18.2.0.tgz" + "version" "18.2.0" + dependencies: + "loose-envify" "^1.1.0" + "read-pkg-up@^1.0.1": "integrity" "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==" "resolved" "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz" @@ -5915,6 +7770,13 @@ dependencies: "resolve" "^1.1.6" +"redeyed@~2.1.0": + "integrity" "sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==" + "resolved" "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "esprima" "~4.0.0" + "redis-commands@1.7.0": "integrity" "sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ==" "resolved" "https://registry.npmjs.org/redis-commands/-/redis-commands-1.7.0.tgz" @@ -6003,6 +7865,13 @@ "rc" "^1.1.6" "safe-buffer" "^5.0.1" +"registry-auth-token@^5.0.1": + "integrity" "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==" + "resolved" "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz" + "version" "5.0.2" + dependencies: + "@pnpm/npm-conf" "^2.1.0" + "registry-url@^3.0.3": "integrity" "sha1-PU74cPc93h138M+aOBQyRE4XSUI= sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==" "resolved" "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz" @@ -6010,6 +7879,13 @@ dependencies: "rc" "^1.0.1" +"registry-url@^6.0.0": + "integrity" "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==" + "resolved" "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "rc" "1.2.8" + "regjsgen@^0.2.0": "integrity" "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= sha512-x+Y3yA24uF68m5GA+tBjbGYo64xXVJpbToBaWCoSNSc1hdk6dfctaRWrNFTVJZIIhL5GxW8zwjoixbnifnK59g==" "resolved" "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz" @@ -6080,6 +7956,11 @@ "resolved" "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" "version" "2.1.1" +"require-from-string@^2.0.2": + "integrity" "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + "resolved" "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" + "version" "2.0.2" + "require-main-filename@^1.0.1": "integrity" "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==" "resolved" "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz" @@ -6098,6 +7979,11 @@ "resolved" "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" "version" "1.0.0" +"resolve-alpn@^1.2.0": + "integrity" "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" + "resolved" "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz" + "version" "1.2.1" + "resolve-from@^1.0.0": "integrity" "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY= sha512-kT10v4dhrlLNcnO084hEjvXCI1wUG9qZLoz2RogxqDQQYy7IxjI/iMUkOtQTNEh6rzHxvdQWHsJyel1pKOVCxg==" "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz" @@ -6121,6 +8007,13 @@ "is-core-module" "^2.2.0" "path-parse" "^1.0.6" +"responselike@^3.0.0": + "integrity" "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==" + "resolved" "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "lowercase-keys" "^3.0.0" + "restore-cursor@^2.0.0": "integrity" "sha1-n37ih/gv0ybU/RYpI9YhKe7g368= sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==" "resolved" "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz" @@ -6129,6 +8022,14 @@ "onetime" "^2.0.0" "signal-exit" "^3.0.2" +"restore-cursor@^4.0.0": + "integrity" "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==" + "resolved" "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "onetime" "^5.1.0" + "signal-exit" "^3.0.2" + "ret@~0.1.10": "integrity" "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" "resolved" "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz" @@ -6141,6 +8042,11 @@ dependencies: "any-promise" "^1.3.0" +"reusify@^1.0.4": + "integrity" "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + "resolved" "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + "version" "1.0.4" + "right-align@^0.1.1": "version" "0.1.3" dependencies: @@ -6165,6 +8071,13 @@ dependencies: "glob" "^7.1.3" +"rimraf@^3.0.2": + "integrity" "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "glob" "^7.1.3" + "rimraf@~2.6.2": "integrity" "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==" "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz" @@ -6177,6 +8090,13 @@ "resolved" "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" "version" "2.4.1" +"run-parallel@^1.1.9": + "integrity" "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==" + "resolved" "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "queue-microtask" "^1.2.2" + "rx-lite-aggregates@^4.0.8": "integrity" "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74= sha512-3xPNZGW93oCjiO7PtKxRK6iOVYBWBvtf9QHDfU23Oc+dLIQmAV//UnyXV/yihv81VS/UqoQPk4NegS8EFi55Hg==" "resolved" "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz" @@ -6235,6 +8155,13 @@ dependencies: "xmlchars" "^2.2.0" +"scheduler@^0.23.0": + "integrity" "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==" + "resolved" "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz" + "version" "0.23.0" + dependencies: + "loose-envify" "^1.1.0" + "semver-diff@^2.0.0": "integrity" "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= sha512-gL8F8L4ORwsS0+iQ34yCYv///jsOq0ZL7WP55d1HnJ32o7tyFYEFQZQA22mrLIacZdU6xecaBBZ+uEiffGNyXw==" "resolved" "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz" @@ -6242,6 +8169,11 @@ dependencies: "semver" "^5.0.3" +"semver-regex@^4.0.5": + "integrity" "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==" + "resolved" "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz" + "version" "4.0.5" + "semver@^5.0.1", "semver@^5.0.3", "semver@^5.1.0", "semver@^5.3", "semver@^5.3.0", "semver@^5.5.0", "semver@^5.6.0", "semver@^5.7.1", "semver@2 || 3 || 4 || 5", "semver@5.*": "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" @@ -6262,12 +8194,26 @@ "lru-cache" "^6.0.0" "semver@^7.3.7": - "integrity" "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==" - "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" - "version" "7.3.7" + "integrity" "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz" + "version" "7.5.1" + dependencies: + "lru-cache" "^6.0.0" + +"semver@^7.3.8": + "integrity" "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz" + "version" "7.5.1" dependencies: "lru-cache" "^6.0.0" +"semver@7.3.6": + "integrity" "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==" + "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz" + "version" "7.3.6" + dependencies: + "lru-cache" "^7.4.0" + "send@0.17.1": "integrity" "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==" "resolved" "https://registry.npmjs.org/send/-/send-0.17.1.tgz" @@ -6287,6 +8233,15 @@ "range-parser" "~1.2.1" "statuses" "~1.5.0" +"sentence-case@^3.0.4": + "integrity" "sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==" + "resolved" "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "no-case" "^3.0.4" + "tslib" "^2.0.3" + "upper-case-first" "^2.0.2" + "sequelize-pool@^6.0.0": "integrity" "sha512-4YwEw3ZgK/tY/so+GfnSgXkdwIJJ1I32uZJztIEgZeAO6HMgj64OzySbWLgxj+tXhZCJnzRfkY9gINw8Ft8ZMg==" "resolved" "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-6.1.0.tgz" @@ -6332,11 +8287,6 @@ "resolved" "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" "version" "2.0.0" -"set-immediate-shim@~1.0.1": - "integrity" "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= sha512-Li5AOqrZWCVA2n5kryzEmqai6bKSIvpz5oUJHPVj6+dsbD3X1ixtsY5tEnsaNpH3pFAHmG8eIHUrtEtohrg+UQ==" - "resolved" "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz" - "version" "1.0.1" - "set-value@^0.4.3": "version" "0.4.3" dependencies: @@ -6355,7 +8305,7 @@ "is-plain-object" "^2.0.3" "split-string" "^3.0.1" -"setimmediate@~1.0.4": +"setimmediate@^1.0.5", "setimmediate@~1.0.4": "integrity" "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" "resolved" "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" "version" "1.0.5" @@ -6386,11 +8336,23 @@ dependencies: "shebang-regex" "^1.0.0" +"shebang-command@^2.0.0": + "integrity" "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==" + "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "shebang-regex" "^3.0.0" + "shebang-regex@^1.0.0": "integrity" "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==" "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" "version" "1.0.0" +"shebang-regex@^3.0.0": + "integrity" "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + "version" "3.0.0" + "shelljs@0.7.8": "integrity" "sha1-3svPh0sNHl+3LhSxZKloMEjprLM= sha512-/YF5Uk8hcwi7ima04ppkbA4RaRMdPMBfwAvAf8sufYOxsJRtbdoBsT8vGvlb+799BrlGdYrd+oczIA2eN2JdWA==" "resolved" "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz" @@ -6419,10 +8381,10 @@ "resolved" "https://registry.npmjs.org/sift/-/sift-13.5.2.tgz" "version" "13.5.2" -"signal-exit@^3.0.0", "signal-exit@^3.0.2": - "integrity" "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==" - "resolved" "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz" - "version" "3.0.6" +"signal-exit@^3.0.0", "signal-exit@^3.0.2", "signal-exit@^3.0.5", "signal-exit@^3.0.7": + "integrity" "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "resolved" "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + "version" "3.0.7" "signal-exit@^3.0.1": "version" "3.0.2" @@ -6441,6 +8403,15 @@ "once" "^1.3.1" "simple-concat" "^1.0.0" +"simple-git@3.16.0": + "integrity" "sha512-zuWYsOLEhbJRWVxpjdiXl6eyAyGo/KzVW+KFhhw9MqEEJttcq+32jTWSGyxTdf9e/YCohxRE+9xpWFj9FdiJNw==" + "resolved" "https://registry.npmjs.org/simple-git/-/simple-git-3.16.0.tgz" + "version" "3.16.0" + dependencies: + "@kwsites/file-exists" "^1.1.1" + "@kwsites/promise-deferred" "^1.1.1" + "debug" "^4.3.4" + "simple-swizzle@^0.2.2": "integrity" "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==" "resolved" "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" @@ -6473,6 +8444,19 @@ "resolved" "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz" "version" "1.0.0" +"slash@^3.0.0": + "integrity" "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + "resolved" "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + "version" "3.0.0" + +"slice-ansi@^5.0.0": + "integrity" "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==" + "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "ansi-styles" "^6.0.0" + "is-fullwidth-code-point" "^4.0.0" + "slice-ansi@1.0.0": "integrity" "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==" "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz" @@ -6490,6 +8474,14 @@ "resolved" "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz" "version" "1.1.6" +"snake-case@^3.0.4": + "integrity" "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==" + "resolved" "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "dot-case" "^3.0.4" + "tslib" "^2.0.3" + "snapdragon-node@^2.0.1": "integrity" "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==" "resolved" "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz" @@ -6546,6 +8538,14 @@ "buffer-from" "^1.0.0" "source-map" "^0.6.0" +"source-map-support@0.5.21": + "integrity" "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==" + "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" + "version" "0.5.21" + dependencies: + "buffer-from" "^1.0.0" + "source-map" "^0.6.0" + "source-map-url@^0.4.0": "integrity" "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" "resolved" "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz" @@ -6572,6 +8572,8 @@ "version" "0.6.1" "source-map@^0.6.1": + "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" "version" "0.6.1" "sparse-bitfield@^3.0.3": @@ -6673,6 +8675,33 @@ "safer-buffer" "^2.0.2" "tweetnacl" "~0.14.0" +"stack-generator@^2.0.3": + "integrity" "sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==" + "resolved" "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz" + "version" "2.0.10" + dependencies: + "stackframe" "^1.3.4" + +"stack-utils@^2.0.6": + "integrity" "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==" + "resolved" "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz" + "version" "2.0.6" + dependencies: + "escape-string-regexp" "^2.0.0" + +"stackframe@^1.3.4": + "integrity" "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" + "resolved" "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz" + "version" "1.3.4" + +"stacktracey@2.1.8": + "integrity" "sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==" + "resolved" "https://registry.npmjs.org/stacktracey/-/stacktracey-2.1.8.tgz" + "version" "2.1.8" + dependencies: + "as-table" "^1.0.36" + "get-source" "^2.0.12" + "standard-as-callback@^2.1.0": "integrity" "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==" "resolved" "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz" @@ -6742,6 +8771,42 @@ "is-fullwidth-code-point" "^2.0.0" "strip-ansi" "^4.0.0" +"string-width@^4.0.0", "string-width@^4.2.3": + "integrity" "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + "version" "4.2.3" + dependencies: + "emoji-regex" "^8.0.0" + "is-fullwidth-code-point" "^3.0.0" + "strip-ansi" "^6.0.1" + +"string-width@^4.1.0": + "integrity" "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + "version" "4.2.3" + dependencies: + "emoji-regex" "^8.0.0" + "is-fullwidth-code-point" "^3.0.0" + "strip-ansi" "^6.0.1" + +"string-width@^5.0.0": + "integrity" "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" + "version" "5.1.2" + dependencies: + "eastasianwidth" "^0.2.0" + "emoji-regex" "^9.2.2" + "strip-ansi" "^7.0.1" + +"string-width@^5.0.1", "string-width@^5.1.2": + "integrity" "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" + "version" "5.1.2" + dependencies: + "eastasianwidth" "^0.2.0" + "emoji-regex" "^9.2.2" + "strip-ansi" "^7.0.1" + "string.prototype.trimend@^1.0.4": "integrity" "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==" "resolved" "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz" @@ -6772,6 +8837,27 @@ dependencies: "ansi-regex" "^3.0.0" +"strip-ansi@^6.0.0", "strip-ansi@^6.0.1": + "integrity" "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "ansi-regex" "^5.0.1" + +"strip-ansi@^7.0.1": + "integrity" "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz" + "version" "7.0.1" + dependencies: + "ansi-regex" "^6.0.1" + +"strip-ansi@7.0.1": + "integrity" "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz" + "version" "7.0.1" + dependencies: + "ansi-regex" "^6.0.1" + "strip-bom@^2.0.0": "integrity" "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==" "resolved" "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz" @@ -6780,7 +8866,7 @@ "is-utf8" "^0.2.0" "strip-bom@^3.0.0": - "integrity" "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==" + "integrity" "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==" "resolved" "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" "version" "3.0.0" @@ -6789,6 +8875,11 @@ "resolved" "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz" "version" "1.0.0" +"strip-final-newline@^3.0.0": + "integrity" "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==" + "resolved" "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz" + "version" "3.0.0" + "strip-indent@^2.0.0": "integrity" "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==" "resolved" "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz" @@ -6799,6 +8890,11 @@ "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" "version" "2.0.1" +"stubborn-fs@^1.2.4": + "integrity" "sha512-KRa4nIRJ8q6uApQbPwYZVhOof8979fw4xbajBWa5kPJFa4nyY3aFaMWVyIVCDnkNCCG/3HLipUZ4QaNlYsmX1w==" + "resolved" "https://registry.npmjs.org/stubborn-fs/-/stubborn-fs-1.2.4.tgz" + "version" "1.2.4" + "superagent@^3.8.3": "integrity" "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==" "resolved" "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz" @@ -6847,6 +8943,27 @@ dependencies: "has-flag" "^3.0.0" +"supports-color@^7.0.0": + "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + "version" "7.2.0" + dependencies: + "has-flag" "^4.0.0" + +"supports-color@^7.1.0": + "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + "version" "7.2.0" + dependencies: + "has-flag" "^4.0.0" + +"supports-color@^8.1.1": + "integrity" "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + "version" "8.1.1" + dependencies: + "has-flag" "^4.0.0" + "supports-color@3.1.2": "integrity" "sha1-cqJiiU2dQIuVbKBf83su2KbiotU= sha512-F8dvPrZJtNzvDRX26eNXT4a7AecAvTGljmmnI39xEgSpbHKhQ7N0dO/NTxUExd0wuLHp4zbwYY7lvHq0aKpwrA==" "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz" @@ -6854,6 +8971,22 @@ dependencies: "has-flag" "^1.0.0" +"supports-hyperlinks@^2.2.0": + "integrity" "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==" + "resolved" "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz" + "version" "2.3.0" + dependencies: + "has-flag" "^4.0.0" + "supports-color" "^7.0.0" + +"supports-hyperlinks@3.0.0": + "integrity" "sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==" + "resolved" "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "has-flag" "^4.0.0" + "supports-color" "^7.0.0" + "table@4.0.2": "integrity" "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==" "resolved" "https://registry.npmjs.org/table/-/table-4.0.2.tgz" @@ -6887,6 +9020,21 @@ "inherits" "^2.0.3" "readable-stream" "^3.1.1" +"temp-dir@^2.0.0": + "integrity" "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==" + "resolved" "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz" + "version" "2.0.0" + +"tempy@3.0.0": + "integrity" "sha512-B2I9X7+o2wOaW4r/CWMkpOO9mdiTRCxXNgob6iGvPmfPWgH/KyUD6Uy5crtWBxIBe3YrNZKR2lSzv1JJKWD4vA==" + "resolved" "https://registry.npmjs.org/tempy/-/tempy-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "is-stream" "^3.0.0" + "temp-dir" "^2.0.0" + "type-fest" "^2.12.2" + "unique-string" "^3.0.0" + "term-size@^1.2.0": "integrity" "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= sha512-7dPUZQGy/+m3/wjVz3ZW5dobSoD/02NxJpoXUX0WIyjfVS3l0c+b/+9phIDFA7FHzkYtwtMFgeGZ/Y8jVTeqQQ==" "resolved" "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz" @@ -6894,6 +9042,19 @@ dependencies: "execa" "^0.7.0" +"term-size@3.0.2": + "integrity" "sha512-YfE8KwjrumviCxmeOS1r1hAwqUcd/AnhrG/Pol/Gry91EyUCS+jQH0qFUZOUkpGQ5rXsKMK6S6kjne53ytYS/w==" + "resolved" "https://registry.npmjs.org/term-size/-/term-size-3.0.2.tgz" + "version" "3.0.2" + +"terminal-link@3.0.0": + "integrity" "sha512-flFL3m4wuixmf6IfhFJd1YPiLiMuxEc8uHRM1buzIeZPm22Au2pDqBJQgdo7n1WfPU1ONFGv7YDwpFBmHGF6lg==" + "resolved" "https://registry.npmjs.org/terminal-link/-/terminal-link-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "ansi-escapes" "^5.0.0" + "supports-hyperlinks" "^2.2.0" + "test-exclude@^4.2.0": "version" "4.2.1" dependencies: @@ -6929,6 +9090,19 @@ "resolved" "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz" "version" "4.0.1" +"tinycolor2@^1.0.0": + "integrity" "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==" + "resolved" "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz" + "version" "1.6.0" + +"tinygradient@^1.1.5": + "integrity" "sha512-8nIfc2vgQ4TeLnk2lFj4tRLvvJwEfQuabdsmvDdQPT0xlk9TaNtpGd6nNRxXoK6vQhN6RSzj+Cnp5tTQmpxmbw==" + "resolved" "https://registry.npmjs.org/tinygradient/-/tinygradient-1.1.5.tgz" + "version" "1.1.5" + dependencies: + "@types/tinycolor2" "^1.4.0" + "tinycolor2" "^1.0.0" + "tmp@^0.0.33": "integrity" "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==" "resolved" "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" @@ -6963,6 +9137,13 @@ "is-number" "^3.0.0" "repeat-string" "^1.6.1" +"to-regex-range@^5.0.1": + "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==" + "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "is-number" "^7.0.0" + "to-regex@^3.0.1", "to-regex@^3.0.2": "integrity" "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==" "resolved" "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz" @@ -7005,16 +9186,50 @@ "psl" "^1.1.28" "punycode" "^2.1.1" +"tr46@~0.0.3": + "integrity" "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "resolved" "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + "version" "0.0.3" + "traverse@>=0.3.0 <0.4": "integrity" "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk= sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==" "resolved" "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz" "version" "0.3.9" +"tree-kill@1.2.2": + "integrity" "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==" + "resolved" "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" + "version" "1.2.2" + "trim-right@^1.0.1": "integrity" "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw==" "resolved" "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz" "version" "1.0.1" +"ts-error@1.0.6": + "integrity" "sha512-tLJxacIQUM82IR7JO1UUkKlYuUTmoY9HBJAmNWFzheSlDS5SPMcNIepejHJa4BpPQLAcbRhRf3GDJzyj6rbKvA==" + "resolved" "https://registry.npmjs.org/ts-error/-/ts-error-1.0.6.tgz" + "version" "1.0.6" + +"ts-node@^10.9.1": + "integrity" "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==" + "resolved" "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" + "version" "10.9.1" + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + "acorn" "^8.4.1" + "acorn-walk" "^8.1.1" + "arg" "^4.1.0" + "create-require" "^1.1.0" + "diff" "^4.0.1" + "make-error" "^1.1.1" + "v8-compile-cache-lib" "^3.0.1" + "yn" "3.1.1" + "tsconfig-paths@^3.11.0": "integrity" "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==" "resolved" "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz" @@ -7025,6 +9240,11 @@ "minimist" "^1.2.0" "strip-bom" "^3.0.0" +"tslib@^2", "tslib@^2.0.3", "tslib@^2.4.1", "tslib@^2.5.0": + "integrity" "sha512-KaI6gPil5m9vF7DKaoXxx1ia9fxS4qG5YveErRRVknPDXXriu5M8h48YRjB6h5ZUOKuAKlSJYb0GaDe8I39fRw==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.5.1.tgz" + "version" "2.5.1" + "tunnel-agent@^0.6.0": "integrity" "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==" "resolved" "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" @@ -7054,6 +9274,46 @@ "resolved" "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" "version" "4.0.8" +"type-fest@^0.12.0": + "integrity" "sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.12.0.tgz" + "version" "0.12.0" + +"type-fest@^0.21.3": + "integrity" "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" + "version" "0.21.3" + +"type-fest@^0.3.0": + "integrity" "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz" + "version" "0.3.1" + +"type-fest@^1.0.1": + "integrity" "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz" + "version" "1.4.0" + +"type-fest@^1.0.2": + "integrity" "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz" + "version" "1.4.0" + +"type-fest@^2.11.2": + "integrity" "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz" + "version" "2.19.0" + +"type-fest@^2.12.2": + "integrity" "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz" + "version" "2.19.0" + +"type-fest@^3.0.0": + "integrity" "sha512-hmAPf1datm+gt3c2mvu0sJyhFy6lTkIGf0GzyaZWxRLnabQfPUqg6tF95RPg6sLxKI7nFLGdFxBcf2/7+GXI+A==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-3.10.0.tgz" + "version" "3.10.0" + "type-is@^1.6.4", "type-is@~1.6.17", "type-is@~1.6.18": "integrity" "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==" "resolved" "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" @@ -7067,6 +9327,11 @@ "resolved" "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" "version" "0.0.6" +"typescript@>=2.7", "typescript@>=4.7.0": + "integrity" "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==" + "resolved" "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz" + "version" "5.0.4" + "uglify-js@^2.6": "version" "2.8.29" dependencies: @@ -7115,6 +9380,20 @@ dependencies: "crypto-random-string" "^1.0.0" +"unique-string@^3.0.0": + "integrity" "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==" + "resolved" "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "crypto-random-string" "^4.0.0" + +"unique-string@3.0.0": + "integrity" "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==" + "resolved" "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "crypto-random-string" "^4.0.0" + "universalify@^2.0.0": "integrity" "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" "resolved" "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" @@ -7175,6 +9454,20 @@ "semver-diff" "^2.0.0" "xdg-basedir" "^3.0.0" +"upper-case-first@^2.0.2": + "integrity" "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==" + "resolved" "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "tslib" "^2.0.3" + +"upper-case@^2.0.2": + "integrity" "sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==" + "resolved" "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "tslib" "^2.0.3" + "uri-js@^4.2.2": "integrity" "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==" "resolved" "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" @@ -7258,6 +9551,11 @@ "resolved" "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz" "version" "9.0.0" +"v8-compile-cache-lib@^3.0.1": + "integrity" "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" + "resolved" "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" + "version" "3.0.1" + "v8-compile-cache@^1.1.0": "integrity" "sha512-ejdrifsIydN1XDH7EuR2hn8ZrkRKUYF7tUcBjBy/lhrCvs2K+zRlbW9UHc0IQ9RsYFZJFqJrieoIHfkCa0DBRA==" "resolved" "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-1.1.2.tgz" @@ -7321,6 +9619,29 @@ "shimmer" "^1.0.0" "uuid" "^3.0.1" +"web-streams-polyfill@^3.0.3": + "integrity" "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==" + "resolved" "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz" + "version" "3.2.1" + +"webidl-conversions@^3.0.0": + "integrity" "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + "version" "3.0.1" + +"whatwg-url@^5.0.0": + "integrity" "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==" + "resolved" "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "tr46" "~0.0.3" + "webidl-conversions" "^3.0.0" + +"when-exit@^2.0.0": + "integrity" "sha512-H85ulNwUBU1e6PGxkWUDgxnbohSXD++ah6Xw1VHAN7CtypcbZaC4aYjQ+C2PMVaDkURDuOinNAT+Lnz3utWXxQ==" + "resolved" "https://registry.npmjs.org/when-exit/-/when-exit-2.1.0.tgz" + "version" "2.1.0" + "which-boxed-primitive@^1.0.2": "integrity" "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==" "resolved" "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" @@ -7349,6 +9670,13 @@ dependencies: "isexe" "^2.0.0" +"which@^2.0.1": + "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==" + "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "isexe" "^2.0.0" + "wide-align@^1.1.0": "integrity" "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==" "resolved" "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" @@ -7363,6 +9691,20 @@ dependencies: "string-width" "^2.1.1" +"widest-line@^3.1.0": + "integrity" "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==" + "resolved" "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "string-width" "^4.0.0" + +"widest-line@^4.0.1": + "integrity" "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==" + "resolved" "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "string-width" "^5.0.1" + "window-size@0.1.0": "version" "0.1.0" @@ -7388,6 +9730,11 @@ "resolved" "https://registry.npmjs.org/word/-/word-0.3.0.tgz" "version" "0.3.0" +"wordwrap@^1.0.0": + "integrity" "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" + "resolved" "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" + "version" "1.0.0" + "wordwrap@~0.0.2": "version" "0.0.3" @@ -7402,6 +9749,24 @@ "string-width" "^1.0.1" "strip-ansi" "^3.0.1" +"wrap-ansi@^7.0.0": + "integrity" "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==" + "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "ansi-styles" "^4.0.0" + "string-width" "^4.1.0" + "strip-ansi" "^6.0.0" + +"wrap-ansi@^8.1.0": + "integrity" "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==" + "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" + "version" "8.1.0" + dependencies: + "ansi-styles" "^6.1.0" + "string-width" "^5.0.1" + "strip-ansi" "^7.0.1" + "wrappy@1": "integrity" "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" @@ -7432,6 +9797,11 @@ dependencies: "mkdirp" "^0.5.1" +"ws@^8.12.0": + "integrity" "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==" + "resolved" "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz" + "version" "8.13.0" + "x-xss-protection@1.3.0": "integrity" "sha512-kpyBI9TlVipZO4diReZMAHWtS0MMa/7Kgx8hwG/EuZLiA6sg4Ah/4TRdASHhRRN3boobzcYgFRUFSgHRge6Qhg==" "resolved" "https://registry.npmjs.org/x-xss-protection/-/x-xss-protection-1.3.0.tgz" @@ -7527,6 +9897,28 @@ "y18n" "^3.2.1" "yargs-parser" "^9.0.2" +"yarn@^1.22.18": + "integrity" "sha512-/0V5q0WbslqnwP91tirOvldvYISzaqhClxzyUKXYxs07yUILIs5jx/k6CFe8bvKSkds5w+eiOqta39Wk3WxdcQ==" + "resolved" "https://registry.npmjs.org/yarn/-/yarn-1.22.19.tgz" + "version" "1.22.19" + +"yn@3.1.1": + "integrity" "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" + "resolved" "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" + "version" "3.1.1" + +"yocto-queue@^1.0.0": + "integrity" "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==" + "resolved" "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz" + "version" "1.0.0" + +"yoga-layout-prebuilt@^1.9.6": + "integrity" "sha512-YnOmtSbv4MTf7RGJMK0FvZ+KD8OEe/J5BNnR0GHhD8J/XcG/Qvxgszm0Un6FTHWW4uHlTgP0IztiXQnGyIR45g==" + "resolved" "https://registry.npmjs.org/yoga-layout-prebuilt/-/yoga-layout-prebuilt-1.10.0.tgz" + "version" "1.10.0" + dependencies: + "@types/yoga-layout" "1.9.2" + "zip-stream@^4.1.0": "integrity" "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==" "resolved" "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz" @@ -7535,3 +9927,8 @@ "archiver-utils" "^2.1.0" "compress-commons" "^4.1.0" "readable-stream" "^3.6.0" + +"zod@3.17.3": + "integrity" "sha512-4oKP5zvG6GGbMlqBkI5FESOAweldEhSOZ6LI6cG+JzUT7ofj1ZOC0PJudpQOpT1iqOFpYYtX5Pw0+o403y4bcg==" + "resolved" "https://registry.npmjs.org/zod/-/zod-3.17.3.tgz" + "version" "3.17.3"