@posthog/core 1.49.2 → 1.50.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.
@@ -1,5 +1,5 @@
1
1
  import type { FeatureFlagValue, JsonType } from './types';
2
- export type FeatureFlagPropertyValue = string | number | (string | number)[] | boolean;
2
+ export type FeatureFlagPropertyValue = JsonType;
3
3
  export type FeatureFlagProperty = {
4
4
  key: string;
5
5
  value: FeatureFlagPropertyValue;
@@ -1 +1 @@
1
- {"version":3,"file":"featureFlagLocalEvaluation.d.ts","sourceRoot":"","sources":["../src/featureFlagLocalEvaluation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEzD,MAAM,MAAM,wBAAwB,GAAG,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,OAAO,CAAA;AAEtF,MAAM,MAAM,mBAAmB,GAAG;IAChC,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,wBAAwB,CAAA;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,8BAA8B,GAAG,QAAQ,GAAG,mBAAmB,CAAA;AAE3E,MAAM,MAAM,+BAA+B,GAAG;IAC5C,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,mBAAmB,CAAC,EAAE,8BAA8B,CAAA;CACrD,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,EAAE,MAAM,CAAA;IACX,kBAAkB,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,6BAA6B,GAAG;IAC1C,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AASD,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,OAAO,EAAE,MAAM;CAK5B;AAWD,KAAK,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;AAa3C,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,EACb,aAAa,GAAE,8BAAyC,GACvD,WAAW,CAeb;AAwED,wBAAgB,uCAAuC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAmBlF;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,mBAAmB,EAC7B,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACnC,OAAO,GAAE,+BAAoC,GAC5C,OAAO,CA+IT;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ5D;AAED,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,GAAE,MAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAGhH;AAED,wBAAgB,gCAAgC,CAC9C,QAAQ,EAAE,SAAS,kBAAkB,EAAE,GACtC,6BAA6B,EAAE,CASjC;AAED,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,SAAS,kBAAkB,EAAE,GACtC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAK7B;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,EAC3E,SAAS,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,GAC7C,QAAQ,GAAG,IAAI,CAMjB"}
1
+ {"version":3,"file":"featureFlagLocalEvaluation.d.ts","sourceRoot":"","sources":["../src/featureFlagLocalEvaluation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEzD,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAAA;AAE/C,MAAM,MAAM,mBAAmB,GAAG;IAChC,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,wBAAwB,CAAA;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,8BAA8B,GAAG,QAAQ,GAAG,mBAAmB,CAAA;AAE3E,MAAM,MAAM,+BAA+B,GAAG;IAC5C,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,mBAAmB,CAAC,EAAE,8BAA8B,CAAA;CACrD,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,EAAE,MAAM,CAAA;IACX,kBAAkB,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,6BAA6B,GAAG;IAC1C,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AASD,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,OAAO,EAAE,MAAM;CAK5B;AAsLD,KAAK,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;AAa3C,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,EACb,aAAa,GAAE,8BAAyC,GACvD,WAAW,CAeb;AAwED,wBAAgB,uCAAuC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAmBlF;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,mBAAmB,EAC7B,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACnC,OAAO,GAAE,+BAAoC,GAC5C,OAAO,CA+JT;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ5D;AAED,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,GAAE,MAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAGhH;AAED,wBAAgB,gCAAgC,CAC9C,QAAQ,EAAE,SAAS,kBAAkB,EAAE,GACtC,6BAA6B,EAAE,CASjC;AAED,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,SAAS,kBAAkB,EAAE,GACtC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAK7B;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,EAC3E,SAAS,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,GAC7C,QAAQ,GAAG,IAAI,CAMjB"}
@@ -47,6 +47,130 @@ class InconclusiveMatchError extends Error {
47
47
  Object.setPrototypeOf(this, InconclusiveMatchError.prototype);
48
48
  }
49
49
  }
50
+ function isTruthyOrFalsyPropertyValue(value) {
51
+ if ('boolean' == typeof value) return true;
52
+ if ('string' == typeof value) {
53
+ const lowercaseValue = value.toLowerCase();
54
+ return 'true' === lowercaseValue || 'false' === lowercaseValue;
55
+ }
56
+ if (!Array.isArray(value)) return false;
57
+ for(let index = 0; index < value.length; index++)if (!isTruthyOrFalsyPropertyValue(index in value ? value[index] : null)) return false;
58
+ return true;
59
+ }
60
+ function isTruthyPropertyValue(value) {
61
+ if ('boolean' == typeof value) return value;
62
+ if ('string' == typeof value) return 'true' === value.toLowerCase();
63
+ if (!Array.isArray(value)) return false;
64
+ for(let index = 0; index < value.length; index++)if (!isTruthyPropertyValue(index in value ? value[index] : null)) return false;
65
+ return true;
66
+ }
67
+ function assertUnicodeScalarString(value) {
68
+ for(let index = 0; index < value.length; index++){
69
+ const unit = value.charCodeAt(index);
70
+ if (unit >= 0xd800 && unit <= 0xdbff) {
71
+ const next = value.charCodeAt(index + 1);
72
+ if (index + 1 >= value.length || next < 0xdc00 || next > 0xdfff) throw new InconclusiveMatchError('Cannot stringify an unpaired surrogate like the flags service');
73
+ index++;
74
+ } else if (unit >= 0xdc00 && unit <= 0xdfff) throw new InconclusiveMatchError('Cannot stringify an unpaired surrogate like the flags service');
75
+ }
76
+ }
77
+ function assertJsonRepresentable(value, seen = new Set()) {
78
+ if (null === value || 'boolean' == typeof value) return;
79
+ if ('string' == typeof value) return void assertUnicodeScalarString(value);
80
+ if ('number' == typeof value) {
81
+ if (!Number.isFinite(value)) throw new InconclusiveMatchError(`Cannot represent non-finite number ${value} like the flags service`);
82
+ return;
83
+ }
84
+ if (Array.isArray(value)) {
85
+ if (seen.has(value)) throw new InconclusiveMatchError('Cannot represent a circular array during local evaluation');
86
+ seen.add(value);
87
+ try {
88
+ for(let index = 0; index < value.length; index++)if (index in value) assertJsonRepresentable(value[index], seen);
89
+ } finally{
90
+ seen.delete(value);
91
+ }
92
+ return;
93
+ }
94
+ if ('object' == typeof value) {
95
+ const prototype = Object.getPrototypeOf(value);
96
+ if (prototype !== Object.prototype && null !== prototype) throw new InconclusiveMatchError('Cannot represent a non-JSON object like the flags service');
97
+ if (seen.has(value)) throw new InconclusiveMatchError('Cannot represent a circular object during local evaluation');
98
+ seen.add(value);
99
+ try {
100
+ for (const key of Object.keys(value)){
101
+ assertUnicodeScalarString(key);
102
+ assertJsonRepresentable(value[key], seen);
103
+ }
104
+ } finally{
105
+ seen.delete(value);
106
+ }
107
+ return;
108
+ }
109
+ throw new InconclusiveMatchError(`Cannot represent ${typeof value} like the flags service`);
110
+ }
111
+ function compareJsonObjectKeys(left, right) {
112
+ let leftIndex = 0;
113
+ let rightIndex = 0;
114
+ while(leftIndex < left.length && rightIndex < right.length){
115
+ const leftUnit = left.charCodeAt(leftIndex);
116
+ const rightUnit = right.charCodeAt(rightIndex);
117
+ const leftIsHighSurrogate = leftUnit >= 0xd800 && leftUnit <= 0xdbff;
118
+ const rightIsHighSurrogate = rightUnit >= 0xd800 && rightUnit <= 0xdbff;
119
+ const leftNext = leftIsHighSurrogate ? left.charCodeAt(leftIndex + 1) : 0;
120
+ const rightNext = rightIsHighSurrogate ? right.charCodeAt(rightIndex + 1) : 0;
121
+ const leftCodePoint = leftIsHighSurrogate ? (leftUnit - 0xd800) * 0x400 + leftNext - 0xdc00 + 0x10000 : leftUnit;
122
+ const rightCodePoint = rightIsHighSurrogate ? (rightUnit - 0xd800) * 0x400 + rightNext - 0xdc00 + 0x10000 : rightUnit;
123
+ if (leftCodePoint !== rightCodePoint) return leftCodePoint - rightCodePoint;
124
+ leftIndex += leftIsHighSurrogate ? 2 : 1;
125
+ rightIndex += rightIsHighSurrogate ? 2 : 1;
126
+ }
127
+ return left.length - right.length;
128
+ }
129
+ function serializeJsonValue(value, seen = new Set()) {
130
+ if (null === value) return 'null';
131
+ if ('string' == typeof value) {
132
+ assertUnicodeScalarString(value);
133
+ return JSON.stringify(value);
134
+ }
135
+ if ('boolean' == typeof value) return value ? 'true' : 'false';
136
+ if ('number' == typeof value) {
137
+ if (!Number.isFinite(value)) throw new InconclusiveMatchError(`Cannot stringify non-finite number ${value} like the flags service`);
138
+ if (Number.isInteger(value)) throw new InconclusiveMatchError(`Cannot distinguish integer ${value} from an integral JSON float during local evaluation`);
139
+ return String(value);
140
+ }
141
+ if (Array.isArray(value)) {
142
+ if (seen.has(value)) throw new InconclusiveMatchError('Cannot stringify a circular array during local evaluation');
143
+ seen.add(value);
144
+ try {
145
+ const items = [];
146
+ for(let index = 0; index < value.length; index++)items.push(index in value ? serializeJsonValue(value[index], seen) : 'null');
147
+ return `[${items.join(',')}]`;
148
+ } finally{
149
+ seen.delete(value);
150
+ }
151
+ }
152
+ if ('object' == typeof value) {
153
+ const prototype = Object.getPrototypeOf(value);
154
+ if (prototype !== Object.prototype && null !== prototype) throw new InconclusiveMatchError('Cannot stringify a non-JSON object like the flags service');
155
+ if (seen.has(value)) throw new InconclusiveMatchError('Cannot stringify a circular object during local evaluation');
156
+ seen.add(value);
157
+ try {
158
+ const keys = Object.keys(value);
159
+ keys.forEach(assertUnicodeScalarString);
160
+ return `{${keys.sort(compareJsonObjectKeys).map((key)=>`${JSON.stringify(key)}:${serializeJsonValue(value[key], seen)}`).join(',')}}`;
161
+ } finally{
162
+ seen.delete(value);
163
+ }
164
+ }
165
+ throw new InconclusiveMatchError(`Cannot stringify ${typeof value} like the flags service`);
166
+ }
167
+ function exactMatchString(value) {
168
+ if ('string' == typeof value) {
169
+ assertUnicodeScalarString(value);
170
+ return value;
171
+ }
172
+ return serializeJsonValue(value);
173
+ }
50
174
  function isValidRegex(regex) {
51
175
  try {
52
176
  new RegExp(regex);
@@ -55,6 +179,9 @@ function isValidRegex(regex) {
55
179
  return false;
56
180
  }
57
181
  }
182
+ function asciiLowercase(value) {
183
+ return String(value).replace(/[A-Z]/g, (character)=>character.toLowerCase());
184
+ }
58
185
  function parseSemverNumericIdentifier(part, raw, parsingPolicy) {
59
186
  if (!/^\d+$/.test(part) || 'strict' === parsingPolicy && part.length > 1 && '0' === part[0]) throw new InconclusiveMatchError(`Invalid semver: ${raw}`);
60
187
  return parseInt(part, 10);
@@ -198,15 +325,27 @@ function matchFeatureFlagProperty(property, propertyValues, options = {}) {
198
325
  const hasProperty = Object.prototype.hasOwnProperty.call(propertyValues, key);
199
326
  if (hasProperty) {
200
327
  if ('is_not_set' === operator) return false;
328
+ else if ('is_set' === operator) return true;
201
329
  } else throw new InconclusiveMatchError(`Property ${key} not found in propertyValues`);
202
330
  const overrideValue = propertyValues[key];
203
- if (null == overrideValue && !NULL_VALUES_ALLOWED_OPERATORS.includes(operator)) {
204
- options.warnFunction?.(`Property ${key} cannot have a value of null/undefined with the ${operator} operator`);
331
+ if (void 0 === overrideValue) {
332
+ options.warnFunction?.(`Property ${key} cannot have a value of undefined with the ${operator} operator`);
333
+ return 'is_not' === operator;
334
+ }
335
+ if (null === overrideValue && !NULL_VALUES_ALLOWED_OPERATORS.includes(operator) && 'exact' !== operator && 'is_not' !== operator) {
336
+ options.warnFunction?.(`Property ${key} cannot have a value of null with the ${operator} operator`);
205
337
  return false;
206
338
  }
207
339
  const computeExactMatch = (target, actual)=>{
208
- if (Array.isArray(target)) return target.map((item)=>String(item).toLowerCase()).includes(String(actual).toLowerCase());
209
- return String(target).toLowerCase() === String(actual).toLowerCase();
340
+ if (isTruthyOrFalsyPropertyValue(target)) {
341
+ assertJsonRepresentable(actual);
342
+ return isTruthyPropertyValue(target) === isTruthyPropertyValue(actual);
343
+ }
344
+ if (Array.isArray(target)) {
345
+ const actualString = exactMatchString(actual).toLowerCase();
346
+ return target.some((item)=>exactMatchString(item).toLowerCase() === actualString);
347
+ }
348
+ return exactMatchString(target).toLowerCase() === exactMatchString(actual).toLowerCase();
210
349
  };
211
350
  const compare = (lhs, rhs, comparisonOperator)=>{
212
351
  if ('gt' === comparisonOperator) return lhs > rhs;
@@ -223,17 +362,17 @@ function matchFeatureFlagProperty(property, propertyValues, options = {}) {
223
362
  case 'is_set':
224
363
  return true;
225
364
  case 'icontains':
226
- return String(overrideValue).toLowerCase().includes(String(value).toLowerCase());
365
+ return asciiLowercase(overrideValue).includes(asciiLowercase(value));
227
366
  case 'not_icontains':
228
- return !String(overrideValue).toLowerCase().includes(String(value).toLowerCase());
367
+ return !asciiLowercase(overrideValue).includes(asciiLowercase(value));
229
368
  case 'starts_with':
230
- return String(overrideValue).toLowerCase().startsWith(String(value).toLowerCase());
369
+ return asciiLowercase(overrideValue).startsWith(asciiLowercase(value));
231
370
  case 'not_starts_with':
232
- return !String(overrideValue).toLowerCase().startsWith(String(value).toLowerCase());
371
+ return !asciiLowercase(overrideValue).startsWith(asciiLowercase(value));
233
372
  case 'ends_with':
234
- return String(overrideValue).toLowerCase().endsWith(String(value).toLowerCase());
373
+ return asciiLowercase(overrideValue).endsWith(asciiLowercase(value));
235
374
  case 'not_ends_with':
236
- return !String(overrideValue).toLowerCase().endsWith(String(value).toLowerCase());
375
+ return !asciiLowercase(overrideValue).endsWith(asciiLowercase(value));
237
376
  case 'regex':
238
377
  return isValidRegex(String(value)) && null !== String(overrideValue).match(String(value));
239
378
  case 'not_regex':
@@ -11,6 +11,130 @@ class InconclusiveMatchError extends Error {
11
11
  Object.setPrototypeOf(this, InconclusiveMatchError.prototype);
12
12
  }
13
13
  }
14
+ function isTruthyOrFalsyPropertyValue(value) {
15
+ if ('boolean' == typeof value) return true;
16
+ if ('string' == typeof value) {
17
+ const lowercaseValue = value.toLowerCase();
18
+ return 'true' === lowercaseValue || 'false' === lowercaseValue;
19
+ }
20
+ if (!Array.isArray(value)) return false;
21
+ for(let index = 0; index < value.length; index++)if (!isTruthyOrFalsyPropertyValue(index in value ? value[index] : null)) return false;
22
+ return true;
23
+ }
24
+ function isTruthyPropertyValue(value) {
25
+ if ('boolean' == typeof value) return value;
26
+ if ('string' == typeof value) return 'true' === value.toLowerCase();
27
+ if (!Array.isArray(value)) return false;
28
+ for(let index = 0; index < value.length; index++)if (!isTruthyPropertyValue(index in value ? value[index] : null)) return false;
29
+ return true;
30
+ }
31
+ function assertUnicodeScalarString(value) {
32
+ for(let index = 0; index < value.length; index++){
33
+ const unit = value.charCodeAt(index);
34
+ if (unit >= 0xd800 && unit <= 0xdbff) {
35
+ const next = value.charCodeAt(index + 1);
36
+ if (index + 1 >= value.length || next < 0xdc00 || next > 0xdfff) throw new InconclusiveMatchError('Cannot stringify an unpaired surrogate like the flags service');
37
+ index++;
38
+ } else if (unit >= 0xdc00 && unit <= 0xdfff) throw new InconclusiveMatchError('Cannot stringify an unpaired surrogate like the flags service');
39
+ }
40
+ }
41
+ function assertJsonRepresentable(value, seen = new Set()) {
42
+ if (null === value || 'boolean' == typeof value) return;
43
+ if ('string' == typeof value) return void assertUnicodeScalarString(value);
44
+ if ('number' == typeof value) {
45
+ if (!Number.isFinite(value)) throw new InconclusiveMatchError(`Cannot represent non-finite number ${value} like the flags service`);
46
+ return;
47
+ }
48
+ if (Array.isArray(value)) {
49
+ if (seen.has(value)) throw new InconclusiveMatchError('Cannot represent a circular array during local evaluation');
50
+ seen.add(value);
51
+ try {
52
+ for(let index = 0; index < value.length; index++)if (index in value) assertJsonRepresentable(value[index], seen);
53
+ } finally{
54
+ seen.delete(value);
55
+ }
56
+ return;
57
+ }
58
+ if ('object' == typeof value) {
59
+ const prototype = Object.getPrototypeOf(value);
60
+ if (prototype !== Object.prototype && null !== prototype) throw new InconclusiveMatchError('Cannot represent a non-JSON object like the flags service');
61
+ if (seen.has(value)) throw new InconclusiveMatchError('Cannot represent a circular object during local evaluation');
62
+ seen.add(value);
63
+ try {
64
+ for (const key of Object.keys(value)){
65
+ assertUnicodeScalarString(key);
66
+ assertJsonRepresentable(value[key], seen);
67
+ }
68
+ } finally{
69
+ seen.delete(value);
70
+ }
71
+ return;
72
+ }
73
+ throw new InconclusiveMatchError(`Cannot represent ${typeof value} like the flags service`);
74
+ }
75
+ function compareJsonObjectKeys(left, right) {
76
+ let leftIndex = 0;
77
+ let rightIndex = 0;
78
+ while(leftIndex < left.length && rightIndex < right.length){
79
+ const leftUnit = left.charCodeAt(leftIndex);
80
+ const rightUnit = right.charCodeAt(rightIndex);
81
+ const leftIsHighSurrogate = leftUnit >= 0xd800 && leftUnit <= 0xdbff;
82
+ const rightIsHighSurrogate = rightUnit >= 0xd800 && rightUnit <= 0xdbff;
83
+ const leftNext = leftIsHighSurrogate ? left.charCodeAt(leftIndex + 1) : 0;
84
+ const rightNext = rightIsHighSurrogate ? right.charCodeAt(rightIndex + 1) : 0;
85
+ const leftCodePoint = leftIsHighSurrogate ? (leftUnit - 0xd800) * 0x400 + leftNext - 0xdc00 + 0x10000 : leftUnit;
86
+ const rightCodePoint = rightIsHighSurrogate ? (rightUnit - 0xd800) * 0x400 + rightNext - 0xdc00 + 0x10000 : rightUnit;
87
+ if (leftCodePoint !== rightCodePoint) return leftCodePoint - rightCodePoint;
88
+ leftIndex += leftIsHighSurrogate ? 2 : 1;
89
+ rightIndex += rightIsHighSurrogate ? 2 : 1;
90
+ }
91
+ return left.length - right.length;
92
+ }
93
+ function serializeJsonValue(value, seen = new Set()) {
94
+ if (null === value) return 'null';
95
+ if ('string' == typeof value) {
96
+ assertUnicodeScalarString(value);
97
+ return JSON.stringify(value);
98
+ }
99
+ if ('boolean' == typeof value) return value ? 'true' : 'false';
100
+ if ('number' == typeof value) {
101
+ if (!Number.isFinite(value)) throw new InconclusiveMatchError(`Cannot stringify non-finite number ${value} like the flags service`);
102
+ if (Number.isInteger(value)) throw new InconclusiveMatchError(`Cannot distinguish integer ${value} from an integral JSON float during local evaluation`);
103
+ return String(value);
104
+ }
105
+ if (Array.isArray(value)) {
106
+ if (seen.has(value)) throw new InconclusiveMatchError('Cannot stringify a circular array during local evaluation');
107
+ seen.add(value);
108
+ try {
109
+ const items = [];
110
+ for(let index = 0; index < value.length; index++)items.push(index in value ? serializeJsonValue(value[index], seen) : 'null');
111
+ return `[${items.join(',')}]`;
112
+ } finally{
113
+ seen.delete(value);
114
+ }
115
+ }
116
+ if ('object' == typeof value) {
117
+ const prototype = Object.getPrototypeOf(value);
118
+ if (prototype !== Object.prototype && null !== prototype) throw new InconclusiveMatchError('Cannot stringify a non-JSON object like the flags service');
119
+ if (seen.has(value)) throw new InconclusiveMatchError('Cannot stringify a circular object during local evaluation');
120
+ seen.add(value);
121
+ try {
122
+ const keys = Object.keys(value);
123
+ keys.forEach(assertUnicodeScalarString);
124
+ return `{${keys.sort(compareJsonObjectKeys).map((key)=>`${JSON.stringify(key)}:${serializeJsonValue(value[key], seen)}`).join(',')}}`;
125
+ } finally{
126
+ seen.delete(value);
127
+ }
128
+ }
129
+ throw new InconclusiveMatchError(`Cannot stringify ${typeof value} like the flags service`);
130
+ }
131
+ function exactMatchString(value) {
132
+ if ('string' == typeof value) {
133
+ assertUnicodeScalarString(value);
134
+ return value;
135
+ }
136
+ return serializeJsonValue(value);
137
+ }
14
138
  function isValidRegex(regex) {
15
139
  try {
16
140
  new RegExp(regex);
@@ -19,6 +143,9 @@ function isValidRegex(regex) {
19
143
  return false;
20
144
  }
21
145
  }
146
+ function asciiLowercase(value) {
147
+ return String(value).replace(/[A-Z]/g, (character)=>character.toLowerCase());
148
+ }
22
149
  function parseSemverNumericIdentifier(part, raw, parsingPolicy) {
23
150
  if (!/^\d+$/.test(part) || 'strict' === parsingPolicy && part.length > 1 && '0' === part[0]) throw new InconclusiveMatchError(`Invalid semver: ${raw}`);
24
151
  return parseInt(part, 10);
@@ -162,15 +289,27 @@ function matchFeatureFlagProperty(property, propertyValues, options = {}) {
162
289
  const hasProperty = Object.prototype.hasOwnProperty.call(propertyValues, key);
163
290
  if (hasProperty) {
164
291
  if ('is_not_set' === operator) return false;
292
+ else if ('is_set' === operator) return true;
165
293
  } else throw new InconclusiveMatchError(`Property ${key} not found in propertyValues`);
166
294
  const overrideValue = propertyValues[key];
167
- if (null == overrideValue && !NULL_VALUES_ALLOWED_OPERATORS.includes(operator)) {
168
- options.warnFunction?.(`Property ${key} cannot have a value of null/undefined with the ${operator} operator`);
295
+ if (void 0 === overrideValue) {
296
+ options.warnFunction?.(`Property ${key} cannot have a value of undefined with the ${operator} operator`);
297
+ return 'is_not' === operator;
298
+ }
299
+ if (null === overrideValue && !NULL_VALUES_ALLOWED_OPERATORS.includes(operator) && 'exact' !== operator && 'is_not' !== operator) {
300
+ options.warnFunction?.(`Property ${key} cannot have a value of null with the ${operator} operator`);
169
301
  return false;
170
302
  }
171
303
  const computeExactMatch = (target, actual)=>{
172
- if (Array.isArray(target)) return target.map((item)=>String(item).toLowerCase()).includes(String(actual).toLowerCase());
173
- return String(target).toLowerCase() === String(actual).toLowerCase();
304
+ if (isTruthyOrFalsyPropertyValue(target)) {
305
+ assertJsonRepresentable(actual);
306
+ return isTruthyPropertyValue(target) === isTruthyPropertyValue(actual);
307
+ }
308
+ if (Array.isArray(target)) {
309
+ const actualString = exactMatchString(actual).toLowerCase();
310
+ return target.some((item)=>exactMatchString(item).toLowerCase() === actualString);
311
+ }
312
+ return exactMatchString(target).toLowerCase() === exactMatchString(actual).toLowerCase();
174
313
  };
175
314
  const compare = (lhs, rhs, comparisonOperator)=>{
176
315
  if ('gt' === comparisonOperator) return lhs > rhs;
@@ -187,17 +326,17 @@ function matchFeatureFlagProperty(property, propertyValues, options = {}) {
187
326
  case 'is_set':
188
327
  return true;
189
328
  case 'icontains':
190
- return String(overrideValue).toLowerCase().includes(String(value).toLowerCase());
329
+ return asciiLowercase(overrideValue).includes(asciiLowercase(value));
191
330
  case 'not_icontains':
192
- return !String(overrideValue).toLowerCase().includes(String(value).toLowerCase());
331
+ return !asciiLowercase(overrideValue).includes(asciiLowercase(value));
193
332
  case 'starts_with':
194
- return String(overrideValue).toLowerCase().startsWith(String(value).toLowerCase());
333
+ return asciiLowercase(overrideValue).startsWith(asciiLowercase(value));
195
334
  case 'not_starts_with':
196
- return !String(overrideValue).toLowerCase().startsWith(String(value).toLowerCase());
335
+ return !asciiLowercase(overrideValue).startsWith(asciiLowercase(value));
197
336
  case 'ends_with':
198
- return String(overrideValue).toLowerCase().endsWith(String(value).toLowerCase());
337
+ return asciiLowercase(overrideValue).endsWith(asciiLowercase(value));
199
338
  case 'not_ends_with':
200
- return !String(overrideValue).toLowerCase().endsWith(String(value).toLowerCase());
339
+ return !asciiLowercase(overrideValue).endsWith(asciiLowercase(value));
201
340
  case 'regex':
202
341
  return isValidRegex(String(value)) && null !== String(overrideValue).match(String(value));
203
342
  case 'not_regex':
package/dist/index.d.ts CHANGED
@@ -4,7 +4,8 @@ export type { FeatureFlagProperty, FeatureFlagPropertyValue, FeatureFlagSemverPa
4
4
  export { gzipCompress, isGzipData, isGzipRequest, isGzipSupported, isNativeAsyncGzipError, isNativeAsyncGzipReadError, } from './gzip';
5
5
  export * from './utils';
6
6
  export * as ErrorTracking from './error-tracking';
7
- export { buildOtlpLogRecord, buildOtlpLogsPayload, buildResourceAttributes, getOtlpSeverityNumber, getOtlpSeverityText, toOtlpAnyValue, toOtlpKeyValueList, } from './logs/logs-utils';
7
+ export { buildOtlpLogRecord, buildOtlpLogsPayload, buildResourceAttributes, getOtlpSeverityNumber, getOtlpSeverityText, } from './logs/logs-utils';
8
+ export { toOtlpAnyValue, toOtlpKeyValueList } from './utils/otlp-any-value';
8
9
  export { PostHogLogs } from './logs';
9
10
  export type { BeforeSendLogFn, BufferedLogEntry, CaptureLogger, LogSdkContext, PostHogLogsConfig, ResolvedPostHogLogsConfig, } from './logs/types';
10
11
  export type { CaptureLogOptions, LogAttributeValue, LogAttributes, LogSeverityLevel } from './logs/types';
@@ -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,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"}
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,GACpB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAC3E,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"}
package/dist/index.js CHANGED
@@ -42,6 +42,9 @@ var __webpack_modules__ = {
42
42
  "./utils?637c": function(module) {
43
43
  module.exports = require("./utils/index.js");
44
44
  },
45
+ "./utils/otlp-any-value": function(module) {
46
+ module.exports = require("./utils/otlp-any-value.js");
47
+ },
45
48
  "./vendor/uuidv7": function(module) {
46
49
  module.exports = require("./vendor/uuidv7.js");
47
50
  }
@@ -90,16 +93,16 @@ var __webpack_exports__ = {};
90
93
  (()=>{
91
94
  __webpack_require__.r(__webpack_exports__);
92
95
  __webpack_require__.d(__webpack_exports__, {
93
- DEFAULT_HISTOGRAM_BOUNDS: ()=>_metrics__WEBPACK_IMPORTED_MODULE_7__.DEFAULT_HISTOGRAM_BOUNDS,
96
+ DEFAULT_HISTOGRAM_BOUNDS: ()=>_metrics__WEBPACK_IMPORTED_MODULE_8__.DEFAULT_HISTOGRAM_BOUNDS,
94
97
  ErrorTracking: ()=>_error_tracking__WEBPACK_IMPORTED_MODULE_4__,
95
98
  InconclusiveMatchError: ()=>_featureFlagLocalEvaluation__WEBPACK_IMPORTED_MODULE_1__.InconclusiveMatchError,
96
99
  MINIMAL_FLAG_CALLED_EVENT_CAMPAIGN_PROPERTIES: ()=>_featureFlagUtils__WEBPACK_IMPORTED_MODULE_0__.MINIMAL_FLAG_CALLED_EVENT_CAMPAIGN_PROPERTIES,
97
- PostHogLogs: ()=>_logs__WEBPACK_IMPORTED_MODULE_6__.PostHogLogs,
98
- PostHogMetrics: ()=>_metrics__WEBPACK_IMPORTED_MODULE_7__.PostHogMetrics,
99
- buildMetricsResourceAttributes: ()=>_metrics__WEBPACK_IMPORTED_MODULE_7__.buildMetricsResourceAttributes,
100
+ PostHogLogs: ()=>_logs__WEBPACK_IMPORTED_MODULE_7__.PostHogLogs,
101
+ PostHogMetrics: ()=>_metrics__WEBPACK_IMPORTED_MODULE_8__.PostHogMetrics,
102
+ buildMetricsResourceAttributes: ()=>_metrics__WEBPACK_IMPORTED_MODULE_8__.buildMetricsResourceAttributes,
100
103
  buildOtlpLogRecord: ()=>_logs_logs_utils__WEBPACK_IMPORTED_MODULE_5__.buildOtlpLogRecord,
101
104
  buildOtlpLogsPayload: ()=>_logs_logs_utils__WEBPACK_IMPORTED_MODULE_5__.buildOtlpLogsPayload,
102
- buildOtlpMetricsPayload: ()=>_metrics__WEBPACK_IMPORTED_MODULE_7__.buildOtlpMetricsPayload,
105
+ buildOtlpMetricsPayload: ()=>_metrics__WEBPACK_IMPORTED_MODULE_8__.buildOtlpMetricsPayload,
103
106
  buildResourceAttributes: ()=>_logs_logs_utils__WEBPACK_IMPORTED_MODULE_5__.buildResourceAttributes,
104
107
  flagDetailsToResults: ()=>_featureFlagUtils__WEBPACK_IMPORTED_MODULE_0__.flagDetailsToResults,
105
108
  getEnabledFromValue: ()=>_featureFlagUtils__WEBPACK_IMPORTED_MODULE_0__.getEnabledFromValue,
@@ -107,11 +110,11 @@ var __webpack_exports__ = {};
107
110
  getFeatureFlagValue: ()=>_featureFlagUtils__WEBPACK_IMPORTED_MODULE_0__.getFeatureFlagValue,
108
111
  getFeatureFlagVariant: ()=>_featureFlagLocalEvaluation__WEBPACK_IMPORTED_MODULE_1__.getFeatureFlagVariant,
109
112
  getFeatureFlagVariantLookupTable: ()=>_featureFlagLocalEvaluation__WEBPACK_IMPORTED_MODULE_1__.getFeatureFlagVariantLookupTable,
110
- getLengthFromRules: ()=>_surveys_validation__WEBPACK_IMPORTED_MODULE_14__.getLengthFromRules,
113
+ getLengthFromRules: ()=>_surveys_validation__WEBPACK_IMPORTED_MODULE_15__.getLengthFromRules,
111
114
  getOtlpSeverityNumber: ()=>_logs_logs_utils__WEBPACK_IMPORTED_MODULE_5__.getOtlpSeverityNumber,
112
115
  getOtlpSeverityText: ()=>_logs_logs_utils__WEBPACK_IMPORTED_MODULE_5__.getOtlpSeverityText,
113
- getRequirementsHint: ()=>_surveys_validation__WEBPACK_IMPORTED_MODULE_14__.getRequirementsHint,
114
- getValidationError: ()=>_surveys_validation__WEBPACK_IMPORTED_MODULE_14__.getValidationError,
116
+ getRequirementsHint: ()=>_surveys_validation__WEBPACK_IMPORTED_MODULE_15__.getRequirementsHint,
117
+ getValidationError: ()=>_surveys_validation__WEBPACK_IMPORTED_MODULE_15__.getValidationError,
115
118
  getVariantFromValue: ()=>_featureFlagUtils__WEBPACK_IMPORTED_MODULE_0__.getVariantFromValue,
116
119
  gzipCompress: ()=>_gzip__WEBPACK_IMPORTED_MODULE_2__.gzipCompress,
117
120
  hashSHA1: ()=>_featureFlagLocalEvaluation__WEBPACK_IMPORTED_MODULE_1__.hashSHA1,
@@ -126,10 +129,10 @@ var __webpack_exports__ = {};
126
129
  parsePayload: ()=>_featureFlagUtils__WEBPACK_IMPORTED_MODULE_0__.parsePayload,
127
130
  relativeDateParseForFeatureFlagMatching: ()=>_featureFlagLocalEvaluation__WEBPACK_IMPORTED_MODULE_1__.relativeDateParseForFeatureFlagMatching,
128
131
  resolveFeatureFlagPayload: ()=>_featureFlagLocalEvaluation__WEBPACK_IMPORTED_MODULE_1__.resolveFeatureFlagPayload,
129
- resolveMetricsConfig: ()=>_metrics__WEBPACK_IMPORTED_MODULE_7__.resolveMetricsConfig,
130
- toOtlpAnyValue: ()=>_logs_logs_utils__WEBPACK_IMPORTED_MODULE_5__.toOtlpAnyValue,
131
- toOtlpKeyValueList: ()=>_logs_logs_utils__WEBPACK_IMPORTED_MODULE_5__.toOtlpKeyValueList,
132
- uuidv7: ()=>_vendor_uuidv7__WEBPACK_IMPORTED_MODULE_8__.uuidv7
132
+ resolveMetricsConfig: ()=>_metrics__WEBPACK_IMPORTED_MODULE_8__.resolveMetricsConfig,
133
+ toOtlpAnyValue: ()=>_utils_otlp_any_value__WEBPACK_IMPORTED_MODULE_6__.toOtlpAnyValue,
134
+ toOtlpKeyValueList: ()=>_utils_otlp_any_value__WEBPACK_IMPORTED_MODULE_6__.toOtlpKeyValueList,
135
+ uuidv7: ()=>_vendor_uuidv7__WEBPACK_IMPORTED_MODULE_9__.uuidv7
133
136
  });
134
137
  var _featureFlagUtils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./featureFlagUtils");
135
138
  var _featureFlagLocalEvaluation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./featureFlagLocalEvaluation");
@@ -184,12 +187,13 @@ var __webpack_exports__ = {};
184
187
  __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);
185
188
  var _error_tracking__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("./error-tracking");
186
189
  var _logs_logs_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("./logs/logs-utils");
187
- var _logs__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("./logs");
188
- var _metrics__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__("./metrics");
189
- var _vendor_uuidv7__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__("./vendor/uuidv7");
190
- var _cookie__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__("./cookie");
190
+ var _utils_otlp_any_value__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("./utils/otlp-any-value");
191
+ var _logs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__("./logs");
192
+ var _metrics__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__("./metrics");
193
+ var _vendor_uuidv7__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__("./vendor/uuidv7");
194
+ var _cookie__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__("./cookie");
191
195
  var __WEBPACK_REEXPORT_OBJECT__ = {};
192
- for(var __WEBPACK_IMPORT_KEY__ in _cookie__WEBPACK_IMPORTED_MODULE_9__)if ([
196
+ for(var __WEBPACK_IMPORT_KEY__ in _cookie__WEBPACK_IMPORTED_MODULE_10__)if ([
193
197
  "toOtlpKeyValueList",
194
198
  "relativeDateParseForFeatureFlagMatching",
195
199
  "isNativeAsyncGzipError",
@@ -232,12 +236,12 @@ var __webpack_exports__ = {};
232
236
  "buildOtlpLogRecord",
233
237
  "getFeatureFlagVariant"
234
238
  ].indexOf(__WEBPACK_IMPORT_KEY__) < 0) __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = (function(key) {
235
- return _cookie__WEBPACK_IMPORTED_MODULE_9__[key];
239
+ return _cookie__WEBPACK_IMPORTED_MODULE_10__[key];
236
240
  }).bind(0, __WEBPACK_IMPORT_KEY__);
237
241
  __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);
238
- var _posthog_core__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__("./posthog-core");
242
+ var _posthog_core__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__("./posthog-core");
239
243
  var __WEBPACK_REEXPORT_OBJECT__ = {};
240
- for(var __WEBPACK_IMPORT_KEY__ in _posthog_core__WEBPACK_IMPORTED_MODULE_10__)if ([
244
+ for(var __WEBPACK_IMPORT_KEY__ in _posthog_core__WEBPACK_IMPORTED_MODULE_11__)if ([
241
245
  "toOtlpKeyValueList",
242
246
  "relativeDateParseForFeatureFlagMatching",
243
247
  "isNativeAsyncGzipError",
@@ -280,12 +284,12 @@ var __webpack_exports__ = {};
280
284
  "buildOtlpLogRecord",
281
285
  "getFeatureFlagVariant"
282
286
  ].indexOf(__WEBPACK_IMPORT_KEY__) < 0) __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = (function(key) {
283
- return _posthog_core__WEBPACK_IMPORTED_MODULE_10__[key];
287
+ return _posthog_core__WEBPACK_IMPORTED_MODULE_11__[key];
284
288
  }).bind(0, __WEBPACK_IMPORT_KEY__);
285
289
  __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);
286
- var _posthog_core_stateless__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__("./posthog-core-stateless");
290
+ var _posthog_core_stateless__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__("./posthog-core-stateless");
287
291
  var __WEBPACK_REEXPORT_OBJECT__ = {};
288
- for(var __WEBPACK_IMPORT_KEY__ in _posthog_core_stateless__WEBPACK_IMPORTED_MODULE_11__)if ([
292
+ for(var __WEBPACK_IMPORT_KEY__ in _posthog_core_stateless__WEBPACK_IMPORTED_MODULE_12__)if ([
289
293
  "toOtlpKeyValueList",
290
294
  "relativeDateParseForFeatureFlagMatching",
291
295
  "isNativeAsyncGzipError",
@@ -328,12 +332,12 @@ var __webpack_exports__ = {};
328
332
  "buildOtlpLogRecord",
329
333
  "getFeatureFlagVariant"
330
334
  ].indexOf(__WEBPACK_IMPORT_KEY__) < 0) __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = (function(key) {
331
- return _posthog_core_stateless__WEBPACK_IMPORTED_MODULE_11__[key];
335
+ return _posthog_core_stateless__WEBPACK_IMPORTED_MODULE_12__[key];
332
336
  }).bind(0, __WEBPACK_IMPORT_KEY__);
333
337
  __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);
334
- var _tracing_headers__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__("./tracing-headers");
338
+ var _tracing_headers__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__("./tracing-headers");
335
339
  var __WEBPACK_REEXPORT_OBJECT__ = {};
336
- for(var __WEBPACK_IMPORT_KEY__ in _tracing_headers__WEBPACK_IMPORTED_MODULE_12__)if ([
340
+ for(var __WEBPACK_IMPORT_KEY__ in _tracing_headers__WEBPACK_IMPORTED_MODULE_13__)if ([
337
341
  "toOtlpKeyValueList",
338
342
  "relativeDateParseForFeatureFlagMatching",
339
343
  "isNativeAsyncGzipError",
@@ -376,12 +380,12 @@ var __webpack_exports__ = {};
376
380
  "buildOtlpLogRecord",
377
381
  "getFeatureFlagVariant"
378
382
  ].indexOf(__WEBPACK_IMPORT_KEY__) < 0) __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = (function(key) {
379
- return _tracing_headers__WEBPACK_IMPORTED_MODULE_12__[key];
383
+ return _tracing_headers__WEBPACK_IMPORTED_MODULE_13__[key];
380
384
  }).bind(0, __WEBPACK_IMPORT_KEY__);
381
385
  __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);
382
- var _types__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__("./types");
386
+ var _types__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__("./types");
383
387
  var __WEBPACK_REEXPORT_OBJECT__ = {};
384
- for(var __WEBPACK_IMPORT_KEY__ in _types__WEBPACK_IMPORTED_MODULE_13__)if ([
388
+ for(var __WEBPACK_IMPORT_KEY__ in _types__WEBPACK_IMPORTED_MODULE_14__)if ([
385
389
  "toOtlpKeyValueList",
386
390
  "relativeDateParseForFeatureFlagMatching",
387
391
  "isNativeAsyncGzipError",
@@ -424,10 +428,10 @@ var __webpack_exports__ = {};
424
428
  "buildOtlpLogRecord",
425
429
  "getFeatureFlagVariant"
426
430
  ].indexOf(__WEBPACK_IMPORT_KEY__) < 0) __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = (function(key) {
427
- return _types__WEBPACK_IMPORTED_MODULE_13__[key];
431
+ return _types__WEBPACK_IMPORTED_MODULE_14__[key];
428
432
  }).bind(0, __WEBPACK_IMPORT_KEY__);
429
433
  __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);
430
- var _surveys_validation__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__("./surveys/validation");
434
+ var _surveys_validation__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__("./surveys/validation");
431
435
  })();
432
436
  exports.DEFAULT_HISTOGRAM_BOUNDS = __webpack_exports__.DEFAULT_HISTOGRAM_BOUNDS;
433
437
  exports.ErrorTracking = __webpack_exports__.ErrorTracking;
package/dist/index.mjs CHANGED
@@ -1,7 +1,8 @@
1
1
  import { MINIMAL_FLAG_CALLED_EVENT_CAMPAIGN_PROPERTIES, flagDetailsToResults, getEnabledFromValue, getFeatureFlagValue, getVariantFromValue, minimizeFlagCalledEventProperties, parsePayload } from "./featureFlagUtils.mjs";
2
2
  import { InconclusiveMatchError, getFeatureFlagHash, getFeatureFlagVariant, getFeatureFlagVariantLookupTable, hashSHA1, matchFeatureFlagProperty, parseFeatureFlagSemver, relativeDateParseForFeatureFlagMatching, resolveFeatureFlagPayload } from "./featureFlagLocalEvaluation.mjs";
3
3
  import { gzipCompress, isGzipData, isGzipRequest, isGzipSupported, isNativeAsyncGzipError, isNativeAsyncGzipReadError } from "./gzip.mjs";
4
- import { buildOtlpLogRecord, buildOtlpLogsPayload, buildResourceAttributes, getOtlpSeverityNumber, getOtlpSeverityText, toOtlpAnyValue, toOtlpKeyValueList } from "./logs/logs-utils.mjs";
4
+ import { buildOtlpLogRecord, buildOtlpLogsPayload, buildResourceAttributes, getOtlpSeverityNumber, getOtlpSeverityText } from "./logs/logs-utils.mjs";
5
+ import { toOtlpAnyValue, toOtlpKeyValueList } from "./utils/otlp-any-value.mjs";
5
6
  import { PostHogLogs } from "./logs/index.mjs";
6
7
  import { DEFAULT_HISTOGRAM_BOUNDS, PostHogMetrics, buildMetricsResourceAttributes, buildOtlpMetricsPayload, resolveMetricsConfig } from "./metrics/index.mjs";
7
8
  import { uuidv7 } from "./vendor/uuidv7.mjs";
@@ -1,10 +1,8 @@
1
- import type { CaptureLogOptions, LogAttributeValue, LogSeverityLevel, OtlpAnyValue, OtlpKeyValue, OtlpLogRecord, OtlpLogsPayload, OtlpSeverityText } from '@posthog/types';
1
+ import type { CaptureLogOptions, LogAttributeValue, LogSeverityLevel, OtlpLogRecord, OtlpLogsPayload, OtlpSeverityText } from '@posthog/types';
2
2
  import type { Logger } from '../types';
3
3
  import type { LogSdkContext, ResolvedPostHogLogsConfig } from './types';
4
4
  export declare function getOtlpSeverityText(level: LogSeverityLevel): OtlpSeverityText;
5
5
  export declare function getOtlpSeverityNumber(level: LogSeverityLevel): number;
6
- export declare function toOtlpAnyValue(value: LogAttributeValue, logger?: Logger): OtlpAnyValue;
7
- export declare function toOtlpKeyValueList(attrs: Record<string, LogAttributeValue>, logger?: Logger): OtlpKeyValue[];
8
6
  export declare function buildOtlpLogRecord(options: CaptureLogOptions, sdkContext: LogSdkContext, logger?: Logger, occurredAtMs?: number): OtlpLogRecord;
9
7
  /**
10
8
  * OTLP resource attributes for every batch, shared by the core flush path and
@@ -1 +1 @@
1
- {"version":3,"file":"logs-utils.d.ts","sourceRoot":"","sources":["../../src/logs/logs-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,eAAe,EAEf,gBAAgB,EACjB,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAA;AA4BvE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,GAAG,gBAAgB,CAE7E;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAErE;AAqBD,wBAAgB,cAAc,CAAC,KAAK,EAAE,iBAAiB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,CAQtF;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE,CAM5G;AAuMD,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,iBAAiB,EAC1B,UAAU,EAAE,aAAa,EACzB,MAAM,CAAC,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,MAAM,GACpB,aAAa,CA+Ef;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,yBAAyB,EACjC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CASnC;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,aAAa,EAAE,EAC3B,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,EACrD,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GACnB,eAAe,CAcjB"}
1
+ {"version":3,"file":"logs-utils.d.ts","sourceRoot":"","sources":["../../src/logs/logs-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,eAAe,EAEf,gBAAgB,EACjB,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAA;AAoBvE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,GAAG,gBAAgB,CAE7E;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAErE;AA0CD,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,iBAAiB,EAC1B,UAAU,EAAE,aAAa,EACzB,MAAM,CAAC,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,MAAM,GACpB,aAAa,CA+Ef;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,yBAAyB,EACjC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CASnC;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,aAAa,EAAE,EAC3B,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,EACrD,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GACnB,eAAe,CAcjB"}