@nestarc/feature-flag 0.3.0 → 0.4.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.
Files changed (43) hide show
  1. package/README.md +114 -6
  2. package/dist/admin/feature-flag-admin.controller.d.ts +3 -1
  3. package/dist/admin/feature-flag-admin.controller.js +12 -0
  4. package/dist/admin/feature-flag-admin.controller.js.map +1 -1
  5. package/dist/admin/feature-flag-admin.dto.d.ts +8 -0
  6. package/dist/admin/feature-flag-admin.dto.js +24 -1
  7. package/dist/admin/feature-flag-admin.dto.js.map +1 -1
  8. package/dist/events/feature-flag.events.d.ts +35 -2
  9. package/dist/events/feature-flag.events.js +1 -0
  10. package/dist/events/feature-flag.events.js.map +1 -1
  11. package/dist/flag-registry.d.ts +24 -0
  12. package/dist/flag-registry.js +62 -0
  13. package/dist/flag-registry.js.map +1 -0
  14. package/dist/guards/feature-flag.guard.js +5 -1
  15. package/dist/guards/feature-flag.guard.js.map +1 -1
  16. package/dist/index.d.ts +5 -2
  17. package/dist/index.js +7 -1
  18. package/dist/index.js.map +1 -1
  19. package/dist/interfaces/evaluation-context.interface.d.ts +2 -0
  20. package/dist/interfaces/evaluation-details.interface.d.ts +29 -0
  21. package/dist/interfaces/evaluation-details.interface.js +3 -0
  22. package/dist/interfaces/evaluation-details.interface.js.map +1 -0
  23. package/dist/interfaces/feature-flag-options.interface.d.ts +3 -0
  24. package/dist/interfaces/feature-flag.interface.d.ts +9 -0
  25. package/dist/interfaces/flag-registry.interface.d.ts +17 -0
  26. package/dist/interfaces/flag-registry.interface.js +3 -0
  27. package/dist/interfaces/flag-registry.interface.js.map +1 -0
  28. package/dist/openfeature.d.ts +26 -0
  29. package/dist/openfeature.js +96 -0
  30. package/dist/openfeature.js.map +1 -0
  31. package/dist/services/feature-flag.service.d.ts +14 -7
  32. package/dist/services/feature-flag.service.js +103 -24
  33. package/dist/services/feature-flag.service.js.map +1 -1
  34. package/dist/services/flag-evaluator.service.d.ts +7 -8
  35. package/dist/services/flag-evaluator.service.js +62 -10
  36. package/dist/services/flag-evaluator.service.js.map +1 -1
  37. package/dist/testing/index.d.ts +1 -1
  38. package/dist/testing/index.js +2 -1
  39. package/dist/testing/index.js.map +1 -1
  40. package/dist/testing/test-feature-flag.module.d.ts +21 -0
  41. package/dist/testing/test-feature-flag.module.js +78 -19
  42. package/dist/testing/test-feature-flag.module.js.map +1 -1
  43. package/package.json +13 -1
@@ -7,7 +7,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  };
8
8
  var TestFeatureFlagModule_1;
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.TestFeatureFlagModule = void 0;
10
+ exports.TestFeatureFlagController = exports.TestFeatureFlagModule = void 0;
11
11
  const common_1 = require("@nestjs/common");
12
12
  const feature_flag_service_1 = require("../services/feature-flag.service");
13
13
  function makeStubFlag(partial = {}) {
@@ -26,32 +26,29 @@ function makeStubFlag(partial = {}) {
26
26
  }
27
27
  let TestFeatureFlagModule = TestFeatureFlagModule_1 = class TestFeatureFlagModule {
28
28
  static register(flags) {
29
+ const controller = new TestFeatureFlagController(flags ?? {});
30
+ return this.createModule(controller);
31
+ }
32
+ static registerRegistry(flags, options = {}) {
33
+ const defaults = Object.fromEntries(Object.entries(flags).map(([key, definition]) => [key, definition.defaultValue]));
34
+ const controller = new TestFeatureFlagController(defaults, options.overrides);
35
+ return this.createModule(controller);
36
+ }
37
+ static createModule(controller) {
29
38
  return {
30
39
  module: TestFeatureFlagModule_1,
31
40
  global: true,
32
41
  providers: [
42
+ {
43
+ provide: TestFeatureFlagController,
44
+ useValue: controller,
45
+ },
33
46
  {
34
47
  provide: feature_flag_service_1.FeatureFlagService,
35
- useValue: {
36
- isEnabled: async (key) => flags?.[key] ?? false,
37
- evaluateAll: async () => flags ?? {},
38
- create: async (input) => makeStubFlag({ key: input.key, enabled: input.enabled ?? false }),
39
- update: async (key, input) => makeStubFlag({ key, ...input }),
40
- archive: async (key) => makeStubFlag({ key, archivedAt: new Date() }),
41
- setOverride: async () => { },
42
- removeOverride: async () => { },
43
- findAll: async () => Object.entries(flags ?? {}).map(([key, enabled]) => makeStubFlag({ key, enabled })),
44
- findByKey: async (key) => {
45
- if (flags && key in flags) {
46
- return makeStubFlag({ key, enabled: flags[key] });
47
- }
48
- throw new common_1.NotFoundException(`Feature flag "${key}" not found`);
49
- },
50
- invalidateCache: async () => { },
51
- },
48
+ useValue: createFeatureFlagServiceStub(controller),
52
49
  },
53
50
  ],
54
- exports: [feature_flag_service_1.FeatureFlagService],
51
+ exports: [feature_flag_service_1.FeatureFlagService, TestFeatureFlagController],
55
52
  };
56
53
  }
57
54
  };
@@ -59,4 +56,66 @@ exports.TestFeatureFlagModule = TestFeatureFlagModule;
59
56
  exports.TestFeatureFlagModule = TestFeatureFlagModule = TestFeatureFlagModule_1 = __decorate([
60
57
  (0, common_1.Module)({})
61
58
  ], TestFeatureFlagModule);
59
+ class TestFeatureFlagController {
60
+ constructor(defaults, overrides = {}) {
61
+ this.defaults = { ...defaults };
62
+ this.values = { ...defaults, ...overrides };
63
+ }
64
+ set(key, value) {
65
+ this.values[key] = value;
66
+ }
67
+ reset() {
68
+ this.values = { ...this.defaults };
69
+ }
70
+ isEnabled(key, options = {}) {
71
+ return this.getValue(key, options);
72
+ }
73
+ evaluateAll() {
74
+ return { ...this.values };
75
+ }
76
+ getDetails(key, options = {}) {
77
+ const hasValue = Object.prototype.hasOwnProperty.call(this.values, key);
78
+ const value = this.getValue(key, options);
79
+ return {
80
+ flagKey: key,
81
+ value,
82
+ result: value,
83
+ source: hasValue ? 'default' : 'default',
84
+ reason: hasValue ? 'GLOBAL' : 'FLAG_NOT_FOUND',
85
+ defaultUsed: !hasValue,
86
+ evaluationTimeMs: 0,
87
+ };
88
+ }
89
+ findFlag(key) {
90
+ if (!Object.prototype.hasOwnProperty.call(this.values, key)) {
91
+ throw new common_1.NotFoundException(`Feature flag "${key}" not found`);
92
+ }
93
+ return makeStubFlag({ key, enabled: this.values[key] });
94
+ }
95
+ findAll() {
96
+ return Object.entries(this.values).map(([key, enabled]) => makeStubFlag({ key, enabled }));
97
+ }
98
+ getValue(key, options) {
99
+ if (Object.prototype.hasOwnProperty.call(this.values, key)) {
100
+ return this.values[key];
101
+ }
102
+ return options.defaultValue ?? false;
103
+ }
104
+ }
105
+ exports.TestFeatureFlagController = TestFeatureFlagController;
106
+ function createFeatureFlagServiceStub(controller) {
107
+ return {
108
+ isEnabled: async (key, _context, options = {}) => controller.isEnabled(key, options),
109
+ evaluateBoolean: async (key, _context, options = {}) => controller.getDetails(key, options),
110
+ evaluateAll: async () => controller.evaluateAll(),
111
+ create: async (input) => makeStubFlag({ key: input.key, enabled: input.enabled ?? false }),
112
+ update: async (key, input) => makeStubFlag({ key, ...input }),
113
+ archive: async (key) => makeStubFlag({ key, archivedAt: new Date() }),
114
+ setOverride: async () => { },
115
+ removeOverride: async () => { },
116
+ findAll: async () => controller.findAll(),
117
+ findByKey: async (key) => controller.findFlag(key),
118
+ invalidateCache: async () => { },
119
+ };
120
+ }
62
121
  //# sourceMappingURL=test-feature-flag.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"test-feature-flag.module.js","sourceRoot":"","sources":["../../src/testing/test-feature-flag.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAA0E;AAC1E,2EAAsE;AAMtE,SAAS,YAAY,CACnB,UAA6C,EAAE;IAE/C,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,EAAE,IAAI,SAAS;QAC3B,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,MAAM;QAC1B,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI;QACxC,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK;QACjC,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,CAAC;QACnC,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,EAAE;QAChC,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI;QACtC,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC;QACtD,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC;QACtD,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,EAAE;KACnC,CAAC;AACJ,CAAC;AAGM,IAAM,qBAAqB,6BAA3B,MAAM,qBAAqB;IAChC,MAAM,CAAC,QAAQ,CAAC,KAA+B;QAC7C,OAAO;YACL,MAAM,EAAE,uBAAqB;YAC7B,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,yCAAkB;oBAC3B,QAAQ,EAAE;wBACR,SAAS,EAAE,KAAK,EAAE,GAAW,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK;wBACvD,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE;wBACpC,MAAM,EAAE,KAAK,EAAE,KAA6B,EAAE,EAAE,CAC9C,YAAY,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,EAAE,CAAC;wBACnE,MAAM,EAAE,KAAK,EAAE,GAAW,EAAE,KAAwC,EAAE,EAAE,CACtE,YAAY,CAAC,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;wBACjC,OAAO,EAAE,KAAK,EAAE,GAAW,EAAE,EAAE,CAC7B,YAAY,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;wBAC/C,WAAW,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;wBAC3B,cAAc,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;wBAC9B,OAAO,EAAE,KAAK,IAAI,EAAE,CAClB,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,CACjD,YAAY,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAC/B;wBACH,SAAS,EAAE,KAAK,EAAE,GAAW,EAAE,EAAE;4BAC/B,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;gCAC1B,OAAO,YAAY,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;4BACpD,CAAC;4BACD,MAAM,IAAI,0BAAiB,CAAC,iBAAiB,GAAG,aAAa,CAAC,CAAC;wBACjE,CAAC;wBACD,eAAe,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;qBAChC;iBACF;aACF;YACD,OAAO,EAAE,CAAC,yCAAkB,CAAC;SAC9B,CAAC;IACJ,CAAC;CACF,CAAA;AApCY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,qBAAqB,CAoCjC"}
1
+ {"version":3,"file":"test-feature-flag.module.js","sourceRoot":"","sources":["../../src/testing/test-feature-flag.module.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nestarc/feature-flag",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "DB-backed feature flags for NestJS + Prisma + PostgreSQL with tenant-aware overrides",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -12,6 +12,10 @@
12
12
  "./testing": {
13
13
  "types": "./dist/testing/index.d.ts",
14
14
  "default": "./dist/testing/index.js"
15
+ },
16
+ "./openfeature": {
17
+ "types": "./dist/openfeature.d.ts",
18
+ "default": "./dist/openfeature.js"
15
19
  }
16
20
  },
17
21
  "files": [
@@ -55,6 +59,7 @@
55
59
  "peerDependencies": {
56
60
  "@nestjs/common": "^10.0.0 || ^11.0.0",
57
61
  "@nestjs/core": "^10.0.0 || ^11.0.0",
62
+ "@openfeature/server-sdk": "^1.0.0",
58
63
  "@prisma/client": "^5.0.0 || ^6.0.0",
59
64
  "class-transformer": "^0.5.1",
60
65
  "class-validator": "^0.14.0 || ^0.15.0",
@@ -69,10 +74,17 @@
69
74
  "@nestjs/event-emitter": {
70
75
  "optional": true
71
76
  },
77
+ "@openfeature/server-sdk": {
78
+ "optional": true
79
+ },
72
80
  "ioredis": {
73
81
  "optional": true
74
82
  }
75
83
  },
84
+ "overrides": {
85
+ "js-yaml": "4.2.0",
86
+ "multer": "2.2.0"
87
+ },
76
88
  "devDependencies": {
77
89
  "@eslint/js": "^9.0.0",
78
90
  "@nestjs/common": "^11.0.0",