@budibase/server 1.2.28-alpha.0 → 1.2.28

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 (193) hide show
  1. package/__mocks__/node-fetch.ts +1 -8
  2. package/builder/assets/{index.f1c7e247.css → index.08dd0c5e.css} +1 -1
  3. package/builder/assets/index.14246e6e.js +975 -0
  4. package/builder/index.html +2 -2
  5. package/coverage/clover.xml +1202 -1206
  6. package/coverage/coverage-final.json +116 -116
  7. package/coverage/lcov-report/api/controllers/apikeys.js.html +6 -6
  8. package/coverage/lcov-report/api/controllers/auth.js.html +7 -7
  9. package/coverage/lcov-report/api/controllers/automation.js.html +29 -29
  10. package/coverage/lcov-report/api/controllers/backup.js.html +5 -5
  11. package/coverage/lcov-report/api/controllers/cloud.js.html +11 -11
  12. package/coverage/lcov-report/api/controllers/component.js.html +5 -5
  13. package/coverage/lcov-report/api/controllers/datasource.js.html +17 -17
  14. package/coverage/lcov-report/api/controllers/dev.js.html +20 -20
  15. package/coverage/lcov-report/api/controllers/index.html +1 -1
  16. package/coverage/lcov-report/api/controllers/integration.js.html +8 -8
  17. package/coverage/lcov-report/api/controllers/layout.js.html +7 -7
  18. package/coverage/lcov-report/api/controllers/metadata.js.html +9 -9
  19. package/coverage/lcov-report/api/controllers/migrations.js.html +4 -4
  20. package/coverage/lcov-report/api/controllers/permission.js.html +15 -15
  21. package/coverage/lcov-report/api/controllers/query/index.html +1 -1
  22. package/coverage/lcov-report/api/controllers/query/validation.js.html +10 -10
  23. package/coverage/lcov-report/api/controllers/role.js.html +10 -10
  24. package/coverage/lcov-report/api/controllers/routing.js.html +9 -9
  25. package/coverage/lcov-report/api/controllers/row/external.js.html +19 -19
  26. package/coverage/lcov-report/api/controllers/row/index.html +25 -25
  27. package/coverage/lcov-report/api/controllers/row/internal.js.html +30 -30
  28. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +184 -202
  29. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +10 -10
  30. package/coverage/lcov-report/api/controllers/row/utils.js.html +7 -16
  31. package/coverage/lcov-report/api/controllers/screen.js.html +8 -8
  32. package/coverage/lcov-report/api/controllers/script.js.html +4 -4
  33. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +9 -9
  34. package/coverage/lcov-report/api/controllers/table/external.js.html +14 -14
  35. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  36. package/coverage/lcov-report/api/controllers/table/index.js.html +15 -15
  37. package/coverage/lcov-report/api/controllers/templates.js.html +6 -6
  38. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  39. package/coverage/lcov-report/api/controllers/view/exporters.js.html +4 -4
  40. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  41. package/coverage/lcov-report/api/controllers/view/index.js.html +20 -20
  42. package/coverage/lcov-report/api/controllers/view/utils.js.html +13 -13
  43. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +8 -8
  44. package/coverage/lcov-report/api/controllers/webhook.js.html +15 -15
  45. package/coverage/lcov-report/api/index.html +1 -1
  46. package/coverage/lcov-report/api/index.js.html +30 -30
  47. package/coverage/lcov-report/api/routes/analytics.js.html +11 -8
  48. package/coverage/lcov-report/api/routes/apikeys.js.html +8 -8
  49. package/coverage/lcov-report/api/routes/auth.js.html +6 -6
  50. package/coverage/lcov-report/api/routes/automation.js.html +11 -11
  51. package/coverage/lcov-report/api/routes/backup.js.html +8 -8
  52. package/coverage/lcov-report/api/routes/cloud.js.html +8 -8
  53. package/coverage/lcov-report/api/routes/component.js.html +8 -8
  54. package/coverage/lcov-report/api/routes/datasource.js.html +9 -9
  55. package/coverage/lcov-report/api/routes/deploy.js.html +8 -8
  56. package/coverage/lcov-report/api/routes/dev.js.html +13 -13
  57. package/coverage/lcov-report/api/routes/index.html +7 -7
  58. package/coverage/lcov-report/api/routes/integration.js.html +8 -8
  59. package/coverage/lcov-report/api/routes/layout.js.html +8 -8
  60. package/coverage/lcov-report/api/routes/metadata.js.html +9 -9
  61. package/coverage/lcov-report/api/routes/migrations.js.html +7 -7
  62. package/coverage/lcov-report/api/routes/permission.js.html +9 -9
  63. package/coverage/lcov-report/api/routes/query.js.html +10 -10
  64. package/coverage/lcov-report/api/routes/role.js.html +9 -9
  65. package/coverage/lcov-report/api/routes/routing.js.html +8 -8
  66. package/coverage/lcov-report/api/routes/screen.js.html +9 -9
  67. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/table.js.html +10 -10
  69. package/coverage/lcov-report/api/routes/templates.js.html +8 -8
  70. package/coverage/lcov-report/api/routes/user.js.html +8 -8
  71. package/coverage/lcov-report/api/routes/utils/index.html +1 -1
  72. package/coverage/lcov-report/api/routes/utils/validators.js.html +37 -37
  73. package/coverage/lcov-report/api/routes/view.js.html +10 -10
  74. package/coverage/lcov-report/api/routes/webhook.js.html +9 -9
  75. package/coverage/lcov-report/automations/actions.js.html +25 -25
  76. package/coverage/lcov-report/automations/automationUtils.js.html +8 -8
  77. package/coverage/lcov-report/automations/bullboard.js.html +17 -17
  78. package/coverage/lcov-report/automations/index.html +1 -1
  79. package/coverage/lcov-report/automations/index.js.html +12 -12
  80. package/coverage/lcov-report/automations/steps/bash.js.html +7 -7
  81. package/coverage/lcov-report/automations/steps/delay.js.html +4 -4
  82. package/coverage/lcov-report/automations/steps/discord.js.html +7 -7
  83. package/coverage/lcov-report/automations/steps/executeQuery.js.html +6 -6
  84. package/coverage/lcov-report/automations/steps/executeScript.js.html +6 -6
  85. package/coverage/lcov-report/automations/steps/filter.js.html +7 -7
  86. package/coverage/lcov-report/automations/steps/index.html +1 -1
  87. package/coverage/lcov-report/automations/steps/integromat.js.html +5 -5
  88. package/coverage/lcov-report/automations/steps/loop.js.html +2 -2
  89. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +8 -8
  90. package/coverage/lcov-report/automations/steps/queryRows.js.html +10 -10
  91. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +5 -5
  92. package/coverage/lcov-report/automations/steps/serverLog.js.html +3 -3
  93. package/coverage/lcov-report/automations/steps/slack.js.html +5 -5
  94. package/coverage/lcov-report/automations/steps/updateRow.js.html +6 -6
  95. package/coverage/lcov-report/automations/steps/utils.js.html +3 -3
  96. package/coverage/lcov-report/automations/steps/zapier.js.html +5 -5
  97. package/coverage/lcov-report/automations/triggerInfo/app.js.html +2 -2
  98. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +2 -2
  99. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  100. package/coverage/lcov-report/automations/triggerInfo/index.js.html +8 -8
  101. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +2 -2
  102. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +2 -2
  103. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +2 -2
  104. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +2 -2
  105. package/coverage/lcov-report/automations/triggers.js.html +18 -18
  106. package/coverage/lcov-report/constants/index.html +1 -1
  107. package/coverage/lcov-report/constants/index.js.html +1 -1
  108. package/coverage/lcov-report/constants/layouts.js.html +5 -5
  109. package/coverage/lcov-report/constants/screens.js.html +4 -4
  110. package/coverage/lcov-report/db/inMemoryView.js.html +5 -5
  111. package/coverage/lcov-report/db/index.html +1 -1
  112. package/coverage/lcov-report/db/index.js.html +9 -9
  113. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +7 -7
  114. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  115. package/coverage/lcov-report/db/linkedRows/index.js.html +18 -18
  116. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +13 -13
  117. package/coverage/lcov-report/db/newid.js.html +2 -2
  118. package/coverage/lcov-report/db/utils.js.html +11 -11
  119. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  120. package/coverage/lcov-report/events/index.html +1 -1
  121. package/coverage/lcov-report/events/index.js.html +6 -6
  122. package/coverage/lcov-report/events/utils.js.html +3 -3
  123. package/coverage/lcov-report/index.html +24 -24
  124. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  125. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  126. package/coverage/lcov-report/middleware/appInfo.js.html +5 -5
  127. package/coverage/lcov-report/middleware/builder.js.html +9 -9
  128. package/coverage/lcov-report/middleware/currentapp.js.html +49 -49
  129. package/coverage/lcov-report/middleware/index.html +1 -1
  130. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  131. package/coverage/lcov-report/middleware/publicApi.js.html +5 -5
  132. package/coverage/lcov-report/middleware/resourceId.js.html +22 -22
  133. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  134. package/coverage/lcov-report/middleware/utils.js.html +3 -3
  135. package/coverage/lcov-report/utilities/budibaseDir.js.html +3 -3
  136. package/coverage/lcov-report/utilities/centralPath.js.html +4 -4
  137. package/coverage/lcov-report/utilities/csvParser.js.html +6 -6
  138. package/coverage/lcov-report/utilities/global.js.html +16 -16
  139. package/coverage/lcov-report/utilities/index.html +1 -1
  140. package/coverage/lcov-report/utilities/index.js.html +3 -3
  141. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +9 -9
  142. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  143. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  144. package/coverage/lcov-report/utilities/routing/index.js.html +6 -6
  145. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  146. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +20 -20
  147. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +6 -6
  148. package/coverage/lcov-report/utilities/scriptRunner.js.html +5 -5
  149. package/coverage/lcov-report/utilities/security.js.html +8 -8
  150. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  151. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  152. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +7 -7
  153. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  154. package/coverage/lcov-report/utilities/users.js.html +1 -1
  155. package/coverage/lcov-report/utilities/workerRequests.js.html +18 -18
  156. package/coverage/lcov.info +1520 -1524
  157. package/dist/api/controllers/analytics.js +27 -1
  158. package/dist/api/controllers/row/internalSearch.js +0 -5
  159. package/dist/api/controllers/row/utils.js +1 -3
  160. package/dist/api/controllers/static/index.js +1 -11
  161. package/dist/api/controllers/table/external.js +1 -1
  162. package/dist/api/routes/analytics.js +1 -0
  163. package/dist/automations/logging/index.js +0 -3
  164. package/dist/integrations/base/sql.js +4 -5
  165. package/dist/integrations/base/utils.js +27 -13
  166. package/dist/integrations/microsoftSqlServer.js +2 -5
  167. package/dist/integrations/mysql.js +2 -2
  168. package/dist/integrations/postgres.js +2 -5
  169. package/dist/package.json +1 -1
  170. package/dist/tests/utilities/TestConfiguration.js +8 -11
  171. package/dist/tsconfig.build.tsbuildinfo +1 -1
  172. package/package.json +7 -7
  173. package/src/api/controllers/analytics.ts +27 -0
  174. package/src/api/controllers/row/internalSearch.js +0 -6
  175. package/src/api/controllers/row/utils.js +1 -4
  176. package/src/api/controllers/static/index.ts +1 -11
  177. package/src/api/controllers/table/external.js +1 -1
  178. package/src/api/routes/analytics.js +1 -0
  179. package/src/api/routes/tests/analytics.spec.js +59 -0
  180. package/src/api/routes/tests/static.spec.js +0 -10
  181. package/src/automations/logging/index.ts +0 -3
  182. package/src/integrations/base/sql.ts +4 -5
  183. package/src/integrations/base/utils.ts +19 -9
  184. package/src/integrations/microsoftSqlServer.ts +2 -3
  185. package/src/integrations/mysql.ts +1 -1
  186. package/src/integrations/postgres.ts +1 -2
  187. package/src/integrations/queries/sql.ts +1 -0
  188. package/src/integrations/tests/sql.spec.js +1 -1
  189. package/src/tests/utilities/TestConfiguration.js +10 -17
  190. package/builder/assets/index.66b1c771.js +0 -977
  191. package/dist/integrations/base/query.js +0 -27
  192. package/src/api/routes/tests/internalSearch.spec.js +0 -157
  193. package/src/integrations/base/query.ts +0 -17
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@budibase/server",
3
3
  "email": "hi@budibase.com",
4
- "version": "1.2.28-alpha.0",
4
+ "version": "1.2.28",
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": "1.2.28-alpha.0",
81
- "@budibase/client": "1.2.28-alpha.0",
80
+ "@budibase/backend-core": "^1.2.28",
81
+ "@budibase/client": "^1.2.28",
82
82
  "@budibase/pro": "1.2.27",
83
- "@budibase/string-templates": "1.2.28-alpha.0",
84
- "@budibase/types": "1.2.28-alpha.0",
83
+ "@budibase/string-templates": "^1.2.28",
84
+ "@budibase/types": "^1.2.28",
85
85
  "@bull-board/api": "3.7.0",
86
86
  "@bull-board/koa": "3.9.4",
87
87
  "@elastic/elasticsearch": "7.10.0",
@@ -106,7 +106,7 @@
106
106
  "google-auth-library": "7.12.0",
107
107
  "google-spreadsheet": "3.2.0",
108
108
  "jimp": "0.16.1",
109
- "joi": "17.6.0",
109
+ "joi": "17.2.1",
110
110
  "js-yaml": "4.1.0",
111
111
  "jsonschema": "1.4.0",
112
112
  "knex": "0.95.15",
@@ -195,5 +195,5 @@
195
195
  "optionalDependencies": {
196
196
  "oracledb": "5.3.0"
197
197
  },
198
- "gitHead": "f73078bcbfba186fefdfe09a8558f89d9e961ce8"
198
+ "gitHead": "319336cf66fb435c3d74801ee895336421aa4c87"
199
199
  }
@@ -1,4 +1,7 @@
1
1
  import { events } from "@budibase/backend-core"
2
+ import { AnalyticsPingRequest, PingSource } from "@budibase/types"
3
+ import { DocumentTypes, isDevAppID } from "../../db/utils"
4
+ import { context } from "@budibase/backend-core"
2
5
 
3
6
  export const isEnabled = async (ctx: any) => {
4
7
  const enabled = await events.analytics.enabled()
@@ -6,3 +9,27 @@ export const isEnabled = async (ctx: any) => {
6
9
  enabled,
7
10
  }
8
11
  }
12
+
13
+ export const ping = async (ctx: any) => {
14
+ const body = ctx.request.body as AnalyticsPingRequest
15
+ switch (body.source) {
16
+ case PingSource.APP: {
17
+ const db = context.getAppDB({ skip_setup: true })
18
+ const appInfo = await db.get(DocumentTypes.APP_METADATA)
19
+ let appId = context.getAppId()
20
+
21
+ if (isDevAppID(appId)) {
22
+ await events.serve.servedAppPreview(appInfo, body.timezone)
23
+ } else {
24
+ await events.serve.servedApp(appInfo, body.timezone)
25
+ }
26
+ break
27
+ }
28
+ case PingSource.BUILDER: {
29
+ await events.serve.servedBuilder(body.timezone)
30
+ break
31
+ }
32
+ }
33
+
34
+ ctx.status = 200
35
+ }
@@ -1,5 +1,4 @@
1
1
  const { SearchIndexes } = require("../../../db/utils")
2
- const { removeKeyNumbering } = require("./utils")
3
2
  const fetch = require("node-fetch")
4
3
  const { getCouchInfo } = require("@budibase/backend-core/db")
5
4
  const { getAppId } = require("@budibase/backend-core/context")
@@ -198,8 +197,6 @@ class QueryBuilder {
198
197
 
199
198
  function build(structure, queryFn) {
200
199
  for (let [key, value] of Object.entries(structure)) {
201
- // check for new format - remove numbering if needed
202
- key = removeKeyNumbering(key)
203
200
  key = builder.preprocess(key.replace(/ /g, "_"), {
204
201
  escape: true,
205
202
  })
@@ -313,9 +310,6 @@ class QueryBuilder {
313
310
  }
314
311
  }
315
312
 
316
- // exported for unit testing
317
- exports.QueryBuilder = QueryBuilder
318
-
319
313
  /**
320
314
  * Executes a lucene search query.
321
315
  * @param url The query URL
@@ -3,9 +3,8 @@ const { cloneDeep } = require("lodash/fp")
3
3
  const { InternalTables } = require("../../../db/utils")
4
4
  const userController = require("../user")
5
5
  const { FieldTypes } = require("../../../constants")
6
+ const { makeExternalQuery } = require("../../../integrations/base/utils")
6
7
  const { getAppDB } = require("@budibase/backend-core/context")
7
- const { makeExternalQuery } = require("../../../integrations/base/query")
8
- const { removeKeyNumbering } = require("../../../integrations/base/utils")
9
8
 
10
9
  validateJs.extend(validateJs.validators.datetime, {
11
10
  parse: function (value) {
@@ -17,8 +16,6 @@ validateJs.extend(validateJs.validators.datetime, {
17
16
  },
18
17
  })
19
18
 
20
- exports.removeKeyNumbering = removeKeyNumbering
21
-
22
19
  exports.getDatasourceAndQuery = async json => {
23
20
  const datasourceId = json.endpoint.datasourceId
24
21
  const db = getAppDB()
@@ -14,11 +14,10 @@ const env = require("../../../environment")
14
14
  const { clientLibraryPath } = require("../../../utilities")
15
15
  const { upload } = require("../../../utilities/fileSystem")
16
16
  const { attachmentsRelativeURL } = require("../../../utilities")
17
- const { DocumentTypes, isDevAppID } = require("../../../db/utils")
17
+ const { DocumentTypes } = require("../../../db/utils")
18
18
  const { getAppDB, getAppId } = require("@budibase/backend-core/context")
19
19
  const { setCookie, clearCookie } = require("@budibase/backend-core/utils")
20
20
  const AWS = require("aws-sdk")
21
- import { events } from "@budibase/backend-core"
22
21
 
23
22
  const fs = require("fs")
24
23
  const {
@@ -75,9 +74,6 @@ export const toggleBetaUiFeature = async function (ctx: any) {
75
74
  export const serveBuilder = async function (ctx: any) {
76
75
  const builderPath = resolve(TOP_LEVEL_PATH, "builder")
77
76
  await send(ctx, ctx.file, { root: builderPath })
78
- if (ctx.file === "index.html") {
79
- await events.serve.servedBuilder()
80
- }
81
77
  }
82
78
 
83
79
  export const uploadFile = async function (ctx: any) {
@@ -126,12 +122,6 @@ export const serveApp = async function (ctx: any) {
126
122
  // just return the app info for jest to assert on
127
123
  ctx.body = appInfo
128
124
  }
129
-
130
- if (isDevAppID(appInfo.appId)) {
131
- await events.serve.servedAppPreview(appInfo)
132
- } else {
133
- await events.serve.servedApp(appInfo)
134
- }
135
125
  }
136
126
 
137
127
  export const serveClientLibrary = async function (ctx: any) {
@@ -14,7 +14,7 @@ const {
14
14
  FieldTypes,
15
15
  RelationshipTypes,
16
16
  } = require("../../../constants")
17
- const { makeExternalQuery } = require("../../../integrations/base/query")
17
+ const { makeExternalQuery } = require("../../../integrations/base/utils")
18
18
  const { cloneDeep } = require("lodash/fp")
19
19
  const csvParser = require("../../../utilities/csvParser")
20
20
  const { handleRequest } = require("../row/external")
@@ -4,5 +4,6 @@ const controller = require("../controllers/analytics")
4
4
  const router = Router()
5
5
 
6
6
  router.get("/api/bbtel", controller.isEnabled)
7
+ router.post("/api/bbtel/ping", controller.ping)
7
8
 
8
9
  module.exports = router
@@ -0,0 +1,59 @@
1
+ const setup = require("./utilities")
2
+ const { events, constants, db } = require("@budibase/backend-core")
3
+
4
+ describe("/static", () => {
5
+ let request = setup.getRequest()
6
+ let config = setup.getConfig()
7
+ let app
8
+
9
+ const timezone = "Europe/London"
10
+
11
+ afterAll(setup.afterAll)
12
+
13
+ beforeEach(async () => {
14
+ app = await config.init()
15
+ jest.clearAllMocks()
16
+ })
17
+
18
+ describe("/ping", () => {
19
+ it("should ping from builder", async () => {
20
+ await request
21
+ .post("/api/bbtel/ping")
22
+ .send({source: "builder", timezone})
23
+ .set(config.defaultHeaders())
24
+ .expect(200)
25
+
26
+ expect(events.serve.servedBuilder).toBeCalledTimes(1)
27
+ expect(events.serve.servedBuilder).toBeCalledWith(timezone)
28
+ expect(events.serve.servedApp).not.toBeCalled()
29
+ expect(events.serve.servedAppPreview).not.toBeCalled()
30
+ })
31
+
32
+ it("should ping from app preview", async () => {
33
+ await request
34
+ .post("/api/bbtel/ping")
35
+ .send({source: "app", timezone})
36
+ .set(config.defaultHeaders())
37
+ .expect(200)
38
+
39
+ expect(events.serve.servedAppPreview).toBeCalledTimes(1)
40
+ expect(events.serve.servedAppPreview).toBeCalledWith(config.getApp(), timezone)
41
+ expect(events.serve.servedApp).not.toBeCalled()
42
+ })
43
+
44
+ it("should ping from app", async () => {
45
+ const headers = config.defaultHeaders()
46
+ headers[constants.Headers.APP_ID] = config.prodAppId
47
+
48
+ await request
49
+ .post("/api/bbtel/ping")
50
+ .send({source: "app", timezone})
51
+ .set(headers)
52
+ .expect(200)
53
+
54
+ expect(events.serve.servedApp).toBeCalledTimes(1)
55
+ expect(events.serve.servedApp).toBeCalledWith(config.getProdApp(), timezone)
56
+ expect(events.serve.servedAppPreview).not.toBeCalled()
57
+ })
58
+ })
59
+ })
@@ -36,7 +36,6 @@ describe("/static", () => {
36
36
  .expect(200)
37
37
 
38
38
  expect(res.text).toContain("<title>Budibase</title>")
39
- expect(events.serve.servedBuilder).toBeCalledTimes(1)
40
39
  })
41
40
  })
42
41
 
@@ -56,9 +55,6 @@ describe("/static", () => {
56
55
  .expect(200)
57
56
 
58
57
  expect(res.body.appId).toBe(config.prodAppId)
59
- expect(events.serve.servedApp).toBeCalledTimes(1)
60
- expect(events.serve.servedApp).toBeCalledWith(res.body)
61
- expect(events.serve.servedAppPreview).not.toBeCalled()
62
58
  })
63
59
 
64
60
  it("should serve the app by url", async () => {
@@ -71,9 +67,6 @@ describe("/static", () => {
71
67
  .expect(200)
72
68
 
73
69
  expect(res.body.appId).toBe(config.prodAppId)
74
- expect(events.serve.servedApp).toBeCalledTimes(1)
75
- expect(events.serve.servedApp).toBeCalledWith(res.body)
76
- expect(events.serve.servedAppPreview).not.toBeCalled()
77
70
  })
78
71
 
79
72
  it("should serve the app preview by id", async () => {
@@ -83,9 +76,6 @@ describe("/static", () => {
83
76
  .expect(200)
84
77
 
85
78
  expect(res.body.appId).toBe(config.appId)
86
- expect(events.serve.servedAppPreview).toBeCalledTimes(1)
87
- expect(events.serve.servedAppPreview).toBeCalledWith(res.body)
88
- expect(events.serve.servedApp).not.toBeCalled()
89
79
  })
90
80
  })
91
81
 
@@ -23,9 +23,6 @@ export async function checkAppMetadata(apps: App[]) {
23
23
  for (let [key, errors] of Object.entries(metadata.automationErrors)) {
24
24
  const updated = []
25
25
  for (let error of errors) {
26
- if (!error) {
27
- continue
28
- }
29
26
  const startDate = error.split(dbUtils.SEPARATOR)[2]
30
27
  if (startDate > maxStartDate) {
31
28
  updated.push(error)
@@ -10,7 +10,6 @@ import {
10
10
  import { isIsoDateString, SqlClients } from "../utils"
11
11
  import SqlTableQueryBuilder from "./sqlTable"
12
12
  import environment from "../../environment"
13
- import { removeKeyNumbering } from "./utils"
14
13
 
15
14
  const envLimit = environment.SQL_MAX_ROWS
16
15
  ? parseInt(environment.SQL_MAX_ROWS)
@@ -134,13 +133,12 @@ class InternalBuilder {
134
133
  fn: (key: string, value: any) => void
135
134
  ) {
136
135
  for (let [key, value] of Object.entries(structure)) {
137
- const updatedKey = removeKeyNumbering(key)
138
- const isRelationshipField = updatedKey.includes(".")
136
+ const isRelationshipField = key.includes(".")
139
137
  if (!opts.relationship && !isRelationshipField) {
140
- fn(`${opts.tableName}.${updatedKey}`, value)
138
+ fn(`${opts.tableName}.${key}`, value)
141
139
  }
142
140
  if (opts.relationship && isRelationshipField) {
143
- fn(updatedKey, value)
141
+ fn(key, value)
144
142
  }
145
143
  }
146
144
  }
@@ -584,3 +582,4 @@ class SqlQueryBuilder extends SqlTableQueryBuilder {
584
582
  }
585
583
 
586
584
  export default SqlQueryBuilder
585
+ module.exports = SqlQueryBuilder
@@ -1,12 +1,22 @@
1
- const QUERY_START_REGEX = /\d[0-9]*:/g
1
+ import { QueryJson } from "../../definitions/datasource"
2
+ import { Datasource } from "../../definitions/common"
2
3
 
3
- export function removeKeyNumbering(key: any): string {
4
- if (typeof key === "string" && key.match(QUERY_START_REGEX) != null) {
5
- const parts = key.split(":")
6
- // remove the number
7
- parts.shift()
8
- return parts.join(":")
9
- } else {
10
- return key
4
+ module DatasourceUtils {
5
+ const { integrations } = require("../index")
6
+
7
+ export async function makeExternalQuery(
8
+ datasource: Datasource,
9
+ json: QueryJson
10
+ ) {
11
+ const Integration = integrations[datasource.source]
12
+ // query is the opinionated function
13
+ if (Integration.prototype.query) {
14
+ const integration = new Integration(datasource.config)
15
+ return integration.query(json)
16
+ } else {
17
+ throw "Datasource does not support query."
18
+ }
11
19
  }
20
+
21
+ module.exports.makeExternalQuery = makeExternalQuery
12
22
  }
@@ -15,10 +15,10 @@ import {
15
15
  } from "./utils"
16
16
  import { DatasourcePlus } from "./base/datasourcePlus"
17
17
  import { Table, TableSchema } from "../definitions/common"
18
- import Sql from "./base/sql"
19
18
 
20
19
  module MSSQLModule {
21
20
  const sqlServer = require("mssql")
21
+ const Sql = require("./base/sql")
22
22
  const DEFAULT_SCHEMA = "dbo"
23
23
 
24
24
  interface MSSQLConfig {
@@ -96,8 +96,7 @@ module MSSQLModule {
96
96
  class SqlServerIntegration extends Sql implements DatasourcePlus {
97
97
  private readonly config: MSSQLConfig
98
98
  private index: number = 0
99
- private readonly pool: any
100
- private client: any
99
+ static pool: any
101
100
  public tables: Record<string, Table> = {}
102
101
  public schemaErrors: Record<string, string> = {}
103
102
 
@@ -16,10 +16,10 @@ import {
16
16
  import { DatasourcePlus } from "./base/datasourcePlus"
17
17
  import dayjs from "dayjs"
18
18
  const { NUMBER_REGEX } = require("../utilities")
19
- import Sql from "./base/sql"
20
19
 
21
20
  module MySQLModule {
22
21
  const mysql = require("mysql2/promise")
22
+ const Sql = require("./base/sql")
23
23
 
24
24
  interface MySQLConfig {
25
25
  host: string
@@ -14,10 +14,10 @@ import {
14
14
  SqlClients,
15
15
  } from "./utils"
16
16
  import { DatasourcePlus } from "./base/datasourcePlus"
17
- import Sql from "./base/sql"
18
17
 
19
18
  module PostgresModule {
20
19
  const { Client, types } = require("pg")
20
+ const Sql = require("./base/sql")
21
21
  const { escapeDangerousCharacters } = require("../utilities")
22
22
 
23
23
  // Return "date" and "timestamp" types as plain strings.
@@ -117,7 +117,6 @@ module PostgresModule {
117
117
  private readonly client: any
118
118
  private readonly config: PostgresConfig
119
119
  private index: number = 1
120
- private open: boolean
121
120
  public tables: Record<string, Table> = {}
122
121
  public schemaErrors: Record<string, string> = {}
123
122
 
@@ -1,4 +1,5 @@
1
1
  import { findHBSBlocks, processStringSync } from "@budibase/string-templates"
2
+ import { Integration } from "../../definitions/datasource"
2
3
  import { DatasourcePlus } from "../base/datasourcePlus"
3
4
 
4
5
  const CONST_CHAR_REGEX = new RegExp("'[^']*'", "g")
@@ -1,4 +1,4 @@
1
- const Sql = require("../base/sql").default
1
+ const Sql = require("../base/sql")
2
2
  const { SqlClients } = require("../utils")
3
3
 
4
4
  const TABLE_NAME = "test"
@@ -25,6 +25,7 @@ const newid = require("../../db/newid")
25
25
  const context = require("@budibase/backend-core/context")
26
26
  const { generateDevInfoID, SEPARATOR } = require("@budibase/backend-core/db")
27
27
  const { encrypt } = require("@budibase/backend-core/encryption")
28
+ const { DocumentTypes } = require("../../db/utils")
28
29
 
29
30
  const GLOBAL_USER_ID = "us_uuid1"
30
31
  const EMAIL = "babs@babs.com"
@@ -53,6 +54,10 @@ class TestConfiguration {
53
54
  return this.app
54
55
  }
55
56
 
57
+ getProdApp() {
58
+ return this.prodApp
59
+ }
60
+
56
61
  getAppId() {
57
62
  return this.appId
58
63
  }
@@ -106,19 +111,11 @@ class TestConfiguration {
106
111
 
107
112
  // UTILS
108
113
 
109
- async _req(body, params, controlFunc, opts = { prodApp: false }) {
114
+ async _req(body, params, controlFunc) {
110
115
  // create a fake request ctx
111
116
  const request = {}
112
-
113
- // set the app id
114
- let appId
115
- if (opts.prodApp) {
116
- appId = this.prodAppId
117
- } else {
118
- appId = this.appId
119
- }
117
+ const appId = this.appId
120
118
  request.appId = appId
121
-
122
119
  // fake cookies, we don't need them
123
120
  request.cookies = { set: () => {}, get: () => {} }
124
121
  request.config = { jwtSecret: env.JWT_SECRET }
@@ -344,14 +341,10 @@ class TestConfiguration {
344
341
  await this._req(null, null, controllers.deploy.deployApp)
345
342
  const prodAppId = this.getAppId().replace("_dev", "")
346
343
  this.prodAppId = prodAppId
344
+
347
345
  return context.doInAppContext(prodAppId, async () => {
348
- const appPackage = await this._req(
349
- null,
350
- { appId: prodAppId },
351
- controllers.app.fetchAppPackage,
352
- { prodApp: true }
353
- )
354
- return appPackage.application
346
+ const db = context.getProdAppDB()
347
+ return await db.get(DocumentTypes.APP_METADATA)
355
348
  })
356
349
  }
357
350