@zuplo/cli 7.4.5 → 7.4.7

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 (198) hide show
  1. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/jwks/remote.d.ts +4 -4
  2. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/jws/general/verify.d.ts +3 -3
  3. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/jwt/encrypt.d.ts +8 -14
  4. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/jwt/sign.d.ts +8 -14
  5. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/types/jwt/unsecured.d.ts +9 -15
  6. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwe/compact/encrypt.js +30 -8
  7. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwe/flattened/decrypt.js +8 -4
  8. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwe/flattened/encrypt.js +6 -13
  9. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwe/general/decrypt.js +19 -19
  10. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwe/general/encrypt.js +27 -20
  11. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwk/embedded.js +15 -1
  12. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwk/thumbprint.js +11 -5
  13. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwks/local.js +45 -53
  14. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwks/remote.js +82 -103
  15. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jws/compact/sign.js +10 -9
  16. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jws/flattened/sign.js +2 -1
  17. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jws/flattened/verify.js +8 -7
  18. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jws/general/sign.js +5 -3
  19. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jws/general/verify.js +51 -21
  20. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwt/decrypt.js +7 -9
  21. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwt/encrypt.js +21 -50
  22. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwt/sign.js +8 -41
  23. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/jwt/unsecured.js +21 -42
  24. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/key/generate_key_pair.js +6 -2
  25. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/key/generate_secret.js +7 -6
  26. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/key/import.js +16 -12
  27. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/asn1.js +7 -2
  28. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/content_encryption.js +7 -15
  29. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/deflate.js +8 -0
  30. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/helpers.js +1 -1
  31. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/jwe_decrypt.js +85 -28
  32. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/jwe_encrypt.js +40 -12
  33. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/jwk_metadata.js +20 -0
  34. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/jws_sign.js +47 -36
  35. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/jws_verify.js +77 -45
  36. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/jwt_claims_set.js +82 -47
  37. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/key.js +24 -9
  38. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/key_management.js +10 -4
  39. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/key_options.js +6 -0
  40. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/options.js +26 -0
  41. package/node_modules/@modelcontextprotocol/client/node_modules/jose/dist/webapi/lib/type_checks.js +11 -13
  42. package/node_modules/@modelcontextprotocol/client/node_modules/jose/package.json +1 -1
  43. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/jwks/remote.d.ts +4 -4
  44. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/jws/general/verify.d.ts +3 -3
  45. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/jwt/encrypt.d.ts +8 -14
  46. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/jwt/sign.d.ts +8 -14
  47. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/types/jwt/unsecured.d.ts +9 -15
  48. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwe/compact/encrypt.js +30 -8
  49. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwe/flattened/decrypt.js +8 -4
  50. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwe/flattened/encrypt.js +6 -13
  51. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwe/general/decrypt.js +19 -19
  52. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwe/general/encrypt.js +27 -20
  53. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwk/embedded.js +15 -1
  54. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwk/thumbprint.js +11 -5
  55. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwks/local.js +45 -53
  56. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwks/remote.js +82 -103
  57. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jws/compact/sign.js +10 -9
  58. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jws/flattened/sign.js +2 -1
  59. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jws/flattened/verify.js +8 -7
  60. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jws/general/sign.js +5 -3
  61. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jws/general/verify.js +51 -21
  62. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwt/decrypt.js +7 -9
  63. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwt/encrypt.js +21 -50
  64. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwt/sign.js +8 -41
  65. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/jwt/unsecured.js +21 -42
  66. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/key/generate_key_pair.js +6 -2
  67. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/key/generate_secret.js +7 -6
  68. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/key/import.js +16 -12
  69. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/asn1.js +7 -2
  70. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/content_encryption.js +7 -15
  71. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/deflate.js +8 -0
  72. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/helpers.js +1 -1
  73. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/jwe_decrypt.js +85 -28
  74. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/jwe_encrypt.js +40 -12
  75. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/jwk_metadata.js +20 -0
  76. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/jws_sign.js +47 -36
  77. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/jws_verify.js +77 -45
  78. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/jwt_claims_set.js +82 -47
  79. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/key.js +24 -9
  80. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/key_management.js +10 -4
  81. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/key_options.js +6 -0
  82. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/options.js +26 -0
  83. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/dist/webapi/lib/type_checks.js +11 -13
  84. package/node_modules/@modelcontextprotocol/sdk/node_modules/jose/package.json +1 -1
  85. package/node_modules/@posthog/core/dist/featureFlagLocalEvaluation.d.ts +35 -0
  86. package/node_modules/@posthog/core/dist/featureFlagLocalEvaluation.d.ts.map +1 -0
  87. package/node_modules/@posthog/core/dist/featureFlagLocalEvaluation.js +352 -0
  88. package/node_modules/@posthog/core/dist/featureFlagLocalEvaluation.mjs +294 -0
  89. package/node_modules/@posthog/core/dist/index.d.ts +2 -0
  90. package/node_modules/@posthog/core/dist/index.d.ts.map +1 -1
  91. package/node_modules/@posthog/core/dist/index.js +164 -79
  92. package/node_modules/@posthog/core/dist/index.mjs +2 -1
  93. package/node_modules/@posthog/core/dist/posthog-core-stateless.d.ts +12 -18
  94. package/node_modules/@posthog/core/dist/posthog-core-stateless.d.ts.map +1 -1
  95. package/node_modules/@posthog/core/dist/posthog-core-stateless.js +15 -47
  96. package/node_modules/@posthog/core/dist/posthog-core-stateless.mjs +15 -47
  97. package/node_modules/@posthog/core/dist/surveys/index.d.ts +1 -0
  98. package/node_modules/@posthog/core/dist/surveys/index.d.ts.map +1 -1
  99. package/node_modules/@posthog/core/dist/surveys/index.js +13 -0
  100. package/node_modules/@posthog/core/dist/surveys/index.mjs +2 -1
  101. package/node_modules/@posthog/core/dist/surveys/property-matching.d.ts +11 -0
  102. package/node_modules/@posthog/core/dist/surveys/property-matching.d.ts.map +1 -0
  103. package/node_modules/@posthog/core/dist/surveys/property-matching.js +89 -0
  104. package/node_modules/@posthog/core/dist/surveys/property-matching.mjs +46 -0
  105. package/node_modules/@posthog/core/dist/types.d.ts +15 -4
  106. package/node_modules/@posthog/core/dist/types.d.ts.map +1 -1
  107. package/node_modules/@posthog/core/package.json +2 -2
  108. package/node_modules/@posthog/core/src/featureFlagLocalEvaluation.ts +375 -0
  109. package/node_modules/@posthog/core/src/index.ts +19 -0
  110. package/node_modules/@posthog/core/src/logs/index.spec.ts +77 -0
  111. package/node_modules/@posthog/core/src/logs/index.ts +1 -1
  112. package/node_modules/@posthog/core/src/posthog-core-stateless.ts +40 -65
  113. package/node_modules/@posthog/core/src/surveys/index.ts +1 -0
  114. package/node_modules/@posthog/core/src/surveys/property-matching.spec.ts +174 -0
  115. package/node_modules/@posthog/core/src/surveys/property-matching.ts +75 -0
  116. package/node_modules/@posthog/core/src/types.ts +20 -4
  117. package/node_modules/@posthog/types/dist/index.d.ts +1 -1
  118. package/node_modules/@posthog/types/dist/index.d.ts.map +1 -1
  119. package/node_modules/@posthog/types/dist/posthog-config.d.ts +20 -5
  120. package/node_modules/@posthog/types/dist/posthog-config.d.ts.map +1 -1
  121. package/node_modules/@posthog/types/package.json +1 -1
  122. package/node_modules/@posthog/types/src/index.ts +1 -0
  123. package/node_modules/@posthog/types/src/posthog-config.ts +21 -5
  124. package/node_modules/@zuplo/core/customer.cli.minified.js +269 -269
  125. package/node_modules/@zuplo/core/index.minified.js +276 -276
  126. package/node_modules/@zuplo/core/package.json +1 -1
  127. package/node_modules/@zuplo/graphql/package.json +1 -1
  128. package/node_modules/@zuplo/openapi-tools/package.json +1 -1
  129. package/node_modules/@zuplo/otel/package.json +1 -1
  130. package/node_modules/@zuplo/runtime/out/esm/{chunk-IZE65N7D.js → chunk-CUK3VROF.js} +2 -2
  131. package/node_modules/@zuplo/runtime/out/esm/{chunk-4CDML74A.js → chunk-K4TBJG47.js} +2 -2
  132. package/node_modules/@zuplo/runtime/out/esm/{chunk-4VE55TG3.js → chunk-S4EBLGSU.js} +2 -2
  133. package/node_modules/@zuplo/runtime/out/esm/{chunk-4POCC75H.js → chunk-XF3IIUDX.js} +4 -4
  134. package/node_modules/@zuplo/runtime/out/esm/{chunk-4POCC75H.js.map → chunk-XF3IIUDX.js.map} +1 -1
  135. package/node_modules/@zuplo/runtime/out/esm/chunk-XIFGUD6K.js +403 -0
  136. package/node_modules/@zuplo/runtime/out/esm/chunk-XIFGUD6K.js.map +1 -0
  137. package/node_modules/@zuplo/runtime/out/esm/index.js +1 -1
  138. package/node_modules/@zuplo/runtime/out/esm/internal/index.js +1 -1
  139. package/node_modules/@zuplo/runtime/out/esm/mcp-gateway/index.js +1 -1
  140. package/node_modules/@zuplo/runtime/out/esm/mocks/index.js +1 -1
  141. package/node_modules/@zuplo/runtime/out/esm/sdks/aws/index.js +1 -1
  142. package/node_modules/@zuplo/runtime/package.json +1 -1
  143. package/node_modules/fast-uri/index.js +201 -48
  144. package/node_modules/fast-uri/lib/schemes.js +9 -4
  145. package/node_modules/fast-uri/lib/utils.js +388 -91
  146. package/node_modules/fast-uri/package.json +1 -1
  147. package/node_modules/fast-uri/test/component-safe-serialization.test.js +105 -0
  148. package/node_modules/fast-uri/test/equal.test.js +31 -3
  149. package/node_modules/fast-uri/test/fixtures/uri-js-parse.json +2 -0
  150. package/node_modules/fast-uri/test/ipv6-canonical.test.js +34 -0
  151. package/node_modules/fast-uri/test/ipv6-validation.test.js +90 -0
  152. package/node_modules/fast-uri/test/malformed-percent.test.js +77 -0
  153. package/node_modules/fast-uri/test/malformed-urn.test.js +61 -0
  154. package/node_modules/fast-uri/test/parse.test.js +7 -3
  155. package/node_modules/fast-uri/test/query-fragment-normalization.test.js +33 -0
  156. package/node_modules/fast-uri/test/reserved-path-normalization.test.js +109 -0
  157. package/node_modules/fast-uri/test/scheme-validation.test.js +124 -0
  158. package/node_modules/fast-uri/test/security-normalization.test.js +101 -0
  159. package/node_modules/fast-uri/test/security.test.js +75 -3
  160. package/node_modules/fast-uri/test/urn-full-input.test.js +29 -0
  161. package/node_modules/fast-uri/test/websocket-query-preservation.test.js +24 -0
  162. package/node_modules/hono/dist/cjs/client/client.js +25 -11
  163. package/node_modules/hono/dist/cjs/client/utils.js +3 -0
  164. package/node_modules/hono/dist/cjs/helper/accepts/accepts.js +36 -2
  165. package/node_modules/hono/dist/cjs/jsx/dom/render.js +2 -0
  166. package/node_modules/hono/dist/cjs/middleware/etag/index.js +1 -1
  167. package/node_modules/hono/dist/cjs/request.js +8 -4
  168. package/node_modules/hono/dist/cjs/router/reg-exp-router/node.js +10 -3
  169. package/node_modules/hono/dist/cjs/router/reg-exp-router/router.js +47 -83
  170. package/node_modules/hono/dist/cjs/router/reg-exp-router/trie.js +2 -1
  171. package/node_modules/hono/dist/cjs/router/trie-router/node.js +4 -3
  172. package/node_modules/hono/dist/cjs/router/utils.js +27 -0
  173. package/node_modules/hono/dist/cjs/utils/cookie.js +1 -1
  174. package/node_modules/hono/dist/cjs/utils/stream.js +7 -1
  175. package/node_modules/hono/dist/client/client.js +25 -11
  176. package/node_modules/hono/dist/client/utils.js +3 -0
  177. package/node_modules/hono/dist/helper/accepts/accepts.js +36 -2
  178. package/node_modules/hono/dist/jsx/dom/render.js +2 -0
  179. package/node_modules/hono/dist/middleware/etag/index.js +1 -1
  180. package/node_modules/hono/dist/request.js +8 -4
  181. package/node_modules/hono/dist/router/reg-exp-router/node.js +6 -2
  182. package/node_modules/hono/dist/router/reg-exp-router/router.js +53 -84
  183. package/node_modules/hono/dist/router/reg-exp-router/trie.js +2 -1
  184. package/node_modules/hono/dist/router/trie-router/node.js +4 -3
  185. package/node_modules/hono/dist/router/utils.js +5 -0
  186. package/node_modules/hono/dist/types/router/reg-exp-router/node.d.ts +3 -0
  187. package/node_modules/hono/dist/types/router/utils.d.ts +1 -0
  188. package/node_modules/hono/dist/utils/cookie.js +1 -1
  189. package/node_modules/hono/dist/utils/stream.js +7 -1
  190. package/node_modules/hono/package.json +1 -1
  191. package/package.json +11 -11
  192. package/node_modules/@zuplo/runtime/out/esm/chunk-4SX4HBWT.js +0 -409
  193. package/node_modules/@zuplo/runtime/out/esm/chunk-4SX4HBWT.js.map +0 -1
  194. /package/node_modules/@zuplo/runtime/out/esm/{chunk-IZE65N7D.js.map → chunk-CUK3VROF.js.map} +0 -0
  195. /package/node_modules/@zuplo/runtime/out/esm/{chunk-4CDML74A.js.map → chunk-K4TBJG47.js.map} +0 -0
  196. /package/node_modules/@zuplo/runtime/out/esm/{chunk-4VE55TG3.js.map → chunk-S4EBLGSU.js.map} +0 -0
  197. /package/node_modules/@zuplo/runtime/out/esm/{chunk-4POCC75H.js.LEGAL.txt → chunk-XF3IIUDX.js.LEGAL.txt} +0 -0
  198. /package/node_modules/@zuplo/runtime/out/esm/{chunk-4SX4HBWT.js.LEGAL.txt → chunk-XIFGUD6K.js.LEGAL.txt} +0 -0
@@ -0,0 +1,294 @@
1
+ import { parsePayload } from "./featureFlagUtils.mjs";
2
+ const NULL_VALUES_ALLOWED_OPERATORS = [
3
+ 'is_not',
4
+ 'is_set'
5
+ ];
6
+ const LONG_SCALE = 0xfffffffffffffff;
7
+ class InconclusiveMatchError extends Error {
8
+ constructor(message){
9
+ super(message);
10
+ this.name = this.constructor.name;
11
+ Object.setPrototypeOf(this, InconclusiveMatchError.prototype);
12
+ }
13
+ }
14
+ function isValidRegex(regex) {
15
+ try {
16
+ new RegExp(regex);
17
+ return true;
18
+ } catch {
19
+ return false;
20
+ }
21
+ }
22
+ function parseSemverNumericIdentifier(part, raw, parsingPolicy) {
23
+ if (!/^\d+$/.test(part) || 'strict' === parsingPolicy && part.length > 1 && '0' === part[0]) throw new InconclusiveMatchError(`Invalid semver: ${raw}`);
24
+ return parseInt(part, 10);
25
+ }
26
+ function parseFeatureFlagSemver(value, parsingPolicy = 'strict') {
27
+ const text = String(value).trim().replace(/^[vV]/, '');
28
+ const baseVersion = text.split('-')[0].split('+')[0];
29
+ if (!baseVersion || baseVersion.startsWith('.')) throw new InconclusiveMatchError(`Invalid semver: ${value}`);
30
+ const parts = baseVersion.split('.');
31
+ const parsePart = (part)=>{
32
+ if (void 0 === part || '' === part) return 0;
33
+ return parseSemverNumericIdentifier(part, value, parsingPolicy);
34
+ };
35
+ return [
36
+ parsePart(parts[0]),
37
+ parsePart(parts[1]),
38
+ parsePart(parts[2])
39
+ ];
40
+ }
41
+ function compareSemverTuples(a, b) {
42
+ for(let i = 0; i < 3; i++){
43
+ if (a[i] < b[i]) return -1;
44
+ if (a[i] > b[i]) return 1;
45
+ }
46
+ return 0;
47
+ }
48
+ function computeTildeBounds(value, parsingPolicy) {
49
+ const parsed = parseFeatureFlagSemver(value, parsingPolicy);
50
+ return {
51
+ lower: [
52
+ parsed[0],
53
+ parsed[1],
54
+ parsed[2]
55
+ ],
56
+ upper: [
57
+ parsed[0],
58
+ parsed[1] + 1,
59
+ 0
60
+ ]
61
+ };
62
+ }
63
+ function computeCaretBounds(value, parsingPolicy) {
64
+ const [major, minor, patch] = parseFeatureFlagSemver(value, parsingPolicy);
65
+ const lower = [
66
+ major,
67
+ minor,
68
+ patch
69
+ ];
70
+ let upper;
71
+ upper = major > 0 ? [
72
+ major + 1,
73
+ 0,
74
+ 0
75
+ ] : minor > 0 ? [
76
+ 0,
77
+ minor + 1,
78
+ 0
79
+ ] : [
80
+ 0,
81
+ 0,
82
+ patch + 1
83
+ ];
84
+ return {
85
+ lower,
86
+ upper
87
+ };
88
+ }
89
+ function computeWildcardBounds(value, parsingPolicy) {
90
+ const text = String(value).trim().replace(/^[vV]/, '');
91
+ const cleanedText = text.replace(/\.\*$/, '').replace(/\*$/, '');
92
+ if (!cleanedText) throw new InconclusiveMatchError(`Invalid wildcard semver: ${value}`);
93
+ const parts = cleanedText.split('.');
94
+ const parseWildcardPart = (part)=>{
95
+ if ('legacy-permissive' === parsingPolicy) {
96
+ const parsed = parseInt(part, 10);
97
+ if (!isNaN(parsed)) return parsed;
98
+ } else try {
99
+ return parseSemverNumericIdentifier(part, value, parsingPolicy);
100
+ } catch {}
101
+ throw new InconclusiveMatchError(`Invalid wildcard semver: ${value}`);
102
+ };
103
+ const major = parseWildcardPart(parts[0]);
104
+ if (1 === parts.length) return {
105
+ lower: [
106
+ major,
107
+ 0,
108
+ 0
109
+ ],
110
+ upper: [
111
+ major + 1,
112
+ 0,
113
+ 0
114
+ ]
115
+ };
116
+ const minor = parseWildcardPart(parts[1]);
117
+ return {
118
+ lower: [
119
+ major,
120
+ minor,
121
+ 0
122
+ ],
123
+ upper: [
124
+ major,
125
+ minor + 1,
126
+ 0
127
+ ]
128
+ };
129
+ }
130
+ function convertToDateTime(value) {
131
+ if (value instanceof Date) return value;
132
+ if ('string' == typeof value || 'number' == typeof value) {
133
+ const date = new Date(value);
134
+ if (!isNaN(date.valueOf())) return date;
135
+ throw new InconclusiveMatchError(`${value} is in an invalid date format`);
136
+ }
137
+ throw new InconclusiveMatchError(`The date provided ${value} must be a string, number, or date object`);
138
+ }
139
+ function relativeDateParseForFeatureFlagMatching(value) {
140
+ const regex = /^-?(?<number>[0-9]+)(?<interval>[a-z])$/;
141
+ const match = value.match(regex);
142
+ const parsedDt = new Date(new Date().toISOString());
143
+ if (!match || !match.groups) return null;
144
+ const number = parseInt(match.groups['number']);
145
+ if (number >= 10000) return null;
146
+ const interval = match.groups['interval'];
147
+ if ('h' === interval) parsedDt.setUTCHours(parsedDt.getUTCHours() - number);
148
+ else if ('d' === interval) parsedDt.setUTCDate(parsedDt.getUTCDate() - number);
149
+ else if ('w' === interval) parsedDt.setUTCDate(parsedDt.getUTCDate() - 7 * number);
150
+ else if ('m' === interval) parsedDt.setUTCMonth(parsedDt.getUTCMonth() - number);
151
+ else {
152
+ if ('y' !== interval) return null;
153
+ parsedDt.setUTCFullYear(parsedDt.getUTCFullYear() - number);
154
+ }
155
+ return parsedDt;
156
+ }
157
+ function matchFeatureFlagProperty(property, propertyValues, options = {}) {
158
+ const key = property.key;
159
+ const value = property.value;
160
+ const operator = property.operator || 'exact';
161
+ const parsingPolicy = options.semverParsingPolicy ?? 'strict';
162
+ if (key in propertyValues) {
163
+ if ('is_not_set' === operator) return false;
164
+ } else {
165
+ if ('is_not_set' === operator) return true;
166
+ throw new InconclusiveMatchError(`Property ${key} not found in propertyValues`);
167
+ }
168
+ const overrideValue = propertyValues[key];
169
+ if (null == overrideValue && !NULL_VALUES_ALLOWED_OPERATORS.includes(operator)) {
170
+ options.warnFunction?.(`Property ${key} cannot have a value of null/undefined with the ${operator} operator`);
171
+ return false;
172
+ }
173
+ const computeExactMatch = (target, actual)=>{
174
+ if (Array.isArray(target)) return target.map((item)=>String(item).toLowerCase()).includes(String(actual).toLowerCase());
175
+ return String(target).toLowerCase() === String(actual).toLowerCase();
176
+ };
177
+ const compare = (lhs, rhs, comparisonOperator)=>{
178
+ if ('gt' === comparisonOperator) return lhs > rhs;
179
+ if ('gte' === comparisonOperator) return lhs >= rhs;
180
+ if ('lt' === comparisonOperator) return lhs < rhs;
181
+ if ('lte' === comparisonOperator) return lhs <= rhs;
182
+ throw new Error(`Invalid operator: ${comparisonOperator}`);
183
+ };
184
+ switch(operator){
185
+ case 'exact':
186
+ return computeExactMatch(value, overrideValue);
187
+ case 'is_not':
188
+ return !computeExactMatch(value, overrideValue);
189
+ case 'is_set':
190
+ return key in propertyValues;
191
+ case 'icontains':
192
+ return String(overrideValue).toLowerCase().includes(String(value).toLowerCase());
193
+ case 'not_icontains':
194
+ return !String(overrideValue).toLowerCase().includes(String(value).toLowerCase());
195
+ case 'starts_with':
196
+ return String(overrideValue).toLowerCase().startsWith(String(value).toLowerCase());
197
+ case 'not_starts_with':
198
+ return !String(overrideValue).toLowerCase().startsWith(String(value).toLowerCase());
199
+ case 'ends_with':
200
+ return String(overrideValue).toLowerCase().endsWith(String(value).toLowerCase());
201
+ case 'not_ends_with':
202
+ return !String(overrideValue).toLowerCase().endsWith(String(value).toLowerCase());
203
+ case 'regex':
204
+ return isValidRegex(String(value)) && null !== String(overrideValue).match(String(value));
205
+ case 'not_regex':
206
+ return isValidRegex(String(value)) && null === String(overrideValue).match(String(value));
207
+ case 'gt':
208
+ case 'gte':
209
+ case 'lt':
210
+ case 'lte':
211
+ {
212
+ const parsedValue = 'number' == typeof value ? value : parseFloat(String(value));
213
+ const parsedOverride = 'number' == typeof overrideValue ? overrideValue : null != overrideValue ? parseFloat(String(overrideValue)) : NaN;
214
+ if (Number.isFinite(parsedValue) && Number.isFinite(parsedOverride)) return compare(parsedOverride, parsedValue, operator);
215
+ return compare(String(overrideValue), String(value), operator);
216
+ }
217
+ case 'is_date_after':
218
+ case 'is_date_before':
219
+ {
220
+ if ('boolean' == typeof value) throw new InconclusiveMatchError('Date operations cannot be performed on boolean values');
221
+ let parsedDate = relativeDateParseForFeatureFlagMatching(String(value));
222
+ if (null == parsedDate) parsedDate = convertToDateTime(value);
223
+ const overrideDate = convertToDateTime(overrideValue);
224
+ return 'is_date_before' === operator ? overrideDate < parsedDate : overrideDate > parsedDate;
225
+ }
226
+ case 'semver_eq':
227
+ return 0 === compareSemverTuples(parseFeatureFlagSemver(String(overrideValue), parsingPolicy), parseFeatureFlagSemver(String(value), parsingPolicy));
228
+ case 'semver_neq':
229
+ return 0 !== compareSemverTuples(parseFeatureFlagSemver(String(overrideValue), parsingPolicy), parseFeatureFlagSemver(String(value), parsingPolicy));
230
+ case 'semver_gt':
231
+ return compareSemverTuples(parseFeatureFlagSemver(String(overrideValue), parsingPolicy), parseFeatureFlagSemver(String(value), parsingPolicy)) > 0;
232
+ case 'semver_gte':
233
+ return compareSemverTuples(parseFeatureFlagSemver(String(overrideValue), parsingPolicy), parseFeatureFlagSemver(String(value), parsingPolicy)) >= 0;
234
+ case 'semver_lt':
235
+ return compareSemverTuples(parseFeatureFlagSemver(String(overrideValue), parsingPolicy), parseFeatureFlagSemver(String(value), parsingPolicy)) < 0;
236
+ case 'semver_lte':
237
+ return compareSemverTuples(parseFeatureFlagSemver(String(overrideValue), parsingPolicy), parseFeatureFlagSemver(String(value), parsingPolicy)) <= 0;
238
+ case 'semver_tilde':
239
+ {
240
+ const overrideParsed = parseFeatureFlagSemver(String(overrideValue), parsingPolicy);
241
+ const { lower, upper } = computeTildeBounds(String(value), parsingPolicy);
242
+ return compareSemverTuples(overrideParsed, lower) >= 0 && compareSemverTuples(overrideParsed, upper) < 0;
243
+ }
244
+ case 'semver_caret':
245
+ {
246
+ const overrideParsed = parseFeatureFlagSemver(String(overrideValue), parsingPolicy);
247
+ const { lower, upper } = computeCaretBounds(String(value), parsingPolicy);
248
+ return compareSemverTuples(overrideParsed, lower) >= 0 && compareSemverTuples(overrideParsed, upper) < 0;
249
+ }
250
+ case 'semver_wildcard':
251
+ {
252
+ const overrideParsed = parseFeatureFlagSemver(String(overrideValue), parsingPolicy);
253
+ const { lower, upper } = computeWildcardBounds(String(value), parsingPolicy);
254
+ return compareSemverTuples(overrideParsed, lower) >= 0 && compareSemverTuples(overrideParsed, upper) < 0;
255
+ }
256
+ default:
257
+ throw new InconclusiveMatchError(`Unknown operator: ${operator}`);
258
+ }
259
+ }
260
+ async function hashSHA1(text) {
261
+ const subtle = globalThis.crypto?.subtle;
262
+ if (!subtle) throw new Error('SubtleCrypto API not available');
263
+ const hashBuffer = await subtle.digest('SHA-1', new TextEncoder().encode(text));
264
+ return Array.from(new Uint8Array(hashBuffer)).map((byte)=>byte.toString(16).padStart(2, '0')).join('');
265
+ }
266
+ async function getFeatureFlagHash(key, bucketingValue, salt = '') {
267
+ const hashString = await hashSHA1(`${key}.${bucketingValue}${salt}`);
268
+ return parseInt(hashString.slice(0, 15), 16) / LONG_SCALE;
269
+ }
270
+ function getFeatureFlagVariantLookupTable(variants) {
271
+ const table = [];
272
+ let valueMin = 0;
273
+ for (const variant of variants){
274
+ const valueMax = valueMin + variant.rollout_percentage / 100.0;
275
+ table.push({
276
+ valueMin,
277
+ valueMax,
278
+ key: variant.key
279
+ });
280
+ valueMin = valueMax;
281
+ }
282
+ return table;
283
+ }
284
+ async function getFeatureFlagVariant(key, bucketingValue, variants) {
285
+ const hashValue = await getFeatureFlagHash(key, bucketingValue, 'variant');
286
+ return getFeatureFlagVariantLookupTable(variants).find((variant)=>hashValue >= variant.valueMin && hashValue < variant.valueMax)?.key;
287
+ }
288
+ function resolveFeatureFlagPayload(payloads, flagValue) {
289
+ if (false === flagValue || null == flagValue || !payloads) return null;
290
+ const payloadKey = 'boolean' == typeof flagValue ? flagValue.toString() : flagValue;
291
+ const payload = payloads[payloadKey] || null;
292
+ return null == payload ? null : parsePayload(payload);
293
+ }
294
+ export { InconclusiveMatchError, getFeatureFlagHash, getFeatureFlagVariant, getFeatureFlagVariantLookupTable, hashSHA1, matchFeatureFlagProperty, parseFeatureFlagSemver, relativeDateParseForFeatureFlagMatching, resolveFeatureFlagPayload };
@@ -1,4 +1,6 @@
1
1
  export { getFeatureFlagValue, getEnabledFromValue, getVariantFromValue, parsePayload, flagDetailsToResults, MINIMAL_FLAG_CALLED_EVENT_CAMPAIGN_PROPERTIES, minimizeFlagCalledEventProperties, } from './featureFlagUtils';
2
+ export { getFeatureFlagHash, getFeatureFlagVariant, getFeatureFlagVariantLookupTable, hashSHA1, InconclusiveMatchError, matchFeatureFlagProperty, parseFeatureFlagSemver, relativeDateParseForFeatureFlagMatching, resolveFeatureFlagPayload, } from './featureFlagLocalEvaluation';
3
+ export type { FeatureFlagProperty, FeatureFlagPropertyValue, FeatureFlagSemverParsingPolicy, FeatureFlagVariant, FeatureFlagVariantLookupEntry, MatchFeatureFlagPropertyOptions, } from './featureFlagLocalEvaluation';
2
4
  export { gzipCompress, isGzipData, isGzipRequest, isGzipSupported, isNativeAsyncGzipError, isNativeAsyncGzipReadError, } from './gzip';
3
5
  export * from './utils';
4
6
  export * as ErrorTracking from './error-tracking';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACZ,oBAAoB,EACpB,6CAA6C,EAC7C,iCAAiC,GAClC,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,YAAY,EACZ,UAAU,EACV,aAAa,EACb,eAAe,EACf,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,QAAQ,CAAA;AACf,cAAc,SAAS,CAAA;AACvB,OAAO,KAAK,aAAa,MAAM,kBAAkB,CAAA;AACjD,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,kBAAkB,GACnB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AACpC,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,yBAAyB,GAC1B,MAAM,cAAc,CAAA;AAIrB,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAGzG,YAAY,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAA;AAGhE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC1D,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,8BAA8B,EAC9B,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,WAAW,CAAA;AAClB,YAAY,EACV,WAAW,EACX,oBAAoB,EACpB,4BAA4B,EAC5B,uBAAuB,GACxB,MAAM,WAAW,CAAA;AAElB,YAAY,EACV,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,EACpB,YAAY,EACZ,UAAU,EACV,OAAO,EACP,aAAa,GACd,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,cAAc,UAAU,CAAA;AACxB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,0BAA0B,CAAA;AACxC,cAAc,mBAAmB,CAAA;AACjC,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACZ,oBAAoB,EACpB,6CAA6C,EAC7C,iCAAiC,GAClC,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,gCAAgC,EAChC,QAAQ,EACR,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,uCAAuC,EACvC,yBAAyB,GAC1B,MAAM,8BAA8B,CAAA;AACrC,YAAY,EACV,mBAAmB,EACnB,wBAAwB,EACxB,8BAA8B,EAC9B,kBAAkB,EAClB,6BAA6B,EAC7B,+BAA+B,GAChC,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACL,YAAY,EACZ,UAAU,EACV,aAAa,EACb,eAAe,EACf,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,QAAQ,CAAA;AACf,cAAc,SAAS,CAAA;AACvB,OAAO,KAAK,aAAa,MAAM,kBAAkB,CAAA;AACjD,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,kBAAkB,GACnB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AACpC,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,yBAAyB,GAC1B,MAAM,cAAc,CAAA;AAIrB,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAGzG,YAAY,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAA;AAGhE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC1D,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,8BAA8B,EAC9B,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,WAAW,CAAA;AAClB,YAAY,EACV,WAAW,EACX,oBAAoB,EACpB,4BAA4B,EAC5B,uBAAuB,GACxB,MAAM,WAAW,CAAA;AAElB,YAAY,EACV,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,EACpB,YAAY,EACZ,UAAU,EACV,OAAO,EACP,aAAa,GACd,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,cAAc,UAAU,CAAA;AACxB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,0BAA0B,CAAA;AACxC,cAAc,mBAAmB,CAAA;AACjC,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA"}