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 <aman@appsmith.com>
This commit is contained in:
Ayangade Adeoluwa 2022-09-12 10:15:47 +01:00 committed by GitHub
parent be6107b715
commit b3c4f7c392
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
21 changed files with 676 additions and 22 deletions

View File

@ -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/* \

View File

@ -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",
);
});
});

View File

@ -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"]

View File

@ -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

View File

@ -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"
}
}

View File

@ -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
);
}
}
}

View File

@ -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<ResponseData> {
return response.status(code).json({
success: true,
message,
data: result,
});
}
sendError(
response: Response,
error: string,
errorMessage,
code: number = StatusCodes.BAD_REQUEST
): Response<ErrorBag> {
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);
}
}

View File

@ -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) => {

View File

@ -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();
}
}

View File

@ -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");
}

View File

@ -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;

View File

@ -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}`);

View File

@ -0,0 +1,21 @@
import { extractIdentifiersFromCode } from "@shared/ast";
export default class AstService {
static async getIdentifiersFromScript(
script,
evalVersion
): Promise<any> {
return new Promise((resolve, reject) => {
try {
const extractions = extractIdentifiersFromCode(
script,
evalVersion
);
resolve(extractions);
} catch (err) {
reject(err);
}
});
}
}

View File

@ -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) => {

View File

@ -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;

View File

@ -6,9 +6,16 @@
"moduleResolution": "node",
"sourceMap": true,
"outDir": "dist",
"allowJs": true
},
"lib": [
"es2015"
]
"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"]
}

View File

@ -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"

View File

@ -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.

View File

@ -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",

View File

@ -1,4 +1,4 @@
{
"client": ["@shared/ast"],
"rts": []
"rts": ["@shared/ast"]
}