diff --git a/.github/ISSUE_TEMPLATE/epic.md b/.github/ISSUE_TEMPLATE/epic.md new file mode 100644 index 0000000000..b8cf652125 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/epic.md @@ -0,0 +1,24 @@ +--- +name: Epic +about: Plan a new project +title: '' +labels: epic +assignees: '' + +--- + +## Description +Brief summary of what this Epic is, whether it's a larger project, goal, or user story. Describe the job to be done, which persona this Epic is mainly for, or if more multiple, break it down by user and job story. + +## Spec +Link to confluence spec + +## Teams and Stakeholders +Describe who needs to be kept up-to-date about this Epic, included in discussions, or updated along the way. Stakeholders can be both in Product/Engineering, as well as other teams like Customer Success who might want to keep customers updated on the Epic project. + + +## Workflow +- [ ] Spec Created and pasted above +- [ ] Product Review +- [ ] Designs created +- [ ] Individual Tasks created and assigned to Epic diff --git a/lerna.json b/lerna.json index 172a1dbaa4..2aabf5e8bc 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "1.3.21-alpha.0", + "version": "1.3.22-alpha.2", "npmClient": "yarn", "packages": [ "packages/*" diff --git a/packages/backend-core/package.json b/packages/backend-core/package.json index 2bea6f846a..3d52ba7ecd 100644 --- a/packages/backend-core/package.json +++ b/packages/backend-core/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/backend-core", - "version": "1.3.21-alpha.0", + "version": "1.3.22-alpha.2", "description": "Budibase backend core libraries used in server and worker", "main": "dist/src/index.js", "types": "dist/src/index.d.ts", @@ -20,7 +20,7 @@ "test:watch": "jest --watchAll" }, "dependencies": { - "@budibase/types": "1.3.21-alpha.0", + "@budibase/types": "1.3.22-alpha.2", "@shopify/jest-koa-mocks": "5.0.1", "@techpass/passport-openidconnect": "0.3.2", "aws-sdk": "2.1030.0", diff --git a/packages/backend-core/src/db/constants.ts b/packages/backend-core/src/db/constants.ts index 2c2c29cee2..62f4e8820f 100644 --- a/packages/backend-core/src/db/constants.ts +++ b/packages/backend-core/src/db/constants.ts @@ -44,6 +44,7 @@ export enum DocumentType { DEV_INFO = "devinfo", AUTOMATION_LOG = "log_au", ACCOUNT_METADATA = "acc_metadata", + PLUGIN = "plg", } export const StaticDatabases = { diff --git a/packages/backend-core/src/db/utils.ts b/packages/backend-core/src/db/utils.ts index c93c7b5662..cc20b87a58 100644 --- a/packages/backend-core/src/db/utils.ts +++ b/packages/backend-core/src/db/utils.ts @@ -3,7 +3,7 @@ import { DEFAULT_TENANT_ID, Configs } from "../constants" import env from "../environment" import { SEPARATOR, DocumentType, UNICODE_MAX, ViewName } from "./constants" import { getTenantId, getGlobalDB } from "../context" -import { getGlobalDBName } from "../tenancy/utils" +import { getGlobalDBName } from "../tenancy" import fetch from "node-fetch" import { doWithDB, allDbs } from "./index" import { getCouchInfo } from "./pouch" @@ -367,6 +367,21 @@ export const generateDevInfoID = (userId: any) => { return `${DocumentType.DEV_INFO}${SEPARATOR}${userId}` } +/** + * Generates a new plugin ID - to be used in the global DB. + * @returns {string} The new plugin ID which a plugin metadata document can be stored under. + */ +export const generatePluginID = (name: string) => { + return `${DocumentType.PLUGIN}${SEPARATOR}${name}` +} + +/** + * Gets parameters for retrieving automations, this is a utility function for the getDocParams function. + */ +export const getPluginParams = (pluginId?: string | null, otherProps = {}) => { + return getDocParams(DocumentType.PLUGIN, pluginId, otherProps) +} + /** * Returns the most granular configuration document from the DB based on the type, workspace and userID passed. * @param {Object} db - db instance to query diff --git a/packages/bbui/package.json b/packages/bbui/package.json index a98c76e679..bfe94cbb62 100644 --- a/packages/bbui/package.json +++ b/packages/bbui/package.json @@ -1,7 +1,7 @@ { "name": "@budibase/bbui", "description": "A UI solution used in the different Budibase projects.", - "version": "1.3.21-alpha.0", + "version": "1.3.22-alpha.2", "license": "MPL-2.0", "svelte": "src/index.js", "module": "dist/bbui.es.js", @@ -38,7 +38,7 @@ ], "dependencies": { "@adobe/spectrum-css-workflow-icons": "^1.2.1", - "@budibase/string-templates": "1.3.21-alpha.0", + "@budibase/string-templates": "1.3.22-alpha.2", "@spectrum-css/actionbutton": "^1.0.1", "@spectrum-css/actiongroup": "^1.0.1", "@spectrum-css/avatar": "^3.0.2", diff --git a/packages/builder/cypress/integration/createComponents.spec.js b/packages/builder/cypress/integration/createComponents.spec.js index e39ce4a4a8..7f29466258 100644 --- a/packages/builder/cypress/integration/createComponents.spec.js +++ b/packages/builder/cypress/integration/createComponents.spec.js @@ -2,7 +2,7 @@ import filterTests from "../support/filterTests" const interact = require("../support/interact") filterTests(["all"], () => { - context("Create Components", () => { + xcontext("Create Components", () => { let headlineId before(() => { diff --git a/packages/builder/package.json b/packages/builder/package.json index a65f840f3d..ffacb1d331 100644 --- a/packages/builder/package.json +++ b/packages/builder/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/builder", - "version": "1.3.21-alpha.0", + "version": "1.3.22-alpha.2", "license": "GPL-3.0", "private": true, "scripts": { @@ -71,10 +71,10 @@ } }, "dependencies": { - "@budibase/bbui": "1.3.21-alpha.0", - "@budibase/client": "1.3.21-alpha.0", - "@budibase/frontend-core": "1.3.21-alpha.0", - "@budibase/string-templates": "1.3.21-alpha.0", + "@budibase/bbui": "1.3.22-alpha.2", + "@budibase/client": "1.3.22-alpha.2", + "@budibase/frontend-core": "1.3.22-alpha.2", + "@budibase/string-templates": "1.3.22-alpha.2", "@sentry/browser": "5.19.1", "@spectrum-css/page": "^3.0.1", "@spectrum-css/vars": "^3.0.1", diff --git a/packages/builder/src/components/integration/QueryBindingBuilder.svelte b/packages/builder/src/components/integration/QueryBindingBuilder.svelte index 64736e5f78..255bee21dd 100644 --- a/packages/builder/src/components/integration/QueryBindingBuilder.svelte +++ b/packages/builder/src/components/integration/QueryBindingBuilder.svelte @@ -1,20 +1,31 @@ @@ -35,34 +46,57 @@ {/if}
- { - queryBindings = e.detail.map(binding => { - return { - name: binding.name, - default: binding.value, - } - }) - }} - /> + {#each queryBindings as binding, idx} + + onBindingChange(binding.name, evt.detail)} + bind:value={binding.default} + /> + {#if bindable} + onBindingChange(binding.name, evt.detail)} + value={runtimeToReadableBinding( + bindings, + customParams?.[binding.name] + )} + {bindings} + /> + {:else} + deleteQueryBinding(idx)} /> + {/if} + {/each}
diff --git a/packages/cli/package.json b/packages/cli/package.json index b3cfff7525..b3ecc2057e 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/cli", - "version": "1.3.21-alpha.0", + "version": "1.3.22-alpha.2", "description": "Budibase CLI, for developers, self hosting and migrations.", "main": "src/index.js", "bin": { @@ -26,9 +26,7 @@ "outputPath": "build" }, "dependencies": { - "@budibase/backend-core": "1.3.21-alpha.0", - "@budibase/string-templates": "1.3.21-alpha.0", - "@budibase/types": "1.3.21-alpha.0", + "@budibase/backend-core": "1.3.22-alpha.2", "axios": "0.21.2", "chalk": "4.1.0", "cli-progress": "3.11.2", diff --git a/packages/client/package.json b/packages/client/package.json index beb3d87cad..8bd2382b3b 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/client", - "version": "1.3.21-alpha.0", + "version": "1.3.22-alpha.2", "license": "MPL-2.0", "module": "dist/budibase-client.js", "main": "dist/budibase-client.js", @@ -19,9 +19,9 @@ "dev:builder": "rollup -cw" }, "dependencies": { - "@budibase/bbui": "1.3.21-alpha.0", - "@budibase/frontend-core": "1.3.21-alpha.0", - "@budibase/string-templates": "1.3.21-alpha.0", + "@budibase/bbui": "1.3.22-alpha.2", + "@budibase/frontend-core": "1.3.22-alpha.2", + "@budibase/string-templates": "1.3.22-alpha.2", "@spectrum-css/button": "^3.0.3", "@spectrum-css/card": "^3.0.3", "@spectrum-css/divider": "^1.0.3", diff --git a/packages/frontend-core/package.json b/packages/frontend-core/package.json index 2729e6cd02..7177bbd755 100644 --- a/packages/frontend-core/package.json +++ b/packages/frontend-core/package.json @@ -1,12 +1,12 @@ { "name": "@budibase/frontend-core", - "version": "1.3.21-alpha.0", + "version": "1.3.22-alpha.2", "description": "Budibase frontend core libraries used in builder and client", "author": "Budibase", "license": "MPL-2.0", "svelte": "src/index.js", "dependencies": { - "@budibase/bbui": "1.3.21-alpha.0", + "@budibase/bbui": "1.3.22-alpha.2", "lodash": "^4.17.21", "svelte": "^3.46.2" } diff --git a/packages/server/package.json b/packages/server/package.json index 6a009cc165..aac10fed41 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,7 +1,7 @@ { "name": "@budibase/server", "email": "hi@budibase.com", - "version": "1.3.21-alpha.0", + "version": "1.3.22-alpha.2", "description": "Budibase Web Server", "main": "src/index.ts", "repository": { @@ -77,11 +77,11 @@ "license": "GPL-3.0", "dependencies": { "@apidevtools/swagger-parser": "10.0.3", - "@budibase/backend-core": "1.3.21-alpha.0", - "@budibase/client": "1.3.21-alpha.0", - "@budibase/pro": "1.3.21-alpha.0", - "@budibase/string-templates": "1.3.21-alpha.0", - "@budibase/types": "1.3.21-alpha.0", + "@budibase/backend-core": "1.3.22-alpha.2", + "@budibase/client": "1.3.22-alpha.2", + "@budibase/pro": "1.3.22-alpha.2", + "@budibase/string-templates": "1.3.22-alpha.2", + "@budibase/types": "1.3.22-alpha.2", "@bull-board/api": "3.7.0", "@bull-board/koa": "3.9.4", "@elastic/elasticsearch": "7.10.0", diff --git a/packages/server/src/api/controllers/component.js b/packages/server/src/api/controllers/component.ts similarity index 62% rename from packages/server/src/api/controllers/component.js rename to packages/server/src/api/controllers/component.ts index e949db3042..6d65d43db6 100644 --- a/packages/server/src/api/controllers/component.js +++ b/packages/server/src/api/controllers/component.ts @@ -1,15 +1,15 @@ -const { DocumentType, getPluginParams } = require("../../db/utils") -const { getComponentLibraryManifest } = require("../../utilities/fileSystem") -const { getAppDB } = require("@budibase/backend-core/context") -const { getGlobalDB } = require("@budibase/backend-core/tenancy") +import { DocumentType } from "../../db/utils" +import { Plugin } from "@budibase/types" +import { db as dbCore, context, tenancy } from "@budibase/backend-core" +import { getComponentLibraryManifest } from "../../utilities/fileSystem" -exports.fetchAppComponentDefinitions = async function (ctx) { +exports.fetchAppComponentDefinitions = async function (ctx: any) { try { - const db = getAppDB() + const db = context.getAppDB() const app = await db.get(DocumentType.APP_METADATA) let componentManifests = await Promise.all( - app.componentLibraries.map(async library => { + app.componentLibraries.map(async (library: any) => { let manifest = await getComponentLibraryManifest(library) return { manifest, @@ -17,7 +17,7 @@ exports.fetchAppComponentDefinitions = async function (ctx) { } }) ) - const definitions = {} + const definitions: { [key: string]: any } = {} for (let { manifest, library } of componentManifests) { for (let key of Object.keys(manifest)) { if (key === "features") { @@ -33,16 +33,16 @@ exports.fetchAppComponentDefinitions = async function (ctx) { } // Add custom components - const globalDB = getGlobalDB() + const globalDB = tenancy.getGlobalDB() const response = await globalDB.allDocs( - getPluginParams(null, { + dbCore.getPluginParams(null, { include_docs: true, }) ) response.rows - .map(row => row.doc) - .filter(plugin => plugin.schema.type === "component") - .forEach(plugin => { + .map((row: any) => row.doc) + .filter((plugin: Plugin) => plugin.schema.type === "component") + .forEach((plugin: Plugin) => { const fullComponentName = `plugin/${plugin.name}` definitions[fullComponentName] = { component: fullComponentName, diff --git a/packages/server/src/api/controllers/plugin/index.ts b/packages/server/src/api/controllers/plugin/index.ts index f560572082..868d2689fd 100644 --- a/packages/server/src/api/controllers/plugin/index.ts +++ b/packages/server/src/api/controllers/plugin/index.ts @@ -1,22 +1,16 @@ -import { ObjectStoreBuckets } from "../../../constants" -import { loadJSFile } from "../../../utilities/fileSystem" import { npmUpload, urlUpload, githubUpload, fileUpload } from "./uploaders" import { getGlobalDB } from "@budibase/backend-core/tenancy" import { validate } from "@budibase/backend-core/plugins" -import { generatePluginID, getPluginParams } from "../../../db/utils" -import { - uploadDirectory, - deleteFolder, -} from "@budibase/backend-core/objectStore" -import { PluginType, FileType, PluginSource, Plugin } from "@budibase/types" +import { PluginType, FileType, PluginSource } from "@budibase/types" import env from "../../../environment" import { ClientAppSocket } from "../../../websocket" -import { events } from "@budibase/backend-core" +import { db as dbCore } from "@budibase/backend-core" +import { plugins } from "@budibase/pro" export async function getPlugins(type?: PluginType) { const db = getGlobalDB() const response = await db.allDocs( - getPluginParams(null, { + dbCore.getPluginParams(null, { include_docs: true, }) ) @@ -37,7 +31,7 @@ export async function upload(ctx: any) { let docs = [] // can do single or multiple plugins for (let plugin of plugins) { - const doc = await processPlugin(plugin, PluginSource.FILE) + const doc = await processUploadedPlugin(plugin, PluginSource.FILE) docs.push(doc) } ctx.body = { @@ -91,18 +85,19 @@ export async function create(ctx: any) { ) } - const doc = await storePlugin(metadata, directory, source) + const doc = await plugins.storePlugin(metadata, directory, source) + ClientAppSocket.emit("plugins-update", { name, hash: doc.hash }) ctx.body = { message: "Plugin uploaded successfully", plugins: [doc], } + ctx.body = { plugin: doc } } catch (err: any) { const errMsg = err?.message ? err?.message : err ctx.throw(400, `Failed to import plugin: ${errMsg}`) } - ctx.status = 200 } export async function fetch(ctx: any) { @@ -110,99 +105,21 @@ export async function fetch(ctx: any) { } export async function destroy(ctx: any) { - const db = getGlobalDB() const { pluginId } = ctx.params try { - const plugin: Plugin = await db.get(pluginId) - const bucketPath = `${plugin.name}/` - await deleteFolder(ObjectStoreBuckets.PLUGINS, bucketPath) + await plugins.deletePlugin(pluginId) - await db.remove(pluginId, plugin._rev) - await events.plugin.deleted(plugin) + ctx.body = { message: `Plugin ${ctx.params.pluginId} deleted.` } } catch (err: any) { - const errMsg = err?.message ? err?.message : err - - ctx.throw(400, `Failed to delete plugin: ${errMsg}`) + ctx.throw(400, err.message) } - - ctx.message = `Plugin ${ctx.params.pluginId} deleted.` - ctx.status = 200 } -export async function storePlugin( - metadata: any, - directory: any, +export async function processUploadedPlugin( + plugin: FileType, source?: PluginSource ) { - const db = getGlobalDB() - const version = metadata.package.version, - name = metadata.package.name, - description = metadata.package.description, - hash = metadata.schema.hash - - // first open the tarball into tmp directory - const bucketPath = `${name}/` - const files = await uploadDirectory( - ObjectStoreBuckets.PLUGINS, - directory, - bucketPath - ) - const jsFile = files.find((file: any) => file.name.endsWith(".js")) - if (!jsFile) { - throw new Error(`Plugin missing .js file.`) - } - // validate the JS for a datasource - if (metadata.schema.type === PluginType.DATASOURCE) { - const js = loadJSFile(directory, jsFile.name) - // TODO: this isn't safe - but we need full node environment - // in future we should do this in a thread for safety - try { - eval(js) - } catch (err: any) { - const message = err?.message ? err.message : JSON.stringify(err) - throw new Error(`JS invalid: ${message}`) - } - } - const jsFileName = jsFile.name - const pluginId = generatePluginID(name) - - // overwrite existing docs entirely if they exist - let rev - try { - const existing = await db.get(pluginId) - rev = existing._rev - } catch (err) { - rev = undefined - } - let doc: Plugin = { - _id: pluginId, - _rev: rev, - ...metadata, - name, - version, - hash, - description, - jsUrl: `${bucketPath}${jsFileName}`, - } - - if (source) { - doc = { - ...doc, - source, - } - } - - const response = await db.put(doc) - await events.plugin.imported(doc) - ClientAppSocket.emit("plugin-update", { name, hash }) - return { - ...doc, - _rev: response.rev, - } -} - -export async function processPlugin(plugin: FileType, source?: PluginSource) { const { metadata, directory } = await fileUpload(plugin) validate(metadata?.schema) @@ -211,5 +128,7 @@ export async function processPlugin(plugin: FileType, source?: PluginSource) { throw new Error("Only component plugins are supported outside of self-host") } - return await storePlugin(metadata, directory, source) + const doc = await plugins.storePlugin(metadata, directory, source) + ClientAppSocket.emit("plugins-update", { name: doc.name, hash: doc.hash }) + return doc } diff --git a/packages/server/src/api/controllers/screen.js b/packages/server/src/api/controllers/screen.ts similarity index 67% rename from packages/server/src/api/controllers/screen.js rename to packages/server/src/api/controllers/screen.ts index ca25a72a8a..08040351dd 100644 --- a/packages/server/src/api/controllers/screen.js +++ b/packages/server/src/api/controllers/screen.ts @@ -1,17 +1,16 @@ -const { - getScreenParams, - generateScreenID, - getPluginParams, - DocumentType, -} = require("../../db/utils") -const { AccessController } = require("@budibase/backend-core/roles") -const { getAppDB } = require("@budibase/backend-core/context") -const { events } = require("@budibase/backend-core") -const { getGlobalDB } = require("@budibase/backend-core/tenancy") -const { updateAppPackage } = require("./application") +import { getScreenParams, generateScreenID, DocumentType } from "../../db/utils" +import { + events, + context, + tenancy, + db as dbCore, + roles, +} from "@budibase/backend-core" +import { updateAppPackage } from "./application" +import { Plugin, ScreenProps } from "@budibase/types" -exports.fetch = async ctx => { - const db = getAppDB() +exports.fetch = async (ctx: any) => { + const db = context.getAppDB() const screens = ( await db.allDocs( @@ -19,16 +18,16 @@ exports.fetch = async ctx => { include_docs: true, }) ) - ).rows.map(element => element.doc) + ).rows.map((el: any) => el.doc) - ctx.body = await new AccessController().checkScreensAccess( + ctx.body = await new roles.AccessController().checkScreensAccess( screens, ctx.user.role._id ) } -exports.save = async ctx => { - const db = getAppDB() +exports.save = async (ctx: any) => { + const db = context.getAppDB() let screen = ctx.request.body let eventFn @@ -40,19 +39,19 @@ exports.save = async ctx => { const response = await db.put(screen) // Find any custom components being used - let pluginNames = [] + let pluginNames: string[] = [] let pluginAdded = false findPlugins(screen.props, pluginNames) if (pluginNames.length) { - const globalDB = getGlobalDB() + const globalDB = tenancy.getGlobalDB() const pluginsResponse = await globalDB.allDocs( - getPluginParams(null, { + dbCore.getPluginParams(null, { include_docs: true, }) ) const requiredPlugins = pluginsResponse.rows - .map(row => row.doc) - .filter(plugin => { + .map((row: any) => row.doc) + .filter((plugin: Plugin) => { return ( plugin.schema.type === "component" && pluginNames.includes(`plugin/${plugin.name}`) @@ -63,8 +62,8 @@ exports.save = async ctx => { const application = await db.get(DocumentType.APP_METADATA) let usedPlugins = application.usedPlugins || [] - requiredPlugins.forEach(plugin => { - if (!usedPlugins.find(x => x._id === plugin._id)) { + requiredPlugins.forEach((plugin: Plugin) => { + if (!usedPlugins.find((x: Plugin) => x._id === plugin._id)) { pluginAdded = true usedPlugins.push({ _id: plugin._id, @@ -93,8 +92,8 @@ exports.save = async ctx => { } } -exports.destroy = async ctx => { - const db = getAppDB() +exports.destroy = async (ctx: any) => { + const db = context.getAppDB() const id = ctx.params.screenId const screen = await db.get(id) @@ -107,7 +106,7 @@ exports.destroy = async ctx => { ctx.status = 200 } -const findPlugins = (component, foundPlugins) => { +const findPlugins = (component: ScreenProps, foundPlugins: string[]) => { if (!component) { return } diff --git a/packages/server/src/db/utils.js b/packages/server/src/db/utils.js index 64d206aeb8..a97dcada59 100644 --- a/packages/server/src/db/utils.js +++ b/packages/server/src/db/utils.js @@ -42,7 +42,6 @@ const DocumentType = { MEM_VIEW: "view", USER_FLAG: "flag", AUTOMATION_METADATA: "meta_au", - PLUGIN: "plg", } const InternalTables = { @@ -384,10 +383,3 @@ exports.getMultiIDParams = ids => { include_docs: true, } } - -/** - * Gets parameters for retrieving automations, this is a utility function for the getDocParams function. - */ -exports.getPluginParams = (pluginId = null, otherProps = {}) => { - return getDocParams(DocumentType.PLUGIN, pluginId, otherProps) -} diff --git a/packages/server/src/utilities/fileSystem/index.js b/packages/server/src/utilities/fileSystem/index.js index 21a2a550f2..4e9b13cca0 100644 --- a/packages/server/src/utilities/fileSystem/index.js +++ b/packages/server/src/utilities/fileSystem/index.js @@ -112,13 +112,6 @@ exports.loadHandlebarsFile = path => { return fs.readFileSync(path, "utf8") } -/** - * Same as above just with a different name. - */ -exports.loadJSFile = (directory, name) => { - return fs.readFileSync(join(directory, name), "utf8") -} - /** * When return a file from the API need to write the file to the system temporarily so we * can create a read stream to send. diff --git a/packages/server/src/watch.ts b/packages/server/src/watch.ts index a97fda4138..4beef5ddb8 100644 --- a/packages/server/src/watch.ts +++ b/packages/server/src/watch.ts @@ -4,7 +4,7 @@ import chokidar from "chokidar" import fs from "fs" import { tenancy } from "@budibase/backend-core" import { DEFAULT_TENANT_ID } from "@budibase/backend-core/constants" -import { processPlugin } from "./api/controllers/plugin" +import { processUploadedPlugin } from "./api/controllers/plugin" export function watch() { const watchPath = path.join(env.PLUGINS_DIR, "./**/*.tar.gz") @@ -28,7 +28,7 @@ export function watch() { const split = path.split("/") const name = split[split.length - 1] console.log("Importing plugin:", path) - await processPlugin({ name, path }) + await processUploadedPlugin({ name, path }) } catch (err: any) { const message = err?.message ? err?.message : err console.error("Failed to import plugin:", message) diff --git a/packages/server/yarn.lock b/packages/server/yarn.lock index 1ad9d478c6..f4f7abec9c 100644 --- a/packages/server/yarn.lock +++ b/packages/server/yarn.lock @@ -1094,12 +1094,12 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@budibase/backend-core@1.3.21-alpha.0": - version "1.3.21-alpha.0" - resolved "https://registry.yarnpkg.com/@budibase/backend-core/-/backend-core-1.3.21-alpha.0.tgz#f64dc43f38e1ba8d43ae99fdb67f1f052a0af68e" - integrity sha512-eVQXs9+ddfjtGYNanXkFCgYYxVwI90To4y1LY3CfUvegcDaJIt26XX9B7uKNwRdWl37XqptwbmaqDfsWlsxIew== +"@budibase/backend-core@1.3.22-alpha.2": + version "1.3.22-alpha.2" + resolved "https://registry.yarnpkg.com/@budibase/backend-core/-/backend-core-1.3.22-alpha.2.tgz#6ae1e42e4163f8ffaa9a7d5891145419f7484279" + integrity sha512-bzBpsq6LmpbwVe6UScgLUcN59pYq0nokzq32VA6rXWfTuPz+Y0jKGJuIY3JkPOuTsVAoqlwQH2XLOs6BZlZ7Ag== dependencies: - "@budibase/types" "1.3.21-alpha.0" + "@budibase/types" "1.3.22-alpha.2" "@shopify/jest-koa-mocks" "5.0.1" "@techpass/passport-openidconnect" "0.3.2" aws-sdk "2.1030.0" @@ -1180,13 +1180,13 @@ svelte-flatpickr "^3.2.3" svelte-portal "^1.0.0" -"@budibase/pro@1.3.21-alpha.0": - version "1.3.21-alpha.0" - resolved "https://registry.yarnpkg.com/@budibase/pro/-/pro-1.3.21-alpha.0.tgz#e6f3b1b044ff8da0d63fece6b86f10ed076dba6b" - integrity sha512-NPKZEo9Pz+XFA2/6KUFMhhPIpNzUBZ1AZzQeyeCyjZtXA88ipVA7xdhiJp0OJg1eXwo/QWB1KM/HY7q1kKDkWg== +"@budibase/pro@1.3.22-alpha.2": + version "1.3.22-alpha.2" + resolved "https://registry.yarnpkg.com/@budibase/pro/-/pro-1.3.22-alpha.2.tgz#9c0a91d664af9e6cac90d9e4e0bc8cc1d9bdb06c" + integrity sha512-3tVyaXskgMqDFLLPwTa5JgA4OrjIAxrflB8p6jknofQd0UwxHckuInz5BfJVVDqSHi65jif1+YHE0XqSJDuDrg== dependencies: - "@budibase/backend-core" "1.3.21-alpha.0" - "@budibase/types" "1.3.21-alpha.0" + "@budibase/backend-core" "1.3.22-alpha.2" + "@budibase/types" "1.3.22-alpha.2" "@koa/router" "8.0.8" joi "17.6.0" node-fetch "^2.6.1" @@ -1209,10 +1209,10 @@ svelte-apexcharts "^1.0.2" svelte-flatpickr "^3.1.0" -"@budibase/types@1.3.21-alpha.0": - version "1.3.21-alpha.0" - resolved "https://registry.yarnpkg.com/@budibase/types/-/types-1.3.21-alpha.0.tgz#665d76bfce66f3bdef064ac9e3bef13e6567da6d" - integrity sha512-IkNMFfARkRJRzTSeoRJhqI9hxdkwpq7Wodlj6Mk8++zcMm33RD2Yx4htTBAYEWeeTLYPu67hpvEjQ9OhAZUZNA== +"@budibase/types@1.3.22-alpha.2": + version "1.3.22-alpha.2" + resolved "https://registry.yarnpkg.com/@budibase/types/-/types-1.3.22-alpha.2.tgz#4b207cca8f9a897b7d95a074a240fbf8a05b2bd6" + integrity sha512-zZLhm9q9pZci0R+7EAwYUqkGQ2K+3Dwc5SI9kpQTaWEecLuAmujFERcd6K5wZfWCAzjcb2LsB6lvADxcW6rj3Q== "@bull-board/api@3.7.0": version "3.7.0" diff --git a/packages/string-templates/package.json b/packages/string-templates/package.json index c38060180c..f37e33ef5b 100644 --- a/packages/string-templates/package.json +++ b/packages/string-templates/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/string-templates", - "version": "1.3.21-alpha.0", + "version": "1.3.22-alpha.2", "description": "Handlebars wrapper for Budibase templating.", "main": "src/index.cjs", "module": "dist/bundle.mjs", diff --git a/packages/types/package.json b/packages/types/package.json index 1ee5368c43..01c03681b0 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/types", - "version": "1.3.21-alpha.0", + "version": "1.3.22-alpha.2", "description": "Budibase types", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/types/src/documents/app/screen.ts b/packages/types/src/documents/app/screen.ts index 98db658aa6..6390c3b18c 100644 --- a/packages/types/src/documents/app/screen.ts +++ b/packages/types/src/documents/app/screen.ts @@ -1,5 +1,17 @@ import { Document } from "../document" +export interface ScreenProps extends Document { + _instanceName: string + _styles: { [key: string]: any } + _component: string + _children: ScreenProps[] + size?: string + gap?: string + direction?: string + vAlign?: string + hAlign?: string +} + export interface Screen extends Document { layoutId?: string showNavigation?: boolean @@ -9,4 +21,5 @@ export interface Screen extends Document { roleId: string homeScreen?: boolean } + props: ScreenProps } diff --git a/packages/types/src/documents/global/plugin.ts b/packages/types/src/documents/global/plugin.ts index 8b9607c41d..a374d5496c 100644 --- a/packages/types/src/documents/global/plugin.ts +++ b/packages/types/src/documents/global/plugin.ts @@ -23,6 +23,7 @@ export interface Plugin extends Document { jsUrl?: string source: PluginSource package: { [key: string]: any } + hash: string schema: { type: PluginType [key: string]: any diff --git a/packages/worker/package.json b/packages/worker/package.json index 68179dea08..3e0a16933d 100644 --- a/packages/worker/package.json +++ b/packages/worker/package.json @@ -1,7 +1,7 @@ { "name": "@budibase/worker", "email": "hi@budibase.com", - "version": "1.3.21-alpha.0", + "version": "1.3.22-alpha.2", "description": "Budibase background service", "main": "src/index.ts", "repository": { @@ -36,10 +36,10 @@ "author": "Budibase", "license": "GPL-3.0", "dependencies": { - "@budibase/backend-core": "1.3.21-alpha.0", - "@budibase/pro": "1.3.21-alpha.0", - "@budibase/string-templates": "1.3.21-alpha.0", - "@budibase/types": "1.3.21-alpha.0", + "@budibase/backend-core": "1.3.22-alpha.2", + "@budibase/pro": "1.3.22-alpha.2", + "@budibase/string-templates": "1.3.22-alpha.2", + "@budibase/types": "1.3.22-alpha.2", "@koa/router": "8.0.8", "@sentry/node": "6.17.7", "@techpass/passport-openidconnect": "0.3.2", diff --git a/packages/worker/yarn.lock b/packages/worker/yarn.lock index 0443cddd12..aa65272167 100644 --- a/packages/worker/yarn.lock +++ b/packages/worker/yarn.lock @@ -291,12 +291,12 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@budibase/backend-core@1.3.21-alpha.0": - version "1.3.21-alpha.0" - resolved "https://registry.yarnpkg.com/@budibase/backend-core/-/backend-core-1.3.21-alpha.0.tgz#f64dc43f38e1ba8d43ae99fdb67f1f052a0af68e" - integrity sha512-eVQXs9+ddfjtGYNanXkFCgYYxVwI90To4y1LY3CfUvegcDaJIt26XX9B7uKNwRdWl37XqptwbmaqDfsWlsxIew== +"@budibase/backend-core@1.3.22-alpha.2": + version "1.3.22-alpha.2" + resolved "https://registry.yarnpkg.com/@budibase/backend-core/-/backend-core-1.3.22-alpha.2.tgz#6ae1e42e4163f8ffaa9a7d5891145419f7484279" + integrity sha512-bzBpsq6LmpbwVe6UScgLUcN59pYq0nokzq32VA6rXWfTuPz+Y0jKGJuIY3JkPOuTsVAoqlwQH2XLOs6BZlZ7Ag== dependencies: - "@budibase/types" "1.3.21-alpha.0" + "@budibase/types" "1.3.22-alpha.2" "@shopify/jest-koa-mocks" "5.0.1" "@techpass/passport-openidconnect" "0.3.2" aws-sdk "2.1030.0" @@ -327,21 +327,21 @@ uuid "8.3.2" zlib "1.0.5" -"@budibase/pro@1.3.21-alpha.0": - version "1.3.21-alpha.0" - resolved "https://registry.yarnpkg.com/@budibase/pro/-/pro-1.3.21-alpha.0.tgz#e6f3b1b044ff8da0d63fece6b86f10ed076dba6b" - integrity sha512-NPKZEo9Pz+XFA2/6KUFMhhPIpNzUBZ1AZzQeyeCyjZtXA88ipVA7xdhiJp0OJg1eXwo/QWB1KM/HY7q1kKDkWg== +"@budibase/pro@1.3.22-alpha.2": + version "1.3.22-alpha.2" + resolved "https://registry.yarnpkg.com/@budibase/pro/-/pro-1.3.22-alpha.2.tgz#9c0a91d664af9e6cac90d9e4e0bc8cc1d9bdb06c" + integrity sha512-3tVyaXskgMqDFLLPwTa5JgA4OrjIAxrflB8p6jknofQd0UwxHckuInz5BfJVVDqSHi65jif1+YHE0XqSJDuDrg== dependencies: - "@budibase/backend-core" "1.3.21-alpha.0" - "@budibase/types" "1.3.21-alpha.0" + "@budibase/backend-core" "1.3.22-alpha.2" + "@budibase/types" "1.3.22-alpha.2" "@koa/router" "8.0.8" joi "17.6.0" node-fetch "^2.6.1" -"@budibase/types@1.3.21-alpha.0": - version "1.3.21-alpha.0" - resolved "https://registry.yarnpkg.com/@budibase/types/-/types-1.3.21-alpha.0.tgz#665d76bfce66f3bdef064ac9e3bef13e6567da6d" - integrity sha512-IkNMFfARkRJRzTSeoRJhqI9hxdkwpq7Wodlj6Mk8++zcMm33RD2Yx4htTBAYEWeeTLYPu67hpvEjQ9OhAZUZNA== +"@budibase/types@1.3.22-alpha.2": + version "1.3.22-alpha.2" + resolved "https://registry.yarnpkg.com/@budibase/types/-/types-1.3.22-alpha.2.tgz#4b207cca8f9a897b7d95a074a240fbf8a05b2bd6" + integrity sha512-zZLhm9q9pZci0R+7EAwYUqkGQ2K+3Dwc5SI9kpQTaWEecLuAmujFERcd6K5wZfWCAzjcb2LsB6lvADxcW6rj3Q== "@cspotcode/source-map-consumer@0.8.0": version "0.8.0"