@budibase/server 2.1.40-alpha.4 → 2.1.41
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__/aws-sdk.ts +0 -14
- package/__mocks__/node-fetch.ts +1 -5
- package/builder/assets/{index.ddf1f73a.js → index.2467ba90.js} +324 -324
- package/builder/assets/{index.144dddb2.css → index.534f6c29.css} +2 -2
- package/builder/index.html +2 -2
- package/coverage/clover.xml +3741 -10731
- package/coverage/coverage-final.json +118 -266
- package/coverage/lcov-report/{src/api/controllers/apikeys.ts.html → api/controllers/apikeys.js.html} +26 -26
- package/coverage/lcov-report/{src/api/controllers/automation.ts.html → api/controllers/automation.js.html} +75 -75
- package/coverage/lcov-report/{src/api/controllers/cloud.ts.html → api/controllers/cloud.js.html} +47 -47
- package/coverage/lcov-report/{src/api/controllers/datasource.ts.html → api/controllers/datasource.js.html} +87 -246
- package/coverage/lcov-report/{src/api/controllers/dev.ts.html → api/controllers/dev.js.html} +71 -53
- package/coverage/lcov-report/api/controllers/index.html +326 -0
- package/coverage/lcov-report/{src/api/controllers/integration.ts.html → api/controllers/integration.js.html} +22 -19
- package/coverage/lcov-report/{src/api/controllers/layout.ts.html → api/controllers/layout.js.html} +26 -26
- package/coverage/lcov-report/{src/api/controllers/metadata.ts.html → api/controllers/metadata.js.html} +23 -26
- package/coverage/lcov-report/{src/api/controllers/migrations.ts.html → api/controllers/migrations.js.html} +15 -18
- package/coverage/lcov-report/{src/api/controllers/permission.ts.html → api/controllers/permission.js.html} +71 -80
- package/coverage/lcov-report/{src/utilities/routing → api/controllers/query}/index.html +8 -8
- package/coverage/lcov-report/{src/api/controllers/query/validation.ts.html → api/controllers/query/validation.js.html} +17 -17
- package/coverage/lcov-report/{src/api/controllers/role.ts.html → api/controllers/role.js.html} +56 -44
- package/coverage/lcov-report/{src/api/controllers/routing.ts.html → api/controllers/routing.js.html} +56 -65
- package/coverage/lcov-report/{src/api/controllers/row/external.ts.html → api/controllers/row/external.js.html} +94 -145
- package/coverage/lcov-report/{src/api → api}/controllers/row/index.html +52 -82
- package/coverage/lcov-report/{src/api/controllers/row/internal.ts.html → api/controllers/row/internal.js.html} +95 -137
- package/coverage/lcov-report/{src/api/controllers/row/internalSearch.ts.html → api/controllers/row/internalSearch.js.html} +110 -182
- package/coverage/lcov-report/{src/api/controllers/row/staticFormula.ts.html → api/controllers/row/staticFormula.js.html} +51 -66
- package/coverage/lcov-report/{src/api/controllers/row/utils.ts.html → api/controllers/row/utils.js.html} +47 -77
- package/coverage/lcov-report/{src/api/controllers/script.ts.html → api/controllers/script.js.html} +14 -17
- package/coverage/lcov-report/{src/api/controllers/table/bulkFormula.ts.html → api/controllers/table/bulkFormula.js.html} +54 -96
- package/coverage/lcov-report/{src/api/controllers/table/external.ts.html → api/controllers/table/external.js.html} +103 -196
- package/coverage/lcov-report/{src/utilities/fileSystem → api/controllers/table}/index.html +44 -44
- package/coverage/lcov-report/{src/api/controllers/table/index.ts.html → api/controllers/table/index.js.html} +37 -46
- package/coverage/lcov-report/{src/api/controllers/templates.ts.html → api/controllers/templates.js.html} +25 -34
- package/coverage/lcov-report/{src/api/controllers/user.ts.html → api/controllers/user.js.html} +85 -79
- package/coverage/lcov-report/{src/api/controllers/view/exporters.ts.html → api/controllers/view/exporters.js.html} +14 -20
- package/coverage/lcov-report/{src/api → api}/controllers/view/index.html +36 -36
- package/coverage/lcov-report/{src/api/controllers/view/index.ts.html → api/controllers/view/index.js.html} +48 -75
- package/coverage/lcov-report/{src/api/controllers/view/utils.ts.html → api/controllers/view/utils.js.html} +43 -61
- package/coverage/lcov-report/{src/api/controllers/view/viewBuilder.ts.html → api/controllers/view/viewBuilder.js.html} +32 -74
- package/coverage/lcov-report/{src/api → api}/index.html +23 -23
- package/coverage/lcov-report/{src/api/index.ts.html → api/index.js.html} +56 -35
- package/coverage/lcov-report/{src/api/routes/analytics.ts.html → api/routes/analytics.js.html} +14 -14
- package/coverage/lcov-report/{src/middleware/selfhost.ts.html → api/routes/apikeys.js.html} +27 -27
- package/coverage/lcov-report/{src/api/routes/automation.ts.html → api/routes/automation.js.html} +42 -48
- package/coverage/lcov-report/{src/api/routes/backup.ts.html → api/routes/cloud.js.html} +21 -21
- package/coverage/lcov-report/{src/api/routes/component.ts.html → api/routes/component.js.html} +17 -17
- package/coverage/lcov-report/{src/constants/screens.ts.html → api/routes/datasource.js.html} +65 -56
- package/coverage/lcov-report/{src/api/routes/cloud.ts.html → api/routes/deploy.js.html} +22 -25
- package/coverage/lcov-report/{src/automations/index.ts.html → api/routes/dev.js.html} +42 -42
- package/coverage/lcov-report/{src/api → api}/routes/index.html +47 -167
- package/coverage/lcov-report/{src/api/routes/apikeys.ts.html → api/routes/integration.js.html} +18 -18
- package/coverage/lcov-report/{src/api/routes/layout.ts.html → api/routes/layout.js.html} +18 -18
- package/coverage/lcov-report/{src/api/routes/metadata.ts.html → api/routes/metadata.js.html} +24 -24
- package/coverage/lcov-report/{src/sdk/index.ts.html → api/routes/migrations.js.html} +21 -24
- package/coverage/lcov-report/{src/api/routes/permission.ts.html → api/routes/permission.js.html} +24 -48
- package/coverage/lcov-report/{src/api/routes/query.ts.html → api/routes/query.js.html} +42 -33
- package/coverage/lcov-report/{src/db/index.ts.html → api/routes/role.js.html} +25 -28
- package/coverage/lcov-report/{src/api/routes/routing.ts.html → api/routes/routing.js.html} +17 -17
- package/coverage/lcov-report/api/routes/screen.js.html +139 -0
- package/coverage/lcov-report/{src/api/routes/script.ts.html → api/routes/script.js.html} +17 -17
- package/coverage/lcov-report/{src/api/routes/table.ts.html → api/routes/table.js.html} +33 -24
- package/coverage/lcov-report/{src/api/routes/templates.ts.html → api/routes/templates.js.html} +18 -18
- package/coverage/lcov-report/{src/api/routes/user.ts.html → api/routes/user.js.html} +35 -29
- package/coverage/lcov-report/{src/api → api}/routes/utils/index.html +15 -15
- package/coverage/lcov-report/{src/api/routes/utils/validators.ts.html → api/routes/utils/validators.js.html} +58 -46
- package/coverage/lcov-report/{src/api/routes/view.ts.html → api/routes/view.js.html} +31 -40
- package/coverage/lcov-report/{src/automations/actions.ts.html → automations/actions.js.html} +41 -50
- package/coverage/lcov-report/{src/automations/automationUtils.ts.html → automations/automationUtils.js.html} +27 -30
- package/coverage/lcov-report/{src/automations/bullboard.ts.html → automations/bullboard.js.html} +33 -30
- package/coverage/lcov-report/{src/automations → automations}/index.html +48 -63
- package/coverage/lcov-report/{src/websocket.ts.html → automations/index.js.html} +50 -41
- package/coverage/lcov-report/{src/automations/steps/bash.ts.html → automations/steps/bash.js.html} +25 -40
- package/coverage/lcov-report/{src/automations/steps/delay.ts.html → automations/steps/delay.js.html} +17 -32
- package/coverage/lcov-report/{src/automations/steps/discord.ts.html → automations/steps/discord.js.html} +23 -38
- package/coverage/lcov-report/{src/automations/steps/executeQuery.ts.html → automations/steps/executeQuery.js.html} +26 -41
- package/coverage/lcov-report/{src/automations/steps/executeScript.ts.html → automations/steps/executeScript.js.html} +24 -54
- package/coverage/lcov-report/{src/automations/steps/filter.ts.html → automations/steps/filter.js.html} +27 -36
- package/coverage/lcov-report/automations/steps/index.html +341 -0
- package/coverage/lcov-report/{src/automations/steps/integromat.ts.html → automations/steps/integromat.js.html} +20 -35
- package/coverage/lcov-report/{src/automations/steps/loop.ts.html → automations/steps/loop.js.html} +15 -21
- package/coverage/lcov-report/{src/automations/steps/outgoingWebhook.ts.html → automations/steps/outgoingWebhook.js.html} +33 -48
- package/coverage/lcov-report/{src/automations/steps/queryRows.ts.html → automations/steps/queryRows.js.html} +58 -94
- package/coverage/lcov-report/{src/automations/steps/sendSmtpEmail.ts.html → automations/steps/sendSmtpEmail.js.html} +22 -37
- package/coverage/lcov-report/{src/automations/steps/serverLog.ts.html → automations/steps/serverLog.js.html} +20 -38
- package/coverage/lcov-report/{src/automations/steps/slack.ts.html → automations/steps/slack.js.html} +20 -35
- package/coverage/lcov-report/{src/automations/steps/updateRow.ts.html → automations/steps/updateRow.js.html} +21 -36
- package/coverage/lcov-report/{src/automations/steps/utils.ts.html → automations/steps/utils.js.html} +26 -44
- package/coverage/lcov-report/{src/automations/steps/zapier.ts.html → automations/steps/zapier.js.html} +20 -38
- package/coverage/lcov-report/{src/definitions/automations.ts.html → automations/triggerInfo/app.js.html} +42 -42
- package/coverage/lcov-report/{src/automations/triggerInfo/cron.ts.html → automations/triggerInfo/cron.js.html} +15 -30
- package/coverage/lcov-report/{src/automations → automations}/triggerInfo/index.html +31 -31
- package/coverage/lcov-report/{src/automations/triggerInfo/index.ts.html → automations/triggerInfo/index.js.html} +17 -17
- package/coverage/lcov-report/{src/automations/triggerInfo/rowDeleted.ts.html → automations/triggerInfo/rowDeleted.js.html} +15 -30
- package/coverage/lcov-report/{src/automations/triggerInfo/rowSaved.ts.html → automations/triggerInfo/rowSaved.js.html} +15 -30
- package/coverage/lcov-report/{src/automations/triggerInfo/rowUpdated.ts.html → automations/triggerInfo/rowUpdated.js.html} +15 -30
- package/coverage/lcov-report/{src/automations/triggerInfo/webhook.ts.html → automations/triggerInfo/webhook.js.html} +15 -30
- package/coverage/lcov-report/{src/automations/triggers.ts.html → automations/triggers.js.html} +47 -59
- package/coverage/lcov-report/{src/constants → constants}/index.html +26 -26
- package/coverage/lcov-report/{src/constants/index.ts.html → constants/index.js.html} +185 -173
- package/coverage/lcov-report/{src/constants/layouts.ts.html → constants/layouts.js.html} +34 -16
- package/coverage/lcov-report/{src/definitions/datasource.ts.html → constants/screens.js.html} +60 -72
- package/coverage/lcov-report/{src/db/inMemoryView.ts.html → db/inMemoryView.js.html} +26 -44
- package/coverage/lcov-report/{src/db → db}/index.html +33 -48
- package/coverage/lcov-report/{src/api/routes/integration.ts.html → db/index.js.html} +36 -36
- package/coverage/lcov-report/{src/db/linkedRows/LinkController.ts.html → db/linkedRows/LinkController.js.html} +155 -92
- package/coverage/lcov-report/db/linkedRows/index.html +146 -0
- package/coverage/lcov-report/{src/db/linkedRows/index.ts.html → db/linkedRows/index.js.html} +68 -83
- package/coverage/lcov-report/{src/db/linkedRows/linkUtils.ts.html → db/linkedRows/linkUtils.js.html} +46 -73
- package/coverage/lcov-report/{src/db/newid.ts.html → db/newid.js.html} +11 -11
- package/coverage/lcov-report/{src/db/utils.ts.html → db/utils.js.html} +153 -105
- package/coverage/lcov-report/{src/events/AutomationEmitter.ts.html → events/AutomationEmitter.js.html} +21 -36
- package/coverage/lcov-report/{src/events → events}/index.html +33 -48
- package/coverage/lcov-report/{src/events/BudibaseEmitter.ts.html → events/index.js.html} +26 -23
- package/coverage/lcov-report/{src/automations/triggerInfo/app.ts.html → events/utils.js.html} +72 -69
- package/coverage/lcov-report/index.html +184 -679
- package/coverage/lcov-report/{src/integrations → integrations}/tests/TestConfiguration.js.html +10 -10
- package/coverage/lcov-report/{src/integrations → integrations}/tests/index.html +10 -10
- package/coverage/lcov-report/{src/middleware/appInfo.ts.html → middleware/appInfo.js.html} +28 -31
- package/coverage/lcov-report/{src/middleware/builder.ts.html → middleware/builder.js.html} +37 -43
- package/coverage/lcov-report/{src/middleware/currentapp.ts.html → middleware/currentapp.js.html} +68 -77
- package/coverage/lcov-report/{src/middleware → middleware}/index.html +63 -78
- package/coverage/lcov-report/{src/middleware/joi-validator.ts.html → middleware/joi-validator.js.html} +22 -25
- package/coverage/lcov-report/{src/middleware/publicApi.ts.html → middleware/publicApi.js.html} +24 -24
- package/coverage/lcov-report/{src/middleware/resourceId.ts.html → middleware/resourceId.js.html} +25 -40
- package/coverage/lcov-report/{src/tests/utilities/index.ts.html → middleware/selfhost.js.html} +30 -33
- package/coverage/lcov-report/{src/middleware/utils.ts.html → middleware/utils.js.html} +13 -19
- package/coverage/lcov-report/{src/utilities/budibaseDir.ts.html → utilities/budibaseDir.js.html} +12 -12
- package/coverage/lcov-report/{src/utilities/centralPath.ts.html → utilities/centralPath.js.html} +13 -13
- package/coverage/lcov-report/{src/utilities/csvParser.ts.html → utilities/csvParser.js.html} +56 -104
- package/coverage/lcov-report/{src/utilities/global.ts.html → utilities/global.js.html} +74 -107
- package/coverage/lcov-report/{src/utilities → utilities}/index.html +77 -92
- package/coverage/lcov-report/{src/utilities/index.ts.html → utilities/index.js.html} +54 -78
- package/coverage/lcov-report/{src/utilities/plugins.ts.html → utilities/plugins.js.html} +19 -22
- package/coverage/lcov-report/{src/integrations/airtable.ts.html → utilities/queue/inMemoryQueue.js.html} +135 -213
- package/coverage/lcov-report/{src/migrations → utilities/queue}/index.html +23 -23
- package/coverage/lcov-report/{src/sdk → utilities/routing}/index.html +10 -10
- package/coverage/lcov-report/{src/api/routes/role.ts.html → utilities/routing/index.js.html} +42 -39
- package/coverage/lcov-report/{src/definitions → utilities/rowProcessor}/index.html +34 -34
- package/coverage/lcov-report/{src/utilities/rowProcessor/index.ts.html → utilities/rowProcessor/index.js.html} +346 -115
- package/coverage/lcov-report/{src/utilities/rowProcessor/utils.ts.html → utilities/rowProcessor/utils.js.html} +38 -50
- package/coverage/lcov-report/{src/utilities/scriptRunner.ts.html → utilities/scriptRunner.js.html} +16 -28
- package/coverage/lcov-report/{src/utilities/security.ts.html → utilities/security.js.html} +74 -56
- package/coverage/lcov-report/{src/utilities/statusCodes.ts.html → utilities/statusCodes.js.html} +11 -11
- package/coverage/lcov-report/{src/utilities → utilities}/usageQuota/index.html +28 -28
- package/coverage/lcov-report/{src/utilities/usageQuota/rows.ts.html → utilities/usageQuota/rows.js.html} +46 -34
- package/coverage/lcov-report/{src/utilities/usageQuota/usageQuoteReset.ts.html → utilities/usageQuota/usageQuoteReset.js.html} +13 -13
- package/coverage/lcov-report/{src/utilities/users.ts.html → utilities/users.js.html} +35 -29
- package/coverage/lcov-report/{src/utilities/workerRequests.ts.html → utilities/workerRequests.js.html} +114 -129
- package/coverage/lcov.info +6987 -19540
- package/dist/api/controllers/apikeys.js +9 -12
- package/dist/api/controllers/application.js +45 -48
- package/dist/api/controllers/automation.js +82 -122
- package/dist/api/controllers/cloud.js +71 -84
- package/dist/api/controllers/component.js +2 -4
- package/dist/api/controllers/datasource.js +92 -144
- package/dist/api/controllers/deploy/Deployment.js +6 -10
- package/dist/api/controllers/deploy/index.js +16 -13
- package/dist/api/controllers/dev.js +81 -96
- package/dist/api/controllers/integration.js +8 -11
- package/dist/api/controllers/layout.js +15 -18
- package/dist/api/controllers/metadata.js +37 -51
- package/dist/api/controllers/migrations.js +11 -19
- package/dist/api/controllers/permission.js +43 -52
- package/dist/api/controllers/plugin/index.js +7 -6
- package/dist/api/controllers/plugin/utils.js +1 -2
- package/dist/api/controllers/public/applications.js +9 -17
- package/dist/api/controllers/public/tables.js +9 -29
- package/dist/api/controllers/public/utils.js +2 -2
- package/dist/api/controllers/query/import/index.js +2 -1
- package/dist/api/controllers/query/index.js +13 -10
- package/dist/api/controllers/query/validation.js +33 -41
- package/dist/api/controllers/role.js +27 -29
- package/dist/api/controllers/routing.js +58 -71
- package/dist/api/controllers/row/ExternalRequest.js +542 -538
- package/dist/api/controllers/row/external.js +190 -258
- package/dist/api/controllers/row/index.js +14 -43
- package/dist/api/controllers/row/internal.js +295 -354
- package/dist/api/controllers/row/internalSearch.js +80 -95
- package/dist/api/controllers/row/staticFormula.js +112 -125
- package/dist/api/controllers/row/utils.js +84 -122
- package/dist/api/controllers/screen.js +66 -81
- package/dist/api/controllers/script.js +6 -13
- package/dist/api/controllers/static/index.js +14 -11
- package/dist/api/controllers/table/bulkFormula.js +35 -47
- package/dist/api/controllers/table/external.js +53 -89
- package/dist/api/controllers/table/index.js +31 -64
- package/dist/api/controllers/table/internal.js +6 -5
- package/dist/api/controllers/table/utils.js +35 -39
- package/dist/api/controllers/templates.js +10 -17
- package/dist/api/controllers/user.js +70 -82
- package/dist/api/controllers/view/exporters.js +4 -8
- package/dist/api/controllers/view/index.js +153 -201
- package/dist/api/controllers/view/utils.js +121 -151
- package/dist/api/controllers/view/viewBuilder.js +16 -4
- package/dist/api/controllers/webhook.js +2 -25
- package/dist/api/index.js +34 -38
- package/dist/api/routes/analytics.js +3 -29
- package/dist/api/routes/apikeys.js +7 -33
- package/dist/api/routes/application.js +9 -8
- package/dist/api/routes/auth.js +2 -1
- package/dist/api/routes/automation.js +20 -46
- package/dist/api/routes/backup.js +4 -3
- package/dist/api/routes/cloud.js +6 -32
- package/dist/api/routes/component.js +6 -32
- package/dist/api/routes/datasource.js +13 -39
- package/dist/api/routes/deploy.js +8 -34
- package/dist/api/routes/dev.js +10 -36
- package/dist/api/routes/integration.js +7 -33
- package/dist/api/routes/layout.js +7 -33
- package/dist/api/routes/metadata.js +10 -36
- package/dist/api/routes/migrations.js +6 -32
- package/dist/api/routes/permission.js +12 -38
- package/dist/api/routes/plugin.js +5 -5
- package/dist/api/routes/public/index.js +11 -11
- package/dist/api/routes/query.js +15 -42
- package/dist/api/routes/role.js +10 -36
- package/dist/api/routes/routing.js +6 -32
- package/dist/api/routes/row.js +11 -12
- package/dist/api/routes/screen.js +9 -35
- package/dist/api/routes/script.js +6 -32
- package/dist/api/routes/static.js +9 -9
- package/dist/api/routes/table.js +13 -40
- package/dist/api/routes/templates.js +7 -33
- package/dist/api/routes/tests/utilities/TestFunctions.js +8 -6
- package/dist/api/routes/tests/utilities/index.js +32 -69
- package/dist/api/routes/user.js +13 -40
- package/dist/api/routes/utils/validators.js +126 -142
- package/dist/api/routes/view.js +12 -38
- package/dist/api/routes/webhook.js +2 -1
- package/dist/app.js +22 -22
- package/dist/automations/actions.js +24 -53
- package/dist/automations/automationUtils.js +19 -31
- package/dist/automations/bullboard.js +29 -59
- package/dist/automations/index.js +18 -23
- package/dist/automations/steps/bash.js +10 -40
- package/dist/automations/steps/createRow.js +1 -2
- package/dist/automations/steps/delay.js +5 -9
- package/dist/automations/steps/deleteRow.js +1 -2
- package/dist/automations/steps/discord.js +7 -14
- package/dist/automations/steps/executeQuery.js +7 -34
- package/dist/automations/steps/executeScript.js +7 -34
- package/dist/automations/steps/filter.js +18 -20
- package/dist/automations/steps/integromat.js +7 -14
- package/dist/automations/steps/loop.js +1 -4
- package/dist/automations/steps/outgoingWebhook.js +14 -45
- package/dist/automations/steps/queryRows.js +38 -71
- package/dist/automations/steps/sendSmtpEmail.js +6 -33
- package/dist/automations/steps/serverLog.js +8 -12
- package/dist/automations/steps/slack.js +7 -14
- package/dist/automations/steps/updateRow.js +7 -34
- package/dist/automations/steps/utils.js +16 -22
- package/dist/automations/steps/zapier.js +7 -15
- package/dist/automations/tests/utilities/index.js +38 -62
- package/dist/automations/triggerInfo/app.js +1 -4
- package/dist/automations/triggerInfo/cron.js +1 -4
- package/dist/automations/triggerInfo/index.js +6 -31
- package/dist/automations/triggerInfo/rowDeleted.js +1 -4
- package/dist/automations/triggerInfo/rowSaved.js +1 -4
- package/dist/automations/triggerInfo/rowUpdated.js +1 -4
- package/dist/automations/triggerInfo/webhook.js +1 -4
- package/dist/automations/triggers.js +57 -90
- package/dist/automations/utils.js +8 -9
- package/dist/constants/index.js +104 -118
- package/dist/constants/layouts.js +10 -7
- package/dist/constants/screens.js +44 -49
- package/dist/db/dynamoClient.js +20 -20
- package/dist/db/inMemoryView.js +38 -47
- package/dist/db/index.js +4 -7
- package/dist/db/linkedRows/LinkController.js +70 -51
- package/dist/db/linkedRows/index.js +81 -93
- package/dist/db/linkedRows/linkUtils.js +32 -42
- package/dist/db/utils.js +119 -146
- package/dist/db/views/staticViews.js +74 -91
- package/dist/environment.js +6 -9
- package/dist/events/AutomationEmitter.js +10 -13
- package/dist/events/index.js +23 -5
- package/dist/events/utils.js +10 -18
- package/dist/integrations/elasticsearch.js +2 -26
- package/dist/integrations/googlesheets.js +6 -5
- package/dist/integrations/index.js +6 -15
- package/dist/integrations/s3.js +1 -157
- package/dist/integrations/tests/TestConfiguration.js +1 -0
- package/dist/middleware/appInfo.js +9 -14
- package/dist/middleware/authorized.js +21 -22
- package/dist/middleware/builder.js +40 -41
- package/dist/middleware/currentapp.js +37 -39
- package/dist/middleware/joi-validator.js +10 -17
- package/dist/middleware/publicApi.js +6 -5
- package/dist/middleware/resourceId.js +9 -16
- package/dist/middleware/selfhost.js +4 -5
- package/dist/middleware/utils.js +2 -5
- package/dist/migrations/functions/appUrls.js +2 -2
- package/dist/migrations/functions/backfill/global.js +1 -1
- package/dist/migrations/functions/usageQuotas/syncApps.js +4 -3
- package/dist/migrations/functions/usageQuotas/syncRows.js +4 -3
- package/dist/migrations/functions/userEmailViewCasing.js +3 -3
- package/dist/package.json +45 -11
- package/dist/sdk/app/backups/exports.js +2 -1
- package/dist/sdk/app/backups/imports.js +3 -2
- package/dist/sdk/app/tables/index.js +5 -5
- package/dist/startup.js +10 -10
- package/dist/tests/utilities/TestConfiguration.js +87 -111
- package/dist/tests/utilities/controllers.js +15 -38
- package/dist/tests/utilities/structures.js +53 -72
- package/dist/threads/automation.js +27 -49
- package/dist/threads/query.js +19 -17
- package/dist/threads/utils.js +8 -33
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utilities/budibaseDir.js +2 -4
- package/dist/utilities/centralPath.js +7 -14
- package/dist/utilities/csvParser.js +21 -27
- package/dist/utilities/fileSystem/clientLibrary.js +73 -87
- package/dist/utilities/fileSystem/index.js +175 -203
- package/dist/utilities/fileSystem/processor.js +3 -8
- package/dist/utilities/fileSystem/utilities.js +22 -0
- package/dist/utilities/global.js +66 -87
- package/dist/utilities/index.js +75 -102
- package/dist/utilities/plugins.js +9 -15
- package/dist/utilities/queue/inMemoryQueue.js +126 -0
- package/dist/utilities/redis.js +65 -100
- package/dist/utilities/routing/index.js +23 -27
- package/dist/utilities/rowProcessor/index.js +191 -133
- package/dist/utilities/rowProcessor/utils.js +26 -35
- package/dist/utilities/scriptRunner.js +5 -8
- package/dist/utilities/security.js +35 -39
- package/dist/utilities/usageQuota/rows.js +49 -56
- package/dist/utilities/users.js +28 -31
- package/dist/utilities/workerRequests.js +82 -115
- package/dist/watch.js +2 -1
- package/package.json +46 -12
- package/scripts/exportAppTemplate.js +2 -2
- package/{src/tests/jestSetup.ts → scripts/jestSetup.js} +2 -11
- package/scripts/localdomain.js +6 -34
- package/src/api/controllers/{apikeys.ts → apikeys.js} +10 -10
- package/src/api/controllers/application.ts +42 -56
- package/src/api/controllers/auth.ts +3 -4
- package/src/api/controllers/{automation.ts → automation.js} +48 -48
- package/src/api/controllers/{cloud.ts → cloud.js} +24 -24
- package/src/api/controllers/component.ts +1 -2
- package/src/api/controllers/{datasource.ts → datasource.js} +47 -100
- package/src/api/controllers/deploy/{Deployment.ts → Deployment.js} +10 -13
- package/src/api/controllers/deploy/index.ts +25 -13
- package/src/api/controllers/{dev.ts → dev.js} +37 -31
- package/src/api/controllers/integration.js +14 -0
- package/src/api/controllers/{layout.ts → layout.js} +8 -8
- package/src/api/controllers/{metadata.ts → metadata.js} +10 -11
- package/src/api/controllers/migrations.js +13 -0
- package/src/api/controllers/{permission.ts → permission.js} +46 -49
- package/src/api/controllers/plugin/index.ts +5 -4
- package/src/api/controllers/plugin/utils.ts +5 -3
- package/src/api/controllers/public/applications.ts +9 -15
- package/src/api/controllers/public/rows.ts +1 -1
- package/src/api/controllers/public/tables.ts +2 -2
- package/src/api/controllers/public/utils.ts +2 -2
- package/src/api/controllers/query/import/index.ts +3 -2
- package/src/api/controllers/query/index.ts +14 -11
- package/src/api/controllers/query/{validation.ts → validation.js} +7 -7
- package/src/api/controllers/{role.ts → role.js} +25 -21
- package/src/api/controllers/{routing.ts → routing.js} +34 -37
- package/src/api/controllers/row/ExternalRequest.ts +624 -602
- package/src/api/controllers/row/{external.ts → external.js} +62 -79
- package/src/api/controllers/row/index.ts +11 -19
- package/src/api/controllers/row/{internal.ts → internal.js} +73 -87
- package/src/api/controllers/row/{internalSearch.ts → internalSearch.js} +68 -92
- package/src/api/controllers/row/{staticFormula.ts → staticFormula.js} +25 -30
- package/src/api/controllers/row/{utils.ts → utils.js} +22 -32
- package/src/api/controllers/screen.ts +6 -10
- package/src/api/controllers/script.js +11 -0
- package/src/api/controllers/static/index.ts +16 -14
- package/src/api/controllers/table/{bulkFormula.ts → bulkFormula.js} +25 -39
- package/src/api/controllers/table/{external.ts → external.js} +55 -86
- package/src/api/controllers/table/{index.ts → index.js} +18 -21
- package/src/api/controllers/table/internal.ts +6 -5
- package/src/api/controllers/table/utils.ts +21 -26
- package/src/api/controllers/{templates.ts → templates.js} +7 -10
- package/src/api/controllers/{user.ts → user.js} +49 -47
- package/src/api/controllers/view/{exporters.ts → exporters.js} +3 -5
- package/src/api/controllers/view/{index.ts → index.js} +27 -36
- package/src/api/controllers/view/{utils.ts → utils.js} +20 -26
- package/src/api/controllers/view/{viewBuilder.ts → viewBuilder.js} +11 -25
- package/src/api/controllers/webhook.ts +1 -1
- package/src/api/{index.ts → index.js} +22 -15
- package/src/api/routes/analytics.js +9 -0
- package/src/api/routes/apikeys.js +12 -0
- package/src/api/routes/application.ts +9 -17
- package/src/api/routes/auth.ts +2 -2
- package/src/api/routes/automation.js +85 -0
- package/src/api/routes/backup.ts +4 -8
- package/src/api/routes/cloud.js +14 -0
- package/src/api/routes/component.js +14 -0
- package/src/api/routes/datasource.js +51 -0
- package/src/api/routes/deploy.js +17 -0
- package/src/api/routes/dev.js +26 -0
- package/src/api/routes/integration.js +12 -0
- package/src/api/routes/layout.js +16 -0
- package/src/api/routes/{metadata.ts → metadata.js} +13 -13
- package/src/api/routes/migrations.js +14 -0
- package/src/api/routes/permission.js +33 -0
- package/src/api/routes/plugin.ts +6 -14
- package/src/api/routes/public/index.ts +14 -11
- package/src/api/routes/public/tests/compare.spec.js +1 -1
- package/src/api/routes/{query.ts → query.js} +22 -19
- package/src/api/routes/role.js +15 -0
- package/src/api/routes/routing.js +14 -0
- package/src/api/routes/row.ts +15 -13
- package/src/api/routes/screen.js +18 -0
- package/src/api/routes/script.js +10 -0
- package/src/api/routes/static.ts +10 -7
- package/src/api/routes/{table.ts → table.js} +13 -10
- package/src/api/routes/templates.js +16 -0
- package/src/api/routes/tests/analytics.spec.js +1 -1
- package/src/api/routes/tests/backup.spec.js +1 -9
- package/src/api/routes/tests/deployment.spec.ts +1 -1
- package/src/api/routes/tests/permissions.spec.js +1 -2
- package/src/api/routes/tests/query.spec.js +10 -15
- package/src/api/routes/tests/role.spec.js +9 -7
- package/src/api/routes/tests/routing.spec.js +1 -2
- package/src/api/routes/tests/row.spec.js +4 -3
- package/src/api/routes/tests/static.spec.js +2 -2
- package/src/api/routes/tests/table.spec.js +36 -40
- package/src/api/routes/tests/user.spec.js +1 -2
- package/src/api/routes/tests/utilities/TestFunctions.ts +8 -6
- package/src/api/routes/tests/utilities/{index.ts → index.js} +12 -12
- package/src/api/routes/tests/view.spec.js +3 -3
- package/src/api/routes/user.js +53 -0
- package/src/api/routes/utils/{validators.ts → validators.js} +37 -33
- package/src/api/routes/view.js +31 -0
- package/src/api/routes/webhook.ts +2 -2
- package/src/app.ts +14 -15
- package/src/automations/{actions.ts → actions.js} +23 -26
- package/src/automations/{automationUtils.ts → automationUtils.js} +12 -13
- package/src/automations/bullboard.js +39 -0
- package/src/automations/index.js +29 -0
- package/src/automations/steps/{bash.ts → bash.js} +8 -13
- package/src/automations/steps/createRow.ts +3 -8
- package/src/automations/steps/{delay.ts → delay.js} +4 -9
- package/src/automations/steps/deleteRow.ts +3 -8
- package/src/automations/steps/{discord.ts → discord.js} +5 -10
- package/src/automations/steps/{executeQuery.ts → executeQuery.js} +7 -12
- package/src/automations/steps/{executeScript.ts → executeScript.js} +7 -17
- package/src/automations/steps/{filter.ts → filter.js} +9 -12
- package/src/automations/steps/{integromat.ts → integromat.js} +5 -10
- package/src/automations/steps/{loop.ts → loop.js} +2 -4
- package/src/automations/steps/{outgoingWebhook.ts → outgoingWebhook.js} +13 -18
- package/src/automations/steps/{queryRows.ts → queryRows.js} +36 -48
- package/src/automations/steps/{sendSmtpEmail.ts → sendSmtpEmail.js} +5 -10
- package/src/automations/steps/{serverLog.ts → serverLog.js} +3 -9
- package/src/automations/steps/{slack.ts → slack.js} +5 -10
- package/src/automations/steps/{updateRow.ts → updateRow.js} +7 -12
- package/src/automations/steps/{utils.ts → utils.js} +4 -10
- package/src/automations/steps/{zapier.ts → zapier.js} +5 -11
- package/src/automations/tests/updateRow.spec.js +1 -0
- package/src/automations/tests/utilities/index.js +51 -0
- package/src/automations/triggerInfo/{app.ts → app.js} +2 -7
- package/src/automations/triggerInfo/{cron.ts → cron.js} +2 -7
- package/src/automations/triggerInfo/index.js +15 -0
- package/src/automations/triggerInfo/{rowDeleted.ts → rowDeleted.js} +2 -7
- package/src/automations/triggerInfo/{rowSaved.ts → rowSaved.js} +2 -7
- package/src/automations/triggerInfo/{rowUpdated.ts → rowUpdated.js} +2 -7
- package/src/automations/triggerInfo/{webhook.ts → webhook.js} +2 -7
- package/src/automations/{triggers.ts → triggers.js} +26 -30
- package/src/automations/utils.ts +12 -9
- package/src/constants/index.js +208 -0
- package/src/constants/{layouts.ts → layouts.js} +9 -3
- package/src/constants/screens.js +46 -0
- package/src/db/{dynamoClient.ts → dynamoClient.js} +19 -39
- package/src/db/{inMemoryView.ts → inMemoryView.js} +9 -15
- package/src/db/index.js +16 -0
- package/src/db/linkedRows/{LinkController.ts → LinkController.js} +85 -64
- package/src/db/linkedRows/{index.ts → index.js} +38 -43
- package/src/db/linkedRows/{linkUtils.ts → linkUtils.js} +24 -33
- package/src/db/{newid.ts → newid.js} +1 -1
- package/src/db/tests/linkController.spec.js +57 -73
- package/src/db/tests/linkTests.spec.js +14 -17
- package/src/db/{utils.ts → utils.js} +93 -77
- package/src/db/views/{staticViews.ts → staticViews.js} +13 -20
- package/src/{environment.ts → environment.js} +7 -11
- package/src/events/{AutomationEmitter.ts → AutomationEmitter.js} +7 -12
- package/src/events/{BudibaseEmitter.ts → index.js} +8 -7
- package/src/events/utils.js +38 -0
- package/src/integrations/base/sql.ts +1 -1
- package/src/integrations/base/sqlTable.ts +1 -1
- package/src/integrations/elasticsearch.ts +2 -32
- package/src/integrations/googlesheets.ts +7 -5
- package/src/integrations/index.ts +41 -45
- package/src/integrations/s3.ts +3 -179
- package/src/integrations/tests/s3.spec.ts +1 -85
- package/src/integrations/utils.ts +2 -6
- package/src/middleware/appInfo.js +19 -0
- package/src/middleware/authorized.ts +28 -21
- package/src/middleware/{builder.ts → builder.js} +15 -17
- package/src/middleware/{currentapp.ts → currentapp.js} +39 -42
- package/src/middleware/{joi-validator.ts → joi-validator.js} +8 -9
- package/src/middleware/publicApi.js +21 -0
- package/src/middleware/{resourceId.ts → resourceId.js} +11 -16
- package/src/middleware/{selfhost.ts → selfhost.js} +2 -4
- package/src/middleware/tests/authorized.spec.js +6 -5
- package/src/middleware/tests/currentapp.spec.js +63 -118
- package/src/middleware/{utils.ts → utils.js} +1 -3
- package/src/migrations/functions/appUrls.ts +2 -2
- package/src/migrations/functions/backfill/app/tables.ts +5 -2
- package/src/migrations/functions/backfill/global.ts +1 -1
- package/src/migrations/functions/tests/appUrls.spec.js +4 -4
- package/src/migrations/functions/tests/userEmailViewCasing.spec.js +9 -14
- package/src/migrations/functions/usageQuotas/syncApps.ts +4 -3
- package/src/migrations/functions/usageQuotas/syncRows.ts +5 -4
- package/src/migrations/functions/usageQuotas/tests/syncRows.spec.ts +7 -7
- package/src/migrations/functions/userEmailViewCasing.ts +3 -3
- package/src/migrations/tests/index.spec.ts +1 -1
- package/src/module.d.ts +14 -0
- package/src/sdk/app/backups/exports.ts +3 -5
- package/src/sdk/app/backups/imports.ts +14 -7
- package/src/sdk/app/backups/statistics.ts +18 -9
- package/src/sdk/app/tables/index.ts +8 -7
- package/src/startup.ts +5 -5
- package/src/tests/utilities/{TestConfiguration.ts → TestConfiguration.js} +78 -111
- package/src/tests/utilities/controllers.js +16 -0
- package/src/tests/utilities/{index.ts → index.js} +2 -2
- package/src/tests/utilities/{structures.ts → structures.js} +36 -41
- package/src/threads/automation.ts +19 -18
- package/src/threads/query.ts +16 -11
- package/src/threads/utils.ts +5 -4
- package/src/utilities/budibaseDir.js +3 -0
- package/src/utilities/{centralPath.ts → centralPath.js} +3 -3
- package/src/utilities/{csvParser.ts → csvParser.js} +26 -42
- package/src/utilities/fileSystem/{clientLibrary.ts → clientLibrary.js} +20 -20
- package/src/utilities/fileSystem/{index.ts → index.js} +65 -61
- package/src/utilities/fileSystem/{processor.ts → processor.js} +5 -3
- package/src/utilities/fileSystem/utilities.js +36 -0
- package/src/utilities/global.js +127 -0
- package/src/utilities/{index.ts → index.js} +32 -40
- package/src/utilities/{plugins.ts → plugins.js} +4 -5
- package/src/utilities/queue/inMemoryQueue.js +122 -0
- package/src/utilities/{redis.ts → redis.js} +20 -21
- package/src/utilities/routing/index.js +25 -0
- package/src/utilities/rowProcessor/{index.ts → index.js} +144 -67
- package/src/utilities/rowProcessor/{utils.ts → utils.js} +15 -19
- package/src/utilities/{scriptRunner.ts → scriptRunner.js} +4 -8
- package/src/utilities/security.js +71 -0
- package/src/utilities/{statusCodes.ts → statusCodes.js} +1 -1
- package/src/utilities/usageQuota/{rows.ts → rows.js} +18 -14
- package/src/utilities/usageQuota/{usageQuoteReset.ts → usageQuoteReset.js} +1 -1
- package/src/utilities/{users.ts → users.js} +13 -11
- package/src/utilities/{workerRequests.ts → workerRequests.js} +38 -43
- package/src/watch.ts +3 -2
- package/tsconfig.build.json +2 -1
- package/tsconfig.json +1 -3
- package/coverage/lcov-report/src/api/controllers/analytics.ts.html +0 -190
- package/coverage/lcov-report/src/api/controllers/application.ts.html +0 -2038
- package/coverage/lcov-report/src/api/controllers/auth.ts.html +0 -301
- package/coverage/lcov-report/src/api/controllers/backup.ts.html +0 -148
- package/coverage/lcov-report/src/api/controllers/component.ts.html +0 -259
- package/coverage/lcov-report/src/api/controllers/deploy/Deployment.ts.html +0 -259
- package/coverage/lcov-report/src/api/controllers/deploy/index.html +0 -131
- package/coverage/lcov-report/src/api/controllers/deploy/index.ts.html +0 -730
- package/coverage/lcov-report/src/api/controllers/index.html +0 -431
- package/coverage/lcov-report/src/api/controllers/plugin/file.ts.html +0 -130
- package/coverage/lcov-report/src/api/controllers/plugin/github.ts.html +0 -310
- package/coverage/lcov-report/src/api/controllers/plugin/index.html +0 -206
- package/coverage/lcov-report/src/api/controllers/plugin/index.ts.html +0 -484
- package/coverage/lcov-report/src/api/controllers/plugin/npm.ts.html +0 -253
- package/coverage/lcov-report/src/api/controllers/plugin/uploaders.ts.html +0 -97
- package/coverage/lcov-report/src/api/controllers/plugin/url.ts.html +0 -121
- package/coverage/lcov-report/src/api/controllers/plugin/utils.ts.html +0 -136
- package/coverage/lcov-report/src/api/controllers/public/applications.ts.html +0 -334
- package/coverage/lcov-report/src/api/controllers/public/index.html +0 -191
- package/coverage/lcov-report/src/api/controllers/public/mapping/applications.ts.html +0 -181
- package/coverage/lcov-report/src/api/controllers/public/mapping/index.html +0 -191
- package/coverage/lcov-report/src/api/controllers/public/mapping/index.ts.html +0 -124
- package/coverage/lcov-report/src/api/controllers/public/mapping/queries.ts.html +0 -202
- package/coverage/lcov-report/src/api/controllers/public/mapping/rows.ts.html +0 -178
- package/coverage/lcov-report/src/api/controllers/public/mapping/tables.ts.html +0 -163
- package/coverage/lcov-report/src/api/controllers/public/mapping/users.ts.html +0 -181
- package/coverage/lcov-report/src/api/controllers/public/queries.ts.html +0 -145
- package/coverage/lcov-report/src/api/controllers/public/rows.ts.html +0 -328
- package/coverage/lcov-report/src/api/controllers/public/tables.ts.html +0 -253
- package/coverage/lcov-report/src/api/controllers/public/users.ts.html +0 -268
- package/coverage/lcov-report/src/api/controllers/public/utils.ts.html +0 -220
- package/coverage/lcov-report/src/api/controllers/query/import/index.html +0 -116
- package/coverage/lcov-report/src/api/controllers/query/import/index.ts.html +0 -373
- package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.html +0 -131
- package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.ts.html +0 -379
- package/coverage/lcov-report/src/api/controllers/query/import/sources/base/openapi.ts.html +0 -157
- package/coverage/lcov-report/src/api/controllers/query/import/sources/curl.ts.html +0 -403
- package/coverage/lcov-report/src/api/controllers/query/import/sources/index.html +0 -146
- package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi2.ts.html +0 -586
- package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi3.ts.html +0 -712
- package/coverage/lcov-report/src/api/controllers/query/index.html +0 -131
- package/coverage/lcov-report/src/api/controllers/query/index.ts.html +0 -976
- package/coverage/lcov-report/src/api/controllers/row/ExternalRequest.ts.html +0 -2260
- package/coverage/lcov-report/src/api/controllers/row/index.ts.html +0 -541
- package/coverage/lcov-report/src/api/controllers/screen.ts.html +0 -463
- package/coverage/lcov-report/src/api/controllers/static/index.html +0 -116
- package/coverage/lcov-report/src/api/controllers/static/index.ts.html +0 -694
- package/coverage/lcov-report/src/api/controllers/table/index.html +0 -176
- package/coverage/lcov-report/src/api/controllers/table/internal.ts.html +0 -661
- package/coverage/lcov-report/src/api/controllers/table/utils.ts.html +0 -1255
- package/coverage/lcov-report/src/api/controllers/webhook.ts.html +0 -379
- package/coverage/lcov-report/src/api/routes/application.ts.html +0 -223
- package/coverage/lcov-report/src/api/routes/auth.ts.html +0 -109
- package/coverage/lcov-report/src/api/routes/datasource.ts.html +0 -265
- package/coverage/lcov-report/src/api/routes/deploy.ts.html +0 -148
- package/coverage/lcov-report/src/api/routes/dev.ts.html +0 -199
- package/coverage/lcov-report/src/api/routes/index.ts.html +0 -289
- package/coverage/lcov-report/src/api/routes/migrations.ts.html +0 -127
- package/coverage/lcov-report/src/api/routes/plugin.ts.html +0 -151
- package/coverage/lcov-report/src/api/routes/public/applications.ts.html +0 -541
- package/coverage/lcov-report/src/api/routes/public/index.html +0 -191
- package/coverage/lcov-report/src/api/routes/public/index.ts.html +0 -493
- package/coverage/lcov-report/src/api/routes/public/middleware/index.html +0 -116
- package/coverage/lcov-report/src/api/routes/public/middleware/mapper.ts.html +0 -328
- package/coverage/lcov-report/src/api/routes/public/queries.ts.html +0 -313
- package/coverage/lcov-report/src/api/routes/public/rows.ts.html +0 -598
- package/coverage/lcov-report/src/api/routes/public/tables.ts.html +0 -586
- package/coverage/lcov-report/src/api/routes/public/users.ts.html +0 -511
- package/coverage/lcov-report/src/api/routes/public/utils/Endpoint.ts.html +0 -238
- package/coverage/lcov-report/src/api/routes/public/utils/index.html +0 -116
- package/coverage/lcov-report/src/api/routes/row.ts.html +0 -883
- package/coverage/lcov-report/src/api/routes/screen.ts.html +0 -154
- package/coverage/lcov-report/src/api/routes/static.ts.html +0 -280
- package/coverage/lcov-report/src/api/routes/tests/utilities/TestFunctions.ts.html +0 -550
- package/coverage/lcov-report/src/api/routes/tests/utilities/index.html +0 -131
- package/coverage/lcov-report/src/api/routes/tests/utilities/index.ts.html +0 -367
- package/coverage/lcov-report/src/api/routes/webhook.ts.html +0 -166
- package/coverage/lcov-report/src/app.ts.html +0 -406
- package/coverage/lcov-report/src/automations/logging/index.html +0 -116
- package/coverage/lcov-report/src/automations/logging/index.ts.html +0 -199
- package/coverage/lcov-report/src/automations/steps/createRow.ts.html +0 -382
- package/coverage/lcov-report/src/automations/steps/deleteRow.ts.html +0 -349
- package/coverage/lcov-report/src/automations/steps/index.html +0 -371
- package/coverage/lcov-report/src/automations/tests/utilities/index.html +0 -116
- package/coverage/lcov-report/src/automations/tests/utilities/index.ts.html +0 -265
- package/coverage/lcov-report/src/automations/utils.ts.html +0 -886
- package/coverage/lcov-report/src/db/defaultData/datasource_bb_default.ts.html +0 -2032
- package/coverage/lcov-report/src/db/defaultData/employeeImport.ts.html +0 -541
- package/coverage/lcov-report/src/db/defaultData/expensesImport.ts.html +0 -427
- package/coverage/lcov-report/src/db/defaultData/index.html +0 -176
- package/coverage/lcov-report/src/db/defaultData/inventoryImport.ts.html +0 -403
- package/coverage/lcov-report/src/db/defaultData/jobsImport.ts.html +0 -559
- package/coverage/lcov-report/src/db/dynamoClient.ts.html +0 -526
- package/coverage/lcov-report/src/db/linkedRows/LinkDocument.ts.html +0 -265
- package/coverage/lcov-report/src/db/linkedRows/index.html +0 -161
- package/coverage/lcov-report/src/environment.ts.html +0 -457
- package/coverage/lcov-report/src/events/index.ts.html +0 -100
- package/coverage/lcov-report/src/events/utils.ts.html +0 -319
- package/coverage/lcov-report/src/index.html +0 -191
- package/coverage/lcov-report/src/index.ts.html +0 -133
- package/coverage/lcov-report/src/integrations/arangodb.ts.html +0 -415
- package/coverage/lcov-report/src/integrations/base/index.html +0 -161
- package/coverage/lcov-report/src/integrations/base/query.ts.html +0 -133
- package/coverage/lcov-report/src/integrations/base/sql.ts.html +0 -1951
- package/coverage/lcov-report/src/integrations/base/sqlTable.ts.html +0 -691
- package/coverage/lcov-report/src/integrations/base/utils.ts.html +0 -121
- package/coverage/lcov-report/src/integrations/couchdb.ts.html +0 -406
- package/coverage/lcov-report/src/integrations/dynamodb.ts.html +0 -745
- package/coverage/lcov-report/src/integrations/elasticsearch.ts.html +0 -634
- package/coverage/lcov-report/src/integrations/firebase.ts.html +0 -646
- package/coverage/lcov-report/src/integrations/googlesheets.ts.html +0 -1315
- package/coverage/lcov-report/src/integrations/index.html +0 -371
- package/coverage/lcov-report/src/integrations/index.ts.html +0 -445
- package/coverage/lcov-report/src/integrations/microsoftSqlServer.ts.html +0 -1006
- package/coverage/lcov-report/src/integrations/mongodb.ts.html +0 -1867
- package/coverage/lcov-report/src/integrations/mysql.ts.html +0 -964
- package/coverage/lcov-report/src/integrations/oracle.ts.html +0 -1474
- package/coverage/lcov-report/src/integrations/postgres.ts.html +0 -1069
- package/coverage/lcov-report/src/integrations/queries/index.html +0 -116
- package/coverage/lcov-report/src/integrations/queries/sql.ts.html +0 -463
- package/coverage/lcov-report/src/integrations/redis.ts.html +0 -550
- package/coverage/lcov-report/src/integrations/rest.ts.html +0 -1381
- package/coverage/lcov-report/src/integrations/s3.ts.html +0 -862
- package/coverage/lcov-report/src/integrations/snowflake.ts.html +0 -376
- package/coverage/lcov-report/src/integrations/utils.ts.html +0 -1018
- package/coverage/lcov-report/src/middleware/authorized.ts.html +0 -460
- package/coverage/lcov-report/src/migrations/functions/appUrls.ts.html +0 -187
- package/coverage/lcov-report/src/migrations/functions/backfill/app/automations.ts.html +0 -163
- package/coverage/lcov-report/src/migrations/functions/backfill/app/datasources.ts.html +0 -151
- package/coverage/lcov-report/src/migrations/functions/backfill/app/index.html +0 -206
- package/coverage/lcov-report/src/migrations/functions/backfill/app/layouts.ts.html +0 -172
- package/coverage/lcov-report/src/migrations/functions/backfill/app/queries.ts.html +0 -226
- package/coverage/lcov-report/src/migrations/functions/backfill/app/roles.ts.html +0 -151
- package/coverage/lcov-report/src/migrations/functions/backfill/app/screens.ts.html +0 -151
- package/coverage/lcov-report/src/migrations/functions/backfill/app/tables.ts.html +0 -166
- package/coverage/lcov-report/src/migrations/functions/backfill/app.ts.html +0 -532
- package/coverage/lcov-report/src/migrations/functions/backfill/global/configs.ts.html +0 -283
- package/coverage/lcov-report/src/migrations/functions/backfill/global/index.html +0 -146
- package/coverage/lcov-report/src/migrations/functions/backfill/global/quotas.ts.html +0 -265
- package/coverage/lcov-report/src/migrations/functions/backfill/global/users.ts.html +0 -232
- package/coverage/lcov-report/src/migrations/functions/backfill/global.ts.html +0 -724
- package/coverage/lcov-report/src/migrations/functions/backfill/index.html +0 -161
- package/coverage/lcov-report/src/migrations/functions/backfill/index.ts.html +0 -106
- package/coverage/lcov-report/src/migrations/functions/backfill/installation.ts.html +0 -235
- package/coverage/lcov-report/src/migrations/functions/index.html +0 -146
- package/coverage/lcov-report/src/migrations/functions/syncQuotas.ts.html +0 -130
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.html +0 -161
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.ts.html +0 -94
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncApps.ts.html +0 -127
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncPlugins.ts.html +0 -115
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncRows.ts.html +0 -169
- package/coverage/lcov-report/src/migrations/functions/userEmailViewCasing.ts.html +0 -124
- package/coverage/lcov-report/src/migrations/index.ts.html +0 -403
- package/coverage/lcov-report/src/migrations/tests/helpers.ts.html +0 -205
- package/coverage/lcov-report/src/migrations/tests/index.html +0 -131
- package/coverage/lcov-report/src/migrations/tests/structures.ts.html +0 -283
- package/coverage/lcov-report/src/sdk/app/automations/index.html +0 -131
- package/coverage/lcov-report/src/sdk/app/automations/index.ts.html +0 -100
- package/coverage/lcov-report/src/sdk/app/automations/webhook.ts.html +0 -214
- package/coverage/lcov-report/src/sdk/app/backups/constants.ts.html +0 -91
- package/coverage/lcov-report/src/sdk/app/backups/exports.ts.html +0 -604
- package/coverage/lcov-report/src/sdk/app/backups/imports.ts.html +0 -682
- package/coverage/lcov-report/src/sdk/app/backups/index.html +0 -176
- package/coverage/lcov-report/src/sdk/app/backups/index.ts.html +0 -112
- package/coverage/lcov-report/src/sdk/app/backups/statistics.ts.html +0 -292
- package/coverage/lcov-report/src/sdk/app/tables/index.html +0 -116
- package/coverage/lcov-report/src/sdk/app/tables/index.ts.html +0 -265
- package/coverage/lcov-report/src/startup.ts.html +0 -499
- package/coverage/lcov-report/src/tests/utilities/TestConfiguration.ts.html +0 -1966
- package/coverage/lcov-report/src/tests/utilities/controllers.ts.html +0 -127
- package/coverage/lcov-report/src/tests/utilities/index.html +0 -161
- package/coverage/lcov-report/src/tests/utilities/structures.ts.html +0 -667
- package/coverage/lcov-report/src/threads/automation.ts.html +0 -1594
- package/coverage/lcov-report/src/threads/index.html +0 -161
- package/coverage/lcov-report/src/threads/index.ts.html +0 -418
- package/coverage/lcov-report/src/threads/query.ts.html +0 -961
- package/coverage/lcov-report/src/threads/utils.ts.html +0 -373
- package/coverage/lcov-report/src/utilities/fileSystem/clientLibrary.ts.html +0 -547
- package/coverage/lcov-report/src/utilities/fileSystem/index.ts.html +0 -1129
- package/coverage/lcov-report/src/utilities/fileSystem/processor.ts.html +0 -142
- package/coverage/lcov-report/src/utilities/redis.ts.html +0 -343
- package/coverage/lcov-report/src/utilities/routing/index.ts.html +0 -181
- package/coverage/lcov-report/src/utilities/rowProcessor/index.html +0 -146
- package/coverage/lcov-report/src/utilities/rowProcessor/map.ts.html +0 -373
- package/coverage/lcov-report/src/watch.ts.html +0 -196
- package/dist/db/defaultData/datasource_bb_default.js +0 -571
- package/dist/db/defaultData/employeeImport.js +0 -155
- package/dist/db/defaultData/expensesImport.js +0 -117
- package/dist/db/defaultData/inventoryImport.js +0 -109
- package/dist/db/defaultData/jobsImport.js +0 -152
- package/dist/db/linkedRows/LinkDocument.js +0 -32
- package/dist/events/BudibaseEmitter.js +0 -24
- package/dist/utilities/rowProcessor/map.js +0 -99
- package/jest.config.ts +0 -33
- package/src/api/controllers/integration.ts +0 -13
- package/src/api/controllers/migrations.ts +0 -14
- package/src/api/controllers/script.ts +0 -12
- package/src/api/routes/analytics.ts +0 -9
- package/src/api/routes/apikeys.ts +0 -12
- package/src/api/routes/automation.ts +0 -87
- package/src/api/routes/cloud.ts +0 -18
- package/src/api/routes/component.ts +0 -14
- package/src/api/routes/datasource.ts +0 -60
- package/src/api/routes/deploy.ts +0 -21
- package/src/api/routes/dev.ts +0 -38
- package/src/api/routes/integration.ts +0 -16
- package/src/api/routes/layout.ts +0 -16
- package/src/api/routes/migrations.ts +0 -14
- package/src/api/routes/permission.ts +0 -41
- package/src/api/routes/role.ts +0 -24
- package/src/api/routes/routing.ts +0 -14
- package/src/api/routes/screen.ts +0 -23
- package/src/api/routes/script.ts +0 -10
- package/src/api/routes/templates.ts +0 -16
- package/src/api/routes/user.ts +0 -51
- package/src/api/routes/view.ts +0 -34
- package/src/automations/bullboard.ts +0 -38
- package/src/automations/index.ts +0 -26
- package/src/automations/tests/utilities/index.ts +0 -60
- package/src/automations/triggerInfo/index.ts +0 -15
- package/src/constants/index.ts +0 -204
- package/src/constants/screens.ts +0 -48
- package/src/db/defaultData/datasource_bb_default.ts +0 -649
- package/src/db/defaultData/employeeImport.ts +0 -152
- package/src/db/defaultData/expensesImport.ts +0 -114
- package/src/db/defaultData/inventoryImport.ts +0 -106
- package/src/db/defaultData/jobsImport.ts +0 -158
- package/src/db/index.ts +0 -16
- package/src/db/linkedRows/LinkDocument.ts +0 -60
- package/src/events/index.ts +0 -5
- package/src/events/utils.ts +0 -78
- package/src/middleware/appInfo.ts +0 -20
- package/src/middleware/publicApi.ts +0 -21
- package/src/tests/utilities/controllers.ts +0 -14
- package/src/utilities/budibaseDir.ts +0 -3
- package/src/utilities/global.ts +0 -138
- package/src/utilities/routing/index.ts +0 -32
- package/src/utilities/rowProcessor/map.ts +0 -96
- package/src/utilities/security.ts +0 -65
|
@@ -8,18 +8,42 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
11
|
+
const { IncludeDocs, getLinkDocuments } = require("./linkUtils");
|
|
12
|
+
const { generateLinkID, InternalTables, getUserMetadataParams, } = require("../utils");
|
|
13
|
+
const Sentry = require("@sentry/node");
|
|
14
|
+
const { FieldTypes, RelationshipTypes } = require("../../constants");
|
|
15
|
+
const { getAppDB } = require("@budibase/backend-core/context");
|
|
16
|
+
/**
|
|
17
|
+
* Creates a new link document structure which can be put to the database. It is important to
|
|
18
|
+
* note that while this talks about linker/linked the link is bi-directional and for all intent
|
|
19
|
+
* and purposes it does not matter from which direction the link was initiated.
|
|
20
|
+
* @param {string} tableId1 The ID of the first table (the linker).
|
|
21
|
+
* @param {string} tableId2 The ID of the second table (the linked).
|
|
22
|
+
* @param {string} fieldName1 The name of the field in the linker table.
|
|
23
|
+
* @param {string} fieldName2 The name of the field in the linked table.
|
|
24
|
+
* @param {string} rowId1 The ID of the row which is acting as the linker.
|
|
25
|
+
* @param {string} rowId2 The ID of the row which is acting as the linked.
|
|
26
|
+
* @constructor
|
|
27
|
+
*/
|
|
28
|
+
function LinkDocument(tableId1, fieldName1, rowId1, tableId2, fieldName2, rowId2) {
|
|
29
|
+
// build the ID out of unique references to this link document
|
|
30
|
+
this._id = generateLinkID(tableId1, tableId2, rowId1, rowId2, fieldName1, fieldName2);
|
|
31
|
+
// required for referencing in view
|
|
32
|
+
this.type = FieldTypes.LINK;
|
|
33
|
+
this.doc1 = {
|
|
34
|
+
tableId: tableId1,
|
|
35
|
+
fieldName: fieldName1,
|
|
36
|
+
rowId: rowId1,
|
|
37
|
+
};
|
|
38
|
+
this.doc2 = {
|
|
39
|
+
tableId: tableId2,
|
|
40
|
+
fieldName: fieldName2,
|
|
41
|
+
rowId: rowId2,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
20
44
|
class LinkController {
|
|
21
45
|
constructor({ tableId, row, table, oldTable }) {
|
|
22
|
-
this._db =
|
|
46
|
+
this._db = getAppDB();
|
|
23
47
|
this._tableId = tableId;
|
|
24
48
|
this._row = row;
|
|
25
49
|
this._table = table;
|
|
@@ -46,14 +70,14 @@ class LinkController {
|
|
|
46
70
|
* @returns {Promise<boolean>} True if there are any linked fields, otherwise it will return
|
|
47
71
|
* false.
|
|
48
72
|
*/
|
|
49
|
-
doesTableHaveLinkedFields(table) {
|
|
73
|
+
doesTableHaveLinkedFields(table = null) {
|
|
50
74
|
return __awaiter(this, void 0, void 0, function* () {
|
|
51
75
|
if (table == null) {
|
|
52
76
|
table = yield this.table();
|
|
53
77
|
}
|
|
54
78
|
for (let fieldName of Object.keys(table.schema)) {
|
|
55
79
|
const { type } = table.schema[fieldName];
|
|
56
|
-
if (type ===
|
|
80
|
+
if (type === FieldTypes.LINK) {
|
|
57
81
|
return true;
|
|
58
82
|
}
|
|
59
83
|
}
|
|
@@ -64,21 +88,19 @@ class LinkController {
|
|
|
64
88
|
* Utility function for main getLinkDocuments function - refer to it for functionality.
|
|
65
89
|
*/
|
|
66
90
|
getRowLinkDocs(rowId) {
|
|
67
|
-
return
|
|
91
|
+
return getLinkDocuments({
|
|
68
92
|
tableId: this._tableId,
|
|
69
93
|
rowId,
|
|
70
|
-
includeDocs:
|
|
94
|
+
includeDocs: IncludeDocs.INCLUDE,
|
|
71
95
|
});
|
|
72
96
|
}
|
|
73
97
|
/**
|
|
74
98
|
* Utility function for main getLinkDocuments function - refer to it for functionality.
|
|
75
99
|
*/
|
|
76
100
|
getTableLinkDocs() {
|
|
77
|
-
return
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
includeDocs: linkUtils_1.IncludeDocs.INCLUDE,
|
|
81
|
-
}));
|
|
101
|
+
return getLinkDocuments({
|
|
102
|
+
tableId: this._tableId,
|
|
103
|
+
includeDocs: IncludeDocs.INCLUDE,
|
|
82
104
|
});
|
|
83
105
|
}
|
|
84
106
|
/**
|
|
@@ -87,10 +109,10 @@ class LinkController {
|
|
|
87
109
|
validateTable(table) {
|
|
88
110
|
const usedAlready = [];
|
|
89
111
|
for (let schema of Object.values(table.schema)) {
|
|
90
|
-
if (schema.type !==
|
|
112
|
+
if (schema.type !== FieldTypes.LINK) {
|
|
91
113
|
continue;
|
|
92
114
|
}
|
|
93
|
-
const unique = schema.tableId +
|
|
115
|
+
const unique = schema.tableId + schema.fieldName;
|
|
94
116
|
if (usedAlready.indexOf(unique) !== -1) {
|
|
95
117
|
throw new Error("Cannot re-use the linked column name for a linked table.");
|
|
96
118
|
}
|
|
@@ -110,7 +132,6 @@ class LinkController {
|
|
|
110
132
|
"relationshipType",
|
|
111
133
|
];
|
|
112
134
|
for (let field of compareFields) {
|
|
113
|
-
// @ts-ignore
|
|
114
135
|
if (linkSchema1[field] !== linkSchema2[field]) {
|
|
115
136
|
return false;
|
|
116
137
|
}
|
|
@@ -123,17 +144,17 @@ class LinkController {
|
|
|
123
144
|
*/
|
|
124
145
|
handleRelationshipType(linkerField, linkedField) {
|
|
125
146
|
if (!linkerField.relationshipType ||
|
|
126
|
-
linkerField.relationshipType ===
|
|
127
|
-
linkedField.relationshipType =
|
|
147
|
+
linkerField.relationshipType === RelationshipTypes.MANY_TO_MANY) {
|
|
148
|
+
linkedField.relationshipType = RelationshipTypes.MANY_TO_MANY;
|
|
128
149
|
// make sure by default all are many to many (if not specified)
|
|
129
|
-
linkerField.relationshipType =
|
|
150
|
+
linkerField.relationshipType = RelationshipTypes.MANY_TO_MANY;
|
|
130
151
|
}
|
|
131
|
-
else if (linkerField.relationshipType ===
|
|
152
|
+
else if (linkerField.relationshipType === RelationshipTypes.MANY_TO_ONE) {
|
|
132
153
|
// Ensure that the other side of the relationship is locked to one record
|
|
133
|
-
linkedField.relationshipType =
|
|
154
|
+
linkedField.relationshipType = RelationshipTypes.ONE_TO_MANY;
|
|
134
155
|
}
|
|
135
|
-
else if (linkerField.relationshipType ===
|
|
136
|
-
linkedField.relationshipType =
|
|
156
|
+
else if (linkerField.relationshipType === RelationshipTypes.ONE_TO_MANY) {
|
|
157
|
+
linkedField.relationshipType = RelationshipTypes.MANY_TO_ONE;
|
|
137
158
|
}
|
|
138
159
|
return { linkerField, linkedField };
|
|
139
160
|
}
|
|
@@ -151,12 +172,12 @@ class LinkController {
|
|
|
151
172
|
const row = this._row;
|
|
152
173
|
const operations = [];
|
|
153
174
|
// get link docs to compare against
|
|
154
|
-
const linkDocs =
|
|
175
|
+
const linkDocs = yield this.getRowLinkDocs(row._id);
|
|
155
176
|
for (let fieldName of Object.keys(table.schema)) {
|
|
156
177
|
// get the links this row wants to make
|
|
157
178
|
const rowField = row[fieldName];
|
|
158
179
|
const field = table.schema[fieldName];
|
|
159
|
-
if (field.type ===
|
|
180
|
+
if (field.type === FieldTypes.LINK && rowField != null) {
|
|
160
181
|
// check which links actual pertain to the update in this row
|
|
161
182
|
const thisFieldLinkDocs = linkDocs.filter(linkDoc => linkDoc.doc1.fieldName === fieldName ||
|
|
162
183
|
linkDoc.doc2.fieldName === fieldName);
|
|
@@ -169,19 +190,19 @@ class LinkController {
|
|
|
169
190
|
const linkedTable = yield this._db.get(field.tableId);
|
|
170
191
|
const linkedSchema = linkedTable.schema[field.fieldName];
|
|
171
192
|
// We need to map the global users to metadata in each app for relationships
|
|
172
|
-
if (field.tableId ===
|
|
173
|
-
const users = yield this._db.allDocs(
|
|
174
|
-
const metadataRequired = rowField.filter(
|
|
193
|
+
if (field.tableId === InternalTables.USER_METADATA) {
|
|
194
|
+
const users = yield this._db.allDocs(getUserMetadataParams(null, {}));
|
|
195
|
+
const metadataRequired = rowField.filter(userId => !users.rows.some(user => user.id === userId));
|
|
175
196
|
// ensure non-existing user metadata is created in the app DB
|
|
176
|
-
yield this._db.bulkDocs(metadataRequired.map(
|
|
197
|
+
yield this._db.bulkDocs(metadataRequired.map(userId => ({ _id: userId })));
|
|
177
198
|
}
|
|
178
199
|
// iterate through the link IDs in the row field, see if any don't exist already
|
|
179
200
|
for (let linkId of rowField) {
|
|
180
|
-
if (
|
|
181
|
-
let links = (yield
|
|
201
|
+
if (linkedSchema.relationshipType === RelationshipTypes.ONE_TO_MANY) {
|
|
202
|
+
let links = (yield getLinkDocuments({
|
|
182
203
|
tableId: field.tableId,
|
|
183
204
|
rowId: linkId,
|
|
184
|
-
includeDocs:
|
|
205
|
+
includeDocs: IncludeDocs.EXCLUDE,
|
|
185
206
|
})).filter(link => link.id !== row._id && link.fieldName === linkedSchema.name);
|
|
186
207
|
// The 1 side of 1:N is already related to something else
|
|
187
208
|
// You must remove the existing relationship
|
|
@@ -198,7 +219,7 @@ class LinkController {
|
|
|
198
219
|
// skip links that don't exist
|
|
199
220
|
continue;
|
|
200
221
|
}
|
|
201
|
-
operations.push(new
|
|
222
|
+
operations.push(new LinkDocument(table._id, fieldName, row._id, field.tableId, field.fieldName, linkId));
|
|
202
223
|
}
|
|
203
224
|
}
|
|
204
225
|
// find the docs that need to be deleted
|
|
@@ -249,10 +270,10 @@ class LinkController {
|
|
|
249
270
|
removeFieldFromTable(fieldName) {
|
|
250
271
|
return __awaiter(this, void 0, void 0, function* () {
|
|
251
272
|
let oldTable = this._oldTable;
|
|
252
|
-
let field = oldTable
|
|
273
|
+
let field = oldTable.schema[fieldName];
|
|
253
274
|
const linkDocs = yield this.getTableLinkDocs();
|
|
254
275
|
let toDelete = linkDocs.filter(linkDoc => {
|
|
255
|
-
let correctFieldName = linkDoc.doc1.tableId ===
|
|
276
|
+
let correctFieldName = linkDoc.doc1.tableId === oldTable._id
|
|
256
277
|
? linkDoc.doc1.fieldName
|
|
257
278
|
: linkDoc.doc2.fieldName;
|
|
258
279
|
return correctFieldName === fieldName;
|
|
@@ -262,9 +283,7 @@ class LinkController {
|
|
|
262
283
|
}));
|
|
263
284
|
// remove schema from other table
|
|
264
285
|
let linkedTable = yield this._db.get(field.tableId);
|
|
265
|
-
|
|
266
|
-
delete linkedTable.schema[field.fieldName];
|
|
267
|
-
}
|
|
286
|
+
delete linkedTable.schema[field.fieldName];
|
|
268
287
|
yield this._db.put(linkedTable);
|
|
269
288
|
});
|
|
270
289
|
}
|
|
@@ -282,7 +301,7 @@ class LinkController {
|
|
|
282
301
|
const schema = table.schema;
|
|
283
302
|
for (let fieldName of Object.keys(schema)) {
|
|
284
303
|
const field = schema[fieldName];
|
|
285
|
-
if (field.type ===
|
|
304
|
+
if (field.type === FieldTypes.LINK) {
|
|
286
305
|
// handle this in a separate try catch, want
|
|
287
306
|
// the put to bubble up as an error, if can't update
|
|
288
307
|
// table for some reason
|
|
@@ -296,7 +315,7 @@ class LinkController {
|
|
|
296
315
|
}
|
|
297
316
|
const fields = this.handleRelationshipType(field, {
|
|
298
317
|
name: field.fieldName,
|
|
299
|
-
type:
|
|
318
|
+
type: FieldTypes.LINK,
|
|
300
319
|
// these are the props of the table that initiated the link
|
|
301
320
|
tableId: table._id,
|
|
302
321
|
fieldName: fieldName,
|
|
@@ -336,10 +355,10 @@ class LinkController {
|
|
|
336
355
|
const oldTable = this._oldTable;
|
|
337
356
|
// first start by checking if any link columns have been deleted
|
|
338
357
|
const newTable = yield this.table();
|
|
339
|
-
for (let fieldName of Object.keys(
|
|
340
|
-
const field = oldTable
|
|
358
|
+
for (let fieldName of Object.keys(oldTable.schema)) {
|
|
359
|
+
const field = oldTable.schema[fieldName];
|
|
341
360
|
// this field has been removed from the table schema
|
|
342
|
-
if (field.type ===
|
|
361
|
+
if (field.type === FieldTypes.LINK &&
|
|
343
362
|
newTable.schema[fieldName] == null) {
|
|
344
363
|
yield this.removeFieldFromTable(fieldName);
|
|
345
364
|
}
|
|
@@ -362,7 +381,7 @@ class LinkController {
|
|
|
362
381
|
for (let fieldName of Object.keys(schema)) {
|
|
363
382
|
const field = schema[fieldName];
|
|
364
383
|
try {
|
|
365
|
-
if (field.type ===
|
|
384
|
+
if (field.type === FieldTypes.LINK) {
|
|
366
385
|
const linkedTable = yield this._db.get(field.tableId);
|
|
367
386
|
delete linkedTable.schema[field.fieldName];
|
|
368
387
|
yield this._db.put(linkedTable);
|
|
@@ -370,7 +389,7 @@ class LinkController {
|
|
|
370
389
|
}
|
|
371
390
|
catch (err) {
|
|
372
391
|
/* istanbul ignore next */
|
|
373
|
-
|
|
392
|
+
Sentry.captureException(err);
|
|
374
393
|
}
|
|
375
394
|
}
|
|
376
395
|
// need to get the full link docs to delete them
|
|
@@ -8,29 +8,20 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
const
|
|
19
|
-
const
|
|
20
|
-
const utils_1 = require("../utils");
|
|
21
|
-
const lodash_2 = require("lodash");
|
|
22
|
-
const global_1 = require("../../utilities/global");
|
|
23
|
-
const rowProcessor_1 = require("../../utilities/rowProcessor");
|
|
24
|
-
const backend_core_1 = require("@budibase/backend-core");
|
|
25
|
-
var linkUtils_2 = require("./linkUtils");
|
|
26
|
-
Object.defineProperty(exports, "IncludeDocs", { enumerable: true, get: function () { return linkUtils_2.IncludeDocs; } });
|
|
27
|
-
Object.defineProperty(exports, "getLinkDocuments", { enumerable: true, get: function () { return linkUtils_2.getLinkDocuments; } });
|
|
28
|
-
Object.defineProperty(exports, "createLinkView", { enumerable: true, get: function () { return linkUtils_2.createLinkView; } });
|
|
11
|
+
const LinkController = require("./LinkController");
|
|
12
|
+
const { IncludeDocs, getLinkDocuments, createLinkView, getUniqueByProp, getRelatedTableForField, getLinkedTableIDs, getLinkedTable, } = require("./linkUtils");
|
|
13
|
+
const { flatten } = require("lodash");
|
|
14
|
+
const { FieldTypes } = require("../../constants");
|
|
15
|
+
const { getMultiIDParams, USER_METDATA_PREFIX } = require("../../db/utils");
|
|
16
|
+
const { partition } = require("lodash");
|
|
17
|
+
const { getGlobalUsersFromMetadata } = require("../../utilities/global");
|
|
18
|
+
const { processFormulas } = require("../../utilities/rowProcessor/utils");
|
|
19
|
+
const { getAppDB } = require("@budibase/backend-core/context");
|
|
29
20
|
/**
|
|
30
21
|
* This functionality makes sure that when rows with links are created, updated or deleted they are processed
|
|
31
22
|
* correctly - making sure that no stale links are left around and that all links have been made successfully.
|
|
32
23
|
*/
|
|
33
|
-
|
|
24
|
+
const EventType = {
|
|
34
25
|
ROW_SAVE: "row:save",
|
|
35
26
|
ROW_UPDATE: "row:update",
|
|
36
27
|
ROW_DELETE: "row:delete",
|
|
@@ -38,9 +29,14 @@ exports.EventType = {
|
|
|
38
29
|
TABLE_UPDATED: "table:updated",
|
|
39
30
|
TABLE_DELETE: "table:delete",
|
|
40
31
|
};
|
|
32
|
+
exports.EventType = EventType;
|
|
33
|
+
// re-export search here for ease of use
|
|
34
|
+
exports.IncludeDocs = IncludeDocs;
|
|
35
|
+
exports.getLinkDocuments = getLinkDocuments;
|
|
36
|
+
exports.createLinkView = createLinkView;
|
|
41
37
|
function clearRelationshipFields(table, rows) {
|
|
42
38
|
for (let [key, field] of Object.entries(table.schema)) {
|
|
43
|
-
if (field.type ===
|
|
39
|
+
if (field.type === FieldTypes.LINK) {
|
|
44
40
|
rows = rows.map(row => {
|
|
45
41
|
delete row[key];
|
|
46
42
|
return row;
|
|
@@ -53,14 +49,13 @@ function getLinksForRows(rows) {
|
|
|
53
49
|
return __awaiter(this, void 0, void 0, function* () {
|
|
54
50
|
const tableIds = [...new Set(rows.map(el => el.tableId))];
|
|
55
51
|
// start by getting all the link values for performance reasons
|
|
56
|
-
const
|
|
52
|
+
const responses = flatten(yield Promise.all(tableIds.map(tableId => getLinkDocuments({
|
|
57
53
|
tableId: tableId,
|
|
58
|
-
includeDocs:
|
|
59
|
-
}));
|
|
60
|
-
const responses = (0, lodash_1.flatten)((yield Promise.all(promises)));
|
|
54
|
+
includeDocs: IncludeDocs.EXCLUDE,
|
|
55
|
+
}))));
|
|
61
56
|
// have to get unique as the previous table query can
|
|
62
57
|
// return duplicates, could be querying for both tables in a relation
|
|
63
|
-
return
|
|
58
|
+
return getUniqueByProp(responses
|
|
64
59
|
.filter(el => el != null)
|
|
65
60
|
// create a unique ID which we can use for getting only unique ones
|
|
66
61
|
.map(el => (Object.assign(Object.assign({}, el), { unique: el.id + el.thisId + el.fieldName }))), "unique");
|
|
@@ -69,17 +64,17 @@ function getLinksForRows(rows) {
|
|
|
69
64
|
function getFullLinkedDocs(links) {
|
|
70
65
|
return __awaiter(this, void 0, void 0, function* () {
|
|
71
66
|
// create DBs
|
|
72
|
-
const db =
|
|
67
|
+
const db = getAppDB();
|
|
73
68
|
const linkedRowIds = links.map(link => link.id);
|
|
74
69
|
const uniqueRowIds = [...new Set(linkedRowIds)];
|
|
75
|
-
let dbRows = (yield db.allDocs(
|
|
70
|
+
let dbRows = (yield db.allDocs(getMultiIDParams(uniqueRowIds))).rows.map(row => row.doc);
|
|
76
71
|
// convert the unique db rows back to a full list of linked rows
|
|
77
72
|
const linked = linkedRowIds
|
|
78
73
|
.map(id => dbRows.find(row => row && row._id === id))
|
|
79
74
|
.filter(row => row != null);
|
|
80
75
|
// need to handle users as specific cases
|
|
81
|
-
let [users, other] =
|
|
82
|
-
users = yield
|
|
76
|
+
let [users, other] = partition(linked, linkRow => linkRow._id.startsWith(USER_METDATA_PREFIX));
|
|
77
|
+
users = yield getGlobalUsersFromMetadata(users);
|
|
83
78
|
return [...other, ...users];
|
|
84
79
|
});
|
|
85
80
|
}
|
|
@@ -94,7 +89,7 @@ function getFullLinkedDocs(links) {
|
|
|
94
89
|
* @returns {Promise<object>} When the update is complete this will respond successfully. Returns the row for
|
|
95
90
|
* row operations and the table for table operations.
|
|
96
91
|
*/
|
|
97
|
-
function
|
|
92
|
+
exports.updateLinks = function (args) {
|
|
98
93
|
return __awaiter(this, void 0, void 0, function* () {
|
|
99
94
|
const { eventType, row, tableId, table, oldTable } = args;
|
|
100
95
|
const baseReturnObj = row == null ? table : row;
|
|
@@ -102,7 +97,7 @@ function updateLinks(args) {
|
|
|
102
97
|
if (tableId == null && table != null) {
|
|
103
98
|
args.tableId = table._id;
|
|
104
99
|
}
|
|
105
|
-
let linkController = new
|
|
100
|
+
let linkController = new LinkController(args);
|
|
106
101
|
try {
|
|
107
102
|
if (!(yield linkController.doesTableHaveLinkedFields(table)) &&
|
|
108
103
|
(oldTable == null ||
|
|
@@ -114,23 +109,22 @@ function updateLinks(args) {
|
|
|
114
109
|
return baseReturnObj;
|
|
115
110
|
}
|
|
116
111
|
switch (eventType) {
|
|
117
|
-
case
|
|
118
|
-
case
|
|
112
|
+
case EventType.ROW_SAVE:
|
|
113
|
+
case EventType.ROW_UPDATE:
|
|
119
114
|
return yield linkController.rowSaved();
|
|
120
|
-
case
|
|
115
|
+
case EventType.ROW_DELETE:
|
|
121
116
|
return yield linkController.rowDeleted();
|
|
122
|
-
case
|
|
117
|
+
case EventType.TABLE_SAVE:
|
|
123
118
|
return yield linkController.tableSaved();
|
|
124
|
-
case
|
|
119
|
+
case EventType.TABLE_UPDATED:
|
|
125
120
|
return yield linkController.tableUpdated();
|
|
126
|
-
case
|
|
121
|
+
case EventType.TABLE_DELETE:
|
|
127
122
|
return yield linkController.tableDeleted();
|
|
128
123
|
default:
|
|
129
124
|
throw "Type of event is not known, linked row handler requires update.";
|
|
130
125
|
}
|
|
131
126
|
});
|
|
132
|
-
}
|
|
133
|
-
exports.updateLinks = updateLinks;
|
|
127
|
+
};
|
|
134
128
|
/**
|
|
135
129
|
* Given a table and a list of rows this will retrieve all of the attached docs and enrich them into the row.
|
|
136
130
|
* This is required for formula fields, this may only be utilised internally (for now).
|
|
@@ -138,69 +132,63 @@ exports.updateLinks = updateLinks;
|
|
|
138
132
|
* @param {array<object>} rows The rows which are to be enriched.
|
|
139
133
|
* @return {Promise<*>} returns the rows with all of the enriched relationships on it.
|
|
140
134
|
*/
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
for (let
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
row[link.fieldName].push((0, rowProcessor_1.processFormulas)(linkedTable, linkedRow));
|
|
165
|
-
}
|
|
135
|
+
exports.attachFullLinkedDocs = (table, rows) => __awaiter(void 0, void 0, void 0, function* () {
|
|
136
|
+
const linkedTableIds = getLinkedTableIDs(table);
|
|
137
|
+
if (linkedTableIds.length === 0) {
|
|
138
|
+
return rows;
|
|
139
|
+
}
|
|
140
|
+
// get all the links
|
|
141
|
+
const links = (yield getLinksForRows(rows)).filter(link => rows.some(row => row._id === link.thisId));
|
|
142
|
+
// clear any existing links that could be dupe'd
|
|
143
|
+
rows = clearRelationshipFields(table, rows);
|
|
144
|
+
// now get the docs and combine into the rows
|
|
145
|
+
let linked = yield getFullLinkedDocs(links);
|
|
146
|
+
const linkedTables = [];
|
|
147
|
+
for (let row of rows) {
|
|
148
|
+
for (let link of links.filter(link => link.thisId === row._id)) {
|
|
149
|
+
if (row[link.fieldName] == null) {
|
|
150
|
+
row[link.fieldName] = [];
|
|
151
|
+
}
|
|
152
|
+
const linkedRow = linked.find(row => row._id === link.id);
|
|
153
|
+
if (linkedRow) {
|
|
154
|
+
const linkedTableId = linkedRow.tableId || getRelatedTableForField(table, link.fieldName);
|
|
155
|
+
const linkedTable = yield getLinkedTable(linkedTableId, linkedTables);
|
|
156
|
+
if (linkedTable) {
|
|
157
|
+
row[link.fieldName].push(processFormulas(linkedTable, linkedRow));
|
|
166
158
|
}
|
|
167
159
|
}
|
|
168
160
|
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
}
|
|
172
|
-
exports.attachFullLinkedDocs = attachFullLinkedDocs;
|
|
161
|
+
}
|
|
162
|
+
return rows;
|
|
163
|
+
});
|
|
173
164
|
/**
|
|
174
165
|
* This function will take the given enriched rows and squash the links to only contain the primary display field.
|
|
175
166
|
* @param {object} table The table from which the rows originated.
|
|
176
167
|
* @param {array<object>} enriched The pre-enriched rows (full docs) which are to be squashed.
|
|
177
168
|
* @returns {Promise<Array>} The rows after having their links squashed to only contain the ID and primary display.
|
|
178
169
|
*/
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
obj.primaryDisplay = link[linkedTable.primaryDisplay];
|
|
197
|
-
}
|
|
198
|
-
newLinks.push(obj);
|
|
170
|
+
exports.squashLinksToPrimaryDisplay = (table, enriched) => __awaiter(void 0, void 0, void 0, function* () {
|
|
171
|
+
// will populate this as we find them
|
|
172
|
+
const linkedTables = [table];
|
|
173
|
+
for (let row of enriched) {
|
|
174
|
+
// this only fetches the table if its not already in array
|
|
175
|
+
const rowTable = yield getLinkedTable(row.tableId, linkedTables);
|
|
176
|
+
for (let [column, schema] of Object.entries(rowTable.schema)) {
|
|
177
|
+
if (schema.type !== FieldTypes.LINK || !Array.isArray(row[column])) {
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
const newLinks = [];
|
|
181
|
+
for (let link of row[column]) {
|
|
182
|
+
const linkTblId = link.tableId || getRelatedTableForField(table, column);
|
|
183
|
+
const linkedTable = yield getLinkedTable(linkTblId, linkedTables);
|
|
184
|
+
const obj = { _id: link._id };
|
|
185
|
+
if (link[linkedTable.primaryDisplay]) {
|
|
186
|
+
obj.primaryDisplay = link[linkedTable.primaryDisplay];
|
|
199
187
|
}
|
|
200
|
-
|
|
188
|
+
newLinks.push(obj);
|
|
201
189
|
}
|
|
190
|
+
row[column] = newLinks;
|
|
202
191
|
}
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
}
|
|
206
|
-
exports.squashLinksToPrimaryDisplay = squashLinksToPrimaryDisplay;
|
|
192
|
+
}
|
|
193
|
+
return enriched;
|
|
194
|
+
});
|