@budibase/server 1.0.49-alpha.4 → 1.0.49-alpha.8
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.f763d886.js → index.94a9250f.js} +1 -1
- package/builder/index.html +1 -1
- package/coverage/clover.xml +1920 -1940
- package/coverage/coverage-final.json +54 -54
- 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 +58 -37
- package/coverage/lcov-report/api/controllers/auth.js.html +11 -14
- package/coverage/lcov-report/api/controllers/automation.js.html +21 -51
- 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 +17 -23
- package/coverage/lcov-report/api/controllers/dev.js.html +6 -6
- package/coverage/lcov-report/api/controllers/index.html +52 -52
- package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
- package/coverage/lcov-report/api/controllers/layout.js.html +4 -4
- package/coverage/lcov-report/api/controllers/metadata.js.html +6 -21
- package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
- package/coverage/lcov-report/api/controllers/permission.js.html +6 -6
- package/coverage/lcov-report/api/controllers/query/index.html +10 -10
- package/coverage/lcov-report/api/controllers/query/index.js.html +21 -18
- package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
- package/coverage/lcov-report/api/controllers/role.js.html +9 -9
- package/coverage/lcov-report/api/controllers/routing.js.html +7 -10
- package/coverage/lcov-report/api/controllers/row/external.js.html +33 -126
- package/coverage/lcov-report/api/controllers/row/index.html +28 -28
- package/coverage/lcov-report/api/controllers/row/index.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/internal.js.html +37 -82
- package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +19 -25
- package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +14 -17
- package/coverage/lcov-report/api/controllers/row/utils.js.html +15 -12
- package/coverage/lcov-report/api/controllers/screen.js.html +10 -16
- package/coverage/lcov-report/api/controllers/script.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +20 -50
- package/coverage/lcov-report/api/controllers/table/external.js.html +15 -24
- package/coverage/lcov-report/api/controllers/table/index.html +37 -37
- package/coverage/lcov-report/api/controllers/table/index.js.html +7 -7
- package/coverage/lcov-report/api/controllers/table/internal.js.html +36 -45
- package/coverage/lcov-report/api/controllers/table/utils.js.html +40 -76
- package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
- package/coverage/lcov-report/api/controllers/user.js.html +26 -35
- package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/index.html +16 -16
- package/coverage/lcov-report/api/controllers/view/index.js.html +15 -21
- package/coverage/lcov-report/api/controllers/view/utils.js.html +25 -10
- package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
- package/coverage/lcov-report/api/controllers/webhook.js.html +21 -15
- package/coverage/lcov-report/api/index.html +1 -1
- package/coverage/lcov-report/api/index.js.html +1 -1
- 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 +1 -1
- package/coverage/lcov-report/api/routes/index.js.html +1 -1
- package/coverage/lcov-report/api/routes/integration.js.html +1 -1
- package/coverage/lcov-report/api/routes/layout.js.html +1 -1
- package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
- package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
- package/coverage/lcov-report/api/routes/permission.js.html +1 -1
- package/coverage/lcov-report/api/routes/query.js.html +1 -1
- package/coverage/lcov-report/api/routes/role.js.html +1 -1
- package/coverage/lcov-report/api/routes/routing.js.html +1 -1
- package/coverage/lcov-report/api/routes/row.js.html +1 -1
- package/coverage/lcov-report/api/routes/screen.js.html +1 -1
- package/coverage/lcov-report/api/routes/script.js.html +1 -1
- package/coverage/lcov-report/api/routes/static.js.html +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 +1 -1
- package/coverage/lcov-report/automations/automationUtils.js.html +4 -7
- package/coverage/lcov-report/automations/bullboard.js.html +1 -1
- 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 +1 -1
- package/coverage/lcov-report/automations/steps/createRow.js.html +2 -5
- package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
- package/coverage/lcov-report/automations/steps/deleteRow.js.html +1 -1
- package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
- package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
- package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
- package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
- package/coverage/lcov-report/automations/steps/index.html +1 -1
- package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
- package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
- package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
- package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
- package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
- package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
- package/coverage/lcov-report/automations/steps/updateRow.js.html +2 -2
- package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
- package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
- package/coverage/lcov-report/automations/triggers.js.html +46 -40
- package/coverage/lcov-report/automations/utils.js.html +24 -12
- package/coverage/lcov-report/constants/index.html +1 -1
- package/coverage/lcov-report/constants/index.js.html +1 -1
- package/coverage/lcov-report/constants/layouts.js.html +1 -1
- package/coverage/lcov-report/constants/screens.js.html +1 -1
- package/coverage/lcov-report/db/client.js.html +18 -18
- package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
- 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 +11 -23
- package/coverage/lcov-report/db/linkedRows/index.html +27 -27
- package/coverage/lcov-report/db/linkedRows/index.js.html +24 -66
- package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +28 -28
- package/coverage/lcov-report/db/newid.js.html +1 -1
- package/coverage/lcov-report/db/utils.js.html +5 -5
- 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 +1 -1
- package/coverage/lcov-report/events/utils.js.html +1 -1
- package/coverage/lcov-report/index.html +88 -88
- 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 +1 -1
- 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 -29
- 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 +16 -16
- package/coverage/lcov-report/threads/index.js.html +1 -1
- package/coverage/lcov-report/threads/query.js.html +17 -17
- package/coverage/lcov-report/threads/utils.js.html +1 -1
- package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
- package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
- package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
- package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
- package/coverage/lcov-report/utilities/global.js.html +44 -35
- package/coverage/lcov-report/utilities/index.html +27 -27
- package/coverage/lcov-report/utilities/index.js.html +40 -70
- package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
- 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 +16 -58
- package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
- package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
- package/coverage/lcov-report/utilities/security.js.html +1 -1
- 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 +5 -2
- 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 +5 -5
- package/coverage/lcov-report/utilities/workerRequests.js.html +5 -5
- package/coverage/lcov.info +3192 -3209
- package/dist/api/controllers/application.js +31 -28
- 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/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 +76 -63
- 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/tests/utilities/TestFunctions.js +37 -17
- 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 +2 -1
- 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 -2
- package/dist/migrations/functions/usageQuotas/syncApps.js +6 -9
- package/dist/migrations/functions/usageQuotas/syncRows.js +7 -9
- package/dist/package.json +4 -4
- package/dist/tests/utilities/TestConfiguration.js +67 -44
- package/dist/threads/automation.js +13 -11
- package/dist/threads/query.js +11 -11
- 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/likeCypress.ts +1 -1
- package/src/api/controllers/application.js +35 -28
- 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/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 +53 -42
- 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/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/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 +2 -1
- 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 -2
- package/src/migrations/functions/usageQuotas/syncApps.ts +4 -4
- package/src/migrations/functions/usageQuotas/syncRows.ts +5 -4
- package/src/module.d.ts +3 -0
- package/src/tests/utilities/TestConfiguration.js +69 -50
- package/src/threads/automation.js +17 -15
- package/src/threads/query.js +12 -12
- 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
|
@@ -22,8 +22,8 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
22
22
|
const { DataSourceOperation, SortDirection, FieldTypes, NoEmptyFilterStrings, } = require("../../../constants");
|
|
23
23
|
const { breakExternalTableId, breakRowIdField, } = require("../../../integrations/utils");
|
|
24
24
|
const ExternalRequest = require("./ExternalRequest");
|
|
25
|
-
const
|
|
26
|
-
function handleRequest(
|
|
25
|
+
const { getAppDB } = require("@budibase/backend-core/context");
|
|
26
|
+
function handleRequest(operation, tableId, opts = {}) {
|
|
27
27
|
return __awaiter(this, void 0, void 0, function* () {
|
|
28
28
|
// make sure the filters are cleaned up, no empty strings for equals, fuzzy or string
|
|
29
29
|
if (opts && opts.filters) {
|
|
@@ -38,27 +38,25 @@ function handleRequest(appId, operation, tableId, opts = {}) {
|
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
|
-
return new ExternalRequest(
|
|
41
|
+
return new ExternalRequest(operation, tableId, opts.datasource).run(opts);
|
|
42
42
|
});
|
|
43
43
|
}
|
|
44
44
|
exports.handleRequest = handleRequest;
|
|
45
45
|
exports.patch = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
46
|
-
const appId = ctx.appId;
|
|
47
46
|
const inputs = ctx.request.body;
|
|
48
47
|
const tableId = ctx.params.tableId;
|
|
49
48
|
const id = breakRowIdField(inputs._id);
|
|
50
49
|
// don't save the ID to db
|
|
51
50
|
delete inputs._id;
|
|
52
|
-
return handleRequest(
|
|
51
|
+
return handleRequest(DataSourceOperation.UPDATE, tableId, {
|
|
53
52
|
id,
|
|
54
53
|
row: inputs,
|
|
55
54
|
});
|
|
56
55
|
});
|
|
57
56
|
exports.save = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
58
|
-
const appId = ctx.appId;
|
|
59
57
|
const inputs = ctx.request.body;
|
|
60
58
|
const tableId = ctx.params.tableId;
|
|
61
|
-
return handleRequest(
|
|
59
|
+
return handleRequest(DataSourceOperation.CREATE, tableId, {
|
|
62
60
|
row: inputs,
|
|
63
61
|
});
|
|
64
62
|
});
|
|
@@ -70,35 +68,31 @@ exports.fetchView = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
70
68
|
return exports.fetch(ctx);
|
|
71
69
|
});
|
|
72
70
|
exports.fetch = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
73
|
-
const appId = ctx.appId;
|
|
74
71
|
const tableId = ctx.params.tableId;
|
|
75
|
-
return handleRequest(
|
|
72
|
+
return handleRequest(DataSourceOperation.READ, tableId);
|
|
76
73
|
});
|
|
77
74
|
exports.find = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
78
|
-
const appId = ctx.appId;
|
|
79
75
|
const id = ctx.params.rowId;
|
|
80
76
|
const tableId = ctx.params.tableId;
|
|
81
|
-
const response = yield handleRequest(
|
|
77
|
+
const response = yield handleRequest(DataSourceOperation.READ, tableId, {
|
|
82
78
|
id,
|
|
83
79
|
});
|
|
84
80
|
return response ? response[0] : response;
|
|
85
81
|
});
|
|
86
82
|
exports.destroy = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
87
|
-
const appId = ctx.appId;
|
|
88
83
|
const tableId = ctx.params.tableId;
|
|
89
84
|
const id = ctx.request.body._id;
|
|
90
|
-
const { row } = yield handleRequest(
|
|
85
|
+
const { row } = yield handleRequest(DataSourceOperation.DELETE, tableId, {
|
|
91
86
|
id,
|
|
92
87
|
});
|
|
93
88
|
return { response: { ok: true }, row };
|
|
94
89
|
});
|
|
95
90
|
exports.bulkDestroy = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
96
|
-
const appId = ctx.appId;
|
|
97
91
|
const { rows } = ctx.request.body;
|
|
98
92
|
const tableId = ctx.params.tableId;
|
|
99
93
|
let promises = [];
|
|
100
94
|
for (let row of rows) {
|
|
101
|
-
promises.push(handleRequest(
|
|
95
|
+
promises.push(handleRequest(DataSourceOperation.DELETE, tableId, {
|
|
102
96
|
id: breakRowIdField(row._id),
|
|
103
97
|
}));
|
|
104
98
|
}
|
|
@@ -106,7 +100,6 @@ exports.bulkDestroy = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
106
100
|
return { response: { ok: true }, rows: responses.map(resp => resp.row) };
|
|
107
101
|
});
|
|
108
102
|
exports.search = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
109
|
-
const appId = ctx.appId;
|
|
110
103
|
const tableId = ctx.params.tableId;
|
|
111
104
|
const _a = ctx.request.body, { paginate, query } = _a, params = __rest(_a, ["paginate", "query"]);
|
|
112
105
|
let { bookmark, limit } = params;
|
|
@@ -135,14 +128,14 @@ exports.search = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
135
128
|
[params.sort]: direction,
|
|
136
129
|
};
|
|
137
130
|
}
|
|
138
|
-
const rows = yield handleRequest(
|
|
131
|
+
const rows = yield handleRequest(DataSourceOperation.READ, tableId, {
|
|
139
132
|
filters: query,
|
|
140
133
|
sort,
|
|
141
134
|
paginate: paginateObj,
|
|
142
135
|
});
|
|
143
136
|
let hasNextPage = false;
|
|
144
137
|
if (paginate && rows.length === limit) {
|
|
145
|
-
const nextRows = yield handleRequest(
|
|
138
|
+
const nextRows = yield handleRequest(DataSourceOperation.READ, tableId, {
|
|
146
139
|
filters: query,
|
|
147
140
|
sort,
|
|
148
141
|
paginate: {
|
|
@@ -160,17 +153,16 @@ exports.validate = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
160
153
|
return { valid: true };
|
|
161
154
|
});
|
|
162
155
|
exports.fetchEnrichedRow = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
163
|
-
const appId = ctx.appId;
|
|
164
156
|
const id = ctx.params.rowId;
|
|
165
157
|
const tableId = ctx.params.tableId;
|
|
166
158
|
const { datasourceId, tableName } = breakExternalTableId(tableId);
|
|
167
|
-
const db =
|
|
159
|
+
const db = getAppDB();
|
|
168
160
|
const datasource = yield db.get(datasourceId);
|
|
169
161
|
if (!datasource || !datasource.entities) {
|
|
170
162
|
ctx.throw(400, "Datasource has not been configured for plus API.");
|
|
171
163
|
}
|
|
172
164
|
const tables = datasource.entities;
|
|
173
|
-
const response = yield handleRequest(
|
|
165
|
+
const response = yield handleRequest(DataSourceOperation.READ, tableId, {
|
|
174
166
|
id,
|
|
175
167
|
datasource,
|
|
176
168
|
});
|
|
@@ -189,7 +181,7 @@ exports.fetchEnrichedRow = (ctx) => __awaiter(void 0, void 0, void 0, function*
|
|
|
189
181
|
const linkedTable = tables[breakExternalTableId(linkedTableId).tableName];
|
|
190
182
|
// don't support composite keys right now
|
|
191
183
|
const linkedIds = links.map(link => breakRowIdField(link._id)[0]);
|
|
192
|
-
row[fieldName] = yield handleRequest(
|
|
184
|
+
row[fieldName] = yield handleRequest(DataSourceOperation.READ, linkedTableId, {
|
|
193
185
|
tables,
|
|
194
186
|
filters: {
|
|
195
187
|
oneOf: {
|
|
@@ -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",
|