295 lines
8.5 KiB
JavaScript
295 lines
8.5 KiB
JavaScript
const newid = require("./newid")
|
|
const {
|
|
DocumentType: CoreDocType,
|
|
InternalTable,
|
|
getRoleParams,
|
|
generateRoleID,
|
|
APP_DEV_PREFIX,
|
|
APP_PREFIX,
|
|
SEPARATOR,
|
|
StaticDatabases,
|
|
isDevAppID,
|
|
isProdAppID,
|
|
getDevelopmentAppID,
|
|
generateAppID,
|
|
getQueryIndex,
|
|
ViewName,
|
|
getDocParams,
|
|
getRowParams,
|
|
generateRowID,
|
|
getUserMetadataParams,
|
|
generateUserMetadataID,
|
|
getGlobalIDFromUserMetadataID,
|
|
} = require("@budibase/backend-core/db")
|
|
|
|
const { BUDIBASE_DATASOURCE_TYPE } = require("@budibase/backend-core/constants")
|
|
|
|
const UNICODE_MAX = "\ufff0"
|
|
|
|
const AppStatus = {
|
|
DEV: "development",
|
|
ALL: "all",
|
|
DEPLOYED: "published",
|
|
}
|
|
|
|
const DocumentType = CoreDocType
|
|
|
|
const SearchIndexes = {
|
|
ROWS: "rows",
|
|
}
|
|
|
|
exports.StaticDatabases = StaticDatabases
|
|
|
|
const BudibaseInternalDB = {
|
|
_id: "bb_internal",
|
|
type: BUDIBASE_DATASOURCE_TYPE,
|
|
name: "Budibase DB",
|
|
source: "BUDIBASE",
|
|
config: {},
|
|
}
|
|
|
|
exports.APP_PREFIX = APP_PREFIX
|
|
exports.APP_DEV_PREFIX = APP_DEV_PREFIX
|
|
exports.isDevAppID = isDevAppID
|
|
exports.isProdAppID = isProdAppID
|
|
exports.USER_METDATA_PREFIX = `${DocumentType.ROW}${SEPARATOR}${InternalTable.USER_METADATA}${SEPARATOR}`
|
|
exports.LINK_USER_METADATA_PREFIX = `${DocumentType.LINK}${SEPARATOR}${InternalTable.USER_METADATA}${SEPARATOR}`
|
|
exports.TABLE_ROW_PREFIX = `${DocumentType.ROW}${SEPARATOR}${DocumentType.TABLE}`
|
|
exports.ViewName = ViewName
|
|
exports.InternalTables = InternalTable
|
|
exports.DocumentType = DocumentType
|
|
exports.SEPARATOR = SEPARATOR
|
|
exports.UNICODE_MAX = UNICODE_MAX
|
|
exports.SearchIndexes = SearchIndexes
|
|
exports.AppStatus = AppStatus
|
|
exports.BudibaseInternalDB = BudibaseInternalDB
|
|
exports.generateAppID = generateAppID
|
|
exports.generateDevAppID = getDevelopmentAppID
|
|
exports.generateRoleID = generateRoleID
|
|
exports.getRoleParams = getRoleParams
|
|
exports.getQueryIndex = getQueryIndex
|
|
exports.getDocParams = getDocParams
|
|
exports.getRowParams = getRowParams
|
|
exports.generateRowID = generateRowID
|
|
exports.getUserMetadataParams = getUserMetadataParams
|
|
exports.generateUserMetadataID = generateUserMetadataID
|
|
exports.getGlobalIDFromUserMetadataID = getGlobalIDFromUserMetadataID
|
|
|
|
/**
|
|
* Gets parameters for retrieving tables, this is a utility function for the getDocParams function.
|
|
*/
|
|
exports.getTableParams = (tableId = null, otherProps = {}) => {
|
|
return getDocParams(DocumentType.TABLE, tableId, otherProps)
|
|
}
|
|
|
|
/**
|
|
* Generates a new table ID.
|
|
* @returns {string} The new table ID which the table doc can be stored under.
|
|
*/
|
|
exports.generateTableID = () => {
|
|
return `${DocumentType.TABLE}${SEPARATOR}${newid()}`
|
|
}
|
|
|
|
/**
|
|
* 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
|
|
.split(DocumentType.TABLE + SEPARATOR)[1]
|
|
.split(SEPARATOR)
|
|
return `${DocumentType.TABLE}${SEPARATOR}${components[0]}`
|
|
}
|
|
|
|
/**
|
|
* Gets parameters for retrieving automations, this is a utility function for the getDocParams function.
|
|
*/
|
|
exports.getAutomationParams = (automationId = null, otherProps = {}) => {
|
|
return getDocParams(DocumentType.AUTOMATION, automationId, otherProps)
|
|
}
|
|
|
|
/**
|
|
* Generates a new automation ID.
|
|
* @returns {string} The new automation ID which the automation doc can be stored under.
|
|
*/
|
|
exports.generateAutomationID = () => {
|
|
return `${DocumentType.AUTOMATION}${SEPARATOR}${newid()}`
|
|
}
|
|
|
|
/**
|
|
* 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.
|
|
* @param {string} tableId1 The ID of the linker table.
|
|
* @param {string} tableId2 The ID of the linked table.
|
|
* @param {string} rowId1 The ID of the linker row.
|
|
* @param {string} rowId2 The ID of the linked row.
|
|
* @param {string} fieldName1 The name of the field in the linker row.
|
|
* @param {string} fieldName2 the name of the field in the linked row.
|
|
* @returns {string} The new link doc ID which the automation doc can be stored under.
|
|
*/
|
|
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}`
|
|
return `${DocumentType.LINK}${tables}${rows}${fields}`
|
|
}
|
|
|
|
/**
|
|
* Gets parameters for retrieving link docs, this is a utility function for the getDocParams function.
|
|
*/
|
|
exports.getLinkParams = (otherProps = {}) => {
|
|
return getDocParams(DocumentType.LINK, null, otherProps)
|
|
}
|
|
|
|
/**
|
|
* Generates a new layout ID.
|
|
* @returns {string} The new layout ID which the layout doc can be stored under.
|
|
*/
|
|
exports.generateLayoutID = id => {
|
|
return `${DocumentType.LAYOUT}${SEPARATOR}${id || newid()}`
|
|
}
|
|
|
|
/**
|
|
* Gets parameters for retrieving layout, this is a utility function for the getDocParams function.
|
|
*/
|
|
exports.getLayoutParams = (layoutId = null, otherProps = {}) => {
|
|
return getDocParams(DocumentType.LAYOUT, layoutId, otherProps)
|
|
}
|
|
|
|
/**
|
|
* Generates a new screen ID.
|
|
* @returns {string} The new screen ID which the screen doc can be stored under.
|
|
*/
|
|
exports.generateScreenID = () => {
|
|
return `${DocumentType.SCREEN}${SEPARATOR}${newid()}`
|
|
}
|
|
|
|
/**
|
|
* Gets parameters for retrieving screens, this is a utility function for the getDocParams function.
|
|
*/
|
|
exports.getScreenParams = (screenId = null, otherProps = {}) => {
|
|
return getDocParams(DocumentType.SCREEN, screenId, otherProps)
|
|
}
|
|
|
|
/**
|
|
* Generates a new webhook ID.
|
|
* @returns {string} The new webhook ID which the webhook doc can be stored under.
|
|
*/
|
|
exports.generateWebhookID = () => {
|
|
return `${DocumentType.WEBHOOK}${SEPARATOR}${newid()}`
|
|
}
|
|
|
|
/**
|
|
* Gets parameters for retrieving a webhook, this is a utility function for the getDocParams function.
|
|
*/
|
|
exports.getWebhookParams = (webhookId = null, otherProps = {}) => {
|
|
return getDocParams(DocumentType.WEBHOOK, webhookId, otherProps)
|
|
}
|
|
|
|
/**
|
|
* Generates a new datasource ID.
|
|
* @returns {string} The new datasource ID which the webhook doc can be stored under.
|
|
*/
|
|
exports.generateDatasourceID = ({ plus = false } = {}) => {
|
|
return `${
|
|
plus ? DocumentType.DATASOURCE_PLUS : DocumentType.DATASOURCE
|
|
}${SEPARATOR}${newid()}`
|
|
}
|
|
|
|
/**
|
|
* Gets parameters for retrieving a datasource, this is a utility function for the getDocParams function.
|
|
*/
|
|
exports.getDatasourceParams = (datasourceId = null, otherProps = {}) => {
|
|
return getDocParams(DocumentType.DATASOURCE, datasourceId, otherProps)
|
|
}
|
|
|
|
/**
|
|
* Generates a new query ID.
|
|
* @returns {string} The new query ID which the query doc can be stored under.
|
|
*/
|
|
exports.generateQueryID = datasourceId => {
|
|
return `${
|
|
DocumentType.QUERY
|
|
}${SEPARATOR}${datasourceId}${SEPARATOR}${newid()}`
|
|
}
|
|
|
|
/**
|
|
* 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)
|
|
}
|
|
|
|
/**
|
|
* Gets parameters for retrieving a query, this is a utility function for the getDocParams function.
|
|
*/
|
|
exports.getQueryParams = (datasourceId = null, otherProps = {}) => {
|
|
if (datasourceId == null) {
|
|
return getDocParams(DocumentType.QUERY, null, otherProps)
|
|
}
|
|
|
|
return getDocParams(
|
|
DocumentType.QUERY,
|
|
`${datasourceId}${SEPARATOR}`,
|
|
otherProps
|
|
)
|
|
}
|
|
|
|
/**
|
|
* Generates a new flag document ID.
|
|
* @returns {string} The ID of the flag document that was generated.
|
|
*/
|
|
exports.generateUserFlagID = userId => {
|
|
return `${DocumentType.USER_FLAG}${SEPARATOR}${userId}`
|
|
}
|
|
|
|
exports.generateMetadataID = (type, entityId) => {
|
|
return `${DocumentType.METADATA}${SEPARATOR}${type}${SEPARATOR}${entityId}`
|
|
}
|
|
|
|
exports.getMetadataParams = (type, entityId = null, otherProps = {}) => {
|
|
let docId = `${type}${SEPARATOR}`
|
|
if (entityId != null) {
|
|
docId += entityId
|
|
}
|
|
return getDocParams(DocumentType.METADATA, docId, otherProps)
|
|
}
|
|
|
|
exports.generateMemoryViewID = viewName => {
|
|
return `${DocumentType.MEM_VIEW}${SEPARATOR}${viewName}`
|
|
}
|
|
|
|
exports.getMemoryViewParams = (otherProps = {}) => {
|
|
return getDocParams(DocumentType.MEM_VIEW, null, otherProps)
|
|
}
|
|
|
|
exports.generatePluginID = name => {
|
|
return `${DocumentType.PLUGIN}${SEPARATOR}${name}`
|
|
}
|
|
|
|
/**
|
|
* This can be used with the db.allDocs to get a list of IDs
|
|
*/
|
|
exports.getMultiIDParams = ids => {
|
|
return {
|
|
keys: ids,
|
|
include_docs: true,
|
|
}
|
|
}
|