Merge branch 'develop' of github.com:Budibase/budibase into cheeks-lab-day-portal-redesign

This commit is contained in:
Andrew Kingston 2023-01-06 15:22:28 +00:00
commit 395b4d7ad8
41 changed files with 3613 additions and 1629 deletions

View File

@ -17,7 +17,7 @@ version: 0.0.0
appVersion: 0.0.0
dependencies:
- name: couchdb
version: 3.6.1
version: 3.3.4
repository: https://apache.github.io/couchdb-helm
condition: services.couchdb.enabled
- name: ingress-nginx

File diff suppressed because it is too large Load Diff

View File

@ -78,7 +78,7 @@ mkdir -p ${DATA_DIR}/search
chown -R couchdb:couchdb ${DATA_DIR}/couch
redis-server --requirepass $REDIS_PASSWORD > /dev/stdout 2>&1 &
/opt/clouseau/bin/clouseau > /dev/stdout 2>&1 &
/minio/minio server ${DATA_DIR}/minio > /dev/stdout 2>&1 &
/minio/minio server --console-address ":9001" ${DATA_DIR}/minio > /dev/stdout 2>&1 &
/docker-entrypoint.sh /opt/couchdb/bin/couchdb &
/etc/init.d/nginx restart
if [[ ! -z "${CUSTOM_DOMAIN}" ]]; then

View File

@ -1,5 +1,5 @@
{
"version": "2.2.10-alpha.7",
"version": "2.2.11-alpha.1",
"npmClient": "yarn",
"packages": [
"packages/*"

View File

@ -1,6 +1,6 @@
{
"name": "@budibase/backend-core",
"version": "2.2.10-alpha.7",
"version": "2.2.11-alpha.1",
"description": "Budibase backend core libraries used in server and worker",
"main": "dist/src/index.js",
"types": "dist/src/index.d.ts",
@ -23,7 +23,7 @@
},
"dependencies": {
"@budibase/nano": "10.1.1",
"@budibase/types": "2.2.10-alpha.7",
"@budibase/types": "2.2.11-alpha.1",
"@shopify/jest-koa-mocks": "5.0.1",
"@techpass/passport-openidconnect": "0.3.2",
"aws-cloudfront-sign": "2.2.0",
@ -35,7 +35,7 @@
"emitter-listener": "1.1.2",
"ioredis": "4.28.0",
"joi": "17.6.0",
"jsonwebtoken": "8.5.1",
"jsonwebtoken": "9.0.0",
"koa-passport": "4.1.4",
"lodash": "4.17.21",
"lodash.isarguments": "3.1.0",

View File

@ -329,9 +329,9 @@ export const deleteFile = async (bucketName: string, filepath: string) => {
await makeSureBucketExists(objectStore, bucketName)
const params = {
Bucket: bucketName,
Key: filepath,
Key: sanitizeKey(filepath),
}
return objectStore.deleteObject(params)
return objectStore.deleteObject(params).promise()
}
export const deleteFiles = async (bucketName: string, filepaths: string[]) => {
@ -340,7 +340,7 @@ export const deleteFiles = async (bucketName: string, filepaths: string[]) => {
const params = {
Bucket: bucketName,
Delete: {
Objects: filepaths.map((path: any) => ({ Key: path })),
Objects: filepaths.map((path: any) => ({ Key: sanitizeKey(path) })),
},
}
return objectStore.deleteObjects(params).promise()

View File

@ -482,6 +482,11 @@
qs "^6.11.0"
tough-cookie "^4.1.2"
"@budibase/types@2.2.10-alpha.13":
version "2.2.10-alpha.13"
resolved "https://registry.yarnpkg.com/@budibase/types/-/types-2.2.10-alpha.13.tgz#abc1a5bd9295a0fa63db67912c6520d12e8d6f66"
integrity sha512-XRmLQXCLKdOADxEoGB3h4QOrHlPIqbk9jOSxyOK2RDQIy8NdQ+aXanPw3TEHkgrDIYxrClVcf4KXrujqNnrk6g==
"@cspotcode/source-map-support@^0.8.0":
version "0.8.1"
resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1"
@ -3546,11 +3551,21 @@ json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1:
integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==
json5@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c"
integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==
version "2.2.3"
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
jsonwebtoken@8.5.1, jsonwebtoken@^8.2.0:
jsonwebtoken@9.0.0:
version "9.0.0"
resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz#d0faf9ba1cc3a56255fe49c0961a67e520c1926d"
integrity sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==
dependencies:
jws "^3.2.2"
lodash "^4.17.21"
ms "^2.1.1"
semver "^7.3.8"
jsonwebtoken@^8.2.0:
version "8.5.1"
resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d"
integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==
@ -5002,13 +5017,20 @@ semver-diff@^3.1.1:
dependencies:
semver "^6.3.0"
semver@7.3.7, semver@7.x, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5:
semver@7.3.7:
version "7.3.7"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f"
integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==
dependencies:
lru-cache "^6.0.0"
semver@7.x, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.8:
version "7.3.8"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798"
integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==
dependencies:
lru-cache "^6.0.0"
semver@^5.6.0, semver@^5.7.1:
version "5.7.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"

View File

@ -1,7 +1,7 @@
{
"name": "@budibase/bbui",
"description": "A UI solution used in the different Budibase projects.",
"version": "2.2.10-alpha.7",
"version": "2.2.11-alpha.1",
"license": "MPL-2.0",
"svelte": "src/index.js",
"module": "dist/bbui.es.js",
@ -38,7 +38,7 @@
],
"dependencies": {
"@adobe/spectrum-css-workflow-icons": "1.2.1",
"@budibase/string-templates": "2.2.10-alpha.7",
"@budibase/string-templates": "2.2.11-alpha.1",
"@spectrum-css/actionbutton": "1.0.1",
"@spectrum-css/actiongroup": "1.0.1",
"@spectrum-css/avatar": "3.0.2",

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,7 @@ import filterTests from "../../support/filterTests"
const interact = require('../../support/interact')
filterTests(["smoke", "all"], () => {
context("Account Portals", () => {
xcontext("Account Portals", () => {
const bbUserEmail = "bbuser@test.com"
@ -44,7 +44,7 @@ filterTests(["smoke", "all"], () => {
//cy.logoutNoAppGrid()
})
it("should verify Standard Portal", () => {
xit("should verify Standard Portal", () => {
// Development access should be disabled (Admin access is already disabled)
cy.login()
cy.setUserRole("bbuser", "App User")

View File

@ -3,100 +3,101 @@ import { APP_TABLE_APP_NAME, DEPLOY_SUCCESS_MODAL } from "../support/interact";
const interact = require('../support/interact')
filterTests(['all'], () => {
context("Publish Application Workflow", () => {
xcontext("Publish Application Workflow", () => {
before(() => {
cy.login()
cy.deleteAllApps()
cy.createApp("Cypress Tests", false)
})
it("Should reflect the unpublished status correctly", () => {
xit("Should reflect the unpublished status correctly", () => {
cy.visit(`${Cypress.config().baseUrl}/builder`, { timeout: 5000 })
cy.get(interact.APP_TABLE_STATUS, { timeout: 3000 }).eq(0)
.within(() => {
cy.contains("Unpublished")
cy.get(interact.GLOBESTRIKE).should("exist")
})
.within(() => {
cy.contains("Unpublished")
cy.get(interact.GLOBESTRIKE).should("exist")
})
cy.get(interact.APP_TABLE_ROW_ACTION).eq(0)
.within(() => {
cy.get(interact.SPECTRUM_BUTTON_TEMPLATE).contains("Edit").click({ force: true })
})
.within(() => {
cy.get(interact.SPECTRUM_BUTTON_TEMPLATE).contains("Edit").click({ force: true })
})
cy.get(interact.DEPLOYMENT_TOP_NAV_GLOBESTRIKE).should("exist")
cy.get(interact.DEPLOYMENT_TOP_GLOBE).should("not.exist")
})
it("Should publish an application and correctly reflect that", () => {
xit("Should publish an application and correctly reflect that", () => {
//Assuming the previous test was run and the unpublished app is open in edit mode.
cy.get(interact.TOPRIGHTNAV_BUTTON_SPECTRUM).contains("Publish").click({ force : true })
cy.get(interact.TOPRIGHTNAV_BUTTON_SPECTRUM).contains("Publish").click({ force: true })
cy.get(interact.DEPLOY_APP_MODAL).should("be.visible")
.within(() => {
cy.get(interact.SPECTRUM_BUTTON).contains("Publish").click({ force : true })
});
.within(() => {
cy.get(interact.SPECTRUM_BUTTON).contains("Publish").click({ force: true })
});
//Verify that the app url is presented correctly to the user
cy.get(interact.DEPLOY_SUCCESS_MODAL, { timeout: 1000 })
.should("be.visible")
.within(() => {
let appUrl = Cypress.config().baseUrl + '/app/cypress-tests'
cy.get(interact.DEPLOY_APP_URL_INPUT).should('have.value', appUrl)
cy.get(interact.SPECTRUM_BUTTON).contains("Done").click({ force: true })
})
.should("be.visible")
.within(() => {
let appUrl = Cypress.config().baseUrl + '/app/cypress-tests'
cy.get(interact.DEPLOY_APP_URL_INPUT).should('have.value', appUrl)
cy.get(interact.SPECTRUM_BUTTON).contains("Done").click({ force: true })
})
cy.visit(`${Cypress.config().baseUrl}/builder`)
cy.get(interact.APP_TABLE_STATUS, { timeout: 3000 }).eq(0)
.within(() => {
cy.contains("Published")
cy.get(interact.GLOBE).should("exist")
})
.within(() => {
cy.contains("Published")
cy.get(interact.GLOBE).should("exist")
})
cy.get(interact.APP_TABLE_ROW_ACTION).eq(0)
.within(() => {
cy.get(interact.SPECTRUM_BUTTON).contains("Manage")
cy.get(interact.SPECTRUM_BUTTON).contains("Edit").click({ force: true })
})
.within(() => {
cy.get(interact.SPECTRUM_BUTTON).contains("Manage")
cy.get(interact.SPECTRUM_BUTTON).contains("Edit").click({ force: true })
})
cy.get(interact.DEPLOYMENT_TOP_GLOBE).should("exist").click({ force: true })
cy.get(interact.PUBLISH_POPOVER_MENU).should("be.visible")
.within(() => {
cy.get(interact.PUBLISH_POPOVER_ACTION).should("exist")
cy.get("button").contains("View app").should("exist")
cy.get(interact.PUBLISH_POPOVER_MESSAGE).should("have.text", "Last published a few seconds ago")
})
.within(() => {
cy.get(interact.PUBLISH_POPOVER_ACTION).should("exist")
cy.get("button").contains("View app").should("exist")
cy.get(interact.PUBLISH_POPOVER_MESSAGE).should("have.text", "Last published a few seconds ago")
})
})
it("Should unpublish an application using the link and reflect the status change", () => {
xit("Should unpublish an application using the link and reflect the status change", () => {
//Assuming the previous test app exists and is published
cy.visit(`${Cypress.config().baseUrl}/builder`, { timeout: 5000 })
cy.get(interact.APP_TABLE_STATUS).eq(0)
.within(() => {
cy.contains("Published")
cy.get("svg[aria-label='Globe']").should("exist")
})
.within(() => {
cy.contains("Published")
cy.get("svg[aria-label='Globe']").should("exist")
})
cy.get(interact.APP_TABLE).eq(0)
.within(() => {
cy.get(interact.APP_TABLE_APP_NAME).click({ force: true })
})
.within(() => {
cy.get(interact.APP_TABLE_APP_NAME).click({ force: true })
})
cy.get(interact.DEPLOYMENT_TOP_GLOBE).should("exist").click({ force: true })
cy.get("[data-cy='publish-popover-menu']")
.within(() => {
cy.get(interact.PUBLISH_POPOVER_ACTION).click({ force: true })
})
.within(() => {
cy.get(interact.PUBLISH_POPOVER_ACTION).click({ force: true })
})
cy.get(interact.UNPUBLISH_MODAL).should("be.visible")
.within(() => {
cy.get(interact.CONFIRM_WRAP_BUTTON).click({ force: true }
)})
.within(() => {
cy.get(interact.CONFIRM_WRAP_BUTTON).click({ force: true }
)
})
cy.visit(`${Cypress.config().baseUrl}/builder`, { timeout: 6000 })
cy.wait(500)

View File

@ -2,7 +2,7 @@ import filterTests from "../support/filterTests"
const interact = require('../support/interact')
filterTests(['smoke', 'all'], () => {
context("Create a View", () => {
xcontext("Create a View", () => {
before(() => {
cy.login()
cy.createTestApp()
@ -20,23 +20,25 @@ filterTests(['smoke', 'all'], () => {
cy.addRow(["Teachers", 36, 3])
})
it("creates a view", () => {
xit("creates a view", () => {
cy.contains("Create view").click()
cy.get(interact.MODAL_INNER_WRAPPER).within(() => {
cy.get("input").type("Test View")
cy.get("button").contains("Create View").click({ force: true })
})
cy.get(interact.TABLE_TITLE_H1).contains("Test View")
cy.get(interact.TITLE).then($headers => {
expect($headers).to.have.length(3)
const headers = Array.from($headers).map(header =>
header.textContent.trim()
)
expect(removeSpacing(headers)).to.deep.eq(["group", "age", "rating"])
cy.contains(interact.TABLE_TITLE_H1, "Test View", { timeout: 10000 })
cy.get(".table-wrapper").within(() => {
cy.get(interact.TITLE).then($headers => {
expect($headers).to.have.length(3)
const headers = Array.from($headers).map(header =>
header.textContent.trim()
)
expect(removeSpacing(headers)).to.deep.eq(["group", "age", "rating"])
})
})
})
it("filters the view by age over 10", () => {
xit("filters the view by age over 10", () => {
cy.contains("Filter").click()
cy.contains("Add Filter").click()
@ -56,7 +58,7 @@ filterTests(['smoke', 'all'], () => {
})
})
it("creates a stats calculation view based on age", () => {
xit("creates a stats calculation view based on age", () => {
cy.wait(1000)
cy.contains("Calculate").click()
cy.get(interact.MODAL_INNER_WRAPPER).within(() => {
@ -70,20 +72,22 @@ filterTests(['smoke', 'all'], () => {
})
cy.wait(1000)
cy.get(interact.TITLE).then($headers => {
expect($headers).to.have.length(7)
const headers = Array.from($headers).map(header =>
header.textContent.trim()
)
expect(removeSpacing(headers)).to.deep.eq([
"field",
"sum",
"min",
"max",
"count",
"sumsqr",
"avg",
])
cy.get(".table-wrapper").within(() => {
cy.get(interact.TITLE).then($headers => {
expect($headers).to.have.length(7)
const headers = Array.from($headers).map(header =>
header.textContent.trim()
)
expect(removeSpacing(headers)).to.deep.eq([
"field",
"sum",
"min",
"max",
"count",
"sumsqr",
"avg",
])
})
})
cy.get(interact.SPECTRUM_TABLE_CELL).then($values => {
let values = Array.from($values).map(header => header.textContent.trim())
@ -91,7 +95,7 @@ filterTests(['smoke', 'all'], () => {
})
})
it("groups the view by group", () => {
xit("groups the view by group", () => {
cy.contains("Group by").click()
cy.get(interact.MODAL_INNER_WRAPPER).within(() => {
cy.get(interact.SPECTRUM_PICKER_LABEL).eq(0).click()
@ -123,7 +127,7 @@ filterTests(['smoke', 'all'], () => {
})
})
it("renames a view", () => {
xit("renames a view", () => {
cy.contains(interact.NAV_ITEM, "Test View")
.find(".actions .icon.open-popover")
.click({ force: true })

View File

@ -14,11 +14,13 @@ filterTests(["smoke", "all"], () => {
const restUrl = "https://api.openbrewerydb.org/breweries"
cy.selectExternalDatasource(datasource)
cy.createRestQuery("GET", restUrl, "/breweries")
cy.get(interact.SPECTRUM_TABS_ITEM).contains("Transformer").click()
cy.reload()
cy.contains(".nav-item-content", "/breweries", { timeout: 20000 }).click()
cy.contains(interact.SPECTRUM_TABS_ITEM, "Transformer", { timeout: 5000 }).click({ force: true })
// Get Transformer Function from file
cy.readFile("cypress/support/queryLevelTransformerFunction.js").then(
transformerFunction => {
cy.get(interact.CODEMIRROR_TEXTAREA)
cy.get(interact.CODEMIRROR_TEXTAREA, { timeout: 5000 })
// Highlight current text and overwrite with file contents
.type(Cypress.platform === "darwin" ? "{cmd}a" : "{ctrl}a", {
force: true,
@ -28,6 +30,7 @@ filterTests(["smoke", "all"], () => {
)
// Send Query
cy.intercept("**/queries/preview").as("query")
cy.get(interact.SPECTRUM_BUTTON).contains("Save").click({ force: true })
cy.get(interact.SPECTRUM_BUTTON).contains("Send").click({ force: true })
cy.wait("@query")
// Assert against Status Code, body, & body rows
@ -42,7 +45,9 @@ filterTests(["smoke", "all"], () => {
const restUrl = "https://api.openbrewerydb.org/breweries"
cy.selectExternalDatasource(datasource)
cy.createRestQuery("GET", restUrl, "/breweries")
cy.get(interact.SPECTRUM_TABS_ITEM).contains("Transformer").click()
cy.reload()
cy.contains(".nav-item-content", "/breweries", { timeout: 2000 }).click()
cy.contains(interact.SPECTRUM_TABS_ITEM, "Transformer", { timeout: 5000 }).click({ force: true })
// Get Transformer Function with Data from file
cy.readFile(
"cypress/support/queryLevelTransformerFunctionWithData.js"
@ -71,7 +76,9 @@ filterTests(["smoke", "all"], () => {
const restUrl = "https://api.openbrewerydb.org/breweries"
cy.selectExternalDatasource(datasource)
cy.createRestQuery("GET", restUrl, "/breweries")
cy.get(interact.SPECTRUM_TABS_ITEM).contains("Transformer").click()
cy.reload()
cy.contains(".nav-item-content", "/breweries", { timeout: 2000 }).click()
cy.contains(interact.SPECTRUM_TABS_ITEM, "Transformer", { timeout: 5000 }).click({ force: true })
// Clear the code box and add "test"
cy.get(interact.CODEMIRROR_TEXTAREA)
.type(Cypress.platform === "darwin" ? "{cmd}a" : "{ctrl}a", {

View File

@ -413,7 +413,7 @@ Cypress.Commands.add("searchForApplication", appName => {
// Assumes there are no others
Cypress.Commands.add("applicationInAppTable", appName => {
cy.visit(`${Cypress.config().baseUrl}/builder`, { timeout: 30000 })
cy.get(".appTable", { timeout: 5000 }).within(() => {
cy.get(".appTable", { timeout: 30000 }).within(() => {
cy.get(".title").contains(appName).should("exist")
})
})
@ -441,7 +441,7 @@ Cypress.Commands.add("createTable", (tableName, initialTable) => {
if (!initialTable) {
cy.navigateToDataSection()
}
cy.get(`[data-cy="new-datasource"]`, { timeout: 2000 }).click()
cy.get(`[data-cy="new-datasource"]`, { timeout: 20000 }).click()
cy.wait(2000)
cy.get(".item", { timeout: 2000 })
.contains("Budibase DB")
@ -480,7 +480,7 @@ Cypress.Commands.add(
// Configure column
cy.get(".spectrum-Modal").within(() => {
cy.get("input").first().type(columnName).blur()
cy.get("input").first().type(columnName)
// Unset table display column
cy.contains("display column").click({ force: true })
@ -792,7 +792,7 @@ Cypress.Commands.add("selectExternalDatasource", datasourceName => {
// Navigates to Data Section
cy.navigateToDataSection()
// Open Datasource modal
cy.get(".nav").within(() => {
cy.get(".container").within(() => {
cy.get("[data-cy='new-datasource']").click()
})
// Clicks specified datasource & continue

View File

@ -1,6 +1,6 @@
{
"name": "@budibase/builder",
"version": "2.2.10-alpha.7",
"version": "2.2.11-alpha.1",
"license": "GPL-3.0",
"private": true,
"scripts": {
@ -71,10 +71,10 @@
}
},
"dependencies": {
"@budibase/bbui": "2.2.10-alpha.7",
"@budibase/client": "2.2.10-alpha.7",
"@budibase/frontend-core": "2.2.10-alpha.7",
"@budibase/string-templates": "2.2.10-alpha.7",
"@budibase/bbui": "2.2.11-alpha.1",
"@budibase/client": "2.2.11-alpha.1",
"@budibase/frontend-core": "2.2.11-alpha.1",
"@budibase/string-templates": "2.2.11-alpha.1",
"@sentry/browser": "5.19.1",
"@spectrum-css/page": "^3.0.1",
"@spectrum-css/vars": "^3.0.1",

View File

@ -10,6 +10,7 @@
$: views = $tables.list.flatMap(table => Object.keys(table.views || {}))
const saveView = async () => {
name = name?.trim()
if (views.includes(name)) {
notifications.error(`View exists with name ${name}`)
return
@ -21,7 +22,7 @@
field,
})
notifications.success(`View ${name} created`)
$goto(`../../view/${name}`)
$goto(`../../view/${encodeURIComponent(name)}`)
} catch (error) {
notifications.error("Error creating view")
}

View File

@ -36,9 +36,8 @@
indentLevel={2}
icon="Remove"
text={viewName}
selected={$isActive("./view/:viewName") &&
$views.selected?.name === viewName}
on:click={() => $goto(`./view/${viewName}`)}
selected={$isActive("./view") && $views.selected?.name === viewName}
on:click={() => $goto(`./view/${encodeURIComponent(viewName)}`)}
>
<EditViewPopover
view={{ name: viewName, ...table.views[viewName] }}

View File

@ -33,7 +33,8 @@
async function deleteView() {
try {
const isSelected = $params.viewName === $views.selectedViewName
const isSelected =
decodeURIComponent($params.viewName) === $views.selectedViewName
const name = view.name
const id = view.tableId
await views.delete(name)

View File

@ -12,6 +12,7 @@ export const syncURLToState = options => {
store,
routify,
beforeNavigate,
decode,
} = options || {}
if (
!urlParam ||
@ -29,11 +30,23 @@ export const syncURLToState = options => {
return
}
// Decodes encoded URL params if required
const decodeParams = urlParams => {
if (!decode) {
return urlParams
}
let decoded = {}
Object.keys(urlParams || {}).forEach(key => {
decoded[key] = decode(urlParams[key])
})
return decoded
}
// We can't dynamically fetch the value of stateful routify stores so we need
// to just subscribe and cache the latest versions.
// We can grab their initial values as this is during component
// initialisation.
let cachedParams = get(routify.params)
let cachedParams = decodeParams(get(routify.params))
let cachedGoto = get(routify.goto)
let cachedRedirect = get(routify.redirect)
let cachedPage = get(routify.page)
@ -77,7 +90,7 @@ export const syncURLToState = options => {
// Check if new value is valid
if (validate && fallbackUrl) {
if (!validate(urlValue)) {
log("Invalid URL param!")
log("Invalid URL param!", urlValue)
redirectUrl(fallbackUrl)
return
}
@ -109,7 +122,7 @@ export const syncURLToState = options => {
log(`url.${urlParam} (${urlValue}) <= state.${stateKey} (${stateValue})`)
if (validate && fallbackUrl) {
if (!validate(stateValue)) {
log("Invalid state param!")
log("Invalid state param!", stateValue)
redirectUrl(fallbackUrl)
return
}
@ -137,6 +150,7 @@ export const syncURLToState = options => {
// Subscribe to URL changes and cache them
const unsubscribeParams = routify.params.subscribe($urlParams => {
$urlParams = decodeParams($urlParams)
cachedParams = $urlParams
mapUrlToState($urlParams)
})

View File

@ -12,6 +12,7 @@
fallbackUrl: "../",
store: views,
routify,
decode: decodeURIComponent,
})
onDestroy(stopSyncing)

View File

@ -6,9 +6,9 @@
onMount(async () => {
const { list, selected } = $views
if (selected) {
$redirect(`./${selected?.name}`)
$redirect(`./${encodeURIComponent(selected?.name)}`)
} else if (list?.length) {
$redirect(`./${list[0].name}`)
$redirect(`./${encodeURIComponent(list[0].name)}`)
} else {
$redirect("../")
}

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{
"name": "@budibase/cli",
"version": "2.2.10-alpha.7",
"version": "2.2.11-alpha.1",
"description": "Budibase CLI, for developers, self hosting and migrations.",
"main": "src/index.js",
"bin": {
@ -26,9 +26,9 @@
"outputPath": "build"
},
"dependencies": {
"@budibase/backend-core": "2.2.10-alpha.7",
"@budibase/string-templates": "2.2.10-alpha.7",
"@budibase/types": "2.2.10-alpha.7",
"@budibase/backend-core": "2.2.11-alpha.1",
"@budibase/string-templates": "2.2.11-alpha.1",
"@budibase/types": "2.2.11-alpha.1",
"axios": "0.21.2",
"chalk": "4.1.0",
"cli-progress": "3.11.2",

View File

@ -1,6 +1,6 @@
{
"name": "@budibase/client",
"version": "2.2.10-alpha.7",
"version": "2.2.11-alpha.1",
"license": "MPL-2.0",
"module": "dist/budibase-client.js",
"main": "dist/budibase-client.js",
@ -19,9 +19,9 @@
"dev:builder": "rollup -cw"
},
"dependencies": {
"@budibase/bbui": "2.2.10-alpha.7",
"@budibase/frontend-core": "2.2.10-alpha.7",
"@budibase/string-templates": "2.2.10-alpha.7",
"@budibase/bbui": "2.2.11-alpha.1",
"@budibase/frontend-core": "2.2.11-alpha.1",
"@budibase/string-templates": "2.2.11-alpha.1",
"@spectrum-css/button": "^3.0.3",
"@spectrum-css/card": "^3.0.3",
"@spectrum-css/divider": "^1.0.3",

View File

@ -61,7 +61,7 @@
if (messageHandler) {
messageHandler(message)
} else {
console.warning("Unknown event type", message?.data?.type)
console.warn("Unknown event type", message?.data?.type)
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,12 +1,12 @@
{
"name": "@budibase/frontend-core",
"version": "2.2.10-alpha.7",
"version": "2.2.11-alpha.1",
"description": "Budibase frontend core libraries used in builder and client",
"author": "Budibase",
"license": "MPL-2.0",
"svelte": "src/index.js",
"dependencies": {
"@budibase/bbui": "2.2.10-alpha.7",
"@budibase/bbui": "2.2.11-alpha.1",
"lodash": "^4.17.21",
"svelte": "^3.46.2"
}

View File

@ -16,8 +16,8 @@ export const buildViewEndpoints = API => ({
params.set("group", groupBy)
}
const QUERY_VIEW_URL = field
? `/api/views/${name}?${params}`
: `/api/views/${name}`
? `/api/views/${encodeURIComponent(name)}?${params}`
: `/api/views/${encodeURIComponent(name)}`
return await API.get({ url: QUERY_VIEW_URL })
},
@ -53,7 +53,7 @@ export const buildViewEndpoints = API => ({
*/
deleteView: async viewName => {
return await API.delete({
url: `/api/views/${viewName}`,
url: `/api/views/${encodeURIComponent(viewName)}`,
})
},
})

View File

@ -1,6 +1,6 @@
{
"name": "@budibase/sdk",
"version": "2.2.10-alpha.7",
"version": "2.2.11-alpha.1",
"description": "Budibase Public API SDK",
"author": "Budibase",
"license": "MPL-2.0",

View File

@ -1,7 +1,7 @@
{
"name": "@budibase/server",
"email": "hi@budibase.com",
"version": "2.2.10-alpha.7",
"version": "2.2.11-alpha.1",
"description": "Budibase Web Server",
"main": "src/index.ts",
"repository": {
@ -43,11 +43,11 @@
"license": "GPL-3.0",
"dependencies": {
"@apidevtools/swagger-parser": "10.0.3",
"@budibase/backend-core": "2.2.10-alpha.7",
"@budibase/client": "2.2.10-alpha.7",
"@budibase/pro": "2.2.10-alpha.7",
"@budibase/string-templates": "2.2.10-alpha.7",
"@budibase/types": "2.2.10-alpha.7",
"@budibase/backend-core": "2.2.11-alpha.1",
"@budibase/client": "2.2.11-alpha.1",
"@budibase/pro": "2.2.11-alpha.1",
"@budibase/string-templates": "2.2.11-alpha.1",
"@budibase/types": "2.2.11-alpha.1",
"@bull-board/api": "3.7.0",
"@bull-board/koa": "3.9.4",
"@elastic/elasticsearch": "7.10.0",

View File

@ -187,7 +187,7 @@ export async function save(ctx: UserCtx) {
}
export async function fetchView(ctx: Ctx) {
const viewName = ctx.params.viewName
const viewName = decodeURIComponent(ctx.params.viewName)
// if this is a table view being looked for just transfer to that
if (viewName.startsWith(DocumentType.TABLE)) {

View File

@ -113,7 +113,7 @@ async function handleViewEvents(existingView: View, newView: View) {
export async function destroy(ctx: BBContext) {
const db = context.getAppDB()
const viewName = decodeURI(ctx.params.viewName)
const viewName = decodeURIComponent(ctx.params.viewName)
const view = await deleteView(viewName)
const table = await db.get(view.meta.tableId)
delete table.views[viewName]
@ -124,7 +124,7 @@ export async function destroy(ctx: BBContext) {
}
export async function exportView(ctx: BBContext) {
const viewName = decodeURI(ctx.query.view as string)
const viewName = decodeURIComponent(ctx.query.view as string)
const view = await getView(viewName)
const format = ctx.query.format as string

View File

@ -151,6 +151,9 @@ class MySQLIntegration extends Sql implements DatasourcePlus {
) {
return field.string()
}
if (field.type === "BIT" && field.length === 1) {
return field.buffer()?.[0]
}
return next()
},
}

View File

@ -419,7 +419,7 @@ class Orchestrator {
// Delete the step after the loop step as it's irrelevant, since information is included
// in the loop step
if (wasLoopStep) {
if (wasLoopStep && !loopStep) {
this._context.steps.splice(loopStepNumber + 1, 1)
wasLoopStep = false
}
@ -438,8 +438,8 @@ class Orchestrator {
})
this._context.steps[loopStepNumber] = tempOutput
loopSteps = undefined
wasLoopStep = true
loopSteps = []
}
}

View File

@ -1273,13 +1273,13 @@
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
"@budibase/backend-core@2.2.10-alpha.7":
version "2.2.10-alpha.7"
resolved "https://registry.yarnpkg.com/@budibase/backend-core/-/backend-core-2.2.10-alpha.7.tgz#f8da10067464f1417ccae81e57a537458e8dde1c"
integrity sha512-dpYr0N8vhbHHQA6tkot6ztB9JC0zvQusfRDOLEwFTePahtZJfdAR6EJs2taf3VrTsSNf8U4UmgS5crfHa3v2kA==
"@budibase/backend-core@2.2.11-alpha.1":
version "2.2.11-alpha.1"
resolved "https://registry.yarnpkg.com/@budibase/backend-core/-/backend-core-2.2.11-alpha.1.tgz#adb8835b0db1f671eacc226f39788d6b696353ee"
integrity sha512-8VWYTRbEuhXUWfb/ic9PblWdu6nRidM5Sqo0UK6WXCl9RN0V41UancnyhcWbUf0k9sdm52Y0ESYRr4nzhqU0Fw==
dependencies:
"@budibase/nano" "10.1.1"
"@budibase/types" "2.2.10-alpha.7"
"@budibase/types" "2.2.11-alpha.1"
"@shopify/jest-koa-mocks" "5.0.1"
"@techpass/passport-openidconnect" "0.3.2"
aws-cloudfront-sign "2.2.0"
@ -1291,7 +1291,7 @@
emitter-listener "1.1.2"
ioredis "4.28.0"
joi "17.6.0"
jsonwebtoken "8.5.1"
jsonwebtoken "9.0.0"
koa-passport "4.1.4"
lodash "4.17.21"
lodash.isarguments "3.1.0"
@ -1373,13 +1373,13 @@
qs "^6.11.0"
tough-cookie "^4.1.2"
"@budibase/pro@2.2.10-alpha.7":
version "2.2.10-alpha.7"
resolved "https://registry.yarnpkg.com/@budibase/pro/-/pro-2.2.10-alpha.7.tgz#83ce8ca3c97eae2effab5db4244367420a39117d"
integrity sha512-1xtQgKQC2PSZLBBQxDcxkz9eDRmYfA/ziz/V6M86PN9t6g2ulFsFVhQo2C86CQZ6OtIWAPNGEpNNwc12+sm0uQ==
"@budibase/pro@2.2.11-alpha.1":
version "2.2.11-alpha.1"
resolved "https://registry.yarnpkg.com/@budibase/pro/-/pro-2.2.11-alpha.1.tgz#ed435fa569d090330cacb782129d4af796601f3d"
integrity sha512-bOMR4nJo/8BAKTiluIH81sf/boB4Iq2dDSvvCl5b3VR4evPRnGQwzFeOPFfi9jKkYJy7F74b/RWjl38VQe3atQ==
dependencies:
"@budibase/backend-core" "2.2.10-alpha.7"
"@budibase/types" "2.2.10-alpha.7"
"@budibase/backend-core" "2.2.11-alpha.1"
"@budibase/types" "2.2.11-alpha.1"
"@koa/router" "8.0.8"
bull "4.10.1"
joi "17.6.0"
@ -1404,10 +1404,10 @@
svelte-apexcharts "^1.0.2"
svelte-flatpickr "^3.1.0"
"@budibase/types@2.2.10-alpha.7":
version "2.2.10-alpha.7"
resolved "https://registry.yarnpkg.com/@budibase/types/-/types-2.2.10-alpha.7.tgz#e39e57367d065111f07d2b1144b2da44c77009c2"
integrity sha512-tl3adxi6oX3piAH/DMlrTuXxvHbFDL201I/a+9a4gOjvYSFRmJJrmlNx34hWzbepcNAg9Vb/ZwUv8k8DfdvOrw==
"@budibase/types@2.2.11-alpha.1":
version "2.2.11-alpha.1"
resolved "https://registry.yarnpkg.com/@budibase/types/-/types-2.2.11-alpha.1.tgz#a879f21608389763e20cdcd4ddc60146b0666260"
integrity sha512-KKld6dGyEqJzU62/gb1+S58O+3LW3BIdvtaV7oNxGE32snNh3iNSTBjFkVJU1gNlk+iAMvLCvkFNqDd3Kca+5Q==
"@bull-board/api@3.7.0":
version "3.7.0"
@ -9600,6 +9600,16 @@ jsonwebtoken@8.5.1, jsonwebtoken@^8.2.0, jsonwebtoken@^8.5.1:
ms "^2.1.1"
semver "^5.6.0"
jsonwebtoken@9.0.0:
version "9.0.0"
resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz#d0faf9ba1cc3a56255fe49c0961a67e520c1926d"
integrity sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==
dependencies:
jws "^3.2.2"
lodash "^4.17.21"
ms "^2.1.1"
semver "^7.3.8"
jsprim@^1.2.2:
version "1.4.2"
resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb"
@ -12972,7 +12982,7 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0:
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
semver@^7.3.7:
semver@^7.3.7, semver@^7.3.8:
version "7.3.8"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798"
integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==

View File

@ -1,6 +1,6 @@
{
"name": "@budibase/string-templates",
"version": "2.2.10-alpha.7",
"version": "2.2.11-alpha.1",
"description": "Handlebars wrapper for Budibase templating.",
"main": "src/index.cjs",
"module": "dist/bundle.mjs",

View File

@ -2874,11 +2874,9 @@ json-parse-even-better-errors@^2.3.0:
integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
json5@^2.1.2:
version "2.2.0"
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3"
integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==
dependencies:
minimist "^1.2.5"
version "2.2.3"
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.1.0, kind-of@^3.2.0:
version "3.2.2"

View File

@ -1,6 +1,6 @@
{
"name": "@budibase/types",
"version": "2.2.10-alpha.7",
"version": "2.2.11-alpha.1",
"description": "Budibase types",
"main": "dist/index.js",
"types": "dist/index.d.ts",

View File

@ -522,9 +522,9 @@ inherits@2, inherits@2.0.4:
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
json5@*:
version "2.2.1"
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c"
integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==
version "2.2.3"
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
koa-body@4.2.0:
version "4.2.0"

View File

@ -1,7 +1,7 @@
{
"name": "@budibase/worker",
"email": "hi@budibase.com",
"version": "2.2.10-alpha.7",
"version": "2.2.11-alpha.1",
"description": "Budibase background service",
"main": "src/index.ts",
"repository": {
@ -36,10 +36,10 @@
"author": "Budibase",
"license": "GPL-3.0",
"dependencies": {
"@budibase/backend-core": "2.2.10-alpha.7",
"@budibase/pro": "2.2.10-alpha.7",
"@budibase/string-templates": "2.2.10-alpha.7",
"@budibase/types": "2.2.10-alpha.7",
"@budibase/backend-core": "2.2.11-alpha.1",
"@budibase/pro": "2.2.11-alpha.1",
"@budibase/string-templates": "2.2.11-alpha.1",
"@budibase/types": "2.2.11-alpha.1",
"@koa/router": "8.0.8",
"@sentry/node": "6.17.7",
"@techpass/passport-openidconnect": "0.3.2",

View File

@ -470,13 +470,13 @@
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
"@budibase/backend-core@2.2.10-alpha.7":
version "2.2.10-alpha.7"
resolved "https://registry.yarnpkg.com/@budibase/backend-core/-/backend-core-2.2.10-alpha.7.tgz#f8da10067464f1417ccae81e57a537458e8dde1c"
integrity sha512-dpYr0N8vhbHHQA6tkot6ztB9JC0zvQusfRDOLEwFTePahtZJfdAR6EJs2taf3VrTsSNf8U4UmgS5crfHa3v2kA==
"@budibase/backend-core@2.2.11-alpha.1":
version "2.2.11-alpha.1"
resolved "https://registry.yarnpkg.com/@budibase/backend-core/-/backend-core-2.2.11-alpha.1.tgz#adb8835b0db1f671eacc226f39788d6b696353ee"
integrity sha512-8VWYTRbEuhXUWfb/ic9PblWdu6nRidM5Sqo0UK6WXCl9RN0V41UancnyhcWbUf0k9sdm52Y0ESYRr4nzhqU0Fw==
dependencies:
"@budibase/nano" "10.1.1"
"@budibase/types" "2.2.10-alpha.7"
"@budibase/types" "2.2.11-alpha.1"
"@shopify/jest-koa-mocks" "5.0.1"
"@techpass/passport-openidconnect" "0.3.2"
aws-cloudfront-sign "2.2.0"
@ -488,7 +488,7 @@
emitter-listener "1.1.2"
ioredis "4.28.0"
joi "17.6.0"
jsonwebtoken "8.5.1"
jsonwebtoken "9.0.0"
koa-passport "4.1.4"
lodash "4.17.21"
lodash.isarguments "3.1.0"
@ -520,23 +520,23 @@
qs "^6.11.0"
tough-cookie "^4.1.2"
"@budibase/pro@2.2.10-alpha.7":
version "2.2.10-alpha.7"
resolved "https://registry.yarnpkg.com/@budibase/pro/-/pro-2.2.10-alpha.7.tgz#83ce8ca3c97eae2effab5db4244367420a39117d"
integrity sha512-1xtQgKQC2PSZLBBQxDcxkz9eDRmYfA/ziz/V6M86PN9t6g2ulFsFVhQo2C86CQZ6OtIWAPNGEpNNwc12+sm0uQ==
"@budibase/pro@2.2.11-alpha.1":
version "2.2.11-alpha.1"
resolved "https://registry.yarnpkg.com/@budibase/pro/-/pro-2.2.11-alpha.1.tgz#ed435fa569d090330cacb782129d4af796601f3d"
integrity sha512-bOMR4nJo/8BAKTiluIH81sf/boB4Iq2dDSvvCl5b3VR4evPRnGQwzFeOPFfi9jKkYJy7F74b/RWjl38VQe3atQ==
dependencies:
"@budibase/backend-core" "2.2.10-alpha.7"
"@budibase/types" "2.2.10-alpha.7"
"@budibase/backend-core" "2.2.11-alpha.1"
"@budibase/types" "2.2.11-alpha.1"
"@koa/router" "8.0.8"
bull "4.10.1"
joi "17.6.0"
jsonwebtoken "8.5.1"
node-fetch "^2.6.1"
"@budibase/types@2.2.10-alpha.7":
version "2.2.10-alpha.7"
resolved "https://registry.yarnpkg.com/@budibase/types/-/types-2.2.10-alpha.7.tgz#e39e57367d065111f07d2b1144b2da44c77009c2"
integrity sha512-tl3adxi6oX3piAH/DMlrTuXxvHbFDL201I/a+9a4gOjvYSFRmJJrmlNx34hWzbepcNAg9Vb/ZwUv8k8DfdvOrw==
"@budibase/types@2.2.11-alpha.1":
version "2.2.11-alpha.1"
resolved "https://registry.yarnpkg.com/@budibase/types/-/types-2.2.11-alpha.1.tgz#a879f21608389763e20cdcd4ddc60146b0666260"
integrity sha512-KKld6dGyEqJzU62/gb1+S58O+3LW3BIdvtaV7oNxGE32snNh3iNSTBjFkVJU1gNlk+iAMvLCvkFNqDd3Kca+5Q==
"@cspotcode/source-map-support@^0.8.0":
version "0.8.1"
@ -4870,6 +4870,16 @@ jsonwebtoken@8.5.1, jsonwebtoken@^8.2.0:
ms "^2.1.1"
semver "^5.6.0"
jsonwebtoken@9.0.0:
version "9.0.0"
resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz#d0faf9ba1cc3a56255fe49c0961a67e520c1926d"
integrity sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==
dependencies:
jws "^3.2.2"
lodash "^4.17.21"
ms "^2.1.1"
semver "^7.3.8"
jsprim@^1.2.2:
version "1.4.2"
resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb"
@ -6898,6 +6908,13 @@ semver@^6.0.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0:
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
semver@^7.3.8:
version "7.3.8"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798"
integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==
dependencies:
lru-cache "^6.0.0"
serialize-error@^7.0.1:
version "7.0.1"
resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-7.0.1.tgz#f1360b0447f61ffb483ec4157c737fab7d778e18"