@budibase/server 2.2.26 → 2.2.27
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/Dockerfile +1 -1
- package/__mocks__/aws-sdk.ts +19 -0
- package/__mocks__/node-fetch.ts +80 -0
- package/builder/assets/{bb-emblem.4e4717da.svg → bb-emblem.05f7ae7a.svg} +1 -1
- package/builder/assets/bg.29e85dd5.png +0 -0
- package/builder/assets/bulgaria.bd68393d.png +0 -0
- package/builder/assets/covanta.72c46c1e.png +0 -0
- package/builder/assets/index.3dd03883.css +6 -0
- package/builder/assets/index.56a96240.js +1802 -0
- package/builder/assets/schnellecke.cf1837a8.png +0 -0
- package/builder/index.html +3 -3
- package/coverage/clover.xml +6618 -6528
- package/coverage/coverage-final.json +282 -276
- package/coverage/lcov-report/index.html +489 -444
- package/coverage/lcov-report/src/api/controllers/analytics.ts.html +9 -9
- package/coverage/lcov-report/src/api/controllers/apikeys.ts.html +6 -6
- package/coverage/lcov-report/src/api/controllers/application.ts.html +362 -266
- package/coverage/lcov-report/src/api/controllers/auth.ts.html +12 -12
- package/coverage/lcov-report/src/api/controllers/automation.ts.html +61 -61
- package/coverage/lcov-report/src/api/controllers/backup.ts.html +8 -8
- package/coverage/lcov-report/src/api/controllers/cloud.ts.html +93 -81
- package/coverage/lcov-report/src/api/controllers/component.ts.html +12 -12
- package/coverage/lcov-report/src/api/controllers/datasource.ts.html +122 -98
- package/coverage/lcov-report/src/api/controllers/deploy/Deployment.ts.html +21 -18
- package/coverage/lcov-report/src/api/controllers/deploy/index.html +21 -21
- package/coverage/lcov-report/src/api/controllers/deploy/index.ts.html +142 -196
- package/coverage/lcov-report/src/api/controllers/dev.ts.html +28 -28
- package/coverage/lcov-report/src/api/controllers/index.html +115 -115
- package/coverage/lcov-report/src/api/controllers/integration.ts.html +5 -5
- package/coverage/lcov-report/src/api/controllers/layout.ts.html +9 -9
- package/coverage/lcov-report/src/api/controllers/metadata.ts.html +11 -11
- package/coverage/lcov-report/src/api/controllers/migrations.ts.html +6 -6
- package/coverage/lcov-report/src/api/controllers/permission.ts.html +14 -14
- package/coverage/lcov-report/src/api/controllers/plugin/file.ts.html +20 -20
- package/coverage/lcov-report/src/api/controllers/plugin/github.ts.html +62 -62
- package/coverage/lcov-report/src/api/controllers/plugin/index.html +72 -72
- package/coverage/lcov-report/src/api/controllers/plugin/index.ts.html +150 -135
- package/coverage/lcov-report/src/api/controllers/plugin/npm.ts.html +56 -56
- package/coverage/lcov-report/src/api/controllers/plugin/uploaders.ts.html +11 -11
- package/coverage/lcov-report/src/api/controllers/plugin/url.ts.html +18 -18
- package/coverage/lcov-report/src/api/controllers/plugin/utils.ts.html +20 -20
- package/coverage/lcov-report/src/api/controllers/public/applications.ts.html +75 -24
- package/coverage/lcov-report/src/api/controllers/public/index.html +58 -58
- package/coverage/lcov-report/src/api/controllers/public/mapping/applications.ts.html +7 -7
- package/coverage/lcov-report/src/api/controllers/public/mapping/index.html +25 -25
- package/coverage/lcov-report/src/api/controllers/public/mapping/index.ts.html +9 -9
- package/coverage/lcov-report/src/api/controllers/public/mapping/queries.ts.html +8 -8
- package/coverage/lcov-report/src/api/controllers/public/mapping/rows.ts.html +4 -4
- package/coverage/lcov-report/src/api/controllers/public/mapping/tables.ts.html +4 -4
- package/coverage/lcov-report/src/api/controllers/public/mapping/users.ts.html +4 -4
- package/coverage/lcov-report/src/api/controllers/public/queries.ts.html +15 -15
- package/coverage/lcov-report/src/api/controllers/public/rows.ts.html +21 -21
- package/coverage/lcov-report/src/api/controllers/public/tables.ts.html +21 -21
- package/coverage/lcov-report/src/api/controllers/public/users.ts.html +27 -27
- package/coverage/lcov-report/src/api/controllers/public/utils.ts.html +8 -8
- package/coverage/lcov-report/src/api/controllers/query/import/index.html +8 -8
- package/coverage/lcov-report/src/api/controllers/query/import/index.ts.html +11 -11
- package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.html +14 -14
- package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.ts.html +14 -14
- package/coverage/lcov-report/src/api/controllers/query/import/sources/base/openapi.ts.html +8 -8
- package/coverage/lcov-report/src/api/controllers/query/import/sources/curl.ts.html +12 -12
- package/coverage/lcov-report/src/api/controllers/query/import/sources/index.html +23 -23
- package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi2.ts.html +16 -16
- package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi3.ts.html +20 -20
- package/coverage/lcov-report/src/api/controllers/query/index.html +20 -20
- package/coverage/lcov-report/src/api/controllers/query/index.ts.html +131 -107
- package/coverage/lcov-report/src/api/controllers/query/validation.ts.html +11 -11
- package/coverage/lcov-report/src/api/controllers/role.ts.html +9 -9
- package/coverage/lcov-report/src/api/controllers/routing.ts.html +10 -10
- package/coverage/lcov-report/src/api/controllers/row/ExternalRequest.ts.html +56 -41
- package/coverage/lcov-report/src/api/controllers/row/external.ts.html +87 -57
- package/coverage/lcov-report/src/api/controllers/row/index.html +66 -66
- package/coverage/lcov-report/src/api/controllers/row/index.ts.html +37 -37
- package/coverage/lcov-report/src/api/controllers/row/internal.ts.html +181 -106
- package/coverage/lcov-report/src/api/controllers/row/internalSearch.ts.html +146 -146
- package/coverage/lcov-report/src/api/controllers/row/staticFormula.ts.html +44 -35
- package/coverage/lcov-report/src/api/controllers/row/utils.ts.html +156 -39
- package/coverage/lcov-report/src/api/controllers/screen.ts.html +31 -31
- package/coverage/lcov-report/src/api/controllers/script.ts.html +19 -19
- package/coverage/lcov-report/src/api/controllers/static/index.html +18 -18
- package/coverage/lcov-report/src/api/controllers/static/index.ts.html +56 -71
- package/coverage/lcov-report/src/api/controllers/table/bulkFormula.ts.html +60 -60
- package/coverage/lcov-report/src/api/controllers/table/external.ts.html +56 -50
- package/coverage/lcov-report/src/api/controllers/table/index.html +48 -48
- package/coverage/lcov-report/src/api/controllers/table/index.ts.html +157 -70
- package/coverage/lcov-report/src/api/controllers/table/internal.ts.html +58 -61
- package/coverage/lcov-report/src/api/controllers/table/utils.ts.html +109 -112
- package/coverage/lcov-report/src/api/controllers/templates.ts.html +21 -21
- package/coverage/lcov-report/src/api/controllers/user.ts.html +159 -135
- package/coverage/lcov-report/src/api/controllers/view/exporters.ts.html +64 -19
- package/coverage/lcov-report/src/api/controllers/view/index.html +38 -38
- package/coverage/lcov-report/src/api/controllers/view/index.ts.html +97 -133
- package/coverage/lcov-report/src/api/controllers/view/utils.ts.html +31 -31
- package/coverage/lcov-report/src/api/controllers/view/viewBuilder.ts.html +37 -37
- package/coverage/lcov-report/src/api/controllers/webhook.ts.html +69 -63
- package/coverage/lcov-report/src/api/index.html +15 -15
- package/coverage/lcov-report/src/api/index.ts.html +40 -40
- package/coverage/lcov-report/src/api/routes/analytics.ts.html +10 -10
- package/coverage/lcov-report/src/api/routes/apikeys.ts.html +11 -11
- package/coverage/lcov-report/src/api/routes/application.ts.html +46 -13
- package/coverage/lcov-report/src/api/routes/auth.ts.html +9 -9
- package/coverage/lcov-report/src/api/routes/automation.ts.html +14 -14
- package/coverage/lcov-report/src/api/routes/backup.ts.html +11 -11
- package/coverage/lcov-report/src/api/routes/cloud.ts.html +11 -11
- package/coverage/lcov-report/src/api/routes/component.ts.html +11 -11
- package/coverage/lcov-report/src/api/routes/datasource.ts.html +12 -12
- package/coverage/lcov-report/src/api/routes/deploy.ts.html +11 -14
- package/coverage/lcov-report/src/api/routes/dev.ts.html +17 -17
- package/coverage/lcov-report/src/api/routes/index.html +68 -68
- package/coverage/lcov-report/src/api/routes/index.ts.html +49 -40
- package/coverage/lcov-report/src/api/routes/integration.ts.html +11 -11
- package/coverage/lcov-report/src/api/routes/layout.ts.html +11 -11
- package/coverage/lcov-report/src/api/routes/metadata.ts.html +12 -12
- package/coverage/lcov-report/src/api/routes/migrations.ts.html +10 -10
- package/coverage/lcov-report/src/api/routes/permission.ts.html +12 -12
- package/coverage/lcov-report/src/api/routes/plugin.ts.html +10 -10
- package/coverage/lcov-report/src/api/routes/public/applications.ts.html +147 -15
- package/coverage/lcov-report/src/api/routes/public/index.html +27 -27
- package/coverage/lcov-report/src/api/routes/public/index.ts.html +60 -60
- package/coverage/lcov-report/src/api/routes/public/middleware/index.html +15 -15
- package/coverage/lcov-report/src/api/routes/public/middleware/mapper.ts.html +28 -16
- package/coverage/lcov-report/src/api/routes/public/queries.ts.html +11 -11
- package/coverage/lcov-report/src/api/routes/public/rows.ts.html +14 -14
- package/coverage/lcov-report/src/api/routes/public/tables.ts.html +14 -14
- package/coverage/lcov-report/src/api/routes/public/tests/index.html +7 -7
- package/coverage/lcov-report/src/api/routes/public/tests/utils.ts.html +5 -5
- package/coverage/lcov-report/src/api/routes/public/users.ts.html +14 -14
- package/coverage/lcov-report/src/api/routes/public/utils/Endpoint.ts.html +21 -21
- package/coverage/lcov-report/src/api/routes/public/utils/index.html +5 -5
- package/coverage/lcov-report/src/api/routes/query.ts.html +14 -14
- package/coverage/lcov-report/src/api/routes/role.ts.html +12 -12
- package/coverage/lcov-report/src/api/routes/routing.ts.html +11 -11
- package/coverage/lcov-report/src/api/routes/row.ts.html +14 -14
- package/coverage/lcov-report/src/api/routes/screen.ts.html +12 -12
- package/coverage/lcov-report/src/api/routes/script.ts.html +13 -13
- package/coverage/lcov-report/src/api/routes/static.ts.html +18 -18
- package/coverage/lcov-report/src/api/routes/table.ts.html +29 -98
- package/coverage/lcov-report/src/api/routes/templates.ts.html +11 -11
- package/coverage/lcov-report/src/api/routes/tests/utilities/TestFunctions.ts.html +27 -27
- package/coverage/lcov-report/src/api/routes/tests/utilities/index.html +23 -23
- package/coverage/lcov-report/src/api/routes/tests/utilities/index.ts.html +33 -33
- package/coverage/lcov-report/src/api/routes/user.ts.html +12 -12
- package/coverage/lcov-report/src/api/routes/utils/index.html +3 -3
- package/coverage/lcov-report/src/api/routes/utils/validators.ts.html +44 -44
- package/coverage/lcov-report/src/api/routes/view.ts.html +13 -13
- package/coverage/lcov-report/src/api/routes/webhook.ts.html +13 -13
- package/coverage/lcov-report/src/app.ts.html +53 -47
- package/coverage/lcov-report/src/automations/actions.ts.html +31 -31
- package/coverage/lcov-report/src/automations/automationUtils.ts.html +127 -55
- package/coverage/lcov-report/src/automations/bullboard.ts.html +19 -19
- package/coverage/lcov-report/src/automations/index.html +54 -54
- package/coverage/lcov-report/src/automations/index.ts.html +23 -23
- package/coverage/lcov-report/src/automations/logging/index.html +3 -3
- package/coverage/lcov-report/src/automations/logging/index.ts.html +15 -15
- package/coverage/lcov-report/src/automations/steps/bash.ts.html +34 -34
- package/coverage/lcov-report/src/automations/steps/createRow.ts.html +9 -9
- package/coverage/lcov-report/src/automations/steps/delay.ts.html +7 -7
- package/coverage/lcov-report/src/automations/steps/deleteRow.ts.html +9 -9
- package/coverage/lcov-report/src/automations/steps/discord.ts.html +33 -33
- package/coverage/lcov-report/src/automations/steps/executeQuery.ts.html +35 -35
- package/coverage/lcov-report/src/automations/steps/executeScript.ts.html +31 -31
- package/coverage/lcov-report/src/automations/steps/filter.ts.html +12 -12
- package/coverage/lcov-report/src/automations/steps/index.html +129 -129
- package/coverage/lcov-report/src/automations/steps/integromat.ts.html +10 -10
- package/coverage/lcov-report/src/automations/steps/loop.ts.html +5 -5
- package/coverage/lcov-report/src/automations/steps/outgoingWebhook.ts.html +19 -19
- package/coverage/lcov-report/src/automations/steps/queryRows.ts.html +43 -43
- package/coverage/lcov-report/src/automations/steps/sendSmtpEmail.ts.html +28 -28
- package/coverage/lcov-report/src/automations/steps/serverLog.ts.html +19 -19
- package/coverage/lcov-report/src/automations/steps/slack.ts.html +10 -10
- package/coverage/lcov-report/src/automations/steps/updateRow.ts.html +12 -12
- package/coverage/lcov-report/src/automations/steps/utils.ts.html +18 -18
- package/coverage/lcov-report/src/automations/steps/zapier.ts.html +22 -22
- package/coverage/lcov-report/src/automations/tests/utilities/index.html +15 -15
- package/coverage/lcov-report/src/automations/tests/utilities/index.ts.html +32 -32
- package/coverage/lcov-report/src/automations/triggerInfo/app.ts.html +6 -6
- package/coverage/lcov-report/src/automations/triggerInfo/cron.ts.html +6 -6
- package/coverage/lcov-report/src/automations/triggerInfo/index.html +17 -17
- package/coverage/lcov-report/src/automations/triggerInfo/index.ts.html +10 -10
- package/coverage/lcov-report/src/automations/triggerInfo/rowDeleted.ts.html +6 -6
- package/coverage/lcov-report/src/automations/triggerInfo/rowSaved.ts.html +6 -6
- package/coverage/lcov-report/src/automations/triggerInfo/rowUpdated.ts.html +6 -6
- package/coverage/lcov-report/src/automations/triggerInfo/webhook.ts.html +6 -6
- package/coverage/lcov-report/src/automations/triggers.ts.html +53 -38
- package/coverage/lcov-report/src/automations/utils.ts.html +80 -80
- package/coverage/lcov-report/src/constants/index.html +19 -19
- package/coverage/lcov-report/src/constants/index.ts.html +103 -103
- package/coverage/lcov-report/src/constants/layouts.ts.html +9 -9
- package/coverage/lcov-report/src/constants/screens.ts.html +5 -5
- package/coverage/lcov-report/src/db/defaultData/datasource_bb_default.ts.html +45 -45
- package/coverage/lcov-report/src/db/defaultData/employeeImport.ts.html +8 -8
- package/coverage/lcov-report/src/db/defaultData/expensesImport.ts.html +8 -8
- package/coverage/lcov-report/src/db/defaultData/index.html +43 -43
- package/coverage/lcov-report/src/db/defaultData/inventoryImport.ts.html +8 -8
- package/coverage/lcov-report/src/db/defaultData/jobsImport.ts.html +8 -8
- package/coverage/lcov-report/src/db/dynamoClient.ts.html +26 -26
- package/coverage/lcov-report/src/db/inMemoryView.ts.html +13 -13
- package/coverage/lcov-report/src/db/index.html +34 -34
- package/coverage/lcov-report/src/db/index.ts.html +10 -10
- package/coverage/lcov-report/src/db/linkedRows/LinkController.ts.html +38 -38
- package/coverage/lcov-report/src/db/linkedRows/LinkDocument.ts.html +7 -7
- package/coverage/lcov-report/src/db/linkedRows/index.html +37 -37
- package/coverage/lcov-report/src/db/linkedRows/index.ts.html +40 -40
- package/coverage/lcov-report/src/db/linkedRows/linkUtils.ts.html +25 -25
- package/coverage/lcov-report/src/db/newid.ts.html +5 -5
- package/coverage/lcov-report/src/db/utils.ts.html +90 -90
- package/coverage/lcov-report/src/definitions/automations.ts.html +9 -6
- package/coverage/lcov-report/src/definitions/index.html +5 -20
- package/coverage/lcov-report/src/environment.ts.html +44 -32
- package/coverage/lcov-report/src/events/AutomationEmitter.ts.html +14 -14
- package/coverage/lcov-report/src/events/BudibaseEmitter.ts.html +8 -8
- package/coverage/lcov-report/src/events/index.html +20 -20
- package/coverage/lcov-report/src/events/index.ts.html +7 -7
- package/coverage/lcov-report/src/events/utils.ts.html +11 -11
- package/coverage/lcov-report/src/index.html +47 -47
- package/coverage/lcov-report/src/index.ts.html +8 -8
- package/coverage/lcov-report/src/integrations/airtable.ts.html +10 -10
- package/coverage/lcov-report/src/integrations/arangodb.ts.html +9 -9
- package/coverage/lcov-report/src/integrations/base/index.html +29 -29
- package/coverage/lcov-report/src/integrations/base/query.ts.html +15 -9
- package/coverage/lcov-report/src/integrations/base/sql.ts.html +38 -38
- package/coverage/lcov-report/src/integrations/base/sqlTable.ts.html +23 -23
- package/coverage/lcov-report/src/integrations/base/utils.ts.html +5 -5
- package/coverage/lcov-report/src/integrations/couchdb.ts.html +109 -31
- package/coverage/lcov-report/src/integrations/dynamodb.ts.html +17 -17
- package/coverage/lcov-report/src/integrations/elasticsearch.ts.html +27 -15
- package/coverage/lcov-report/src/integrations/firebase.ts.html +12 -12
- package/coverage/lcov-report/src/integrations/googlesheets.ts.html +42 -42
- package/coverage/lcov-report/src/integrations/index.html +130 -130
- package/coverage/lcov-report/src/integrations/index.ts.html +50 -62
- package/coverage/lcov-report/src/integrations/microsoftSqlServer.ts.html +31 -31
- package/coverage/lcov-report/src/integrations/mongodb.ts.html +421 -289
- package/coverage/lcov-report/src/integrations/mysql.ts.html +28 -28
- package/coverage/lcov-report/src/integrations/oracle.ts.html +31 -31
- package/coverage/lcov-report/src/integrations/postgres.ts.html +54 -54
- package/coverage/lcov-report/src/integrations/queries/index.html +19 -19
- package/coverage/lcov-report/src/integrations/queries/sql.ts.html +24 -159
- package/coverage/lcov-report/src/integrations/redis.ts.html +8 -8
- package/coverage/lcov-report/src/integrations/rest.ts.html +43 -52
- package/coverage/lcov-report/src/integrations/s3.ts.html +17 -17
- package/coverage/lcov-report/src/integrations/snowflake.ts.html +15 -15
- package/coverage/lcov-report/src/integrations/tests/TestConfiguration.js.html +1 -1
- package/coverage/lcov-report/src/integrations/tests/index.html +1 -1
- package/coverage/lcov-report/src/integrations/utils.ts.html +54 -54
- package/coverage/lcov-report/src/middleware/appInfo.ts.html +11 -11
- package/coverage/lcov-report/src/middleware/authorized.ts.html +49 -37
- package/coverage/lcov-report/src/middleware/builder.ts.html +26 -26
- package/coverage/lcov-report/src/middleware/currentapp.ts.html +50 -47
- package/coverage/lcov-report/src/middleware/index.html +40 -40
- package/coverage/lcov-report/src/middleware/joi-validator.ts.html +10 -10
- package/coverage/lcov-report/src/middleware/publicApi.ts.html +9 -9
- package/coverage/lcov-report/src/middleware/resourceId.ts.html +23 -23
- package/coverage/lcov-report/src/middleware/selfhost.ts.html +2 -2
- package/coverage/lcov-report/src/middleware/utils.ts.html +4 -4
- package/coverage/lcov-report/src/migrations/functions/appUrls.ts.html +6 -6
- package/coverage/lcov-report/src/migrations/functions/backfill/app/automations.ts.html +7 -7
- package/coverage/lcov-report/src/migrations/functions/backfill/app/datasources.ts.html +7 -7
- package/coverage/lcov-report/src/migrations/functions/backfill/app/index.html +31 -31
- package/coverage/lcov-report/src/migrations/functions/backfill/app/layouts.ts.html +8 -8
- package/coverage/lcov-report/src/migrations/functions/backfill/app/queries.ts.html +13 -13
- package/coverage/lcov-report/src/migrations/functions/backfill/app/roles.ts.html +7 -7
- package/coverage/lcov-report/src/migrations/functions/backfill/app/screens.ts.html +7 -7
- package/coverage/lcov-report/src/migrations/functions/backfill/app/tables.ts.html +8 -8
- package/coverage/lcov-report/src/migrations/functions/backfill/app.ts.html +21 -21
- package/coverage/lcov-report/src/migrations/functions/backfill/global/configs.ts.html +17 -14
- package/coverage/lcov-report/src/migrations/functions/backfill/global/index.html +19 -19
- package/coverage/lcov-report/src/migrations/functions/backfill/global/quotas.ts.html +9 -9
- package/coverage/lcov-report/src/migrations/functions/backfill/global/users.ts.html +13 -13
- package/coverage/lcov-report/src/migrations/functions/backfill/global.ts.html +23 -23
- package/coverage/lcov-report/src/migrations/functions/backfill/index.html +26 -26
- package/coverage/lcov-report/src/migrations/functions/backfill/index.ts.html +7 -7
- package/coverage/lcov-report/src/migrations/functions/backfill/installation.ts.html +14 -14
- package/coverage/lcov-report/src/migrations/functions/index.html +18 -18
- package/coverage/lcov-report/src/migrations/functions/syncQuotas.ts.html +8 -8
- package/coverage/lcov-report/src/migrations/functions/tableSettings.ts.html +11 -11
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.html +11 -11
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.ts.html +3 -3
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncApps.ts.html +6 -6
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncPlugins.ts.html +8 -8
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncRows.ts.html +7 -7
- package/coverage/lcov-report/src/migrations/functions/userEmailViewCasing.ts.html +4 -4
- package/coverage/lcov-report/src/migrations/index.html +15 -15
- package/coverage/lcov-report/src/migrations/index.ts.html +43 -43
- package/coverage/lcov-report/src/migrations/tests/helpers.ts.html +4 -4
- package/coverage/lcov-report/src/migrations/tests/index.html +6 -6
- package/coverage/lcov-report/src/migrations/tests/structures.ts.html +3 -3
- package/coverage/lcov-report/src/sdk/app/applications/index.html +20 -20
- package/coverage/lcov-report/src/sdk/app/applications/index.ts.html +6 -6
- package/coverage/lcov-report/src/sdk/app/applications/sync.ts.html +34 -34
- package/coverage/lcov-report/src/sdk/app/applications/utils.ts.html +15 -15
- package/coverage/lcov-report/src/sdk/app/automations/index.html +7 -7
- package/coverage/lcov-report/src/sdk/app/automations/index.ts.html +5 -5
- package/coverage/lcov-report/src/sdk/app/automations/webhook.ts.html +8 -8
- package/coverage/lcov-report/src/sdk/app/backups/constants.ts.html +5 -5
- package/coverage/lcov-report/src/sdk/app/backups/exports.ts.html +30 -30
- package/coverage/lcov-report/src/sdk/app/backups/imports.ts.html +45 -57
- package/coverage/lcov-report/src/sdk/app/backups/index.html +42 -42
- package/coverage/lcov-report/src/sdk/app/backups/index.ts.html +7 -7
- package/coverage/lcov-report/src/sdk/app/backups/statistics.ts.html +73 -73
- package/coverage/lcov-report/src/sdk/app/datasources/datasources.ts.html +493 -0
- package/coverage/lcov-report/src/sdk/app/datasources/index.html +131 -0
- package/coverage/lcov-report/src/sdk/app/datasources/index.ts.html +100 -0
- package/coverage/lcov-report/src/sdk/app/queries/index.html +131 -0
- package/coverage/lcov-report/src/{utilities/statusCodes.ts.html → sdk/app/queries/index.ts.html} +22 -28
- package/coverage/lcov-report/src/{definitions/datasource.ts.html → sdk/app/queries/queries.ts.html} +82 -82
- package/coverage/lcov-report/src/sdk/app/rows/attachments.ts.html +8 -8
- package/coverage/lcov-report/src/sdk/app/rows/index.html +8 -8
- package/coverage/lcov-report/src/sdk/app/rows/index.ts.html +6 -6
- package/coverage/lcov-report/src/sdk/app/rows/rows.ts.html +4 -4
- package/coverage/lcov-report/src/sdk/app/tables/index.html +15 -15
- package/coverage/lcov-report/src/sdk/app/tables/index.ts.html +29 -20
- package/coverage/lcov-report/src/sdk/index.html +7 -7
- package/coverage/lcov-report/src/sdk/index.ts.html +24 -12
- package/coverage/lcov-report/src/sdk/users/index.html +10 -10
- package/coverage/lcov-report/src/sdk/users/index.ts.html +5 -5
- package/coverage/lcov-report/src/sdk/users/utils.ts.html +35 -35
- package/coverage/lcov-report/src/sdk/utils/index.html +116 -0
- package/coverage/lcov-report/src/sdk/utils/index.ts.html +133 -0
- package/coverage/lcov-report/src/startup.ts.html +48 -63
- package/coverage/lcov-report/src/tests/utilities/TestConfiguration.ts.html +218 -152
- package/coverage/lcov-report/src/tests/utilities/controllers.ts.html +20 -20
- package/coverage/lcov-report/src/tests/utilities/index.html +33 -33
- package/coverage/lcov-report/src/tests/utilities/index.ts.html +2 -2
- package/coverage/lcov-report/src/tests/utilities/structures.ts.html +235 -46
- package/coverage/lcov-report/src/threads/automation.ts.html +212 -251
- package/coverage/lcov-report/src/threads/index.html +46 -46
- package/coverage/lcov-report/src/threads/index.ts.html +39 -39
- package/coverage/lcov-report/src/threads/query.ts.html +140 -101
- package/coverage/lcov-report/src/threads/utils.ts.html +29 -29
- package/coverage/lcov-report/src/utilities/budibaseDir.ts.html +5 -5
- package/coverage/lcov-report/src/utilities/centralPath.ts.html +11 -11
- package/coverage/lcov-report/src/utilities/fileSystem/app.ts.html +343 -0
- package/coverage/lcov-report/src/utilities/fileSystem/clientLibrary.ts.html +20 -20
- package/coverage/lcov-report/src/utilities/fileSystem/filesystem.ts.html +601 -0
- package/coverage/lcov-report/src/utilities/fileSystem/index.html +88 -28
- package/coverage/lcov-report/src/utilities/fileSystem/index.ts.html +20 -1049
- package/coverage/lcov-report/src/utilities/fileSystem/plugin.ts.html +277 -0
- package/coverage/lcov-report/src/utilities/fileSystem/processor.ts.html +9 -9
- package/coverage/lcov-report/src/utilities/fileSystem/template.ts.html +193 -0
- package/coverage/lcov-report/src/utilities/global.ts.html +60 -60
- package/coverage/lcov-report/src/utilities/index.html +89 -119
- package/coverage/lcov-report/src/utilities/index.ts.html +40 -172
- package/coverage/lcov-report/src/utilities/redis.ts.html +38 -38
- package/coverage/lcov-report/src/utilities/routing/index.html +1 -1
- package/coverage/lcov-report/src/utilities/routing/index.ts.html +5 -5
- package/coverage/lcov-report/src/utilities/rowProcessor/index.html +34 -34
- package/coverage/lcov-report/src/utilities/rowProcessor/index.ts.html +102 -75
- package/coverage/lcov-report/src/utilities/rowProcessor/map.ts.html +9 -9
- package/coverage/lcov-report/src/utilities/rowProcessor/utils.ts.html +54 -54
- package/coverage/lcov-report/src/utilities/{csvParser.ts.html → schema.ts.html} +174 -234
- package/coverage/lcov-report/src/utilities/scriptRunner.ts.html +33 -33
- package/coverage/lcov-report/src/utilities/security.ts.html +13 -13
- package/coverage/lcov-report/src/utilities/usageQuota/index.html +9 -9
- package/coverage/lcov-report/src/utilities/usageQuota/rows.ts.html +38 -38
- package/coverage/lcov-report/src/utilities/usageQuota/usageQuoteReset.ts.html +3 -3
- package/coverage/lcov-report/src/utilities/users.ts.html +7 -7
- package/coverage/lcov-report/src/utilities/workerRequests.ts.html +89 -62
- package/coverage/lcov-report/src/watch.ts.html +20 -20
- package/coverage/lcov-report/src/websocket.ts.html +15 -15
- package/coverage/lcov.info +13499 -12800
- package/dist/api/controllers/application.js +120 -109
- package/dist/api/controllers/cloud.js +6 -2
- package/dist/api/controllers/datasource.js +24 -15
- package/dist/api/controllers/deploy/index.js +43 -60
- package/dist/api/controllers/plugin/index.js +6 -6
- package/dist/api/controllers/public/applications.js +22 -1
- package/dist/api/controllers/query/index.js +23 -13
- package/dist/api/controllers/row/ExternalRequest.js +12 -4
- package/dist/api/controllers/row/external.js +20 -13
- package/dist/api/controllers/row/internal.js +52 -27
- package/dist/api/controllers/row/staticFormula.js +1 -1
- package/dist/api/controllers/row/utils.js +35 -3
- package/dist/api/controllers/static/index.js +47 -47
- package/dist/api/controllers/static/templates/BudibaseApp.svelte +0 -1
- package/dist/api/controllers/table/external.js +16 -35
- package/dist/api/controllers/table/index.js +44 -15
- package/dist/api/controllers/table/internal.js +6 -7
- package/dist/api/controllers/table/utils.js +9 -9
- package/dist/api/controllers/user.js +14 -6
- package/dist/api/controllers/view/exporters.js +22 -6
- package/dist/api/controllers/view/index.js +23 -58
- package/dist/api/controllers/view/viewBuilder.js +15 -2
- package/dist/api/controllers/webhook.js +45 -43
- package/dist/api/routes/analytics.js +2 -1
- package/dist/api/routes/apikeys.js +2 -1
- package/dist/api/routes/application.js +5 -1
- package/dist/api/routes/auth.js +2 -1
- package/dist/api/routes/automation.js +2 -1
- package/dist/api/routes/backup.js +2 -1
- package/dist/api/routes/cloud.js +2 -1
- package/dist/api/routes/component.js +2 -1
- package/dist/api/routes/datasource.js +2 -1
- package/dist/api/routes/deploy.js +3 -3
- package/dist/api/routes/dev.js +2 -1
- package/dist/api/routes/index.js +2 -0
- package/dist/api/routes/integration.js +2 -1
- package/dist/api/routes/layout.js +2 -1
- package/dist/api/routes/metadata.js +2 -1
- package/dist/api/routes/migrations.js +2 -1
- package/dist/api/routes/permission.js +2 -1
- package/dist/api/routes/public/applications.js +37 -0
- package/dist/api/routes/public/middleware/mapper.js +3 -0
- package/dist/api/routes/query.js +2 -1
- package/dist/api/routes/role.js +2 -1
- package/dist/api/routes/routing.js +2 -1
- package/dist/api/routes/row.js +2 -2
- package/dist/api/routes/screen.js +2 -1
- package/dist/api/routes/script.js +2 -1
- package/dist/api/routes/static.js +6 -5
- package/dist/api/routes/table.js +8 -38
- package/dist/api/routes/templates.js +2 -1
- package/dist/api/routes/user.js +2 -1
- package/dist/api/routes/utils/validators.js +1 -1
- package/dist/api/routes/view.js +2 -1
- package/dist/api/routes/webhook.js +2 -1
- package/dist/app.js +9 -7
- package/dist/automations/automationUtils.js +26 -1
- package/dist/automations/logging/index.js +5 -25
- package/dist/automations/triggers.js +1 -0
- package/dist/db/index.js +5 -2
- package/dist/db/linkedRows/LinkController.js +2 -1
- package/dist/db/linkedRows/LinkDocument.js +2 -1
- package/dist/db/newid.js +4 -2
- package/dist/definitions/datasource.js +0 -6
- package/dist/environment.js +7 -2
- package/dist/events/AutomationEmitter.js +2 -1
- package/dist/events/BudibaseEmitter.js +2 -1
- package/dist/events/index.js +2 -1
- package/dist/index.js +2 -2
- package/dist/integrations/base/query.js +7 -2
- package/dist/integrations/base/sqlTable.js +14 -14
- package/dist/integrations/couchdb.js +34 -8
- package/dist/integrations/dynamodb.js +8 -5
- package/dist/integrations/elasticsearch.js +7 -3
- package/dist/integrations/googlesheets.js +1 -1
- package/dist/integrations/index.js +6 -7
- package/dist/integrations/mongodb.js +311 -271
- package/dist/integrations/mysql.js +2 -2
- package/dist/integrations/queries/sql.js +73 -100
- package/dist/integrations/rest.js +16 -18
- package/dist/middleware/authorized.js +2 -1
- package/dist/middleware/builder.js +4 -2
- package/dist/middleware/currentapp.js +6 -3
- package/dist/middleware/publicApi.js +4 -2
- package/dist/middleware/selfhost.js +4 -1
- package/dist/migrations/functions/backfill/global/configs.js +4 -4
- package/dist/package.json +12 -8
- package/dist/sdk/app/backups/imports.js +2 -6
- package/dist/sdk/app/datasources/datasources.js +147 -0
- package/dist/sdk/app/datasources/index.js +27 -0
- package/dist/sdk/app/queries/index.js +27 -0
- package/dist/sdk/app/queries/queries.js +60 -0
- package/dist/sdk/app/tables/index.js +6 -2
- package/dist/sdk/index.js +4 -0
- package/dist/sdk/utils/index.js +29 -0
- package/dist/startup.js +17 -17
- package/dist/threads/automation.js +22 -35
- package/dist/threads/index.js +4 -4
- package/dist/threads/query.js +27 -13
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utilities/fileSystem/app.js +97 -0
- package/dist/utilities/fileSystem/clientLibrary.js +3 -3
- package/dist/utilities/fileSystem/filesystem.js +184 -0
- package/dist/utilities/fileSystem/index.js +18 -342
- package/dist/utilities/fileSystem/plugin.js +66 -0
- package/dist/utilities/fileSystem/template.js +47 -0
- package/dist/utilities/index.js +1 -44
- package/dist/utilities/rowProcessor/index.js +12 -4
- package/dist/utilities/schema.js +108 -0
- package/dist/utilities/scriptRunner.js +2 -1
- package/dist/utilities/statusCodes.js +2 -1
- package/dist/utilities/workerRequests.js +2 -0
- package/dist/watch.js +2 -25
- package/jest.config.ts +5 -2
- package/package.json +13 -9
- package/scripts/dev/manage.js +3 -2
- package/specs/openapi.json +84 -0
- package/specs/openapi.yaml +53 -0
- package/specs/resources/application.js +19 -0
- package/src/api/controllers/application.ts +142 -110
- package/src/api/controllers/auth.ts +2 -2
- package/src/api/controllers/cloud.ts +10 -6
- package/src/api/controllers/datasource.ts +33 -25
- package/src/api/controllers/deploy/Deployment.ts +1 -0
- package/src/api/controllers/deploy/index.ts +40 -58
- package/src/api/controllers/plugin/index.ts +14 -9
- package/src/api/controllers/public/applications.ts +17 -0
- package/src/api/controllers/query/index.ts +49 -41
- package/src/api/controllers/row/ExternalRequest.ts +8 -3
- package/src/api/controllers/row/external.ts +24 -14
- package/src/api/controllers/row/internal.ts +66 -41
- package/src/api/controllers/row/staticFormula.ts +5 -2
- package/src/api/controllers/row/utils.ts +42 -3
- package/src/api/controllers/static/index.ts +22 -27
- package/src/api/controllers/static/templates/BudibaseApp.svelte +0 -1
- package/src/api/controllers/table/external.ts +18 -16
- package/src/api/controllers/table/index.ts +46 -17
- package/src/api/controllers/table/internal.ts +6 -7
- package/src/api/controllers/table/utils.ts +12 -13
- package/src/api/controllers/user.ts +21 -13
- package/src/api/controllers/view/exporters.ts +20 -5
- package/src/api/controllers/view/index.ts +30 -42
- package/src/api/controllers/view/tests/viewBuilder.spec.js +1 -1
- package/src/api/controllers/view/viewBuilder.ts +1 -1
- package/src/api/controllers/webhook.ts +48 -46
- package/src/api/routes/analytics.ts +1 -1
- package/src/api/routes/apikeys.ts +1 -1
- package/src/api/routes/application.ts +12 -1
- package/src/api/routes/auth.ts +1 -1
- package/src/api/routes/automation.ts +1 -1
- package/src/api/routes/backup.ts +1 -1
- package/src/api/routes/cloud.ts +1 -1
- package/src/api/routes/component.ts +1 -1
- package/src/api/routes/datasource.ts +1 -1
- package/src/api/routes/deploy.ts +1 -2
- package/src/api/routes/dev.ts +1 -1
- package/src/api/routes/index.ts +6 -3
- package/src/api/routes/integration.ts +1 -1
- package/src/api/routes/layout.ts +1 -1
- package/src/api/routes/metadata.ts +1 -1
- package/src/api/routes/migrations.ts +1 -1
- package/src/api/routes/permission.ts +1 -1
- package/src/api/routes/public/applications.ts +44 -0
- package/src/api/routes/public/middleware/mapper.ts +4 -0
- package/src/api/routes/query.ts +1 -1
- package/src/api/routes/role.ts +1 -1
- package/src/api/routes/routing.ts +1 -1
- package/src/api/routes/row.ts +1 -1
- package/src/api/routes/screen.ts +1 -1
- package/src/api/routes/script.ts +1 -1
- package/src/api/routes/static.ts +2 -2
- package/src/api/routes/table.ts +16 -39
- package/src/api/routes/templates.ts +1 -1
- package/src/api/routes/tests/__snapshots__/{datasource.spec.js.snap → datasource.spec.ts.snap} +0 -0
- package/src/api/routes/tests/{application.spec.js → application.spec.ts} +94 -18
- package/src/api/routes/tests/{backup.spec.js → backup.spec.ts} +17 -6
- package/src/api/routes/tests/cloud.spec.ts +65 -0
- package/src/api/routes/tests/data/budibase-component-1.0.1.tgz +0 -0
- package/src/api/routes/tests/data/comment-box-1.0.2.tar.gz +0 -0
- package/src/api/routes/tests/data/export-test.tar.gz +0 -0
- package/src/api/routes/tests/{datasource.spec.js → datasource.spec.ts} +56 -14
- package/src/api/routes/tests/misc.spec.js +4 -10
- package/src/api/routes/tests/permissions.spec.js +1 -1
- package/src/api/routes/tests/plugin.spec.ts +179 -0
- package/src/api/routes/tests/routing.spec.js +1 -2
- package/src/api/routes/tests/row.spec.js +4 -2
- package/src/api/routes/tests/static.spec.js +2 -17
- package/src/api/routes/tests/table.spec.js +16 -32
- package/src/api/routes/tests/user.spec.js +105 -0
- package/src/api/routes/tests/utilities/TestFunctions.ts +1 -1
- package/src/api/routes/tests/utilities/index.ts +2 -2
- package/src/api/routes/tests/webhook.spec.js +1 -1
- package/src/api/routes/user.ts +1 -1
- package/src/api/routes/utils/validators.ts +1 -1
- package/src/api/routes/view.ts +1 -1
- package/src/api/routes/webhook.ts +1 -1
- package/src/app.ts +5 -3
- package/src/automations/automationUtils.ts +24 -0
- package/src/automations/logging/index.ts +1 -1
- package/src/automations/tests/bash.spec.js +34 -0
- package/src/automations/tests/discord.spec.js +27 -0
- package/src/automations/tests/executeQuery.spec.js +49 -0
- package/src/automations/tests/executeScript.spec.js +48 -0
- package/src/automations/tests/loop.spec.ts +45 -0
- package/src/automations/tests/sendSmtpEmail.spec.js +71 -0
- package/src/automations/tests/serverLog.spec.js +22 -0
- package/src/automations/tests/utilities/index.ts +2 -2
- package/src/automations/tests/zapier.spec.js +27 -0
- package/src/automations/triggers.ts +6 -1
- package/src/automations/unitTests/automationUtils.spec.ts +65 -0
- package/src/db/index.ts +1 -1
- package/src/db/linkedRows/LinkController.ts +1 -1
- package/src/db/linkedRows/LinkDocument.ts +1 -1
- package/src/db/newid.ts +1 -1
- package/src/db/tests/linkController.spec.js +1 -1
- package/src/definitions/automations.ts +1 -0
- package/src/definitions/datasource.ts +0 -41
- package/src/definitions/openapi.ts +10 -0
- package/src/environment.ts +6 -2
- package/src/events/AutomationEmitter.ts +1 -1
- package/src/events/BudibaseEmitter.ts +1 -1
- package/src/events/index.ts +1 -1
- package/src/index.ts +1 -1
- package/src/integrations/base/query.ts +3 -1
- package/src/integrations/base/sqlTable.ts +1 -1
- package/src/integrations/couchdb.ts +40 -14
- package/src/integrations/dynamodb.ts +3 -3
- package/src/integrations/elasticsearch.ts +8 -4
- package/src/integrations/googlesheets.ts +1 -1
- package/src/integrations/index.ts +5 -9
- package/src/integrations/mongodb.ts +315 -271
- package/src/integrations/mysql.ts +1 -1
- package/src/integrations/queries/sql.ts +5 -50
- package/src/integrations/rest.ts +16 -19
- package/src/integrations/tests/couchdb.spec.ts +33 -21
- package/src/integrations/tests/rest.spec.ts +19 -15
- package/src/middleware/authorized.ts +5 -1
- package/src/middleware/builder.ts +1 -1
- package/src/middleware/currentapp.ts +4 -3
- package/src/middleware/publicApi.ts +1 -1
- package/src/middleware/selfhost.ts +1 -1
- package/src/middleware/tests/authorized.spec.js +1 -1
- package/src/middleware/tests/currentapp.spec.js +1 -1
- package/src/middleware/tests/selfhost.spec.js +1 -1
- package/src/migrations/functions/backfill/global/configs.ts +5 -4
- package/src/migrations/functions/usageQuotas/tests/syncRows.spec.ts +10 -6
- package/src/sdk/app/backups/imports.ts +2 -6
- package/src/sdk/app/datasources/datasources.ts +136 -0
- package/src/sdk/app/datasources/index.ts +5 -0
- package/src/sdk/app/queries/index.ts +5 -0
- package/src/sdk/app/queries/queries.ts +50 -0
- package/src/sdk/app/tables/index.ts +6 -3
- package/src/sdk/index.ts +4 -0
- package/src/sdk/tests/attachments.spec.ts +1 -4
- package/src/sdk/utils/index.ts +16 -0
- package/src/startup.ts +3 -8
- package/src/tests/jestEnv.ts +13 -0
- package/src/tests/jestSetup.ts +4 -15
- package/src/tests/utilities/TestConfiguration.ts +38 -16
- package/src/tests/utilities/structures.ts +65 -2
- package/src/threads/automation.ts +22 -35
- package/src/threads/definitions.ts +3 -0
- package/src/threads/index.ts +1 -1
- package/src/threads/query.ts +28 -15
- package/src/utilities/fileSystem/app.ts +86 -0
- package/src/utilities/fileSystem/clientLibrary.ts +1 -1
- package/src/utilities/fileSystem/filesystem.ts +172 -0
- package/src/utilities/fileSystem/index.ts +5 -348
- package/src/utilities/fileSystem/plugin.ts +64 -0
- package/src/utilities/fileSystem/template.ts +36 -0
- package/src/utilities/index.ts +1 -45
- package/src/utilities/rowProcessor/index.ts +17 -8
- package/src/utilities/rowProcessor/tests/utils.spec.ts +57 -0
- package/src/utilities/schema.ts +141 -0
- package/src/utilities/scriptRunner.ts +1 -1
- package/src/utilities/statusCodes.ts +1 -1
- package/src/utilities/workerRequests.ts +10 -1
- package/src/watch.ts +1 -1
- package/tsconfig.build.json +2 -0
- package/tsconfig.json +2 -1
- package/builder/assets/index.96b9ffed.css +0 -6
- package/builder/assets/index.fae8f9eb.js +0 -1024
- package/coverage/lcov-report/src/utilities/plugins.ts.html +0 -151
- package/dist/api/routes/tests/utilities/TestFunctions.js +0 -167
- package/dist/api/routes/tests/utilities/index.js +0 -131
- package/dist/automations/tests/utilities/index.js +0 -81
- package/dist/tests/utilities/TestConfiguration.js +0 -562
- package/dist/tests/utilities/controllers.js +0 -40
- package/dist/tests/utilities/structures.js +0 -168
- package/dist/utilities/csvParser.js +0 -152
- package/dist/utilities/plugins.js +0 -26
- package/src/api/routes/tests/deployment.spec.ts +0 -25
- package/src/automations/unitTests/automationUtils.spec.js +0 -17
- package/src/utilities/csvParser.ts +0 -161
- package/src/utilities/plugins.ts +0 -22
- package/src/utilities/tests/__snapshots__/csvParser.spec.js.snap +0 -15
- package/src/utilities/tests/csvParser.spec.js +0 -112
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
cleanupAttachments,
|
|
14
14
|
} from "../../../utilities/rowProcessor"
|
|
15
15
|
import { FieldTypes } from "../../../constants"
|
|
16
|
-
import
|
|
16
|
+
import * as utils from "./utils"
|
|
17
17
|
import { fullSearch, paginatedSearch } from "./internalSearch"
|
|
18
18
|
import { getGlobalUsersFromMetadata } from "../../../utilities/global"
|
|
19
19
|
import * as inMemoryViews from "../../../db/inMemoryView"
|
|
@@ -27,16 +27,19 @@ import {
|
|
|
27
27
|
import { cloneDeep } from "lodash/fp"
|
|
28
28
|
import { context, db as dbCore } from "@budibase/backend-core"
|
|
29
29
|
import { finaliseRow, updateRelatedFormula } from "./staticFormula"
|
|
30
|
-
import
|
|
30
|
+
import { csv, json, jsonWithSchema, Format } from "../view/exporters"
|
|
31
31
|
import { apiFileReturn } from "../../../utilities/fileSystem"
|
|
32
32
|
import {
|
|
33
|
-
|
|
33
|
+
Ctx,
|
|
34
|
+
UserCtx,
|
|
34
35
|
Database,
|
|
35
36
|
LinkDocumentValue,
|
|
36
37
|
Row,
|
|
37
38
|
Table,
|
|
38
39
|
} from "@budibase/types"
|
|
39
40
|
|
|
41
|
+
const { cleanExportRows } = require("./utils")
|
|
42
|
+
|
|
40
43
|
const CALCULATION_TYPES = {
|
|
41
44
|
SUM: "sum",
|
|
42
45
|
COUNT: "count",
|
|
@@ -69,7 +72,7 @@ async function getView(db: Database, viewName: string) {
|
|
|
69
72
|
return viewInfo
|
|
70
73
|
}
|
|
71
74
|
|
|
72
|
-
async function getRawTableData(ctx:
|
|
75
|
+
async function getRawTableData(ctx: Ctx, db: Database, tableId: string) {
|
|
73
76
|
let rows
|
|
74
77
|
if (tableId === InternalTables.USER_METADATA) {
|
|
75
78
|
await userController.fetchMetadata(ctx)
|
|
@@ -85,7 +88,7 @@ async function getRawTableData(ctx: BBContext, db: Database, tableId: string) {
|
|
|
85
88
|
return rows as Row[]
|
|
86
89
|
}
|
|
87
90
|
|
|
88
|
-
export async function patch(ctx:
|
|
91
|
+
export async function patch(ctx: UserCtx) {
|
|
89
92
|
const db = context.getAppDB()
|
|
90
93
|
const inputs = ctx.request.body
|
|
91
94
|
const tableId = inputs.tableId
|
|
@@ -95,7 +98,7 @@ export async function patch(ctx: BBContext) {
|
|
|
95
98
|
let dbTable = await db.get(tableId)
|
|
96
99
|
oldRow = await outputProcessing(
|
|
97
100
|
dbTable,
|
|
98
|
-
await findRow(ctx, tableId, inputs._id)
|
|
101
|
+
await utils.findRow(ctx, tableId, inputs._id)
|
|
99
102
|
)
|
|
100
103
|
} catch (err) {
|
|
101
104
|
if (isUserTable) {
|
|
@@ -117,8 +120,8 @@ export async function patch(ctx: BBContext) {
|
|
|
117
120
|
}
|
|
118
121
|
|
|
119
122
|
// this returns the table and row incase they have been updated
|
|
120
|
-
let { table, row } = inputProcessing(ctx.user
|
|
121
|
-
const validateResult = await
|
|
123
|
+
let { table, row } = inputProcessing(ctx.user, dbTable, combinedRow)
|
|
124
|
+
const validateResult = await utils.validate({
|
|
122
125
|
row,
|
|
123
126
|
table,
|
|
124
127
|
})
|
|
@@ -150,7 +153,7 @@ export async function patch(ctx: BBContext) {
|
|
|
150
153
|
})
|
|
151
154
|
}
|
|
152
155
|
|
|
153
|
-
export async function save(ctx:
|
|
156
|
+
export async function save(ctx: UserCtx) {
|
|
154
157
|
const db = context.getAppDB()
|
|
155
158
|
let inputs = ctx.request.body
|
|
156
159
|
inputs.tableId = ctx.params.tableId
|
|
@@ -161,8 +164,8 @@ export async function save(ctx: BBContext) {
|
|
|
161
164
|
|
|
162
165
|
// this returns the table and row incase they have been updated
|
|
163
166
|
const dbTable = await db.get(inputs.tableId)
|
|
164
|
-
let { table, row } = inputProcessing(ctx.user
|
|
165
|
-
const validateResult = await
|
|
167
|
+
let { table, row } = inputProcessing(ctx.user, dbTable, inputs)
|
|
168
|
+
const validateResult = await utils.validate({
|
|
166
169
|
row,
|
|
167
170
|
table,
|
|
168
171
|
})
|
|
@@ -185,8 +188,8 @@ export async function save(ctx: BBContext) {
|
|
|
185
188
|
})
|
|
186
189
|
}
|
|
187
190
|
|
|
188
|
-
export async function fetchView(ctx:
|
|
189
|
-
const viewName = ctx.params.viewName
|
|
191
|
+
export async function fetchView(ctx: Ctx) {
|
|
192
|
+
const viewName = decodeURIComponent(ctx.params.viewName)
|
|
190
193
|
|
|
191
194
|
// if this is a table view being looked for just transfer to that
|
|
192
195
|
if (viewName.startsWith(DocumentType.TABLE)) {
|
|
@@ -252,7 +255,7 @@ export async function fetchView(ctx: BBContext) {
|
|
|
252
255
|
return rows
|
|
253
256
|
}
|
|
254
257
|
|
|
255
|
-
export async function fetch(ctx:
|
|
258
|
+
export async function fetch(ctx: Ctx) {
|
|
256
259
|
const db = context.getAppDB()
|
|
257
260
|
|
|
258
261
|
const tableId = ctx.params.tableId
|
|
@@ -261,15 +264,15 @@ export async function fetch(ctx: BBContext) {
|
|
|
261
264
|
return outputProcessing(table, rows)
|
|
262
265
|
}
|
|
263
266
|
|
|
264
|
-
export async function find(ctx:
|
|
267
|
+
export async function find(ctx: Ctx) {
|
|
265
268
|
const db = dbCore.getDB(ctx.appId)
|
|
266
269
|
const table = await db.get(ctx.params.tableId)
|
|
267
|
-
let row = await findRow(ctx, ctx.params.tableId, ctx.params.rowId)
|
|
270
|
+
let row = await utils.findRow(ctx, ctx.params.tableId, ctx.params.rowId)
|
|
268
271
|
row = await outputProcessing(table, row)
|
|
269
272
|
return row
|
|
270
273
|
}
|
|
271
274
|
|
|
272
|
-
export async function destroy(ctx:
|
|
275
|
+
export async function destroy(ctx: Ctx) {
|
|
273
276
|
const db = context.getAppDB()
|
|
274
277
|
const { _id } = ctx.request.body
|
|
275
278
|
let row = await db.get(_id)
|
|
@@ -305,7 +308,7 @@ export async function destroy(ctx: BBContext) {
|
|
|
305
308
|
return { response, row }
|
|
306
309
|
}
|
|
307
310
|
|
|
308
|
-
export async function bulkDestroy(ctx:
|
|
311
|
+
export async function bulkDestroy(ctx: Ctx) {
|
|
309
312
|
const db = context.getAppDB()
|
|
310
313
|
const tableId = ctx.params.tableId
|
|
311
314
|
const table = await db.get(tableId)
|
|
@@ -344,7 +347,7 @@ export async function bulkDestroy(ctx: BBContext) {
|
|
|
344
347
|
return { response: { ok: true }, rows: processedRows }
|
|
345
348
|
}
|
|
346
349
|
|
|
347
|
-
export async function search(ctx:
|
|
350
|
+
export async function search(ctx: Ctx) {
|
|
348
351
|
// Fetch the whole table when running in cypress, as search doesn't work
|
|
349
352
|
if (!env.COUCH_DB_URL && env.isCypress()) {
|
|
350
353
|
return { rows: await fetch(ctx) }
|
|
@@ -356,6 +359,14 @@ export async function search(ctx: BBContext) {
|
|
|
356
359
|
params.version = ctx.version
|
|
357
360
|
params.tableId = tableId
|
|
358
361
|
|
|
362
|
+
let table
|
|
363
|
+
if (params.sort && !params.sortType) {
|
|
364
|
+
table = await db.get(tableId)
|
|
365
|
+
const schema = table.schema
|
|
366
|
+
const sortField = schema[params.sort]
|
|
367
|
+
params.sortType = sortField.type == "number" ? "number" : "string"
|
|
368
|
+
}
|
|
369
|
+
|
|
359
370
|
let response
|
|
360
371
|
if (paginate) {
|
|
361
372
|
response = await paginatedSearch(query, params)
|
|
@@ -369,35 +380,44 @@ export async function search(ctx: BBContext) {
|
|
|
369
380
|
if (tableId === InternalTables.USER_METADATA) {
|
|
370
381
|
response.rows = await getGlobalUsersFromMetadata(response.rows)
|
|
371
382
|
}
|
|
372
|
-
|
|
383
|
+
table = table || (await db.get(tableId))
|
|
373
384
|
response.rows = await outputProcessing(table, response.rows)
|
|
374
385
|
}
|
|
375
386
|
|
|
376
387
|
return response
|
|
377
388
|
}
|
|
378
389
|
|
|
379
|
-
export async function validate(ctx:
|
|
380
|
-
return
|
|
390
|
+
export async function validate(ctx: Ctx) {
|
|
391
|
+
return utils.validate({
|
|
381
392
|
tableId: ctx.params.tableId,
|
|
382
393
|
row: ctx.request.body,
|
|
383
394
|
})
|
|
384
395
|
}
|
|
385
396
|
|
|
386
|
-
export async function exportRows(ctx:
|
|
397
|
+
export async function exportRows(ctx: Ctx) {
|
|
387
398
|
const db = context.getAppDB()
|
|
388
399
|
const table = await db.get(ctx.params.tableId)
|
|
389
400
|
const rowIds = ctx.request.body.rows
|
|
390
401
|
let format = ctx.query.format
|
|
391
|
-
const { columns } = ctx.request.body
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
402
|
+
const { columns, query } = ctx.request.body
|
|
403
|
+
|
|
404
|
+
let result
|
|
405
|
+
if (rowIds) {
|
|
406
|
+
let response = (
|
|
407
|
+
await db.allDocs({
|
|
408
|
+
include_docs: true,
|
|
409
|
+
keys: rowIds,
|
|
410
|
+
})
|
|
411
|
+
).rows.map(row => row.doc)
|
|
412
|
+
|
|
413
|
+
result = await outputProcessing(table, response)
|
|
414
|
+
} else if (query) {
|
|
415
|
+
let searchResponse = await exports.search(ctx)
|
|
416
|
+
result = searchResponse.rows
|
|
417
|
+
}
|
|
398
418
|
|
|
399
|
-
let result = (await outputProcessing(table, response)) as Row[]
|
|
400
419
|
let rows: Row[] = []
|
|
420
|
+
let schema = table.schema
|
|
401
421
|
|
|
402
422
|
// Filter data to only specified columns if required
|
|
403
423
|
if (columns && columns.length) {
|
|
@@ -411,24 +431,29 @@ export async function exportRows(ctx: BBContext) {
|
|
|
411
431
|
rows = result
|
|
412
432
|
}
|
|
413
433
|
|
|
414
|
-
let
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
434
|
+
let exportRows = cleanExportRows(rows, schema, format, columns)
|
|
435
|
+
if (format === Format.CSV) {
|
|
436
|
+
ctx.attachment("export.csv")
|
|
437
|
+
return apiFileReturn(csv(Object.keys(rows[0]), exportRows))
|
|
438
|
+
} else if (format === Format.JSON) {
|
|
439
|
+
ctx.attachment("export.json")
|
|
440
|
+
return apiFileReturn(json(exportRows))
|
|
441
|
+
} else if (format === Format.JSON_WITH_SCHEMA) {
|
|
442
|
+
ctx.attachment("export.json")
|
|
443
|
+
return apiFileReturn(jsonWithSchema(schema, exportRows))
|
|
444
|
+
} else {
|
|
445
|
+
throw "Format not recognised"
|
|
446
|
+
}
|
|
422
447
|
}
|
|
423
448
|
|
|
424
|
-
export async function fetchEnrichedRow(ctx:
|
|
449
|
+
export async function fetchEnrichedRow(ctx: Ctx) {
|
|
425
450
|
const db = context.getAppDB()
|
|
426
451
|
const tableId = ctx.params.tableId
|
|
427
452
|
const rowId = ctx.params.rowId
|
|
428
453
|
// need table to work out where links go in row
|
|
429
454
|
let [table, row] = await Promise.all([
|
|
430
455
|
db.get(tableId),
|
|
431
|
-
findRow(ctx, tableId, rowId),
|
|
456
|
+
utils.findRow(ctx, tableId, rowId),
|
|
432
457
|
])
|
|
433
458
|
// get the link docs
|
|
434
459
|
const linkVals = (await linkRows.getLinkDocuments({
|
|
@@ -16,7 +16,10 @@ const { cloneDeep } = require("lodash/fp")
|
|
|
16
16
|
* updated.
|
|
17
17
|
* NOTE: this will only for affect static formulas.
|
|
18
18
|
*/
|
|
19
|
-
export async function updateRelatedFormula(
|
|
19
|
+
export async function updateRelatedFormula(
|
|
20
|
+
table: Table,
|
|
21
|
+
enrichedRows: Row[] | Row
|
|
22
|
+
) {
|
|
20
23
|
const db = context.getAppDB()
|
|
21
24
|
// no formula to update, we're done
|
|
22
25
|
if (!table.relatedFormula) {
|
|
@@ -155,7 +158,7 @@ export async function finaliseRow(
|
|
|
155
158
|
enrichedRow = await processFormulas(table, enrichedRow, { dynamic: false })
|
|
156
159
|
// this updates the related formulas in other rows based on the relations to this row
|
|
157
160
|
if (updateFormula) {
|
|
158
|
-
await
|
|
161
|
+
await updateRelatedFormula(table, enrichedRow)
|
|
159
162
|
}
|
|
160
163
|
return { row: enrichedRow, table }
|
|
161
164
|
}
|
|
@@ -7,6 +7,9 @@ import { BBContext, Row, Table } from "@budibase/types"
|
|
|
7
7
|
export { removeKeyNumbering } from "../../../integrations/base/utils"
|
|
8
8
|
const validateJs = require("validate.js")
|
|
9
9
|
const { cloneDeep } = require("lodash/fp")
|
|
10
|
+
import { Format } from "../view/exporters"
|
|
11
|
+
import { Ctx } from "@budibase/types"
|
|
12
|
+
import sdk from "../../../sdk"
|
|
10
13
|
|
|
11
14
|
validateJs.extend(validateJs.validators.datetime, {
|
|
12
15
|
parse: function (value: string) {
|
|
@@ -20,12 +23,11 @@ validateJs.extend(validateJs.validators.datetime, {
|
|
|
20
23
|
|
|
21
24
|
export async function getDatasourceAndQuery(json: any) {
|
|
22
25
|
const datasourceId = json.endpoint.datasourceId
|
|
23
|
-
const
|
|
24
|
-
const datasource = await db.get(datasourceId)
|
|
26
|
+
const datasource = await sdk.datasources.get(datasourceId)
|
|
25
27
|
return makeExternalQuery(datasource, json)
|
|
26
28
|
}
|
|
27
29
|
|
|
28
|
-
export async function findRow(ctx:
|
|
30
|
+
export async function findRow(ctx: Ctx, tableId: string, rowId: string) {
|
|
29
31
|
const db = context.getAppDB()
|
|
30
32
|
let row
|
|
31
33
|
// TODO remove special user case in future
|
|
@@ -116,3 +118,40 @@ export async function validate({
|
|
|
116
118
|
}
|
|
117
119
|
return { valid: Object.keys(errors).length === 0, errors }
|
|
118
120
|
}
|
|
121
|
+
|
|
122
|
+
export function cleanExportRows(
|
|
123
|
+
rows: any[],
|
|
124
|
+
schema: any,
|
|
125
|
+
format: string,
|
|
126
|
+
columns: string[]
|
|
127
|
+
) {
|
|
128
|
+
let cleanRows = [...rows]
|
|
129
|
+
|
|
130
|
+
const relationships = Object.entries(schema)
|
|
131
|
+
.filter((entry: any[]) => entry[1].type === FieldTypes.LINK)
|
|
132
|
+
.map(entry => entry[0])
|
|
133
|
+
|
|
134
|
+
relationships.forEach(column => {
|
|
135
|
+
cleanRows.forEach(row => {
|
|
136
|
+
delete row[column]
|
|
137
|
+
})
|
|
138
|
+
delete schema[column]
|
|
139
|
+
})
|
|
140
|
+
|
|
141
|
+
// Intended to avoid 'undefined' in export
|
|
142
|
+
if (format === Format.CSV) {
|
|
143
|
+
const schemaKeys = Object.keys(schema)
|
|
144
|
+
for (let key of schemaKeys) {
|
|
145
|
+
if (columns?.length && columns.indexOf(key) > 0) {
|
|
146
|
+
continue
|
|
147
|
+
}
|
|
148
|
+
for (let row of cleanRows) {
|
|
149
|
+
if (row[key] == null) {
|
|
150
|
+
row[key] = ""
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
return cleanRows
|
|
157
|
+
}
|
|
@@ -1,24 +1,21 @@
|
|
|
1
|
-
import { enrichPluginURLs } from "../../../utilities/plugins"
|
|
2
|
-
|
|
3
1
|
require("svelte/register")
|
|
4
2
|
|
|
5
|
-
|
|
6
|
-
const { resolve, join } = require("../../../utilities/centralPath")
|
|
3
|
+
import { resolve, join } from "../../../utilities/centralPath"
|
|
7
4
|
const uuid = require("uuid")
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
import { ObjectStoreBuckets } from "../../../constants"
|
|
6
|
+
import { processString } from "@budibase/string-templates"
|
|
7
|
+
import {
|
|
11
8
|
loadHandlebarsFile,
|
|
12
9
|
NODE_MODULES_PATH,
|
|
13
10
|
TOP_LEVEL_PATH,
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const
|
|
11
|
+
} from "../../../utilities/fileSystem"
|
|
12
|
+
import env from "../../../environment"
|
|
13
|
+
import { DocumentType } from "../../../db/utils"
|
|
14
|
+
import { context, objectStore, utils } from "@budibase/backend-core"
|
|
15
|
+
import AWS from "aws-sdk"
|
|
16
|
+
import fs from "fs"
|
|
17
|
+
import sdk from "../../../sdk"
|
|
18
|
+
const send = require("koa-send")
|
|
22
19
|
|
|
23
20
|
async function prepareUpload({ s3Key, bucket, metadata, file }: any) {
|
|
24
21
|
const response = await objectStore.upload({
|
|
@@ -33,7 +30,7 @@ async function prepareUpload({ s3Key, bucket, metadata, file }: any) {
|
|
|
33
30
|
return {
|
|
34
31
|
size: file.size,
|
|
35
32
|
name: file.name,
|
|
36
|
-
url:
|
|
33
|
+
url: objectStore.getAppFileUrl(s3Key),
|
|
37
34
|
extension: [...file.name.split(".")].pop(),
|
|
38
35
|
key: response.Key,
|
|
39
36
|
}
|
|
@@ -85,7 +82,7 @@ export const uploadFile = async function (ctx: any) {
|
|
|
85
82
|
|
|
86
83
|
return prepareUpload({
|
|
87
84
|
file,
|
|
88
|
-
s3Key: `${
|
|
85
|
+
s3Key: `${context.getProdAppId()}/attachments/${processedFileName}`,
|
|
89
86
|
bucket: ObjectStoreBuckets.APPS,
|
|
90
87
|
})
|
|
91
88
|
})
|
|
@@ -107,14 +104,14 @@ export const serveApp = async function (ctx: any) {
|
|
|
107
104
|
|
|
108
105
|
if (!env.isJest()) {
|
|
109
106
|
const App = require("./templates/BudibaseApp.svelte").default
|
|
110
|
-
const plugins = enrichPluginURLs(appInfo.usedPlugins)
|
|
107
|
+
const plugins = objectStore.enrichPluginURLs(appInfo.usedPlugins)
|
|
111
108
|
const { head, html, css } = App.render({
|
|
112
109
|
metaImage:
|
|
113
110
|
"https://res.cloudinary.com/daog6scxm/image/upload/v1666109324/meta-images/budibase-meta-image_uukc1m.png",
|
|
114
111
|
title: appInfo.name,
|
|
115
112
|
production: env.isProd(),
|
|
116
113
|
appId,
|
|
117
|
-
clientLibPath:
|
|
114
|
+
clientLibPath: objectStore.clientLibraryUrl(appId!, appInfo.version),
|
|
118
115
|
usedPlugins: plugins,
|
|
119
116
|
})
|
|
120
117
|
|
|
@@ -139,7 +136,7 @@ export const serveBuilderPreview = async function (ctx: any) {
|
|
|
139
136
|
let appId = context.getAppId()
|
|
140
137
|
const previewHbs = loadHandlebarsFile(`${__dirname}/templates/preview.hbs`)
|
|
141
138
|
ctx.body = await processString(previewHbs, {
|
|
142
|
-
clientLibPath:
|
|
139
|
+
clientLibPath: objectStore.clientLibraryUrl(appId!, appInfo.version),
|
|
143
140
|
})
|
|
144
141
|
} else {
|
|
145
142
|
// just return the app info for jest to assert on
|
|
@@ -154,13 +151,11 @@ export const serveClientLibrary = async function (ctx: any) {
|
|
|
154
151
|
}
|
|
155
152
|
|
|
156
153
|
export const getSignedUploadURL = async function (ctx: any) {
|
|
157
|
-
const database = context.getAppDB()
|
|
158
|
-
|
|
159
154
|
// Ensure datasource is valid
|
|
160
155
|
let datasource
|
|
161
156
|
try {
|
|
162
157
|
const { datasourceId } = ctx.params
|
|
163
|
-
datasource = await
|
|
158
|
+
datasource = await sdk.datasources.get(datasourceId, { enriched: true })
|
|
164
159
|
if (!datasource) {
|
|
165
160
|
ctx.throw(400, "The specified datasource could not be found")
|
|
166
161
|
}
|
|
@@ -176,8 +171,8 @@ export const getSignedUploadURL = async function (ctx: any) {
|
|
|
176
171
|
// Determine type of datasource and generate signed URL
|
|
177
172
|
let signedUrl
|
|
178
173
|
let publicUrl
|
|
179
|
-
const awsRegion = datasource?.config?.region || "eu-west-1"
|
|
180
|
-
if (datasource
|
|
174
|
+
const awsRegion = (datasource?.config?.region || "eu-west-1") as string
|
|
175
|
+
if (datasource?.source === "S3") {
|
|
181
176
|
const { bucket, key } = ctx.request.body || {}
|
|
182
177
|
if (!bucket || !key) {
|
|
183
178
|
ctx.throw(400, "bucket and key values are required")
|
|
@@ -186,8 +181,8 @@ export const getSignedUploadURL = async function (ctx: any) {
|
|
|
186
181
|
try {
|
|
187
182
|
const s3 = new AWS.S3({
|
|
188
183
|
region: awsRegion,
|
|
189
|
-
accessKeyId: datasource?.config?.accessKeyId,
|
|
190
|
-
secretAccessKey: datasource?.config?.secretAccessKey,
|
|
184
|
+
accessKeyId: datasource?.config?.accessKeyId as string,
|
|
185
|
+
secretAccessKey: datasource?.config?.secretAccessKey as string,
|
|
191
186
|
apiVersion: "2006-03-01",
|
|
192
187
|
signatureVersion: "v4",
|
|
193
188
|
})
|
|
@@ -10,9 +10,9 @@ import {
|
|
|
10
10
|
} from "./utils"
|
|
11
11
|
import { FieldTypes, RelationshipTypes } from "../../../constants"
|
|
12
12
|
import { makeExternalQuery } from "../../../integrations/base/query"
|
|
13
|
-
import * as csvParser from "../../../utilities/csvParser"
|
|
14
13
|
import { handleRequest } from "../row/external"
|
|
15
14
|
import { events, context } from "@budibase/backend-core"
|
|
15
|
+
import { parse, isRows, isSchema } from "../../../utilities/schema"
|
|
16
16
|
import {
|
|
17
17
|
Datasource,
|
|
18
18
|
Table,
|
|
@@ -197,7 +197,7 @@ export async function save(ctx: BBContext) {
|
|
|
197
197
|
const table: TableRequest = ctx.request.body
|
|
198
198
|
const renamed = table?._rename
|
|
199
199
|
// can't do this right now
|
|
200
|
-
delete table.
|
|
200
|
+
delete table.rows
|
|
201
201
|
const datasourceId = getDatasourceId(ctx.request.body)!
|
|
202
202
|
// table doesn't exist already, note that it is created
|
|
203
203
|
if (!table._id) {
|
|
@@ -219,7 +219,7 @@ export async function save(ctx: BBContext) {
|
|
|
219
219
|
}
|
|
220
220
|
|
|
221
221
|
const db = context.getAppDB()
|
|
222
|
-
const datasource = await
|
|
222
|
+
const datasource = await sdk.datasources.get(datasourceId)
|
|
223
223
|
if (!datasource.entities) {
|
|
224
224
|
datasource.entities = {}
|
|
225
225
|
}
|
|
@@ -322,15 +322,17 @@ export async function destroy(ctx: BBContext) {
|
|
|
322
322
|
const datasourceId = getDatasourceId(tableToDelete)
|
|
323
323
|
|
|
324
324
|
const db = context.getAppDB()
|
|
325
|
-
const datasource = await
|
|
325
|
+
const datasource = await sdk.datasources.get(datasourceId!)
|
|
326
326
|
const tables = datasource.entities
|
|
327
327
|
|
|
328
328
|
const operation = Operation.DELETE_TABLE
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
329
|
+
if (tables) {
|
|
330
|
+
await makeTableRequest(datasource, operation, tableToDelete, tables)
|
|
331
|
+
cleanupRelationships(tableToDelete, tables)
|
|
332
|
+
delete tables[tableToDelete.name]
|
|
333
|
+
datasource.entities = tables
|
|
334
|
+
}
|
|
332
335
|
|
|
333
|
-
delete datasource.entities[tableToDelete.name]
|
|
334
336
|
await db.put(datasource)
|
|
335
337
|
|
|
336
338
|
return tableToDelete
|
|
@@ -338,17 +340,17 @@ export async function destroy(ctx: BBContext) {
|
|
|
338
340
|
|
|
339
341
|
export async function bulkImport(ctx: BBContext) {
|
|
340
342
|
const table = await sdk.tables.getTable(ctx.params.tableId)
|
|
341
|
-
const {
|
|
342
|
-
|
|
343
|
+
const { rows }: { rows: unknown } = ctx.request.body
|
|
344
|
+
const schema: unknown = table.schema
|
|
345
|
+
|
|
346
|
+
if (!rows || !isRows(rows) || !isSchema(schema)) {
|
|
343
347
|
ctx.throw(400, "Provided data import information is invalid.")
|
|
344
348
|
}
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
existingTable: table,
|
|
348
|
-
})
|
|
349
|
+
|
|
350
|
+
const parsedRows = await parse(rows, schema)
|
|
349
351
|
await handleRequest(Operation.BULK_CREATE, table._id!, {
|
|
350
|
-
rows,
|
|
352
|
+
rows: parsedRows,
|
|
351
353
|
})
|
|
352
|
-
await events.rows.imported(table,
|
|
354
|
+
await events.rows.imported(table, parsedRows.length)
|
|
353
355
|
return table
|
|
354
356
|
}
|
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
import * as internal from "./internal"
|
|
2
2
|
import * as external from "./external"
|
|
3
|
-
import
|
|
3
|
+
import {
|
|
4
|
+
validate as validateSchema,
|
|
5
|
+
isSchema,
|
|
6
|
+
isRows,
|
|
7
|
+
} from "../../../utilities/schema"
|
|
4
8
|
import { isExternalTable, isSQL } from "../../../integrations/utils"
|
|
5
9
|
import { getDatasourceParams } from "../../../db/utils"
|
|
6
10
|
import { context, events } from "@budibase/backend-core"
|
|
7
11
|
import { Table, BBContext } from "@budibase/types"
|
|
8
12
|
import sdk from "../../../sdk"
|
|
13
|
+
import csv from "csvtojson"
|
|
9
14
|
|
|
10
15
|
function pickApi({ tableId, table }: { tableId?: string; table?: Table }) {
|
|
11
16
|
if (table && !tableId) {
|
|
@@ -56,16 +61,16 @@ export async function find(ctx: BBContext) {
|
|
|
56
61
|
export async function save(ctx: BBContext) {
|
|
57
62
|
const appId = ctx.appId
|
|
58
63
|
const table = ctx.request.body
|
|
59
|
-
const
|
|
60
|
-
|
|
64
|
+
const isImport = table.rows
|
|
65
|
+
|
|
61
66
|
const savedTable = await pickApi({ table }).save(ctx)
|
|
62
67
|
if (!table._id) {
|
|
63
68
|
await events.table.created(savedTable)
|
|
64
69
|
} else {
|
|
65
70
|
await events.table.updated(savedTable)
|
|
66
71
|
}
|
|
67
|
-
if (
|
|
68
|
-
await events.table.imported(savedTable
|
|
72
|
+
if (isImport) {
|
|
73
|
+
await events.table.imported(savedTable)
|
|
69
74
|
}
|
|
70
75
|
ctx.status = 200
|
|
71
76
|
ctx.message = `Table ${table.name} saved successfully.`
|
|
@@ -96,19 +101,43 @@ export async function bulkImport(ctx: BBContext) {
|
|
|
96
101
|
ctx.body = { message: `Bulk rows created.` }
|
|
97
102
|
}
|
|
98
103
|
|
|
99
|
-
export async function
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
104
|
+
export async function csvToJson(ctx: BBContext) {
|
|
105
|
+
const { csvString } = ctx.request.body
|
|
106
|
+
|
|
107
|
+
const result = await csv().fromString(csvString)
|
|
108
|
+
|
|
109
|
+
ctx.status = 200
|
|
110
|
+
ctx.body = result
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export async function validateNewTableImport(ctx: BBContext) {
|
|
114
|
+
const { rows, schema }: { rows: unknown; schema: unknown } = ctx.request.body
|
|
115
|
+
|
|
116
|
+
if (isRows(rows) && isSchema(schema)) {
|
|
117
|
+
ctx.status = 200
|
|
118
|
+
ctx.body = validateSchema(rows, schema)
|
|
119
|
+
} else {
|
|
120
|
+
ctx.status = 422
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
export async function validateExistingTableImport(ctx: BBContext) {
|
|
125
|
+
const { rows, tableId }: { rows: unknown; tableId: unknown } =
|
|
126
|
+
ctx.request.body
|
|
127
|
+
|
|
128
|
+
let schema = null
|
|
103
129
|
if (tableId) {
|
|
104
|
-
|
|
130
|
+
const table = await sdk.tables.getTable(tableId)
|
|
131
|
+
schema = table.schema
|
|
132
|
+
} else {
|
|
133
|
+
ctx.status = 422
|
|
134
|
+
return
|
|
105
135
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
136
|
+
|
|
137
|
+
if (tableId && isRows(rows) && isSchema(schema)) {
|
|
138
|
+
ctx.status = 200
|
|
139
|
+
ctx.body = validateSchema(rows, schema)
|
|
140
|
+
} else {
|
|
141
|
+
ctx.status = 422
|
|
112
142
|
}
|
|
113
|
-
ctx.body = { schema: result }
|
|
114
143
|
}
|