@equinor/fusion-framework-app 7.1.15 → 8.0.1

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/CHANGELOG.md CHANGED
@@ -1,5 +1,42 @@
1
1
  # Change Log
2
2
 
3
+ ## 8.0.1
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [[`1ca8264`](https://github.com/equinor/fusion-framework/commit/1ca826489a0d1dd755324344a12bbf6659a3be12)]:
8
+ - @equinor/fusion-framework-module-app@5.2.13
9
+ - @equinor/fusion-framework-module-feature-flag@1.0.1
10
+ - @equinor/fusion-framework@7.0.29
11
+
12
+ ## 8.0.0
13
+
14
+ ### Minor Changes
15
+
16
+ - [#1747](https://github.com/equinor/fusion-framework/pull/1747) [`8b031c3`](https://github.com/equinor/fusion-framework/commit/8b031c31f314deeffdf395fc847e4279b61aab7e) Thanks [@odinr](https://github.com/odinr)! - Added method to `AppConfigurator` to enabled `Feature Flag Module`
17
+
18
+ ```ts
19
+ export const configure: ModuleInitiator = (appConfigurator, args) => {
20
+ /** provide a list of features that should be available in the application */
21
+ appConfigurator.useFeatureFlags([
22
+ {
23
+ key: MyFeatures.MyFlag,
24
+ title: "this is a flag",
25
+ },
26
+ {
27
+ key: MyFeatures.MyUrlFlag,
28
+ title: "this feature can be toggled by ?my-url-flag=true",
29
+ allowUrl: true,
30
+ },
31
+ ]);
32
+ };
33
+ ```
34
+
35
+ ### Patch Changes
36
+
37
+ - Updated dependencies [[`8b031c3`](https://github.com/equinor/fusion-framework/commit/8b031c31f314deeffdf395fc847e4279b61aab7e)]:
38
+ - @equinor/fusion-framework-module-feature-flag@1.0.0
39
+
3
40
  ## 7.1.15
4
41
 
5
42
  ### Patch Changes
package/README.md CHANGED
@@ -4,3 +4,35 @@
4
4
 
5
5
  ## 📚 read the [Doc](https://equinor.github.io/fusion-framework/)
6
6
 
7
+ ## Feature Flag
8
+
9
+ > [!IMPORTANT]
10
+ > `@equinor/fusion-framework-module-feature-flag` must be installed to make this module available
11
+
12
+ ### Simple
13
+ ```ts
14
+ export const configure: ModuleInitiator = (appConfigurator, args) => {
15
+ /** provide a list of features that should be available in the application */
16
+ appConfigurator.useFeatureFlags([
17
+ {
18
+ key: MyFeatures.MyFlag,
19
+ title: 'this is a flag',
20
+ },
21
+ {
22
+ key: MyFeatures.MyUrlFlag,
23
+ title: 'this feature can be toggled by ?my-url-flag=true',
24
+ allowUrl: true,
25
+ }
26
+ ]);
27
+ }
28
+ ```
29
+
30
+ ### Custom
31
+ ```ts
32
+ export const configure: ModuleInitiator = (appConfigurator, args) => {
33
+ appConfigurator.useFeatureFlags(builder => /** see module for building custom config */);
34
+ }
35
+ ```
36
+
37
+ [see module](../modules/feature-flag/README.md) for more technical information;
38
+
@@ -7,13 +7,27 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
+ var __rest = (this && this.__rest) || function (s, e) {
11
+ var t = {};
12
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
13
+ t[p] = s[p];
14
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
15
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
16
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
17
+ t[p[i]] = s[p[i]];
18
+ }
19
+ return t;
20
+ };
10
21
  import { ModuleConsoleLogger, ModulesConfigurator, } from '@equinor/fusion-framework-module';
11
22
  import event from '@equinor/fusion-framework-module-event';
12
23
  import http, { configureHttpClient, configureHttp, } from '@equinor/fusion-framework-module-http';
13
24
  import auth, { configureMsal } from '@equinor/fusion-framework-module-msal';
25
+ import { enableFeatureFlagging, } from '@equinor/fusion-framework-module-feature-flag';
26
+ import { createLocalStoragePlugin, createUrlPlugin, } from '@equinor/fusion-framework-module-feature-flag/plugins';
14
27
  export class AppConfigurator extends ModulesConfigurator {
15
- constructor() {
28
+ constructor(env) {
16
29
  super([event, http, auth]);
30
+ this.env = env;
17
31
  this.logger = new ModuleConsoleLogger('AppConfigurator');
18
32
  }
19
33
  configureHttp(...args) {
@@ -37,6 +51,31 @@ export class AppConfigurator extends ModulesConfigurator {
37
51
  configureMsal(...args) {
38
52
  this.addConfig(configureMsal(...args));
39
53
  }
54
+ useFeatureFlags(flags_cb) {
55
+ switch (typeof flags_cb) {
56
+ case 'function': {
57
+ enableFeatureFlagging(this, flags_cb);
58
+ break;
59
+ }
60
+ case 'object': {
61
+ const urlFlags = [];
62
+ const localFlags = (flags_cb !== null && flags_cb !== void 0 ? flags_cb : []).map((flag) => {
63
+ const { allowUrl } = flag, localFlag = __rest(flag, ["allowUrl"]);
64
+ if (allowUrl) {
65
+ urlFlags.push(flag);
66
+ }
67
+ return localFlag;
68
+ });
69
+ enableFeatureFlagging(this, (builder) => __awaiter(this, void 0, void 0, function* () {
70
+ builder.addPlugin(createLocalStoragePlugin(localFlags, {
71
+ name: this.env.manifest.key,
72
+ }));
73
+ builder.addPlugin(createUrlPlugin(urlFlags));
74
+ }));
75
+ break;
76
+ }
77
+ }
78
+ }
40
79
  }
41
80
  export default AppConfigurator;
42
81
  //# sourceMappingURL=AppConfigurator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AppConfigurator.js","sourceRoot":"","sources":["../../src/AppConfigurator.ts"],"names":[],"mappings":";;;;;;;;;AAEA,OAAO,EAGH,mBAAmB,EACnB,mBAAmB,GACtB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,KAAK,MAAM,wCAAwC,CAAC;AAE3D,OAAO,IAAI,EAAE,EACT,mBAAmB,EACnB,aAAa,GAEhB,MAAM,uCAAuC,CAAC;AAE/C,OAAO,IAAI,EAAE,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAgE5E,MAAM,OAAO,eAIT,SAAQ,mBAA+C;IAGvD;QACI,KAAK,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,IAAI,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;IAC7D,CAAC;IAEM,aAAa,CAAC,GAAG,IAAsC;QAC1D,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAC3C,CAAC;IAEM,mBAAmB,CAAC,GAAG,IAA4C;QACtE,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACjD,CAAC;IAEM,yBAAyB,CAC5B,WAAmB,EAEnB,OAAmE;QAEnE,IAAI,CAAC,SAAS,CAAC;YACX,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,CAAO,MAAM,EAAE,GAAG,EAAE,EAAE;gBAC7B,MAAM,OAAO,GAAG,MAAM,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,gBAAgB,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA,CAAC;gBACxE,IAAI,CAAC,OAAO,EAAE;oBACV,MAAM,KAAK,CAAC,gCAAgC,WAAW,GAAG,CAAC,CAAC;iBAC/D;gBACD,MAAM,CAAC,eAAe,CAAC,WAAW,kCAC3B,OAAO,KACV,OAAO,EAAE,OAAO,CAAC,GAAG,EACpB,aAAa,EAAE,OAAO,CAAC,aAAa,IACtC,CAAC;YACP,CAAC,CAAA;SACJ,CAAC,CAAC;IACP,CAAC;IAEM,aAAa,CAAC,GAAG,IAAsC;QAC1D,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAC3C,CAAC;CACJ;AAED,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"AppConfigurator.js","sourceRoot":"","sources":["../../src/AppConfigurator.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  import { AppConfigurator } from './AppConfigurator';
11
11
  export const configureModules = (cb) => (args) => __awaiter(void 0, void 0, void 0, function* () {
12
12
  var _a;
13
- const configurator = new AppConfigurator();
13
+ const configurator = new AppConfigurator(args.env);
14
14
  if (cb) {
15
15
  yield Promise.resolve(cb(configurator, args));
16
16
  }
@@ -1 +1 @@
1
- {"version":3,"file":"configure-modules.js","sourceRoot":"","sources":["../../src/configure-modules.ts"],"names":[],"mappings":";;;;;;;;;AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAsBpD,MAAM,CAAC,MAAM,gBAAgB,GACzB,CAKI,EAA6C,EACiC,EAAE,CAQpF,CAAO,IAAiC,EAAyC,EAAE;;IAC/E,MAAM,YAAY,GAAG,IAAI,eAAe,EAA6B,CAAC;IACtE,IAAI,EAAE,EAAE;QACJ,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;KACjD;IACD,MAAM,OAAO,GAAG,CAAC,MAAM,YAAY,CAAC,UAAU,CAC1C,IAAI,CAAC,MAAM,CAAC,OAAO,CAEtB,CAA4C,CAAC;IAI9C,IAAI,MAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,0CAAE,GAAG,EAAE;QACxB,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,oBAAoB,EAAE;YAC9C,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE;SACrD,CAAC,CAAC;KACN;IACD,OAAO,OAAO,CAAC;AACnB,CAAC,CAAA,CAAC;AAEN,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"configure-modules.js","sourceRoot":"","sources":["../../src/configure-modules.ts"],"names":[],"mappings":";;;;;;;;;AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAsBpD,MAAM,CAAC,MAAM,gBAAgB,GACzB,CAKI,EAA6C,EACiC,EAAE,CAQpF,CAAO,IAAiC,EAAyC,EAAE;;IAC/E,MAAM,YAAY,GAAG,IAAI,eAAe,CAAkC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpF,IAAI,EAAE,EAAE,CAAC;QACL,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;IAClD,CAAC;IACD,MAAM,OAAO,GAAG,CAAC,MAAM,YAAY,CAAC,UAAU,CAC1C,IAAI,CAAC,MAAM,CAAC,OAAO,CAEtB,CAA4C,CAAC;IAI9C,IAAI,MAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,0CAAE,GAAG,EAAE,CAAC;QACzB,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,oBAAoB,EAAE;YAC9C,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE;SACrD,CAAC,CAAC;IACP,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC,CAAA,CAAC;AAEN,eAAe,gBAAgB,CAAC"}
@@ -1,2 +1,2 @@
1
- export const version = '7.1.15';
1
+ export const version = '8.0.1';
2
2
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC"}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}