@budibase/server 1.0.47 → 1.0.49-alpha.10
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.
- package/__mocks__/arangojs.ts +1 -1
- package/__mocks__/aws-sdk.ts +4 -4
- package/__mocks__/mongodb.ts +4 -5
- package/__mocks__/mssql.ts +3 -3
- package/__mocks__/node-fetch.ts +2 -1
- package/__mocks__/pg.ts +3 -5
- package/builder/assets/{index.937b2767.js → index.506eca43.js} +249 -246
- package/builder/assets/index.83c0944f.css +1 -0
- package/builder/assets/{vendor.f9faf6ab.js → vendor.d526bfe8.js} +12 -12
- package/builder/index.html +3 -3
- package/coverage/clover.xml +3069 -2773
- package/coverage/coverage-final.json +106 -101
- package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
- package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
- package/coverage/lcov-report/api/controllers/application.js.html +257 -152
- package/coverage/lcov-report/api/controllers/auth.js.html +22 -13
- package/coverage/lcov-report/api/controllers/automation.js.html +39 -69
- package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
- package/coverage/lcov-report/api/controllers/cloud.js.html +8 -11
- package/coverage/lcov-report/api/controllers/component.js.html +13 -16
- package/coverage/lcov-report/api/controllers/datasource.js.html +81 -51
- package/coverage/lcov-report/api/controllers/dev.js.html +6 -6
- package/coverage/lcov-report/api/controllers/index.html +76 -76
- package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
- package/coverage/lcov-report/api/controllers/layout.js.html +9 -9
- package/coverage/lcov-report/api/controllers/metadata.js.html +6 -21
- package/coverage/lcov-report/api/controllers/migrations.js.html +119 -0
- package/coverage/lcov-report/api/controllers/permission.js.html +19 -19
- package/coverage/lcov-report/api/controllers/query/index.html +10 -10
- package/coverage/lcov-report/api/controllers/query/index.js.html +38 -35
- package/coverage/lcov-report/api/controllers/query/validation.js.html +6 -6
- package/coverage/lcov-report/api/controllers/role.js.html +16 -16
- package/coverage/lcov-report/api/controllers/routing.js.html +7 -10
- package/coverage/lcov-report/api/controllers/row/external.js.html +48 -141
- package/coverage/lcov-report/api/controllers/row/index.html +55 -40
- package/coverage/lcov-report/api/controllers/row/index.js.html +26 -26
- package/coverage/lcov-report/api/controllers/row/internal.js.html +118 -226
- package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +52 -34
- package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +548 -0
- package/coverage/lcov-report/api/controllers/row/utils.js.html +47 -62
- package/coverage/lcov-report/api/controllers/screen.js.html +15 -21
- package/coverage/lcov-report/api/controllers/script.js.html +4 -4
- package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +599 -0
- package/coverage/lcov-report/api/controllers/table/external.js.html +25 -34
- package/coverage/lcov-report/api/controllers/table/index.html +58 -43
- package/coverage/lcov-report/api/controllers/table/index.js.html +58 -82
- package/coverage/lcov-report/api/controllers/table/internal.js.html +81 -66
- package/coverage/lcov-report/api/controllers/table/utils.js.html +282 -111
- package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
- package/coverage/lcov-report/api/controllers/user.js.html +47 -50
- package/coverage/lcov-report/api/controllers/view/exporters.js.html +4 -4
- package/coverage/lcov-report/api/controllers/view/index.html +16 -16
- package/coverage/lcov-report/api/controllers/view/index.js.html +27 -33
- package/coverage/lcov-report/api/controllers/view/utils.js.html +35 -20
- package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +7 -7
- package/coverage/lcov-report/api/controllers/webhook.js.html +34 -28
- package/coverage/lcov-report/api/index.html +1 -1
- package/coverage/lcov-report/api/index.js.html +8 -8
- package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
- package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
- package/coverage/lcov-report/api/routes/application.js.html +1 -1
- package/coverage/lcov-report/api/routes/auth.js.html +1 -1
- package/coverage/lcov-report/api/routes/automation.js.html +1 -1
- package/coverage/lcov-report/api/routes/backup.js.html +1 -1
- package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
- package/coverage/lcov-report/api/routes/component.js.html +1 -1
- package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
- package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
- package/coverage/lcov-report/api/routes/dev.js.html +1 -1
- package/coverage/lcov-report/api/routes/index.html +18 -18
- package/coverage/lcov-report/api/routes/index.js.html +3 -3
- package/coverage/lcov-report/api/routes/integration.js.html +1 -1
- package/coverage/lcov-report/api/routes/layout.js.html +1 -1
- package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
- package/coverage/lcov-report/api/routes/{hosting.js.html → migrations.js.html} +17 -14
- package/coverage/lcov-report/api/routes/permission.js.html +1 -1
- package/coverage/lcov-report/api/routes/query.js.html +1 -1
- package/coverage/lcov-report/api/routes/role.js.html +1 -1
- package/coverage/lcov-report/api/routes/routing.js.html +1 -1
- package/coverage/lcov-report/api/routes/row.js.html +1 -1
- package/coverage/lcov-report/api/routes/screen.js.html +1 -1
- package/coverage/lcov-report/api/routes/script.js.html +1 -1
- package/coverage/lcov-report/api/routes/static.js.html +17 -2
- package/coverage/lcov-report/api/routes/table.js.html +1 -1
- package/coverage/lcov-report/api/routes/templates.js.html +1 -1
- package/coverage/lcov-report/api/routes/user.js.html +1 -1
- package/coverage/lcov-report/api/routes/view.js.html +1 -1
- package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
- package/coverage/lcov-report/automations/actions.js.html +24 -24
- package/coverage/lcov-report/automations/automationUtils.js.html +7 -10
- package/coverage/lcov-report/automations/bullboard.js.html +16 -16
- package/coverage/lcov-report/automations/index.html +18 -18
- package/coverage/lcov-report/automations/index.js.html +1 -1
- package/coverage/lcov-report/automations/steps/bash.js.html +6 -6
- package/coverage/lcov-report/automations/steps/createRow.js.html +13 -22
- package/coverage/lcov-report/automations/steps/delay.js.html +4 -4
- package/coverage/lcov-report/automations/steps/deleteRow.js.html +11 -20
- package/coverage/lcov-report/automations/steps/discord.js.html +7 -7
- package/coverage/lcov-report/automations/steps/executeQuery.js.html +6 -6
- package/coverage/lcov-report/automations/steps/executeScript.js.html +6 -6
- package/coverage/lcov-report/automations/steps/filter.js.html +7 -7
- package/coverage/lcov-report/automations/steps/index.html +13 -13
- package/coverage/lcov-report/automations/steps/integromat.js.html +5 -5
- package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +8 -8
- package/coverage/lcov-report/automations/steps/queryRows.js.html +10 -10
- package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +5 -5
- package/coverage/lcov-report/automations/steps/serverLog.js.html +3 -3
- package/coverage/lcov-report/automations/steps/slack.js.html +5 -5
- package/coverage/lcov-report/automations/steps/updateRow.js.html +7 -7
- package/coverage/lcov-report/automations/steps/utils.js.html +3 -3
- package/coverage/lcov-report/automations/steps/zapier.js.html +5 -5
- package/coverage/lcov-report/automations/triggerInfo/app.js.html +2 -2
- package/coverage/lcov-report/automations/triggerInfo/cron.js.html +2 -2
- package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/index.js.html +8 -8
- package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +2 -2
- package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +2 -2
- package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +2 -2
- package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +2 -2
- package/coverage/lcov-report/automations/triggers.js.html +61 -55
- package/coverage/lcov-report/automations/utils.js.html +54 -42
- package/coverage/lcov-report/constants/index.html +11 -11
- package/coverage/lcov-report/constants/index.js.html +68 -32
- package/coverage/lcov-report/constants/layouts.js.html +5 -5
- package/coverage/lcov-report/constants/screens.js.html +4 -4
- package/coverage/lcov-report/db/client.js.html +18 -18
- package/coverage/lcov-report/db/inMemoryView.js.html +7 -7
- package/coverage/lcov-report/db/index.html +15 -15
- package/coverage/lcov-report/db/index.js.html +3 -3
- package/coverage/lcov-report/db/linkedRows/LinkController.js.html +25 -37
- package/coverage/lcov-report/db/linkedRows/index.html +27 -27
- package/coverage/lcov-report/db/linkedRows/index.js.html +51 -96
- package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +42 -42
- package/coverage/lcov-report/db/newid.js.html +4 -4
- package/coverage/lcov-report/db/utils.js.html +87 -87
- package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
- package/coverage/lcov-report/events/index.html +1 -1
- package/coverage/lcov-report/events/index.js.html +5 -5
- package/coverage/lcov-report/events/utils.js.html +3 -3
- package/coverage/lcov-report/index.html +138 -123
- package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
- package/coverage/lcov-report/integrations/tests/index.html +1 -1
- package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
- package/coverage/lcov-report/middleware/authorized.js.html +173 -65
- package/coverage/lcov-report/middleware/builder.js.html +10 -10
- package/coverage/lcov-report/middleware/currentapp.js.html +95 -83
- package/coverage/lcov-report/middleware/index.html +38 -38
- package/coverage/lcov-report/middleware/joi-validator.js.html +3 -3
- package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
- package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
- package/coverage/lcov-report/middleware/usageQuota.js.html +281 -53
- package/coverage/lcov-report/middleware/utils.js.html +2 -2
- package/coverage/lcov-report/threads/automation.js.html +30 -24
- package/coverage/lcov-report/threads/index.html +26 -26
- package/coverage/lcov-report/threads/index.js.html +10 -10
- package/coverage/lcov-report/threads/query.js.html +36 -42
- package/coverage/lcov-report/threads/utils.js.html +14 -14
- package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
- package/coverage/lcov-report/utilities/budibaseDir.js.html +7 -7
- package/coverage/lcov-report/utilities/centralPath.js.html +4 -4
- package/coverage/lcov-report/utilities/csvParser.js.html +6 -6
- package/coverage/lcov-report/utilities/global.js.html +58 -49
- package/coverage/lcov-report/utilities/index.html +37 -37
- package/coverage/lcov-report/utilities/index.js.html +43 -73
- package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +8 -8
- package/coverage/lcov-report/utilities/queue/index.html +1 -1
- package/coverage/lcov-report/utilities/routing/index.html +1 -1
- package/coverage/lcov-report/utilities/routing/index.js.html +7 -7
- package/coverage/lcov-report/utilities/rowProcessor/index.html +27 -27
- package/coverage/lcov-report/utilities/rowProcessor/index.js.html +97 -103
- package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +75 -27
- package/coverage/lcov-report/utilities/scriptRunner.js.html +5 -5
- package/coverage/lcov-report/utilities/security.js.html +8 -8
- package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/index.html +141 -0
- package/coverage/lcov-report/utilities/usageQuota/index.js.html +359 -0
- package/coverage/lcov-report/utilities/usageQuota/rows.js.html +305 -0
- package/coverage/lcov-report/{api/controllers/hosting.js.html → utilities/usageQuota/usageQuoteReset.js.html} +36 -48
- package/coverage/lcov-report/utilities/users.js.html +9 -9
- package/coverage/lcov-report/utilities/workerRequests.js.html +43 -112
- package/coverage/lcov.info +4989 -4390
- package/dist/api/controllers/application.js +90 -60
- package/dist/api/controllers/auth.js +8 -5
- package/dist/api/controllers/automation.js +14 -19
- package/dist/api/controllers/cloud.js +2 -3
- package/dist/api/controllers/component.js +3 -4
- package/dist/api/controllers/datasource.js +20 -10
- package/dist/api/controllers/deploy/Deployment.js +3 -6
- package/dist/api/controllers/deploy/index.js +12 -13
- package/dist/api/controllers/dev.js +5 -5
- package/dist/api/controllers/layout.js +3 -3
- package/dist/api/controllers/metadata.js +4 -4
- package/dist/api/controllers/migrations.js +21 -0
- package/dist/api/controllers/permission.js +4 -4
- package/dist/api/controllers/query/import/index.js +4 -6
- package/dist/api/controllers/query/index.js +11 -10
- package/dist/api/controllers/role.js +5 -5
- package/dist/api/controllers/routing.js +5 -6
- package/dist/api/controllers/row/ExternalRequest.js +89 -65
- package/dist/api/controllers/row/external.js +14 -22
- package/dist/api/controllers/row/internal.js +55 -93
- package/dist/api/controllers/row/internalSearch.js +23 -17
- package/dist/api/controllers/row/staticFormula.js +147 -0
- package/dist/api/controllers/row/utils.js +13 -14
- package/dist/api/controllers/screen.js +5 -7
- package/dist/api/controllers/static/index.js +61 -12
- package/dist/api/controllers/table/bulkFormula.js +159 -0
- package/dist/api/controllers/table/external.js +7 -10
- package/dist/api/controllers/table/index.js +16 -13
- package/dist/api/controllers/table/internal.js +22 -16
- package/dist/api/controllers/table/utils.js +77 -37
- package/dist/api/controllers/user.js +18 -20
- package/dist/api/controllers/view/index.js +8 -10
- package/dist/api/controllers/view/utils.js +9 -4
- package/dist/api/controllers/webhook.js +10 -8
- package/dist/api/routes/index.js +2 -2
- package/dist/api/routes/migrations.js +9 -0
- package/dist/api/routes/static.js +2 -1
- package/dist/api/routes/tests/utilities/TestFunctions.js +37 -17
- package/dist/app.js +35 -5
- package/dist/automations/automationUtils.js +2 -3
- package/dist/automations/steps/createRow.js +3 -5
- package/dist/automations/steps/deleteRow.js +1 -4
- package/dist/automations/steps/updateRow.js +1 -1
- package/dist/automations/triggers.js +27 -25
- package/dist/automations/utils.js +10 -5
- package/dist/constants/index.js +12 -5
- package/dist/db/linkedRows/LinkController.js +3 -7
- package/dist/db/linkedRows/index.js +16 -27
- package/dist/db/linkedRows/linkUtils.js +6 -6
- package/dist/db/views/staticViews.js +9 -10
- package/dist/definitions/datasource.js +1 -0
- package/dist/environment.js +4 -1
- package/dist/integrations/base/sql.js +56 -14
- package/dist/integrations/googlesheets.js +340 -0
- package/dist/integrations/index.js +3 -0
- package/dist/integrations/utils.js +60 -8
- package/dist/middleware/authorized.js +57 -30
- package/dist/middleware/builder.js +2 -2
- package/dist/middleware/currentapp.js +41 -37
- package/dist/middleware/usageQuota.js +82 -15
- package/dist/migrations/functions/appUrls.js +46 -0
- package/dist/migrations/functions/quotas1.js +50 -0
- package/dist/migrations/functions/usageQuotas/index.js +20 -0
- package/dist/migrations/functions/usageQuotas/syncApps.js +29 -0
- package/dist/migrations/functions/usageQuotas/syncRows.js +33 -0
- package/dist/migrations/functions/userEmailViewCasing.js +24 -0
- package/dist/migrations/index.js +62 -0
- package/dist/package.json +8 -5
- package/dist/tests/utilities/TestConfiguration.js +80 -50
- package/dist/threads/automation.js +13 -11
- package/dist/threads/query.js +17 -19
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utilities/fileSystem/index.js +4 -3
- package/dist/utilities/global.js +15 -12
- package/dist/utilities/index.js +7 -17
- package/dist/utilities/routing/index.js +5 -5
- package/dist/utilities/rowProcessor/index.js +23 -17
- package/dist/utilities/rowProcessor/utils.js +14 -4
- package/dist/utilities/{usageQuota.js → usageQuota/index.js} +45 -31
- package/dist/utilities/usageQuota/rows.js +78 -0
- package/dist/utilities/usageQuota/usageQuoteReset.js +16 -0
- package/dist/utilities/users.js +3 -3
- package/dist/utilities/workerRequests.js +4 -24
- package/nodemon.json +1 -1
- package/package.json +9 -6
- package/scripts/integrations/postgres/init.sql +11 -6
- package/scripts/likeCypress.ts +1 -1
- package/src/api/controllers/application.js +85 -50
- package/src/api/controllers/auth.js +8 -5
- package/src/api/controllers/automation.js +13 -23
- package/src/api/controllers/cloud.js +2 -3
- package/src/api/controllers/component.js +3 -4
- package/src/api/controllers/datasource.js +21 -11
- package/src/api/controllers/deploy/Deployment.js +3 -7
- package/src/api/controllers/deploy/index.js +20 -13
- package/src/api/controllers/dev.js +5 -5
- package/src/api/controllers/layout.js +3 -3
- package/src/api/controllers/metadata.js +4 -9
- package/src/api/controllers/migrations.js +13 -0
- package/src/api/controllers/permission.js +4 -4
- package/src/api/controllers/query/import/index.ts +4 -6
- package/src/api/controllers/query/import/tests/index.spec.js +2 -1
- package/src/api/controllers/query/index.js +11 -10
- package/src/api/controllers/role.js +5 -5
- package/src/api/controllers/routing.js +5 -6
- package/src/api/controllers/row/ExternalRequest.ts +66 -42
- package/src/api/controllers/row/external.js +27 -58
- package/src/api/controllers/row/internal.js +54 -90
- package/src/api/controllers/row/internalSearch.js +23 -17
- package/src/api/controllers/row/staticFormula.js +156 -0
- package/src/api/controllers/row/utils.js +13 -18
- package/src/api/controllers/screen.js +5 -7
- package/src/api/controllers/static/index.js +65 -12
- package/src/api/controllers/table/bulkFormula.js +173 -0
- package/src/api/controllers/table/external.js +7 -10
- package/src/api/controllers/table/index.js +20 -28
- package/src/api/controllers/table/internal.js +24 -19
- package/src/api/controllers/table/utils.js +101 -44
- package/src/api/controllers/user.js +19 -20
- package/src/api/controllers/view/index.js +8 -10
- package/src/api/controllers/view/utils.js +9 -4
- package/src/api/controllers/webhook.js +10 -8
- package/src/api/routes/index.js +2 -2
- package/src/api/routes/migrations.js +14 -0
- package/src/api/routes/static.js +5 -0
- package/src/api/routes/tests/application.spec.js +2 -2
- package/src/api/routes/tests/auth.spec.js +1 -2
- package/src/api/routes/tests/automation.spec.js +1 -0
- package/src/api/routes/tests/misc.spec.js +0 -1
- package/src/api/routes/tests/routing.spec.js +21 -12
- package/src/api/routes/tests/row.spec.js +7 -4
- package/src/api/routes/tests/static.spec.js +98 -0
- package/src/api/routes/tests/utilities/TestFunctions.js +39 -17
- package/src/app.ts +18 -5
- package/src/automations/automationUtils.js +2 -3
- package/src/automations/steps/createRow.js +2 -5
- package/src/automations/steps/deleteRow.js +1 -4
- package/src/automations/steps/updateRow.js +1 -1
- package/src/automations/triggers.js +33 -31
- package/src/automations/utils.js +9 -5
- package/src/constants/index.js +17 -5
- package/src/db/linkedRows/LinkController.js +3 -7
- package/src/db/linkedRows/index.js +16 -31
- package/src/db/linkedRows/linkUtils.js +6 -6
- package/src/db/tests/linkController.spec.js +0 -1
- package/src/db/tests/linkTests.spec.js +5 -6
- package/src/db/views/staticViews.js +8 -10
- package/src/definitions/common.ts +3 -0
- package/src/definitions/datasource.ts +3 -0
- package/src/environment.js +4 -1
- package/src/integrations/base/sql.ts +69 -21
- package/src/integrations/googlesheets.ts +353 -0
- package/src/integrations/index.ts +3 -0
- package/src/integrations/tests/sql.spec.js +16 -0
- package/src/integrations/utils.ts +75 -11
- package/src/middleware/authorized.js +66 -30
- package/src/middleware/builder.js +2 -2
- package/src/middleware/currentapp.js +50 -46
- package/src/middleware/tests/authorized.spec.js +13 -6
- package/src/middleware/tests/currentapp.spec.js +6 -0
- package/src/middleware/tests/usageQuota.spec.js +18 -24
- package/src/middleware/usageQuota.js +93 -17
- package/src/migrations/functions/appUrls.ts +34 -0
- package/src/migrations/functions/quotas1.ts +20 -0
- package/src/migrations/functions/tests/appUrls.spec.js +29 -0
- package/src/migrations/functions/tests/quotas1.spec.js +27 -0
- package/src/migrations/functions/tests/userEmailViewCasing.spec.js +25 -0
- package/src/migrations/functions/usageQuotas/index.ts +8 -0
- package/src/migrations/functions/usageQuotas/syncApps.ts +18 -0
- package/src/migrations/functions/usageQuotas/syncRows.ts +22 -0
- package/src/migrations/functions/usageQuotas/tests/syncApps.spec.js +37 -0
- package/src/migrations/functions/usageQuotas/tests/syncRows.spec.js +43 -0
- package/src/migrations/functions/userEmailViewCasing.ts +13 -0
- package/src/migrations/index.ts +56 -0
- package/src/module.d.ts +3 -0
- package/src/tests/utilities/TestConfiguration.js +82 -55
- package/src/threads/automation.js +17 -15
- package/src/threads/query.js +19 -21
- package/src/utilities/fileSystem/index.js +4 -3
- package/src/utilities/global.js +15 -12
- package/src/utilities/index.js +7 -17
- package/src/utilities/routing/index.js +5 -5
- package/src/utilities/rowProcessor/index.js +25 -27
- package/src/utilities/rowProcessor/utils.js +23 -7
- package/src/utilities/tests/usageQuota/usageQuota.spec.js +72 -0
- package/src/utilities/usageQuota/index.js +93 -0
- package/src/utilities/usageQuota/rows.js +75 -0
- package/src/utilities/usageQuota/usageQuoteReset.js +18 -0
- package/src/utilities/users.js +3 -3
- package/src/utilities/workerRequests.js +4 -27
- package/tsconfig.json +2 -1
- package/builder/assets/index.39e01193.css +0 -1
- package/dist/api/controllers/hosting.js +0 -30
- package/dist/api/routes/hosting.js +0 -11
- package/src/api/controllers/hosting.js +0 -22
- package/src/api/routes/hosting.js +0 -13
- package/src/api/routes/tests/hosting.spec.js +0 -36
- package/src/utilities/usageQuota.js +0 -73
|
@@ -22,19 +22,21 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
22
22
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
23
|
const datasource_1 = require("../../../definitions/datasource");
|
|
24
24
|
const utils_1 = require("../../../integrations/utils");
|
|
25
|
+
const utils_2 = require("./utils");
|
|
26
|
+
const constants_1 = require("../../../constants");
|
|
27
|
+
const utils_3 = require("../../../integrations/utils");
|
|
28
|
+
const string_templates_1 = require("@budibase/string-templates");
|
|
29
|
+
// @ts-ignore
|
|
30
|
+
const fp_1 = require("lodash/fp");
|
|
31
|
+
const utils_4 = require("../../../utilities/rowProcessor/utils");
|
|
32
|
+
// @ts-ignore
|
|
33
|
+
const context_1 = require("@budibase/backend-core/context");
|
|
25
34
|
var External;
|
|
26
35
|
(function (External) {
|
|
27
|
-
const { getDatasourceAndQuery } = require("./utils");
|
|
28
|
-
const { DataSourceOperation, FieldTypes, RelationshipTypes, } = require("../../../constants");
|
|
29
|
-
const { breakExternalTableId, isSQL } = require("../../../integrations/utils");
|
|
30
|
-
const { processObjectSync } = require("@budibase/string-templates");
|
|
31
|
-
const { cloneDeep } = require("lodash/fp");
|
|
32
|
-
const CouchDB = require("../../../db");
|
|
33
|
-
const { processFormulas } = require("../../../utilities/rowProcessor/utils");
|
|
34
36
|
function buildFilters(id, filters, table) {
|
|
35
37
|
const primary = table.primary;
|
|
36
38
|
// if passed in array need to copy for shifting etc
|
|
37
|
-
let idCopy = cloneDeep(id);
|
|
39
|
+
let idCopy = fp_1.cloneDeep(id);
|
|
38
40
|
if (filters) {
|
|
39
41
|
// need to map over the filters and make sure the _id field isn't present
|
|
40
42
|
for (let filter of Object.values(filters)) {
|
|
@@ -77,10 +79,10 @@ var External;
|
|
|
77
79
|
*/
|
|
78
80
|
function cleanupConfig(config, table) {
|
|
79
81
|
const primaryOptions = [
|
|
80
|
-
FieldTypes.STRING,
|
|
81
|
-
FieldTypes.LONGFORM,
|
|
82
|
-
FieldTypes.OPTIONS,
|
|
83
|
-
FieldTypes.NUMBER,
|
|
82
|
+
constants_1.FieldTypes.STRING,
|
|
83
|
+
constants_1.FieldTypes.LONGFORM,
|
|
84
|
+
constants_1.FieldTypes.OPTIONS,
|
|
85
|
+
constants_1.FieldTypes.NUMBER,
|
|
84
86
|
];
|
|
85
87
|
// filter out fields which cannot be keys
|
|
86
88
|
const fieldNames = Object.entries(table.schema)
|
|
@@ -133,7 +135,7 @@ var External;
|
|
|
133
135
|
if (!tableId) {
|
|
134
136
|
return {};
|
|
135
137
|
}
|
|
136
|
-
const { datasourceId, tableName } = breakExternalTableId(tableId);
|
|
138
|
+
const { datasourceId, tableName } = utils_3.breakExternalTableId(tableId);
|
|
137
139
|
return {
|
|
138
140
|
datasourceId,
|
|
139
141
|
entityId: tableName,
|
|
@@ -153,11 +155,11 @@ var External;
|
|
|
153
155
|
thisRow._id = generateIdForRow(row, table);
|
|
154
156
|
thisRow.tableId = table._id;
|
|
155
157
|
thisRow._rev = "rev";
|
|
156
|
-
return thisRow;
|
|
158
|
+
return utils_4.processFormulas(table, thisRow);
|
|
157
159
|
}
|
|
158
160
|
function fixArrayTypes(row, table) {
|
|
159
161
|
for (let [fieldName, schema] of Object.entries(table.schema)) {
|
|
160
|
-
if (schema.type === FieldTypes.ARRAY &&
|
|
162
|
+
if (schema.type === constants_1.FieldTypes.ARRAY &&
|
|
161
163
|
typeof row[fieldName] === "string") {
|
|
162
164
|
try {
|
|
163
165
|
row[fieldName] = JSON.parse(row[fieldName]);
|
|
@@ -174,9 +176,8 @@ var External;
|
|
|
174
176
|
return (field.relationshipType && field.relationshipType.split("-")[0] === "one");
|
|
175
177
|
}
|
|
176
178
|
class ExternalRequest {
|
|
177
|
-
constructor(
|
|
179
|
+
constructor(operation, tableId, datasource) {
|
|
178
180
|
this.tables = {};
|
|
179
|
-
this.appId = appId;
|
|
180
181
|
this.operation = operation;
|
|
181
182
|
this.tableId = tableId;
|
|
182
183
|
this.datasource = datasource;
|
|
@@ -188,8 +189,10 @@ var External;
|
|
|
188
189
|
if (!tableId) {
|
|
189
190
|
throw "Table ID is unknown, cannot find table";
|
|
190
191
|
}
|
|
191
|
-
const { tableName } = breakExternalTableId(tableId);
|
|
192
|
-
|
|
192
|
+
const { tableName } = utils_3.breakExternalTableId(tableId);
|
|
193
|
+
if (tableName) {
|
|
194
|
+
return this.tables[tableName];
|
|
195
|
+
}
|
|
193
196
|
}
|
|
194
197
|
inputProcessing(row, table) {
|
|
195
198
|
if (!row) {
|
|
@@ -204,7 +207,7 @@ var External;
|
|
|
204
207
|
if (row[key] == null ||
|
|
205
208
|
newRow[key] ||
|
|
206
209
|
field.autocolumn ||
|
|
207
|
-
field.type === FieldTypes.FORMULA) {
|
|
210
|
+
field.type === constants_1.FieldTypes.FORMULA) {
|
|
208
211
|
continue;
|
|
209
212
|
}
|
|
210
213
|
// if its an empty string then it means return the column to null (if possible)
|
|
@@ -213,17 +216,17 @@ var External;
|
|
|
213
216
|
continue;
|
|
214
217
|
}
|
|
215
218
|
// parse floats/numbers
|
|
216
|
-
if (field.type === FieldTypes.NUMBER && !isNaN(parseFloat(row[key]))) {
|
|
219
|
+
if (field.type === constants_1.FieldTypes.NUMBER && !isNaN(parseFloat(row[key]))) {
|
|
217
220
|
newRow[key] = parseFloat(row[key]);
|
|
218
221
|
}
|
|
219
222
|
// if its not a link then just copy it over
|
|
220
|
-
if (field.type !== FieldTypes.LINK) {
|
|
223
|
+
if (field.type !== constants_1.FieldTypes.LINK) {
|
|
221
224
|
newRow[key] = row[key];
|
|
222
225
|
continue;
|
|
223
226
|
}
|
|
224
|
-
const { tableName: linkTableName } = breakExternalTableId(field.tableId);
|
|
227
|
+
const { tableName: linkTableName } = utils_3.breakExternalTableId(field === null || field === void 0 ? void 0 : field.tableId);
|
|
225
228
|
// table has to exist for many to many
|
|
226
|
-
if (!this.tables[linkTableName]) {
|
|
229
|
+
if (!linkTableName || !this.tables[linkTableName]) {
|
|
227
230
|
continue;
|
|
228
231
|
}
|
|
229
232
|
const linkTable = this.tables[linkTableName];
|
|
@@ -275,14 +278,24 @@ var External;
|
|
|
275
278
|
* This iterates through the returned rows and works out what elements of the rows
|
|
276
279
|
* actually match up to another row (based on primary keys) - this is pretty specific
|
|
277
280
|
* to SQL and the way that SQL relationships are returned based on joins.
|
|
281
|
+
* This is complicated, but the idea is that when a SQL query returns all the relations
|
|
282
|
+
* will be separate rows, with all of the data in each row. We have to decipher what comes
|
|
283
|
+
* from where (which tables) and how to convert that into budibase columns.
|
|
278
284
|
*/
|
|
279
|
-
updateRelationshipColumns(row, rows, relationships) {
|
|
285
|
+
updateRelationshipColumns(table, row, rows, relationships) {
|
|
280
286
|
const columns = {};
|
|
281
287
|
for (let relationship of relationships) {
|
|
282
288
|
const linkedTable = this.tables[relationship.tableName];
|
|
283
289
|
if (!linkedTable) {
|
|
284
290
|
continue;
|
|
285
291
|
}
|
|
292
|
+
const fromColumn = `${table.name}.${relationship.from}`;
|
|
293
|
+
const toColumn = `${linkedTable.name}.${relationship.to}`;
|
|
294
|
+
// this is important when working with multiple relationships
|
|
295
|
+
// between the same tables, don't want to overlap/multiply the relations
|
|
296
|
+
if (!relationship.through && row[fromColumn] !== row[toColumn]) {
|
|
297
|
+
continue;
|
|
298
|
+
}
|
|
286
299
|
let linked = basicProcessing(row, linkedTable);
|
|
287
300
|
if (!linked._id) {
|
|
288
301
|
continue;
|
|
@@ -320,7 +333,7 @@ var External;
|
|
|
320
333
|
row._id = rowId;
|
|
321
334
|
// this is a relationship of some sort
|
|
322
335
|
if (finalRows[rowId]) {
|
|
323
|
-
finalRows = this.updateRelationshipColumns(row, finalRows, relationships);
|
|
336
|
+
finalRows = this.updateRelationshipColumns(table, row, finalRows, relationships);
|
|
324
337
|
continue;
|
|
325
338
|
}
|
|
326
339
|
const thisRow = fixArrayTypes(basicProcessing(row, table), table);
|
|
@@ -329,9 +342,9 @@ var External;
|
|
|
329
342
|
}
|
|
330
343
|
finalRows[thisRow._id] = thisRow;
|
|
331
344
|
// do this at end once its been added to the final rows
|
|
332
|
-
finalRows = this.updateRelationshipColumns(row, finalRows, relationships);
|
|
345
|
+
finalRows = this.updateRelationshipColumns(table, row, finalRows, relationships);
|
|
333
346
|
}
|
|
334
|
-
return processFormulas(table, Object.values(finalRows));
|
|
347
|
+
return utils_4.processFormulas(table, Object.values(finalRows));
|
|
335
348
|
}
|
|
336
349
|
/**
|
|
337
350
|
* Gets the list of relationship JSON structures based on the columns in the table,
|
|
@@ -341,12 +354,12 @@ var External;
|
|
|
341
354
|
buildRelationships(table) {
|
|
342
355
|
const relationships = [];
|
|
343
356
|
for (let [fieldName, field] of Object.entries(table.schema)) {
|
|
344
|
-
if (field.type !== FieldTypes.LINK) {
|
|
357
|
+
if (field.type !== constants_1.FieldTypes.LINK) {
|
|
345
358
|
continue;
|
|
346
359
|
}
|
|
347
|
-
const { tableName: linkTableName } = breakExternalTableId(field.tableId);
|
|
360
|
+
const { tableName: linkTableName } = utils_3.breakExternalTableId(field.tableId);
|
|
348
361
|
// no table to link to, this is not a valid relationships
|
|
349
|
-
if (!this.tables[linkTableName]) {
|
|
362
|
+
if (!linkTableName || !this.tables[linkTableName]) {
|
|
350
363
|
continue;
|
|
351
364
|
}
|
|
352
365
|
const linkTable = this.tables[linkTableName];
|
|
@@ -362,7 +375,7 @@ var External;
|
|
|
362
375
|
column: fieldName,
|
|
363
376
|
};
|
|
364
377
|
if (field.through) {
|
|
365
|
-
const { tableName: throughTableName } = breakExternalTableId(field.through);
|
|
378
|
+
const { tableName: throughTableName } = utils_3.breakExternalTableId(field.through);
|
|
366
379
|
definition.through = throughTableName;
|
|
367
380
|
// don't support composite keys for relationships
|
|
368
381
|
definition.from = field.throughTo || table.primary[0];
|
|
@@ -381,21 +394,24 @@ var External;
|
|
|
381
394
|
lookupRelations(tableId, row) {
|
|
382
395
|
return __awaiter(this, void 0, void 0, function* () {
|
|
383
396
|
const related = {};
|
|
384
|
-
const { tableName } = breakExternalTableId(tableId);
|
|
397
|
+
const { tableName } = utils_3.breakExternalTableId(tableId);
|
|
398
|
+
if (!tableName) {
|
|
399
|
+
return related;
|
|
400
|
+
}
|
|
385
401
|
const table = this.tables[tableName];
|
|
386
402
|
// @ts-ignore
|
|
387
403
|
const primaryKey = table.primary[0];
|
|
388
404
|
// make a new request to get the row with all its relationships
|
|
389
405
|
// we need this to work out if any relationships need removed
|
|
390
406
|
for (let field of Object.values(table.schema)) {
|
|
391
|
-
if (field.type !== FieldTypes.LINK ||
|
|
407
|
+
if (field.type !== constants_1.FieldTypes.LINK ||
|
|
392
408
|
!field.fieldName ||
|
|
393
409
|
isOneSide(field)) {
|
|
394
410
|
continue;
|
|
395
411
|
}
|
|
396
|
-
const isMany = field.relationshipType === RelationshipTypes.MANY_TO_MANY;
|
|
412
|
+
const isMany = field.relationshipType === constants_1.RelationshipTypes.MANY_TO_MANY;
|
|
397
413
|
const tableId = isMany ? field.through : field.tableId;
|
|
398
|
-
const { tableName: relatedTableName } = breakExternalTableId(tableId);
|
|
414
|
+
const { tableName: relatedTableName } = utils_3.breakExternalTableId(tableId);
|
|
399
415
|
// @ts-ignore
|
|
400
416
|
const linkPrimaryKey = this.tables[relatedTableName].primary[0];
|
|
401
417
|
const manyKey = field.throughTo || primaryKey;
|
|
@@ -404,8 +420,8 @@ var External;
|
|
|
404
420
|
if (!lookupField || !row[lookupField]) {
|
|
405
421
|
continue;
|
|
406
422
|
}
|
|
407
|
-
const response = yield getDatasourceAndQuery(
|
|
408
|
-
endpoint: getEndpoint(tableId, DataSourceOperation.READ),
|
|
423
|
+
const response = yield utils_2.getDatasourceAndQuery({
|
|
424
|
+
endpoint: getEndpoint(tableId, constants_1.DataSourceOperation.READ),
|
|
409
425
|
filters: {
|
|
410
426
|
equal: {
|
|
411
427
|
[fieldName]: row[lookupField],
|
|
@@ -432,24 +448,26 @@ var External;
|
|
|
432
448
|
*/
|
|
433
449
|
handleManyRelationships(mainTableId, row, relationships) {
|
|
434
450
|
return __awaiter(this, void 0, void 0, function* () {
|
|
435
|
-
const { appId } = this;
|
|
436
451
|
// if we're creating (in a through table) need to wipe the existing ones first
|
|
437
452
|
const promises = [];
|
|
438
453
|
const related = yield this.lookupRelations(mainTableId, row);
|
|
439
454
|
for (let relationship of relationships) {
|
|
440
455
|
const { key, tableId, isUpdate, id } = relationship, rest = __rest(relationship, ["key", "tableId", "isUpdate", "id"]);
|
|
441
|
-
const body = processObjectSync(rest, row);
|
|
456
|
+
const body = string_templates_1.processObjectSync(rest, row, {});
|
|
442
457
|
const linkTable = this.getTable(tableId);
|
|
443
458
|
// @ts-ignore
|
|
444
|
-
const linkPrimary = linkTable.primary[0];
|
|
459
|
+
const linkPrimary = linkTable === null || linkTable === void 0 ? void 0 : linkTable.primary[0];
|
|
460
|
+
if (!linkTable || !linkPrimary) {
|
|
461
|
+
return;
|
|
462
|
+
}
|
|
445
463
|
const rows = related[key].rows || [];
|
|
446
464
|
const found = rows.find((row) => row[linkPrimary] === relationship.id ||
|
|
447
|
-
row[linkPrimary] === body[linkPrimary]);
|
|
465
|
+
row[linkPrimary] === (body === null || body === void 0 ? void 0 : body[linkPrimary]));
|
|
448
466
|
const operation = isUpdate
|
|
449
|
-
? DataSourceOperation.UPDATE
|
|
450
|
-
: DataSourceOperation.CREATE;
|
|
467
|
+
? constants_1.DataSourceOperation.UPDATE
|
|
468
|
+
: constants_1.DataSourceOperation.CREATE;
|
|
451
469
|
if (!found) {
|
|
452
|
-
promises.push(getDatasourceAndQuery(
|
|
470
|
+
promises.push(utils_2.getDatasourceAndQuery({
|
|
453
471
|
endpoint: getEndpoint(tableId, operation),
|
|
454
472
|
// if we're doing many relationships then we're writing, only one response
|
|
455
473
|
body,
|
|
@@ -465,7 +483,8 @@ var External;
|
|
|
465
483
|
for (let [colName, { isMany, rows, tableId }] of Object.entries(related)) {
|
|
466
484
|
const table = this.getTable(tableId);
|
|
467
485
|
// if its not the foreign key skip it, nothing to do
|
|
468
|
-
if (table
|
|
486
|
+
if (!table ||
|
|
487
|
+
(table.primary && table.primary.indexOf(colName) !== -1)) {
|
|
469
488
|
continue;
|
|
470
489
|
}
|
|
471
490
|
for (let row of rows) {
|
|
@@ -473,10 +492,10 @@ var External;
|
|
|
473
492
|
// safety check, if there are no filters on deletion bad things happen
|
|
474
493
|
if (Object.keys(filters).length !== 0) {
|
|
475
494
|
const op = isMany
|
|
476
|
-
? DataSourceOperation.DELETE
|
|
477
|
-
: DataSourceOperation.UPDATE;
|
|
495
|
+
? constants_1.DataSourceOperation.DELETE
|
|
496
|
+
: constants_1.DataSourceOperation.UPDATE;
|
|
478
497
|
const body = isMany ? null : { [colName]: null };
|
|
479
|
-
promises.push(getDatasourceAndQuery(
|
|
498
|
+
promises.push(utils_2.getDatasourceAndQuery({
|
|
480
499
|
endpoint: getEndpoint(tableId, op),
|
|
481
500
|
body,
|
|
482
501
|
filters,
|
|
@@ -497,31 +516,36 @@ var External;
|
|
|
497
516
|
buildFields(table, includeRelations = datasource_1.IncludeRelationships.INCLUDE) {
|
|
498
517
|
function extractRealFields(table, existing = []) {
|
|
499
518
|
return Object.entries(table.schema)
|
|
500
|
-
.filter(column => column[1].type !== FieldTypes.LINK &&
|
|
501
|
-
column[1].type !== FieldTypes.FORMULA &&
|
|
519
|
+
.filter(column => column[1].type !== constants_1.FieldTypes.LINK &&
|
|
520
|
+
column[1].type !== constants_1.FieldTypes.FORMULA &&
|
|
502
521
|
!existing.find((field) => field === column[0]))
|
|
503
522
|
.map(column => `${table.name}.${column[0]}`);
|
|
504
523
|
}
|
|
505
524
|
let fields = extractRealFields(table);
|
|
506
525
|
for (let field of Object.values(table.schema)) {
|
|
507
|
-
if (field.type !== FieldTypes.LINK || !includeRelations) {
|
|
526
|
+
if (field.type !== constants_1.FieldTypes.LINK || !includeRelations) {
|
|
508
527
|
continue;
|
|
509
528
|
}
|
|
510
|
-
const { tableName: linkTableName } = breakExternalTableId(field.tableId);
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
529
|
+
const { tableName: linkTableName } = utils_3.breakExternalTableId(field.tableId);
|
|
530
|
+
if (linkTableName) {
|
|
531
|
+
const linkTable = this.tables[linkTableName];
|
|
532
|
+
if (linkTable) {
|
|
533
|
+
const linkedFields = extractRealFields(linkTable, fields);
|
|
534
|
+
fields = fields.concat(linkedFields);
|
|
535
|
+
}
|
|
515
536
|
}
|
|
516
537
|
}
|
|
517
538
|
return fields;
|
|
518
539
|
}
|
|
519
540
|
run(config) {
|
|
520
541
|
return __awaiter(this, void 0, void 0, function* () {
|
|
521
|
-
const {
|
|
522
|
-
let { datasourceId, tableName } = breakExternalTableId(tableId);
|
|
542
|
+
const { operation, tableId } = this;
|
|
543
|
+
let { datasourceId, tableName } = utils_3.breakExternalTableId(tableId);
|
|
544
|
+
if (!tableName) {
|
|
545
|
+
throw "Unable to run without a table name";
|
|
546
|
+
}
|
|
523
547
|
if (!this.datasource) {
|
|
524
|
-
const db =
|
|
548
|
+
const db = context_1.getAppDB();
|
|
525
549
|
this.datasource = yield db.get(datasourceId);
|
|
526
550
|
if (!this.datasource || !this.datasource.entities) {
|
|
527
551
|
throw "No tables found, fetch tables before query.";
|
|
@@ -529,7 +553,7 @@ var External;
|
|
|
529
553
|
this.tables = this.datasource.entities;
|
|
530
554
|
}
|
|
531
555
|
const table = this.tables[tableName];
|
|
532
|
-
let isSql = isSQL(this.datasource);
|
|
556
|
+
let isSql = utils_3.isSQL(this.datasource);
|
|
533
557
|
if (!table) {
|
|
534
558
|
throw `Unable to process query, table "${tableName}" not defined.`;
|
|
535
559
|
}
|
|
@@ -540,7 +564,7 @@ var External;
|
|
|
540
564
|
// clean up row on ingress using schema
|
|
541
565
|
const processed = this.inputProcessing(row, table);
|
|
542
566
|
row = processed.row;
|
|
543
|
-
if (operation === DataSourceOperation.DELETE &&
|
|
567
|
+
if (operation === constants_1.DataSourceOperation.DELETE &&
|
|
544
568
|
(filters == null || Object.keys(filters).length === 0)) {
|
|
545
569
|
throw "Deletion must be filtered";
|
|
546
570
|
}
|
|
@@ -568,15 +592,15 @@ var External;
|
|
|
568
592
|
},
|
|
569
593
|
};
|
|
570
594
|
// can't really use response right now
|
|
571
|
-
const response = yield getDatasourceAndQuery(
|
|
595
|
+
const response = yield utils_2.getDatasourceAndQuery(json);
|
|
572
596
|
// handle many to many relationships now if we know the ID (could be auto increment)
|
|
573
|
-
if (operation !== DataSourceOperation.READ &&
|
|
597
|
+
if (operation !== constants_1.DataSourceOperation.READ &&
|
|
574
598
|
processed.manyRelationships) {
|
|
575
599
|
yield this.handleManyRelationships(table._id || "", response[0], processed.manyRelationships);
|
|
576
600
|
}
|
|
577
601
|
const output = this.outputProcessing(response, table, relationships);
|
|
578
602
|
// if reading it'll just be an array of rows, return whole thing
|
|
579
|
-
return operation === DataSourceOperation.READ && Array.isArray(response)
|
|
603
|
+
return operation === constants_1.DataSourceOperation.READ && Array.isArray(response)
|
|
580
604
|
? output
|
|
581
605
|
: { row: output[0], table };
|
|
582
606
|
});
|
|
@@ -22,8 +22,8 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
22
22
|
const { DataSourceOperation, SortDirection, FieldTypes, NoEmptyFilterStrings, } = require("../../../constants");
|
|
23
23
|
const { breakExternalTableId, breakRowIdField, } = require("../../../integrations/utils");
|
|
24
24
|
const ExternalRequest = require("./ExternalRequest");
|
|
25
|
-
const
|
|
26
|
-
function handleRequest(
|
|
25
|
+
const { getAppDB } = require("@budibase/backend-core/context");
|
|
26
|
+
function handleRequest(operation, tableId, opts = {}) {
|
|
27
27
|
return __awaiter(this, void 0, void 0, function* () {
|
|
28
28
|
// make sure the filters are cleaned up, no empty strings for equals, fuzzy or string
|
|
29
29
|
if (opts && opts.filters) {
|
|
@@ -38,27 +38,25 @@ function handleRequest(appId, operation, tableId, opts = {}) {
|
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
|
-
return new ExternalRequest(
|
|
41
|
+
return new ExternalRequest(operation, tableId, opts.datasource).run(opts);
|
|
42
42
|
});
|
|
43
43
|
}
|
|
44
44
|
exports.handleRequest = handleRequest;
|
|
45
45
|
exports.patch = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
46
|
-
const appId = ctx.appId;
|
|
47
46
|
const inputs = ctx.request.body;
|
|
48
47
|
const tableId = ctx.params.tableId;
|
|
49
48
|
const id = breakRowIdField(inputs._id);
|
|
50
49
|
// don't save the ID to db
|
|
51
50
|
delete inputs._id;
|
|
52
|
-
return handleRequest(
|
|
51
|
+
return handleRequest(DataSourceOperation.UPDATE, tableId, {
|
|
53
52
|
id,
|
|
54
53
|
row: inputs,
|
|
55
54
|
});
|
|
56
55
|
});
|
|
57
56
|
exports.save = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
58
|
-
const appId = ctx.appId;
|
|
59
57
|
const inputs = ctx.request.body;
|
|
60
58
|
const tableId = ctx.params.tableId;
|
|
61
|
-
return handleRequest(
|
|
59
|
+
return handleRequest(DataSourceOperation.CREATE, tableId, {
|
|
62
60
|
row: inputs,
|
|
63
61
|
});
|
|
64
62
|
});
|
|
@@ -70,35 +68,31 @@ exports.fetchView = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
70
68
|
return exports.fetch(ctx);
|
|
71
69
|
});
|
|
72
70
|
exports.fetch = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
73
|
-
const appId = ctx.appId;
|
|
74
71
|
const tableId = ctx.params.tableId;
|
|
75
|
-
return handleRequest(
|
|
72
|
+
return handleRequest(DataSourceOperation.READ, tableId);
|
|
76
73
|
});
|
|
77
74
|
exports.find = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
78
|
-
const appId = ctx.appId;
|
|
79
75
|
const id = ctx.params.rowId;
|
|
80
76
|
const tableId = ctx.params.tableId;
|
|
81
|
-
const response = yield handleRequest(
|
|
77
|
+
const response = yield handleRequest(DataSourceOperation.READ, tableId, {
|
|
82
78
|
id,
|
|
83
79
|
});
|
|
84
80
|
return response ? response[0] : response;
|
|
85
81
|
});
|
|
86
82
|
exports.destroy = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
87
|
-
const appId = ctx.appId;
|
|
88
83
|
const tableId = ctx.params.tableId;
|
|
89
84
|
const id = ctx.request.body._id;
|
|
90
|
-
const { row } = yield handleRequest(
|
|
85
|
+
const { row } = yield handleRequest(DataSourceOperation.DELETE, tableId, {
|
|
91
86
|
id,
|
|
92
87
|
});
|
|
93
88
|
return { response: { ok: true }, row };
|
|
94
89
|
});
|
|
95
90
|
exports.bulkDestroy = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
96
|
-
const appId = ctx.appId;
|
|
97
91
|
const { rows } = ctx.request.body;
|
|
98
92
|
const tableId = ctx.params.tableId;
|
|
99
93
|
let promises = [];
|
|
100
94
|
for (let row of rows) {
|
|
101
|
-
promises.push(handleRequest(
|
|
95
|
+
promises.push(handleRequest(DataSourceOperation.DELETE, tableId, {
|
|
102
96
|
id: breakRowIdField(row._id),
|
|
103
97
|
}));
|
|
104
98
|
}
|
|
@@ -106,7 +100,6 @@ exports.bulkDestroy = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
106
100
|
return { response: { ok: true }, rows: responses.map(resp => resp.row) };
|
|
107
101
|
});
|
|
108
102
|
exports.search = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
109
|
-
const appId = ctx.appId;
|
|
110
103
|
const tableId = ctx.params.tableId;
|
|
111
104
|
const _a = ctx.request.body, { paginate, query } = _a, params = __rest(_a, ["paginate", "query"]);
|
|
112
105
|
let { bookmark, limit } = params;
|
|
@@ -135,14 +128,14 @@ exports.search = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
135
128
|
[params.sort]: direction,
|
|
136
129
|
};
|
|
137
130
|
}
|
|
138
|
-
const rows = yield handleRequest(
|
|
131
|
+
const rows = yield handleRequest(DataSourceOperation.READ, tableId, {
|
|
139
132
|
filters: query,
|
|
140
133
|
sort,
|
|
141
134
|
paginate: paginateObj,
|
|
142
135
|
});
|
|
143
136
|
let hasNextPage = false;
|
|
144
137
|
if (paginate && rows.length === limit) {
|
|
145
|
-
const nextRows = yield handleRequest(
|
|
138
|
+
const nextRows = yield handleRequest(DataSourceOperation.READ, tableId, {
|
|
146
139
|
filters: query,
|
|
147
140
|
sort,
|
|
148
141
|
paginate: {
|
|
@@ -160,17 +153,16 @@ exports.validate = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
160
153
|
return { valid: true };
|
|
161
154
|
});
|
|
162
155
|
exports.fetchEnrichedRow = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
163
|
-
const appId = ctx.appId;
|
|
164
156
|
const id = ctx.params.rowId;
|
|
165
157
|
const tableId = ctx.params.tableId;
|
|
166
158
|
const { datasourceId, tableName } = breakExternalTableId(tableId);
|
|
167
|
-
const db =
|
|
159
|
+
const db = getAppDB();
|
|
168
160
|
const datasource = yield db.get(datasourceId);
|
|
169
161
|
if (!datasource || !datasource.entities) {
|
|
170
162
|
ctx.throw(400, "Datasource has not been configured for plus API.");
|
|
171
163
|
}
|
|
172
164
|
const tables = datasource.entities;
|
|
173
|
-
const response = yield handleRequest(
|
|
165
|
+
const response = yield handleRequest(DataSourceOperation.READ, tableId, {
|
|
174
166
|
id,
|
|
175
167
|
datasource,
|
|
176
168
|
});
|
|
@@ -189,7 +181,7 @@ exports.fetchEnrichedRow = (ctx) => __awaiter(void 0, void 0, void 0, function*
|
|
|
189
181
|
const linkedTable = tables[breakExternalTableId(linkedTableId).tableName];
|
|
190
182
|
// don't support composite keys right now
|
|
191
183
|
const linkedIds = links.map(link => breakRowIdField(link._id)[0]);
|
|
192
|
-
row[fieldName] = yield handleRequest(
|
|
184
|
+
row[fieldName] = yield handleRequest(DataSourceOperation.READ, linkedTableId, {
|
|
193
185
|
tables,
|
|
194
186
|
filters: {
|
|
195
187
|
oneOf: {
|