From 5ec4e90c6d3c2e5b75623a31a834410da82e03b6 Mon Sep 17 00:00:00 2001 From: Gerard Burns Date: Thu, 29 Feb 2024 12:51:56 +0000 Subject: [PATCH 1/7] Revert "App Preview Skeleton (#12898)" (#13159) This reverts commit 9a9b74579529cd061735c371b73ec862ea1856cc. --- .../[screenId]/_components/AppPreview.svelte | 43 +-- .../builder/portal/apps/[appId]/index.svelte | 51 +--- .../client/src/components/ClientApp.svelte | 256 ++++++++---------- .../client/src/components/FreeFooter.svelte | 1 - .../src/components/ClientAppSkeleton.svelte | 244 ----------------- .../frontend-core/src/components/index.js | 1 - .../frontend-core/src/themes/midnight.css | 3 - packages/frontend-core/src/themes/nord.css | 3 - packages/server/package.json | 1 - .../src/api/controllers/static/index.ts | 79 +----- .../static/templates/BudibaseApp.svelte | 7 - .../api/controllers/static/templates/app.hbs | 8 +- packages/server/src/api/routes/static.ts | 2 +- scripts/build.js | 14 +- 14 files changed, 151 insertions(+), 562 deletions(-) delete mode 100644 packages/frontend-core/src/components/ClientAppSkeleton.svelte diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/AppPreview.svelte b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/AppPreview.svelte index 4bd62c0049..fa126bbc99 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/AppPreview.svelte +++ b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/_components/AppPreview.svelte @@ -12,11 +12,17 @@ hoverStore, } from "stores/builder" import ConfirmDialog from "components/common/ConfirmDialog.svelte" - import { Layout, Heading, Body, Icon, notifications } from "@budibase/bbui" + import { + ProgressCircle, + Layout, + Heading, + Body, + Icon, + notifications, + } from "@budibase/bbui" import ErrorSVG from "@budibase/frontend-core/assets/error.svg?raw" import { findComponent, findComponentPath } from "helpers/components" import { isActive, goto } from "@roxi/routify" - import { ClientAppSkeleton } from "@budibase/frontend-core" let iframe let layout @@ -234,16 +240,8 @@
{#if loading} -
- +
+
{:else if error}
@@ -260,6 +258,8 @@ bind:this={iframe} src="/app/preview" class:hidden={loading || error} + class:tablet={$previewStore.previewDevice === "tablet"} + class:mobile={$previewStore.previewDevice === "mobile"} />
diff --git a/packages/frontend-core/src/components/index.js b/packages/frontend-core/src/components/index.js index f71420b12b..f724e1e4d9 100644 --- a/packages/frontend-core/src/components/index.js +++ b/packages/frontend-core/src/components/index.js @@ -5,4 +5,3 @@ export { default as UserAvatar } from "./UserAvatar.svelte" export { default as UserAvatars } from "./UserAvatars.svelte" export { default as Updating } from "./Updating.svelte" export { Grid } from "./grid" -export { default as ClientAppSkeleton } from "./ClientAppSkeleton.svelte" diff --git a/packages/frontend-core/src/themes/midnight.css b/packages/frontend-core/src/themes/midnight.css index cf6a4fbd13..e311452262 100644 --- a/packages/frontend-core/src/themes/midnight.css +++ b/packages/frontend-core/src/themes/midnight.css @@ -17,8 +17,5 @@ --modal-background: var(--spectrum-global-color-gray-50); --drop-shadow: rgba(0, 0, 0, 0.25) !important; --spectrum-global-color-blue-100: rgba(35, 40, 50) !important; - - --spectrum-alias-background-color-secondary: var(--spectrum-global-color-gray-75); - --spectrum-alias-background-color-primary: var(--spectrum-global-color-gray-100); } diff --git a/packages/frontend-core/src/themes/nord.css b/packages/frontend-core/src/themes/nord.css index bc142db0fd..d47dbe8aa8 100644 --- a/packages/frontend-core/src/themes/nord.css +++ b/packages/frontend-core/src/themes/nord.css @@ -50,7 +50,4 @@ --modal-background: var(--spectrum-global-color-gray-50); --drop-shadow: rgba(0, 0, 0, 0.15) !important; --spectrum-global-color-blue-100: rgb(56, 65, 84) !important; - - --spectrum-alias-background-color-secondary: var(--spectrum-global-color-gray-75); - --spectrum-alias-background-color-primary: var(--spectrum-global-color-gray-100); } diff --git a/packages/server/package.json b/packages/server/package.json index 4f1a9fb3cc..45980a4be6 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -52,7 +52,6 @@ "@budibase/pro": "0.0.0", "@budibase/shared-core": "0.0.0", "@budibase/string-templates": "0.0.0", - "@budibase/frontend-core": "0.0.0", "@budibase/types": "0.0.0", "@bull-board/api": "5.10.2", "@bull-board/koa": "5.10.2", diff --git a/packages/server/src/api/controllers/static/index.ts b/packages/server/src/api/controllers/static/index.ts index 367934445a..5a3803e6d5 100644 --- a/packages/server/src/api/controllers/static/index.ts +++ b/packages/server/src/api/controllers/static/index.ts @@ -1,5 +1,7 @@ import { InvalidFileExtensions } from "@budibase/shared-core" + import AppComponent from "./templates/BudibaseApp.svelte" + import { join } from "../../../utilities/centralPath" import * as uuid from "uuid" import { ObjectStoreBuckets } from "../../../constants" @@ -22,13 +24,7 @@ import AWS from "aws-sdk" import fs from "fs" import sdk from "../../../sdk" import * as pro from "@budibase/pro" -import { - UserCtx, - App, - Ctx, - ProcessAttachmentResponse, - Feature, -} from "@budibase/types" +import { App, Ctx, ProcessAttachmentResponse } from "@budibase/types" import { getAppMigrationVersion, getLatestMigrationId, @@ -36,61 +32,6 @@ import { import send from "koa-send" -const getThemeVariables = (theme: string) => { - if (theme === "spectrum--lightest") { - return ` - --spectrum-global-color-gray-50: rgb(255, 255, 255); - --spectrum-global-color-gray-200: rgb(244, 244, 244); - --spectrum-global-color-gray-300: rgb(234, 234, 234); - --spectrum-alias-background-color-primary: var(--spectrum-global-color-gray-50); - ` - } - if (theme === "spectrum--light") { - return ` - --spectrum-global-color-gray-50: rgb(255, 255, 255); - --spectrum-global-color-gray-200: rgb(234, 234, 234); - --spectrum-global-color-gray-300: rgb(225, 225, 225); - --spectrum-alias-background-color-primary: var(--spectrum-global-color-gray-50); - - ` - } - if (theme === "spectrum--dark") { - return ` - --spectrum-global-color-gray-100: rgb(50, 50, 50); - --spectrum-global-color-gray-200: rgb(62, 62, 62); - --spectrum-global-color-gray-300: rgb(74, 74, 74); - --spectrum-alias-background-color-primary: var(--spectrum-global-color-gray-100); - ` - } - if (theme === "spectrum--darkest") { - return ` - --spectrum-global-color-gray-100: rgb(30, 30, 30); - --spectrum-global-color-gray-200: rgb(44, 44, 44); - --spectrum-global-color-gray-300: rgb(57, 57, 57); - --spectrum-alias-background-color-primary: var(--spectrum-global-color-gray-100); - ` - } - if (theme === "spectrum--nord") { - return ` - --spectrum-global-color-gray-100: #3b4252; - - --spectrum-global-color-gray-200: #424a5c; - --spectrum-global-color-gray-300: #4c566a; - --spectrum-alias-background-color-primary: var(--spectrum-global-color-gray-100); - ` - } - if (theme === "spectrum--midnight") { - return ` - --hue: 220; - --sat: 10%; - --spectrum-global-color-gray-100: hsl(var(--hue), var(--sat), 17%); - --spectrum-global-color-gray-200: hsl(var(--hue), var(--sat), 20%); - --spectrum-global-color-gray-300: hsl(var(--hue), var(--sat), 24%); - --spectrum-alias-background-color-primary: var(--spectrum-global-color-gray-100); - ` - } -} - export const toggleBetaUiFeature = async function (ctx: Ctx) { const cookieName = `beta:${ctx.params.feature}` @@ -205,7 +146,7 @@ const requiresMigration = async (ctx: Ctx) => { return requiresMigrations } -export const serveApp = async function (ctx: UserCtx) { +export const serveApp = async function (ctx: Ctx) { const needMigrations = await requiresMigration(ctx) const bbHeaderEmbed = @@ -226,19 +167,9 @@ export const serveApp = async function (ctx: UserCtx) { const appInfo = await db.get(DocumentType.APP_METADATA) let appId = context.getAppId() - const hideDevTools = !!ctx.params.appUrl - const sideNav = appInfo.navigation.navigation === "Left" - const hideFooter = - ctx?.user?.license?.features?.includes(Feature.BRANDING) || false - const themeVariables = getThemeVariables(appInfo?.theme) - if (!env.isJest()) { const plugins = objectStore.enrichPluginURLs(appInfo.usedPlugins) - const { head, html, css } = AppComponent.render({ - hideDevTools, - sideNav, - hideFooter, metaImage: branding?.metaImageUrl || "https://res.cloudinary.com/daog6scxm/image/upload/v1698759482/meta-images/plain-branded-meta-image-coral_ocxmgu.png", @@ -263,7 +194,7 @@ export const serveApp = async function (ctx: UserCtx) { ctx.body = await processString(appHbs, { head, body: html, - css: `:root{${themeVariables}} ${css.code}`, + style: css.code, appId, embedded: bbHeaderEmbed, }) diff --git a/packages/server/src/api/controllers/static/templates/BudibaseApp.svelte b/packages/server/src/api/controllers/static/templates/BudibaseApp.svelte index 63b293b4ca..7819368fc0 100644 --- a/packages/server/src/api/controllers/static/templates/BudibaseApp.svelte +++ b/packages/server/src/api/controllers/static/templates/BudibaseApp.svelte @@ -1,6 +1,4 @@ @@ -102,7 +96,6 @@ -
{#if clientLibPath}

There was an error loading your app

diff --git a/packages/server/src/api/controllers/static/templates/app.hbs b/packages/server/src/api/controllers/static/templates/app.hbs index b01b723c3e..8c445158a0 100644 --- a/packages/server/src/api/controllers/static/templates/app.hbs +++ b/packages/server/src/api/controllers/static/templates/app.hbs @@ -1,12 +1,8 @@ - + {{{head}}} - + -a11y-click-events-have-key-events
{displayValue} From 50bbbb2e0621422cc8b59d2fe77d633257ef3f87 Mon Sep 17 00:00:00 2001 From: mike12345567 Date: Thu, 29 Feb 2024 16:28:00 +0000 Subject: [PATCH 3/7] Updating datasource controller types, this branched out a little bit to removing as many anys as possible, and allowing RowValue to correctly be returned from the allDocs function of the DB. --- .../backend-core/src/db/couch/DatabaseImpl.ts | 3 +- .../backend-core/src/db/instrumentation.ts | 4 +- .../server/src/api/controllers/datasource.ts | 40 +++++++++++++------ .../server/src/api/controllers/integration.ts | 5 ++- .../db/defaultData/datasource_bb_default.ts | 8 ++-- packages/server/src/db/utils.ts | 14 ++++--- packages/server/src/integrations/index.ts | 2 + .../server/src/jsRunner/vm/isolated-vm.ts | 9 ++++- .../server/src/sdk/app/applications/import.ts | 4 +- .../src/sdk/app/datasources/datasources.ts | 2 +- packages/types/src/api/web/app/datasource.ts | 4 +- .../types/src/documents/app/datasource.ts | 17 ++++---- packages/types/src/documents/pouch.ts | 4 +- packages/types/src/sdk/datasources.ts | 1 + packages/types/src/sdk/db.ts | 10 ++++- 15 files changed, 84 insertions(+), 43 deletions(-) diff --git a/packages/backend-core/src/db/couch/DatabaseImpl.ts b/packages/backend-core/src/db/couch/DatabaseImpl.ts index 0e2b4173b0..7e7c997cbe 100644 --- a/packages/backend-core/src/db/couch/DatabaseImpl.ts +++ b/packages/backend-core/src/db/couch/DatabaseImpl.ts @@ -11,6 +11,7 @@ import { Document, isDocument, RowResponse, + RowValue, } from "@budibase/types" import { getCouchInfo } from "./connections" import { directCouchUrlCall } from "./utils" @@ -221,7 +222,7 @@ export class DatabaseImpl implements Database { }) } - async allDocs( + async allDocs( params: DatabaseQueryOpts ): Promise> { return this.performCall(db => { diff --git a/packages/backend-core/src/db/instrumentation.ts b/packages/backend-core/src/db/instrumentation.ts index aa2ac424ae..03010d4c92 100644 --- a/packages/backend-core/src/db/instrumentation.ts +++ b/packages/backend-core/src/db/instrumentation.ts @@ -1,5 +1,4 @@ import { - DocumentScope, DocumentDestroyResponse, DocumentInsertResponse, DocumentBulkResponse, @@ -13,6 +12,7 @@ import { DatabasePutOpts, DatabaseQueryOpts, Document, + RowValue, } from "@budibase/types" import tracer from "dd-trace" import { Writable } from "stream" @@ -79,7 +79,7 @@ export class DDInstrumentedDatabase implements Database { }) } - allDocs( + allDocs( params: DatabaseQueryOpts ): Promise> { return tracer.trace("db.allDocs", span => { diff --git a/packages/server/src/api/controllers/datasource.ts b/packages/server/src/api/controllers/datasource.ts index d70c13f800..17217ea018 100644 --- a/packages/server/src/api/controllers/datasource.ts +++ b/packages/server/src/api/controllers/datasource.ts @@ -15,10 +15,14 @@ import { FieldType, RelationshipFieldMetadata, SourceName, + UpdateDatasourceRequest, UpdateDatasourceResponse, UserCtx, VerifyDatasourceRequest, VerifyDatasourceResponse, + Table, + RowValue, + DynamicVariable, } from "@budibase/types" import sdk from "../../sdk" import { builderSocket } from "../../websockets" @@ -90,8 +94,10 @@ async function invalidateVariables( existingDatasource: Datasource, updatedDatasource: Datasource ) { - const existingVariables: any = existingDatasource.config?.dynamicVariables - const updatedVariables: any = updatedDatasource.config?.dynamicVariables + const existingVariables: DynamicVariable[] = + existingDatasource.config?.dynamicVariables + const updatedVariables: DynamicVariable[] = + updatedDatasource.config?.dynamicVariables const toInvalidate = [] if (!existingVariables) { @@ -103,9 +109,9 @@ async function invalidateVariables( toInvalidate.push(...existingVariables) } else { // invaldate changed / removed - existingVariables.forEach((existing: any) => { + existingVariables.forEach(existing => { const unchanged = updatedVariables.find( - (updated: any) => + updated => existing.name === updated.name && existing.queryId === updated.queryId && existing.value === updated.value @@ -118,24 +124,32 @@ async function invalidateVariables( await invalidateDynamicVariables(toInvalidate) } -export async function update(ctx: UserCtx) { +export async function update( + ctx: UserCtx +) { const db = context.getAppDB() const datasourceId = ctx.params.datasourceId const baseDatasource = await sdk.datasources.get(datasourceId) - const auth = baseDatasource.config?.auth await invalidateVariables(baseDatasource, ctx.request.body) const isBudibaseSource = baseDatasource.type === dbCore.BUDIBASE_DATASOURCE_TYPE - const dataSourceBody = isBudibaseSource - ? { name: ctx.request.body?.name } + const dataSourceBody: Datasource = isBudibaseSource + ? { + name: ctx.request.body?.name, + type: dbCore.BUDIBASE_DATASOURCE_TYPE, + source: SourceName.BUDIBASE, + } : ctx.request.body let datasource: Datasource = { ...baseDatasource, ...sdk.datasources.mergeConfigs(dataSourceBody, baseDatasource), } + + // this block is specific to GSheets, if no auth set, set it back + const auth = baseDatasource.config?.auth if (auth && !ctx.request.body.auth) { // don't strip auth config from DB datasource.config!.auth = auth @@ -204,7 +218,7 @@ async function destroyInternalTablesBySourceId(datasourceId: string) { const db = context.getAppDB() // Get all internal tables - const internalTables = await db.allDocs( + const internalTables = await db.allDocs( getTableParams(null, { include_docs: true, }) @@ -212,8 +226,8 @@ async function destroyInternalTablesBySourceId(datasourceId: string) { // Filter by datasource and return the docs. const datasourceTableDocs = internalTables.rows.reduce( - (acc: any, table: any) => { - if (table.doc.sourceId == datasourceId) { + (acc: Table[], table) => { + if (table.doc?.sourceId == datasourceId) { acc.push(table.doc) } return acc @@ -254,9 +268,9 @@ export async function destroy(ctx: UserCtx) { if (datasource.type === dbCore.BUDIBASE_DATASOURCE_TYPE) { await destroyInternalTablesBySourceId(datasourceId) } else { - const queries = await db.allDocs(getQueryParams(datasourceId)) + const queries = await db.allDocs(getQueryParams(datasourceId)) await db.bulkDocs( - queries.rows.map((row: any) => ({ + queries.rows.map(row => ({ _id: row.id, _rev: row.value.rev, _deleted: true, diff --git a/packages/server/src/api/controllers/integration.ts b/packages/server/src/api/controllers/integration.ts index 9cfde31e4c..57038f8401 100644 --- a/packages/server/src/api/controllers/integration.ts +++ b/packages/server/src/api/controllers/integration.ts @@ -1,7 +1,10 @@ import { getDefinition, getDefinitions } from "../../integrations" import { SourceName, UserCtx } from "@budibase/types" -const DISABLED_EXTERNAL_INTEGRATIONS = [SourceName.AIRTABLE] +const DISABLED_EXTERNAL_INTEGRATIONS = [ + SourceName.AIRTABLE, + SourceName.BUDIBASE, +] export async function fetch(ctx: UserCtx) { const definitions = await getDefinitions() diff --git a/packages/server/src/db/defaultData/datasource_bb_default.ts b/packages/server/src/db/defaultData/datasource_bb_default.ts index ac540cd8fc..03aed3c118 100644 --- a/packages/server/src/db/defaultData/datasource_bb_default.ts +++ b/packages/server/src/db/defaultData/datasource_bb_default.ts @@ -1,8 +1,8 @@ import { DEFAULT_BB_DATASOURCE_ID, - DEFAULT_INVENTORY_TABLE_ID, DEFAULT_EMPLOYEE_TABLE_ID, DEFAULT_EXPENSES_TABLE_ID, + DEFAULT_INVENTORY_TABLE_ID, DEFAULT_JOBS_TABLE_ID, } from "../../constants" import { importToRows } from "../../api/controllers/table/utils" @@ -15,19 +15,21 @@ import { expensesImport } from "./expensesImport" import { db as dbCore } from "@budibase/backend-core" import { AutoFieldSubType, + Datasource, FieldType, RelationshipType, Row, + SourceName, Table, TableSchema, TableSourceType, } from "@budibase/types" -const defaultDatasource = { +const defaultDatasource: Datasource = { _id: DEFAULT_BB_DATASOURCE_ID, type: dbCore.BUDIBASE_DATASOURCE_TYPE, name: "Sample Data", - source: "BUDIBASE", + source: SourceName.BUDIBASE, config: {}, } diff --git a/packages/server/src/db/utils.ts b/packages/server/src/db/utils.ts index 35d9b69e96..983cbf423c 100644 --- a/packages/server/src/db/utils.ts +++ b/packages/server/src/db/utils.ts @@ -1,13 +1,15 @@ import newid from "./newid" import { db as dbCore } from "@budibase/backend-core" import { - FieldType, + DatabaseQueryOpts, + Datasource, DocumentType, FieldSchema, - RelationshipFieldMetadata, - VirtualDocumentType, + FieldType, INTERNAL_TABLE_SOURCE_ID, - DatabaseQueryOpts, + RelationshipFieldMetadata, + SourceName, + VirtualDocumentType, } from "@budibase/types" export { DocumentType, VirtualDocumentType } from "@budibase/types" @@ -20,11 +22,11 @@ export const enum AppStatus { DEPLOYED = "published", } -export const BudibaseInternalDB = { +export const BudibaseInternalDB: Datasource = { _id: INTERNAL_TABLE_SOURCE_ID, type: dbCore.BUDIBASE_DATASOURCE_TYPE, name: "Budibase DB", - source: "BUDIBASE", + source: SourceName.BUDIBASE, config: {}, } diff --git a/packages/server/src/integrations/index.ts b/packages/server/src/integrations/index.ts index 49761bac85..ee2bb23f23 100644 --- a/packages/server/src/integrations/index.ts +++ b/packages/server/src/integrations/index.ts @@ -37,6 +37,7 @@ const DEFINITIONS: Record = { [SourceName.REDIS]: redis.schema, [SourceName.SNOWFLAKE]: snowflake.schema, [SourceName.ORACLE]: undefined, + [SourceName.BUDIBASE]: undefined, } const INTEGRATIONS: Record = { @@ -56,6 +57,7 @@ const INTEGRATIONS: Record = { [SourceName.REDIS]: redis.integration, [SourceName.SNOWFLAKE]: snowflake.integration, [SourceName.ORACLE]: undefined, + [SourceName.BUDIBASE]: undefined, } // optionally add oracle integration if the oracle binary can be installed diff --git a/packages/server/src/jsRunner/vm/isolated-vm.ts b/packages/server/src/jsRunner/vm/isolated-vm.ts index b0692f0fd1..928d1b8afa 100644 --- a/packages/server/src/jsRunner/vm/isolated-vm.ts +++ b/packages/server/src/jsRunner/vm/isolated-vm.ts @@ -99,7 +99,14 @@ export class IsolatedVM implements VM { } withContext(context: Record, executeWithContext: () => T) { - this.addToContext(context) + this.addToContext({ + ...context, + Snippets: { + specialFunction: function (special: string) { + return "hello world! " + special + }, + }, + }) try { return executeWithContext() diff --git a/packages/server/src/sdk/app/applications/import.ts b/packages/server/src/sdk/app/applications/import.ts index c3415bdb36..f712548fcb 100644 --- a/packages/server/src/sdk/app/applications/import.ts +++ b/packages/server/src/sdk/app/applications/import.ts @@ -85,7 +85,9 @@ async function getImportableDocuments(db: Database) { const docPromises = [] for (let docType of DocumentTypesToImport) { docPromises.push( - db.allDocs(dbCore.getDocParams(docType, null, { include_docs: true })) + db.allDocs( + dbCore.getDocParams(docType, null, { include_docs: true }) + ) ) } // map the responses to the document itself diff --git a/packages/server/src/sdk/app/datasources/datasources.ts b/packages/server/src/sdk/app/datasources/datasources.ts index c71c3f1b31..fd0d291d91 100644 --- a/packages/server/src/sdk/app/datasources/datasources.ts +++ b/packages/server/src/sdk/app/datasources/datasources.ts @@ -229,7 +229,7 @@ export async function removeSecretSingle(datasource: Datasource) { } export function mergeConfigs(update: Datasource, old: Datasource) { - if (!update.config) { + if (!update.config || !old.config) { return update } // specific to REST datasources, fix the auth configs again if required diff --git a/packages/types/src/api/web/app/datasource.ts b/packages/types/src/api/web/app/datasource.ts index 4a3d07a952..f931665917 100644 --- a/packages/types/src/api/web/app/datasource.ts +++ b/packages/types/src/api/web/app/datasource.ts @@ -32,9 +32,7 @@ export interface FetchDatasourceInfoResponse { tableNames: string[] } -export interface UpdateDatasourceRequest extends Datasource { - datasource: Datasource -} +export interface UpdateDatasourceRequest extends Datasource {} export interface BuildSchemaFromSourceRequest { tablesFilter?: string[] diff --git a/packages/types/src/documents/app/datasource.ts b/packages/types/src/documents/app/datasource.ts index 67035a2e72..8976e1cae3 100644 --- a/packages/types/src/documents/app/datasource.ts +++ b/packages/types/src/documents/app/datasource.ts @@ -6,6 +6,9 @@ export interface Datasource extends Document { type: string name?: string source: SourceName + // this is a googlesheets specific property which + // can be found in the GSheets schema - pertains to SSO creds + auth?: { type: string } // the config is defined by the schema config?: Record plus?: boolean @@ -36,6 +39,12 @@ export interface RestAuthConfig { config: RestBasicAuthConfig | RestBearerAuthConfig } +export interface DynamicVariable { + name: string + queryId: string + value: string +} + export interface RestConfig { url: string rejectUnauthorized: boolean @@ -47,11 +56,5 @@ export interface RestConfig { staticVariables: { [key: string]: string } - dynamicVariables: [ - { - name: string - queryId: string - value: string - } - ] + dynamicVariables: DynamicVariable[] } diff --git a/packages/types/src/documents/pouch.ts b/packages/types/src/documents/pouch.ts index 11efc502be..e1de89649c 100644 --- a/packages/types/src/documents/pouch.ts +++ b/packages/types/src/documents/pouch.ts @@ -5,7 +5,7 @@ export interface RowValue { deleted: boolean } -export interface RowResponse { +export interface RowResponse { id: string key: string error: string @@ -13,7 +13,7 @@ export interface RowResponse { doc?: T } -export interface AllDocsResponse { +export interface AllDocsResponse { offset: number total_rows: number rows: RowResponse[] diff --git a/packages/types/src/sdk/datasources.ts b/packages/types/src/sdk/datasources.ts index 7a335eb3b9..9c0f3a4165 100644 --- a/packages/types/src/sdk/datasources.ts +++ b/packages/types/src/sdk/datasources.ts @@ -56,6 +56,7 @@ export enum SourceName { FIRESTORE = "FIRESTORE", REDIS = "REDIS", SNOWFLAKE = "SNOWFLAKE", + BUDIBASE = "BUDIBASE", } export enum IncludeRelationship { diff --git a/packages/types/src/sdk/db.ts b/packages/types/src/sdk/db.ts index 9e44a4827f..c4e4a4f02f 100644 --- a/packages/types/src/sdk/db.ts +++ b/packages/types/src/sdk/db.ts @@ -1,5 +1,11 @@ import type Nano from "@budibase/nano" -import { AllDocsResponse, AnyDocument, Document, ViewTemplateOpts } from "../" +import { + AllDocsResponse, + AnyDocument, + Document, + RowValue, + ViewTemplateOpts, +} from "../" import { Writable } from "stream" export enum SearchIndex { @@ -135,7 +141,7 @@ export interface Database { opts?: DatabasePutOpts ): Promise bulkDocs(documents: AnyDocument[]): Promise - allDocs( + allDocs( params: DatabaseQueryOpts ): Promise> query( From 92ac417fdf8beb167fa4e29cc38630df48be415f Mon Sep 17 00:00:00 2001 From: mike12345567 Date: Thu, 29 Feb 2024 16:31:50 +0000 Subject: [PATCH 4/7] Removing accidentally commited stuff. --- packages/server/src/jsRunner/vm/isolated-vm.ts | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/packages/server/src/jsRunner/vm/isolated-vm.ts b/packages/server/src/jsRunner/vm/isolated-vm.ts index 928d1b8afa..b0692f0fd1 100644 --- a/packages/server/src/jsRunner/vm/isolated-vm.ts +++ b/packages/server/src/jsRunner/vm/isolated-vm.ts @@ -99,14 +99,7 @@ export class IsolatedVM implements VM { } withContext(context: Record, executeWithContext: () => T) { - this.addToContext({ - ...context, - Snippets: { - specialFunction: function (special: string) { - return "hello world! " + special - }, - }, - }) + this.addToContext(context) try { return executeWithContext() From b4906b0db3c26bbc35f32afa603deed77a5b5784 Mon Sep 17 00:00:00 2001 From: melohagan <101575380+melohagan@users.noreply.github.com> Date: Thu, 29 Feb 2024 16:45:40 +0000 Subject: [PATCH 5/7] Fetch attachment URL in public API retrieve row (#13167) --- packages/server/src/api/controllers/row/internal.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/server/src/api/controllers/row/internal.ts b/packages/server/src/api/controllers/row/internal.ts index 3ee08fff2e..cc903bd74a 100644 --- a/packages/server/src/api/controllers/row/internal.ts +++ b/packages/server/src/api/controllers/row/internal.ts @@ -189,11 +189,12 @@ export async function fetchEnrichedRow(ctx: UserCtx) { const tableId = utils.getTableId(ctx) const rowId = ctx.params.rowId as string // need table to work out where links go in row, as well as the link docs - const [table, row, links] = await Promise.all([ + const [table, links] = await Promise.all([ sdk.tables.getTable(tableId), - utils.findRow(ctx, tableId, rowId), linkRows.getLinkDocuments({ tableId, rowId, fieldName }), ]) + let row = await utils.findRow(ctx, tableId, rowId) + row = await outputProcessing(table, row) const linkVals = links as LinkDocumentValue[] // look up the actual rows based on the ids From a91ecb8c1443c9d2d91d4c0e97418bf73de281cd Mon Sep 17 00:00:00 2001 From: mike12345567 Date: Thu, 29 Feb 2024 17:03:04 +0000 Subject: [PATCH 6/7] Addressing PR comments. --- packages/server/src/api/controllers/datasource.ts | 4 ++-- packages/types/src/documents/pouch.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/server/src/api/controllers/datasource.ts b/packages/server/src/api/controllers/datasource.ts index 17217ea018..0f17c5a2f5 100644 --- a/packages/server/src/api/controllers/datasource.ts +++ b/packages/server/src/api/controllers/datasource.ts @@ -95,9 +95,9 @@ async function invalidateVariables( updatedDatasource: Datasource ) { const existingVariables: DynamicVariable[] = - existingDatasource.config?.dynamicVariables + existingDatasource.config?.dynamicVariables || [] const updatedVariables: DynamicVariable[] = - updatedDatasource.config?.dynamicVariables + updatedDatasource.config?.dynamicVariables || [] const toInvalidate = [] if (!existingVariables) { diff --git a/packages/types/src/documents/pouch.ts b/packages/types/src/documents/pouch.ts index e1de89649c..6ff851a515 100644 --- a/packages/types/src/documents/pouch.ts +++ b/packages/types/src/documents/pouch.ts @@ -9,7 +9,7 @@ export interface RowResponse { id: string key: string error: string - value: T | RowValue + value: T doc?: T } From e79e7c7cec603cfe6f7978de2bf6a5c0eb07002b Mon Sep 17 00:00:00 2001 From: Budibase Staging Release Bot <> Date: Thu, 29 Feb 2024 18:11:02 +0000 Subject: [PATCH 7/7] Bump version to 2.20.14 --- lerna.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lerna.json b/lerna.json index 1b559f217d..4807a80646 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "2.20.13", + "version": "2.20.14", "npmClient": "yarn", "packages": [ "packages/*",