@budibase/server 2.0.18 → 2.0.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/builder/assets/{index.bef2492f.js → index.654c9538.js} +1 -1
  2. package/builder/index.html +1 -1
  3. package/coverage/clover.xml +171 -154
  4. package/coverage/coverage-final.json +2 -1
  5. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  6. package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
  7. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  8. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  9. package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/index.html +1 -1
  12. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  15. package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
  16. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/query/index.html +1 -1
  18. package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
  22. package/coverage/lcov-report/api/controllers/row/index.html +15 -15
  23. package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
  24. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +122 -116
  25. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +1 -1
  26. package/coverage/lcov-report/api/controllers/row/utils.js.html +1 -1
  27. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  28. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +1 -1
  29. package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
  30. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  31. package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
  32. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  33. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  34. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  35. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  36. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  37. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  38. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  39. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  40. package/coverage/lcov-report/api/index.html +1 -1
  41. package/coverage/lcov-report/api/index.js.html +1 -1
  42. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  43. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  44. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  45. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  46. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  47. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  48. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  49. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  50. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  51. package/coverage/lcov-report/api/routes/index.html +1 -1
  52. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/utils/index.html +1 -1
  66. package/coverage/lcov-report/api/routes/utils/validators.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  69. package/coverage/lcov-report/automations/actions.js.html +1 -1
  70. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  71. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  72. package/coverage/lcov-report/automations/index.html +1 -1
  73. package/coverage/lcov-report/automations/index.js.html +1 -1
  74. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  75. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  76. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  77. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  78. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  79. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  80. package/coverage/lcov-report/automations/steps/index.html +1 -1
  81. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  82. package/coverage/lcov-report/automations/steps/loop.js.html +1 -1
  83. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  84. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  85. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  86. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  87. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  89. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  91. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  92. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  93. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  94. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  95. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  96. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  97. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  98. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  99. package/coverage/lcov-report/automations/triggers.js.html +1 -1
  100. package/coverage/lcov-report/constants/index.html +1 -1
  101. package/coverage/lcov-report/constants/index.js.html +1 -1
  102. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  103. package/coverage/lcov-report/constants/screens.js.html +1 -1
  104. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  105. package/coverage/lcov-report/db/index.html +1 -1
  106. package/coverage/lcov-report/db/index.js.html +1 -1
  107. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
  108. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  109. package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
  110. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
  111. package/coverage/lcov-report/db/newid.js.html +1 -1
  112. package/coverage/lcov-report/db/utils.js.html +1 -1
  113. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  114. package/coverage/lcov-report/events/index.html +1 -1
  115. package/coverage/lcov-report/events/index.js.html +1 -1
  116. package/coverage/lcov-report/events/utils.js.html +1 -1
  117. package/coverage/lcov-report/index.html +26 -26
  118. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  119. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  120. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  121. package/coverage/lcov-report/middleware/builder.js.html +1 -1
  122. package/coverage/lcov-report/middleware/currentapp.js.html +1 -1
  123. package/coverage/lcov-report/middleware/index.html +1 -1
  124. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  125. package/coverage/lcov-report/middleware/publicApi.js.html +1 -1
  126. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  127. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  128. package/coverage/lcov-report/middleware/utils.js.html +1 -1
  129. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  130. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  131. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  132. package/coverage/lcov-report/utilities/global.js.html +1 -1
  133. package/coverage/lcov-report/utilities/index.html +24 -9
  134. package/coverage/lcov-report/utilities/index.js.html +1 -1
  135. package/coverage/lcov-report/utilities/plugins.js.html +148 -0
  136. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
  137. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  138. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  139. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  140. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  141. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
  142. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  143. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  144. package/coverage/lcov-report/utilities/security.js.html +1 -1
  145. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  146. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  147. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +1 -1
  148. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  149. package/coverage/lcov-report/utilities/users.js.html +1 -1
  150. package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
  151. package/coverage/lcov.info +311 -278
  152. package/dist/api/controllers/application.js +4 -1
  153. package/dist/api/controllers/public/utils.js +1 -1
  154. package/dist/api/controllers/row/internalSearch.js +4 -2
  155. package/dist/api/controllers/static/index.js +3 -1
  156. package/dist/api/controllers/static/templates/BudibaseApp.svelte +1 -3
  157. package/dist/api/controllers/table/internal.js +9 -1
  158. package/dist/api/controllers/table/utils.js +1 -1
  159. package/dist/package.json +6 -6
  160. package/dist/tsconfig.build.tsbuildinfo +1 -1
  161. package/dist/utilities/plugins.js +20 -0
  162. package/package.json +7 -7
  163. package/src/api/controllers/application.ts +5 -1
  164. package/src/api/controllers/public/utils.ts +1 -1
  165. package/src/api/controllers/row/internalSearch.js +4 -2
  166. package/src/api/controllers/static/index.ts +4 -1
  167. package/src/api/controllers/static/templates/BudibaseApp.svelte +1 -3
  168. package/src/api/controllers/table/internal.ts +10 -2
  169. package/src/api/controllers/table/utils.ts +1 -1
  170. package/src/api/routes/tests/internalSearch.spec.js +20 -0
  171. package/src/utilities/plugins.js +21 -0
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ const env = require("../environment");
3
+ const { plugins: ProPlugins } = require("@budibase/pro");
4
+ const { objectStore } = require("@budibase/backend-core");
5
+ exports.enrichPluginURLs = plugins => {
6
+ if (!plugins || !plugins.length) {
7
+ return [];
8
+ }
9
+ return plugins.map(plugin => {
10
+ const cloud = !env.SELF_HOSTED;
11
+ const bucket = objectStore.ObjectStoreBuckets.PLUGINS;
12
+ const jsFileName = "plugin.min.js";
13
+ // In self host we need to prefix the path, as the bucket name is not part
14
+ // of the bucket path. In cloud, it's already part of the bucket path.
15
+ let jsUrl = cloud ? "https://cdn.budi.live/" : `/${bucket}/`;
16
+ jsUrl += ProPlugins.getBucketPath(plugin.name);
17
+ jsUrl += jsFileName;
18
+ return Object.assign(Object.assign({}, plugin), { jsUrl });
19
+ });
20
+ };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@budibase/server",
3
3
  "email": "hi@budibase.com",
4
- "version": "2.0.18",
4
+ "version": "2.0.20",
5
5
  "description": "Budibase Web Server",
6
6
  "main": "src/index.ts",
7
7
  "repository": {
@@ -77,11 +77,11 @@
77
77
  "license": "GPL-3.0",
78
78
  "dependencies": {
79
79
  "@apidevtools/swagger-parser": "10.0.3",
80
- "@budibase/backend-core": "^2.0.18",
81
- "@budibase/client": "^2.0.18",
82
- "@budibase/pro": "2.0.17",
83
- "@budibase/string-templates": "^2.0.18",
84
- "@budibase/types": "^2.0.18",
80
+ "@budibase/backend-core": "^2.0.20",
81
+ "@budibase/client": "^2.0.20",
82
+ "@budibase/pro": "2.0.19",
83
+ "@budibase/string-templates": "^2.0.20",
84
+ "@budibase/types": "^2.0.20",
85
85
  "@bull-board/api": "3.7.0",
86
86
  "@bull-board/koa": "3.9.4",
87
87
  "@elastic/elasticsearch": "7.10.0",
@@ -199,5 +199,5 @@
199
199
  "optionalDependencies": {
200
200
  "oracledb": "5.3.0"
201
201
  },
202
- "gitHead": "a51545dd3e4499ef3e1c10e7a551861a58af5ca0"
202
+ "gitHead": "224e33517c20a3f2fe95282b9c28869c4bf816fc"
203
203
  }
@@ -50,6 +50,7 @@ import { errors, events, migrations } from "@budibase/backend-core"
50
50
  import { App, Layout, Screen, MigrationType } from "@budibase/types"
51
51
  import { BASE_LAYOUT_PROP_IDS } from "../../constants/layouts"
52
52
  import { groups } from "@budibase/pro"
53
+ import { enrichPluginURLs } from "../../utilities/plugins"
53
54
 
54
55
  const URL_REGEX_SLASH = /\/|\\/g
55
56
 
@@ -208,10 +209,13 @@ export const fetchAppDefinition = async (ctx: any) => {
208
209
 
209
210
  export const fetchAppPackage = async (ctx: any) => {
210
211
  const db = context.getAppDB()
211
- const application = await db.get(DocumentType.APP_METADATA)
212
+ let application = await db.get(DocumentType.APP_METADATA)
212
213
  const layouts = await getLayouts()
213
214
  let screens = await getScreens()
214
215
 
216
+ // Enrich plugin URLs
217
+ application.usedPlugins = enrichPluginURLs(application.usedPlugins)
218
+
215
219
  // Only filter screens if the user is not a builder
216
220
  if (!(ctx.user.builder && ctx.user.builder.global)) {
217
221
  const userRoleId = getUserRoleId(ctx)
@@ -22,7 +22,7 @@ export async function addRev(
22
22
  }
23
23
 
24
24
  /**
25
- * Performs a case insensitive search on the provided documents, using the
25
+ * Performs a case in-sensitive search on the provided documents, using the
26
26
  * provided key and value. This will be a string based search, using the
27
27
  * startsWith function.
28
28
  */
@@ -145,7 +145,7 @@ class QueryBuilder {
145
145
  * @param options The preprocess options
146
146
  * @returns {string|*}
147
147
  */
148
- preprocess(value, { escape, lowercase, wrap } = {}) {
148
+ preprocess(value, { escape, lowercase, wrap, type } = {}) {
149
149
  const hasVersion = !!this.version
150
150
  // Determine if type needs wrapped
151
151
  const originalType = typeof value
@@ -159,7 +159,7 @@ class QueryBuilder {
159
159
  }
160
160
 
161
161
  // Wrap in quotes
162
- if (originalType === "string" && !isNaN(value) && !escape) {
162
+ if (originalType === "string" && !isNaN(value) && !type) {
163
163
  value = `"${value}"`
164
164
  } else if (hasVersion && wrap) {
165
165
  value = originalType === "number" ? value : `"${value}"`
@@ -256,6 +256,7 @@ class QueryBuilder {
256
256
  value = builder.preprocess(value, {
257
257
  escape: true,
258
258
  lowercase: true,
259
+ type: "string",
259
260
  })
260
261
  return `${key}:${value}*`
261
262
  })
@@ -284,6 +285,7 @@ class QueryBuilder {
284
285
  value = builder.preprocess(value, {
285
286
  escape: true,
286
287
  lowercase: true,
288
+ type: "fuzzy",
287
289
  })
288
290
  return `${key}:${value}~`
289
291
  })
@@ -1,3 +1,5 @@
1
+ import { enrichPluginURLs } from "../../../utilities/plugins"
2
+
1
3
  require("svelte/register")
2
4
 
3
5
  const send = require("koa-send")
@@ -107,12 +109,13 @@ export const serveApp = async function (ctx: any) {
107
109
 
108
110
  if (!env.isJest()) {
109
111
  const App = require("./templates/BudibaseApp.svelte").default
112
+ const plugins = enrichPluginURLs(appInfo.usedPlugins)
110
113
  const { head, html, css } = App.render({
111
114
  title: appInfo.name,
112
115
  production: env.isProd(),
113
116
  appId,
114
117
  clientLibPath: clientLibraryPath(appId, appInfo.version, ctx),
115
- usedPlugins: appInfo.usedPlugins,
118
+ usedPlugins: plugins,
116
119
  })
117
120
 
118
121
  const appHbs = loadHandlebarsFile(`${__dirname}/templates/app.hbs`)
@@ -88,9 +88,7 @@
88
88
  <!-- But before loadBudibase is called -->
89
89
  {#if usedPlugins?.length}
90
90
  {#each usedPlugins as plugin}
91
- <script
92
- type="application/javascript"
93
- src={`/plugins/${plugin.jsUrl}`}></script>
91
+ <script type="application/javascript" src={plugin.jsUrl}></script>
94
92
  {/each}
95
93
  {/if}
96
94
  <script type="application/javascript">
@@ -14,8 +14,10 @@ import {
14
14
  fixAutoColumnSubType,
15
15
  } from "../../../utilities/rowProcessor"
16
16
  import { runStaticFormulaChecks } from "./bulkFormula"
17
- import { Table } from "../../../definitions/common"
17
+ import { Table } from "@budibase/types"
18
18
  import { quotas } from "@budibase/pro"
19
+ import { isEqual } from "lodash"
20
+ import { cloneDeep } from "lodash/fp"
19
21
 
20
22
  function checkAutoColumns(table: Table, oldTable: Table) {
21
23
  if (!table.schema) {
@@ -123,10 +125,16 @@ export async function save(ctx: any) {
123
125
  if (updatedRows && updatedRows.length !== 0) {
124
126
  await db.bulkDocs(updatedRows)
125
127
  }
126
- const result = await db.put(tableToSave)
128
+ let result = await db.put(tableToSave)
127
129
  tableToSave._rev = result.rev
130
+ const savedTable = cloneDeep(tableToSave)
128
131
 
129
132
  tableToSave = await tableSaveFunctions.after(tableToSave)
133
+ // the table may be updated as part of the table save after functionality - need to write it
134
+ if (!isEqual(savedTable, tableToSave)) {
135
+ result = await db.put(tableToSave)
136
+ tableToSave._rev = result.rev
137
+ }
130
138
  // has to run after, make sure it has _id
131
139
  await runStaticFormulaChecks(tableToSave, { oldTable, deletion: null })
132
140
  return tableToSave
@@ -245,7 +245,7 @@ class TableSaveFunctions {
245
245
  // after saving
246
246
  async after(table: any) {
247
247
  table = await handleSearchIndexes(table)
248
- await handleDataImport(this.user, table, this.dataImport)
248
+ table = await handleDataImport(this.user, table, this.dataImport)
249
249
  return table
250
250
  }
251
251
 
@@ -173,4 +173,24 @@ describe("internal search", () => {
173
173
  }, PARAMS)
174
174
  checkLucene(response, `*:* AND NOT column:(a AND b AND c)`, PARAMS)
175
175
  })
176
+
177
+ it("test equal without version query", async () => {
178
+ PARAMS.version = null
179
+ const response = await search.paginatedSearch({
180
+ equal: {
181
+ "column": "1",
182
+ }
183
+ }, PARAMS)
184
+
185
+ const query = response.rows[0].query
186
+ const json = JSON.parse(query)
187
+ if (PARAMS.sort) {
188
+ expect(json.sort).toBe(`${PARAMS.sort}<${PARAMS.sortType}>`)
189
+ }
190
+ if (PARAMS.bookmark) {
191
+ expect(json.bookmark).toBe(PARAMS.bookmark)
192
+ }
193
+ expect(json.include_docs).toBe(true)
194
+ expect(json.q).toBe(`(*:* AND column:"1") AND tableId:${PARAMS.tableId}`)
195
+ })
176
196
  })
@@ -0,0 +1,21 @@
1
+ const env = require("../environment")
2
+ const { plugins: ProPlugins } = require("@budibase/pro")
3
+ const { objectStore } = require("@budibase/backend-core")
4
+
5
+ exports.enrichPluginURLs = plugins => {
6
+ if (!plugins || !plugins.length) {
7
+ return []
8
+ }
9
+ return plugins.map(plugin => {
10
+ const cloud = !env.SELF_HOSTED
11
+ const bucket = objectStore.ObjectStoreBuckets.PLUGINS
12
+ const jsFileName = "plugin.min.js"
13
+
14
+ // In self host we need to prefix the path, as the bucket name is not part
15
+ // of the bucket path. In cloud, it's already part of the bucket path.
16
+ let jsUrl = cloud ? "https://cdn.budi.live/" : `/${bucket}/`
17
+ jsUrl += ProPlugins.getBucketPath(plugin.name)
18
+ jsUrl += jsFileName
19
+ return { ...plugin, jsUrl }
20
+ })
21
+ }