diff --git a/lerna.json b/lerna.json
index 5e28c36166..e016e50225 100644
--- a/lerna.json
+++ b/lerna.json
@@ -1,6 +1,6 @@
{
"$schema": "node_modules/lerna/schemas/lerna-schema.json",
- "version": "2.29.25",
+ "version": "2.29.27",
"npmClient": "yarn",
"packages": [
"packages/*",
diff --git a/package.json b/package.json
index 29b87898ac..f3cbd75836 100644
--- a/package.json
+++ b/package.json
@@ -10,7 +10,7 @@
"@types/proper-lockfile": "^4.1.4",
"@typescript-eslint/parser": "6.9.0",
"esbuild": "^0.18.17",
- "esbuild-node-externals": "^1.8.0",
+ "esbuild-node-externals": "^1.14.0",
"eslint": "^8.52.0",
"eslint-plugin-import": "^2.29.0",
"eslint-plugin-jest": "^27.9.0",
diff --git a/packages/account-portal b/packages/account-portal
index b03e584e46..32b8fa4643 160000
--- a/packages/account-portal
+++ b/packages/account-portal
@@ -1 +1 @@
-Subproject commit b03e584e465f620b49a1b688ff4afc973e6c0758
+Subproject commit 32b8fa4643b4f0f74ee89760deffe431ab347ad9
diff --git a/packages/backend-core/src/db/couch/DatabaseImpl.ts b/packages/backend-core/src/db/couch/DatabaseImpl.ts
index feeba6061e..61fbb3d61e 100644
--- a/packages/backend-core/src/db/couch/DatabaseImpl.ts
+++ b/packages/backend-core/src/db/couch/DatabaseImpl.ts
@@ -308,8 +308,12 @@ export class DatabaseImpl implements Database {
}
async bulkDocs(documents: AnyDocument[]) {
+ const now = new Date().toISOString()
return this.performCall(db => {
- return () => db.bulk({ docs: documents })
+ return () =>
+ db.bulk({
+ docs: documents.map(d => ({ createdAt: now, ...d, updatedAt: now })),
+ })
})
}
diff --git a/packages/backend-core/src/db/couch/tests/DatabaseImpl.spec.ts b/packages/backend-core/src/db/couch/tests/DatabaseImpl.spec.ts
new file mode 100644
index 0000000000..89eecc3785
--- /dev/null
+++ b/packages/backend-core/src/db/couch/tests/DatabaseImpl.spec.ts
@@ -0,0 +1,118 @@
+import tk from "timekeeper"
+
+import { DatabaseImpl } from ".."
+
+import { generator, structures } from "../../../../tests"
+
+const initialTime = new Date()
+tk.freeze(initialTime)
+
+describe("DatabaseImpl", () => {
+ const db = new DatabaseImpl(structures.db.id())
+
+ beforeEach(() => {
+ tk.freeze(initialTime)
+ })
+
+ describe("put", () => {
+ it("persists createdAt and updatedAt fields", async () => {
+ const id = generator.guid()
+ await db.put({ _id: id })
+
+ expect(await db.get(id)).toEqual({
+ _id: id,
+ _rev: expect.any(String),
+ createdAt: initialTime.toISOString(),
+ updatedAt: initialTime.toISOString(),
+ })
+ })
+
+ it("updates updated at fields", async () => {
+ const id = generator.guid()
+
+ await db.put({ _id: id })
+ tk.travel(100)
+
+ await db.put({ ...(await db.get(id)), newValue: 123 })
+
+ expect(await db.get(id)).toEqual({
+ _id: id,
+ _rev: expect.any(String),
+ newValue: 123,
+ createdAt: initialTime.toISOString(),
+ updatedAt: new Date().toISOString(),
+ })
+ })
+ })
+
+ describe("bulkDocs", () => {
+ it("persists createdAt and updatedAt fields", async () => {
+ const ids = generator.unique(() => generator.guid(), 5)
+ await db.bulkDocs(ids.map(id => ({ _id: id })))
+
+ for (const id of ids) {
+ expect(await db.get(id)).toEqual({
+ _id: id,
+ _rev: expect.any(String),
+ createdAt: initialTime.toISOString(),
+ updatedAt: initialTime.toISOString(),
+ })
+ }
+ })
+
+ it("updates updated at fields", async () => {
+ const ids = generator.unique(() => generator.guid(), 5)
+
+ await db.bulkDocs(ids.map(id => ({ _id: id })))
+ tk.travel(100)
+
+ const docsToUpdate = await Promise.all(
+ ids.map(async id => ({ ...(await db.get(id)), newValue: 123 }))
+ )
+ await db.bulkDocs(docsToUpdate)
+
+ for (const id of ids) {
+ expect(await db.get(id)).toEqual({
+ _id: id,
+ _rev: expect.any(String),
+ newValue: 123,
+ createdAt: initialTime.toISOString(),
+ updatedAt: new Date().toISOString(),
+ })
+ }
+ })
+
+ it("keeps existing createdAt", async () => {
+ const ids = generator.unique(() => generator.guid(), 2)
+
+ await db.bulkDocs(ids.map(id => ({ _id: id })))
+ tk.travel(100)
+
+ const newDocs = generator
+ .unique(() => generator.guid(), 3)
+ .map(id => ({ _id: id }))
+ const docsToUpdate = await Promise.all(
+ ids.map(async id => ({ ...(await db.get(id)), newValue: 123 }))
+ )
+ await db.bulkDocs([...newDocs, ...docsToUpdate])
+
+ for (const { _id } of docsToUpdate) {
+ expect(await db.get(_id)).toEqual({
+ _id,
+ _rev: expect.any(String),
+ newValue: 123,
+ createdAt: initialTime.toISOString(),
+ updatedAt: new Date().toISOString(),
+ })
+ }
+ for (const { _id } of newDocs) {
+ expect(await db.get(_id)).toEqual({
+ _id,
+ _rev: expect.any(String),
+ createdAt: new Date().toISOString(),
+ updatedAt: new Date().toISOString(),
+ })
+ }
+ })
+ })
+})
diff --git a/packages/builder/src/components/automation/AutomationBuilder/FlowChart/FlowChart.svelte b/packages/builder/src/components/automation/AutomationBuilder/FlowChart/FlowChart.svelte
index f79b36b1ca..c263468f3b 100644
--- a/packages/builder/src/components/automation/AutomationBuilder/FlowChart/FlowChart.svelte
+++ b/packages/builder/src/components/automation/AutomationBuilder/FlowChart/FlowChart.svelte
@@ -54,6 +54,7 @@
{
testDataModal.show()
}}
@@ -80,6 +81,7 @@
automation._id,
automation.disabled
)}
+ disabled={!$selectedAutomation?.definition?.trigger}
value={!automation.disabled}
/>
diff --git a/packages/builder/src/components/automation/AutomationPanel/AutomationNavItem.svelte b/packages/builder/src/components/automation/AutomationPanel/AutomationNavItem.svelte
index df5ac3bd98..6e4d7c0099 100644
--- a/packages/builder/src/components/automation/AutomationPanel/AutomationNavItem.svelte
+++ b/packages/builder/src/components/automation/AutomationPanel/AutomationNavItem.svelte
@@ -54,7 +54,7 @@
name: "Edit",
keyBind: null,
visible: true,
- disabled: false,
+ disabled: !automation.definition.trigger,
callback: updateAutomationDialog.show,
},
{
@@ -62,7 +62,9 @@
name: "Duplicate",
keyBind: null,
visible: true,
- disabled: automation.definition.trigger.name === "Webhook",
+ disabled:
+ !automation.definition.trigger ||
+ automation.definition.trigger?.name === "Webhook",
callback: duplicateAutomation,
},
]
@@ -74,7 +76,7 @@
name: automation.disabled ? "Activate" : "Pause",
keyBind: null,
visible: true,
- disabled: false,
+ disabled: !automation.definition.trigger,
callback: () => {
automationStore.actions.toggleDisabled(
automation._id,
diff --git a/packages/builder/src/components/automation/AutomationPanel/AutomationPanel.svelte b/packages/builder/src/components/automation/AutomationPanel/AutomationPanel.svelte
index e017e6a26a..58eebfdd3e 100644
--- a/packages/builder/src/components/automation/AutomationPanel/AutomationPanel.svelte
+++ b/packages/builder/src/components/automation/AutomationPanel/AutomationPanel.svelte
@@ -20,7 +20,7 @@
.map(automation => ({
...automation,
displayName:
- $automationStore.automationDisplayData[automation._id].displayName ||
+ $automationStore.automationDisplayData[automation._id]?.displayName ||
automation.name,
}))
.sort((a, b) => {
@@ -30,12 +30,13 @@
})
$: groupedAutomations = filteredAutomations.reduce((acc, auto) => {
- acc[auto.definition.trigger.event] ??= {
- icon: auto.definition.trigger.icon,
- name: (auto.definition.trigger?.name || "").toUpperCase(),
+ const catName = auto.definition?.trigger?.event || "No Trigger"
+ acc[catName] ??= {
+ icon: auto.definition?.trigger?.icon || "AlertCircle",
+ name: (auto.definition?.trigger?.name || "No Trigger").toUpperCase(),
entries: [],
}
- acc[auto.definition.trigger.event].entries.push(auto)
+ acc[catName].entries.push(auto)
return acc
}, {})
diff --git a/packages/builder/src/components/automation/AutomationPanel/CreateAutomationModal.svelte b/packages/builder/src/components/automation/AutomationPanel/CreateAutomationModal.svelte
index 41799cd7f3..365d3d358f 100644
--- a/packages/builder/src/components/automation/AutomationPanel/CreateAutomationModal.svelte
+++ b/packages/builder/src/components/automation/AutomationPanel/CreateAutomationModal.svelte
@@ -21,7 +21,9 @@
$: nameError =
nameTouched && !name ? "Please specify a name for the automation." : null
- $: triggers = Object.entries($automationStore.blockDefinitions.TRIGGER)
+ $: triggers = Object.entries(
+ $automationStore.blockDefinitions.CREATABLE_TRIGGER
+ )
async function createAutomation() {
try {
diff --git a/packages/builder/src/components/backend/DataTable/buttons/grid/GridCreateAutomationButton.svelte b/packages/builder/src/components/backend/DataTable/buttons/grid/GridCreateAutomationButton.svelte
index 8e3d90be41..148db7554c 100644
--- a/packages/builder/src/components/backend/DataTable/buttons/grid/GridCreateAutomationButton.svelte
+++ b/packages/builder/src/components/backend/DataTable/buttons/grid/GridCreateAutomationButton.svelte
@@ -13,7 +13,7 @@
const { datasource } = getContext("grid")
- $: triggers = $automationStore.blockDefinitions.TRIGGER
+ $: triggers = $automationStore.blockDefinitions.CREATABLE_TRIGGER
$: table = $tables.list.find(table => table._id === $datasource.tableId)
diff --git a/packages/builder/src/components/backend/TableNavigator/ExistingTableDataImport.svelte b/packages/builder/src/components/backend/TableNavigator/ExistingTableDataImport.svelte
index 80655d1099..f1d85a6a30 100644
--- a/packages/builder/src/components/backend/TableNavigator/ExistingTableDataImport.svelte
+++ b/packages/builder/src/components/backend/TableNavigator/ExistingTableDataImport.svelte
@@ -100,51 +100,43 @@
async function handleFile(e) {
loading = true
error = null
+ const previousValidation = validation
validation = {}
try {
const response = await parseFile(e)
rows = response.rows
fileName = response.fileName
+
+ const newValidateHash = JSON.stringify(rows)
+ if (newValidateHash === validateHash) {
+ validation = previousValidation
+ } else {
+ await validate(rows)
+ validateHash = newValidateHash
+ }
} catch (e) {
+ error = e.message || e
+ } finally {
loading = false
- error = e
}
}
async function validate(rows) {
- loading = true
error = null
validation = {}
allValid = false
- try {
- if (rows.length > 0) {
- const response = await API.validateExistingTableImport({
- rows,
- tableId,
- })
+ if (rows.length > 0) {
+ const response = await API.validateExistingTableImport({
+ rows,
+ tableId,
+ })
- validation = response.schemaValidation
- invalidColumns = response.invalidColumns
- allValid = response.allValid
- }
- } catch (e) {
- error = e.message
+ validation = response.schemaValidation
+ invalidColumns = response.invalidColumns
+ allValid = response.allValid
}
-
- loading = false
- }
-
- $: {
- // binding in consumer is causing double renders here
- const newValidateHash = JSON.stringify(rows)
-
- if (newValidateHash !== validateHash) {
- validate(rows)
- }
-
- validateHash = newValidateHash
}
diff --git a/packages/builder/src/stores/builder/automations.js b/packages/builder/src/stores/builder/automations.js
index 57c823da9b..fdb0991911 100644
--- a/packages/builder/src/stores/builder/automations.js
+++ b/packages/builder/src/stores/builder/automations.js
@@ -5,14 +5,16 @@ import { generate } from "shortid"
import { createHistoryStore } from "stores/builder/history"
import { notifications } from "@budibase/bbui"
import { updateReferencesInObject } from "dataBinding"
+import { AutomationTriggerStepId } from "@budibase/types"
const initialAutomationState = {
automations: [],
testResults: null,
showTestPanel: false,
blockDefinitions: {
- TRIGGER: [],
- ACTION: [],
+ TRIGGER: {},
+ CREATABLE_TRIGGER: {},
+ ACTION: {},
},
selectedAutomationId: null,
automationDisplayData: {},
@@ -46,14 +48,29 @@ const updateStepReferences = (steps, modifiedIndex, action) => {
})
}
+const getFinalDefinitions = (triggers, actions) => {
+ const creatable = {}
+ Object.entries(triggers).forEach(entry => {
+ if (entry[0] === AutomationTriggerStepId.ROW_ACTION) {
+ return
+ }
+ creatable[entry[0]] = entry[1]
+ })
+ return {
+ TRIGGER: triggers,
+ CREATABLE_TRIGGER: creatable,
+ ACTION: actions,
+ }
+}
+
const automationActions = store => ({
definitions: async () => {
const response = await API.getAutomationDefinitions()
store.update(state => {
- state.blockDefinitions = {
- TRIGGER: response.trigger,
- ACTION: response.action,
- }
+ state.blockDefinitions = getFinalDefinitions(
+ response.trigger,
+ response.action
+ )
return state
})
return response
@@ -69,10 +86,10 @@ const automationActions = store => ({
return a.name < b.name ? -1 : 1
})
state.automationDisplayData = automationResponse.builderData
- state.blockDefinitions = {
- TRIGGER: definitions.trigger,
- ACTION: definitions.action,
- }
+ state.blockDefinitions = getFinalDefinitions(
+ definitions.trigger,
+ definitions.action
+ )
return state
})
},
@@ -87,8 +104,6 @@ const automationActions = store => ({
disabled: false,
}
const response = await store.actions.save(automation)
- await store.actions.fetch()
- store.actions.select(response._id)
return response
},
duplicate: async automation => {
@@ -98,14 +113,13 @@ const automationActions = store => ({
_id: undefined,
_ref: undefined,
})
- await store.actions.fetch()
- store.actions.select(response._id)
return response
},
save: async automation => {
const response = await API.updateAutomation(automation)
await store.actions.fetch()
+ store.actions.select(response._id)
return response.automation
},
delete: async automation => {
@@ -113,18 +127,22 @@ const automationActions = store => ({
automationId: automation?._id,
automationRev: automation?._rev,
})
+
store.update(state => {
// Remove the automation
state.automations = state.automations.filter(
x => x._id !== automation._id
)
+
// Select a new automation if required
if (automation._id === state.selectedAutomationId) {
- store.actions.select(state.automations[0]?._id)
+ state.selectedAutomationId = state.automations[0]?._id || null
}
+
+ // Clear out automationDisplayData for the automation
+ delete state.automationDisplayData[automation._id]
return state
})
- await store.actions.fetch()
},
toggleDisabled: async automationId => {
let automation
@@ -381,7 +399,7 @@ export const selectedAutomation = derived(automationStore, $automationStore => {
export const selectedAutomationDisplayData = derived(
[automationStore, selectedAutomation],
([$automationStore, $selectedAutomation]) => {
- if (!$selectedAutomation._id) {
+ if (!$selectedAutomation?._id) {
return null
}
return $automationStore.automationDisplayData[$selectedAutomation._id]
diff --git a/packages/server/src/api/controllers/table/index.ts b/packages/server/src/api/controllers/table/index.ts
index 3148e54af7..ba861064bb 100644
--- a/packages/server/src/api/controllers/table/index.ts
+++ b/packages/server/src/api/controllers/table/index.ts
@@ -14,16 +14,20 @@ import { events, HTTPError } from "@budibase/backend-core"
import {
BulkImportRequest,
BulkImportResponse,
+ CsvToJsonRequest,
+ CsvToJsonResponse,
FetchTablesResponse,
MigrateRequest,
MigrateResponse,
- Row,
SaveTableRequest,
SaveTableResponse,
Table,
TableResponse,
TableSourceType,
UserCtx,
+ ValidateNewTableImportRequest,
+ ValidateTableImportRequest,
+ ValidateTableImportResponse,
} from "@budibase/types"
import sdk from "../../../sdk"
import { jsonFromCsvString } from "../../../utilities/csv"
@@ -144,7 +148,9 @@ export async function bulkImport(
ctx.body = { message: `Bulk rows created.` }
}
-export async function csvToJson(ctx: UserCtx) {
+export async function csvToJson(
+ ctx: UserCtx
+) {
const { csvString } = ctx.request.body
const result = await jsonFromCsvString(csvString)
@@ -153,8 +159,10 @@ export async function csvToJson(ctx: UserCtx) {
ctx.body = result
}
-export async function validateNewTableImport(ctx: UserCtx) {
- const { rows, schema }: { rows: unknown; schema: unknown } = ctx.request.body
+export async function validateNewTableImport(
+ ctx: UserCtx
+) {
+ const { rows, schema } = ctx.request.body
if (isRows(rows) && isSchema(schema)) {
ctx.status = 200
@@ -164,8 +172,10 @@ export async function validateNewTableImport(ctx: UserCtx) {
}
}
-export async function validateExistingTableImport(ctx: UserCtx) {
- const { rows, tableId }: { rows: Row[]; tableId?: string } = ctx.request.body
+export async function validateExistingTableImport(
+ ctx: UserCtx
+) {
+ const { rows, tableId } = ctx.request.body
let schema = null
if (tableId) {
diff --git a/packages/server/src/api/routes/tests/automation.spec.ts b/packages/server/src/api/routes/tests/automation.spec.ts
index 990828dcde..d9d48ede38 100644
--- a/packages/server/src/api/routes/tests/automation.spec.ts
+++ b/packages/server/src/api/routes/tests/automation.spec.ts
@@ -14,6 +14,7 @@ import sdk from "../../../sdk"
import { Automation, FieldType, Table } from "@budibase/types"
import { mocks } from "@budibase/backend-core/tests"
import { FilterConditions } from "../../../automations/steps/filter"
+import { removeDeprecated } from "../../../automations/utils"
const MAX_RETRIES = 4
let {
@@ -69,14 +70,15 @@ describe("/automations", () => {
.expect("Content-Type", /json/)
.expect(200)
- let definitionsLength = Object.keys(BUILTIN_ACTION_DEFINITIONS).length
- definitionsLength-- // OUTGOING_WEBHOOK is deprecated
+ let definitionsLength = Object.keys(
+ removeDeprecated(BUILTIN_ACTION_DEFINITIONS)
+ ).length
expect(Object.keys(res.body.action).length).toBeGreaterThanOrEqual(
definitionsLength
)
expect(Object.keys(res.body.trigger).length).toEqual(
- Object.keys(TRIGGER_DEFINITIONS).length
+ Object.keys(removeDeprecated(TRIGGER_DEFINITIONS)).length
)
})
})
diff --git a/packages/server/src/api/routes/tests/datasource.spec.ts b/packages/server/src/api/routes/tests/datasource.spec.ts
index 6f249f5016..255e46167f 100644
--- a/packages/server/src/api/routes/tests/datasource.spec.ts
+++ b/packages/server/src/api/routes/tests/datasource.spec.ts
@@ -15,6 +15,7 @@ import {
Table,
TableSchema,
SupportedSqlTypes,
+ JsonFieldSubType,
} from "@budibase/types"
import { DatabaseName, getDatasource } from "../../../integrations/tests/utils"
import { tableForDatasource } from "../../../tests/utilities/structures"
@@ -288,7 +289,10 @@ describe("/datasources", () => {
name: "options",
type: FieldType.OPTIONS,
constraints: {
- presence: { allowEmpty: false },
+ presence: {
+ allowEmpty: false,
+ },
+ inclusion: [],
},
},
[FieldType.NUMBER]: {
@@ -302,6 +306,10 @@ describe("/datasources", () => {
[FieldType.ARRAY]: {
name: "array",
type: FieldType.ARRAY,
+ constraints: {
+ type: JsonFieldSubType.ARRAY,
+ inclusion: [],
+ },
},
[FieldType.DATETIME]: {
name: "datetime",
diff --git a/packages/server/src/api/routes/tests/row.spec.ts b/packages/server/src/api/routes/tests/row.spec.ts
index 9cc53168d0..8871841ee7 100644
--- a/packages/server/src/api/routes/tests/row.spec.ts
+++ b/packages/server/src/api/routes/tests/row.spec.ts
@@ -32,6 +32,7 @@ import {
TableSourceType,
UpdatedRowEventEmitter,
TableSchema,
+ JsonFieldSubType,
} from "@budibase/types"
import { generator, mocks } from "@budibase/backend-core/tests"
import _, { merge } from "lodash"
@@ -102,7 +103,7 @@ describe.each([
): SaveTableRequest {
const defaultSchema: TableSchema = {
id: {
- type: FieldType.AUTO,
+ type: FieldType.NUMBER,
name: "id",
autocolumn: true,
constraints: {
@@ -384,7 +385,7 @@ describe.each([
const arrayField: FieldSchema = {
type: FieldType.ARRAY,
constraints: {
- type: "array",
+ type: JsonFieldSubType.ARRAY,
presence: false,
inclusion: ["One", "Two", "Three"],
},
diff --git a/packages/server/src/api/routes/tests/search.spec.ts b/packages/server/src/api/routes/tests/search.spec.ts
index e774158c23..2c5756efe4 100644
--- a/packages/server/src/api/routes/tests/search.spec.ts
+++ b/packages/server/src/api/routes/tests/search.spec.ts
@@ -5,12 +5,12 @@ import {
knexClient,
} from "../../../integrations/tests/utils"
import {
- db as dbCore,
context,
+ db as dbCore,
MAX_VALID_DATE,
MIN_VALID_DATE,
- utils,
SQLITE_DESIGN_DOC_ID,
+ utils,
} from "@budibase/backend-core"
import * as setup from "./utilities"
@@ -20,6 +20,7 @@ import {
Datasource,
EmptyFilterOption,
FieldType,
+ JsonFieldSubType,
RelationshipType,
Row,
RowSearchParams,
@@ -1494,7 +1495,10 @@ describe.each([
numbers: {
name: "numbers",
type: FieldType.ARRAY,
- constraints: { inclusion: ["one", "two", "three"] },
+ constraints: {
+ type: JsonFieldSubType.ARRAY,
+ inclusion: ["one", "two", "three"],
+ },
},
})
await createRows([{ numbers: ["one", "two"] }, { numbers: ["three"] }])
@@ -2560,4 +2564,48 @@ describe.each([
}).toContainExactly([{ name: "foo" }])
})
})
+
+ !isInMemory &&
+ describe("search by _id", () => {
+ let row: Row
+
+ beforeAll(async () => {
+ const toRelateTable = await createTable({
+ name: {
+ name: "name",
+ type: FieldType.STRING,
+ },
+ })
+ table = await createTable({
+ name: {
+ name: "name",
+ type: FieldType.STRING,
+ },
+ rel: {
+ name: "rel",
+ type: FieldType.LINK,
+ relationshipType: RelationshipType.MANY_TO_MANY,
+ tableId: toRelateTable._id!,
+ fieldName: "rel",
+ },
+ })
+ const [row1, row2] = await Promise.all([
+ config.api.row.save(toRelateTable._id!, { name: "tag 1" }),
+ config.api.row.save(toRelateTable._id!, { name: "tag 2" }),
+ ])
+ row = await config.api.row.save(table._id!, {
+ name: "product 1",
+ rel: [row1._id, row2._id],
+ })
+ })
+
+ it("can filter by the row ID with limit 1", async () => {
+ await expectSearch({
+ query: {
+ equal: { _id: row._id },
+ },
+ limit: 1,
+ }).toContainExactly([row])
+ })
+ })
})
diff --git a/packages/server/src/api/routes/tests/table.spec.ts b/packages/server/src/api/routes/tests/table.spec.ts
index 20c83549d2..a2cff7b395 100644
--- a/packages/server/src/api/routes/tests/table.spec.ts
+++ b/packages/server/src/api/routes/tests/table.spec.ts
@@ -398,6 +398,7 @@ describe.each([
name: "auto",
autocolumn: true,
type: FieldType.AUTO,
+ subtype: AutoFieldSubType.AUTO_ID,
},
},
},
diff --git a/packages/server/src/api/routes/tests/viewV2.spec.ts b/packages/server/src/api/routes/tests/viewV2.spec.ts
index 3edbc24365..2ff5c67852 100644
--- a/packages/server/src/api/routes/tests/viewV2.spec.ts
+++ b/packages/server/src/api/routes/tests/viewV2.spec.ts
@@ -56,7 +56,7 @@ describe.each([
primary: ["id"],
schema: {
id: {
- type: FieldType.AUTO,
+ type: FieldType.NUMBER,
name: "id",
autocolumn: true,
constraints: {
@@ -241,7 +241,7 @@ describe.each([
schema: {
id: {
name: "id",
- type: FieldType.AUTO,
+ type: FieldType.NUMBER,
autocolumn: true,
visible: true,
},
@@ -1555,7 +1555,7 @@ describe.each([
schema: {
id: {
name: "id",
- type: FieldType.AUTO,
+ type: FieldType.NUMBER,
autocolumn: true,
},
name: {
diff --git a/packages/server/src/automations/utils.ts b/packages/server/src/automations/utils.ts
index c75cc5e8dc..93b8f907fd 100644
--- a/packages/server/src/automations/utils.ts
+++ b/packages/server/src/automations/utils.ts
@@ -3,11 +3,15 @@ import { definitions } from "./triggerInfo"
import { automationQueue } from "./bullboard"
import { updateEntityMetadata } from "../utilities"
import { MetadataTypes } from "../constants"
-import { db as dbCore, context, utils } from "@budibase/backend-core"
+import { context, db as dbCore, utils } from "@budibase/backend-core"
import { getAutomationMetadataParams } from "../db/utils"
import { cloneDeep } from "lodash/fp"
import { quotas } from "@budibase/pro"
-import { Automation, AutomationJob } from "@budibase/types"
+import {
+ Automation,
+ AutomationJob,
+ AutomationStepSchema,
+} from "@budibase/types"
import { automationsEnabled } from "../features"
import { helpers, REBOOT_CRON } from "@budibase/shared-core"
import tracer from "dd-trace"
@@ -111,7 +115,9 @@ export async function updateTestHistory(
)
}
-export function removeDeprecated(definitions: any) {
+export function removeDeprecated(
+ definitions: Record
+) {
const base = cloneDeep(definitions)
for (let key of Object.keys(base)) {
if (base[key].deprecated) {
diff --git a/packages/server/src/db/defaultData/datasource_bb_default.ts b/packages/server/src/db/defaultData/datasource_bb_default.ts
index fc79b90c00..a393888e51 100644
--- a/packages/server/src/db/defaultData/datasource_bb_default.ts
+++ b/packages/server/src/db/defaultData/datasource_bb_default.ts
@@ -17,6 +17,7 @@ import {
AutoFieldSubType,
Datasource,
FieldType,
+ JsonFieldSubType,
RelationshipType,
Row,
SourceName,
@@ -131,7 +132,7 @@ export const DEFAULT_INVENTORY_TABLE_SCHEMA: Table = {
"Item Tags": {
type: FieldType.ARRAY,
constraints: {
- type: FieldType.ARRAY,
+ type: JsonFieldSubType.ARRAY,
presence: {
allowEmpty: false,
},
@@ -153,7 +154,7 @@ export const DEFAULT_INVENTORY_TABLE_SCHEMA: Table = {
Status: {
type: FieldType.ARRAY,
constraints: {
- type: FieldType.ARRAY,
+ type: JsonFieldSubType.ARRAY,
presence: {
allowEmpty: false,
},
@@ -291,7 +292,7 @@ export const DEFAULT_EMPLOYEE_TABLE_SCHEMA: Table = {
"Employee Level": {
type: FieldType.ARRAY,
constraints: {
- type: FieldType.ARRAY,
+ type: JsonFieldSubType.ARRAY,
presence: false,
inclusion: ["Manager", "Junior", "Senior", "Apprentice", "Contractor"],
},
@@ -535,7 +536,7 @@ export const DEFAULT_EXPENSES_TABLE_SCHEMA: Table = {
"Expense Tags": {
type: FieldType.ARRAY,
constraints: {
- type: FieldType.ARRAY,
+ type: JsonFieldSubType.ARRAY,
presence: {
allowEmpty: false,
},
diff --git a/packages/server/src/integrations/tests/utils/index.ts b/packages/server/src/integrations/tests/utils/index.ts
index 8e317d9099..5d893fda9c 100644
--- a/packages/server/src/integrations/tests/utils/index.ts
+++ b/packages/server/src/integrations/tests/utils/index.ts
@@ -77,7 +77,7 @@ export async function startContainer(container: GenericContainer) {
container = container
.withReuse()
.withLabels({ "com.budibase": "true" })
- .withName(key)
+ .withName(`${key}_testcontainer`)
let startedContainer: StartedTestContainer | undefined = undefined
let lastError = undefined
diff --git a/packages/server/src/integrations/utils/utils.ts b/packages/server/src/integrations/utils/utils.ts
index b97782ce7e..84742626c1 100644
--- a/packages/server/src/integrations/utils/utils.ts
+++ b/packages/server/src/integrations/utils/utils.ts
@@ -150,22 +150,28 @@ export function generateColumnDefinition(config: {
}).internal
}
- const constraints: {
- presence: boolean
- inclusion?: string[]
- } = {
- presence,
- }
+ let schema: FieldSchema
if (foundType === FieldType.OPTIONS) {
- constraints.inclusion = options
- }
-
- const schema: FieldSchema = {
- type: foundType,
- externalType,
- autocolumn,
- name,
- constraints,
+ schema = {
+ type: foundType,
+ externalType,
+ autocolumn,
+ name,
+ constraints: {
+ presence,
+ inclusion: options!,
+ },
+ }
+ } else {
+ schema = {
+ type: foundType,
+ externalType,
+ autocolumn,
+ name,
+ constraints: {
+ presence,
+ },
+ }
}
if (schema.type === FieldType.DATETIME) {
schema.dateOnly = SQL_DATE_ONLY_TYPES.includes(lowerCaseType)
diff --git a/packages/server/src/sdk/app/automations/crud.ts b/packages/server/src/sdk/app/automations/crud.ts
index 2b36e32397..3888e6882a 100644
--- a/packages/server/src/sdk/app/automations/crud.ts
+++ b/packages/server/src/sdk/app/automations/crud.ts
@@ -87,10 +87,10 @@ export async function fetch() {
include_docs: true,
})
)
- return response.rows
- .map(row => row.doc)
- .filter(doc => !!doc)
- .map(trimUnexpectedObjectFields)
+ const automations: PersistedAutomation[] = response.rows
+ .filter(row => !!row.doc)
+ .map(row => row.doc!)
+ return automations.map(trimUnexpectedObjectFields)
}
export async function get(automationId: string) {
diff --git a/packages/server/src/sdk/app/automations/utils.ts b/packages/server/src/sdk/app/automations/utils.ts
index e89006d618..5d057697ca 100644
--- a/packages/server/src/sdk/app/automations/utils.ts
+++ b/packages/server/src/sdk/app/automations/utils.ts
@@ -29,8 +29,7 @@ export async function getBuilderData(
const rowActionNameCache: Record = {}
async function getRowActionName(tableId: string, rowActionId: string) {
if (!rowActionNameCache[tableId]) {
- const rowActions = await sdk.rowActions.get(tableId)
- rowActionNameCache[tableId] = rowActions
+ rowActionNameCache[tableId] = await sdk.rowActions.get(tableId)
}
return rowActionNameCache[tableId].actions[rowActionId]?.name
@@ -45,9 +44,11 @@ export async function getBuilderData(
}
const { tableId, rowActionId } = automation.definition.trigger.inputs
+ if (!tableId || !rowActionId) {
+ continue
+ }
const tableName = await getTableName(tableId)
-
const rowActionName = await getRowActionName(tableId, rowActionId)
result[automation._id!] = {
diff --git a/packages/server/src/sdk/app/rows/search/external.ts b/packages/server/src/sdk/app/rows/search/external.ts
index c7a89bc0dd..e7fd2888de 100644
--- a/packages/server/src/sdk/app/rows/search/external.ts
+++ b/packages/server/src/sdk/app/rows/search/external.ts
@@ -22,21 +22,21 @@ import { HTTPError } from "@budibase/backend-core"
import pick from "lodash/pick"
import { outputProcessing } from "../../../../utilities/rowProcessor"
import sdk from "../../../"
+import { isSearchingByRowID } from "./utils"
-export async function search(
- options: RowSearchParams,
- table: Table
-): Promise> {
- const { tableId } = options
- const { countRows, paginate, query, ...params } = options
- const { limit } = params
- let bookmark =
- (params.bookmark && parseInt(params.bookmark as string)) || undefined
- if (paginate && !bookmark) {
- bookmark = 0
- }
+function getPaginationAndLimitParameters(
+ filters: SearchFilters,
+ paginate: boolean | undefined,
+ bookmark: number | undefined,
+ limit: number | undefined
+): PaginationJson | undefined {
let paginateObj: PaginationJson | undefined
+ // only try set limits/pagination if we aren't doing a row ID search
+ if (isSearchingByRowID(filters)) {
+ return
+ }
+
if (paginate && !limit) {
throw new Error("Cannot paginate query without a limit")
}
@@ -49,11 +49,35 @@ export async function search(
if (bookmark) {
paginateObj.offset = limit * bookmark
}
- } else if (params && limit) {
+ } else if (limit) {
paginateObj = {
limit: limit,
}
}
+
+ return paginateObj
+}
+
+export async function search(
+ options: RowSearchParams,
+ table: Table
+): Promise> {
+ const { tableId } = options
+ const { countRows, paginate, query, ...params } = options
+ const { limit } = params
+ let bookmark =
+ (params.bookmark && parseInt(params.bookmark as string)) || undefined
+ if (paginate && !bookmark) {
+ bookmark = 0
+ }
+
+ let paginateObj = getPaginationAndLimitParameters(
+ query,
+ paginate,
+ bookmark,
+ limit
+ )
+
let sort: SortJson | undefined
if (params.sort) {
const direction =
diff --git a/packages/server/src/sdk/app/rows/search/sqs.ts b/packages/server/src/sdk/app/rows/search/sqs.ts
index c3da565c87..8a61684020 100644
--- a/packages/server/src/sdk/app/rows/search/sqs.ts
+++ b/packages/server/src/sdk/app/rows/search/sqs.ts
@@ -42,6 +42,8 @@ import {
getTableIDList,
} from "./filters"
import { dataFilters, PROTECTED_INTERNAL_COLUMNS } from "@budibase/shared-core"
+import { isSearchingByRowID } from "./utils"
+import tracer from "dd-trace"
const builder = new sql.Sql(SqlClient.SQL_LITE)
const MISSING_COLUMN_REGEX = new RegExp(`no such column: .+`)
@@ -71,10 +73,14 @@ function buildInternalFieldList(
}
if (isRelationship) {
const linkCol = col as RelationshipFieldMetadata
- const relatedTable = tables.find(table => table._id === linkCol.tableId)!
+ const relatedTable = tables.find(table => table._id === linkCol.tableId)
// no relationships provided, don't go more than a layer deep
- fieldList = fieldList.concat(buildInternalFieldList(relatedTable, tables))
- addJunctionFields(relatedTable, ["doc1.fieldName", "doc2.fieldName"])
+ if (relatedTable) {
+ fieldList = fieldList.concat(
+ buildInternalFieldList(relatedTable, tables)
+ )
+ addJunctionFields(relatedTable, ["doc1.fieldName", "doc2.fieldName"])
+ }
} else {
fieldList.push(`${table._id}.${mapToUserColumn(col.name)}`)
}
@@ -220,7 +226,11 @@ async function runSqlQuery(
}
const db = context.getAppDB()
- return await db.sql(sql, bindings)
+
+ return await tracer.trace("sqs.runSqlQuery", async span => {
+ span?.addTags({ sql })
+ return await db.sql(sql, bindings)
+ })
}
const response = await alias.queryWithAliasing(json, processSQLQuery)
if (opts?.countTotalRows) {
@@ -264,6 +274,10 @@ export async function search(
const relationships = buildInternalRelationships(table)
+ const searchFilters: SearchFilters = {
+ ...cleanupFilters(query, table, allTables),
+ documentType: DocumentType.ROW,
+ }
const request: QueryJson = {
endpoint: {
// not important, we query ourselves
@@ -271,10 +285,7 @@ export async function search(
entityId: table._id!,
operation: Operation.READ,
},
- filters: {
- ...cleanupFilters(query, table, allTables),
- documentType: DocumentType.ROW,
- },
+ filters: searchFilters,
table,
meta: {
table,
@@ -304,7 +315,8 @@ export async function search(
}
const bookmark: number = (params.bookmark as number) || 0
- if (params.limit) {
+ // limits don't apply if we doing a row ID search
+ if (!isSearchingByRowID(searchFilters) && params.limit) {
paginate = true
request.paginate = {
limit: params.limit + 1,
diff --git a/packages/server/src/sdk/app/rows/search/tests/search.spec.ts b/packages/server/src/sdk/app/rows/search/tests/search.spec.ts
index 4b80d5bcd3..47124d6667 100644
--- a/packages/server/src/sdk/app/rows/search/tests/search.spec.ts
+++ b/packages/server/src/sdk/app/rows/search/tests/search.spec.ts
@@ -55,7 +55,7 @@ describe.each([
schema: {
id: {
name: "id",
- type: FieldType.AUTO,
+ type: FieldType.NUMBER,
autocolumn: true,
},
name: {
diff --git a/packages/server/src/sdk/app/rows/search/utils.ts b/packages/server/src/sdk/app/rows/search/utils.ts
index 797383eff0..5ffc065353 100644
--- a/packages/server/src/sdk/app/rows/search/utils.ts
+++ b/packages/server/src/sdk/app/rows/search/utils.ts
@@ -108,3 +108,18 @@ export function searchInputMapping(table: Table, options: RowSearchParams) {
}
return options
}
+
+export function isSearchingByRowID(query: SearchFilters): boolean {
+ for (let searchField of Object.values(query)) {
+ if (typeof searchField !== "object") {
+ continue
+ }
+ const hasId = Object.keys(searchField).find(
+ key => dbCore.removeKeyNumbering(key) === "_id" && searchField[key]
+ )
+ if (hasId) {
+ return true
+ }
+ }
+ return false
+}
diff --git a/packages/shared-core/src/sdk/documents/automations.ts b/packages/shared-core/src/sdk/documents/automations.ts
index 3663f7ae46..86cbee75f7 100644
--- a/packages/shared-core/src/sdk/documents/automations.ts
+++ b/packages/shared-core/src/sdk/documents/automations.ts
@@ -2,12 +2,12 @@ import { Automation, AutomationTriggerStepId } from "@budibase/types"
export function isRowAction(automation: Automation) {
const result =
- automation.definition.trigger.stepId === AutomationTriggerStepId.ROW_ACTION
+ automation.definition.trigger?.stepId === AutomationTriggerStepId.ROW_ACTION
return result
}
export function isAppAction(automation: Automation) {
const result =
- automation.definition.trigger.stepId === AutomationTriggerStepId.APP
+ automation.definition.trigger?.stepId === AutomationTriggerStepId.APP
return result
}
diff --git a/packages/types/src/api/web/app/rows.ts b/packages/types/src/api/web/app/rows.ts
index c120af0628..ce6f6f672d 100644
--- a/packages/types/src/api/web/app/rows.ts
+++ b/packages/types/src/api/web/app/rows.ts
@@ -37,7 +37,7 @@ export interface PaginatedSearchRowResponse
PaginationResponse {}
export interface ExportRowsRequest {
- rows: string[]
+ rows?: string[]
columns?: string[]
query?: SearchFilters
sort?: string
diff --git a/packages/types/src/api/web/app/table.ts b/packages/types/src/api/web/app/table.ts
index fc382643f1..bb9329f6c1 100644
--- a/packages/types/src/api/web/app/table.ts
+++ b/packages/types/src/api/web/app/table.ts
@@ -1,4 +1,4 @@
-import { Row, Table, TableRequest, View } from "../../../documents"
+import { Row, Table, TableRequest, TableSchema, View } from "../../../documents"
import { ViewV2Enriched } from "../../../sdk"
export type TableViewsResponse = { [key: string]: View | ViewV2Enriched }
@@ -32,3 +32,28 @@ export interface MigrateRequest {
export interface MigrateResponse {
message: string
}
+
+export interface ValidateNewTableImportRequest {
+ rows: Row[]
+ schema: TableSchema
+}
+
+export interface ValidateTableImportRequest {
+ tableId?: string
+ rows: Row[]
+}
+
+export interface ValidateTableImportResponse {
+ schemaValidation: {
+ [field: string]: boolean
+ }
+ allValid: boolean
+ invalidColumns: Array
+ errors: Record
+}
+
+export interface CsvToJsonRequest {
+ csvString: string
+}
+
+export type CsvToJsonResponse = any[]
diff --git a/packages/types/src/documents/app/automation.ts b/packages/types/src/documents/app/automation.ts
index b53895e57b..d5d7fe667c 100644
--- a/packages/types/src/documents/app/automation.ts
+++ b/packages/types/src/documents/app/automation.ts
@@ -174,9 +174,7 @@ export interface AutomationStepSchema {
deprecated?: boolean
stepId: AutomationTriggerStepId | AutomationActionStepId
blockToLoop?: string
- inputs: {
- [key: string]: any
- }
+ inputs: Record
schema: {
inputs: InputOutputBlock
outputs: InputOutputBlock
diff --git a/packages/types/src/documents/app/table/schema.ts b/packages/types/src/documents/app/table/schema.ts
index 3a2ddf097f..7b89b610be 100644
--- a/packages/types/src/documents/app/table/schema.ts
+++ b/packages/types/src/documents/app/table/schema.ts
@@ -64,7 +64,7 @@ export interface AutoColumnFieldMetadata
extends Omit {
type: FieldType.AUTO
autocolumn: true
- subtype?: AutoFieldSubType
+ subtype: AutoFieldSubType
lastID?: number
// if the column was turned to an auto-column for SQL, explains why (primary, foreign etc)
autoReason?: AutoReason
@@ -157,6 +157,21 @@ export interface FieldConstraints {
}
}
+export interface OptionsFieldMetadata extends BaseFieldSchema {
+ type: FieldType.OPTIONS
+ constraints: FieldConstraints & {
+ inclusion: string[]
+ }
+}
+
+export interface ArrayFieldMetadata extends BaseFieldSchema {
+ type: FieldType.ARRAY
+ constraints: FieldConstraints & {
+ type: JsonFieldSubType.ARRAY
+ inclusion: string[]
+ }
+}
+
interface BaseFieldSchema extends UIFieldMetadata {
type: FieldType
name: string
@@ -182,6 +197,8 @@ interface OtherFieldMetadata extends BaseFieldSchema {
| FieldType.BB_REFERENCE_SINGLE
| FieldType.ATTACHMENTS
| FieldType.STRING
+ | FieldType.ARRAY
+ | FieldType.OPTIONS
>
}
@@ -198,6 +215,8 @@ export type FieldSchema =
| JsonFieldMetadata
| AttachmentFieldMetadata
| BBReferenceSingleFieldMetadata
+ | ArrayFieldMetadata
+ | OptionsFieldMetadata
export interface TableSchema {
[key: string]: FieldSchema
diff --git a/scripts/bootstrap.sh b/scripts/bootstrap.sh
deleted file mode 100755
index a5a4fc0108..0000000000
--- a/scripts/bootstrap.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-if [ -d "packages/pro/src" ]; then
- cd packages/pro
-
- yarn
- lerna bootstrap
-fi
\ No newline at end of file
diff --git a/scripts/build.js b/scripts/build.js
index 4383950f88..93a2a1e589 100755
--- a/scripts/build.js
+++ b/scripts/build.js
@@ -51,20 +51,6 @@ async function runBuild(entry, outfile) {
fs.readFileSync(tsconfig, "utf-8")
)
- if (
- !fs.existsSync(path.join(__dirname, "../packages/pro/src")) &&
- tsconfigPathPluginContent.compilerOptions?.paths
- ) {
- // If we don't have pro, we cannot bundle backend-core.
- // Otherwise, the main context will not be shared between libraries
- delete tsconfigPathPluginContent?.compilerOptions?.paths?.[
- "@budibase/backend-core"
- ]
- delete tsconfigPathPluginContent?.compilerOptions?.paths?.[
- "@budibase/backend-core/*"
- ]
- }
-
const sharedConfig = {
entryPoints: [entry],
bundle: true,
@@ -75,7 +61,7 @@ async function runBuild(entry, outfile) {
svelteCompilePlugin,
TsconfigPathsPlugin({ tsconfig: tsconfigPathPluginContent }),
nodeExternalsPlugin({
- allowList: ["@budibase/frontend-core", "svelte"],
+ allowList: ["@budibase/frontend-core", "@budibase/pro", "svelte"],
}),
],
preserveSymlinks: true,
diff --git a/scripts/devDocker.sh b/scripts/devDocker.sh
index e25819d514..3c327c0b21 100755
--- a/scripts/devDocker.sh
+++ b/scripts/devDocker.sh
@@ -1,11 +1,5 @@
#!/bin/bash
-# Check if the pro submodule is loaded
-if [ ! -d "./packages/pro/src" ]; then
- echo "[ERROR] Submodule is not loaded. This is only allowed with loaded submodules."
- exit 1
-fi
-
yarn build:apps
docker compose -f hosting/docker-compose.build.yaml -f hosting/docker-compose.dev.yaml --env-file hosting/.env up --build --scale proxy-service=0
diff --git a/yarn.lock b/yarn.lock
index d15f1a2d08..2d69b37cc6 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1987,13 +1987,20 @@
resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310"
integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==
-"@babel/runtime@^7.10.5", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.15.4", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2":
+"@babel/runtime@^7.10.5", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2":
version "7.24.7"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.7.tgz#f4f0d5530e8dbdf59b3451b9b3e594b6ba082e12"
integrity sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==
dependencies:
regenerator-runtime "^0.14.0"
+"@babel/runtime@^7.13.10":
+ version "7.25.0"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.0.tgz#3af9a91c1b739c569d5d80cc917280919c544ecb"
+ integrity sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==
+ dependencies:
+ regenerator-runtime "^0.14.0"
+
"@babel/template@^7.22.15", "@babel/template@^7.22.5", "@babel/template@^7.3.3":
version "7.22.15"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38"
@@ -2185,9 +2192,9 @@
"@bull-board/api" "5.10.2"
"@camunda8/sdk@^8.5.3":
- version "8.6.7"
- resolved "https://registry.yarnpkg.com/@camunda8/sdk/-/sdk-8.6.7.tgz#9a8d5fbe38a53ae1ab13ff59c24cf6747c20f575"
- integrity sha512-YpMsrBz5SlnagV8kei53WmB7es09ejNoOg3c6Dta+zGnSumClwGjL4IEGKqSjFk0Z4eVNIBIbRYl1i8gXRdvJg==
+ version "8.6.10"
+ resolved "https://registry.yarnpkg.com/@camunda8/sdk/-/sdk-8.6.10.tgz#61fdadc6bc89a234648ba4bc622b0db10f283de9"
+ integrity sha512-FzSoLYd0yFFElC2G3NX93GnP7r53uQDR+6njV1EEAGPhz4QQfZeEW07vMNZ9BFeNn5jhtv9IWmHdHxYwJxxmcw==
dependencies:
"@grpc/grpc-js" "1.10.9"
"@grpc/proto-loader" "0.7.13"
@@ -3362,6 +3369,11 @@
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
+"@jridgewell/sourcemap-codec@^1.5.0":
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a"
+ integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==
+
"@jridgewell/trace-mapping@0.3.9":
version "0.3.9"
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9"
@@ -4144,81 +4156,161 @@
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz#bbd0e616b2078cd2d68afc9824d1fadb2f2ffd27"
integrity sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==
+"@rollup/rollup-android-arm-eabi@4.19.1":
+ version "4.19.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.19.1.tgz#7746deb85e4a8fb54fbfda8ac5c102692f102476"
+ integrity sha512-XzqSg714++M+FXhHfXpS1tDnNZNpgxxuGZWlRG/jSj+VEPmZ0yg6jV4E0AL3uyBKxO8mO3xtOsP5mQ+XLfrlww==
+
"@rollup/rollup-android-arm64@4.18.0":
version "4.18.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz#97255ef6384c5f73f4800c0de91f5f6518e21203"
integrity sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==
+"@rollup/rollup-android-arm64@4.19.1":
+ version "4.19.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.19.1.tgz#93de4d867709d3313794723b5afd91e1e174f906"
+ integrity sha512-thFUbkHteM20BGShD6P08aungq4irbIZKUNbG70LN8RkO7YztcGPiKTTGZS7Kw+x5h8hOXs0i4OaHwFxlpQN6A==
+
"@rollup/rollup-darwin-arm64@4.18.0":
version "4.18.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz#b6dd74e117510dfe94541646067b0545b42ff096"
integrity sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==
+"@rollup/rollup-darwin-arm64@4.19.1":
+ version "4.19.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.19.1.tgz#e41e6a81673260ab196e0f59462b9940a6ac03cd"
+ integrity sha512-8o6eqeFZzVLia2hKPUZk4jdE3zW7LCcZr+MD18tXkgBBid3lssGVAYuox8x6YHoEPDdDa9ixTaStcmx88lio5Q==
+
"@rollup/rollup-darwin-x64@4.18.0":
version "4.18.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz#e07d76de1cec987673e7f3d48ccb8e106d42c05c"
integrity sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==
+"@rollup/rollup-darwin-x64@4.19.1":
+ version "4.19.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.19.1.tgz#2b0a0aef6e8c5317d494cfc9076d7a16b099bdcb"
+ integrity sha512-4T42heKsnbjkn7ovYiAdDVRRWZLU9Kmhdt6HafZxFcUdpjlBlxj4wDrt1yFWLk7G4+E+8p2C9tcmSu0KA6auGA==
+
"@rollup/rollup-linux-arm-gnueabihf@4.18.0":
version "4.18.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz#9f1a6d218b560c9d75185af4b8bb42f9f24736b8"
integrity sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==
+"@rollup/rollup-linux-arm-gnueabihf@4.19.1":
+ version "4.19.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.19.1.tgz#e22319deb5367384ef315e66bc6de80d2bf2b3ae"
+ integrity sha512-MXg1xp+e5GhZ3Vit1gGEyoC+dyQUBy2JgVQ+3hUrD9wZMkUw/ywgkpK7oZgnB6kPpGrxJ41clkPPnsknuD6M2Q==
+
"@rollup/rollup-linux-arm-musleabihf@4.18.0":
version "4.18.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz#53618b92e6ffb642c7b620e6e528446511330549"
integrity sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==
+"@rollup/rollup-linux-arm-musleabihf@4.19.1":
+ version "4.19.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.19.1.tgz#d5dd68f5d7ae21b345a5c87208c94e5c813f54b8"
+ integrity sha512-DZNLwIY4ftPSRVkJEaxYkq7u2zel7aah57HESuNkUnz+3bZHxwkCUkrfS2IWC1sxK6F2QNIR0Qr/YXw7nkF3Pw==
+
"@rollup/rollup-linux-arm64-gnu@4.18.0":
version "4.18.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz#99a7ba5e719d4f053761a698f7b52291cefba577"
integrity sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==
+"@rollup/rollup-linux-arm64-gnu@4.19.1":
+ version "4.19.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.19.1.tgz#1703d3a418d33f8f025acaf93f39ca1efcd5b645"
+ integrity sha512-C7evongnjyxdngSDRRSQv5GvyfISizgtk9RM+z2biV5kY6S/NF/wta7K+DanmktC5DkuaJQgoKGf7KUDmA7RUw==
+
"@rollup/rollup-linux-arm64-musl@4.18.0":
version "4.18.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz#f53db99a45d9bc00ce94db8a35efa7c3c144a58c"
integrity sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==
+"@rollup/rollup-linux-arm64-musl@4.19.1":
+ version "4.19.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.19.1.tgz#3f59c2c6e60f75ce8b1090bd841c555e3bb01f0e"
+ integrity sha512-89tFWqxfxLLHkAthAcrTs9etAoBFRduNfWdl2xUs/yLV+7XDrJ5yuXMHptNqf1Zw0UCA3cAutkAiAokYCkaPtw==
+
"@rollup/rollup-linux-powerpc64le-gnu@4.18.0":
version "4.18.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz#cbb0837408fe081ce3435cf3730e090febafc9bf"
integrity sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==
+"@rollup/rollup-linux-powerpc64le-gnu@4.19.1":
+ version "4.19.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.19.1.tgz#3f99a0921596a6f539121a312df29af52a205f15"
+ integrity sha512-PromGeV50sq+YfaisG8W3fd+Cl6mnOOiNv2qKKqKCpiiEke2KiKVyDqG/Mb9GWKbYMHj5a01fq/qlUR28PFhCQ==
+
"@rollup/rollup-linux-riscv64-gnu@4.18.0":
version "4.18.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz#8ed09c1d1262ada4c38d791a28ae0fea28b80cc9"
integrity sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==
+"@rollup/rollup-linux-riscv64-gnu@4.19.1":
+ version "4.19.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.19.1.tgz#c08fb3e629d50d2eac31329347cfc559a1cf81d1"
+ integrity sha512-/1BmHYh+iz0cNCP0oHCuF8CSiNj0JOGf0jRlSo3L/FAyZyG2rGBuKpkZVH9YF+x58r1jgWxvm1aRg3DHrLDt6A==
+
"@rollup/rollup-linux-s390x-gnu@4.18.0":
version "4.18.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz#938138d3c8e0c96f022252a28441dcfb17afd7ec"
integrity sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==
+"@rollup/rollup-linux-s390x-gnu@4.19.1":
+ version "4.19.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.19.1.tgz#173722cd745779d730d4b24d21386185e0e12de8"
+ integrity sha512-0cYP5rGkQWRZKy9/HtsWVStLXzCF3cCBTRI+qRL8Z+wkYlqN7zrSYm6FuY5Kd5ysS5aH0q5lVgb/WbG4jqXN1Q==
+
"@rollup/rollup-linux-x64-gnu@4.18.0":
version "4.18.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz#1a7481137a54740bee1ded4ae5752450f155d942"
integrity sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==
+"@rollup/rollup-linux-x64-gnu@4.19.1":
+ version "4.19.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.19.1.tgz#0af2b6541ab0f4954d2c4f96bcdc7947420dd28c"
+ integrity sha512-XUXeI9eM8rMP8aGvii/aOOiMvTs7xlCosq9xCjcqI9+5hBxtjDpD+7Abm1ZhVIFE1J2h2VIg0t2DX/gjespC2Q==
+
"@rollup/rollup-linux-x64-musl@4.18.0":
version "4.18.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz#f1186afc601ac4f4fc25fac4ca15ecbee3a1874d"
integrity sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==
+"@rollup/rollup-linux-x64-musl@4.19.1":
+ version "4.19.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.19.1.tgz#f973f9552744764b221128f7c3629222216ace69"
+ integrity sha512-V7cBw/cKXMfEVhpSvVZhC+iGifD6U1zJ4tbibjjN+Xi3blSXaj/rJynAkCFFQfoG6VZrAiP7uGVzL440Q6Me2Q==
+
"@rollup/rollup-win32-arm64-msvc@4.18.0":
version "4.18.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz#ed6603e93636a96203c6915be4117245c1bd2daf"
integrity sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==
+"@rollup/rollup-win32-arm64-msvc@4.19.1":
+ version "4.19.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.19.1.tgz#21ac5ed84d914bc31821fec3dd909f7257cfb17b"
+ integrity sha512-88brja2vldW/76jWATlBqHEoGjJLRnP0WOEKAUbMcXaAZnemNhlAHSyj4jIwMoP2T750LE9lblvD4e2jXleZsA==
+
"@rollup/rollup-win32-ia32-msvc@4.18.0":
version "4.18.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz#14e0b404b1c25ebe6157a15edb9c46959ba74c54"
integrity sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==
+"@rollup/rollup-win32-ia32-msvc@4.19.1":
+ version "4.19.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.19.1.tgz#0cfe740063b35dcd5a62c4e243226631a846ce11"
+ integrity sha512-LdxxcqRVSXi6k6JUrTah1rHuaupoeuiv38du8Mt4r4IPer3kwlTo+RuvfE8KzZ/tL6BhaPlzJ3835i6CxrFIRQ==
+
"@rollup/rollup-win32-x64-msvc@4.18.0":
version "4.18.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz#5d694d345ce36b6ecf657349e03eb87297e68da4"
integrity sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==
+"@rollup/rollup-win32-x64-msvc@4.19.1":
+ version "4.19.1"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.19.1.tgz#5f2c40d3f1b53ede80fb4e6964f840c0f8936832"
+ integrity sha512-2bIrL28PcK3YCqD9anGxDxamxdiJAxA+l7fWIwM5o8UqNy1t3d1NdAweO2XhA0KTDJ5aH1FsuiT5+7VhtHliXg==
+
"@roxi/routify@2.18.0":
version "2.18.0"
resolved "https://registry.yarnpkg.com/@roxi/routify/-/routify-2.18.0.tgz#8f88bedd936312d0dbe44cbc11ab179b1f938ec2"
@@ -5699,11 +5791,11 @@
integrity sha512-7GgtHCs/QZrBrDzgIJnQtuSvhFSwhyYSI2uafSwZoNt1iOGhEN5fwNrQMjtONyHm9+/LoA4453jH0CMYcr06Pg==
"@types/node@>=8.1.0":
- version "20.14.9"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.9.tgz#12e8e765ab27f8c421a1820c99f5f313a933b420"
- integrity sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==
+ version "22.0.0"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-22.0.0.tgz#04862a2a71e62264426083abe1e27e87cac05a30"
+ integrity sha512-VT7KSYudcPOzP5Q0wfbowyNLaVR8QWUdw+088uFWwfvpY6uCWaXpqV6ieLAu9WBcnTa7H4Z5RLK8I5t2FuOcqw==
dependencies:
- undici-types "~5.26.4"
+ undici-types "~6.11.1"
"@types/node@^18.11.18":
version "18.19.10"
@@ -9131,11 +9223,16 @@ dateformat@^4.6.3:
resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-4.6.3.tgz#556fa6497e5217fedb78821424f8a1c22fa3f4b5"
integrity sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==
-dayjs@^1.10.8, dayjs@^1.8.15:
+dayjs@^1.10.8:
version "1.11.11"
resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.11.tgz#dfe0e9d54c5f8b68ccf8ca5f72ac603e7e5ed59e"
integrity sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==
+dayjs@^1.8.15:
+ version "1.11.12"
+ resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.12.tgz#5245226cc7f40a15bf52e0b99fd2a04669ccac1d"
+ integrity sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg==
+
dc-polyfill@^0.1.2:
version "0.1.3"
resolved "https://registry.yarnpkg.com/dc-polyfill/-/dc-polyfill-0.1.3.tgz#fe9eefc86813439dd46d6f9ad9582ec079c39720"
@@ -10332,10 +10429,10 @@ es6-promise@^4.2.4:
resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a"
integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==
-esbuild-node-externals@^1.8.0:
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/esbuild-node-externals/-/esbuild-node-externals-1.8.0.tgz#878fbe458d4e58337753c2eacfd7200dc1077bd1"
- integrity sha512-pYslmT8Bl383UnfxzHQQRpCgBNIOwAzDaYheuIeI4CODxelsN/eQroVn5STDow5QOpRalMgWUR+R8LfSgUROcw==
+esbuild-node-externals@^1.14.0:
+ version "1.14.0"
+ resolved "https://registry.yarnpkg.com/esbuild-node-externals/-/esbuild-node-externals-1.14.0.tgz#fc2950c67a068dc2b538fd1381ad7d8e20a6f54d"
+ integrity sha512-jMWnTlCII3cLEjR5+u0JRSTJuP+MgbjEHKfwSIAI41NgLQ0ZjfzjchlbEn0r7v2u5gCBMSEYvYlkO7GDG8gG3A==
dependencies:
find-up "^5.0.0"
tslib "^2.4.1"
@@ -10933,7 +11030,14 @@ fast-xml-parser@4.2.5:
dependencies:
strnum "^1.0.5"
-fast-xml-parser@^4.1.3, fast-xml-parser@^4.2.2, fast-xml-parser@^4.2.5:
+fast-xml-parser@^4.1.3:
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz#86dbf3f18edf8739326447bcaac31b4ae7f6514f"
+ integrity sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==
+ dependencies:
+ strnum "^1.0.5"
+
+fast-xml-parser@^4.2.2, fast-xml-parser@^4.2.5:
version "4.4.0"
resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.4.0.tgz#341cc98de71e9ba9e651a67f41f1752d1441a501"
integrity sha512-kLY3jFlwIYwBNDojclKsNAC12sfD6NwW74QB2CoNGPvtVxjliYehVunB3HYyNi+n4Tt1dAcgwYvmKF/Z18flqg==
@@ -11706,9 +11810,9 @@ glob@^10.0.0, glob@^10.2.2:
path-scurry "^1.11.1"
glob@^10.3.7:
- version "10.4.2"
- resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.2.tgz#bed6b95dade5c1f80b4434daced233aee76160e5"
- integrity sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==
+ version "10.4.5"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956"
+ integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==
dependencies:
foreground-child "^3.1.0"
jackspeak "^3.1.2"
@@ -15144,13 +15248,20 @@ magic-string@^0.26.7:
dependencies:
sourcemap-codec "^1.4.8"
-magic-string@^0.30.3, magic-string@^0.30.4, magic-string@^0.30.5:
+magic-string@^0.30.3, magic-string@^0.30.4:
version "0.30.10"
resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.10.tgz#123d9c41a0cb5640c892b041d4cfb3bd0aa4b39e"
integrity sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==
dependencies:
"@jridgewell/sourcemap-codec" "^1.4.15"
+magic-string@^0.30.5:
+ version "0.30.11"
+ resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.11.tgz#301a6f93b3e8c2cb13ac1a7a673492c0dfd12954"
+ integrity sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==
+ dependencies:
+ "@jridgewell/sourcemap-codec" "^1.5.0"
+
make-dir@4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e"
@@ -17813,9 +17924,9 @@ postcss@^8.1.7, postcss@^8.2.9, postcss@^8.3.11, postcss@^8.4.12, postcss@^8.4.2
source-map-js "^1.2.0"
postcss@^8.4.39:
- version "8.4.39"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.39.tgz#aa3c94998b61d3a9c259efa51db4b392e1bde0e3"
- integrity sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==
+ version "8.4.40"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.40.tgz#eb81f2a4dd7668ed869a6db25999e02e9ad909d8"
+ integrity sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==
dependencies:
nanoid "^3.3.7"
picocolors "^1.0.1"
@@ -17852,9 +17963,9 @@ posthog-js@^1.118.0:
preact "^10.19.3"
posthog-js@^1.13.4:
- version "1.144.1"
- resolved "https://registry.yarnpkg.com/posthog-js/-/posthog-js-1.144.1.tgz#a665f324be3e78a140ec1cf9488be8e8947c052b"
- integrity sha512-CdhKH+gTFJgVEDVdeuhD2Mm4yMRr6qhVSPNDUQ7naJfj/HMhcZjF/ImobluD4YGd85dLq9nqImEIcf4Twd9h6g==
+ version "1.150.1"
+ resolved "https://registry.yarnpkg.com/posthog-js/-/posthog-js-1.150.1.tgz#ce2e0aa0dc30369bf1b1b9a38b9fbf25e5c01ba0"
+ integrity sha512-jHSnqtAWkUQkiedQgHpD00+z8RUF0loDq7ORakBKfQjdntTJIEk16ewqTNRxnpE86guWDoy2J3iAqLgAYfFaLA==
dependencies:
fflate "^0.4.8"
preact "^10.19.3"
@@ -18440,9 +18551,9 @@ q@^1.1.2:
integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==
qs@^6.10.3:
- version "6.12.2"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.12.2.tgz#5443b587f3bf73ac68968de491e5b25bafe04478"
- integrity sha512-x+NLUpx9SYrcwXtX7ob1gnkSems4i/mGZX5SlYxwIau6RrUSODO89TR/XDGGpn5RPWSYIB+aSfuSlV5+CmbTBg==
+ version "6.12.3"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.12.3.tgz#e43ce03c8521b9c7fd7f1f13e514e5ca37727754"
+ integrity sha512-AWJm14H1vVaO/iNZ4/hO+HyaTehuy9nRqVdkTqlJt0HWvBiBIEXFmb4C0DGeYo3Xes9rrEW+TxHsaigCbN5ICQ==
dependencies:
side-channel "^1.0.6"
@@ -18956,9 +19067,9 @@ requirejs-config-file@^4.0.0:
stringify-object "^3.2.1"
requirejs@^2.3.5:
- version "2.3.6"
- resolved "https://registry.yarnpkg.com/requirejs/-/requirejs-2.3.6.tgz#e5093d9601c2829251258c0b9445d4d19fa9e7c9"
- integrity sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==
+ version "2.3.7"
+ resolved "https://registry.yarnpkg.com/requirejs/-/requirejs-2.3.7.tgz#0b22032e51a967900e0ae9f32762c23a87036bd0"
+ integrity sha512-DouTG8T1WanGok6Qjg2SXuCMzszOo0eHeH9hDZ5Y4x8Je+9JB38HdTLT4/VA8OaUhBa0JPVHJ0pyBkM1z+pDsw==
requires-port@^1.0.0:
version "1.0.0"
@@ -19093,9 +19204,9 @@ rimraf@^4.4.1:
glob "^9.2.0"
rimraf@^5.0.7:
- version "5.0.7"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.7.tgz#27bddf202e7d89cb2e0381656380d1734a854a74"
- integrity sha512-nV6YcJo5wbLW77m+8KjH8aB/7/rxQy9SZ0HY5shnwULfS+9nmTtVXAJET5NdZmCzA4fPI/Hm1wo/Po/4mopOdg==
+ version "5.0.9"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.9.tgz#c3baa1b886eadc2ec7981a06a593c3d01134ffe9"
+ integrity sha512-3i7b8OcswU6CpU8Ej89quJD4O98id7TtVM5U4Mybh84zQXdrFmDLouWBEEaD/QfO3gDDfH+AGFCGsR7kngzQnA==
dependencies:
glob "^10.3.7"
@@ -19261,7 +19372,32 @@ rollup@^3.27.1:
optionalDependencies:
fsevents "~2.3.2"
-rollup@^4.13.0, rollup@^4.9.4, rollup@^4.9.6:
+rollup@^4.13.0:
+ version "4.19.1"
+ resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.19.1.tgz#21d865cd60d4a325172ce8b082e60caccd97b309"
+ integrity sha512-K5vziVlg7hTpYfFBI+91zHBEMo6jafYXpkMlqZjg7/zhIG9iHqazBf4xz9AVdjS9BruRn280ROqLI7G3OFRIlw==
+ dependencies:
+ "@types/estree" "1.0.5"
+ optionalDependencies:
+ "@rollup/rollup-android-arm-eabi" "4.19.1"
+ "@rollup/rollup-android-arm64" "4.19.1"
+ "@rollup/rollup-darwin-arm64" "4.19.1"
+ "@rollup/rollup-darwin-x64" "4.19.1"
+ "@rollup/rollup-linux-arm-gnueabihf" "4.19.1"
+ "@rollup/rollup-linux-arm-musleabihf" "4.19.1"
+ "@rollup/rollup-linux-arm64-gnu" "4.19.1"
+ "@rollup/rollup-linux-arm64-musl" "4.19.1"
+ "@rollup/rollup-linux-powerpc64le-gnu" "4.19.1"
+ "@rollup/rollup-linux-riscv64-gnu" "4.19.1"
+ "@rollup/rollup-linux-s390x-gnu" "4.19.1"
+ "@rollup/rollup-linux-x64-gnu" "4.19.1"
+ "@rollup/rollup-linux-x64-musl" "4.19.1"
+ "@rollup/rollup-win32-arm64-msvc" "4.19.1"
+ "@rollup/rollup-win32-ia32-msvc" "4.19.1"
+ "@rollup/rollup-win32-x64-msvc" "4.19.1"
+ fsevents "~2.3.2"
+
+rollup@^4.9.4, rollup@^4.9.6:
version "4.18.0"
resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.18.0.tgz#497f60f0c5308e4602cf41136339fbf87d5f5dda"
integrity sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==
@@ -21424,6 +21560,11 @@ undici-types@~5.26.4:
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
+undici-types@~6.11.1:
+ version "6.11.1"
+ resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.11.1.tgz#432ea6e8efd54a48569705a699e62d8f4981b197"
+ integrity sha512-mIDEX2ek50x0OlRgxryxsenE5XaQD4on5U2inY7RApK3SOJpofyw7uW2AyfMKkhAxXIceo2DeWGVGwyvng1GNQ==
+
undici@^4.14.1:
version "4.16.0"
resolved "https://registry.yarnpkg.com/undici/-/undici-4.16.0.tgz#469bb87b3b918818d3d7843d91a1d08da357d5ff"
@@ -21777,9 +21918,9 @@ vite-plugin-static-copy@^0.17.0:
fsevents "~2.3.2"
vite@^5.0.0:
- version "5.3.3"
- resolved "https://registry.yarnpkg.com/vite/-/vite-5.3.3.tgz#5265b1f0a825b3b6564c2d07524777c83e3c04c2"
- integrity sha512-NPQdeCU0Dv2z5fu+ULotpuq5yfCS1BzKUIPhNbP3YBfAMGJXbt2nS+sbTFu+qchaqWTD+H3JK++nRwr6XIcp6A==
+ version "5.3.5"
+ resolved "https://registry.yarnpkg.com/vite/-/vite-5.3.5.tgz#b847f846fb2b6cb6f6f4ed50a830186138cb83d8"
+ integrity sha512-MdjglKR6AQXQb9JGiS7Rc2wC6uMjcm7Go/NHNO63EwiJXfuk9PgqiP/n5IDJCziMkfw9n4Ubp7lttNwz+8ZVKA==
dependencies:
esbuild "^0.21.3"
postcss "^8.4.39"
@@ -21914,9 +22055,9 @@ web-streams-polyfill@^3.2.1:
integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==
web-vitals@^4.0.1:
- version "4.2.1"
- resolved "https://registry.yarnpkg.com/web-vitals/-/web-vitals-4.2.1.tgz#67eec387ddd0ef4c25574a01ab9dae723eee2b97"
- integrity sha512-U6bAxeudnhDqcXNl50JC4hLlqox9DZnngxfISZm3DMZnonW35xtJOVUc091L+DOY+6hVZVpKXoiCP0RiT6339Q==
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/web-vitals/-/web-vitals-4.2.2.tgz#e883245180b95e175eb75a5ca8903b1a11597d7a"
+ integrity sha512-nYfoOqb4EmElljyXU2qdeE76KsvoHdftQKY4DzA9Aw8DervCg2bG634pHLrJ/d6+B4mE3nWTSJv8Mo7B2mbZkw==
webfinger@^0.4.2:
version "0.4.2"