posthog-js 1.217.0 → 1.217.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"web-experiments.js","sourceRoot":"","sources":["../../src/web-experiments.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAQnD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEjD,MAAM,CAAC,IAAM,6BAA6B,GAGtC;IACA,SAAS,EAAE,UAAC,aAAa,EAAE,QAAQ;QAC/B,OAAA,CAAC,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC;IAAjF,CAAiF;IACrF,aAAa,EAAE,UAAC,aAAa,EAAE,QAAQ;QACnC,OAAA,CAAC,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC;IAAnF,CAAmF;IACvF,KAAK,EAAE,UAAC,aAAa,EAAE,QAAQ,IAAK,OAAA,CAAC,CAAC,MAAM,IAAI,eAAe,CAAC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,EAAzD,CAAyD;IAC7F,SAAS,EAAE,UAAC,aAAa,EAAE,QAAQ,IAAK,OAAA,CAAC,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,EAA1D,CAA0D;IAClG,KAAK,EAAE,UAAC,aAAa,EAAE,QAAQ,IAAK,OAAA,QAAQ,CAAC,IAAI,KAAK,aAAa,EAA/B,CAA+B;IACnE,MAAM,EAAE,UAAC,aAAa,EAAE,QAAQ,IAAK,OAAA,QAAQ,CAAC,IAAI,KAAK,aAAa,EAA/B,CAA+B;CACvE,CAAA;AAED;IAGI,wBAAoB,QAAiB;QAArC,iBAIC;QAJmB,aAAQ,GAAR,QAAQ,CAAS;QAkE9B,6CAAwC,GAAG,UAAC,WAA4B;YAA5B,4BAAA,EAAA,mBAA4B;YAC3E,KAAI,CAAC,iBAAiB,CAAC,UAAC,cAAc;gBAClC,cAAc,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAA;gBACnE,KAAI,CAAC,kBAAkB,GAAG,IAAI,GAAG,EAAyB,CAAA;gBAE1D,cAAc,CAAC,OAAO,CAAC,UAAC,aAAa;;oBACjC,IAAI,aAAa,CAAC,gBAAgB,EAAE,CAAC;wBACjC,IAAI,KAAI,CAAC,kBAAkB,EAAE,CAAC;4BAC1B,cAAc,CAAC,OAAO,CAClB,mBAAmB,EACnB,aAAa,CAAC,gBAAgB,EAC9B,qBAAqB,EACrB,aAAa,CAChB,CAAA;4BACD,MAAA,KAAI,CAAC,kBAAkB,0CAAE,GAAG,CAAC,aAAa,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAA;wBAC/E,CAAC;wBAED,IAAM,eAAe,GAAG,KAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAA;wBACpF,IAAI,QAAQ,CAAC,eAAe,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;4BACvE,KAAI,CAAC,eAAe,CAChB,aAAa,CAAC,IAAI,EAClB,eAAe,EACf,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,UAAU,CACrD,CAAA;wBACL,CAAC;oBACL,CAAC;yBAAM,IAAI,aAAa,CAAC,QAAQ,EAAE,CAAC;wBAChC,KAAK,IAAM,OAAO,IAAI,aAAa,CAAC,QAAQ,EAAE,CAAC;4BAC3C,IAAM,WAAW,GAAG,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;4BACnD,IAAM,SAAS,GAAG,cAAc,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAA;4BAChE,IAAI,SAAS,EAAE,CAAC;gCACZ,KAAI,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,UAAU,CAAC,CAAA;4BAC7E,CAAC;wBACL,CAAC;oBACL,CAAC;gBACL,CAAC,CAAC,CAAA;YACN,CAAC,EAAE,WAAW,CAAC,CAAA;QACnB,CAAC,CAAA;QArGG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAC,KAAe;YACzC,KAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;QAC9B,CAAC,CAAC,CAAA;IACN,CAAC;IAED,uCAAc,GAAd,UAAe,KAAe;QAA9B,iBAgCC;QA/BG,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACjB,cAAc,CAAC,OAAO,CAAC,oEAAoE,CAAC,CAAA;YAC5F,OAAM;QACV,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,uBAAuB,EAAE,CAAC;YAC/C,OAAM;QACV,CAAC;QAED,IAAI,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACrC,iDAAiD;YACjD,IAAI,CAAC,kBAAkB,GAAG,IAAI,GAAG,EAAyB,CAAA;YAC1D,IAAI,CAAC,aAAa,EAAE,CAAA;YACpB,IAAI,CAAC,oBAAoB,EAAE,CAAA;YAC3B,OAAM;QACV,CAAC;QAED,cAAc,CAAC,OAAO,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAA;QACvD,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI;;YACf,IAAI,KAAI,CAAC,kBAAkB,KAAI,MAAA,KAAI,CAAC,kBAAkB,0CAAE,GAAG,CAAC,IAAI,CAAC,CAAA,EAAE,CAAC;gBAChE,IAAM,eAAe,GAAG,KAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAsB,CAAA;gBAC/E,IAAM,aAAa,GAAG,MAAA,KAAI,CAAC,kBAAkB,0CAAE,GAAG,CAAC,IAAI,CAAC,CAAA;gBACxD,IAAI,eAAe,KAAI,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,QAAQ,CAAC,eAAe,CAAC,CAAA,EAAE,CAAC;oBAC9D,KAAI,CAAC,eAAe,CAChB,aAAa,CAAC,IAAI,EAClB,eAAe,EACf,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,UAAU,CACrD,CAAA;gBACL,CAAC;YACL,CAAC;QACL,CAAC,CAAC,CAAA;IACN,CAAC;IAED,6CAAoB,GAApB;QAAA,iBAgBC;QAfG,IAAM,QAAQ,GAAG,cAAc,CAAC,iBAAiB,EAAE,CAAA;QACnD,IAAI,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,EAAE,CAAC;YACnB,IAAM,cAAY,GAAG,aAAa,CAAC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,EAAE,iBAAiB,CAAC,CAAA;YACvE,IAAM,SAAO,GAAG,aAAa,CAAC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,EAAE,sBAAsB,CAAC,CAAA;YACvE,IAAI,cAAY,IAAI,SAAO,EAAE,CAAC;gBAC1B,cAAc,CAAC,OAAO,CAAC,qCAA8B,cAAY,iBAAO,SAAO,CAAE,CAAC,CAAA;gBAClF,IAAI,CAAC,iBAAiB,CAClB,UAAC,cAAc;oBACX,KAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,cAAY,CAAC,EAAE,SAAO,EAAE,cAAc,CAAC,CAAA;gBAClF,CAAC,EACD,KAAK,EACL,IAAI,CACP,CAAA;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED,sCAAa,GAAb;QACI,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,uBAAuB,EAAE,CAAC;YAC/C,OAAM;QACV,CAAC;QAED,IAAI,CAAC,wCAAwC,EAAE,CAAA;IACnD,CAAC;IAwCM,0CAAiB,GAAxB,UAAyB,QAAgC,EAAE,WAAoB,EAAE,UAAoB;QACjG,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,uBAAuB,IAAI,CAAC,UAAU,EAAE,CAAC;YAC9D,OAAO,QAAQ,CAAC,EAAE,CAAC,CAAA;QACvB,CAAC;QAED,IAAM,sBAAsB,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,eAAe,CAAC,CAAA;QAC1E,IAAI,sBAAsB,IAAI,CAAC,WAAW,EAAE,CAAC;YACzC,OAAO,QAAQ,CAAC,sBAAsB,CAAC,CAAA;QAC3C,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;YACxB,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,CACxC,KAAK,EACL,sCAA+B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAE,CAC9D;YACD,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,UAAC,QAAQ;gBACf,IAAI,QAAQ,CAAC,UAAU,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;oBAChD,OAAO,QAAQ,CAAC,EAAE,CAAC,CAAA;gBACvB,CAAC;gBACD,IAAM,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAA;gBACtD,OAAO,QAAQ,CAAC,cAAc,CAAC,CAAA;YACnC,CAAC;SACJ,CAAC,CAAA;IACN,CAAC;IAEO,iDAAwB,GAAhC,UAAiC,YAAoB,EAAE,OAAe,EAAE,cAA+B;QACnG,IAAM,kBAAkB,GAAG,cAAc,CAAC,MAAM,CAAC,UAAC,GAAG,IAAK,OAAA,GAAG,CAAC,EAAE,KAAK,YAAY,EAAvB,CAAuB,CAAC,CAAA;QAClF,IAAI,kBAAkB,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtD,cAAc,CAAC,OAAO,CAClB,qCAA8B,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,6BAAmB,OAAO,MAAG,CACxF,CAAA;YACD,IAAI,CAAC,eAAe,CAChB,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,EAC1B,OAAO,EACP,kBAAkB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,UAAU,CACrD,CAAA;QACL,CAAC;IACL,CAAC;IACc,iCAAkB,GAAjC,UAAkC,WAAiC;QAC/D,IAAI,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;YACpC,OAAO,KAAK,CAAA;QAChB,CAAC;QACD,OAAO,cAAc,CAAC,kBAAkB,CAAC,WAAW,CAAC,IAAI,cAAc,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAA;IAC3G,CAAC;IAEc,iCAAkB,GAAjC,UAAkC,WAAiC;;QAC/D,IAAI,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC,MAAA,WAAW,CAAC,UAAU,0CAAE,GAAG,CAAC,EAAE,CAAC;YAC9E,OAAO,IAAI,CAAA;QACf,CAAC;QAED,IAAM,QAAQ,GAAG,cAAc,CAAC,iBAAiB,EAAE,CAAA;QACnD,IAAI,QAAQ,EAAE,CAAC;YACX,IAAM,QAAQ,GAAG,CAAA,MAAA,WAAW,CAAC,UAAU,0CAAE,GAAG;gBACxC,CAAC,CAAC,6BAA6B,CAAC,MAAA,MAAA,WAAW,CAAC,UAAU,0CAAE,YAAY,mCAAI,WAAW,CAAC,CAC9E,WAAW,CAAC,UAAU,CAAC,GAAG,EAC1B,QAAQ,CACX;gBACH,CAAC,CAAC,IAAI,CAAA;YACV,OAAO,QAAQ,CAAA;QACnB,CAAC;QAED,OAAO,KAAK,CAAA;IAChB,CAAC;IAEa,gCAAiB,GAA/B;QACI,OAAO,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,CAAA;IAC3B,CAAC;IAEc,iCAAkB,GAAjC,UAAkC,WAAiC;;QAC/D,IAAI,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC,MAAA,WAAW,CAAC,UAAU,0CAAE,GAAG,CAAC,EAAE,CAAC;YAC9E,OAAO,IAAI,CAAA;QACf,CAAC;QACD,IAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE,CAAA;QAC5C,IAAI,cAAc,CAAC,YAAY,CAAC,EAAE,CAAC;YAC/B,yCAAyC;YACzC,IAAM,kBAAkB,GAAG,CAAA,MAAA,MAAA,WAAW,CAAC,UAAU,0CAAE,GAAG,0CAAE,YAAY;gBAChE,CAAC,CAAC,CAAA,MAAA,MAAA,WAAW,CAAC,UAAU,0CAAE,GAAG,0CAAE,YAAY,KAAI,cAAc,CAAC,cAAc,CAAC;gBAC7E,CAAC,CAAC,IAAI,CAAA;YAEV,IAAM,gBAAgB,GAAG,CAAA,MAAA,MAAA,WAAW,CAAC,UAAU,0CAAE,GAAG,0CAAE,UAAU;gBAC5D,CAAC,CAAC,CAAA,MAAA,MAAA,WAAW,CAAC,UAAU,0CAAE,GAAG,0CAAE,UAAU,KAAI,cAAc,CAAC,YAAY,CAAC;gBACzE,CAAC,CAAC,IAAI,CAAA;YAEV,IAAM,gBAAgB,GAAG,CAAA,MAAA,MAAA,WAAW,CAAC,UAAU,0CAAE,GAAG,0CAAE,UAAU;gBAC5D,CAAC,CAAC,CAAA,MAAA,MAAA,WAAW,CAAC,UAAU,0CAAE,GAAG,0CAAE,UAAU,KAAI,cAAc,CAAC,YAAY,CAAC;gBACzE,CAAC,CAAC,IAAI,CAAA;YAEV,IAAM,cAAc,GAAG,CAAA,MAAA,MAAA,WAAW,CAAC,UAAU,0CAAE,GAAG,0CAAE,QAAQ;gBACxD,CAAC,CAAC,CAAA,MAAA,MAAA,WAAW,CAAC,UAAU,0CAAE,GAAG,0CAAE,QAAQ,KAAI,cAAc,CAAC,UAAU,CAAC;gBACrE,CAAC,CAAC,IAAI,CAAA;YAEV,OAAO,kBAAkB,IAAI,gBAAgB,IAAI,cAAc,IAAI,gBAAgB,CAAA;QACvF,CAAC;QAED,OAAO,KAAK,CAAA;IAChB,CAAC;IAEc,sBAAO,GAAtB,UAAuB,GAAW;QAAE,cAAc;aAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;YAAd,6BAAc;;QAC9C,MAAM,CAAC,IAAI,CAAC,2BAAoB,GAAG,CAAE,EAAE,IAAI,CAAC,CAAA;IAChD,CAAC;IAEO,wCAAe,GAAvB,UAAwB,UAAkB,EAAE,OAAe,EAAE,UAAoC;QAC7F,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACjB,cAAc,CAAC,OAAO,CAAC,oEAAoE,CAAC,CAAA;YAC5F,OAAM;QACV,CAAC;QAED,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YACxB,cAAc,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAAA;YACrE,OAAM;QACV,CAAC;QAED,UAAU,CAAC,OAAO,CAAC,UAAC,SAAS;YACzB,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;gBACrB,cAAc,CAAC,OAAO,CAClB,wCAAiC,OAAO,6BAAmB,UAAU,MAAG,EACxE,SAAS,CACZ,CAAA;gBAED,iDAAiD;gBACjD,IAAM,QAAQ,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,gBAAgB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;gBAC/D,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,OAAO,CAAC,UAAC,OAAO;oBACtB,IAAM,WAAW,GAAG,OAAsB,CAAA;oBAC1C,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;wBACvB,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,UAAC,SAAS;4BACnC,QAAQ,SAAS,CAAC,IAAI,EAAE,CAAC;gCACrB,KAAK,MAAM;oCACP,WAAW,CAAC,SAAS,GAAG,SAAS,CAAC,KAAK,CAAA;oCACvC,MAAK;gCAET,KAAK,MAAM;oCACP,WAAW,CAAC,SAAS,GAAG,SAAS,CAAC,KAAK,CAAA;oCACvC,MAAK;gCAET,KAAK,UAAU;oCACX,WAAW,CAAC,SAAS,GAAG,SAAS,CAAC,KAAK,CAAA;oCACvC,MAAK;gCAET;oCACI,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,CAAA;4BACjE,CAAC;wBACL,CAAC,CAAC,CAAA;oBACN,CAAC;oBAED,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC;wBACjB,WAAW,CAAC,SAAS,GAAG,SAAS,CAAC,IAAI,CAAA;oBAC1C,CAAC;oBAED,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC;wBACjB,IAAI,WAAW,CAAC,aAAa,EAAE,CAAC;4BAC5B,WAAW,CAAC,aAAa,CAAC,SAAS,GAAG,SAAS,CAAC,IAAI,CAAA;wBACxD,CAAC;6BAAM,CAAC;4BACJ,WAAW,CAAC,SAAS,GAAG,SAAS,CAAC,IAAI,CAAA;wBAC1C,CAAC;oBACL,CAAC;oBAED,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC;wBAChB,WAAW,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,CAAA;oBACpD,CAAC;gBACL,CAAC,CAAC,CAAA;YACN,CAAC;QACL,CAAC,CAAC,CAAA;IACN,CAAC;IAED,gCAAO,GAAP;QACI,IAAI,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC7B,OAAO,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAA;QACjF,CAAC;aAAM,CAAC;YACJ,OAAO,SAAS,CAAA;QACpB,CAAC;IACL,CAAC;IACL,qBAAC;AAAD,CAAC,AAvRD,IAuRC","sourcesContent":["import { PostHog } from './posthog-core'\nimport { navigator, window } from './utils/globals'\nimport {\n WebExperiment,\n WebExperimentsCallback,\n WebExperimentTransform,\n WebExperimentUrlMatchType,\n WebExperimentVariant,\n} from './web-experiments-types'\nimport { WEB_EXPERIMENTS } from './constants'\nimport { isNullish, isString } from './utils/type-utils'\nimport { getQueryParam } from './utils/request-utils'\nimport { isMatchingRegex } from './utils/string-utils'\nimport { logger } from './utils/logger'\nimport { Info } from './utils/event-utils'\nimport { isLikelyBot } from './utils/blocked-uas'\n\nexport const webExperimentUrlValidationMap: Record<\n WebExperimentUrlMatchType,\n (conditionsUrl: string, location: Location) => boolean\n> = {\n icontains: (conditionsUrl, location) =>\n !!window && location.href.toLowerCase().indexOf(conditionsUrl.toLowerCase()) > -1,\n not_icontains: (conditionsUrl, location) =>\n !!window && location.href.toLowerCase().indexOf(conditionsUrl.toLowerCase()) === -1,\n regex: (conditionsUrl, location) => !!window && isMatchingRegex(location.href, conditionsUrl),\n not_regex: (conditionsUrl, location) => !!window && !isMatchingRegex(location.href, conditionsUrl),\n exact: (conditionsUrl, location) => location.href === conditionsUrl,\n is_not: (conditionsUrl, location) => location.href !== conditionsUrl,\n}\n\nexport class WebExperiments {\n private _flagToExperiments?: Map<string, WebExperiment>\n\n constructor(private instance: PostHog) {\n this.instance.onFeatureFlags((flags: string[]) => {\n this.onFeatureFlags(flags)\n })\n }\n\n onFeatureFlags(flags: string[]) {\n if (this._is_bot()) {\n WebExperiments.logInfo('Refusing to render web experiment since the viewer is a likely bot')\n return\n }\n\n if (this.instance.config.disable_web_experiments) {\n return\n }\n\n if (isNullish(this._flagToExperiments)) {\n // Indicates first load so we trigger the loaders\n this._flagToExperiments = new Map<string, WebExperiment>()\n this.loadIfEnabled()\n this.previewWebExperiment()\n return\n }\n\n WebExperiments.logInfo('applying feature flags', flags)\n flags.forEach((flag) => {\n if (this._flagToExperiments && this._flagToExperiments?.has(flag)) {\n const selectedVariant = this.instance.getFeatureFlag(flag) as unknown as string\n const webExperiment = this._flagToExperiments?.get(flag)\n if (selectedVariant && webExperiment?.variants[selectedVariant]) {\n this.applyTransforms(\n webExperiment.name,\n selectedVariant,\n webExperiment.variants[selectedVariant].transforms\n )\n }\n }\n })\n }\n\n previewWebExperiment() {\n const location = WebExperiments.getWindowLocation()\n if (location?.search) {\n const experimentID = getQueryParam(location?.search, '__experiment_id')\n const variant = getQueryParam(location?.search, '__experiment_variant')\n if (experimentID && variant) {\n WebExperiments.logInfo(`previewing web experiments ${experimentID} && ${variant}`)\n this.getWebExperiments(\n (webExperiments) => {\n this.showPreviewWebExperiment(parseInt(experimentID), variant, webExperiments)\n },\n false,\n true\n )\n }\n }\n }\n\n loadIfEnabled() {\n if (this.instance.config.disable_web_experiments) {\n return\n }\n\n this.getWebExperimentsAndEvaluateDisplayLogic()\n }\n\n public getWebExperimentsAndEvaluateDisplayLogic = (forceReload: boolean = false): void => {\n this.getWebExperiments((webExperiments) => {\n WebExperiments.logInfo(`retrieved web experiments from the server`)\n this._flagToExperiments = new Map<string, WebExperiment>()\n\n webExperiments.forEach((webExperiment) => {\n if (webExperiment.feature_flag_key) {\n if (this._flagToExperiments) {\n WebExperiments.logInfo(\n `setting flag key `,\n webExperiment.feature_flag_key,\n ` to web experiment `,\n webExperiment\n )\n this._flagToExperiments?.set(webExperiment.feature_flag_key, webExperiment)\n }\n\n const selectedVariant = this.instance.getFeatureFlag(webExperiment.feature_flag_key)\n if (isString(selectedVariant) && webExperiment.variants[selectedVariant]) {\n this.applyTransforms(\n webExperiment.name,\n selectedVariant,\n webExperiment.variants[selectedVariant].transforms\n )\n }\n } else if (webExperiment.variants) {\n for (const variant in webExperiment.variants) {\n const testVariant = webExperiment.variants[variant]\n const matchTest = WebExperiments.matchesTestVariant(testVariant)\n if (matchTest) {\n this.applyTransforms(webExperiment.name, variant, testVariant.transforms)\n }\n }\n }\n })\n }, forceReload)\n }\n\n public getWebExperiments(callback: WebExperimentsCallback, forceReload: boolean, previewing?: boolean) {\n if (this.instance.config.disable_web_experiments && !previewing) {\n return callback([])\n }\n\n const existingWebExperiments = this.instance.get_property(WEB_EXPERIMENTS)\n if (existingWebExperiments && !forceReload) {\n return callback(existingWebExperiments)\n }\n\n this.instance._send_request({\n url: this.instance.requestRouter.endpointFor(\n 'api',\n `/api/web_experiments/?token=${this.instance.config.token}`\n ),\n method: 'GET',\n callback: (response) => {\n if (response.statusCode !== 200 || !response.json) {\n return callback([])\n }\n const webExperiments = response.json.experiments || []\n return callback(webExperiments)\n },\n })\n }\n\n private showPreviewWebExperiment(experimentID: number, variant: string, webExperiments: WebExperiment[]) {\n const previewExperiments = webExperiments.filter((exp) => exp.id === experimentID)\n if (previewExperiments && previewExperiments.length > 0) {\n WebExperiments.logInfo(\n `Previewing web experiment [${previewExperiments[0].name}] with variant [${variant}]`\n )\n this.applyTransforms(\n previewExperiments[0].name,\n variant,\n previewExperiments[0].variants[variant].transforms\n )\n }\n }\n private static matchesTestVariant(testVariant: WebExperimentVariant) {\n if (isNullish(testVariant.conditions)) {\n return false\n }\n return WebExperiments.matchUrlConditions(testVariant) && WebExperiments.matchUTMConditions(testVariant)\n }\n\n private static matchUrlConditions(testVariant: WebExperimentVariant): boolean {\n if (isNullish(testVariant.conditions) || isNullish(testVariant.conditions?.url)) {\n return true\n }\n\n const location = WebExperiments.getWindowLocation()\n if (location) {\n const urlCheck = testVariant.conditions?.url\n ? webExperimentUrlValidationMap[testVariant.conditions?.urlMatchType ?? 'icontains'](\n testVariant.conditions.url,\n location\n )\n : true\n return urlCheck\n }\n\n return false\n }\n\n public static getWindowLocation(): Location | undefined {\n return window?.location\n }\n\n private static matchUTMConditions(testVariant: WebExperimentVariant): boolean {\n if (isNullish(testVariant.conditions) || isNullish(testVariant.conditions?.utm)) {\n return true\n }\n const campaignParams = Info.campaignParams()\n if (campaignParams['utm_source']) {\n // eslint-disable-next-line compat/compat\n const utmCampaignMatched = testVariant.conditions?.utm?.utm_campaign\n ? testVariant.conditions?.utm?.utm_campaign == campaignParams['utm_campaign']\n : true\n\n const utmSourceMatched = testVariant.conditions?.utm?.utm_source\n ? testVariant.conditions?.utm?.utm_source == campaignParams['utm_source']\n : true\n\n const utmMediumMatched = testVariant.conditions?.utm?.utm_medium\n ? testVariant.conditions?.utm?.utm_medium == campaignParams['utm_medium']\n : true\n\n const utmTermMatched = testVariant.conditions?.utm?.utm_term\n ? testVariant.conditions?.utm?.utm_term == campaignParams['utm_term']\n : true\n\n return utmCampaignMatched && utmMediumMatched && utmTermMatched && utmSourceMatched\n }\n\n return false\n }\n\n private static logInfo(msg: string, ...args: any[]) {\n logger.info(`[WebExperiments] ${msg}`, args)\n }\n\n private applyTransforms(experiment: string, variant: string, transforms: WebExperimentTransform[]) {\n if (this._is_bot()) {\n WebExperiments.logInfo('Refusing to render web experiment since the viewer is a likely bot')\n return\n }\n\n if (variant === 'control') {\n WebExperiments.logInfo('Control variants leave the page unmodified.')\n return\n }\n\n transforms.forEach((transform) => {\n if (transform.selector) {\n WebExperiments.logInfo(\n `applying transform of variant ${variant} for experiment ${experiment} `,\n transform\n )\n\n // eslint-disable-next-line no-restricted-globals\n const elements = document?.querySelectorAll(transform.selector)\n elements?.forEach((element) => {\n const htmlElement = element as HTMLElement\n if (transform.attributes) {\n transform.attributes.forEach((attribute) => {\n switch (attribute.name) {\n case 'text':\n htmlElement.innerText = attribute.value\n break\n\n case 'html':\n htmlElement.innerHTML = attribute.value\n break\n\n case 'cssClass':\n htmlElement.className = attribute.value\n break\n\n default:\n htmlElement.setAttribute(attribute.name, attribute.value)\n }\n })\n }\n\n if (transform.text) {\n htmlElement.innerText = transform.text\n }\n\n if (transform.html) {\n if (htmlElement.parentElement) {\n htmlElement.parentElement.innerHTML = transform.html\n } else {\n htmlElement.innerHTML = transform.html\n }\n }\n\n if (transform.css) {\n htmlElement.setAttribute('style', transform.css)\n }\n })\n }\n })\n }\n\n _is_bot(): boolean | undefined {\n if (navigator && this.instance) {\n return isLikelyBot(navigator, this.instance.config.custom_blocked_useragents)\n } else {\n return undefined\n }\n }\n}\n"]}
1
+ {"version":3,"file":"web-experiments.js","sourceRoot":"","sources":["../../src/web-experiments.ts"],"names":[],"mappings":"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","sourcesContent":["import { PostHog } from './posthog-core'\nimport { navigator, window } from './utils/globals'\nimport {\n WebExperiment,\n WebExperimentsCallback,\n WebExperimentTransform,\n WebExperimentUrlMatchType,\n WebExperimentVariant,\n} from './web-experiments-types'\nimport { WEB_EXPERIMENTS } from './constants'\nimport { isNullish, isString } from './utils/type-utils'\nimport { getQueryParam } from './utils/request-utils'\nimport { isMatchingRegex } from './utils/string-utils'\nimport { logger } from './utils/logger'\nimport { Info } from './utils/event-utils'\nimport { isLikelyBot } from './utils/blocked-uas'\n\nexport const webExperimentUrlValidationMap: Record<\n WebExperimentUrlMatchType,\n (conditionsUrl: string, location: Location) => boolean\n> = {\n icontains: (conditionsUrl, location) =>\n !!window && location.href.toLowerCase().indexOf(conditionsUrl.toLowerCase()) > -1,\n not_icontains: (conditionsUrl, location) =>\n !!window && location.href.toLowerCase().indexOf(conditionsUrl.toLowerCase()) === -1,\n regex: (conditionsUrl, location) => !!window && isMatchingRegex(location.href, conditionsUrl),\n not_regex: (conditionsUrl, location) => !!window && !isMatchingRegex(location.href, conditionsUrl),\n exact: (conditionsUrl, location) => location.href === conditionsUrl,\n is_not: (conditionsUrl, location) => location.href !== conditionsUrl,\n}\n\nexport class WebExperiments {\n private _flagToExperiments?: Map<string, WebExperiment>\n\n constructor(private instance: PostHog) {\n this.instance.onFeatureFlags((flags: string[]) => {\n this.onFeatureFlags(flags)\n })\n }\n\n onFeatureFlags(flags: string[]) {\n if (this._is_bot()) {\n WebExperiments.logInfo('Refusing to render web experiment since the viewer is a likely bot')\n return\n }\n\n if (this.instance.config.disable_web_experiments) {\n return\n }\n\n if (isNullish(this._flagToExperiments)) {\n // Indicates first load so we trigger the loaders\n this._flagToExperiments = new Map<string, WebExperiment>()\n this.loadIfEnabled()\n this.previewWebExperiment()\n return\n }\n\n WebExperiments.logInfo('applying feature flags', flags)\n flags.forEach((flag) => {\n if (this._flagToExperiments && this._flagToExperiments?.has(flag)) {\n const selectedVariant = this.instance.getFeatureFlag(flag) as unknown as string\n const webExperiment = this._flagToExperiments?.get(flag)\n if (selectedVariant && webExperiment?.variants[selectedVariant]) {\n this.applyTransforms(\n webExperiment.name,\n selectedVariant,\n webExperiment.variants[selectedVariant].transforms\n )\n }\n }\n })\n }\n\n previewWebExperiment() {\n const location = WebExperiments.getWindowLocation()\n if (location?.search) {\n const experimentID = getQueryParam(location?.search, '__experiment_id')\n const variant = getQueryParam(location?.search, '__experiment_variant')\n if (experimentID && variant) {\n WebExperiments.logInfo(`previewing web experiments ${experimentID} && ${variant}`)\n this.getWebExperiments(\n (webExperiments) => {\n this.showPreviewWebExperiment(parseInt(experimentID), variant, webExperiments)\n },\n false,\n true\n )\n }\n }\n }\n\n loadIfEnabled() {\n if (this.instance.config.disable_web_experiments) {\n return\n }\n\n this.getWebExperimentsAndEvaluateDisplayLogic()\n }\n\n public getWebExperimentsAndEvaluateDisplayLogic = (forceReload: boolean = false): void => {\n this.getWebExperiments((webExperiments) => {\n WebExperiments.logInfo(`retrieved web experiments from the server`)\n this._flagToExperiments = new Map<string, WebExperiment>()\n\n webExperiments.forEach((webExperiment) => {\n if (webExperiment.feature_flag_key) {\n if (this._flagToExperiments) {\n WebExperiments.logInfo(\n `setting flag key `,\n webExperiment.feature_flag_key,\n ` to web experiment `,\n webExperiment\n )\n this._flagToExperiments?.set(webExperiment.feature_flag_key, webExperiment)\n }\n\n const selectedVariant = this.instance.getFeatureFlag(webExperiment.feature_flag_key)\n if (isString(selectedVariant) && webExperiment.variants[selectedVariant]) {\n this.applyTransforms(\n webExperiment.name,\n selectedVariant,\n webExperiment.variants[selectedVariant].transforms\n )\n }\n } else if (webExperiment.variants) {\n for (const variant in webExperiment.variants) {\n const testVariant = webExperiment.variants[variant]\n const matchTest = WebExperiments.matchesTestVariant(testVariant)\n if (matchTest) {\n this.applyTransforms(webExperiment.name, variant, testVariant.transforms)\n }\n }\n }\n })\n }, forceReload)\n }\n\n public getWebExperiments(callback: WebExperimentsCallback, forceReload: boolean, previewing?: boolean) {\n if (this.instance.config.disable_web_experiments && !previewing) {\n return callback([])\n }\n\n const existingWebExperiments = this.instance.get_property(WEB_EXPERIMENTS)\n if (existingWebExperiments && !forceReload) {\n return callback(existingWebExperiments)\n }\n\n this.instance._send_request({\n url: this.instance.requestRouter.endpointFor(\n 'api',\n `/api/web_experiments/?token=${this.instance.config.token}`\n ),\n method: 'GET',\n callback: (response) => {\n if (response.statusCode !== 200 || !response.json) {\n return callback([])\n }\n const webExperiments = response.json.experiments || []\n return callback(webExperiments)\n },\n })\n }\n\n private showPreviewWebExperiment(experimentID: number, variant: string, webExperiments: WebExperiment[]) {\n const previewExperiments = webExperiments.filter((exp) => exp.id === experimentID)\n if (previewExperiments && previewExperiments.length > 0) {\n WebExperiments.logInfo(\n `Previewing web experiment [${previewExperiments[0].name}] with variant [${variant}]`\n )\n this.applyTransforms(\n previewExperiments[0].name,\n variant,\n previewExperiments[0].variants[variant].transforms\n )\n }\n }\n private static matchesTestVariant(testVariant: WebExperimentVariant) {\n if (isNullish(testVariant.conditions)) {\n return false\n }\n return WebExperiments.matchUrlConditions(testVariant) && WebExperiments.matchUTMConditions(testVariant)\n }\n\n private static matchUrlConditions(testVariant: WebExperimentVariant): boolean {\n if (isNullish(testVariant.conditions) || isNullish(testVariant.conditions?.url)) {\n return true\n }\n\n const location = WebExperiments.getWindowLocation()\n if (location) {\n const urlCheck = testVariant.conditions?.url\n ? webExperimentUrlValidationMap[testVariant.conditions?.urlMatchType ?? 'icontains'](\n testVariant.conditions.url,\n location\n )\n : true\n return urlCheck\n }\n\n return false\n }\n\n public static getWindowLocation(): Location | undefined {\n return window?.location\n }\n\n private static matchUTMConditions(testVariant: WebExperimentVariant): boolean {\n if (isNullish(testVariant.conditions) || isNullish(testVariant.conditions?.utm)) {\n return true\n }\n const campaignParams = Info.campaignParams()\n if (campaignParams['utm_source']) {\n // eslint-disable-next-line compat/compat\n const utmCampaignMatched = testVariant.conditions?.utm?.utm_campaign\n ? testVariant.conditions?.utm?.utm_campaign == campaignParams['utm_campaign']\n : true\n\n const utmSourceMatched = testVariant.conditions?.utm?.utm_source\n ? testVariant.conditions?.utm?.utm_source == campaignParams['utm_source']\n : true\n\n const utmMediumMatched = testVariant.conditions?.utm?.utm_medium\n ? testVariant.conditions?.utm?.utm_medium == campaignParams['utm_medium']\n : true\n\n const utmTermMatched = testVariant.conditions?.utm?.utm_term\n ? testVariant.conditions?.utm?.utm_term == campaignParams['utm_term']\n : true\n\n return utmCampaignMatched && utmMediumMatched && utmTermMatched && utmSourceMatched\n }\n\n return false\n }\n\n private static logInfo(msg: string, ...args: any[]) {\n logger.info(`[WebExperiments] ${msg}`, args)\n }\n\n private applyTransforms(experiment: string, variant: string, transforms: WebExperimentTransform[]) {\n if (this._is_bot()) {\n WebExperiments.logInfo('Refusing to render web experiment since the viewer is a likely bot')\n return\n }\n\n if (variant === 'control') {\n WebExperiments.logInfo('Control variants leave the page unmodified.')\n return\n }\n\n transforms.forEach((transform) => {\n if (transform.selector) {\n WebExperiments.logInfo(\n `applying transform of variant ${variant} for experiment ${experiment} `,\n transform\n )\n\n // eslint-disable-next-line no-restricted-globals\n const elements = document?.querySelectorAll(transform.selector)\n elements?.forEach((element) => {\n const htmlElement = element as HTMLElement\n if (transform.html) {\n htmlElement.innerHTML = transform.html\n }\n\n if (transform.css) {\n htmlElement.setAttribute('style', transform.css)\n }\n })\n }\n })\n }\n\n _is_bot(): boolean | undefined {\n if (navigator && this.instance) {\n return isLikelyBot(navigator, this.instance.config.custom_blocked_useragents)\n } else {\n return undefined\n }\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "posthog-js",
3
- "version": "1.217.0",
3
+ "version": "1.217.2",
4
4
  "description": "Posthog-js allows you to automatically capture usage and send events to PostHog.",
5
5
  "repository": "https://github.com/PostHog/posthog-js",
6
6
  "author": "hey@posthog.com",