@budibase/server 1.3.21-alpha.1 → 1.3.21
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__/mongodb.ts +1 -1
- package/builder/assets/index.8d12d461.css +6 -0
- package/builder/assets/index.d354271c.js +879 -0
- package/builder/assets/vendor.5e1fe644.css +1 -0
- package/builder/assets/vendor.67dbd8fa.js +248 -0
- package/builder/index.html +4 -2
- package/coverage/clover.xml +390 -451
- package/coverage/coverage-final.json +21 -21
- package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
- package/coverage/lcov-report/api/controllers/auth.js.html +8 -41
- package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
- package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
- package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
- package/coverage/lcov-report/api/controllers/component.js.html +11 -68
- package/coverage/lcov-report/api/controllers/datasource.js.html +34 -73
- package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
- package/coverage/lcov-report/api/controllers/index.html +46 -46
- package/coverage/lcov-report/api/controllers/integration.js.html +6 -6
- package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
- package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
- package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
- package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
- package/coverage/lcov-report/api/controllers/query/index.html +1 -1
- package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
- package/coverage/lcov-report/api/controllers/role.js.html +1 -1
- package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/external.js.html +2 -2
- package/coverage/lcov-report/api/controllers/row/index.html +1 -1
- package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/utils.js.html +1 -1
- package/coverage/lcov-report/api/controllers/screen.js.html +12 -207
- package/coverage/lcov-report/api/controllers/script.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/index.html +1 -1
- package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
- package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
- package/coverage/lcov-report/api/controllers/user.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/index.html +1 -1
- package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
- package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
- package/coverage/lcov-report/api/index.html +1 -1
- package/coverage/lcov-report/api/index.js.html +13 -13
- package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
- package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
- package/coverage/lcov-report/api/routes/auth.js.html +1 -1
- package/coverage/lcov-report/api/routes/automation.js.html +1 -1
- package/coverage/lcov-report/api/routes/backup.js.html +1 -1
- package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
- package/coverage/lcov-report/api/routes/component.js.html +1 -1
- package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
- package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
- package/coverage/lcov-report/api/routes/dev.js.html +1 -1
- package/coverage/lcov-report/api/routes/index.html +1 -1
- package/coverage/lcov-report/api/routes/integration.js.html +1 -1
- package/coverage/lcov-report/api/routes/layout.js.html +1 -1
- package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
- package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
- package/coverage/lcov-report/api/routes/permission.js.html +1 -1
- package/coverage/lcov-report/api/routes/query.js.html +1 -1
- package/coverage/lcov-report/api/routes/role.js.html +1 -1
- package/coverage/lcov-report/api/routes/routing.js.html +1 -1
- package/coverage/lcov-report/api/routes/screen.js.html +1 -1
- package/coverage/lcov-report/api/routes/script.js.html +1 -1
- package/coverage/lcov-report/api/routes/table.js.html +2 -2
- package/coverage/lcov-report/api/routes/templates.js.html +1 -1
- package/coverage/lcov-report/api/routes/user.js.html +1 -1
- package/coverage/lcov-report/api/routes/utils/index.html +9 -9
- package/coverage/lcov-report/api/routes/utils/validators.js.html +12 -75
- package/coverage/lcov-report/api/routes/view.js.html +1 -1
- package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
- package/coverage/lcov-report/automations/actions.js.html +1 -1
- package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
- package/coverage/lcov-report/automations/bullboard.js.html +1 -1
- package/coverage/lcov-report/automations/index.html +1 -1
- package/coverage/lcov-report/automations/index.js.html +1 -1
- package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
- package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
- package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
- package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
- package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
- package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
- package/coverage/lcov-report/automations/steps/index.html +1 -1
- package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
- package/coverage/lcov-report/automations/steps/loop.js.html +1 -1
- package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
- package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
- package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
- package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
- package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
- package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
- package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
- package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
- package/coverage/lcov-report/automations/triggers.js.html +1 -1
- package/coverage/lcov-report/constants/index.html +1 -1
- package/coverage/lcov-report/constants/index.js.html +1 -1
- package/coverage/lcov-report/constants/layouts.js.html +1 -1
- package/coverage/lcov-report/constants/screens.js.html +1 -1
- package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
- package/coverage/lcov-report/db/index.html +18 -18
- package/coverage/lcov-report/db/index.js.html +1 -1
- package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
- package/coverage/lcov-report/db/linkedRows/index.html +1 -1
- package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
- package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
- package/coverage/lcov-report/db/newid.js.html +2 -2
- package/coverage/lcov-report/db/utils.js.html +20 -56
- package/coverage/lcov-report/events/AutomationEmitter.js.html +3 -3
- package/coverage/lcov-report/events/index.html +1 -1
- package/coverage/lcov-report/events/index.js.html +1 -1
- package/coverage/lcov-report/events/utils.js.html +1 -1
- package/coverage/lcov-report/index.html +46 -46
- package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
- package/coverage/lcov-report/integrations/tests/index.html +1 -1
- package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
- package/coverage/lcov-report/middleware/builder.js.html +12 -12
- package/coverage/lcov-report/middleware/currentapp.js.html +40 -46
- package/coverage/lcov-report/middleware/index.html +15 -15
- package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
- package/coverage/lcov-report/middleware/publicApi.js.html +1 -1
- package/coverage/lcov-report/middleware/resourceId.js.html +7 -7
- package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
- package/coverage/lcov-report/middleware/utils.js.html +2 -2
- package/coverage/lcov-report/utilities/budibaseDir.js.html +3 -3
- package/coverage/lcov-report/utilities/centralPath.js.html +4 -4
- package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
- package/coverage/lcov-report/utilities/global.js.html +16 -16
- package/coverage/lcov-report/utilities/index.html +15 -15
- package/coverage/lcov-report/utilities/index.js.html +24 -24
- package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +2 -2
- package/coverage/lcov-report/utilities/queue/index.html +1 -1
- package/coverage/lcov-report/utilities/routing/index.html +1 -1
- package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
- package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
- package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
- package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
- package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
- package/coverage/lcov-report/utilities/security.js.html +2 -2
- package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/rows.js.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
- package/coverage/lcov-report/utilities/users.js.html +1 -1
- package/coverage/lcov-report/utilities/workerRequests.js.html +8 -32
- package/coverage/lcov.info +672 -798
- package/dist/api/controllers/application.js +5 -5
- package/dist/api/controllers/auth.js +0 -9
- package/dist/api/controllers/component.js +1 -14
- package/dist/api/controllers/datasource.js +8 -21
- package/dist/api/controllers/deploy/index.js +8 -1
- package/dist/api/controllers/integration.js +4 -4
- package/dist/api/controllers/row/external.js +1 -1
- package/dist/api/controllers/screen.js +2 -52
- package/dist/api/controllers/static/index.js +0 -1
- package/dist/api/controllers/static/templates/BudibaseApp.svelte +0 -10
- package/dist/api/controllers/static/templates/preview.hbs +1 -5
- package/dist/api/index.js +1 -1
- package/dist/api/routes/application.js +2 -3
- package/dist/api/routes/index.js +0 -2
- package/dist/api/routes/public/rows.js +82 -1
- package/dist/api/routes/public/tables.js +1 -1
- package/dist/api/routes/table.js +1 -1
- package/dist/api/routes/utils/validators.js +2 -20
- package/dist/app.js +1 -16
- package/dist/db/utils.js +1 -10
- package/dist/environment.js +0 -1
- package/dist/integrations/airtable.js +129 -126
- package/dist/integrations/arangodb.js +89 -86
- package/dist/integrations/base/query.js +2 -2
- package/dist/integrations/base/sqlTable.js +1 -3
- package/dist/integrations/couchdb.js +83 -80
- package/dist/integrations/dynamodb.js +164 -161
- package/dist/integrations/elasticsearch.js +138 -135
- package/dist/integrations/firebase.js +157 -154
- package/dist/integrations/googlesheets.js +327 -323
- package/dist/integrations/index.js +51 -99
- package/dist/integrations/microsoftSqlServer.js +243 -240
- package/dist/integrations/mongodb.js +242 -239
- package/dist/integrations/mysql.js +219 -215
- package/dist/integrations/oracle.js +322 -318
- package/dist/integrations/postgres.js +265 -262
- package/dist/integrations/redis.js +139 -134
- package/dist/integrations/rest.js +292 -289
- package/dist/integrations/s3.js +64 -61
- package/dist/integrations/snowflake.js +86 -83
- package/dist/middleware/currentapp.js +0 -2
- package/dist/migrations/functions/backfill/global.js +3 -0
- package/dist/migrations/functions/developerQuota.js +49 -0
- package/dist/{api/routes/plugin.js → migrations/functions/publishedAppsQuota.js} +21 -13
- package/dist/{api/controllers/plugin/url.js → migrations/functions/usageQuotas/syncDevelopers.js} +13 -13
- package/dist/{api/controllers/plugin/file.js → migrations/functions/usageQuotas/syncPublishedApps.js} +15 -13
- package/dist/migrations/index.js +10 -0
- package/dist/package.json +6 -9
- package/dist/tests/utilities/TestConfiguration.js +1 -1
- package/dist/threads/query.js +2 -2
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utilities/fileSystem/index.js +1 -111
- package/dist/utilities/workerRequests.js +0 -4
- package/package.json +7 -10
- package/scripts/dev/manage.js +0 -4
- package/scripts/localdomain.js +1 -3
- package/specs/openapi.json +112 -115
- package/specs/openapi.yaml +94 -96
- package/specs/resources/misc.js +0 -116
- package/specs/resources/query.js +1 -1
- package/src/api/controllers/application.ts +2 -1
- package/src/api/controllers/auth.js +0 -11
- package/src/api/controllers/component.js +2 -21
- package/src/api/controllers/datasource.js +8 -21
- package/src/api/controllers/deploy/index.ts +6 -1
- package/src/api/controllers/integration.js +4 -4
- package/src/api/controllers/public/mapping/types.ts +0 -8
- package/src/api/controllers/row/external.js +1 -1
- package/src/api/controllers/screen.js +1 -66
- package/src/api/controllers/static/index.ts +1 -1
- package/src/api/controllers/static/templates/BudibaseApp.svelte +0 -10
- package/src/api/controllers/static/templates/preview.hbs +1 -5
- package/src/api/index.js +1 -1
- package/src/api/routes/application.ts +2 -13
- package/src/api/routes/index.ts +0 -2
- package/src/api/routes/public/rows.ts +82 -1
- package/src/api/routes/public/tables.ts +1 -1
- package/src/api/routes/table.js +1 -1
- package/src/api/routes/tests/query.spec.js +25 -8
- package/src/api/routes/tests/user.spec.js +2 -0
- package/src/api/routes/utils/validators.js +5 -26
- package/src/app.ts +2 -25
- package/src/db/utils.js +0 -12
- package/src/definitions/openapi.ts +55 -56
- package/src/environment.js +0 -1
- package/src/integrations/airtable.ts +118 -116
- package/src/integrations/arangodb.ts +89 -87
- package/src/integrations/base/query.ts +2 -2
- package/src/integrations/base/sqlTable.ts +1 -3
- package/src/integrations/couchdb.ts +89 -83
- package/src/integrations/dynamodb.ts +175 -173
- package/src/integrations/elasticsearch.ts +122 -120
- package/src/integrations/firebase.ts +159 -157
- package/src/integrations/googlesheets.ts +338 -328
- package/src/integrations/index.ts +21 -64
- package/src/integrations/microsoftSqlServer.ts +251 -249
- package/src/integrations/mongodb.ts +258 -261
- package/src/integrations/mysql.ts +234 -229
- package/src/integrations/oracle.ts +380 -373
- package/src/integrations/postgres.ts +268 -264
- package/src/integrations/redis.ts +132 -128
- package/src/integrations/rest.ts +329 -324
- package/src/integrations/s3.ts +71 -68
- package/src/integrations/snowflake.ts +82 -80
- package/src/integrations/tests/{airtable.spec.ts → airtable.spec.js} +18 -21
- package/src/integrations/tests/{arangodb.spec.ts → arangodb.spec.js} +9 -12
- package/src/integrations/tests/{couchdb.spec.ts → couchdb.spec.js} +27 -33
- package/src/integrations/tests/{dynamodb.spec.ts → dynamodb.spec.js} +41 -45
- package/src/integrations/tests/{elasticsearch.spec.ts → elasticsearch.spec.js} +21 -22
- package/src/integrations/tests/{firebase.spec.ts → firebase.spec.js} +28 -33
- package/src/integrations/tests/{microsoftSqlServer.spec.ts → microsoftSqlServer.spec.js} +11 -12
- package/src/integrations/tests/{mongo.spec.ts → mongo.spec.js} +35 -46
- package/src/integrations/tests/{mysql.spec.ts → mysql.spec.js} +15 -17
- package/src/integrations/tests/{oracle.spec.ts → oracle.spec.js} +17 -19
- package/src/integrations/tests/{postgres.spec.ts → postgres.spec.js} +17 -19
- package/src/integrations/tests/{redis.spec.ts → redis.spec.js} +18 -27
- package/src/integrations/tests/{rest.spec.ts → rest.spec.js} +14 -22
- package/src/integrations/tests/{s3.spec.ts → s3.spec.js} +8 -10
- package/src/integrations/tests/{sql.spec.ts → sql.spec.js} +177 -228
- package/src/middleware/currentapp.js +0 -2
- package/src/migrations/functions/backfill/global.ts +3 -0
- package/src/migrations/functions/developerQuota.ts +15 -0
- package/src/migrations/functions/publishedAppsQuota.ts +13 -0
- package/src/migrations/functions/usageQuotas/syncDevelopers.ts +19 -0
- package/src/migrations/functions/usageQuotas/syncPublishedApps.ts +21 -0
- package/src/migrations/index.ts +16 -0
- package/src/module.d.ts +0 -2
- package/src/tests/utilities/TestConfiguration.js +1 -1
- package/src/threads/query.ts +2 -2
- package/src/utilities/fileSystem/index.js +0 -130
- package/src/utilities/workerRequests.js +0 -8
- package/builder/assets/index.c9d3f9e8.js +0 -1005
- package/builder/assets/index.f1b70f52.css +0 -6
- package/dist/api/controllers/plugin/github.js +0 -69
- package/dist/api/controllers/plugin/index.js +0 -200
- package/dist/api/controllers/plugin/npm.js +0 -58
- package/dist/api/controllers/plugin/uploaders.js +0 -11
- package/dist/api/controllers/plugin/utils.js +0 -26
- package/dist/watch.js +0 -77
- package/dist/websocket.js +0 -22
- package/src/api/controllers/plugin/file.ts +0 -15
- package/src/api/controllers/plugin/github.ts +0 -75
- package/src/api/controllers/plugin/index.ts +0 -215
- package/src/api/controllers/plugin/npm.ts +0 -56
- package/src/api/controllers/plugin/uploaders.ts +0 -4
- package/src/api/controllers/plugin/url.ts +0 -12
- package/src/api/controllers/plugin/utils.ts +0 -19
- package/src/api/routes/plugin.ts +0 -14
- package/src/watch.ts +0 -38
- package/src/websocket.ts +0 -26
package/specs/openapi.yaml
CHANGED
|
@@ -1004,7 +1004,7 @@ components:
|
|
|
1004
1004
|
description: The ID of the query.
|
|
1005
1005
|
type: string
|
|
1006
1006
|
datasourceId:
|
|
1007
|
-
description: The ID of the
|
|
1007
|
+
description: The ID of the data source the query belongs to.
|
|
1008
1008
|
type: string
|
|
1009
1009
|
parameters:
|
|
1010
1010
|
description: The bindings which are required to perform this query.
|
|
@@ -1051,7 +1051,7 @@ components:
|
|
|
1051
1051
|
description: The ID of the query.
|
|
1052
1052
|
type: string
|
|
1053
1053
|
datasourceId:
|
|
1054
|
-
description: The ID of the
|
|
1054
|
+
description: The ID of the data source the query belongs to.
|
|
1055
1055
|
type: string
|
|
1056
1056
|
parameters:
|
|
1057
1057
|
description: The bindings which are required to perform this query.
|
|
@@ -1264,98 +1264,6 @@ components:
|
|
|
1264
1264
|
- _id
|
|
1265
1265
|
required:
|
|
1266
1266
|
- data
|
|
1267
|
-
rowSearch:
|
|
1268
|
-
type: object
|
|
1269
|
-
properties:
|
|
1270
|
-
query:
|
|
1271
|
-
type: object
|
|
1272
|
-
properties:
|
|
1273
|
-
allOr:
|
|
1274
|
-
type: boolean
|
|
1275
|
-
description: Specifies that a row should be returned if it satisfies any of the
|
|
1276
|
-
specified options, rather than requiring it to fulfill all the
|
|
1277
|
-
search parameters. This defaults to false, meaning AND logic
|
|
1278
|
-
will be used.
|
|
1279
|
-
string:
|
|
1280
|
-
type: object
|
|
1281
|
-
example:
|
|
1282
|
-
columnName1: value
|
|
1283
|
-
columnName2: value
|
|
1284
|
-
description: A map of field name to the string to search for, this will look for
|
|
1285
|
-
rows that have a value starting with the string value.
|
|
1286
|
-
additionalProperties:
|
|
1287
|
-
type: string
|
|
1288
|
-
description: The value to search for in the column.
|
|
1289
|
-
fuzzy:
|
|
1290
|
-
type: object
|
|
1291
|
-
description: A fuzzy search, only supported by internal tables.
|
|
1292
|
-
range:
|
|
1293
|
-
type: object
|
|
1294
|
-
description: Searches within a range, the format of this must be in the format
|
|
1295
|
-
of an object with a "low" and "high" property.
|
|
1296
|
-
example:
|
|
1297
|
-
columnName1:
|
|
1298
|
-
low: 10
|
|
1299
|
-
high: 20
|
|
1300
|
-
equal:
|
|
1301
|
-
type: object
|
|
1302
|
-
description: Searches for rows that have a column value that is exactly the
|
|
1303
|
-
value set.
|
|
1304
|
-
notEqual:
|
|
1305
|
-
type: object
|
|
1306
|
-
description: Searches for any row which does not contain the specified column
|
|
1307
|
-
value.
|
|
1308
|
-
empty:
|
|
1309
|
-
type: object
|
|
1310
|
-
description: Searches for rows which do not contain the specified column. The
|
|
1311
|
-
object should simply contain keys of the column names, these can
|
|
1312
|
-
map to any value.
|
|
1313
|
-
example:
|
|
1314
|
-
columnName1: ""
|
|
1315
|
-
notEmpty:
|
|
1316
|
-
type: object
|
|
1317
|
-
description: Searches for rows which have the specified column.
|
|
1318
|
-
oneOf:
|
|
1319
|
-
type: object
|
|
1320
|
-
description: Searches for rows which have a column value that is any of the
|
|
1321
|
-
specified values. The format of this must be columnName ->
|
|
1322
|
-
[value1, value2].
|
|
1323
|
-
paginate:
|
|
1324
|
-
type: boolean
|
|
1325
|
-
description: Enables pagination, by default this is disabled.
|
|
1326
|
-
bookmark:
|
|
1327
|
-
oneOf:
|
|
1328
|
-
- type: string
|
|
1329
|
-
- type: integer
|
|
1330
|
-
description: If retrieving another page, the bookmark from the previous request
|
|
1331
|
-
must be supplied.
|
|
1332
|
-
limit:
|
|
1333
|
-
type: integer
|
|
1334
|
-
description: The maximum number of rows to return, useful when paginating, for
|
|
1335
|
-
internal tables this will be limited to 1000, for SQL tables it will
|
|
1336
|
-
be 5000.
|
|
1337
|
-
sort:
|
|
1338
|
-
type: object
|
|
1339
|
-
description: A set of parameters describing the sort behaviour of the search.
|
|
1340
|
-
properties:
|
|
1341
|
-
order:
|
|
1342
|
-
type: string
|
|
1343
|
-
enum:
|
|
1344
|
-
- ascending
|
|
1345
|
-
- descending
|
|
1346
|
-
description: The order of the sort, by default this is ascending.
|
|
1347
|
-
column:
|
|
1348
|
-
type: string
|
|
1349
|
-
description: The name of the column by which the rows will be sorted.
|
|
1350
|
-
type:
|
|
1351
|
-
type: string
|
|
1352
|
-
enum:
|
|
1353
|
-
- string
|
|
1354
|
-
- number
|
|
1355
|
-
description: Defines whether the column should be treated as a string or as
|
|
1356
|
-
numbers when sorting.
|
|
1357
|
-
required:
|
|
1358
|
-
- query
|
|
1359
1267
|
nameSearch:
|
|
1360
1268
|
type: object
|
|
1361
1269
|
properties:
|
|
@@ -1636,7 +1544,97 @@ paths:
|
|
|
1636
1544
|
content:
|
|
1637
1545
|
application/json:
|
|
1638
1546
|
schema:
|
|
1639
|
-
|
|
1547
|
+
type: object
|
|
1548
|
+
required:
|
|
1549
|
+
- query
|
|
1550
|
+
properties:
|
|
1551
|
+
query:
|
|
1552
|
+
type: object
|
|
1553
|
+
properties:
|
|
1554
|
+
allOr:
|
|
1555
|
+
type: boolean
|
|
1556
|
+
description: Specifies that a row should be returned if it satisfies any of the
|
|
1557
|
+
specified options, rather than requiring it to fulfill
|
|
1558
|
+
all the search parameters. This defaults to false,
|
|
1559
|
+
meaning AND logic will be used.
|
|
1560
|
+
string:
|
|
1561
|
+
type: object
|
|
1562
|
+
example:
|
|
1563
|
+
columnName1: value
|
|
1564
|
+
columnName2: value
|
|
1565
|
+
description: A map of field name to the string to search for, this will look for
|
|
1566
|
+
rows that have a value starting with the string value.
|
|
1567
|
+
additionalProperties:
|
|
1568
|
+
type: string
|
|
1569
|
+
description: The value to search for in the column.
|
|
1570
|
+
fuzzy:
|
|
1571
|
+
type: object
|
|
1572
|
+
description: A fuzzy search, only supported by internal tables.
|
|
1573
|
+
range:
|
|
1574
|
+
type: object
|
|
1575
|
+
description: Searches within a range, the format of this must be in the format
|
|
1576
|
+
of an object with a "low" and "high" property.
|
|
1577
|
+
example:
|
|
1578
|
+
columnName1:
|
|
1579
|
+
low: 10
|
|
1580
|
+
high: 20
|
|
1581
|
+
equal:
|
|
1582
|
+
type: object
|
|
1583
|
+
description: Searches for rows that have a column value that is exactly the
|
|
1584
|
+
value set.
|
|
1585
|
+
notEqual:
|
|
1586
|
+
type: object
|
|
1587
|
+
description: Searches for any row which does not contain the specified column
|
|
1588
|
+
value.
|
|
1589
|
+
empty:
|
|
1590
|
+
type: object
|
|
1591
|
+
description: Searches for rows which do not contain the specified column. The
|
|
1592
|
+
object should simply contain keys of the column names,
|
|
1593
|
+
these can map to any value.
|
|
1594
|
+
example:
|
|
1595
|
+
columnName1: ""
|
|
1596
|
+
notEmpty:
|
|
1597
|
+
type: object
|
|
1598
|
+
description: Searches for rows which have the specified column.
|
|
1599
|
+
oneOf:
|
|
1600
|
+
type: object
|
|
1601
|
+
description: Searches for rows which have a column value that is any of the
|
|
1602
|
+
specified values. The format of this must be columnName
|
|
1603
|
+
-> [value1, value2].
|
|
1604
|
+
paginate:
|
|
1605
|
+
type: boolean
|
|
1606
|
+
description: Enables pagination, by default this is disabled.
|
|
1607
|
+
bookmark:
|
|
1608
|
+
oneOf:
|
|
1609
|
+
- type: string
|
|
1610
|
+
- type: integer
|
|
1611
|
+
description: If retrieving another page, the bookmark from the previous request
|
|
1612
|
+
must be supplied.
|
|
1613
|
+
limit:
|
|
1614
|
+
type: integer
|
|
1615
|
+
description: The maximum number of rows to return, useful when paginating, for
|
|
1616
|
+
internal tables this will be limited to 1000, for SQL tables
|
|
1617
|
+
it will be 5000.
|
|
1618
|
+
sort:
|
|
1619
|
+
type: object
|
|
1620
|
+
description: A set of parameters describing the sort behaviour of the search.
|
|
1621
|
+
properties:
|
|
1622
|
+
order:
|
|
1623
|
+
type: string
|
|
1624
|
+
enum:
|
|
1625
|
+
- ascending
|
|
1626
|
+
- descending
|
|
1627
|
+
description: The order of the sort, by default this is ascending.
|
|
1628
|
+
column:
|
|
1629
|
+
type: string
|
|
1630
|
+
description: The name of the column by which the rows will be sorted.
|
|
1631
|
+
type:
|
|
1632
|
+
type: string
|
|
1633
|
+
enum:
|
|
1634
|
+
- string
|
|
1635
|
+
- number
|
|
1636
|
+
description: Defines whether the column should be treated as a string or as
|
|
1637
|
+
numbers when sorting.
|
|
1640
1638
|
responses:
|
|
1641
1639
|
"200":
|
|
1642
1640
|
description: The response will contain an array of rows that match the search
|
|
@@ -1667,7 +1665,7 @@ paths:
|
|
|
1667
1665
|
responses:
|
|
1668
1666
|
"200":
|
|
1669
1667
|
description: Returns the created table, including the ID which has been
|
|
1670
|
-
generated for it. This can be internal or external
|
|
1668
|
+
generated for it. This can be internal or external data sources.
|
|
1671
1669
|
content:
|
|
1672
1670
|
application/json:
|
|
1673
1671
|
schema:
|
package/specs/resources/misc.js
CHANGED
|
@@ -2,122 +2,6 @@ const { object } = require("./utils")
|
|
|
2
2
|
const Resource = require("./utils/Resource")
|
|
3
3
|
|
|
4
4
|
module.exports = new Resource().setSchemas({
|
|
5
|
-
rowSearch: object(
|
|
6
|
-
{
|
|
7
|
-
query: {
|
|
8
|
-
type: "object",
|
|
9
|
-
properties: {
|
|
10
|
-
allOr: {
|
|
11
|
-
type: "boolean",
|
|
12
|
-
description:
|
|
13
|
-
"Specifies that a row should be returned if it satisfies any of the specified options, rather than requiring it to fulfill all the search parameters. This defaults to false, meaning AND logic will be used.",
|
|
14
|
-
},
|
|
15
|
-
string: {
|
|
16
|
-
type: "object",
|
|
17
|
-
example: {
|
|
18
|
-
columnName1: "value",
|
|
19
|
-
columnName2: "value",
|
|
20
|
-
},
|
|
21
|
-
description:
|
|
22
|
-
"A map of field name to the string to search for, this will look for rows that have a value starting with the string value.",
|
|
23
|
-
additionalProperties: {
|
|
24
|
-
type: "string",
|
|
25
|
-
description: "The value to search for in the column.",
|
|
26
|
-
},
|
|
27
|
-
},
|
|
28
|
-
fuzzy: {
|
|
29
|
-
type: "object",
|
|
30
|
-
description: "A fuzzy search, only supported by internal tables.",
|
|
31
|
-
},
|
|
32
|
-
range: {
|
|
33
|
-
type: "object",
|
|
34
|
-
description:
|
|
35
|
-
'Searches within a range, the format of this must be in the format of an object with a "low" and "high" property.',
|
|
36
|
-
example: {
|
|
37
|
-
columnName1: {
|
|
38
|
-
low: 10,
|
|
39
|
-
high: 20,
|
|
40
|
-
},
|
|
41
|
-
},
|
|
42
|
-
},
|
|
43
|
-
equal: {
|
|
44
|
-
type: "object",
|
|
45
|
-
description:
|
|
46
|
-
"Searches for rows that have a column value that is exactly the value set.",
|
|
47
|
-
},
|
|
48
|
-
notEqual: {
|
|
49
|
-
type: "object",
|
|
50
|
-
description:
|
|
51
|
-
"Searches for any row which does not contain the specified column value.",
|
|
52
|
-
},
|
|
53
|
-
empty: {
|
|
54
|
-
type: "object",
|
|
55
|
-
description:
|
|
56
|
-
"Searches for rows which do not contain the specified column. The object should simply contain keys of the column names, these can map to any value.",
|
|
57
|
-
example: {
|
|
58
|
-
columnName1: "",
|
|
59
|
-
},
|
|
60
|
-
},
|
|
61
|
-
notEmpty: {
|
|
62
|
-
type: "object",
|
|
63
|
-
description: "Searches for rows which have the specified column.",
|
|
64
|
-
},
|
|
65
|
-
oneOf: {
|
|
66
|
-
type: "object",
|
|
67
|
-
description:
|
|
68
|
-
"Searches for rows which have a column value that is any of the specified values. The format of this must be columnName -> [value1, value2].",
|
|
69
|
-
},
|
|
70
|
-
},
|
|
71
|
-
},
|
|
72
|
-
paginate: {
|
|
73
|
-
type: "boolean",
|
|
74
|
-
description: "Enables pagination, by default this is disabled.",
|
|
75
|
-
},
|
|
76
|
-
bookmark: {
|
|
77
|
-
oneOf: [
|
|
78
|
-
{
|
|
79
|
-
type: "string",
|
|
80
|
-
},
|
|
81
|
-
{
|
|
82
|
-
type: "integer",
|
|
83
|
-
},
|
|
84
|
-
],
|
|
85
|
-
description:
|
|
86
|
-
"If retrieving another page, the bookmark from the previous request must be supplied.",
|
|
87
|
-
},
|
|
88
|
-
limit: {
|
|
89
|
-
type: "integer",
|
|
90
|
-
description:
|
|
91
|
-
"The maximum number of rows to return, useful when paginating, for internal tables this will be limited to 1000, for SQL tables it will be 5000.",
|
|
92
|
-
},
|
|
93
|
-
sort: {
|
|
94
|
-
type: "object",
|
|
95
|
-
description:
|
|
96
|
-
"A set of parameters describing the sort behaviour of the search.",
|
|
97
|
-
properties: {
|
|
98
|
-
order: {
|
|
99
|
-
type: "string",
|
|
100
|
-
enum: ["ascending", "descending"],
|
|
101
|
-
description: "The order of the sort, by default this is ascending.",
|
|
102
|
-
},
|
|
103
|
-
column: {
|
|
104
|
-
type: "string",
|
|
105
|
-
description:
|
|
106
|
-
"The name of the column by which the rows will be sorted.",
|
|
107
|
-
},
|
|
108
|
-
type: {
|
|
109
|
-
type: "string",
|
|
110
|
-
enum: ["string", "number"],
|
|
111
|
-
description:
|
|
112
|
-
"Defines whether the column should be treated as a string or as numbers when sorting.",
|
|
113
|
-
},
|
|
114
|
-
},
|
|
115
|
-
},
|
|
116
|
-
},
|
|
117
|
-
{
|
|
118
|
-
required: ["query"],
|
|
119
|
-
}
|
|
120
|
-
),
|
|
121
5
|
nameSearch: object({
|
|
122
6
|
name: {
|
|
123
7
|
type: "string",
|
package/specs/resources/query.js
CHANGED
|
@@ -472,6 +472,7 @@ const destroyApp = async (ctx: any) => {
|
|
|
472
472
|
const result = await db.destroy()
|
|
473
473
|
|
|
474
474
|
if (isUnpublish) {
|
|
475
|
+
await quotas.removePublishedApp()
|
|
475
476
|
await events.app.unpublished(app)
|
|
476
477
|
} else {
|
|
477
478
|
await quotas.removeApp()
|
|
@@ -571,7 +572,7 @@ export const sync = async (ctx: any, next: any) => {
|
|
|
571
572
|
}
|
|
572
573
|
}
|
|
573
574
|
|
|
574
|
-
|
|
575
|
+
const updateAppPackage = async (appPackage: any, appId: any) => {
|
|
575
576
|
return context.doInAppContext(appId, async () => {
|
|
576
577
|
const db = context.getAppDB()
|
|
577
578
|
const application = await db.get(DocumentType.APP_METADATA)
|
|
@@ -4,15 +4,6 @@ const { getFullUser } = require("../../utilities/users")
|
|
|
4
4
|
const { BUILTIN_ROLE_IDS } = require("@budibase/backend-core/roles")
|
|
5
5
|
const { getAppDB, getAppId } = require("@budibase/backend-core/context")
|
|
6
6
|
|
|
7
|
-
/**
|
|
8
|
-
* Add the attributes that are session based to the current user.
|
|
9
|
-
*/
|
|
10
|
-
const addSessionAttributesToUser = ctx => {
|
|
11
|
-
if (ctx.user) {
|
|
12
|
-
ctx.body.license = ctx.user.license
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
|
|
16
7
|
exports.fetchSelf = async ctx => {
|
|
17
8
|
let userId = ctx.user.userId || ctx.user._id
|
|
18
9
|
/* istanbul ignore next */
|
|
@@ -64,6 +55,4 @@ exports.fetchSelf = async ctx => {
|
|
|
64
55
|
} else {
|
|
65
56
|
ctx.body = user
|
|
66
57
|
}
|
|
67
|
-
|
|
68
|
-
addSessionAttributesToUser(ctx)
|
|
69
58
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
const { DocumentType
|
|
1
|
+
const { DocumentType } = require("../../db/utils")
|
|
2
2
|
const { getComponentLibraryManifest } = require("../../utilities/fileSystem")
|
|
3
3
|
const { getAppDB } = require("@budibase/backend-core/context")
|
|
4
|
-
const { getGlobalDB } = require("@budibase/backend-core/tenancy")
|
|
5
4
|
|
|
6
5
|
exports.fetchAppComponentDefinitions = async function (ctx) {
|
|
7
6
|
try {
|
|
@@ -11,6 +10,7 @@ exports.fetchAppComponentDefinitions = async function (ctx) {
|
|
|
11
10
|
let componentManifests = await Promise.all(
|
|
12
11
|
app.componentLibraries.map(async library => {
|
|
13
12
|
let manifest = await getComponentLibraryManifest(library)
|
|
13
|
+
|
|
14
14
|
return {
|
|
15
15
|
manifest,
|
|
16
16
|
library,
|
|
@@ -31,25 +31,6 @@ exports.fetchAppComponentDefinitions = async function (ctx) {
|
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
|
-
|
|
35
|
-
// Add custom components
|
|
36
|
-
const globalDB = getGlobalDB()
|
|
37
|
-
const response = await globalDB.allDocs(
|
|
38
|
-
getPluginParams(null, {
|
|
39
|
-
include_docs: true,
|
|
40
|
-
})
|
|
41
|
-
)
|
|
42
|
-
response.rows
|
|
43
|
-
.map(row => row.doc)
|
|
44
|
-
.filter(plugin => plugin.schema.type === "component")
|
|
45
|
-
.forEach(plugin => {
|
|
46
|
-
const fullComponentName = `plugin/${plugin.name}`
|
|
47
|
-
definitions[fullComponentName] = {
|
|
48
|
-
component: fullComponentName,
|
|
49
|
-
...plugin.schema.schema,
|
|
50
|
-
}
|
|
51
|
-
})
|
|
52
|
-
|
|
53
34
|
ctx.body = definitions
|
|
54
35
|
} catch (err) {
|
|
55
36
|
console.error(`component-definitions=failed`, err)
|
|
@@ -7,7 +7,7 @@ const {
|
|
|
7
7
|
getTableParams,
|
|
8
8
|
} = require("../../db/utils")
|
|
9
9
|
const { BuildSchemaErrors, InvalidColumns } = require("../../constants")
|
|
10
|
-
const {
|
|
10
|
+
const { integrations } = require("../../integrations")
|
|
11
11
|
const { getDatasourceAndQuery } = require("./row/utils")
|
|
12
12
|
const { invalidateDynamicVariables } = require("../../threads/utils")
|
|
13
13
|
const { getAppDB } = require("@budibase/backend-core/context")
|
|
@@ -50,23 +50,9 @@ exports.fetch = async function (ctx) {
|
|
|
50
50
|
exports.buildSchemaFromDb = async function (ctx) {
|
|
51
51
|
const db = getAppDB()
|
|
52
52
|
const datasource = await db.get(ctx.params.datasourceId)
|
|
53
|
-
const tablesFilter = ctx.request.body.tablesFilter
|
|
54
53
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
if (!datasource.entities) {
|
|
58
|
-
datasource.entities = {}
|
|
59
|
-
}
|
|
60
|
-
for (let key in tables) {
|
|
61
|
-
if (
|
|
62
|
-
tablesFilter.some(filter => filter.toLowerCase() === key.toLowerCase())
|
|
63
|
-
) {
|
|
64
|
-
datasource.entities[key] = tables[key]
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
} else {
|
|
68
|
-
datasource.entities = tables
|
|
69
|
-
}
|
|
54
|
+
const { tables, error } = await buildSchemaHelper(datasource)
|
|
55
|
+
datasource.entities = tables
|
|
70
56
|
|
|
71
57
|
const dbResp = await db.put(datasource)
|
|
72
58
|
datasource._rev = dbResp.rev
|
|
@@ -128,7 +114,7 @@ exports.update = async function (ctx) {
|
|
|
128
114
|
|
|
129
115
|
// Drain connection pools when configuration is changed
|
|
130
116
|
if (datasource.source) {
|
|
131
|
-
const source =
|
|
117
|
+
const source = integrations[datasource.source]
|
|
132
118
|
if (source && source.pool) {
|
|
133
119
|
await source.pool.end()
|
|
134
120
|
}
|
|
@@ -163,7 +149,7 @@ exports.save = async function (ctx) {
|
|
|
163
149
|
|
|
164
150
|
// Drain connection pools when configuration is changed
|
|
165
151
|
if (datasource.source) {
|
|
166
|
-
const source =
|
|
152
|
+
const source = integrations[datasource.source]
|
|
167
153
|
if (source && source.pool) {
|
|
168
154
|
await source.pool.end()
|
|
169
155
|
}
|
|
@@ -232,14 +218,15 @@ function updateError(error, newError, tables) {
|
|
|
232
218
|
}
|
|
233
219
|
|
|
234
220
|
const buildSchemaHelper = async datasource => {
|
|
235
|
-
const Connector =
|
|
221
|
+
const Connector = integrations[datasource.source]
|
|
236
222
|
|
|
237
223
|
// Connect to the DB and build the schema
|
|
238
224
|
const connector = new Connector(datasource.config)
|
|
239
225
|
await connector.buildSchema(datasource._id, datasource.entities)
|
|
226
|
+
datasource.entities = connector.tables
|
|
240
227
|
|
|
241
228
|
// make sure they all have a display name selected
|
|
242
|
-
for (let entity of Object.values(datasource.entities
|
|
229
|
+
for (let entity of Object.values(datasource.entities)) {
|
|
243
230
|
if (entity.primaryDisplay) {
|
|
244
231
|
continue
|
|
245
232
|
}
|
|
@@ -206,7 +206,12 @@ const _deployApp = async function (ctx: any) {
|
|
|
206
206
|
|
|
207
207
|
console.log("Deploying app...")
|
|
208
208
|
|
|
209
|
-
let app
|
|
209
|
+
let app
|
|
210
|
+
if (await isFirstDeploy()) {
|
|
211
|
+
app = await quotas.addPublishedApp(() => deployApp(deployment))
|
|
212
|
+
} else {
|
|
213
|
+
app = await deployApp(deployment)
|
|
214
|
+
}
|
|
210
215
|
|
|
211
216
|
await events.app.published(app)
|
|
212
217
|
ctx.body = deployment
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
const {
|
|
1
|
+
const { cloneDeep } = require("lodash")
|
|
2
|
+
const { definitions } = require("../../integrations")
|
|
2
3
|
const { SourceName } = require("@budibase/types")
|
|
3
4
|
const googlesheets = require("../../integrations/googlesheets")
|
|
4
5
|
const { featureFlags } = require("@budibase/backend-core")
|
|
5
6
|
|
|
6
7
|
exports.fetch = async function (ctx) {
|
|
7
8
|
ctx.status = 200
|
|
8
|
-
const defs =
|
|
9
|
+
const defs = cloneDeep(definitions)
|
|
9
10
|
|
|
10
11
|
// for google sheets integration google verification
|
|
11
12
|
if (featureFlags.isEnabled(featureFlags.FeatureFlag.GOOGLE_SHEETS)) {
|
|
@@ -16,7 +17,6 @@ exports.fetch = async function (ctx) {
|
|
|
16
17
|
}
|
|
17
18
|
|
|
18
19
|
exports.find = async function (ctx) {
|
|
19
|
-
const defs = await getDefinitions()
|
|
20
20
|
ctx.status = 200
|
|
21
|
-
ctx.body =
|
|
21
|
+
ctx.body = definitions[ctx.params.type]
|
|
22
22
|
}
|
|
@@ -4,18 +4,10 @@ export type Query = components["schemas"]["query"]
|
|
|
4
4
|
export type ExecuteQuery = components["schemas"]["executeQueryOutput"]
|
|
5
5
|
|
|
6
6
|
export type Application = components["schemas"]["applicationOutput"]["data"]
|
|
7
|
-
export type CreateApplicationParams = components["schemas"]["application"]
|
|
8
7
|
|
|
9
8
|
export type Table = components["schemas"]["tableOutput"]["data"]
|
|
10
|
-
export type CreateTableParams = components["schemas"]["table"]
|
|
11
9
|
|
|
12
10
|
export type Row = components["schemas"]["rowOutput"]["data"]
|
|
13
11
|
export type RowSearch = components["schemas"]["searchOutput"]
|
|
14
|
-
export type CreateRowParams = components["schemas"]["row"]
|
|
15
12
|
|
|
16
13
|
export type User = components["schemas"]["userOutput"]["data"]
|
|
17
|
-
export type CreateUserParams = components["schemas"]["user"]
|
|
18
|
-
|
|
19
|
-
export type SearchInputParams =
|
|
20
|
-
| components["schemas"]["nameSearch"]
|
|
21
|
-
| components["schemas"]["rowSearch"]
|
|
@@ -53,7 +53,7 @@ exports.save = async ctx => {
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
exports.fetchView = async ctx => {
|
|
56
|
-
// there are no views in external
|
|
56
|
+
// there are no views in external data sources, shouldn't ever be called
|
|
57
57
|
// for now just fetch
|
|
58
58
|
const split = ctx.params.viewName.split("all_")
|
|
59
59
|
ctx.params.tableId = split[1] ? split[1] : split[0]
|
|
@@ -1,14 +1,7 @@
|
|
|
1
|
-
const {
|
|
2
|
-
getScreenParams,
|
|
3
|
-
generateScreenID,
|
|
4
|
-
getPluginParams,
|
|
5
|
-
DocumentType,
|
|
6
|
-
} = require("../../db/utils")
|
|
1
|
+
const { getScreenParams, generateScreenID } = require("../../db/utils")
|
|
7
2
|
const { AccessController } = require("@budibase/backend-core/roles")
|
|
8
3
|
const { getAppDB } = require("@budibase/backend-core/context")
|
|
9
4
|
const { events } = require("@budibase/backend-core")
|
|
10
|
-
const { getGlobalDB } = require("@budibase/backend-core/tenancy")
|
|
11
|
-
const { updateAppPackage } = require("./application")
|
|
12
5
|
|
|
13
6
|
exports.fetch = async ctx => {
|
|
14
7
|
const db = getAppDB()
|
|
@@ -39,48 +32,6 @@ exports.save = async ctx => {
|
|
|
39
32
|
|
|
40
33
|
const response = await db.put(screen)
|
|
41
34
|
|
|
42
|
-
// Find any custom components being used
|
|
43
|
-
let pluginNames = []
|
|
44
|
-
let pluginAdded = false
|
|
45
|
-
findPlugins(screen.props, pluginNames)
|
|
46
|
-
if (pluginNames.length) {
|
|
47
|
-
const globalDB = getGlobalDB()
|
|
48
|
-
const pluginsResponse = await globalDB.allDocs(
|
|
49
|
-
getPluginParams(null, {
|
|
50
|
-
include_docs: true,
|
|
51
|
-
})
|
|
52
|
-
)
|
|
53
|
-
const requiredPlugins = pluginsResponse.rows
|
|
54
|
-
.map(row => row.doc)
|
|
55
|
-
.filter(plugin => {
|
|
56
|
-
return (
|
|
57
|
-
plugin.schema.type === "component" &&
|
|
58
|
-
pluginNames.includes(`plugin/${plugin.name}`)
|
|
59
|
-
)
|
|
60
|
-
})
|
|
61
|
-
|
|
62
|
-
// Update the app metadata
|
|
63
|
-
const application = await db.get(DocumentType.APP_METADATA)
|
|
64
|
-
let usedPlugins = application.usedPlugins || []
|
|
65
|
-
|
|
66
|
-
requiredPlugins.forEach(plugin => {
|
|
67
|
-
if (!usedPlugins.find(x => x._id === plugin._id)) {
|
|
68
|
-
pluginAdded = true
|
|
69
|
-
usedPlugins.push({
|
|
70
|
-
_id: plugin._id,
|
|
71
|
-
name: plugin.name,
|
|
72
|
-
version: plugin.version,
|
|
73
|
-
jsUrl: plugin.jsUrl,
|
|
74
|
-
hash: plugin.hash,
|
|
75
|
-
})
|
|
76
|
-
}
|
|
77
|
-
})
|
|
78
|
-
|
|
79
|
-
if (pluginAdded) {
|
|
80
|
-
await updateAppPackage({ usedPlugins }, ctx.appId)
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
35
|
if (eventFn) {
|
|
85
36
|
await eventFn(screen)
|
|
86
37
|
}
|
|
@@ -89,7 +40,6 @@ exports.save = async ctx => {
|
|
|
89
40
|
...screen,
|
|
90
41
|
_id: response.id,
|
|
91
42
|
_rev: response.rev,
|
|
92
|
-
pluginAdded,
|
|
93
43
|
}
|
|
94
44
|
}
|
|
95
45
|
|
|
@@ -106,18 +56,3 @@ exports.destroy = async ctx => {
|
|
|
106
56
|
}
|
|
107
57
|
ctx.status = 200
|
|
108
58
|
}
|
|
109
|
-
|
|
110
|
-
const findPlugins = (component, foundPlugins) => {
|
|
111
|
-
if (!component) {
|
|
112
|
-
return
|
|
113
|
-
}
|
|
114
|
-
if (component._component.startsWith("plugin")) {
|
|
115
|
-
if (!foundPlugins.includes(component._component)) {
|
|
116
|
-
foundPlugins.push(component._component)
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
if (!component._children || !component._children.length) {
|
|
120
|
-
return
|
|
121
|
-
}
|
|
122
|
-
component._children.forEach(child => findPlugins(child, foundPlugins))
|
|
123
|
-
}
|
|
@@ -18,6 +18,7 @@ const { DocumentType } = require("../../../db/utils")
|
|
|
18
18
|
const { getAppDB, getAppId } = require("@budibase/backend-core/context")
|
|
19
19
|
const { setCookie, clearCookie } = require("@budibase/backend-core/utils")
|
|
20
20
|
const AWS = require("aws-sdk")
|
|
21
|
+
|
|
21
22
|
const fs = require("fs")
|
|
22
23
|
const {
|
|
23
24
|
downloadTarballDirect,
|
|
@@ -112,7 +113,6 @@ export const serveApp = async function (ctx: any) {
|
|
|
112
113
|
production: env.isProd(),
|
|
113
114
|
appId,
|
|
114
115
|
clientLibPath: clientLibraryPath(appId, appInfo.version, ctx),
|
|
115
|
-
usedPlugins: appInfo.usedPlugins,
|
|
116
116
|
})
|
|
117
117
|
|
|
118
118
|
const appHbs = loadHandlebarsFile(`${__dirname}/templates/app.hbs`)
|