@posthog/core 1.49.1 → 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.
- package/dist/featureFlagLocalEvaluation.d.ts +1 -1
- package/dist/featureFlagLocalEvaluation.d.ts.map +1 -1
- package/dist/featureFlagLocalEvaluation.js +149 -10
- package/dist/featureFlagLocalEvaluation.mjs +149 -10
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +35 -31
- package/dist/index.mjs +2 -1
- package/dist/logs/logs-utils.d.ts +1 -3
- package/dist/logs/logs-utils.d.ts.map +1 -1
- package/dist/logs/logs-utils.js +5 -158
- package/dist/logs/logs-utils.mjs +4 -151
- package/dist/metrics/index.js +2 -2
- package/dist/metrics/index.mjs +1 -1
- package/dist/metrics/metrics-utils.js +2 -2
- package/dist/metrics/metrics-utils.mjs +1 -1
- package/dist/surveys/events.d.ts +1 -1
- package/dist/surveys/events.d.ts.map +1 -1
- package/dist/surveys/events.js +2 -2
- package/dist/surveys/events.mjs +2 -2
- package/dist/utils/otlp-any-value.d.ts +5 -0
- package/dist/utils/otlp-any-value.d.ts.map +1 -0
- package/dist/utils/otlp-any-value.js +203 -0
- package/dist/utils/otlp-any-value.mjs +166 -0
- package/dist/utils/user-agent-utils.d.ts +4 -4
- package/dist/utils/user-agent-utils.d.ts.map +1 -1
- package/dist/utils/user-agent-utils.js +16 -0
- package/dist/utils/user-agent-utils.mjs +16 -0
- package/package.json +2 -2
- package/src/featureFlagLocalEvaluation.ts +199 -12
- package/src/index.ts +1 -2
- package/src/logs/logs-utils.spec.ts +2 -350
- package/src/logs/logs-utils.ts +3 -207
- package/src/metrics/index.ts +1 -1
- package/src/metrics/metrics-utils.ts +1 -1
- package/src/surveys/events.spec.ts +41 -0
- package/src/surveys/events.ts +3 -2
- package/src/utils/otlp-any-value.spec.ts +361 -0
- package/src/utils/otlp-any-value.ts +225 -0
- package/src/utils/user-agent-utils.ts +22 -6
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { FeatureFlagValue, JsonType } from './types';
|
|
2
|
-
export type FeatureFlagPropertyValue =
|
|
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,
|
|
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 (
|
|
204
|
-
options.warnFunction?.(`Property ${key} cannot have a value of
|
|
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 (
|
|
209
|
-
|
|
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
|
|
365
|
+
return asciiLowercase(overrideValue).includes(asciiLowercase(value));
|
|
227
366
|
case 'not_icontains':
|
|
228
|
-
return !
|
|
367
|
+
return !asciiLowercase(overrideValue).includes(asciiLowercase(value));
|
|
229
368
|
case 'starts_with':
|
|
230
|
-
return
|
|
369
|
+
return asciiLowercase(overrideValue).startsWith(asciiLowercase(value));
|
|
231
370
|
case 'not_starts_with':
|
|
232
|
-
return !
|
|
371
|
+
return !asciiLowercase(overrideValue).startsWith(asciiLowercase(value));
|
|
233
372
|
case 'ends_with':
|
|
234
|
-
return
|
|
373
|
+
return asciiLowercase(overrideValue).endsWith(asciiLowercase(value));
|
|
235
374
|
case 'not_ends_with':
|
|
236
|
-
return !
|
|
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 (
|
|
168
|
-
options.warnFunction?.(`Property ${key} cannot have a value of
|
|
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 (
|
|
173
|
-
|
|
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
|
|
329
|
+
return asciiLowercase(overrideValue).includes(asciiLowercase(value));
|
|
191
330
|
case 'not_icontains':
|
|
192
|
-
return !
|
|
331
|
+
return !asciiLowercase(overrideValue).includes(asciiLowercase(value));
|
|
193
332
|
case 'starts_with':
|
|
194
|
-
return
|
|
333
|
+
return asciiLowercase(overrideValue).startsWith(asciiLowercase(value));
|
|
195
334
|
case 'not_starts_with':
|
|
196
|
-
return !
|
|
335
|
+
return !asciiLowercase(overrideValue).startsWith(asciiLowercase(value));
|
|
197
336
|
case 'ends_with':
|
|
198
|
-
return
|
|
337
|
+
return asciiLowercase(overrideValue).endsWith(asciiLowercase(value));
|
|
199
338
|
case 'not_ends_with':
|
|
200
|
-
return !
|
|
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,
|
|
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';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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,
|
|
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: ()=>
|
|
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: ()=>
|
|
98
|
-
PostHogMetrics: ()=>
|
|
99
|
-
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: ()=>
|
|
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: ()=>
|
|
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: ()=>
|
|
114
|
-
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: ()=>
|
|
130
|
-
toOtlpAnyValue: ()=>
|
|
131
|
-
toOtlpKeyValueList: ()=>
|
|
132
|
-
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
|
|
188
|
-
var
|
|
189
|
-
var
|
|
190
|
-
var
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
386
|
+
var _types__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__("./types");
|
|
383
387
|
var __WEBPACK_REEXPORT_OBJECT__ = {};
|
|
384
|
-
for(var __WEBPACK_IMPORT_KEY__ in
|
|
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
|
|
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
|
|
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
|
|
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,
|
|
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,
|
|
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"}
|