2020-10-02 13:37:46 +02:00
|
|
|
const newid = require("./newid")
|
2021-05-13 14:29:53 +02:00
|
|
|
const {
|
2022-10-20 16:05:50 +02:00
|
|
|
DocumentType: CoreDocType,
|
|
|
|
InternalTable,
|
2021-05-14 16:43:41 +02:00
|
|
|
getRoleParams,
|
|
|
|
generateRoleID,
|
2021-05-13 14:29:53 +02:00
|
|
|
APP_DEV_PREFIX,
|
|
|
|
APP_PREFIX,
|
|
|
|
SEPARATOR,
|
2021-06-08 17:06:30 +02:00
|
|
|
StaticDatabases,
|
2021-09-07 14:58:53 +02:00
|
|
|
isDevAppID,
|
|
|
|
isProdAppID,
|
2022-05-09 13:29:44 +02:00
|
|
|
getDevelopmentAppID,
|
|
|
|
generateAppID,
|
2022-09-28 09:56:45 +02:00
|
|
|
getQueryIndex,
|
|
|
|
ViewName,
|
2022-10-20 16:05:50 +02:00
|
|
|
getDocParams,
|
|
|
|
getRowParams,
|
|
|
|
generateRowID,
|
|
|
|
getUserMetadataParams,
|
|
|
|
generateUserMetadataID,
|
|
|
|
getGlobalIDFromUserMetadataID,
|
2022-01-10 20:33:00 +01:00
|
|
|
} = require("@budibase/backend-core/db")
|
2020-10-02 13:37:46 +02:00
|
|
|
|
2022-11-15 18:03:35 +01:00
|
|
|
const { BUDIBASE_DATASOURCE_TYPE } = require("../constants")
|
|
|
|
|
2020-10-09 10:47:37 +02:00
|
|
|
const UNICODE_MAX = "\ufff0"
|
|
|
|
|
2021-05-13 12:06:08 +02:00
|
|
|
const AppStatus = {
|
2021-05-21 11:32:16 +02:00
|
|
|
DEV: "development",
|
2021-05-19 16:09:57 +02:00
|
|
|
ALL: "all",
|
2021-05-21 11:32:16 +02:00
|
|
|
DEPLOYED: "published",
|
2021-05-13 12:06:08 +02:00
|
|
|
}
|
|
|
|
|
2022-10-20 16:05:50 +02:00
|
|
|
const DocumentType = CoreDocType
|
2020-11-10 18:22:41 +01:00
|
|
|
|
2021-03-26 00:42:50 +01:00
|
|
|
const SearchIndexes = {
|
|
|
|
ROWS: "rows",
|
|
|
|
}
|
|
|
|
|
2021-08-05 10:59:08 +02:00
|
|
|
exports.StaticDatabases = StaticDatabases
|
2021-06-08 17:06:30 +02:00
|
|
|
|
2021-06-15 20:48:05 +02:00
|
|
|
const BudibaseInternalDB = {
|
|
|
|
_id: "bb_internal",
|
2022-11-15 18:03:35 +01:00
|
|
|
type: BUDIBASE_DATASOURCE_TYPE,
|
2021-06-17 12:40:01 +02:00
|
|
|
name: "Budibase DB",
|
2021-06-15 20:48:05 +02:00
|
|
|
source: "BUDIBASE",
|
|
|
|
config: {},
|
|
|
|
}
|
|
|
|
|
2021-05-13 14:29:53 +02:00
|
|
|
exports.APP_PREFIX = APP_PREFIX
|
|
|
|
exports.APP_DEV_PREFIX = APP_DEV_PREFIX
|
2021-09-07 14:58:53 +02:00
|
|
|
exports.isDevAppID = isDevAppID
|
|
|
|
exports.isProdAppID = isProdAppID
|
2022-10-20 16:05:50 +02:00
|
|
|
exports.USER_METDATA_PREFIX = `${DocumentType.ROW}${SEPARATOR}${InternalTable.USER_METADATA}${SEPARATOR}`
|
|
|
|
exports.LINK_USER_METADATA_PREFIX = `${DocumentType.LINK}${SEPARATOR}${InternalTable.USER_METADATA}${SEPARATOR}`
|
2022-09-28 09:56:45 +02:00
|
|
|
exports.TABLE_ROW_PREFIX = `${DocumentType.ROW}${SEPARATOR}${DocumentType.TABLE}`
|
|
|
|
exports.ViewName = ViewName
|
2022-10-20 16:05:50 +02:00
|
|
|
exports.InternalTables = InternalTable
|
2022-09-28 09:56:45 +02:00
|
|
|
exports.DocumentType = DocumentType
|
2020-10-09 10:47:37 +02:00
|
|
|
exports.SEPARATOR = SEPARATOR
|
2020-10-09 11:46:38 +02:00
|
|
|
exports.UNICODE_MAX = UNICODE_MAX
|
2021-03-26 00:42:50 +01:00
|
|
|
exports.SearchIndexes = SearchIndexes
|
2021-05-13 12:06:08 +02:00
|
|
|
exports.AppStatus = AppStatus
|
2021-06-15 20:48:05 +02:00
|
|
|
exports.BudibaseInternalDB = BudibaseInternalDB
|
2022-05-09 13:29:44 +02:00
|
|
|
exports.generateAppID = generateAppID
|
|
|
|
exports.generateDevAppID = getDevelopmentAppID
|
2021-05-14 16:43:41 +02:00
|
|
|
exports.generateRoleID = generateRoleID
|
|
|
|
exports.getRoleParams = getRoleParams
|
2022-09-28 09:56:45 +02:00
|
|
|
exports.getQueryIndex = getQueryIndex
|
2021-09-29 18:43:16 +02:00
|
|
|
exports.getDocParams = getDocParams
|
2022-10-20 16:05:50 +02:00
|
|
|
exports.getRowParams = getRowParams
|
|
|
|
exports.generateRowID = generateRowID
|
|
|
|
exports.getUserMetadataParams = getUserMetadataParams
|
|
|
|
exports.generateUserMetadataID = generateUserMetadataID
|
|
|
|
exports.getGlobalIDFromUserMetadataID = getGlobalIDFromUserMetadataID
|
2021-09-29 18:43:16 +02:00
|
|
|
|
2020-10-02 13:37:46 +02:00
|
|
|
/**
|
2020-10-09 19:49:23 +02:00
|
|
|
* Gets parameters for retrieving tables, this is a utility function for the getDocParams function.
|
2020-10-02 13:37:46 +02:00
|
|
|
*/
|
2020-10-09 19:49:23 +02:00
|
|
|
exports.getTableParams = (tableId = null, otherProps = {}) => {
|
2022-09-28 09:56:45 +02:00
|
|
|
return getDocParams(DocumentType.TABLE, tableId, otherProps)
|
2020-10-01 18:22:08 +02:00
|
|
|
}
|
|
|
|
|
2020-10-02 13:37:46 +02:00
|
|
|
/**
|
2020-10-09 19:49:23 +02:00
|
|
|
* Generates a new table ID.
|
|
|
|
* @returns {string} The new table ID which the table doc can be stored under.
|
2020-10-02 13:37:46 +02:00
|
|
|
*/
|
2020-10-09 19:49:23 +02:00
|
|
|
exports.generateTableID = () => {
|
2022-09-28 09:56:45 +02:00
|
|
|
return `${DocumentType.TABLE}${SEPARATOR}${newid()}`
|
2020-10-01 18:22:08 +02:00
|
|
|
}
|
|
|
|
|
2022-02-28 13:54:32 +01:00
|
|
|
/**
|
|
|
|
* Given a row ID this will find the table ID within it (only works for internal tables).
|
|
|
|
* @param {string} rowId The ID of the row.
|
|
|
|
* @returns {string} The table ID.
|
|
|
|
*/
|
|
|
|
exports.getTableIDFromRowID = rowId => {
|
|
|
|
const components = rowId
|
2022-09-28 09:56:45 +02:00
|
|
|
.split(DocumentType.TABLE + SEPARATOR)[1]
|
2022-02-28 13:54:32 +01:00
|
|
|
.split(SEPARATOR)
|
2022-09-28 09:56:45 +02:00
|
|
|
return `${DocumentType.TABLE}${SEPARATOR}${components[0]}`
|
2022-02-28 13:54:32 +01:00
|
|
|
}
|
|
|
|
|
2020-10-02 13:37:46 +02:00
|
|
|
/**
|
2020-10-02 15:19:39 +02:00
|
|
|
* Gets parameters for retrieving automations, this is a utility function for the getDocParams function.
|
2020-10-02 13:37:46 +02:00
|
|
|
*/
|
|
|
|
exports.getAutomationParams = (automationId = null, otherProps = {}) => {
|
2022-09-28 09:56:45 +02:00
|
|
|
return getDocParams(DocumentType.AUTOMATION, automationId, otherProps)
|
2020-10-01 18:22:08 +02:00
|
|
|
}
|
|
|
|
|
2020-10-02 13:37:46 +02:00
|
|
|
/**
|
|
|
|
* Generates a new automation ID.
|
|
|
|
* @returns {string} The new automation ID which the automation doc can be stored under.
|
|
|
|
*/
|
|
|
|
exports.generateAutomationID = () => {
|
2022-09-28 09:56:45 +02:00
|
|
|
return `${DocumentType.AUTOMATION}${SEPARATOR}${newid()}`
|
2020-10-01 18:22:08 +02:00
|
|
|
}
|
|
|
|
|
2020-10-02 13:37:46 +02:00
|
|
|
/**
|
|
|
|
* Generates a new link doc ID. This is currently not usable with the alldocs call,
|
|
|
|
* instead a view is built to make walking to tree easier.
|
2020-10-09 19:49:23 +02:00
|
|
|
* @param {string} tableId1 The ID of the linker table.
|
|
|
|
* @param {string} tableId2 The ID of the linked table.
|
2020-10-09 20:10:28 +02:00
|
|
|
* @param {string} rowId1 The ID of the linker row.
|
|
|
|
* @param {string} rowId2 The ID of the linked row.
|
2021-02-15 18:47:14 +01:00
|
|
|
* @param {string} fieldName1 The name of the field in the linker row.
|
|
|
|
* @param {string} fieldName2 the name of the field in the linked row.
|
2020-10-02 13:37:46 +02:00
|
|
|
* @returns {string} The new link doc ID which the automation doc can be stored under.
|
|
|
|
*/
|
2021-02-15 18:47:14 +01:00
|
|
|
exports.generateLinkID = (
|
|
|
|
tableId1,
|
|
|
|
tableId2,
|
|
|
|
rowId1,
|
|
|
|
rowId2,
|
|
|
|
fieldName1,
|
|
|
|
fieldName2
|
|
|
|
) => {
|
|
|
|
const tables = `${SEPARATOR}${tableId1}${SEPARATOR}${tableId2}`
|
|
|
|
const rows = `${SEPARATOR}${rowId1}${SEPARATOR}${rowId2}`
|
|
|
|
const fields = `${SEPARATOR}${fieldName1}${SEPARATOR}${fieldName2}`
|
2022-09-28 09:56:45 +02:00
|
|
|
return `${DocumentType.LINK}${tables}${rows}${fields}`
|
2020-10-12 15:31:17 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets parameters for retrieving link docs, this is a utility function for the getDocParams function.
|
|
|
|
*/
|
|
|
|
exports.getLinkParams = (otherProps = {}) => {
|
2022-09-28 09:56:45 +02:00
|
|
|
return getDocParams(DocumentType.LINK, null, otherProps)
|
2020-10-01 18:22:08 +02:00
|
|
|
}
|
|
|
|
|
2020-11-02 15:53:51 +01:00
|
|
|
/**
|
2020-11-23 15:07:18 +01:00
|
|
|
* Generates a new layout ID.
|
|
|
|
* @returns {string} The new layout ID which the layout doc can be stored under.
|
2020-11-02 15:53:51 +01:00
|
|
|
*/
|
2021-05-04 12:32:22 +02:00
|
|
|
exports.generateLayoutID = id => {
|
2022-09-28 09:56:45 +02:00
|
|
|
return `${DocumentType.LAYOUT}${SEPARATOR}${id || newid()}`
|
2020-11-02 15:53:51 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-11-23 15:07:18 +01:00
|
|
|
* Gets parameters for retrieving layout, this is a utility function for the getDocParams function.
|
2020-11-02 15:53:51 +01:00
|
|
|
*/
|
2020-11-23 15:07:18 +01:00
|
|
|
exports.getLayoutParams = (layoutId = null, otherProps = {}) => {
|
2022-09-28 09:56:45 +02:00
|
|
|
return getDocParams(DocumentType.LAYOUT, layoutId, otherProps)
|
2020-11-02 15:53:51 +01:00
|
|
|
}
|
|
|
|
|
2020-11-03 18:42:54 +01:00
|
|
|
/**
|
|
|
|
* Generates a new screen ID.
|
|
|
|
* @returns {string} The new screen ID which the screen doc can be stored under.
|
|
|
|
*/
|
2020-11-20 18:47:13 +01:00
|
|
|
exports.generateScreenID = () => {
|
2022-09-28 09:56:45 +02:00
|
|
|
return `${DocumentType.SCREEN}${SEPARATOR}${newid()}`
|
2020-11-03 18:42:54 +01:00
|
|
|
}
|
|
|
|
|
2020-11-03 17:27:28 +01:00
|
|
|
/**
|
2020-11-20 18:47:13 +01:00
|
|
|
* Gets parameters for retrieving screens, this is a utility function for the getDocParams function.
|
2020-11-03 17:27:28 +01:00
|
|
|
*/
|
2020-11-20 18:47:13 +01:00
|
|
|
exports.getScreenParams = (screenId = null, otherProps = {}) => {
|
2022-09-28 09:56:45 +02:00
|
|
|
return getDocParams(DocumentType.SCREEN, screenId, otherProps)
|
2020-11-20 18:47:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Generates a new webhook ID.
|
|
|
|
* @returns {string} The new webhook ID which the webhook doc can be stored under.
|
|
|
|
*/
|
|
|
|
exports.generateWebhookID = () => {
|
2022-09-28 09:56:45 +02:00
|
|
|
return `${DocumentType.WEBHOOK}${SEPARATOR}${newid()}`
|
2020-11-03 17:27:28 +01:00
|
|
|
}
|
|
|
|
|
2020-10-22 18:48:32 +02:00
|
|
|
/**
|
|
|
|
* Gets parameters for retrieving a webhook, this is a utility function for the getDocParams function.
|
|
|
|
*/
|
|
|
|
exports.getWebhookParams = (webhookId = null, otherProps = {}) => {
|
2022-09-28 09:56:45 +02:00
|
|
|
return getDocParams(DocumentType.WEBHOOK, webhookId, otherProps)
|
2020-10-22 18:48:32 +02:00
|
|
|
}
|
2020-12-18 19:19:43 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Generates a new datasource ID.
|
|
|
|
* @returns {string} The new datasource ID which the webhook doc can be stored under.
|
|
|
|
*/
|
2021-06-04 16:16:15 +02:00
|
|
|
exports.generateDatasourceID = ({ plus = false } = {}) => {
|
2021-06-04 11:50:02 +02:00
|
|
|
return `${
|
2022-09-28 09:56:45 +02:00
|
|
|
plus ? DocumentType.DATASOURCE_PLUS : DocumentType.DATASOURCE
|
2021-06-04 11:50:02 +02:00
|
|
|
}${SEPARATOR}${newid()}`
|
2020-12-18 19:19:43 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets parameters for retrieving a datasource, this is a utility function for the getDocParams function.
|
|
|
|
*/
|
|
|
|
exports.getDatasourceParams = (datasourceId = null, otherProps = {}) => {
|
2022-09-28 09:56:45 +02:00
|
|
|
return getDocParams(DocumentType.DATASOURCE, datasourceId, otherProps)
|
2020-12-18 19:19:43 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Generates a new query ID.
|
|
|
|
* @returns {string} The new query ID which the query doc can be stored under.
|
|
|
|
*/
|
2021-05-04 12:32:22 +02:00
|
|
|
exports.generateQueryID = datasourceId => {
|
2021-01-06 13:28:51 +01:00
|
|
|
return `${
|
2022-09-28 09:56:45 +02:00
|
|
|
DocumentType.QUERY
|
2021-01-06 13:28:51 +01:00
|
|
|
}${SEPARATOR}${datasourceId}${SEPARATOR}${newid()}`
|
2020-12-18 19:19:43 +01:00
|
|
|
}
|
|
|
|
|
2022-09-28 09:56:45 +02:00
|
|
|
/**
|
|
|
|
* Generates a metadata ID for automations, used to track errors in recurring
|
|
|
|
* automations etc.
|
|
|
|
*/
|
|
|
|
exports.generateAutomationMetadataID = automationId => {
|
|
|
|
return `${DocumentType.AUTOMATION_METADATA}${SEPARATOR}${automationId}`
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Retrieve all automation metadata in an app database.
|
|
|
|
*/
|
|
|
|
exports.getAutomationMetadataParams = (otherProps = {}) => {
|
|
|
|
return getDocParams(DocumentType.AUTOMATION_METADATA, null, otherProps)
|
|
|
|
}
|
|
|
|
|
2020-12-18 19:19:43 +01:00
|
|
|
/**
|
|
|
|
* Gets parameters for retrieving a query, this is a utility function for the getDocParams function.
|
|
|
|
*/
|
2021-01-12 17:49:11 +01:00
|
|
|
exports.getQueryParams = (datasourceId = null, otherProps = {}) => {
|
|
|
|
if (datasourceId == null) {
|
2022-09-28 09:56:45 +02:00
|
|
|
return getDocParams(DocumentType.QUERY, null, otherProps)
|
2021-01-12 17:49:11 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return getDocParams(
|
2022-09-28 09:56:45 +02:00
|
|
|
DocumentType.QUERY,
|
2021-01-12 17:49:11 +01:00
|
|
|
`${datasourceId}${SEPARATOR}`,
|
|
|
|
otherProps
|
|
|
|
)
|
2020-12-18 19:19:43 +01:00
|
|
|
}
|
2021-02-17 19:04:21 +01:00
|
|
|
|
2021-12-07 19:24:10 +01:00
|
|
|
/**
|
|
|
|
* Generates a new flag document ID.
|
|
|
|
* @returns {string} The ID of the flag document that was generated.
|
|
|
|
*/
|
|
|
|
exports.generateUserFlagID = userId => {
|
2022-09-28 09:56:45 +02:00
|
|
|
return `${DocumentType.USER_FLAG}${SEPARATOR}${userId}`
|
2021-12-07 19:24:10 +01:00
|
|
|
}
|
|
|
|
|
2021-09-08 20:29:28 +02:00
|
|
|
exports.generateMetadataID = (type, entityId) => {
|
2022-09-28 09:56:45 +02:00
|
|
|
return `${DocumentType.METADATA}${SEPARATOR}${type}${SEPARATOR}${entityId}`
|
2021-09-08 20:29:28 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
exports.getMetadataParams = (type, entityId = null, otherProps = {}) => {
|
|
|
|
let docId = `${type}${SEPARATOR}`
|
|
|
|
if (entityId != null) {
|
|
|
|
docId += entityId
|
|
|
|
}
|
2022-09-28 09:56:45 +02:00
|
|
|
return getDocParams(DocumentType.METADATA, docId, otherProps)
|
2021-09-08 20:29:28 +02:00
|
|
|
}
|
|
|
|
|
2021-09-20 19:24:09 +02:00
|
|
|
exports.generateMemoryViewID = viewName => {
|
2022-09-28 09:56:45 +02:00
|
|
|
return `${DocumentType.MEM_VIEW}${SEPARATOR}${viewName}`
|
2021-09-20 19:24:09 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
exports.getMemoryViewParams = (otherProps = {}) => {
|
2022-09-28 09:56:45 +02:00
|
|
|
return getDocParams(DocumentType.MEM_VIEW, null, otherProps)
|
|
|
|
}
|
|
|
|
|
|
|
|
exports.generatePluginID = name => {
|
|
|
|
return `${DocumentType.PLUGIN}${SEPARATOR}${name}`
|
2021-09-20 19:24:09 +02:00
|
|
|
}
|
|
|
|
|
2021-02-17 19:04:21 +01:00
|
|
|
/**
|
2021-02-18 14:38:57 +01:00
|
|
|
* This can be used with the db.allDocs to get a list of IDs
|
2021-02-17 19:04:21 +01:00
|
|
|
*/
|
2021-05-04 12:32:22 +02:00
|
|
|
exports.getMultiIDParams = ids => {
|
2021-02-18 14:38:57 +01:00
|
|
|
return {
|
|
|
|
keys: ids,
|
|
|
|
include_docs: true,
|
2021-02-17 19:04:21 +01:00
|
|
|
}
|
|
|
|
}
|