@budibase/server 2.6.19-alpha.4 → 2.6.19-alpha.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.dockerignore +7 -6
- package/Dockerfile +16 -8
- package/builder/assets/index.49c9e712.css +6 -0
- package/builder/assets/index.e3ce193c.js +1870 -0
- package/builder/index.html +2 -2
- package/client/manifest.json +5229 -0
- package/dist/automation.js +32478 -0
- package/dist/automation.js.map +7 -0
- package/dist/index.js +44909 -13
- package/dist/index.js.map +7 -0
- package/dist/query.js +24402 -0
- package/dist/query.js.map +7 -0
- package/jest.config.ts +3 -0
- package/nodemon.json +1 -1
- package/package.json +32 -13
- package/pm2.config.js +1 -1
- package/scripts/build.js +48 -0
- package/src/api/controllers/application.ts +21 -22
- package/src/api/controllers/automation.ts +37 -9
- package/src/api/controllers/datasource.ts +4 -0
- package/src/api/controllers/deploy/index.ts +1 -0
- package/src/api/controllers/row/index.ts +15 -22
- package/src/api/controllers/row/internal.ts +1 -1
- package/src/api/controllers/row/utils.ts +12 -0
- package/src/api/controllers/static/index.ts +3 -3
- package/src/api/controllers/table/index.ts +3 -0
- package/src/api/controllers/table/internal.ts +2 -6
- package/src/api/controllers/table/utils.ts +32 -1
- package/src/api/controllers/view/index.ts +5 -5
- package/src/api/controllers/webhook.ts +33 -9
- package/src/api/routes/application.ts +5 -0
- package/src/api/routes/automation.ts +0 -1
- package/src/api/routes/static.ts +3 -1
- package/src/api/routes/tests/{automation.spec.js → automation.spec.ts} +106 -31
- package/src/api/routes/tests/{webhook.spec.js → webhook.spec.ts} +33 -11
- package/src/app.ts +0 -1
- package/src/automations/actions.ts +8 -0
- package/src/automations/logging/index.ts +21 -0
- package/src/automations/steps/bash.ts +4 -0
- package/src/automations/steps/collect.ts +58 -0
- package/src/automations/steps/createRow.ts +4 -0
- package/src/automations/steps/delay.ts +1 -0
- package/src/automations/steps/deleteRow.ts +4 -0
- package/src/automations/steps/discord.ts +4 -0
- package/src/automations/steps/executeQuery.ts +4 -0
- package/src/automations/steps/executeScript.ts +4 -0
- package/src/automations/steps/filter.ts +1 -0
- package/src/automations/steps/loop.ts +1 -0
- package/src/automations/steps/make.ts +4 -0
- package/src/automations/steps/openai.ts +106 -0
- package/src/automations/steps/outgoingWebhook.ts +4 -0
- package/src/automations/steps/queryRows.ts +4 -0
- package/src/automations/steps/sendSmtpEmail.ts +4 -0
- package/src/automations/steps/serverLog.ts +4 -0
- package/src/automations/steps/slack.ts +4 -0
- package/src/automations/steps/updateRow.ts +4 -0
- package/src/automations/steps/zapier.ts +4 -0
- package/src/automations/tests/openai.spec.ts +86 -0
- package/src/automations/triggers.ts +3 -2
- package/src/constants/index.ts +17 -16
- package/src/db/inMemoryView.ts +1 -0
- package/src/environment.ts +3 -0
- package/src/integrations/airtable.ts +3 -1
- package/src/integrations/arangodb.ts +3 -1
- package/src/integrations/base/sqlTable.ts +0 -1
- package/src/integrations/couchdb.ts +3 -1
- package/src/integrations/dynamodb.ts +3 -1
- package/src/integrations/elasticsearch.ts +3 -1
- package/src/integrations/firebase.ts +3 -1
- package/src/integrations/googlesheets.ts +4 -4
- package/src/integrations/microsoftSqlServer.ts +4 -4
- package/src/integrations/mongodb.ts +3 -1
- package/src/integrations/mysql.ts +4 -4
- package/src/integrations/oracle.ts +4 -4
- package/src/integrations/postgres.ts +4 -4
- package/src/integrations/redis.ts +3 -1
- package/src/integrations/s3.ts +3 -1
- package/src/integrations/snowflake.ts +3 -1
- package/src/middleware/builder.ts +26 -18
- package/src/sdk/app/automations/index.ts +2 -0
- package/src/sdk/app/automations/utils.ts +7 -0
- package/src/startup.ts +2 -0
- package/src/tests/utilities/TestConfiguration.ts +4 -2
- package/src/tests/utilities/structures.ts +42 -0
- package/src/threads/automation.ts +82 -22
- package/src/threads/index.ts +9 -3
- package/src/threads/utils.ts +2 -0
- package/src/utilities/fileSystem/app.ts +14 -4
- package/src/utilities/fileSystem/clientLibrary.ts +8 -3
- package/src/utilities/fileSystem/filesystem.ts +3 -1
- package/src/utilities/redis.ts +18 -1
- package/src/utilities/rowProcessor/map.ts +1 -1
- package/src/websockets/builder.ts +74 -0
- package/src/websockets/client.ts +2 -2
- package/src/websockets/grid.ts +40 -44
- package/src/websockets/index.ts +5 -2
- package/src/websockets/websocket.ts +198 -7
- package/tsconfig.build.json +9 -1
- package/tsconfig.json +1 -14
- package/builder/assets/index.07382a47.css +0 -6
- package/builder/assets/index.3d5c50fb.js +0 -1786
- package/dist/api/controllers/analytics.js +0 -46
- package/dist/api/controllers/apikeys.js +0 -72
- package/dist/api/controllers/application.js +0 -574
- package/dist/api/controllers/auth.js +0 -80
- package/dist/api/controllers/automation.js +0 -303
- package/dist/api/controllers/backup.js +0 -37
- package/dist/api/controllers/component.js +0 -59
- package/dist/api/controllers/datasource.js +0 -352
- package/dist/api/controllers/deploy/Deployment.js +0 -53
- package/dist/api/controllers/deploy/index.js +0 -198
- package/dist/api/controllers/dev.js +0 -146
- package/dist/api/controllers/integration.js +0 -28
- package/dist/api/controllers/layout.js +0 -49
- package/dist/api/controllers/metadata.js +0 -63
- package/dist/api/controllers/migrations.js +0 -29
- package/dist/api/controllers/ops.js +0 -40
- package/dist/api/controllers/permission.js +0 -162
- package/dist/api/controllers/plugin/file.js +0 -24
- package/dist/api/controllers/plugin/github.js +0 -69
- package/dist/api/controllers/plugin/index.js +0 -112
- package/dist/api/controllers/plugin/npm.js +0 -58
- package/dist/api/controllers/plugin/uploaders.js +0 -11
- package/dist/api/controllers/plugin/url.js +0 -24
- package/dist/api/controllers/plugin/utils.js +0 -27
- package/dist/api/controllers/public/applications.js +0 -146
- package/dist/api/controllers/public/mapping/applications.js +0 -29
- package/dist/api/controllers/public/mapping/index.js +0 -11
- package/dist/api/controllers/public/mapping/queries.js +0 -36
- package/dist/api/controllers/public/mapping/rows.js +0 -24
- package/dist/api/controllers/public/mapping/tables.js +0 -23
- package/dist/api/controllers/public/mapping/types.js +0 -2
- package/dist/api/controllers/public/mapping/users.js +0 -29
- package/dist/api/controllers/public/metrics.js +0 -113
- package/dist/api/controllers/public/queries.js +0 -58
- package/dist/api/controllers/public/rows.js +0 -120
- package/dist/api/controllers/public/tables.js +0 -95
- package/dist/api/controllers/public/users.js +0 -93
- package/dist/api/controllers/public/utils.js +0 -56
- package/dist/api/controllers/query/import/index.js +0 -87
- package/dist/api/controllers/query/import/sources/base/index.js +0 -75
- package/dist/api/controllers/query/import/sources/base/openapi.js +0 -42
- package/dist/api/controllers/query/import/sources/curl.js +0 -99
- package/dist/api/controllers/query/import/sources/openapi2.js +0 -145
- package/dist/api/controllers/query/import/sources/openapi3.js +0 -177
- package/dist/api/controllers/query/import/sources/tests/openapi2/data/crud/crud.json +0 -253
- package/dist/api/controllers/query/import/sources/tests/openapi2/data/petstore/petstore.json +0 -1054
- package/dist/api/controllers/query/import/sources/tests/openapi3/data/crud/crud.json +0 -253
- package/dist/api/controllers/query/import/sources/tests/openapi3/data/petstore/petstore.json +0 -1225
- package/dist/api/controllers/query/index.js +0 -299
- package/dist/api/controllers/query/validation.js +0 -53
- package/dist/api/controllers/role.js +0 -109
- package/dist/api/controllers/routing.js +0 -105
- package/dist/api/controllers/row/ExternalRequest.js +0 -683
- package/dist/api/controllers/row/external.js +0 -339
- package/dist/api/controllers/row/index.js +0 -203
- package/dist/api/controllers/row/internal.js +0 -509
- package/dist/api/controllers/row/internalSearch.js +0 -28
- package/dist/api/controllers/row/staticFormula.js +0 -165
- package/dist/api/controllers/row/utils.js +0 -183
- package/dist/api/controllers/screen.js +0 -110
- package/dist/api/controllers/script.js +0 -30
- package/dist/api/controllers/static/index.js +0 -268
- package/dist/api/controllers/table/bulkFormula.js +0 -173
- package/dist/api/controllers/table/external.js +0 -279
- package/dist/api/controllers/table/index.js +0 -179
- package/dist/api/controllers/table/internal.js +0 -197
- package/dist/api/controllers/table/utils.js +0 -379
- package/dist/api/controllers/templates.js +0 -56
- package/dist/api/controllers/user.js +0 -124
- package/dist/api/controllers/view/exporters.js +0 -46
- package/dist/api/controllers/view/index.js +0 -193
- package/dist/api/controllers/view/utils.js +0 -177
- package/dist/api/controllers/view/viewBuilder.js +0 -158
- package/dist/api/controllers/webhook.js +0 -134
- package/dist/api/index.js +0 -55
- package/dist/api/routes/analytics.js +0 -34
- package/dist/api/routes/apikeys.js +0 -37
- package/dist/api/routes/application.js +0 -48
- package/dist/api/routes/auth.js +0 -33
- package/dist/api/routes/automation.js +0 -50
- package/dist/api/routes/backup.js +0 -35
- package/dist/api/routes/component.js +0 -35
- package/dist/api/routes/datasource.js +0 -45
- package/dist/api/routes/deploy.js +0 -37
- package/dist/api/routes/dev.js +0 -49
- package/dist/api/routes/index.js +0 -75
- package/dist/api/routes/integration.js +0 -37
- package/dist/api/routes/layout.js +0 -37
- package/dist/api/routes/metadata.js +0 -40
- package/dist/api/routes/migrations.js +0 -36
- package/dist/api/routes/ops.js +0 -52
- package/dist/api/routes/permission.js +0 -44
- package/dist/api/routes/plugin.js +0 -39
- package/dist/api/routes/public/applications.js +0 -174
- package/dist/api/routes/public/index.js +0 -140
- package/dist/api/routes/public/metrics.js +0 -30
- package/dist/api/routes/public/middleware/mapper.js +0 -97
- package/dist/api/routes/public/queries.js +0 -72
- package/dist/api/routes/public/rows.js +0 -158
- package/dist/api/routes/public/tables.js +0 -152
- package/dist/api/routes/public/users.js +0 -135
- package/dist/api/routes/public/utils/Endpoint.js +0 -36
- package/dist/api/routes/query.js +0 -47
- package/dist/api/routes/role.js +0 -40
- package/dist/api/routes/routing.js +0 -39
- package/dist/api/routes/row.js +0 -239
- package/dist/api/routes/screen.js +0 -39
- package/dist/api/routes/script.js +0 -35
- package/dist/api/routes/static.js +0 -80
- package/dist/api/routes/table.js +0 -163
- package/dist/api/routes/templates.js +0 -37
- package/dist/api/routes/user.js +0 -43
- package/dist/api/routes/utils/validators.js +0 -238
- package/dist/api/routes/view.js +0 -42
- package/dist/api/routes/webhook.js +0 -43
- package/dist/app.js +0 -132
- package/dist/automations/actions.js +0 -137
- package/dist/automations/automationUtils.js +0 -173
- package/dist/automations/bullboard.js +0 -71
- package/dist/automations/index.js +0 -43
- package/dist/automations/logging/index.js +0 -53
- package/dist/automations/steps/bash.js +0 -111
- package/dist/automations/steps/createRow.js +0 -108
- package/dist/automations/steps/delay.js +0 -53
- package/dist/automations/steps/deleteRow.js +0 -96
- package/dist/automations/steps/discord.js +0 -116
- package/dist/automations/steps/executeQuery.js +0 -134
- package/dist/automations/steps/executeScript.js +0 -106
- package/dist/automations/steps/filter.js +0 -112
- package/dist/automations/steps/loop.js +0 -54
- package/dist/automations/steps/make.js +0 -134
- package/dist/automations/steps/outgoingWebhook.js +0 -166
- package/dist/automations/steps/queryRows.js +0 -216
- package/dist/automations/steps/sendSmtpEmail.js +0 -115
- package/dist/automations/steps/serverLog.js +0 -65
- package/dist/automations/steps/slack.js +0 -98
- package/dist/automations/steps/updateRow.js +0 -144
- package/dist/automations/steps/utils.js +0 -56
- package/dist/automations/steps/zapier.js +0 -130
- package/dist/automations/triggerInfo/app.js +0 -36
- package/dist/automations/triggerInfo/cron.js +0 -35
- package/dist/automations/triggerInfo/index.js +0 -40
- package/dist/automations/triggerInfo/rowDeleted.js +0 -36
- package/dist/automations/triggerInfo/rowSaved.js +0 -44
- package/dist/automations/triggerInfo/rowUpdated.js +0 -44
- package/dist/automations/triggerInfo/webhook.js +0 -40
- package/dist/automations/triggers.js +0 -181
- package/dist/automations/utils.js +0 -275
- package/dist/constants/definitions.js +0 -2
- package/dist/constants/index.js +0 -181
- package/dist/constants/layouts.js +0 -148
- package/dist/constants/screens.js +0 -51
- package/dist/db/defaultData/datasource_bb_default.js +0 -574
- package/dist/db/defaultData/employeeImport.js +0 -155
- package/dist/db/defaultData/expensesImport.js +0 -117
- package/dist/db/defaultData/inventoryImport.js +0 -109
- package/dist/db/defaultData/jobsImport.js +0 -152
- package/dist/db/dynamoClient.js +0 -124
- package/dist/db/inMemoryView.js +0 -62
- package/dist/db/index.js +0 -43
- package/dist/db/linkedRows/LinkController.js +0 -392
- package/dist/db/linkedRows/LinkDocument.js +0 -33
- package/dist/db/linkedRows/index.js +0 -206
- package/dist/db/linkedRows/linkUtils.js +0 -131
- package/dist/db/newid.js +0 -7
- package/dist/db/utils.js +0 -248
- package/dist/db/views/staticViews.js +0 -144
- package/dist/ddApm.js +0 -11
- package/dist/definitions/automations.js +0 -8
- package/dist/definitions/common.js +0 -2
- package/dist/definitions/datasource.js +0 -7
- package/dist/definitions/openapi.js +0 -6
- package/dist/environment.js +0 -109
- package/dist/events/AutomationEmitter.js +0 -53
- package/dist/events/BudibaseEmitter.js +0 -25
- package/dist/events/docUpdates/index.js +0 -17
- package/dist/events/docUpdates/processors.js +0 -18
- package/dist/events/docUpdates/syncUsers.js +0 -49
- package/dist/events/index.js +0 -11
- package/dist/events/utils.js +0 -43
- package/dist/integrations/airtable.js +0 -173
- package/dist/integrations/arangodb.js +0 -119
- package/dist/integrations/base/query.js +0 -32
- package/dist/integrations/base/sql.js +0 -600
- package/dist/integrations/base/sqlTable.js +0 -167
- package/dist/integrations/base/types.js +0 -2
- package/dist/integrations/couchdb.js +0 -140
- package/dist/integrations/dynamodb.js +0 -210
- package/dist/integrations/elasticsearch.js +0 -201
- package/dist/integrations/firebase.js +0 -189
- package/dist/integrations/googlesheets.js +0 -493
- package/dist/integrations/index.js +0 -138
- package/dist/integrations/microsoftSqlServer.js +0 -308
- package/dist/integrations/mongodb.js +0 -630
- package/dist/integrations/mysql.js +0 -291
- package/dist/integrations/oracle.js +0 -415
- package/dist/integrations/postgres.js +0 -335
- package/dist/integrations/queries/sql.js +0 -84
- package/dist/integrations/redis.js +0 -187
- package/dist/integrations/rest.js +0 -400
- package/dist/integrations/s3.js +0 -256
- package/dist/integrations/snowflake.js +0 -114
- package/dist/integrations/utils.js +0 -295
- package/dist/middleware/appInfo.js +0 -22
- package/dist/middleware/authorized.js +0 -112
- package/dist/middleware/builder.js +0 -93
- package/dist/middleware/currentapp.js +0 -103
- package/dist/middleware/joi-validator.js +0 -43
- package/dist/middleware/publicApi.js +0 -25
- package/dist/middleware/resourceId.js +0 -59
- package/dist/middleware/selfhost.js +0 -24
- package/dist/middleware/utils.js +0 -8
- package/dist/migrations/functions/appUrls.js +0 -42
- package/dist/migrations/functions/backfill/app/automations.js +0 -31
- package/dist/migrations/functions/backfill/app/datasources.js +0 -28
- package/dist/migrations/functions/backfill/app/layouts.js +0 -33
- package/dist/migrations/functions/backfill/app/queries.js +0 -49
- package/dist/migrations/functions/backfill/app/roles.js +0 -28
- package/dist/migrations/functions/backfill/app/screens.js +0 -28
- package/dist/migrations/functions/backfill/app/tables.js +0 -37
- package/dist/migrations/functions/backfill/app.js +0 -176
- package/dist/migrations/functions/backfill/global/configs.js +0 -67
- package/dist/migrations/functions/backfill/global/quotas.js +0 -60
- package/dist/migrations/functions/backfill/global/users.js +0 -50
- package/dist/migrations/functions/backfill/global.js +0 -205
- package/dist/migrations/functions/backfill/index.js +0 -32
- package/dist/migrations/functions/backfill/installation.js +0 -80
- package/dist/migrations/functions/syncQuotas.js +0 -52
- package/dist/migrations/functions/tableSettings.js +0 -130
- package/dist/migrations/functions/usageQuotas/index.js +0 -16
- package/dist/migrations/functions/usageQuotas/syncApps.js +0 -24
- package/dist/migrations/functions/usageQuotas/syncPlugins.js +0 -23
- package/dist/migrations/functions/usageQuotas/syncRows.js +0 -33
- package/dist/migrations/functions/usageQuotas/syncUsers.js +0 -21
- package/dist/migrations/functions/userEmailViewCasing.js +0 -24
- package/dist/migrations/index.js +0 -111
- package/dist/migrations/tests/helpers.js +0 -72
- package/dist/migrations/tests/structures.js +0 -37
- package/dist/sdk/app/applications/index.js +0 -28
- package/dist/sdk/app/applications/sync.js +0 -164
- package/dist/sdk/app/applications/utils.js +0 -21
- package/dist/sdk/app/automations/index.js +0 -29
- package/dist/sdk/app/automations/webhook.js +0 -54
- package/dist/sdk/app/backups/constants.js +0 -6
- package/dist/sdk/app/backups/exports.js +0 -160
- package/dist/sdk/app/backups/imports.js +0 -170
- package/dist/sdk/app/backups/index.js +0 -29
- package/dist/sdk/app/backups/statistics.js +0 -73
- package/dist/sdk/app/datasources/datasources.js +0 -173
- package/dist/sdk/app/datasources/index.js +0 -27
- package/dist/sdk/app/queries/index.js +0 -27
- package/dist/sdk/app/queries/queries.js +0 -60
- package/dist/sdk/app/rows/attachments.js +0 -61
- package/dist/sdk/app/rows/index.js +0 -28
- package/dist/sdk/app/rows/rows.js +0 -30
- package/dist/sdk/app/tables/index.js +0 -65
- package/dist/sdk/index.js +0 -27
- package/dist/sdk/plugins/index.js +0 -27
- package/dist/sdk/plugins/plugins.js +0 -53
- package/dist/sdk/users/index.js +0 -27
- package/dist/sdk/users/utils.js +0 -87
- package/dist/sdk/utils/index.js +0 -29
- package/dist/startup.js +0 -158
- package/dist/threads/automation.js +0 -450
- package/dist/threads/definitions.js +0 -2
- package/dist/threads/index.js +0 -140
- package/dist/threads/query.js +0 -265
- package/dist/threads/utils.js +0 -120
- package/dist/tsconfig.build.tsbuildinfo +0 -1
- package/dist/utilities/appDirectoryTemplate/package.json +0 -10
- package/dist/utilities/budibaseDir.js +0 -5
- package/dist/utilities/centralPath.js +0 -27
- package/dist/utilities/csv.js +0 -33
- package/dist/utilities/fileSystem/app.js +0 -88
- package/dist/utilities/fileSystem/clientLibrary.js +0 -138
- package/dist/utilities/fileSystem/filesystem.js +0 -180
- package/dist/utilities/fileSystem/index.js +0 -21
- package/dist/utilities/fileSystem/plugin.js +0 -76
- package/dist/utilities/fileSystem/processor.js +0 -34
- package/dist/utilities/fileSystem/template.js +0 -47
- package/dist/utilities/global.js +0 -149
- package/dist/utilities/index.js +0 -143
- package/dist/utilities/redis.js +0 -117
- package/dist/utilities/retry.js +0 -30
- package/dist/utilities/routing/index.js +0 -39
- package/dist/utilities/rowProcessor/index.js +0 -282
- package/dist/utilities/rowProcessor/map.js +0 -116
- package/dist/utilities/rowProcessor/utils.js +0 -87
- package/dist/utilities/schema.js +0 -112
- package/dist/utilities/scriptRunner.js +0 -26
- package/dist/utilities/security.js +0 -57
- package/dist/utilities/statusCodes.js +0 -9
- package/dist/utilities/usageQuota/rows.js +0 -88
- package/dist/utilities/usageQuota/usageQuoteReset.js +0 -16
- package/dist/utilities/users.js +0 -57
- package/dist/utilities/workerRequests.js +0 -171
- package/dist/watch.js +0 -53
- package/dist/websockets/client.js +0 -14
- package/dist/websockets/grid.js +0 -60
- package/dist/websockets/index.js +0 -17
- package/dist/websockets/websocket.js +0 -78
- /package/dist/{api/controllers/static/templates/BudibaseApp.svelte → BudibaseApp-Y5NZEDTC.svelte} +0 -0
- /package/dist/{api/controllers/static/templates/app.hbs → app.hbs} +0 -0
- /package/dist/{api/controllers/static/templates/preview.hbs → preview.hbs} +0 -0
|
@@ -1,335 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
const types_1 = require("@budibase/types");
|
|
16
|
-
const utils_1 = require("./utils");
|
|
17
|
-
const sql_1 = __importDefault(require("./base/sql"));
|
|
18
|
-
const utilities_1 = require("../utilities");
|
|
19
|
-
const pg_1 = require("pg");
|
|
20
|
-
// Return "date" and "timestamp" types as plain strings.
|
|
21
|
-
// This lets us reference the original stored timezone.
|
|
22
|
-
// types is undefined when running in a test env for some reason.
|
|
23
|
-
if (pg_1.types) {
|
|
24
|
-
pg_1.types.setTypeParser(1114, (val) => val); // timestamp
|
|
25
|
-
pg_1.types.setTypeParser(1082, (val) => val); // date
|
|
26
|
-
pg_1.types.setTypeParser(1184, (val) => val); // timestampz
|
|
27
|
-
}
|
|
28
|
-
const JSON_REGEX = /'{.*}'::json/s;
|
|
29
|
-
const SCHEMA = {
|
|
30
|
-
docs: "https://node-postgres.com",
|
|
31
|
-
plus: true,
|
|
32
|
-
friendlyName: "PostgreSQL",
|
|
33
|
-
type: "Relational",
|
|
34
|
-
description: "PostgreSQL, also known as Postgres, is a free and open-source relational database management system emphasizing extensibility and SQL compliance.",
|
|
35
|
-
features: [
|
|
36
|
-
types_1.DatasourceFeature.CONNECTION_CHECKING,
|
|
37
|
-
types_1.DatasourceFeature.FETCH_TABLE_NAMES,
|
|
38
|
-
],
|
|
39
|
-
datasource: {
|
|
40
|
-
host: {
|
|
41
|
-
type: types_1.DatasourceFieldType.STRING,
|
|
42
|
-
default: "localhost",
|
|
43
|
-
required: true,
|
|
44
|
-
},
|
|
45
|
-
port: {
|
|
46
|
-
type: types_1.DatasourceFieldType.NUMBER,
|
|
47
|
-
required: true,
|
|
48
|
-
default: 5432,
|
|
49
|
-
},
|
|
50
|
-
database: {
|
|
51
|
-
type: types_1.DatasourceFieldType.STRING,
|
|
52
|
-
default: "postgres",
|
|
53
|
-
required: true,
|
|
54
|
-
},
|
|
55
|
-
user: {
|
|
56
|
-
type: types_1.DatasourceFieldType.STRING,
|
|
57
|
-
default: "root",
|
|
58
|
-
required: true,
|
|
59
|
-
},
|
|
60
|
-
password: {
|
|
61
|
-
type: types_1.DatasourceFieldType.PASSWORD,
|
|
62
|
-
default: "root",
|
|
63
|
-
required: true,
|
|
64
|
-
},
|
|
65
|
-
schema: {
|
|
66
|
-
type: types_1.DatasourceFieldType.STRING,
|
|
67
|
-
default: "public",
|
|
68
|
-
required: true,
|
|
69
|
-
},
|
|
70
|
-
ssl: {
|
|
71
|
-
type: types_1.DatasourceFieldType.BOOLEAN,
|
|
72
|
-
default: false,
|
|
73
|
-
required: false,
|
|
74
|
-
},
|
|
75
|
-
rejectUnauthorized: {
|
|
76
|
-
type: types_1.DatasourceFieldType.BOOLEAN,
|
|
77
|
-
default: false,
|
|
78
|
-
required: false,
|
|
79
|
-
},
|
|
80
|
-
ca: {
|
|
81
|
-
type: types_1.DatasourceFieldType.LONGFORM,
|
|
82
|
-
default: false,
|
|
83
|
-
required: false,
|
|
84
|
-
},
|
|
85
|
-
},
|
|
86
|
-
query: {
|
|
87
|
-
create: {
|
|
88
|
-
type: types_1.QueryType.SQL,
|
|
89
|
-
},
|
|
90
|
-
read: {
|
|
91
|
-
type: types_1.QueryType.SQL,
|
|
92
|
-
},
|
|
93
|
-
update: {
|
|
94
|
-
type: types_1.QueryType.SQL,
|
|
95
|
-
},
|
|
96
|
-
delete: {
|
|
97
|
-
type: types_1.QueryType.SQL,
|
|
98
|
-
},
|
|
99
|
-
},
|
|
100
|
-
};
|
|
101
|
-
class PostgresIntegration extends sql_1.default {
|
|
102
|
-
constructor(config) {
|
|
103
|
-
super(utils_1.SqlClient.POSTGRES);
|
|
104
|
-
this.index = 1;
|
|
105
|
-
this.tables = {};
|
|
106
|
-
this.schemaErrors = {};
|
|
107
|
-
this.PRIMARY_KEYS_SQL = () => `
|
|
108
|
-
SELECT pg_namespace.nspname table_schema
|
|
109
|
-
, pg_class.relname table_name
|
|
110
|
-
, pg_attribute.attname primary_key
|
|
111
|
-
FROM pg_class
|
|
112
|
-
JOIN pg_index ON pg_class.oid = pg_index.indrelid AND pg_index.indisprimary
|
|
113
|
-
JOIN pg_attribute ON pg_attribute.attrelid = pg_class.oid AND pg_attribute.attnum = ANY(pg_index.indkey)
|
|
114
|
-
JOIN pg_namespace ON pg_namespace.oid = pg_class.relnamespace
|
|
115
|
-
WHERE pg_namespace.nspname = '${this.config.schema}';
|
|
116
|
-
`;
|
|
117
|
-
this.config = config;
|
|
118
|
-
let newConfig = Object.assign(Object.assign({}, this.config), { ssl: this.config.ssl
|
|
119
|
-
? {
|
|
120
|
-
rejectUnauthorized: this.config.rejectUnauthorized,
|
|
121
|
-
ca: this.config.ca,
|
|
122
|
-
}
|
|
123
|
-
: undefined });
|
|
124
|
-
this.client = new pg_1.Client(newConfig);
|
|
125
|
-
this.open = false;
|
|
126
|
-
}
|
|
127
|
-
testConnection() {
|
|
128
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
129
|
-
const response = {
|
|
130
|
-
connected: false,
|
|
131
|
-
};
|
|
132
|
-
try {
|
|
133
|
-
yield this.openConnection();
|
|
134
|
-
response.connected = true;
|
|
135
|
-
}
|
|
136
|
-
catch (e) {
|
|
137
|
-
response.error = e.message;
|
|
138
|
-
}
|
|
139
|
-
finally {
|
|
140
|
-
yield this.closeConnection();
|
|
141
|
-
}
|
|
142
|
-
return response;
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
getBindingIdentifier() {
|
|
146
|
-
return `$${this.index++}`;
|
|
147
|
-
}
|
|
148
|
-
getStringConcat(parts) {
|
|
149
|
-
return parts.join(" || ");
|
|
150
|
-
}
|
|
151
|
-
openConnection() {
|
|
152
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
153
|
-
yield this.client.connect();
|
|
154
|
-
if (!this.config.schema) {
|
|
155
|
-
this.config.schema = "public";
|
|
156
|
-
}
|
|
157
|
-
yield this.client.query(`SET search_path TO ${this.config.schema}`);
|
|
158
|
-
this.COLUMNS_SQL = `select * from information_schema.columns where table_schema = '${this.config.schema}'`;
|
|
159
|
-
this.open = true;
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
closeConnection() {
|
|
163
|
-
const pg = this;
|
|
164
|
-
return new Promise((resolve, reject) => {
|
|
165
|
-
this.client.end((err) => {
|
|
166
|
-
pg.open = false;
|
|
167
|
-
if (err) {
|
|
168
|
-
reject(err);
|
|
169
|
-
}
|
|
170
|
-
else {
|
|
171
|
-
resolve();
|
|
172
|
-
}
|
|
173
|
-
});
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
|
-
internalQuery(query, close = true) {
|
|
177
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
178
|
-
if (!this.open) {
|
|
179
|
-
yield this.openConnection();
|
|
180
|
-
}
|
|
181
|
-
const client = this.client;
|
|
182
|
-
this.index = 1;
|
|
183
|
-
// need to handle a specific issue with json data types in postgres,
|
|
184
|
-
// new lines inside the JSON data will break it
|
|
185
|
-
if (query && query.sql) {
|
|
186
|
-
const matches = query.sql.match(JSON_REGEX);
|
|
187
|
-
if (matches && matches.length > 0) {
|
|
188
|
-
for (let match of matches) {
|
|
189
|
-
const escaped = (0, utilities_1.escapeDangerousCharacters)(match);
|
|
190
|
-
query.sql = query.sql.replace(match, escaped);
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
try {
|
|
195
|
-
return yield client.query(query.sql, query.bindings || []);
|
|
196
|
-
}
|
|
197
|
-
catch (err) {
|
|
198
|
-
yield this.closeConnection();
|
|
199
|
-
// @ts-ignore
|
|
200
|
-
throw new Error(err);
|
|
201
|
-
}
|
|
202
|
-
finally {
|
|
203
|
-
if (close) {
|
|
204
|
-
yield this.closeConnection();
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
});
|
|
208
|
-
}
|
|
209
|
-
/**
|
|
210
|
-
* Fetches the tables from the postgres table and assigns them to the datasource.
|
|
211
|
-
* @param {*} datasourceId - datasourceId to fetch
|
|
212
|
-
* @param entities - the tables that are to be built
|
|
213
|
-
*/
|
|
214
|
-
buildSchema(datasourceId, entities) {
|
|
215
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
216
|
-
let tableKeys = {};
|
|
217
|
-
yield this.openConnection();
|
|
218
|
-
try {
|
|
219
|
-
const primaryKeysResponse = yield this.client.query(this.PRIMARY_KEYS_SQL());
|
|
220
|
-
for (let table of primaryKeysResponse.rows) {
|
|
221
|
-
const tableName = table.table_name;
|
|
222
|
-
if (!tableKeys[tableName]) {
|
|
223
|
-
tableKeys[tableName] = [];
|
|
224
|
-
}
|
|
225
|
-
const key = table.column_name || table.primary_key;
|
|
226
|
-
// only add the unique keys
|
|
227
|
-
if (key && tableKeys[tableName].indexOf(key) === -1) {
|
|
228
|
-
tableKeys[tableName].push(key);
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
catch (err) {
|
|
233
|
-
tableKeys = {};
|
|
234
|
-
}
|
|
235
|
-
try {
|
|
236
|
-
const columnsResponse = yield this.client.query(this.COLUMNS_SQL);
|
|
237
|
-
const tables = {};
|
|
238
|
-
for (let column of columnsResponse.rows) {
|
|
239
|
-
const tableName = column.table_name;
|
|
240
|
-
const columnName = column.column_name;
|
|
241
|
-
// table key doesn't exist yet
|
|
242
|
-
if (!tables[tableName] || !tables[tableName].schema) {
|
|
243
|
-
tables[tableName] = {
|
|
244
|
-
_id: (0, utils_1.buildExternalTableId)(datasourceId, tableName),
|
|
245
|
-
primary: tableKeys[tableName] || [],
|
|
246
|
-
name: tableName,
|
|
247
|
-
schema: {},
|
|
248
|
-
};
|
|
249
|
-
}
|
|
250
|
-
const identity = !!(column.identity_generation ||
|
|
251
|
-
column.identity_start ||
|
|
252
|
-
column.identity_increment);
|
|
253
|
-
const hasDefault = column.column_default != null;
|
|
254
|
-
const hasNextVal = typeof column.column_default === "string" &&
|
|
255
|
-
column.column_default.startsWith("nextval");
|
|
256
|
-
const isGenerated = column.is_generated && column.is_generated !== "NEVER";
|
|
257
|
-
const isAuto = hasNextVal || identity || isGenerated;
|
|
258
|
-
const required = column.is_nullable === "NO";
|
|
259
|
-
const constraints = {
|
|
260
|
-
presence: required && !hasDefault && !isGenerated,
|
|
261
|
-
};
|
|
262
|
-
tables[tableName].schema[columnName] = Object.assign(Object.assign({ autocolumn: isAuto, name: columnName, constraints }, (0, utils_1.convertSqlType)(column.data_type)), { externalType: column.data_type });
|
|
263
|
-
}
|
|
264
|
-
const final = (0, utils_1.finaliseExternalTables)(tables, entities);
|
|
265
|
-
this.tables = final.tables;
|
|
266
|
-
this.schemaErrors = final.errors;
|
|
267
|
-
}
|
|
268
|
-
catch (err) {
|
|
269
|
-
// @ts-ignore
|
|
270
|
-
throw new Error(err);
|
|
271
|
-
}
|
|
272
|
-
finally {
|
|
273
|
-
yield this.closeConnection();
|
|
274
|
-
}
|
|
275
|
-
});
|
|
276
|
-
}
|
|
277
|
-
getTableNames() {
|
|
278
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
279
|
-
try {
|
|
280
|
-
yield this.openConnection();
|
|
281
|
-
const columnsResponse = yield this.client.query(this.COLUMNS_SQL);
|
|
282
|
-
return columnsResponse.rows.map(row => row.table_name);
|
|
283
|
-
}
|
|
284
|
-
finally {
|
|
285
|
-
yield this.closeConnection();
|
|
286
|
-
}
|
|
287
|
-
});
|
|
288
|
-
}
|
|
289
|
-
create(query) {
|
|
290
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
291
|
-
const response = yield this.internalQuery((0, utils_1.getSqlQuery)(query));
|
|
292
|
-
return response.rows.length ? response.rows : [{ created: true }];
|
|
293
|
-
});
|
|
294
|
-
}
|
|
295
|
-
read(query) {
|
|
296
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
297
|
-
const response = yield this.internalQuery((0, utils_1.getSqlQuery)(query));
|
|
298
|
-
return response.rows;
|
|
299
|
-
});
|
|
300
|
-
}
|
|
301
|
-
update(query) {
|
|
302
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
303
|
-
const response = yield this.internalQuery((0, utils_1.getSqlQuery)(query));
|
|
304
|
-
return response.rows.length ? response.rows : [{ updated: true }];
|
|
305
|
-
});
|
|
306
|
-
}
|
|
307
|
-
delete(query) {
|
|
308
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
309
|
-
const response = yield this.internalQuery((0, utils_1.getSqlQuery)(query));
|
|
310
|
-
return response.rows.length ? response.rows : [{ deleted: true }];
|
|
311
|
-
});
|
|
312
|
-
}
|
|
313
|
-
query(json) {
|
|
314
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
315
|
-
const operation = this._operation(json).toLowerCase();
|
|
316
|
-
const input = this._query(json);
|
|
317
|
-
if (Array.isArray(input)) {
|
|
318
|
-
const responses = [];
|
|
319
|
-
for (let query of input) {
|
|
320
|
-
responses.push(yield this.internalQuery(query, false));
|
|
321
|
-
}
|
|
322
|
-
yield this.closeConnection();
|
|
323
|
-
return responses;
|
|
324
|
-
}
|
|
325
|
-
else {
|
|
326
|
-
const response = yield this.internalQuery(input);
|
|
327
|
-
return response.rows.length ? response.rows : [{ [operation]: true }];
|
|
328
|
-
}
|
|
329
|
-
});
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
exports.default = {
|
|
333
|
-
schema: SCHEMA,
|
|
334
|
-
integration: PostgresIntegration,
|
|
335
|
-
};
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.interpolateSQL = void 0;
|
|
16
|
-
const string_templates_1 = require("@budibase/string-templates");
|
|
17
|
-
const sdk_1 = __importDefault(require("../../sdk"));
|
|
18
|
-
const CONST_CHAR_REGEX = new RegExp("'[^']*'", "g");
|
|
19
|
-
function interpolateSQL(fields, parameters, integration) {
|
|
20
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
21
|
-
let sql = fields.sql;
|
|
22
|
-
if (!sql || typeof sql !== "string") {
|
|
23
|
-
return fields;
|
|
24
|
-
}
|
|
25
|
-
const bindings = (0, string_templates_1.findHBSBlocks)(sql);
|
|
26
|
-
let variables = [], arrays = [];
|
|
27
|
-
for (let binding of bindings) {
|
|
28
|
-
// look for array/list operations in the SQL statement, which will need handled later
|
|
29
|
-
const listRegexMatch = sql.match(new RegExp(`(in|IN|In|iN)( )+[(]?${binding}[)]?`));
|
|
30
|
-
// check if the variable was used as part of a string concat e.g. 'Hello {{binding}}'
|
|
31
|
-
// start by finding all the instances of const character strings
|
|
32
|
-
const charConstMatch = sql.match(CONST_CHAR_REGEX) || [];
|
|
33
|
-
// now look within them to see if a binding is used
|
|
34
|
-
const charConstBindingMatch = charConstMatch.find((string) => string.match(new RegExp(`'[^']*${binding}[^']*'`)));
|
|
35
|
-
if (charConstBindingMatch) {
|
|
36
|
-
let [part1, part2] = charConstBindingMatch.split(binding);
|
|
37
|
-
part1 = `'${part1.substring(1)}'`;
|
|
38
|
-
part2 = `'${part2.substring(0, part2.length - 1)}'`;
|
|
39
|
-
sql = sql.replace(charConstBindingMatch, integration.getStringConcat([
|
|
40
|
-
part1,
|
|
41
|
-
integration.getBindingIdentifier(),
|
|
42
|
-
part2,
|
|
43
|
-
]));
|
|
44
|
-
}
|
|
45
|
-
// generate SQL parameterised array
|
|
46
|
-
else if (listRegexMatch) {
|
|
47
|
-
arrays.push(binding);
|
|
48
|
-
// determine the length of the array
|
|
49
|
-
const value = (yield sdk_1.default.queries.enrichContext([binding], parameters))[0]
|
|
50
|
-
.split(",")
|
|
51
|
-
.map((val) => val.trim());
|
|
52
|
-
// build a string like ($1, $2, $3)
|
|
53
|
-
let replacement = `${Array.apply(null, Array(value.length))
|
|
54
|
-
.map(() => integration.getBindingIdentifier())
|
|
55
|
-
.join(",")}`;
|
|
56
|
-
// check if parentheses are needed
|
|
57
|
-
if (!listRegexMatch[0].includes(`(${binding})`)) {
|
|
58
|
-
replacement = `(${replacement})`;
|
|
59
|
-
}
|
|
60
|
-
sql = sql.replace(binding, replacement);
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
sql = sql.replace(binding, integration.getBindingIdentifier());
|
|
64
|
-
}
|
|
65
|
-
variables.push(binding);
|
|
66
|
-
}
|
|
67
|
-
// replicate the knex structure
|
|
68
|
-
fields.sql = sql;
|
|
69
|
-
fields.bindings = yield sdk_1.default.queries.enrichContext(variables, parameters);
|
|
70
|
-
// check for arrays in the data
|
|
71
|
-
let updated = [];
|
|
72
|
-
for (let i = 0; i < variables.length; i++) {
|
|
73
|
-
if (arrays.includes(variables[i])) {
|
|
74
|
-
updated = updated.concat(fields.bindings[i].split(",").map((val) => val.trim()));
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
updated.push(fields.bindings[i]);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
fields.bindings = updated;
|
|
81
|
-
return fields;
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
exports.interpolateSQL = interpolateSQL;
|
|
@@ -1,187 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
const types_1 = require("@budibase/types");
|
|
16
|
-
const ioredis_1 = __importDefault(require("ioredis"));
|
|
17
|
-
const SCHEMA = {
|
|
18
|
-
docs: "https://redis.io/docs/",
|
|
19
|
-
description: "Redis is a caching tool, providing powerful key-value store capabilities.",
|
|
20
|
-
friendlyName: "Redis",
|
|
21
|
-
type: "Non-relational",
|
|
22
|
-
features: [types_1.DatasourceFeature.CONNECTION_CHECKING],
|
|
23
|
-
datasource: {
|
|
24
|
-
host: {
|
|
25
|
-
type: "string",
|
|
26
|
-
required: true,
|
|
27
|
-
default: "localhost",
|
|
28
|
-
},
|
|
29
|
-
port: {
|
|
30
|
-
type: "number",
|
|
31
|
-
required: true,
|
|
32
|
-
default: 6379,
|
|
33
|
-
},
|
|
34
|
-
username: {
|
|
35
|
-
type: "string",
|
|
36
|
-
required: false,
|
|
37
|
-
},
|
|
38
|
-
password: {
|
|
39
|
-
type: "password",
|
|
40
|
-
required: false,
|
|
41
|
-
},
|
|
42
|
-
db: {
|
|
43
|
-
type: "number",
|
|
44
|
-
required: false,
|
|
45
|
-
display: "DB",
|
|
46
|
-
default: 0,
|
|
47
|
-
},
|
|
48
|
-
},
|
|
49
|
-
query: {
|
|
50
|
-
create: {
|
|
51
|
-
type: types_1.QueryType.FIELDS,
|
|
52
|
-
fields: {
|
|
53
|
-
key: {
|
|
54
|
-
type: types_1.DatasourceFieldType.STRING,
|
|
55
|
-
required: true,
|
|
56
|
-
},
|
|
57
|
-
value: {
|
|
58
|
-
type: types_1.DatasourceFieldType.STRING,
|
|
59
|
-
required: true,
|
|
60
|
-
},
|
|
61
|
-
ttl: {
|
|
62
|
-
type: types_1.DatasourceFieldType.NUMBER,
|
|
63
|
-
},
|
|
64
|
-
},
|
|
65
|
-
},
|
|
66
|
-
read: {
|
|
67
|
-
readable: true,
|
|
68
|
-
type: types_1.QueryType.FIELDS,
|
|
69
|
-
fields: {
|
|
70
|
-
key: {
|
|
71
|
-
type: types_1.DatasourceFieldType.STRING,
|
|
72
|
-
required: true,
|
|
73
|
-
},
|
|
74
|
-
},
|
|
75
|
-
},
|
|
76
|
-
delete: {
|
|
77
|
-
type: types_1.QueryType.FIELDS,
|
|
78
|
-
fields: {
|
|
79
|
-
key: {
|
|
80
|
-
type: types_1.DatasourceFieldType.STRING,
|
|
81
|
-
required: true,
|
|
82
|
-
},
|
|
83
|
-
},
|
|
84
|
-
},
|
|
85
|
-
command: {
|
|
86
|
-
readable: true,
|
|
87
|
-
displayName: "Redis Command",
|
|
88
|
-
type: types_1.QueryType.JSON,
|
|
89
|
-
},
|
|
90
|
-
},
|
|
91
|
-
};
|
|
92
|
-
class RedisIntegration {
|
|
93
|
-
constructor(config) {
|
|
94
|
-
this.config = config;
|
|
95
|
-
this.client = new ioredis_1.default({
|
|
96
|
-
host: this.config.host,
|
|
97
|
-
port: this.config.port,
|
|
98
|
-
username: this.config.username,
|
|
99
|
-
password: this.config.password,
|
|
100
|
-
db: this.config.db,
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
testConnection() {
|
|
104
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
105
|
-
const response = {
|
|
106
|
-
connected: false,
|
|
107
|
-
};
|
|
108
|
-
try {
|
|
109
|
-
yield this.client.ping();
|
|
110
|
-
response.connected = true;
|
|
111
|
-
}
|
|
112
|
-
catch (e) {
|
|
113
|
-
response.error = e.message;
|
|
114
|
-
}
|
|
115
|
-
finally {
|
|
116
|
-
yield this.disconnect();
|
|
117
|
-
}
|
|
118
|
-
return response;
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
disconnect() {
|
|
122
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
123
|
-
return this.client.quit();
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
redisContext(query) {
|
|
127
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
128
|
-
try {
|
|
129
|
-
return yield query();
|
|
130
|
-
}
|
|
131
|
-
catch (err) {
|
|
132
|
-
throw new Error(`Redis error: ${err}`);
|
|
133
|
-
}
|
|
134
|
-
finally {
|
|
135
|
-
yield this.disconnect();
|
|
136
|
-
}
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
create(query) {
|
|
140
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
141
|
-
return this.redisContext(() => __awaiter(this, void 0, void 0, function* () {
|
|
142
|
-
const response = yield this.client.set(query.key, query.value);
|
|
143
|
-
if (query.ttl) {
|
|
144
|
-
yield this.client.expire(query.key, query.ttl);
|
|
145
|
-
}
|
|
146
|
-
return response;
|
|
147
|
-
}));
|
|
148
|
-
});
|
|
149
|
-
}
|
|
150
|
-
read(query) {
|
|
151
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
152
|
-
return this.redisContext(() => __awaiter(this, void 0, void 0, function* () {
|
|
153
|
-
return yield this.client.get(query.key);
|
|
154
|
-
}));
|
|
155
|
-
});
|
|
156
|
-
}
|
|
157
|
-
delete(query) {
|
|
158
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
159
|
-
return this.redisContext(() => __awaiter(this, void 0, void 0, function* () {
|
|
160
|
-
return yield this.client.del(query.key);
|
|
161
|
-
}));
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
command(query) {
|
|
165
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
166
|
-
return this.redisContext(() => __awaiter(this, void 0, void 0, function* () {
|
|
167
|
-
// commands split line by line
|
|
168
|
-
const commands = query.json.trim().split("\n");
|
|
169
|
-
let pipelineCommands = [];
|
|
170
|
-
// process each command separately
|
|
171
|
-
for (let command of commands) {
|
|
172
|
-
const tokenised = command.trim().split(" ");
|
|
173
|
-
// Pipeline only accepts lower case commands
|
|
174
|
-
tokenised[0] = tokenised[0].toLowerCase();
|
|
175
|
-
pipelineCommands.push(tokenised);
|
|
176
|
-
}
|
|
177
|
-
const pipeline = this.client.pipeline(pipelineCommands);
|
|
178
|
-
const result = yield pipeline.exec();
|
|
179
|
-
return result.map((output) => output[1]);
|
|
180
|
-
}));
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
exports.default = {
|
|
185
|
-
schema: SCHEMA,
|
|
186
|
-
integration: RedisIntegration,
|
|
187
|
-
};
|