diff --git a/app/client/cypress/e2e/Regression/ClientSide/Binding/JSObjectToListWidget_Spec.ts b/app/client/cypress/e2e/Regression/ClientSide/Binding/JSObjectToListWidget_Spec.ts index 9e40b6520e4c..eedf46751a57 100644 --- a/app/client/cypress/e2e/Regression/ClientSide/Binding/JSObjectToListWidget_Spec.ts +++ b/app/client/cypress/e2e/Regression/ClientSide/Binding/JSObjectToListWidget_Spec.ts @@ -2,6 +2,8 @@ import * as _ from "../../../../support/Objects/ObjectsCore"; import EditorNavigation, { EntityType, } from "../../../../support/Pages/EditorNavigation"; +import BottomPane from "../../../../support/Pages/IDE/BottomPane"; + let valueToTest: any, jsName: any; describe( @@ -17,7 +19,7 @@ describe( _.dataManager.dsValues[_.dataManager.defaultEnviorment].mockApiUrl, ); _.apiPage.RunAPI(); - _.agHelper.GetNClick(_.dataSources._queryResponse("JSON")); + BottomPane.response.switchResponseType("JSON"); _.apiPage.ReadApiResponsebyKey("name"); cy.get("@apiResp").then((value) => { valueToTest = value; diff --git a/app/client/cypress/e2e/Regression/ClientSide/BugTests/Binding_Bug28287_Spec.ts b/app/client/cypress/e2e/Regression/ClientSide/BugTests/Binding_Bug28287_Spec.ts index d5d4c62b71a0..5a38feeaf456 100644 --- a/app/client/cypress/e2e/Regression/ClientSide/BugTests/Binding_Bug28287_Spec.ts +++ b/app/client/cypress/e2e/Regression/ClientSide/BugTests/Binding_Bug28287_Spec.ts @@ -8,6 +8,7 @@ import { import EditorNavigation, { EntityType, } from "../../../../support/Pages/EditorNavigation"; +import BottomPane from "../../../../support/Pages/IDE/BottomPane"; let dsName: any; let queryName: string; @@ -43,7 +44,11 @@ describe( EditorNavigation.SelectEntityByName(queryName, EntityType.Query); - agHelper.AssertElementVisibility(dataSources._queryResponse("TABLE")); + BottomPane.response.switchToResponseTab(); + + agHelper.AssertElementVisibility( + BottomPane.response.getResponseTypeSelector("TABLE"), + ); }); }); }, diff --git a/app/client/cypress/e2e/Regression/ServerSide/OnLoadTests/OnLoadActions_Spec.ts b/app/client/cypress/e2e/Regression/ServerSide/OnLoadTests/OnLoadActions_Spec.ts index 92a8ce84c282..f3215412c138 100644 --- a/app/client/cypress/e2e/Regression/ServerSide/OnLoadTests/OnLoadActions_Spec.ts +++ b/app/client/cypress/e2e/Regression/ServerSide/OnLoadTests/OnLoadActions_Spec.ts @@ -13,6 +13,7 @@ import { import EditorNavigation, { EntityType, } from "../../../../support/Pages/EditorNavigation"; +import BottomPane from "../../../../support/Pages/IDE/BottomPane"; describe( "Layout OnLoad Actions tests", @@ -55,7 +56,7 @@ describe( ); apiPage.RunAPI(); - agHelper.GetNClick(dataSources._queryResponse("JSON")); + BottomPane.response.switchResponseType("JSON"); apiPage.CreateAndFillApi( "http://host.docker.internal:5001/v1/favqs/qotd", @@ -64,7 +65,7 @@ describe( ); apiPage.EnterHeader("dependency", "{{RandomUser.data}}"); //via Params tab apiPage.RunAPI(); - agHelper.GetNClick(dataSources._queryResponse("JSON")); + BottomPane.response.switchResponseType("JSON"); apiPage.CreateAndFillApi( "http://host.docker.internal:5001/v1/boredapi/activity", @@ -73,7 +74,7 @@ describe( ); apiPage.EnterHeader("dependency", "{{InspiringQuotes.data.data}}"); apiPage.RunAPI(); - agHelper.GetNClick(dataSources._queryResponse("JSON")); + BottomPane.response.switchResponseType("JSON"); apiPage.CreateAndFillApi( "http://host.docker.internal:5001/v1/genderize/sampledata", @@ -82,7 +83,7 @@ describe( ); apiPage.EnterParams("name", "{{RandomUser.data[0].name}}"); //via Params tab apiPage.RunAPI(); - agHelper.GetNClick(dataSources._queryResponse("JSON")); + BottomPane.response.switchResponseType("JSON"); //Adding dependency in right order matters! EditorNavigation.SelectEntityByName("Image1", EntityType.Widget); @@ -162,7 +163,7 @@ describe( value: "{{RandomUser.data[0].name}}", }); // verifies Bug 10055 apiPage.RunAPI(); - agHelper.GetNClick(dataSources._queryResponse("JSON")); + BottomPane.response.switchResponseType("JSON"); deployMode.DeployApp( locators._widgetInDeployed("textwidget"), diff --git a/app/client/cypress/e2e/Regression/ServerSide/QueryPane/Mongo1_spec.ts b/app/client/cypress/e2e/Regression/ServerSide/QueryPane/Mongo1_spec.ts index 5ed89ec798df..08fe4506112e 100644 --- a/app/client/cypress/e2e/Regression/ServerSide/QueryPane/Mongo1_spec.ts +++ b/app/client/cypress/e2e/Regression/ServerSide/QueryPane/Mongo1_spec.ts @@ -16,6 +16,7 @@ import EditorNavigation, { EntityType, } from "../../../../support/Pages/EditorNavigation"; import PageList from "../../../../support/Pages/PageList"; +import BottomPane from "../../../../support/Pages/IDE/BottomPane"; let dsName: any; @@ -429,8 +430,12 @@ describe( parseInt(JSON.stringify(resObj.response.body.data.body.n)), ).to.eq(3); }); - agHelper.AssertElementVisibility(dataSources._queryResponse("JSON")); - agHelper.AssertElementVisibility(dataSources._queryResponse("RAW")); + agHelper.AssertElementVisibility( + BottomPane.response.getResponseTypeSelector("JSON"), + ); + agHelper.AssertElementVisibility( + BottomPane.response.getResponseTypeSelector("RAW"), + ); agHelper.ActionContextMenuWithInPane({ action: "Delete", entityType: entityItems.Query, @@ -462,8 +467,12 @@ describe( parseInt(JSON.stringify(resObj.response.body.data.body.nModified)), ).to.eq(0); }); - agHelper.AssertElementVisibility(dataSources._queryResponse("JSON")); - agHelper.AssertElementVisibility(dataSources._queryResponse("RAW")); + agHelper.AssertElementVisibility( + BottomPane.response.getResponseTypeSelector("JSON"), + ); + agHelper.AssertElementVisibility( + BottomPane.response.getResponseTypeSelector("RAW"), + ); agHelper.ActionContextMenuWithInPane({ action: "Delete", entityType: entityItems.Query, @@ -505,8 +514,12 @@ describe( parseInt(JSON.stringify(resObj.response.body.data.body.nModified)), ).to.eq(2); }); - agHelper.AssertElementVisibility(dataSources._queryResponse("JSON")); - agHelper.AssertElementVisibility(dataSources._queryResponse("RAW")); + agHelper.AssertElementVisibility( + BottomPane.response.getResponseTypeSelector("JSON"), + ); + agHelper.AssertElementVisibility( + BottomPane.response.getResponseTypeSelector("RAW"), + ); agHelper.ActionContextMenuWithInPane({ action: "Delete", entityType: entityItems.Query, @@ -543,8 +556,12 @@ describe( parseInt(JSON.stringify(resObj.response.body.data.body.nModified)), ).to.eq(1); }); - agHelper.AssertElementVisibility(dataSources._queryResponse("JSON")); - agHelper.AssertElementVisibility(dataSources._queryResponse("RAW")); + agHelper.AssertElementVisibility( + BottomPane.response.getResponseTypeSelector("JSON"), + ); + agHelper.AssertElementVisibility( + BottomPane.response.getResponseTypeSelector("RAW"), + ); agHelper.ActionContextMenuWithInPane({ action: "Delete", entityType: entityItems.Query, @@ -570,8 +587,12 @@ describe( parseInt(JSON.stringify(resObj.response.body.data.body.n)), ).to.eq(0); }); - agHelper.AssertElementVisibility(dataSources._queryResponse("JSON")); - agHelper.AssertElementVisibility(dataSources._queryResponse("RAW")); + agHelper.AssertElementVisibility( + BottomPane.response.getResponseTypeSelector("JSON"), + ); + agHelper.AssertElementVisibility( + BottomPane.response.getResponseTypeSelector("RAW"), + ); agHelper.ActionContextMenuWithInPane({ action: "Delete", entityType: entityItems.Query, @@ -599,8 +620,12 @@ describe( parseInt(JSON.stringify(resObj.response.body.data.body.n)), ).to.eq(1); }); - agHelper.AssertElementVisibility(dataSources._queryResponse("JSON")); - agHelper.AssertElementVisibility(dataSources._queryResponse("RAW")); + agHelper.AssertElementVisibility( + BottomPane.response.getResponseTypeSelector("JSON"), + ); + agHelper.AssertElementVisibility( + BottomPane.response.getResponseTypeSelector("RAW"), + ); agHelper.ActionContextMenuWithInPane({ action: "Delete", entityType: entityItems.Query, @@ -632,8 +657,12 @@ describe( 2, ); }); - agHelper.AssertElementVisibility(dataSources._queryResponse("JSON")); - agHelper.AssertElementVisibility(dataSources._queryResponse("RAW")); + agHelper.AssertElementVisibility( + BottomPane.response.getResponseTypeSelector("JSON"), + ); + agHelper.AssertElementVisibility( + BottomPane.response.getResponseTypeSelector("RAW"), + ); agHelper.ActionContextMenuWithInPane({ action: "Delete", entityType: entityItems.Query, @@ -653,8 +682,12 @@ describe( 7, ); }); - agHelper.AssertElementVisibility(dataSources._queryResponse("JSON")); - agHelper.AssertElementVisibility(dataSources._queryResponse("RAW")); + agHelper.AssertElementVisibility( + BottomPane.response.getResponseTypeSelector("JSON"), + ); + agHelper.AssertElementVisibility( + BottomPane.response.getResponseTypeSelector("RAW"), + ); agHelper.ActionContextMenuWithInPane({ action: "Delete", entityType: entityItems.Query, @@ -686,8 +719,12 @@ describe( JSON.parse(JSON.stringify(resObj.response.body.data.body.values[1])), ).to.eql("51e062189c6ae665454e301d"); }); - agHelper.AssertElementVisibility(dataSources._queryResponse("JSON")); - agHelper.AssertElementVisibility(dataSources._queryResponse("RAW")); + agHelper.AssertElementVisibility( + BottomPane.response.getResponseTypeSelector("JSON"), + ); + agHelper.AssertElementVisibility( + BottomPane.response.getResponseTypeSelector("RAW"), + ); agHelper.ActionContextMenuWithInPane({ action: "Delete", entityType: entityItems.Query, diff --git a/app/client/cypress/e2e/Regression/ServerSide/QueryPane/Querypane_Mongo_Spec.js b/app/client/cypress/e2e/Regression/ServerSide/QueryPane/Querypane_Mongo_Spec.js index b3764037d926..f1f7adcb0577 100644 --- a/app/client/cypress/e2e/Regression/ServerSide/QueryPane/Querypane_Mongo_Spec.js +++ b/app/client/cypress/e2e/Regression/ServerSide/QueryPane/Querypane_Mongo_Spec.js @@ -17,6 +17,7 @@ import { apiPage, } from "../../../../support/Objects/ObjectsCore"; import { Widgets } from "../../../../support/Pages/DataSources"; +import BottomPane from "../../../../support/Pages/IDE/BottomPane"; let datasourceName; @@ -70,7 +71,7 @@ describe( dataSources.EnterQuery(`{"find": "listingAndReviews","limit": 10}`); agHelper.FocusElement(locators._codeMirrorTextArea); dataSources.RunQuery(); - dataSources.CheckResponseRecordsCount(10); + BottomPane.response.validateRecordCount(10); cy.deleteQueryUsingContext(); }); @@ -92,7 +93,7 @@ describe( fieldValue: "listingAndReviews", }); dataSources.RunQuery(); - dataSources.CheckResponseRecordsCount(10); + BottomPane.response.validateRecordCount(10); agHelper.EnterValue("{beds : {$lte: 2}}", { propFieldName: "", @@ -100,7 +101,7 @@ describe( inputFieldName: "Query", }); dataSources.RunQuery(); - dataSources.CheckResponseRecordsCount(10); + BottomPane.response.validateRecordCount(10); agHelper.EnterValue("{number_of_reviews: -1}", { propFieldName: "", @@ -108,7 +109,7 @@ describe( inputFieldName: "Sort", }); //sort descending dataSources.RunQuery(); - dataSources.CheckResponseRecordsCount(10); + BottomPane.response.validateRecordCount(10); agHelper.EnterValue("{house_rules: 1, description:1}", { propFieldName: "", @@ -130,7 +131,7 @@ describe( "Response is not as expected for Find commmand with multiple conditions", ); }); - dataSources.CheckResponseRecordsCount(5); + BottomPane.response.validateRecordCount(5); agHelper.EnterValue("2", { propFieldName: "", @@ -144,7 +145,7 @@ describe( "Response is not as expected for Find commmand with multiple conditions", ); }); - dataSources.CheckResponseRecordsCount(5); + BottomPane.response.validateRecordCount(5); cy.deleteQueryUsingContext(); }); @@ -432,7 +433,7 @@ describe( ); dataSources.RunQuery(); - dataSources.CheckResponseRecordsCount(3); + BottomPane.response.validateRecordCount(3); dataSources.AssertTableInVirtuosoList(datasourceName, "NonAsciiTest"); diff --git a/app/client/cypress/e2e/Regression/ServerSide/QueryPane/S3_1_spec.js b/app/client/cypress/e2e/Regression/ServerSide/QueryPane/S3_1_spec.js index 339eb14bb812..2bd496ead58f 100644 --- a/app/client/cypress/e2e/Regression/ServerSide/QueryPane/S3_1_spec.js +++ b/app/client/cypress/e2e/Regression/ServerSide/QueryPane/S3_1_spec.js @@ -1,5 +1,7 @@ /// +import BottomPane from "../../../../support/Pages/IDE/BottomPane"; + const queryLocators = require("../../../../locators/QueryEditor.json"); const generatePage = require("../../../../locators/GeneratePage.json"); const formControls = require("../../../../locators/FormControl.json"); @@ -189,8 +191,8 @@ describe( cy.typeValueNValidate(fileName, formControls.s3ListPrefix); dataSources.RunQuery({ toValidateResponse: false }); - agHelper.GetNClick(dataSources._queryResponse("TABLE")); - agHelper.GetNClick(dataSources._queryResponse("JSON")); + BottomPane.response.switchResponseType("TABLE"); + BottomPane.response.switchResponseType("JSON"); cy.wait("@postExecute").then(({ response }) => { expect(response.body.data.isExecutionSuccess).to.eq(true); diff --git a/app/client/cypress/support/Pages/DataSources.ts b/app/client/cypress/support/Pages/DataSources.ts index b56ad7792f35..059bf5413b88 100644 --- a/app/client/cypress/support/Pages/DataSources.ts +++ b/app/client/cypress/support/Pages/DataSources.ts @@ -11,6 +11,7 @@ import EditorNavigation, { import datasource from "../../locators/DatasourcesEditor.json"; import PageList from "./PageList"; import { anvilLocators } from "./Anvil/Locators"; +import BottomPane from "./IDE/BottomPane"; export const DataSourceKVP = { Postgres: "PostgreSQL", @@ -1137,17 +1138,18 @@ export class DataSources { tableCheck = true, ) { this.RunQuery(); - tableCheck && - this.agHelper.AssertElementVisibility(this._queryResponse("TABLE")); - this.agHelper.AssertElementVisibility(this._queryResponse("JSON")); - this.agHelper.AssertElementVisibility(this._queryResponse("RAW")); - this.CheckResponseRecordsCount(expectedRecordsCount); - } - - public CheckResponseRecordsCount(expectedRecordCount: number) { - this.agHelper.AssertElementVisibility( - this._queryRecordResult(expectedRecordCount), - ); + if (tableCheck) { + this.agHelper.AssertElementVisibility( + BottomPane.response.getResponseTypeSelector("TABLE"), + ); + this.agHelper.AssertElementVisibility( + BottomPane.response.getResponseTypeSelector("JSON"), + ); + this.agHelper.AssertElementVisibility( + BottomPane.response.getResponseTypeSelector("RAW"), + ); + } + BottomPane.response.validateRecordCount(expectedRecordsCount); } public CreateDataSource( diff --git a/app/client/cypress/support/Pages/IDE/BottomPane/Response.ts b/app/client/cypress/support/Pages/IDE/BottomPane/Response.ts new file mode 100644 index 000000000000..ca1db0fa7ca1 --- /dev/null +++ b/app/client/cypress/support/Pages/IDE/BottomPane/Response.ts @@ -0,0 +1,21 @@ +class Response { + private ResponseTab = "//button[@data-testid='t--tab-RESPONSE_TAB']"; + + public switchToResponseTab(): void { + cy.xpath(this.ResponseTab).click({ force: true }); + } + + public getResponseTypeSelector(type: string): string { + return `//div[@data-testid='t--response-tab-segmented-control']//span[text()='${type}']`; + } + + public switchResponseType(type: string): void { + this.switchToResponseTab(); + cy.xpath(this.getResponseTypeSelector(type)).click({ force: true }); + } + + // TODO: Implement this method when response UI is ready + public validateRecordCount(count: number): void {} +} + +export { Response }; diff --git a/app/client/cypress/support/Pages/IDE/BottomPane/index.ts b/app/client/cypress/support/Pages/IDE/BottomPane/index.ts new file mode 100644 index 000000000000..055d7812dd5b --- /dev/null +++ b/app/client/cypress/support/Pages/IDE/BottomPane/index.ts @@ -0,0 +1,11 @@ +import { Response } from "./Response"; + +class BottomPane { + public readonly response: Response; + + constructor() { + this.response = new Response(); + } +} + +export default new BottomPane(); diff --git a/app/client/package.json b/app/client/package.json index 9b822e0f11ae..dc06ada8d35f 100644 --- a/app/client/package.json +++ b/app/client/package.json @@ -72,16 +72,16 @@ "@mantine/hooks": "^5.10.1", "@newrelic/browser-agent": "^1.255.0", "@opentelemetry/api": "^1.9.0", - "@opentelemetry/auto-instrumentations-web": "^0.41.0", - "@opentelemetry/context-zone": "1.25.1", - "@opentelemetry/core": "^1.26.0", - "@opentelemetry/exporter-metrics-otlp-http": "0.52.1", - "@opentelemetry/exporter-trace-otlp-proto": "0.52.1", - "@opentelemetry/instrumentation": "0.52.1", - "@opentelemetry/resources": "1.25.1", - "@opentelemetry/sdk-metrics": "1.25.1", - "@opentelemetry/sdk-trace-base": "1.25.1", - "@opentelemetry/sdk-trace-web": "1.25.1", + "@opentelemetry/auto-instrumentations-web": "^0.42.0", + "@opentelemetry/context-zone": "^1.27.0", + "@opentelemetry/core": "^1.27.0", + "@opentelemetry/exporter-metrics-otlp-http": "^0.54.2", + "@opentelemetry/exporter-trace-otlp-http": "^0.54.2", + "@opentelemetry/instrumentation": "^0.54.2", + "@opentelemetry/resources": "^1.27.0", + "@opentelemetry/sdk-metrics": "^1.27.0", + "@opentelemetry/sdk-trace-base": "^1.27.0", + "@opentelemetry/sdk-trace-web": "^1.27.0", "@opentelemetry/semantic-conventions": "^1.27.0", "@react-spring/web": "^9.7.4", "@react-types/shared": "^3.23.0", diff --git a/app/client/packages/design-system/widgets/package.json b/app/client/packages/design-system/widgets/package.json index 799d1e31679e..126c104ff3d7 100644 --- a/app/client/packages/design-system/widgets/package.json +++ b/app/client/packages/design-system/widgets/package.json @@ -29,11 +29,13 @@ "react-aria-components": "^1.2.1", "react-markdown": "^9.0.1", "react-syntax-highlighter": "^15.5.0", + "react-transition-group": "^4.4.5", "remark-gfm": "^4.0.0" }, "devDependencies": { "@types/fs-extra": "^11.0.4", "@types/react-syntax-highlighter": "^15.5.13", + "@types/react-transition-group": "^4.4.11", "eslint-plugin-storybook": "^0.6.10" }, "peerDependencies": { diff --git a/app/client/packages/design-system/widgets/src/components/Sheet/index.ts b/app/client/packages/design-system/widgets/src/components/Sheet/index.ts new file mode 100644 index 000000000000..3bd16e178a03 --- /dev/null +++ b/app/client/packages/design-system/widgets/src/components/Sheet/index.ts @@ -0,0 +1 @@ +export * from "./src"; diff --git a/app/client/packages/design-system/widgets/src/components/Sheet/src/Sheet.tsx b/app/client/packages/design-system/widgets/src/components/Sheet/src/Sheet.tsx new file mode 100644 index 000000000000..3b5261f223a8 --- /dev/null +++ b/app/client/packages/design-system/widgets/src/components/Sheet/src/Sheet.tsx @@ -0,0 +1,62 @@ +import clsx from "clsx"; +import React, { forwardRef, type Ref, useRef } from "react"; +import { + Modal as HeadlessModal, + Dialog as HeadlessDialog, + ModalOverlay as HeadlessModalOverlay, +} from "react-aria-components"; +import { CSSTransition } from "react-transition-group"; + +import styles from "./styles.module.css"; +import type { SheetProps } from "./types"; + +export function _Sheet(props: SheetProps, ref: Ref) { + const { + children, + className, + isOpen, + onEntered, + onExited, + onOpenChange, + position = "start", + ...rest + } = props; + const root = document.body.querySelector( + "[data-theme-provider]", + ) as HTMLButtonElement; + + const overlayRef = useRef(); + + return ( + + + + + {children} + + + + + ); +} + +export const Sheet = forwardRef(_Sheet); diff --git a/app/client/packages/design-system/widgets/src/components/Sheet/src/index.ts b/app/client/packages/design-system/widgets/src/components/Sheet/src/index.ts new file mode 100644 index 000000000000..c415d8b0d501 --- /dev/null +++ b/app/client/packages/design-system/widgets/src/components/Sheet/src/index.ts @@ -0,0 +1,2 @@ +export { Sheet } from "./Sheet"; +export { DialogTrigger as SheetTrigger } from "react-aria-components"; diff --git a/app/client/packages/design-system/widgets/src/components/Sheet/src/styles.module.css b/app/client/packages/design-system/widgets/src/components/Sheet/src/styles.module.css new file mode 100644 index 000000000000..27dfe571139d --- /dev/null +++ b/app/client/packages/design-system/widgets/src/components/Sheet/src/styles.module.css @@ -0,0 +1,117 @@ +.sheet { + position: fixed; + background: var(--color-bg-elevation-3); + width: 80%; +} + +.overlay { + display: flex; + align-items: center; + justify-content: center; + background: var(--color-bg-neutral-opacity); + z-index: var(--z-index-99); + contain: strict; + position: fixed; + top: 0; + left: 0; + height: 100%; + width: 100%; +} + +.dialog { + height: 100%; +} + +.overlay[data-entering] { + animation: fade-in 0.3s ease-in-out; +} + +.overlay[data-exiting] { + animation: fade-out 0.3s ease-in-out; +} + +@keyframes fade-in { + from { + opacity: 0; + } + to { + opacity: 1; + } +} + +@keyframes fade-out { + from { + opacity: 1; + } + to { + opacity: 0; + } +} + +.start { + top: 0; + left: 0; + bottom: 0; + max-width: 90%; + height: 100%; +} + +.start[data-entering] { + animation: slide-in-start 0.3s cubic-bezier(0.4, 0, 0.2, 1); +} + +.start[data-exiting] { + animation: slide-out-start 0.3s cubic-bezier(0.4, 0, 0.2, 1); +} + +.end { + top: 0; + right: 0; + bottom: 0; + max-width: 90%; + height: 100%; +} + +.end[data-entering] { + animation: slide-in-end 0.3s cubic-bezier(0.4, 0, 0.2, 1); +} + +.end[data-exiting] { + animation: slide-out-end 0.3s cubic-bezier(0.4, 0, 0.2, 1); +} + +@keyframes slide-in-start { + from { + transform: translateX(-100%); + } + to { + transform: translateX(0); + } +} + +@keyframes slide-out-start { + from { + transform: translateX(0); + } + to { + transform: translateX(-100%); + } +} + +@keyframes slide-in-end { + from { + transform: translateX(100%); + } + to { + transform: translateX(0); + } +} + +@keyframes slide-out-end { + from { + transform: translateX(0); + } + to { + transform: translateX(100%); + } +} diff --git a/app/client/packages/design-system/widgets/src/components/Sheet/src/types.ts b/app/client/packages/design-system/widgets/src/components/Sheet/src/types.ts new file mode 100644 index 000000000000..d66e9d5a8906 --- /dev/null +++ b/app/client/packages/design-system/widgets/src/components/Sheet/src/types.ts @@ -0,0 +1,12 @@ +import type { ModalOverlayProps as HeadlessModalOverlayProps } from "react-aria-components"; + +export interface SheetProps + extends Omit { + /** + * The position from which the sheet slides in + * @default 'start' + */ + position?: "start" | "end"; + onEntered?: () => void; + onExited?: () => void; +} diff --git a/app/client/packages/design-system/widgets/src/components/Sheet/stories/Sheet.stories.tsx b/app/client/packages/design-system/widgets/src/components/Sheet/stories/Sheet.stories.tsx new file mode 100644 index 000000000000..ab336257e155 --- /dev/null +++ b/app/client/packages/design-system/widgets/src/components/Sheet/stories/Sheet.stories.tsx @@ -0,0 +1,27 @@ +import React from "react"; +import type { Meta, StoryObj } from "@storybook/react"; +import { Sheet } from "../index"; +import { SimpleSheet } from "./SimpleSheet"; + +const meta: Meta = { + title: "WDS/Widgets/Sheet", + component: Sheet, + render: (args) => , +}; + +export default meta; +type Story = StoryObj; + +// Default story with left position (start) +export const Default: Story = { + args: { + position: "start", + }, +}; + +// Right position (end) +export const RightPositioned: Story = { + args: { + position: "end", + }, +}; diff --git a/app/client/packages/design-system/widgets/src/components/Sheet/stories/SimpleSheet.tsx b/app/client/packages/design-system/widgets/src/components/Sheet/stories/SimpleSheet.tsx new file mode 100644 index 000000000000..200e37d00841 --- /dev/null +++ b/app/client/packages/design-system/widgets/src/components/Sheet/stories/SimpleSheet.tsx @@ -0,0 +1,20 @@ +import React, { useState } from "react"; +import { Button } from "../../Button"; +import { Sheet } from "../index"; +import type { SheetProps } from "../src/types"; + +export const SimpleSheet = (props: Omit) => { + const [isOpen, setIsOpen] = useState(props.isOpen); + + return ( + <> + setIsOpen(!Boolean(isOpen))}>Sheet trigger + + + Sheet Content + This is an example of sheet content. + + + > + ); +}; diff --git a/app/client/packages/design-system/widgets/src/components/Sidebar/index.ts b/app/client/packages/design-system/widgets/src/components/Sidebar/index.ts new file mode 100644 index 000000000000..3bd16e178a03 --- /dev/null +++ b/app/client/packages/design-system/widgets/src/components/Sidebar/index.ts @@ -0,0 +1 @@ +export * from "./src"; diff --git a/app/client/packages/design-system/widgets/src/components/Sidebar/src/Sidebar.tsx b/app/client/packages/design-system/widgets/src/components/Sidebar/src/Sidebar.tsx new file mode 100644 index 000000000000..c8b231cef3cb --- /dev/null +++ b/app/client/packages/design-system/widgets/src/components/Sidebar/src/Sidebar.tsx @@ -0,0 +1,72 @@ +import clsx from "clsx"; +import * as React from "react"; +import { type Ref, useRef } from "react"; +import { Sheet } from "../../Sheet"; +import { useSidebar } from "./use-sidebar"; +import styles from "./styles.module.css"; +import type { SidebarProps } from "./types"; +import { CSSTransition } from "react-transition-group"; + +const _Sidebar = (props: SidebarProps, ref: Ref) => { + const { + children, + className, + collapsible = "offcanvas", + onEntered, + onExited, + side = "start", + variant = "sidebar", + ...rest + } = props; + const { isMobile, setOpen, state } = useSidebar(); + const sidebarRef = useRef(); + + if (collapsible === "none") { + return ( + + {children} + + ); + } + + if (Boolean(isMobile)) { + return ( + + {children} + + ); + } + + return ( + + + + + {children} + + + + ); +}; + +export const Sidebar = React.forwardRef(_Sidebar); diff --git a/app/client/packages/design-system/widgets/src/components/Sidebar/src/SidebarContent.tsx b/app/client/packages/design-system/widgets/src/components/Sidebar/src/SidebarContent.tsx new file mode 100644 index 000000000000..bb90417a91b1 --- /dev/null +++ b/app/client/packages/design-system/widgets/src/components/Sidebar/src/SidebarContent.tsx @@ -0,0 +1,22 @@ +import clsx from "clsx"; +import React, { type ComponentProps, type Ref } from "react"; + +import styles from "./styles.module.css"; + +const _SidebarContent = ( + props: ComponentProps<"div">, + ref: Ref, +) => { + const { className, ...rest } = props; + + return ( + + ); +}; + +export const SidebarContent = React.forwardRef(_SidebarContent); diff --git a/app/client/packages/design-system/widgets/src/components/Sidebar/src/SidebarInset.tsx b/app/client/packages/design-system/widgets/src/components/Sidebar/src/SidebarInset.tsx new file mode 100644 index 000000000000..f6c3a1d0bc57 --- /dev/null +++ b/app/client/packages/design-system/widgets/src/components/Sidebar/src/SidebarInset.tsx @@ -0,0 +1,22 @@ +import clsx from "clsx"; +import * as React from "react"; +import type { ComponentProps, Ref } from "react"; + +import styles from "./styles.module.css"; + +export const _SidebarInset = ( + props: ComponentProps<"main">, + ref: Ref, +) => { + const { className, ...rest } = props; + + return ( + + ); +}; + +export const SidebarInset = React.forwardRef(_SidebarInset); diff --git a/app/client/packages/design-system/widgets/src/components/Sidebar/src/SidebarProvider.tsx b/app/client/packages/design-system/widgets/src/components/Sidebar/src/SidebarProvider.tsx new file mode 100644 index 000000000000..35d688f23837 --- /dev/null +++ b/app/client/packages/design-system/widgets/src/components/Sidebar/src/SidebarProvider.tsx @@ -0,0 +1,96 @@ +import clsx from "clsx"; +import React, { type Ref, useCallback, useState } from "react"; + +import styles from "./styles.module.css"; +import { SidebarContext } from "./context"; +import { useIsMobile } from "./use-mobile"; +import { SIDEBAR_CONSTANTS } from "./constants"; +import type { SidebarContextType, SidebarProviderProps } from "./types"; + +export const _SidebarProvider = ( + props: SidebarProviderProps, + ref: Ref, +) => { + const { + children, + className, + defaultOpen = true, + isOpen: openProp, + onOpen: setOpenProp, + style, + ...rest + } = props; + const isMobile = useIsMobile(); + + const [_open, _setOpen] = useState(defaultOpen); + const open = openProp ?? _open; + const setOpen = useCallback( + (value: boolean | ((value: boolean) => boolean)) => { + const openState = typeof value === "function" ? value(open) : value; + + if (setOpenProp) { + setOpenProp(openState); + } else { + _setOpen(openState); + } + }, + [setOpenProp, open], + ); + + const toggleSidebar = React.useCallback(() => { + return isMobile ? setOpen((open) => !open) : setOpen((open) => !open); + }, [isMobile, setOpen]); + + React.useEffect( + function handleKeyboardShortcuts() { + const handleKeyDown = (event: KeyboardEvent) => { + if ( + event.key === SIDEBAR_CONSTANTS.KEYBOARD_SHORTCUT && + (event.metaKey || event.ctrlKey) + ) { + event.preventDefault(); + toggleSidebar(); + } + }; + + window.addEventListener("keydown", handleKeyDown); + + return () => window.removeEventListener("keydown", handleKeyDown); + }, + [toggleSidebar, isMobile], + ); + + const state = open ? "expanded" : "collapsed"; + + const contextValue = React.useMemo( + () => ({ + state, + open, + setOpen, + isMobile, + toggleSidebar, + }), + [state, open, setOpen, isMobile, toggleSidebar], + ); + + return ( + + + {children} + + + ); +}; + +export const SidebarProvider = React.forwardRef(_SidebarProvider); diff --git a/app/client/packages/design-system/widgets/src/components/Sidebar/src/SidebarTrigger.tsx b/app/client/packages/design-system/widgets/src/components/Sidebar/src/SidebarTrigger.tsx new file mode 100644 index 000000000000..4649d3ae877c --- /dev/null +++ b/app/client/packages/design-system/widgets/src/components/Sidebar/src/SidebarTrigger.tsx @@ -0,0 +1,29 @@ +import * as React from "react"; +import { Button } from "@appsmith/wds"; + +import { useSidebar } from "./use-sidebar"; + +interface SidebarTriggerProps { + onPress?: () => void; +} + +export const SidebarTrigger = (props: SidebarTriggerProps) => { + const { onPress } = props; + const { state, toggleSidebar } = useSidebar(); + + return ( + { + onPress?.(); + toggleSidebar(); + }} + variant="ghost" + /> + ); +}; diff --git a/app/client/packages/design-system/widgets/src/components/Sidebar/src/constants.ts b/app/client/packages/design-system/widgets/src/components/Sidebar/src/constants.ts new file mode 100644 index 000000000000..9633b7ebf41a --- /dev/null +++ b/app/client/packages/design-system/widgets/src/components/Sidebar/src/constants.ts @@ -0,0 +1,8 @@ +export const SIDEBAR_CONSTANTS = { + WIDTH: { + DESKTOP: "16rem", + ICON: "var(--sizing-14)", + }, + KEYBOARD_SHORTCUT: "b", + MOBILE_BREAKPOINT: 768, +} as const; diff --git a/app/client/packages/design-system/widgets/src/components/Sidebar/src/context.tsx b/app/client/packages/design-system/widgets/src/components/Sidebar/src/context.tsx new file mode 100644 index 000000000000..aba1700f141e --- /dev/null +++ b/app/client/packages/design-system/widgets/src/components/Sidebar/src/context.tsx @@ -0,0 +1,6 @@ +import * as React from "react"; +import type { SidebarContextType } from "./types"; + +export const SidebarContext = React.createContext( + null, +); diff --git a/app/client/packages/design-system/widgets/src/components/Sidebar/src/index.ts b/app/client/packages/design-system/widgets/src/components/Sidebar/src/index.ts new file mode 100644 index 000000000000..7a7b66a4ebe1 --- /dev/null +++ b/app/client/packages/design-system/widgets/src/components/Sidebar/src/index.ts @@ -0,0 +1,9 @@ +export { Sidebar } from "./Sidebar"; +export { SidebarProvider } from "./SidebarProvider"; +export { SidebarInset } from "./SidebarInset"; +export { SidebarTrigger } from "./SidebarTrigger"; +export { SidebarContent } from "./SidebarContent"; +export { useSidebar } from "./use-sidebar"; +export { useIsMobile } from "./use-mobile"; + +export type * from "./types"; diff --git a/app/client/packages/design-system/widgets/src/components/Sidebar/src/styles.module.css b/app/client/packages/design-system/widgets/src/components/Sidebar/src/styles.module.css new file mode 100644 index 000000000000..e3fe71fce134 --- /dev/null +++ b/app/client/packages/design-system/widgets/src/components/Sidebar/src/styles.module.css @@ -0,0 +1,203 @@ +.sidebarWrapper { + display: flex; + min-height: 100%; + width: 100%; + position: relative; + contain: strict; + container-type: inline-size; +} + +/** + *----------------------------------------------------- + * MAIN SIDEBAR + *----------------------------------------------------- + */ +.mainSidebar { + display: none; + color: var(--color-fg); +} + +@container (min-width: 768px) { + .mainSidebar { + display: block; + } +} + +.mainSidebar[data-collapsible="icon"] { + overflow: hidden; +} + +/** + *----------------------------------------------------- + * FAKE SIDEBAR + *----------------------------------------------------- + */ +.fakeSidebar { + position: relative; + height: 100%; + width: var(--sidebar-width); + background-color: transparent; + transition: width 300ms linear; +} + +.mainSidebar[data-side="right"] .fakeSidebar { + transform: rotate(180deg); +} + +/* Handle collapsible states for fakeSidebar */ +[data-collapsible="offcanvas"] .fakeSidebar { + width: 0; +} + +[data-side="right"] .fakeSidebar { + transform: rotate(180deg); +} + +[data-collapsible="icon"] .fakeSidebar { + width: var(--sidebar-width-icon); +} + +.mainSidebar[data-variant="floating"][data-collapsible="icon"] .fakeSidebar, +.mainSidebar[data-variant="inset"][data-collapsible="icon"] .fakeSidebar { + width: calc(var(--sidebar-width-icon) + var(--inner-spacing-2)); +} + +/** + *----------------------------------------------------- + * SIDEBAR + *----------------------------------------------------- + */ +.sidebar { + position: fixed; + top: 0; + bottom: 0; + z-index: 10; + display: none; + height: 100%; + width: var(--sidebar-width); + transition: + left 300ms linear, + right 300ms linear, + width 300ms linear; +} + +@container (min-width: 768px) { + .sidebar { + display: flex; + } +} + +.mainSidebar[data-side="start"] .sidebar { + left: 0; +} + +.mainSidebar[data-side="end"] .sidebar { + right: 0; +} + +.mainSidebar[data-collapsible="offcanvas"][data-side="start"] .sidebar { + left: calc(var(--sidebar-width) * -1); +} + +.mainSidebar[data-collapsible="offcanvas"][data-side="end"] .sidebar { + right: calc(var(--sidebar-width) * -1); +} + +.mainSidebar[data-variant="floating"] .sidebar, +.mainSidebar[data-variant="inset"] .sidebar { + padding: var(--inner-spacing-2); +} + +.mainSidebar[data-collapsible="icon"] .sidebar { + width: calc(var(--sidebar-width-icon)); +} + +.mainSidebar[data-variant="floating"][data-collapsible="icon"] .sidebar, +.mainSidebar[data-variant="inset"][data-collapsible="icon"] .sidebar { + width: calc(var(--sidebar-width-icon) + var(--inner-spacing-2) + 2px); +} + +.mainSidebar[data-side="start"]:not([data-variant="floating"]):not( + [data-variant="inset"] + ) + .sidebar { + border-inline-end: var(--border-width-1) solid var(--color-bd-elevation-1); +} + +.mainSidebar[data-side="end"]:not([data-variant="floating"]):not( + [data-variant="inset"] + ) + .sidebar { + border-inline-start: var(--border-width-1) solid var(--color-bd-elevation-1); +} + +/** + *----------------------------------------------------- + * SIDEBAR CONTAINER + *----------------------------------------------------- + */ +.sidebarContainer { + display: flex; + height: 100%; + width: 100%; + flex-direction: column; +} + +[data-side="end"] .sidebarContainer { + border-inline-start: var(--border-width-1) solid var(--color-bd-subtle); +} + +[data-side="start"] .sidebarContainer { + border-inline-end: var(--border-width-1) solid var(--color-bd-subtle); +} + +.mainSidebar[data-variant="floating"] .sidebarContainer { + border-radius: var(--border-radius-elevation-3); + border: var(--border-width-1) solid var(--color-bd); + box-shadow: var(--box-shadow-1); +} + +/** + *----------------------------------------------------- + * SIDEBAR CONTENT + *----------------------------------------------------- + */ +.sidebarContent { + height: 100%; +} + +/** + *----------------------------------------------------- + * SIDEBAR INSET + *----------------------------------------------------- + */ +.sidebarInset { + position: relative; + display: flex; + min-height: 100%; + flex: 1; + flex-direction: column; + background-color: var(--background); +} + +[data-variant="inset"] ~ .sidebarInset { + min-height: calc(100% - var(--inner-spacing-2) * 2); +} + +@container (min-width: 768px) { + [data-variant="inset"] ~ .sidebarInset { + margin: var(--inner-spacing-2); + border-radius: var(--border-radius-elevation-3); + box-shadow: var(--box-shadow-1); + border: var(--border-width-1) solid var(--color-bd); + } + + /* Handle margin when sidebar is collapsed */ + [data-state="collapsed"][data-variant="inset"] ~ .sidebarInset { + margin-left: var(--inner-spacing-2); + } + + [data-variant="inset"] ~ .sidebarInset { + margin-left: 0; + } +} diff --git a/app/client/packages/design-system/widgets/src/components/Sidebar/src/types.ts b/app/client/packages/design-system/widgets/src/components/Sidebar/src/types.ts new file mode 100644 index 000000000000..1d4e130126e5 --- /dev/null +++ b/app/client/packages/design-system/widgets/src/components/Sidebar/src/types.ts @@ -0,0 +1,28 @@ +import type { ReactNode } from "react"; + +export interface SidebarContextType { + state: "expanded" | "collapsed"; + open: boolean; + setOpen: (open: boolean) => void; + isMobile: boolean; + toggleSidebar: () => void; +} + +export interface SidebarProviderProps { + defaultOpen?: boolean; + isOpen?: boolean; + onOpen?: (open: boolean) => void; + children: ReactNode; + className?: string; + style?: React.CSSProperties; +} + +export interface SidebarProps { + side?: "start" | "end"; + variant?: "sidebar" | "floating" | "inset"; + collapsible?: "offcanvas" | "icon" | "none"; + onEntered?: () => void; + onExited?: () => void; + children: ReactNode; + className?: string; +} diff --git a/app/client/packages/design-system/widgets/src/components/Sidebar/src/use-mobile.tsx b/app/client/packages/design-system/widgets/src/components/Sidebar/src/use-mobile.tsx new file mode 100644 index 000000000000..067e22a5cd49 --- /dev/null +++ b/app/client/packages/design-system/widgets/src/components/Sidebar/src/use-mobile.tsx @@ -0,0 +1,27 @@ +import { useEffect, useState } from "react"; + +import { SIDEBAR_CONSTANTS } from "./constants"; + +export function useIsMobile() { + const [isMobile, setIsMobile] = useState(undefined); + + useEffect(() => { + const root = document.body.querySelector( + "[data-theme-provider]", + ) as HTMLButtonElement; + + if (!Boolean(root)) return; + + const resizeObserver = new ResizeObserver(([entry]) => { + setIsMobile( + entry.contentRect.width < SIDEBAR_CONSTANTS.MOBILE_BREAKPOINT, + ); + }); + + resizeObserver.observe(root); + + return () => resizeObserver.disconnect(); + }, [isMobile]); + + return Boolean(isMobile); +} diff --git a/app/client/packages/design-system/widgets/src/components/Sidebar/src/use-sidebar.ts b/app/client/packages/design-system/widgets/src/components/Sidebar/src/use-sidebar.ts new file mode 100644 index 000000000000..6cb583ef3ef8 --- /dev/null +++ b/app/client/packages/design-system/widgets/src/components/Sidebar/src/use-sidebar.ts @@ -0,0 +1,12 @@ +import * as React from "react"; +import { SidebarContext } from "./context"; + +export function useSidebar() { + const context = React.useContext(SidebarContext); + + if (!context) { + throw new Error("useSidebar must be used within a SidebarProvider."); + } + + return context; +} diff --git a/app/client/packages/design-system/widgets/src/components/Sidebar/stories/Sidebar.stories.tsx b/app/client/packages/design-system/widgets/src/components/Sidebar/stories/Sidebar.stories.tsx new file mode 100644 index 000000000000..0aa33cfc529e --- /dev/null +++ b/app/client/packages/design-system/widgets/src/components/Sidebar/stories/Sidebar.stories.tsx @@ -0,0 +1,125 @@ +import React from "react"; +import type { Meta, StoryObj } from "@storybook/react"; +import { + Sidebar, + SidebarContent, + SidebarTrigger, + SidebarProvider, + SidebarInset, +} from "../src/index"; +import { Flex } from "../../Flex"; +import { Text, Icon } from "@appsmith/wds"; + +const meta: Meta = { + component: Sidebar, + title: "WDS/Widgets/Sidebar", + parameters: { + layout: "fullscreen", + docs: { + description: { + component: + "A responsive sidebar component that supports different positions, variants, and collapse behaviors.", + }, + }, + }, + args: { + side: "start", + variant: "sidebar", + }, + render: (args) => ( + + + + + + + + + + + ), +}; + +export default meta; +type Story = StoryObj; + +const DemoContent = () => ( + + + Applications + + + + + Home + + + + Inbox + + + + Calendar + + + +); + +export const Default: Story = { + args: {}, +}; + +export const SideRight: Story = { + args: { + side: "end", + }, + render: (args) => ( + + + + + + + + + ), +}; + +export const VariantFloating: Story = { + args: { + variant: "floating", + }, +}; + +export const VariantInset: Story = { + args: { + variant: "inset", + }, + render: (args) => ( + + + + + + + + + + + ), +}; diff --git a/app/client/packages/design-system/widgets/src/index.ts b/app/client/packages/design-system/widgets/src/index.ts index 277f078a90cb..b0236e3a62dd 100644 --- a/app/client/packages/design-system/widgets/src/index.ts +++ b/app/client/packages/design-system/widgets/src/index.ts @@ -30,6 +30,8 @@ export * from "./components/ListBox"; export * from "./components/ListBoxItem"; export * from "./components/MenuItem"; export * from "./components/Markdown"; +export * from "./components/Sidebar"; +export * from "./components/Sheet"; export * from "./utils"; export * from "./hooks"; diff --git a/app/client/packages/rts/package.json b/app/client/packages/rts/package.json index 53c429b9e2da..a52d4bf06803 100644 --- a/app/client/packages/rts/package.json +++ b/app/client/packages/rts/package.json @@ -15,8 +15,11 @@ "start": "./start-server.sh" }, "dependencies": { - "@opentelemetry/instrumentation-http": "^0.53.0", - "@opentelemetry/sdk-trace-node": "^1.26.0", + "@opentelemetry/exporter-trace-otlp-http": "^0.54.2", + "@opentelemetry/instrumentation": "^0.54.2", + "@opentelemetry/instrumentation-http": "^0.54.2", + "@opentelemetry/resources": "^1.27.0", + "@opentelemetry/sdk-trace-node": "^1.27.0", "@opentelemetry/semantic-conventions": "^1.27.0", "@shared/ast": "workspace:^", "axios": "^1.7.4", diff --git a/app/client/packages/rts/src/instrumentation.ts b/app/client/packages/rts/src/instrumentation.ts index 24d40d408f98..05769222ee80 100644 --- a/app/client/packages/rts/src/instrumentation.ts +++ b/app/client/packages/rts/src/instrumentation.ts @@ -10,7 +10,11 @@ import { import { ATTR_SERVICE_NAME } from "@opentelemetry/semantic-conventions"; import { registerInstrumentations } from "@opentelemetry/instrumentation"; import { HttpInstrumentation } from "@opentelemetry/instrumentation-http"; -import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-proto"; +import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http"; + +const APPSMITH_NEW_RELIC_OTEL_EXPORTER_OTLP_ENDPOINT = + process.env.APPSMITH_NEW_RELIC_OTEL_EXPORTER_OTLP_ENDPOINT || + "http://localhost:4318"; const provider = new NodeTracerProvider({ resource: new Resource({ @@ -21,7 +25,7 @@ const provider = new NodeTracerProvider({ }); const nrTracesExporter = new OTLPTraceExporter({ - url: `${process.env.APPSMITH_NEW_RELIC_OTEL_EXPORTER_OTLP_ENDPOINT}/v1/traces`, + url: `${APPSMITH_NEW_RELIC_OTEL_EXPORTER_OTLP_ENDPOINT}/v1/traces`, headers: { "api-key": `${process.env.APPSMITH_NEW_RELIC_OTLP_LICENSE_KEY}`, }, diff --git a/app/client/packages/storybook/package.json b/app/client/packages/storybook/package.json index 7fa338b6eb27..dcc41c52e723 100644 --- a/app/client/packages/storybook/package.json +++ b/app/client/packages/storybook/package.json @@ -23,6 +23,7 @@ "@storybook/addon-viewport": "^8.2.7", "@storybook/blocks": "^8.2.7", "@storybook/components": "^8.2.7", + "@storybook/core-events": "^8.3.2", "@storybook/manager-api": "^8.2.7", "@storybook/preset-create-react-app": "^8.2.7", "@storybook/react-vite": "^8.2.7", @@ -37,7 +38,6 @@ "dependencies": { "@appsmith/wds": "workspace:^", "@appsmith/wds-theming": "workspace:^", - "@storybook/core-events": "^8.3.2", "glob": "^11.0.0" } } diff --git a/app/client/src/UITelemetry/auto-otel-web.ts b/app/client/src/UITelemetry/auto-otel-web.ts index c7740666ca5d..3a2aa17b6413 100644 --- a/app/client/src/UITelemetry/auto-otel-web.ts +++ b/app/client/src/UITelemetry/auto-otel-web.ts @@ -1,7 +1,7 @@ import { BatchSpanProcessor } from "@opentelemetry/sdk-trace-base"; import { WebTracerProvider } from "@opentelemetry/sdk-trace-web"; import { ZoneContextManager } from "@opentelemetry/context-zone"; -import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-proto"; +import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http"; import { Resource } from "@opentelemetry/resources"; import { ATTR_DEPLOYMENT_NAME, @@ -14,8 +14,8 @@ import { PeriodicExportingMetricReader, } from "@opentelemetry/sdk-metrics"; import { - OTLPMetricExporter, AggregationTemporalityPreference, + OTLPMetricExporter, } from "@opentelemetry/exporter-metrics-otlp-http"; import { metrics } from "@opentelemetry/api"; import { registerInstrumentations } from "@opentelemetry/instrumentation"; @@ -27,7 +27,7 @@ enum CompressionAlgorithm { GZIP = "gzip", } const { newRelic, observability } = getAppsmithConfigs(); -const { browserAgentEndpoint, otlpEndpoint, otlpLicenseKey } = newRelic; +const { browserAgentEndpoint, otlpLicenseKey } = newRelic; const { deploymentName, serviceInstanceId, serviceName } = observability; @@ -44,7 +44,7 @@ const tracerProvider = new WebTracerProvider({ }); const nrTracesExporter = new OTLPTraceExporter({ - url: `${otlpEndpoint}/v1/traces`, + url: addPathToCurrentUrl("/monitoring/traces"), compression: CompressionAlgorithm.GZIP, headers: { "api-key": otlpLicenseKey, @@ -74,7 +74,7 @@ tracerProvider.register({ const nrMetricsExporter = new OTLPMetricExporter({ compression: CompressionAlgorithm.GZIP, temporalityPreference: AggregationTemporalityPreference.DELTA, - url: `${otlpEndpoint}/v1/metrics`, + url: addPathToCurrentUrl("/monitoring/metrics"), headers: { "api-key": otlpLicenseKey, }, @@ -104,7 +104,8 @@ registerInstrumentations({ new PageLoadInstrumentation({ ignoreResourceUrls: [ browserAgentEndpoint, - otlpEndpoint, + addPathToCurrentUrl("/monitoring/traces"), + addPathToCurrentUrl("/monitoring/metrics"), smartlookBaseDomain, ], }), @@ -115,3 +116,14 @@ registerInstrumentations({ }), ], }); + +// Replaces the pathname of the current URL with the provided path. +function addPathToCurrentUrl(path: string) { + const origin = window.location.origin; + + const currentUrl = new URL(origin); + + currentUrl.pathname = path.startsWith("/") ? path : `/${path}`; + + return currentUrl.toString(); +} diff --git a/app/client/src/ce/pages/Editor/IDE/EditorPane/Query/hooks.tsx b/app/client/src/ce/pages/Editor/IDE/EditorPane/Query/hooks.tsx index 9d58eceb7a99..c85ffd69def4 100644 --- a/app/client/src/ce/pages/Editor/IDE/EditorPane/Query/hooks.tsx +++ b/app/client/src/ce/pages/Editor/IDE/EditorPane/Query/hooks.tsx @@ -160,6 +160,16 @@ export const useQueryEditorRoutes = (path: string): UseRoutes => { const newComponents = useMemo( () => [ + { + key: "AddQuery", + exact: true, + component: () => ( + + + + ), + path: [`${path}${ADD_PATH}`, `${path}/:baseQueryId${ADD_PATH}`], + }, { key: "PluginActionEditor", component: () => { @@ -180,16 +190,6 @@ export const useQueryEditorRoutes = (path: string): UseRoutes => { ], exact: true, }, - { - key: "AddQuery", - exact: true, - component: () => ( - - - - ), - path: [`${path}${ADD_PATH}`, `${path}/:baseQueryId${ADD_PATH}`], - }, { key: "QueryEmpty", component: () => ( diff --git a/app/client/src/components/formControls/BaseControl.tsx b/app/client/src/components/formControls/BaseControl.tsx index 89dd371339b3..a728fdf28348 100644 --- a/app/client/src/components/formControls/BaseControl.tsx +++ b/app/client/src/components/formControls/BaseControl.tsx @@ -109,6 +109,7 @@ export interface ControlData { isSecretExistsPath?: string; addMoreButtonLabel?: string; datasourceId?: string; + workspaceId?: string; } export type FormConfigType = Omit & { configProperty?: string; diff --git a/app/client/src/pages/Editor/FormControl.tsx b/app/client/src/pages/Editor/FormControl.tsx index cf6af5749559..f849891e2169 100644 --- a/app/client/src/pages/Editor/FormControl.tsx +++ b/app/client/src/pages/Editor/FormControl.tsx @@ -32,6 +32,7 @@ import { SQL_DATASOURCES } from "constants/QueryEditorConstants"; import type { Datasource, DatasourceStructure } from "entities/Datasource"; import { getCurrentEditingEnvironmentId } from "ee/selectors/environmentSelectors"; import { selectFeatureFlags } from "ee/selectors/featureFlagsSelectors"; +import { getCurrentWorkspaceId } from "ee/selectors/selectedWorkspaceSelectors"; export interface FormControlProps { config: ControlProps; @@ -94,6 +95,7 @@ function FormControl(props: FormControlProps) { const pluginName: string = useSelector((state: AppState) => getPluginNameFromId(state, pluginId), ); + const workspaceId = useSelector(getCurrentWorkspaceId); // moving creation of template to the formControl layer, this way any formControl created can potentially have a template system. const isNewQuery = @@ -181,6 +183,7 @@ function FormControl(props: FormControlProps) { { ...config, datasourceId: dsId, + workspaceId, }, props.formName, props?.multipleConfig, diff --git a/app/client/yarn.lock b/app/client/yarn.lock index b0977ec08747..4efeef9b59e2 100644 --- a/app/client/yarn.lock +++ b/app/client/yarn.lock @@ -251,12 +251,14 @@ __metadata: "@tabler/icons-react": ^3.10.0 "@types/fs-extra": ^11.0.4 "@types/react-syntax-highlighter": ^15.5.13 + "@types/react-transition-group": ^4.4.11 clsx: ^2.0.0 eslint-plugin-storybook: ^0.6.10 lodash: "*" react-aria-components: ^1.2.1 react-markdown: ^9.0.1 react-syntax-highlighter: ^15.5.0 + react-transition-group: ^4.4.5 remark-gfm: ^4.0.0 peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -2628,12 +2630,12 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.11.1, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.16.0, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.18.0, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.20.0, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.9.2": - version: 7.25.6 - resolution: "@babel/runtime@npm:7.25.6" +"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.11.1, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.16.0, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.18.0, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.20.0, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": + version: 7.26.0 + resolution: "@babel/runtime@npm:7.26.0" dependencies: regenerator-runtime: ^0.14.0 - checksum: ee1a69d3ac7802803f5ee6a96e652b78b8addc28c6a38c725a4ad7d61a059d9e6cb9f6550ed2f63cce67a1bd82e0b1ef66a1079d895be6bfb536a5cfbd9ccc32 + checksum: c8e2c0504ab271b3467a261a8f119bf2603eb857a0d71e37791f4e3fae00f681365073cc79f141ddaa90c6077c60ba56448004ad5429d07ac73532be9f7cf28a languageName: node linkType: hard @@ -4760,99 +4762,68 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/api-logs@npm:0.52.1": - version: 0.52.1 - resolution: "@opentelemetry/api-logs@npm:0.52.1" - dependencies: - "@opentelemetry/api": ^1.0.0 - checksum: 500cd35527580732921d198bd7007224402cb89fef791f0b64bea839c9f2ad796d54486ee9aee0ee6422ded3963cba793408086eda0adfec2bd1d66f9114d96c - languageName: node - linkType: hard - -"@opentelemetry/api-logs@npm:0.53.0": - version: 0.53.0 - resolution: "@opentelemetry/api-logs@npm:0.53.0" +"@opentelemetry/api-logs@npm:0.54.2": + version: 0.54.2 + resolution: "@opentelemetry/api-logs@npm:0.54.2" dependencies: - "@opentelemetry/api": ^1.0.0 - checksum: 3383ff75f94a77402370a655f8edf049f9864ad60140f70821a1b775ce43bdb9ca6fade533a1faf46dbca19f3189bcbf1f8805062f5a68bfe2a00281b1712d1f + "@opentelemetry/api": ^1.3.0 + checksum: 6af14100932147d2296c7de1a16e14be528e0cb85cde79884967a777c0f0e2610aa130b04e48e5deec0a442c5a3966863a9da82ac40631755014f45cec5c8973 languageName: node linkType: hard -"@opentelemetry/api@npm:^1.0.0, @opentelemetry/api@npm:^1.9.0": +"@opentelemetry/api@npm:^1.3.0, @opentelemetry/api@npm:^1.9.0": version: 1.9.0 resolution: "@opentelemetry/api@npm:1.9.0" checksum: 9e88e59d53ced668f3daaecfd721071c5b85a67dd386f1c6f051d1be54375d850016c881f656ffbe9a03bedae85f7e89c2f2b635313f9c9b195ad033cdc31020 languageName: node linkType: hard -"@opentelemetry/auto-instrumentations-web@npm:^0.41.0": - version: 0.41.0 - resolution: "@opentelemetry/auto-instrumentations-web@npm:0.41.0" +"@opentelemetry/auto-instrumentations-web@npm:^0.42.0": + version: 0.42.0 + resolution: "@opentelemetry/auto-instrumentations-web@npm:0.42.0" dependencies: - "@opentelemetry/instrumentation": ^0.53.0 - "@opentelemetry/instrumentation-document-load": ^0.40.0 - "@opentelemetry/instrumentation-fetch": ^0.53.0 - "@opentelemetry/instrumentation-user-interaction": ^0.40.0 - "@opentelemetry/instrumentation-xml-http-request": ^0.53.0 + "@opentelemetry/instrumentation": ^0.54.0 + "@opentelemetry/instrumentation-document-load": ^0.41.0 + "@opentelemetry/instrumentation-fetch": ^0.54.0 + "@opentelemetry/instrumentation-user-interaction": ^0.41.0 + "@opentelemetry/instrumentation-xml-http-request": ^0.54.0 peerDependencies: "@opentelemetry/api": ^1.3.0 zone.js: ^0.11.4 || ^0.13.0 || ^0.14.0 - checksum: 9e73bc3654bfe325154a2e26d713033a3a6c1e4341a5f3803af75b5c945d1844e2f83b129b42c69b660ca9caf5f16b666c12143ac51744c8d12ea550d29935d5 + checksum: 3f0e5c9273f27ac8833ce1fa000715548beaebcc0edee1dff129a5400de058b5607050e67e0cb41a5517d72098a2c6b7651f99f4db3ce1e78ea0e52e87920752 languageName: node linkType: hard -"@opentelemetry/context-async-hooks@npm:1.26.0": - version: 1.26.0 - resolution: "@opentelemetry/context-async-hooks@npm:1.26.0" +"@opentelemetry/context-async-hooks@npm:1.27.0": + version: 1.27.0 + resolution: "@opentelemetry/context-async-hooks@npm:1.27.0" peerDependencies: "@opentelemetry/api": ">=1.0.0 <1.10.0" - checksum: f0fe5bfa3aeed99fbe7d6f6157e3bcc2e4450850a62ef60e551812f3e5aa72cb81e38de8c4e1b6934c93e18579a503664597f78e7e7d9904e271f59c939a3e02 + checksum: d0fb0dd9e9de9b5404c50b48aa982c096f1f58aa518e472a3e48bd8d404354700132005886a497b7067cae6e813dab374a6c1483e344e53e396274c5b00f2a31 languageName: node linkType: hard -"@opentelemetry/context-zone-peer-dep@npm:1.25.1": - version: 1.25.1 - resolution: "@opentelemetry/context-zone-peer-dep@npm:1.25.1" +"@opentelemetry/context-zone-peer-dep@npm:1.27.0": + version: 1.27.0 + resolution: "@opentelemetry/context-zone-peer-dep@npm:1.27.0" peerDependencies: "@opentelemetry/api": ">=1.0.0 <1.10.0" zone.js: ^0.10.2 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^0.14.0 - checksum: 32ea945cf48ffd89d0d41281c3c1b22560416ddb2edff4867a5cbc6d2983bf0f5d8624972becd9b65bb0418ae13e2fd9231c8dc8052c0d0b9432d29fc5940676 + checksum: 173f4fc06ea62e97593bae9f1d064bb28da5dedf408356527f70ef3f9ee45dcc43fa4593aaa870232b2dbd485a982cf4234f6b4282c7e62a40bc4a2ff5eab718 languageName: node linkType: hard -"@opentelemetry/context-zone@npm:1.25.1": - version: 1.25.1 - resolution: "@opentelemetry/context-zone@npm:1.25.1" +"@opentelemetry/context-zone@npm:^1.27.0": + version: 1.27.0 + resolution: "@opentelemetry/context-zone@npm:1.27.0" dependencies: - "@opentelemetry/context-zone-peer-dep": 1.25.1 + "@opentelemetry/context-zone-peer-dep": 1.27.0 zone.js: ^0.11.0 || ^0.12.0 || ^0.13.0 || ^0.14.0 - checksum: 2b9473b4d1de7bd1855edda1adee880dbbcae1141d6762c5a26ab9597dcb9fd17a3b89dff84aaa329bab12b464702826ad93d95d01f004371742ba2b5ca3f27d - languageName: node - linkType: hard - -"@opentelemetry/core@npm:1.25.1": - version: 1.25.1 - resolution: "@opentelemetry/core@npm:1.25.1" - dependencies: - "@opentelemetry/semantic-conventions": 1.25.1 - peerDependencies: - "@opentelemetry/api": ">=1.0.0 <1.10.0" - checksum: ba1672fde4a1cfd9b55bf6070db71b808702fe59c4a70cda52a6156b2c813827954a6b4d3c3641283d394ff75a69b6359a0487459b4d26cd7d714ab3d21bc780 + checksum: c24c487bd00f4f7df50e7e767058a8583bb283c501c4ed6a059fad9193bec18d32c4498083117644829a787c46cd6af6c9f42f0e6a4157f0ce3bb69c3528ee04 languageName: node linkType: hard -"@opentelemetry/core@npm:1.26.0": - version: 1.26.0 - resolution: "@opentelemetry/core@npm:1.26.0" - dependencies: - "@opentelemetry/semantic-conventions": 1.27.0 - peerDependencies: - "@opentelemetry/api": ">=1.0.0 <1.10.0" - checksum: e5b06b4d69605927b850109c6b898f00a6a921171b3bf62335a4e00b9a170c1b93ddef6d7f8cc480a551faeaf81074b594f4462a91d4fbc4b313e64ff9ebd717 - languageName: node - linkType: hard - -"@opentelemetry/core@npm:1.27.0, @opentelemetry/core@npm:^1.26.0, @opentelemetry/core@npm:^1.8.0": +"@opentelemetry/core@npm:1.27.0, @opentelemetry/core@npm:^1.27.0, @opentelemetry/core@npm:^1.8.0": version: 1.27.0 resolution: "@opentelemetry/core@npm:1.27.0" dependencies: @@ -4863,128 +4834,112 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/exporter-metrics-otlp-http@npm:0.52.1": - version: 0.52.1 - resolution: "@opentelemetry/exporter-metrics-otlp-http@npm:0.52.1" +"@opentelemetry/exporter-metrics-otlp-http@npm:^0.54.2": + version: 0.54.2 + resolution: "@opentelemetry/exporter-metrics-otlp-http@npm:0.54.2" dependencies: - "@opentelemetry/core": 1.25.1 - "@opentelemetry/otlp-exporter-base": 0.52.1 - "@opentelemetry/otlp-transformer": 0.52.1 - "@opentelemetry/resources": 1.25.1 - "@opentelemetry/sdk-metrics": 1.25.1 + "@opentelemetry/core": 1.27.0 + "@opentelemetry/otlp-exporter-base": 0.54.2 + "@opentelemetry/otlp-transformer": 0.54.2 + "@opentelemetry/resources": 1.27.0 + "@opentelemetry/sdk-metrics": 1.27.0 peerDependencies: "@opentelemetry/api": ^1.3.0 - checksum: 9f557739502925f51670073389d208536ecbb7e8178267b2d9c65eba403f75af3946d226356a1df34395b2c17385106df5e1853e816a46f96a8b6515dbc1c6d0 + checksum: c55d88f1b8e2e8ae4adcd4c1ac7846f13a91bca150e16b90270a00d1b0cc177c115b3876527122d7f0f1ce3cb6a6f8176b96071cd4e210cadcc0a74821d6e9c3 languageName: node linkType: hard -"@opentelemetry/exporter-trace-otlp-proto@npm:0.52.1": - version: 0.52.1 - resolution: "@opentelemetry/exporter-trace-otlp-proto@npm:0.52.1" +"@opentelemetry/exporter-trace-otlp-http@npm:^0.54.2": + version: 0.54.2 + resolution: "@opentelemetry/exporter-trace-otlp-http@npm:0.54.2" dependencies: - "@opentelemetry/core": 1.25.1 - "@opentelemetry/otlp-exporter-base": 0.52.1 - "@opentelemetry/otlp-transformer": 0.52.1 - "@opentelemetry/resources": 1.25.1 - "@opentelemetry/sdk-trace-base": 1.25.1 + "@opentelemetry/core": 1.27.0 + "@opentelemetry/otlp-exporter-base": 0.54.2 + "@opentelemetry/otlp-transformer": 0.54.2 + "@opentelemetry/resources": 1.27.0 + "@opentelemetry/sdk-trace-base": 1.27.0 peerDependencies: - "@opentelemetry/api": ^1.0.0 - checksum: 1d46eb5055925fb1f4383bb65ccec7addcf53ab88f2f5e7393e4e99e72d4fe48a1d45027736d534aeb76e37c217f5a4f9deda51351afa614340196a28db55dab + "@opentelemetry/api": ^1.3.0 + checksum: 57df41eaf14575b079fff599ce348b233ad29d21bab184c1403a9e1a153309b78974c8537ccf1afa661515aacd726f2749597448a321af63b30cc1b6357fbfb5 languageName: node linkType: hard -"@opentelemetry/instrumentation-document-load@npm:^0.40.0": - version: 0.40.0 - resolution: "@opentelemetry/instrumentation-document-load@npm:0.40.0" +"@opentelemetry/instrumentation-document-load@npm:^0.41.0": + version: 0.41.0 + resolution: "@opentelemetry/instrumentation-document-load@npm:0.41.0" dependencies: "@opentelemetry/core": ^1.8.0 - "@opentelemetry/instrumentation": ^0.53.0 - "@opentelemetry/sdk-trace-base": ^1.0.0 + "@opentelemetry/instrumentation": ^0.54.0 "@opentelemetry/sdk-trace-web": ^1.15.0 "@opentelemetry/semantic-conventions": ^1.27.0 peerDependencies: "@opentelemetry/api": ^1.3.0 - checksum: 5a06eeb5b68623c655fa728cc2bb036cdd0270488abfa1fca5e733891f3ce5b22067b014c4f3317e957be3c89acab5c70f199eb82c409dd01605960908c34048 + checksum: 5b17317924f76c9877958b83d2c575db295cb8051b2ec8c1ab738d8d2106a059942606bb31e11a7dbff5453516bf360401cb32f6ab552dc461e54d2e130d9b09 languageName: node linkType: hard -"@opentelemetry/instrumentation-fetch@npm:^0.53.0": - version: 0.53.0 - resolution: "@opentelemetry/instrumentation-fetch@npm:0.53.0" +"@opentelemetry/instrumentation-fetch@npm:^0.54.0": + version: 0.54.2 + resolution: "@opentelemetry/instrumentation-fetch@npm:0.54.2" dependencies: - "@opentelemetry/core": 1.26.0 - "@opentelemetry/instrumentation": 0.53.0 - "@opentelemetry/sdk-trace-web": 1.26.0 + "@opentelemetry/core": 1.27.0 + "@opentelemetry/instrumentation": 0.54.2 + "@opentelemetry/sdk-trace-web": 1.27.0 "@opentelemetry/semantic-conventions": 1.27.0 peerDependencies: - "@opentelemetry/api": ^1.0.0 - checksum: 2c92c9ccccfa424adb3773424df42d64156b67bdbcc1a21fbe5f620370d68bbd64701279897a0807e0b259b4e7a9fdcfdc21fa064343793c592bd0d08c5483cf + "@opentelemetry/api": ^1.3.0 + checksum: de0cd3069a598ae2a1f82da01b8ed92d08658b6d9d3a761f8c311dfc25cf2a1fa446fbff6d631f79dfdc3472cabcbfe473469c787443a5f985597ab2c468a149 languageName: node linkType: hard -"@opentelemetry/instrumentation-http@npm:^0.53.0": - version: 0.53.0 - resolution: "@opentelemetry/instrumentation-http@npm:0.53.0" +"@opentelemetry/instrumentation-http@npm:^0.54.2": + version: 0.54.2 + resolution: "@opentelemetry/instrumentation-http@npm:0.54.2" dependencies: - "@opentelemetry/core": 1.26.0 - "@opentelemetry/instrumentation": 0.53.0 + "@opentelemetry/core": 1.27.0 + "@opentelemetry/instrumentation": 0.54.2 "@opentelemetry/semantic-conventions": 1.27.0 + forwarded-parse: 2.1.2 semver: ^7.5.2 peerDependencies: "@opentelemetry/api": ^1.3.0 - checksum: 4ee569f7fc8c7ce50fabaff016d33577f36e63272b0634ac45806d70bffdf38fcf09db3cd9dd27c3150f6c4547fec673c356c419a6ed2399ff2849b9487a6e89 + checksum: 920904333ab99430aa7e0dc541aac1f3c813d1a79f1ee3f07d20390b9f89727e306beb38c54c63ce3299195cf42aab2354a41a39c236cb814a42ea590503e56f languageName: node linkType: hard -"@opentelemetry/instrumentation-user-interaction@npm:^0.40.0": - version: 0.40.0 - resolution: "@opentelemetry/instrumentation-user-interaction@npm:0.40.0" +"@opentelemetry/instrumentation-user-interaction@npm:^0.41.0": + version: 0.41.0 + resolution: "@opentelemetry/instrumentation-user-interaction@npm:0.41.0" dependencies: "@opentelemetry/core": ^1.8.0 - "@opentelemetry/instrumentation": ^0.53.0 + "@opentelemetry/instrumentation": ^0.54.0 "@opentelemetry/sdk-trace-web": ^1.8.0 peerDependencies: "@opentelemetry/api": ^1.3.0 zone.js: ^0.11.4 || ^0.13.0 || ^0.14.0 - checksum: 24ae06b6a6ab2df39dc1074e7edf8ddaa2009e0376bf5e2bcb5d355bdf96bb4aeb09dc861a110150702a251d30e9984ee2a0bd7ba57e820e0859977f5807f369 + checksum: e9888bd014abe7032337bba12e62ca3bd1dd1bc3961c84a8d18cc5d6cdf02286fc4bc1ac857c056e673741a44703bafe702f70a6dfb617e08bc93b206168bb36 languageName: node linkType: hard -"@opentelemetry/instrumentation-xml-http-request@npm:^0.53.0": - version: 0.53.0 - resolution: "@opentelemetry/instrumentation-xml-http-request@npm:0.53.0" +"@opentelemetry/instrumentation-xml-http-request@npm:^0.54.0": + version: 0.54.2 + resolution: "@opentelemetry/instrumentation-xml-http-request@npm:0.54.2" dependencies: - "@opentelemetry/core": 1.26.0 - "@opentelemetry/instrumentation": 0.53.0 - "@opentelemetry/sdk-trace-web": 1.26.0 + "@opentelemetry/core": 1.27.0 + "@opentelemetry/instrumentation": 0.54.2 + "@opentelemetry/sdk-trace-web": 1.27.0 "@opentelemetry/semantic-conventions": 1.27.0 - peerDependencies: - "@opentelemetry/api": ^1.0.0 - checksum: 61dd00e30fbf4de611a7d1fa63aa8b004a0624c566d043dc9970dcaaef8eeb1f67e39a224bffd0d05c437e0d08371ee569f1d273429c05eb155e8c854e3fa818 - languageName: node - linkType: hard - -"@opentelemetry/instrumentation@npm:0.52.1": - version: 0.52.1 - resolution: "@opentelemetry/instrumentation@npm:0.52.1" - dependencies: - "@opentelemetry/api-logs": 0.52.1 - "@types/shimmer": ^1.0.2 - import-in-the-middle: ^1.8.1 - require-in-the-middle: ^7.1.1 - semver: ^7.5.2 - shimmer: ^1.2.1 peerDependencies: "@opentelemetry/api": ^1.3.0 - checksum: e8b4f202dc9355ca46714349a5e1663346e162f79706eed38015edf38fc536330fde4cc19ed7d3d6b03258c890c1dc0ba6d658d7aac3f41f1803bd03699d2701 + checksum: a62ff9c8a6a60ea403e65971804f1ae884a17136f169ffbfd25d10eb22d38088a1f1c687793a365b0468216a9759a70129f14dd953872d01f617c7be4ab8e3e1 languageName: node linkType: hard -"@opentelemetry/instrumentation@npm:0.53.0, @opentelemetry/instrumentation@npm:^0.53.0": - version: 0.53.0 - resolution: "@opentelemetry/instrumentation@npm:0.53.0" +"@opentelemetry/instrumentation@npm:0.54.2, @opentelemetry/instrumentation@npm:^0.54.0, @opentelemetry/instrumentation@npm:^0.54.2": + version: 0.54.2 + resolution: "@opentelemetry/instrumentation@npm:0.54.2" dependencies: - "@opentelemetry/api-logs": 0.53.0 + "@opentelemetry/api-logs": 0.54.2 "@types/shimmer": ^1.2.0 import-in-the-middle: ^1.8.1 require-in-the-middle: ^7.1.1 @@ -4992,86 +4947,62 @@ __metadata: shimmer: ^1.2.1 peerDependencies: "@opentelemetry/api": ^1.3.0 - checksum: a386fe066eab71129a6edbc883ab407b1022850e8acc4750029a12e8730588a8b81442d0b008aaddb46f7614af40d19d331e7348790ca2d08ba8eed6d23ffdae + checksum: c8ebf9eab5dc16c51a937367f6c21e22068b863d44d72c8b1f7615750ad526218229c30ab3c90c376c2cc03ee17cae3949a6f6ed987486511a13a3bef100e6b6 languageName: node linkType: hard -"@opentelemetry/otlp-exporter-base@npm:0.52.1": - version: 0.52.1 - resolution: "@opentelemetry/otlp-exporter-base@npm:0.52.1" +"@opentelemetry/otlp-exporter-base@npm:0.54.2": + version: 0.54.2 + resolution: "@opentelemetry/otlp-exporter-base@npm:0.54.2" dependencies: - "@opentelemetry/core": 1.25.1 - "@opentelemetry/otlp-transformer": 0.52.1 + "@opentelemetry/core": 1.27.0 + "@opentelemetry/otlp-transformer": 0.54.2 peerDependencies: - "@opentelemetry/api": ^1.0.0 - checksum: a1629886907a393e24a91ef5adc389e093d3725dd2957bc29903442541b2a30673100b13c200c37fe0a2e2fec53ced8b47ad90064ebc49f2e9382c2b1719d3c3 + "@opentelemetry/api": ^1.3.0 + checksum: 97a6b0713ba1aebc44bfd90c129f950cdf34e75d13a933aecd6b257b3d90166dd1dbec3742ccfa163e78dd351f26a78a0fa5a983705a43510d08a88d2321525b languageName: node linkType: hard -"@opentelemetry/otlp-transformer@npm:0.52.1": - version: 0.52.1 - resolution: "@opentelemetry/otlp-transformer@npm:0.52.1" +"@opentelemetry/otlp-transformer@npm:0.54.2": + version: 0.54.2 + resolution: "@opentelemetry/otlp-transformer@npm:0.54.2" dependencies: - "@opentelemetry/api-logs": 0.52.1 - "@opentelemetry/core": 1.25.1 - "@opentelemetry/resources": 1.25.1 - "@opentelemetry/sdk-logs": 0.52.1 - "@opentelemetry/sdk-metrics": 1.25.1 - "@opentelemetry/sdk-trace-base": 1.25.1 + "@opentelemetry/api-logs": 0.54.2 + "@opentelemetry/core": 1.27.0 + "@opentelemetry/resources": 1.27.0 + "@opentelemetry/sdk-logs": 0.54.2 + "@opentelemetry/sdk-metrics": 1.27.0 + "@opentelemetry/sdk-trace-base": 1.27.0 protobufjs: ^7.3.0 peerDependencies: - "@opentelemetry/api": ">=1.3.0 <1.10.0" - checksum: 0e083ee484a79506d8ce41a8dd5d2d4d7669c380ac1ef9c313c348a6af8384365d2b90d99165590cced6453ce9192c0fe270d9cc974e9240e8ca02a6cf70151d - languageName: node - linkType: hard - -"@opentelemetry/propagator-b3@npm:1.26.0": - version: 1.26.0 - resolution: "@opentelemetry/propagator-b3@npm:1.26.0" - dependencies: - "@opentelemetry/core": 1.26.0 - peerDependencies: - "@opentelemetry/api": ">=1.0.0 <1.10.0" - checksum: c2e99a8ed2814cf5b8e6e2a79411f2f6d668b7d5fc8351e5302ea4149601a96ec655422cf59470c66d8a408850f8a6b5156bf7deac7afb07d3f7a935c51fff04 - languageName: node - linkType: hard - -"@opentelemetry/propagator-jaeger@npm:1.26.0": - version: 1.26.0 - resolution: "@opentelemetry/propagator-jaeger@npm:1.26.0" - dependencies: - "@opentelemetry/core": 1.26.0 - peerDependencies: - "@opentelemetry/api": ">=1.0.0 <1.10.0" - checksum: a0ac3888c86f1b4671c7ca520396b89b4c47fa9e9d976bd014472d2b7786e7c5bdf4823a6e2a900fed5ea5dfe23eda0bdf6740e77c1352f2c0f82b13a71c03df + "@opentelemetry/api": ^1.3.0 + checksum: 972a269cb9868d36703e78f1cf6f36026854d00dd3959e636d9ac8ce5eecb7225537d7dea97b786306d94e6cacf49e7e64e32e45e0d21a58b6b4126c53ec65be languageName: node linkType: hard -"@opentelemetry/resources@npm:1.25.1": - version: 1.25.1 - resolution: "@opentelemetry/resources@npm:1.25.1" +"@opentelemetry/propagator-b3@npm:1.27.0": + version: 1.27.0 + resolution: "@opentelemetry/propagator-b3@npm:1.27.0" dependencies: - "@opentelemetry/core": 1.25.1 - "@opentelemetry/semantic-conventions": 1.25.1 + "@opentelemetry/core": 1.27.0 peerDependencies: "@opentelemetry/api": ">=1.0.0 <1.10.0" - checksum: 806e5aabbc93afcab767dc84707f702ca51bbc93e4565eb69a8591ed2fe78439aca19c5ca0d9f044c85ed97b9efb35936fdb65bef01f5f3e68504002c8a07220 + checksum: 4bfe531e1fb5606d25d09e7b3c84188938e76618f8a0a098d57ebacf9f7bafaab24ba6e6e26cbb4c3da3ea8ecd31e2c68e86735ef48f45cdfc2e698c0b098249 languageName: node linkType: hard -"@opentelemetry/resources@npm:1.26.0": - version: 1.26.0 - resolution: "@opentelemetry/resources@npm:1.26.0" +"@opentelemetry/propagator-jaeger@npm:1.27.0": + version: 1.27.0 + resolution: "@opentelemetry/propagator-jaeger@npm:1.27.0" dependencies: - "@opentelemetry/core": 1.26.0 - "@opentelemetry/semantic-conventions": 1.27.0 + "@opentelemetry/core": 1.27.0 peerDependencies: "@opentelemetry/api": ">=1.0.0 <1.10.0" - checksum: f70b0fdf4fb00c950bc30084818c92a5339f1be5d709bd681ab14453e877d6bb9f700324b8e65a0eabfeea618d01ed071abf9088e00fa0bf7f3305b1abad22cb + checksum: 87ab8a15b57230e40b9f59e63a01a31d38bfef77cafb91543a1549c179a9d01fef73ce5cf58ad7c6ed0093ab3b4a64ea9ba00e9d257d4084447267fe39f9163d languageName: node linkType: hard -"@opentelemetry/resources@npm:1.27.0": +"@opentelemetry/resources@npm:1.27.0, @opentelemetry/resources@npm:^1.27.0": version: 1.27.0 resolution: "@opentelemetry/resources@npm:1.27.0" dependencies: @@ -5083,59 +5014,32 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/sdk-logs@npm:0.52.1": - version: 0.52.1 - resolution: "@opentelemetry/sdk-logs@npm:0.52.1" +"@opentelemetry/sdk-logs@npm:0.54.2": + version: 0.54.2 + resolution: "@opentelemetry/sdk-logs@npm:0.54.2" dependencies: - "@opentelemetry/api-logs": 0.52.1 - "@opentelemetry/core": 1.25.1 - "@opentelemetry/resources": 1.25.1 + "@opentelemetry/api-logs": 0.54.2 + "@opentelemetry/core": 1.27.0 + "@opentelemetry/resources": 1.27.0 peerDependencies: "@opentelemetry/api": ">=1.4.0 <1.10.0" - checksum: 16bdccd8250d96df0ffcadb63b107135d207072c1da52d056f00b211ca56924413d53a529cc0e362d96bd1bf33aa801eba51b395c5cb290b8c66fb1b988a7ff6 + checksum: 5d428d872df5357750c7025018968a1a9971d2236388657ebcb4925197b8d13e6f93ea8fedb0d8d6b1ba44da91c1a045680b2b57ef45e7ee29a5bc08630948cb languageName: node linkType: hard -"@opentelemetry/sdk-metrics@npm:1.25.1": - version: 1.25.1 - resolution: "@opentelemetry/sdk-metrics@npm:1.25.1" +"@opentelemetry/sdk-metrics@npm:1.27.0, @opentelemetry/sdk-metrics@npm:^1.27.0": + version: 1.27.0 + resolution: "@opentelemetry/sdk-metrics@npm:1.27.0" dependencies: - "@opentelemetry/core": 1.25.1 - "@opentelemetry/resources": 1.25.1 - lodash.merge: ^4.6.2 + "@opentelemetry/core": 1.27.0 + "@opentelemetry/resources": 1.27.0 peerDependencies: "@opentelemetry/api": ">=1.3.0 <1.10.0" - checksum: efd3902d30e75bfc16e4208ffc92096743148ed8cec84900d05f98cc17ff146c711c398c3a526589433509c82399641b0759b4ba9fffc12be2e5007a55af7517 + checksum: c8776577063a3a5199d5717247270daf5820ce6636530b5ea4b5a8d6b40170cec9bb6b56dacb5c118d2e90588af83d0ebbb13f4d370c7efe50f69d22e5d13463 languageName: node linkType: hard -"@opentelemetry/sdk-trace-base@npm:1.25.1": - version: 1.25.1 - resolution: "@opentelemetry/sdk-trace-base@npm:1.25.1" - dependencies: - "@opentelemetry/core": 1.25.1 - "@opentelemetry/resources": 1.25.1 - "@opentelemetry/semantic-conventions": 1.25.1 - peerDependencies: - "@opentelemetry/api": ">=1.0.0 <1.10.0" - checksum: 8ac97f7d8d36bf412c5f47ff98ded07c5dfd11602a6ae7657ec7b5f50bb6ddaa20fc682626afcf74e21b375dbad0d1d47c8e20204d5139431afec25165f6252b - languageName: node - linkType: hard - -"@opentelemetry/sdk-trace-base@npm:1.26.0": - version: 1.26.0 - resolution: "@opentelemetry/sdk-trace-base@npm:1.26.0" - dependencies: - "@opentelemetry/core": 1.26.0 - "@opentelemetry/resources": 1.26.0 - "@opentelemetry/semantic-conventions": 1.27.0 - peerDependencies: - "@opentelemetry/api": ">=1.0.0 <1.10.0" - checksum: a4f4ddf644fd0d79b2bd49e4377143688d2aa657643a470d8bed6696f26817598fb4e9f16ba2d8c237292af56f06eec56594a7b4cc417d4ea7e490a45a22113b - languageName: node - linkType: hard - -"@opentelemetry/sdk-trace-base@npm:1.27.0, @opentelemetry/sdk-trace-base@npm:^1.0.0": +"@opentelemetry/sdk-trace-base@npm:1.27.0, @opentelemetry/sdk-trace-base@npm:^1.27.0": version: 1.27.0 resolution: "@opentelemetry/sdk-trace-base@npm:1.27.0" dependencies: @@ -5148,49 +5052,23 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/sdk-trace-node@npm:^1.26.0": - version: 1.26.0 - resolution: "@opentelemetry/sdk-trace-node@npm:1.26.0" +"@opentelemetry/sdk-trace-node@npm:^1.27.0": + version: 1.27.0 + resolution: "@opentelemetry/sdk-trace-node@npm:1.27.0" dependencies: - "@opentelemetry/context-async-hooks": 1.26.0 - "@opentelemetry/core": 1.26.0 - "@opentelemetry/propagator-b3": 1.26.0 - "@opentelemetry/propagator-jaeger": 1.26.0 - "@opentelemetry/sdk-trace-base": 1.26.0 + "@opentelemetry/context-async-hooks": 1.27.0 + "@opentelemetry/core": 1.27.0 + "@opentelemetry/propagator-b3": 1.27.0 + "@opentelemetry/propagator-jaeger": 1.27.0 + "@opentelemetry/sdk-trace-base": 1.27.0 semver: ^7.5.2 peerDependencies: "@opentelemetry/api": ">=1.0.0 <1.10.0" - checksum: 1d63bed8fc36496698919ccd25be3b7b0e0d0bf9478f413a26bdbfe0bf0d4166bf58bbbee2415fb2fe42d3008b5c32ec7e4e42f2cb6d18b665b349eb025c15eb + checksum: 2abbd609ebefc3c8ece87321281d3b31a59201e799e55cbde0ad0d87b7643e4e5ac47d83dcde2306d32780438b6eba49f57113bc56ed02e95b6fab1732780247 languageName: node linkType: hard -"@opentelemetry/sdk-trace-web@npm:1.25.1": - version: 1.25.1 - resolution: "@opentelemetry/sdk-trace-web@npm:1.25.1" - dependencies: - "@opentelemetry/core": 1.25.1 - "@opentelemetry/sdk-trace-base": 1.25.1 - "@opentelemetry/semantic-conventions": 1.25.1 - peerDependencies: - "@opentelemetry/api": ">=1.0.0 <1.10.0" - checksum: 6ad9e43c62d0cf49572779694dc87008d359455044c09acf60a21208265539310b66b0390d8ad5758e4399a9320ab41eac84a6170cef7f8466c0447b80206197 - languageName: node - linkType: hard - -"@opentelemetry/sdk-trace-web@npm:1.26.0": - version: 1.26.0 - resolution: "@opentelemetry/sdk-trace-web@npm:1.26.0" - dependencies: - "@opentelemetry/core": 1.26.0 - "@opentelemetry/sdk-trace-base": 1.26.0 - "@opentelemetry/semantic-conventions": 1.27.0 - peerDependencies: - "@opentelemetry/api": ">=1.0.0 <1.10.0" - checksum: d8e0ae8f9088723fc250874290923dc81933b279958f04beb79ca7e312bf66a79b823d92dd06be4e707d6919030c2998f8a18167a47ee7281e573b3ef3cc9e10 - languageName: node - linkType: hard - -"@opentelemetry/sdk-trace-web@npm:^1.15.0, @opentelemetry/sdk-trace-web@npm:^1.8.0": +"@opentelemetry/sdk-trace-web@npm:1.27.0, @opentelemetry/sdk-trace-web@npm:^1.15.0, @opentelemetry/sdk-trace-web@npm:^1.27.0, @opentelemetry/sdk-trace-web@npm:^1.8.0": version: 1.27.0 resolution: "@opentelemetry/sdk-trace-web@npm:1.27.0" dependencies: @@ -5203,13 +5081,6 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/semantic-conventions@npm:1.25.1": - version: 1.25.1 - resolution: "@opentelemetry/semantic-conventions@npm:1.25.1" - checksum: fea418a4b09c55121c6da11c49dd2105116533838c484aead17e8acf8029dad711e145849812f9c61f9e48fad8e2b6cf103d2c18847ca993032ce9b27c2f863d - languageName: node - linkType: hard - "@opentelemetry/semantic-conventions@npm:1.27.0, @opentelemetry/semantic-conventions@npm:^1.27.0": version: 1.27.0 resolution: "@opentelemetry/semantic-conventions@npm:1.27.0" @@ -11165,6 +11036,15 @@ __metadata: languageName: node linkType: hard +"@types/react-transition-group@npm:^4.4.11": + version: 4.4.11 + resolution: "@types/react-transition-group@npm:4.4.11" + dependencies: + "@types/react": "*" + checksum: a6e3b2e4363cb019e256ae4f19dadf9d7eb199da1a5e4109bbbf6a132821884044d332e9c74b520b1e5321a7f545502443fd1ce0b18649c8b510fa4220b0e5c2 + languageName: node + linkType: hard + "@types/react-window@npm:^1.8.2": version: 1.8.2 resolution: "@types/react-window@npm:1.8.2" @@ -11276,7 +11156,7 @@ __metadata: languageName: node linkType: hard -"@types/shimmer@npm:^1.0.2, @types/shimmer@npm:^1.2.0": +"@types/shimmer@npm:^1.2.0": version: 1.2.0 resolution: "@types/shimmer@npm:1.2.0" checksum: f081a31d826ce7bfe8cc7ba8129d2b1dffae44fd580eba4fcf741237646c4c2494ae6de2cada4b7713d138f35f4bc512dbf01311d813dee82020f97d7d8c491c @@ -12825,8 +12705,11 @@ __metadata: version: 0.0.0-use.local resolution: "appsmith-rts@workspace:packages/rts" dependencies: - "@opentelemetry/instrumentation-http": ^0.53.0 - "@opentelemetry/sdk-trace-node": ^1.26.0 + "@opentelemetry/exporter-trace-otlp-http": ^0.54.2 + "@opentelemetry/instrumentation": ^0.54.2 + "@opentelemetry/instrumentation-http": ^0.54.2 + "@opentelemetry/resources": ^1.27.0 + "@opentelemetry/sdk-trace-node": ^1.27.0 "@opentelemetry/semantic-conventions": ^1.27.0 "@shared/ast": "workspace:^" "@types/express": ^4.17.14 @@ -12877,16 +12760,16 @@ __metadata: "@newrelic/browser-agent": ^1.255.0 "@octokit/rest": ^20.0.1 "@opentelemetry/api": ^1.9.0 - "@opentelemetry/auto-instrumentations-web": ^0.41.0 - "@opentelemetry/context-zone": 1.25.1 - "@opentelemetry/core": ^1.26.0 - "@opentelemetry/exporter-metrics-otlp-http": 0.52.1 - "@opentelemetry/exporter-trace-otlp-proto": 0.52.1 - "@opentelemetry/instrumentation": 0.52.1 - "@opentelemetry/resources": 1.25.1 - "@opentelemetry/sdk-metrics": 1.25.1 - "@opentelemetry/sdk-trace-base": 1.25.1 - "@opentelemetry/sdk-trace-web": 1.25.1 + "@opentelemetry/auto-instrumentations-web": ^0.42.0 + "@opentelemetry/context-zone": ^1.27.0 + "@opentelemetry/core": ^1.27.0 + "@opentelemetry/exporter-metrics-otlp-http": ^0.54.2 + "@opentelemetry/exporter-trace-otlp-http": ^0.54.2 + "@opentelemetry/instrumentation": ^0.54.2 + "@opentelemetry/resources": ^1.27.0 + "@opentelemetry/sdk-metrics": ^1.27.0 + "@opentelemetry/sdk-trace-base": ^1.27.0 + "@opentelemetry/sdk-trace-web": ^1.27.0 "@opentelemetry/semantic-conventions": ^1.27.0 "@peculiar/webcrypto": ^1.4.3 "@react-spring/web": ^9.7.4 @@ -17115,6 +16998,16 @@ __metadata: languageName: node linkType: hard +"dom-helpers@npm:^5.0.1": + version: 5.2.1 + resolution: "dom-helpers@npm:5.2.1" + dependencies: + "@babel/runtime": ^7.8.7 + csstype: ^3.0.2 + checksum: 863ba9e086f7093df3376b43e74ce4422571d404fc9828bf2c56140963d5edf0e56160f9b2f3bb61b282c07f8fc8134f023c98fd684bddcb12daf7b0f14d951c + languageName: node + linkType: hard + "dom-serializer@npm:0": version: 0.2.2 resolution: "dom-serializer@npm:0.2.2" @@ -17398,8 +17291,8 @@ __metadata: linkType: hard "elliptic@npm:^6.5.3, elliptic@npm:^6.5.4": - version: 6.5.7 - resolution: "elliptic@npm:6.5.7" + version: 6.6.0 + resolution: "elliptic@npm:6.6.0" dependencies: bn.js: ^4.11.9 brorand: ^1.1.0 @@ -17408,7 +17301,7 @@ __metadata: inherits: ^2.0.4 minimalistic-assert: ^1.0.1 minimalistic-crypto-utils: ^1.0.1 - checksum: af0ffddffdbc2fea4eeec74388cd73e62ed5a0eac6711568fb28071566319785df529c968b0bf1250ba4bc628e074b2d64c54a633e034aa6f0c6b152ceb49ab8 + checksum: e912349b883e694bfe65005214237a470c9a098a6ba36fd24396d0ab07feb399920c0738aeed1aed6cf5dca9c64fd479e212faed3a75c9d81453671ef0de5157 languageName: node linkType: hard @@ -19417,6 +19310,13 @@ __metadata: languageName: node linkType: hard +"forwarded-parse@npm:2.1.2": + version: 2.1.2 + resolution: "forwarded-parse@npm:2.1.2" + checksum: fca4df8898248d123d9d29a9fdf48005dd757366c2c17c1e195e8311a9aa89caf9f5e592f58f7d3d635087675ff39e85c32c6205838510f6f1fa4109de519930 + languageName: node + linkType: hard + "forwarded@npm:0.2.0": version: 0.2.0 resolution: "forwarded@npm:0.2.0" @@ -29338,6 +29238,21 @@ __metadata: languageName: node linkType: hard +"react-transition-group@npm:^4.4.5": + version: 4.4.5 + resolution: "react-transition-group@npm:4.4.5" + dependencies: + "@babel/runtime": ^7.5.5 + dom-helpers: ^5.0.1 + loose-envify: ^1.4.0 + prop-types: ^15.6.2 + peerDependencies: + react: ">=16.6.0" + react-dom: ">=16.6.0" + checksum: 75602840106aa9c6545149d6d7ae1502fb7b7abadcce70a6954c4b64a438ff1cd16fc77a0a1e5197cdd72da398f39eb929ea06f9005c45b132ed34e056ebdeb1 + languageName: node + linkType: hard + "react-use-gesture@npm:^7.0.4": version: 7.0.16 resolution: "react-use-gesture@npm:7.0.16" diff --git a/deploy/docker/fs/opt/appsmith/caddy-reconfigure.mjs b/deploy/docker/fs/opt/appsmith/caddy-reconfigure.mjs index b4cc80762aed..87b7a42cb16f 100644 --- a/deploy/docker/fs/opt/appsmith/caddy-reconfigure.mjs +++ b/deploy/docker/fs/opt/appsmith/caddy-reconfigure.mjs @@ -38,6 +38,14 @@ if (CUSTOM_DOMAIN !== "") { const frameAncestorsPolicy = (process.env.APPSMITH_ALLOWED_FRAME_ANCESTORS || "'self'") .replace(/;.*$/, "") +const monitoringParts = [{ + path: "/monitoring/traces", + rewrite: "/v1/traces", +}, { + path: "/monitoring/metrics", + rewrite: "/v1/metrics", +}]; + const parts = [] parts.push(` @@ -139,6 +147,20 @@ parts.push(` import reverse_proxy 8091 } +${ + monitoringParts.map((telemetry) => ` + handle ${telemetry.path} { + @unauthorized not header api-key "${process.env.APPSMITH_NEW_RELIC_OTLP_LICENSE_KEY}" + respond @unauthorized "Forbidden" 403 + + @method_not_allowed not method POST + respond @method_not_allowed "Method Not Allowed" 405 + + rewrite * ${telemetry.rewrite} + import reverse_proxy 4318 + }`).join("\n") +} + redir /supervisor /supervisor/ handle_path /supervisor/* { import reverse_proxy 9001 diff --git a/deploy/docker/fs/opt/appsmith/utils/bin/import_db.js b/deploy/docker/fs/opt/appsmith/utils/bin/import_db.js index 0fdf31a087f1..cdb458d6bed0 100644 --- a/deploy/docker/fs/opt/appsmith/utils/bin/import_db.js +++ b/deploy/docker/fs/opt/appsmith/utils/bin/import_db.js @@ -1,47 +1,50 @@ -// Init function export mongodb -const shell = require('shelljs'); const readlineSync = require('readline-sync'); const process = require('process'); const Constants = require('./constants'); const utils = require('./utils'); - -function import_database() { - console.log('import_database ....') - dbUrl = utils.getDburl(); - const cmd = `mongorestore --uri='${dbUrl}' --drop --archive='${Constants.RESTORE_PATH}/${Constants.DUMP_FILE_NAME}' --gzip` - shell.exec(cmd) - console.log('import_database done') -} - -function stop_application() { - shell.exec('/usr/bin/supervisorctl stop backend rts') -} - -function start_application() { - shell.exec('/usr/bin/supervisorctl start backend rts') +async function importDatabase() { + console.log("Importing the database"); + try { + await utils.execCommand([ + "mongorestore", + "--uri=" + utils.getDburl(), + "--drop", + `--archive=${Constants.RESTORE_PATH}/${Constants.DUMP_FILE_NAME}`, + "--gzip", + ]); + } catch (error) { + console.error("Database import failed:", error); + throw error; + } + console.log("Imported the database successfully"); } // Main application workflow -const main = (forceOption) => { +async function run(forceOption) { let errorCode = 0 - try { - check_supervisord_status_cmd = '/usr/bin/supervisorctl' - shell.exec(check_supervisord_status_cmd, function (code) { - if (code > 0) { - console.log('application is not running, starting supervisord') - shell.exec('/usr/bin/supervisord') - } - }) + await utils.ensureSupervisorIsRunning(); + try { console.log('stop backend & rts application before import database') - stop_application() - const shellCmdResult = shell.exec(`mongo ${process.env.APPSMITH_DB_URL} --quiet --eval "db.getCollectionNames().length"`) + await utils.stop(["backend", "rts"]); + try { + const shellCmdResult = await utils.execCommandReturningOutput([ + "mongo", + process.env.APPSMITH_DB_URL, + "--quiet", + "--eval", + "db.getCollectionNames().length", + ]); + } catch (error) { + console.error("Failed to execute mongo command:", error); + throw error; + } const collectionsLen = parseInt(shellCmdResult.stdout.toString().trimEnd()) if (collectionsLen > 0) { if (forceOption) { - import_database() + await importDatabase() return } console.log() @@ -50,27 +53,25 @@ const main = (forceOption) => { const input = readlineSync.question('Importing this DB will erase this data. Are you sure you want to proceed?[Yes/No] ') const answer = input && input.toLocaleUpperCase() if (answer === 'Y' || answer === 'YES') { - import_database() + await importDatabase() return } else if (answer === 'N' || answer === 'NO') { return } console.log(`Your input is invalid. Please try to run import command again.`) - return } else { - import_database() - return + await importDatabase() } } catch (err) { console.log(err) errorCode = 1 } finally { console.log('start backend & rts application after import database') - start_application() + await utils.start(["backend", "rts"]); process.exit(errorCode) } } module.exports = { - runImportDatabase: main, + run, } diff --git a/deploy/docker/fs/opt/appsmith/utils/bin/index.js b/deploy/docker/fs/opt/appsmith/utils/bin/index.js index 9764a2d3ae26..a307792d1cd1 100755 --- a/deploy/docker/fs/opt/appsmith/utils/bin/index.js +++ b/deploy/docker/fs/opt/appsmith/utils/bin/index.js @@ -38,8 +38,13 @@ if (["import-db", "import_db", "im"].includes(command)) { console.log("Importing database"); // Get Force option flag to run import DB immediately const forceOption = process.argv[3] === "-f"; - import_db.runImportDatabase(forceOption); - console.log("Importing database done"); + try { + import_db.run(forceOption); + console.log("Importing database done"); + } catch (error) { + console.error("Failed to import database:", error.message); + process.exit(1); + } return; } diff --git a/deploy/docker/fs/opt/appsmith/utils/bin/utils.js b/deploy/docker/fs/opt/appsmith/utils/bin/utils.js index 319c3d1a72dd..e19b5092ef6d 100644 --- a/deploy/docker/fs/opt/appsmith/utils/bin/utils.js +++ b/deploy/docker/fs/opt/appsmith/utils/bin/utils.js @@ -91,6 +91,35 @@ function execCommand(cmd, options) { }); } +function execCommandReturningOutput(cmd, options) { + return new Promise((resolve, reject) => { + const p = childProcess.spawn(cmd[0], cmd.slice(1), options); + + p.stdin.end() + + const outChunks = [], errChunks = []; + + p.stdout.setEncoding("utf8"); + p.stdout.on("data", (data) => { + outChunks.push(data.toString()); + }); + + p.stderr.setEncoding("utf8"); + p.stderr.on("data", (data) => { + errChunks.push(data.toString()); + }) + + p.on("close", (code) => { + const output = (outChunks.join("").trim() + "\n" + errChunks.join("").trim()).trim(); + if (code === 0) { + resolve(output); + } else { + reject(output); + } + }); + }); +} + async function listLocalBackupFiles() { // Ascending order const backupFiles = []; @@ -196,6 +225,7 @@ module.exports = { start, stop, execCommand, + execCommandReturningOutput, listLocalBackupFiles, updateLastBackupErrorMailSentInMilliSec, getLastBackupErrorMailSentInMilliSec, diff --git a/deploy/docker/fs/opt/appsmith/utils/bin/utils.test.js b/deploy/docker/fs/opt/appsmith/utils/bin/utils.test.js index f707f2778c5b..5b96816e111a 100644 --- a/deploy/docker/fs/opt/appsmith/utils/bin/utils.test.js +++ b/deploy/docker/fs/opt/appsmith/utils/bin/utils.test.js @@ -1,6 +1,36 @@ const { describe, test, expect } = require("@jest/globals"); const utils = require("./utils"); + +describe("execCommandReturningOutput", () => { + + test("Output of echo", async () => { + const result = await utils.execCommandReturningOutput(["echo", "hello", "world"]); + expect(result).toBe("hello world"); + }); + + test("Node console out", async () => { + const result = await utils.execCommandReturningOutput(["node", "--eval", "console.log('to out')"]); + expect(result).toBe("to out"); + }); + + test("Node console err", async () => { + const result = await utils.execCommandReturningOutput(["node", "--eval", "console.error('to err')"]); + expect(result).toBe("to err"); + }); + + test("Node console out and err", async () => { + const result = await utils.execCommandReturningOutput(["node", "--eval", "console.log('to out'); console.error('to err')"]); + expect(result).toBe("to out\nto err"); + }); + + test("Node console err and out", async () => { + const result = await utils.execCommandReturningOutput(["node", "--eval", "console.error('to err'); console.log('to out')"]); + expect(result).toBe("to out\nto err"); + }); + +}); + describe("execCommandSilent", () => { test("Runs a command", async () => { diff --git a/deploy/docker/fs/opt/appsmith/utils/package-lock.json b/deploy/docker/fs/opt/appsmith/utils/package-lock.json index c051315082c3..39994d9bb27f 100644 --- a/deploy/docker/fs/opt/appsmith/utils/package-lock.json +++ b/deploy/docker/fs/opt/appsmith/utils/package-lock.json @@ -12,8 +12,7 @@ "dotenv": "10.0.0", "mongodb": "^5.8.0", "nodemailer": "6.9.9", - "readline-sync": "1.4.10", - "shelljs": "0.8.5" + "readline-sync": "1.4.10" }, "bin": { "appsmithctl": "bin/index.js" @@ -2426,7 +2425,8 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/bowser": { "version": "2.11.0", @@ -2439,6 +2439,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2646,7 +2647,8 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "node_modules/convert-source-map": { "version": "2.0.0", @@ -2933,7 +2935,8 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "node_modules/fsevents": { "version": "2.3.3", @@ -2952,7 +2955,8 @@ "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true }, "node_modules/gensync": { "version": "1.0.0-beta.2", @@ -2997,6 +3001,7 @@ "version": "7.1.7", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -3031,6 +3036,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "dependencies": { "function-bind": "^1.1.1" }, @@ -3094,6 +3100,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -3102,15 +3109,8 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "engines": { - "node": ">= 0.10" - } + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "node_modules/ip": { "version": "2.0.1", @@ -3127,6 +3127,7 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.5.0.tgz", "integrity": "sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg==", + "dev": true, "dependencies": { "has": "^1.0.3" }, @@ -3992,6 +3993,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -4105,6 +4107,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "dependencies": { "wrappy": "1" } @@ -4206,6 +4209,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -4222,7 +4226,8 @@ "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "node_modules/picocolors": { "version": "1.0.1", @@ -4340,17 +4345,6 @@ "node": ">= 0.8.0" } }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -4364,6 +4358,7 @@ "version": "1.20.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, "dependencies": { "is-core-module": "^2.2.0", "path-parse": "^1.0.6" @@ -4432,22 +4427,6 @@ "node": ">=8" } }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -4823,7 +4802,8 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "node_modules/write-file-atomic": { "version": "4.0.2", @@ -6890,7 +6870,8 @@ "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "bowser": { "version": "2.11.0", @@ -6903,6 +6884,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -7036,7 +7018,8 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "convert-source-map": { "version": "2.0.0", @@ -7237,7 +7220,8 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "fsevents": { "version": "2.3.3", @@ -7249,7 +7233,8 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true }, "gensync": { "version": "1.0.0-beta.2", @@ -7279,6 +7264,7 @@ "version": "7.1.7", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -7304,6 +7290,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -7346,6 +7333,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -7354,12 +7342,8 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "ip": { "version": "2.0.1", @@ -7376,6 +7360,7 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.5.0.tgz", "integrity": "sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg==", + "dev": true, "requires": { "has": "^1.0.3" } @@ -8031,6 +8016,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -8103,6 +8089,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "requires": { "wrappy": "1" } @@ -8172,7 +8159,8 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true }, "path-key": { "version": "3.1.1", @@ -8183,7 +8171,8 @@ "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "picocolors": { "version": "1.0.1", @@ -8263,14 +8252,6 @@ "resolved": "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.10.tgz", "integrity": "sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==" }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "requires": { - "resolve": "^1.1.6" - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -8281,6 +8262,7 @@ "version": "1.20.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, "requires": { "is-core-module": "^2.2.0", "path-parse": "^1.0.6" @@ -8328,16 +8310,6 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, - "shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, "signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -8607,7 +8579,8 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "write-file-atomic": { "version": "4.0.2", diff --git a/deploy/docker/fs/opt/appsmith/utils/package.json b/deploy/docker/fs/opt/appsmith/utils/package.json index 5e148f707b3e..a00ee800c592 100644 --- a/deploy/docker/fs/opt/appsmith/utils/package.json +++ b/deploy/docker/fs/opt/appsmith/utils/package.json @@ -15,8 +15,7 @@ "dotenv": "10.0.0", "mongodb": "^5.8.0", "nodemailer": "6.9.9", - "readline-sync": "1.4.10", - "shelljs": "0.8.5" + "readline-sync": "1.4.10" }, "devDependencies": { "jest": "^29.7.0"
This is an example of sheet content.