Merge branch 'plugins-dev-experience' into feature/plugin-management-ui
This commit is contained in:
commit
07927a53cd
|
@ -81,6 +81,7 @@ services:
|
||||||
image: budibase/proxy
|
image: budibase/proxy
|
||||||
environment:
|
environment:
|
||||||
- PROXY_RATE_LIMIT_WEBHOOKS_PER_SECOND=10
|
- PROXY_RATE_LIMIT_WEBHOOKS_PER_SECOND=10
|
||||||
|
- PROXY_RATE_LIMIT_API_PER_SECOND=20
|
||||||
depends_on:
|
depends_on:
|
||||||
- minio-service
|
- minio-service
|
||||||
- worker-service
|
- worker-service
|
||||||
|
|
|
@ -11,7 +11,7 @@ events {
|
||||||
http {
|
http {
|
||||||
# rate limiting
|
# rate limiting
|
||||||
limit_req_status 429;
|
limit_req_status 429;
|
||||||
limit_req_zone $binary_remote_addr zone=ratelimit:10m rate=20r/s;
|
limit_req_zone $binary_remote_addr zone=ratelimit:10m rate=${PROXY_RATE_LIMIT_API_PER_SECOND}r/s;
|
||||||
limit_req_zone $binary_remote_addr zone=webhooks:10m rate=${PROXY_RATE_LIMIT_WEBHOOKS_PER_SECOND}r/s;
|
limit_req_zone $binary_remote_addr zone=webhooks:10m rate=${PROXY_RATE_LIMIT_WEBHOOKS_PER_SECOND}r/s;
|
||||||
|
|
||||||
include /etc/nginx/mime.types;
|
include /etc/nginx/mime.types;
|
||||||
|
|
|
@ -11,3 +11,4 @@ COPY error.html /usr/share/nginx/html/error.html
|
||||||
|
|
||||||
# Default environment
|
# Default environment
|
||||||
ENV PROXY_RATE_LIMIT_WEBHOOKS_PER_SECOND=10
|
ENV PROXY_RATE_LIMIT_WEBHOOKS_PER_SECOND=10
|
||||||
|
ENV PROXY_RATE_LIMIT_API_PER_SECOND=20
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"version": "1.3.3",
|
"version": "1.3.4-alpha.1",
|
||||||
"npmClient": "yarn",
|
"npmClient": "yarn",
|
||||||
"packages": [
|
"packages": [
|
||||||
"packages/*"
|
"packages/*"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@budibase/backend-core",
|
"name": "@budibase/backend-core",
|
||||||
"version": "1.3.3",
|
"version": "1.3.4-alpha.1",
|
||||||
"description": "Budibase backend core libraries used in server and worker",
|
"description": "Budibase backend core libraries used in server and worker",
|
||||||
"main": "dist/src/index.js",
|
"main": "dist/src/index.js",
|
||||||
"types": "dist/src/index.d.ts",
|
"types": "dist/src/index.d.ts",
|
||||||
|
@ -20,7 +20,7 @@
|
||||||
"test:watch": "jest --watchAll"
|
"test:watch": "jest --watchAll"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@budibase/types": "^1.3.3",
|
"@budibase/types": "1.3.4-alpha.1",
|
||||||
"@techpass/passport-openidconnect": "0.3.2",
|
"@techpass/passport-openidconnect": "0.3.2",
|
||||||
"aws-sdk": "2.1030.0",
|
"aws-sdk": "2.1030.0",
|
||||||
"bcrypt": "5.0.1",
|
"bcrypt": "5.0.1",
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "@budibase/bbui",
|
"name": "@budibase/bbui",
|
||||||
"description": "A UI solution used in the different Budibase projects.",
|
"description": "A UI solution used in the different Budibase projects.",
|
||||||
"version": "1.3.3",
|
"version": "1.3.4-alpha.1",
|
||||||
"license": "MPL-2.0",
|
"license": "MPL-2.0",
|
||||||
"svelte": "src/index.js",
|
"svelte": "src/index.js",
|
||||||
"module": "dist/bbui.es.js",
|
"module": "dist/bbui.es.js",
|
||||||
|
@ -38,7 +38,7 @@
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@adobe/spectrum-css-workflow-icons": "^1.2.1",
|
"@adobe/spectrum-css-workflow-icons": "^1.2.1",
|
||||||
"@budibase/string-templates": "^1.3.3",
|
"@budibase/string-templates": "1.3.4-alpha.1",
|
||||||
"@spectrum-css/actionbutton": "^1.0.1",
|
"@spectrum-css/actionbutton": "^1.0.1",
|
||||||
"@spectrum-css/actiongroup": "^1.0.1",
|
"@spectrum-css/actiongroup": "^1.0.1",
|
||||||
"@spectrum-css/avatar": "^3.0.2",
|
"@spectrum-css/avatar": "^3.0.2",
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
export default function positionDropdown(element, { anchor, align }) {
|
export default function positionDropdown(element, { anchor, align, maxWidth }) {
|
||||||
let positionSide = "top"
|
let positionSide = "top"
|
||||||
let maxHeight = 0
|
let maxHeight = 0
|
||||||
let dimensions = getDimensions(anchor)
|
let dimensions = getDimensions(anchor)
|
||||||
|
@ -34,13 +34,24 @@ export default function positionDropdown(element, { anchor, align }) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function calcLeftPosition() {
|
function calcLeftPosition() {
|
||||||
return align === "right"
|
let left
|
||||||
? dimensions.left + dimensions.width - dimensions.containerWidth
|
|
||||||
: dimensions.left
|
if (align == "right") {
|
||||||
|
left = dimensions.left + dimensions.width - dimensions.containerWidth
|
||||||
|
} else if (align == "right-side") {
|
||||||
|
left = dimensions.left + dimensions.width
|
||||||
|
} else {
|
||||||
|
left = dimensions.left
|
||||||
|
}
|
||||||
|
|
||||||
|
return left
|
||||||
}
|
}
|
||||||
|
|
||||||
element.style.position = "absolute"
|
element.style.position = "absolute"
|
||||||
element.style.zIndex = "9999"
|
element.style.zIndex = "9999"
|
||||||
|
if (maxWidth) {
|
||||||
|
element.style.maxWidth = `${maxWidth}px`
|
||||||
|
}
|
||||||
element.style.minWidth = `${dimensions.width}px`
|
element.style.minWidth = `${dimensions.width}px`
|
||||||
element.style.maxHeight = `${maxHeight.toFixed(0)}px`
|
element.style.maxHeight = `${maxHeight.toFixed(0)}px`
|
||||||
element.style.transformOrigin = `center ${positionSide}`
|
element.style.transformOrigin = `center ${positionSide}`
|
||||||
|
@ -54,10 +65,8 @@ export default function positionDropdown(element, { anchor, align }) {
|
||||||
element.style.left = `${calcLeftPosition(dimensions).toFixed(0)}px`
|
element.style.left = `${calcLeftPosition(dimensions).toFixed(0)}px`
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
resizeObserver.observe(anchor)
|
resizeObserver.observe(anchor)
|
||||||
resizeObserver.observe(element)
|
resizeObserver.observe(element)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
destroy() {
|
destroy() {
|
||||||
resizeObserver.disconnect()
|
resizeObserver.disconnect()
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
export let align = "right"
|
export let align = "right"
|
||||||
export let portalTarget
|
export let portalTarget
|
||||||
export let dataCy
|
export let dataCy
|
||||||
|
export let maxWidth
|
||||||
|
|
||||||
export let direction = "bottom"
|
export let direction = "bottom"
|
||||||
export let showTip = false
|
export let showTip = false
|
||||||
|
@ -45,7 +46,7 @@
|
||||||
<Portal target={portalTarget}>
|
<Portal target={portalTarget}>
|
||||||
<div
|
<div
|
||||||
tabindex="0"
|
tabindex="0"
|
||||||
use:positionDropdown={{ anchor, align }}
|
use:positionDropdown={{ anchor, align, maxWidth }}
|
||||||
use:clickOutside={hide}
|
use:clickOutside={hide}
|
||||||
on:keydown={handleEscape}
|
on:keydown={handleEscape}
|
||||||
class={"spectrum-Popover is-open " + (tooltipClasses || "")}
|
class={"spectrum-Popover is-open " + (tooltipClasses || "")}
|
||||||
|
|
|
@ -10,7 +10,7 @@ filterTests(['smoke', 'all'], () => {
|
||||||
|
|
||||||
it("should add a current user binding", () => {
|
it("should add a current user binding", () => {
|
||||||
cy.searchAndAddComponent("Paragraph").then(() => {
|
cy.searchAndAddComponent("Paragraph").then(() => {
|
||||||
addSettingBinding("text", "Current User._id")
|
addSettingBinding("text", ["Current User", "_id"], "Current User._id")
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ filterTests(['smoke', 'all'], () => {
|
||||||
const paramName = "foo"
|
const paramName = "foo"
|
||||||
cy.createScreen(`/test/:${paramName}`)
|
cy.createScreen(`/test/:${paramName}`)
|
||||||
cy.searchAndAddComponent("Paragraph").then(componentId => {
|
cy.searchAndAddComponent("Paragraph").then(componentId => {
|
||||||
addSettingBinding("text", `URL.${paramName}`)
|
addSettingBinding("text", ["URL", paramName], `URL.${paramName}`)
|
||||||
// The builder preview pages don't have a real URL, so all we can do
|
// The builder preview pages don't have a real URL, so all we can do
|
||||||
// is check that we were able to bind to the property, and that the
|
// is check that we were able to bind to the property, and that the
|
||||||
// component exists on the page
|
// component exists on the page
|
||||||
|
@ -47,11 +47,13 @@ filterTests(['smoke', 'all'], () => {
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
const addSettingBinding = (setting, bindingText, clickOption = true) => {
|
const addSettingBinding = (setting, bindingCategories, bindingText, clickOption = true) => {
|
||||||
cy.get(`[data-cy="setting-${setting}"] [data-cy=text-binding-button]`).click()
|
cy.get(`[data-cy="setting-${setting}"] [data-cy=text-binding-button]`).click()
|
||||||
|
cy.get(".category-list li").contains(bindingCategories[0])
|
||||||
cy.get(".drawer").within(() => {
|
cy.get(".drawer").within(() => {
|
||||||
if (clickOption) {
|
if (clickOption) {
|
||||||
cy.contains(bindingText).click()
|
cy.get(".category-list li").contains(bindingCategories[0]).click()
|
||||||
|
cy.get("li.binding").contains(bindingCategories[1]).click()
|
||||||
cy.get("textarea").should("have.value", `{{ ${bindingText} }}`)
|
cy.get("textarea").should("have.value", `{{ ${bindingText} }}`)
|
||||||
} else {
|
} else {
|
||||||
cy.get("textarea").type(bindingText)
|
cy.get("textarea").type(bindingText)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@budibase/builder",
|
"name": "@budibase/builder",
|
||||||
"version": "1.3.3",
|
"version": "1.3.4-alpha.1",
|
||||||
"license": "GPL-3.0",
|
"license": "GPL-3.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
@ -69,10 +69,10 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@budibase/bbui": "^1.3.3",
|
"@budibase/bbui": "1.3.4-alpha.1",
|
||||||
"@budibase/client": "^1.3.3",
|
"@budibase/client": "1.3.4-alpha.1",
|
||||||
"@budibase/frontend-core": "^1.3.3",
|
"@budibase/frontend-core": "1.3.4-alpha.1",
|
||||||
"@budibase/string-templates": "^1.3.3",
|
"@budibase/string-templates": "1.3.4-alpha.1",
|
||||||
"@sentry/browser": "5.19.1",
|
"@sentry/browser": "5.19.1",
|
||||||
"@spectrum-css/page": "^3.0.1",
|
"@spectrum-css/page": "^3.0.1",
|
||||||
"@spectrum-css/vars": "^3.0.1",
|
"@spectrum-css/vars": "^3.0.1",
|
||||||
|
|
|
@ -299,7 +299,10 @@ const getProviderContextBindings = (asset, dataProviders) => {
|
||||||
schema = {}
|
schema = {}
|
||||||
const values = context.values || []
|
const values = context.values || []
|
||||||
values.forEach(value => {
|
values.forEach(value => {
|
||||||
schema[value.key] = { name: value.label, type: "string" }
|
schema[value.key] = {
|
||||||
|
name: value.label,
|
||||||
|
type: value.type || "string",
|
||||||
|
}
|
||||||
})
|
})
|
||||||
} else if (context.type === "schema") {
|
} else if (context.type === "schema") {
|
||||||
// Schema contexts are generated dynamically depending on their data
|
// Schema contexts are generated dynamically depending on their data
|
||||||
|
@ -359,6 +362,12 @@ const getProviderContextBindings = (asset, dataProviders) => {
|
||||||
providerId,
|
providerId,
|
||||||
// Table ID is used by JSON fields to know what table the field is in
|
// Table ID is used by JSON fields to know what table the field is in
|
||||||
tableId: table?._id,
|
tableId: table?._id,
|
||||||
|
category: component._instanceName,
|
||||||
|
icon: def.icon,
|
||||||
|
display: {
|
||||||
|
name: fieldSchema.name || key,
|
||||||
|
type: fieldSchema.type,
|
||||||
|
},
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -385,6 +394,9 @@ const getUserBindings = () => {
|
||||||
// datasource options, based on bindable properties
|
// datasource options, based on bindable properties
|
||||||
fieldSchema,
|
fieldSchema,
|
||||||
providerId: "user",
|
providerId: "user",
|
||||||
|
category: "Current User",
|
||||||
|
icon: "User",
|
||||||
|
display: fieldSchema,
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
return bindings
|
return bindings
|
||||||
|
@ -401,11 +413,17 @@ const getDeviceBindings = () => {
|
||||||
type: "context",
|
type: "context",
|
||||||
runtimeBinding: `${safeDevice}.${makePropSafe("mobile")}`,
|
runtimeBinding: `${safeDevice}.${makePropSafe("mobile")}`,
|
||||||
readableBinding: `Device.Mobile`,
|
readableBinding: `Device.Mobile`,
|
||||||
|
category: "Device",
|
||||||
|
icon: "DevicePhone",
|
||||||
|
display: { type: "boolean", name: "mobile" },
|
||||||
})
|
})
|
||||||
bindings.push({
|
bindings.push({
|
||||||
type: "context",
|
type: "context",
|
||||||
runtimeBinding: `${safeDevice}.${makePropSafe("tablet")}`,
|
runtimeBinding: `${safeDevice}.${makePropSafe("tablet")}`,
|
||||||
readableBinding: `Device.Tablet`,
|
readableBinding: `Device.Tablet`,
|
||||||
|
category: "Device",
|
||||||
|
icon: "DevicePhone",
|
||||||
|
display: { type: "boolean", name: "tablet" },
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
return bindings
|
return bindings
|
||||||
|
@ -429,6 +447,8 @@ const getSelectedRowsBindings = asset => {
|
||||||
"selectedRows"
|
"selectedRows"
|
||||||
)}`,
|
)}`,
|
||||||
readableBinding: `${table._instanceName}.Selected rows`,
|
readableBinding: `${table._instanceName}.Selected rows`,
|
||||||
|
category: "Selected rows",
|
||||||
|
icon: "ViewRow",
|
||||||
}))
|
}))
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -460,6 +480,9 @@ const getStateBindings = () => {
|
||||||
type: "context",
|
type: "context",
|
||||||
runtimeBinding: `${safeState}.${makePropSafe(key)}`,
|
runtimeBinding: `${safeState}.${makePropSafe(key)}`,
|
||||||
readableBinding: `State.${key}`,
|
readableBinding: `State.${key}`,
|
||||||
|
category: "State",
|
||||||
|
icon: "AutomatedSegment",
|
||||||
|
display: { name: key },
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
return bindings
|
return bindings
|
||||||
|
@ -482,11 +505,17 @@ const getUrlBindings = asset => {
|
||||||
type: "context",
|
type: "context",
|
||||||
runtimeBinding: `${safeURL}.${makePropSafe(param)}`,
|
runtimeBinding: `${safeURL}.${makePropSafe(param)}`,
|
||||||
readableBinding: `URL.${param}`,
|
readableBinding: `URL.${param}`,
|
||||||
|
category: "URL",
|
||||||
|
icon: "RailTop",
|
||||||
|
display: { type: "string" },
|
||||||
}))
|
}))
|
||||||
const queryParamsBinding = {
|
const queryParamsBinding = {
|
||||||
type: "context",
|
type: "context",
|
||||||
runtimeBinding: makePropSafe("query"),
|
runtimeBinding: makePropSafe("query"),
|
||||||
readableBinding: "Query params",
|
readableBinding: "Query params",
|
||||||
|
category: "URL",
|
||||||
|
icon: "RailTop",
|
||||||
|
display: { type: "object" },
|
||||||
}
|
}
|
||||||
return urlParamBindings.concat([queryParamsBinding])
|
return urlParamBindings.concat([queryParamsBinding])
|
||||||
}
|
}
|
||||||
|
@ -497,6 +526,9 @@ const getRoleBindings = () => {
|
||||||
type: "context",
|
type: "context",
|
||||||
runtimeBinding: `trim "${role._id}"`,
|
runtimeBinding: `trim "${role._id}"`,
|
||||||
readableBinding: `Role.${role.name}`,
|
readableBinding: `Role.${role.name}`,
|
||||||
|
category: "Role",
|
||||||
|
icon: "UserGroup",
|
||||||
|
display: { type: "string", name: role.name },
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -518,6 +550,7 @@ export const getEventContextBindings = (
|
||||||
// Check if any context bindings are provided by the component for this
|
// Check if any context bindings are provided by the component for this
|
||||||
// setting
|
// setting
|
||||||
const component = findComponent(asset.props, componentId)
|
const component = findComponent(asset.props, componentId)
|
||||||
|
const def = store.actions.components.getDefinition(component?._component)
|
||||||
const settings = getComponentSettings(component?._component)
|
const settings = getComponentSettings(component?._component)
|
||||||
const eventSetting = settings.find(setting => setting.key === settingKey)
|
const eventSetting = settings.find(setting => setting.key === settingKey)
|
||||||
if (eventSetting?.context?.length) {
|
if (eventSetting?.context?.length) {
|
||||||
|
@ -527,6 +560,8 @@ export const getEventContextBindings = (
|
||||||
runtimeBinding: `${makePropSafe("eventContext")}.${makePropSafe(
|
runtimeBinding: `${makePropSafe("eventContext")}.${makePropSafe(
|
||||||
contextEntry.key
|
contextEntry.key
|
||||||
)}`,
|
)}`,
|
||||||
|
category: component._instanceName,
|
||||||
|
icon: def.icon,
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -548,6 +583,8 @@ export const getEventContextBindings = (
|
||||||
bindings.push({
|
bindings.push({
|
||||||
readableBinding: `Action ${idx + 1}.${contextValue.label}`,
|
readableBinding: `Action ${idx + 1}.${contextValue.label}`,
|
||||||
runtimeBinding: `actions.${idx}.${contextValue.value}`,
|
runtimeBinding: `actions.${idx}.${contextValue.value}`,
|
||||||
|
category: "Actions",
|
||||||
|
icon: "JourneyAction",
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,9 @@
|
||||||
Body,
|
Body,
|
||||||
Layout,
|
Layout,
|
||||||
Button,
|
Button,
|
||||||
|
ActionButton,
|
||||||
|
Icon,
|
||||||
|
Popover,
|
||||||
} from "@budibase/bbui"
|
} from "@budibase/bbui"
|
||||||
import { createEventDispatcher, onMount } from "svelte"
|
import { createEventDispatcher, onMount } from "svelte"
|
||||||
import {
|
import {
|
||||||
|
@ -45,9 +48,25 @@
|
||||||
let jsValue = initialValueJS ? value : null
|
let jsValue = initialValueJS ? value : null
|
||||||
let hbsValue = initialValueJS ? null : value
|
let hbsValue = initialValueJS ? null : value
|
||||||
|
|
||||||
|
let selectedCategory = null
|
||||||
|
|
||||||
|
let popover
|
||||||
|
let popoverAnchor
|
||||||
|
let hoverTarget
|
||||||
|
|
||||||
$: usingJS = mode === "JavaScript"
|
$: usingJS = mode === "JavaScript"
|
||||||
$: searchRgx = new RegExp(search, "ig")
|
$: searchRgx = new RegExp(search, "ig")
|
||||||
$: categories = Object.entries(groupBy("category", bindings))
|
$: categories = Object.entries(groupBy("category", bindings))
|
||||||
|
|
||||||
|
$: bindingIcons = bindings?.reduce((acc, ele) => {
|
||||||
|
if (ele.icon) {
|
||||||
|
acc[ele.category] = acc[ele.category] || ele.icon
|
||||||
|
}
|
||||||
|
return acc
|
||||||
|
}, {})
|
||||||
|
|
||||||
|
$: categoryIcons = { ...bindingIcons, Helpers: "MagicWand" }
|
||||||
|
|
||||||
$: filteredCategories = categories
|
$: filteredCategories = categories
|
||||||
.map(([name, categoryBindings]) => ({
|
.map(([name, categoryBindings]) => ({
|
||||||
name,
|
name,
|
||||||
|
@ -55,10 +74,19 @@
|
||||||
return binding.readableBinding.match(searchRgx)
|
return binding.readableBinding.match(searchRgx)
|
||||||
}),
|
}),
|
||||||
}))
|
}))
|
||||||
.filter(category => category.bindings?.length > 0)
|
.filter(category => {
|
||||||
|
return (
|
||||||
|
category.bindings?.length > 0 &&
|
||||||
|
(!selectedCategory ? true : selectedCategory === category.name)
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
$: filteredHelpers = helpers?.filter(helper => {
|
$: filteredHelpers = helpers?.filter(helper => {
|
||||||
return helper.label.match(searchRgx) || helper.description.match(searchRgx)
|
return helper.label.match(searchRgx) || helper.description.match(searchRgx)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
$: categoryNames = [...categories.map(cat => cat[0]), "Helpers"]
|
||||||
|
|
||||||
$: codeMirrorHints = bindings?.map(x => `$("${x.readableBinding}")`)
|
$: codeMirrorHints = bindings?.map(x => `$("${x.readableBinding}")`)
|
||||||
|
|
||||||
const updateValue = val => {
|
const updateValue = val => {
|
||||||
|
@ -140,58 +168,163 @@
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<span class="detailPopover">
|
||||||
|
<Popover
|
||||||
|
align="right-side"
|
||||||
|
bind:this={popover}
|
||||||
|
anchor={popoverAnchor}
|
||||||
|
maxWidth={300}
|
||||||
|
>
|
||||||
|
<Layout gap="S">
|
||||||
|
<div class="helper">
|
||||||
|
{#if hoverTarget.title}
|
||||||
|
<div class="helper__name">{hoverTarget.title}</div>
|
||||||
|
{/if}
|
||||||
|
{#if hoverTarget.description}
|
||||||
|
<div class="helper__description">
|
||||||
|
{@html hoverTarget.description}
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
|
{#if hoverTarget.example}
|
||||||
|
<pre class="helper__example">{hoverTarget.example}</pre>
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
</Layout>
|
||||||
|
</Popover>
|
||||||
|
</span>
|
||||||
|
|
||||||
<DrawerContent>
|
<DrawerContent>
|
||||||
<svelte:fragment slot="sidebar">
|
<svelte:fragment slot="sidebar">
|
||||||
<div class="container">
|
<Layout noPadding gap="S">
|
||||||
<section>
|
{#if selectedCategory}
|
||||||
|
<div>
|
||||||
|
<ActionButton
|
||||||
|
secondary
|
||||||
|
icon={"ArrowLeft"}
|
||||||
|
on:click={() => {
|
||||||
|
selectedCategory = null
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
Back
|
||||||
|
</ActionButton>
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
|
|
||||||
|
{#if !selectedCategory}
|
||||||
<div class="heading">Search</div>
|
<div class="heading">Search</div>
|
||||||
<Search placeholder="Search" bind:value={search} />
|
<Search placeholder="Search" bind:value={search} />
|
||||||
</section>
|
{/if}
|
||||||
|
|
||||||
|
{#if !selectedCategory && !search}
|
||||||
|
<ul class="category-list">
|
||||||
|
{#each categoryNames as categoryName}
|
||||||
|
<li
|
||||||
|
on:click={() => {
|
||||||
|
selectedCategory = categoryName
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Icon name={categoryIcons[categoryName]} />
|
||||||
|
<span class="category-name">{categoryName} </span>
|
||||||
|
<span class="category-chevron"><Icon name="ChevronRight" /></span>
|
||||||
|
</li>
|
||||||
|
{/each}
|
||||||
|
</ul>
|
||||||
|
{/if}
|
||||||
|
|
||||||
|
{#if selectedCategory || search}
|
||||||
{#each filteredCategories as category}
|
{#each filteredCategories as category}
|
||||||
{#if category.bindings?.length}
|
{#if category.bindings?.length}
|
||||||
<section>
|
<div class="cat-heading">
|
||||||
<div class="heading">{category.name}</div>
|
<Icon name={categoryIcons[category.name]} />{category.name}
|
||||||
|
</div>
|
||||||
<ul>
|
<ul>
|
||||||
{#each category.bindings as binding}
|
{#each category.bindings as binding}
|
||||||
<li on:click={() => addBinding(binding)}>
|
<li
|
||||||
<span class="binding__label">{binding.readableBinding}</span>
|
class="binding"
|
||||||
{#if binding.type}
|
on:mouseenter={e => {
|
||||||
<span class="binding__type">{binding.type}</span>
|
popoverAnchor = e.target
|
||||||
|
if (!binding.description) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
hoverTarget = {
|
||||||
|
title: binding.display.name || binding.fieldSchema.name,
|
||||||
|
description: binding.description,
|
||||||
|
}
|
||||||
|
popover.show()
|
||||||
|
e.stopPropagation()
|
||||||
|
}}
|
||||||
|
on:mouseleave={() => {
|
||||||
|
popover.hide()
|
||||||
|
popoverAnchor = null
|
||||||
|
hoverTarget = null
|
||||||
|
}}
|
||||||
|
on:focus={() => {}}
|
||||||
|
on:blur={() => {}}
|
||||||
|
on:click={() => addBinding(binding)}
|
||||||
|
>
|
||||||
|
<span class="binding__label">
|
||||||
|
{#if binding.display?.name}
|
||||||
|
{binding.display.name}
|
||||||
|
{:else if binding.fieldSchema?.name}
|
||||||
|
{binding.fieldSchema?.name}
|
||||||
|
{:else}
|
||||||
|
{binding.readableBinding}
|
||||||
{/if}
|
{/if}
|
||||||
{#if binding.description}
|
</span>
|
||||||
<br />
|
|
||||||
<div class="binding__description">
|
{#if binding.display?.type || binding.fieldSchema?.type}
|
||||||
{binding.description || ""}
|
<span class="binding__typeWrap">
|
||||||
</div>
|
<span class="binding__type">
|
||||||
|
{binding.display?.type || binding.fieldSchema?.type}
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
{/if}
|
{/if}
|
||||||
</li>
|
</li>
|
||||||
{/each}
|
{/each}
|
||||||
</ul>
|
</ul>
|
||||||
</section>
|
|
||||||
{/if}
|
{/if}
|
||||||
{/each}
|
{/each}
|
||||||
|
|
||||||
|
{#if selectedCategory === "Helpers" || search}
|
||||||
{#if filteredHelpers?.length}
|
{#if filteredHelpers?.length}
|
||||||
<section>
|
|
||||||
<div class="heading">Helpers</div>
|
<div class="heading">Helpers</div>
|
||||||
<ul>
|
<ul class="helpers">
|
||||||
{#each filteredHelpers as helper}
|
{#each filteredHelpers as helper}
|
||||||
<li on:click={() => addHelper(helper, usingJS)}>
|
<li
|
||||||
<div class="helper">
|
class="binding"
|
||||||
<div class="helper__name">{helper.displayText}</div>
|
on:click={() => addHelper(helper, usingJS)}
|
||||||
<div class="helper__description">
|
on:mouseenter={e => {
|
||||||
{@html helper.description}
|
popoverAnchor = e.target
|
||||||
</div>
|
if (!helper.displayText && helper.description) {
|
||||||
<pre class="helper__example">{getHelperExample(
|
return
|
||||||
helper,
|
}
|
||||||
usingJS
|
hoverTarget = {
|
||||||
)}</pre>
|
title: helper.displayText,
|
||||||
</div>
|
description: helper.description,
|
||||||
|
example: getHelperExample(helper, usingJS),
|
||||||
|
}
|
||||||
|
popover.show()
|
||||||
|
e.stopPropagation()
|
||||||
|
}}
|
||||||
|
on:mouseleave={() => {
|
||||||
|
popover.hide()
|
||||||
|
popoverAnchor = null
|
||||||
|
hoverTarget = null
|
||||||
|
}}
|
||||||
|
on:focus={() => {}}
|
||||||
|
on:blur={() => {}}
|
||||||
|
>
|
||||||
|
<span class="binding__label">{helper.displayText}</span>
|
||||||
|
<span class="binding__typeWrap">
|
||||||
|
<span class="binding__type">function</span>
|
||||||
|
</span>
|
||||||
</li>
|
</li>
|
||||||
{/each}
|
{/each}
|
||||||
</ul>
|
</ul>
|
||||||
</section>
|
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
{/if}
|
||||||
|
{/if}
|
||||||
|
</Layout>
|
||||||
</svelte:fragment>
|
</svelte:fragment>
|
||||||
<div class="main">
|
<div class="main">
|
||||||
<Tabs selected={mode} on:select={onChangeMode}>
|
<Tabs selected={mode} on:select={onChangeMode}>
|
||||||
|
@ -241,6 +374,35 @@
|
||||||
</DrawerContent>
|
</DrawerContent>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
ul.helpers li * {
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
ul.category-list li {
|
||||||
|
display: flex;
|
||||||
|
gap: var(--spacing-m);
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
ul.category-list .category-name {
|
||||||
|
font-weight: 600;
|
||||||
|
text-transform: capitalize;
|
||||||
|
}
|
||||||
|
ul.category-list .category-chevron {
|
||||||
|
flex: 1;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
ul.category-list .category-chevron :global(div.icon),
|
||||||
|
.cat-heading :global(div.icon) {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
li.binding {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
li.binding .binding__typeWrap {
|
||||||
|
flex: 1;
|
||||||
|
text-align: right;
|
||||||
|
text-transform: capitalize;
|
||||||
|
}
|
||||||
.main :global(textarea) {
|
.main :global(textarea) {
|
||||||
min-height: 202px !important;
|
min-height: 202px !important;
|
||||||
}
|
}
|
||||||
|
@ -251,23 +413,20 @@
|
||||||
padding: var(--spacing-s) var(--spacing-xl);
|
padding: var(--spacing-s) var(--spacing-xl);
|
||||||
}
|
}
|
||||||
|
|
||||||
.container {
|
.heading,
|
||||||
margin: calc(-1 * var(--spacing-xl));
|
.cat-heading {
|
||||||
}
|
|
||||||
.heading {
|
|
||||||
font-size: var(--font-size-s);
|
font-size: var(--font-size-s);
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
color: var(--spectrum-global-color-gray-600);
|
color: var(--spectrum-global-color-gray-600);
|
||||||
padding: var(--spacing-xl) 0 var(--spacing-m) 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
section {
|
.cat-heading {
|
||||||
padding: 0 var(--spacing-xl) var(--spacing-xl) var(--spacing-xl);
|
display: flex;
|
||||||
}
|
gap: var(--spacing-m);
|
||||||
section:not(:first-child) {
|
align-items: center;
|
||||||
border-top: var(--border-light);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ul {
|
ul {
|
||||||
list-style: none;
|
list-style: none;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
@ -278,7 +437,7 @@
|
||||||
font-size: var(--font-size-s);
|
font-size: var(--font-size-s);
|
||||||
padding: var(--spacing-m);
|
padding: var(--spacing-m);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
border: var(--border-light);
|
background-color: var(--spectrum-global-color-gray-200);
|
||||||
transition: background-color 130ms ease-in-out, color 130ms ease-in-out,
|
transition: background-color 130ms ease-in-out, color 130ms ease-in-out,
|
||||||
border-color 130ms ease-in-out;
|
border-color 130ms ease-in-out;
|
||||||
word-wrap: break-word;
|
word-wrap: break-word;
|
||||||
|
@ -292,22 +451,14 @@
|
||||||
li:hover {
|
li:hover {
|
||||||
color: var(--spectrum-global-color-gray-900);
|
color: var(--spectrum-global-color-gray-900);
|
||||||
background-color: var(--spectrum-global-color-gray-50);
|
background-color: var(--spectrum-global-color-gray-50);
|
||||||
border-color: var(--spectrum-global-color-gray-500);
|
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
li:hover :global(*) {
|
|
||||||
color: var(--spectrum-global-color-gray-900) !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.binding__label {
|
.binding__label {
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
text-transform: capitalize;
|
text-transform: capitalize;
|
||||||
}
|
}
|
||||||
.binding__description {
|
|
||||||
color: var(--spectrum-global-color-gray-700);
|
|
||||||
margin: 0.5rem 0 0 0;
|
|
||||||
white-space: normal;
|
|
||||||
}
|
|
||||||
.binding__type {
|
.binding__type {
|
||||||
font-family: monospace;
|
font-family: monospace;
|
||||||
background-color: var(--spectrum-global-color-gray-200);
|
background-color: var(--spectrum-global-color-gray-200);
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
}
|
}
|
||||||
return bindings?.map(binding => ({
|
return bindings?.map(binding => ({
|
||||||
...binding,
|
...binding,
|
||||||
category: "Bindable Values",
|
|
||||||
type: null,
|
type: null,
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@budibase/cli",
|
"name": "@budibase/cli",
|
||||||
"version": "1.3.3",
|
"version": "1.3.4-alpha.1",
|
||||||
"description": "Budibase CLI, for developers, self hosting and migrations.",
|
"description": "Budibase CLI, for developers, self hosting and migrations.",
|
||||||
"main": "src/index.js",
|
"main": "src/index.js",
|
||||||
"bin": {
|
"bin": {
|
||||||
|
@ -26,9 +26,9 @@
|
||||||
"outputPath": "build"
|
"outputPath": "build"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@budibase/backend-core": "^1.3.3",
|
"@budibase/backend-core": "^1.3.4-alpha.1",
|
||||||
"@budibase/string-templates": "^1.3.3",
|
"@budibase/string-templates": "^1.3.4-alpha.1",
|
||||||
"@budibase/types": "^1.3.3",
|
"@budibase/types": "^1.3.4-alpha.1",
|
||||||
"axios": "0.21.2",
|
"axios": "0.21.2",
|
||||||
"chalk": "4.1.0",
|
"chalk": "4.1.0",
|
||||||
"cli-progress": "3.11.2",
|
"cli-progress": "3.11.2",
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
process.env.NO_JS = "1"
|
|
@ -1,5 +1,6 @@
|
||||||
#!/usr/bin/env node
|
#!/usr/bin/env node
|
||||||
require("./prebuilds")
|
require("./prebuilds")
|
||||||
|
require("./environment")
|
||||||
const { getCommands } = require("./options")
|
const { getCommands } = require("./options")
|
||||||
const { Command } = require("commander")
|
const { Command } = require("commander")
|
||||||
const { getHelpDescription } = require("./utils")
|
const { getHelpDescription } = require("./utils")
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
const os = require("os")
|
const os = require("os")
|
||||||
const { join } = require("path")
|
const { join } = require("path")
|
||||||
const fs = require("fs")
|
const fs = require("fs")
|
||||||
|
const { error } = require("./utils")
|
||||||
const PREBUILDS = "prebuilds"
|
const PREBUILDS = "prebuilds"
|
||||||
const ARCH = `${os.platform()}-${os.arch()}`
|
const ARCH = `${os.platform()}-${os.arch()}`
|
||||||
const PREBUILD_DIR = join(process.execPath, "..", PREBUILDS, ARCH)
|
const PREBUILD_DIR = join(process.execPath, "..", PREBUILDS, ARCH)
|
||||||
|
@ -25,7 +26,15 @@ function checkForBinaries() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function cleanup() {
|
function cleanup(evt) {
|
||||||
|
if (evt && evt.errno) {
|
||||||
|
console.error(
|
||||||
|
error(
|
||||||
|
"Failed to run CLI command - please report with the following message:"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
console.error(error(evt))
|
||||||
|
}
|
||||||
if (fs.existsSync(PREBUILD_DIR)) {
|
if (fs.existsSync(PREBUILD_DIR)) {
|
||||||
fs.rmSync(PREBUILD_DIR, { recursive: true })
|
fs.rmSync(PREBUILD_DIR, { recursive: true })
|
||||||
}
|
}
|
||||||
|
|
|
@ -544,7 +544,8 @@
|
||||||
"values": [
|
"values": [
|
||||||
{
|
{
|
||||||
"label": "Row Index",
|
"label": "Row Index",
|
||||||
"key": "index"
|
"key": "index",
|
||||||
|
"type": "number"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -2314,19 +2315,23 @@
|
||||||
"values": [
|
"values": [
|
||||||
{
|
{
|
||||||
"label": "Value",
|
"label": "Value",
|
||||||
"key": "__value"
|
"key": "__value",
|
||||||
|
"type": "object"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "Valid",
|
"label": "Valid",
|
||||||
"key": "__valid"
|
"key": "__valid",
|
||||||
|
"type": "boolean"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "Current Step",
|
"label": "Current Step",
|
||||||
"key": "__currentStep"
|
"key": "__currentStep",
|
||||||
|
"type": "number"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "Current Step Valid",
|
"label": "Current Step Valid",
|
||||||
"key": "__currentStepValid"
|
"key": "__currentStepValid",
|
||||||
|
"type": "boolean"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -3550,23 +3555,28 @@
|
||||||
"values": [
|
"values": [
|
||||||
{
|
{
|
||||||
"label": "Rows",
|
"label": "Rows",
|
||||||
"key": "rows"
|
"key": "rows",
|
||||||
|
"type": "array"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "Extra Info",
|
"label": "Extra Info",
|
||||||
"key": "info"
|
"key": "info",
|
||||||
|
"type": "string"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "Rows Length",
|
"label": "Rows Length",
|
||||||
"key": "rowsLength"
|
"key": "rowsLength",
|
||||||
|
"type": "number"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "Schema",
|
"label": "Schema",
|
||||||
"key": "schema"
|
"key": "schema",
|
||||||
|
"type": "object"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "Page Number",
|
"label": "Page Number",
|
||||||
"key": "pageNumber"
|
"key": "pageNumber",
|
||||||
|
"type": "number"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -4328,23 +4338,28 @@
|
||||||
"values": [
|
"values": [
|
||||||
{
|
{
|
||||||
"label": "Rows",
|
"label": "Rows",
|
||||||
"key": "rows"
|
"key": "rows",
|
||||||
|
"type": "array"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "Extra Info",
|
"label": "Extra Info",
|
||||||
"key": "info"
|
"key": "info",
|
||||||
|
"type": "string"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "Rows Length",
|
"label": "Rows Length",
|
||||||
"key": "rowsLength"
|
"key": "rowsLength",
|
||||||
|
"type": "number"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "Schema",
|
"label": "Schema",
|
||||||
"key": "schema"
|
"key": "schema",
|
||||||
|
"type": "object"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "Page Number",
|
"label": "Page Number",
|
||||||
"key": "pageNumber"
|
"key": "pageNumber",
|
||||||
|
"type": "number"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -4354,7 +4369,8 @@
|
||||||
"values": [
|
"values": [
|
||||||
{
|
{
|
||||||
"label": "Row Index",
|
"label": "Row Index",
|
||||||
"key": "index"
|
"key": "index",
|
||||||
|
"type": "number"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@budibase/client",
|
"name": "@budibase/client",
|
||||||
"version": "1.3.3",
|
"version": "1.3.4-alpha.1",
|
||||||
"license": "MPL-2.0",
|
"license": "MPL-2.0",
|
||||||
"module": "dist/budibase-client.js",
|
"module": "dist/budibase-client.js",
|
||||||
"main": "dist/budibase-client.js",
|
"main": "dist/budibase-client.js",
|
||||||
|
@ -19,9 +19,9 @@
|
||||||
"dev:builder": "rollup -cw"
|
"dev:builder": "rollup -cw"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@budibase/bbui": "^1.3.3",
|
"@budibase/bbui": "1.3.4-alpha.1",
|
||||||
"@budibase/frontend-core": "^1.3.3",
|
"@budibase/frontend-core": "1.3.4-alpha.1",
|
||||||
"@budibase/string-templates": "^1.3.3",
|
"@budibase/string-templates": "1.3.4-alpha.1",
|
||||||
"@spectrum-css/button": "^3.0.3",
|
"@spectrum-css/button": "^3.0.3",
|
||||||
"@spectrum-css/card": "^3.0.3",
|
"@spectrum-css/card": "^3.0.3",
|
||||||
"@spectrum-css/divider": "^1.0.3",
|
"@spectrum-css/divider": "^1.0.3",
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
{
|
{
|
||||||
"name": "@budibase/frontend-core",
|
"name": "@budibase/frontend-core",
|
||||||
"version": "1.3.3",
|
"version": "1.3.4-alpha.1",
|
||||||
"description": "Budibase frontend core libraries used in builder and client",
|
"description": "Budibase frontend core libraries used in builder and client",
|
||||||
"author": "Budibase",
|
"author": "Budibase",
|
||||||
"license": "MPL-2.0",
|
"license": "MPL-2.0",
|
||||||
"svelte": "src/index.js",
|
"svelte": "src/index.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@budibase/bbui": "^1.3.3",
|
"@budibase/bbui": "1.3.4-alpha.1",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"svelte": "^3.46.2"
|
"svelte": "^3.46.2"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "@budibase/server",
|
"name": "@budibase/server",
|
||||||
"email": "hi@budibase.com",
|
"email": "hi@budibase.com",
|
||||||
"version": "1.3.3",
|
"version": "1.3.4-alpha.1",
|
||||||
"description": "Budibase Web Server",
|
"description": "Budibase Web Server",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
@ -77,11 +77,11 @@
|
||||||
"license": "GPL-3.0",
|
"license": "GPL-3.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@apidevtools/swagger-parser": "10.0.3",
|
"@apidevtools/swagger-parser": "10.0.3",
|
||||||
"@budibase/backend-core": "^1.3.3",
|
"@budibase/backend-core": "1.3.4-alpha.1",
|
||||||
"@budibase/client": "^1.3.3",
|
"@budibase/client": "1.3.4-alpha.1",
|
||||||
"@budibase/pro": "1.3.3",
|
"@budibase/pro": "1.3.4-alpha.1",
|
||||||
"@budibase/string-templates": "^1.3.3",
|
"@budibase/string-templates": "1.3.4-alpha.1",
|
||||||
"@budibase/types": "^1.3.3",
|
"@budibase/types": "1.3.4-alpha.1",
|
||||||
"@bull-board/api": "3.7.0",
|
"@bull-board/api": "3.7.0",
|
||||||
"@bull-board/koa": "3.9.4",
|
"@bull-board/koa": "3.9.4",
|
||||||
"@elastic/elasticsearch": "7.10.0",
|
"@elastic/elasticsearch": "7.10.0",
|
||||||
|
|
|
@ -1094,12 +1094,12 @@
|
||||||
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
|
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
|
||||||
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
|
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
|
||||||
|
|
||||||
"@budibase/backend-core@1.3.3":
|
"@budibase/backend-core@1.3.4-alpha.1":
|
||||||
version "1.3.3"
|
version "1.3.4-alpha.1"
|
||||||
resolved "https://registry.yarnpkg.com/@budibase/backend-core/-/backend-core-1.3.3.tgz#092f5be5277048efd7719a2b0eb995485f6cc446"
|
resolved "https://registry.yarnpkg.com/@budibase/backend-core/-/backend-core-1.3.4-alpha.1.tgz#5c7547bdf22da936ab6fea8c5fc3ad1b9d54a910"
|
||||||
integrity sha512-nl2RPKNIMSfDEcj8i09iIbnPzkz9wcLLUvWgK1VXoRt4aI7r6a/OBucCv3+QtbJP5hfG7BJ4ThcunLgttP1IrA==
|
integrity sha512-TH4AyFm31kduVYdciw0TLhkGbilSi6vtE2h0qbnr5QV8SszZ8iKt3vUljTHS0PsH2V/S7qLQVEqZ2blkpRHO0A==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@budibase/types" "^1.3.3"
|
"@budibase/types" "1.3.4-alpha.1"
|
||||||
"@techpass/passport-openidconnect" "0.3.2"
|
"@techpass/passport-openidconnect" "0.3.2"
|
||||||
aws-sdk "2.1030.0"
|
aws-sdk "2.1030.0"
|
||||||
bcrypt "5.0.1"
|
bcrypt "5.0.1"
|
||||||
|
@ -1178,13 +1178,13 @@
|
||||||
svelte-flatpickr "^3.2.3"
|
svelte-flatpickr "^3.2.3"
|
||||||
svelte-portal "^1.0.0"
|
svelte-portal "^1.0.0"
|
||||||
|
|
||||||
"@budibase/pro@1.3.3":
|
"@budibase/pro@1.3.4-alpha.1":
|
||||||
version "1.3.3"
|
version "1.3.4-alpha.1"
|
||||||
resolved "https://registry.yarnpkg.com/@budibase/pro/-/pro-1.3.3.tgz#90068258b902b5151633636c0a1131d3e5e3bb01"
|
resolved "https://registry.yarnpkg.com/@budibase/pro/-/pro-1.3.4-alpha.1.tgz#fa58c6a0e58d620ddd329389ae896b823a4dd50e"
|
||||||
integrity sha512-SWbvsS1Ebz5KIgK07YuLR+hWtk0jXUP6rm6koyWebOVJSEudiWUyj839XJzVZxdJsvx9mJIorlHT1aDo0nZCRw==
|
integrity sha512-e8dReYYw+weqYYAQC0zkatBgACaXcbM71kneUTYaX7DnYg7WGY3EHyfajjlQXq+gxmVuXc6wkY28dIozG+/8TQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@budibase/backend-core" "1.3.3"
|
"@budibase/backend-core" "1.3.4-alpha.1"
|
||||||
"@budibase/types" "1.3.3"
|
"@budibase/types" "1.3.4-alpha.1"
|
||||||
"@koa/router" "8.0.8"
|
"@koa/router" "8.0.8"
|
||||||
joi "17.6.0"
|
joi "17.6.0"
|
||||||
node-fetch "^2.6.1"
|
node-fetch "^2.6.1"
|
||||||
|
@ -1207,10 +1207,10 @@
|
||||||
svelte-apexcharts "^1.0.2"
|
svelte-apexcharts "^1.0.2"
|
||||||
svelte-flatpickr "^3.1.0"
|
svelte-flatpickr "^3.1.0"
|
||||||
|
|
||||||
"@budibase/types@1.3.3", "@budibase/types@^1.3.3":
|
"@budibase/types@1.3.4-alpha.1":
|
||||||
version "1.3.3"
|
version "1.3.4-alpha.1"
|
||||||
resolved "https://registry.yarnpkg.com/@budibase/types/-/types-1.3.3.tgz#4a0d7e3e50e864aca4fc8c1ef6cc2299e6a68448"
|
resolved "https://registry.yarnpkg.com/@budibase/types/-/types-1.3.4-alpha.1.tgz#e75aaf70b5c5a3e7b9fde6f77cb91447dffe0d2d"
|
||||||
integrity sha512-/Q6iDDSBp002wvkx2wuGcV6hC7/0fRdHApNujOf9QPNdKadO4e1l5BDe3wEvPKrZj0InVnfO48ONDIM864R5ew==
|
integrity sha512-DpjO3bkPiOCDtIsvPWU4p6SGBAsN80vtr7zz3Cjrv7p98050fWzkUBPAISOTCWTq59OpF6dUhmMmOQuN6OrK+g==
|
||||||
|
|
||||||
"@bull-board/api@3.7.0":
|
"@bull-board/api@3.7.0":
|
||||||
version "3.7.0"
|
version "3.7.0"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@budibase/string-templates",
|
"name": "@budibase/string-templates",
|
||||||
"version": "1.3.3",
|
"version": "1.3.4-alpha.1",
|
||||||
"description": "Handlebars wrapper for Budibase templating.",
|
"description": "Handlebars wrapper for Budibase templating.",
|
||||||
"main": "src/index.cjs",
|
"main": "src/index.cjs",
|
||||||
"module": "dist/bundle.mjs",
|
"module": "dist/bundle.mjs",
|
||||||
|
@ -39,6 +39,7 @@
|
||||||
"jest": "^26.6.3",
|
"jest": "^26.6.3",
|
||||||
"marked": "^4.0.10",
|
"marked": "^4.0.10",
|
||||||
"rollup": "^2.36.2",
|
"rollup": "^2.36.2",
|
||||||
|
"rollup-plugin-inject-process-env": "^1.3.1",
|
||||||
"rollup-plugin-node-builtins": "^2.1.2",
|
"rollup-plugin-node-builtins": "^2.1.2",
|
||||||
"rollup-plugin-node-globals": "^1.4.0",
|
"rollup-plugin-node-globals": "^1.4.0",
|
||||||
"rollup-plugin-node-resolve": "^5.2.0",
|
"rollup-plugin-node-resolve": "^5.2.0",
|
||||||
|
|
|
@ -4,6 +4,7 @@ import json from "@rollup/plugin-json"
|
||||||
import { terser } from "rollup-plugin-terser"
|
import { terser } from "rollup-plugin-terser"
|
||||||
import builtins from "rollup-plugin-node-builtins"
|
import builtins from "rollup-plugin-node-builtins"
|
||||||
import globals from "rollup-plugin-node-globals"
|
import globals from "rollup-plugin-node-globals"
|
||||||
|
import injectProcessEnv from "rollup-plugin-inject-process-env"
|
||||||
|
|
||||||
const production = !process.env.ROLLUP_WATCH
|
const production = !process.env.ROLLUP_WATCH
|
||||||
|
|
||||||
|
@ -24,6 +25,9 @@ export default [
|
||||||
globals(),
|
globals(),
|
||||||
builtins(),
|
builtins(),
|
||||||
json(),
|
json(),
|
||||||
|
injectProcessEnv({
|
||||||
|
NO_JS: process.env.NO_JS,
|
||||||
|
}),
|
||||||
production && terser(),
|
production && terser(),
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
|
@ -36,6 +36,9 @@ const getContextValue = (path, context) => {
|
||||||
|
|
||||||
// Evaluates JS code against a certain context
|
// Evaluates JS code against a certain context
|
||||||
module.exports.processJS = (handlebars, context) => {
|
module.exports.processJS = (handlebars, context) => {
|
||||||
|
if (process && process.env.NO_JS) {
|
||||||
|
throw new Error("JS disabled in environment.")
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
// Wrap JS in a function and immediately invoke it.
|
// Wrap JS in a function and immediately invoke it.
|
||||||
// This is required to allow the final `return` statement to be valid.
|
// This is required to allow the final `return` statement to be valid.
|
||||||
|
|
|
@ -1,6 +1,4 @@
|
||||||
const { VM } = require("vm2")
|
|
||||||
const templates = require("./index.js")
|
const templates = require("./index.js")
|
||||||
const { setJSRunner } = require("./helpers/javascript")
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* CJS entrypoint for rollup
|
* CJS entrypoint for rollup
|
||||||
|
@ -21,6 +19,9 @@ module.exports.disableEscaping = templates.disableEscaping
|
||||||
module.exports.findHBSBlocks = templates.findHBSBlocks
|
module.exports.findHBSBlocks = templates.findHBSBlocks
|
||||||
module.exports.convertToJS = templates.convertToJS
|
module.exports.convertToJS = templates.convertToJS
|
||||||
|
|
||||||
|
if (!process.env.NO_JS) {
|
||||||
|
const { VM } = require("vm2")
|
||||||
|
const { setJSRunner } = require("./helpers/javascript")
|
||||||
/**
|
/**
|
||||||
* Use vm2 to run JS scripts in a node env
|
* Use vm2 to run JS scripts in a node env
|
||||||
*/
|
*/
|
||||||
|
@ -31,3 +32,4 @@ setJSRunner((js, context) => {
|
||||||
})
|
})
|
||||||
return vm.run(js)
|
return vm.run(js)
|
||||||
})
|
})
|
||||||
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@ export const disableEscaping = templates.disableEscaping
|
||||||
export const findHBSBlocks = templates.findHBSBlocks
|
export const findHBSBlocks = templates.findHBSBlocks
|
||||||
export const convertToJS = templates.convertToJS
|
export const convertToJS = templates.convertToJS
|
||||||
|
|
||||||
|
if (process && !process.env.NO_JS) {
|
||||||
/**
|
/**
|
||||||
* Use polyfilled vm to run JS scripts in a browser Env
|
* Use polyfilled vm to run JS scripts in a browser Env
|
||||||
*/
|
*/
|
||||||
|
@ -34,3 +35,4 @@ setJSRunner((js, context) => {
|
||||||
vm.createContext(context)
|
vm.createContext(context)
|
||||||
return vm.runInNewContext(js, context, { timeout: 1000 })
|
return vm.runInNewContext(js, context, { timeout: 1000 })
|
||||||
})
|
})
|
||||||
|
}
|
||||||
|
|
|
@ -568,6 +568,15 @@
|
||||||
magic-string "^0.25.7"
|
magic-string "^0.25.7"
|
||||||
resolve "^1.17.0"
|
resolve "^1.17.0"
|
||||||
|
|
||||||
|
"@rollup/plugin-inject@^4.0.0":
|
||||||
|
version "4.0.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rollup/plugin-inject/-/plugin-inject-4.0.4.tgz#fbeee66e9a700782c4f65c8b0edbafe58678fbc2"
|
||||||
|
integrity sha512-4pbcU4J/nS+zuHk+c+OL3WtmEQhqxlZ9uqfjQMQDOHOPld7PsCd8k5LWs8h5wjwJN7MgnAn768F2sDxEP4eNFQ==
|
||||||
|
dependencies:
|
||||||
|
"@rollup/pluginutils" "^3.1.0"
|
||||||
|
estree-walker "^2.0.1"
|
||||||
|
magic-string "^0.25.7"
|
||||||
|
|
||||||
"@rollup/plugin-json@^4.1.0":
|
"@rollup/plugin-json@^4.1.0":
|
||||||
version "4.1.0"
|
version "4.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-4.1.0.tgz#54e09867ae6963c593844d8bd7a9c718294496f3"
|
resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-4.1.0.tgz#54e09867ae6963c593844d8bd7a9c718294496f3"
|
||||||
|
@ -3747,6 +3756,13 @@ ripemd160@^2.0.0, ripemd160@^2.0.1:
|
||||||
hash-base "^3.0.0"
|
hash-base "^3.0.0"
|
||||||
inherits "^2.0.1"
|
inherits "^2.0.1"
|
||||||
|
|
||||||
|
rollup-plugin-inject-process-env@^1.3.1:
|
||||||
|
version "1.3.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/rollup-plugin-inject-process-env/-/rollup-plugin-inject-process-env-1.3.1.tgz#2d7660fe76f2b221b976cb35597763ffcaad3db3"
|
||||||
|
integrity sha512-kKDoL30IZr0wxbNVJjq+OS92RJSKRbKV6B5eNW4q3mZTFqoWDh6lHy+mPDYuuGuERFNKXkG+AKxvYqC9+DRpKQ==
|
||||||
|
dependencies:
|
||||||
|
magic-string "^0.25.7"
|
||||||
|
|
||||||
rollup-plugin-node-builtins@^2.1.2:
|
rollup-plugin-node-builtins@^2.1.2:
|
||||||
version "2.1.2"
|
version "2.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/rollup-plugin-node-builtins/-/rollup-plugin-node-builtins-2.1.2.tgz#24a1fed4a43257b6b64371d8abc6ce1ab14597e9"
|
resolved "https://registry.yarnpkg.com/rollup-plugin-node-builtins/-/rollup-plugin-node-builtins-2.1.2.tgz#24a1fed4a43257b6b64371d8abc6ce1ab14597e9"
|
||||||
|
@ -3780,6 +3796,13 @@ rollup-plugin-node-resolve@^5.2.0:
|
||||||
resolve "^1.11.1"
|
resolve "^1.11.1"
|
||||||
rollup-pluginutils "^2.8.1"
|
rollup-pluginutils "^2.8.1"
|
||||||
|
|
||||||
|
rollup-plugin-polyfill-node@^0.10.2:
|
||||||
|
version "0.10.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/rollup-plugin-polyfill-node/-/rollup-plugin-polyfill-node-0.10.2.tgz#b2128646851fcb9475ddfd5bc22ca1a8c568738d"
|
||||||
|
integrity sha512-5GMywXiLiuQP6ZzED/LO/Q0HyDi2W6b8VN+Zd3oB0opIjyRs494Me2ZMaqKWDNbGiW4jvvzl6L2n4zRgxS9cSQ==
|
||||||
|
dependencies:
|
||||||
|
"@rollup/plugin-inject" "^4.0.0"
|
||||||
|
|
||||||
rollup-plugin-terser@^7.0.2:
|
rollup-plugin-terser@^7.0.2:
|
||||||
version "7.0.2"
|
version "7.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d"
|
resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@budibase/types",
|
"name": "@budibase/types",
|
||||||
"version": "1.3.3",
|
"version": "1.3.4-alpha.1",
|
||||||
"description": "Budibase types",
|
"description": "Budibase types",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
"types": "dist/index.d.ts",
|
"types": "dist/index.d.ts",
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "@budibase/worker",
|
"name": "@budibase/worker",
|
||||||
"email": "hi@budibase.com",
|
"email": "hi@budibase.com",
|
||||||
"version": "1.3.3",
|
"version": "1.3.4-alpha.1",
|
||||||
"description": "Budibase background service",
|
"description": "Budibase background service",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
@ -35,10 +35,10 @@
|
||||||
"author": "Budibase",
|
"author": "Budibase",
|
||||||
"license": "GPL-3.0",
|
"license": "GPL-3.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@budibase/backend-core": "^1.3.3",
|
"@budibase/backend-core": "1.3.4-alpha.1",
|
||||||
"@budibase/pro": "1.3.3",
|
"@budibase/pro": "1.3.4-alpha.1",
|
||||||
"@budibase/string-templates": "^1.3.3",
|
"@budibase/string-templates": "1.3.4-alpha.1",
|
||||||
"@budibase/types": "^1.3.3",
|
"@budibase/types": "1.3.4-alpha.1",
|
||||||
"@koa/router": "8.0.8",
|
"@koa/router": "8.0.8",
|
||||||
"@sentry/node": "6.17.7",
|
"@sentry/node": "6.17.7",
|
||||||
"@techpass/passport-openidconnect": "0.3.2",
|
"@techpass/passport-openidconnect": "0.3.2",
|
||||||
|
|
|
@ -291,12 +291,12 @@
|
||||||
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
|
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
|
||||||
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
|
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
|
||||||
|
|
||||||
"@budibase/backend-core@1.3.3":
|
"@budibase/backend-core@1.3.4-alpha.1":
|
||||||
version "1.3.3"
|
version "1.3.4-alpha.1"
|
||||||
resolved "https://registry.yarnpkg.com/@budibase/backend-core/-/backend-core-1.3.3.tgz#092f5be5277048efd7719a2b0eb995485f6cc446"
|
resolved "https://registry.yarnpkg.com/@budibase/backend-core/-/backend-core-1.3.4-alpha.1.tgz#5c7547bdf22da936ab6fea8c5fc3ad1b9d54a910"
|
||||||
integrity sha512-nl2RPKNIMSfDEcj8i09iIbnPzkz9wcLLUvWgK1VXoRt4aI7r6a/OBucCv3+QtbJP5hfG7BJ4ThcunLgttP1IrA==
|
integrity sha512-TH4AyFm31kduVYdciw0TLhkGbilSi6vtE2h0qbnr5QV8SszZ8iKt3vUljTHS0PsH2V/S7qLQVEqZ2blkpRHO0A==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@budibase/types" "^1.3.3"
|
"@budibase/types" "1.3.4-alpha.1"
|
||||||
"@techpass/passport-openidconnect" "0.3.2"
|
"@techpass/passport-openidconnect" "0.3.2"
|
||||||
aws-sdk "2.1030.0"
|
aws-sdk "2.1030.0"
|
||||||
bcrypt "5.0.1"
|
bcrypt "5.0.1"
|
||||||
|
@ -325,21 +325,21 @@
|
||||||
uuid "8.3.2"
|
uuid "8.3.2"
|
||||||
zlib "1.0.5"
|
zlib "1.0.5"
|
||||||
|
|
||||||
"@budibase/pro@1.3.3":
|
"@budibase/pro@1.3.4-alpha.1":
|
||||||
version "1.3.3"
|
version "1.3.4-alpha.1"
|
||||||
resolved "https://registry.yarnpkg.com/@budibase/pro/-/pro-1.3.3.tgz#90068258b902b5151633636c0a1131d3e5e3bb01"
|
resolved "https://registry.yarnpkg.com/@budibase/pro/-/pro-1.3.4-alpha.1.tgz#fa58c6a0e58d620ddd329389ae896b823a4dd50e"
|
||||||
integrity sha512-SWbvsS1Ebz5KIgK07YuLR+hWtk0jXUP6rm6koyWebOVJSEudiWUyj839XJzVZxdJsvx9mJIorlHT1aDo0nZCRw==
|
integrity sha512-e8dReYYw+weqYYAQC0zkatBgACaXcbM71kneUTYaX7DnYg7WGY3EHyfajjlQXq+gxmVuXc6wkY28dIozG+/8TQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@budibase/backend-core" "1.3.3"
|
"@budibase/backend-core" "1.3.4-alpha.1"
|
||||||
"@budibase/types" "1.3.3"
|
"@budibase/types" "1.3.4-alpha.1"
|
||||||
"@koa/router" "8.0.8"
|
"@koa/router" "8.0.8"
|
||||||
joi "17.6.0"
|
joi "17.6.0"
|
||||||
node-fetch "^2.6.1"
|
node-fetch "^2.6.1"
|
||||||
|
|
||||||
"@budibase/types@1.3.3", "@budibase/types@^1.3.3":
|
"@budibase/types@1.3.4-alpha.1":
|
||||||
version "1.3.3"
|
version "1.3.4-alpha.1"
|
||||||
resolved "https://registry.yarnpkg.com/@budibase/types/-/types-1.3.3.tgz#4a0d7e3e50e864aca4fc8c1ef6cc2299e6a68448"
|
resolved "https://registry.yarnpkg.com/@budibase/types/-/types-1.3.4-alpha.1.tgz#e75aaf70b5c5a3e7b9fde6f77cb91447dffe0d2d"
|
||||||
integrity sha512-/Q6iDDSBp002wvkx2wuGcV6hC7/0fRdHApNujOf9QPNdKadO4e1l5BDe3wEvPKrZj0InVnfO48ONDIM864R5ew==
|
integrity sha512-DpjO3bkPiOCDtIsvPWU4p6SGBAsN80vtr7zz3Cjrv7p98050fWzkUBPAISOTCWTq59OpF6dUhmMmOQuN6OrK+g==
|
||||||
|
|
||||||
"@cspotcode/source-map-consumer@0.8.0":
|
"@cspotcode/source-map-consumer@0.8.0":
|
||||||
version "0.8.0"
|
version "0.8.0"
|
||||||
|
|
Loading…
Reference in New Issue