From b3c4f7c392bc8328fc893970bbec6f23ba4ef596 Mon Sep 17 00:00:00 2001 From: Ayangade Adeoluwa <37867493+Irongade@users.noreply.github.com> Date: Mon, 12 Sep 2022 10:15:47 +0100 Subject: [PATCH] feat: AST apis for parsing script and returning identifiers (#16252) * rts configurations for ast * update shared dependencies.json for shared ast module * feat: api for script to identifiers * fix: typo for identifiers * feat: api for multiple scripts to get identifiers * fix: rts config, apis for ast * fix: removed unnecessary changes for ast modules * fix: docker image for rts including ast shared module, rts file alias ref * fix: added comments in build.sh file Co-authored-by: Aman Agarwal --- Dockerfile | 1 - ...eV2_Property_ToggleJs_With_Binding_spec.js | 161 +++++++++++ app/rts/Dockerfile | 2 - app/rts/build.sh | 4 +- app/rts/package.json | 9 +- app/rts/src/controllers/Ast/AstController.ts | 63 +++++ app/rts/src/controllers/BaseController.ts | 62 ++++ app/rts/src/controllers/socket.ts | 6 +- app/rts/src/middlewares/Validator.ts | 13 + app/rts/src/middlewares/rules/ast.ts | 15 + app/rts/src/routes/ast_routes.ts | 24 ++ app/rts/src/server.ts | 10 +- app/rts/src/services/AstService.ts | 21 ++ app/rts/src/sockets/events.ts | 6 +- app/rts/src/sockets/index.ts | 2 +- app/rts/src/sockets/mongo.ts | 4 +- app/rts/tsconfig.json | 15 +- app/rts/yarn.lock | 267 ++++++++++++++++++ app/shared/Readme.md | 7 + app/shared/ast/package.json | 4 +- app/shared/shared-dependencies.json | 2 +- 21 files changed, 676 insertions(+), 22 deletions(-) create mode 100644 app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Binding/TableV2_Property_ToggleJs_With_Binding_spec.js create mode 100644 app/rts/src/controllers/Ast/AstController.ts create mode 100644 app/rts/src/controllers/BaseController.ts create mode 100644 app/rts/src/middlewares/Validator.ts create mode 100644 app/rts/src/middlewares/rules/ast.ts create mode 100644 app/rts/src/routes/ast_routes.ts create mode 100644 app/rts/src/services/AstService.ts diff --git a/Dockerfile b/Dockerfile index 7699bdc24c..bb39eb33ee 100644 --- a/Dockerfile +++ b/Dockerfile @@ -60,7 +60,6 @@ COPY ./app/client/build editor/ # Add RTS - Application Layer COPY ./app/rts/package.json ./app/rts/dist rts/ -COPY ./app/rts/node_modules rts/node_modules # Nginx & MongoDB config template - Configuration layer COPY ./deploy/docker/templates/nginx/* \ diff --git a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Binding/TableV2_Property_ToggleJs_With_Binding_spec.js b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Binding/TableV2_Property_ToggleJs_With_Binding_spec.js new file mode 100644 index 0000000000..69dd114b66 --- /dev/null +++ b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/Binding/TableV2_Property_ToggleJs_With_Binding_spec.js @@ -0,0 +1,161 @@ +/* eslint-disable cypress/no-unnecessary-waiting */ + +const widgetsPage = require("../../../../locators/Widgets.json"); +const dsl = require("../../../../fixtures/tableV2NewDsl.json"); +const testdata = require("../../../../fixtures/testdata.json"); + +describe("Table Widget V2 property pane feature validation", function() { + before(() => { + cy.addDsl(dsl); + }); + + it("1. Table widget V2 toggle test for text alignment", function() { + cy.openPropertyPane("tablewidgetv2"); + cy.editColumn("id"); + cy.moveToStyleTab(); + cy.get(widgetsPage.toggleTextAlign) + .first() + .click({ force: true }); + // eslint-disable-next-line cypress/no-unnecessary-waiting + cy.wait(1000); + cy.toggleJsAndUpdate("tabledata", testdata.bindingAlign); + + cy.readTableV2dataValidateCSS("0", "0", "justify-content", "flex-start"); + cy.readTableV2dataValidateCSS("1", "0", "justify-content", "flex-end"); + }); + + it("2. Table widget V2 change text size and validate", function() { + cy.readTableV2dataValidateCSS("0", "0", "font-size", "14px"); + cy.openPropertyPane("tablewidgetv2"); + cy.get(".t--property-pane-back-btn").click({ force: true }); + cy.editColumn("id"); + cy.moveToStyleTab(); + cy.get(widgetsPage.toggleTextAlign) + .first() + .click({ force: true }); + // eslint-disable-next-line cypress/no-unnecessary-waiting + cy.wait(1000); + cy.get(widgetsPage.textSize) + .last() + .click({ force: true }); + // eslint-disable-next-line cypress/no-unnecessary-waiting + cy.wait(1000); + cy.selectTxtSize("XL"); + + cy.readTableV2dataValidateCSS("0", "0", "font-size", "30px"); + }); + + it("3. Table widget toggle test for text size", function() { + cy.openPropertyPane("tablewidgetv2"); + cy.get(".t--property-pane-back-btn").click({ force: true }); + cy.editColumn("id"); + cy.moveToStyleTab(); + cy.get(widgetsPage.toggleTextSize) + .first() + .click({ force: true }); + // eslint-disable-next-line cypress/no-unnecessary-waiting + cy.wait(1000); + cy.toggleJsAndUpdateWithIndex("tabledata", testdata.bindingNewSize, 0); + + cy.readTableV2dataValidateCSS("0", "0", "font-size", "14px"); + cy.readTableV2dataValidateCSS("1", "0", "font-size", "24px"); + }); + + it("4. Table widget toggle test for vertical Alignment", function() { + cy.openPropertyPane("tablewidgetv2"); + cy.get(".t--property-pane-back-btn").click({ force: true }); + cy.editColumn("id"); + cy.moveToStyleTab(); + cy.get(widgetsPage.toggleTextSize) + .first() + .click({ force: true }); + // eslint-disable-next-line cypress/no-unnecessary-waiting + cy.wait(1000); + cy.get(widgetsPage.toggleVerticalAlig) + .first() + .click({ force: true }); + // eslint-disable-next-line cypress/no-unnecessary-waiting + cy.wait(1000); + cy.toggleJsAndUpdateWithIndex("tabledata", testdata.bindingVerticalAlig, 2); + + cy.readTableV2dataValidateCSS("0", "0", "align-items", "flex-start"); + cy.readTableV2dataValidateCSS("1", "0", "align-items", "flex-end"); + }); + + it("5. Table widget V2 toggle test for style Alignment", function() { + cy.openPropertyPane("tablewidgetv2"); + cy.get(".t--property-pane-back-btn").click({ force: true }); + cy.editColumn("id"); + cy.moveToStyleTab(); + /* + cy.get(widgetsPage.toggleVerticalAlig) + .first() + .click({ force: true }); + */ + // eslint-disable-next-line cypress/no-unnecessary-waiting + cy.wait(1000); + cy.get(widgetsPage.toggleTextStyle) + .first() + .click({ force: true }); + // eslint-disable-next-line cypress/no-unnecessary-waiting + cy.wait(1000); + cy.toggleJsAndUpdateWithIndex("tabledata", testdata.bindingStyle, 1); + + cy.readTableV2dataValidateCSS("0", "0", "font-style", "normal"); + cy.readTableV2dataValidateCSS("1", "0", "font-style", "italic"); + }); + + it("6. Table widget toggle test for text color", function() { + cy.openPropertyPane("tablewidgetv2"); + cy.get(".t--property-pane-back-btn").click({ force: true }); + cy.editColumn("id"); + cy.moveToStyleTab(); + cy.get(widgetsPage.toggleVerticalAlig) + .first() + .click({ force: true }); + // eslint-disable-next-line cypress/no-unnecessary-waiting + cy.wait(1000); + cy.get(widgetsPage.toggleJsColor) + .first() + .click({ force: true }); + // eslint-disable-next-line cypress/no-unnecessary-waiting + cy.wait(1000); + cy.toggleJsAndUpdate("tabledata", testdata.bindingTextColor); + + cy.wait("@updateLayout"); + cy.readTableV2dataValidateCSS("0", "0", "color", "rgb(0, 128, 0)"); + cy.readTableV2dataValidateCSS("1", "0", "color", "rgb(255, 0, 0)"); + }); + + it("7. Table widget toggle test for background color", function() { + cy.openPropertyPane("tablewidgetv2"); + cy.get(".t--property-pane-back-btn").click({ force: true }); + cy.editColumn("id"); + cy.moveToStyleTab(); + cy.get(widgetsPage.toggleJsColor) + .first() + .click({ force: true }); + // eslint-disable-next-line cypress/no-unnecessary-waiting + cy.wait(1000); + cy.get(widgetsPage.toggleJsBcgColor) + .first() + .click({ force: true }); + // eslint-disable-next-line cypress/no-unnecessary-waiting + cy.wait(1000); + cy.toggleJsAndUpdate("tabledata", testdata.bindingTextColor); + + cy.wait("@updateLayout"); + cy.readTableV2dataValidateCSS( + "0", + "0", + "background", + "rgb(0, 128, 0) none repeat scroll 0% 0% / auto padding-box border-box", + ); + cy.readTableV2dataValidateCSS( + "1", + "0", + "background", + "rgb(255, 0, 0) none repeat scroll 0% 0% / auto padding-box border-box", + ); + }); +}); diff --git a/app/rts/Dockerfile b/app/rts/Dockerfile index 484bb61f6b..4630d15187 100644 --- a/app/rts/Dockerfile +++ b/app/rts/Dockerfile @@ -6,8 +6,6 @@ WORKDIR /app COPY package.json dist ./ -COPY node_modules ./node_modules - EXPOSE 8091 CMD ["node", "--require", "source-map-support/register", "server.js"] diff --git a/app/rts/build.sh b/app/rts/build.sh index e39103bca0..cfcde751d8 100755 --- a/app/rts/build.sh +++ b/app/rts/build.sh @@ -4,4 +4,6 @@ set -o errexit cd "$(dirname "$0")" yarn install --frozen-lockfile -npx tsc +npx tsc && npx tsc-alias +# Copying node_modules directory into dist as rts server requires node_modules to run server build properly. This was previously being done in dockerfile which was copying the symlinks to image rather than the whole directory of shared modules (e.g. AST) +cp -r node_modules ./dist diff --git a/app/rts/package.json b/app/rts/package.json index 3d98f88481..a6cd00d6ac 100644 --- a/app/rts/package.json +++ b/app/rts/package.json @@ -24,6 +24,13 @@ }, "scripts": { "preinstall": "CURRENT_SCOPE=rts node ../shared/build-shared-dep.js", - "postinstall": "CURRENT_SCOPE=rts node ../shared/install-dependencies.js" + "build": "./build.sh", + "postinstall": "CURRENT_SCOPE=rts node ../shared/install-dependencies.js", + "start": "./start-server.sh" + }, + "dependencies": { + "express-validator": "^6.14.2", + "http-status-codes": "^2.2.0", + "tsc-alias": "^1.7.0" } } diff --git a/app/rts/src/controllers/Ast/AstController.ts b/app/rts/src/controllers/Ast/AstController.ts new file mode 100644 index 0000000000..cc72549d66 --- /dev/null +++ b/app/rts/src/controllers/Ast/AstController.ts @@ -0,0 +1,63 @@ +import { Response, Request } from "express"; +import { StatusCodes } from "http-status-codes"; + +import BaseController from "@controllers/BaseController"; +import AstService from "@services/AstService"; + +type ScriptToIdentifiersType = { + script: string; + evalVersion?: number; +}; + +type MultipleScriptToIdentifiersType = { + scripts: string[]; + evalVersion?: number; +}; +export default class AstController extends BaseController { + constructor() { + super(); + } + + async getDependentIdentifiers(req: Request, res: Response) { + try { + // By default the application eval version is set to be 2 + const { script, evalVersion = 2 }: ScriptToIdentifiersType = req.body; + const data = await AstService.getIdentifiersFromScript( + script, + evalVersion + ); + return super.sendResponse(res, data); + } catch (err) { + return super.sendError( + res, + super.serverErrorMessaage, + [err.message], + StatusCodes.INTERNAL_SERVER_ERROR + ); + } + } + + async getMultipleDependentIdentifiers(req: Request, res: Response) { + try { + // By default the application eval version is set to be 2 + const { scripts, evalVersion = 2 }: MultipleScriptToIdentifiersType = + req.body; + + Promise.all( + scripts.map( + async (script) => + await AstService.getIdentifiersFromScript(script, evalVersion) + ) + ).then((data) => { + return super.sendResponse(res, data); + }); + } catch (err) { + return super.sendError( + res, + super.serverErrorMessaage, + [err.message], + StatusCodes.INTERNAL_SERVER_ERROR + ); + } + } +} diff --git a/app/rts/src/controllers/BaseController.ts b/app/rts/src/controllers/BaseController.ts new file mode 100644 index 0000000000..1b4aa4839d --- /dev/null +++ b/app/rts/src/controllers/BaseController.ts @@ -0,0 +1,62 @@ +import { Response } from "express"; +import { ValidationError } from "express-validator"; +import { StatusCodes } from "http-status-codes"; + +type ErrorData = { + error: string | string[]; + validationErrors?: ValidationError[]; +}; + +type ErrorBag = { + success: boolean; + message: string; + data?: ErrorData; +}; + +type ResponseData = { + success: boolean; + message?: string; + data: unknown; //setting unknown for now, to be modified later. +}; + +export default class BaseController { + serverErrorMessaage = "Something went wrong"; + sendResponse( + response: Response, + result: unknown, + message?: string, + code: number = StatusCodes.OK + ): Response { + return response.status(code).json({ + success: true, + message, + data: result, + }); + } + + sendError( + response: Response, + error: string, + errorMessage, + code: number = StatusCodes.BAD_REQUEST + ): Response { + let errorBag: ErrorBag = { success: false, message: error }; + + if (errorMessage.constructor.name === "Result") { + const validationError = errorMessage.array(); + errorBag.data = { + error: [validationError[0].msg], + validationErrors: validationError, + }; + // errorBag.message = validationError[0].msg; + } else { + if (errorMessage.length > 1) { + errorBag.data = { error: errorMessage }; + } else { + errorBag.data = { error }; + } + } + + return response.status(code).json(errorBag); + } +} diff --git a/app/rts/src/controllers/socket.ts b/app/rts/src/controllers/socket.ts index 6fc51e2916..b87e159a0d 100644 --- a/app/rts/src/controllers/socket.ts +++ b/app/rts/src/controllers/socket.ts @@ -1,5 +1,5 @@ import { Server, Socket } from "socket.io"; -import { tryAuth } from "../middlewares/socket-auth"; +import { tryAuth } from "@middlewares/socket-auth"; import { START_EDIT_EVENT_NAME, LEAVE_EDIT_EVENT_NAME, @@ -7,13 +7,13 @@ import { PAGE_EDIT_NAMESPACE, PAGE_ROOM_PREFIX, EDITORS_EVENT_NAME, -} from "../constants/socket"; +} from "@constants/socket"; import { AppUser, Policy, CurrentEditorsEvent, MousePointerEvent, -} from "../utils/models"; +} from "@utils/models"; function subscribeToEditEvents(socket: Socket, appRoomPrefix: string) { socket.on(START_EDIT_EVENT_NAME, (resourceId) => { diff --git a/app/rts/src/middlewares/Validator.ts b/app/rts/src/middlewares/Validator.ts new file mode 100644 index 0000000000..b246448e66 --- /dev/null +++ b/app/rts/src/middlewares/Validator.ts @@ -0,0 +1,13 @@ +import BaseController from "@controllers/BaseController"; +import { validationResult } from "express-validator"; +import { Response, Request, NextFunction } from "express"; + +export class Validator extends BaseController { + validateRequest(req: Request, res: Response, next: NextFunction) { + const errors = validationResult(req); + if (!errors.isEmpty()) + return super.sendError(res, "Validation error", errors); + + next(); + } +} diff --git a/app/rts/src/middlewares/rules/ast.ts b/app/rts/src/middlewares/rules/ast.ts new file mode 100644 index 0000000000..8572727738 --- /dev/null +++ b/app/rts/src/middlewares/rules/ast.ts @@ -0,0 +1,15 @@ +import { body } from "express-validator"; + +export default class AstValidator { + static getScriptValidator = () => + body("script") + .isString() + .withMessage("Script is required and can only be a string"); + + static getMultipleScriptValidator = () => + body("scripts") + .isArray({ + min: 1, + }) + .withMessage("Multiple scripts are required"); +} diff --git a/app/rts/src/routes/ast_routes.ts b/app/rts/src/routes/ast_routes.ts new file mode 100644 index 0000000000..9fbc75adff --- /dev/null +++ b/app/rts/src/routes/ast_routes.ts @@ -0,0 +1,24 @@ +import express from "express"; +import AstController from "@controllers/Ast/AstController"; +import { Validator } from "@middlewares/Validator"; +import AstRules from "@rules/ast"; + +const router = express.Router(); +const astController = new AstController(); +const validator = new Validator(); + +router.post( + "/single-script-identifiers", + AstRules.getScriptValidator(), + validator.validateRequest, + astController.getDependentIdentifiers +); + +router.post( + "/multiple-script-identifiers", + AstRules.getMultipleScriptValidator(), + validator.validateRequest, + astController.getMultipleDependentIdentifiers +); + +export default router; diff --git a/app/rts/src/server.ts b/app/rts/src/server.ts index 9c35c2ce30..b95e4d01b3 100644 --- a/app/rts/src/server.ts +++ b/app/rts/src/server.ts @@ -6,7 +6,11 @@ import log, { LogLevelDesc } from "loglevel"; import { VERSION as buildVersion } from "./version"; // release version of the api import { initializeSockets } from "./sockets"; +// routes +import ast_routes from "./routes/ast_routes"; + const RTS_BASE_PATH = "/rts"; +const RTS_BASE_API_PATH = "/rts-api/v1"; // Setting the logLevel for all log messages const logLevel: LogLevelDesc = (process.env.APPSMITH_LOG_LEVEL || @@ -46,12 +50,16 @@ function main() { // Initializing Sockets initializeSockets(io); + // parse incoming json requests + app.use(express.json({ limit: "5mb" })); // Initializing Routes app.use(express.static(path.join(__dirname, "static"))); app.get("/", (_, res) => { res.redirect("/index.html"); }); - + + app.use(`${RTS_BASE_API_PATH}/ast`, ast_routes); + // Run the server server.listen(PORT, () => { log.info(`RTS version ${buildVersion} running at http://localhost:${PORT}`); diff --git a/app/rts/src/services/AstService.ts b/app/rts/src/services/AstService.ts new file mode 100644 index 0000000000..c78cf6ea69 --- /dev/null +++ b/app/rts/src/services/AstService.ts @@ -0,0 +1,21 @@ +import { extractIdentifiersFromCode } from "@shared/ast"; + +export default class AstService { + static async getIdentifiersFromScript( + script, + evalVersion + ): Promise { + return new Promise((resolve, reject) => { + try { + const extractions = extractIdentifiersFromCode( + script, + evalVersion + ); + + resolve(extractions); + } catch (err) { + reject(err); + } + }); + } +} diff --git a/app/rts/src/sockets/events.ts b/app/rts/src/sockets/events.ts index 1d0ad1873b..9fabc1eaba 100644 --- a/app/rts/src/sockets/events.ts +++ b/app/rts/src/sockets/events.ts @@ -8,14 +8,14 @@ import { PAGE_ROOM_PREFIX, ROOT_NAMESPACE, PAGE_VISIBILITY_EVENT_NAME -} from "../constants/socket"; +} from "@constants/socket"; import { VERSION as buildVersion } from "../version"; import { subscribeToEditEvents, onAppSocketConnected, onPageSocketConnected, - sendCurrentUsers -} from "../controllers/socket"; + sendCurrentUsers, +} from "@controllers/socket"; export function watchEvents(io: Server) { io.on("connection", (socket: Socket) => { diff --git a/app/rts/src/sockets/index.ts b/app/rts/src/sockets/index.ts index 18d9ce9e40..e28611fbfe 100644 --- a/app/rts/src/sockets/index.ts +++ b/app/rts/src/sockets/index.ts @@ -7,4 +7,4 @@ import log from "loglevel"; export function initializeSockets(io: Server) { watchMongoDB(io).catch((error) => log.error("Error watching MongoDB", error)); watchEvents(io); -} \ No newline at end of file +} diff --git a/app/rts/src/sockets/mongo.ts b/app/rts/src/sockets/mongo.ts index 781a446c26..6755391dea 100644 --- a/app/rts/src/sockets/mongo.ts +++ b/app/rts/src/sockets/mongo.ts @@ -1,8 +1,8 @@ import type mongodb from "mongodb"; import log from "loglevel"; import { MongoClient } from "mongodb"; -import { CommentThread, Comment } from "../utils/models"; -import { findPolicyEmails } from "../controllers/socket"; +import { CommentThread, Comment } from "@utils/models"; +import { findPolicyEmails } from "@controllers/socket"; const MONGODB_URI = process.env.APPSMITH_MONGODB_URI; diff --git a/app/rts/tsconfig.json b/app/rts/tsconfig.json index 6537dc7618..46c2f2bae1 100644 --- a/app/rts/tsconfig.json +++ b/app/rts/tsconfig.json @@ -6,9 +6,16 @@ "moduleResolution": "node", "sourceMap": true, "outDir": "dist", - "allowJs": true + "allowJs": true, + "baseUrl": ".", + "paths": { + "@constants/*": ["./src/constants/*"], + "@services/*": ["./src/services/*"], + "@middlewares/*": ["./src/middlewares/*"], + "@controllers/*": ["./src/controllers/*"], + "@rules/*": ["./src/middlewares/rules/*"], + "@utils/*": ["./src/utils/*"], + } }, - "lib": [ - "es2015" - ] + "lib": ["es2015"] } diff --git a/app/rts/yarn.lock b/app/rts/yarn.lock index 1a484d7466..b0e00f2d71 100644 --- a/app/rts/yarn.lock +++ b/app/rts/yarn.lock @@ -2,6 +2,27 @@ # yarn lockfile v1 +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + "@types/body-parser@*": version "1.19.0" resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.0.tgz#0685b3c47eb3006ffed117cdd55164b61f80538f" @@ -107,11 +128,24 @@ accepts@~1.3.4, accepts@~1.3.7: mime-types "~2.1.24" negotiator "0.6.2" +anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + axios@^0.21.2: version "0.21.2" resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.2.tgz#21297d5084b2aeeb422f5d38e7be4fbb82239017" @@ -124,6 +158,11 @@ base64id@2.0.0, base64id@~2.0.0: resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + bl@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/bl/-/bl-2.2.1.tgz#8c11a7b730655c5d56898cdc871224f40fd901d5" @@ -148,6 +187,13 @@ body-parser@1.19.0: raw-body "2.4.0" type-is "~1.6.17" +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + bson@^1.1.4: version "1.1.5" resolved "https://registry.yarnpkg.com/bson/-/bson-1.1.5.tgz#2aaae98fcdf6750c0848b0cba1ddec3c73060a34" @@ -163,6 +209,26 @@ bytes@3.1.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== +chokidar@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +commander@^9.0.0: + version "9.4.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-9.4.0.tgz#bc4a40918fefe52e22450c111ecd6b7acce6f11c" + integrity sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw== + component-emitter@~1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" @@ -244,6 +310,13 @@ destroy@~1.0.4: resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -285,6 +358,14 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= +express-validator@^6.14.2: + version "6.14.2" + resolved "https://registry.yarnpkg.com/express-validator/-/express-validator-6.14.2.tgz#6147893f7bec0e14162c3a88b3653121afc4678f" + integrity sha512-8XfAUrQ6Y7dIIuy9KcUPCfG/uCbvREctrxf5EeeME+ulanJ4iiW71lWmm9r4YcKKYOCBMan0WpVg7FtHu4Z4Wg== + dependencies: + lodash "^4.17.21" + validator "^13.7.0" + express@^4.17.1: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" @@ -321,6 +402,31 @@ express@^4.17.1: utils-merge "1.0.1" vary "~1.1.2" +fast-glob@^3.2.9: + version "3.2.11" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" + integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== + 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" + +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + dependencies: + reusify "^1.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + finalhandler@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" @@ -349,6 +455,30 @@ fresh@0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +globby@^11.0.4: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + 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" + http-errors@1.7.2: version "1.7.2" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" @@ -371,6 +501,11 @@ http-errors@~1.7.2: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" +http-status-codes@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/http-status-codes/-/http-status-codes-2.2.0.tgz#bb2efe63d941dfc2be18e15f703da525169622be" + integrity sha512-feERVo9iWxvnejp3SEfm/+oNG517npqL2/PIA8ORjyOZjGC7TwCRQsZylciLS64i6pJ0wRYz3rkXLRwbtFa8Ng== + iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -378,6 +513,11 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" +ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + inherits@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" @@ -393,11 +533,40 @@ ipaddr.js@1.9.1: resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + loglevel@^1.7.1: version "1.7.1" resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" @@ -418,11 +587,24 @@ merge-descriptors@1.0.1: resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + mime-db@1.46.0: version "1.46.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.46.0.tgz#6267748a7f799594de3cbc8cde91def349661cee" @@ -468,11 +650,21 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +mylas@^2.1.9: + version "2.1.11" + resolved "https://registry.yarnpkg.com/mylas/-/mylas-2.1.11.tgz#1827462533977bed1c4251317aa84254e3ca94c7" + integrity sha512-krnPUl3n9/k52FGCltWMYcqp9SttxjRJEy0sWLk+g7mIa7wnZrmNSZ40Acx7ghzRSOsxt2rEqMbaq4jWlnTDKg== + negotiator@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + object-assign@^4: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -495,6 +687,23 @@ path-to-regexp@0.1.7: resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +plimit-lit@^1.2.6: + version "1.3.0" + resolved "https://registry.yarnpkg.com/plimit-lit/-/plimit-lit-1.3.0.tgz#46908adbfcfc010e65a5a737652768b0fec21587" + integrity sha512-63qOoSzggsjBHPVbaKeEtsO8oWTeyJxUfVRLkoc59pRkDiCCLvqn2tCgAkfbejrx+V5zJtlG2wqkk/Db6cwlVQ== + dependencies: + queue-lit "^1.3.0" + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -513,6 +722,16 @@ qs@6.7.0: resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== +queue-lit@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/queue-lit/-/queue-lit-1.3.0.tgz#a29e4cfd0d0e2c6594beb70a4726716a57ffce5b" + integrity sha512-3HpQ7bD2ct56qPithPr5IzH2Oij3WVPcgevCJ+mI9HAfVJKCqQ2yiFYgb4AUkLfsCmmbVDy9luvE97Ztzr5eBg== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" @@ -541,6 +760,13 @@ readable-stream@^2.3.5: string_decoder "~1.1.1" util-deprecate "~1.0.1" +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + require_optional@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require_optional/-/require_optional-1.0.1.tgz#4cf35a4247f64ca3df8c2ef208cc494b1ca8fc2e" @@ -554,6 +780,18 @@ resolve-from@^2.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" integrity sha1-lICrIOlP+h2egKgEx+oUdhGWa1c= +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -615,6 +853,11 @@ setprototypeof@1.1.1: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + socket.io-adapter@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.3.2.tgz#039cd7c71a52abad984a6d57da2c0b7ecdd3c289" @@ -678,11 +921,30 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + toidentifier@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== +tsc-alias@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/tsc-alias/-/tsc-alias-1.7.0.tgz#733482751133a25b97608ee424f8a1f085fcaaef" + integrity sha512-n/K6g8S7Ec7Y/A2Z77Ikp2Uv1S1ERtT63ni69XV4W1YPT4rnNmz8ItgIiJYvKfFnKfqcZQ81UPjoKpMTxaC/rg== + dependencies: + chokidar "^3.5.3" + commander "^9.0.0" + globby "^11.0.4" + mylas "^2.1.9" + normalize-path "^3.0.0" + plimit-lit "^1.2.6" + type-is@~1.6.17, type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -711,6 +973,11 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= +validator@^13.7.0: + version "13.7.0" + resolved "https://registry.yarnpkg.com/validator/-/validator-13.7.0.tgz#4f9658ba13ba8f3d82ee881d3516489ea85c0857" + integrity sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw== + vary@^1, vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" diff --git a/app/shared/Readme.md b/app/shared/Readme.md index 98ef334122..93dfd49385 100644 --- a/app/shared/Readme.md +++ b/app/shared/Readme.md @@ -17,3 +17,10 @@ We wanted to share common logic with different applications within our repo, so ## Verifying the Installed Shared Modules - Run `yarn run verify` inside `shared` directory to verify shared dependencies for an application. +## Command `link-package` +- `yarn install` : installs packages +- `rollup -c` : Module bundler bundles the package and creates a build +- `cd build` : Change the present working directory +- `cp -R ../node_modules ./node_modules` : copies its own node_modules directory to its build directory to make sure its own version dependencies do not mismatch when its installed in other directories as shared module +- `yarn link` : Creates a link for the package to make it available for other directories to use. + diff --git a/app/shared/ast/package.json b/app/shared/ast/package.json index 6dda6cd7d0..2007431f23 100644 --- a/app/shared/ast/package.json +++ b/app/shared/ast/package.json @@ -16,7 +16,7 @@ "test:jest": "$(npm bin)/jest --watch", "build": "rollup -c", "start": "rollup -c", - "link-package": "yarn install && rollup -c && cd build && yarn link" + "link-package": "yarn install && rollup -c && cd build && cp -R ../node_modules ./node_modules && yarn link" }, "dependencies": { "acorn": "^8.8.0", @@ -30,8 +30,8 @@ "devDependencies": { "@babel/preset-typescript": "^7.17.12", "@rollup/plugin-commonjs": "^22.0.0", - "@types/lodash": "^4.14.120", "@types/jest": "^27.4.1", + "@types/lodash": "^4.14.120", "@typescript-eslint/eslint-plugin": "^5.25.0", "@typescript-eslint/parser": "^5.25.0", "rollup-plugin-generate-package-json": "^3.2.0", diff --git a/app/shared/shared-dependencies.json b/app/shared/shared-dependencies.json index 820cdd639f..471f20eefe 100644 --- a/app/shared/shared-dependencies.json +++ b/app/shared/shared-dependencies.json @@ -1,4 +1,4 @@ { "client": ["@shared/ast"], - "rts": [] + "rts": ["@shared/ast"] }