@budibase/server 1.3.12 → 1.3.15-alpha.0
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.b266d29f.js +995 -0
- package/builder/assets/{index.e50bda9f.css → index.f5c54dd2.css} +2 -2
- package/builder/index.html +2 -4
- package/coverage/clover.xml +377 -313
- package/coverage/coverage-final.json +22 -22
- package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
- package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
- package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
- package/coverage/lcov-report/api/controllers/backup.js.html +8 -5
- package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
- package/coverage/lcov-report/api/controllers/component.js.html +82 -13
- package/coverage/lcov-report/api/controllers/datasource.js.html +20 -20
- package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
- package/coverage/lcov-report/api/controllers/index.html +32 -32
- 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 +1 -1
- 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 +204 -12
- 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 +12 -12
- 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 +1 -1
- package/coverage/lcov-report/api/routes/templates.js.html +1 -1
- package/coverage/lcov-report/api/routes/user.js.html +1 -1
- package/coverage/lcov-report/api/routes/utils/index.html +1 -1
- package/coverage/lcov-report/api/routes/utils/validators.js.html +1 -1
- package/coverage/lcov-report/api/routes/view.js.html +1 -1
- package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
- package/coverage/lcov-report/automations/actions.js.html +1 -1
- package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
- package/coverage/lcov-report/automations/bullboard.js.html +1 -1
- package/coverage/lcov-report/automations/index.html +24 -24
- package/coverage/lcov-report/automations/index.js.html +18 -9
- 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 +126 -24
- 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 +56 -20
- package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
- package/coverage/lcov-report/events/index.html +1 -1
- package/coverage/lcov-report/events/index.js.html +1 -1
- package/coverage/lcov-report/events/utils.js.html +1 -1
- package/coverage/lcov-report/index.html +48 -48
- 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 +33 -33
- package/coverage/lcov-report/middleware/index.html +1 -1
- 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 +19 -19
- package/coverage/lcov-report/utilities/index.js.html +66 -42
- 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 +5 -5
- package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
- package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +4 -4
- 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 +6 -3
- 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 +1 -1
- package/coverage/lcov.info +692 -564
- package/dist/api/controllers/application.js +6 -9
- package/dist/api/controllers/backup.js +2 -1
- package/dist/api/controllers/component.js +18 -1
- package/dist/api/controllers/datasource.js +4 -4
- package/dist/api/controllers/deploy/index.js +17 -2
- package/dist/api/controllers/integration.js +4 -4
- package/dist/api/controllers/plugin.js +119 -0
- package/dist/api/controllers/row/ExternalRequest.js +1 -1
- package/dist/api/controllers/screen.js +51 -2
- package/dist/api/controllers/static/index.js +1 -0
- package/dist/api/controllers/static/templates/BudibaseApp.svelte +10 -0
- package/dist/api/controllers/static/templates/preview.hbs +3 -1
- package/dist/api/routes/index.js +2 -0
- package/dist/api/routes/plugin.js +38 -0
- package/dist/app.js +9 -0
- package/dist/automations/index.js +10 -5
- package/dist/automations/triggers.js +39 -5
- package/dist/automations/utils.js +16 -7
- package/dist/db/utils.js +10 -1
- package/dist/environment.js +1 -0
- package/dist/integrations/airtable.js +126 -129
- package/dist/integrations/arangodb.js +86 -89
- package/dist/integrations/base/query.js +2 -2
- package/dist/integrations/couchdb.js +80 -83
- package/dist/integrations/dynamodb.js +161 -164
- package/dist/integrations/elasticsearch.js +135 -138
- package/dist/integrations/firebase.js +154 -157
- package/dist/integrations/googlesheets.js +323 -327
- package/dist/integrations/index.js +93 -51
- package/dist/integrations/microsoftSqlServer.js +240 -243
- package/dist/integrations/mongodb.js +239 -242
- package/dist/integrations/mysql.js +215 -219
- package/dist/integrations/oracle.js +318 -322
- package/dist/integrations/postgres.js +262 -265
- package/dist/integrations/redis.js +134 -139
- package/dist/integrations/rest.js +293 -281
- package/dist/integrations/s3.js +61 -64
- package/dist/integrations/snowflake.js +83 -86
- package/dist/package.json +8 -6
- package/dist/threads/automation.js +6 -0
- package/dist/threads/query.js +2 -2
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utilities/fileSystem/index.js +71 -6
- package/dist/utilities/index.js +8 -0
- package/dist/utilities/rowProcessor/utils.js +1 -1
- package/dist/utilities/usageQuota/rows.js +2 -1
- package/dist/watch.js +77 -0
- package/package.json +9 -7
- package/scripts/dev/manage.js +1 -0
- package/src/api/controllers/application.ts +2 -6
- package/src/api/controllers/backup.js +2 -1
- package/src/api/controllers/component.js +25 -2
- package/src/api/controllers/datasource.js +4 -4
- package/src/api/controllers/deploy/index.ts +17 -4
- package/src/api/controllers/integration.js +4 -4
- package/src/api/controllers/plugin.ts +110 -0
- package/src/api/controllers/row/ExternalRequest.ts +1 -1
- package/src/api/controllers/screen.js +65 -1
- package/src/api/controllers/static/index.ts +1 -0
- package/src/api/controllers/static/templates/BudibaseApp.svelte +10 -0
- package/src/api/controllers/static/templates/preview.hbs +3 -1
- package/src/api/routes/index.ts +2 -0
- package/src/api/routes/plugin.ts +13 -0
- package/src/api/routes/tests/query.spec.js +11 -28
- package/src/app.ts +12 -0
- package/src/automations/index.js +6 -3
- package/src/automations/triggers.js +44 -10
- package/src/automations/utils.ts +21 -9
- package/src/db/utils.js +12 -0
- package/src/definitions/datasource.ts +1 -0
- package/src/environment.js +1 -0
- package/src/integrations/airtable.ts +116 -118
- package/src/integrations/arangodb.ts +87 -89
- package/src/integrations/base/query.ts +2 -2
- package/src/integrations/couchdb.ts +83 -89
- package/src/integrations/dynamodb.ts +173 -175
- package/src/integrations/elasticsearch.ts +120 -122
- package/src/integrations/firebase.ts +157 -159
- package/src/integrations/googlesheets.ts +328 -338
- package/src/integrations/index.ts +59 -21
- package/src/integrations/microsoftSqlServer.ts +249 -251
- package/src/integrations/mongodb.ts +261 -258
- package/src/integrations/mysql.ts +229 -234
- package/src/integrations/oracle.ts +373 -380
- package/src/integrations/postgres.ts +264 -268
- package/src/integrations/redis.ts +128 -132
- package/src/integrations/rest.ts +325 -317
- package/src/integrations/s3.ts +68 -71
- package/src/integrations/snowflake.ts +80 -82
- package/src/integrations/tests/{airtable.spec.js → airtable.spec.ts} +21 -18
- package/src/integrations/tests/{arangodb.spec.js → arangodb.spec.ts} +12 -9
- package/src/integrations/tests/{couchdb.spec.js → couchdb.spec.ts} +33 -27
- package/src/integrations/tests/{dynamodb.spec.js → dynamodb.spec.ts} +45 -41
- package/src/integrations/tests/{elasticsearch.spec.js → elasticsearch.spec.ts} +22 -21
- package/src/integrations/tests/{firebase.spec.js → firebase.spec.ts} +33 -28
- package/src/integrations/tests/{microsoftSqlServer.spec.js → microsoftSqlServer.spec.ts} +12 -11
- package/src/integrations/tests/{mongo.spec.js → mongo.spec.ts} +46 -35
- package/src/integrations/tests/{mysql.spec.js → mysql.spec.ts} +17 -15
- package/src/integrations/tests/{oracle.spec.js → oracle.spec.ts} +19 -17
- package/src/integrations/tests/{postgres.spec.js → postgres.spec.ts} +19 -17
- package/src/integrations/tests/{redis.spec.js → redis.spec.ts} +27 -18
- package/src/integrations/tests/{rest.spec.js → rest.spec.ts} +57 -14
- package/src/integrations/tests/{s3.spec.js → s3.spec.ts} +10 -8
- package/src/integrations/tests/{sql.spec.js → sql.spec.ts} +228 -177
- package/src/module.d.ts +1 -0
- package/src/threads/automation.ts +6 -0
- package/src/threads/query.ts +2 -2
- package/src/utilities/fileSystem/index.js +75 -6
- package/src/utilities/index.js +8 -0
- package/src/utilities/rowProcessor/utils.js +1 -1
- package/src/utilities/usageQuota/rows.js +2 -1
- package/src/watch.ts +38 -0
- package/builder/assets/index.a4ba55ba.js +0 -875
- package/builder/assets/vendor.5e1fe644.css +0 -1
- package/builder/assets/vendor.67dbd8fa.js +0 -248
|
@@ -18,6 +18,7 @@ const {
|
|
|
18
18
|
deleteFiles,
|
|
19
19
|
} = require("./utilities")
|
|
20
20
|
const { updateClientLibrary } = require("./clientLibrary")
|
|
21
|
+
const { checkSlashesInUrl } = require("../")
|
|
21
22
|
const env = require("../../environment")
|
|
22
23
|
const {
|
|
23
24
|
USER_METDATA_PREFIX,
|
|
@@ -26,9 +27,12 @@ const {
|
|
|
26
27
|
} = require("../../db/utils")
|
|
27
28
|
const MemoryStream = require("memorystream")
|
|
28
29
|
const { getAppId } = require("@budibase/backend-core/context")
|
|
30
|
+
const tar = require("tar")
|
|
31
|
+
const fetch = require("node-fetch")
|
|
29
32
|
|
|
30
33
|
const TOP_LEVEL_PATH = join(__dirname, "..", "..", "..")
|
|
31
34
|
const NODE_MODULES_PATH = join(TOP_LEVEL_PATH, "node_modules")
|
|
35
|
+
const DATASOURCE_PATH = join(budibaseTempDir(), "datasource")
|
|
32
36
|
|
|
33
37
|
/**
|
|
34
38
|
* The single stack system (Cloud and Builder) should not make use of the file system where possible,
|
|
@@ -99,6 +103,13 @@ exports.loadHandlebarsFile = path => {
|
|
|
99
103
|
return fs.readFileSync(path, "utf8")
|
|
100
104
|
}
|
|
101
105
|
|
|
106
|
+
/**
|
|
107
|
+
* Same as above just with a different name.
|
|
108
|
+
*/
|
|
109
|
+
exports.loadJSFile = (directory, name) => {
|
|
110
|
+
return fs.readFileSync(join(directory, name), "utf8")
|
|
111
|
+
}
|
|
112
|
+
|
|
102
113
|
/**
|
|
103
114
|
* When return a file from the API need to write the file to the system temporarily so we
|
|
104
115
|
* can create a read stream to send.
|
|
@@ -125,13 +136,13 @@ exports.defineFilter = excludeRows => {
|
|
|
125
136
|
* data or user relationships.
|
|
126
137
|
* @param {string} appId The app to backup
|
|
127
138
|
* @param {object} config Config to send to export DB
|
|
128
|
-
* @param {boolean}
|
|
139
|
+
* @param {boolean} excludeRows Flag to state whether the export should include data.
|
|
129
140
|
* @returns {*} either a string or a stream of the backup
|
|
130
141
|
*/
|
|
131
|
-
const backupAppData = async (appId, config,
|
|
142
|
+
const backupAppData = async (appId, config, excludeRows) => {
|
|
132
143
|
return await exports.exportDB(appId, {
|
|
133
144
|
...config,
|
|
134
|
-
filter: exports.defineFilter(
|
|
145
|
+
filter: exports.defineFilter(excludeRows),
|
|
135
146
|
})
|
|
136
147
|
}
|
|
137
148
|
|
|
@@ -148,11 +159,11 @@ exports.performBackup = async (appId, backupName) => {
|
|
|
148
159
|
/**
|
|
149
160
|
* Streams a backup of the database state for an app
|
|
150
161
|
* @param {string} appId The ID of the app which is to be backed up.
|
|
151
|
-
* @param {boolean}
|
|
162
|
+
* @param {boolean} excludeRows Flag to state whether the export should include data.
|
|
152
163
|
* @returns {*} a readable stream of the backup which is written in real time
|
|
153
164
|
*/
|
|
154
|
-
exports.streamBackup = async (appId,
|
|
155
|
-
return await backupAppData(appId, { stream: true },
|
|
165
|
+
exports.streamBackup = async (appId, excludeRows) => {
|
|
166
|
+
return await backupAppData(appId, { stream: true }, excludeRows)
|
|
156
167
|
}
|
|
157
168
|
|
|
158
169
|
/**
|
|
@@ -327,6 +338,64 @@ exports.cleanup = appIds => {
|
|
|
327
338
|
}
|
|
328
339
|
}
|
|
329
340
|
|
|
341
|
+
exports.extractPluginTarball = async file => {
|
|
342
|
+
if (!file.name.endsWith(".tar.gz")) {
|
|
343
|
+
throw new Error("Plugin must be compressed into a gzipped tarball.")
|
|
344
|
+
}
|
|
345
|
+
const path = join(budibaseTempDir(), file.name.split(".tar.gz")[0])
|
|
346
|
+
// remove old tmp directories automatically - don't combine
|
|
347
|
+
if (fs.existsSync(path)) {
|
|
348
|
+
fs.rmSync(path, { recursive: true, force: true })
|
|
349
|
+
}
|
|
350
|
+
fs.mkdirSync(path)
|
|
351
|
+
await tar.extract({
|
|
352
|
+
file: file.path,
|
|
353
|
+
C: path,
|
|
354
|
+
})
|
|
355
|
+
let metadata = {}
|
|
356
|
+
try {
|
|
357
|
+
const pkg = fs.readFileSync(join(path, "package.json"), "utf8")
|
|
358
|
+
const schema = fs.readFileSync(join(path, "schema.json"), "utf8")
|
|
359
|
+
metadata.schema = JSON.parse(schema)
|
|
360
|
+
metadata.package = JSON.parse(pkg)
|
|
361
|
+
} catch (err) {
|
|
362
|
+
throw new Error("Unable to process schema.json/package.json in plugin.")
|
|
363
|
+
}
|
|
364
|
+
return { metadata, directory: path }
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
exports.getDatasourcePlugin = async (name, url, hash) => {
|
|
368
|
+
if (!fs.existsSync(DATASOURCE_PATH)) {
|
|
369
|
+
fs.mkdirSync(DATASOURCE_PATH)
|
|
370
|
+
}
|
|
371
|
+
const filename = join(DATASOURCE_PATH, name)
|
|
372
|
+
const metadataName = `${filename}.bbmetadata`
|
|
373
|
+
if (fs.existsSync(filename)) {
|
|
374
|
+
const currentHash = fs.readFileSync(metadataName, "utf8")
|
|
375
|
+
// if hash is the same return the file, otherwise remove it and re-download
|
|
376
|
+
if (currentHash === hash) {
|
|
377
|
+
return require(filename)
|
|
378
|
+
} else {
|
|
379
|
+
console.log(`Updating plugin: ${name}`)
|
|
380
|
+
fs.unlinkSync(filename)
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
const fullUrl = checkSlashesInUrl(
|
|
384
|
+
`${env.MINIO_URL}/${ObjectStoreBuckets.PLUGINS}/${url}`
|
|
385
|
+
)
|
|
386
|
+
const response = await fetch(fullUrl)
|
|
387
|
+
if (response.status === 200) {
|
|
388
|
+
const content = await response.text()
|
|
389
|
+
fs.writeFileSync(filename, content)
|
|
390
|
+
fs.writeFileSync(metadataName, hash)
|
|
391
|
+
require(filename)
|
|
392
|
+
} else {
|
|
393
|
+
throw new Error(
|
|
394
|
+
`Unable to retrieve plugin - reason: ${await response.text()}`
|
|
395
|
+
)
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
|
|
330
399
|
/**
|
|
331
400
|
* Full function definition for below can be found in the utilities.
|
|
332
401
|
*/
|
package/src/utilities/index.js
CHANGED
|
@@ -72,7 +72,8 @@ exports.getUniqueRows = async appIds => {
|
|
|
72
72
|
// ensure uniqueness on a per app pair basis
|
|
73
73
|
// this can't be done on all rows because app import results in
|
|
74
74
|
// duplicate row ids across apps
|
|
75
|
-
|
|
75
|
+
// the array pre-concat is important to avoid stack overflow
|
|
76
|
+
uniqueRows = uniqueRows.concat([...new Set(appRows)])
|
|
76
77
|
}
|
|
77
78
|
|
|
78
79
|
return uniqueRows
|
package/src/watch.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import path from "path"
|
|
2
|
+
import * as env from "./environment"
|
|
3
|
+
import chokidar from "chokidar"
|
|
4
|
+
import fs from "fs"
|
|
5
|
+
import { tenancy } from "@budibase/backend-core"
|
|
6
|
+
import { DEFAULT_TENANT_ID } from "@budibase/backend-core/constants"
|
|
7
|
+
import { processPlugin } from "./api/controllers/plugin"
|
|
8
|
+
|
|
9
|
+
export function watch() {
|
|
10
|
+
const watchPath = path.join(env.PLUGINS_DIR, "./**/*.tar.gz")
|
|
11
|
+
chokidar
|
|
12
|
+
.watch(watchPath, {
|
|
13
|
+
ignored: "**/node_modules",
|
|
14
|
+
awaitWriteFinish: {
|
|
15
|
+
pollInterval: 100,
|
|
16
|
+
stabilityThreshold: 250,
|
|
17
|
+
},
|
|
18
|
+
usePolling: true,
|
|
19
|
+
interval: 250,
|
|
20
|
+
})
|
|
21
|
+
.on("all", async (event: string, path: string) => {
|
|
22
|
+
// Sanity checks
|
|
23
|
+
if (!path?.endsWith(".tar.gz") || !fs.existsSync(path)) {
|
|
24
|
+
return
|
|
25
|
+
}
|
|
26
|
+
await tenancy.doInTenant(DEFAULT_TENANT_ID, async () => {
|
|
27
|
+
try {
|
|
28
|
+
const split = path.split("/")
|
|
29
|
+
const name = split[split.length - 1]
|
|
30
|
+
console.log("Importing plugin:", path)
|
|
31
|
+
await processPlugin({ name, path })
|
|
32
|
+
} catch (err: any) {
|
|
33
|
+
const message = err?.message ? err?.message : err
|
|
34
|
+
console.error("Failed to import plugin:", message)
|
|
35
|
+
}
|
|
36
|
+
})
|
|
37
|
+
})
|
|
38
|
+
}
|