2022-08-19 00:29:49 +12:00
|
|
|
import path from "path"
|
2023-01-11 22:37:37 +13:00
|
|
|
import env from "./environment"
|
2022-08-19 00:29:49 +12:00
|
|
|
import chokidar from "chokidar"
|
|
|
|
import fs from "fs"
|
2022-11-23 08:49:59 +13:00
|
|
|
import { constants, tenancy } from "@budibase/backend-core"
|
2023-04-13 03:22:30 +12:00
|
|
|
import pluginsSdk from "./sdk/plugins"
|
2022-08-19 00:29:49 +12:00
|
|
|
|
|
|
|
export function watch() {
|
|
|
|
const watchPath = path.join(env.PLUGINS_DIR, "./**/*.tar.gz")
|
|
|
|
chokidar
|
|
|
|
.watch(watchPath, {
|
|
|
|
ignored: "**/node_modules",
|
2022-09-01 23:51:28 +12:00
|
|
|
awaitWriteFinish: {
|
|
|
|
pollInterval: 100,
|
|
|
|
stabilityThreshold: 250,
|
|
|
|
},
|
|
|
|
usePolling: true,
|
|
|
|
interval: 250,
|
2022-08-19 00:29:49 +12:00
|
|
|
})
|
|
|
|
.on("all", async (event: string, path: string) => {
|
|
|
|
// Sanity checks
|
|
|
|
if (!path?.endsWith(".tar.gz") || !fs.existsSync(path)) {
|
|
|
|
return
|
|
|
|
}
|
2022-11-23 08:49:59 +13:00
|
|
|
await tenancy.doInTenant(constants.DEFAULT_TENANT_ID, async () => {
|
2022-08-19 00:29:49 +12:00
|
|
|
try {
|
|
|
|
const split = path.split("/")
|
|
|
|
const name = split[split.length - 1]
|
|
|
|
console.log("Importing plugin:", path)
|
2023-04-13 03:22:30 +12:00
|
|
|
await pluginsSdk.processUploaded({ name, path })
|
2022-09-03 06:32:15 +12:00
|
|
|
} catch (err: any) {
|
|
|
|
const message = err?.message ? err?.message : err
|
|
|
|
console.error("Failed to import plugin:", message)
|
2022-08-19 00:29:49 +12:00
|
|
|
}
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|