diff --git a/app/client/cypress/integration/Regression_TestSuite/Application/EchoApiCMS_spec.js b/app/client/cypress/integration/Regression_TestSuite/Application/EchoApiCMS_spec.js
index 2629a298f20e..5cb429c90e50 100644
--- a/app/client/cypress/integration/Regression_TestSuite/Application/EchoApiCMS_spec.js
+++ b/app/client/cypress/integration/Regression_TestSuite/Application/EchoApiCMS_spec.js
@@ -82,7 +82,7 @@ describe("Content Management System App", function () {
.find("textarea")
.type("Task completed", { force: true });
cy.get(appPage.confirmButton).closest("div").click({ force: true });
- cy.get(appPage.closeButton).closest("div").click({ force: true });
+ cy.get(appPage.closeButton).eq(0).closest("div").click({ force: true });
cy.xpath(appPage.pagebutton).click({ force: true });
//cy.xpath(appPage.datasourcesbutton).click({ force: true });
cy.CheckAndUnfoldEntityItem("Queries/JS");
diff --git a/app/client/cypress/integration/Regression_TestSuite/ClientSideTests/OtherUIFeatures/PageOnLoad_spec.ts b/app/client/cypress/integration/Regression_TestSuite/ClientSideTests/OtherUIFeatures/PageOnLoad_spec.ts
index 8eae5736182d..c5329b063f07 100644
--- a/app/client/cypress/integration/Regression_TestSuite/ClientSideTests/OtherUIFeatures/PageOnLoad_spec.ts
+++ b/app/client/cypress/integration/Regression_TestSuite/ClientSideTests/OtherUIFeatures/PageOnLoad_spec.ts
@@ -9,6 +9,7 @@ describe("Check debugger logs state when there are onPageLoad actions", function
before(() => {
cy.addDsl(dsl);
});
+
it("1. Check debugger logs state when there are onPageLoad actions", function () {
cy.openPropertyPane("tablewidget");
cy.testJsontext("tabledata", "{{TestApi.data.users}}");
diff --git a/app/client/cypress/integration/Regression_TestSuite/ClientSideTests/Widgets/ListV2/Listv2_dataIdentifierProperty_spec.js b/app/client/cypress/integration/Regression_TestSuite/ClientSideTests/Widgets/ListV2/Listv2_dataIdentifierProperty_spec.js
index ae19ee221c02..5643c1ee36ac 100644
--- a/app/client/cypress/integration/Regression_TestSuite/ClientSideTests/Widgets/ListV2/Listv2_dataIdentifierProperty_spec.js
+++ b/app/client/cypress/integration/Regression_TestSuite/ClientSideTests/Widgets/ListV2/Listv2_dataIdentifierProperty_spec.js
@@ -3,10 +3,9 @@ const simpleListWithLargeDataDSL = require("../../../../../fixtures/Listv2/simpl
const ListV2WithNullPrimaryKeyDSL = require("../../../../../fixtures/Listv2/ListV2WithNullPrimaryKey.json");
const widgetsPage = require("../../../../../locators/Widgets.json");
const commonlocators = require("../../../../../locators/commonlocators.json");
-import { ObjectsRegistry } from "../../../../../support/Objects/Registry";
+import * as _ from "../../../../../support/Objects/ObjectsCore";
const propertyControl = ".t--property-control";
-const agHelper = ObjectsRegistry.AggregateHelper;
const widgetSelector = (name) => `[data-widgetname-cy="${name}"]`;
@@ -43,11 +42,11 @@ const data = [
describe("List v2 - Data Identifier property", () => {
beforeEach(() => {
- agHelper.RestoreLocalStorageCache();
+ _.agHelper.RestoreLocalStorageCache();
});
afterEach(() => {
- agHelper.SaveLocalStorageCache();
+ _.agHelper.SaveLocalStorageCache();
});
it("1. is present in the property pane", () => {
@@ -176,21 +175,20 @@ describe("List v2 - Data Identifier property", () => {
it("8. pagination should work for non unique data identifier", () => {
cy.get(".rc-pagination").find("a").contains("2").click({ force: true });
-
cy.get(widgetsPage.containerWidget).should("have.length", 2);
});
it("9. Widgets get displayed when PrimaryKey doesn't exist - SSP", () => {
cy.addDsl(ListV2WithNullPrimaryKeyDSL);
- cy.createAndFillApi(
+ _.apiPage.CreateAndFillApi(
"https://api.punkapi.com/v2/beers?page={{List1.pageNo}}&per_page={{List1.pageSize}}",
- "",
);
- cy.RunAPI();
- cy.SearchEntityandOpen("List1");
- cy.openPropertyPaneByWidgetName("Text2", "textwidget");
-
- cy.testJsontext("text", "{{currentIndex}}");
+ _.apiPage.RunAPI();
+ _.entityExplorer.ExpandCollapseEntity("Widgets");
+ _.entityExplorer.ExpandCollapseEntity("List1");
+ _.entityExplorer.ExpandCollapseEntity("Container1");
+ _.entityExplorer.SelectEntityByName("Text2");
+ _.propPane.UpdatePropertyFieldValue("Text", "{{currentIndex}}");
cy.get(`${widgetSelector("Text2")} ${commonlocators.bodyTextStyle}`)
.first()
@@ -207,9 +205,11 @@ describe("List v2 - Data Identifier property", () => {
});
it("10. Widgets get displayed when PrimaryKey doesn't exist - Client-Side Pagination", () => {
- cy.openPropertyPaneByWidgetName("Text4", "textwidget");
-
- cy.testJsontext("text", "{{currentIndex}}");
+ _.entityExplorer.ExpandCollapseEntity("Widgets");
+ _.entityExplorer.ExpandCollapseEntity("List2");
+ _.entityExplorer.ExpandCollapseEntity("Container2");
+ _.entityExplorer.SelectEntityByName("Text4");
+ _.propPane.UpdatePropertyFieldValue("Text", "{{currentIndex}}");
cy.get(`${widgetSelector("Text4")} ${commonlocators.bodyTextStyle}`)
.first()
@@ -233,14 +233,10 @@ describe("List v2 - Data Identifier property", () => {
});
it("11. Non unique data identifier should throw error- (data type issue)", () => {
- cy.openPropertyPaneByWidgetName("List2", "listwidgetv2");
-
- testJsontextClear("items");
-
- cy.testJsontext("items", JSON.stringify(data));
-
+ _.entityExplorer.SelectEntityByName("List2");
+ _.propPane.UpdatePropertyFieldValue("Items", JSON.stringify(data));
+ _.propPane.UpdatePropertyFieldValue("Data Identifier", "");
// clicking on the data identifier dropdown
- testJsontextClear("dataidentifier");
cy.get(`${propertyControl}-dataidentifier`)
.find(".t--js-toggle")
.click({ force: true });
diff --git a/app/client/cypress/integration/Regression_TestSuite/ServerSideTests/QueryPane/Mongo_Spec.ts b/app/client/cypress/integration/Regression_TestSuite/ServerSideTests/QueryPane/Mongo_Spec.ts
index 463981de5341..e789b6365efe 100644
--- a/app/client/cypress/integration/Regression_TestSuite/ServerSideTests/QueryPane/Mongo_Spec.ts
+++ b/app/client/cypress/integration/Regression_TestSuite/ServerSideTests/QueryPane/Mongo_Spec.ts
@@ -36,6 +36,7 @@ describe("Validate Mongo Query Pane Validations", () => {
dataSources.CreateDataSource("Mongo", false);
agHelper.ValidateNetworkStatus("@getDatasourceStructure"); //Making sure table dropdown is populated
+ agHelper.Sleep();
agHelper.GetNClick(dataSources._selectTableDropdown);
agHelper.GetNClickByContains(dataSources._dropdownOption, "friends");
diff --git a/app/client/cypress/support/ApiCommands.js b/app/client/cypress/support/ApiCommands.js
index a1332a61c880..83a615c69f68 100644
--- a/app/client/cypress/support/ApiCommands.js
+++ b/app/client/cypress/support/ApiCommands.js
@@ -9,6 +9,9 @@ const commonlocators = require("../locators/commonlocators.json");
const apiwidget = require("../locators/apiWidgetslocator.json");
const explorer = require("../locators/explorerlocators.json");
+import { ObjectsRegistry } from "../support/Objects/Registry";
+let agHelper = ObjectsRegistry.AggregateHelper;
+
export const initLocalstorage = () => {
cy.window().then((window) => {
window.localStorage.setItem("ShowCommentsButtonToolTip", "");
@@ -59,7 +62,7 @@ Cypress.Commands.add("CreateAPI", (apiname) => {
cy.wait("@createNewApi");
cy.get(apiwidget.resourceUrl).should("be.visible");
if (apiname) {
- cy.renameWithInPane(apiname);
+ agHelper.RenameWithInPane(apiname);
cy.WaitAutoSave();
}
// Added because api name edit takes some time to
diff --git a/app/client/cypress/support/Objects/CommonLocators.ts b/app/client/cypress/support/Objects/CommonLocators.ts
index 0d8ff0db992b..02a807438171 100644
--- a/app/client/cypress/support/Objects/CommonLocators.ts
+++ b/app/client/cypress/support/Objects/CommonLocators.ts
@@ -4,6 +4,8 @@ export class CommonLocators {
_loading = "#loading";
_spinner = ".bp3-spinner";
_runBtnSpinner = ".cs-spinner";
+ _querytargetNameEdit = "div.t--action-name-edit-field";
+ _dstargetNameEdit = "div.t--edit-datasource-name";
_queryName = ".t--action-name-edit-field span";
_queryNameTxt = ".t--action-name-edit-field input";
_emptyCanvasCta = "[data-cy='canvas-ctas']";
diff --git a/app/client/cypress/support/Pages/AggregateHelper.ts b/app/client/cypress/support/Pages/AggregateHelper.ts
index f45fdbe39f22..5ced54bd87e3 100644
--- a/app/client/cypress/support/Pages/AggregateHelper.ts
+++ b/app/client/cypress/support/Pages/AggregateHelper.ts
@@ -111,9 +111,19 @@ export class AggregateHelper {
}
public RenameWithInPane(renameVal: string, IsQuery = true) {
+ const target = IsQuery
+ ? this.locator._querytargetNameEdit
+ : this.locator._dstargetNameEdit;
const name = IsQuery ? this.locator._queryName : this.locator._dsName;
const text = IsQuery ? this.locator._queryNameTxt : this.locator._dsNameTxt;
- this.GetNClick(name, 0, true);
+ this.GetElement(target)
+ .invoke("attr", "class")
+ .then((classes: any) => {
+ if (!classes.includes("bp3-editable-text-editing")) {
+ this.GetNClick(name, 0, true);
+ }
+ });
+
cy.get(text)
.clear({ force: true })
.type(renameVal, { force: true, delay: 0 })
diff --git a/app/client/cypress/support/Pages/HomePage.ts b/app/client/cypress/support/Pages/HomePage.ts
index b3fa1bf1e994..52aeeabd054c 100644
--- a/app/client/cypress/support/Pages/HomePage.ts
+++ b/app/client/cypress/support/Pages/HomePage.ts
@@ -163,7 +163,8 @@ export class HomePage {
"//span[text()='Users will have access to all applications in this workspace']",
);
cy.xpath(this._email).click({ force: true }).type(email);
- cy.xpath(this._selectRole).first().click({ force: true });
+ this.agHelper.PressEnter();
+ cy.xpath(this._selectRole).first().click();
this.agHelper.Sleep(500);
cy.xpath(this._userRole(role)).click({ force: true });
this.agHelper.ClickButton("Invite");
diff --git a/app/client/cypress_ci.json b/app/client/cypress_ci.json
index 9ad65f1668ed..a4c1d982da89 100644
--- a/app/client/cypress_ci.json
+++ b/app/client/cypress_ci.json
@@ -17,7 +17,7 @@
"viewportHeight": 1100,
"viewportWidth": 1400,
"retries": {
- "runMode": 1,
+ "runMode": 0,
"openMode": 0
}
}
diff --git a/app/client/package.json b/app/client/package.json
index 4c77efd8eba6..3122008f77c7 100644
--- a/app/client/package.json
+++ b/app/client/package.json
@@ -129,7 +129,7 @@
"rc-select": "^14.1.9",
"rc-tree-select": "^5.4.0",
"re-reselect": "^3.4.0",
- "react": "^17.0.2",
+ "react": "^18.2.0",
"react-append-to-body": "^2.0.26",
"react-beautiful-dnd": "^12.2.0",
"react-custom-scrollbars": "^4.2.1",
@@ -138,7 +138,7 @@
"react-dnd-html5-backend": "^9.3.4",
"react-dnd-touch-backend": "^9.4.0",
"react-documents": "^1.0.4",
- "react-dom": "^17.0.2",
+ "react-dom": "^18.2.0",
"react-full-screen": "^1.1.0",
"react-fusioncharts": "^3.1.2",
"react-google-recaptcha": "^2.1.0",
@@ -233,7 +233,7 @@
"@types/react": "^17.0.2",
"@types/react-beautiful-dnd": "^11.0.4",
"@types/react-custom-scrollbars": "^4.0.7",
- "@types/react-dom": "^17.0.2",
+ "@types/react-dom": "^18.0.11",
"@types/react-google-recaptcha": "^2.1.1",
"@types/react-helmet": "^5.0.14",
"@types/react-instantsearch-dom": "^6.3.0",
@@ -244,7 +244,7 @@
"@types/react-syntax-highlighter": "^13.5.2",
"@types/react-table": "^7.0.13",
"@types/react-tabs": "^2.3.1",
- "@types/react-test-renderer": "^17.0.1",
+ "@types/react-test-renderer": "^18.0.0",
"@types/react-window": "^1.8.2",
"@types/redux-form": "^8.1.9",
"@types/redux-mock-store": "^1.0.2",
@@ -300,7 +300,7 @@
"prop-types": "^15.8.1",
"raw-loader": "^4.0.2",
"react-is": "^16.12.0",
- "react-test-renderer": "^16.11.0",
+ "react-test-renderer": "^18.2.0",
"redux-devtools": "^3.5.0",
"redux-devtools-extension": "^2.13.8",
"redux-mock-store": "^1.5.4",
diff --git a/app/client/packages/storybook/package.json b/app/client/packages/storybook/package.json
index 2862580a4a89..1c078e58b5f3 100644
--- a/app/client/packages/storybook/package.json
+++ b/app/client/packages/storybook/package.json
@@ -26,7 +26,7 @@
"@storybook/react": "^6.5.16",
"@storybook/testing-library": "^0.0.13",
"@types/react": "^17.0.2",
- "@types/react-dom": "^17.0.2",
+ "@types/react-dom": "^18.0.11",
"autoprefixer": "^9.0.0",
"babel-loader": "^8.3.0",
"postcss": "^8",
diff --git a/app/client/src/index.tsx b/app/client/src/index.tsx
index 3217132747cd..162887bb1b55 100755
--- a/app/client/src/index.tsx
+++ b/app/client/src/index.tsx
@@ -1,6 +1,6 @@
import React from "react";
import "./wdyr";
-import ReactDOM from "react-dom";
+import { createRoot } from "react-dom/client";
import { Provider } from "react-redux";
import "./index.css";
import { ThemeProvider } from "styled-components";
@@ -67,7 +67,9 @@ const mapStateToProps = (state: AppState) => ({
const ThemedAppWithProps = connect(mapStateToProps)(ThemedApp);
-ReactDOM.render(, document.getElementById("root"));
+const container = document.getElementById("root") as HTMLElement;
+const root = createRoot(container);
+root.render();
// expose store when run in Cypress
if ((window as any).Cypress) {
diff --git a/app/client/yarn.lock b/app/client/yarn.lock
index 23a70b0e3033..e2e807cb3957 100644
--- a/app/client/yarn.lock
+++ b/app/client/yarn.lock
@@ -6184,12 +6184,12 @@
dependencies:
"@types/react" "*"
-"@types/react-dom@^17.0.2":
- version "17.0.18"
- resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.18.tgz#8f7af38f5d9b42f79162eea7492e5a1caff70dc2"
- integrity sha512-rLVtIfbwyur2iFKykP2w0pl/1unw26b5td16d5xMgp7/yjTHomkyxPYChFoCr/FtEX1lN9wY6lFj1qvKdS5kDw==
+"@types/react-dom@^18.0.11":
+ version "18.0.11"
+ resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.11.tgz#321351c1459bc9ca3d216aefc8a167beec334e33"
+ integrity sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==
dependencies:
- "@types/react" "^17"
+ "@types/react" "*"
"@types/react-google-recaptcha@^2.1.1":
version "2.1.1"
@@ -6290,12 +6290,19 @@
dependencies:
"@types/react" "*"
-"@types/react-test-renderer@>=16.9.0", "@types/react-test-renderer@^17.0.1":
+"@types/react-test-renderer@>=16.9.0":
version "17.0.1"
resolved "https://registry.npmjs.org/@types/react-test-renderer/-/react-test-renderer-17.0.1.tgz"
dependencies:
"@types/react" "*"
+"@types/react-test-renderer@^18.0.0":
+ version "18.0.0"
+ resolved "https://registry.yarnpkg.com/@types/react-test-renderer/-/react-test-renderer-18.0.0.tgz#7b7f69ca98821ea5501b21ba24ea7b6139da2243"
+ integrity sha512-C7/5FBJ3g3sqUahguGi03O79b8afNeSD6T8/GU50oQrJCU0bVCCGQHaGKUbg2Ce8VQEEqTw8/HiS6lXHHdgkdQ==
+ dependencies:
+ "@types/react" "*"
+
"@types/react-transition-group@*":
version "4.4.0"
resolved "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.0.tgz"
@@ -6340,7 +6347,7 @@
"@types/scheduler" "*"
csstype "^3.0.2"
-"@types/react@^17", "@types/react@^17.0.2":
+"@types/react@^17.0.2":
version "17.0.52"
resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.52.tgz#10d8b907b5c563ac014a541f289ae8eaa9bf2e9b"
integrity sha512-vwk8QqVODi0VaZZpDXQCmEmiOuyjEFPY7Ttaw5vjM112LOq37yz1CDJGrRJwA1fYEq4Iitd5rnjd1yWAc/bT+A==
@@ -18055,6 +18062,14 @@ react-dom@^17.0.2:
object-assign "^4.1.1"
scheduler "^0.20.2"
+react-dom@^18.2.0:
+ version "18.2.0"
+ resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d"
+ integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==
+ dependencies:
+ loose-envify "^1.1.0"
+ scheduler "^0.23.0"
+
react-element-to-jsx-string@^14.3.4:
version "14.3.4"
resolved "https://registry.yarnpkg.com/react-element-to-jsx-string/-/react-element-to-jsx-string-14.3.4.tgz#709125bc72f06800b68f9f4db485f2c7d31218a8"
@@ -18157,10 +18172,15 @@ react-is@17.0.2:
resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"
integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==
-react-is@^16.12.0, react-is@^16.13.1, react-is@^16.4.2, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.6, react-is@^16.9.0:
+react-is@^16.12.0, react-is@^16.13.1, react-is@^16.4.2, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.9.0:
version "16.13.1"
resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz"
+"react-is@^16.12.0 || ^17.0.0 || ^18.0.0", react-is@^18.2.0:
+ version "18.2.0"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b"
+ integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==
+
react-is@^17.0.1:
version "17.0.1"
resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz"
@@ -18413,6 +18433,14 @@ react-select@^3.0.8:
react-input-autosize "^2.2.2"
react-transition-group "^4.3.0"
+react-shallow-renderer@^16.15.0:
+ version "16.15.0"
+ resolved "https://registry.yarnpkg.com/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz#48fb2cf9b23d23cde96708fe5273a7d3446f4457"
+ integrity sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==
+ dependencies:
+ object-assign "^4.1.1"
+ react-is "^16.12.0 || ^17.0.0 || ^18.0.0"
+
react-side-effect@^1.1.0:
version "1.2.0"
resolved "https://registry.npmjs.org/react-side-effect/-/react-side-effect-1.2.0.tgz"
@@ -18460,14 +18488,14 @@ react-tabs@^3.0.0:
clsx "^1.1.0"
prop-types "^15.5.0"
-react-test-renderer@^16.11.0:
- version "16.13.1"
- resolved "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.13.1.tgz"
+react-test-renderer@^18.2.0:
+ version "18.2.0"
+ resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-18.2.0.tgz#1dd912bd908ff26da5b9fca4fd1c489b9523d37e"
+ integrity sha512-JWD+aQ0lh2gvh4NM3bBM42Kx+XybOxCpgYK7F8ugAlpaTSnWsX+39Z4XkOykGZAHrjwwTZT3x3KxswVWxHPUqA==
dependencies:
- object-assign "^4.1.1"
- prop-types "^15.6.2"
- react-is "^16.8.6"
- scheduler "^0.19.1"
+ react-is "^18.2.0"
+ react-shallow-renderer "^16.15.0"
+ scheduler "^0.23.0"
react-textarea-autosize@^8.3.2:
version "8.3.4"
@@ -18552,6 +18580,13 @@ react@^17.0.2:
loose-envify "^1.1.0"
object-assign "^4.1.1"
+react@^18.2.0:
+ version "18.2.0"
+ resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5"
+ integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==
+ dependencies:
+ loose-envify "^1.1.0"
+
read-cache@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774"
@@ -19348,13 +19383,6 @@ saxes@^5.0.1:
dependencies:
xmlchars "^2.2.0"
-scheduler@^0.19.1:
- version "0.19.1"
- resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz"
- dependencies:
- loose-envify "^1.1.0"
- object-assign "^4.1.1"
-
scheduler@^0.20.2:
version "0.20.2"
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91"
@@ -19363,6 +19391,13 @@ scheduler@^0.20.2:
loose-envify "^1.1.0"
object-assign "^4.1.1"
+scheduler@^0.23.0:
+ version "0.23.0"
+ resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe"
+ integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==
+ dependencies:
+ loose-envify "^1.1.0"
+
schema-utils@2.7.0:
version "2.7.0"
resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz"