@budibase/server 1.3.15-alpha.7 → 1.3.15-alpha.9

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 (178) hide show
  1. package/builder/assets/{index.6e6a747c.js → index.15b76cd8.js} +205 -205
  2. package/builder/assets/{index.ecdac070.css → index.3850883f.css} +1 -1
  3. package/builder/index.html +2 -2
  4. package/coverage/clover.xml +49 -50
  5. package/coverage/coverage-final.json +2 -2
  6. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  7. package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
  8. package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
  9. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/component.js.html +25 -37
  12. package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/index.html +15 -15
  15. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  16. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  18. package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/query/index.html +1 -1
  21. package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
  22. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  24. package/coverage/lcov-report/api/controllers/row/external.js.html +2 -2
  25. package/coverage/lcov-report/api/controllers/row/index.html +1 -1
  26. package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
  27. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
  28. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +1 -1
  29. package/coverage/lcov-report/api/controllers/row/utils.js.html +1 -1
  30. package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
  31. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  32. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +1 -1
  33. package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
  34. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  35. package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
  36. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  37. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  38. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  39. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  40. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  41. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  42. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  43. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  44. package/coverage/lcov-report/api/index.html +1 -1
  45. package/coverage/lcov-report/api/index.js.html +1 -1
  46. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  47. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  48. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  49. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  50. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  51. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/index.html +1 -1
  57. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/table.js.html +2 -2
  68. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/utils/index.html +5 -5
  71. package/coverage/lcov-report/api/routes/utils/validators.js.html +9 -6
  72. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  74. package/coverage/lcov-report/automations/actions.js.html +1 -1
  75. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  76. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  77. package/coverage/lcov-report/automations/index.html +1 -1
  78. package/coverage/lcov-report/automations/index.js.html +1 -1
  79. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  80. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  81. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  82. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  83. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  84. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  85. package/coverage/lcov-report/automations/steps/index.html +1 -1
  86. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  87. package/coverage/lcov-report/automations/steps/loop.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  89. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  96. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  97. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  98. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  99. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  100. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  101. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  102. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  103. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  104. package/coverage/lcov-report/automations/triggers.js.html +1 -1
  105. package/coverage/lcov-report/constants/index.html +1 -1
  106. package/coverage/lcov-report/constants/index.js.html +1 -1
  107. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  108. package/coverage/lcov-report/constants/screens.js.html +1 -1
  109. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  110. package/coverage/lcov-report/db/index.html +1 -1
  111. package/coverage/lcov-report/db/index.js.html +1 -1
  112. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
  113. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  114. package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
  115. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
  116. package/coverage/lcov-report/db/newid.js.html +1 -1
  117. package/coverage/lcov-report/db/utils.js.html +1 -1
  118. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  119. package/coverage/lcov-report/events/index.html +1 -1
  120. package/coverage/lcov-report/events/index.js.html +1 -1
  121. package/coverage/lcov-report/events/utils.js.html +1 -1
  122. package/coverage/lcov-report/index.html +15 -15
  123. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  124. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  125. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  126. package/coverage/lcov-report/middleware/builder.js.html +1 -1
  127. package/coverage/lcov-report/middleware/currentapp.js.html +1 -1
  128. package/coverage/lcov-report/middleware/index.html +1 -1
  129. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  130. package/coverage/lcov-report/middleware/publicApi.js.html +1 -1
  131. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  132. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  133. package/coverage/lcov-report/middleware/utils.js.html +1 -1
  134. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  135. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  136. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  137. package/coverage/lcov-report/utilities/global.js.html +1 -1
  138. package/coverage/lcov-report/utilities/index.html +1 -1
  139. package/coverage/lcov-report/utilities/index.js.html +1 -1
  140. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
  141. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  142. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  143. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  144. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  145. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
  146. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  147. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  148. package/coverage/lcov-report/utilities/security.js.html +1 -1
  149. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  150. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  151. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +1 -1
  152. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  153. package/coverage/lcov-report/utilities/users.js.html +1 -1
  154. package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
  155. package/coverage/lcov.info +74 -77
  156. package/dist/api/controllers/component.js +12 -16
  157. package/dist/api/controllers/plugin/index.js +6 -3
  158. package/dist/api/controllers/row/external.js +1 -1
  159. package/dist/api/routes/application.js +3 -2
  160. package/dist/api/routes/public/tables.js +1 -1
  161. package/dist/api/routes/table.js +1 -1
  162. package/dist/api/routes/utils/validators.js +2 -1
  163. package/dist/package.json +6 -6
  164. package/dist/tests/utilities/TestConfiguration.js +1 -1
  165. package/dist/tsconfig.build.tsbuildinfo +1 -1
  166. package/package.json +7 -7
  167. package/specs/openapi.json +3 -3
  168. package/specs/openapi.yaml +3 -3
  169. package/specs/resources/query.js +1 -1
  170. package/src/api/controllers/component.js +17 -21
  171. package/src/api/controllers/plugin/index.ts +8 -4
  172. package/src/api/controllers/row/external.js +1 -1
  173. package/src/api/routes/application.ts +13 -2
  174. package/src/api/routes/public/tables.ts +1 -1
  175. package/src/api/routes/table.js +1 -1
  176. package/src/api/routes/utils/validators.js +2 -1
  177. package/src/definitions/openapi.ts +3 -3
  178. package/src/tests/utilities/TestConfiguration.js +1 -1
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@budibase/server",
3
3
  "email": "hi@budibase.com",
4
- "version": "1.3.15-alpha.7",
4
+ "version": "1.3.15-alpha.9",
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.3.15-alpha.7",
81
- "@budibase/client": "1.3.15-alpha.7",
82
- "@budibase/pro": "1.3.15-alpha.6",
83
- "@budibase/string-templates": "1.3.15-alpha.7",
84
- "@budibase/types": "1.3.15-alpha.7",
80
+ "@budibase/backend-core": "1.3.15-alpha.9",
81
+ "@budibase/client": "1.3.15-alpha.9",
82
+ "@budibase/pro": "1.3.15-alpha.8",
83
+ "@budibase/string-templates": "1.3.15-alpha.9",
84
+ "@budibase/types": "1.3.15-alpha.9",
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": "d410b9a47c5f1b630d8e189b348cf048b17b06b6"
202
+ "gitHead": "46eece76b6b6b41113af134325bc8924b96e444b"
203
203
  }
@@ -1327,7 +1327,7 @@
1327
1327
  "type": "string"
1328
1328
  },
1329
1329
  "datasourceId": {
1330
- "description": "The ID of the data source the query belongs to.",
1330
+ "description": "The ID of the datasource the query belongs to.",
1331
1331
  "type": "string"
1332
1332
  },
1333
1333
  "parameters": {
@@ -1386,7 +1386,7 @@
1386
1386
  "type": "string"
1387
1387
  },
1388
1388
  "datasourceId": {
1389
- "description": "The ID of the data source the query belongs to.",
1389
+ "description": "The ID of the datasource the query belongs to.",
1390
1390
  "type": "string"
1391
1391
  },
1392
1392
  "parameters": {
@@ -2289,7 +2289,7 @@
2289
2289
  },
2290
2290
  "responses": {
2291
2291
  "200": {
2292
- "description": "Returns the created table, including the ID which has been generated for it. This can be internal or external data sources.",
2292
+ "description": "Returns the created table, including the ID which has been generated for it. This can be internal or external datasources.",
2293
2293
  "content": {
2294
2294
  "application/json": {
2295
2295
  "schema": {
@@ -1004,7 +1004,7 @@ components:
1004
1004
  description: The ID of the query.
1005
1005
  type: string
1006
1006
  datasourceId:
1007
- description: The ID of the data source the query belongs to.
1007
+ description: The ID of the datasource the query belongs to.
1008
1008
  type: string
1009
1009
  parameters:
1010
1010
  description: The bindings which are required to perform this query.
@@ -1051,7 +1051,7 @@ components:
1051
1051
  description: The ID of the query.
1052
1052
  type: string
1053
1053
  datasourceId:
1054
- description: The ID of the data source the query belongs to.
1054
+ description: The ID of the datasource the query belongs to.
1055
1055
  type: string
1056
1056
  parameters:
1057
1057
  description: The bindings which are required to perform this query.
@@ -1665,7 +1665,7 @@ paths:
1665
1665
  responses:
1666
1666
  "200":
1667
1667
  description: Returns the created table, including the ID which has been
1668
- generated for it. This can be internal or external data sources.
1668
+ generated for it. This can be internal or external datasources.
1669
1669
  content:
1670
1670
  application/json:
1671
1671
  schema:
@@ -82,7 +82,7 @@ const querySchema = object(
82
82
  type: "string",
83
83
  },
84
84
  datasourceId: {
85
- description: "The ID of the data source the query belongs to.",
85
+ description: "The ID of the datasource the query belongs to.",
86
86
  type: "string",
87
87
  },
88
88
  parameters: {
@@ -2,7 +2,6 @@ const { DocumentType, getPluginParams } = require("../../db/utils")
2
2
  const { getComponentLibraryManifest } = require("../../utilities/fileSystem")
3
3
  const { getAppDB } = require("@budibase/backend-core/context")
4
4
  const { getGlobalDB } = require("@budibase/backend-core/tenancy")
5
- const env = require("../../environment")
6
5
 
7
6
  exports.fetchAppComponentDefinitions = async function (ctx) {
8
7
  try {
@@ -33,26 +32,23 @@ exports.fetchAppComponentDefinitions = async function (ctx) {
33
32
  }
34
33
  }
35
34
 
36
- // for now custom components only supported in self-host
37
- if (env.SELF_HOSTED) {
38
- // Add custom components
39
- const globalDB = getGlobalDB()
40
- const response = await globalDB.allDocs(
41
- getPluginParams(null, {
42
- include_docs: true,
43
- })
44
- )
45
- response.rows
46
- .map(row => row.doc)
47
- .filter(plugin => plugin.schema.type === "component")
48
- .forEach(plugin => {
49
- const fullComponentName = `plugin/${plugin.name}`
50
- definitions[fullComponentName] = {
51
- component: fullComponentName,
52
- ...plugin.schema.schema,
53
- }
54
- })
55
- }
35
+ // Add custom components
36
+ const globalDB = getGlobalDB()
37
+ const response = await globalDB.allDocs(
38
+ getPluginParams(null, {
39
+ include_docs: true,
40
+ })
41
+ )
42
+ response.rows
43
+ .map(row => row.doc)
44
+ .filter(plugin => plugin.schema.type === "component")
45
+ .forEach(plugin => {
46
+ const fullComponentName = `plugin/${plugin.name}`
47
+ definitions[fullComponentName] = {
48
+ component: fullComponentName,
49
+ ...plugin.schema.schema,
50
+ }
51
+ })
56
52
 
57
53
  ctx.body = definitions
58
54
  } catch (err) {
@@ -53,10 +53,6 @@ export async function upload(ctx: any) {
53
53
  export async function create(ctx: any) {
54
54
  const { source, url, headers, githubToken } = ctx.request.body
55
55
 
56
- if (!env.SELF_HOSTED) {
57
- ctx.throw(400, "Plugins not supported outside of self-host.")
58
- }
59
-
60
56
  try {
61
57
  let metadata
62
58
  let directory
@@ -87,6 +83,13 @@ export async function create(ctx: any) {
87
83
 
88
84
  validate(metadata?.schema)
89
85
 
86
+ // Only allow components in cloud
87
+ if (!env.SELF_HOSTED && metadata?.schema?.type !== PluginType.COMPONENT) {
88
+ throw new Error(
89
+ "Only component plugins are supported outside of self-host"
90
+ )
91
+ }
92
+
90
93
  const doc = await storePlugin(metadata, directory, source)
91
94
 
92
95
  ctx.body = {
@@ -198,6 +201,7 @@ export async function storePlugin(
198
201
 
199
202
  export async function processPlugin(plugin: FileType, source?: string) {
200
203
  const { metadata, directory } = await fileUpload(plugin)
204
+ validate(metadata?.schema)
201
205
 
202
206
  // Only allow components in cloud
203
207
  if (!env.SELF_HOSTED && metadata?.schema?.type !== PluginType.COMPONENT) {
@@ -53,7 +53,7 @@ exports.save = async ctx => {
53
53
  }
54
54
 
55
55
  exports.fetchView = async ctx => {
56
- // there are no views in external data sources, shouldn't ever be called
56
+ // there are no views in external datasources, shouldn't ever be called
57
57
  // for now just fetch
58
58
  const split = ctx.params.viewName.split("all_")
59
59
  ctx.params.tableId = split[1] ? split[1] : split[0]
@@ -2,16 +2,27 @@ import Router from "@koa/router"
2
2
  import * as controller from "../controllers/application"
3
3
  import authorized from "../../middleware/authorized"
4
4
  import { BUILDER } from "@budibase/backend-core/permissions"
5
+ import { applicationValidator } from "./utils/validators"
5
6
 
6
7
  const router = new Router()
7
8
 
8
9
  router
9
10
  .post("/api/applications/:appId/sync", authorized(BUILDER), controller.sync)
10
- .post("/api/applications", authorized(BUILDER), controller.create)
11
+ .post(
12
+ "/api/applications",
13
+ authorized(BUILDER),
14
+ applicationValidator(),
15
+ controller.create
16
+ )
11
17
  .get("/api/applications/:appId/definition", controller.fetchAppDefinition)
12
18
  .get("/api/applications", controller.fetch)
13
19
  .get("/api/applications/:appId/appPackage", controller.fetchAppPackage)
14
- .put("/api/applications/:appId", authorized(BUILDER), controller.update)
20
+ .put(
21
+ "/api/applications/:appId",
22
+ authorized(BUILDER),
23
+ applicationValidator(),
24
+ controller.update
25
+ )
15
26
  .post(
16
27
  "/api/applications/:appId/client/update",
17
28
  authorized(BUILDER),
@@ -26,7 +26,7 @@ const read = [],
26
26
  * responses:
27
27
  * 200:
28
28
  * description: Returns the created table, including the ID which has been generated for it. This can be
29
- * internal or external data sources.
29
+ * internal or external datasources.
30
30
  * content:
31
31
  * application/json:
32
32
  * schema:
@@ -55,7 +55,7 @@ router
55
55
  * @apiParam (Body) {string} [_rev] If updating an existing internal table then the revision must also be specified.
56
56
  * @apiParam (Body) {string} type] This should either be "internal" or "external" depending on the table type -
57
57
  * this will default to internal.
58
- * @apiParam (Body) {string} [sourceId] If creating an external table then this should be set to the data source ID. If
58
+ * @apiParam (Body) {string} [sourceId] If creating an external table then this should be set to the datasource ID. If
59
59
  * building an internal table this does not need to be set, although it will be returned as "bb_internal".
60
60
  * @apiParam (Body) {string} name The name of the table, this will be used in the UI. To rename the table simply
61
61
  * supply the table structure to this endpoint with the name changed.
@@ -10,6 +10,7 @@ const Joi = require("joi")
10
10
  const OPTIONAL_STRING = Joi.string().optional().allow(null).allow("")
11
11
  const OPTIONAL_NUMBER = Joi.number().optional().allow(null)
12
12
  const OPTIONAL_BOOLEAN = Joi.boolean().optional().allow(null)
13
+ const APP_NAME_REGEX = /^[\w\s]+$/
13
14
 
14
15
  exports.tableValidator = () => {
15
16
  // prettier-ignore
@@ -214,7 +215,7 @@ exports.applicationValidator = () => {
214
215
  return joiValidator.body(Joi.object({
215
216
  _id: OPTIONAL_STRING,
216
217
  _rev: OPTIONAL_STRING,
217
- name: Joi.string().required(),
218
+ name: Joi.string().pattern(new RegExp(APP_NAME_REGEX)).required().error(new Error('App name must be letters, numbers and spaces only')),
218
219
  url: OPTIONAL_STRING,
219
220
  template: Joi.object({
220
221
  templateString: OPTIONAL_STRING,
@@ -344,7 +344,7 @@ export interface paths {
344
344
  };
345
345
  };
346
346
  responses: {
347
- /** Returns the created table, including the ID which has been generated for it. This can be internal or external data sources. */
347
+ /** Returns the created table, including the ID which has been generated for it. This can be internal or external datasources. */
348
348
  200: {
349
349
  content: {
350
350
  "application/json": components["schemas"]["tableOutput"];
@@ -965,7 +965,7 @@ export interface components {
965
965
  query: {
966
966
  /** @description The ID of the query. */
967
967
  _id: string;
968
- /** @description The ID of the data source the query belongs to. */
968
+ /** @description The ID of the datasource the query belongs to. */
969
969
  datasourceId?: string;
970
970
  /** @description The bindings which are required to perform this query. */
971
971
  parameters?: string[];
@@ -989,7 +989,7 @@ export interface components {
989
989
  data: {
990
990
  /** @description The ID of the query. */
991
991
  _id: string;
992
- /** @description The ID of the data source the query belongs to. */
992
+ /** @description The ID of the datasource the query belongs to. */
993
993
  datasourceId?: string;
994
994
  /** @description The bindings which are required to perform this query. */
995
995
  parameters?: string[];
@@ -560,7 +560,7 @@ class TestConfiguration {
560
560
 
561
561
  async createQuery(config = null) {
562
562
  if (!this.datasource && !config) {
563
- throw "No data source created for query."
563
+ throw "No datasource created for query."
564
564
  }
565
565
  config = config || basicQuery(this.datasource._id)
566
566
  return this._req(config, null, controllers.query.save)