@posthog/core
Advanced tools
| import type { FeatureFlagValue, JsonType } from './types'; | ||
| export type FeatureFlagPropertyValue = string | number | (string | number)[] | boolean; | ||
| export type FeatureFlagProperty = { | ||
| key: string; | ||
| value: FeatureFlagPropertyValue; | ||
| operator?: string; | ||
| }; | ||
| export type FeatureFlagSemverParsingPolicy = 'strict' | 'legacy-permissive'; | ||
| export type MatchFeatureFlagPropertyOptions = { | ||
| warnFunction?: (message: string) => void; | ||
| semverParsingPolicy?: FeatureFlagSemverParsingPolicy; | ||
| }; | ||
| export type FeatureFlagVariant = { | ||
| key: string; | ||
| rollout_percentage: number; | ||
| }; | ||
| export type FeatureFlagVariantLookupEntry = { | ||
| valueMin: number; | ||
| valueMax: number; | ||
| key: string; | ||
| }; | ||
| export declare class InconclusiveMatchError extends Error { | ||
| constructor(message: string); | ||
| } | ||
| type SemverTuple = [number, number, number]; | ||
| export declare function parseFeatureFlagSemver(value: string, parsingPolicy?: FeatureFlagSemverParsingPolicy): SemverTuple; | ||
| export declare function relativeDateParseForFeatureFlagMatching(value: string): Date | null; | ||
| export declare function matchFeatureFlagProperty(property: FeatureFlagProperty, propertyValues: Record<string, any>, options?: MatchFeatureFlagPropertyOptions): boolean; | ||
| export declare function hashSHA1(text: string): Promise<string>; | ||
| export declare function getFeatureFlagHash(key: string, bucketingValue: string, salt?: string): Promise<number>; | ||
| export declare function getFeatureFlagVariantLookupTable(variants: readonly FeatureFlagVariant[]): FeatureFlagVariantLookupEntry[]; | ||
| export declare function getFeatureFlagVariant(key: string, bucketingValue: string, variants: readonly FeatureFlagVariant[]): Promise<string | undefined>; | ||
| export declare function resolveFeatureFlagPayload(payloads: Readonly<Record<string, JsonType | undefined>> | null | undefined, flagValue: FeatureFlagValue | null | undefined): JsonType | null; | ||
| export {}; | ||
| //# sourceMappingURL=featureFlagLocalEvaluation.d.ts.map |
| {"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"} |
| "use strict"; | ||
| var __webpack_require__ = {}; | ||
| (()=>{ | ||
| __webpack_require__.d = (exports1, definition)=>{ | ||
| for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, { | ||
| enumerable: true, | ||
| get: definition[key] | ||
| }); | ||
| }; | ||
| })(); | ||
| (()=>{ | ||
| __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop); | ||
| })(); | ||
| (()=>{ | ||
| __webpack_require__.r = (exports1)=>{ | ||
| if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, { | ||
| value: 'Module' | ||
| }); | ||
| Object.defineProperty(exports1, '__esModule', { | ||
| value: true | ||
| }); | ||
| }; | ||
| })(); | ||
| var __webpack_exports__ = {}; | ||
| __webpack_require__.r(__webpack_exports__); | ||
| __webpack_require__.d(__webpack_exports__, { | ||
| getFeatureFlagHash: ()=>getFeatureFlagHash, | ||
| relativeDateParseForFeatureFlagMatching: ()=>relativeDateParseForFeatureFlagMatching, | ||
| InconclusiveMatchError: ()=>InconclusiveMatchError, | ||
| parseFeatureFlagSemver: ()=>parseFeatureFlagSemver, | ||
| resolveFeatureFlagPayload: ()=>resolveFeatureFlagPayload, | ||
| getFeatureFlagVariantLookupTable: ()=>getFeatureFlagVariantLookupTable, | ||
| hashSHA1: ()=>hashSHA1, | ||
| matchFeatureFlagProperty: ()=>matchFeatureFlagProperty, | ||
| getFeatureFlagVariant: ()=>getFeatureFlagVariant | ||
| }); | ||
| const external_featureFlagUtils_js_namespaceObject = require("./featureFlagUtils.js"); | ||
| const NULL_VALUES_ALLOWED_OPERATORS = [ | ||
| 'is_not', | ||
| 'is_set' | ||
| ]; | ||
| const LONG_SCALE = 0xfffffffffffffff; | ||
| class InconclusiveMatchError extends Error { | ||
| constructor(message){ | ||
| super(message); | ||
| this.name = this.constructor.name; | ||
| Object.setPrototypeOf(this, InconclusiveMatchError.prototype); | ||
| } | ||
| } | ||
| function isValidRegex(regex) { | ||
| try { | ||
| new RegExp(regex); | ||
| return true; | ||
| } catch { | ||
| return false; | ||
| } | ||
| } | ||
| function parseSemverNumericIdentifier(part, raw, parsingPolicy) { | ||
| if (!/^\d+$/.test(part) || 'strict' === parsingPolicy && part.length > 1 && '0' === part[0]) throw new InconclusiveMatchError(`Invalid semver: ${raw}`); | ||
| return parseInt(part, 10); | ||
| } | ||
| function parseFeatureFlagSemver(value, parsingPolicy = 'strict') { | ||
| const text = String(value).trim().replace(/^[vV]/, ''); | ||
| const baseVersion = text.split('-')[0].split('+')[0]; | ||
| if (!baseVersion || baseVersion.startsWith('.')) throw new InconclusiveMatchError(`Invalid semver: ${value}`); | ||
| const parts = baseVersion.split('.'); | ||
| const parsePart = (part)=>{ | ||
| if (void 0 === part || '' === part) return 0; | ||
| return parseSemverNumericIdentifier(part, value, parsingPolicy); | ||
| }; | ||
| return [ | ||
| parsePart(parts[0]), | ||
| parsePart(parts[1]), | ||
| parsePart(parts[2]) | ||
| ]; | ||
| } | ||
| function compareSemverTuples(a, b) { | ||
| for(let i = 0; i < 3; i++){ | ||
| if (a[i] < b[i]) return -1; | ||
| if (a[i] > b[i]) return 1; | ||
| } | ||
| return 0; | ||
| } | ||
| function computeTildeBounds(value, parsingPolicy) { | ||
| const parsed = parseFeatureFlagSemver(value, parsingPolicy); | ||
| return { | ||
| lower: [ | ||
| parsed[0], | ||
| parsed[1], | ||
| parsed[2] | ||
| ], | ||
| upper: [ | ||
| parsed[0], | ||
| parsed[1] + 1, | ||
| 0 | ||
| ] | ||
| }; | ||
| } | ||
| function computeCaretBounds(value, parsingPolicy) { | ||
| const [major, minor, patch] = parseFeatureFlagSemver(value, parsingPolicy); | ||
| const lower = [ | ||
| major, | ||
| minor, | ||
| patch | ||
| ]; | ||
| let upper; | ||
| upper = major > 0 ? [ | ||
| major + 1, | ||
| 0, | ||
| 0 | ||
| ] : minor > 0 ? [ | ||
| 0, | ||
| minor + 1, | ||
| 0 | ||
| ] : [ | ||
| 0, | ||
| 0, | ||
| patch + 1 | ||
| ]; | ||
| return { | ||
| lower, | ||
| upper | ||
| }; | ||
| } | ||
| function computeWildcardBounds(value, parsingPolicy) { | ||
| const text = String(value).trim().replace(/^[vV]/, ''); | ||
| const cleanedText = text.replace(/\.\*$/, '').replace(/\*$/, ''); | ||
| if (!cleanedText) throw new InconclusiveMatchError(`Invalid wildcard semver: ${value}`); | ||
| const parts = cleanedText.split('.'); | ||
| const parseWildcardPart = (part)=>{ | ||
| if ('legacy-permissive' === parsingPolicy) { | ||
| const parsed = parseInt(part, 10); | ||
| if (!isNaN(parsed)) return parsed; | ||
| } else try { | ||
| return parseSemverNumericIdentifier(part, value, parsingPolicy); | ||
| } catch {} | ||
| throw new InconclusiveMatchError(`Invalid wildcard semver: ${value}`); | ||
| }; | ||
| const major = parseWildcardPart(parts[0]); | ||
| if (1 === parts.length) return { | ||
| lower: [ | ||
| major, | ||
| 0, | ||
| 0 | ||
| ], | ||
| upper: [ | ||
| major + 1, | ||
| 0, | ||
| 0 | ||
| ] | ||
| }; | ||
| const minor = parseWildcardPart(parts[1]); | ||
| return { | ||
| lower: [ | ||
| major, | ||
| minor, | ||
| 0 | ||
| ], | ||
| upper: [ | ||
| major, | ||
| minor + 1, | ||
| 0 | ||
| ] | ||
| }; | ||
| } | ||
| function convertToDateTime(value) { | ||
| if (value instanceof Date) return value; | ||
| if ('string' == typeof value || 'number' == typeof value) { | ||
| const date = new Date(value); | ||
| if (!isNaN(date.valueOf())) return date; | ||
| throw new InconclusiveMatchError(`${value} is in an invalid date format`); | ||
| } | ||
| throw new InconclusiveMatchError(`The date provided ${value} must be a string, number, or date object`); | ||
| } | ||
| function relativeDateParseForFeatureFlagMatching(value) { | ||
| const regex = /^-?(?<number>[0-9]+)(?<interval>[a-z])$/; | ||
| const match = value.match(regex); | ||
| const parsedDt = new Date(new Date().toISOString()); | ||
| if (!match || !match.groups) return null; | ||
| const number = parseInt(match.groups['number']); | ||
| if (number >= 10000) return null; | ||
| const interval = match.groups['interval']; | ||
| if ('h' === interval) parsedDt.setUTCHours(parsedDt.getUTCHours() - number); | ||
| else if ('d' === interval) parsedDt.setUTCDate(parsedDt.getUTCDate() - number); | ||
| else if ('w' === interval) parsedDt.setUTCDate(parsedDt.getUTCDate() - 7 * number); | ||
| else if ('m' === interval) parsedDt.setUTCMonth(parsedDt.getUTCMonth() - number); | ||
| else { | ||
| if ('y' !== interval) return null; | ||
| parsedDt.setUTCFullYear(parsedDt.getUTCFullYear() - number); | ||
| } | ||
| return parsedDt; | ||
| } | ||
| function matchFeatureFlagProperty(property, propertyValues, options = {}) { | ||
| const key = property.key; | ||
| const value = property.value; | ||
| const operator = property.operator || 'exact'; | ||
| const parsingPolicy = options.semverParsingPolicy ?? 'strict'; | ||
| if (key in propertyValues) { | ||
| if ('is_not_set' === operator) return false; | ||
| } else { | ||
| if ('is_not_set' === operator) return true; | ||
| throw new InconclusiveMatchError(`Property ${key} not found in propertyValues`); | ||
| } | ||
| const overrideValue = propertyValues[key]; | ||
| if (null == overrideValue && !NULL_VALUES_ALLOWED_OPERATORS.includes(operator)) { | ||
| options.warnFunction?.(`Property ${key} cannot have a value of null/undefined with the ${operator} operator`); | ||
| return false; | ||
| } | ||
| const computeExactMatch = (target, actual)=>{ | ||
| if (Array.isArray(target)) return target.map((item)=>String(item).toLowerCase()).includes(String(actual).toLowerCase()); | ||
| return String(target).toLowerCase() === String(actual).toLowerCase(); | ||
| }; | ||
| const compare = (lhs, rhs, comparisonOperator)=>{ | ||
| if ('gt' === comparisonOperator) return lhs > rhs; | ||
| if ('gte' === comparisonOperator) return lhs >= rhs; | ||
| if ('lt' === comparisonOperator) return lhs < rhs; | ||
| if ('lte' === comparisonOperator) return lhs <= rhs; | ||
| throw new Error(`Invalid operator: ${comparisonOperator}`); | ||
| }; | ||
| switch(operator){ | ||
| case 'exact': | ||
| return computeExactMatch(value, overrideValue); | ||
| case 'is_not': | ||
| return !computeExactMatch(value, overrideValue); | ||
| case 'is_set': | ||
| return key in propertyValues; | ||
| case 'icontains': | ||
| return String(overrideValue).toLowerCase().includes(String(value).toLowerCase()); | ||
| case 'not_icontains': | ||
| return !String(overrideValue).toLowerCase().includes(String(value).toLowerCase()); | ||
| case 'starts_with': | ||
| return String(overrideValue).toLowerCase().startsWith(String(value).toLowerCase()); | ||
| case 'not_starts_with': | ||
| return !String(overrideValue).toLowerCase().startsWith(String(value).toLowerCase()); | ||
| case 'ends_with': | ||
| return String(overrideValue).toLowerCase().endsWith(String(value).toLowerCase()); | ||
| case 'not_ends_with': | ||
| return !String(overrideValue).toLowerCase().endsWith(String(value).toLowerCase()); | ||
| case 'regex': | ||
| return isValidRegex(String(value)) && null !== String(overrideValue).match(String(value)); | ||
| case 'not_regex': | ||
| return isValidRegex(String(value)) && null === String(overrideValue).match(String(value)); | ||
| case 'gt': | ||
| case 'gte': | ||
| case 'lt': | ||
| case 'lte': | ||
| { | ||
| const parsedValue = 'number' == typeof value ? value : parseFloat(String(value)); | ||
| const parsedOverride = 'number' == typeof overrideValue ? overrideValue : null != overrideValue ? parseFloat(String(overrideValue)) : NaN; | ||
| if (Number.isFinite(parsedValue) && Number.isFinite(parsedOverride)) return compare(parsedOverride, parsedValue, operator); | ||
| return compare(String(overrideValue), String(value), operator); | ||
| } | ||
| case 'is_date_after': | ||
| case 'is_date_before': | ||
| { | ||
| if ('boolean' == typeof value) throw new InconclusiveMatchError('Date operations cannot be performed on boolean values'); | ||
| let parsedDate = relativeDateParseForFeatureFlagMatching(String(value)); | ||
| if (null == parsedDate) parsedDate = convertToDateTime(value); | ||
| const overrideDate = convertToDateTime(overrideValue); | ||
| return 'is_date_before' === operator ? overrideDate < parsedDate : overrideDate > parsedDate; | ||
| } | ||
| case 'semver_eq': | ||
| return 0 === compareSemverTuples(parseFeatureFlagSemver(String(overrideValue), parsingPolicy), parseFeatureFlagSemver(String(value), parsingPolicy)); | ||
| case 'semver_neq': | ||
| return 0 !== compareSemverTuples(parseFeatureFlagSemver(String(overrideValue), parsingPolicy), parseFeatureFlagSemver(String(value), parsingPolicy)); | ||
| case 'semver_gt': | ||
| return compareSemverTuples(parseFeatureFlagSemver(String(overrideValue), parsingPolicy), parseFeatureFlagSemver(String(value), parsingPolicy)) > 0; | ||
| case 'semver_gte': | ||
| return compareSemverTuples(parseFeatureFlagSemver(String(overrideValue), parsingPolicy), parseFeatureFlagSemver(String(value), parsingPolicy)) >= 0; | ||
| case 'semver_lt': | ||
| return compareSemverTuples(parseFeatureFlagSemver(String(overrideValue), parsingPolicy), parseFeatureFlagSemver(String(value), parsingPolicy)) < 0; | ||
| case 'semver_lte': | ||
| return compareSemverTuples(parseFeatureFlagSemver(String(overrideValue), parsingPolicy), parseFeatureFlagSemver(String(value), parsingPolicy)) <= 0; | ||
| case 'semver_tilde': | ||
| { | ||
| const overrideParsed = parseFeatureFlagSemver(String(overrideValue), parsingPolicy); | ||
| const { lower, upper } = computeTildeBounds(String(value), parsingPolicy); | ||
| return compareSemverTuples(overrideParsed, lower) >= 0 && compareSemverTuples(overrideParsed, upper) < 0; | ||
| } | ||
| case 'semver_caret': | ||
| { | ||
| const overrideParsed = parseFeatureFlagSemver(String(overrideValue), parsingPolicy); | ||
| const { lower, upper } = computeCaretBounds(String(value), parsingPolicy); | ||
| return compareSemverTuples(overrideParsed, lower) >= 0 && compareSemverTuples(overrideParsed, upper) < 0; | ||
| } | ||
| case 'semver_wildcard': | ||
| { | ||
| const overrideParsed = parseFeatureFlagSemver(String(overrideValue), parsingPolicy); | ||
| const { lower, upper } = computeWildcardBounds(String(value), parsingPolicy); | ||
| return compareSemverTuples(overrideParsed, lower) >= 0 && compareSemverTuples(overrideParsed, upper) < 0; | ||
| } | ||
| default: | ||
| throw new InconclusiveMatchError(`Unknown operator: ${operator}`); | ||
| } | ||
| } | ||
| async function hashSHA1(text) { | ||
| const subtle = globalThis.crypto?.subtle; | ||
| if (!subtle) throw new Error('SubtleCrypto API not available'); | ||
| const hashBuffer = await subtle.digest('SHA-1', new TextEncoder().encode(text)); | ||
| return Array.from(new Uint8Array(hashBuffer)).map((byte)=>byte.toString(16).padStart(2, '0')).join(''); | ||
| } | ||
| async function getFeatureFlagHash(key, bucketingValue, salt = '') { | ||
| const hashString = await hashSHA1(`${key}.${bucketingValue}${salt}`); | ||
| return parseInt(hashString.slice(0, 15), 16) / LONG_SCALE; | ||
| } | ||
| function getFeatureFlagVariantLookupTable(variants) { | ||
| const table = []; | ||
| let valueMin = 0; | ||
| for (const variant of variants){ | ||
| const valueMax = valueMin + variant.rollout_percentage / 100.0; | ||
| table.push({ | ||
| valueMin, | ||
| valueMax, | ||
| key: variant.key | ||
| }); | ||
| valueMin = valueMax; | ||
| } | ||
| return table; | ||
| } | ||
| async function getFeatureFlagVariant(key, bucketingValue, variants) { | ||
| const hashValue = await getFeatureFlagHash(key, bucketingValue, 'variant'); | ||
| return getFeatureFlagVariantLookupTable(variants).find((variant)=>hashValue >= variant.valueMin && hashValue < variant.valueMax)?.key; | ||
| } | ||
| function resolveFeatureFlagPayload(payloads, flagValue) { | ||
| if (false === flagValue || null == flagValue || !payloads) return null; | ||
| const payloadKey = 'boolean' == typeof flagValue ? flagValue.toString() : flagValue; | ||
| const payload = payloads[payloadKey] || null; | ||
| return null == payload ? null : (0, external_featureFlagUtils_js_namespaceObject.parsePayload)(payload); | ||
| } | ||
| exports.InconclusiveMatchError = __webpack_exports__.InconclusiveMatchError; | ||
| exports.getFeatureFlagHash = __webpack_exports__.getFeatureFlagHash; | ||
| exports.getFeatureFlagVariant = __webpack_exports__.getFeatureFlagVariant; | ||
| exports.getFeatureFlagVariantLookupTable = __webpack_exports__.getFeatureFlagVariantLookupTable; | ||
| exports.hashSHA1 = __webpack_exports__.hashSHA1; | ||
| exports.matchFeatureFlagProperty = __webpack_exports__.matchFeatureFlagProperty; | ||
| exports.parseFeatureFlagSemver = __webpack_exports__.parseFeatureFlagSemver; | ||
| exports.relativeDateParseForFeatureFlagMatching = __webpack_exports__.relativeDateParseForFeatureFlagMatching; | ||
| exports.resolveFeatureFlagPayload = __webpack_exports__.resolveFeatureFlagPayload; | ||
| for(var __webpack_i__ in __webpack_exports__)if (-1 === [ | ||
| "InconclusiveMatchError", | ||
| "getFeatureFlagHash", | ||
| "getFeatureFlagVariant", | ||
| "getFeatureFlagVariantLookupTable", | ||
| "hashSHA1", | ||
| "matchFeatureFlagProperty", | ||
| "parseFeatureFlagSemver", | ||
| "relativeDateParseForFeatureFlagMatching", | ||
| "resolveFeatureFlagPayload" | ||
| ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__]; | ||
| Object.defineProperty(exports, '__esModule', { | ||
| value: true | ||
| }); |
| import { parsePayload } from "./featureFlagUtils.mjs"; | ||
| const NULL_VALUES_ALLOWED_OPERATORS = [ | ||
| 'is_not', | ||
| 'is_set' | ||
| ]; | ||
| const LONG_SCALE = 0xfffffffffffffff; | ||
| class InconclusiveMatchError extends Error { | ||
| constructor(message){ | ||
| super(message); | ||
| this.name = this.constructor.name; | ||
| Object.setPrototypeOf(this, InconclusiveMatchError.prototype); | ||
| } | ||
| } | ||
| function isValidRegex(regex) { | ||
| try { | ||
| new RegExp(regex); | ||
| return true; | ||
| } catch { | ||
| return false; | ||
| } | ||
| } | ||
| function parseSemverNumericIdentifier(part, raw, parsingPolicy) { | ||
| if (!/^\d+$/.test(part) || 'strict' === parsingPolicy && part.length > 1 && '0' === part[0]) throw new InconclusiveMatchError(`Invalid semver: ${raw}`); | ||
| return parseInt(part, 10); | ||
| } | ||
| function parseFeatureFlagSemver(value, parsingPolicy = 'strict') { | ||
| const text = String(value).trim().replace(/^[vV]/, ''); | ||
| const baseVersion = text.split('-')[0].split('+')[0]; | ||
| if (!baseVersion || baseVersion.startsWith('.')) throw new InconclusiveMatchError(`Invalid semver: ${value}`); | ||
| const parts = baseVersion.split('.'); | ||
| const parsePart = (part)=>{ | ||
| if (void 0 === part || '' === part) return 0; | ||
| return parseSemverNumericIdentifier(part, value, parsingPolicy); | ||
| }; | ||
| return [ | ||
| parsePart(parts[0]), | ||
| parsePart(parts[1]), | ||
| parsePart(parts[2]) | ||
| ]; | ||
| } | ||
| function compareSemverTuples(a, b) { | ||
| for(let i = 0; i < 3; i++){ | ||
| if (a[i] < b[i]) return -1; | ||
| if (a[i] > b[i]) return 1; | ||
| } | ||
| return 0; | ||
| } | ||
| function computeTildeBounds(value, parsingPolicy) { | ||
| const parsed = parseFeatureFlagSemver(value, parsingPolicy); | ||
| return { | ||
| lower: [ | ||
| parsed[0], | ||
| parsed[1], | ||
| parsed[2] | ||
| ], | ||
| upper: [ | ||
| parsed[0], | ||
| parsed[1] + 1, | ||
| 0 | ||
| ] | ||
| }; | ||
| } | ||
| function computeCaretBounds(value, parsingPolicy) { | ||
| const [major, minor, patch] = parseFeatureFlagSemver(value, parsingPolicy); | ||
| const lower = [ | ||
| major, | ||
| minor, | ||
| patch | ||
| ]; | ||
| let upper; | ||
| upper = major > 0 ? [ | ||
| major + 1, | ||
| 0, | ||
| 0 | ||
| ] : minor > 0 ? [ | ||
| 0, | ||
| minor + 1, | ||
| 0 | ||
| ] : [ | ||
| 0, | ||
| 0, | ||
| patch + 1 | ||
| ]; | ||
| return { | ||
| lower, | ||
| upper | ||
| }; | ||
| } | ||
| function computeWildcardBounds(value, parsingPolicy) { | ||
| const text = String(value).trim().replace(/^[vV]/, ''); | ||
| const cleanedText = text.replace(/\.\*$/, '').replace(/\*$/, ''); | ||
| if (!cleanedText) throw new InconclusiveMatchError(`Invalid wildcard semver: ${value}`); | ||
| const parts = cleanedText.split('.'); | ||
| const parseWildcardPart = (part)=>{ | ||
| if ('legacy-permissive' === parsingPolicy) { | ||
| const parsed = parseInt(part, 10); | ||
| if (!isNaN(parsed)) return parsed; | ||
| } else try { | ||
| return parseSemverNumericIdentifier(part, value, parsingPolicy); | ||
| } catch {} | ||
| throw new InconclusiveMatchError(`Invalid wildcard semver: ${value}`); | ||
| }; | ||
| const major = parseWildcardPart(parts[0]); | ||
| if (1 === parts.length) return { | ||
| lower: [ | ||
| major, | ||
| 0, | ||
| 0 | ||
| ], | ||
| upper: [ | ||
| major + 1, | ||
| 0, | ||
| 0 | ||
| ] | ||
| }; | ||
| const minor = parseWildcardPart(parts[1]); | ||
| return { | ||
| lower: [ | ||
| major, | ||
| minor, | ||
| 0 | ||
| ], | ||
| upper: [ | ||
| major, | ||
| minor + 1, | ||
| 0 | ||
| ] | ||
| }; | ||
| } | ||
| function convertToDateTime(value) { | ||
| if (value instanceof Date) return value; | ||
| if ('string' == typeof value || 'number' == typeof value) { | ||
| const date = new Date(value); | ||
| if (!isNaN(date.valueOf())) return date; | ||
| throw new InconclusiveMatchError(`${value} is in an invalid date format`); | ||
| } | ||
| throw new InconclusiveMatchError(`The date provided ${value} must be a string, number, or date object`); | ||
| } | ||
| function relativeDateParseForFeatureFlagMatching(value) { | ||
| const regex = /^-?(?<number>[0-9]+)(?<interval>[a-z])$/; | ||
| const match = value.match(regex); | ||
| const parsedDt = new Date(new Date().toISOString()); | ||
| if (!match || !match.groups) return null; | ||
| const number = parseInt(match.groups['number']); | ||
| if (number >= 10000) return null; | ||
| const interval = match.groups['interval']; | ||
| if ('h' === interval) parsedDt.setUTCHours(parsedDt.getUTCHours() - number); | ||
| else if ('d' === interval) parsedDt.setUTCDate(parsedDt.getUTCDate() - number); | ||
| else if ('w' === interval) parsedDt.setUTCDate(parsedDt.getUTCDate() - 7 * number); | ||
| else if ('m' === interval) parsedDt.setUTCMonth(parsedDt.getUTCMonth() - number); | ||
| else { | ||
| if ('y' !== interval) return null; | ||
| parsedDt.setUTCFullYear(parsedDt.getUTCFullYear() - number); | ||
| } | ||
| return parsedDt; | ||
| } | ||
| function matchFeatureFlagProperty(property, propertyValues, options = {}) { | ||
| const key = property.key; | ||
| const value = property.value; | ||
| const operator = property.operator || 'exact'; | ||
| const parsingPolicy = options.semverParsingPolicy ?? 'strict'; | ||
| if (key in propertyValues) { | ||
| if ('is_not_set' === operator) return false; | ||
| } else { | ||
| if ('is_not_set' === operator) return true; | ||
| throw new InconclusiveMatchError(`Property ${key} not found in propertyValues`); | ||
| } | ||
| const overrideValue = propertyValues[key]; | ||
| if (null == overrideValue && !NULL_VALUES_ALLOWED_OPERATORS.includes(operator)) { | ||
| options.warnFunction?.(`Property ${key} cannot have a value of null/undefined with the ${operator} operator`); | ||
| return false; | ||
| } | ||
| const computeExactMatch = (target, actual)=>{ | ||
| if (Array.isArray(target)) return target.map((item)=>String(item).toLowerCase()).includes(String(actual).toLowerCase()); | ||
| return String(target).toLowerCase() === String(actual).toLowerCase(); | ||
| }; | ||
| const compare = (lhs, rhs, comparisonOperator)=>{ | ||
| if ('gt' === comparisonOperator) return lhs > rhs; | ||
| if ('gte' === comparisonOperator) return lhs >= rhs; | ||
| if ('lt' === comparisonOperator) return lhs < rhs; | ||
| if ('lte' === comparisonOperator) return lhs <= rhs; | ||
| throw new Error(`Invalid operator: ${comparisonOperator}`); | ||
| }; | ||
| switch(operator){ | ||
| case 'exact': | ||
| return computeExactMatch(value, overrideValue); | ||
| case 'is_not': | ||
| return !computeExactMatch(value, overrideValue); | ||
| case 'is_set': | ||
| return key in propertyValues; | ||
| case 'icontains': | ||
| return String(overrideValue).toLowerCase().includes(String(value).toLowerCase()); | ||
| case 'not_icontains': | ||
| return !String(overrideValue).toLowerCase().includes(String(value).toLowerCase()); | ||
| case 'starts_with': | ||
| return String(overrideValue).toLowerCase().startsWith(String(value).toLowerCase()); | ||
| case 'not_starts_with': | ||
| return !String(overrideValue).toLowerCase().startsWith(String(value).toLowerCase()); | ||
| case 'ends_with': | ||
| return String(overrideValue).toLowerCase().endsWith(String(value).toLowerCase()); | ||
| case 'not_ends_with': | ||
| return !String(overrideValue).toLowerCase().endsWith(String(value).toLowerCase()); | ||
| case 'regex': | ||
| return isValidRegex(String(value)) && null !== String(overrideValue).match(String(value)); | ||
| case 'not_regex': | ||
| return isValidRegex(String(value)) && null === String(overrideValue).match(String(value)); | ||
| case 'gt': | ||
| case 'gte': | ||
| case 'lt': | ||
| case 'lte': | ||
| { | ||
| const parsedValue = 'number' == typeof value ? value : parseFloat(String(value)); | ||
| const parsedOverride = 'number' == typeof overrideValue ? overrideValue : null != overrideValue ? parseFloat(String(overrideValue)) : NaN; | ||
| if (Number.isFinite(parsedValue) && Number.isFinite(parsedOverride)) return compare(parsedOverride, parsedValue, operator); | ||
| return compare(String(overrideValue), String(value), operator); | ||
| } | ||
| case 'is_date_after': | ||
| case 'is_date_before': | ||
| { | ||
| if ('boolean' == typeof value) throw new InconclusiveMatchError('Date operations cannot be performed on boolean values'); | ||
| let parsedDate = relativeDateParseForFeatureFlagMatching(String(value)); | ||
| if (null == parsedDate) parsedDate = convertToDateTime(value); | ||
| const overrideDate = convertToDateTime(overrideValue); | ||
| return 'is_date_before' === operator ? overrideDate < parsedDate : overrideDate > parsedDate; | ||
| } | ||
| case 'semver_eq': | ||
| return 0 === compareSemverTuples(parseFeatureFlagSemver(String(overrideValue), parsingPolicy), parseFeatureFlagSemver(String(value), parsingPolicy)); | ||
| case 'semver_neq': | ||
| return 0 !== compareSemverTuples(parseFeatureFlagSemver(String(overrideValue), parsingPolicy), parseFeatureFlagSemver(String(value), parsingPolicy)); | ||
| case 'semver_gt': | ||
| return compareSemverTuples(parseFeatureFlagSemver(String(overrideValue), parsingPolicy), parseFeatureFlagSemver(String(value), parsingPolicy)) > 0; | ||
| case 'semver_gte': | ||
| return compareSemverTuples(parseFeatureFlagSemver(String(overrideValue), parsingPolicy), parseFeatureFlagSemver(String(value), parsingPolicy)) >= 0; | ||
| case 'semver_lt': | ||
| return compareSemverTuples(parseFeatureFlagSemver(String(overrideValue), parsingPolicy), parseFeatureFlagSemver(String(value), parsingPolicy)) < 0; | ||
| case 'semver_lte': | ||
| return compareSemverTuples(parseFeatureFlagSemver(String(overrideValue), parsingPolicy), parseFeatureFlagSemver(String(value), parsingPolicy)) <= 0; | ||
| case 'semver_tilde': | ||
| { | ||
| const overrideParsed = parseFeatureFlagSemver(String(overrideValue), parsingPolicy); | ||
| const { lower, upper } = computeTildeBounds(String(value), parsingPolicy); | ||
| return compareSemverTuples(overrideParsed, lower) >= 0 && compareSemverTuples(overrideParsed, upper) < 0; | ||
| } | ||
| case 'semver_caret': | ||
| { | ||
| const overrideParsed = parseFeatureFlagSemver(String(overrideValue), parsingPolicy); | ||
| const { lower, upper } = computeCaretBounds(String(value), parsingPolicy); | ||
| return compareSemverTuples(overrideParsed, lower) >= 0 && compareSemverTuples(overrideParsed, upper) < 0; | ||
| } | ||
| case 'semver_wildcard': | ||
| { | ||
| const overrideParsed = parseFeatureFlagSemver(String(overrideValue), parsingPolicy); | ||
| const { lower, upper } = computeWildcardBounds(String(value), parsingPolicy); | ||
| return compareSemverTuples(overrideParsed, lower) >= 0 && compareSemverTuples(overrideParsed, upper) < 0; | ||
| } | ||
| default: | ||
| throw new InconclusiveMatchError(`Unknown operator: ${operator}`); | ||
| } | ||
| } | ||
| async function hashSHA1(text) { | ||
| const subtle = globalThis.crypto?.subtle; | ||
| if (!subtle) throw new Error('SubtleCrypto API not available'); | ||
| const hashBuffer = await subtle.digest('SHA-1', new TextEncoder().encode(text)); | ||
| return Array.from(new Uint8Array(hashBuffer)).map((byte)=>byte.toString(16).padStart(2, '0')).join(''); | ||
| } | ||
| async function getFeatureFlagHash(key, bucketingValue, salt = '') { | ||
| const hashString = await hashSHA1(`${key}.${bucketingValue}${salt}`); | ||
| return parseInt(hashString.slice(0, 15), 16) / LONG_SCALE; | ||
| } | ||
| function getFeatureFlagVariantLookupTable(variants) { | ||
| const table = []; | ||
| let valueMin = 0; | ||
| for (const variant of variants){ | ||
| const valueMax = valueMin + variant.rollout_percentage / 100.0; | ||
| table.push({ | ||
| valueMin, | ||
| valueMax, | ||
| key: variant.key | ||
| }); | ||
| valueMin = valueMax; | ||
| } | ||
| return table; | ||
| } | ||
| async function getFeatureFlagVariant(key, bucketingValue, variants) { | ||
| const hashValue = await getFeatureFlagHash(key, bucketingValue, 'variant'); | ||
| return getFeatureFlagVariantLookupTable(variants).find((variant)=>hashValue >= variant.valueMin && hashValue < variant.valueMax)?.key; | ||
| } | ||
| function resolveFeatureFlagPayload(payloads, flagValue) { | ||
| if (false === flagValue || null == flagValue || !payloads) return null; | ||
| const payloadKey = 'boolean' == typeof flagValue ? flagValue.toString() : flagValue; | ||
| const payload = payloads[payloadKey] || null; | ||
| return null == payload ? null : parsePayload(payload); | ||
| } | ||
| export { InconclusiveMatchError, getFeatureFlagHash, getFeatureFlagVariant, getFeatureFlagVariantLookupTable, hashSHA1, matchFeatureFlagProperty, parseFeatureFlagSemver, relativeDateParseForFeatureFlagMatching, resolveFeatureFlagPayload }; |
| import type { Properties } from '@posthog/types'; | ||
| import type { PropertyFilters, PropertyOperator } from '../types'; | ||
| export declare const isValidRegex: (pattern: string) => boolean; | ||
| export declare const isMatchingRegex: (value: string, pattern: string) => boolean; | ||
| export declare const propertyComparisons: Record<PropertyOperator, (targets: string[], values: string[]) => boolean>; | ||
| /** | ||
| * Matches every configured filter against event properties. Missing and null | ||
| * properties never match, including for negative operators. | ||
| */ | ||
| export declare function matchPropertyFilters(propertyFilters: PropertyFilters | undefined, eventProperties: Properties | undefined): boolean; | ||
| //# sourceMappingURL=property-matching.d.ts.map |
| {"version":3,"file":"property-matching.d.ts","sourceRoot":"","sources":["../../src/surveys/property-matching.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAEhD,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAEjE,eAAO,MAAM,YAAY,GAAI,SAAS,MAAM,KAAG,OAO9C,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,OAAO,MAAM,EAAE,SAAS,MAAM,KAAG,OAUhE,CAAA;AAID,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,OAAO,CAmB1G,CAAA;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,eAAe,EAAE,eAAe,GAAG,SAAS,EAC5C,eAAe,EAAE,UAAU,GAAG,SAAS,GACtC,OAAO,CAmBT"} |
| "use strict"; | ||
| var __webpack_require__ = {}; | ||
| (()=>{ | ||
| __webpack_require__.d = (exports1, definition)=>{ | ||
| for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, { | ||
| enumerable: true, | ||
| get: definition[key] | ||
| }); | ||
| }; | ||
| })(); | ||
| (()=>{ | ||
| __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop); | ||
| })(); | ||
| (()=>{ | ||
| __webpack_require__.r = (exports1)=>{ | ||
| if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, { | ||
| value: 'Module' | ||
| }); | ||
| Object.defineProperty(exports1, '__esModule', { | ||
| value: true | ||
| }); | ||
| }; | ||
| })(); | ||
| var __webpack_exports__ = {}; | ||
| __webpack_require__.r(__webpack_exports__); | ||
| __webpack_require__.d(__webpack_exports__, { | ||
| isMatchingRegex: ()=>isMatchingRegex, | ||
| isValidRegex: ()=>isValidRegex, | ||
| matchPropertyFilters: ()=>matchPropertyFilters, | ||
| propertyComparisons: ()=>propertyComparisons | ||
| }); | ||
| const isValidRegex = (pattern)=>{ | ||
| try { | ||
| new RegExp(pattern); | ||
| } catch { | ||
| return false; | ||
| } | ||
| return true; | ||
| }; | ||
| const isMatchingRegex = (value, pattern)=>{ | ||
| if (!isValidRegex(pattern)) return false; | ||
| try { | ||
| return new RegExp(pattern).test(value); | ||
| } catch { | ||
| return false; | ||
| } | ||
| }; | ||
| const toLowerCase = (value)=>value.toLowerCase(); | ||
| const propertyComparisons = { | ||
| exact: (targets, values)=>values.some((value)=>targets.some((target)=>value === target)), | ||
| is_not: (targets, values)=>values.every((value)=>targets.every((target)=>value !== target)), | ||
| regex: (targets, values)=>values.some((value)=>targets.some((target)=>isMatchingRegex(value, target))), | ||
| not_regex: (targets, values)=>values.every((value)=>targets.every((target)=>!isMatchingRegex(value, target))), | ||
| icontains: (targets, values)=>values.map(toLowerCase).some((value)=>targets.map(toLowerCase).some((target)=>value.includes(target))), | ||
| not_icontains: (targets, values)=>values.map(toLowerCase).every((value)=>targets.map(toLowerCase).every((target)=>!value.includes(target))), | ||
| gt: (targets, values)=>values.some((value)=>{ | ||
| const numValue = parseFloat(value); | ||
| return !isNaN(numValue) && targets.some((target)=>numValue > parseFloat(target)); | ||
| }), | ||
| lt: (targets, values)=>values.some((value)=>{ | ||
| const numValue = parseFloat(value); | ||
| return !isNaN(numValue) && targets.some((target)=>numValue < parseFloat(target)); | ||
| }) | ||
| }; | ||
| function matchPropertyFilters(propertyFilters, eventProperties) { | ||
| if (!propertyFilters) return true; | ||
| return Object.entries(propertyFilters).every(([propertyName, filter])=>{ | ||
| const eventPropertyValue = eventProperties?.[propertyName]; | ||
| if (null == eventPropertyValue) return false; | ||
| const comparisonFunction = propertyComparisons[filter.operator]; | ||
| if (!comparisonFunction) return false; | ||
| return comparisonFunction(filter.values, [ | ||
| String(eventPropertyValue) | ||
| ]); | ||
| }); | ||
| } | ||
| exports.isMatchingRegex = __webpack_exports__.isMatchingRegex; | ||
| exports.isValidRegex = __webpack_exports__.isValidRegex; | ||
| exports.matchPropertyFilters = __webpack_exports__.matchPropertyFilters; | ||
| exports.propertyComparisons = __webpack_exports__.propertyComparisons; | ||
| for(var __webpack_i__ in __webpack_exports__)if (-1 === [ | ||
| "isMatchingRegex", | ||
| "isValidRegex", | ||
| "matchPropertyFilters", | ||
| "propertyComparisons" | ||
| ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__]; | ||
| Object.defineProperty(exports, '__esModule', { | ||
| value: true | ||
| }); |
| const isValidRegex = (pattern)=>{ | ||
| try { | ||
| new RegExp(pattern); | ||
| } catch { | ||
| return false; | ||
| } | ||
| return true; | ||
| }; | ||
| const isMatchingRegex = (value, pattern)=>{ | ||
| if (!isValidRegex(pattern)) return false; | ||
| try { | ||
| return new RegExp(pattern).test(value); | ||
| } catch { | ||
| return false; | ||
| } | ||
| }; | ||
| const toLowerCase = (value)=>value.toLowerCase(); | ||
| const propertyComparisons = { | ||
| exact: (targets, values)=>values.some((value)=>targets.some((target)=>value === target)), | ||
| is_not: (targets, values)=>values.every((value)=>targets.every((target)=>value !== target)), | ||
| regex: (targets, values)=>values.some((value)=>targets.some((target)=>isMatchingRegex(value, target))), | ||
| not_regex: (targets, values)=>values.every((value)=>targets.every((target)=>!isMatchingRegex(value, target))), | ||
| icontains: (targets, values)=>values.map(toLowerCase).some((value)=>targets.map(toLowerCase).some((target)=>value.includes(target))), | ||
| not_icontains: (targets, values)=>values.map(toLowerCase).every((value)=>targets.map(toLowerCase).every((target)=>!value.includes(target))), | ||
| gt: (targets, values)=>values.some((value)=>{ | ||
| const numValue = parseFloat(value); | ||
| return !isNaN(numValue) && targets.some((target)=>numValue > parseFloat(target)); | ||
| }), | ||
| lt: (targets, values)=>values.some((value)=>{ | ||
| const numValue = parseFloat(value); | ||
| return !isNaN(numValue) && targets.some((target)=>numValue < parseFloat(target)); | ||
| }) | ||
| }; | ||
| function matchPropertyFilters(propertyFilters, eventProperties) { | ||
| if (!propertyFilters) return true; | ||
| return Object.entries(propertyFilters).every(([propertyName, filter])=>{ | ||
| const eventPropertyValue = eventProperties?.[propertyName]; | ||
| if (null == eventPropertyValue) return false; | ||
| const comparisonFunction = propertyComparisons[filter.operator]; | ||
| if (!comparisonFunction) return false; | ||
| return comparisonFunction(filter.values, [ | ||
| String(eventPropertyValue) | ||
| ]); | ||
| }); | ||
| } | ||
| export { isMatchingRegex, isValidRegex, matchPropertyFilters, propertyComparisons }; |
| import { parsePayload } from './featureFlagUtils' | ||
| import type { FeatureFlagValue, JsonType } from './types' | ||
| export type FeatureFlagPropertyValue = string | number | (string | number)[] | boolean | ||
| export type FeatureFlagProperty = { | ||
| key: string | ||
| value: FeatureFlagPropertyValue | ||
| operator?: string | ||
| } | ||
| export type FeatureFlagSemverParsingPolicy = 'strict' | 'legacy-permissive' | ||
| export type MatchFeatureFlagPropertyOptions = { | ||
| warnFunction?: (message: string) => void | ||
| semverParsingPolicy?: FeatureFlagSemverParsingPolicy | ||
| } | ||
| export type FeatureFlagVariant = { | ||
| key: string | ||
| rollout_percentage: number | ||
| } | ||
| export type FeatureFlagVariantLookupEntry = { | ||
| valueMin: number | ||
| valueMax: number | ||
| key: string | ||
| } | ||
| const NULL_VALUES_ALLOWED_OPERATORS = ['is_not', 'is_set'] | ||
| // This value is intentionally larger than Number.MAX_SAFE_INTEGER. Changing its rounding changes | ||
| // existing rollout and variant assignments. | ||
| // eslint-disable-next-line no-loss-of-precision | ||
| const LONG_SCALE = 0xfffffffffffffff | ||
| export class InconclusiveMatchError extends Error { | ||
| constructor(message: string) { | ||
| super(message) | ||
| this.name = this.constructor.name | ||
| Object.setPrototypeOf(this, InconclusiveMatchError.prototype) | ||
| } | ||
| } | ||
| function isValidRegex(regex: string): boolean { | ||
| try { | ||
| new RegExp(regex) | ||
| return true | ||
| } catch { | ||
| return false | ||
| } | ||
| } | ||
| type SemverTuple = [number, number, number] | ||
| function parseSemverNumericIdentifier( | ||
| part: string, | ||
| raw: string, | ||
| parsingPolicy: FeatureFlagSemverParsingPolicy | ||
| ): number { | ||
| if (!/^\d+$/.test(part) || (parsingPolicy === 'strict' && part.length > 1 && part[0] === '0')) { | ||
| throw new InconclusiveMatchError(`Invalid semver: ${raw}`) | ||
| } | ||
| return parseInt(part, 10) | ||
| } | ||
| export function parseFeatureFlagSemver( | ||
| value: string, | ||
| parsingPolicy: FeatureFlagSemverParsingPolicy = 'strict' | ||
| ): SemverTuple { | ||
| const text = String(value).trim().replace(/^[vV]/, '') | ||
| const baseVersion = text.split('-')[0].split('+')[0] | ||
| if (!baseVersion || baseVersion.startsWith('.')) { | ||
| throw new InconclusiveMatchError(`Invalid semver: ${value}`) | ||
| } | ||
| const parts = baseVersion.split('.') | ||
| const parsePart = (part: string | undefined): number => { | ||
| if (part === undefined || part === '') return 0 | ||
| return parseSemverNumericIdentifier(part, value, parsingPolicy) | ||
| } | ||
| return [parsePart(parts[0]), parsePart(parts[1]), parsePart(parts[2])] | ||
| } | ||
| function compareSemverTuples(a: SemverTuple, b: SemverTuple): number { | ||
| for (let i = 0; i < 3; i++) { | ||
| if (a[i] < b[i]) return -1 | ||
| if (a[i] > b[i]) return 1 | ||
| } | ||
| return 0 | ||
| } | ||
| function computeTildeBounds( | ||
| value: string, | ||
| parsingPolicy: FeatureFlagSemverParsingPolicy | ||
| ): { lower: SemverTuple; upper: SemverTuple } { | ||
| const parsed = parseFeatureFlagSemver(value, parsingPolicy) | ||
| return { lower: [parsed[0], parsed[1], parsed[2]], upper: [parsed[0], parsed[1] + 1, 0] } | ||
| } | ||
| function computeCaretBounds( | ||
| value: string, | ||
| parsingPolicy: FeatureFlagSemverParsingPolicy | ||
| ): { lower: SemverTuple; upper: SemverTuple } { | ||
| const [major, minor, patch] = parseFeatureFlagSemver(value, parsingPolicy) | ||
| const lower: SemverTuple = [major, minor, patch] | ||
| let upper: SemverTuple | ||
| if (major > 0) upper = [major + 1, 0, 0] | ||
| else if (minor > 0) upper = [0, minor + 1, 0] | ||
| else upper = [0, 0, patch + 1] | ||
| return { lower, upper } | ||
| } | ||
| function computeWildcardBounds( | ||
| value: string, | ||
| parsingPolicy: FeatureFlagSemverParsingPolicy | ||
| ): { lower: SemverTuple; upper: SemverTuple } { | ||
| const text = String(value).trim().replace(/^[vV]/, '') | ||
| const cleanedText = text.replace(/\.\*$/, '').replace(/\*$/, '') | ||
| if (!cleanedText) throw new InconclusiveMatchError(`Invalid wildcard semver: ${value}`) | ||
| const parts = cleanedText.split('.') | ||
| const parseWildcardPart = (part: string): number => { | ||
| if (parsingPolicy === 'legacy-permissive') { | ||
| const parsed = parseInt(part, 10) | ||
| if (!isNaN(parsed)) return parsed | ||
| } else { | ||
| try { | ||
| return parseSemverNumericIdentifier(part, value, parsingPolicy) | ||
| } catch { | ||
| // Normalize wildcard parsing failures to the historical wildcard-specific error. | ||
| } | ||
| } | ||
| throw new InconclusiveMatchError(`Invalid wildcard semver: ${value}`) | ||
| } | ||
| const major = parseWildcardPart(parts[0]) | ||
| if (parts.length === 1) { | ||
| return { lower: [major, 0, 0], upper: [major + 1, 0, 0] } | ||
| } | ||
| const minor = parseWildcardPart(parts[1]) | ||
| return { lower: [major, minor, 0], upper: [major, minor + 1, 0] } | ||
| } | ||
| function convertToDateTime(value: FeatureFlagPropertyValue | Date): Date { | ||
| if (value instanceof Date) return value | ||
| if (typeof value === 'string' || typeof value === 'number') { | ||
| const date = new Date(value) | ||
| if (!isNaN(date.valueOf())) return date | ||
| throw new InconclusiveMatchError(`${value} is in an invalid date format`) | ||
| } | ||
| throw new InconclusiveMatchError(`The date provided ${value} must be a string, number, or date object`) | ||
| } | ||
| export function relativeDateParseForFeatureFlagMatching(value: string): Date | null { | ||
| const regex = /^-?(?<number>[0-9]+)(?<interval>[a-z])$/ | ||
| const match = value.match(regex) | ||
| const parsedDt = new Date(new Date().toISOString()) | ||
| if (!match || !match.groups) return null | ||
| const number = parseInt(match.groups['number']) | ||
| if (number >= 10000) return null | ||
| const interval = match.groups['interval'] | ||
| if (interval === 'h') parsedDt.setUTCHours(parsedDt.getUTCHours() - number) | ||
| else if (interval === 'd') parsedDt.setUTCDate(parsedDt.getUTCDate() - number) | ||
| else if (interval === 'w') parsedDt.setUTCDate(parsedDt.getUTCDate() - number * 7) | ||
| else if (interval === 'm') parsedDt.setUTCMonth(parsedDt.getUTCMonth() - number) | ||
| else if (interval === 'y') parsedDt.setUTCFullYear(parsedDt.getUTCFullYear() - number) | ||
| else return null | ||
| return parsedDt | ||
| } | ||
| export function matchFeatureFlagProperty( | ||
| property: FeatureFlagProperty, | ||
| propertyValues: Record<string, any>, | ||
| options: MatchFeatureFlagPropertyOptions = {} | ||
| ): boolean { | ||
| const key = property.key | ||
| const value = property.value | ||
| const operator = property.operator || 'exact' | ||
| const parsingPolicy = options.semverParsingPolicy ?? 'strict' | ||
| if (!(key in propertyValues)) { | ||
| if (operator === 'is_not_set') return true | ||
| throw new InconclusiveMatchError(`Property ${key} not found in propertyValues`) | ||
| } else if (operator === 'is_not_set') { | ||
| return false | ||
| } | ||
| const overrideValue = propertyValues[key] | ||
| if (overrideValue == null && !NULL_VALUES_ALLOWED_OPERATORS.includes(operator)) { | ||
| options.warnFunction?.(`Property ${key} cannot have a value of null/undefined with the ${operator} operator`) | ||
| return false | ||
| } | ||
| const computeExactMatch = (target: any, actual: any): boolean => { | ||
| if (Array.isArray(target)) { | ||
| return target.map((item) => String(item).toLowerCase()).includes(String(actual).toLowerCase()) | ||
| } | ||
| return String(target).toLowerCase() === String(actual).toLowerCase() | ||
| } | ||
| const compare = (lhs: any, rhs: any, comparisonOperator: string): boolean => { | ||
| if (comparisonOperator === 'gt') return lhs > rhs | ||
| if (comparisonOperator === 'gte') return lhs >= rhs | ||
| if (comparisonOperator === 'lt') return lhs < rhs | ||
| if (comparisonOperator === 'lte') return lhs <= rhs | ||
| throw new Error(`Invalid operator: ${comparisonOperator}`) | ||
| } | ||
| switch (operator) { | ||
| case 'exact': | ||
| return computeExactMatch(value, overrideValue) | ||
| case 'is_not': | ||
| return !computeExactMatch(value, overrideValue) | ||
| case 'is_set': | ||
| return key in propertyValues | ||
| case 'icontains': | ||
| return String(overrideValue).toLowerCase().includes(String(value).toLowerCase()) | ||
| case 'not_icontains': | ||
| return !String(overrideValue).toLowerCase().includes(String(value).toLowerCase()) | ||
| case 'starts_with': | ||
| return String(overrideValue).toLowerCase().startsWith(String(value).toLowerCase()) | ||
| case 'not_starts_with': | ||
| return !String(overrideValue).toLowerCase().startsWith(String(value).toLowerCase()) | ||
| case 'ends_with': | ||
| return String(overrideValue).toLowerCase().endsWith(String(value).toLowerCase()) | ||
| case 'not_ends_with': | ||
| return !String(overrideValue).toLowerCase().endsWith(String(value).toLowerCase()) | ||
| case 'regex': | ||
| return isValidRegex(String(value)) && String(overrideValue).match(String(value)) !== null | ||
| case 'not_regex': | ||
| return isValidRegex(String(value)) && String(overrideValue).match(String(value)) === null | ||
| case 'gt': | ||
| case 'gte': | ||
| case 'lt': | ||
| case 'lte': { | ||
| const parsedValue = typeof value === 'number' ? value : parseFloat(String(value)) | ||
| const parsedOverride = | ||
| typeof overrideValue === 'number' | ||
| ? overrideValue | ||
| : overrideValue != null | ||
| ? parseFloat(String(overrideValue)) | ||
| : NaN | ||
| if (Number.isFinite(parsedValue) && Number.isFinite(parsedOverride)) { | ||
| return compare(parsedOverride, parsedValue, operator) | ||
| } | ||
| return compare(String(overrideValue), String(value), operator) | ||
| } | ||
| case 'is_date_after': | ||
| case 'is_date_before': { | ||
| if (typeof value === 'boolean') { | ||
| throw new InconclusiveMatchError('Date operations cannot be performed on boolean values') | ||
| } | ||
| let parsedDate = relativeDateParseForFeatureFlagMatching(String(value)) | ||
| if (parsedDate == null) parsedDate = convertToDateTime(value) | ||
| const overrideDate = convertToDateTime(overrideValue) | ||
| return operator === 'is_date_before' ? overrideDate < parsedDate : overrideDate > parsedDate | ||
| } | ||
| case 'semver_eq': | ||
| return ( | ||
| compareSemverTuples( | ||
| parseFeatureFlagSemver(String(overrideValue), parsingPolicy), | ||
| parseFeatureFlagSemver(String(value), parsingPolicy) | ||
| ) === 0 | ||
| ) | ||
| case 'semver_neq': | ||
| return ( | ||
| compareSemverTuples( | ||
| parseFeatureFlagSemver(String(overrideValue), parsingPolicy), | ||
| parseFeatureFlagSemver(String(value), parsingPolicy) | ||
| ) !== 0 | ||
| ) | ||
| case 'semver_gt': | ||
| return ( | ||
| compareSemverTuples( | ||
| parseFeatureFlagSemver(String(overrideValue), parsingPolicy), | ||
| parseFeatureFlagSemver(String(value), parsingPolicy) | ||
| ) > 0 | ||
| ) | ||
| case 'semver_gte': | ||
| return ( | ||
| compareSemverTuples( | ||
| parseFeatureFlagSemver(String(overrideValue), parsingPolicy), | ||
| parseFeatureFlagSemver(String(value), parsingPolicy) | ||
| ) >= 0 | ||
| ) | ||
| case 'semver_lt': | ||
| return ( | ||
| compareSemverTuples( | ||
| parseFeatureFlagSemver(String(overrideValue), parsingPolicy), | ||
| parseFeatureFlagSemver(String(value), parsingPolicy) | ||
| ) < 0 | ||
| ) | ||
| case 'semver_lte': | ||
| return ( | ||
| compareSemverTuples( | ||
| parseFeatureFlagSemver(String(overrideValue), parsingPolicy), | ||
| parseFeatureFlagSemver(String(value), parsingPolicy) | ||
| ) <= 0 | ||
| ) | ||
| case 'semver_tilde': { | ||
| const overrideParsed = parseFeatureFlagSemver(String(overrideValue), parsingPolicy) | ||
| const { lower, upper } = computeTildeBounds(String(value), parsingPolicy) | ||
| return compareSemverTuples(overrideParsed, lower) >= 0 && compareSemverTuples(overrideParsed, upper) < 0 | ||
| } | ||
| case 'semver_caret': { | ||
| const overrideParsed = parseFeatureFlagSemver(String(overrideValue), parsingPolicy) | ||
| const { lower, upper } = computeCaretBounds(String(value), parsingPolicy) | ||
| return compareSemverTuples(overrideParsed, lower) >= 0 && compareSemverTuples(overrideParsed, upper) < 0 | ||
| } | ||
| case 'semver_wildcard': { | ||
| const overrideParsed = parseFeatureFlagSemver(String(overrideValue), parsingPolicy) | ||
| const { lower, upper } = computeWildcardBounds(String(value), parsingPolicy) | ||
| return compareSemverTuples(overrideParsed, lower) >= 0 && compareSemverTuples(overrideParsed, upper) < 0 | ||
| } | ||
| default: | ||
| throw new InconclusiveMatchError(`Unknown operator: ${operator}`) | ||
| } | ||
| } | ||
| export async function hashSHA1(text: string): Promise<string> { | ||
| const subtle = globalThis.crypto?.subtle | ||
| if (!subtle) throw new Error('SubtleCrypto API not available') | ||
| const hashBuffer = await subtle.digest('SHA-1', new TextEncoder().encode(text)) | ||
| return Array.from(new Uint8Array(hashBuffer)) | ||
| .map((byte) => byte.toString(16).padStart(2, '0')) | ||
| .join('') | ||
| } | ||
| export async function getFeatureFlagHash(key: string, bucketingValue: string, salt: string = ''): Promise<number> { | ||
| const hashString = await hashSHA1(`${key}.${bucketingValue}${salt}`) | ||
| return parseInt(hashString.slice(0, 15), 16) / LONG_SCALE | ||
| } | ||
| export function getFeatureFlagVariantLookupTable( | ||
| variants: readonly FeatureFlagVariant[] | ||
| ): FeatureFlagVariantLookupEntry[] { | ||
| const table: FeatureFlagVariantLookupEntry[] = [] | ||
| let valueMin = 0 | ||
| for (const variant of variants) { | ||
| const valueMax = valueMin + variant.rollout_percentage / 100.0 | ||
| table.push({ valueMin, valueMax, key: variant.key }) | ||
| valueMin = valueMax | ||
| } | ||
| return table | ||
| } | ||
| export async function getFeatureFlagVariant( | ||
| key: string, | ||
| bucketingValue: string, | ||
| variants: readonly FeatureFlagVariant[] | ||
| ): Promise<string | undefined> { | ||
| const hashValue = await getFeatureFlagHash(key, bucketingValue, 'variant') | ||
| return getFeatureFlagVariantLookupTable(variants).find( | ||
| (variant) => hashValue >= variant.valueMin && hashValue < variant.valueMax | ||
| )?.key | ||
| } | ||
| export function resolveFeatureFlagPayload( | ||
| payloads: Readonly<Record<string, JsonType | undefined>> | null | undefined, | ||
| flagValue: FeatureFlagValue | null | undefined | ||
| ): JsonType | null { | ||
| if (flagValue === false || flagValue === null || flagValue === undefined || !payloads) return null | ||
| const payloadKey = typeof flagValue === 'boolean' ? flagValue.toString() : flagValue | ||
| const payload = payloads[payloadKey] || null | ||
| return payload == null ? null : (parsePayload(payload) as JsonType) | ||
| } |
| import type { PropertyFilters, PropertyOperator } from '../types' | ||
| import { isMatchingRegex, isValidRegex, matchPropertyFilters, propertyComparisons } from './property-matching' | ||
| const operators: PropertyOperator[] = [ | ||
| 'exact', | ||
| 'is_not', | ||
| 'regex', | ||
| 'not_regex', | ||
| 'icontains', | ||
| 'not_icontains', | ||
| 'gt', | ||
| 'lt', | ||
| ] | ||
| const filter = (operator: PropertyOperator, values: string[]): PropertyFilters => ({ | ||
| property: { operator, values }, | ||
| }) | ||
| describe('shared property matching contract', () => { | ||
| describe('regex validation', () => { | ||
| it('validates and matches regular expressions without throwing', () => { | ||
| expect(isValidRegex('^/docs/.*')).toBe(true) | ||
| expect(isMatchingRegex('/docs/getting-started', '^/docs/')).toBe(true) | ||
| expect(isMatchingRegex('/pricing', '^/docs/')).toBe(false) | ||
| }) | ||
| it('returns false for invalid regular expressions', () => { | ||
| expect(isValidRegex('[invalid')).toBe(false) | ||
| expect(isMatchingRegex('anything', '[invalid')).toBe(false) | ||
| }) | ||
| }) | ||
| describe('property comparisons', () => { | ||
| it.each<{ | ||
| operator: PropertyOperator | ||
| targets: string[] | ||
| values: string[] | ||
| expected: boolean | ||
| }>([ | ||
| { operator: 'exact', targets: ['premium'], values: ['basic', 'premium'], expected: true }, | ||
| { operator: 'exact', targets: ['premium'], values: ['basic', 'trial'], expected: false }, | ||
| { operator: 'is_not', targets: ['basic', 'trial'], values: ['premium', 'enterprise'], expected: true }, | ||
| { operator: 'is_not', targets: ['basic', 'trial'], values: ['premium', 'trial'], expected: false }, | ||
| { operator: 'regex', targets: ['^/app/', '^/docs/'], values: ['/home', '/docs/start'], expected: true }, | ||
| { operator: 'regex', targets: ['^/app/', '^/docs/'], values: ['/home', '/pricing'], expected: false }, | ||
| { operator: 'not_regex', targets: ['^/app/', '^/docs/'], values: ['/home', '/pricing'], expected: true }, | ||
| { operator: 'not_regex', targets: ['^/app/', '^/docs/'], values: ['/home', '/docs/start'], expected: false }, | ||
| { operator: 'icontains', targets: ['CHECKOUT'], values: ['home', 'Start Checkout'], expected: true }, | ||
| { operator: 'icontains', targets: ['CHECKOUT'], values: ['home', 'pricing'], expected: false }, | ||
| { operator: 'not_icontains', targets: ['SPAM', 'BOT'], values: ['welcome', 'human'], expected: true }, | ||
| { operator: 'not_icontains', targets: ['SPAM', 'BOT'], values: ['welcome', 'chatBot'], expected: false }, | ||
| { operator: 'gt', targets: ['10', '20'], values: ['9', '21'], expected: true }, | ||
| { operator: 'gt', targets: ['10', '20'], values: ['8', '9'], expected: false }, | ||
| { operator: 'lt', targets: ['10', '20'], values: ['21', '9'], expected: true }, | ||
| { operator: 'lt', targets: ['10', '20'], values: ['20', '21'], expected: false }, | ||
| ])('$operator preserves its array quantifier semantics', ({ operator, targets, values, expected }) => { | ||
| expect(propertyComparisons[operator](targets, values)).toBe(expected) | ||
| }) | ||
| it.each<{ | ||
| operator: PropertyOperator | ||
| expected: boolean | ||
| }>([ | ||
| { operator: 'exact', expected: false }, | ||
| { operator: 'is_not', expected: true }, | ||
| { operator: 'regex', expected: false }, | ||
| { operator: 'not_regex', expected: true }, | ||
| { operator: 'icontains', expected: false }, | ||
| { operator: 'not_icontains', expected: true }, | ||
| { operator: 'gt', expected: false }, | ||
| { operator: 'lt', expected: false }, | ||
| ])('$operator preserves empty-target behavior', ({ operator, expected }) => { | ||
| expect(propertyComparisons[operator]([], ['value'])).toBe(expected) | ||
| }) | ||
| it('preserves parseFloat numeric coercion', () => { | ||
| expect(propertyComparisons.gt(['9widgets'], ['10items'])).toBe(true) | ||
| expect(propertyComparisons.lt(['10items'], ['9widgets'])).toBe(true) | ||
| expect(propertyComparisons.gt(['9'], ['not a number'])).toBe(false) | ||
| expect(propertyComparisons.gt(['not a number'], ['10'])).toBe(false) | ||
| expect(propertyComparisons.lt(['10'], ['10items'])).toBe(false) | ||
| }) | ||
| it('treats invalid regexes as non-matches before applying negative quantifiers', () => { | ||
| expect(propertyComparisons.regex(['[invalid'], ['value'])).toBe(false) | ||
| expect(propertyComparisons.not_regex(['[invalid'], ['value'])).toBe(true) | ||
| }) | ||
| }) | ||
| describe('map-level matching', () => { | ||
| it('matches absent and empty filter maps', () => { | ||
| expect(matchPropertyFilters(undefined, undefined)).toBe(true) | ||
| expect(matchPropertyFilters({}, undefined)).toBe(true) | ||
| }) | ||
| it('requires every configured property filter to match', () => { | ||
| expect( | ||
| matchPropertyFilters( | ||
| { | ||
| plan: { values: ['premium'], operator: 'exact' }, | ||
| role: { values: ['admin'], operator: 'is_not' }, | ||
| }, | ||
| { plan: 'premium', role: 'member' } | ||
| ) | ||
| ).toBe(true) | ||
| expect( | ||
| matchPropertyFilters( | ||
| { | ||
| plan: { values: ['premium'], operator: 'exact' }, | ||
| role: { values: ['admin'], operator: 'is_not' }, | ||
| }, | ||
| { plan: 'premium', role: 'admin' } | ||
| ) | ||
| ).toBe(false) | ||
| }) | ||
| it.each(operators)('rejects missing and null values for %s, including negative operators', (operator) => { | ||
| expect(matchPropertyFilters(filter(operator, ['target']), {})).toBe(false) | ||
| expect(matchPropertyFilters(filter(operator, ['target']), { property: undefined })).toBe(false) | ||
| expect(matchPropertyFilters(filter(operator, ['target']), { property: null })).toBe(false) | ||
| }) | ||
| it('coerces each event property to one string value', () => { | ||
| expect(matchPropertyFilters(filter('exact', ['5']), { property: 5 })).toBe(true) | ||
| expect(matchPropertyFilters(filter('exact', ['true']), { property: true })).toBe(true) | ||
| expect(matchPropertyFilters(filter('exact', ['premium,vip']), { property: ['premium', 'vip'] })).toBe(true) | ||
| }) | ||
| it.each<{ | ||
| operator: PropertyOperator | ||
| value: string | ||
| expected: boolean | ||
| }>([ | ||
| { operator: 'exact', value: 'target', expected: true }, | ||
| { operator: 'is_not', value: 'other', expected: true }, | ||
| { operator: 'regex', value: '/docs/start', expected: true }, | ||
| { operator: 'not_regex', value: '/pricing', expected: true }, | ||
| { operator: 'icontains', value: 'TARGET value', expected: true }, | ||
| { operator: 'not_icontains', value: 'other value', expected: true }, | ||
| { operator: 'gt', value: '11items', expected: true }, | ||
| { operator: 'lt', value: '9items', expected: true }, | ||
| ])('uses the shared $operator comparison', ({ operator, value, expected }) => { | ||
| const target = | ||
| operator === 'regex' || operator === 'not_regex' | ||
| ? '^/docs/' | ||
| : operator === 'gt' || operator === 'lt' | ||
| ? '10items' | ||
| : 'target' | ||
| expect(matchPropertyFilters(filter(operator, [target]), { property: value })).toBe(expected) | ||
| }) | ||
| it('returns false for invalid regex and numeric targets', () => { | ||
| expect(matchPropertyFilters(filter('regex', ['[invalid']), { property: 'value' })).toBe(false) | ||
| expect(matchPropertyFilters(filter('gt', ['not a number']), { property: '10' })).toBe(false) | ||
| expect(matchPropertyFilters(filter('lt', ['not a number']), { property: '10' })).toBe(false) | ||
| }) | ||
| it('preserves empty-target behavior through the map matcher', () => { | ||
| expect(matchPropertyFilters(filter('exact', []), { property: 'value' })).toBe(false) | ||
| expect(matchPropertyFilters(filter('regex', []), { property: 'value' })).toBe(false) | ||
| expect(matchPropertyFilters(filter('icontains', []), { property: 'value' })).toBe(false) | ||
| expect(matchPropertyFilters(filter('gt', []), { property: '10' })).toBe(false) | ||
| expect(matchPropertyFilters(filter('lt', []), { property: '10' })).toBe(false) | ||
| expect(matchPropertyFilters(filter('is_not', []), { property: 'value' })).toBe(true) | ||
| expect(matchPropertyFilters(filter('not_regex', []), { property: 'value' })).toBe(true) | ||
| expect(matchPropertyFilters(filter('not_icontains', []), { property: 'value' })).toBe(true) | ||
| }) | ||
| it('returns false for an unknown operator from malformed remote data', () => { | ||
| const malformedFilters = filter('unknown' as PropertyOperator, ['target']) | ||
| expect(matchPropertyFilters(malformedFilters, { property: 'target' })).toBe(false) | ||
| }) | ||
| }) | ||
| }) |
| import type { Properties } from '@posthog/types' | ||
| import type { PropertyFilters, PropertyOperator } from '../types' | ||
| export const isValidRegex = (pattern: string): boolean => { | ||
| try { | ||
| new RegExp(pattern) | ||
| } catch { | ||
| return false | ||
| } | ||
| return true | ||
| } | ||
| export const isMatchingRegex = (value: string, pattern: string): boolean => { | ||
| if (!isValidRegex(pattern)) { | ||
| return false | ||
| } | ||
| try { | ||
| return new RegExp(pattern).test(value) | ||
| } catch { | ||
| return false | ||
| } | ||
| } | ||
| const toLowerCase = (value: string): string => value.toLowerCase() | ||
| export const propertyComparisons: Record<PropertyOperator, (targets: string[], values: string[]) => boolean> = { | ||
| exact: (targets, values) => values.some((value) => targets.some((target) => value === target)), | ||
| is_not: (targets, values) => values.every((value) => targets.every((target) => value !== target)), | ||
| regex: (targets, values) => values.some((value) => targets.some((target) => isMatchingRegex(value, target))), | ||
| not_regex: (targets, values) => values.every((value) => targets.every((target) => !isMatchingRegex(value, target))), | ||
| icontains: (targets, values) => | ||
| values.map(toLowerCase).some((value) => targets.map(toLowerCase).some((target) => value.includes(target))), | ||
| not_icontains: (targets, values) => | ||
| values.map(toLowerCase).every((value) => targets.map(toLowerCase).every((target) => !value.includes(target))), | ||
| gt: (targets, values) => | ||
| values.some((value) => { | ||
| const numValue = parseFloat(value) | ||
| return !isNaN(numValue) && targets.some((target) => numValue > parseFloat(target)) | ||
| }), | ||
| lt: (targets, values) => | ||
| values.some((value) => { | ||
| const numValue = parseFloat(value) | ||
| return !isNaN(numValue) && targets.some((target) => numValue < parseFloat(target)) | ||
| }), | ||
| } | ||
| /** | ||
| * Matches every configured filter against event properties. Missing and null | ||
| * properties never match, including for negative operators. | ||
| */ | ||
| export function matchPropertyFilters( | ||
| propertyFilters: PropertyFilters | undefined, | ||
| eventProperties: Properties | undefined | ||
| ): boolean { | ||
| if (!propertyFilters) { | ||
| return true | ||
| } | ||
| return Object.entries(propertyFilters).every(([propertyName, filter]) => { | ||
| const eventPropertyValue = eventProperties?.[propertyName] | ||
| if (eventPropertyValue === undefined || eventPropertyValue === null) { | ||
| return false | ||
| } | ||
| const comparisonFunction = propertyComparisons[filter.operator] | ||
| if (!comparisonFunction) { | ||
| return false | ||
| } | ||
| return comparisonFunction(filter.values, [String(eventPropertyValue)]) | ||
| }) | ||
| } |
+2
-0
| export { getFeatureFlagValue, getEnabledFromValue, getVariantFromValue, parsePayload, flagDetailsToResults, MINIMAL_FLAG_CALLED_EVENT_CAMPAIGN_PROPERTIES, minimizeFlagCalledEventProperties, } from './featureFlagUtils'; | ||
| export { getFeatureFlagHash, getFeatureFlagVariant, getFeatureFlagVariantLookupTable, hashSHA1, InconclusiveMatchError, matchFeatureFlagProperty, parseFeatureFlagSemver, relativeDateParseForFeatureFlagMatching, resolveFeatureFlagPayload, } from './featureFlagLocalEvaluation'; | ||
| export type { FeatureFlagProperty, FeatureFlagPropertyValue, FeatureFlagSemverParsingPolicy, FeatureFlagVariant, FeatureFlagVariantLookupEntry, MatchFeatureFlagPropertyOptions, } from './featureFlagLocalEvaluation'; | ||
| export { gzipCompress, isGzipData, isGzipRequest, isGzipSupported, isNativeAsyncGzipError, isNativeAsyncGzipReadError, } from './gzip'; | ||
@@ -3,0 +5,0 @@ export * from './utils'; |
@@ -1,1 +0,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"} | ||
| {"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"} |
+164
-79
@@ -9,2 +9,5 @@ "use strict"; | ||
| }, | ||
| "./featureFlagLocalEvaluation": function(module) { | ||
| module.exports = require("./featureFlagLocalEvaluation.js"); | ||
| }, | ||
| "./featureFlagUtils": function(module) { | ||
@@ -91,44 +94,57 @@ module.exports = require("./featureFlagUtils.js"); | ||
| __webpack_require__.d(__webpack_exports__, { | ||
| DEFAULT_HISTOGRAM_BOUNDS: ()=>_metrics__WEBPACK_IMPORTED_MODULE_6__.DEFAULT_HISTOGRAM_BOUNDS, | ||
| ErrorTracking: ()=>_error_tracking__WEBPACK_IMPORTED_MODULE_3__, | ||
| DEFAULT_HISTOGRAM_BOUNDS: ()=>_metrics__WEBPACK_IMPORTED_MODULE_7__.DEFAULT_HISTOGRAM_BOUNDS, | ||
| ErrorTracking: ()=>_error_tracking__WEBPACK_IMPORTED_MODULE_4__, | ||
| InconclusiveMatchError: ()=>_featureFlagLocalEvaluation__WEBPACK_IMPORTED_MODULE_1__.InconclusiveMatchError, | ||
| MINIMAL_FLAG_CALLED_EVENT_CAMPAIGN_PROPERTIES: ()=>_featureFlagUtils__WEBPACK_IMPORTED_MODULE_0__.MINIMAL_FLAG_CALLED_EVENT_CAMPAIGN_PROPERTIES, | ||
| PostHogLogs: ()=>_logs__WEBPACK_IMPORTED_MODULE_5__.PostHogLogs, | ||
| PostHogMetrics: ()=>_metrics__WEBPACK_IMPORTED_MODULE_6__.PostHogMetrics, | ||
| buildMetricsResourceAttributes: ()=>_metrics__WEBPACK_IMPORTED_MODULE_6__.buildMetricsResourceAttributes, | ||
| buildOtlpLogRecord: ()=>_logs_logs_utils__WEBPACK_IMPORTED_MODULE_4__.buildOtlpLogRecord, | ||
| buildOtlpLogsPayload: ()=>_logs_logs_utils__WEBPACK_IMPORTED_MODULE_4__.buildOtlpLogsPayload, | ||
| buildOtlpMetricsPayload: ()=>_metrics__WEBPACK_IMPORTED_MODULE_6__.buildOtlpMetricsPayload, | ||
| buildResourceAttributes: ()=>_logs_logs_utils__WEBPACK_IMPORTED_MODULE_4__.buildResourceAttributes, | ||
| PostHogLogs: ()=>_logs__WEBPACK_IMPORTED_MODULE_6__.PostHogLogs, | ||
| PostHogMetrics: ()=>_metrics__WEBPACK_IMPORTED_MODULE_7__.PostHogMetrics, | ||
| buildMetricsResourceAttributes: ()=>_metrics__WEBPACK_IMPORTED_MODULE_7__.buildMetricsResourceAttributes, | ||
| buildOtlpLogRecord: ()=>_logs_logs_utils__WEBPACK_IMPORTED_MODULE_5__.buildOtlpLogRecord, | ||
| buildOtlpLogsPayload: ()=>_logs_logs_utils__WEBPACK_IMPORTED_MODULE_5__.buildOtlpLogsPayload, | ||
| buildOtlpMetricsPayload: ()=>_metrics__WEBPACK_IMPORTED_MODULE_7__.buildOtlpMetricsPayload, | ||
| buildResourceAttributes: ()=>_logs_logs_utils__WEBPACK_IMPORTED_MODULE_5__.buildResourceAttributes, | ||
| flagDetailsToResults: ()=>_featureFlagUtils__WEBPACK_IMPORTED_MODULE_0__.flagDetailsToResults, | ||
| getEnabledFromValue: ()=>_featureFlagUtils__WEBPACK_IMPORTED_MODULE_0__.getEnabledFromValue, | ||
| getFeatureFlagHash: ()=>_featureFlagLocalEvaluation__WEBPACK_IMPORTED_MODULE_1__.getFeatureFlagHash, | ||
| getFeatureFlagValue: ()=>_featureFlagUtils__WEBPACK_IMPORTED_MODULE_0__.getFeatureFlagValue, | ||
| getLengthFromRules: ()=>_surveys_validation__WEBPACK_IMPORTED_MODULE_13__.getLengthFromRules, | ||
| getOtlpSeverityNumber: ()=>_logs_logs_utils__WEBPACK_IMPORTED_MODULE_4__.getOtlpSeverityNumber, | ||
| getOtlpSeverityText: ()=>_logs_logs_utils__WEBPACK_IMPORTED_MODULE_4__.getOtlpSeverityText, | ||
| getRequirementsHint: ()=>_surveys_validation__WEBPACK_IMPORTED_MODULE_13__.getRequirementsHint, | ||
| getValidationError: ()=>_surveys_validation__WEBPACK_IMPORTED_MODULE_13__.getValidationError, | ||
| getFeatureFlagVariant: ()=>_featureFlagLocalEvaluation__WEBPACK_IMPORTED_MODULE_1__.getFeatureFlagVariant, | ||
| getFeatureFlagVariantLookupTable: ()=>_featureFlagLocalEvaluation__WEBPACK_IMPORTED_MODULE_1__.getFeatureFlagVariantLookupTable, | ||
| getLengthFromRules: ()=>_surveys_validation__WEBPACK_IMPORTED_MODULE_14__.getLengthFromRules, | ||
| getOtlpSeverityNumber: ()=>_logs_logs_utils__WEBPACK_IMPORTED_MODULE_5__.getOtlpSeverityNumber, | ||
| getOtlpSeverityText: ()=>_logs_logs_utils__WEBPACK_IMPORTED_MODULE_5__.getOtlpSeverityText, | ||
| getRequirementsHint: ()=>_surveys_validation__WEBPACK_IMPORTED_MODULE_14__.getRequirementsHint, | ||
| getValidationError: ()=>_surveys_validation__WEBPACK_IMPORTED_MODULE_14__.getValidationError, | ||
| getVariantFromValue: ()=>_featureFlagUtils__WEBPACK_IMPORTED_MODULE_0__.getVariantFromValue, | ||
| gzipCompress: ()=>_gzip__WEBPACK_IMPORTED_MODULE_1__.gzipCompress, | ||
| isGzipData: ()=>_gzip__WEBPACK_IMPORTED_MODULE_1__.isGzipData, | ||
| isGzipRequest: ()=>_gzip__WEBPACK_IMPORTED_MODULE_1__.isGzipRequest, | ||
| isGzipSupported: ()=>_gzip__WEBPACK_IMPORTED_MODULE_1__.isGzipSupported, | ||
| isNativeAsyncGzipError: ()=>_gzip__WEBPACK_IMPORTED_MODULE_1__.isNativeAsyncGzipError, | ||
| isNativeAsyncGzipReadError: ()=>_gzip__WEBPACK_IMPORTED_MODULE_1__.isNativeAsyncGzipReadError, | ||
| gzipCompress: ()=>_gzip__WEBPACK_IMPORTED_MODULE_2__.gzipCompress, | ||
| hashSHA1: ()=>_featureFlagLocalEvaluation__WEBPACK_IMPORTED_MODULE_1__.hashSHA1, | ||
| isGzipData: ()=>_gzip__WEBPACK_IMPORTED_MODULE_2__.isGzipData, | ||
| isGzipRequest: ()=>_gzip__WEBPACK_IMPORTED_MODULE_2__.isGzipRequest, | ||
| isGzipSupported: ()=>_gzip__WEBPACK_IMPORTED_MODULE_2__.isGzipSupported, | ||
| isNativeAsyncGzipError: ()=>_gzip__WEBPACK_IMPORTED_MODULE_2__.isNativeAsyncGzipError, | ||
| isNativeAsyncGzipReadError: ()=>_gzip__WEBPACK_IMPORTED_MODULE_2__.isNativeAsyncGzipReadError, | ||
| matchFeatureFlagProperty: ()=>_featureFlagLocalEvaluation__WEBPACK_IMPORTED_MODULE_1__.matchFeatureFlagProperty, | ||
| minimizeFlagCalledEventProperties: ()=>_featureFlagUtils__WEBPACK_IMPORTED_MODULE_0__.minimizeFlagCalledEventProperties, | ||
| parseFeatureFlagSemver: ()=>_featureFlagLocalEvaluation__WEBPACK_IMPORTED_MODULE_1__.parseFeatureFlagSemver, | ||
| parsePayload: ()=>_featureFlagUtils__WEBPACK_IMPORTED_MODULE_0__.parsePayload, | ||
| resolveMetricsConfig: ()=>_metrics__WEBPACK_IMPORTED_MODULE_6__.resolveMetricsConfig, | ||
| toOtlpAnyValue: ()=>_logs_logs_utils__WEBPACK_IMPORTED_MODULE_4__.toOtlpAnyValue, | ||
| toOtlpKeyValueList: ()=>_logs_logs_utils__WEBPACK_IMPORTED_MODULE_4__.toOtlpKeyValueList, | ||
| uuidv7: ()=>_vendor_uuidv7__WEBPACK_IMPORTED_MODULE_7__.uuidv7 | ||
| relativeDateParseForFeatureFlagMatching: ()=>_featureFlagLocalEvaluation__WEBPACK_IMPORTED_MODULE_1__.relativeDateParseForFeatureFlagMatching, | ||
| resolveFeatureFlagPayload: ()=>_featureFlagLocalEvaluation__WEBPACK_IMPORTED_MODULE_1__.resolveFeatureFlagPayload, | ||
| resolveMetricsConfig: ()=>_metrics__WEBPACK_IMPORTED_MODULE_7__.resolveMetricsConfig, | ||
| toOtlpAnyValue: ()=>_logs_logs_utils__WEBPACK_IMPORTED_MODULE_5__.toOtlpAnyValue, | ||
| toOtlpKeyValueList: ()=>_logs_logs_utils__WEBPACK_IMPORTED_MODULE_5__.toOtlpKeyValueList, | ||
| uuidv7: ()=>_vendor_uuidv7__WEBPACK_IMPORTED_MODULE_8__.uuidv7 | ||
| }); | ||
| var _featureFlagUtils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./featureFlagUtils"); | ||
| var _gzip__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./gzip"); | ||
| var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./utils?637c"); | ||
| var _featureFlagLocalEvaluation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./featureFlagLocalEvaluation"); | ||
| var _gzip__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./gzip"); | ||
| var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("./utils?637c"); | ||
| var __WEBPACK_REEXPORT_OBJECT__ = {}; | ||
| for(var __WEBPACK_IMPORT_KEY__ in _utils__WEBPACK_IMPORTED_MODULE_2__)if ([ | ||
| for(var __WEBPACK_IMPORT_KEY__ in _utils__WEBPACK_IMPORTED_MODULE_3__)if ([ | ||
| "toOtlpKeyValueList", | ||
| "relativeDateParseForFeatureFlagMatching", | ||
| "isNativeAsyncGzipError", | ||
| "getOtlpSeverityText", | ||
| "PostHogMetrics", | ||
| "getEnabledFromValue", | ||
| "hashSHA1", | ||
| "isNativeAsyncGzipReadError", | ||
| "PostHogMetrics", | ||
| "getVariantFromValue", | ||
@@ -138,3 +154,6 @@ "gzipCompress", | ||
| "ErrorTracking", | ||
| "getFeatureFlagHash", | ||
| "buildMetricsResourceAttributes", | ||
| "InconclusiveMatchError", | ||
| "getFeatureFlagVariantLookupTable", | ||
| "parsePayload", | ||
@@ -148,4 +167,5 @@ "getLengthFromRules", | ||
| "PostHogLogs", | ||
| "matchFeatureFlagProperty", | ||
| "getFeatureFlagValue", | ||
| "isGzipRequest", | ||
| "getFeatureFlagValue", | ||
| "getValidationError", | ||
@@ -155,27 +175,32 @@ "MINIMAL_FLAG_CALLED_EVENT_CAMPAIGN_PROPERTIES", | ||
| "resolveMetricsConfig", | ||
| "parseFeatureFlagSemver", | ||
| "isGzipData", | ||
| "resolveFeatureFlagPayload", | ||
| "getRequirementsHint", | ||
| "isGzipData", | ||
| "getOtlpSeverityNumber", | ||
| "buildResourceAttributes", | ||
| "minimizeFlagCalledEventProperties", | ||
| "buildResourceAttributes", | ||
| "buildOtlpMetricsPayload", | ||
| "buildOtlpLogRecord", | ||
| "toOtlpKeyValueList" | ||
| "getFeatureFlagVariant" | ||
| ].indexOf(__WEBPACK_IMPORT_KEY__) < 0) __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = (function(key) { | ||
| return _utils__WEBPACK_IMPORTED_MODULE_2__[key]; | ||
| return _utils__WEBPACK_IMPORTED_MODULE_3__[key]; | ||
| }).bind(0, __WEBPACK_IMPORT_KEY__); | ||
| __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__); | ||
| var _error_tracking__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("./error-tracking"); | ||
| var _logs_logs_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("./logs/logs-utils"); | ||
| var _logs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("./logs"); | ||
| var _metrics__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("./metrics"); | ||
| var _vendor_uuidv7__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__("./vendor/uuidv7"); | ||
| var _cookie__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__("./cookie"); | ||
| var _error_tracking__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("./error-tracking"); | ||
| var _logs_logs_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("./logs/logs-utils"); | ||
| var _logs__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("./logs"); | ||
| var _metrics__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__("./metrics"); | ||
| var _vendor_uuidv7__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__("./vendor/uuidv7"); | ||
| var _cookie__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__("./cookie"); | ||
| var __WEBPACK_REEXPORT_OBJECT__ = {}; | ||
| for(var __WEBPACK_IMPORT_KEY__ in _cookie__WEBPACK_IMPORTED_MODULE_8__)if ([ | ||
| for(var __WEBPACK_IMPORT_KEY__ in _cookie__WEBPACK_IMPORTED_MODULE_9__)if ([ | ||
| "toOtlpKeyValueList", | ||
| "relativeDateParseForFeatureFlagMatching", | ||
| "isNativeAsyncGzipError", | ||
| "getOtlpSeverityText", | ||
| "PostHogMetrics", | ||
| "getEnabledFromValue", | ||
| "hashSHA1", | ||
| "isNativeAsyncGzipReadError", | ||
| "PostHogMetrics", | ||
| "getVariantFromValue", | ||
@@ -185,3 +210,6 @@ "gzipCompress", | ||
| "ErrorTracking", | ||
| "getFeatureFlagHash", | ||
| "buildMetricsResourceAttributes", | ||
| "InconclusiveMatchError", | ||
| "getFeatureFlagVariantLookupTable", | ||
| "parsePayload", | ||
@@ -195,4 +223,5 @@ "getLengthFromRules", | ||
| "PostHogLogs", | ||
| "matchFeatureFlagProperty", | ||
| "getFeatureFlagValue", | ||
| "isGzipRequest", | ||
| "getFeatureFlagValue", | ||
| "getValidationError", | ||
@@ -202,22 +231,27 @@ "MINIMAL_FLAG_CALLED_EVENT_CAMPAIGN_PROPERTIES", | ||
| "resolveMetricsConfig", | ||
| "parseFeatureFlagSemver", | ||
| "isGzipData", | ||
| "resolveFeatureFlagPayload", | ||
| "getRequirementsHint", | ||
| "isGzipData", | ||
| "getOtlpSeverityNumber", | ||
| "buildResourceAttributes", | ||
| "minimizeFlagCalledEventProperties", | ||
| "buildResourceAttributes", | ||
| "buildOtlpMetricsPayload", | ||
| "buildOtlpLogRecord", | ||
| "toOtlpKeyValueList" | ||
| "getFeatureFlagVariant" | ||
| ].indexOf(__WEBPACK_IMPORT_KEY__) < 0) __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = (function(key) { | ||
| return _cookie__WEBPACK_IMPORTED_MODULE_8__[key]; | ||
| return _cookie__WEBPACK_IMPORTED_MODULE_9__[key]; | ||
| }).bind(0, __WEBPACK_IMPORT_KEY__); | ||
| __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__); | ||
| var _posthog_core__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__("./posthog-core"); | ||
| var _posthog_core__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__("./posthog-core"); | ||
| var __WEBPACK_REEXPORT_OBJECT__ = {}; | ||
| for(var __WEBPACK_IMPORT_KEY__ in _posthog_core__WEBPACK_IMPORTED_MODULE_9__)if ([ | ||
| for(var __WEBPACK_IMPORT_KEY__ in _posthog_core__WEBPACK_IMPORTED_MODULE_10__)if ([ | ||
| "toOtlpKeyValueList", | ||
| "relativeDateParseForFeatureFlagMatching", | ||
| "isNativeAsyncGzipError", | ||
| "getOtlpSeverityText", | ||
| "PostHogMetrics", | ||
| "getEnabledFromValue", | ||
| "hashSHA1", | ||
| "isNativeAsyncGzipReadError", | ||
| "PostHogMetrics", | ||
| "getVariantFromValue", | ||
@@ -227,3 +261,6 @@ "gzipCompress", | ||
| "ErrorTracking", | ||
| "getFeatureFlagHash", | ||
| "buildMetricsResourceAttributes", | ||
| "InconclusiveMatchError", | ||
| "getFeatureFlagVariantLookupTable", | ||
| "parsePayload", | ||
@@ -237,4 +274,5 @@ "getLengthFromRules", | ||
| "PostHogLogs", | ||
| "matchFeatureFlagProperty", | ||
| "getFeatureFlagValue", | ||
| "isGzipRequest", | ||
| "getFeatureFlagValue", | ||
| "getValidationError", | ||
@@ -244,22 +282,27 @@ "MINIMAL_FLAG_CALLED_EVENT_CAMPAIGN_PROPERTIES", | ||
| "resolveMetricsConfig", | ||
| "parseFeatureFlagSemver", | ||
| "isGzipData", | ||
| "resolveFeatureFlagPayload", | ||
| "getRequirementsHint", | ||
| "isGzipData", | ||
| "getOtlpSeverityNumber", | ||
| "buildResourceAttributes", | ||
| "minimizeFlagCalledEventProperties", | ||
| "buildResourceAttributes", | ||
| "buildOtlpMetricsPayload", | ||
| "buildOtlpLogRecord", | ||
| "toOtlpKeyValueList" | ||
| "getFeatureFlagVariant" | ||
| ].indexOf(__WEBPACK_IMPORT_KEY__) < 0) __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = (function(key) { | ||
| return _posthog_core__WEBPACK_IMPORTED_MODULE_9__[key]; | ||
| return _posthog_core__WEBPACK_IMPORTED_MODULE_10__[key]; | ||
| }).bind(0, __WEBPACK_IMPORT_KEY__); | ||
| __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__); | ||
| var _posthog_core_stateless__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__("./posthog-core-stateless"); | ||
| var _posthog_core_stateless__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__("./posthog-core-stateless"); | ||
| var __WEBPACK_REEXPORT_OBJECT__ = {}; | ||
| for(var __WEBPACK_IMPORT_KEY__ in _posthog_core_stateless__WEBPACK_IMPORTED_MODULE_10__)if ([ | ||
| for(var __WEBPACK_IMPORT_KEY__ in _posthog_core_stateless__WEBPACK_IMPORTED_MODULE_11__)if ([ | ||
| "toOtlpKeyValueList", | ||
| "relativeDateParseForFeatureFlagMatching", | ||
| "isNativeAsyncGzipError", | ||
| "getOtlpSeverityText", | ||
| "PostHogMetrics", | ||
| "getEnabledFromValue", | ||
| "hashSHA1", | ||
| "isNativeAsyncGzipReadError", | ||
| "PostHogMetrics", | ||
| "getVariantFromValue", | ||
@@ -269,3 +312,6 @@ "gzipCompress", | ||
| "ErrorTracking", | ||
| "getFeatureFlagHash", | ||
| "buildMetricsResourceAttributes", | ||
| "InconclusiveMatchError", | ||
| "getFeatureFlagVariantLookupTable", | ||
| "parsePayload", | ||
@@ -279,4 +325,5 @@ "getLengthFromRules", | ||
| "PostHogLogs", | ||
| "matchFeatureFlagProperty", | ||
| "getFeatureFlagValue", | ||
| "isGzipRequest", | ||
| "getFeatureFlagValue", | ||
| "getValidationError", | ||
@@ -286,22 +333,27 @@ "MINIMAL_FLAG_CALLED_EVENT_CAMPAIGN_PROPERTIES", | ||
| "resolveMetricsConfig", | ||
| "parseFeatureFlagSemver", | ||
| "isGzipData", | ||
| "resolveFeatureFlagPayload", | ||
| "getRequirementsHint", | ||
| "isGzipData", | ||
| "getOtlpSeverityNumber", | ||
| "buildResourceAttributes", | ||
| "minimizeFlagCalledEventProperties", | ||
| "buildResourceAttributes", | ||
| "buildOtlpMetricsPayload", | ||
| "buildOtlpLogRecord", | ||
| "toOtlpKeyValueList" | ||
| "getFeatureFlagVariant" | ||
| ].indexOf(__WEBPACK_IMPORT_KEY__) < 0) __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = (function(key) { | ||
| return _posthog_core_stateless__WEBPACK_IMPORTED_MODULE_10__[key]; | ||
| return _posthog_core_stateless__WEBPACK_IMPORTED_MODULE_11__[key]; | ||
| }).bind(0, __WEBPACK_IMPORT_KEY__); | ||
| __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__); | ||
| var _tracing_headers__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__("./tracing-headers"); | ||
| var _tracing_headers__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__("./tracing-headers"); | ||
| var __WEBPACK_REEXPORT_OBJECT__ = {}; | ||
| for(var __WEBPACK_IMPORT_KEY__ in _tracing_headers__WEBPACK_IMPORTED_MODULE_11__)if ([ | ||
| for(var __WEBPACK_IMPORT_KEY__ in _tracing_headers__WEBPACK_IMPORTED_MODULE_12__)if ([ | ||
| "toOtlpKeyValueList", | ||
| "relativeDateParseForFeatureFlagMatching", | ||
| "isNativeAsyncGzipError", | ||
| "getOtlpSeverityText", | ||
| "PostHogMetrics", | ||
| "getEnabledFromValue", | ||
| "hashSHA1", | ||
| "isNativeAsyncGzipReadError", | ||
| "PostHogMetrics", | ||
| "getVariantFromValue", | ||
@@ -311,3 +363,6 @@ "gzipCompress", | ||
| "ErrorTracking", | ||
| "getFeatureFlagHash", | ||
| "buildMetricsResourceAttributes", | ||
| "InconclusiveMatchError", | ||
| "getFeatureFlagVariantLookupTable", | ||
| "parsePayload", | ||
@@ -321,4 +376,5 @@ "getLengthFromRules", | ||
| "PostHogLogs", | ||
| "matchFeatureFlagProperty", | ||
| "getFeatureFlagValue", | ||
| "isGzipRequest", | ||
| "getFeatureFlagValue", | ||
| "getValidationError", | ||
@@ -328,22 +384,27 @@ "MINIMAL_FLAG_CALLED_EVENT_CAMPAIGN_PROPERTIES", | ||
| "resolveMetricsConfig", | ||
| "parseFeatureFlagSemver", | ||
| "isGzipData", | ||
| "resolveFeatureFlagPayload", | ||
| "getRequirementsHint", | ||
| "isGzipData", | ||
| "getOtlpSeverityNumber", | ||
| "buildResourceAttributes", | ||
| "minimizeFlagCalledEventProperties", | ||
| "buildResourceAttributes", | ||
| "buildOtlpMetricsPayload", | ||
| "buildOtlpLogRecord", | ||
| "toOtlpKeyValueList" | ||
| "getFeatureFlagVariant" | ||
| ].indexOf(__WEBPACK_IMPORT_KEY__) < 0) __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = (function(key) { | ||
| return _tracing_headers__WEBPACK_IMPORTED_MODULE_11__[key]; | ||
| return _tracing_headers__WEBPACK_IMPORTED_MODULE_12__[key]; | ||
| }).bind(0, __WEBPACK_IMPORT_KEY__); | ||
| __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__); | ||
| var _types__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__("./types"); | ||
| var _types__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__("./types"); | ||
| var __WEBPACK_REEXPORT_OBJECT__ = {}; | ||
| for(var __WEBPACK_IMPORT_KEY__ in _types__WEBPACK_IMPORTED_MODULE_12__)if ([ | ||
| for(var __WEBPACK_IMPORT_KEY__ in _types__WEBPACK_IMPORTED_MODULE_13__)if ([ | ||
| "toOtlpKeyValueList", | ||
| "relativeDateParseForFeatureFlagMatching", | ||
| "isNativeAsyncGzipError", | ||
| "getOtlpSeverityText", | ||
| "PostHogMetrics", | ||
| "getEnabledFromValue", | ||
| "hashSHA1", | ||
| "isNativeAsyncGzipReadError", | ||
| "PostHogMetrics", | ||
| "getVariantFromValue", | ||
@@ -353,3 +414,6 @@ "gzipCompress", | ||
| "ErrorTracking", | ||
| "getFeatureFlagHash", | ||
| "buildMetricsResourceAttributes", | ||
| "InconclusiveMatchError", | ||
| "getFeatureFlagVariantLookupTable", | ||
| "parsePayload", | ||
@@ -363,4 +427,5 @@ "getLengthFromRules", | ||
| "PostHogLogs", | ||
| "matchFeatureFlagProperty", | ||
| "getFeatureFlagValue", | ||
| "isGzipRequest", | ||
| "getFeatureFlagValue", | ||
| "getValidationError", | ||
@@ -370,18 +435,21 @@ "MINIMAL_FLAG_CALLED_EVENT_CAMPAIGN_PROPERTIES", | ||
| "resolveMetricsConfig", | ||
| "parseFeatureFlagSemver", | ||
| "isGzipData", | ||
| "resolveFeatureFlagPayload", | ||
| "getRequirementsHint", | ||
| "isGzipData", | ||
| "getOtlpSeverityNumber", | ||
| "buildResourceAttributes", | ||
| "minimizeFlagCalledEventProperties", | ||
| "buildResourceAttributes", | ||
| "buildOtlpMetricsPayload", | ||
| "buildOtlpLogRecord", | ||
| "toOtlpKeyValueList" | ||
| "getFeatureFlagVariant" | ||
| ].indexOf(__WEBPACK_IMPORT_KEY__) < 0) __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = (function(key) { | ||
| return _types__WEBPACK_IMPORTED_MODULE_12__[key]; | ||
| return _types__WEBPACK_IMPORTED_MODULE_13__[key]; | ||
| }).bind(0, __WEBPACK_IMPORT_KEY__); | ||
| __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__); | ||
| var _surveys_validation__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__("./surveys/validation"); | ||
| var _surveys_validation__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__("./surveys/validation"); | ||
| })(); | ||
| exports.DEFAULT_HISTOGRAM_BOUNDS = __webpack_exports__.DEFAULT_HISTOGRAM_BOUNDS; | ||
| exports.ErrorTracking = __webpack_exports__.ErrorTracking; | ||
| exports.InconclusiveMatchError = __webpack_exports__.InconclusiveMatchError; | ||
| exports.MINIMAL_FLAG_CALLED_EVENT_CAMPAIGN_PROPERTIES = __webpack_exports__.MINIMAL_FLAG_CALLED_EVENT_CAMPAIGN_PROPERTIES; | ||
@@ -397,3 +465,6 @@ exports.PostHogLogs = __webpack_exports__.PostHogLogs; | ||
| exports.getEnabledFromValue = __webpack_exports__.getEnabledFromValue; | ||
| exports.getFeatureFlagHash = __webpack_exports__.getFeatureFlagHash; | ||
| exports.getFeatureFlagValue = __webpack_exports__.getFeatureFlagValue; | ||
| exports.getFeatureFlagVariant = __webpack_exports__.getFeatureFlagVariant; | ||
| exports.getFeatureFlagVariantLookupTable = __webpack_exports__.getFeatureFlagVariantLookupTable; | ||
| exports.getLengthFromRules = __webpack_exports__.getLengthFromRules; | ||
@@ -406,2 +477,3 @@ exports.getOtlpSeverityNumber = __webpack_exports__.getOtlpSeverityNumber; | ||
| exports.gzipCompress = __webpack_exports__.gzipCompress; | ||
| exports.hashSHA1 = __webpack_exports__.hashSHA1; | ||
| exports.isGzipData = __webpack_exports__.isGzipData; | ||
@@ -412,4 +484,8 @@ exports.isGzipRequest = __webpack_exports__.isGzipRequest; | ||
| exports.isNativeAsyncGzipReadError = __webpack_exports__.isNativeAsyncGzipReadError; | ||
| exports.matchFeatureFlagProperty = __webpack_exports__.matchFeatureFlagProperty; | ||
| exports.minimizeFlagCalledEventProperties = __webpack_exports__.minimizeFlagCalledEventProperties; | ||
| exports.parseFeatureFlagSemver = __webpack_exports__.parseFeatureFlagSemver; | ||
| exports.parsePayload = __webpack_exports__.parsePayload; | ||
| exports.relativeDateParseForFeatureFlagMatching = __webpack_exports__.relativeDateParseForFeatureFlagMatching; | ||
| exports.resolveFeatureFlagPayload = __webpack_exports__.resolveFeatureFlagPayload; | ||
| exports.resolveMetricsConfig = __webpack_exports__.resolveMetricsConfig; | ||
@@ -422,2 +498,3 @@ exports.toOtlpAnyValue = __webpack_exports__.toOtlpAnyValue; | ||
| "ErrorTracking", | ||
| "InconclusiveMatchError", | ||
| "MINIMAL_FLAG_CALLED_EVENT_CAMPAIGN_PROPERTIES", | ||
@@ -433,3 +510,6 @@ "PostHogLogs", | ||
| "getEnabledFromValue", | ||
| "getFeatureFlagHash", | ||
| "getFeatureFlagValue", | ||
| "getFeatureFlagVariant", | ||
| "getFeatureFlagVariantLookupTable", | ||
| "getLengthFromRules", | ||
@@ -442,2 +522,3 @@ "getOtlpSeverityNumber", | ||
| "gzipCompress", | ||
| "hashSHA1", | ||
| "isGzipData", | ||
@@ -448,4 +529,8 @@ "isGzipRequest", | ||
| "isNativeAsyncGzipReadError", | ||
| "matchFeatureFlagProperty", | ||
| "minimizeFlagCalledEventProperties", | ||
| "parseFeatureFlagSemver", | ||
| "parsePayload", | ||
| "relativeDateParseForFeatureFlagMatching", | ||
| "resolveFeatureFlagPayload", | ||
| "resolveMetricsConfig", | ||
@@ -452,0 +537,0 @@ "toOtlpAnyValue", |
+2
-1
| import { MINIMAL_FLAG_CALLED_EVENT_CAMPAIGN_PROPERTIES, flagDetailsToResults, getEnabledFromValue, getFeatureFlagValue, getVariantFromValue, minimizeFlagCalledEventProperties, parsePayload } from "./featureFlagUtils.mjs"; | ||
| import { InconclusiveMatchError, getFeatureFlagHash, getFeatureFlagVariant, getFeatureFlagVariantLookupTable, hashSHA1, matchFeatureFlagProperty, parseFeatureFlagSemver, relativeDateParseForFeatureFlagMatching, resolveFeatureFlagPayload } from "./featureFlagLocalEvaluation.mjs"; | ||
| import { gzipCompress, isGzipData, isGzipRequest, isGzipSupported, isNativeAsyncGzipError, isNativeAsyncGzipReadError } from "./gzip.mjs"; | ||
@@ -15,2 +16,2 @@ import { buildOtlpLogRecord, buildOtlpLogsPayload, buildResourceAttributes, getOtlpSeverityNumber, getOtlpSeverityText, toOtlpAnyValue, toOtlpKeyValueList } from "./logs/logs-utils.mjs"; | ||
| import * as __WEBPACK_EXTERNAL_MODULE__error_tracking_index_mjs_b3406d6f__ from "./error-tracking/index.mjs"; | ||
| export { DEFAULT_HISTOGRAM_BOUNDS, __WEBPACK_EXTERNAL_MODULE__error_tracking_index_mjs_b3406d6f__ as ErrorTracking, MINIMAL_FLAG_CALLED_EVENT_CAMPAIGN_PROPERTIES, PostHogLogs, PostHogMetrics, buildMetricsResourceAttributes, buildOtlpLogRecord, buildOtlpLogsPayload, buildOtlpMetricsPayload, buildResourceAttributes, flagDetailsToResults, getEnabledFromValue, getFeatureFlagValue, getLengthFromRules, getOtlpSeverityNumber, getOtlpSeverityText, getRequirementsHint, getValidationError, getVariantFromValue, gzipCompress, isGzipData, isGzipRequest, isGzipSupported, isNativeAsyncGzipError, isNativeAsyncGzipReadError, minimizeFlagCalledEventProperties, parsePayload, resolveMetricsConfig, toOtlpAnyValue, toOtlpKeyValueList, uuidv7 }; | ||
| export { DEFAULT_HISTOGRAM_BOUNDS, __WEBPACK_EXTERNAL_MODULE__error_tracking_index_mjs_b3406d6f__ as ErrorTracking, InconclusiveMatchError, MINIMAL_FLAG_CALLED_EVENT_CAMPAIGN_PROPERTIES, PostHogLogs, PostHogMetrics, buildMetricsResourceAttributes, buildOtlpLogRecord, buildOtlpLogsPayload, buildOtlpMetricsPayload, buildResourceAttributes, flagDetailsToResults, getEnabledFromValue, getFeatureFlagHash, getFeatureFlagValue, getFeatureFlagVariant, getFeatureFlagVariantLookupTable, getLengthFromRules, getOtlpSeverityNumber, getOtlpSeverityText, getRequirementsHint, getValidationError, getVariantFromValue, gzipCompress, hashSHA1, isGzipData, isGzipRequest, isGzipSupported, isNativeAsyncGzipError, isNativeAsyncGzipReadError, matchFeatureFlagProperty, minimizeFlagCalledEventProperties, parseFeatureFlagSemver, parsePayload, relativeDateParseForFeatureFlagMatching, resolveFeatureFlagPayload, resolveMetricsConfig, toOtlpAnyValue, toOtlpKeyValueList, uuidv7 }; |
@@ -6,2 +6,3 @@ export { getValidationError, getLengthFromRules, getRequirementsHint } from './validation'; | ||
| export { getSurveyIterationKey, isSurveyKeyForSurvey, type SurveyWithIteration } from './keys'; | ||
| export { isMatchingRegex, isValidRegex, matchPropertyFilters, propertyComparisons } from './property-matching'; | ||
| //# sourceMappingURL=index.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/surveys/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAC1F,OAAO,EACL,6BAA6B,EAC7B,4BAA4B,EAC5B,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,UAAU,CAAA;AACjB,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,wBAAwB,EACxB,eAAe,EACf,qCAAqC,EACrC,qBAAqB,GACtB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,2BAA2B,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAA;AAC7G,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,KAAK,mBAAmB,EAAE,MAAM,QAAQ,CAAA"} | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/surveys/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAC1F,OAAO,EACL,6BAA6B,EAC7B,4BAA4B,EAC5B,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,UAAU,CAAA;AACjB,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,wBAAwB,EACxB,eAAe,EACf,qCAAqC,EACrC,qBAAqB,GACtB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,2BAA2B,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAA;AAC7G,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,KAAK,mBAAmB,EAAE,MAAM,QAAQ,CAAA;AAC9F,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA"} |
@@ -31,2 +31,4 @@ "use strict"; | ||
| getSurveyResponseValue: ()=>external_events_js_namespaceObject.getSurveyResponseValue, | ||
| isMatchingRegex: ()=>external_property_matching_js_namespaceObject.isMatchingRegex, | ||
| matchPropertyFilters: ()=>external_property_matching_js_namespaceObject.matchPropertyFilters, | ||
| isSurveyIterationBased: ()=>external_activation_js_namespaceObject.isSurveyIterationBased, | ||
@@ -39,3 +41,5 @@ SURVEY_LANGUAGE_PROPERTY: ()=>external_events_js_namespaceObject.SURVEY_LANGUAGE_PROPERTY, | ||
| getLanguageFromStoredPersonProperties: ()=>external_translations_js_namespaceObject.getLanguageFromStoredPersonProperties, | ||
| isValidRegex: ()=>external_property_matching_js_namespaceObject.isValidRegex, | ||
| buildSurveyResponseProperties: ()=>external_events_js_namespaceObject.buildSurveyResponseProperties, | ||
| propertyComparisons: ()=>external_property_matching_js_namespaceObject.propertyComparisons, | ||
| getRequirementsHint: ()=>external_validation_js_namespaceObject.getRequirementsHint, | ||
@@ -56,2 +60,3 @@ findBestTranslationMatch: ()=>external_translations_js_namespaceObject.findBestTranslationMatch, | ||
| const external_keys_js_namespaceObject = require("./keys.js"); | ||
| const external_property_matching_js_namespaceObject = require("./property-matching.js"); | ||
| exports.SURVEY_LANGUAGE_PROPERTY = __webpack_exports__.SURVEY_LANGUAGE_PROPERTY; | ||
@@ -74,5 +79,9 @@ exports.applySurveyTranslation = __webpack_exports__.applySurveyTranslation; | ||
| exports.getValidationError = __webpack_exports__.getValidationError; | ||
| exports.isMatchingRegex = __webpack_exports__.isMatchingRegex; | ||
| exports.isSurveyIterationBased = __webpack_exports__.isSurveyIterationBased; | ||
| exports.isSurveyKeyForSurvey = __webpack_exports__.isSurveyKeyForSurvey; | ||
| exports.isValidRegex = __webpack_exports__.isValidRegex; | ||
| exports.matchPropertyFilters = __webpack_exports__.matchPropertyFilters; | ||
| exports.normalizeLanguageCode = __webpack_exports__.normalizeLanguageCode; | ||
| exports.propertyComparisons = __webpack_exports__.propertyComparisons; | ||
| exports.surveyHasResponses = __webpack_exports__.surveyHasResponses; | ||
@@ -97,5 +106,9 @@ for(var __webpack_i__ in __webpack_exports__)if (-1 === [ | ||
| "getValidationError", | ||
| "isMatchingRegex", | ||
| "isSurveyIterationBased", | ||
| "isSurveyKeyForSurvey", | ||
| "isValidRegex", | ||
| "matchPropertyFilters", | ||
| "normalizeLanguageCode", | ||
| "propertyComparisons", | ||
| "surveyHasResponses" | ||
@@ -102,0 +115,0 @@ ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__]; |
@@ -6,2 +6,3 @@ import { getLengthFromRules, getRequirementsHint, getValidationError } from "./validation.mjs"; | ||
| import { getSurveyIterationKey, isSurveyKeyForSurvey } from "./keys.mjs"; | ||
| export { SURVEY_LANGUAGE_PROPERTY, applySurveyTranslation, buildSurveyResponseProperties, canSurveyActivateRepeatedly, detectSurveyLanguage, doesSurveyActivateByEvent, findBestTranslationMatch, getBaseLanguage, getLanguageFromStoredPersonProperties, getLengthFromRules, getRequirementsHint, getSurveyInteractionProperty, getSurveyIterationKey, getSurveyOldResponseKey, getSurveyResponseKey, getSurveyResponseValue, getValidationError, isSurveyIterationBased, isSurveyKeyForSurvey, normalizeLanguageCode, surveyHasResponses }; | ||
| import { isMatchingRegex, isValidRegex, matchPropertyFilters, propertyComparisons } from "./property-matching.mjs"; | ||
| export { SURVEY_LANGUAGE_PROPERTY, applySurveyTranslation, buildSurveyResponseProperties, canSurveyActivateRepeatedly, detectSurveyLanguage, doesSurveyActivateByEvent, findBestTranslationMatch, getBaseLanguage, getLanguageFromStoredPersonProperties, getLengthFromRules, getRequirementsHint, getSurveyInteractionProperty, getSurveyIterationKey, getSurveyOldResponseKey, getSurveyResponseKey, getSurveyResponseValue, getValidationError, isMatchingRegex, isSurveyIterationBased, isSurveyKeyForSurvey, isValidRegex, matchPropertyFilters, normalizeLanguageCode, propertyComparisons, surveyHasResponses }; |
+11
-3
@@ -727,2 +727,12 @@ export type PostHogCoreOptions = { | ||
| export type SurveyMatchType = (typeof SurveyMatchType)[keyof typeof SurveyMatchType]; | ||
| export type PropertyMatchType = SurveyMatchType; | ||
| export type PropertyOperator = PropertyMatchType | 'gt' | 'lt'; | ||
| export type PropertyFilters = Record<string, { | ||
| values: string[]; | ||
| operator: PropertyOperator; | ||
| }>; | ||
| export interface SurveyEventWithFilters { | ||
| name: string; | ||
| propertyFilters?: PropertyFilters; | ||
| } | ||
| export declare const SurveySchedule: { | ||
@@ -774,5 +784,3 @@ readonly Once: "once"; | ||
| repeatedActivation?: boolean; | ||
| values?: { | ||
| name: string; | ||
| }[]; | ||
| values?: SurveyEventWithFilters[]; | ||
| }; | ||
@@ -779,0 +787,0 @@ actions?: { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"} |
+2
-2
| { | ||
| "name": "@posthog/core", | ||
| "version": "1.48.10", | ||
| "version": "1.48.11", | ||
| "bugs": { | ||
@@ -73,3 +73,3 @@ "url": "https://github.com/PostHog/posthog-js/issues" | ||
| "dependencies": { | ||
| "@posthog/types": "^1.405.2" | ||
| "@posthog/types": "^1.405.3" | ||
| }, | ||
@@ -76,0 +76,0 @@ "devDependencies": { |
+19
-0
@@ -11,2 +11,21 @@ export { | ||
| export { | ||
| getFeatureFlagHash, | ||
| getFeatureFlagVariant, | ||
| getFeatureFlagVariantLookupTable, | ||
| hashSHA1, | ||
| InconclusiveMatchError, | ||
| matchFeatureFlagProperty, | ||
| parseFeatureFlagSemver, | ||
| relativeDateParseForFeatureFlagMatching, | ||
| resolveFeatureFlagPayload, | ||
| } from './featureFlagLocalEvaluation' | ||
| export type { | ||
| FeatureFlagProperty, | ||
| FeatureFlagPropertyValue, | ||
| FeatureFlagSemverParsingPolicy, | ||
| FeatureFlagVariant, | ||
| FeatureFlagVariantLookupEntry, | ||
| MatchFeatureFlagPropertyOptions, | ||
| } from './featureFlagLocalEvaluation' | ||
| export { | ||
| gzipCompress, | ||
@@ -13,0 +32,0 @@ isGzipData, |
@@ -21,1 +21,2 @@ export { getValidationError, getLengthFromRules, getRequirementsHint } from './validation' | ||
| export { getSurveyIterationKey, isSurveyKeyForSurvey, type SurveyWithIteration } from './keys' | ||
| export { isMatchingRegex, isValidRegex, matchPropertyFilters, propertyComparisons } from './property-matching' |
+17
-3
@@ -835,2 +835,18 @@ export type PostHogCoreOptions = { | ||
| export type PropertyMatchType = SurveyMatchType | ||
| export type PropertyOperator = PropertyMatchType | 'gt' | 'lt' | ||
| export type PropertyFilters = Record< | ||
| string, | ||
| { | ||
| values: string[] | ||
| operator: PropertyOperator | ||
| } | ||
| > | ||
| export interface SurveyEventWithFilters { | ||
| name: string | ||
| propertyFilters?: PropertyFilters | ||
| } | ||
| export const SurveySchedule = { | ||
@@ -885,5 +901,3 @@ Once: 'once', | ||
| repeatedActivation?: boolean | ||
| values?: { | ||
| name: string | ||
| }[] | ||
| values?: SurveyEventWithFilters[] | ||
| } | ||
@@ -890,0 +904,0 @@ actions?: { |
1470238
5.14%346
3.28%33882
4.72%Updated