@budibase/server 1.3.21 → 1.3.22-alpha.1

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 (310) hide show
  1. package/__mocks__/mongodb.ts +1 -1
  2. package/builder/assets/index.96c69636.js +1008 -0
  3. package/builder/assets/index.c167b5c3.css +6 -0
  4. package/builder/index.html +2 -4
  5. package/coverage/clover.xml +308 -338
  6. package/coverage/coverage-final.json +19 -21
  7. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  8. package/coverage/lcov-report/api/controllers/auth.js.html +41 -8
  9. package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/datasource.js.html +73 -34
  13. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/index.html +27 -57
  15. package/coverage/lcov-report/api/controllers/integration.js.html +6 -6
  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/script.js.html +1 -1
  31. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +1 -1
  32. package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
  33. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  34. package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
  35. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  36. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  37. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  38. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  39. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  40. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  41. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  42. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  43. package/coverage/lcov-report/api/index.html +1 -1
  44. package/coverage/lcov-report/api/index.js.html +13 -13
  45. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  46. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  47. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  48. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  49. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  50. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  51. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/index.html +1 -1
  56. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/table.js.html +2 -2
  67. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/utils/index.html +9 -9
  70. package/coverage/lcov-report/api/routes/utils/validators.js.html +75 -12
  71. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  73. package/coverage/lcov-report/automations/actions.js.html +1 -1
  74. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  75. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  76. package/coverage/lcov-report/automations/index.html +1 -1
  77. package/coverage/lcov-report/automations/index.js.html +1 -1
  78. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  79. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  80. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  81. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  82. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  83. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  84. package/coverage/lcov-report/automations/steps/index.html +1 -1
  85. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  86. package/coverage/lcov-report/automations/steps/loop.js.html +1 -1
  87. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  89. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  95. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  96. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  97. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  98. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  99. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  100. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  101. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  102. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  103. package/coverage/lcov-report/automations/triggers.js.html +1 -1
  104. package/coverage/lcov-report/constants/index.html +1 -1
  105. package/coverage/lcov-report/constants/index.js.html +1 -1
  106. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  107. package/coverage/lcov-report/constants/screens.js.html +1 -1
  108. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  109. package/coverage/lcov-report/db/index.html +14 -14
  110. package/coverage/lcov-report/db/index.js.html +1 -1
  111. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
  112. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  113. package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
  114. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
  115. package/coverage/lcov-report/db/newid.js.html +2 -2
  116. package/coverage/lcov-report/db/utils.js.html +30 -18
  117. package/coverage/lcov-report/events/AutomationEmitter.js.html +3 -3
  118. package/coverage/lcov-report/events/index.html +1 -1
  119. package/coverage/lcov-report/events/index.js.html +1 -1
  120. package/coverage/lcov-report/events/utils.js.html +1 -1
  121. package/coverage/lcov-report/index.html +44 -44
  122. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  123. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  124. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  125. package/coverage/lcov-report/middleware/builder.js.html +12 -12
  126. package/coverage/lcov-report/middleware/currentapp.js.html +46 -40
  127. package/coverage/lcov-report/middleware/index.html +15 -15
  128. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  129. package/coverage/lcov-report/middleware/publicApi.js.html +1 -1
  130. package/coverage/lcov-report/middleware/resourceId.js.html +7 -7
  131. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  132. package/coverage/lcov-report/middleware/utils.js.html +2 -2
  133. package/coverage/lcov-report/utilities/budibaseDir.js.html +3 -3
  134. package/coverage/lcov-report/utilities/centralPath.js.html +4 -4
  135. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  136. package/coverage/lcov-report/utilities/global.js.html +16 -16
  137. package/coverage/lcov-report/utilities/index.html +15 -15
  138. package/coverage/lcov-report/utilities/index.js.html +24 -24
  139. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +2 -2
  140. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  141. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  142. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  143. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  144. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
  145. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  146. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  147. package/coverage/lcov-report/utilities/security.js.html +2 -2
  148. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  149. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  150. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +1 -1
  151. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  152. package/coverage/lcov-report/utilities/users.js.html +1 -1
  153. package/coverage/lcov-report/utilities/workerRequests.js.html +32 -8
  154. package/coverage/lcov.info +521 -558
  155. package/dist/api/controllers/application.js +5 -5
  156. package/dist/api/controllers/auth.js +9 -0
  157. package/dist/api/controllers/component.js +19 -6
  158. package/dist/api/controllers/datasource.js +21 -8
  159. package/dist/api/controllers/deploy/index.js +1 -8
  160. package/dist/api/controllers/integration.js +4 -4
  161. package/dist/{migrations/functions/usageQuotas/syncDevelopers.js → api/controllers/plugin/file.js} +13 -13
  162. package/dist/api/controllers/plugin/github.js +69 -0
  163. package/dist/api/controllers/plugin/index.js +144 -0
  164. package/dist/api/controllers/plugin/npm.js +58 -0
  165. package/dist/api/controllers/plugin/uploaders.js +11 -0
  166. package/dist/{migrations/functions/usageQuotas/syncPublishedApps.js → api/controllers/plugin/url.js} +13 -15
  167. package/dist/api/controllers/plugin/utils.js +26 -0
  168. package/dist/api/controllers/row/external.js +1 -1
  169. package/dist/api/controllers/screen.js +62 -14
  170. package/dist/api/controllers/static/index.js +1 -0
  171. package/dist/api/controllers/static/templates/BudibaseApp.svelte +10 -0
  172. package/dist/api/controllers/static/templates/preview.hbs +5 -1
  173. package/dist/api/index.js +1 -1
  174. package/dist/api/routes/application.js +3 -2
  175. package/dist/api/routes/index.js +2 -0
  176. package/dist/{migrations/functions/publishedAppsQuota.js → api/routes/plugin.js} +13 -21
  177. package/dist/api/routes/public/rows.js +1 -82
  178. package/dist/api/routes/public/tables.js +1 -1
  179. package/dist/api/routes/table.js +1 -1
  180. package/dist/api/routes/utils/validators.js +20 -2
  181. package/dist/app.js +16 -1
  182. package/dist/db/utils.js +3 -0
  183. package/dist/environment.js +1 -0
  184. package/dist/integrations/airtable.js +126 -129
  185. package/dist/integrations/arangodb.js +86 -89
  186. package/dist/integrations/base/query.js +2 -2
  187. package/dist/integrations/base/sqlTable.js +3 -1
  188. package/dist/integrations/couchdb.js +80 -83
  189. package/dist/integrations/dynamodb.js +161 -164
  190. package/dist/integrations/elasticsearch.js +135 -138
  191. package/dist/integrations/firebase.js +154 -157
  192. package/dist/integrations/googlesheets.js +323 -327
  193. package/dist/integrations/index.js +99 -51
  194. package/dist/integrations/microsoftSqlServer.js +240 -243
  195. package/dist/integrations/mongodb.js +239 -242
  196. package/dist/integrations/mysql.js +215 -219
  197. package/dist/integrations/oracle.js +318 -322
  198. package/dist/integrations/postgres.js +262 -265
  199. package/dist/integrations/redis.js +134 -139
  200. package/dist/integrations/rest.js +289 -292
  201. package/dist/integrations/s3.js +61 -64
  202. package/dist/integrations/snowflake.js +83 -86
  203. package/dist/middleware/currentapp.js +2 -0
  204. package/dist/migrations/functions/backfill/global.js +0 -3
  205. package/dist/migrations/index.js +0 -10
  206. package/dist/package.json +9 -6
  207. package/dist/tests/utilities/TestConfiguration.js +1 -1
  208. package/dist/threads/query.js +2 -2
  209. package/dist/tsconfig.build.tsbuildinfo +1 -1
  210. package/dist/utilities/fileSystem/index.js +105 -1
  211. package/dist/utilities/workerRequests.js +4 -0
  212. package/dist/watch.js +77 -0
  213. package/dist/websocket.js +22 -0
  214. package/package.json +10 -7
  215. package/scripts/dev/manage.js +4 -0
  216. package/scripts/localdomain.js +3 -1
  217. package/specs/openapi.json +115 -112
  218. package/specs/openapi.yaml +96 -94
  219. package/specs/resources/misc.js +116 -0
  220. package/specs/resources/query.js +1 -1
  221. package/src/api/controllers/application.ts +1 -2
  222. package/src/api/controllers/auth.js +11 -0
  223. package/src/api/controllers/component.ts +57 -0
  224. package/src/api/controllers/datasource.js +21 -8
  225. package/src/api/controllers/deploy/index.ts +1 -6
  226. package/src/api/controllers/integration.js +4 -4
  227. package/src/api/controllers/plugin/file.ts +15 -0
  228. package/src/api/controllers/plugin/github.ts +75 -0
  229. package/src/api/controllers/plugin/index.ts +134 -0
  230. package/src/api/controllers/plugin/npm.ts +56 -0
  231. package/src/api/controllers/plugin/uploaders.ts +4 -0
  232. package/src/api/controllers/plugin/url.ts +12 -0
  233. package/src/api/controllers/plugin/utils.ts +19 -0
  234. package/src/api/controllers/public/mapping/types.ts +8 -0
  235. package/src/api/controllers/row/external.js +1 -1
  236. package/src/api/controllers/screen.ts +122 -0
  237. package/src/api/controllers/static/index.ts +1 -1
  238. package/src/api/controllers/static/templates/BudibaseApp.svelte +10 -0
  239. package/src/api/controllers/static/templates/preview.hbs +5 -1
  240. package/src/api/index.js +1 -1
  241. package/src/api/routes/application.ts +13 -2
  242. package/src/api/routes/index.ts +2 -0
  243. package/src/api/routes/plugin.ts +14 -0
  244. package/src/api/routes/public/rows.ts +1 -82
  245. package/src/api/routes/public/tables.ts +1 -1
  246. package/src/api/routes/table.js +1 -1
  247. package/src/api/routes/tests/query.spec.js +8 -25
  248. package/src/api/routes/tests/user.spec.js +0 -2
  249. package/src/api/routes/utils/validators.js +26 -5
  250. package/src/app.ts +25 -2
  251. package/src/db/utils.js +4 -0
  252. package/src/definitions/openapi.ts +56 -55
  253. package/src/environment.js +1 -0
  254. package/src/integrations/airtable.ts +116 -118
  255. package/src/integrations/arangodb.ts +87 -89
  256. package/src/integrations/base/query.ts +2 -2
  257. package/src/integrations/base/sqlTable.ts +3 -1
  258. package/src/integrations/couchdb.ts +83 -89
  259. package/src/integrations/dynamodb.ts +173 -175
  260. package/src/integrations/elasticsearch.ts +120 -122
  261. package/src/integrations/firebase.ts +157 -159
  262. package/src/integrations/googlesheets.ts +328 -338
  263. package/src/integrations/index.ts +64 -21
  264. package/src/integrations/microsoftSqlServer.ts +249 -251
  265. package/src/integrations/mongodb.ts +261 -258
  266. package/src/integrations/mysql.ts +229 -234
  267. package/src/integrations/oracle.ts +373 -380
  268. package/src/integrations/postgres.ts +264 -268
  269. package/src/integrations/redis.ts +128 -132
  270. package/src/integrations/rest.ts +324 -329
  271. package/src/integrations/s3.ts +68 -71
  272. package/src/integrations/snowflake.ts +80 -82
  273. package/src/integrations/tests/{airtable.spec.js → airtable.spec.ts} +21 -18
  274. package/src/integrations/tests/{arangodb.spec.js → arangodb.spec.ts} +12 -9
  275. package/src/integrations/tests/{couchdb.spec.js → couchdb.spec.ts} +33 -27
  276. package/src/integrations/tests/{dynamodb.spec.js → dynamodb.spec.ts} +45 -41
  277. package/src/integrations/tests/{elasticsearch.spec.js → elasticsearch.spec.ts} +22 -21
  278. package/src/integrations/tests/{firebase.spec.js → firebase.spec.ts} +33 -28
  279. package/src/integrations/tests/{microsoftSqlServer.spec.js → microsoftSqlServer.spec.ts} +12 -11
  280. package/src/integrations/tests/{mongo.spec.js → mongo.spec.ts} +46 -35
  281. package/src/integrations/tests/{mysql.spec.js → mysql.spec.ts} +17 -15
  282. package/src/integrations/tests/{oracle.spec.js → oracle.spec.ts} +19 -17
  283. package/src/integrations/tests/{postgres.spec.js → postgres.spec.ts} +19 -17
  284. package/src/integrations/tests/{redis.spec.js → redis.spec.ts} +27 -18
  285. package/src/integrations/tests/{rest.spec.js → rest.spec.ts} +22 -14
  286. package/src/integrations/tests/{s3.spec.js → s3.spec.ts} +10 -8
  287. package/src/integrations/tests/{sql.spec.js → sql.spec.ts} +228 -177
  288. package/src/middleware/currentapp.js +2 -0
  289. package/src/migrations/functions/backfill/global.ts +0 -3
  290. package/src/migrations/index.ts +0 -16
  291. package/src/module.d.ts +2 -0
  292. package/src/tests/utilities/TestConfiguration.js +1 -1
  293. package/src/threads/query.ts +2 -2
  294. package/src/utilities/fileSystem/index.js +123 -0
  295. package/src/utilities/workerRequests.js +8 -0
  296. package/src/watch.ts +38 -0
  297. package/src/websocket.ts +26 -0
  298. package/builder/assets/index.8d12d461.css +0 -6
  299. package/builder/assets/index.d354271c.js +0 -879
  300. package/builder/assets/vendor.5e1fe644.css +0 -1
  301. package/builder/assets/vendor.67dbd8fa.js +0 -248
  302. package/coverage/lcov-report/api/controllers/component.js.html +0 -199
  303. package/coverage/lcov-report/api/controllers/screen.js.html +0 -259
  304. package/dist/migrations/functions/developerQuota.js +0 -49
  305. package/src/api/controllers/component.js +0 -38
  306. package/src/api/controllers/screen.js +0 -58
  307. package/src/migrations/functions/developerQuota.ts +0 -15
  308. package/src/migrations/functions/publishedAppsQuota.ts +0 -13
  309. package/src/migrations/functions/usageQuotas/syncDevelopers.ts +0 -19
  310. package/src/migrations/functions/usageQuotas/syncPublishedApps.ts +0 -21
@@ -17,235 +17,231 @@ const utils_1 = require("./utils");
17
17
  const dayjs_1 = __importDefault(require("dayjs"));
18
18
  const { NUMBER_REGEX } = require("../utilities");
19
19
  const sql_1 = __importDefault(require("./base/sql"));
20
- var MySQLModule;
21
- (function (MySQLModule) {
22
- const mysql = require("mysql2/promise");
23
- const SCHEMA = {
24
- docs: "https://github.com/sidorares/node-mysql2",
25
- plus: true,
26
- friendlyName: "MySQL",
27
- type: "Relational",
28
- description: "MySQL Database Service is a fully managed database service to deploy cloud-native applications. ",
29
- datasource: {
30
- host: {
31
- type: types_1.DatasourceFieldType.STRING,
32
- default: "localhost",
33
- required: true,
34
- },
35
- port: {
36
- type: types_1.DatasourceFieldType.NUMBER,
37
- default: 3306,
38
- required: false,
39
- },
40
- user: {
41
- type: types_1.DatasourceFieldType.STRING,
42
- default: "root",
43
- required: true,
44
- },
45
- password: {
46
- type: types_1.DatasourceFieldType.PASSWORD,
47
- default: "root",
48
- required: true,
49
- },
50
- database: {
51
- type: types_1.DatasourceFieldType.STRING,
52
- required: true,
53
- },
54
- ssl: {
55
- type: types_1.DatasourceFieldType.OBJECT,
56
- required: false,
57
- },
58
- rejectUnauthorized: {
59
- type: types_1.DatasourceFieldType.BOOLEAN,
60
- default: true,
61
- required: false,
62
- },
20
+ const mysql = require("mysql2/promise");
21
+ const SCHEMA = {
22
+ docs: "https://github.com/sidorares/node-mysql2",
23
+ plus: true,
24
+ friendlyName: "MySQL",
25
+ type: "Relational",
26
+ description: "MySQL Database Service is a fully managed database service to deploy cloud-native applications. ",
27
+ datasource: {
28
+ host: {
29
+ type: types_1.DatasourceFieldType.STRING,
30
+ default: "localhost",
31
+ required: true,
63
32
  },
64
- query: {
65
- create: {
66
- type: types_1.QueryType.SQL,
67
- },
68
- read: {
69
- type: types_1.QueryType.SQL,
70
- },
71
- update: {
72
- type: types_1.QueryType.SQL,
73
- },
74
- delete: {
75
- type: types_1.QueryType.SQL,
76
- },
33
+ port: {
34
+ type: types_1.DatasourceFieldType.NUMBER,
35
+ default: 3306,
36
+ required: false,
77
37
  },
78
- };
79
- const TimezoneAwareDateTypes = ["timestamp"];
80
- function bindingTypeCoerce(bindings) {
81
- for (let i = 0; i < bindings.length; i++) {
82
- const binding = bindings[i];
83
- if (typeof binding !== "string") {
84
- continue;
85
- }
86
- const matches = binding.match(NUMBER_REGEX);
87
- // check if number first
88
- if (matches && matches[0] !== "" && !isNaN(Number(matches[0]))) {
89
- bindings[i] = parseFloat(binding);
90
- }
91
- // if not a number, see if it is a date - important to do in this order as any
92
- // integer will be considered a valid date
93
- else if (/^\d/.test(binding) && (0, dayjs_1.default)(binding).isValid()) {
94
- bindings[i] = (0, dayjs_1.default)(binding).toDate();
95
- }
96
- }
97
- return bindings;
98
- }
99
- class MySQLIntegration extends sql_1.default {
100
- constructor(config) {
101
- super(utils_1.SqlClient.MY_SQL);
102
- this.tables = {};
103
- this.schemaErrors = {};
104
- this.config = config;
105
- if (config.ssl && Object.keys(config.ssl).length === 0) {
106
- delete config.ssl;
107
- }
108
- // make sure this defaults to true
109
- if (config.rejectUnauthorized != null &&
110
- !config.rejectUnauthorized &&
111
- config.ssl) {
112
- config.ssl.rejectUnauthorized = config.rejectUnauthorized;
113
- }
114
- // @ts-ignore
115
- delete config.rejectUnauthorized;
116
- this.config = Object.assign(Object.assign({}, config), { typeCast: function (field, next) {
117
- if (field.type == "DATETIME" ||
118
- field.type === "DATE" ||
119
- field.type === "TIMESTAMP") {
120
- return field.string();
121
- }
122
- return next();
123
- } });
38
+ user: {
39
+ type: types_1.DatasourceFieldType.STRING,
40
+ default: "root",
41
+ required: true,
42
+ },
43
+ password: {
44
+ type: types_1.DatasourceFieldType.PASSWORD,
45
+ default: "root",
46
+ required: true,
47
+ },
48
+ database: {
49
+ type: types_1.DatasourceFieldType.STRING,
50
+ required: true,
51
+ },
52
+ ssl: {
53
+ type: types_1.DatasourceFieldType.OBJECT,
54
+ required: false,
55
+ },
56
+ rejectUnauthorized: {
57
+ type: types_1.DatasourceFieldType.BOOLEAN,
58
+ default: true,
59
+ required: false,
60
+ },
61
+ },
62
+ query: {
63
+ create: {
64
+ type: types_1.QueryType.SQL,
65
+ },
66
+ read: {
67
+ type: types_1.QueryType.SQL,
68
+ },
69
+ update: {
70
+ type: types_1.QueryType.SQL,
71
+ },
72
+ delete: {
73
+ type: types_1.QueryType.SQL,
74
+ },
75
+ },
76
+ };
77
+ const TimezoneAwareDateTypes = ["timestamp"];
78
+ function bindingTypeCoerce(bindings) {
79
+ for (let i = 0; i < bindings.length; i++) {
80
+ const binding = bindings[i];
81
+ if (typeof binding !== "string") {
82
+ continue;
124
83
  }
125
- getBindingIdentifier() {
126
- return "?";
84
+ const matches = binding.match(NUMBER_REGEX);
85
+ // check if number first
86
+ if (matches && matches[0] !== "" && !isNaN(Number(matches[0]))) {
87
+ bindings[i] = parseFloat(binding);
127
88
  }
128
- getStringConcat(parts) {
129
- return `concat(${parts.join(", ")})`;
89
+ // if not a number, see if it is a date - important to do in this order as any
90
+ // integer will be considered a valid date
91
+ else if (/^\d/.test(binding) && (0, dayjs_1.default)(binding).isValid()) {
92
+ bindings[i] = (0, dayjs_1.default)(binding).toDate();
130
93
  }
131
- connect() {
132
- return __awaiter(this, void 0, void 0, function* () {
133
- this.client = yield mysql.createConnection(this.config);
134
- });
94
+ }
95
+ return bindings;
96
+ }
97
+ class MySQLIntegration extends sql_1.default {
98
+ constructor(config) {
99
+ super(utils_1.SqlClient.MY_SQL);
100
+ this.tables = {};
101
+ this.schemaErrors = {};
102
+ this.config = config;
103
+ if (config.ssl && Object.keys(config.ssl).length === 0) {
104
+ delete config.ssl;
135
105
  }
136
- disconnect() {
137
- return __awaiter(this, void 0, void 0, function* () {
138
- yield this.client.end();
139
- });
106
+ // make sure this defaults to true
107
+ if (config.rejectUnauthorized != null &&
108
+ !config.rejectUnauthorized &&
109
+ config.ssl) {
110
+ config.ssl.rejectUnauthorized = config.rejectUnauthorized;
140
111
  }
141
- internalQuery(query, opts = {
142
- connect: true,
143
- disableCoercion: false,
144
- }) {
145
- return __awaiter(this, void 0, void 0, function* () {
146
- try {
147
- if (opts === null || opts === void 0 ? void 0 : opts.connect) {
148
- yield this.connect();
149
- }
150
- const baseBindings = query.bindings || [];
151
- const bindings = (opts === null || opts === void 0 ? void 0 : opts.disableCoercion)
152
- ? baseBindings
153
- : bindingTypeCoerce(baseBindings);
154
- // Node MySQL is callback based, so we must wrap our call in a promise
155
- const response = yield this.client.query(query.sql, bindings);
156
- return response[0];
157
- }
158
- finally {
159
- if (opts === null || opts === void 0 ? void 0 : opts.connect) {
160
- yield this.disconnect();
161
- }
112
+ // @ts-ignore
113
+ delete config.rejectUnauthorized;
114
+ this.config = Object.assign(Object.assign({}, config), { typeCast: function (field, next) {
115
+ if (field.type == "DATETIME" ||
116
+ field.type === "DATE" ||
117
+ field.type === "TIMESTAMP") {
118
+ return field.string();
162
119
  }
163
- });
164
- }
165
- buildSchema(datasourceId, entities) {
166
- return __awaiter(this, void 0, void 0, function* () {
167
- const tables = {};
168
- const database = this.config.database;
169
- yield this.connect();
170
- try {
171
- // get the tables first
172
- const tablesResp = yield this.internalQuery({ sql: "SHOW TABLES;" }, { connect: false });
173
- const tableNames = tablesResp.map((obj) => obj[`Tables_in_${database}`] ||
174
- obj[`Tables_in_${database.toLowerCase()}`]);
175
- for (let tableName of tableNames) {
176
- const primaryKeys = [];
177
- const schema = {};
178
- const descResp = yield this.internalQuery({ sql: `DESCRIBE \`${tableName}\`;` }, { connect: false });
179
- for (let column of descResp) {
180
- const columnName = column.Field;
181
- if (column.Key === "PRI" &&
182
- primaryKeys.indexOf(column.Key) === -1) {
183
- primaryKeys.push(columnName);
184
- }
185
- const constraints = {
186
- presence: column.Null !== "YES",
187
- };
188
- const isAuto = typeof column.Extra === "string" &&
189
- (column.Extra === "auto_increment" ||
190
- column.Extra.toLowerCase().includes("generated"));
191
- schema[columnName] = Object.assign(Object.assign({ name: columnName, autocolumn: isAuto, constraints }, (0, utils_1.convertSqlType)(column.Type)), { externalType: column.Type });
192
- }
193
- if (!tables[tableName]) {
194
- tables[tableName] = {
195
- _id: (0, utils_1.buildExternalTableId)(datasourceId, tableName),
196
- primary: primaryKeys,
197
- name: tableName,
198
- schema,
199
- };
200
- }
201
- }
120
+ return next();
121
+ } });
122
+ }
123
+ getBindingIdentifier() {
124
+ return "?";
125
+ }
126
+ getStringConcat(parts) {
127
+ return `concat(${parts.join(", ")})`;
128
+ }
129
+ connect() {
130
+ return __awaiter(this, void 0, void 0, function* () {
131
+ this.client = yield mysql.createConnection(this.config);
132
+ });
133
+ }
134
+ disconnect() {
135
+ return __awaiter(this, void 0, void 0, function* () {
136
+ yield this.client.end();
137
+ });
138
+ }
139
+ internalQuery(query, opts = {
140
+ connect: true,
141
+ disableCoercion: false,
142
+ }) {
143
+ return __awaiter(this, void 0, void 0, function* () {
144
+ try {
145
+ if (opts === null || opts === void 0 ? void 0 : opts.connect) {
146
+ yield this.connect();
202
147
  }
203
- finally {
148
+ const baseBindings = query.bindings || [];
149
+ const bindings = (opts === null || opts === void 0 ? void 0 : opts.disableCoercion)
150
+ ? baseBindings
151
+ : bindingTypeCoerce(baseBindings);
152
+ // Node MySQL is callback based, so we must wrap our call in a promise
153
+ const response = yield this.client.query(query.sql, bindings);
154
+ return response[0];
155
+ }
156
+ finally {
157
+ if (opts === null || opts === void 0 ? void 0 : opts.connect) {
204
158
  yield this.disconnect();
205
159
  }
206
- const final = (0, utils_1.finaliseExternalTables)(tables, entities);
207
- this.tables = final.tables;
208
- this.schemaErrors = final.errors;
209
- });
210
- }
211
- create(query) {
212
- return __awaiter(this, void 0, void 0, function* () {
213
- const results = yield this.internalQuery((0, utils_1.getSqlQuery)(query));
214
- return results.length ? results : [{ created: true }];
215
- });
216
- }
217
- read(query) {
218
- return __awaiter(this, void 0, void 0, function* () {
219
- return this.internalQuery((0, utils_1.getSqlQuery)(query));
220
- });
221
- }
222
- update(query) {
223
- return __awaiter(this, void 0, void 0, function* () {
224
- const results = yield this.internalQuery((0, utils_1.getSqlQuery)(query));
225
- return results.length ? results : [{ updated: true }];
226
- });
227
- }
228
- delete(query) {
229
- return __awaiter(this, void 0, void 0, function* () {
230
- const results = yield this.internalQuery((0, utils_1.getSqlQuery)(query));
231
- return results.length ? results : [{ deleted: true }];
232
- });
233
- }
234
- query(json) {
235
- return __awaiter(this, void 0, void 0, function* () {
236
- yield this.connect();
237
- try {
238
- const queryFn = (query) => this.internalQuery(query, { connect: false, disableCoercion: true });
239
- return yield this.queryWithReturning(json, queryFn);
240
- }
241
- finally {
242
- yield this.disconnect();
160
+ }
161
+ });
162
+ }
163
+ buildSchema(datasourceId, entities) {
164
+ return __awaiter(this, void 0, void 0, function* () {
165
+ const tables = {};
166
+ const database = this.config.database;
167
+ yield this.connect();
168
+ try {
169
+ // get the tables first
170
+ const tablesResp = yield this.internalQuery({ sql: "SHOW TABLES;" }, { connect: false });
171
+ const tableNames = tablesResp.map((obj) => obj[`Tables_in_${database}`] ||
172
+ obj[`Tables_in_${database.toLowerCase()}`]);
173
+ for (let tableName of tableNames) {
174
+ const primaryKeys = [];
175
+ const schema = {};
176
+ const descResp = yield this.internalQuery({ sql: `DESCRIBE \`${tableName}\`;` }, { connect: false });
177
+ for (let column of descResp) {
178
+ const columnName = column.Field;
179
+ if (column.Key === "PRI" && primaryKeys.indexOf(column.Key) === -1) {
180
+ primaryKeys.push(columnName);
181
+ }
182
+ const constraints = {
183
+ presence: column.Null !== "YES",
184
+ };
185
+ const isAuto = typeof column.Extra === "string" &&
186
+ (column.Extra === "auto_increment" ||
187
+ column.Extra.toLowerCase().includes("generated"));
188
+ schema[columnName] = Object.assign(Object.assign({ name: columnName, autocolumn: isAuto, constraints }, (0, utils_1.convertSqlType)(column.Type)), { externalType: column.Type });
189
+ }
190
+ if (!tables[tableName]) {
191
+ tables[tableName] = {
192
+ _id: (0, utils_1.buildExternalTableId)(datasourceId, tableName),
193
+ primary: primaryKeys,
194
+ name: tableName,
195
+ schema,
196
+ };
197
+ }
243
198
  }
244
- });
245
- }
199
+ }
200
+ finally {
201
+ yield this.disconnect();
202
+ }
203
+ const final = (0, utils_1.finaliseExternalTables)(tables, entities);
204
+ this.tables = final.tables;
205
+ this.schemaErrors = final.errors;
206
+ });
207
+ }
208
+ create(query) {
209
+ return __awaiter(this, void 0, void 0, function* () {
210
+ const results = yield this.internalQuery((0, utils_1.getSqlQuery)(query));
211
+ return results.length ? results : [{ created: true }];
212
+ });
213
+ }
214
+ read(query) {
215
+ return __awaiter(this, void 0, void 0, function* () {
216
+ return this.internalQuery((0, utils_1.getSqlQuery)(query));
217
+ });
246
218
  }
247
- module.exports = {
248
- schema: SCHEMA,
249
- integration: MySQLIntegration,
250
- };
251
- })(MySQLModule || (MySQLModule = {}));
219
+ update(query) {
220
+ return __awaiter(this, void 0, void 0, function* () {
221
+ const results = yield this.internalQuery((0, utils_1.getSqlQuery)(query));
222
+ return results.length ? results : [{ updated: true }];
223
+ });
224
+ }
225
+ delete(query) {
226
+ return __awaiter(this, void 0, void 0, function* () {
227
+ const results = yield this.internalQuery((0, utils_1.getSqlQuery)(query));
228
+ return results.length ? results : [{ deleted: true }];
229
+ });
230
+ }
231
+ query(json) {
232
+ return __awaiter(this, void 0, void 0, function* () {
233
+ yield this.connect();
234
+ try {
235
+ const queryFn = (query) => this.internalQuery(query, { connect: false, disableCoercion: true });
236
+ return yield this.queryWithReturning(json, queryFn);
237
+ }
238
+ finally {
239
+ yield this.disconnect();
240
+ }
241
+ });
242
+ }
243
+ }
244
+ exports.default = {
245
+ schema: SCHEMA,
246
+ integration: MySQLIntegration,
247
+ };