@budibase/server 2.6.19-alpha.1 → 2.6.19-alpha.11

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 (347) hide show
  1. package/.dockerignore +7 -6
  2. package/Dockerfile +16 -8
  3. package/builder/assets/{index.b9eeb2a8.js → index.7a65d631.js} +357 -349
  4. package/builder/assets/{index.07382a47.css → index.ec1c6a1a.css} +2 -2
  5. package/builder/index.html +2 -2
  6. package/client/manifest.json +5229 -0
  7. package/dist/automation.js +32190 -0
  8. package/dist/automation.js.map +7 -0
  9. package/dist/index.js +44363 -13
  10. package/dist/index.js.map +7 -0
  11. package/dist/query.js +24307 -0
  12. package/dist/query.js.map +7 -0
  13. package/jest.config.ts +3 -0
  14. package/nodemon.json +1 -1
  15. package/package.json +29 -13
  16. package/pm2.config.js +1 -1
  17. package/scripts/build.js +48 -0
  18. package/src/api/controllers/datasource.ts +16 -0
  19. package/src/api/controllers/static/index.ts +3 -3
  20. package/src/api/controllers/table/internal.ts +2 -6
  21. package/src/api/controllers/table/utils.ts +32 -1
  22. package/src/api/routes/datasource.ts +5 -0
  23. package/src/api/routes/static.ts +3 -1
  24. package/src/api/routes/tests/datasource.spec.ts +1 -1
  25. package/src/automations/actions.ts +5 -0
  26. package/src/automations/steps/openai.ts +105 -0
  27. package/src/automations/tests/openai.spec.ts +86 -0
  28. package/src/constants/index.ts +17 -16
  29. package/src/db/inMemoryView.ts +3 -1
  30. package/src/environment.ts +2 -0
  31. package/src/integration-test/postgres.spec.ts +47 -4
  32. package/src/integrations/base/sqlTable.ts +0 -1
  33. package/src/integrations/googlesheets.ts +11 -3
  34. package/src/integrations/microsoftSqlServer.ts +18 -2
  35. package/src/integrations/mysql.ts +27 -11
  36. package/src/integrations/oracle.ts +11 -1
  37. package/src/integrations/postgres.ts +27 -10
  38. package/src/integrations/tests/googlesheets.spec.ts +41 -9
  39. package/src/utilities/fileSystem/app.ts +1 -1
  40. package/src/utilities/fileSystem/clientLibrary.ts +8 -3
  41. package/src/utilities/fileSystem/filesystem.ts +3 -1
  42. package/tsconfig.build.json +9 -1
  43. package/tsconfig.json +1 -14
  44. package/dist/api/controllers/analytics.js +0 -46
  45. package/dist/api/controllers/apikeys.js +0 -72
  46. package/dist/api/controllers/application.js +0 -574
  47. package/dist/api/controllers/auth.js +0 -80
  48. package/dist/api/controllers/automation.js +0 -303
  49. package/dist/api/controllers/backup.js +0 -37
  50. package/dist/api/controllers/component.js +0 -59
  51. package/dist/api/controllers/datasource.js +0 -337
  52. package/dist/api/controllers/deploy/Deployment.js +0 -53
  53. package/dist/api/controllers/deploy/index.js +0 -198
  54. package/dist/api/controllers/dev.js +0 -146
  55. package/dist/api/controllers/integration.js +0 -28
  56. package/dist/api/controllers/layout.js +0 -49
  57. package/dist/api/controllers/metadata.js +0 -63
  58. package/dist/api/controllers/migrations.js +0 -29
  59. package/dist/api/controllers/ops.js +0 -40
  60. package/dist/api/controllers/permission.js +0 -162
  61. package/dist/api/controllers/plugin/file.js +0 -24
  62. package/dist/api/controllers/plugin/github.js +0 -69
  63. package/dist/api/controllers/plugin/index.js +0 -112
  64. package/dist/api/controllers/plugin/npm.js +0 -58
  65. package/dist/api/controllers/plugin/uploaders.js +0 -11
  66. package/dist/api/controllers/plugin/url.js +0 -24
  67. package/dist/api/controllers/plugin/utils.js +0 -27
  68. package/dist/api/controllers/public/applications.js +0 -146
  69. package/dist/api/controllers/public/mapping/applications.js +0 -29
  70. package/dist/api/controllers/public/mapping/index.js +0 -11
  71. package/dist/api/controllers/public/mapping/queries.js +0 -36
  72. package/dist/api/controllers/public/mapping/rows.js +0 -24
  73. package/dist/api/controllers/public/mapping/tables.js +0 -23
  74. package/dist/api/controllers/public/mapping/types.js +0 -2
  75. package/dist/api/controllers/public/mapping/users.js +0 -29
  76. package/dist/api/controllers/public/metrics.js +0 -113
  77. package/dist/api/controllers/public/queries.js +0 -58
  78. package/dist/api/controllers/public/rows.js +0 -120
  79. package/dist/api/controllers/public/tables.js +0 -95
  80. package/dist/api/controllers/public/users.js +0 -93
  81. package/dist/api/controllers/public/utils.js +0 -56
  82. package/dist/api/controllers/query/import/index.js +0 -87
  83. package/dist/api/controllers/query/import/sources/base/index.js +0 -75
  84. package/dist/api/controllers/query/import/sources/base/openapi.js +0 -42
  85. package/dist/api/controllers/query/import/sources/curl.js +0 -99
  86. package/dist/api/controllers/query/import/sources/openapi2.js +0 -145
  87. package/dist/api/controllers/query/import/sources/openapi3.js +0 -177
  88. package/dist/api/controllers/query/import/sources/tests/openapi2/data/crud/crud.json +0 -253
  89. package/dist/api/controllers/query/import/sources/tests/openapi2/data/petstore/petstore.json +0 -1054
  90. package/dist/api/controllers/query/import/sources/tests/openapi3/data/crud/crud.json +0 -253
  91. package/dist/api/controllers/query/import/sources/tests/openapi3/data/petstore/petstore.json +0 -1225
  92. package/dist/api/controllers/query/index.js +0 -299
  93. package/dist/api/controllers/query/validation.js +0 -53
  94. package/dist/api/controllers/role.js +0 -109
  95. package/dist/api/controllers/routing.js +0 -105
  96. package/dist/api/controllers/row/ExternalRequest.js +0 -683
  97. package/dist/api/controllers/row/external.js +0 -339
  98. package/dist/api/controllers/row/index.js +0 -203
  99. package/dist/api/controllers/row/internal.js +0 -509
  100. package/dist/api/controllers/row/internalSearch.js +0 -28
  101. package/dist/api/controllers/row/staticFormula.js +0 -165
  102. package/dist/api/controllers/row/utils.js +0 -183
  103. package/dist/api/controllers/screen.js +0 -110
  104. package/dist/api/controllers/script.js +0 -30
  105. package/dist/api/controllers/static/index.js +0 -268
  106. package/dist/api/controllers/table/bulkFormula.js +0 -173
  107. package/dist/api/controllers/table/external.js +0 -279
  108. package/dist/api/controllers/table/index.js +0 -179
  109. package/dist/api/controllers/table/internal.js +0 -197
  110. package/dist/api/controllers/table/utils.js +0 -379
  111. package/dist/api/controllers/templates.js +0 -56
  112. package/dist/api/controllers/user.js +0 -124
  113. package/dist/api/controllers/view/exporters.js +0 -46
  114. package/dist/api/controllers/view/index.js +0 -193
  115. package/dist/api/controllers/view/utils.js +0 -177
  116. package/dist/api/controllers/view/viewBuilder.js +0 -158
  117. package/dist/api/controllers/webhook.js +0 -134
  118. package/dist/api/index.js +0 -55
  119. package/dist/api/routes/analytics.js +0 -34
  120. package/dist/api/routes/apikeys.js +0 -37
  121. package/dist/api/routes/application.js +0 -48
  122. package/dist/api/routes/auth.js +0 -33
  123. package/dist/api/routes/automation.js +0 -50
  124. package/dist/api/routes/backup.js +0 -35
  125. package/dist/api/routes/component.js +0 -35
  126. package/dist/api/routes/datasource.js +0 -44
  127. package/dist/api/routes/deploy.js +0 -37
  128. package/dist/api/routes/dev.js +0 -49
  129. package/dist/api/routes/index.js +0 -75
  130. package/dist/api/routes/integration.js +0 -37
  131. package/dist/api/routes/layout.js +0 -37
  132. package/dist/api/routes/metadata.js +0 -40
  133. package/dist/api/routes/migrations.js +0 -36
  134. package/dist/api/routes/ops.js +0 -52
  135. package/dist/api/routes/permission.js +0 -44
  136. package/dist/api/routes/plugin.js +0 -39
  137. package/dist/api/routes/public/applications.js +0 -174
  138. package/dist/api/routes/public/index.js +0 -140
  139. package/dist/api/routes/public/metrics.js +0 -30
  140. package/dist/api/routes/public/middleware/mapper.js +0 -97
  141. package/dist/api/routes/public/queries.js +0 -72
  142. package/dist/api/routes/public/rows.js +0 -158
  143. package/dist/api/routes/public/tables.js +0 -152
  144. package/dist/api/routes/public/users.js +0 -135
  145. package/dist/api/routes/public/utils/Endpoint.js +0 -36
  146. package/dist/api/routes/query.js +0 -47
  147. package/dist/api/routes/role.js +0 -40
  148. package/dist/api/routes/routing.js +0 -39
  149. package/dist/api/routes/row.js +0 -239
  150. package/dist/api/routes/screen.js +0 -39
  151. package/dist/api/routes/script.js +0 -35
  152. package/dist/api/routes/static.js +0 -80
  153. package/dist/api/routes/table.js +0 -163
  154. package/dist/api/routes/templates.js +0 -37
  155. package/dist/api/routes/user.js +0 -43
  156. package/dist/api/routes/utils/validators.js +0 -238
  157. package/dist/api/routes/view.js +0 -42
  158. package/dist/api/routes/webhook.js +0 -43
  159. package/dist/app.js +0 -132
  160. package/dist/automations/actions.js +0 -137
  161. package/dist/automations/automationUtils.js +0 -173
  162. package/dist/automations/bullboard.js +0 -71
  163. package/dist/automations/index.js +0 -43
  164. package/dist/automations/logging/index.js +0 -53
  165. package/dist/automations/steps/bash.js +0 -111
  166. package/dist/automations/steps/createRow.js +0 -108
  167. package/dist/automations/steps/delay.js +0 -53
  168. package/dist/automations/steps/deleteRow.js +0 -96
  169. package/dist/automations/steps/discord.js +0 -116
  170. package/dist/automations/steps/executeQuery.js +0 -134
  171. package/dist/automations/steps/executeScript.js +0 -106
  172. package/dist/automations/steps/filter.js +0 -112
  173. package/dist/automations/steps/loop.js +0 -54
  174. package/dist/automations/steps/make.js +0 -134
  175. package/dist/automations/steps/outgoingWebhook.js +0 -166
  176. package/dist/automations/steps/queryRows.js +0 -216
  177. package/dist/automations/steps/sendSmtpEmail.js +0 -115
  178. package/dist/automations/steps/serverLog.js +0 -65
  179. package/dist/automations/steps/slack.js +0 -98
  180. package/dist/automations/steps/updateRow.js +0 -144
  181. package/dist/automations/steps/utils.js +0 -56
  182. package/dist/automations/steps/zapier.js +0 -130
  183. package/dist/automations/triggerInfo/app.js +0 -36
  184. package/dist/automations/triggerInfo/cron.js +0 -35
  185. package/dist/automations/triggerInfo/index.js +0 -40
  186. package/dist/automations/triggerInfo/rowDeleted.js +0 -36
  187. package/dist/automations/triggerInfo/rowSaved.js +0 -44
  188. package/dist/automations/triggerInfo/rowUpdated.js +0 -44
  189. package/dist/automations/triggerInfo/webhook.js +0 -40
  190. package/dist/automations/triggers.js +0 -181
  191. package/dist/automations/utils.js +0 -275
  192. package/dist/constants/definitions.js +0 -2
  193. package/dist/constants/index.js +0 -181
  194. package/dist/constants/layouts.js +0 -148
  195. package/dist/constants/screens.js +0 -51
  196. package/dist/db/defaultData/datasource_bb_default.js +0 -574
  197. package/dist/db/defaultData/employeeImport.js +0 -155
  198. package/dist/db/defaultData/expensesImport.js +0 -117
  199. package/dist/db/defaultData/inventoryImport.js +0 -109
  200. package/dist/db/defaultData/jobsImport.js +0 -152
  201. package/dist/db/dynamoClient.js +0 -124
  202. package/dist/db/inMemoryView.js +0 -62
  203. package/dist/db/index.js +0 -43
  204. package/dist/db/linkedRows/LinkController.js +0 -392
  205. package/dist/db/linkedRows/LinkDocument.js +0 -33
  206. package/dist/db/linkedRows/index.js +0 -206
  207. package/dist/db/linkedRows/linkUtils.js +0 -131
  208. package/dist/db/newid.js +0 -7
  209. package/dist/db/utils.js +0 -248
  210. package/dist/db/views/staticViews.js +0 -144
  211. package/dist/ddApm.js +0 -11
  212. package/dist/definitions/automations.js +0 -8
  213. package/dist/definitions/common.js +0 -2
  214. package/dist/definitions/datasource.js +0 -7
  215. package/dist/definitions/openapi.js +0 -6
  216. package/dist/environment.js +0 -109
  217. package/dist/events/AutomationEmitter.js +0 -53
  218. package/dist/events/BudibaseEmitter.js +0 -25
  219. package/dist/events/docUpdates/index.js +0 -17
  220. package/dist/events/docUpdates/processors.js +0 -18
  221. package/dist/events/docUpdates/syncUsers.js +0 -49
  222. package/dist/events/index.js +0 -11
  223. package/dist/events/utils.js +0 -43
  224. package/dist/integrations/airtable.js +0 -173
  225. package/dist/integrations/arangodb.js +0 -119
  226. package/dist/integrations/base/query.js +0 -32
  227. package/dist/integrations/base/sql.js +0 -600
  228. package/dist/integrations/base/sqlTable.js +0 -167
  229. package/dist/integrations/base/types.js +0 -2
  230. package/dist/integrations/couchdb.js +0 -140
  231. package/dist/integrations/dynamodb.js +0 -210
  232. package/dist/integrations/elasticsearch.js +0 -201
  233. package/dist/integrations/firebase.js +0 -189
  234. package/dist/integrations/googlesheets.js +0 -484
  235. package/dist/integrations/index.js +0 -138
  236. package/dist/integrations/microsoftSqlServer.js +0 -289
  237. package/dist/integrations/mongodb.js +0 -630
  238. package/dist/integrations/mysql.js +0 -272
  239. package/dist/integrations/oracle.js +0 -404
  240. package/dist/integrations/postgres.js +0 -319
  241. package/dist/integrations/queries/sql.js +0 -84
  242. package/dist/integrations/redis.js +0 -187
  243. package/dist/integrations/rest.js +0 -400
  244. package/dist/integrations/s3.js +0 -256
  245. package/dist/integrations/snowflake.js +0 -114
  246. package/dist/integrations/utils.js +0 -295
  247. package/dist/middleware/appInfo.js +0 -22
  248. package/dist/middleware/authorized.js +0 -112
  249. package/dist/middleware/builder.js +0 -93
  250. package/dist/middleware/currentapp.js +0 -103
  251. package/dist/middleware/joi-validator.js +0 -43
  252. package/dist/middleware/publicApi.js +0 -25
  253. package/dist/middleware/resourceId.js +0 -59
  254. package/dist/middleware/selfhost.js +0 -24
  255. package/dist/middleware/utils.js +0 -8
  256. package/dist/migrations/functions/appUrls.js +0 -42
  257. package/dist/migrations/functions/backfill/app/automations.js +0 -31
  258. package/dist/migrations/functions/backfill/app/datasources.js +0 -28
  259. package/dist/migrations/functions/backfill/app/layouts.js +0 -33
  260. package/dist/migrations/functions/backfill/app/queries.js +0 -49
  261. package/dist/migrations/functions/backfill/app/roles.js +0 -28
  262. package/dist/migrations/functions/backfill/app/screens.js +0 -28
  263. package/dist/migrations/functions/backfill/app/tables.js +0 -37
  264. package/dist/migrations/functions/backfill/app.js +0 -176
  265. package/dist/migrations/functions/backfill/global/configs.js +0 -67
  266. package/dist/migrations/functions/backfill/global/quotas.js +0 -60
  267. package/dist/migrations/functions/backfill/global/users.js +0 -50
  268. package/dist/migrations/functions/backfill/global.js +0 -205
  269. package/dist/migrations/functions/backfill/index.js +0 -32
  270. package/dist/migrations/functions/backfill/installation.js +0 -80
  271. package/dist/migrations/functions/syncQuotas.js +0 -52
  272. package/dist/migrations/functions/tableSettings.js +0 -130
  273. package/dist/migrations/functions/usageQuotas/index.js +0 -16
  274. package/dist/migrations/functions/usageQuotas/syncApps.js +0 -24
  275. package/dist/migrations/functions/usageQuotas/syncPlugins.js +0 -23
  276. package/dist/migrations/functions/usageQuotas/syncRows.js +0 -33
  277. package/dist/migrations/functions/usageQuotas/syncUsers.js +0 -21
  278. package/dist/migrations/functions/userEmailViewCasing.js +0 -24
  279. package/dist/migrations/index.js +0 -111
  280. package/dist/migrations/tests/helpers.js +0 -72
  281. package/dist/migrations/tests/structures.js +0 -37
  282. package/dist/sdk/app/applications/index.js +0 -28
  283. package/dist/sdk/app/applications/sync.js +0 -164
  284. package/dist/sdk/app/applications/utils.js +0 -21
  285. package/dist/sdk/app/automations/index.js +0 -29
  286. package/dist/sdk/app/automations/webhook.js +0 -54
  287. package/dist/sdk/app/backups/constants.js +0 -6
  288. package/dist/sdk/app/backups/exports.js +0 -160
  289. package/dist/sdk/app/backups/imports.js +0 -170
  290. package/dist/sdk/app/backups/index.js +0 -29
  291. package/dist/sdk/app/backups/statistics.js +0 -73
  292. package/dist/sdk/app/datasources/datasources.js +0 -173
  293. package/dist/sdk/app/datasources/index.js +0 -27
  294. package/dist/sdk/app/queries/index.js +0 -27
  295. package/dist/sdk/app/queries/queries.js +0 -60
  296. package/dist/sdk/app/rows/attachments.js +0 -61
  297. package/dist/sdk/app/rows/index.js +0 -28
  298. package/dist/sdk/app/rows/rows.js +0 -30
  299. package/dist/sdk/app/tables/index.js +0 -65
  300. package/dist/sdk/index.js +0 -27
  301. package/dist/sdk/plugins/index.js +0 -27
  302. package/dist/sdk/plugins/plugins.js +0 -53
  303. package/dist/sdk/users/index.js +0 -27
  304. package/dist/sdk/users/utils.js +0 -87
  305. package/dist/sdk/utils/index.js +0 -29
  306. package/dist/startup.js +0 -158
  307. package/dist/threads/automation.js +0 -450
  308. package/dist/threads/definitions.js +0 -2
  309. package/dist/threads/index.js +0 -140
  310. package/dist/threads/query.js +0 -265
  311. package/dist/threads/utils.js +0 -120
  312. package/dist/tsconfig.build.tsbuildinfo +0 -1
  313. package/dist/utilities/appDirectoryTemplate/package.json +0 -10
  314. package/dist/utilities/budibaseDir.js +0 -5
  315. package/dist/utilities/centralPath.js +0 -27
  316. package/dist/utilities/csv.js +0 -33
  317. package/dist/utilities/fileSystem/app.js +0 -88
  318. package/dist/utilities/fileSystem/clientLibrary.js +0 -138
  319. package/dist/utilities/fileSystem/filesystem.js +0 -180
  320. package/dist/utilities/fileSystem/index.js +0 -21
  321. package/dist/utilities/fileSystem/plugin.js +0 -76
  322. package/dist/utilities/fileSystem/processor.js +0 -34
  323. package/dist/utilities/fileSystem/template.js +0 -47
  324. package/dist/utilities/global.js +0 -149
  325. package/dist/utilities/index.js +0 -143
  326. package/dist/utilities/redis.js +0 -117
  327. package/dist/utilities/retry.js +0 -30
  328. package/dist/utilities/routing/index.js +0 -39
  329. package/dist/utilities/rowProcessor/index.js +0 -282
  330. package/dist/utilities/rowProcessor/map.js +0 -116
  331. package/dist/utilities/rowProcessor/utils.js +0 -87
  332. package/dist/utilities/schema.js +0 -112
  333. package/dist/utilities/scriptRunner.js +0 -26
  334. package/dist/utilities/security.js +0 -57
  335. package/dist/utilities/statusCodes.js +0 -9
  336. package/dist/utilities/usageQuota/rows.js +0 -88
  337. package/dist/utilities/usageQuota/usageQuoteReset.js +0 -16
  338. package/dist/utilities/users.js +0 -57
  339. package/dist/utilities/workerRequests.js +0 -171
  340. package/dist/watch.js +0 -53
  341. package/dist/websockets/client.js +0 -14
  342. package/dist/websockets/grid.js +0 -60
  343. package/dist/websockets/index.js +0 -17
  344. package/dist/websockets/websocket.js +0 -78
  345. /package/dist/{api/controllers/static/templates/BudibaseApp.svelte → BudibaseApp-Y5NZEDTC.svelte} +0 -0
  346. /package/dist/{api/controllers/static/templates/app.hbs → app.hbs} +0 -0
  347. /package/dist/{api/controllers/static/templates/preview.hbs → preview.hbs} +0 -0
@@ -1,272 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- const types_1 = require("@budibase/types");
16
- const utils_1 = require("./utils");
17
- const dayjs_1 = __importDefault(require("dayjs"));
18
- const utilities_1 = require("../utilities");
19
- const sql_1 = __importDefault(require("./base/sql"));
20
- const promise_1 = __importDefault(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
- features: [types_1.DatasourceFeature.CONNECTION_CHECKING],
28
- datasource: {
29
- host: {
30
- type: types_1.DatasourceFieldType.STRING,
31
- default: "localhost",
32
- required: true,
33
- },
34
- port: {
35
- type: types_1.DatasourceFieldType.NUMBER,
36
- default: 3306,
37
- required: false,
38
- },
39
- user: {
40
- type: types_1.DatasourceFieldType.STRING,
41
- default: "root",
42
- required: true,
43
- },
44
- password: {
45
- type: types_1.DatasourceFieldType.PASSWORD,
46
- default: "root",
47
- required: true,
48
- },
49
- database: {
50
- type: types_1.DatasourceFieldType.STRING,
51
- required: true,
52
- },
53
- ssl: {
54
- type: types_1.DatasourceFieldType.OBJECT,
55
- required: false,
56
- },
57
- rejectUnauthorized: {
58
- type: types_1.DatasourceFieldType.BOOLEAN,
59
- default: true,
60
- required: false,
61
- },
62
- },
63
- query: {
64
- create: {
65
- type: types_1.QueryType.SQL,
66
- },
67
- read: {
68
- type: types_1.QueryType.SQL,
69
- },
70
- update: {
71
- type: types_1.QueryType.SQL,
72
- },
73
- delete: {
74
- type: types_1.QueryType.SQL,
75
- },
76
- },
77
- };
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;
83
- }
84
- const matches = binding.match(utilities_1.NUMBER_REGEX);
85
- // check if number first
86
- if (matches && matches[0] !== "" && !isNaN(Number(matches[0]))) {
87
- bindings[i] = parseFloat(binding);
88
- }
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) &&
92
- (0, dayjs_1.default)(binding).isValid() &&
93
- !binding.includes(",")) {
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
- typeof config.ssl !== "string") {
113
- config.ssl.rejectUnauthorized = config.rejectUnauthorized;
114
- }
115
- // @ts-ignore
116
- delete config.rejectUnauthorized;
117
- this.config = Object.assign(Object.assign({}, config), { multipleStatements: true, typeCast: function (field, next) {
118
- var _a;
119
- if (field.type == "DATETIME" ||
120
- field.type === "DATE" ||
121
- field.type === "TIMESTAMP" ||
122
- field.type === "LONGLONG") {
123
- return field.string();
124
- }
125
- if (field.type === "BIT" && field.length === 1) {
126
- return (_a = field.buffer()) === null || _a === void 0 ? void 0 : _a[0];
127
- }
128
- return next();
129
- } });
130
- }
131
- testConnection() {
132
- return __awaiter(this, void 0, void 0, function* () {
133
- const response = {
134
- connected: false,
135
- };
136
- try {
137
- const [result] = yield this.internalQuery({ sql: "SELECT 1+1 AS checkRes" }, { connect: true });
138
- response.connected = (result === null || result === void 0 ? void 0 : result.checkRes) == 2;
139
- }
140
- catch (e) {
141
- response.error = e.message;
142
- }
143
- return response;
144
- });
145
- }
146
- getBindingIdentifier() {
147
- return "?";
148
- }
149
- getStringConcat(parts) {
150
- return `concat(${parts.join(", ")})`;
151
- }
152
- connect() {
153
- return __awaiter(this, void 0, void 0, function* () {
154
- this.client = yield promise_1.default.createConnection(this.config);
155
- });
156
- }
157
- disconnect() {
158
- return __awaiter(this, void 0, void 0, function* () {
159
- yield this.client.end();
160
- });
161
- }
162
- internalQuery(query, opts = {
163
- connect: true,
164
- disableCoercion: false,
165
- }) {
166
- return __awaiter(this, void 0, void 0, function* () {
167
- try {
168
- if (opts === null || opts === void 0 ? void 0 : opts.connect) {
169
- yield this.connect();
170
- }
171
- const baseBindings = query.bindings || [];
172
- const bindings = (opts === null || opts === void 0 ? void 0 : opts.disableCoercion)
173
- ? baseBindings
174
- : bindingTypeCoerce(baseBindings);
175
- // Node MySQL is callback based, so we must wrap our call in a promise
176
- const response = yield this.client.query(query.sql, bindings);
177
- return response[0];
178
- }
179
- finally {
180
- if ((opts === null || opts === void 0 ? void 0 : opts.connect) && this.client) {
181
- yield this.disconnect();
182
- }
183
- }
184
- });
185
- }
186
- buildSchema(datasourceId, entities) {
187
- return __awaiter(this, void 0, void 0, function* () {
188
- const tables = {};
189
- const database = this.config.database;
190
- yield this.connect();
191
- try {
192
- // get the tables first
193
- const tablesResp = yield this.internalQuery({ sql: "SHOW TABLES;" }, { connect: false });
194
- const tableNames = tablesResp.map((obj) => obj[`Tables_in_${database}`] ||
195
- obj[`Tables_in_${database.toLowerCase()}`]);
196
- for (let tableName of tableNames) {
197
- const primaryKeys = [];
198
- const schema = {};
199
- const descResp = yield this.internalQuery({ sql: `DESCRIBE \`${tableName}\`;` }, { connect: false });
200
- for (let column of descResp) {
201
- const columnName = column.Field;
202
- if (column.Key === "PRI" && primaryKeys.indexOf(column.Key) === -1) {
203
- primaryKeys.push(columnName);
204
- }
205
- const hasDefault = column.Default != null;
206
- const isAuto = typeof column.Extra === "string" &&
207
- (column.Extra === "auto_increment" ||
208
- column.Extra.toLowerCase().includes("generated"));
209
- const required = column.Null !== "YES";
210
- const constraints = {
211
- presence: required && !isAuto && !hasDefault,
212
- };
213
- schema[columnName] = Object.assign(Object.assign({ name: columnName, autocolumn: isAuto, constraints }, (0, utils_1.convertSqlType)(column.Type)), { externalType: column.Type });
214
- }
215
- if (!tables[tableName]) {
216
- tables[tableName] = {
217
- _id: (0, utils_1.buildExternalTableId)(datasourceId, tableName),
218
- primary: primaryKeys,
219
- name: tableName,
220
- schema,
221
- };
222
- }
223
- }
224
- }
225
- finally {
226
- yield this.disconnect();
227
- }
228
- const final = (0, utils_1.finaliseExternalTables)(tables, entities);
229
- this.tables = final.tables;
230
- this.schemaErrors = final.errors;
231
- });
232
- }
233
- create(query) {
234
- return __awaiter(this, void 0, void 0, function* () {
235
- const results = yield this.internalQuery((0, utils_1.getSqlQuery)(query));
236
- return results.length ? results : [{ created: true }];
237
- });
238
- }
239
- read(query) {
240
- return __awaiter(this, void 0, void 0, function* () {
241
- return this.internalQuery((0, utils_1.getSqlQuery)(query));
242
- });
243
- }
244
- update(query) {
245
- return __awaiter(this, void 0, void 0, function* () {
246
- const results = yield this.internalQuery((0, utils_1.getSqlQuery)(query));
247
- return results.length ? results : [{ updated: true }];
248
- });
249
- }
250
- delete(query) {
251
- return __awaiter(this, void 0, void 0, function* () {
252
- const results = yield this.internalQuery((0, utils_1.getSqlQuery)(query));
253
- return results.length ? results : [{ deleted: true }];
254
- });
255
- }
256
- query(json) {
257
- return __awaiter(this, void 0, void 0, function* () {
258
- yield this.connect();
259
- try {
260
- const queryFn = (query) => this.internalQuery(query, { connect: false, disableCoercion: true });
261
- return yield this.queryWithReturning(json, queryFn);
262
- }
263
- finally {
264
- yield this.disconnect();
265
- }
266
- });
267
- }
268
- }
269
- exports.default = {
270
- schema: SCHEMA,
271
- integration: MySQLIntegration,
272
- };
@@ -1,404 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- const types_1 = require("@budibase/types");
16
- const utils_1 = require("./utils");
17
- const sql_1 = __importDefault(require("./base/sql"));
18
- const constants_1 = require("../constants");
19
- let oracledb;
20
- try {
21
- oracledb = require("oracledb");
22
- oracledb.outFormat = oracledb.OUT_FORMAT_OBJECT;
23
- }
24
- catch (err) {
25
- console.log("ORACLEDB is not installed");
26
- }
27
- const SCHEMA = {
28
- docs: "https://github.com/oracle/node-oracledb",
29
- plus: true,
30
- friendlyName: "Oracle",
31
- type: "Relational",
32
- description: "Oracle Database is an object-relational database management system developed by Oracle Corporation",
33
- features: [types_1.DatasourceFeature.CONNECTION_CHECKING],
34
- datasource: {
35
- host: {
36
- type: types_1.DatasourceFieldType.STRING,
37
- default: "localhost",
38
- required: true,
39
- },
40
- port: {
41
- type: types_1.DatasourceFieldType.NUMBER,
42
- required: true,
43
- default: 1521,
44
- },
45
- database: {
46
- type: types_1.DatasourceFieldType.STRING,
47
- required: true,
48
- display: "Service Name",
49
- },
50
- user: {
51
- type: types_1.DatasourceFieldType.STRING,
52
- required: true,
53
- },
54
- password: {
55
- type: types_1.DatasourceFieldType.PASSWORD,
56
- required: true,
57
- },
58
- },
59
- query: {
60
- create: {
61
- type: types_1.QueryType.SQL,
62
- },
63
- read: {
64
- type: types_1.QueryType.SQL,
65
- },
66
- update: {
67
- type: types_1.QueryType.SQL,
68
- },
69
- delete: {
70
- type: types_1.QueryType.SQL,
71
- },
72
- },
73
- };
74
- const UNSUPPORTED_TYPES = ["BLOB", "CLOB", "NCLOB"];
75
- const OracleContraintTypes = {
76
- PRIMARY: "P",
77
- NOT_NULL_OR_CHECK: "C",
78
- FOREIGN_KEY: "R",
79
- UNIQUE: "U",
80
- };
81
- class OracleIntegration extends sql_1.default {
82
- constructor(config) {
83
- super(utils_1.SqlClient.ORACLE);
84
- this.index = 1;
85
- this.tables = {};
86
- this.schemaErrors = {};
87
- this.COLUMNS_SQL = `
88
- SELECT
89
- tabs.table_name,
90
- cols.column_name,
91
- cols.data_type,
92
- cols.data_default,
93
- cols.column_id,
94
- cons.constraint_name,
95
- cons.constraint_type,
96
- cons.r_constraint_name,
97
- cons.search_condition
98
- FROM
99
- user_tables tabs
100
- JOIN
101
- user_tab_columns cols
102
- ON tabs.table_name = cols.table_name
103
- LEFT JOIN
104
- user_cons_columns col_cons
105
- ON cols.column_name = col_cons.column_name
106
- AND cols.table_name = col_cons.table_name
107
- LEFT JOIN
108
- user_constraints cons
109
- ON col_cons.constraint_name = cons.constraint_name
110
- AND cons.table_name = cols.table_name
111
- WHERE
112
- (cons.status = 'ENABLED'
113
- OR cons.status IS NULL)
114
- `;
115
- this.getConnection = () => __awaiter(this, void 0, void 0, function* () {
116
- //connectString : "(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))(CONNECT_DATA =(SID= ORCL)))"
117
- const connectString = `${this.config.host}:${this.config.port || 1521}/${this.config.database}`;
118
- const attributes = {
119
- user: this.config.user,
120
- password: this.config.password,
121
- connectString,
122
- };
123
- return oracledb.getConnection(attributes);
124
- });
125
- this.config = config;
126
- }
127
- getBindingIdentifier() {
128
- return `:${this.index++}`;
129
- }
130
- getStringConcat(parts) {
131
- return parts.join(" || ");
132
- }
133
- static isInstalled() {
134
- return oracledb != null;
135
- }
136
- /**
137
- * Map the flat tabular columns and constraints data into a nested object
138
- */
139
- mapColumns(result) {
140
- const oracleTables = {};
141
- if (result.rows) {
142
- result.rows.forEach(row => {
143
- const tableName = row.TABLE_NAME;
144
- const columnName = row.COLUMN_NAME;
145
- const dataType = row.DATA_TYPE;
146
- const dataDefault = row.DATA_DEFAULT;
147
- const columnId = row.COLUMN_ID;
148
- const constraintName = row.CONSTRAINT_NAME;
149
- const constraintType = row.CONSTRAINT_TYPE;
150
- const relatedConstraintName = row.R_CONSTRAINT_NAME;
151
- const searchCondition = row.SEARCH_CONDITION;
152
- let table = oracleTables[tableName];
153
- if (!table) {
154
- table = {
155
- name: tableName,
156
- columns: {},
157
- };
158
- oracleTables[tableName] = table;
159
- }
160
- let column = table.columns[columnName];
161
- if (!column) {
162
- column = {
163
- name: columnName,
164
- type: dataType,
165
- default: dataDefault,
166
- id: columnId,
167
- constraints: {},
168
- };
169
- table.columns[columnName] = column;
170
- }
171
- if (constraintName && constraintType) {
172
- let constraint = column.constraints[constraintName];
173
- if (!constraint) {
174
- constraint = {
175
- name: constraintName,
176
- type: constraintType,
177
- relatedConstraintName: relatedConstraintName,
178
- searchCondition: searchCondition,
179
- };
180
- }
181
- column.constraints[constraintName] = constraint;
182
- }
183
- });
184
- }
185
- return oracleTables;
186
- }
187
- static isSupportedColumn(column) {
188
- return !UNSUPPORTED_TYPES.includes(column.type);
189
- }
190
- static isAutoColumn(column) {
191
- return !!(column.default && column.default.toLowerCase().includes("nextval"));
192
- }
193
- /**
194
- * No native boolean in oracle. Best we can do is to check if a manual 1 or 0 number constraint has been set up
195
- * This matches the default behaviour for generating DDL used in knex.
196
- */
197
- isBooleanType(column) {
198
- return (column.type.toLowerCase() === "number" &&
199
- Object.values(column.constraints).filter(c => {
200
- if (c.type === OracleContraintTypes.NOT_NULL_OR_CHECK &&
201
- c.searchCondition) {
202
- const condition = c.searchCondition
203
- .replace(/\s/g, "") // remove spaces
204
- .replace(/[']+/g, ""); // remove quotes
205
- if (condition.includes("in(0,1)") || condition.includes("in(1,0)")) {
206
- return true;
207
- }
208
- }
209
- return false;
210
- }).length > 0);
211
- }
212
- internalConvertType(column) {
213
- if (this.isBooleanType(column)) {
214
- return { type: constants_1.FieldTypes.BOOLEAN };
215
- }
216
- return (0, utils_1.convertSqlType)(column.type);
217
- }
218
- /**
219
- * Fetches the tables from the oracle table and assigns them to the datasource.
220
- * @param {*} datasourceId - datasourceId to fetch
221
- * @param entities - the tables that are to be built
222
- */
223
- buildSchema(datasourceId, entities) {
224
- return __awaiter(this, void 0, void 0, function* () {
225
- const columnsResponse = yield this.internalQuery({
226
- sql: this.COLUMNS_SQL,
227
- });
228
- const oracleTables = this.mapColumns(columnsResponse);
229
- const tables = {};
230
- // iterate each table
231
- Object.values(oracleTables).forEach(oracleTable => {
232
- let table = tables[oracleTable.name];
233
- if (!table) {
234
- table = {
235
- _id: (0, utils_1.buildExternalTableId)(datasourceId, oracleTable.name),
236
- primary: [],
237
- name: oracleTable.name,
238
- schema: {},
239
- };
240
- tables[oracleTable.name] = table;
241
- }
242
- // iterate each column on the table
243
- Object.values(oracleTable.columns)
244
- // remove columns that we can't read / save
245
- .filter(oracleColumn => OracleIntegration.isSupportedColumn(oracleColumn))
246
- // match the order of the columns in the db
247
- .sort((c1, c2) => c1.id - c2.id)
248
- .forEach(oracleColumn => {
249
- const columnName = oracleColumn.name;
250
- let fieldSchema = table.schema[columnName];
251
- if (!fieldSchema) {
252
- fieldSchema = Object.assign({ autocolumn: OracleIntegration.isAutoColumn(oracleColumn), name: columnName, constraints: {
253
- presence: false,
254
- } }, this.internalConvertType(oracleColumn));
255
- table.schema[columnName] = fieldSchema;
256
- }
257
- // iterate each constraint on the column
258
- Object.values(oracleColumn.constraints).forEach(oracleConstraint => {
259
- if (oracleConstraint.type === OracleContraintTypes.PRIMARY) {
260
- table.primary.push(columnName);
261
- }
262
- else if (oracleConstraint.type === OracleContraintTypes.NOT_NULL_OR_CHECK) {
263
- table.schema[columnName].constraints = {
264
- presence: true,
265
- };
266
- }
267
- });
268
- });
269
- });
270
- const final = (0, utils_1.finaliseExternalTables)(tables, entities);
271
- this.tables = final.tables;
272
- this.schemaErrors = final.errors;
273
- });
274
- }
275
- testConnection() {
276
- return __awaiter(this, void 0, void 0, function* () {
277
- const response = {
278
- connected: false,
279
- };
280
- let connection;
281
- try {
282
- connection = yield this.getConnection();
283
- response.connected = true;
284
- }
285
- catch (err) {
286
- response.connected = false;
287
- response.error = err.message;
288
- }
289
- finally {
290
- if (connection) {
291
- try {
292
- yield connection.close();
293
- }
294
- catch (err) {
295
- response.connected = false;
296
- response.error = err.message;
297
- }
298
- }
299
- }
300
- return response;
301
- });
302
- }
303
- internalQuery(query) {
304
- return __awaiter(this, void 0, void 0, function* () {
305
- let connection;
306
- try {
307
- this.index = 1;
308
- connection = yield this.getConnection();
309
- const options = { autoCommit: true };
310
- const bindings = query.bindings || [];
311
- return yield connection.execute(query.sql, bindings, options);
312
- }
313
- finally {
314
- if (connection) {
315
- try {
316
- yield connection.close();
317
- }
318
- catch (err) {
319
- console.error(err);
320
- }
321
- }
322
- }
323
- });
324
- }
325
- create(query) {
326
- return __awaiter(this, void 0, void 0, function* () {
327
- const response = yield this.internalQuery((0, utils_1.getSqlQuery)(query));
328
- return response.rows && response.rows.length
329
- ? response.rows
330
- : [{ created: true }];
331
- });
332
- }
333
- read(query) {
334
- return __awaiter(this, void 0, void 0, function* () {
335
- const response = yield this.internalQuery((0, utils_1.getSqlQuery)(query));
336
- return response.rows ? response.rows : [];
337
- });
338
- }
339
- update(query) {
340
- return __awaiter(this, void 0, void 0, function* () {
341
- const response = yield this.internalQuery((0, utils_1.getSqlQuery)(query));
342
- return response.rows && response.rows.length
343
- ? response.rows
344
- : [{ updated: true }];
345
- });
346
- }
347
- delete(query) {
348
- return __awaiter(this, void 0, void 0, function* () {
349
- const response = yield this.internalQuery((0, utils_1.getSqlQuery)(query));
350
- return response.rows && response.rows.length
351
- ? response.rows
352
- : [{ deleted: true }];
353
- });
354
- }
355
- query(json) {
356
- var _a, _b, _c;
357
- return __awaiter(this, void 0, void 0, function* () {
358
- const operation = this._operation(json);
359
- const input = this._query(json, { disableReturning: true });
360
- if (Array.isArray(input)) {
361
- const responses = [];
362
- for (let query of input) {
363
- responses.push(yield this.internalQuery(query));
364
- }
365
- return responses;
366
- }
367
- else {
368
- // read the row to be deleted up front for the return
369
- let deletedRows;
370
- if (operation === types_1.Operation.DELETE) {
371
- const queryFn = (query) => this.internalQuery(query);
372
- deletedRows = yield this.getReturningRow(queryFn, json);
373
- }
374
- // run the query
375
- const response = yield this.internalQuery(input);
376
- // get the results or return the created / updated / deleted row
377
- if ((_a = deletedRows === null || deletedRows === void 0 ? void 0 : deletedRows.rows) === null || _a === void 0 ? void 0 : _a.length) {
378
- return deletedRows.rows;
379
- }
380
- else if ((_b = response.rows) === null || _b === void 0 ? void 0 : _b.length) {
381
- return response.rows;
382
- }
383
- else {
384
- // get the last row that was updated
385
- if (response.lastRowid &&
386
- ((_c = json.endpoint) === null || _c === void 0 ? void 0 : _c.entityId) &&
387
- operation !== types_1.Operation.DELETE) {
388
- const lastRow = yield this.internalQuery({
389
- sql: `SELECT * FROM \"${json.endpoint.entityId}\" WHERE ROWID = '${response.lastRowid}'`,
390
- });
391
- return lastRow.rows;
392
- }
393
- else {
394
- return [{ [operation.toLowerCase()]: true }];
395
- }
396
- }
397
- }
398
- });
399
- }
400
- }
401
- exports.default = {
402
- schema: SCHEMA,
403
- integration: OracleIntegration,
404
- };