@budibase/server 2.2.12-alpha.5 → 2.2.12-alpha.50
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__/node-fetch.ts +2 -0
- package/builder/assets/{bb-emblem.4e4717da.svg → bb-emblem.05f7ae7a.svg} +1 -1
- package/builder/assets/bg.c1563288.png +0 -0
- package/builder/assets/bulgaria.bd68393d.png +0 -0
- package/builder/assets/covanta.72c46c1e.png +0 -0
- package/builder/assets/index.22dc2872.css +6 -0
- package/builder/assets/{index.d930bfc5.js → index.d24b0406.js} +423 -427
- package/builder/assets/schnellecke.cf1837a8.png +0 -0
- package/builder/index.html +2 -2
- package/coverage/clover.xml +5670 -5622
- package/coverage/coverage-final.json +282 -279
- package/coverage/lcov-report/index.html +458 -413
- 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 +199 -178
- package/coverage/lcov-report/src/api/controllers/auth.ts.html +10 -10
- package/coverage/lcov-report/src/api/controllers/automation.ts.html +37 -37
- package/coverage/lcov-report/src/api/controllers/backup.ts.html +8 -8
- package/coverage/lcov-report/src/api/controllers/cloud.ts.html +19 -19
- package/coverage/lcov-report/src/api/controllers/component.ts.html +12 -12
- package/coverage/lcov-report/src/api/controllers/datasource.ts.html +117 -93
- package/coverage/lcov-report/src/api/controllers/deploy/Deployment.ts.html +18 -18
- package/coverage/lcov-report/src/api/controllers/deploy/index.html +7 -7
- package/coverage/lcov-report/src/api/controllers/deploy/index.ts.html +83 -83
- package/coverage/lcov-report/src/api/controllers/dev.ts.html +28 -28
- package/coverage/lcov-report/src/api/controllers/index.html +105 -105
- 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 +4 -4
- package/coverage/lcov-report/src/api/controllers/plugin/github.ts.html +20 -20
- package/coverage/lcov-report/src/api/controllers/plugin/index.html +31 -31
- package/coverage/lcov-report/src/api/controllers/plugin/index.ts.html +32 -32
- package/coverage/lcov-report/src/api/controllers/plugin/npm.ts.html +10 -10
- package/coverage/lcov-report/src/api/controllers/plugin/uploaders.ts.html +5 -5
- package/coverage/lcov-report/src/api/controllers/plugin/url.ts.html +4 -4
- package/coverage/lcov-report/src/api/controllers/plugin/utils.ts.html +4 -4
- package/coverage/lcov-report/src/api/controllers/public/applications.ts.html +31 -31
- 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 +16 -16
- package/coverage/lcov-report/src/api/controllers/query/index.ts.html +94 -70
- package/coverage/lcov-report/src/api/controllers/query/validation.ts.html +9 -9
- 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 +58 -40
- 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 +36 -36
- package/coverage/lcov-report/src/api/controllers/row/internal.ts.html +155 -83
- package/coverage/lcov-report/src/api/controllers/row/internalSearch.ts.html +146 -146
- package/coverage/lcov-report/src/api/controllers/row/staticFormula.ts.html +33 -33
- package/coverage/lcov-report/src/api/controllers/row/utils.ts.html +153 -39
- package/coverage/lcov-report/src/api/controllers/screen.ts.html +12 -12
- package/coverage/lcov-report/src/api/controllers/script.ts.html +11 -11
- package/coverage/lcov-report/src/api/controllers/static/index.html +15 -15
- package/coverage/lcov-report/src/api/controllers/static/index.ts.html +49 -52
- 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 +155 -68
- package/coverage/lcov-report/src/api/controllers/table/internal.ts.html +58 -61
- package/coverage/lcov-report/src/api/controllers/table/utils.ts.html +93 -96
- package/coverage/lcov-report/src/api/controllers/templates.ts.html +21 -21
- package/coverage/lcov-report/src/api/controllers/user.ts.html +103 -79
- 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 +57 -96
- package/coverage/lcov-report/src/api/controllers/view/utils.ts.html +22 -22
- package/coverage/lcov-report/src/api/controllers/view/viewBuilder.ts.html +8 -8
- 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 +35 -35
- 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 +13 -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 -11
- package/coverage/lcov-report/src/api/routes/dev.ts.html +17 -17
- package/coverage/lcov-report/src/api/routes/index.html +67 -67
- package/coverage/lcov-report/src/api/routes/index.ts.html +43 -37
- 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 +16 -16
- package/coverage/lcov-report/src/api/routes/public/index.html +24 -24
- package/coverage/lcov-report/src/api/routes/public/index.ts.html +60 -60
- package/coverage/lcov-report/src/api/routes/public/middleware/index.html +5 -5
- package/coverage/lcov-report/src/api/routes/public/middleware/mapper.ts.html +12 -12
- 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 +13 -13
- 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 +14 -14
- 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 +22 -16
- package/coverage/lcov-report/src/automations/actions.ts.html +31 -31
- package/coverage/lcov-report/src/automations/automationUtils.ts.html +61 -61
- 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 +10 -10
- package/coverage/lcov-report/src/automations/steps/bash.ts.html +11 -11
- 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 +11 -11
- package/coverage/lcov-report/src/automations/steps/executeQuery.ts.html +9 -9
- package/coverage/lcov-report/src/automations/steps/executeScript.ts.html +9 -9
- package/coverage/lcov-report/src/automations/steps/filter.ts.html +12 -12
- package/coverage/lcov-report/src/automations/steps/index.html +75 -75
- 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 +9 -9
- package/coverage/lcov-report/src/automations/steps/serverLog.ts.html +10 -10
- package/coverage/lcov-report/src/automations/steps/slack.ts.html +10 -10
- package/coverage/lcov-report/src/automations/steps/updateRow.ts.html +9 -9
- package/coverage/lcov-report/src/automations/steps/utils.ts.html +12 -12
- package/coverage/lcov-report/src/automations/steps/zapier.ts.html +8 -8
- package/coverage/lcov-report/src/automations/tests/utilities/index.html +15 -15
- package/coverage/lcov-report/src/automations/tests/utilities/index.ts.html +24 -24
- 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 +69 -69
- package/coverage/lcov-report/src/constants/index.html +19 -19
- package/coverage/lcov-report/src/constants/index.ts.html +80 -80
- package/coverage/lcov-report/src/constants/layouts.ts.html +9 -9
- package/coverage/lcov-report/src/constants/screens.ts.html +4 -4
- 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 +32 -32
- 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 +76 -76
- 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 +16 -16
- 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 +36 -36
- 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 +28 -28
- package/coverage/lcov-report/src/integrations/base/query.ts.html +15 -9
- package/coverage/lcov-report/src/integrations/base/sql.ts.html +37 -37
- package/coverage/lcov-report/src/integrations/base/sqlTable.ts.html +22 -22
- package/coverage/lcov-report/src/integrations/base/utils.ts.html +5 -5
- package/coverage/lcov-report/src/integrations/couchdb.ts.html +10 -10
- package/coverage/lcov-report/src/integrations/dynamodb.ts.html +17 -17
- package/coverage/lcov-report/src/integrations/elasticsearch.ts.html +9 -9
- package/coverage/lcov-report/src/integrations/firebase.ts.html +12 -12
- package/coverage/lcov-report/src/integrations/googlesheets.ts.html +41 -41
- package/coverage/lcov-report/src/integrations/index.html +124 -124
- package/coverage/lcov-report/src/integrations/index.ts.html +47 -47
- 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 +22 -22
- package/coverage/lcov-report/src/integrations/queries/index.html +19 -19
- package/coverage/lcov-report/src/integrations/queries/sql.ts.html +18 -153
- 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 +49 -49
- 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 +10 -10
- 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 +11 -11
- package/coverage/lcov-report/src/sdk/app/applications/index.ts.html +6 -6
- package/coverage/lcov-report/src/sdk/app/applications/sync.ts.html +24 -24
- 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 +24 -24
- package/coverage/lcov-report/src/sdk/app/backups/index.html +27 -27
- package/coverage/lcov-report/src/sdk/app/backups/index.ts.html +7 -7
- package/coverage/lcov-report/src/sdk/app/backups/statistics.ts.html +12 -12
- 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 +6 -6
- package/coverage/lcov-report/src/sdk/users/index.ts.html +5 -5
- package/coverage/lcov-report/src/sdk/users/utils.ts.html +29 -29
- 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 +40 -55
- package/coverage/lcov-report/src/tests/utilities/TestConfiguration.ts.html +141 -132
- package/coverage/lcov-report/src/tests/utilities/controllers.ts.html +20 -20
- package/coverage/lcov-report/src/tests/utilities/index.html +30 -30
- package/coverage/lcov-report/src/tests/utilities/index.ts.html +2 -2
- package/coverage/lcov-report/src/tests/utilities/structures.ts.html +232 -43
- package/coverage/lcov-report/src/threads/automation.ts.html +225 -195
- package/coverage/lcov-report/src/threads/index.html +46 -46
- package/coverage/lcov-report/src/threads/index.ts.html +38 -38
- package/coverage/lcov-report/src/threads/query.ts.html +73 -34
- package/coverage/lcov-report/src/threads/utils.ts.html +26 -26
- package/coverage/lcov-report/src/utilities/budibaseDir.ts.html +4 -4
- package/coverage/lcov-report/src/utilities/centralPath.ts.html +10 -10
- package/coverage/lcov-report/src/utilities/fileSystem/app.ts.html +11 -11
- package/coverage/lcov-report/src/utilities/fileSystem/clientLibrary.ts.html +12 -12
- package/coverage/lcov-report/src/utilities/fileSystem/filesystem.ts.html +32 -26
- package/coverage/lcov-report/src/utilities/fileSystem/index.html +42 -42
- package/coverage/lcov-report/src/utilities/fileSystem/index.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/fileSystem/plugin.ts.html +10 -13
- package/coverage/lcov-report/src/utilities/fileSystem/processor.ts.html +9 -9
- package/coverage/lcov-report/src/utilities/fileSystem/template.ts.html +7 -7
- package/coverage/lcov-report/src/utilities/global.ts.html +61 -61
- package/coverage/lcov-report/src/utilities/index.html +80 -95
- package/coverage/lcov-report/src/utilities/index.ts.html +32 -32
- package/coverage/lcov-report/src/utilities/redis.ts.html +35 -35
- 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 +32 -32
- package/coverage/lcov-report/src/utilities/rowProcessor/index.ts.html +67 -67
- package/coverage/lcov-report/src/utilities/rowProcessor/map.ts.html +9 -9
- package/coverage/lcov-report/src/utilities/rowProcessor/utils.ts.html +26 -26
- package/coverage/lcov-report/src/utilities/{csvParser.ts.html → schema.ts.html} +173 -233
- package/coverage/lcov-report/src/utilities/scriptRunner.ts.html +8 -8
- 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 +8 -8
- 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 +61 -34
- package/coverage/lcov-report/src/watch.ts.html +20 -20
- package/coverage/lcov-report/src/websocket.ts.html +5 -5
- package/coverage/lcov.info +11919 -11276
- package/dist/api/controllers/application.js +73 -74
- package/dist/api/controllers/cloud.js +1 -1
- package/dist/api/controllers/datasource.js +24 -15
- package/dist/api/controllers/query/index.js +23 -13
- package/dist/api/controllers/row/ExternalRequest.js +12 -3
- package/dist/api/controllers/row/external.js +20 -13
- package/dist/api/controllers/row/internal.js +40 -15
- package/dist/api/controllers/row/utils.js +35 -3
- package/dist/api/controllers/static/index.js +45 -42
- 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 +20 -56
- 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 +2 -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 +2 -1
- 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/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/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 +2 -1
- 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/dynamodb.js +8 -5
- package/dist/integrations/index.js +5 -5
- 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/package.json +9 -7
- 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 +18 -7
- 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/filesystem.js +38 -36
- package/dist/utilities/fileSystem/plugin.js +17 -14
- package/dist/utilities/fileSystem/template.js +7 -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 +10 -8
- package/scripts/dev/manage.js +1 -0
- package/src/api/controllers/application.ts +81 -74
- package/src/api/controllers/cloud.ts +1 -1
- package/src/api/controllers/datasource.ts +33 -25
- package/src/api/controllers/query/index.ts +49 -41
- package/src/api/controllers/row/ExternalRequest.ts +8 -2
- package/src/api/controllers/row/external.ts +24 -14
- package/src/api/controllers/row/internal.ts +42 -18
- package/src/api/controllers/row/utils.ts +40 -2
- package/src/api/controllers/static/index.ts +18 -19
- 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 +22 -35
- 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 +1 -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 -1
- package/src/api/routes/dev.ts +1 -1
- package/src/api/routes/index.ts +2 -0
- 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/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/datasource.spec.ts +35 -1
- package/src/api/routes/tests/misc.spec.js +4 -10
- package/src/api/routes/tests/plugin.spec.ts +10 -10
- package/src/api/routes/tests/table.spec.js +8 -30
- package/src/api/routes/tests/user.spec.js +20 -1
- package/src/api/routes/tests/utilities/TestFunctions.ts +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/logging/index.ts +1 -1
- package/src/automations/tests/loop.spec.ts +45 -0
- package/src/automations/triggers.ts +6 -1
- 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/environment.ts +1 -1
- 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/dynamodb.ts +3 -3
- package/src/integrations/index.ts +4 -4
- 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/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/usageQuotas/tests/syncRows.spec.ts +10 -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/utils/index.ts +16 -0
- package/src/startup.ts +3 -8
- package/src/tests/jestEnv.ts +13 -0
- package/src/tests/jestSetup.ts +0 -14
- package/src/tests/utilities/TestConfiguration.ts +16 -13
- package/src/tests/utilities/structures.ts +65 -2
- package/src/threads/automation.ts +18 -8
- 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/filesystem.ts +7 -5
- package/src/utilities/fileSystem/plugin.ts +3 -4
- package/src/utilities/fileSystem/template.ts +2 -2
- 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.json +2 -1
- package/builder/assets/index.fa480d5b.css +0 -6
- package/dist/utilities/csvParser.js +0 -152
- package/src/utilities/csvParser.ts +0 -161
- package/src/utilities/tests/__snapshots__/csvParser.spec.js.snap +0 -15
- package/src/utilities/tests/csvParser.spec.js +0 -112
|
@@ -27,7 +27,7 @@ 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,
|
|
@@ -38,6 +38,8 @@ import {
|
|
|
38
38
|
Table,
|
|
39
39
|
} from "@budibase/types"
|
|
40
40
|
|
|
41
|
+
const { cleanExportRows } = require("./utils")
|
|
42
|
+
|
|
41
43
|
const CALCULATION_TYPES = {
|
|
42
44
|
SUM: "sum",
|
|
43
45
|
COUNT: "count",
|
|
@@ -357,6 +359,14 @@ export async function search(ctx: Ctx) {
|
|
|
357
359
|
params.version = ctx.version
|
|
358
360
|
params.tableId = tableId
|
|
359
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
|
+
|
|
360
370
|
let response
|
|
361
371
|
if (paginate) {
|
|
362
372
|
response = await paginatedSearch(query, params)
|
|
@@ -370,7 +380,7 @@ export async function search(ctx: Ctx) {
|
|
|
370
380
|
if (tableId === InternalTables.USER_METADATA) {
|
|
371
381
|
response.rows = await getGlobalUsersFromMetadata(response.rows)
|
|
372
382
|
}
|
|
373
|
-
|
|
383
|
+
table = table || (await db.get(tableId))
|
|
374
384
|
response.rows = await outputProcessing(table, response.rows)
|
|
375
385
|
}
|
|
376
386
|
|
|
@@ -389,16 +399,25 @@ export async function exportRows(ctx: Ctx) {
|
|
|
389
399
|
const table = await db.get(ctx.params.tableId)
|
|
390
400
|
const rowIds = ctx.request.body.rows
|
|
391
401
|
let format = ctx.query.format
|
|
392
|
-
const { columns } = ctx.request.body
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
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
|
+
}
|
|
399
418
|
|
|
400
|
-
let result = (await outputProcessing(table, response)) as Row[]
|
|
401
419
|
let rows: Row[] = []
|
|
420
|
+
let schema = table.schema
|
|
402
421
|
|
|
403
422
|
// Filter data to only specified columns if required
|
|
404
423
|
if (columns && columns.length) {
|
|
@@ -412,14 +431,19 @@ export async function exportRows(ctx: Ctx) {
|
|
|
412
431
|
rows = result
|
|
413
432
|
}
|
|
414
433
|
|
|
415
|
-
let
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
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
|
+
}
|
|
423
447
|
}
|
|
424
448
|
|
|
425
449
|
export async function fetchEnrichedRow(ctx: Ctx) {
|
|
@@ -7,7 +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"
|
|
10
11
|
import { Ctx } from "@budibase/types"
|
|
12
|
+
import sdk from "../../../sdk"
|
|
11
13
|
|
|
12
14
|
validateJs.extend(validateJs.validators.datetime, {
|
|
13
15
|
parse: function (value: string) {
|
|
@@ -21,8 +23,7 @@ validateJs.extend(validateJs.validators.datetime, {
|
|
|
21
23
|
|
|
22
24
|
export async function getDatasourceAndQuery(json: any) {
|
|
23
25
|
const datasourceId = json.endpoint.datasourceId
|
|
24
|
-
const
|
|
25
|
-
const datasource = await db.get(datasourceId)
|
|
26
|
+
const datasource = await sdk.datasources.get(datasourceId)
|
|
26
27
|
return makeExternalQuery(datasource, json)
|
|
27
28
|
}
|
|
28
29
|
|
|
@@ -117,3 +118,40 @@ export async function validate({
|
|
|
117
118
|
}
|
|
118
119
|
return { valid: Object.keys(errors).length === 0, errors }
|
|
119
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,20 +1,21 @@
|
|
|
1
1
|
require("svelte/register")
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
const { resolve, join } = require("../../../utilities/centralPath")
|
|
3
|
+
import { resolve, join } from "../../../utilities/centralPath"
|
|
5
4
|
const uuid = require("uuid")
|
|
6
5
|
import { ObjectStoreBuckets } from "../../../constants"
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
import { processString } from "@budibase/string-templates"
|
|
7
|
+
import {
|
|
9
8
|
loadHandlebarsFile,
|
|
10
9
|
NODE_MODULES_PATH,
|
|
11
10
|
TOP_LEVEL_PATH,
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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")
|
|
18
19
|
|
|
19
20
|
async function prepareUpload({ s3Key, bucket, metadata, file }: any) {
|
|
20
21
|
const response = await objectStore.upload({
|
|
@@ -110,7 +111,7 @@ export const serveApp = async function (ctx: any) {
|
|
|
110
111
|
title: appInfo.name,
|
|
111
112
|
production: env.isProd(),
|
|
112
113
|
appId,
|
|
113
|
-
clientLibPath: objectStore.clientLibraryUrl(appId
|
|
114
|
+
clientLibPath: objectStore.clientLibraryUrl(appId!, appInfo.version),
|
|
114
115
|
usedPlugins: plugins,
|
|
115
116
|
})
|
|
116
117
|
|
|
@@ -135,7 +136,7 @@ export const serveBuilderPreview = async function (ctx: any) {
|
|
|
135
136
|
let appId = context.getAppId()
|
|
136
137
|
const previewHbs = loadHandlebarsFile(`${__dirname}/templates/preview.hbs`)
|
|
137
138
|
ctx.body = await processString(previewHbs, {
|
|
138
|
-
clientLibPath: objectStore.clientLibraryUrl(appId
|
|
139
|
+
clientLibPath: objectStore.clientLibraryUrl(appId!, appInfo.version),
|
|
139
140
|
})
|
|
140
141
|
} else {
|
|
141
142
|
// just return the app info for jest to assert on
|
|
@@ -150,13 +151,11 @@ export const serveClientLibrary = async function (ctx: any) {
|
|
|
150
151
|
}
|
|
151
152
|
|
|
152
153
|
export const getSignedUploadURL = async function (ctx: any) {
|
|
153
|
-
const database = context.getAppDB()
|
|
154
|
-
|
|
155
154
|
// Ensure datasource is valid
|
|
156
155
|
let datasource
|
|
157
156
|
try {
|
|
158
157
|
const { datasourceId } = ctx.params
|
|
159
|
-
datasource = await
|
|
158
|
+
datasource = await sdk.datasources.get(datasourceId, { enriched: true })
|
|
160
159
|
if (!datasource) {
|
|
161
160
|
ctx.throw(400, "The specified datasource could not be found")
|
|
162
161
|
}
|
|
@@ -172,8 +171,8 @@ export const getSignedUploadURL = async function (ctx: any) {
|
|
|
172
171
|
// Determine type of datasource and generate signed URL
|
|
173
172
|
let signedUrl
|
|
174
173
|
let publicUrl
|
|
175
|
-
const awsRegion = datasource?.config?.region || "eu-west-1"
|
|
176
|
-
if (datasource
|
|
174
|
+
const awsRegion = (datasource?.config?.region || "eu-west-1") as string
|
|
175
|
+
if (datasource?.source === "S3") {
|
|
177
176
|
const { bucket, key } = ctx.request.body || {}
|
|
178
177
|
if (!bucket || !key) {
|
|
179
178
|
ctx.throw(400, "bucket and key values are required")
|
|
@@ -182,8 +181,8 @@ export const getSignedUploadURL = async function (ctx: any) {
|
|
|
182
181
|
try {
|
|
183
182
|
const s3 = new AWS.S3({
|
|
184
183
|
region: awsRegion,
|
|
185
|
-
accessKeyId: datasource?.config?.accessKeyId,
|
|
186
|
-
secretAccessKey: datasource?.config?.secretAccessKey,
|
|
184
|
+
accessKeyId: datasource?.config?.accessKeyId as string,
|
|
185
|
+
secretAccessKey: datasource?.config?.secretAccessKey as string,
|
|
187
186
|
apiVersion: "2006-03-01",
|
|
188
187
|
signatureVersion: "v4",
|
|
189
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
|
}
|
|
@@ -3,7 +3,7 @@ import { getRowParams, generateTableID } from "../../../db/utils"
|
|
|
3
3
|
import { FieldTypes } from "../../../constants"
|
|
4
4
|
import { TableSaveFunctions, hasTypeChanged, handleDataImport } from "./utils"
|
|
5
5
|
import { context } from "@budibase/backend-core"
|
|
6
|
-
import
|
|
6
|
+
import env from "../../../environment"
|
|
7
7
|
import {
|
|
8
8
|
cleanupAttachments,
|
|
9
9
|
fixAutoColumnSubType,
|
|
@@ -13,7 +13,6 @@ import { Table } from "@budibase/types"
|
|
|
13
13
|
import { quotas } from "@budibase/pro"
|
|
14
14
|
import { isEqual } from "lodash"
|
|
15
15
|
import { cloneDeep } from "lodash/fp"
|
|
16
|
-
import env from "../../../environment"
|
|
17
16
|
import sdk from "../../../sdk"
|
|
18
17
|
|
|
19
18
|
function checkAutoColumns(table: Table, oldTable: Table) {
|
|
@@ -36,7 +35,7 @@ function checkAutoColumns(table: Table, oldTable: Table) {
|
|
|
36
35
|
|
|
37
36
|
export async function save(ctx: any) {
|
|
38
37
|
const db = context.getAppDB()
|
|
39
|
-
const {
|
|
38
|
+
const { rows, ...rest } = ctx.request.body
|
|
40
39
|
let tableToSave = {
|
|
41
40
|
type: "table",
|
|
42
41
|
_id: generateTableID(),
|
|
@@ -62,7 +61,7 @@ export async function save(ctx: any) {
|
|
|
62
61
|
const tableSaveFunctions = new TableSaveFunctions({
|
|
63
62
|
user: ctx.user,
|
|
64
63
|
oldTable,
|
|
65
|
-
|
|
64
|
+
importRows: rows,
|
|
66
65
|
})
|
|
67
66
|
tableToSave = await tableSaveFunctions.before(tableToSave)
|
|
68
67
|
|
|
@@ -164,7 +163,7 @@ export async function destroy(ctx: any) {
|
|
|
164
163
|
await db.remove(tableToDelete._id, tableToDelete._rev)
|
|
165
164
|
|
|
166
165
|
// remove table search index
|
|
167
|
-
if (!isTest() || env.COUCH_DB_URL) {
|
|
166
|
+
if (!env.isTest() || env.COUCH_DB_URL) {
|
|
168
167
|
const currentIndexes = await db.getIndexes()
|
|
169
168
|
const existingIndex = currentIndexes.indexes.find(
|
|
170
169
|
(existing: any) => existing.name === `search:${ctx.params.tableId}`
|
|
@@ -186,7 +185,7 @@ export async function destroy(ctx: any) {
|
|
|
186
185
|
|
|
187
186
|
export async function bulkImport(ctx: any) {
|
|
188
187
|
const table = await sdk.tables.getTable(ctx.params.tableId)
|
|
189
|
-
const {
|
|
190
|
-
await handleDataImport(ctx.user, table,
|
|
188
|
+
const { rows } = ctx.request.body
|
|
189
|
+
await handleDataImport(ctx.user, table, rows)
|
|
191
190
|
return table
|
|
192
191
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { parse, isSchema, isRows } from "../../../utilities/schema"
|
|
2
2
|
import { getRowParams, generateRowID, InternalTables } from "../../../db/utils"
|
|
3
3
|
import { isEqual } from "lodash"
|
|
4
4
|
import { AutoFieldSubTypes, FieldTypes } from "../../../constants"
|
|
@@ -128,24 +128,23 @@ export function importToRows(data: any, table: any, user: any = {}) {
|
|
|
128
128
|
return finalData
|
|
129
129
|
}
|
|
130
130
|
|
|
131
|
-
export async function handleDataImport(user: any, table: any,
|
|
132
|
-
|
|
131
|
+
export async function handleDataImport(user: any, table: any, rows: any) {
|
|
132
|
+
const schema: unknown = table.schema
|
|
133
|
+
|
|
134
|
+
if (!rows || !isRows(rows) || !isSchema(schema)) {
|
|
133
135
|
return table
|
|
134
136
|
}
|
|
135
137
|
|
|
136
138
|
const db = context.getAppDB()
|
|
137
|
-
|
|
138
|
-
const data = await transform({
|
|
139
|
-
...dataImport,
|
|
140
|
-
existingTable: table,
|
|
141
|
-
})
|
|
139
|
+
const data = parse(rows, schema)
|
|
142
140
|
|
|
143
141
|
let finalData: any = importToRows(data, table, user)
|
|
144
142
|
|
|
145
143
|
await quotas.addRows(finalData.length, () => db.bulkDocs(finalData), {
|
|
146
144
|
tableId: table._id,
|
|
147
145
|
})
|
|
148
|
-
|
|
146
|
+
|
|
147
|
+
await events.rows.imported(table, finalData.length)
|
|
149
148
|
return table
|
|
150
149
|
}
|
|
151
150
|
|
|
@@ -210,14 +209,14 @@ class TableSaveFunctions {
|
|
|
210
209
|
db: any
|
|
211
210
|
user: any
|
|
212
211
|
oldTable: any
|
|
213
|
-
|
|
212
|
+
importRows: any
|
|
214
213
|
rows: any
|
|
215
214
|
|
|
216
|
-
constructor({ user, oldTable,
|
|
215
|
+
constructor({ user, oldTable, importRows }: any) {
|
|
217
216
|
this.db = context.getAppDB()
|
|
218
217
|
this.user = user
|
|
219
218
|
this.oldTable = oldTable
|
|
220
|
-
this.
|
|
219
|
+
this.importRows = importRows
|
|
221
220
|
// any rows that need updated
|
|
222
221
|
this.rows = []
|
|
223
222
|
}
|
|
@@ -241,7 +240,7 @@ class TableSaveFunctions {
|
|
|
241
240
|
// after saving
|
|
242
241
|
async after(table: any) {
|
|
243
242
|
table = await handleSearchIndexes(table)
|
|
244
|
-
table = await handleDataImport(this.user, table, this.
|
|
243
|
+
table = await handleDataImport(this.user, table, this.importRows)
|
|
245
244
|
return table
|
|
246
245
|
}
|
|
247
246
|
|
|
@@ -4,19 +4,21 @@ import { getGlobalUsers, getRawGlobalUser } from "../../utilities/global"
|
|
|
4
4
|
import { getFullUser } from "../../utilities/users"
|
|
5
5
|
import {
|
|
6
6
|
context,
|
|
7
|
-
constants,
|
|
8
7
|
roles as rolesCore,
|
|
9
8
|
db as dbCore,
|
|
10
9
|
} from "@budibase/backend-core"
|
|
11
|
-
import { BBContext, User } from "@budibase/types"
|
|
10
|
+
import { BBContext, Ctx, SyncUserRequest, User } from "@budibase/types"
|
|
12
11
|
import sdk from "../../sdk"
|
|
13
12
|
|
|
14
|
-
export async function syncUser(ctx:
|
|
13
|
+
export async function syncUser(ctx: Ctx<SyncUserRequest>) {
|
|
15
14
|
let deleting = false,
|
|
16
15
|
user: User | any
|
|
17
16
|
const userId = ctx.params.id
|
|
17
|
+
|
|
18
|
+
const previousUser = ctx.request.body?.previousUser
|
|
19
|
+
|
|
18
20
|
try {
|
|
19
|
-
user = await getRawGlobalUser(userId)
|
|
21
|
+
user = (await getRawGlobalUser(userId)) as User
|
|
20
22
|
} catch (err: any) {
|
|
21
23
|
if (err && err.status === 404) {
|
|
22
24
|
user = {}
|
|
@@ -25,6 +27,11 @@ export async function syncUser(ctx: BBContext) {
|
|
|
25
27
|
throw err
|
|
26
28
|
}
|
|
27
29
|
}
|
|
30
|
+
|
|
31
|
+
let previousApps = previousUser
|
|
32
|
+
? Object.keys(previousUser.roles).map(appId => appId)
|
|
33
|
+
: []
|
|
34
|
+
|
|
28
35
|
const roles = deleting ? {} : user.roles
|
|
29
36
|
// remove props which aren't useful to metadata
|
|
30
37
|
delete user.password
|
|
@@ -40,8 +47,9 @@ export async function syncUser(ctx: BBContext) {
|
|
|
40
47
|
.filter(entry => entry[1] !== rolesCore.BUILTIN_ROLE_IDS.PUBLIC)
|
|
41
48
|
.map(([appId]) => appId)
|
|
42
49
|
}
|
|
43
|
-
for (let prodAppId of prodAppIds) {
|
|
50
|
+
for (let prodAppId of new Set([...prodAppIds, ...previousApps])) {
|
|
44
51
|
const roleId = roles[prodAppId]
|
|
52
|
+
const deleteFromApp = !roleId
|
|
45
53
|
const devAppId = dbCore.getDevelopmentAppID(prodAppId)
|
|
46
54
|
for (let appId of [prodAppId, devAppId]) {
|
|
47
55
|
if (!(await dbCore.dbExists(appId))) {
|
|
@@ -54,24 +62,24 @@ export async function syncUser(ctx: BBContext) {
|
|
|
54
62
|
try {
|
|
55
63
|
metadata = await db.get(metadataId)
|
|
56
64
|
} catch (err) {
|
|
57
|
-
if (
|
|
65
|
+
if (deleteFromApp) {
|
|
58
66
|
return
|
|
59
67
|
}
|
|
60
68
|
metadata = {
|
|
61
69
|
tableId: InternalTables.USER_METADATA,
|
|
62
70
|
}
|
|
63
71
|
}
|
|
72
|
+
|
|
73
|
+
if (deleteFromApp) {
|
|
74
|
+
await db.remove(metadata)
|
|
75
|
+
return
|
|
76
|
+
}
|
|
77
|
+
|
|
64
78
|
// assign the roleId for the metadata doc
|
|
65
79
|
if (roleId) {
|
|
66
80
|
metadata.roleId = roleId
|
|
67
81
|
}
|
|
68
|
-
let combined =
|
|
69
|
-
? sdk.users.combineMetadataAndUser(user, metadata)
|
|
70
|
-
: {
|
|
71
|
-
...metadata,
|
|
72
|
-
status: constants.UserStatus.INACTIVE,
|
|
73
|
-
metadata: rolesCore.BUILTIN_ROLE_IDS.PUBLIC,
|
|
74
|
-
}
|
|
82
|
+
let combined = sdk.users.combineMetadataAndUser(user, metadata)
|
|
75
83
|
// if its null then there was no updates required
|
|
76
84
|
if (combined) {
|
|
77
85
|
await db.put(combined)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Row } from "@budibase/types"
|
|
1
|
+
import { Row, TableSchema } from "@budibase/types"
|
|
2
2
|
|
|
3
3
|
export function csv(headers: string[], rows: Row[]) {
|
|
4
4
|
let csv = headers.map(key => `"${key}"`).join(",")
|
|
@@ -18,11 +18,26 @@ export function csv(headers: string[], rows: Row[]) {
|
|
|
18
18
|
return csv
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
export function json(
|
|
21
|
+
export function json(rows: Row[]) {
|
|
22
22
|
return JSON.stringify(rows, undefined, 2)
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
export
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
export function jsonWithSchema(schema: TableSchema, rows: Row[]) {
|
|
26
|
+
const newSchema: TableSchema = {}
|
|
27
|
+
Object.values(schema).forEach(column => {
|
|
28
|
+
if (!column.autocolumn) {
|
|
29
|
+
newSchema[column.name] = column
|
|
30
|
+
}
|
|
31
|
+
})
|
|
32
|
+
return JSON.stringify({ schema: newSchema, rows }, undefined, 2)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export enum Format {
|
|
36
|
+
CSV = "csv",
|
|
37
|
+
JSON = "json",
|
|
38
|
+
JSON_WITH_SCHEMA = "jsonWithSchema",
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export function isFormat(format: any): format is Format {
|
|
42
|
+
return Object.values(Format).includes(format as Format)
|
|
28
43
|
}
|