@webiny/feature-flags 0.0.0-unstable.c7dec08bb0 → 0.0.0-unstable.d0f34a8194

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.
@@ -0,0 +1,48 @@
1
+ import type { IFeatureFlagsDto } from "./types.js";
2
+ export type KnownFeatureFlag = "multiTenancy" | "languages" | "advancedPublishingWorkflow" | "advancedAccessControlLayer" | "advancedAccessControlLayer.teams" | "advancedAccessControlLayer.privateFiles" | "advancedAccessControlLayer.folderLevelPermissions" | "advancedAccessControlLayer.hcmsFieldPermissions" | "auditLogs" | "recordLocking" | "fileManager.threatDetection" | "aiPowerups" | "aiPowerups.websiteBuilder.pageGeneration" | "aiPowerups.websiteBuilder.pageTranslation" | "aiPowerups.fileManager.imageEnrichment" | "aiPowerups.lexicalGeneration" | "aiPowerups.adminAssistant" | "aiPowerups.remoteComponents" | "aiPowerups.cms.entryGeneration" | "aiPowerups.cms.entryComparison" | "aiPowerups.cms.entryTranslation" | "abTesting" | "collaboration" | "collaboration.comments" | "collaboration.activityLog";
3
+ export type FeatureFlagName = KnownFeatureFlag | (string & {});
4
+ export declare class FeatureFlags {
5
+ private readonly flags;
6
+ static fromDto(dto: IFeatureFlagsDto): FeatureFlags;
7
+ constructor(flags?: IFeatureFlagsDto);
8
+ isExplicitlyDisabled(name: FeatureFlagName): boolean;
9
+ isEnabled(name: FeatureFlagName): boolean;
10
+ toDto(): {
11
+ multiTenancy: boolean;
12
+ languages: boolean;
13
+ advancedPublishingWorkflow: boolean;
14
+ advancedAccessControlLayer: boolean | {
15
+ teams: boolean;
16
+ privateFiles: boolean;
17
+ folderLevelPermissions: boolean;
18
+ hcmsFieldPermissions: boolean;
19
+ };
20
+ auditLogs: boolean;
21
+ recordLocking: boolean;
22
+ fileManager: {
23
+ threatDetection: boolean;
24
+ };
25
+ aiPowerups: boolean | {
26
+ websiteBuilder: {
27
+ pageGeneration: boolean;
28
+ pageTranslation: boolean;
29
+ };
30
+ fileManager: {
31
+ imageEnrichment: boolean;
32
+ };
33
+ lexicalGeneration: boolean;
34
+ adminAssistant: boolean;
35
+ remoteComponents: boolean;
36
+ cms: {
37
+ entryGeneration: boolean;
38
+ entryComparison: boolean;
39
+ entryTranslation: boolean;
40
+ };
41
+ };
42
+ abTesting: boolean;
43
+ collaboration: boolean | {
44
+ comments: boolean;
45
+ activityLog: boolean;
46
+ };
47
+ };
48
+ }
@@ -0,0 +1,80 @@
1
+ class FeatureFlags {
2
+ static fromDto(dto) {
3
+ return new FeatureFlags(dto);
4
+ }
5
+ constructor(flags = {}){
6
+ this.flags = flags;
7
+ }
8
+ isExplicitlyDisabled(name) {
9
+ const segments = name.split(".");
10
+ let current = this.flags;
11
+ for(let i = 0; i < segments.length; i++){
12
+ if (false === current) return true;
13
+ if (void 0 === current || true === current) return false;
14
+ if ("object" == typeof current && null !== current) {
15
+ current = current[segments[i]];
16
+ continue;
17
+ }
18
+ return false;
19
+ }
20
+ return false === current;
21
+ }
22
+ isEnabled(name) {
23
+ const segments = name.split(".");
24
+ let current = this.flags;
25
+ for(let i = 0; i < segments.length; i++){
26
+ if (false === current || void 0 === current) return false;
27
+ if (true === current) return true;
28
+ if ("object" == typeof current && null !== current) {
29
+ current = current[segments[i]];
30
+ continue;
31
+ }
32
+ return false;
33
+ }
34
+ if ("object" == typeof current && null !== current) return true;
35
+ return true === current;
36
+ }
37
+ toDto() {
38
+ return {
39
+ multiTenancy: this.isEnabled("multiTenancy"),
40
+ languages: this.isEnabled("languages"),
41
+ advancedPublishingWorkflow: this.isEnabled("advancedPublishingWorkflow"),
42
+ advancedAccessControlLayer: this.isEnabled("advancedAccessControlLayer") ? {
43
+ teams: this.isEnabled("advancedAccessControlLayer.teams"),
44
+ privateFiles: this.isEnabled("advancedAccessControlLayer.privateFiles"),
45
+ folderLevelPermissions: this.isEnabled("advancedAccessControlLayer.folderLevelPermissions"),
46
+ hcmsFieldPermissions: this.isEnabled("advancedAccessControlLayer.hcmsFieldPermissions")
47
+ } : false,
48
+ auditLogs: this.isEnabled("auditLogs"),
49
+ recordLocking: this.isEnabled("recordLocking"),
50
+ fileManager: {
51
+ threatDetection: this.isEnabled("fileManager.threatDetection")
52
+ },
53
+ aiPowerups: this.isEnabled("aiPowerups") ? {
54
+ websiteBuilder: {
55
+ pageGeneration: this.isEnabled("aiPowerups.websiteBuilder.pageGeneration"),
56
+ pageTranslation: this.isEnabled("aiPowerups.websiteBuilder.pageTranslation")
57
+ },
58
+ fileManager: {
59
+ imageEnrichment: this.isEnabled("aiPowerups.fileManager.imageEnrichment")
60
+ },
61
+ lexicalGeneration: this.isEnabled("aiPowerups.lexicalGeneration"),
62
+ adminAssistant: this.isEnabled("aiPowerups.adminAssistant"),
63
+ remoteComponents: this.isEnabled("aiPowerups.remoteComponents"),
64
+ cms: {
65
+ entryGeneration: this.isEnabled("aiPowerups.cms.entryGeneration"),
66
+ entryComparison: this.isEnabled("aiPowerups.cms.entryComparison"),
67
+ entryTranslation: this.isEnabled("aiPowerups.cms.entryTranslation")
68
+ }
69
+ } : false,
70
+ abTesting: this.isEnabled("abTesting"),
71
+ collaboration: this.isEnabled("collaboration") ? {
72
+ comments: this.isEnabled("collaboration.comments"),
73
+ activityLog: this.isEnabled("collaboration.activityLog")
74
+ } : false
75
+ };
76
+ }
77
+ }
78
+ export { FeatureFlags };
79
+
80
+ //# sourceMappingURL=FeatureFlags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeatureFlags.js","sources":["../src/FeatureFlags.ts"],"sourcesContent":["import type { IFeatureFlagsDto } from \"./types.js\";\n\nexport type KnownFeatureFlag =\n | \"multiTenancy\"\n | \"languages\"\n | \"advancedPublishingWorkflow\"\n | \"advancedAccessControlLayer\"\n | \"advancedAccessControlLayer.teams\"\n | \"advancedAccessControlLayer.privateFiles\"\n | \"advancedAccessControlLayer.folderLevelPermissions\"\n | \"advancedAccessControlLayer.hcmsFieldPermissions\"\n | \"auditLogs\"\n | \"recordLocking\"\n | \"fileManager.threatDetection\"\n | \"aiPowerups\"\n | \"aiPowerups.websiteBuilder.pageGeneration\"\n | \"aiPowerups.websiteBuilder.pageTranslation\"\n | \"aiPowerups.fileManager.imageEnrichment\"\n | \"aiPowerups.lexicalGeneration\"\n | \"aiPowerups.adminAssistant\"\n | \"aiPowerups.remoteComponents\"\n | \"aiPowerups.cms.entryGeneration\"\n | \"aiPowerups.cms.entryComparison\"\n | \"aiPowerups.cms.entryTranslation\"\n | \"abTesting\"\n | \"collaboration\"\n | \"collaboration.comments\"\n | \"collaboration.activityLog\";\n\nexport type FeatureFlagName = KnownFeatureFlag | (string & {});\n\nexport class FeatureFlags {\n static fromDto(dto: IFeatureFlagsDto): FeatureFlags {\n return new FeatureFlags(dto);\n }\n\n constructor(private readonly flags: IFeatureFlagsDto = {}) {}\n\n isExplicitlyDisabled(name: FeatureFlagName): boolean {\n const segments = name.split(\".\");\n let current: unknown = this.flags;\n\n for (let i = 0; i < segments.length; i++) {\n if (current === false) {\n return true;\n }\n if (current === undefined || current === true) {\n return false;\n }\n if (typeof current === \"object\" && current !== null) {\n current = (current as Record<string, unknown>)[segments[i]];\n continue;\n }\n return false;\n }\n\n return current === false;\n }\n\n isEnabled(name: FeatureFlagName): boolean {\n const segments = name.split(\".\");\n let current: unknown = this.flags;\n\n for (let i = 0; i < segments.length; i++) {\n if (current === false || current === undefined) {\n return false;\n }\n if (current === true) {\n return true;\n }\n if (typeof current === \"object\" && current !== null) {\n current = (current as Record<string, unknown>)[segments[i]];\n continue;\n }\n return false;\n }\n\n // After walking all segments: object = enabled (group with sub-options),\n // true = enabled, false/undefined = disabled.\n if (typeof current === \"object\" && current !== null) {\n return true;\n }\n return current === true;\n }\n\n toDto() {\n return {\n multiTenancy: this.isEnabled(\"multiTenancy\"),\n languages: this.isEnabled(\"languages\"),\n advancedPublishingWorkflow: this.isEnabled(\"advancedPublishingWorkflow\"),\n advancedAccessControlLayer: this.isEnabled(\"advancedAccessControlLayer\")\n ? {\n teams: this.isEnabled(\"advancedAccessControlLayer.teams\"),\n privateFiles: this.isEnabled(\"advancedAccessControlLayer.privateFiles\"),\n folderLevelPermissions: this.isEnabled(\n \"advancedAccessControlLayer.folderLevelPermissions\"\n ),\n hcmsFieldPermissions: this.isEnabled(\n \"advancedAccessControlLayer.hcmsFieldPermissions\"\n )\n }\n : false,\n auditLogs: this.isEnabled(\"auditLogs\"),\n recordLocking: this.isEnabled(\"recordLocking\"),\n fileManager: {\n threatDetection: this.isEnabled(\"fileManager.threatDetection\")\n },\n aiPowerups: this.isEnabled(\"aiPowerups\")\n ? {\n websiteBuilder: {\n pageGeneration: this.isEnabled(\n \"aiPowerups.websiteBuilder.pageGeneration\"\n ),\n pageTranslation: this.isEnabled(\n \"aiPowerups.websiteBuilder.pageTranslation\"\n )\n },\n fileManager: {\n imageEnrichment: this.isEnabled(\"aiPowerups.fileManager.imageEnrichment\")\n },\n lexicalGeneration: this.isEnabled(\"aiPowerups.lexicalGeneration\"),\n adminAssistant: this.isEnabled(\"aiPowerups.adminAssistant\"),\n remoteComponents: this.isEnabled(\"aiPowerups.remoteComponents\"),\n cms: {\n entryGeneration: this.isEnabled(\"aiPowerups.cms.entryGeneration\"),\n entryComparison: this.isEnabled(\"aiPowerups.cms.entryComparison\"),\n entryTranslation: this.isEnabled(\"aiPowerups.cms.entryTranslation\")\n }\n }\n : false,\n abTesting: this.isEnabled(\"abTesting\"),\n collaboration: this.isEnabled(\"collaboration\")\n ? {\n comments: this.isEnabled(\"collaboration.comments\"),\n activityLog: this.isEnabled(\"collaboration.activityLog\")\n }\n : false\n };\n }\n}\n"],"names":["FeatureFlags","dto","flags","name","segments","current","i","undefined"],"mappings":"AA+BO,MAAMA;IACT,OAAO,QAAQC,GAAqB,EAAgB;QAChD,OAAO,IAAID,aAAaC;IAC5B;IAEA,YAA6BC,QAA0B,CAAC,CAAC,CAAE;aAA9BA,KAAK,GAALA;IAA+B;IAE5D,qBAAqBC,IAAqB,EAAW;QACjD,MAAMC,WAAWD,KAAK,KAAK,CAAC;QAC5B,IAAIE,UAAmB,IAAI,CAAC,KAAK;QAEjC,IAAK,IAAIC,IAAI,GAAGA,IAAIF,SAAS,MAAM,EAAEE,IAAK;YACtC,IAAID,AAAY,UAAZA,SACA,OAAO;YAEX,IAAIA,AAAYE,WAAZF,WAAyBA,AAAY,SAAZA,SACzB,OAAO;YAEX,IAAI,AAAmB,YAAnB,OAAOA,WAAwBA,AAAY,SAAZA,SAAkB;gBACjDA,UAAWA,OAAmC,CAACD,QAAQ,CAACE,EAAE,CAAC;gBAC3D;YACJ;YACA,OAAO;QACX;QAEA,OAAOD,AAAY,UAAZA;IACX;IAEA,UAAUF,IAAqB,EAAW;QACtC,MAAMC,WAAWD,KAAK,KAAK,CAAC;QAC5B,IAAIE,UAAmB,IAAI,CAAC,KAAK;QAEjC,IAAK,IAAIC,IAAI,GAAGA,IAAIF,SAAS,MAAM,EAAEE,IAAK;YACtC,IAAID,AAAY,UAAZA,WAAqBA,AAAYE,WAAZF,SACrB,OAAO;YAEX,IAAIA,AAAY,SAAZA,SACA,OAAO;YAEX,IAAI,AAAmB,YAAnB,OAAOA,WAAwBA,AAAY,SAAZA,SAAkB;gBACjDA,UAAWA,OAAmC,CAACD,QAAQ,CAACE,EAAE,CAAC;gBAC3D;YACJ;YACA,OAAO;QACX;QAIA,IAAI,AAAmB,YAAnB,OAAOD,WAAwBA,AAAY,SAAZA,SAC/B,OAAO;QAEX,OAAOA,AAAY,SAAZA;IACX;IAEA,QAAQ;QACJ,OAAO;YACH,cAAc,IAAI,CAAC,SAAS,CAAC;YAC7B,WAAW,IAAI,CAAC,SAAS,CAAC;YAC1B,4BAA4B,IAAI,CAAC,SAAS,CAAC;YAC3C,4BAA4B,IAAI,CAAC,SAAS,CAAC,gCACrC;gBACI,OAAO,IAAI,CAAC,SAAS,CAAC;gBACtB,cAAc,IAAI,CAAC,SAAS,CAAC;gBAC7B,wBAAwB,IAAI,CAAC,SAAS,CAClC;gBAEJ,sBAAsB,IAAI,CAAC,SAAS,CAChC;YAER,IACA;YACN,WAAW,IAAI,CAAC,SAAS,CAAC;YAC1B,eAAe,IAAI,CAAC,SAAS,CAAC;YAC9B,aAAa;gBACT,iBAAiB,IAAI,CAAC,SAAS,CAAC;YACpC;YACA,YAAY,IAAI,CAAC,SAAS,CAAC,gBACrB;gBACI,gBAAgB;oBACZ,gBAAgB,IAAI,CAAC,SAAS,CAC1B;oBAEJ,iBAAiB,IAAI,CAAC,SAAS,CAC3B;gBAER;gBACA,aAAa;oBACT,iBAAiB,IAAI,CAAC,SAAS,CAAC;gBACpC;gBACA,mBAAmB,IAAI,CAAC,SAAS,CAAC;gBAClC,gBAAgB,IAAI,CAAC,SAAS,CAAC;gBAC/B,kBAAkB,IAAI,CAAC,SAAS,CAAC;gBACjC,KAAK;oBACD,iBAAiB,IAAI,CAAC,SAAS,CAAC;oBAChC,iBAAiB,IAAI,CAAC,SAAS,CAAC;oBAChC,kBAAkB,IAAI,CAAC,SAAS,CAAC;gBACrC;YACJ,IACA;YACN,WAAW,IAAI,CAAC,SAAS,CAAC;YAC1B,eAAe,IAAI,CAAC,SAAS,CAAC,mBACxB;gBACI,UAAU,IAAI,CAAC,SAAS,CAAC;gBACzB,aAAa,IAAI,CAAC,SAAS,CAAC;YAChC,IACA;QACV;IACJ;AACJ"}
package/README.md CHANGED
@@ -1,97 +1,11 @@
1
- # `@webiny/feature-flags`
2
- [![](https://img.shields.io/npm/dw/@webiny/feature-flags.svg)](https://www.npmjs.com/package/@webiny/feature-flags)
3
- [![](https://img.shields.io/npm/v/@webiny/feature-flags.svg)](https://www.npmjs.com/package/@webiny/feature-flags)
4
- [![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier)
5
- [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com)
1
+ # @webiny/feature-flags
6
2
 
7
- A small library that provides a simple way to define and read feature flags in a Webiny project.
3
+ > [!NOTE]
4
+ > This package is part of the [Webiny](https://www.webiny.com) monorepo.
5
+ > It’s **included in every Webiny project by default** and is not meant to be used as a standalone package.
8
6
 
9
- ## Table of Contents
7
+ 📘 **Documentation:** [https://www.webiny.com/docs](https://www.webiny.com/docs)
10
8
 
11
- - [Installation](#installation)
12
- - [Overview](#overview)
13
- - [Examples](#examples)
14
- - [Reference](#reference)
15
- - [Objects](#objects)
16
- - [`featureFlags`](#featureFlags)
9
+ ---
17
10
 
18
- ## Installation
19
-
20
- ```
21
- npm install --save @webiny/feature-flags
22
- ```
23
-
24
- Or if you prefer yarn:
25
-
26
- ```
27
- yarn add @webiny/feature-flags
28
- ```
29
-
30
-
31
- ## Overview
32
-
33
- The `@webiny/feature-flags` exports a single `featureFlags` object which contains all of the feature flags initially set via the Webiny project's `webiny.project.ts` config file, via its `featureFlags` property.
34
-
35
- For example, given the following `webiny.project.ts` config file;
36
-
37
- ```ts
38
- // webiny.project.ts
39
- export default {
40
- name: "webiny-js",
41
- cli: {
42
- ...
43
- },
44
-
45
- // Feature flags are defined via a simple JavaScript object.
46
- featureFlags: {
47
- myCustomFeatureFlag: false,
48
- someFeature: { enabled: true, myCustomProperty: 123, thisIsJson: "yes"}
49
- }
50
- };
51
- ```
52
-
53
- Within both backend and frontend application code, the `featureFlags` object can then be read like so:
54
-
55
- ```ts
56
- import { featureFlags } from "@webiny/feature-flags";
57
-
58
- const useMyCustomFeature = featureFlags.myCustomFeatureFlag;
59
-
60
- const someOtherFeatureMyCustomProperty = featureFlags.someFeature.myCustomProperty;
61
- ```
62
-
63
- > **NOTE**
64
- >
65
- > Behind the scenes, it's the [Webiny CLI](https://www.webiny.com/docs/core-development-concepts/basics/webiny-cli) that enables the propagation of the `featureFlags` object into the actual applications. As mentioned, the `featureFlags` object can be accessed within both backend and frontend application code.
66
-
67
- ## Examples
68
-
69
- No additional examples.
70
-
71
- ## Reference
72
-
73
- ### Objects
74
-
75
- #### `featureFlags`
76
-
77
- <details>
78
- <summary>Type Declaration</summary>
79
- <p>
80
-
81
- ```ts
82
- declare let featureFlags: Record<string, any>;
83
- ```
84
-
85
- </p>
86
- </details>
87
-
88
- The `featureFlags` object contains all of the feature flags initially set via the Webiny project's `webiny.project.ts` config file, via its `featureFlags` property.
89
-
90
-
91
- ```ts
92
- import { featureFlags } from "@webiny/feature-flags";
93
-
94
- const useMyCustomFeature = featureFlags.myCustomFeatureFlag;
95
-
96
- const someOtherFeatureMyCustomProperty = featureFlags.someFeature.myCustomProperty;
97
- ```
11
+ _This README file is automatically generated during the publish process._
package/index.d.ts CHANGED
@@ -1,8 +1,2 @@
1
- export declare type FeatureFlags<TFeatureFlags = {}> = {
2
- copyPermissionsButton?: boolean;
3
- experimentalAdminOmniSearch?: boolean;
4
- pbLegacyRenderingEngine?: boolean;
5
- allowCmsLegacyRichTextInput?: boolean;
6
- } & TFeatureFlags;
7
- declare let featureFlags: FeatureFlags;
8
- export { featureFlags };
1
+ export * from "./types.js";
2
+ export * from "./FeatureFlags.js";
package/index.js CHANGED
@@ -1,17 +1,2 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.featureFlags = void 0;
7
- let featureFlags = {};
8
-
9
- // In API applications.
10
- exports.featureFlags = featureFlags;
11
- if (process.env.WEBINY_FEATURE_FLAGS) {
12
- exports.featureFlags = featureFlags = JSON.parse(process.env.WEBINY_FEATURE_FLAGS);
13
-
14
- // In React applications.
15
- } else if (process.env.REACT_APP_WEBINY_FEATURE_FLAGS) {
16
- exports.featureFlags = featureFlags = JSON.parse(process.env.REACT_APP_WEBINY_FEATURE_FLAGS);
17
- }
1
+ export * from "./types.js";
2
+ export * from "./FeatureFlags.js";
package/package.json CHANGED
@@ -1,7 +1,11 @@
1
1
  {
2
2
  "name": "@webiny/feature-flags",
3
- "version": "0.0.0-unstable.c7dec08bb0",
4
- "main": "index.js",
3
+ "version": "0.0.0-unstable.d0f34a8194",
4
+ "type": "module",
5
+ "exports": {
6
+ ".": "./index.js",
7
+ "./*": "./*"
8
+ },
5
9
  "repository": {
6
10
  "type": "git",
7
11
  "url": "https://github.com/webiny/webiny-js.git"
@@ -11,26 +15,16 @@
11
15
  "Adrian Smijulj <adrian@webiny.com>"
12
16
  ],
13
17
  "license": "MIT",
14
- "dependencies": {
15
- "@babel/runtime": "7.20.13"
16
- },
17
18
  "devDependencies": {
18
- "@babel/cli": "7.20.7",
19
- "@babel/core": "7.20.12",
20
- "@types/uniqid": "5.3.2",
21
- "@webiny/cli": "0.0.0-unstable.c7dec08bb0",
22
- "@webiny/project-utils": "0.0.0-unstable.c7dec08bb0",
23
- "rimraf": "3.0.2",
24
- "ttypescript": "1.5.15",
25
- "typescript": "4.7.4"
19
+ "@types/uniqid": "5.3.4",
20
+ "@webiny/build-tools": "0.0.0-unstable.d0f34a8194",
21
+ "rimraf": "6.1.3",
22
+ "typescript": "7.0.2"
26
23
  },
27
24
  "publishConfig": {
28
- "access": "public",
29
- "directory": "dist"
30
- },
31
- "scripts": {
32
- "build": "yarn webiny run build",
33
- "watch": "yarn webiny run watch"
25
+ "access": "public"
34
26
  },
35
- "gitHead": "c7dec08bb095467cca6a61381bd399d66b7bb147"
27
+ "webiny": {
28
+ "publishFrom": "dist"
29
+ }
36
30
  }
package/types.d.ts ADDED
@@ -0,0 +1,51 @@
1
+ export interface IAaclFeatureFlags {
2
+ teams?: boolean;
3
+ privateFiles?: boolean;
4
+ folderLevelPermissions?: boolean;
5
+ hcmsFieldPermissions?: boolean;
6
+ }
7
+ export interface IFileManagerFeatureFlags {
8
+ threatDetection?: boolean;
9
+ }
10
+ export interface IAiPowerupsWebsiteBuilderFeatureFlags {
11
+ pageGeneration?: boolean;
12
+ pageTranslation?: boolean;
13
+ }
14
+ export interface IAiPowerupsFileManagerFeatureFlags {
15
+ imageEnrichment?: boolean;
16
+ }
17
+ export interface IAiPowerupsCmsFeatureFlags {
18
+ entryGeneration?: boolean;
19
+ entryComparison?: boolean;
20
+ entryTranslation?: boolean;
21
+ }
22
+ export interface IAiPowerupsFeatureFlags {
23
+ websiteBuilder?: IAiPowerupsWebsiteBuilderFeatureFlags;
24
+ fileManager?: IAiPowerupsFileManagerFeatureFlags;
25
+ lexicalGeneration?: boolean;
26
+ adminAssistant?: boolean;
27
+ remoteComponents?: boolean;
28
+ cms?: IAiPowerupsCmsFeatureFlags;
29
+ }
30
+ export interface ICollaborationFeatureFlags {
31
+ comments?: boolean;
32
+ activityLog?: boolean;
33
+ }
34
+ /**
35
+ * Top-level feature flags interface. Add new flags here as needed.
36
+ * A boolean value controls whether the feature is enabled.
37
+ * An object value means the feature is enabled, but with specific sub-options.
38
+ * Keep this file free of @webiny/* package imports.
39
+ */
40
+ export interface IFeatureFlagsDto {
41
+ multiTenancy?: boolean;
42
+ languages?: boolean;
43
+ advancedPublishingWorkflow?: boolean;
44
+ advancedAccessControlLayer?: boolean | IAaclFeatureFlags;
45
+ auditLogs?: boolean;
46
+ recordLocking?: boolean;
47
+ fileManager?: IFileManagerFeatureFlags;
48
+ aiPowerups?: boolean | IAiPowerupsFeatureFlags;
49
+ abTesting?: boolean;
50
+ collaboration?: boolean | ICollaborationFeatureFlags;
51
+ }
package/types.js ADDED
File without changes
package/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"names":["featureFlags","process","env","WEBINY_FEATURE_FLAGS","JSON","parse","REACT_APP_WEBINY_FEATURE_FLAGS"],"sources":["index.ts"],"sourcesContent":["export type FeatureFlags<TFeatureFlags = {}> = {\n copyPermissionsButton?: boolean;\n experimentalAdminOmniSearch?: boolean;\n pbLegacyRenderingEngine?: boolean;\n allowCmsLegacyRichTextInput?: boolean;\n} & TFeatureFlags;\n\nlet featureFlags: FeatureFlags = {};\n\n// In API applications.\nif (process.env.WEBINY_FEATURE_FLAGS) {\n featureFlags = JSON.parse(process.env.WEBINY_FEATURE_FLAGS) as FeatureFlags;\n\n // In React applications.\n} else if (process.env.REACT_APP_WEBINY_FEATURE_FLAGS) {\n featureFlags = JSON.parse(process.env.REACT_APP_WEBINY_FEATURE_FLAGS) as FeatureFlags;\n}\n\nexport { featureFlags };\n"],"mappings":";;;;;;AAOA,IAAIA,YAA0B,GAAG,CAAC,CAAC;;AAEnC;AAAA;AACA,IAAIC,OAAO,CAACC,GAAG,CAACC,oBAAoB,EAAE;EAClC,uBAAAH,YAAY,GAAGI,IAAI,CAACC,KAAK,CAACJ,OAAO,CAACC,GAAG,CAACC,oBAAoB,CAAiB;;EAE3E;AACJ,CAAC,MAAM,IAAIF,OAAO,CAACC,GAAG,CAACI,8BAA8B,EAAE;EACnD,uBAAAN,YAAY,GAAGI,IAAI,CAACC,KAAK,CAACJ,OAAO,CAACC,GAAG,CAACI,8BAA8B,CAAiB;AACzF"}