@flag-engine/core 0.0.11 → 1.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/dist/getEligibleStrategy.d.ts.map +1 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/types.d.ts +12 -6
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -2
- package/rollup.config.mjs +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getEligibleStrategy.d.ts","sourceRoot":"","sources":["../src/getEligibleStrategy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"getEligibleStrategy.d.ts","sourceRoot":"","sources":["../src/getEligibleStrategy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAM/E;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,GAChC,OAAO,IAAI,EAAE,EACb,mBAAmB,iBAAiB,EACpC,QAAO,MAAU,KAChB,OA0DF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,GAC9B,YAAY,iBAAiB,EAC7B,mBAAmB,iBAAiB,KACnC,QAAQ,GAAG,SAIb,CAAC"}
|
package/dist/index.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e=require("murmurhash-js");const
|
|
1
|
+
"use strict";var e=require("murmurhash-js");const t=e=>"string"==typeof e,r=(e,n,s=0)=>!(s>10)&&(0===e.length||e.every((e=>{if("inSegment"in e)return r(e.inSegment.rules,n,s+1);switch(e.operator){case"equals":return-1!==e.value.indexOf(n[e.field]);case"not_equals":return-1===e.value.indexOf(n[e.field]);case"greater_than":{const t=n[e.field];return"number"==typeof t&&t>e.value}case"less_than":{const t=n[e.field];return"number"==typeof t&&t<e.value}case"contains":{const r=n[e.field];return!!t(r)&&e.value.some((e=>r.includes(e)))}case"not_contains":{const r=n[e.field];return!t(r)||e.value.every((e=>!r.includes(e)))}default:return!1}}))),n=2**32,s=(t,s)=>{if(0===t.strategies.length)return!0;const a=((e,t)=>e.strategies.find((e=>r(e.rules,t))))(t,s);if(!a)return!1;if(0===a.variants.length)return!0;const u=((t,r)=>{const s=[...t.variants].sort(((e,t)=>e.percent-t.percent)),a=`${t.name}-${r}`,u=e.murmur3(a)/n*100;let i=0;for(const e of s)if(i+=e.percent,u<i)return e;return!1})(a,s.__id);return!1!==u&&u.name};exports.createFlagEngine=e=>({createUserContext:t=>((e,t)=>{let r=t;return{evaluateAll:()=>{const t={};for(const n of e)t[n.key]="enabled"===n.status&&s(n,r);return t},evaluate:t=>{const n=e.find((e=>e.key===t));return!!n&&"enabled"===n.status&&s(n,r)},setUserConfiguration:e=>{r=e}}})(e,t)});
|
package/dist/index.d.ts
CHANGED
|
@@ -13,5 +13,5 @@ import { EvaluationMachine, FlagsConfiguration } from "./types";
|
|
|
13
13
|
* ```
|
|
14
14
|
*/
|
|
15
15
|
export declare const createFlagEngine: (flagsConfig: FlagsConfiguration) => EvaluationMachine;
|
|
16
|
-
export type { FlagsConfiguration, UserConfiguration } from "./types";
|
|
16
|
+
export type { ConditionOperator, EvaluationMachine, FlagConfiguration, FlagDict, FlagStatus, FlagsConfiguration, Rule, RuleValuePrimitive, Segment, Strategy, UserConfiguration, UserContextFlagEvaluation, Variant, } from "./types";
|
|
17
17
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EAEjB,kBAAkB,EAGnB,MAAM,SAAS,CAAC;AAoCjB;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,gBAAgB,GAC3B,aAAa,kBAAkB,KAC9B,iBAKF,CAAC;AAEF,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EAEjB,kBAAkB,EAGnB,MAAM,SAAS,CAAC;AAoCjB;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,gBAAgB,GAC3B,aAAa,kBAAkB,KAC9B,iBAKF,CAAC;AAEF,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,QAAQ,EACR,UAAU,EACV,kBAAkB,EAClB,IAAI,EACJ,kBAAkB,EAClB,OAAO,EACP,QAAQ,EACR,iBAAiB,EACjB,yBAAyB,EACzB,OAAO,GACR,MAAM,SAAS,CAAC"}
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{murmur3 as e}from"murmurhash-js";const t=e=>"string"==typeof e,
|
|
1
|
+
import{murmur3 as e}from"murmurhash-js";const t=e=>"string"==typeof e,n=(e,r,s=0)=>!(s>10)&&(0===e.length||e.every((e=>{if("inSegment"in e)return n(e.inSegment.rules,r,s+1);switch(e.operator){case"equals":return-1!==e.value.indexOf(r[e.field]);case"not_equals":return-1===e.value.indexOf(r[e.field]);case"greater_than":{const t=r[e.field];return"number"==typeof t&&t>e.value}case"less_than":{const t=r[e.field];return"number"==typeof t&&t<e.value}case"contains":{const n=r[e.field];return!!t(n)&&e.value.some((e=>n.includes(e)))}case"not_contains":{const n=r[e.field];return!t(n)||e.value.every((e=>!n.includes(e)))}default:return!1}}))),r=2**32,s=(t,s)=>{if(0===t.strategies.length)return!0;const a=((e,t)=>e.strategies.find((e=>n(e.rules,t))))(t,s);if(!a)return!1;if(0===a.variants.length)return!0;const u=((t,n)=>{const s=[...t.variants].sort(((e,t)=>e.percent-t.percent)),a=`${t.name}-${n}`,u=e(a)/r*100;let o=0;for(const e of s)if(o+=e.percent,u<o)return e;return!1})(a,s.__id);return!1!==u&&u.name},a=e=>({createUserContext:t=>((e,t)=>{let n=t;return{evaluateAll:()=>{const t={};for(const r of e)t[r.key]="enabled"===r.status&&s(r,n);return t},evaluate:t=>{const r=e.find((e=>e.key===t));return!!r&&"enabled"===r.status&&s(r,n)},setUserConfiguration:e=>{n=e}}})(e,t)});export{a as createFlagEngine};
|
package/dist/types.d.ts
CHANGED
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
export type FlagStatus = "enabled" | "disabled";
|
|
2
|
-
export type ConditionOperator = "equals" | "not_equals" | "contains" | "not_contains" | "greater_than" | "less_than"
|
|
3
|
-
type RuleValuePrimitive = object | null | undefined | string | number | boolean | Date;
|
|
4
|
-
export type RuleValue = RuleValuePrimitive | Array<RuleValuePrimitive>;
|
|
2
|
+
export type ConditionOperator = "equals" | "not_equals" | "contains" | "not_contains" | "greater_than" | "less_than";
|
|
3
|
+
export type RuleValuePrimitive = object | null | undefined | string | number | boolean | Date;
|
|
5
4
|
export type Rule = {
|
|
6
5
|
field: string;
|
|
7
|
-
operator:
|
|
8
|
-
value:
|
|
6
|
+
operator: "equals" | "not_equals";
|
|
7
|
+
value: Array<RuleValuePrimitive>;
|
|
8
|
+
} | {
|
|
9
|
+
field: string;
|
|
10
|
+
operator: "contains" | "not_contains";
|
|
11
|
+
value: Array<string>;
|
|
12
|
+
} | {
|
|
13
|
+
field: string;
|
|
14
|
+
operator: "greater_than" | "less_than";
|
|
15
|
+
value: number;
|
|
9
16
|
} | {
|
|
10
17
|
inSegment: Segment;
|
|
11
18
|
};
|
|
@@ -41,5 +48,4 @@ export interface UserContextFlagEvaluation {
|
|
|
41
48
|
export interface EvaluationMachine {
|
|
42
49
|
createUserContext: (userConfiguration: UserConfiguration) => UserContextFlagEvaluation;
|
|
43
50
|
}
|
|
44
|
-
export {};
|
|
45
51
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,UAAU,CAAC;AAChD,MAAM,MAAM,iBAAiB,GACzB,QAAQ,GACR,YAAY,GACZ,UAAU,GACV,cAAc,GACd,cAAc,GACd,WAAW,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,UAAU,CAAC;AAChD,MAAM,MAAM,iBAAiB,GACzB,QAAQ,GACR,YAAY,GACZ,UAAU,GACV,cAAc,GACd,cAAc,GACd,WAAW,CAAC;AAEhB,MAAM,MAAM,kBAAkB,GAC1B,MAAM,GACN,IAAI,GACJ,SAAS,GACT,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,CAAC;AAET,MAAM,MAAM,IAAI,GACZ;IACE,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,QAAQ,GAAG,YAAY,CAAC;IAClC,KAAK,EAAE,KAAK,CAAC,kBAAkB,CAAC,CAAC;CAClC,GACD;IACE,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,UAAU,GAAG,cAAc,CAAC;IACtC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CACtB,GACD;IACE,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,cAAc,GAAG,WAAW,CAAC;IACvC,KAAK,EAAE,MAAM,CAAC;CACf,GACD;IACE,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEN,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACnB,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,KAAK,CAAC,iBAAiB,CAAC,CAAC;AAE1D,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;AAExD,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,MAAM,QAAQ,CAAC;IAC5B,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,OAAO,CAAC;IAChD,oBAAoB,EAAE,CAAC,oBAAoB,EAAE,iBAAiB,KAAK,IAAI,CAAC;CACzE;AAED,MAAM,WAAW,iBAAiB;IAChC,iBAAiB,EAAE,CACjB,iBAAiB,EAAE,iBAAiB,KACjC,yBAAyB,CAAC;CAChC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flag-engine/core",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "1.0.1",
|
|
5
5
|
"description": "Feature flags evaluation engine, runtime agnostic",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "./dist/index.cjs.js",
|
|
@@ -20,7 +20,8 @@
|
|
|
20
20
|
"test": "vitest",
|
|
21
21
|
"coverage": "vitest run --coverage",
|
|
22
22
|
"lint": "eslint .",
|
|
23
|
-
"
|
|
23
|
+
"bench": "tsx src/__benchmarks__/evaluateAll.bench.ts",
|
|
24
|
+
"bundlesize": "bundlesize"
|
|
24
25
|
},
|
|
25
26
|
"keywords": [],
|
|
26
27
|
"author": "",
|
|
@@ -36,6 +37,7 @@
|
|
|
36
37
|
"bundlesize": "^0.18.2",
|
|
37
38
|
"eslint": "^9.29.0",
|
|
38
39
|
"rollup": "^4.44.0",
|
|
40
|
+
"tinybench": "^6.0.0",
|
|
39
41
|
"tslib": "^2.8.1",
|
|
40
42
|
"tsx": "^4.20.3",
|
|
41
43
|
"typescript": "^5.8.3",
|