diff --git a/packages/backend-core/src/featureFlags/index.ts b/packages/backend-core/src/features/index.ts similarity index 98% rename from packages/backend-core/src/featureFlags/index.ts rename to packages/backend-core/src/features/index.ts index 877cd60e1a..8f5c903e05 100644 --- a/packages/backend-core/src/featureFlags/index.ts +++ b/packages/backend-core/src/features/index.ts @@ -1,5 +1,6 @@ import env from "../environment" import * as context from "../context" +export * from "./installation" /** * Read the TENANT_FEATURE_FLAGS env var and return an array of features flags for each tenant. diff --git a/packages/backend-core/src/features/installation.ts b/packages/backend-core/src/features/installation.ts new file mode 100644 index 0000000000..defc8bf987 --- /dev/null +++ b/packages/backend-core/src/features/installation.ts @@ -0,0 +1,17 @@ +export function processFeatureEnvVar( + fullList: string[], + featureList?: string +) { + let list + if (!featureList) { + list = fullList + } else { + list = featureList.split(",") + } + for (let feature of list) { + if (!fullList.includes(feature)) { + throw new Error(`Feature: ${feature} is not an allowed option`) + } + } + return list as unknown as T[] +} diff --git a/packages/backend-core/src/featureFlags/tests/featureFlags.spec.ts b/packages/backend-core/src/features/tests/featureFlags.spec.ts similarity index 100% rename from packages/backend-core/src/featureFlags/tests/featureFlags.spec.ts rename to packages/backend-core/src/features/tests/featureFlags.spec.ts diff --git a/packages/backend-core/src/index.ts b/packages/backend-core/src/index.ts index 7b98674788..ffffd8240a 100644 --- a/packages/backend-core/src/index.ts +++ b/packages/backend-core/src/index.ts @@ -6,7 +6,8 @@ export * as roles from "./security/roles" export * as permissions from "./security/permissions" export * as accounts from "./accounts" export * as installation from "./installation" -export * as featureFlags from "./featureFlags" +export * as featureFlags from "./features" +export * as features from "./features/installation" export * as sessions from "./security/sessions" export * as platform from "./platform" export * as auth from "./auth" diff --git a/packages/server/src/features.ts b/packages/server/src/features.ts index 0120e48e2a..d641bd00b8 100644 --- a/packages/server/src/features.ts +++ b/packages/server/src/features.ts @@ -1,3 +1,4 @@ +import { features } from "@budibase/backend-core" import env from "./environment" enum AppFeature { @@ -5,23 +6,10 @@ enum AppFeature { AUTOMATIONS = "automations", } -const featureList = processFeatureList() - -function processFeatureList() { - const fullList = Object.values(AppFeature) as string[] - let list - if (!env.APP_FEATURES) { - list = fullList - } else { - list = env.APP_FEATURES.split(",") - } - for (let feature of list) { - if (!fullList.includes(feature)) { - throw new Error(`Feature: ${feature} is not an allowed option`) - } - } - return list -} +const featureList = features.processFeatureEnvVar( + Object.keys(AppFeature), + env.APP_FEATURES +) export function isFeatureEnabled(feature: AppFeature) { return featureList.includes(feature) diff --git a/packages/worker/src/features.ts b/packages/worker/src/features.ts index c9b5af7fad..075b3b81ca 100644 --- a/packages/worker/src/features.ts +++ b/packages/worker/src/features.ts @@ -1,25 +1,12 @@ +import { features } from "@budibase/backend-core" import env from "./environment" enum WorkerFeature {} -const featureList: WorkerFeature[] = processFeatureList() - -function processFeatureList() { - const fullList = Object.values(WorkerFeature) as string[] - let list - if (!env.WORKER_FEATURES) { - list = fullList - } else { - list = env.WORKER_FEATURES.split(",") - } - for (let feature of list) { - if (!fullList.includes(feature)) { - throw new Error(`Feature: ${feature} is not an allowed option`) - } - } - // casting ok - confirmed definitely is a list of worker features - return list as unknown as WorkerFeature[] -} +const featureList: WorkerFeature[] = features.processFeatureEnvVar( + Object.values(WorkerFeature), + env.WORKER_FEATURES +) export function isFeatureEnabled(feature: WorkerFeature) { return featureList.includes(feature)