@budibase/server 1.0.49-alpha.1 → 1.0.49-alpha.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/__mocks__/arangojs.ts +1 -1
- package/__mocks__/aws-sdk.ts +4 -4
- package/__mocks__/mongodb.ts +4 -5
- package/__mocks__/mssql.ts +3 -3
- package/__mocks__/node-fetch.ts +2 -1
- package/__mocks__/pg.ts +3 -5
- package/builder/assets/{index.ba78c49d.css → index.83c0944f.css} +1 -1
- package/builder/assets/{index.ed1cf508.js → index.f686d3cd.js} +184 -184
- package/builder/index.html +2 -2
- package/coverage/clover.xml +2656 -2712
- package/coverage/coverage-final.json +104 -105
- 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 +157 -136
- package/coverage/lcov-report/api/controllers/auth.js.html +11 -14
- package/coverage/lcov-report/api/controllers/automation.js.html +39 -69
- package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
- package/coverage/lcov-report/api/controllers/cloud.js.html +8 -11
- package/coverage/lcov-report/api/controllers/component.js.html +10 -13
- package/coverage/lcov-report/api/controllers/datasource.js.html +31 -37
- package/coverage/lcov-report/api/controllers/dev.js.html +6 -6
- package/coverage/lcov-report/api/controllers/index.html +69 -54
- package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
- package/coverage/lcov-report/api/controllers/layout.js.html +9 -9
- package/coverage/lcov-report/api/controllers/metadata.js.html +6 -21
- package/coverage/lcov-report/{migrations/usageQuotas/syncApps.js.html → api/controllers/migrations.js.html} +30 -45
- package/coverage/lcov-report/api/controllers/permission.js.html +19 -19
- package/coverage/lcov-report/api/controllers/query/index.html +10 -10
- package/coverage/lcov-report/api/controllers/query/index.js.html +38 -35
- package/coverage/lcov-report/api/controllers/query/validation.js.html +6 -6
- package/coverage/lcov-report/api/controllers/role.js.html +16 -16
- package/coverage/lcov-report/api/controllers/routing.js.html +7 -10
- package/coverage/lcov-report/api/controllers/row/external.js.html +48 -141
- package/coverage/lcov-report/api/controllers/row/index.html +28 -28
- package/coverage/lcov-report/api/controllers/row/index.js.html +13 -13
- package/coverage/lcov-report/api/controllers/row/internal.js.html +60 -105
- package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +25 -31
- package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +21 -24
- package/coverage/lcov-report/api/controllers/row/utils.js.html +27 -24
- package/coverage/lcov-report/api/controllers/screen.js.html +15 -21
- package/coverage/lcov-report/api/controllers/script.js.html +4 -4
- package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +27 -57
- package/coverage/lcov-report/api/controllers/table/external.js.html +25 -34
- package/coverage/lcov-report/api/controllers/table/index.html +37 -37
- package/coverage/lcov-report/api/controllers/table/index.js.html +20 -20
- package/coverage/lcov-report/api/controllers/table/internal.js.html +45 -54
- package/coverage/lcov-report/api/controllers/table/utils.js.html +67 -103
- package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
- package/coverage/lcov-report/api/controllers/user.js.html +43 -52
- package/coverage/lcov-report/api/controllers/view/exporters.js.html +4 -4
- package/coverage/lcov-report/api/controllers/view/index.html +16 -16
- package/coverage/lcov-report/api/controllers/view/index.js.html +27 -33
- package/coverage/lcov-report/api/controllers/view/utils.js.html +35 -20
- package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +7 -7
- package/coverage/lcov-report/api/controllers/webhook.js.html +34 -28
- package/coverage/lcov-report/api/index.html +1 -1
- package/coverage/lcov-report/api/index.js.html +3 -3
- package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
- package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
- package/coverage/lcov-report/api/routes/application.js.html +1 -1
- package/coverage/lcov-report/api/routes/auth.js.html +1 -1
- package/coverage/lcov-report/api/routes/automation.js.html +1 -1
- package/coverage/lcov-report/api/routes/backup.js.html +1 -1
- package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
- package/coverage/lcov-report/api/routes/component.js.html +1 -1
- package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
- package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
- package/coverage/lcov-report/api/routes/dev.js.html +1 -1
- package/coverage/lcov-report/api/routes/index.html +22 -7
- package/coverage/lcov-report/api/routes/index.js.html +10 -4
- 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/{migrations/usageQuotas/index.js.html → api/routes/migrations.js.html} +25 -55
- 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 +1 -1
- package/coverage/lcov-report/api/routes/table.js.html +1 -1
- package/coverage/lcov-report/api/routes/templates.js.html +1 -1
- package/coverage/lcov-report/api/routes/user.js.html +1 -1
- package/coverage/lcov-report/api/routes/view.js.html +1 -1
- package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
- package/coverage/lcov-report/automations/actions.js.html +24 -24
- package/coverage/lcov-report/automations/automationUtils.js.html +7 -10
- package/coverage/lcov-report/automations/bullboard.js.html +16 -16
- package/coverage/lcov-report/automations/index.html +18 -18
- package/coverage/lcov-report/automations/index.js.html +1 -1
- package/coverage/lcov-report/automations/steps/bash.js.html +6 -6
- package/coverage/lcov-report/automations/steps/createRow.js.html +7 -10
- package/coverage/lcov-report/automations/steps/delay.js.html +4 -4
- package/coverage/lcov-report/automations/steps/deleteRow.js.html +7 -7
- 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 +1 -1
- package/coverage/lcov-report/automations/steps/integromat.js.html +5 -5
- package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +8 -8
- package/coverage/lcov-report/automations/steps/queryRows.js.html +10 -10
- package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +5 -5
- package/coverage/lcov-report/automations/steps/serverLog.js.html +3 -3
- package/coverage/lcov-report/automations/steps/slack.js.html +5 -5
- package/coverage/lcov-report/automations/steps/updateRow.js.html +7 -7
- package/coverage/lcov-report/automations/steps/utils.js.html +3 -3
- package/coverage/lcov-report/automations/steps/zapier.js.html +5 -5
- package/coverage/lcov-report/automations/triggerInfo/app.js.html +2 -2
- package/coverage/lcov-report/automations/triggerInfo/cron.js.html +2 -2
- package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/index.js.html +8 -8
- package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +2 -2
- package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +2 -2
- package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +2 -2
- package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +2 -2
- package/coverage/lcov-report/automations/triggers.js.html +61 -55
- package/coverage/lcov-report/automations/utils.js.html +54 -42
- package/coverage/lcov-report/constants/index.html +1 -1
- package/coverage/lcov-report/constants/index.js.html +26 -26
- 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 +1 -1
- package/coverage/lcov-report/db/index.js.html +3 -3
- package/coverage/lcov-report/db/linkedRows/LinkController.js.html +15 -27
- package/coverage/lcov-report/db/linkedRows/index.html +27 -27
- package/coverage/lcov-report/db/linkedRows/index.js.html +40 -82
- package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +40 -40
- package/coverage/lcov-report/db/newid.js.html +4 -4
- package/coverage/lcov-report/db/utils.js.html +74 -74
- 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 +97 -112
- 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 +21 -15
- package/coverage/lcov-report/middleware/builder.js.html +3 -3
- package/coverage/lcov-report/middleware/currentapp.js.html +72 -60
- package/coverage/lcov-report/middleware/index.html +28 -28
- 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 +29 -35
- package/coverage/lcov-report/middleware/utils.js.html +2 -2
- package/coverage/lcov-report/threads/automation.js.html +30 -24
- package/coverage/lcov-report/threads/index.html +25 -25
- package/coverage/lcov-report/threads/index.js.html +10 -10
- package/coverage/lcov-report/threads/query.js.html +26 -47
- 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 +57 -48
- package/coverage/lcov-report/utilities/index.html +27 -27
- package/coverage/lcov-report/utilities/index.js.html +42 -72
- 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 +11 -11
- package/coverage/lcov-report/utilities/rowProcessor/index.js.html +32 -74
- package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +4 -4
- package/coverage/lcov-report/utilities/scriptRunner.js.html +5 -5
- package/coverage/lcov-report/utilities/security.js.html +8 -8
- package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/index.js.html +13 -10
- package/coverage/lcov-report/utilities/usageQuota/rows.js.html +5 -2
- package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
- package/coverage/lcov-report/utilities/users.js.html +9 -9
- package/coverage/lcov-report/utilities/workerRequests.js.html +16 -16
- package/coverage/lcov.info +4018 -4092
- package/dist/api/controllers/application.js +49 -48
- package/dist/api/controllers/auth.js +4 -5
- package/dist/api/controllers/automation.js +14 -19
- package/dist/api/controllers/cloud.js +2 -3
- package/dist/api/controllers/component.js +3 -4
- package/dist/api/controllers/datasource.js +9 -10
- package/dist/api/controllers/deploy/Deployment.js +3 -6
- package/dist/api/controllers/deploy/index.js +12 -13
- package/dist/api/controllers/dev.js +5 -5
- package/dist/api/controllers/layout.js +3 -3
- package/dist/api/controllers/metadata.js +4 -4
- package/dist/api/controllers/migrations.js +21 -0
- package/dist/api/controllers/permission.js +4 -4
- package/dist/api/controllers/query/import/index.js +4 -6
- package/dist/api/controllers/query/index.js +11 -10
- package/dist/api/controllers/role.js +5 -5
- package/dist/api/controllers/routing.js +5 -6
- package/dist/api/controllers/row/ExternalRequest.js +90 -67
- package/dist/api/controllers/row/external.js +14 -22
- package/dist/api/controllers/row/internal.js +29 -44
- package/dist/api/controllers/row/internalSearch.js +11 -13
- package/dist/api/controllers/row/staticFormula.js +11 -11
- package/dist/api/controllers/row/utils.js +7 -6
- package/dist/api/controllers/screen.js +5 -7
- package/dist/api/controllers/static/index.js +4 -4
- package/dist/api/controllers/table/bulkFormula.js +14 -15
- package/dist/api/controllers/table/external.js +7 -10
- package/dist/api/controllers/table/index.js +5 -5
- package/dist/api/controllers/table/internal.js +16 -19
- package/dist/api/controllers/table/utils.js +29 -31
- package/dist/api/controllers/user.js +16 -20
- package/dist/api/controllers/view/index.js +8 -10
- package/dist/api/controllers/view/utils.js +9 -4
- package/dist/api/controllers/webhook.js +10 -8
- package/dist/api/routes/index.js +2 -0
- package/dist/api/routes/migrations.js +9 -0
- package/dist/api/routes/tests/utilities/TestFunctions.js +37 -17
- package/dist/app.js +35 -5
- package/dist/automations/automationUtils.js +2 -3
- package/dist/automations/steps/createRow.js +1 -1
- package/dist/automations/steps/updateRow.js +1 -1
- package/dist/automations/triggers.js +27 -25
- package/dist/automations/utils.js +10 -5
- package/dist/db/linkedRows/LinkController.js +3 -7
- package/dist/db/linkedRows/index.js +16 -26
- package/dist/db/linkedRows/linkUtils.js +6 -6
- package/dist/db/views/staticViews.js +9 -10
- package/dist/environment.js +3 -1
- package/dist/integrations/base/sql.js +49 -15
- package/dist/integrations/utils.js +3 -0
- package/dist/middleware/authorized.js +5 -3
- package/dist/middleware/builder.js +2 -2
- package/dist/middleware/currentapp.js +41 -37
- package/dist/middleware/usageQuota.js +2 -4
- package/dist/migrations/functions/appUrls.js +46 -0
- package/dist/migrations/functions/quotas1.js +50 -0
- package/dist/migrations/{usageQuotas → functions/usageQuotas}/index.js +6 -10
- package/dist/migrations/{usageQuotas → functions/usageQuotas}/syncApps.js +12 -9
- package/dist/migrations/{usageQuotas → functions/usageQuotas}/syncRows.js +16 -12
- package/dist/migrations/functions/userEmailViewCasing.js +24 -0
- package/dist/migrations/index.js +62 -0
- package/dist/package.json +4 -4
- package/dist/tests/utilities/TestConfiguration.js +70 -44
- package/dist/threads/automation.js +13 -11
- package/dist/threads/query.js +13 -19
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utilities/fileSystem/index.js +4 -3
- package/dist/utilities/global.js +15 -12
- package/dist/utilities/index.js +7 -17
- package/dist/utilities/routing/index.js +5 -5
- package/dist/utilities/rowProcessor/index.js +9 -10
- package/dist/utilities/usageQuota/index.js +1 -0
- package/dist/utilities/usageQuota/rows.js +1 -0
- package/dist/utilities/users.js +3 -3
- package/dist/utilities/workerRequests.js +4 -4
- package/package.json +5 -5
- package/scripts/integrations/mssql/data/Dockerfile +1 -1
- package/scripts/integrations/mssql/data/setup.sql +17 -4
- package/scripts/integrations/postgres/init.sql +11 -6
- package/scripts/likeCypress.ts +1 -1
- package/src/api/controllers/application.js +38 -31
- package/src/api/controllers/auth.js +4 -5
- package/src/api/controllers/automation.js +13 -23
- package/src/api/controllers/cloud.js +2 -3
- package/src/api/controllers/component.js +3 -4
- package/src/api/controllers/datasource.js +9 -11
- package/src/api/controllers/deploy/Deployment.js +3 -7
- package/src/api/controllers/deploy/index.js +20 -13
- package/src/api/controllers/dev.js +5 -5
- package/src/api/controllers/layout.js +3 -3
- package/src/api/controllers/metadata.js +4 -9
- package/src/api/controllers/migrations.js +13 -0
- package/src/api/controllers/permission.js +4 -4
- package/src/api/controllers/query/import/index.ts +4 -6
- package/src/api/controllers/query/import/tests/index.spec.js +2 -1
- package/src/api/controllers/query/index.js +11 -10
- package/src/api/controllers/role.js +5 -5
- package/src/api/controllers/routing.js +5 -6
- package/src/api/controllers/row/ExternalRequest.ts +67 -43
- package/src/api/controllers/row/external.js +27 -58
- package/src/api/controllers/row/internal.js +29 -44
- package/src/api/controllers/row/internalSearch.js +11 -13
- package/src/api/controllers/row/staticFormula.js +10 -11
- package/src/api/controllers/row/utils.js +7 -6
- package/src/api/controllers/screen.js +5 -7
- package/src/api/controllers/static/index.js +4 -4
- package/src/api/controllers/table/bulkFormula.js +13 -23
- package/src/api/controllers/table/external.js +7 -10
- package/src/api/controllers/table/index.js +5 -5
- package/src/api/controllers/table/internal.js +18 -21
- package/src/api/controllers/table/utils.js +29 -41
- package/src/api/controllers/user.js +17 -20
- package/src/api/controllers/view/index.js +8 -10
- package/src/api/controllers/view/utils.js +9 -4
- package/src/api/controllers/webhook.js +10 -8
- package/src/api/routes/index.js +2 -0
- package/src/api/routes/migrations.js +14 -0
- package/src/api/routes/tests/automation.spec.js +1 -0
- package/src/api/routes/tests/misc.spec.js +0 -1
- package/src/api/routes/tests/routing.spec.js +21 -12
- package/src/api/routes/tests/row.spec.js +7 -4
- package/src/api/routes/tests/utilities/TestFunctions.js +39 -17
- package/src/app.ts +18 -5
- package/src/automations/automationUtils.js +2 -3
- package/src/automations/steps/createRow.js +0 -1
- package/src/automations/steps/updateRow.js +1 -1
- package/src/automations/triggers.js +33 -31
- package/src/automations/utils.js +9 -5
- package/src/db/linkedRows/LinkController.js +3 -7
- package/src/db/linkedRows/index.js +16 -30
- package/src/db/linkedRows/linkUtils.js +6 -6
- package/src/db/tests/linkController.spec.js +0 -1
- package/src/db/tests/linkTests.spec.js +5 -6
- package/src/db/views/staticViews.js +8 -10
- package/src/environment.js +3 -1
- package/src/integrations/base/sql.ts +61 -22
- package/src/integrations/utils.ts +4 -1
- package/src/middleware/authorized.js +5 -3
- package/src/middleware/builder.js +2 -2
- package/src/middleware/currentapp.js +50 -46
- package/src/middleware/tests/authorized.spec.js +7 -2
- package/src/middleware/tests/currentapp.spec.js +6 -0
- package/src/middleware/usageQuota.js +2 -4
- package/src/migrations/functions/appUrls.ts +34 -0
- package/src/migrations/functions/quotas1.ts +20 -0
- package/src/migrations/functions/tests/appUrls.spec.js +29 -0
- package/src/migrations/{tests/usageQuotas/index.spec.js → functions/tests/quotas1.spec.js} +5 -5
- package/src/migrations/functions/tests/userEmailViewCasing.spec.js +25 -0
- package/src/migrations/functions/usageQuotas/index.ts +8 -0
- package/src/migrations/{usageQuotas/syncApps.js → functions/usageQuotas/syncApps.ts} +6 -6
- package/src/migrations/functions/usageQuotas/syncRows.ts +22 -0
- package/src/migrations/{tests/usageQuotas → functions/usageQuotas/tests}/syncApps.spec.js +4 -4
- package/src/migrations/{tests/usageQuotas → functions/usageQuotas/tests}/syncRows.spec.js +4 -4
- package/src/migrations/functions/userEmailViewCasing.ts +13 -0
- package/src/migrations/index.ts +56 -0
- package/src/module.d.ts +3 -0
- package/src/tests/utilities/TestConfiguration.js +73 -50
- package/src/threads/automation.js +17 -15
- package/src/threads/query.js +14 -21
- package/src/utilities/fileSystem/index.js +4 -3
- package/src/utilities/global.js +15 -12
- package/src/utilities/index.js +7 -17
- package/src/utilities/routing/index.js +5 -5
- package/src/utilities/rowProcessor/index.js +9 -23
- package/src/utilities/usageQuota/index.js +1 -0
- package/src/utilities/usageQuota/rows.js +1 -0
- package/src/utilities/users.js +3 -3
- package/src/utilities/workerRequests.js +4 -4
- package/tsconfig.json +2 -1
- package/coverage/lcov-report/migrations/usageQuotas/index.html +0 -141
- package/coverage/lcov-report/migrations/usageQuotas/syncRows.js.html +0 -143
- package/src/migrations/usageQuotas/index.js +0 -24
- package/src/migrations/usageQuotas/syncRows.js +0 -21
|
@@ -19,7 +19,6 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
19
19
|
}
|
|
20
20
|
return t;
|
|
21
21
|
};
|
|
22
|
-
const CouchDB = require("../../../db");
|
|
23
22
|
const linkRows = require("../../../db/linkedRows");
|
|
24
23
|
const { generateRowID, getRowParams, DocumentTypes, InternalTables, } = require("../../../db/utils");
|
|
25
24
|
const userController = require("../user");
|
|
@@ -32,6 +31,7 @@ const inMemoryViews = require("../../../db/inMemoryView");
|
|
|
32
31
|
const env = require("../../../environment");
|
|
33
32
|
const { migrateToInMemoryView, migrateToDesignView, getFromDesignDoc, getFromMemoryDoc, } = require("../view/utils");
|
|
34
33
|
const { cloneDeep } = require("lodash/fp");
|
|
34
|
+
const { getAppDB } = require("@budibase/backend-core/context");
|
|
35
35
|
const { finaliseRow, updateRelatedFormula } = require("./staticFormula");
|
|
36
36
|
const CALCULATION_TYPES = {
|
|
37
37
|
SUM: "sum",
|
|
@@ -83,8 +83,7 @@ function getRawTableData(ctx, db, tableId) {
|
|
|
83
83
|
});
|
|
84
84
|
}
|
|
85
85
|
exports.patch = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
86
|
-
const
|
|
87
|
-
const db = new CouchDB(appId);
|
|
86
|
+
const db = getAppDB();
|
|
88
87
|
const inputs = ctx.request.body;
|
|
89
88
|
const tableId = inputs.tableId;
|
|
90
89
|
const isUserTable = tableId === InternalTables.USER_METADATA;
|
|
@@ -123,29 +122,27 @@ exports.patch = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
123
122
|
}
|
|
124
123
|
// returned row is cleaned and prepared for writing to DB
|
|
125
124
|
row = yield linkRows.updateLinks({
|
|
126
|
-
appId,
|
|
127
125
|
eventType: linkRows.EventType.ROW_UPDATE,
|
|
128
126
|
row,
|
|
129
127
|
tableId: row.tableId,
|
|
130
128
|
table,
|
|
131
129
|
});
|
|
132
130
|
// check if any attachments removed
|
|
133
|
-
yield cleanupAttachments(
|
|
131
|
+
yield cleanupAttachments(table, { oldRow, row });
|
|
134
132
|
if (isUserTable) {
|
|
135
133
|
// the row has been updated, need to put it into the ctx
|
|
136
134
|
ctx.request.body = row;
|
|
137
135
|
yield userController.updateMetadata(ctx);
|
|
138
136
|
return { row: ctx.body, table };
|
|
139
137
|
}
|
|
140
|
-
return finaliseRow(
|
|
138
|
+
return finaliseRow(table, row, {
|
|
141
139
|
oldTable: dbTable,
|
|
142
140
|
updateFormula: true,
|
|
143
141
|
});
|
|
144
142
|
});
|
|
145
143
|
exports.save = function (ctx) {
|
|
146
144
|
return __awaiter(this, void 0, void 0, function* () {
|
|
147
|
-
const
|
|
148
|
-
const db = new CouchDB(appId);
|
|
145
|
+
const db = getAppDB();
|
|
149
146
|
let inputs = ctx.request.body;
|
|
150
147
|
inputs.tableId = ctx.params.tableId;
|
|
151
148
|
if (!inputs._rev && !inputs._id) {
|
|
@@ -163,27 +160,25 @@ exports.save = function (ctx) {
|
|
|
163
160
|
}
|
|
164
161
|
// make sure link rows are up to date
|
|
165
162
|
row = yield linkRows.updateLinks({
|
|
166
|
-
appId,
|
|
167
163
|
eventType: linkRows.EventType.ROW_SAVE,
|
|
168
164
|
row,
|
|
169
165
|
tableId: row.tableId,
|
|
170
166
|
table,
|
|
171
167
|
});
|
|
172
|
-
return finaliseRow(
|
|
168
|
+
return finaliseRow(table, row, {
|
|
173
169
|
oldTable: dbTable,
|
|
174
170
|
updateFormula: true,
|
|
175
171
|
});
|
|
176
172
|
});
|
|
177
173
|
};
|
|
178
174
|
exports.fetchView = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
179
|
-
const appId = ctx.appId;
|
|
180
175
|
const viewName = ctx.params.viewName;
|
|
181
176
|
// if this is a table view being looked for just transfer to that
|
|
182
177
|
if (viewName.startsWith(DocumentTypes.TABLE)) {
|
|
183
178
|
ctx.params.tableId = viewName;
|
|
184
179
|
return exports.fetch(ctx);
|
|
185
180
|
}
|
|
186
|
-
const db =
|
|
181
|
+
const db = getAppDB();
|
|
187
182
|
const { calculation, group, field } = ctx.query;
|
|
188
183
|
const viewInfo = yield getView(db, viewName);
|
|
189
184
|
let response;
|
|
@@ -211,7 +206,7 @@ exports.fetchView = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
211
206
|
schema: {},
|
|
212
207
|
};
|
|
213
208
|
}
|
|
214
|
-
rows = yield outputProcessing(
|
|
209
|
+
rows = yield outputProcessing(table, response.rows);
|
|
215
210
|
}
|
|
216
211
|
if (calculation === CALCULATION_TYPES.STATS) {
|
|
217
212
|
response.rows = response.rows.map(row => (Object.assign(Object.assign({ group: row.key, field }, row.value), { avg: row.value.sum / row.value.count })));
|
|
@@ -228,25 +223,22 @@ exports.fetchView = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
228
223
|
return rows;
|
|
229
224
|
});
|
|
230
225
|
exports.fetch = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
231
|
-
const
|
|
232
|
-
const db = new CouchDB(appId);
|
|
226
|
+
const db = getAppDB();
|
|
233
227
|
const tableId = ctx.params.tableId;
|
|
234
228
|
let table = yield db.get(tableId);
|
|
235
229
|
let rows = yield getRawTableData(ctx, db, tableId);
|
|
236
|
-
return outputProcessing(
|
|
230
|
+
return outputProcessing(table, rows);
|
|
237
231
|
});
|
|
238
232
|
exports.find = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
239
|
-
const
|
|
240
|
-
const db = new CouchDB(appId);
|
|
233
|
+
const db = getAppDB();
|
|
241
234
|
const table = yield db.get(ctx.params.tableId);
|
|
242
|
-
let row = yield findRow(ctx,
|
|
243
|
-
row = yield outputProcessing(
|
|
235
|
+
let row = yield findRow(ctx, ctx.params.tableId, ctx.params.rowId);
|
|
236
|
+
row = yield outputProcessing(table, row);
|
|
244
237
|
return row;
|
|
245
238
|
});
|
|
246
239
|
exports.destroy = function (ctx) {
|
|
247
240
|
return __awaiter(this, void 0, void 0, function* () {
|
|
248
|
-
const
|
|
249
|
-
const db = new CouchDB(appId);
|
|
241
|
+
const db = getAppDB();
|
|
250
242
|
const { _id, _rev } = ctx.request.body;
|
|
251
243
|
let row = yield db.get(_id);
|
|
252
244
|
if (row.tableId !== ctx.params.tableId) {
|
|
@@ -254,18 +246,17 @@ exports.destroy = function (ctx) {
|
|
|
254
246
|
}
|
|
255
247
|
const table = yield db.get(row.tableId);
|
|
256
248
|
// update the row to include full relationships before deleting them
|
|
257
|
-
row = yield outputProcessing(
|
|
249
|
+
row = yield outputProcessing(table, row, { squash: false });
|
|
258
250
|
// now remove the relationships
|
|
259
251
|
yield linkRows.updateLinks({
|
|
260
|
-
appId,
|
|
261
252
|
eventType: linkRows.EventType.ROW_DELETE,
|
|
262
253
|
row,
|
|
263
254
|
tableId: row.tableId,
|
|
264
255
|
});
|
|
265
256
|
// remove any attachments that were on the row from object storage
|
|
266
|
-
yield cleanupAttachments(
|
|
257
|
+
yield cleanupAttachments(table, { row });
|
|
267
258
|
// remove any static formula
|
|
268
|
-
yield updateRelatedFormula(
|
|
259
|
+
yield updateRelatedFormula(table, row);
|
|
269
260
|
let response;
|
|
270
261
|
if (ctx.params.tableId === InternalTables.USER_METADATA) {
|
|
271
262
|
ctx.params = {
|
|
@@ -281,17 +272,15 @@ exports.destroy = function (ctx) {
|
|
|
281
272
|
});
|
|
282
273
|
};
|
|
283
274
|
exports.bulkDestroy = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
284
|
-
const
|
|
285
|
-
const db = new CouchDB(appId);
|
|
275
|
+
const db = getAppDB();
|
|
286
276
|
const tableId = ctx.params.tableId;
|
|
287
277
|
const table = yield db.get(tableId);
|
|
288
278
|
let { rows } = ctx.request.body;
|
|
289
279
|
// before carrying out any updates, make sure the rows are ready to be returned
|
|
290
280
|
// they need to be the full rows (including previous relationships) for automations
|
|
291
|
-
rows = yield outputProcessing(
|
|
281
|
+
rows = yield outputProcessing(table, rows, { squash: false });
|
|
292
282
|
// remove the relationships first
|
|
293
283
|
let updates = rows.map(row => linkRows.updateLinks({
|
|
294
|
-
appId,
|
|
295
284
|
eventType: linkRows.EventType.ROW_DELETE,
|
|
296
285
|
row,
|
|
297
286
|
tableId: row.tableId,
|
|
@@ -308,8 +297,8 @@ exports.bulkDestroy = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
308
297
|
yield db.bulkDocs(rows.map(row => (Object.assign(Object.assign({}, row), { _deleted: true }))));
|
|
309
298
|
}
|
|
310
299
|
// remove any attachments that were on the rows from object storage
|
|
311
|
-
yield cleanupAttachments(
|
|
312
|
-
yield updateRelatedFormula(
|
|
300
|
+
yield cleanupAttachments(table, { rows });
|
|
301
|
+
yield updateRelatedFormula(table, rows);
|
|
313
302
|
yield Promise.all(updates);
|
|
314
303
|
return { response: { ok: true }, rows };
|
|
315
304
|
});
|
|
@@ -318,50 +307,46 @@ exports.search = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
318
307
|
if (env.isCypress()) {
|
|
319
308
|
return { rows: yield exports.fetch(ctx) };
|
|
320
309
|
}
|
|
321
|
-
const appId = ctx.appId;
|
|
322
310
|
const { tableId } = ctx.params;
|
|
323
|
-
const db =
|
|
311
|
+
const db = getAppDB();
|
|
324
312
|
const _a = ctx.request.body, { paginate, query } = _a, params = __rest(_a, ["paginate", "query"]);
|
|
325
313
|
params.version = ctx.version;
|
|
326
314
|
params.tableId = tableId;
|
|
327
315
|
let response;
|
|
328
316
|
if (paginate) {
|
|
329
|
-
response = yield paginatedSearch(
|
|
317
|
+
response = yield paginatedSearch(query, params);
|
|
330
318
|
}
|
|
331
319
|
else {
|
|
332
|
-
response = yield fullSearch(
|
|
320
|
+
response = yield fullSearch(query, params);
|
|
333
321
|
}
|
|
334
322
|
// Enrich search results with relationships
|
|
335
323
|
if (response.rows && response.rows.length) {
|
|
336
324
|
// enrich with global users if from users table
|
|
337
325
|
if (tableId === InternalTables.USER_METADATA) {
|
|
338
|
-
response.rows = yield getGlobalUsersFromMetadata(
|
|
326
|
+
response.rows = yield getGlobalUsersFromMetadata(response.rows);
|
|
339
327
|
}
|
|
340
328
|
const table = yield db.get(tableId);
|
|
341
|
-
response.rows = yield outputProcessing(
|
|
329
|
+
response.rows = yield outputProcessing(table, response.rows);
|
|
342
330
|
}
|
|
343
331
|
return response;
|
|
344
332
|
});
|
|
345
333
|
exports.validate = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
346
334
|
return validate({
|
|
347
|
-
appId: ctx.appId,
|
|
348
335
|
tableId: ctx.params.tableId,
|
|
349
336
|
row: ctx.request.body,
|
|
350
337
|
});
|
|
351
338
|
});
|
|
352
339
|
exports.fetchEnrichedRow = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
353
|
-
const
|
|
354
|
-
const db = new CouchDB(appId);
|
|
340
|
+
const db = getAppDB();
|
|
355
341
|
const tableId = ctx.params.tableId;
|
|
356
342
|
const rowId = ctx.params.rowId;
|
|
357
343
|
// need table to work out where links go in row
|
|
358
344
|
let [table, row] = yield Promise.all([
|
|
359
345
|
db.get(tableId),
|
|
360
|
-
findRow(ctx,
|
|
346
|
+
findRow(ctx, tableId, rowId),
|
|
361
347
|
]);
|
|
362
348
|
// get the link docs
|
|
363
349
|
const linkVals = yield linkRows.getLinkDocuments({
|
|
364
|
-
appId,
|
|
365
350
|
tableId,
|
|
366
351
|
rowId,
|
|
367
352
|
});
|
|
@@ -385,7 +370,7 @@ exports.fetchEnrichedRow = (ctx) => __awaiter(void 0, void 0, void 0, function*
|
|
|
385
370
|
let linkedRows = [];
|
|
386
371
|
for (let [tableId, rows] of Object.entries(groups)) {
|
|
387
372
|
// need to include the IDs in these rows for any links they may have
|
|
388
|
-
linkedRows = linkedRows.concat(yield outputProcessing(
|
|
373
|
+
linkedRows = linkedRows.concat(yield outputProcessing(tables[tableId], rows));
|
|
389
374
|
}
|
|
390
375
|
// insert the link rows in the correct place throughout the main row
|
|
391
376
|
for (let fieldName of Object.keys(table.schema)) {
|
|
@@ -11,13 +11,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
11
11
|
const { SearchIndexes } = require("../../../db/utils");
|
|
12
12
|
const fetch = require("node-fetch");
|
|
13
13
|
const { getCouchUrl } = require("@budibase/backend-core/db");
|
|
14
|
+
const { getAppId } = require("@budibase/backend-core/context");
|
|
14
15
|
/**
|
|
15
16
|
* Class to build lucene query URLs.
|
|
16
17
|
* Optionally takes a base lucene query object.
|
|
17
18
|
*/
|
|
18
19
|
class QueryBuilder {
|
|
19
|
-
constructor(
|
|
20
|
-
this.appId = appId;
|
|
20
|
+
constructor(base) {
|
|
21
21
|
this.query = Object.assign({ string: {}, fuzzy: {}, range: {}, equal: {}, notEqual: {}, empty: {}, notEmpty: {} }, base);
|
|
22
22
|
this.limit = 50;
|
|
23
23
|
this.sortOrder = "ascending";
|
|
@@ -221,7 +221,8 @@ class QueryBuilder {
|
|
|
221
221
|
}
|
|
222
222
|
run() {
|
|
223
223
|
return __awaiter(this, void 0, void 0, function* () {
|
|
224
|
-
const
|
|
224
|
+
const appId = getAppId();
|
|
225
|
+
const url = `${getCouchUrl()}/${appId}/_design/database/_search/${SearchIndexes.ROWS}`;
|
|
225
226
|
const body = this.buildSearchBody();
|
|
226
227
|
return yield runQuery(url, body);
|
|
227
228
|
});
|
|
@@ -254,7 +255,6 @@ const runQuery = (url, body) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
254
255
|
* Gets round the fixed limit of 200 results from a query by fetching as many
|
|
255
256
|
* pages as required and concatenating the results. This recursively operates
|
|
256
257
|
* until enough results have been found.
|
|
257
|
-
* @param appId {string} The app ID to search
|
|
258
258
|
* @param query {object} The JSON query structure
|
|
259
259
|
* @param params {object} The search params including:
|
|
260
260
|
* tableId {string} The table ID to search
|
|
@@ -267,7 +267,7 @@ const runQuery = (url, body) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
267
267
|
* rows {array|null} Current results in the recursive search
|
|
268
268
|
* @returns {Promise<*[]|*>}
|
|
269
269
|
*/
|
|
270
|
-
const recursiveSearch = (
|
|
270
|
+
const recursiveSearch = (query, params) => __awaiter(void 0, void 0, void 0, function* () {
|
|
271
271
|
const bookmark = params.bookmark;
|
|
272
272
|
const rows = params.rows || [];
|
|
273
273
|
if (rows.length >= params.limit) {
|
|
@@ -277,7 +277,7 @@ const recursiveSearch = (appId, query, params) => __awaiter(void 0, void 0, void
|
|
|
277
277
|
if (rows.length > params.limit - 200) {
|
|
278
278
|
pageSize = params.limit - rows.length;
|
|
279
279
|
}
|
|
280
|
-
const page = yield new QueryBuilder(
|
|
280
|
+
const page = yield new QueryBuilder(query)
|
|
281
281
|
.setVersion(params.version)
|
|
282
282
|
.setTable(params.tableId)
|
|
283
283
|
.setBookmark(bookmark)
|
|
@@ -293,13 +293,12 @@ const recursiveSearch = (appId, query, params) => __awaiter(void 0, void 0, void
|
|
|
293
293
|
return [...rows, ...page.rows];
|
|
294
294
|
}
|
|
295
295
|
const newParams = Object.assign(Object.assign({}, params), { bookmark: page.bookmark, rows: [...rows, ...page.rows] });
|
|
296
|
-
return yield recursiveSearch(
|
|
296
|
+
return yield recursiveSearch(query, newParams);
|
|
297
297
|
});
|
|
298
298
|
/**
|
|
299
299
|
* Performs a paginated search. A bookmark will be returned to allow the next
|
|
300
300
|
* page to be fetched. There is a max limit off 200 results per page in a
|
|
301
301
|
* paginated search.
|
|
302
|
-
* @param appId {string} The app ID to search
|
|
303
302
|
* @param query {object} The JSON query structure
|
|
304
303
|
* @param params {object} The search params including:
|
|
305
304
|
* tableId {string} The table ID to search
|
|
@@ -311,13 +310,13 @@ const recursiveSearch = (appId, query, params) => __awaiter(void 0, void 0, void
|
|
|
311
310
|
* bookmark {string} The bookmark to resume from
|
|
312
311
|
* @returns {Promise<{hasNextPage: boolean, rows: *[]}>}
|
|
313
312
|
*/
|
|
314
|
-
exports.paginatedSearch = (
|
|
313
|
+
exports.paginatedSearch = (query, params) => __awaiter(void 0, void 0, void 0, function* () {
|
|
315
314
|
let limit = params.limit;
|
|
316
315
|
if (limit == null || isNaN(limit) || limit < 0) {
|
|
317
316
|
limit = 50;
|
|
318
317
|
}
|
|
319
318
|
limit = Math.min(limit, 200);
|
|
320
|
-
const search = new QueryBuilder(
|
|
319
|
+
const search = new QueryBuilder(query)
|
|
321
320
|
.setVersion(params.version)
|
|
322
321
|
.setTable(params.tableId)
|
|
323
322
|
.setSort(params.sort)
|
|
@@ -340,7 +339,6 @@ exports.paginatedSearch = (appId, query, params) => __awaiter(void 0, void 0, vo
|
|
|
340
339
|
* desired amount of results. There is a limit of 1000 results to avoid
|
|
341
340
|
* heavy performance hits, and to avoid client components breaking from
|
|
342
341
|
* handling too much data.
|
|
343
|
-
* @param appId {string} The app ID to search
|
|
344
342
|
* @param query {object} The JSON query structure
|
|
345
343
|
* @param params {object} The search params including:
|
|
346
344
|
* tableId {string} The table ID to search
|
|
@@ -351,12 +349,12 @@ exports.paginatedSearch = (appId, query, params) => __awaiter(void 0, void 0, vo
|
|
|
351
349
|
* limit {number} The desired number of results
|
|
352
350
|
* @returns {Promise<{rows: *}>}
|
|
353
351
|
*/
|
|
354
|
-
exports.fullSearch = (
|
|
352
|
+
exports.fullSearch = (query, params) => __awaiter(void 0, void 0, void 0, function* () {
|
|
355
353
|
let limit = params.limit;
|
|
356
354
|
if (limit == null || isNaN(limit) || limit < 0) {
|
|
357
355
|
limit = 1000;
|
|
358
356
|
}
|
|
359
357
|
params.limit = Math.min(limit, 1000);
|
|
360
|
-
const rows = yield recursiveSearch(
|
|
358
|
+
const rows = yield recursiveSearch(query, params);
|
|
361
359
|
return { rows };
|
|
362
360
|
});
|
|
@@ -8,20 +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
|
-
const CouchDB = require("../../../db");
|
|
12
11
|
const { getRowParams } = require("../../../db/utils");
|
|
13
12
|
const { outputProcessing, processAutoColumn, processFormulas, } = require("../../../utilities/rowProcessor");
|
|
14
13
|
const { FieldTypes, FormulaTypes } = require("../../../constants");
|
|
15
14
|
const { isEqual } = require("lodash");
|
|
16
15
|
const { cloneDeep } = require("lodash/fp");
|
|
16
|
+
const { getAppDB } = require("@budibase/backend-core/context");
|
|
17
17
|
/**
|
|
18
18
|
* This function runs through a list of enriched rows, looks at the rows which
|
|
19
19
|
* are related and then checks if they need the state of their formulas
|
|
20
20
|
* updated.
|
|
21
21
|
* NOTE: this will only for affect static formulas.
|
|
22
22
|
*/
|
|
23
|
-
exports.updateRelatedFormula = (
|
|
24
|
-
const db =
|
|
23
|
+
exports.updateRelatedFormula = (table, enrichedRows) => __awaiter(void 0, void 0, void 0, function* () {
|
|
24
|
+
const db = getAppDB();
|
|
25
25
|
// no formula to update, we're done
|
|
26
26
|
if (!table.relatedFormula) {
|
|
27
27
|
return;
|
|
@@ -59,7 +59,7 @@ exports.updateRelatedFormula = (appId, table, enrichedRows) => __awaiter(void 0,
|
|
|
59
59
|
if (column.type === FieldTypes.FORMULA &&
|
|
60
60
|
column.formulaType === FormulaTypes.STATIC) {
|
|
61
61
|
// re-enrich rows for all the related, don't update the related formula for them
|
|
62
|
-
promises = promises.concat(relatedRows[tableId].map(related => exports.finaliseRow(
|
|
62
|
+
promises = promises.concat(relatedRows[tableId].map(related => exports.finaliseRow(relatedTable, related, {
|
|
63
63
|
updateFormula: false,
|
|
64
64
|
})));
|
|
65
65
|
}
|
|
@@ -68,15 +68,15 @@ exports.updateRelatedFormula = (appId, table, enrichedRows) => __awaiter(void 0,
|
|
|
68
68
|
}
|
|
69
69
|
yield Promise.all(promises);
|
|
70
70
|
});
|
|
71
|
-
exports.updateAllFormulasInTable = (
|
|
72
|
-
const db =
|
|
71
|
+
exports.updateAllFormulasInTable = (table) => __awaiter(void 0, void 0, void 0, function* () {
|
|
72
|
+
const db = getAppDB();
|
|
73
73
|
// start by getting the raw rows (which will be written back to DB after update)
|
|
74
74
|
let rows = (yield db.allDocs(getRowParams(table._id, null, {
|
|
75
75
|
include_docs: true,
|
|
76
76
|
}))).rows.map(row => row.doc);
|
|
77
77
|
// now enrich the rows, note the clone so that we have the base state of the
|
|
78
78
|
// rows so that we don't write any of the enriched information back
|
|
79
|
-
let enrichedRows = yield outputProcessing(
|
|
79
|
+
let enrichedRows = yield outputProcessing(table, cloneDeep(rows), {
|
|
80
80
|
squash: false,
|
|
81
81
|
});
|
|
82
82
|
const updatedRows = [];
|
|
@@ -102,11 +102,11 @@ exports.updateAllFormulasInTable = (appId, table) => __awaiter(void 0, void 0, v
|
|
|
102
102
|
* row. The reason we need to return the enriched row is that the automation row created trigger
|
|
103
103
|
* expects the row to be totally enriched/contain all relationships.
|
|
104
104
|
*/
|
|
105
|
-
exports.finaliseRow = (
|
|
106
|
-
const db =
|
|
105
|
+
exports.finaliseRow = (table, row, { oldTable, updateFormula } = { updateFormula: true }) => __awaiter(void 0, void 0, void 0, function* () {
|
|
106
|
+
const db = getAppDB();
|
|
107
107
|
row.type = "row";
|
|
108
108
|
// process the row before return, to include relationships
|
|
109
|
-
let enrichedRow = yield outputProcessing(
|
|
109
|
+
let enrichedRow = yield outputProcessing(table, cloneDeep(row), {
|
|
110
110
|
squash: false,
|
|
111
111
|
});
|
|
112
112
|
// use enriched row to generate formulas for saving, specifically only use as context
|
|
@@ -141,7 +141,7 @@ exports.finaliseRow = (appId, table, row, { oldTable, updateFormula } = { update
|
|
|
141
141
|
enrichedRow = yield processFormulas(table, enrichedRow, { dynamic: false });
|
|
142
142
|
// this updates the related formulas in other rows based on the relations to this row
|
|
143
143
|
if (updateFormula) {
|
|
144
|
-
yield exports.updateRelatedFormula(
|
|
144
|
+
yield exports.updateRelatedFormula(table, enrichedRow);
|
|
145
145
|
}
|
|
146
146
|
return { row: enrichedRow, table };
|
|
147
147
|
});
|
|
@@ -10,12 +10,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
};
|
|
11
11
|
const validateJs = require("validate.js");
|
|
12
12
|
const { cloneDeep } = require("lodash/fp");
|
|
13
|
-
const CouchDB = require("../../../db");
|
|
14
13
|
const { InternalTables } = require("../../../db/utils");
|
|
15
14
|
const userController = require("../user");
|
|
16
15
|
const { FieldTypes } = require("../../../constants");
|
|
17
16
|
const { processStringSync } = require("@budibase/string-templates");
|
|
18
17
|
const { makeExternalQuery } = require("../../../integrations/base/utils");
|
|
18
|
+
const { getAppDB } = require("@budibase/backend-core/context");
|
|
19
19
|
validateJs.extend(validateJs.validators.datetime, {
|
|
20
20
|
parse: function (value) {
|
|
21
21
|
return new Date(value).getTime();
|
|
@@ -25,13 +25,14 @@ validateJs.extend(validateJs.validators.datetime, {
|
|
|
25
25
|
return new Date(value).toISOString();
|
|
26
26
|
},
|
|
27
27
|
});
|
|
28
|
-
exports.getDatasourceAndQuery = (
|
|
28
|
+
exports.getDatasourceAndQuery = (json) => __awaiter(void 0, void 0, void 0, function* () {
|
|
29
29
|
const datasourceId = json.endpoint.datasourceId;
|
|
30
|
-
const db =
|
|
30
|
+
const db = getAppDB();
|
|
31
31
|
const datasource = yield db.get(datasourceId);
|
|
32
32
|
return makeExternalQuery(datasource, json);
|
|
33
33
|
});
|
|
34
|
-
exports.findRow = (ctx,
|
|
34
|
+
exports.findRow = (ctx, tableId, rowId) => __awaiter(void 0, void 0, void 0, function* () {
|
|
35
|
+
const db = getAppDB();
|
|
35
36
|
let row;
|
|
36
37
|
// TODO remove special user case in future
|
|
37
38
|
if (tableId === InternalTables.USER_METADATA) {
|
|
@@ -49,9 +50,9 @@ exports.findRow = (ctx, db, tableId, rowId) => __awaiter(void 0, void 0, void 0,
|
|
|
49
50
|
}
|
|
50
51
|
return row;
|
|
51
52
|
});
|
|
52
|
-
exports.validate = ({
|
|
53
|
+
exports.validate = ({ tableId, row, table }) => __awaiter(void 0, void 0, void 0, function* () {
|
|
53
54
|
if (!table) {
|
|
54
|
-
const db =
|
|
55
|
+
const db = getAppDB();
|
|
55
56
|
table = yield db.get(tableId);
|
|
56
57
|
}
|
|
57
58
|
const errors = {};
|
|
@@ -8,20 +8,18 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
|
-
const CouchDB = require("../../db");
|
|
12
11
|
const { getScreenParams, generateScreenID } = require("../../db/utils");
|
|
13
12
|
const { AccessController } = require("@budibase/backend-core/roles");
|
|
13
|
+
const { getAppDB } = require("@budibase/backend-core/context");
|
|
14
14
|
exports.fetch = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
15
|
-
const
|
|
16
|
-
const db = new CouchDB(appId);
|
|
15
|
+
const db = getAppDB();
|
|
17
16
|
const screens = (yield db.allDocs(getScreenParams(null, {
|
|
18
17
|
include_docs: true,
|
|
19
18
|
}))).rows.map(element => element.doc);
|
|
20
|
-
ctx.body = yield new AccessController(
|
|
19
|
+
ctx.body = yield new AccessController().checkScreensAccess(screens, ctx.user.role._id);
|
|
21
20
|
});
|
|
22
21
|
exports.save = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
23
|
-
const
|
|
24
|
-
const db = new CouchDB(appId);
|
|
22
|
+
const db = getAppDB();
|
|
25
23
|
let screen = ctx.request.body;
|
|
26
24
|
if (!screen._id) {
|
|
27
25
|
screen._id = generateScreenID();
|
|
@@ -31,7 +29,7 @@ exports.save = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
31
29
|
ctx.body = Object.assign(Object.assign({}, screen), { _id: response.id, _rev: response.rev });
|
|
32
30
|
});
|
|
33
31
|
exports.destroy = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
34
|
-
const db =
|
|
32
|
+
const db = getAppDB();
|
|
35
33
|
yield db.remove(ctx.params.screenId, ctx.params.screenRev);
|
|
36
34
|
ctx.body = {
|
|
37
35
|
message: "Screen deleted successfully",
|
|
@@ -15,13 +15,13 @@ const uuid = require("uuid");
|
|
|
15
15
|
const { ObjectStoreBuckets } = require("../../../constants");
|
|
16
16
|
const { processString } = require("@budibase/string-templates");
|
|
17
17
|
const { getAllApps } = require("@budibase/backend-core/db");
|
|
18
|
-
const CouchDB = require("../../../db");
|
|
19
18
|
const { loadHandlebarsFile, NODE_MODULES_PATH, TOP_LEVEL_PATH, } = require("../../../utilities/fileSystem");
|
|
20
19
|
const env = require("../../../environment");
|
|
21
20
|
const { clientLibraryPath } = require("../../../utilities");
|
|
22
21
|
const { upload } = require("../../../utilities/fileSystem");
|
|
23
22
|
const { attachmentsRelativeURL } = require("../../../utilities");
|
|
24
23
|
const { DocumentTypes } = require("../../../db/utils");
|
|
24
|
+
const { getAppDB } = require("@budibase/backend-core/context");
|
|
25
25
|
const AWS = require("aws-sdk");
|
|
26
26
|
const AWS_REGION = env.AWS_REGION ? env.AWS_REGION : "eu-west-1";
|
|
27
27
|
function prepareUpload({ s3Key, bucket, metadata, file }) {
|
|
@@ -48,7 +48,7 @@ function getAppIdFromUrl(ctx) {
|
|
|
48
48
|
// the "appId" component of the URL can be the id or the custom url
|
|
49
49
|
let possibleAppUrl = `/${encodeURI(ctx.params.appId).toLowerCase()}`;
|
|
50
50
|
// search prod apps for a url that matches, exclude dev where id is always used
|
|
51
|
-
const apps = yield getAllApps(
|
|
51
|
+
const apps = yield getAllApps({ dev: false });
|
|
52
52
|
const app = apps.filter(a => a.url && a.url.toLowerCase() === possibleAppUrl)[0];
|
|
53
53
|
if (app && app.appId) {
|
|
54
54
|
return app.appId;
|
|
@@ -86,7 +86,7 @@ exports.serveApp = function (ctx) {
|
|
|
86
86
|
return __awaiter(this, void 0, void 0, function* () {
|
|
87
87
|
let appId = yield getAppIdFromUrl(ctx);
|
|
88
88
|
const App = require("./templates/BudibaseApp.svelte").default;
|
|
89
|
-
const db =
|
|
89
|
+
const db = getAppDB({ skip_setup: true });
|
|
90
90
|
const appInfo = yield db.get(DocumentTypes.APP_METADATA);
|
|
91
91
|
const { head, html, css } = App.render({
|
|
92
92
|
title: appInfo.name,
|
|
@@ -113,7 +113,7 @@ exports.serveClientLibrary = function (ctx) {
|
|
|
113
113
|
exports.getSignedUploadURL = function (ctx) {
|
|
114
114
|
var _a, _b, _c;
|
|
115
115
|
return __awaiter(this, void 0, void 0, function* () {
|
|
116
|
-
const database =
|
|
116
|
+
const database = getAppDB();
|
|
117
117
|
// Ensure datasource is valid
|
|
118
118
|
let datasource;
|
|
119
119
|
try {
|
|
@@ -8,13 +8,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
|
-
const CouchDB = require("../../../db");
|
|
12
11
|
const { FieldTypes, FormulaTypes } = require("../../../constants");
|
|
13
12
|
const { getAllInternalTables, clearColumns } = require("./utils");
|
|
14
13
|
const { doesContainStrings } = require("@budibase/string-templates");
|
|
15
14
|
const { cloneDeep } = require("lodash/fp");
|
|
16
15
|
const { isEqual, uniq } = require("lodash");
|
|
17
16
|
const { updateAllFormulasInTable } = require("../row/staticFormula");
|
|
17
|
+
const { getAppDB } = require("@budibase/backend-core/context");
|
|
18
18
|
function isStaticFormula(column) {
|
|
19
19
|
return (column.type === FieldTypes.FORMULA &&
|
|
20
20
|
column.formulaType === FormulaTypes.STATIC);
|
|
@@ -42,11 +42,10 @@ function getFormulaThatUseColumn(table, columnNames) {
|
|
|
42
42
|
* This functions checks for when a related table, column or related column is deleted, if any
|
|
43
43
|
* tables need to have the formula column removed.
|
|
44
44
|
*/
|
|
45
|
-
function checkIfFormulaNeedsCleared(
|
|
45
|
+
function checkIfFormulaNeedsCleared(table, { oldTable, deletion }) {
|
|
46
46
|
return __awaiter(this, void 0, void 0, function* () {
|
|
47
|
-
const db = new CouchDB(appId);
|
|
48
47
|
// start by retrieving all tables, remove the current table from the list
|
|
49
|
-
const tables = (yield getAllInternalTables(
|
|
48
|
+
const tables = (yield getAllInternalTables()).filter(tbl => tbl._id !== table._id);
|
|
50
49
|
const schemaToUse = oldTable ? oldTable.schema : table.schema;
|
|
51
50
|
let removedColumns = Object.values(schemaToUse).filter(column => deletion || !table.schema[column.name]);
|
|
52
51
|
// remove any formula columns that used related columns
|
|
@@ -58,7 +57,7 @@ function checkIfFormulaNeedsCleared(appId, table, { oldTable, deletion }) {
|
|
|
58
57
|
}
|
|
59
58
|
const columnsToDelete = getFormulaThatUseColumn(tableToUse, removed.name);
|
|
60
59
|
if (columnsToDelete.length > 0) {
|
|
61
|
-
yield clearColumns(
|
|
60
|
+
yield clearColumns(table, columnsToDelete);
|
|
62
61
|
}
|
|
63
62
|
// need a special case, where a column has been removed from this table, but was used
|
|
64
63
|
// in a different, related tables formula
|
|
@@ -79,7 +78,7 @@ function checkIfFormulaNeedsCleared(appId, table, { oldTable, deletion }) {
|
|
|
79
78
|
]));
|
|
80
79
|
}
|
|
81
80
|
if (relatedFormulaToRemove.length > 0) {
|
|
82
|
-
yield clearColumns(
|
|
81
|
+
yield clearColumns(relatedTable, uniq(relatedFormulaToRemove));
|
|
83
82
|
}
|
|
84
83
|
}
|
|
85
84
|
}
|
|
@@ -92,11 +91,11 @@ function checkIfFormulaNeedsCleared(appId, table, { oldTable, deletion }) {
|
|
|
92
91
|
* can manage hydrating related rows formula fields. This is
|
|
93
92
|
* specifically only for static formula.
|
|
94
93
|
*/
|
|
95
|
-
function updateRelatedFormulaLinksOnTables(
|
|
94
|
+
function updateRelatedFormulaLinksOnTables(table, { deletion } = { deletion: false }) {
|
|
96
95
|
return __awaiter(this, void 0, void 0, function* () {
|
|
97
|
-
const db =
|
|
96
|
+
const db = getAppDB();
|
|
98
97
|
// start by retrieving all tables, remove the current table from the list
|
|
99
|
-
const tables = (yield getAllInternalTables(
|
|
98
|
+
const tables = (yield getAllInternalTables()).filter(tbl => tbl._id !== table._id);
|
|
100
99
|
// clone the tables, so we can compare at end
|
|
101
100
|
const initialTables = cloneDeep(tables);
|
|
102
101
|
// first find the related column names
|
|
@@ -138,7 +137,7 @@ function updateRelatedFormulaLinksOnTables(appId, table, { deletion } = { deleti
|
|
|
138
137
|
}
|
|
139
138
|
});
|
|
140
139
|
}
|
|
141
|
-
function checkIfFormulaUpdated(
|
|
140
|
+
function checkIfFormulaUpdated(table, { oldTable }) {
|
|
142
141
|
return __awaiter(this, void 0, void 0, function* () {
|
|
143
142
|
// look to see if any formula values have changed
|
|
144
143
|
const shouldUpdate = Object.values(table.schema).find(column => isStaticFormula(column) &&
|
|
@@ -147,14 +146,14 @@ function checkIfFormulaUpdated(appId, table, { oldTable }) {
|
|
|
147
146
|
!isEqual(oldTable.schema[column.name], column)));
|
|
148
147
|
// if a static formula column has updated, then need to run the update
|
|
149
148
|
if (shouldUpdate != null) {
|
|
150
|
-
yield updateAllFormulasInTable(
|
|
149
|
+
yield updateAllFormulasInTable(table);
|
|
151
150
|
}
|
|
152
151
|
});
|
|
153
152
|
}
|
|
154
|
-
exports.runStaticFormulaChecks = (
|
|
155
|
-
yield updateRelatedFormulaLinksOnTables(
|
|
156
|
-
yield checkIfFormulaNeedsCleared(
|
|
153
|
+
exports.runStaticFormulaChecks = (table, { oldTable, deletion }) => __awaiter(void 0, void 0, void 0, function* () {
|
|
154
|
+
yield updateRelatedFormulaLinksOnTables(table, { deletion });
|
|
155
|
+
yield checkIfFormulaNeedsCleared(table, { oldTable, deletion });
|
|
157
156
|
if (!deletion) {
|
|
158
|
-
yield checkIfFormulaUpdated(
|
|
157
|
+
yield checkIfFormulaUpdated(table, { oldTable });
|
|
159
158
|
}
|
|
160
159
|
});
|