@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,346 +17,342 @@ const utils_1 = require("./utils");
17
17
  const oracledb_1 = __importDefault(require("oracledb"));
18
18
  const sql_1 = __importDefault(require("./base/sql"));
19
19
  const constants_1 = require("../constants");
20
- var OracleModule;
21
- (function (OracleModule) {
22
- oracledb_1.default.outFormat = oracledb_1.default.OUT_FORMAT_OBJECT;
23
- const SCHEMA = {
24
- docs: "https://github.com/oracle/node-oracledb",
25
- plus: true,
26
- friendlyName: "Oracle",
27
- type: "Relational",
28
- description: "Oracle Database is an object-relational database management system developed by Oracle Corporation",
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
- required: true,
38
- default: 1521,
39
- },
40
- database: {
41
- type: types_1.DatasourceFieldType.STRING,
42
- required: true,
43
- },
44
- user: {
45
- type: types_1.DatasourceFieldType.STRING,
46
- required: true,
47
- },
48
- password: {
49
- type: types_1.DatasourceFieldType.PASSWORD,
50
- required: true,
51
- },
20
+ oracledb_1.default.outFormat = oracledb_1.default.OUT_FORMAT_OBJECT;
21
+ const SCHEMA = {
22
+ docs: "https://github.com/oracle/node-oracledb",
23
+ plus: true,
24
+ friendlyName: "Oracle",
25
+ type: "Relational",
26
+ description: "Oracle Database is an object-relational database management system developed by Oracle Corporation",
27
+ datasource: {
28
+ host: {
29
+ type: types_1.DatasourceFieldType.STRING,
30
+ default: "localhost",
31
+ required: true,
52
32
  },
53
- query: {
54
- create: {
55
- type: types_1.QueryType.SQL,
56
- },
57
- read: {
58
- type: types_1.QueryType.SQL,
59
- },
60
- update: {
61
- type: types_1.QueryType.SQL,
62
- },
63
- delete: {
64
- type: types_1.QueryType.SQL,
65
- },
33
+ port: {
34
+ type: types_1.DatasourceFieldType.NUMBER,
35
+ required: true,
36
+ default: 1521,
66
37
  },
67
- };
68
- const UNSUPPORTED_TYPES = ["BLOB", "CLOB", "NCLOB"];
69
- const OracleContraintTypes = {
70
- PRIMARY: "P",
71
- NOT_NULL_OR_CHECK: "C",
72
- FOREIGN_KEY: "R",
73
- UNIQUE: "U",
74
- };
75
- class OracleIntegration extends sql_1.default {
76
- constructor(config) {
77
- super(utils_1.SqlClient.ORACLE);
78
- this.index = 1;
79
- this.tables = {};
80
- this.schemaErrors = {};
81
- this.COLUMNS_SQL = `
82
- SELECT
83
- tabs.table_name,
84
- cols.column_name,
85
- cols.data_type,
86
- cols.data_default,
87
- cols.column_id,
88
- cons.constraint_name,
89
- cons.constraint_type,
90
- cons.r_constraint_name,
91
- cons.search_condition
92
- FROM
93
- user_tables tabs
94
- JOIN
95
- user_tab_columns cols
96
- ON tabs.table_name = cols.table_name
97
- LEFT JOIN
98
- user_cons_columns col_cons
99
- ON cols.column_name = col_cons.column_name
100
- AND cols.table_name = col_cons.table_name
101
- LEFT JOIN
102
- user_constraints cons
103
- ON col_cons.constraint_name = cons.constraint_name
104
- AND cons.table_name = cols.table_name
105
- WHERE
106
- (cons.status = 'ENABLED'
107
- OR cons.status IS NULL)
108
- `;
109
- this.getConnection = () => __awaiter(this, void 0, void 0, function* () {
110
- //connectString : "(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))(CONNECT_DATA =(SID= ORCL)))"
111
- const connectString = `${this.config.host}:${this.config.port || 1521}/${this.config.database}`;
112
- const attributes = {
113
- user: this.config.user,
114
- password: this.config.password,
115
- connectString,
116
- };
117
- return oracledb_1.default.getConnection(attributes);
118
- });
119
- this.config = config;
120
- }
121
- getBindingIdentifier() {
122
- return `:${this.index++}`;
123
- }
124
- getStringConcat(parts) {
125
- return parts.join(" || ");
126
- }
127
- /**
128
- * Map the flat tabular columns and constraints data into a nested object
129
- */
130
- mapColumns(result) {
131
- const oracleTables = {};
132
- if (result.rows) {
133
- result.rows.forEach(row => {
134
- const tableName = row.TABLE_NAME;
135
- const columnName = row.COLUMN_NAME;
136
- const dataType = row.DATA_TYPE;
137
- const dataDefault = row.DATA_DEFAULT;
138
- const columnId = row.COLUMN_ID;
139
- const constraintName = row.CONSTRAINT_NAME;
140
- const constraintType = row.CONSTRAINT_TYPE;
141
- const relatedConstraintName = row.R_CONSTRAINT_NAME;
142
- const searchCondition = row.SEARCH_CONDITION;
143
- let table = oracleTables[tableName];
144
- if (!table) {
145
- table = {
146
- name: tableName,
147
- columns: {},
148
- };
149
- oracleTables[tableName] = table;
150
- }
151
- let column = table.columns[columnName];
152
- if (!column) {
153
- column = {
154
- name: columnName,
155
- type: dataType,
156
- default: dataDefault,
157
- id: columnId,
158
- constraints: {},
38
+ database: {
39
+ type: types_1.DatasourceFieldType.STRING,
40
+ required: true,
41
+ },
42
+ user: {
43
+ type: types_1.DatasourceFieldType.STRING,
44
+ required: true,
45
+ },
46
+ password: {
47
+ type: types_1.DatasourceFieldType.PASSWORD,
48
+ required: true,
49
+ },
50
+ },
51
+ query: {
52
+ create: {
53
+ type: types_1.QueryType.SQL,
54
+ },
55
+ read: {
56
+ type: types_1.QueryType.SQL,
57
+ },
58
+ update: {
59
+ type: types_1.QueryType.SQL,
60
+ },
61
+ delete: {
62
+ type: types_1.QueryType.SQL,
63
+ },
64
+ },
65
+ };
66
+ const UNSUPPORTED_TYPES = ["BLOB", "CLOB", "NCLOB"];
67
+ const OracleContraintTypes = {
68
+ PRIMARY: "P",
69
+ NOT_NULL_OR_CHECK: "C",
70
+ FOREIGN_KEY: "R",
71
+ UNIQUE: "U",
72
+ };
73
+ class OracleIntegration extends sql_1.default {
74
+ constructor(config) {
75
+ super(utils_1.SqlClient.ORACLE);
76
+ this.index = 1;
77
+ this.tables = {};
78
+ this.schemaErrors = {};
79
+ this.COLUMNS_SQL = `
80
+ SELECT
81
+ tabs.table_name,
82
+ cols.column_name,
83
+ cols.data_type,
84
+ cols.data_default,
85
+ cols.column_id,
86
+ cons.constraint_name,
87
+ cons.constraint_type,
88
+ cons.r_constraint_name,
89
+ cons.search_condition
90
+ FROM
91
+ user_tables tabs
92
+ JOIN
93
+ user_tab_columns cols
94
+ ON tabs.table_name = cols.table_name
95
+ LEFT JOIN
96
+ user_cons_columns col_cons
97
+ ON cols.column_name = col_cons.column_name
98
+ AND cols.table_name = col_cons.table_name
99
+ LEFT JOIN
100
+ user_constraints cons
101
+ ON col_cons.constraint_name = cons.constraint_name
102
+ AND cons.table_name = cols.table_name
103
+ WHERE
104
+ (cons.status = 'ENABLED'
105
+ OR cons.status IS NULL)
106
+ `;
107
+ this.getConnection = () => __awaiter(this, void 0, void 0, function* () {
108
+ //connectString : "(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))(CONNECT_DATA =(SID= ORCL)))"
109
+ const connectString = `${this.config.host}:${this.config.port || 1521}/${this.config.database}`;
110
+ const attributes = {
111
+ user: this.config.user,
112
+ password: this.config.password,
113
+ connectString,
114
+ };
115
+ return oracledb_1.default.getConnection(attributes);
116
+ });
117
+ this.config = config;
118
+ }
119
+ getBindingIdentifier() {
120
+ return `:${this.index++}`;
121
+ }
122
+ getStringConcat(parts) {
123
+ return parts.join(" || ");
124
+ }
125
+ /**
126
+ * Map the flat tabular columns and constraints data into a nested object
127
+ */
128
+ mapColumns(result) {
129
+ const oracleTables = {};
130
+ if (result.rows) {
131
+ result.rows.forEach(row => {
132
+ const tableName = row.TABLE_NAME;
133
+ const columnName = row.COLUMN_NAME;
134
+ const dataType = row.DATA_TYPE;
135
+ const dataDefault = row.DATA_DEFAULT;
136
+ const columnId = row.COLUMN_ID;
137
+ const constraintName = row.CONSTRAINT_NAME;
138
+ const constraintType = row.CONSTRAINT_TYPE;
139
+ const relatedConstraintName = row.R_CONSTRAINT_NAME;
140
+ const searchCondition = row.SEARCH_CONDITION;
141
+ let table = oracleTables[tableName];
142
+ if (!table) {
143
+ table = {
144
+ name: tableName,
145
+ columns: {},
146
+ };
147
+ oracleTables[tableName] = table;
148
+ }
149
+ let column = table.columns[columnName];
150
+ if (!column) {
151
+ column = {
152
+ name: columnName,
153
+ type: dataType,
154
+ default: dataDefault,
155
+ id: columnId,
156
+ constraints: {},
157
+ };
158
+ table.columns[columnName] = column;
159
+ }
160
+ if (constraintName && constraintType) {
161
+ let constraint = column.constraints[constraintName];
162
+ if (!constraint) {
163
+ constraint = {
164
+ name: constraintName,
165
+ type: constraintType,
166
+ relatedConstraintName: relatedConstraintName,
167
+ searchCondition: searchCondition,
159
168
  };
160
- table.columns[columnName] = column;
161
169
  }
162
- if (constraintName && constraintType) {
163
- let constraint = column.constraints[constraintName];
164
- if (!constraint) {
165
- constraint = {
166
- name: constraintName,
167
- type: constraintType,
168
- relatedConstraintName: relatedConstraintName,
169
- searchCondition: searchCondition,
170
- };
171
- }
172
- column.constraints[constraintName] = constraint;
173
- }
174
- });
175
- }
176
- return oracleTables;
177
- }
178
- static isSupportedColumn(column) {
179
- return !UNSUPPORTED_TYPES.includes(column.type);
180
- }
181
- static isAutoColumn(column) {
182
- return !!(column.default && column.default.toLowerCase().includes("nextval"));
170
+ column.constraints[constraintName] = constraint;
171
+ }
172
+ });
183
173
  }
184
- /**
185
- * No native boolean in oracle. Best we can do is to check if a manual 1 or 0 number constraint has been set up
186
- * This matches the default behaviour for generating DDL used in knex.
187
- */
188
- isBooleanType(column) {
189
- return (column.type.toLowerCase() === "number" &&
190
- Object.values(column.constraints).filter(c => {
191
- if (c.type === OracleContraintTypes.NOT_NULL_OR_CHECK &&
192
- c.searchCondition) {
193
- const condition = c.searchCondition
194
- .replace(/\s/g, "") // remove spaces
195
- .replace(/[']+/g, ""); // remove quotes
196
- if (condition.includes("in(0,1)") ||
197
- condition.includes("in(1,0)")) {
198
- return true;
199
- }
174
+ return oracleTables;
175
+ }
176
+ static isSupportedColumn(column) {
177
+ return !UNSUPPORTED_TYPES.includes(column.type);
178
+ }
179
+ static isAutoColumn(column) {
180
+ return !!(column.default && column.default.toLowerCase().includes("nextval"));
181
+ }
182
+ /**
183
+ * No native boolean in oracle. Best we can do is to check if a manual 1 or 0 number constraint has been set up
184
+ * This matches the default behaviour for generating DDL used in knex.
185
+ */
186
+ isBooleanType(column) {
187
+ return (column.type.toLowerCase() === "number" &&
188
+ Object.values(column.constraints).filter(c => {
189
+ if (c.type === OracleContraintTypes.NOT_NULL_OR_CHECK &&
190
+ c.searchCondition) {
191
+ const condition = c.searchCondition
192
+ .replace(/\s/g, "") // remove spaces
193
+ .replace(/[']+/g, ""); // remove quotes
194
+ if (condition.includes("in(0,1)") || condition.includes("in(1,0)")) {
195
+ return true;
200
196
  }
201
- return false;
202
- }).length > 0);
203
- }
204
- internalConvertType(column) {
205
- if (this.isBooleanType(column)) {
206
- return { type: constants_1.FieldTypes.BOOLEAN };
207
- }
208
- return (0, utils_1.convertSqlType)(column.type);
197
+ }
198
+ return false;
199
+ }).length > 0);
200
+ }
201
+ internalConvertType(column) {
202
+ if (this.isBooleanType(column)) {
203
+ return { type: constants_1.FieldTypes.BOOLEAN };
209
204
  }
210
- /**
211
- * Fetches the tables from the oracle table and assigns them to the datasource.
212
- * @param {*} datasourceId - datasourceId to fetch
213
- * @param entities - the tables that are to be built
214
- */
215
- buildSchema(datasourceId, entities) {
216
- return __awaiter(this, void 0, void 0, function* () {
217
- const columnsResponse = yield this.internalQuery({
218
- sql: this.COLUMNS_SQL,
219
- });
220
- const oracleTables = this.mapColumns(columnsResponse);
221
- const tables = {};
222
- // iterate each table
223
- Object.values(oracleTables).forEach(oracleTable => {
224
- let table = tables[oracleTable.name];
225
- if (!table) {
226
- table = {
227
- _id: (0, utils_1.buildExternalTableId)(datasourceId, oracleTable.name),
228
- primary: [],
229
- name: oracleTable.name,
230
- schema: {},
231
- };
232
- tables[oracleTable.name] = table;
205
+ return (0, utils_1.convertSqlType)(column.type);
206
+ }
207
+ /**
208
+ * Fetches the tables from the oracle table and assigns them to the datasource.
209
+ * @param {*} datasourceId - datasourceId to fetch
210
+ * @param entities - the tables that are to be built
211
+ */
212
+ buildSchema(datasourceId, entities) {
213
+ return __awaiter(this, void 0, void 0, function* () {
214
+ const columnsResponse = yield this.internalQuery({
215
+ sql: this.COLUMNS_SQL,
216
+ });
217
+ const oracleTables = this.mapColumns(columnsResponse);
218
+ const tables = {};
219
+ // iterate each table
220
+ Object.values(oracleTables).forEach(oracleTable => {
221
+ let table = tables[oracleTable.name];
222
+ if (!table) {
223
+ table = {
224
+ _id: (0, utils_1.buildExternalTableId)(datasourceId, oracleTable.name),
225
+ primary: [],
226
+ name: oracleTable.name,
227
+ schema: {},
228
+ };
229
+ tables[oracleTable.name] = table;
230
+ }
231
+ // iterate each column on the table
232
+ Object.values(oracleTable.columns)
233
+ // remove columns that we can't read / save
234
+ .filter(oracleColumn => OracleIntegration.isSupportedColumn(oracleColumn))
235
+ // match the order of the columns in the db
236
+ .sort((c1, c2) => c1.id - c2.id)
237
+ .forEach(oracleColumn => {
238
+ const columnName = oracleColumn.name;
239
+ let fieldSchema = table.schema[columnName];
240
+ if (!fieldSchema) {
241
+ fieldSchema = Object.assign({ autocolumn: OracleIntegration.isAutoColumn(oracleColumn), name: columnName }, this.internalConvertType(oracleColumn));
242
+ table.schema[columnName] = fieldSchema;
233
243
  }
234
- // iterate each column on the table
235
- Object.values(oracleTable.columns)
236
- // remove columns that we can't read / save
237
- .filter(oracleColumn => OracleIntegration.isSupportedColumn(oracleColumn))
238
- // match the order of the columns in the db
239
- .sort((c1, c2) => c1.id - c2.id)
240
- .forEach(oracleColumn => {
241
- const columnName = oracleColumn.name;
242
- let fieldSchema = table.schema[columnName];
243
- if (!fieldSchema) {
244
- fieldSchema = Object.assign({ autocolumn: OracleIntegration.isAutoColumn(oracleColumn), name: columnName }, this.internalConvertType(oracleColumn));
245
- table.schema[columnName] = fieldSchema;
244
+ // iterate each constraint on the column
245
+ Object.values(oracleColumn.constraints).forEach(oracleConstraint => {
246
+ if (oracleConstraint.type === OracleContraintTypes.PRIMARY) {
247
+ table.primary.push(columnName);
246
248
  }
247
- // iterate each constraint on the column
248
- Object.values(oracleColumn.constraints).forEach(oracleConstraint => {
249
- if (oracleConstraint.type === OracleContraintTypes.PRIMARY) {
250
- table.primary.push(columnName);
251
- }
252
- });
253
249
  });
254
250
  });
255
- const final = (0, utils_1.finaliseExternalTables)(tables, entities);
256
- this.tables = final.tables;
257
- this.schemaErrors = final.errors;
258
251
  });
259
- }
260
- internalQuery(query) {
261
- return __awaiter(this, void 0, void 0, function* () {
262
- let connection;
263
- try {
264
- this.index = 1;
265
- connection = yield this.getConnection();
266
- const options = { autoCommit: true };
267
- const bindings = query.bindings || [];
268
- return yield connection.execute(query.sql, bindings, options);
269
- }
270
- finally {
271
- if (connection) {
272
- try {
273
- yield connection.close();
274
- }
275
- catch (err) {
276
- console.error(err);
277
- }
252
+ const final = (0, utils_1.finaliseExternalTables)(tables, entities);
253
+ this.tables = final.tables;
254
+ this.schemaErrors = final.errors;
255
+ });
256
+ }
257
+ internalQuery(query) {
258
+ return __awaiter(this, void 0, void 0, function* () {
259
+ let connection;
260
+ try {
261
+ this.index = 1;
262
+ connection = yield this.getConnection();
263
+ const options = { autoCommit: true };
264
+ const bindings = query.bindings || [];
265
+ return yield connection.execute(query.sql, bindings, options);
266
+ }
267
+ finally {
268
+ if (connection) {
269
+ try {
270
+ yield connection.close();
278
271
  }
279
- }
280
- });
281
- }
282
- create(query) {
283
- return __awaiter(this, void 0, void 0, function* () {
284
- const response = yield this.internalQuery((0, utils_1.getSqlQuery)(query));
285
- return response.rows && response.rows.length
286
- ? response.rows
287
- : [{ created: true }];
288
- });
289
- }
290
- read(query) {
291
- return __awaiter(this, void 0, void 0, function* () {
292
- const response = yield this.internalQuery((0, utils_1.getSqlQuery)(query));
293
- return response.rows ? response.rows : [];
294
- });
295
- }
296
- update(query) {
297
- return __awaiter(this, void 0, void 0, function* () {
298
- const response = yield this.internalQuery((0, utils_1.getSqlQuery)(query));
299
- return response.rows && response.rows.length
300
- ? response.rows
301
- : [{ updated: true }];
302
- });
303
- }
304
- delete(query) {
305
- return __awaiter(this, void 0, void 0, function* () {
306
- const response = yield this.internalQuery((0, utils_1.getSqlQuery)(query));
307
- return response.rows && response.rows.length
308
- ? response.rows
309
- : [{ deleted: true }];
310
- });
311
- }
312
- query(json) {
313
- var _a, _b, _c;
314
- return __awaiter(this, void 0, void 0, function* () {
315
- const operation = this._operation(json);
316
- const input = this._query(json, { disableReturning: true });
317
- if (Array.isArray(input)) {
318
- const responses = [];
319
- for (let query of input) {
320
- responses.push(yield this.internalQuery(query));
272
+ catch (err) {
273
+ console.error(err);
321
274
  }
322
- return responses;
275
+ }
276
+ }
277
+ });
278
+ }
279
+ create(query) {
280
+ return __awaiter(this, void 0, void 0, function* () {
281
+ const response = yield this.internalQuery((0, utils_1.getSqlQuery)(query));
282
+ return response.rows && response.rows.length
283
+ ? response.rows
284
+ : [{ created: true }];
285
+ });
286
+ }
287
+ read(query) {
288
+ return __awaiter(this, void 0, void 0, function* () {
289
+ const response = yield this.internalQuery((0, utils_1.getSqlQuery)(query));
290
+ return response.rows ? response.rows : [];
291
+ });
292
+ }
293
+ update(query) {
294
+ return __awaiter(this, void 0, void 0, function* () {
295
+ const response = yield this.internalQuery((0, utils_1.getSqlQuery)(query));
296
+ return response.rows && response.rows.length
297
+ ? response.rows
298
+ : [{ updated: true }];
299
+ });
300
+ }
301
+ delete(query) {
302
+ return __awaiter(this, void 0, void 0, function* () {
303
+ const response = yield this.internalQuery((0, utils_1.getSqlQuery)(query));
304
+ return response.rows && response.rows.length
305
+ ? response.rows
306
+ : [{ deleted: true }];
307
+ });
308
+ }
309
+ query(json) {
310
+ var _a, _b, _c;
311
+ return __awaiter(this, void 0, void 0, function* () {
312
+ const operation = this._operation(json);
313
+ const input = this._query(json, { disableReturning: true });
314
+ if (Array.isArray(input)) {
315
+ const responses = [];
316
+ for (let query of input) {
317
+ responses.push(yield this.internalQuery(query));
318
+ }
319
+ return responses;
320
+ }
321
+ else {
322
+ // read the row to be deleted up front for the return
323
+ let deletedRows;
324
+ if (operation === types_1.Operation.DELETE) {
325
+ const queryFn = (query) => this.internalQuery(query);
326
+ deletedRows = yield this.getReturningRow(queryFn, json);
327
+ }
328
+ // run the query
329
+ const response = yield this.internalQuery(input);
330
+ // get the results or return the created / updated / deleted row
331
+ if ((_a = deletedRows === null || deletedRows === void 0 ? void 0 : deletedRows.rows) === null || _a === void 0 ? void 0 : _a.length) {
332
+ return deletedRows.rows;
333
+ }
334
+ else if ((_b = response.rows) === null || _b === void 0 ? void 0 : _b.length) {
335
+ return response.rows;
323
336
  }
324
337
  else {
325
- // read the row to be deleted up front for the return
326
- let deletedRows;
327
- if (operation === types_1.Operation.DELETE) {
328
- const queryFn = (query) => this.internalQuery(query);
329
- deletedRows = yield this.getReturningRow(queryFn, json);
330
- }
331
- // run the query
332
- const response = yield this.internalQuery(input);
333
- // get the results or return the created / updated / deleted row
334
- if ((_a = deletedRows === null || deletedRows === void 0 ? void 0 : deletedRows.rows) === null || _a === void 0 ? void 0 : _a.length) {
335
- return deletedRows.rows;
336
- }
337
- else if ((_b = response.rows) === null || _b === void 0 ? void 0 : _b.length) {
338
- return response.rows;
338
+ // get the last row that was updated
339
+ if (response.lastRowid &&
340
+ ((_c = json.endpoint) === null || _c === void 0 ? void 0 : _c.entityId) &&
341
+ operation !== types_1.Operation.DELETE) {
342
+ const lastRow = yield this.internalQuery({
343
+ sql: `SELECT * FROM \"${json.endpoint.entityId}\" WHERE ROWID = '${response.lastRowid}'`,
344
+ });
345
+ return lastRow.rows;
339
346
  }
340
347
  else {
341
- // get the last row that was updated
342
- if (response.lastRowid &&
343
- ((_c = json.endpoint) === null || _c === void 0 ? void 0 : _c.entityId) &&
344
- operation !== types_1.Operation.DELETE) {
345
- const lastRow = yield this.internalQuery({
346
- sql: `SELECT * FROM \"${json.endpoint.entityId}\" WHERE ROWID = '${response.lastRowid}'`,
347
- });
348
- return lastRow.rows;
349
- }
350
- else {
351
- return [{ [operation.toLowerCase()]: true }];
352
- }
348
+ return [{ [operation.toLowerCase()]: true }];
353
349
  }
354
350
  }
355
- });
356
- }
351
+ }
352
+ });
357
353
  }
358
- module.exports = {
359
- schema: SCHEMA,
360
- integration: OracleIntegration,
361
- };
362
- })(OracleModule || (OracleModule = {}));
354
+ }
355
+ exports.default = {
356
+ schema: SCHEMA,
357
+ integration: OracleIntegration,
358
+ };