@budibase/server 1.0.49-alpha.9 → 1.0.49
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 +5 -4
- package/__mocks__/mssql.ts +3 -3
- package/__mocks__/node-fetch.ts +1 -2
- package/__mocks__/pg.ts +5 -3
- package/builder/assets/{index.ad5370ae.js → index.2c37968e.js} +246 -249
- package/builder/assets/index.39e01193.css +1 -0
- package/builder/assets/{vendor.d526bfe8.js → vendor.f9faf6ab.js} +12 -12
- package/builder/index.html +3 -3
- package/coverage/clover.xml +2827 -3117
- package/coverage/coverage-final.json +101 -106
- 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 +152 -257
- package/coverage/lcov-report/api/controllers/auth.js.html +13 -22
- package/coverage/lcov-report/api/controllers/automation.js.html +69 -39
- package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
- package/coverage/lcov-report/api/controllers/cloud.js.html +11 -8
- package/coverage/lcov-report/api/controllers/component.js.html +16 -13
- package/coverage/lcov-report/api/controllers/datasource.js.html +51 -81
- package/coverage/lcov-report/api/controllers/dev.js.html +6 -6
- package/coverage/lcov-report/{utilities/usageQuota/usageQuoteReset.js.html → api/controllers/hosting.js.html} +48 -36
- 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 +21 -6
- 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 +35 -38
- 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 +10 -7
- package/coverage/lcov-report/api/controllers/row/external.js.html +141 -48
- package/coverage/lcov-report/api/controllers/row/index.html +40 -55
- package/coverage/lcov-report/api/controllers/row/index.js.html +26 -26
- package/coverage/lcov-report/api/controllers/row/internal.js.html +226 -118
- package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +34 -52
- package/coverage/lcov-report/api/controllers/row/utils.js.html +62 -47
- package/coverage/lcov-report/api/controllers/screen.js.html +21 -15
- package/coverage/lcov-report/api/controllers/script.js.html +4 -4
- package/coverage/lcov-report/api/controllers/table/external.js.html +34 -25
- package/coverage/lcov-report/api/controllers/table/index.html +43 -58
- package/coverage/lcov-report/api/controllers/table/index.js.html +82 -58
- package/coverage/lcov-report/api/controllers/table/internal.js.html +66 -81
- package/coverage/lcov-report/api/controllers/table/utils.js.html +110 -218
- package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
- package/coverage/lcov-report/api/controllers/user.js.html +50 -47
- 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 +33 -27
- package/coverage/lcov-report/api/controllers/view/utils.js.html +20 -35
- package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +7 -7
- package/coverage/lcov-report/api/controllers/webhook.js.html +28 -34
- 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/{migrations.js.html → hosting.js.html} +14 -17
- 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/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 +2 -17
- 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 +10 -7
- 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 +22 -13
- package/coverage/lcov-report/automations/steps/delay.js.html +4 -4
- package/coverage/lcov-report/automations/steps/deleteRow.js.html +20 -11
- 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 +55 -61
- package/coverage/lcov-report/automations/utils.js.html +42 -54
- package/coverage/lcov-report/constants/index.html +5 -5
- package/coverage/lcov-report/constants/index.js.html +26 -53
- 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 +37 -25
- package/coverage/lcov-report/db/linkedRows/index.html +27 -27
- package/coverage/lcov-report/db/linkedRows/index.js.html +96 -51
- 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 +120 -135
- 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 +65 -173
- package/coverage/lcov-report/middleware/builder.js.html +10 -10
- package/coverage/lcov-report/middleware/currentapp.js.html +83 -95
- 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 +53 -281
- package/coverage/lcov-report/middleware/utils.js.html +2 -2
- package/coverage/lcov-report/threads/automation.js.html +24 -30
- 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 +24 -39
- 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 +49 -58
- package/coverage/lcov-report/utilities/index.html +37 -37
- package/coverage/lcov-report/utilities/index.js.html +73 -43
- 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 +103 -97
- package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +27 -75
- 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/users.js.html +9 -9
- package/coverage/lcov-report/utilities/workerRequests.js.html +112 -43
- package/coverage/lcov.info +4431 -5013
- package/dist/api/controllers/application.js +60 -90
- package/dist/api/controllers/auth.js +5 -8
- package/dist/api/controllers/automation.js +19 -14
- package/dist/api/controllers/cloud.js +3 -2
- package/dist/api/controllers/component.js +4 -3
- package/dist/api/controllers/datasource.js +10 -20
- package/dist/api/controllers/deploy/Deployment.js +6 -3
- package/dist/api/controllers/deploy/index.js +13 -12
- package/dist/api/controllers/dev.js +5 -5
- package/dist/api/controllers/hosting.js +30 -0
- package/dist/api/controllers/layout.js +3 -3
- package/dist/api/controllers/metadata.js +4 -4
- package/dist/api/controllers/permission.js +4 -4
- package/dist/api/controllers/query/import/index.js +6 -4
- package/dist/api/controllers/query/index.js +10 -11
- package/dist/api/controllers/role.js +5 -5
- package/dist/api/controllers/routing.js +6 -5
- package/dist/api/controllers/row/ExternalRequest.js +67 -90
- package/dist/api/controllers/row/external.js +22 -14
- package/dist/api/controllers/row/internal.js +93 -55
- package/dist/api/controllers/row/internalSearch.js +17 -23
- package/dist/api/controllers/row/utils.js +14 -13
- package/dist/api/controllers/screen.js +7 -5
- package/dist/api/controllers/static/index.js +12 -61
- package/dist/api/controllers/table/external.js +10 -7
- package/dist/api/controllers/table/index.js +13 -16
- package/dist/api/controllers/table/internal.js +16 -22
- package/dist/api/controllers/table/utils.js +35 -62
- package/dist/api/controllers/user.js +20 -18
- package/dist/api/controllers/view/index.js +10 -8
- package/dist/api/controllers/view/utils.js +4 -9
- package/dist/api/controllers/webhook.js +8 -10
- package/dist/api/routes/hosting.js +11 -0
- package/dist/api/routes/index.js +2 -2
- package/dist/api/routes/static.js +1 -2
- package/dist/api/routes/tests/utilities/TestFunctions.js +17 -37
- package/dist/app.js +5 -35
- package/dist/automations/automationUtils.js +3 -2
- package/dist/automations/steps/createRow.js +5 -3
- package/dist/automations/steps/deleteRow.js +4 -1
- package/dist/automations/steps/updateRow.js +1 -1
- package/dist/automations/triggers.js +25 -27
- package/dist/automations/utils.js +5 -10
- package/dist/constants/index.js +0 -7
- package/dist/db/linkedRows/LinkController.js +7 -3
- package/dist/db/linkedRows/index.js +27 -16
- package/dist/db/linkedRows/linkUtils.js +6 -6
- package/dist/db/views/staticViews.js +10 -9
- package/dist/definitions/datasource.js +0 -1
- package/dist/environment.js +1 -4
- package/dist/integrations/base/sql.js +14 -56
- package/dist/integrations/index.js +0 -3
- package/dist/integrations/utils.js +9 -60
- package/dist/middleware/authorized.js +30 -57
- package/dist/middleware/builder.js +2 -2
- package/dist/middleware/currentapp.js +37 -41
- package/dist/middleware/usageQuota.js +15 -82
- package/dist/package.json +5 -8
- package/dist/tests/utilities/TestConfiguration.js +50 -80
- package/dist/threads/automation.js +11 -13
- package/dist/threads/query.js +11 -15
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utilities/fileSystem/index.js +3 -4
- package/dist/utilities/global.js +12 -15
- package/dist/utilities/index.js +17 -7
- package/dist/utilities/routing/index.js +5 -5
- package/dist/utilities/rowProcessor/index.js +17 -23
- package/dist/utilities/rowProcessor/utils.js +4 -14
- package/dist/utilities/{usageQuota/index.js → usageQuota.js} +31 -45
- package/dist/utilities/users.js +3 -3
- package/dist/utilities/workerRequests.js +24 -4
- package/nodemon.json +1 -1
- package/package.json +6 -9
- package/scripts/integrations/postgres/init.sql +6 -11
- package/scripts/likeCypress.ts +1 -1
- package/src/api/controllers/application.js +50 -85
- package/src/api/controllers/auth.js +5 -8
- package/src/api/controllers/automation.js +23 -13
- package/src/api/controllers/cloud.js +3 -2
- package/src/api/controllers/component.js +4 -3
- package/src/api/controllers/datasource.js +11 -21
- package/src/api/controllers/deploy/Deployment.js +7 -3
- package/src/api/controllers/deploy/index.js +13 -20
- package/src/api/controllers/dev.js +5 -5
- package/src/api/controllers/hosting.js +22 -0
- package/src/api/controllers/layout.js +3 -3
- package/src/api/controllers/metadata.js +9 -4
- package/src/api/controllers/permission.js +4 -4
- package/src/api/controllers/query/import/index.ts +6 -4
- package/src/api/controllers/query/import/tests/index.spec.js +1 -2
- package/src/api/controllers/query/index.js +10 -11
- package/src/api/controllers/role.js +5 -5
- package/src/api/controllers/routing.js +6 -5
- package/src/api/controllers/row/ExternalRequest.ts +43 -67
- package/src/api/controllers/row/external.js +58 -27
- package/src/api/controllers/row/internal.js +90 -54
- package/src/api/controllers/row/internalSearch.js +17 -23
- package/src/api/controllers/row/utils.js +18 -13
- package/src/api/controllers/screen.js +7 -5
- package/src/api/controllers/static/index.js +12 -65
- package/src/api/controllers/table/external.js +10 -7
- package/src/api/controllers/table/index.js +28 -20
- package/src/api/controllers/table/internal.js +19 -24
- package/src/api/controllers/table/utils.js +42 -78
- package/src/api/controllers/user.js +20 -19
- package/src/api/controllers/view/index.js +10 -8
- package/src/api/controllers/view/utils.js +4 -9
- package/src/api/controllers/webhook.js +8 -10
- package/src/api/routes/hosting.js +13 -0
- package/src/api/routes/index.js +2 -2
- package/src/api/routes/static.js +0 -5
- package/src/api/routes/tests/application.spec.js +2 -2
- package/src/api/routes/tests/auth.spec.js +2 -1
- package/src/api/routes/tests/automation.spec.js +0 -1
- package/src/api/routes/tests/hosting.spec.js +36 -0
- package/src/api/routes/tests/misc.spec.js +1 -0
- package/src/api/routes/tests/routing.spec.js +12 -21
- package/src/api/routes/tests/row.spec.js +4 -7
- package/src/api/routes/tests/utilities/TestFunctions.js +17 -39
- package/src/app.ts +5 -18
- package/src/automations/automationUtils.js +3 -2
- package/src/automations/steps/createRow.js +5 -2
- package/src/automations/steps/deleteRow.js +4 -1
- package/src/automations/steps/updateRow.js +1 -1
- package/src/automations/triggers.js +31 -33
- package/src/automations/utils.js +5 -9
- package/src/constants/index.js +0 -9
- package/src/db/linkedRows/LinkController.js +7 -3
- package/src/db/linkedRows/index.js +31 -16
- package/src/db/linkedRows/linkUtils.js +6 -6
- package/src/db/tests/linkController.spec.js +1 -0
- package/src/db/tests/linkTests.spec.js +6 -5
- package/src/db/views/staticViews.js +10 -8
- package/src/definitions/common.ts +0 -3
- package/src/definitions/datasource.ts +0 -3
- package/src/environment.js +1 -4
- package/src/integrations/base/sql.ts +21 -69
- package/src/integrations/index.ts +0 -3
- package/src/integrations/tests/sql.spec.js +0 -16
- package/src/integrations/utils.ts +12 -75
- package/src/middleware/authorized.js +30 -66
- package/src/middleware/builder.js +2 -2
- package/src/middleware/currentapp.js +46 -50
- package/src/middleware/tests/authorized.spec.js +6 -13
- package/src/middleware/tests/currentapp.spec.js +0 -6
- package/src/middleware/tests/usageQuota.spec.js +24 -18
- package/src/middleware/usageQuota.js +17 -93
- package/src/tests/utilities/TestConfiguration.js +55 -82
- package/src/threads/automation.js +15 -17
- package/src/threads/query.js +12 -17
- package/src/utilities/fileSystem/index.js +3 -4
- package/src/utilities/global.js +12 -15
- package/src/utilities/index.js +17 -7
- package/src/utilities/routing/index.js +5 -5
- package/src/utilities/rowProcessor/index.js +27 -25
- package/src/utilities/rowProcessor/utils.js +7 -23
- package/src/utilities/usageQuota.js +73 -0
- package/src/utilities/users.js +3 -3
- package/src/utilities/workerRequests.js +27 -4
- package/tsconfig.json +1 -2
- package/builder/assets/index.83c0944f.css +0 -1
- package/coverage/lcov-report/api/controllers/migrations.js.html +0 -119
- package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +0 -548
- package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +0 -599
- package/coverage/lcov-report/utilities/usageQuota/index.html +0 -141
- package/coverage/lcov-report/utilities/usageQuota/index.js.html +0 -359
- package/coverage/lcov-report/utilities/usageQuota/rows.js.html +0 -305
- package/dist/api/controllers/migrations.js +0 -21
- package/dist/api/controllers/row/staticFormula.js +0 -147
- package/dist/api/controllers/table/bulkFormula.js +0 -159
- package/dist/api/routes/migrations.js +0 -9
- package/dist/integrations/googlesheets.js +0 -340
- package/dist/migrations/functions/appUrls.js +0 -46
- package/dist/migrations/functions/quotas1.js +0 -50
- package/dist/migrations/functions/usageQuotas/index.js +0 -20
- package/dist/migrations/functions/usageQuotas/syncApps.js +0 -29
- package/dist/migrations/functions/usageQuotas/syncRows.js +0 -33
- package/dist/migrations/functions/userEmailViewCasing.js +0 -24
- package/dist/migrations/index.js +0 -62
- package/dist/utilities/usageQuota/rows.js +0 -78
- package/dist/utilities/usageQuota/usageQuoteReset.js +0 -16
- package/src/api/controllers/migrations.js +0 -13
- package/src/api/controllers/row/staticFormula.js +0 -156
- package/src/api/controllers/table/bulkFormula.js +0 -173
- package/src/api/routes/migrations.js +0 -14
- package/src/api/routes/tests/static.spec.js +0 -98
- package/src/integrations/googlesheets.ts +0 -353
- package/src/migrations/functions/appUrls.ts +0 -34
- package/src/migrations/functions/quotas1.ts +0 -20
- package/src/migrations/functions/tests/appUrls.spec.js +0 -29
- package/src/migrations/functions/tests/quotas1.spec.js +0 -27
- package/src/migrations/functions/tests/userEmailViewCasing.spec.js +0 -25
- package/src/migrations/functions/usageQuotas/index.ts +0 -8
- package/src/migrations/functions/usageQuotas/syncApps.ts +0 -18
- package/src/migrations/functions/usageQuotas/syncRows.ts +0 -22
- package/src/migrations/functions/usageQuotas/tests/syncApps.spec.js +0 -37
- package/src/migrations/functions/usageQuotas/tests/syncRows.spec.js +0 -43
- package/src/migrations/functions/userEmailViewCasing.ts +0 -13
- package/src/migrations/index.ts +0 -56
- package/src/module.d.ts +0 -3
- package/src/utilities/tests/usageQuota/usageQuota.spec.js +0 -72
- package/src/utilities/usageQuota/index.js +0 -93
- package/src/utilities/usageQuota/rows.js +0 -75
- package/src/utilities/usageQuota/usageQuoteReset.js +0 -18
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
const rowController = require("../../api/controllers/row")
|
|
2
|
+
const env = require("../../environment")
|
|
2
3
|
const usage = require("../../utilities/usageQuota")
|
|
3
4
|
const { buildCtx } = require("./utils")
|
|
4
5
|
const automationUtils = require("../automationUtils")
|
|
@@ -73,7 +74,9 @@ exports.run = async function ({ inputs, appId, emitter }) {
|
|
|
73
74
|
})
|
|
74
75
|
|
|
75
76
|
try {
|
|
76
|
-
|
|
77
|
+
if (env.isProd()) {
|
|
78
|
+
await usage.update(usage.Properties.ROW, -1)
|
|
79
|
+
}
|
|
77
80
|
await rowController.destroy(ctx)
|
|
78
81
|
return {
|
|
79
82
|
response: ctx.body,
|
|
@@ -87,7 +87,7 @@ exports.run = async function ({ inputs, appId, emitter }) {
|
|
|
87
87
|
|
|
88
88
|
try {
|
|
89
89
|
if (tableId) {
|
|
90
|
-
inputs.row = await automationUtils.cleanUpRow(tableId, inputs.row)
|
|
90
|
+
inputs.row = await automationUtils.cleanUpRow(appId, tableId, inputs.row)
|
|
91
91
|
}
|
|
92
92
|
await rowController.patch(ctx)
|
|
93
93
|
return {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
const CouchDB = require("../db")
|
|
1
2
|
const emitter = require("../events/index")
|
|
2
3
|
const { getAutomationParams } = require("../db/utils")
|
|
3
4
|
const { coerce } = require("../utilities/rowProcessor")
|
|
@@ -8,7 +9,6 @@ const { queue } = require("./bullboard")
|
|
|
8
9
|
const { checkTestFlag } = require("../utilities/redis")
|
|
9
10
|
const utils = require("./utils")
|
|
10
11
|
const env = require("../environment")
|
|
11
|
-
const { doInAppContext, getAppDB } = require("@budibase/backend-core/context")
|
|
12
12
|
|
|
13
13
|
const TRIGGER_DEFINITIONS = definitions
|
|
14
14
|
const JOB_OPTS = {
|
|
@@ -21,41 +21,39 @@ async function queueRelevantRowAutomations(event, eventType) {
|
|
|
21
21
|
throw `No appId specified for ${eventType} - check event emitters.`
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
)
|
|
24
|
+
const db = new CouchDB(event.appId)
|
|
25
|
+
let automations = await db.allDocs(
|
|
26
|
+
getAutomationParams(null, { include_docs: true })
|
|
27
|
+
)
|
|
29
28
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
29
|
+
// filter down to the correct event type
|
|
30
|
+
automations = automations.rows
|
|
31
|
+
.map(automation => automation.doc)
|
|
32
|
+
.filter(automation => {
|
|
33
|
+
const trigger = automation.definition.trigger
|
|
34
|
+
return trigger && trigger.event === eventType
|
|
35
|
+
})
|
|
37
36
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
}
|
|
51
|
-
if (
|
|
52
|
-
automationTrigger.inputs &&
|
|
53
|
-
automationTrigger.inputs.tableId === event.row.tableId
|
|
54
|
-
) {
|
|
55
|
-
await queue.add({ automation, event }, JOB_OPTS)
|
|
56
|
-
}
|
|
37
|
+
for (let automation of automations) {
|
|
38
|
+
let automationDef = automation.definition
|
|
39
|
+
let automationTrigger = automationDef ? automationDef.trigger : {}
|
|
40
|
+
// don't queue events which are for dev apps, only way to test automations is
|
|
41
|
+
// running tests on them, in production the test flag will never
|
|
42
|
+
// be checked due to lazy evaluation (first always false)
|
|
43
|
+
if (
|
|
44
|
+
!env.ALLOW_DEV_AUTOMATIONS &&
|
|
45
|
+
isDevAppID(event.appId) &&
|
|
46
|
+
!(await checkTestFlag(automation._id))
|
|
47
|
+
) {
|
|
48
|
+
continue
|
|
57
49
|
}
|
|
58
|
-
|
|
50
|
+
if (
|
|
51
|
+
automationTrigger.inputs &&
|
|
52
|
+
automationTrigger.inputs.tableId === event.row.tableId
|
|
53
|
+
) {
|
|
54
|
+
await queue.add({ automation, event }, JOB_OPTS)
|
|
55
|
+
}
|
|
56
|
+
}
|
|
59
57
|
}
|
|
60
58
|
|
|
61
59
|
emitter.on("row:save", async function (event) {
|
package/src/automations/utils.js
CHANGED
|
@@ -6,9 +6,8 @@ const { queue } = require("./bullboard")
|
|
|
6
6
|
const newid = require("../db/newid")
|
|
7
7
|
const { updateEntityMetadata } = require("../utilities")
|
|
8
8
|
const { MetadataTypes } = require("../constants")
|
|
9
|
-
const {
|
|
9
|
+
const { getDeployedAppID } = require("@budibase/backend-core/db")
|
|
10
10
|
const { cloneDeep } = require("lodash/fp")
|
|
11
|
-
const { getAppDB, getAppId } = require("@budibase/backend-core/context")
|
|
12
11
|
|
|
13
12
|
const WH_STEP_ID = definitions.WEBHOOK.stepId
|
|
14
13
|
const CRON_STEP_ID = definitions.CRON.stepId
|
|
@@ -28,6 +27,7 @@ exports.processEvent = async job => {
|
|
|
28
27
|
|
|
29
28
|
exports.updateTestHistory = async (appId, automation, history) => {
|
|
30
29
|
return updateEntityMetadata(
|
|
30
|
+
appId,
|
|
31
31
|
MetadataTypes.AUTOMATION_TEST_HISTORY,
|
|
32
32
|
automation._id,
|
|
33
33
|
metadata => {
|
|
@@ -93,9 +93,6 @@ exports.enableCronTrigger = async (appId, automation) => {
|
|
|
93
93
|
)
|
|
94
94
|
// Assign cron job ID from bull so we can remove it later if the cron trigger is removed
|
|
95
95
|
trigger.cronJobId = job.id
|
|
96
|
-
// can't use getAppDB here as this is likely to be called from dev app,
|
|
97
|
-
// but this call could be for dev app or prod app, need to just use what
|
|
98
|
-
// was passed in
|
|
99
96
|
const db = new CouchDB(appId)
|
|
100
97
|
const response = await db.put(automation)
|
|
101
98
|
automation._id = response.id
|
|
@@ -112,8 +109,7 @@ exports.enableCronTrigger = async (appId, automation) => {
|
|
|
112
109
|
* @returns {Promise<object|undefined>} After this is complete the new automation object may have been updated and should be
|
|
113
110
|
* written to DB (this does not write to DB as it would be wasteful to repeat).
|
|
114
111
|
*/
|
|
115
|
-
exports.checkForWebhooks = async ({ oldAuto, newAuto }) => {
|
|
116
|
-
const appId = getAppId()
|
|
112
|
+
exports.checkForWebhooks = async ({ appId, oldAuto, newAuto }) => {
|
|
117
113
|
const oldTrigger = oldAuto ? oldAuto.definition.trigger : null
|
|
118
114
|
const newTrigger = newAuto ? newAuto.definition.trigger : null
|
|
119
115
|
const triggerChanged =
|
|
@@ -132,7 +128,7 @@ exports.checkForWebhooks = async ({ oldAuto, newAuto }) => {
|
|
|
132
128
|
oldTrigger.webhookId
|
|
133
129
|
) {
|
|
134
130
|
try {
|
|
135
|
-
let db =
|
|
131
|
+
let db = new CouchDB(appId)
|
|
136
132
|
// need to get the webhook to get the rev
|
|
137
133
|
const webhook = await db.get(oldTrigger.webhookId)
|
|
138
134
|
const ctx = {
|
|
@@ -170,7 +166,7 @@ exports.checkForWebhooks = async ({ oldAuto, newAuto }) => {
|
|
|
170
166
|
// the app ID has to be development for this endpoint
|
|
171
167
|
// it can only be used when building the app
|
|
172
168
|
// but the trigger endpoint will always be used in production
|
|
173
|
-
const prodAppId =
|
|
169
|
+
const prodAppId = getDeployedAppID(appId)
|
|
174
170
|
newTrigger.inputs = {
|
|
175
171
|
schemaUrl: `api/webhooks/schema/${appId}/${id}`,
|
|
176
172
|
triggerUrl: `api/webhooks/trigger/${prodAppId}/${id}`,
|
package/src/constants/index.js
CHANGED
|
@@ -61,11 +61,6 @@ exports.RelationshipTypes = {
|
|
|
61
61
|
MANY_TO_MANY: "many-to-many",
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
-
exports.FormulaTypes = {
|
|
65
|
-
STATIC: "static",
|
|
66
|
-
DYNAMIC: "dynamic",
|
|
67
|
-
}
|
|
68
|
-
|
|
69
64
|
exports.AuthTypes = {
|
|
70
65
|
APP: "app",
|
|
71
66
|
BUILDER: "builder",
|
|
@@ -83,10 +78,6 @@ exports.DataSourceOperation = {
|
|
|
83
78
|
DELETE_TABLE: "DELETE_TABLE",
|
|
84
79
|
}
|
|
85
80
|
|
|
86
|
-
exports.DatasourceAuthTypes = {
|
|
87
|
-
GOOGLE: "google",
|
|
88
|
-
}
|
|
89
|
-
|
|
90
81
|
exports.SortDirection = {
|
|
91
82
|
ASCENDING: "ASCENDING",
|
|
92
83
|
DESCENDING: "DESCENDING",
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
const CouchDB = require("../index")
|
|
1
2
|
const { IncludeDocs, getLinkDocuments } = require("./linkUtils")
|
|
2
3
|
const {
|
|
3
4
|
generateLinkID,
|
|
@@ -6,7 +7,6 @@ const {
|
|
|
6
7
|
} = require("../utils")
|
|
7
8
|
const Sentry = require("@sentry/node")
|
|
8
9
|
const { FieldTypes, RelationshipTypes } = require("../../constants")
|
|
9
|
-
const { getAppDB } = require("@budibase/backend-core/context")
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* Creates a new link document structure which can be put to the database. It is important to
|
|
@@ -52,8 +52,9 @@ function LinkDocument(
|
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
class LinkController {
|
|
55
|
-
constructor({ tableId, row, table, oldTable }) {
|
|
56
|
-
this.
|
|
55
|
+
constructor({ appId, tableId, row, table, oldTable }) {
|
|
56
|
+
this._appId = appId
|
|
57
|
+
this._db = new CouchDB(appId)
|
|
57
58
|
this._tableId = tableId
|
|
58
59
|
this._row = row
|
|
59
60
|
this._table = table
|
|
@@ -98,6 +99,7 @@ class LinkController {
|
|
|
98
99
|
*/
|
|
99
100
|
getRowLinkDocs(rowId) {
|
|
100
101
|
return getLinkDocuments({
|
|
102
|
+
appId: this._appId,
|
|
101
103
|
tableId: this._tableId,
|
|
102
104
|
rowId,
|
|
103
105
|
includeDocs: IncludeDocs.INCLUDE,
|
|
@@ -109,6 +111,7 @@ class LinkController {
|
|
|
109
111
|
*/
|
|
110
112
|
getTableLinkDocs() {
|
|
111
113
|
return getLinkDocuments({
|
|
114
|
+
appId: this._appId,
|
|
112
115
|
tableId: this._tableId,
|
|
113
116
|
includeDocs: IncludeDocs.INCLUDE,
|
|
114
117
|
})
|
|
@@ -227,6 +230,7 @@ class LinkController {
|
|
|
227
230
|
if (linkedSchema.relationshipType === RelationshipTypes.ONE_TO_MANY) {
|
|
228
231
|
let links = (
|
|
229
232
|
await getLinkDocuments({
|
|
233
|
+
appId: this._appId,
|
|
230
234
|
tableId: field.tableId,
|
|
231
235
|
rowId: linkId,
|
|
232
236
|
includeDocs: IncludeDocs.EXCLUDE,
|
|
@@ -9,12 +9,12 @@ const {
|
|
|
9
9
|
getLinkedTable,
|
|
10
10
|
} = require("./linkUtils")
|
|
11
11
|
const { flatten } = require("lodash")
|
|
12
|
+
const CouchDB = require("../../db")
|
|
12
13
|
const { FieldTypes } = require("../../constants")
|
|
13
14
|
const { getMultiIDParams, USER_METDATA_PREFIX } = require("../../db/utils")
|
|
14
15
|
const { partition } = require("lodash")
|
|
15
16
|
const { getGlobalUsersFromMetadata } = require("../../utilities/global")
|
|
16
17
|
const { processFormulas } = require("../../utilities/rowProcessor/utils")
|
|
17
|
-
const { getAppDB } = require("@budibase/backend-core/context")
|
|
18
18
|
|
|
19
19
|
/**
|
|
20
20
|
* This functionality makes sure that when rows with links are created, updated or deleted they are processed
|
|
@@ -48,13 +48,14 @@ function clearRelationshipFields(table, rows) {
|
|
|
48
48
|
return rows
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
async function getLinksForRows(rows) {
|
|
51
|
+
async function getLinksForRows(appId, rows) {
|
|
52
52
|
const tableIds = [...new Set(rows.map(el => el.tableId))]
|
|
53
53
|
// start by getting all the link values for performance reasons
|
|
54
54
|
const responses = flatten(
|
|
55
55
|
await Promise.all(
|
|
56
56
|
tableIds.map(tableId =>
|
|
57
57
|
getLinkDocuments({
|
|
58
|
+
appId,
|
|
58
59
|
tableId: tableId,
|
|
59
60
|
includeDocs: IncludeDocs.EXCLUDE,
|
|
60
61
|
})
|
|
@@ -71,9 +72,9 @@ async function getLinksForRows(rows) {
|
|
|
71
72
|
)
|
|
72
73
|
}
|
|
73
74
|
|
|
74
|
-
async function getFullLinkedDocs(links) {
|
|
75
|
+
async function getFullLinkedDocs(ctx, appId, links) {
|
|
75
76
|
// create DBs
|
|
76
|
-
const db =
|
|
77
|
+
const db = new CouchDB(appId)
|
|
77
78
|
const linkedRowIds = links.map(link => link.id)
|
|
78
79
|
const uniqueRowIds = [...new Set(linkedRowIds)]
|
|
79
80
|
let dbRows = (await db.allDocs(getMultiIDParams(uniqueRowIds))).rows.map(
|
|
@@ -87,7 +88,7 @@ async function getFullLinkedDocs(links) {
|
|
|
87
88
|
let [users, other] = partition(linked, linkRow =>
|
|
88
89
|
linkRow._id.startsWith(USER_METDATA_PREFIX)
|
|
89
90
|
)
|
|
90
|
-
users = await getGlobalUsersFromMetadata(users)
|
|
91
|
+
users = await getGlobalUsersFromMetadata(appId, users)
|
|
91
92
|
return [...other, ...users]
|
|
92
93
|
}
|
|
93
94
|
|
|
@@ -95,16 +96,20 @@ async function getFullLinkedDocs(links) {
|
|
|
95
96
|
* Update link documents for a row or table - this is to be called by the API controller when a change is occurring.
|
|
96
97
|
* @param {string} args.eventType states what type of change which is occurring, means this can be expanded upon in the
|
|
97
98
|
* future quite easily (all updates go through one function).
|
|
99
|
+
* @param {string} args.appId The ID of the instance in which the change is occurring.
|
|
98
100
|
* @param {string} args.tableId The ID of the of the table which is being changed.
|
|
99
|
-
* @param {object|
|
|
100
|
-
* @param {object|
|
|
101
|
-
* @param {object|
|
|
101
|
+
* @param {object|null} args.row The row which is changing, e.g. created, updated or deleted.
|
|
102
|
+
* @param {object|null} args.table If the table has already been retrieved this can be used to reduce database gets.
|
|
103
|
+
* @param {object|null} args.oldTable If the table is being updated then the old table can be provided for differencing.
|
|
102
104
|
* @returns {Promise<object>} When the update is complete this will respond successfully. Returns the row for
|
|
103
105
|
* row operations and the table for table operations.
|
|
104
106
|
*/
|
|
105
107
|
exports.updateLinks = async function (args) {
|
|
106
|
-
const { eventType, row, tableId, table, oldTable } = args
|
|
108
|
+
const { eventType, appId, row, tableId, table, oldTable } = args
|
|
107
109
|
const baseReturnObj = row == null ? table : row
|
|
110
|
+
if (appId == null) {
|
|
111
|
+
throw "Cannot operate without an instance ID."
|
|
112
|
+
}
|
|
108
113
|
// make sure table ID is set
|
|
109
114
|
if (tableId == null && table != null) {
|
|
110
115
|
args.tableId = table._id
|
|
@@ -141,23 +146,27 @@ exports.updateLinks = async function (args) {
|
|
|
141
146
|
/**
|
|
142
147
|
* Given a table and a list of rows this will retrieve all of the attached docs and enrich them into the row.
|
|
143
148
|
* This is required for formula fields, this may only be utilised internally (for now).
|
|
149
|
+
* @param {object} ctx The request which is looking for rows.
|
|
144
150
|
* @param {object} table The table from which the rows originated.
|
|
145
151
|
* @param {array<object>} rows The rows which are to be enriched.
|
|
146
152
|
* @return {Promise<*>} returns the rows with all of the enriched relationships on it.
|
|
147
153
|
*/
|
|
148
|
-
exports.attachFullLinkedDocs = async (table, rows) => {
|
|
154
|
+
exports.attachFullLinkedDocs = async (ctx, table, rows) => {
|
|
155
|
+
const appId = ctx.appId
|
|
149
156
|
const linkedTableIds = getLinkedTableIDs(table)
|
|
150
157
|
if (linkedTableIds.length === 0) {
|
|
151
158
|
return rows
|
|
152
159
|
}
|
|
160
|
+
// create DBs
|
|
161
|
+
const db = new CouchDB(appId)
|
|
153
162
|
// get all the links
|
|
154
|
-
const links = (await getLinksForRows(rows)).filter(link =>
|
|
163
|
+
const links = (await getLinksForRows(appId, rows)).filter(link =>
|
|
155
164
|
rows.some(row => row._id === link.thisId)
|
|
156
165
|
)
|
|
157
166
|
// clear any existing links that could be dupe'd
|
|
158
167
|
rows = clearRelationshipFields(table, rows)
|
|
159
168
|
// now get the docs and combine into the rows
|
|
160
|
-
let linked = await getFullLinkedDocs(links)
|
|
169
|
+
let linked = await getFullLinkedDocs(ctx, appId, links)
|
|
161
170
|
const linkedTables = []
|
|
162
171
|
for (let row of rows) {
|
|
163
172
|
for (let link of links.filter(link => link.thisId === row._id)) {
|
|
@@ -168,7 +177,11 @@ exports.attachFullLinkedDocs = async (table, rows) => {
|
|
|
168
177
|
if (linkedRow) {
|
|
169
178
|
const linkedTableId =
|
|
170
179
|
linkedRow.tableId || getRelatedTableForField(table, link.fieldName)
|
|
171
|
-
const linkedTable = await getLinkedTable(
|
|
180
|
+
const linkedTable = await getLinkedTable(
|
|
181
|
+
db,
|
|
182
|
+
linkedTableId,
|
|
183
|
+
linkedTables
|
|
184
|
+
)
|
|
172
185
|
if (linkedTable) {
|
|
173
186
|
row[link.fieldName].push(processFormulas(linkedTable, linkedRow))
|
|
174
187
|
}
|
|
@@ -180,16 +193,18 @@ exports.attachFullLinkedDocs = async (table, rows) => {
|
|
|
180
193
|
|
|
181
194
|
/**
|
|
182
195
|
* This function will take the given enriched rows and squash the links to only contain the primary display field.
|
|
196
|
+
* @param {string} appId The app in which the tables/rows/links exist.
|
|
183
197
|
* @param {object} table The table from which the rows originated.
|
|
184
198
|
* @param {array<object>} enriched The pre-enriched rows (full docs) which are to be squashed.
|
|
185
199
|
* @returns {Promise<Array>} The rows after having their links squashed to only contain the ID and primary display.
|
|
186
200
|
*/
|
|
187
|
-
exports.squashLinksToPrimaryDisplay = async (table, enriched) => {
|
|
201
|
+
exports.squashLinksToPrimaryDisplay = async (appId, table, enriched) => {
|
|
202
|
+
const db = new CouchDB(appId)
|
|
188
203
|
// will populate this as we find them
|
|
189
204
|
const linkedTables = [table]
|
|
190
205
|
for (let row of enriched) {
|
|
191
206
|
// this only fetches the table if its not already in array
|
|
192
|
-
const rowTable = await getLinkedTable(row.tableId, linkedTables)
|
|
207
|
+
const rowTable = await getLinkedTable(db, row.tableId, linkedTables)
|
|
193
208
|
for (let [column, schema] of Object.entries(rowTable.schema)) {
|
|
194
209
|
if (schema.type !== FieldTypes.LINK || !Array.isArray(row[column])) {
|
|
195
210
|
continue
|
|
@@ -197,7 +212,7 @@ exports.squashLinksToPrimaryDisplay = async (table, enriched) => {
|
|
|
197
212
|
const newLinks = []
|
|
198
213
|
for (let link of row[column]) {
|
|
199
214
|
const linkTblId = link.tableId || getRelatedTableForField(table, column)
|
|
200
|
-
const linkedTable = await getLinkedTable(linkTblId, linkedTables)
|
|
215
|
+
const linkedTable = await getLinkedTable(db, linkTblId, linkedTables)
|
|
201
216
|
const obj = { _id: link._id }
|
|
202
217
|
if (link[linkedTable.primaryDisplay]) {
|
|
203
218
|
obj.primaryDisplay = link[linkedTable.primaryDisplay]
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
const CouchDB = require("../index")
|
|
1
2
|
const Sentry = require("@sentry/node")
|
|
2
3
|
const { ViewNames, getQueryIndex } = require("../utils")
|
|
3
4
|
const { FieldTypes } = require("../../constants")
|
|
4
5
|
const { createLinkView } = require("../views/staticViews")
|
|
5
|
-
const { getAppDB } = require("@budibase/backend-core/context")
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Only needed so that boolean parameters are being used for includeDocs
|
|
@@ -17,6 +17,7 @@ exports.createLinkView = createLinkView
|
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
19
|
* Gets the linking documents, not the linked documents themselves.
|
|
20
|
+
* @param {string} args.appId The instance in which we are searching for linked rows.
|
|
20
21
|
* @param {string} args.tableId The table which we are searching for linked rows against.
|
|
21
22
|
* @param {string|null} args.fieldName The name of column/field which is being altered, only looking for
|
|
22
23
|
* linking documents that are related to it. If this is not specified then the table level will be assumed.
|
|
@@ -29,8 +30,8 @@ exports.createLinkView = createLinkView
|
|
|
29
30
|
* (if any).
|
|
30
31
|
*/
|
|
31
32
|
exports.getLinkDocuments = async function (args) {
|
|
32
|
-
const { tableId, rowId, includeDocs } = args
|
|
33
|
-
const db =
|
|
33
|
+
const { appId, tableId, rowId, includeDocs } = args
|
|
34
|
+
const db = new CouchDB(appId)
|
|
34
35
|
let params
|
|
35
36
|
if (rowId != null) {
|
|
36
37
|
params = { key: [tableId, rowId] }
|
|
@@ -67,7 +68,7 @@ exports.getLinkDocuments = async function (args) {
|
|
|
67
68
|
} catch (err) {
|
|
68
69
|
// check if the view doesn't exist, it should for all new instances
|
|
69
70
|
if (err != null && err.name === "not_found") {
|
|
70
|
-
await exports.createLinkView()
|
|
71
|
+
await exports.createLinkView(appId)
|
|
71
72
|
return exports.getLinkDocuments(arguments[0])
|
|
72
73
|
} else {
|
|
73
74
|
/* istanbul ignore next */
|
|
@@ -88,8 +89,7 @@ exports.getLinkedTableIDs = table => {
|
|
|
88
89
|
.map(column => column.tableId)
|
|
89
90
|
}
|
|
90
91
|
|
|
91
|
-
exports.getLinkedTable = async (id, tables) => {
|
|
92
|
-
const db = getAppDB()
|
|
92
|
+
exports.getLinkedTable = async (db, id, tables) => {
|
|
93
93
|
let linkedTable = tables.find(table => table._id === id)
|
|
94
94
|
if (linkedTable) {
|
|
95
95
|
return linkedTable
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
const TestConfig = require("../../tests/utilities/TestConfiguration")
|
|
2
|
-
const { basicTable } = require("../../tests/utilities/structures")
|
|
2
|
+
const { basicTable, basicLinkedRow } = require("../../tests/utilities/structures")
|
|
3
3
|
const linkUtils = require("../linkedRows/linkUtils")
|
|
4
|
+
const links = require("../linkedRows")
|
|
4
5
|
const CouchDB = require("../index")
|
|
5
|
-
const { getAppDB } = require("@budibase/backend-core/context")
|
|
6
6
|
|
|
7
7
|
describe("test link functionality", () => {
|
|
8
8
|
const config = new TestConfig(false)
|
|
@@ -11,18 +11,18 @@ describe("test link functionality", () => {
|
|
|
11
11
|
let db, table
|
|
12
12
|
beforeEach(async () => {
|
|
13
13
|
await config.init()
|
|
14
|
-
db =
|
|
14
|
+
db = new CouchDB(config.getAppId())
|
|
15
15
|
table = await config.createTable()
|
|
16
16
|
})
|
|
17
17
|
|
|
18
18
|
it("should be able to retrieve a linked table from a list", async () => {
|
|
19
|
-
const retrieved = await linkUtils.getLinkedTable(table._id, [table])
|
|
19
|
+
const retrieved = await linkUtils.getLinkedTable(db, table._id, [table])
|
|
20
20
|
expect(retrieved._id).toBe(table._id)
|
|
21
21
|
})
|
|
22
22
|
|
|
23
23
|
it("should be able to retrieve a table from DB and update list", async () => {
|
|
24
24
|
const tables = []
|
|
25
|
-
const retrieved = await linkUtils.getLinkedTable(table._id, tables)
|
|
25
|
+
const retrieved = await linkUtils.getLinkedTable(db, table._id, tables)
|
|
26
26
|
expect(retrieved._id).toBe(table._id)
|
|
27
27
|
expect(tables[0]).toBeDefined()
|
|
28
28
|
})
|
|
@@ -51,6 +51,7 @@ describe("test link functionality", () => {
|
|
|
51
51
|
const db = new CouchDB("test")
|
|
52
52
|
await db.put({ _id: "_design/database", views: {} })
|
|
53
53
|
const output = await linkUtils.getLinkDocuments({
|
|
54
|
+
appId: "test",
|
|
54
55
|
tableId: "test",
|
|
55
56
|
rowId: "test",
|
|
56
57
|
includeDocs: false,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const
|
|
1
|
+
const CouchDB = require("../index")
|
|
2
2
|
const {
|
|
3
3
|
DocumentTypes,
|
|
4
4
|
SEPARATOR,
|
|
@@ -21,11 +21,12 @@ const SCREEN_PREFIX = DocumentTypes.SCREEN + SEPARATOR
|
|
|
21
21
|
/**
|
|
22
22
|
* Creates the link view for the instance, this will overwrite the existing one, but this should only
|
|
23
23
|
* be called if it is found that the view does not exist.
|
|
24
|
+
* @param {string} appId The instance to which the view should be added.
|
|
24
25
|
* @returns {Promise<void>} The view now exists, please note that the next view of this query will actually build it,
|
|
25
26
|
* so it may be slow.
|
|
26
27
|
*/
|
|
27
|
-
exports.createLinkView = async
|
|
28
|
-
const db =
|
|
28
|
+
exports.createLinkView = async appId => {
|
|
29
|
+
const db = new CouchDB(appId)
|
|
29
30
|
const designDoc = await db.get("_design/database")
|
|
30
31
|
const view = {
|
|
31
32
|
map: function (doc) {
|
|
@@ -56,8 +57,8 @@ exports.createLinkView = async () => {
|
|
|
56
57
|
await db.put(designDoc)
|
|
57
58
|
}
|
|
58
59
|
|
|
59
|
-
exports.createRoutingView = async
|
|
60
|
-
const db =
|
|
60
|
+
exports.createRoutingView = async appId => {
|
|
61
|
+
const db = new CouchDB(appId)
|
|
61
62
|
const designDoc = await db.get("_design/database")
|
|
62
63
|
const view = {
|
|
63
64
|
// if using variables in a map function need to inject them before use
|
|
@@ -77,8 +78,8 @@ exports.createRoutingView = async () => {
|
|
|
77
78
|
await db.put(designDoc)
|
|
78
79
|
}
|
|
79
80
|
|
|
80
|
-
async function searchIndex(indexName, fnString) {
|
|
81
|
-
const db =
|
|
81
|
+
async function searchIndex(appId, indexName, fnString) {
|
|
82
|
+
const db = new CouchDB(appId)
|
|
82
83
|
const designDoc = await db.get("_design/database")
|
|
83
84
|
designDoc.indexes = {
|
|
84
85
|
[indexName]: {
|
|
@@ -89,8 +90,9 @@ async function searchIndex(indexName, fnString) {
|
|
|
89
90
|
await db.put(designDoc)
|
|
90
91
|
}
|
|
91
92
|
|
|
92
|
-
exports.createAllSearchIndex = async
|
|
93
|
+
exports.createAllSearchIndex = async appId => {
|
|
93
94
|
await searchIndex(
|
|
95
|
+
appId,
|
|
94
96
|
SearchIndexes.ROWS,
|
|
95
97
|
function (doc) {
|
|
96
98
|
function idx(input, prev) {
|
|
@@ -17,8 +17,6 @@ export interface FieldSchema {
|
|
|
17
17
|
autocolumn?: boolean
|
|
18
18
|
throughFrom?: string
|
|
19
19
|
throughTo?: string
|
|
20
|
-
formula?: string
|
|
21
|
-
formulaType?: string
|
|
22
20
|
main?: boolean
|
|
23
21
|
meta?: {
|
|
24
22
|
toTable: string
|
|
@@ -48,7 +46,6 @@ export interface Table extends Base {
|
|
|
48
46
|
schema: TableSchema
|
|
49
47
|
primaryDisplay?: string
|
|
50
48
|
sourceId?: string
|
|
51
|
-
relatedFormula?: string[]
|
|
52
49
|
constrained?: string[]
|
|
53
50
|
}
|
|
54
51
|
|
|
@@ -47,7 +47,6 @@ export enum SourceNames {
|
|
|
47
47
|
ARANGODB = "ARANGODB",
|
|
48
48
|
REST = "REST",
|
|
49
49
|
ORACLE = "ORACLE",
|
|
50
|
-
GOOGLE_SHEETS = "GOOGLE_SHEETS",
|
|
51
50
|
}
|
|
52
51
|
|
|
53
52
|
export enum IncludeRelationships {
|
|
@@ -87,8 +86,6 @@ export interface ExtraQueryConfig {
|
|
|
87
86
|
export interface Integration {
|
|
88
87
|
docs: string
|
|
89
88
|
plus?: boolean
|
|
90
|
-
auth?: { type: string }
|
|
91
|
-
relationships?: boolean
|
|
92
89
|
description: string
|
|
93
90
|
friendlyName: string
|
|
94
91
|
datasource: {}
|
package/src/environment.js
CHANGED
|
@@ -2,8 +2,7 @@ function isTest() {
|
|
|
2
2
|
return (
|
|
3
3
|
process.env.NODE_ENV === "jest" ||
|
|
4
4
|
process.env.NODE_ENV === "cypress" ||
|
|
5
|
-
|
|
6
|
-
process.env.JEST_WORKER_ID !== "null")
|
|
5
|
+
process.env.JEST_WORKER_ID != null
|
|
7
6
|
)
|
|
8
7
|
}
|
|
9
8
|
|
|
@@ -39,12 +38,10 @@ module.exports = {
|
|
|
39
38
|
MINIO_ACCESS_KEY: process.env.MINIO_ACCESS_KEY,
|
|
40
39
|
MINIO_SECRET_KEY: process.env.MINIO_SECRET_KEY,
|
|
41
40
|
USE_QUOTAS: process.env.USE_QUOTAS,
|
|
42
|
-
EXCLUDE_QUOTAS_TENANTS: process.env.EXCLUDE_QUOTAS_TENANTS,
|
|
43
41
|
REDIS_URL: process.env.REDIS_URL,
|
|
44
42
|
REDIS_PASSWORD: process.env.REDIS_PASSWORD,
|
|
45
43
|
INTERNAL_API_KEY: process.env.INTERNAL_API_KEY,
|
|
46
44
|
MULTI_TENANCY: process.env.MULTI_TENANCY,
|
|
47
|
-
HTTP_MIGRATIONS: process.env.HTTP_MIGRATIONS,
|
|
48
45
|
// environment
|
|
49
46
|
NODE_ENV: process.env.NODE_ENV,
|
|
50
47
|
JEST_WORKER_ID: process.env.JEST_WORKER_ID,
|