Socket
Socket
Sign inDemoInstall

@uniformdev/context

Package Overview
Dependencies
6
Maintainers
8
Versions
551
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 12.2.1-alpha.143 to 12.2.1-alpha.170

dist/chunk-JKQJOIRC.mjs

4

dist/api/api.js

@@ -1,2 +0,2 @@

var b=Object.defineProperty;var J=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var Q=Object.prototype.hasOwnProperty;var v=(r,e,t)=>e in r?b(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var V=r=>b(r,"__esModule",{value:!0});var $=(r,e)=>{for(var t in e)b(r,t,{get:e[t],enumerable:!0})},H=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of M(e))!Q.call(r,o)&&(t||o!=="default")&&b(r,o,{get:()=>e[o],enumerable:!(i=J(e,o))||i.enumerable});return r};var K=(r=>(e,t)=>r&&r.get(e)||(t=H(V({}),e,1),r&&r.set(e,t),t))(typeof WeakMap!="undefined"?new WeakMap:0);var l=(r,e,t)=>(v(r,typeof e!="symbol"?e+"":e,t),t),q=(r,e,t)=>{if(!e.has(r))throw TypeError("Cannot "+t)};var s=(r,e,t)=>(q(r,e,"read from private field"),t?t.call(r):e.get(r)),a=(r,e,t)=>{if(e.has(r))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(r):e.set(r,t)};var z={};$(z,{AggregateClient:()=>j,ApiClientError:()=>y,ContextClient:()=>L,DimensionClient:()=>U,EnrichmentClient:()=>f,ManifestClient:()=>O,QuirkClient:()=>G,SignalClient:()=>w,nullLimitPolicy:()=>k});var k=async r=>await r(),y=class extends Error{constructor(e,t,i,o,n){super(`${e}
${o}${n?" "+n:""} (${t} ${i})`);this.errorMessage=e;this.fetchMethod=t;this.fetchUri=i;this.statusCode=o;this.statusText=n;Object.setPrototypeOf(this,y.prototype)}};var c=class{constructor(e){l(this,"options");var t,i,o,n,p,h;if(!e.apiKey&&!e.bearerToken)throw new Error("You must provide an API key or a bearer token");this.options={...e,fetch:(t=e.fetch)!=null?t:fetch,apiHost:(i=e.apiHost)!=null?i:"https://uniform.app",apiKey:(o=e.apiKey)!=null?o:null,projectId:(n=e.projectId)!=null?n:null,bearerToken:(p=e.bearerToken)!=null?p:null,limitPolicy:(h=e.limitPolicy)!=null?h:k}}async apiClient(e,t){return this.options.limitPolicy(async()=>{var n;let i=this.options.apiKey?{"x-api-key":this.options.apiKey}:{Authorization:`Bearer ${this.options.bearerToken}`},o=await fetch(e.toString(),{...t,headers:{...t==null?void 0:t.headers,...i}});if(!o.ok){let p="";try{let h=await o.text();try{let C=JSON.parse(h);C.errorMessage?p=Array.isArray(C.errorMessage)?C.errorMessage.join(", "):C.errorMessage:p=h}catch(C){p=h}}catch(h){p="General error"}throw new y(p,(n=t==null?void 0:t.method)!=null?n:"GET",e.toString(),o.status)}return(t==null?void 0:t.expectNoContent)?null:await o.json()})}createUrl(e,t){let i=new URL(`${this.options.apiHost}${e}`);return Object.entries(t!=null?t:{}).forEach(([o,n])=>{var p;typeof n!==void 0&&n!==null&&i.searchParams.append(o,(p=n==null?void 0:n.toString())!=null?p:"")}),i}};var g,E=class extends c{constructor(e){super(e)}async get(e){let{projectId:t}=this.options,i=this.createUrl(s(E,g),{...e,projectId:t});return await this.apiClient(i)}async upsert(e){let t=this.createUrl(s(E,g));await this.apiClient(t,{method:"PUT",body:JSON.stringify({...e,projectId:this.options.projectId}),expectNoContent:!0})}async remove(e){let t=this.createUrl(s(E,g));await this.apiClient(t,{method:"DELETE",body:JSON.stringify({...e,projectId:this.options.projectId}),expectNoContent:!0})}},j=E;g=new WeakMap,a(j,g,"/api/v2/aggregate");var S,D=class extends c{constructor(e){super(e)}async get(e){let{projectId:t}=this.options,i=this.createUrl(s(D,S),{...e,projectId:t});return await this.apiClient(i)}},U=D;S=new WeakMap,a(U,S,"/api/v2/dimension");var P,I,u=class extends c{constructor(e){super(e)}async get(e){let{projectId:t}=this.options,i=this.createUrl(s(u,P),{...e,projectId:t});return await this.apiClient(i)}async upsertCategory(e){let t=this.createUrl(s(u,P));await this.apiClient(t,{method:"PUT",body:JSON.stringify({...e,projectId:this.options.projectId}),expectNoContent:!0})}async removeCategory(e){let t=this.createUrl(s(u,P));await this.apiClient(t,{method:"DELETE",body:JSON.stringify({...e,projectId:this.options.projectId}),expectNoContent:!0})}async upsertValue(e){let t=this.createUrl(s(u,I));await this.apiClient(t,{method:"PUT",body:JSON.stringify({...e,projectId:this.options.projectId}),expectNoContent:!0})}async removeValue(e){let t=this.createUrl(s(u,I));await this.apiClient(t,{method:"DELETE",body:JSON.stringify({...e,projectId:this.options.projectId}),expectNoContent:!0})}},f=u;P=new WeakMap,I=new WeakMap,a(f,P,"/api/v1/enrichments"),a(f,I,"/api/v1/enrichment-values");var N,A=class extends c{constructor(e){super(e)}async get(e){let{projectId:t}=this.options,i=this.createUrl(s(A,N),{...e,projectId:t});return await this.apiClient(i)}},O=A;N=new WeakMap,a(O,N,"/api/v2/manifest");var d,R=class extends c{constructor(e){super(e)}async get(e){let{projectId:t}=this.options,i=this.createUrl(s(R,d),{...e,projectId:t});return await this.apiClient(i)}async upsert(e){let t=this.createUrl(s(R,d));await this.apiClient(t,{method:"PUT",body:JSON.stringify({...e,projectId:this.options.projectId}),expectNoContent:!0})}async remove(e){let t=this.createUrl(s(R,d));await this.apiClient(t,{method:"DELETE",body:JSON.stringify({...e,projectId:this.options.projectId}),expectNoContent:!0})}},G=R;d=new WeakMap,a(G,d,"/api/v2/quirk");var x,T=class extends c{constructor(e){super(e)}async get(e){let{projectId:t}=this.options,i=this.createUrl(s(T,x),{...e,projectId:t});return await this.apiClient(i)}async upsert(e){let t=this.createUrl(s(T,x));await this.apiClient(t,{method:"PUT",body:JSON.stringify({...e,projectId:this.options.projectId}),expectNoContent:!0})}async remove(e){let t=this.createUrl(s(T,x));await this.apiClient(t,{method:"DELETE",body:JSON.stringify({...e,projectId:this.options.projectId}),expectNoContent:!0})}},w=T;x=new WeakMap,a(w,x,"/api/v2/signal");var L=class{constructor(e){l(this,"enrichments");l(this,"aggregates");l(this,"dimensions");l(this,"manifest");l(this,"quirks");l(this,"signals");this.enrichments=new f(e),this.aggregates=new j(e),this.dimensions=new U(e),this.manifest=new O(e),this.quirks=new G(e),this.signals=new w(e)}};module.exports=K(z);0&&(module.exports={AggregateClient,ApiClientError,ContextClient,DimensionClient,EnrichmentClient,ManifestClient,QuirkClient,SignalClient,nullLimitPolicy});
var T=Object.defineProperty;var J=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var Q=Object.prototype.hasOwnProperty;var $=(r,e,t)=>e in r?T(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var v=r=>T(r,"__esModule",{value:!0});var V=(r,e)=>{for(var t in e)T(r,t,{get:e[t],enumerable:!0})},H=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of M(e))!Q.call(r,n)&&(t||n!=="default")&&T(r,n,{get:()=>e[n],enumerable:!(i=J(e,n))||i.enumerable});return r};var K=(r=>(e,t)=>r&&r.get(e)||(t=H(v({}),e,1),r&&r.set(e,t),t))(typeof WeakMap!="undefined"?new WeakMap:0);var m=(r,e,t)=>($(r,typeof e!="symbol"?e+"":e,t),t),q=(r,e,t)=>{if(!e.has(r))throw TypeError("Cannot "+t)};var o=(r,e,t)=>(q(r,e,"read from private field"),t?t.call(r):e.get(r)),a=(r,e,t)=>{if(e.has(r))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(r):e.set(r,t)};var B={};V(B,{AggregateClient:()=>j,ApiClientError:()=>y,ContextClient:()=>L,DimensionClient:()=>U,EnrichmentClient:()=>f,ManifestClient:()=>G,QuirkClient:()=>O,SignalClient:()=>w,computeDimensionDisplayName:()=>z,nullLimitPolicy:()=>N});var N=async r=>await r(),y=class extends Error{constructor(e,t,i,n,s){super(`${e}
${n}${s?" "+s:""} (${t} ${i})`);this.errorMessage=e;this.fetchMethod=t;this.fetchUri=i;this.statusCode=n;this.statusText=s;Object.setPrototypeOf(this,y.prototype)}};var c=class{constructor(e){m(this,"options");var t,i,n,s,p,h;if(!e.apiKey&&!e.bearerToken)throw new Error("You must provide an API key or a bearer token");this.options={...e,fetch:(t=e.fetch)!=null?t:fetch,apiHost:(i=e.apiHost)!=null?i:"https://uniform.app",apiKey:(n=e.apiKey)!=null?n:null,projectId:(s=e.projectId)!=null?s:null,bearerToken:(p=e.bearerToken)!=null?p:null,limitPolicy:(h=e.limitPolicy)!=null?h:N}}async apiClient(e,t){return this.options.limitPolicy(async()=>{var s;let i=this.options.apiKey?{"x-api-key":this.options.apiKey}:{Authorization:`Bearer ${this.options.bearerToken}`},n=await fetch(e.toString(),{...t,headers:{...t==null?void 0:t.headers,...i}});if(!n.ok){let p="";try{let h=await n.text();try{let C=JSON.parse(h);C.errorMessage?p=Array.isArray(C.errorMessage)?C.errorMessage.join(", "):C.errorMessage:p=h}catch(C){p=h}}catch(h){p="General error"}throw new y(p,(s=t==null?void 0:t.method)!=null?s:"GET",e.toString(),n.status)}return(t==null?void 0:t.expectNoContent)?null:await n.json()})}createUrl(e,t){let i=new URL(`${this.options.apiHost}${e}`);return Object.entries(t!=null?t:{}).forEach(([n,s])=>{var p;typeof s!="undefined"&&s!==null&&i.searchParams.append(n,(p=s==null?void 0:s.toString())!=null?p:"")}),i}};var g,E=class extends c{constructor(e){super(e)}async get(e){let{projectId:t}=this.options,i=this.createUrl(o(E,g),{...e,projectId:t});return await this.apiClient(i)}async upsert(e){let t=this.createUrl(o(E,g));await this.apiClient(t,{method:"PUT",body:JSON.stringify({...e,projectId:this.options.projectId}),expectNoContent:!0})}async remove(e){let t=this.createUrl(o(E,g));await this.apiClient(t,{method:"DELETE",body:JSON.stringify({...e,projectId:this.options.projectId}),expectNoContent:!0})}},j=E;g=new WeakMap,a(j,g,"/api/v2/aggregate");var D,k=class extends c{constructor(e){super(e)}async get(e){let{projectId:t}=this.options,i=this.createUrl(o(k,D),{...e,projectId:t});return await this.apiClient(i)}},U=k;D=new WeakMap,a(U,D,"/api/v2/dimension");var P,I,u=class extends c{constructor(e){super(e)}async get(e){let{projectId:t}=this.options,i=this.createUrl(o(u,P),{...e,projectId:t});return await this.apiClient(i)}async upsertCategory(e){let t=this.createUrl(o(u,P));await this.apiClient(t,{method:"PUT",body:JSON.stringify({...e,projectId:this.options.projectId}),expectNoContent:!0})}async removeCategory(e){let t=this.createUrl(o(u,P));await this.apiClient(t,{method:"DELETE",body:JSON.stringify({...e,projectId:this.options.projectId}),expectNoContent:!0})}async upsertValue(e){let t=this.createUrl(o(u,I));await this.apiClient(t,{method:"PUT",body:JSON.stringify({...e,projectId:this.options.projectId}),expectNoContent:!0})}async removeValue(e){let t=this.createUrl(o(u,I));await this.apiClient(t,{method:"DELETE",body:JSON.stringify({...e,projectId:this.options.projectId}),expectNoContent:!0})}},f=u;P=new WeakMap,I=new WeakMap,a(f,P,"/api/v1/enrichments"),a(f,I,"/api/v1/enrichment-values");var S,A=class extends c{constructor(e){super(e)}async get(e){let{projectId:t}=this.options,i=this.createUrl(o(A,S),{...e,projectId:t});return await this.apiClient(i)}},G=A;S=new WeakMap,a(G,S,"/api/v2/manifest");var d,R=class extends c{constructor(e){super(e)}async get(e){let{projectId:t}=this.options,i=this.createUrl(o(R,d),{...e,projectId:t});return await this.apiClient(i)}async upsert(e){let t=this.createUrl(o(R,d));await this.apiClient(t,{method:"PUT",body:JSON.stringify({...e,projectId:this.options.projectId}),expectNoContent:!0})}async remove(e){let t=this.createUrl(o(R,d));await this.apiClient(t,{method:"DELETE",body:JSON.stringify({...e,projectId:this.options.projectId}),expectNoContent:!0})}},O=R;d=new WeakMap,a(O,d,"/api/v2/quirk");var x,b=class extends c{constructor(e){super(e)}async get(e){let{projectId:t}=this.options,i=this.createUrl(o(b,x),{...e,projectId:t});return await this.apiClient(i)}async upsert(e){let t=this.createUrl(o(b,x));await this.apiClient(t,{method:"PUT",body:JSON.stringify({...e,projectId:this.options.projectId}),expectNoContent:!0})}async remove(e){let t=this.createUrl(o(b,x));await this.apiClient(t,{method:"DELETE",body:JSON.stringify({...e,projectId:this.options.projectId}),expectNoContent:!0})}},w=b;x=new WeakMap,a(w,x,"/api/v2/signal");var L=class{constructor(e){m(this,"enrichments");m(this,"aggregates");m(this,"dimensions");m(this,"manifest");m(this,"quirks");m(this,"signals");this.enrichments=new f(e),this.aggregates=new j(e),this.dimensions=new U(e),this.manifest=new G(e),this.quirks=new O(e),this.signals=new w(e)}};function z(r){return`${r.category==="ENR"?r.subcategory:r.category==="SIG"?"Signal":r.subcategory==="1"?"Intent":"Audience"}: ${r.name}`}module.exports=K(B);0&&(module.exports={AggregateClient,ApiClientError,ContextClient,DimensionClient,EnrichmentClient,ManifestClient,QuirkClient,SignalClient,computeDimensionDisplayName,nullLimitPolicy});

@@ -113,3 +113,10 @@ import { c as components, e as external } from './v2-manifest.swagger-d0899723';

};
declare type ServerToClientTransitionState = Pick<Partial<VisitorData>, 'quirks' | 'tests'>;
declare type ServerToClientTransitionState = Pick<Partial<VisitorData>, 'quirks' | 'tests'> & {
/**
* Server Score Vector - the resultant scores _on the server side_ after the server/edge render completes
* Note that the client side does not trust these scores; they are only used until it's done with initial
* recomputation.
*/
ssv?: ScoreVector;
};
declare const SERVER_STATE_ID = "__UNIFORM_DATA__";

@@ -247,2 +254,228 @@ declare type TransitionDataStoreEvents = {

/**
* Creates a new log drain that will log to the console.
* The log drain will only log event IDs, but is much smaller than the
* debug log drain.
*
* NOTE: you probably want enableConsoleLogDrain() instead of this function.
*/
declare function createConsoleLogDrain(level: OutputSeverity): LogDrain;
/**
* Enables logging Context events to the browser console.
* Lightweight events with only the event ID are emitted.
*/
declare function enableConsoleLogDrain(level: OutputSeverity): ContextPlugin;
/** Defines all error codes and their parameter(s) */
declare type LogMessages = {
/** Context constructed */
1: MessageFunc;
/** Context received data update */
2: MessageFunc<Partial<Omit<ContextState, 'url'> & {
url: string;
}>>;
/** Context emitted new score vector */
3: MessageFunc<ScoreVector>;
/** Context emitted updated quirks */
4: MessageFunc<Quirks>;
/** Storage received update commands */
101: MessageFunc<StorageCommands[]>;
/** Storage data was updated */
102: MessageFunc<VisitorData>;
/** Storage data was deleted bool: fromAllDevices */
103: MessageFunc<boolean>;
/** Storage score was truncated to its cap */
110: MessageFunc<{
dim: string;
score: number;
cap: number;
}>;
/** Storage visitor data expired and was cleared */
120: MessageFunc;
/** Server to client transition score data was loaded */
130: MessageFunc<ScoreVector>;
/** Placement does not have a name */
301: MessageFunc;
/** Test did not exist */
401: MessageFunc<string>;
/** Previously shown test variant no longer in variant data */
402: MessageFunc<{
test: string;
variant: string;
}>;
/** gtag was not present on the page to emit events to */
700: MessageFunc;
/** Enabled gtag event signal redirection */
701: MessageFunc;
};
declare type Severity = 'debug' | 'info' | 'warn' | 'error';
declare type OutputSeverity = Severity | 'none';
declare type MessageFunc<TArg = void> = (arg: TArg) => [string, string, ...any];
declare type LogMessage<TID extends keyof LogMessages = keyof LogMessages> = [
severity: Severity,
id: TID,
...args: Parameters<LogMessages[TID]>
];
declare type LogDrain = (message: LogMessage) => void;
/**
* Creates a new log drain that will log full debug messages to the console.
* The debug log drain adds significant bundle size, but is useful for debugging.
*
* NOTE: you probably want enableDebugConsoleLogDrain() instead of this function.
*/
declare function createDebugConsoleLogDrain(level: OutputSeverity): LogDrain;
/**
* Enables logging Context events to the browser console.
* Lightweight events with only the event ID are emitted.
*/
declare function enableDebugConsoleLogDrain(level: OutputSeverity): ContextPlugin;
declare type VisitorDataStoreOptions = {
/** Transition storage used to transfer server or edge side execution state to the client. Unused for client side only. */
transitionStore?: TransitionDataStore;
/** Duration of a 'visit' measured by this number of milliseconds without performing any updates */
visitLifespan?: number;
/** Personalization manifest data. If set, the data store will automatically apply score caps in the manifest data. */
manifest?: ManifestInstance;
/** Allows decaying of scores over time based on time between visits. Default: no decay */
decay?: DecayFunction;
/**
* Sets the default value of storage consent for new unknown visitors.
* If storage consent is not given, only in-memory data will be stored which is lost when the browser leaves the page.
* @default false - consent is not given for new visitors until they explicitly give it with an update command
*/
defaultConsent?: boolean;
/**
* Function called when server-to-client transfer state is loaded and contains server-side computed scores.
* These scores are used as a temporary shim for the current scores on the client side, until score computation
* is completed the first time (which occurs when the current url is fed into the Context).
*
* Because the feed of the URL may be marginally delayed (for example in React it's in an effect so it's a second render),
* one render might be done with _no_ scores unless we dropped the server scores in temporarily, resulting in a flash of unpersonalized content.
*/
onServerTransitionScoresReceived?: (ssv: ScoreVector) => void;
/** Called when a log message is emitted from the data store */
onLogMessage?: (message: LogMessage) => void;
};
declare type VisitorDataStoreEvents = {
/**
* Fired when the stored data is updated.
* This is fired for any update, whether from integrated or transition storage.
* The event is NOT fired if an update does not result in any score changes.
*/
scoresUpdated: Pick<VisitorData, 'scores' | 'sessionScores'>;
/**
* Fired when stored quirks are updated.
* This is fired for any update, whether from integrated or transition storage.
* The event is NOT fired if an update does not result in any quirk changes.
*/
quirksUpdated: Pick<VisitorData, 'quirks'>;
/**
* Fired when test variant selection is updated.
*/
testsUpdated: Pick<VisitorData, 'tests'>;
/**
* Fired when storage consent is changed
*/
consentUpdated: Pick<VisitorData, 'consent'>;
/**
* Fired when visitor control group membership is changed
*/
controlGroupUpdated: Pick<VisitorData, 'controlGroup'>;
};
declare class VisitorDataStore {
#private;
constructor(options: VisitorDataStoreOptions);
/** Gets the current visitor data. This property is always up to date. */
get data(): VisitorData;
get decayEnabled(): boolean;
/**
* Subscribe to events from storage
*/
readonly events: {
on: {
<Key extends keyof VisitorDataStoreEvents>(type: Key, handler: mitt.Handler<VisitorDataStoreEvents[Key]>): void;
(type: "*", handler: mitt.WildcardHandler<VisitorDataStoreEvents>): void;
};
off: {
<Key_1 extends keyof VisitorDataStoreEvents>(type: Key_1, handler?: mitt.Handler<VisitorDataStoreEvents[Key_1]> | undefined): void;
(type: "*", handler: mitt.WildcardHandler<VisitorDataStoreEvents>): void;
};
};
/** Push data update command(s) into the visitor data */
updateData(commands: StorageCommands[]): Promise<void>;
/**
* Deletes visitor data (forgetting them)
* In most cases you should use forget() on the Context instead of this function, which also clears the Context state.
* @param fromAllDevices for an identified user, whether to delete all their data (for the entire account) - true, or data for this device (sign out) - false
*/
delete(fromAllDevices: boolean): Promise<void>;
}
declare class ManifestInstance {
#private;
readonly data: ManifestV2;
constructor({ manifest, evaluator, }: {
manifest: ManifestV2;
evaluator?: GroupCriteriaEvaluator;
});
rollForControlGroup(): boolean;
getTest(name: string): TestDefinition | undefined;
computeSignals(update: ContextStateUpdate): StorageCommands[];
/**
* Computes aggregated scores based on other dimensions
*/
computeAggregateDimensions(primitiveScores: ScoreVector): ScoreVector;
getDimensionByKey(scoreKey: string): EnrichmentCategory | Signal | undefined;
}
declare type SharedTypes = external['uniform-context-types.swagger.yml']['components']['schemas'];
declare type ManifestV2 = components['schemas']['ManifestV2'];
declare type PersonalizationManifest = components['schemas']['PersonalizationManifest'];
declare type Signal = SharedTypes['Signal'];
declare type SignalCriteriaGroup = SharedTypes['SignalCriteriaGroup'];
declare type SignalCriteria = SharedTypes['SignalCriteria'];
declare type EnrichmentCategory = SharedTypes['EnrichmentCategory'];
declare type StringMatch = SharedTypes['StringMatch'];
declare type NumberMatch = SharedTypes['NumberMatch'];
declare type TestDefinition = SharedTypes['Test'];
declare type AggregateDimension = SharedTypes['AggregateDimension'];
declare type AggregateDimensionInput = SharedTypes['AggregateDimensionInput'];
declare const cookieEvaluator: CriteriaEvaluator;
declare const pageViewCountDimension: string;
declare const pageViewCountEvaluator: CriteriaEvaluator;
declare const queryStringEvaluator: CriteriaEvaluator;
declare const quirkEvaluator: CriteriaEvaluator;
declare const eventEvaluator: CriteriaEvaluator;
declare const pageVisitedEvaluator: CriteriaEvaluator;
/**
* A type that evaluates a signal criteria type and
* decides if it matches the current Context state or not.
* @returns {boolean} - true for a match, false for no match
* */
declare type CriteriaEvaluator = (update: ContextStateUpdate, criteria: SignalCriteria, commands: StorageCommands[], signal: Signal, dimension: string) => boolean;
declare class GroupCriteriaEvaluator {
#private;
constructor(criteriaEvaluators: Record<string, CriteriaEvaluator>);
evaluate(update: ContextStateUpdate, crit: SignalCriteriaGroup, commands: StorageCommands[], signal: Signal, dimension: string): boolean;
}
/** Tests if a StringMatch matches a string value */
declare function isStringMatch(lhs: string | null | undefined, match: StringMatch): boolean;
/** Computes aggregated scores based on other dimensions */
declare function computeAggregateDimensions(primitiveScores: ScoreVector, aggregates: Record<string, AggregateDimension>): ScoreVector;
declare function getEnrichmentVectorKey(category: string, value: string): string;
/** Content that is tagged for adding enrichment score when triggered by behavior (i.e. being shown that content) */

@@ -386,5 +619,23 @@ declare type BehaviorTag = {

/**
* Defines a plugin for Uniform Context.
* The plugin should attach event handlers in its creation function.
* @returns A function that detaches any event handlers when called
*/
declare type ContextPlugin = {
logDrain?: LogDrain;
init?: (context: Context) => () => void;
};
declare type ContextOptions = {
/** The Context Manifest to load (from the Context API) */
manifest: ManifestV2;
} & Omit<VisitorDataStoreOptions, 'manifest'>;
/**
* Context plugins to load at initialize time.
* Plugins that hook to the log event should be added here so that they can catch init-time log message events.
*
* Note that the Context passed to the plugin is not yet fully initialized, and is intended for event handler attachment
* only - don't call scores, update, etc on it. If you need to call these methods immediately, attach your plugin after initialisation.
*/
plugins?: Array<ContextPlugin>;
} & Omit<VisitorDataStoreOptions, 'manifest' | 'onServerTransitionScoresReceived'>;
declare type PersonalizationEvent = {

@@ -412,3 +663,7 @@ name: string;

quirksUpdated: Quirks;
/** Fired when a log message is emitted from Context */
/**
* Fired when a log message is emitted from Context
* Note that event handlers attached to this event will not catch events
* logged during initialisation of the Context unless they are attached as plugins to the constructor.
*/
log: LogMessage;

@@ -422,2 +677,3 @@ /** Test variant has been selected */

#private;
readonly manifest: ManifestInstance;
constructor(options: ContextOptions);

@@ -458,179 +714,2 @@ get scores(): Readonly<ScoreVector>;

/** Defines all error codes and their parameter(s) */
declare type LogMessages = {
/** Context constructed */
1: MessageFunc<{
options: ContextOptions;
scores: ScoreVector;
}>;
/** Context received data update */
2: MessageFunc<Partial<ContextState>>;
/** Context emitted new score vector */
3: MessageFunc<ScoreVector>;
/** Context emitted updated quirks */
4: MessageFunc<Quirks>;
/** Storage received update commands */
101: MessageFunc<StorageCommands[]>;
/** Storage data was updated */
102: MessageFunc<VisitorData>;
/** Storage data was deleted bool: fromAllDevices */
103: MessageFunc<boolean>;
/** Storage score was truncated to its cap */
110: MessageFunc<{
dim: string;
score: number;
cap: number;
}>;
/** Storage visitor data expired and was cleared */
120: MessageFunc;
/** Placement does not have a name */
301: MessageFunc;
/** Test did not exist */
401: MessageFunc<string>;
/** Previously shown test variant no longer in variant data */
402: MessageFunc<{
test: string;
variant: string;
}>;
/** gtag was not present on the page to emit events to */
700: MessageFunc;
/** Enabled gtag event signal redirection */
701: MessageFunc;
};
declare type Severity = 'debug' | 'info' | 'warn' | 'error';
declare type MessageFunc<TArg = void> = (arg: TArg) => [string, string, ...any];
declare type LogMessage<TID extends keyof LogMessages = keyof LogMessages> = [
severity: Severity,
id: TID,
...args: Parameters<LogMessages[TID]>
];
declare type LogDrain = (message: LogMessage) => void;
declare const consoleLogDrain: LogDrain;
declare const debugConsoleLogDrain: LogDrain;
declare type VisitorDataStoreOptions = {
/** Transition storage used to transfer server or edge side execution state to the client. Unused for client side only. */
transitionStore?: TransitionDataStore;
/** Duration of a 'visit' measured by this number of milliseconds without performing any updates */
visitLifespan?: number;
/** Personalization manifest data. If set, the data store will automatically apply score caps in the manifest data. */
manifest?: ManifestInstance;
/** Allows decaying of scores over time based on time between visits. Default: no decay */
decay?: DecayFunction;
/**
* Sets the default value of storage consent for new unknown visitors.
* If storage consent is not given, only in-memory data will be stored which is lost when the browser leaves the page.
* @default false - consent is not given for new visitors until they explicitly give it with an update command
*/
defaultConsent?: boolean;
};
declare type VisitorDataStoreEvents = {
/**
* Fired when the stored data is updated.
* This is fired for any update, whether from integrated or transition storage.
* The event is NOT fired if an update does not result in any score changes.
*/
scoresUpdated: Pick<VisitorData, 'scores' | 'sessionScores'>;
/**
* Fired when stored quirks are updated.
* This is fired for any update, whether from integrated or transition storage.
* The event is NOT fired if an update does not result in any quirk changes.
*/
quirksUpdated: Pick<VisitorData, 'quirks'>;
/** Fired when a log message is emitted from the data store */
log: LogMessage;
};
declare class VisitorDataStore {
#private;
constructor(options: VisitorDataStoreOptions);
/** Gets the current visitor data. This property is always up to date. */
get data(): VisitorData;
/**
* Subscribe to events from storage
*/
readonly events: {
on: {
<Key extends keyof VisitorDataStoreEvents>(type: Key, handler: mitt.Handler<VisitorDataStoreEvents[Key]>): void;
(type: "*", handler: mitt.WildcardHandler<VisitorDataStoreEvents>): void;
};
off: {
<Key_1 extends keyof VisitorDataStoreEvents>(type: Key_1, handler?: mitt.Handler<VisitorDataStoreEvents[Key_1]> | undefined): void;
(type: "*", handler: mitt.WildcardHandler<VisitorDataStoreEvents>): void;
};
};
/** Push data update command(s) into the visitor data */
updateData(commands: StorageCommands[]): Promise<void>;
/**
* Deletes visitor data (forgetting them)
* In most cases you should use forget() on the Context instead of this function, which also clears the Context state.
* @param fromAllDevices for an identified user, whether to delete all their data (for the entire account) - true, or data for this device (sign out) - false
*/
delete(fromAllDevices: boolean): Promise<void>;
}
declare class ManifestInstance {
#private;
constructor({ manifest, evaluator, }: {
manifest: ManifestV2;
evaluator?: GroupCriteriaEvaluator;
});
rollForControlGroup(): boolean;
getTest(name: string): TestDefinition | undefined;
computeSignals(update: ContextStateUpdate): StorageCommands[];
/**
* Computes aggregated scores based on other dimensions
*/
computeAggregateDimensions(primitiveScores: ScoreVector): ScoreVector;
getDimensionByKey(scoreKey: string): EnrichmentCategory | Signal | undefined;
static getEnrichmentVectorKey(category: string, value: string): string;
}
declare type SharedTypes = external['uniform-context-types.swagger.yml']['components']['schemas'];
declare type ManifestV2 = components['schemas']['ManifestV2'];
declare type PersonalizationManifest = components['schemas']['PersonalizationManifest'];
declare type Signal = SharedTypes['Signal'];
declare type SignalCriteriaGroup = SharedTypes['SignalCriteriaGroup'];
declare type SignalCriteria = SharedTypes['SignalCriteria'];
declare type EnrichmentCategory = SharedTypes['EnrichmentCategory'];
declare type StringMatch = SharedTypes['StringMatch'];
declare type NumberMatch = SharedTypes['NumberMatch'];
declare type TestDefinition = SharedTypes['Test'];
declare type AggregateDimension = SharedTypes['AggregateDimension'];
declare type AggregateDimensionInput = SharedTypes['AggregateDimensionInput'];
declare const cookieEvaluator: CriteriaEvaluator;
declare const pageViewCountDimension: string;
declare const pageViewCountEvaluator: CriteriaEvaluator;
declare const queryStringEvaluator: CriteriaEvaluator;
declare const quirkEvaluator: CriteriaEvaluator;
declare const eventEvaluator: CriteriaEvaluator;
declare const pageVisitedEvaluator: CriteriaEvaluator;
/**
* A type that evaluates a signal criteria type and
* decides if it matches the current Context state or not.
* @returns {boolean} - true for a match, false for no match
* */
declare type CriteriaEvaluator = (update: ContextStateUpdate, criteria: SignalCriteria, commands: StorageCommands[], signal: Signal, dimension: string) => boolean;
declare class GroupCriteriaEvaluator {
#private;
constructor(criteriaEvaluators: Record<string, CriteriaEvaluator>);
evaluate(update: ContextStateUpdate, crit: SignalCriteriaGroup, commands: StorageCommands[], signal: Signal, dimension: string): boolean;
}
/** Tests if a StringMatch matches a string value */
declare function isStringMatch(lhs: string | null | undefined, match: StringMatch): boolean;
/** Computes aggregated scores based on other dimensions */
declare function computeAggregateDimensions(primitiveScores: ScoreVector, aggregates: Record<string, AggregateDimension>): ScoreVector;
declare enum ScriptType {

@@ -653,2 +732,74 @@ ListStart = "nesi-list-start",

export { AggregateDimension, AggregateDimensionInput, BehaviorTag, Context, ContextEvents, ContextOptions, ContextState, ContextStateUpdate, CookieAdapter, CookieTransitionDataStore, CookieTransitionDataStoreOptions, CriteriaEvaluator, DecayFunction, DecayOptions, DimensionMatch, EdgeNodeTagName, EdgePersonalizeComponentOptions, EdgeTestComponentOptions, EdgeTransitionDataStore, EdgeTransitionDataStoreOptions, EnrichmentCategory, EnrichmentData, EventData, GroupCriteriaEvaluator, IdentifyCommand, LinearDecayOptions, LogDrain, LogMessage, LogMessages, ManifestInstance, ManifestV2, MessageFunc, ModifyScoreCommand, ModifySessionScoreCommand, NumberMatch, PersonalizationEvent, PersonalizationManifest, PersonalizeOptions, PersonalizedResult, PersonalizedVariant, Quirks, SERVER_STATE_ID, ScoreVector, ScriptType, ServerToClientTransitionState, SetConsentCommand, SetQuirkCommand, SetTestCommand, Severity, Signal, SignalCriteria, SignalCriteriaGroup, StorageCommand, StorageCommands, StringMatch, TaggedContent, TestDefinition, TestEvent, TestOptions, TestResult, TestVariant, Tests, TransitionDataStore, TransitionDataStoreEvents, TransitionDataStoreOptions, VariantMatchCriteria, VisitorData, VisitorDataStore, VisitorDataStoreEvents, VisitorDataStoreOptions, computeAggregateDimensions, consoleLogDrain, cookieEvaluator, createLinearDecay, debugConsoleLogDrain, emptyVisitorData, evaluateVariantMatch, eventEvaluator, isStringMatch, pageViewCountDimension, pageViewCountEvaluator, pageVisitedEvaluator, personalizeVariations, queryStringEvaluator, quirkEvaluator, testVariations };
/**
* The version of the DevTools UI to load when in Chromium extension context.
* 1: Uniform Optimize.
* 2: Uniform Context.
*/
declare type DevToolsUiVersion = 1 | 2;
/**
* The data state provided to the devtools for rendering.
*/
declare type DevToolsState = {
/** Current computed visitor scores (includes aggregates) */
scores: Readonly<ScoreVector>;
/** Current visitor data (includes quirks, raw scores, tests, consent, etc) */
data: Readonly<VisitorData>;
/** Personalization events that have fired since devtools started */
personalizations: Array<PersonalizationEvent>;
/** Test events that have fired since devtools started */
tests: Array<TestEvent>;
/** The Context manifest */
manifest: ManifestV2;
};
/** Mutations the DevTools can take on the data it receives */
declare type DevToolsActions = {
/** Standard updates; maps to Context.update() */
update: (newData: Partial<ContextState>) => Promise<void>;
/** Raw updates to the storage subsystem. Maps to Context.storage.updateData() */
rawUpdate: (commands: StorageCommands[]) => Promise<void>;
/** Forget the current visitor and clear data on this device */
forget: () => Promise<void>;
};
declare type DevToolsEvent<Type extends string = string, TEventData = unknown> = {
/** The integration ID that is required */
type: Type;
} & TEventData;
declare type DevToolsEvents = DevToolsLogEvent | DevToolsDataEvent | DevToolsHelloEvent | DevToolsUpdateEvent | DevToolsRawCommandsEvent | DevToolsForgetEvent;
/** A log message emitted as an event to the browser extension */
declare type DevToolsLogEvent = DevToolsEvent<'uniform:context:log', {
message: LogMessage;
}>;
/** Emitted when data is updated in Context to the devtools */
declare type DevToolsDataEvent = DevToolsEvent<'uniform:context:data', {
data: DevToolsState;
}>;
/** A hello message emitted as an event from the browser extension to test if the page contains Context */
declare type DevToolsHelloEvent = DevToolsEvent<'uniform:context:hello', {
uiVersion: DevToolsUiVersion;
}>;
/** Devtools requests a normal update cycle (regular data update, re-eval signals, etc) */
declare type DevToolsUpdateEvent = DevToolsEvent<'uniform-in:context:update', {
newData: Partial<ContextState>;
}>;
/** Devtools requests a raw update cycle (explicitly set scores of dimensions in durations, etc) */
declare type DevToolsRawCommandsEvent = DevToolsEvent<'uniform-in:context:commands', {
commands: StorageCommands[];
}>;
/** A request to forget me from the DevTools */
declare type DevToolsForgetEvent = DevToolsEvent<'uniform-in:context:forget', unknown>;
declare global {
interface Window {
/** Window var set by enableContextDevTools() to enable embedded devtools to receive Context instance and attach events to it. */
__UNIFORM_DEVTOOLS_CONTEXT_INSTANCE__?: Context;
}
}
/**
* Enables a Context instance to feed data to the Uniform Context DevTools.
* DevTools can be hosted either as a Chromium extension, or as a standalone
* React app within a page and receive data once this plugin has been activated.
* @returns Function that when invoked detaches the event listeners and disables DevTools.
*/
declare function enableContextDevTools(): ContextPlugin;
export { AggregateDimension, AggregateDimensionInput, BehaviorTag, Context, ContextEvents, ContextOptions, ContextPlugin, ContextState, ContextStateUpdate, CookieAdapter, CookieTransitionDataStore, CookieTransitionDataStoreOptions, CriteriaEvaluator, DecayFunction, DecayOptions, DevToolsActions, DevToolsDataEvent, DevToolsEvent, DevToolsEvents, DevToolsForgetEvent, DevToolsHelloEvent, DevToolsLogEvent, DevToolsRawCommandsEvent, DevToolsState, DevToolsUiVersion, DevToolsUpdateEvent, DimensionMatch, EdgeNodeTagName, EdgePersonalizeComponentOptions, EdgeTestComponentOptions, EdgeTransitionDataStore, EdgeTransitionDataStoreOptions, EnrichmentCategory, EnrichmentData, EventData, GroupCriteriaEvaluator, IdentifyCommand, LinearDecayOptions, LogDrain, LogMessage, LogMessages, ManifestInstance, ManifestV2, MessageFunc, ModifyScoreCommand, ModifySessionScoreCommand, NumberMatch, OutputSeverity, PersonalizationEvent, PersonalizationManifest, PersonalizeOptions, PersonalizedResult, PersonalizedVariant, Quirks, SERVER_STATE_ID, ScoreVector, ScriptType, ServerToClientTransitionState, SetConsentCommand, SetQuirkCommand, SetTestCommand, Severity, Signal, SignalCriteria, SignalCriteriaGroup, StorageCommand, StorageCommands, StringMatch, TaggedContent, TestDefinition, TestEvent, TestOptions, TestResult, TestVariant, Tests, TransitionDataStore, TransitionDataStoreEvents, TransitionDataStoreOptions, VariantMatchCriteria, VisitorData, VisitorDataStore, VisitorDataStoreEvents, VisitorDataStoreOptions, computeAggregateDimensions, cookieEvaluator, createConsoleLogDrain, createDebugConsoleLogDrain, createLinearDecay, emptyVisitorData, enableConsoleLogDrain, enableContextDevTools, enableDebugConsoleLogDrain, evaluateVariantMatch, eventEvaluator, getEnrichmentVectorKey, isStringMatch, pageViewCountDimension, pageViewCountEvaluator, pageVisitedEvaluator, personalizeVariations, queryStringEvaluator, quirkEvaluator, testVariations };

@@ -1,3 +0,3 @@

import{b as y,c as s,d as u,e as m,f as h}from"./chunk-TRWANXVF.mjs";function nt(i,t){let e={...i};for(let r in t){let o=at(i,r,t,new Set([r]));o!==0&&(e[r]=o)}return e}function at(i,t,e,r){var n;let o=0;for(let a of e[t].inputs){let c=(n=i[a.dim])!=null?n:0;if(!c&&e[a.dim]){if(r.has(a.dim))continue;let f=new Set(r);f.add(a.dim),c=at(i,a.dim,e,f)}if(c!==0)if(a.sign==="c"){o=0;break}else a.sign==="-"?o-=c:o+=c}return o}var A,k,X=class{constructor(t,e,r){u(this,A,void 0);u(this,k,void 0);y(this,"signal");m(this,k,t),this.signal=e,m(this,A,r)}computeSignals(t,e){if(t.scores[s(this,k)]>=this.signal.cap&&this.signal.dur!=="t")return;let o=s(this,A).evaluate(t,this.signal.crit,e,this.signal,s(this,k)),n=this.signal.dur==="s"||this.signal.dur==="t"?"modscoreS":"modscore";if(o)e.push({type:n,data:{dimension:s(this,k),delta:this.signal.str}});else if(this.signal.dur==="t"){let a=t.visitor.sessionScores[s(this,k)];a&&e.push({type:n,data:{dimension:s(this,k),delta:-a}})}}};A=new WeakMap,k=new WeakMap;var ct="_",C,$,R=class{constructor({manifest:t,evaluator:e=new N({})}){u(this,C,void 0);u(this,$,void 0);var r,o,n;m(this,C,(r=t.project)!=null?r:{}),m(this,$,Object.entries((n=(o=s(this,C).pz)==null?void 0:o.sig)!=null?n:[]).map(([a,c])=>new X(a,c,e)))}rollForControlGroup(){var t,e;return Math.random()<((e=(t=s(this,C).pz)==null?void 0:t.control)!=null?e:0)}getTest(t){var e;return(e=s(this,C).test)==null?void 0:e[t]}computeSignals(t){let e=[];return s(this,$).forEach(r=>{r.computeSignals(t,e)}),e}computeAggregateDimensions(t){var e,r;return nt(t,(r=(e=s(this,C).pz)==null?void 0:e.agg)!=null?r:{})}getDimensionByKey(t){var r,o,n,a;let e=t.indexOf(ct);return e<=0?(o=(r=s(this,C).pz)==null?void 0:r.sig)==null?void 0:o[t]:(a=(n=s(this,C).pz)==null?void 0:n.enr)==null?void 0:a[t.substring(0,e)]}static getEnrichmentVectorKey(t,e){return`${t}${ct}${e}`}};C=new WeakMap,$=new WeakMap;var ut=(i,t)=>{var o;if(t.type!=="CK")return!1;let e=(o=i.state.cookies)==null?void 0:o[t.cookieName];return x(e,t.match)};function dt(i,t){var r;if(typeof i=="undefined"||i===null)return!1;let e=Number(i);if(isNaN(e))return!1;switch((r=t==null?void 0:t.op)!=null?r:"="){case"=":return e===t.rhs;case"!=":return e!==t.rhs;case">":return e>t.rhs;case"<":return e<t.rhs;default:return console.warn(`Unknown match type ${t.op} is false.`),!1}}var Z=R.getEnrichmentVectorKey("$pvc","v"),lt=(i,t,e)=>{var a,c;if(t.type!=="PVC")return!1;let r=!i.previousState||((a=i.state.url)==null?void 0:a.toString())!==((c=i.previousState.url)==null?void 0:c.toString()),n=(i.visitor.sessionScores[Z]||0)+1;if(dt(n,t.match)){let d=e.some(f=>f.type==="modscoreS"&&f.data.dimension===Z);return r&&!d&&e.push({type:"modscoreS",data:{dimension:Z,delta:1}}),!0}return!1};var pt=(i,t)=>{var r;if(t.type!=="QS")return!1;let e=(r=i.state.url)==null?void 0:r.searchParams.get(t.queryName);return x(e,t.match)};var mt=(i,t,e,r,o)=>{if(t.type!=="QK")return!1;if(typeof window=="undefined"&&r.dur==="t"&&i.scores[o]>0)return!0;let n=i.visitor.quirks[t.key];return x(n,t.match)};var ft=(i,t)=>{var e,r;return t.type!=="EVT"?!1:(r=(e=i.state.events)==null?void 0:e.some(o=>x(o.event,t.event)))!=null?r:!1};var gt=(i,t)=>{var e;return t.type!=="PV"?!1:x((e=i.state.url)==null?void 0:e.pathname,t.path)};var G,N=class{constructor(t){u(this,G,void 0);m(this,G,t)}evaluate(t,e,r,o,n){let a=!(e.op==="&"||!e.op);for(let c of e.clauses){let d;if(c.type==="G")d=this.evaluate(t,c,r,o,n);else{let f=s(this,G)[c.type];if(!f)throw new Error(`${c.type} signal criteria not registered`);d=f(t,c,r,o,n)}if(d===a)return a}return!a}};G=new WeakMap;function x(i,t){var a,c,d,f;let e=(a=t==null?void 0:t.op)!=null?a:"=";if(t.op==="*")return i!==null&&typeof i!="undefined";if(t.op==="!*")return i===null||typeof i=="undefined";if(!("rhs"in t))throw new Error(`Match expression is required for match type ${e}`);let r=(c=t.cs)!=null?c:!1,o=r?i!=null?i:"":ht(i),n=r?t.rhs:ht(t.rhs);switch(e){case"=":return o===n;case"!=":return o!==n;case"~":return(d=o.includes(n))!=null?d:!1;case"!~":return!((f=o.includes(n))!=null?f:!0);case"//":return new RegExp(t.rhs,r?"":"i").test(i!=null?i:"");case"!//":return!new RegExp(t.rhs,r?"":"i").test(i!=null?i:"");default:throw new Error(`Unknown match type ${e}.`)}}function ht(i){var t;return(t=i==null?void 0:i.toUpperCase())!=null?t:""}var K=()=>({quirks:{},scores:{},sessionScores:{},tests:{},consent:!1,controlGroup:!1});import Ot from"mitt";import{dequal as Ut}from"dequal/lite";var It="__UNIFORM_DATA__",T,q,j=class{constructor({initialData:t}){u(this,T,void 0);u(this,q,Ot());y(this,"events",{on:s(this,q).on,off:s(this,q).off});t&&m(this,T,t)}get data(){return s(this,T)}updateData(t,e){return m(this,T,e),this.handleUpdateData(t,e)}async delete(t){m(this,T,void 0),await this.handleDelete(t)}signalAsyncDataUpdate(t){Ut(this.data,t)||(m(this,T,t),s(this,q).emit("dataUpdatedAsync",t))}getClientTransitionState(){if(typeof document=="undefined")return;let t=document.getElementById(It);return(t==null?void 0:t.textContent)?JSON.parse(t.textContent):void 0}};T=new WeakMap,q=new WeakMap;import{ntob as Rt,bton as qt}from"number-to-base64";var St=typeof window=="undefined",O,U,Lt=class extends j{constructor({cookieAdapter:t,cookieName:e="ufvd"}){super({initialData:St?zt(t.get(e)):void 0});u(this,O,void 0);u(this,U,void 0);m(this,O,e),m(this,U,t)}handleDelete(){return s(this,U).remove(s(this,O)),Promise.resolve()}async handleUpdateData(t,e){St||(e.consent?s(this,U).set(s(this,O),At(e)):s(this,U).remove(s(this,O)))}};O=new WeakMap,U=new WeakMap;var yt="~",vt="!",Dt="-";function zt(i){if(!i)return;let t=i.split(yt);if(t.length>3)return;let[e,r,o]=t;return{consent:!0,sessionScores:Vt(tt(r)),scores:Vt(tt(o)),tests:tt(e)}}function tt(i){return i.split(vt).map(e=>e.split(Dt)).reduce((e,r)=>(r.length!==2||(e[r[0]]=r[1]),e),{})}function Vt(i){return Object.entries(i).reduce((t,[e,r])=>(t[e]=qt(r),t),{})}function At(i){return[et(i.tests),et(Ct(i.sessionScores)),et(Ct(i.scores))].join(yt)}function Ct(i){return Object.entries(i).reduce((t,[e,r])=>(t[e]=Rt(r),t),{})}function et(i){return Object.entries(i).map(t=>t.join(Dt)).join(vt)}var J,Nt,$t=class extends j{constructor({cookieAdapter:t,visitorIdCookieName:e="ufvi",...r}){super(r);u(this,J);r.initialData||h(this,J,Nt).call(this).catch(o=>{console.error(o)})}handleDelete(t){throw new Error("Method not implemented.")}async handleUpdateData(t){let e=await new Promise(r=>{setTimeout(()=>{r(void 0)},2e3)});e&&this.signalAsyncDataUpdate(e)}};J=new WeakSet,Nt=async function(){let t=await new Promise(e=>{setTimeout(()=>{e(void 0)},2e3)});t&&this.signalAsyncDataUpdate(t)};function Ae(i){let{gracePeriod:t=864e5,decayRate:e=1/30,decayCap:r=.95}=i!=null?i:{};return function({now:n,lastUpd:a,scores:c,sessionScores:d}){if(typeof a!="number")return!1;let M=n-a-t;if(M<=0)return!1;let Q=M/864e5,W=1-Math.min(r,Q*e);return W<=0?!1:(xt(c,W),xt(d,W),!0)}}function xt(i,t){for(let e in i)i[e]*=t}import _t from"mitt";import{dequal as it}from"dequal/lite";var rt=class{constructor(){y(this,"inMemoryFallback",{});y(this,"hasLocalStorageObject",typeof localStorage!="undefined")}get(t){let e=this.inMemoryFallback[t];if(!this.hasLocalStorageObject||e)return e;try{let r=localStorage.getItem(t);return r?JSON.parse(r):void 0}catch(r){return e}}set(t,e,r){if(this.inMemoryFallback[t]=e,!(!this.hasLocalStorageObject||!r))try{localStorage.setItem(t,JSON.stringify(e))}catch(o){console.warn(o)}}delete(t,e){e||delete this.inMemoryFallback[t];try{localStorage.removeItem(t)}catch(r){}}};import Gt from"rfdc";var jt=Gt();function kt(i,t,e){let r=t?jt(t):K();return i.forEach(o=>{var n,a;switch(o.type){case"consent":r.consent=o.data;break;case"setquirk":r.quirks[o.data.key]=o.data.value;break;case"settest":r.tests[o.data.test]=o.data.variant;break;case"modscore":if(e)break;let c=(n=r.scores[o.data.dimension])!=null?n:0;r.scores[o.data.dimension]=c+o.data.delta;break;case"modscoreS":if(e)break;let d=(a=r.sessionScores[o.data.dimension])!=null?a:0;r.sessionScores[o.data.dimension]=d+o.data.delta;break;case"identify":break;default:throw new Error("Unknown command")}}),r}var B="ufvisitor",v,I,z,S,D,w,b,L,Y,Ft,H,Qt,_,bt,F,Et,ot=class{constructor(t){u(this,D);u(this,b);u(this,Y);u(this,H);u(this,_);u(this,F);u(this,v,_t());u(this,I,new rt);u(this,z,void 0);u(this,S,void 0);y(this,"events",{on:s(this,v).on,off:s(this,v).off});if(m(this,S,t),s(this,D,w)||h(this,b,L).call(this,h(this,F,Et).call(this),!0),t.transitionStore){let e=t.transitionStore.getClientTransitionState();e&&e.quirks&&this.updateData(Object.entries(e.quirks).map(([o,n])=>({type:"setquirk",data:{key:o,value:n}}))),t.transitionStore.events.on("dataUpdatedAsync",o=>{h(this,b,L).call(this,{...s(this,D,w).visitorData,...o})});let r=t.transitionStore.data;r&&h(this,b,L).call(this,{...s(this,D,w).visitorData,...r},!0)}}get data(){let t=s(this,D,w);if(h(this,H,Qt).call(this,t)){let{sessionScores:e,...r}=t.visitorData;return h(this,b,L).call(this,{...r,sessionScores:{}}),s(this,v).emit("log",["info",120]),s(this,D,w).visitorData}return t.visitorData}async updateData(t){var r,o;if(t.length===0)return;s(this,v).emit("log",["debug",101,t]);let e=kt(t,this.data,(r=s(this,D,w))==null?void 0:r.visitorData.controlGroup);t.some(n=>n.type==="consent"&&!n.data)&&s(this,I).delete(B,!0),h(this,b,L).call(this,e),await((o=s(this,S).transitionStore)==null?void 0:o.updateData(t,s(this,D,w).visitorData))}async delete(t){var e;s(this,I).delete(B,!1),await((e=s(this,S).transitionStore)==null?void 0:e.delete(t)),s(this,v).emit("log",["info",103,t]),h(this,b,L).call(this,h(this,F,Et).call(this))}};v=new WeakMap,I=new WeakMap,z=new WeakMap,S=new WeakMap,D=new WeakSet,w=function(){return s(this,I).get(B)},b=new WeakSet,L=function(t,e=!1){var f,M;let r=s(this,D,w),o=Date.now();h(this,_,bt).call(this,t.scores),h(this,_,bt).call(this,t.sessionScores),(M=(f=s(this,S)).decay)==null||M.call(f,{now:o,lastUpd:r==null?void 0:r.updated,scores:t.scores,sessionScores:t.sessionScores});let n=!it(r==null?void 0:r.visitorData.scores,t.scores),a=!it(r==null?void 0:r.visitorData.sessionScores,t.sessionScores),c=!it(r==null?void 0:r.visitorData.quirks,t.quirks),d={updated:o,visitorData:t};h(this,Y,Ft).call(this),s(this,I).set(B,d,!!t.consent),s(this,v).emit("log",["debug",102,t]),e||((n||a)&&s(this,v).emit("scoresUpdated",t),c&&s(this,v).emit("quirksUpdated",t))},Y=new WeakSet,Ft=function(){typeof window=="undefined"||!s(this,S).visitLifespan||(s(this,z)&&window.clearTimeout(s(this,z)),m(this,z,window.setTimeout(()=>{this.data},s(this,S).visitLifespan+50)))},H=new WeakSet,Qt=function(t){let e=s(this,S).visitLifespan;return e?t.updated+e<Date.now():!1},_=new WeakSet,bt=function(t){if(!!s(this,S).manifest)for(let e in t){let r=t[e],o=s(this,S).manifest.getDimensionByKey(e);!o||r>o.cap&&(s(this,v).emit("log",["debug",110,{dim:e,score:r,cap:o.cap}]),t[e]=o.cap)}},F=new WeakSet,Et=function(){var t,e,r;return{...K(),consent:(t=s(this,S).defaultConsent)!=null?t:!1,controlGroup:(r=(e=s(this,S).manifest)==null?void 0:e.rollForControlGroup())!=null?r:!1}};import Jt from"mitt";function Tt({context:i,variations:t,take:e=1}){var c;let r=(c=i.storage.data.controlGroup)!=null?c:!1,o=[],n=!1,a=i.scores;for(let d of t){if(o.length===e)break;if(!d.pz){o.push(d);continue}!r&&wt(d.pz,a)&&(n=!0,o.push(d))}return{personalized:n,variations:o}}function wt(i,t){return(i==null?void 0:i.crit)?!i.op||i.op==="&"?i.crit.every(e=>Pt(e,t)):i.crit.some(e=>Pt(e,t)):!0}function Pt(i,t){var a;let{op:e,l:r}=i,o=(a=t[r])!=null?a:0;if(e==="+")return Math.max(...Object.values(t))===o&&o>0;if(e==="-")return Math.min(...Object.values(t))===o&&o>0;let n=i.rDim?t[i.rDim]:i.r;if(n===void 0)return!1;if(e===">")return o>n;if(e===">=")return o>=n;if(e==="<")return o<n;if(e==="<=")return o<=n;if(e==="=")return o===n;if(e==="!=")return o!==n;throw new Error(`Unknown op: ${e}`)}var Kt=i=>{let{values:t,total:e,missingDistribution:r}=i.reduce((o,n)=>(n.testDistribution?o.total+=n.testDistribution:++o.missingDistribution,o.values.push(n.testDistribution),o),{values:[],total:0,missingDistribution:0});if(e>100)throw new Error(`Total distribution ${e} is over the maximum 100.`);if(e<100){let n=(100-e)/r;t.forEach((a,c)=>{typeof a=="undefined"&&(t[c]=n)})}return t},st=({name:i,context:t,variations:e})=>{var n;let r,o=t.getTestVariantId(i);if(o===null)return{result:void 0};if(o&&(r=e.find(a=>a.id===o),r||t.log("warn",401,{test:i,variant:o})),!r){let a=Kt(e),c=Math.floor(Math.random()*100),d=0;r=e.find((f,M)=>{let Q=a[M];if(c>d&&c<=d+Q)return f;d+=Q}),r&&t.setTestVariantId(i,(n=r.id)!=null?n:"Unknown")}return{result:r}};var E,P,V,g,Bt=class{constructor(t){u(this,E,void 0);u(this,P,{});u(this,V,void 0);u(this,g,Jt());y(this,"events",{on:s(this,g).on,off:s(this,g).off});y(this,"storage");let{manifest:e,...r}=t;m(this,V,{}),m(this,E,new R({manifest:e,evaluator:new N({CK:ut,QS:pt,QK:mt,PVC:lt,EVT:ft,PV:gt})})),this.storage=new ot({manifest:s(this,E),...r}),this.storage.events.on("log",(...n)=>s(this,g).emit("log",...n));let o=n=>{var c;let a={...n.scores};for(let d in n.sessionScores)a[d]=((c=a[d])!=null?c:0)+n.sessionScores[d];a=s(this,E).computeAggregateDimensions(a),m(this,P,a),s(this,g).emit("scoresUpdated",a),s(this,g).emit("log",["info",3,a])};this.storage.events.on("scoresUpdated",o),o(this.storage.data),this.storage.events.on("quirksUpdated",n=>{let a=s(this,E).computeSignals({scores:s(this,P),state:s(this,V),previousState:s(this,V),visitor:this.storage.data});this.storage.updateData(a),s(this,g).emit("quirksUpdated",n.quirks),s(this,g).emit("log",["info",4,n.quirks])}),s(this,g).emit("log",["debug",1,{options:t,scores:s(this,P)}])}get scores(){return s(this,P)}async update(t){let e=[];s(this,g).emit("log",["info",2,t]),t.quirks&&(e.push(...Object.entries(t.quirks).map(([o,n])=>({type:"setquirk",data:{key:o,value:n}}))),t.quirks=void 0),t.enrichments&&(e.push(...t.enrichments.map(o=>({type:"modscore",data:{dimension:R.getEnrichmentVectorKey(o.cat,o.key),delta:o.str}}))),t.enrichments=void 0);let r=s(this,V);m(this,V,{...s(this,V),...t}),e.push(...s(this,E).computeSignals({state:s(this,V),previousState:r,visitor:this.storage.data,scores:s(this,P)})),await this.storage.updateData(e)}getTestVariantId(t){var r;let e=s(this,E).getTest(t);return e?(r=e.wv)!=null?r:this.storage.data.tests[t]:(s(this,g).emit("log",["warn",401,t]),null)}setTestVariantId(t,e){this.storage.updateData([{type:"settest",data:{test:t,variant:e}}])}log(...t){s(this,g).emit("log",t)}test(t){var r;let e=st({...t,context:this});return s(this,g).emit("testResult",{name:t.name,variantId:(r=e.result)==null?void 0:r.id,control:this.storage.data.controlGroup}),e}personalize(t){let e=Tt({...t,context:this});return t.name?s(this,g).emit("personalizationResult",{name:t.name,variantIds:e.variations.map(r=>{var o;return(o=r.id)!=null?o:"Unknown"}),control:this.storage.data.controlGroup}):this.log("warn",301),e}async forget(t){m(this,V,{}),await this.storage.delete(t)}};E=new WeakMap,P=new WeakMap,V=new WeakMap,g=new WeakMap;var Dr=([i,t,...e])=>{console[i](`\u{1F94B} [${i}] Uniform event ID ${t}
`,...e.map(r=>JSON.stringify(r,null,2)))};var Mt={1:({options:i,scores:t})=>["tracker","constructed",i,t],2:i=>["tracker","received data update",i],3:i=>["tracker","new score vector",i],4:i=>["tracker","updated quirks",i],101:i=>["storage","received update commands",i],102:i=>["storage","data was updated",i],103:i=>["storage",`data was deleted ${i?"from all devices":"from this device"}`],110:({dim:i,cap:t,score:e})=>["storage",`${i} score ${e} exceeded cap ${t}. Rounded down.`],120:()=>["storage","visitor data expired and was cleared"],301:()=>["placement","Missing `name` field on personalization. Analytics events will not be triggered."],401:i=>["testing",`${i} was unknown; it will not be run.`],402:({test:i,variant:t})=>["testing",`${i} no longer has visitor's variant ${t}; it will be removed.`],700:()=>["gtag","gtag is not defined, skipping analytics event emission. Ensure you have added the gtag script to your page."],701:()=>["gtag","enabled gtag event signal redirection"]};var kr=([i,t,...e])=>{let r=Mt[t],o=`\u{1F94B} [${new Date().toLocaleTimeString()}][${i}]`;r||console[i](`${o} unknown message ID ${t} - ensure all Uniform packages are the same version`,...e);let[n,a,...c]=r(...e);console[i](`${o}[${n}] ${a} (Event ID: ${t})
`,...c.map(d=>JSON.stringify(d,null,2)))};var Yt=(c=>(c.ListStart="nesi-list-start",c.ListEnd="nesi-list-end",c.ListItem="nesi-list-item-html",c.ListItemSettings="nesi-list-item-settings",c.TestStart="nesi-test-start",c.TestEnd="nesi-test-end",c.Unknown="unknown",c))(Yt||{}),Er="nesitag";export{Bt as Context,Lt as CookieTransitionDataStore,Er as EdgeNodeTagName,$t as EdgeTransitionDataStore,N as GroupCriteriaEvaluator,R as ManifestInstance,It as SERVER_STATE_ID,Yt as ScriptType,j as TransitionDataStore,ot as VisitorDataStore,nt as computeAggregateDimensions,Dr as consoleLogDrain,ut as cookieEvaluator,Ae as createLinearDecay,kr as debugConsoleLogDrain,K as emptyVisitorData,wt as evaluateVariantMatch,ft as eventEvaluator,x as isStringMatch,Z as pageViewCountDimension,lt as pageViewCountEvaluator,gt as pageVisitedEvaluator,Tt as personalizeVariations,pt as queryStringEvaluator,mt as quirkEvaluator,st as testVariations};
import{d as v,e as n,f as m,g,h as y,i as u}from"./chunk-KZPEO35A.mjs";u();u();u();function gt(r,t){let e={...r};for(let o in t){let i=ht(r,o,t,new Set([o]));i!==0&&(e[o]=i)}return e}function ht(r,t,e,o){var s;let i=0;for(let a of e[t].inputs){let c=(s=r[a.dim])!=null?s:0;if(!c&&e[a.dim]){if(o.has(a.dim))continue;let f=new Set(o);f.add(a.dim),c=ht(r,a.dim,e,f)}if(c!==0)if(a.sign==="c"){i=0;break}else a.sign==="-"?i-=c:i+=c}return i}u();var K="_";u();var N,k,et=class{constructor(t,e,o){m(this,N,void 0);m(this,k,void 0);v(this,"signal");g(this,k,t),this.signal=e,g(this,N,o)}computeSignals(t,e){if(t.scores[n(this,k)]>=this.signal.cap&&this.signal.dur!=="t")return;let i=n(this,N).evaluate(t,this.signal.crit,e,this.signal,n(this,k)),s=this.signal.dur==="s"||this.signal.dur==="t"?"modscoreS":"modscore";if(i)e.push({type:s,data:{dimension:n(this,k),delta:this.signal.str}});else if(this.signal.dur==="t"){let a=t.visitor.sessionScores[n(this,k)];a&&e.push({type:s,data:{dimension:n(this,k),delta:-a}})}}};N=new WeakMap,k=new WeakMap;var b,$,rt=class{constructor({manifest:t,evaluator:e=new G({})}){v(this,"data");m(this,b,void 0);m(this,$,void 0);var o,i,s;g(this,b,(o=t.project)!=null?o:{}),this.data=t,g(this,$,Object.entries((s=(i=n(this,b).pz)==null?void 0:i.sig)!=null?s:[]).map(([a,c])=>new et(a,c,e)))}rollForControlGroup(){var t,e;return Math.random()<((e=(t=n(this,b).pz)==null?void 0:t.control)!=null?e:0)}getTest(t){var e;return(e=n(this,b).test)==null?void 0:e[t]}computeSignals(t){let e=[];return n(this,$).forEach(o=>{o.computeSignals(t,e)}),e}computeAggregateDimensions(t){var e,o;return gt(t,(o=(e=n(this,b).pz)==null?void 0:e.agg)!=null?o:{})}getDimensionByKey(t){var o,i,s,a;let e=t.indexOf(K);return e<=0?(i=(o=n(this,b).pz)==null?void 0:o.sig)==null?void 0:i[t]:(a=(s=n(this,b).pz)==null?void 0:s.enr)==null?void 0:a[t.substring(0,e)]}};b=new WeakMap,$=new WeakMap;u();var St=(r,t)=>{var i;if(t.type!=="CK")return!1;let e=(i=r.state.cookies)==null?void 0:i[t.cookieName];return E(e,t.match)};u();u();function vt(r,t){var o;if(typeof r=="undefined"||r===null)return!1;let e=Number(r);if(isNaN(e))return!1;switch((o=t==null?void 0:t.op)!=null?o:"="){case"=":return e===t.rhs;case"!=":return e!==t.rhs;case">":return e>t.rhs;case"<":return e<t.rhs;default:return console.warn(`Unknown match type ${t.op} is false.`),!1}}u();function J(r,t){return`${r}${K}${t}`}var ot=J("$pvc","v"),yt=(r,t,e)=>{var a,c;if(t.type!=="PVC")return!1;let o=!r.previousState||((a=r.state.url)==null?void 0:a.toString())!==((c=r.previousState.url)==null?void 0:c.toString()),s=(r.visitor.sessionScores[ot]||0)+1;if(vt(s,t.match)){let d=e.some(f=>f.type==="modscoreS"&&f.data.dimension===ot);return o&&!d&&e.push({type:"modscoreS",data:{dimension:ot,delta:1}}),!0}return!1};u();var Dt=(r,t)=>{var o;if(t.type!=="QS")return!1;let e=(o=r.state.url)==null?void 0:o.searchParams.get(t.queryName);return E(e,t.match)};u();var Ct=(r,t,e,o,i)=>{if(t.type!=="QK")return!1;if(typeof window=="undefined"&&o.dur==="t"&&r.scores[i]>0)return!0;let s=r.visitor.quirks[t.key];return E(s,t.match)};u();var Vt=(r,t)=>{var e,o;return t.type!=="EVT"?!1:(o=(e=r.state.events)==null?void 0:e.some(i=>E(i.event,t.event)))!=null?o:!1};u();var xt=(r,t)=>{var e;return t.type!=="PV"?!1:E((e=r.state.url)==null?void 0:e.pathname,t.path)};u();var _,G=class{constructor(t){m(this,_,void 0);g(this,_,t)}evaluate(t,e,o,i,s){let a=!(e.op==="&"||!e.op);for(let c of e.clauses){let d;if(c.type==="G")d=this.evaluate(t,c,o,i,s);else{let f=n(this,_)[c.type];if(!f)throw new Error(`${c.type} signal criteria not registered`);d=f(t,c,o,i,s)}if(d===a)return a}return!a}};_=new WeakMap;u();function E(r,t){var a,c,d,f;let e=(a=t==null?void 0:t.op)!=null?a:"=";if(t.op==="*")return r!==null&&typeof r!="undefined";if(t.op==="!*")return r===null||typeof r=="undefined";if(!("rhs"in t))throw new Error(`Match expression is required for match type ${e}`);let o=(c=t.cs)!=null?c:!1,i=o?r!=null?r:"":bt(r),s=o?t.rhs:bt(t.rhs);switch(e){case"=":return i===s;case"!=":return i!==s;case"~":return(d=i.includes(s))!=null?d:!1;case"!~":return!((f=i.includes(s))!=null?f:!0);case"//":return new RegExp(t.rhs,o?"":"i").test(r!=null?r:"");case"!//":return!new RegExp(t.rhs,o?"":"i").test(r!=null?r:"");default:throw new Error(`Unknown match type ${e}.`)}}function bt(r){var t;return(t=r==null?void 0:r.toUpperCase())!=null?t:""}u();var B=()=>({quirks:{},scores:{},sessionScores:{},tests:{},consent:!1,controlGroup:!1});u();u();import _t from"mitt";import{dequal as jt}from"dequal/lite";var Ft="__UNIFORM_DATA__",P,I,j=class{constructor({initialData:t}){m(this,P,void 0);m(this,I,_t());v(this,"events",{on:n(this,I).on,off:n(this,I).off});t&&g(this,P,t)}get data(){return n(this,P)}updateData(t,e){return g(this,P,e),this.handleUpdateData(t,e)}async delete(t){g(this,P,void 0),await this.handleDelete(t)}signalAsyncDataUpdate(t){jt(this.data,t)||(g(this,P,t),n(this,I).emit("dataUpdatedAsync",t))}getClientTransitionState(){if(typeof document=="undefined")return;let t=document.getElementById(Ft);return(t==null?void 0:t.textContent)?JSON.parse(t.textContent):void 0}};P=new WeakMap,I=new WeakMap;u();var it="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",Et=it.split(""),Tt=new Array(123);for(let r=0;r<it.length;r++)Tt[it.charCodeAt(r)]=r;var nt=r=>{if(r<0)return`-${nt(-r)}`;let t=r>>>0,e=r/4294967296>>>0,o="";for(;e>0;)o=Et[63&t]+o,t>>>=6,t|=(63&e)<<26,e>>>=6;let i="";do i=Et[63&t]+i,t>>>=6;while(t>0);return i+o},kt=r=>{let t=0,e=r.charAt(0)==="-"?1:0;for(let o=e;o<r.length;o++)t=t*64+Tt[r.charCodeAt(o)];return e?-t:t};var wt=typeof window=="undefined",R,L,Qt=class extends j{constructor({cookieAdapter:t,cookieName:e="ufvd"}){super({initialData:wt?Kt(t.get(e)):void 0});m(this,R,void 0);m(this,L,void 0);g(this,R,e),g(this,L,t)}handleDelete(){return n(this,L).remove(n(this,R)),Promise.resolve()}async handleUpdateData(t,e){wt||(e.consent?n(this,L).set(n(this,R),Jt(e)):n(this,L).remove(n(this,R)))}};R=new WeakMap,L=new WeakMap;var Pt="~",Mt="!",Ot="-";function Kt(r){if(!r)return;let t=r.split(Pt);if(t.length>3)return;let[e,o,i]=t;return{consent:!0,sessionScores:Rt(st(o)),scores:Rt(st(i)),tests:st(e)}}function st(r){return r.split(Mt).map(e=>e.split(Ot)).reduce((e,o)=>(o.length!==2||(e[o[0]]=o[1]),e),{})}function Rt(r){return Object.entries(r).reduce((t,[e,o])=>(t[e]=kt(o),t),{})}function Jt(r){return[at(r.tests),at(Lt(r.sessionScores)),at(Lt(r.scores))].join(Pt)}function Lt(r){return Object.entries(r).reduce((t,[e,o])=>(t[e]=nt(o),t),{})}function at(r){return Object.entries(r).map(t=>t.join(Ot)).join(Mt)}u();var H,Ht,Bt=class extends j{constructor({cookieAdapter:t,visitorIdCookieName:e="ufvi",...o}){super(o);m(this,H);o.initialData||y(this,H,Ht).call(this).catch(i=>{console.error(i)})}handleDelete(t){throw new Error("Method not implemented.")}async handleUpdateData(t){let e=await new Promise(o=>{setTimeout(()=>{o(void 0)},2e3)});e&&this.signalAsyncDataUpdate(e)}};H=new WeakSet,Ht=async function(){let t=await new Promise(e=>{setTimeout(()=>{e(void 0)},2e3)});t&&this.signalAsyncDataUpdate(t)};u();function tr(r){let{gracePeriod:t=864e5,decayRate:e=1/30,decayCap:o=.95}=r!=null?r:{};return function({now:s,lastUpd:a,scores:c,sessionScores:d}){if(typeof a!="number")return!1;let x=s-a-t;if(x<=0)return!1;let D=x/864e5,A=1-Math.min(o,D*e);return A<=0?!1:(Ut(c,A),Ut(d,A),!0)}}function Ut(r,t){for(let e in r)r[e]*=t}u();import Wt from"mitt";import{dequal as Y}from"dequal/lite";u();var ut=class{constructor(){v(this,"inMemoryFallback",{});v(this,"hasLocalStorageObject",typeof localStorage!="undefined")}get(t){let e=this.inMemoryFallback[t];if(!this.hasLocalStorageObject||e)return e;try{let o=localStorage.getItem(t);return o?JSON.parse(o):void 0}catch(o){return e}}set(t,e,o){if(this.inMemoryFallback[t]=e,!(!this.hasLocalStorageObject||!o))try{localStorage.setItem(t,JSON.stringify(e))}catch(i){console.warn(i)}}delete(t,e){e||delete this.inMemoryFallback[t];try{localStorage.removeItem(t)}catch(o){}}};u();import Yt from"rfdc";var Xt=Yt();function At(r,t,e){let o=t?Xt(t):B();return r.forEach(i=>{var s,a;switch(i.type){case"consent":o.consent=i.data;break;case"setquirk":o.quirks[i.data.key]=i.data.value;break;case"settest":o.tests[i.data.test]=i.data.variant;break;case"modscore":if(e)break;let c=(s=o.scores[i.data.dimension])!=null?s:0;o.scores[i.data.dimension]=c+i.data.delta;break;case"modscoreS":if(e)break;let d=(a=o.sessionScores[i.data.dimension])!=null?a:0;o.sessionScores[i.data.dimension]=d+i.data.delta;break;case"identify":break;default:throw new Error("Unknown command")}}),o}var X="ufvisitor",T,U,q,h,C,M,w,z,W,Zt,Z,te,F,It,Q,zt,ct=class{constructor(t){m(this,C);m(this,w);m(this,W);m(this,Z);m(this,F);m(this,Q);m(this,T,Wt());m(this,U,new ut);m(this,q,void 0);m(this,h,void 0);v(this,"events",{on:n(this,T).on,off:n(this,T).off});if(g(this,h,t),n(this,C,M)||y(this,w,z).call(this,y(this,Q,zt).call(this),!0),t.transitionStore){let e=t.transitionStore.getClientTransitionState();if(e){let i=[];e.quirks&&i.push(...Object.entries(e.quirks).map(([s,a])=>({type:"setquirk",data:{key:s,value:a}}))),e.tests&&i.push(...Object.entries(e.tests).map(([s,a])=>({type:"settest",data:{test:s,variant:a}}))),this.updateData(i),e.ssv&&t.onServerTransitionScoresReceived&&t.onServerTransitionScoresReceived(e.ssv)}t.transitionStore.events.on("dataUpdatedAsync",i=>{y(this,w,z).call(this,{...n(this,C,M).visitorData,...i})});let o=t.transitionStore.data;o&&y(this,w,z).call(this,{...n(this,C,M).visitorData,...o},!0)}}get data(){var e,o;let t=n(this,C,M);if(y(this,Z,te).call(this,t)){let{sessionScores:i,...s}=t.visitorData;return y(this,w,z).call(this,{...s,sessionScores:{}}),(o=(e=n(this,h)).onLogMessage)==null||o.call(e,["info",120]),n(this,C,M).visitorData}return t.visitorData}get decayEnabled(){return!!n(this,h).decay}async updateData(t){var o,i,s,a;if(t.length===0)return;(i=(o=n(this,h)).onLogMessage)==null||i.call(o,["debug",101,t]);let e=At(t,this.data,(s=n(this,C,M))==null?void 0:s.visitorData.controlGroup);t.some(c=>c.type==="consent"&&!c.data)&&n(this,U).delete(X,!0),y(this,w,z).call(this,e),await((a=n(this,h).transitionStore)==null?void 0:a.updateData(t,n(this,C,M).visitorData))}async delete(t){var e,o,i;n(this,U).delete(X,!1),await((e=n(this,h).transitionStore)==null?void 0:e.delete(t)),y(this,w,z).call(this,y(this,Q,zt).call(this)),(i=(o=n(this,h)).onLogMessage)==null||i.call(o,["info",103,t])}};T=new WeakMap,U=new WeakMap,q=new WeakMap,h=new WeakMap,C=new WeakSet,M=function(){return n(this,U).get(X)},w=new WeakSet,z=function(t,e=!1){var x,D,A,pt,ft,mt;let o=n(this,C,M),i=Date.now();y(this,F,It).call(this,t.scores),y(this,F,It).call(this,t.sessionScores),(D=(x=n(this,h)).decay)==null||D.call(x,{now:i,lastUpd:o==null?void 0:o.updated,scores:t.scores,sessionScores:t.sessionScores});let s=!Y(o==null?void 0:o.visitorData.scores,t.scores),a=!Y(o==null?void 0:o.visitorData.sessionScores,t.sessionScores),c=!Y(o==null?void 0:o.visitorData.quirks,t.quirks),d=!Y(o==null?void 0:o.visitorData.tests,t.tests),f={updated:i,visitorData:t};y(this,W,Zt).call(this),n(this,U).set(X,f,!!t.consent),(pt=(A=n(this,h)).onLogMessage)==null||pt.call(A,["debug",102,t]),e||((s||a)&&n(this,T).emit("scoresUpdated",t),c&&n(this,T).emit("quirksUpdated",t),d&&n(this,T).emit("testsUpdated",t),((ft=o==null?void 0:o.visitorData)==null?void 0:ft.consent)!==t.consent&&n(this,T).emit("consentUpdated",t),((mt=o==null?void 0:o.visitorData)==null?void 0:mt.controlGroup)!==t.controlGroup&&n(this,T).emit("controlGroupUpdated",t))},W=new WeakSet,Zt=function(){typeof window=="undefined"||!n(this,h).visitLifespan||(n(this,q)&&window.clearTimeout(n(this,q)),g(this,q,window.setTimeout(()=>{this.data},n(this,h).visitLifespan+50)))},Z=new WeakSet,te=function(t){let e=n(this,h).visitLifespan;return e?t.updated+e<Date.now():!1},F=new WeakSet,It=function(t){var e,o;if(!!n(this,h).manifest)for(let i in t){let s=t[i],a=n(this,h).manifest.getDimensionByKey(i);!a||s>a.cap&&((o=(e=n(this,h)).onLogMessage)==null||o.call(e,["debug",110,{dim:i,score:s,cap:a.cap}]),t[i]=a.cap)}},Q=new WeakSet,zt=function(){var t,e,o;return{...B(),consent:(t=n(this,h).defaultConsent)!=null?t:!1,controlGroup:(o=(e=n(this,h).manifest)==null?void 0:e.rollForControlGroup())!=null?o:!1}};u();import re from"mitt";u();u();function qt({context:r,variations:t,take:e=1}){var c,d;let o=(c=r.storage.data.controlGroup)!=null?c:!1,i=[],s=!1,a=r.scores;for(let f of t){if(i.length===e)break;if(!((d=f.pz)==null?void 0:d.crit.length)){i.push(f);continue}!o&&Nt(f.pz,a)&&(s=!0,i.push(f))}return{personalized:s,variations:i}}u();function Nt(r,t){return(r==null?void 0:r.crit)?!r.op||r.op==="&"?r.crit.every(e=>$t(e,t)):r.crit.some(e=>$t(e,t)):!0}function $t(r,t){var a;let{op:e,l:o}=r,i=(a=t[o])!=null?a:0;if(e==="+")return Math.max(...Object.values(t))===i&&i>0;if(e==="-")return Math.min(...Object.values(t))===i&&i>0;let s=r.rDim?t[r.rDim]:r.r;if(s===void 0)return!1;if(e===">")return i>s;if(e===">=")return i>=s;if(e==="<")return i<s;if(e==="<=")return i<=s;if(e==="=")return i===s;if(e==="!=")return i!==s;throw new Error(`Unknown op: ${e}`)}u();var ee=r=>{let{values:t,total:e,missingDistribution:o}=r.reduce((i,s)=>(s.testDistribution?i.total+=s.testDistribution:++i.missingDistribution,i.values.push(s.testDistribution),i),{values:[],total:0,missingDistribution:0});if(e>100)throw new Error(`Total distribution ${e} is over the maximum 100.`);if(e<100){let s=(100-e)/o;t.forEach((a,c)=>{typeof a=="undefined"&&(t[c]=s)})}return t},dt=({name:r,context:t,variations:e})=>{var s;let o,i=t.getTestVariantId(r);if(i===null)return{result:void 0};if(i&&(o=e.find(a=>a.id===i),o||t.log("warn",401,{test:r,variant:i})),!o){let a=ee(e),c=Math.floor(Math.random()*100),d=0;o=e.find((f,x)=>{let D=a[x];if(c>d&&c<=d+D)return f;d+=D}),o&&t.setTestVariantId(r,(s=o.id)!=null?s:"Unknown")}return{result:o}};var O,V,S,oe=class{constructor(t){v(this,"manifest");m(this,O,{});m(this,V,void 0);m(this,S,re());v(this,"events",{on:n(this,S).on,off:n(this,S).off});v(this,"storage");var a,c;let{manifest:e,...o}=t;g(this,V,{}),(a=t.plugins)==null||a.forEach(d=>{!d.logDrain||n(this,S).on("log",d.logDrain)}),this.manifest=new rt({manifest:e,evaluator:new G({CK:St,QS:Dt,QK:Ct,PVC:yt,EVT:Vt,PV:xt})});let i=!1;this.storage=new ct({...o,manifest:this.manifest,onServerTransitionScoresReceived:d=>{g(this,O,d),i=!0,n(this,S).emit("log",["debug",130,d])},onLogMessage:d=>n(this,S).emit("log",d)});let s=d=>{var x;let f={...d.scores};for(let D in d.sessionScores)f[D]=((x=f[D])!=null?x:0)+d.sessionScores[D];f=this.manifest.computeAggregateDimensions(f),g(this,O,f),n(this,S).emit("scoresUpdated",f),n(this,S).emit("log",["info",3,f])};this.storage.events.on("scoresUpdated",s),i||s(this.storage.data),this.storage.events.on("quirksUpdated",d=>{let f=this.manifest.computeSignals({scores:n(this,O),state:n(this,V),previousState:n(this,V),visitor:this.storage.data});this.storage.updateData(f),n(this,S).emit("quirksUpdated",d.quirks),n(this,S).emit("log",["info",4,d.quirks])}),n(this,S).emit("log",["debug",1]),(c=t.plugins)==null||c.forEach(d=>{!d.init||d.init(this)})}get scores(){return n(this,O)}async update(t){var i;let e=[];n(this,S).emit("log",["info",2,{...t,url:(i=t.url)==null?void 0:i.toString()}]),t.quirks&&(e.push(...Object.entries(t.quirks).map(([s,a])=>({type:"setquirk",data:{key:s,value:a}}))),t.quirks=void 0),t.enrichments&&(e.push(...t.enrichments.map(s=>({type:"modscore",data:{dimension:J(s.cat,s.key),delta:s.str}}))),t.enrichments=void 0);let o=n(this,V);g(this,V,{...n(this,V),...t}),e.push(...this.manifest.computeSignals({state:n(this,V),previousState:o,visitor:this.storage.data,scores:n(this,O)})),await this.storage.updateData(e)}getTestVariantId(t){var o;let e=this.manifest.getTest(t);return e?(o=e.wv)!=null?o:this.storage.data.tests[t]:(n(this,S).emit("log",["warn",401,t]),null)}setTestVariantId(t,e){this.storage.updateData([{type:"settest",data:{test:t,variant:e}}])}log(...t){n(this,S).emit("log",t)}test(t){var o;let e=dt({...t,context:this});return n(this,S).emit("testResult",{name:t.name,variantId:(o=e.result)==null?void 0:o.id,control:this.storage.data.controlGroup}),e}personalize(t){let e=qt({...t,context:this});return t.name?n(this,S).emit("personalizationResult",{name:t.name,variantIds:e.variations.map(o=>{var i;return(i=o.id)!=null?i:"Unknown"}),control:this.storage.data.controlGroup}):this.log("warn",301),e}async forget(t){g(this,V,{}),await this.storage.delete(t)}};O=new WeakMap,V=new WeakMap,S=new WeakMap;u();u();function tt(r,t){if(r==="none")return!1;switch(t){case"debug":return r==="debug";case"info":return r==="info"||r==="debug";case"warn":return r==="warn"||r==="info"||r==="debug";case"error":return r==="debug"||"info";default:return!1}}function ie(r){return([t,e,...o])=>{!tt(r,t)||console[t](`\u{1F94B} [${t}] Uniform event ID ${e}
`,...o.map(i=>JSON.stringify(i,null,2)))}}function qr(r){return{logDrain:ie(r)}}u();u();var Gt={1:()=>["tracker","constructed"],2:r=>["tracker","received data update",r],3:r=>["tracker","new score vector",r],4:r=>["tracker","updated quirks",r],101:r=>["storage","received update commands",r],102:r=>["storage","data was updated",r],103:r=>["storage",`data was deleted ${r?"from all devices":"from this device"}`],110:({dim:r,cap:t,score:e})=>["storage",`${r} score ${e} exceeded cap ${t}. Rounded down.`],120:()=>["storage","visitor data expired and was cleared"],130:r=>["storage","server to client transition score data was loaded; it will persist until the next update event occurs",r],301:()=>["placement","Missing `name` field on personalization. Analytics events will not be triggered."],401:r=>["testing",`${r} was unknown; it will not be run.`],402:({test:r,variant:t})=>["testing",`${r} no longer has visitor's variant ${t}; it will be removed.`],700:()=>["gtag","gtag is not defined, skipping analytics event emission. Ensure you have added the gtag script to your page."],701:()=>["gtag","enabled gtag event signal redirection"]};function ne(r){return([t,e,...o])=>{if(!tt(r,t))return;let i=Gt[e],s=`\u{1F94B} [${new Date().toLocaleTimeString()}][${t}]`;i||console[t](`${s} unknown message ID ${e} - ensure all Uniform packages are the same version`,...o);let[a,c,...d]=i(...o);console[t](`${s}[${a}] ${c} (Event ID: ${e})
`,...d.map(f=>JSON.stringify(f,null,2)))}}function jr(r){return{logDrain:ne(r)}}u();var se=(c=>(c.ListStart="nesi-list-start",c.ListEnd="nesi-list-end",c.ListItem="nesi-list-item-html",c.ListItemSettings="nesi-list-item-settings",c.TestStart="nesi-test-start",c.TestEnd="nesi-test-end",c.Unknown="unknown",c))(se||{}),Qr="nesitag";u();var lt=typeof top!="undefined";function Jr(){return{logDrain:r=>{!lt||top==null||top.postMessage({type:"uniform:context:log",message:r},window.location.origin)},init:r=>{let t=[],e=[];lt&&(window.__UNIFORM_DEVTOOLS_CONTEXT_INSTANCE__=r,top==null||top.addEventListener("message",async a=>{if(!a.data)return;let c=a.data;await ae(c,r)}),top==null||top.postMessage({type:"uniform:context:hello",uiVersion:2},window.location.origin));let o=()=>{!lt||top==null||top.postMessage({type:"uniform:context:data",data:{scores:r.scores,data:r.storage.data,manifest:r.manifest.data,personalizations:t,tests:e}},window.location.origin)},i=a=>{t.push(a),o()},s=a=>{e.push(a),o()};return r.events.on("personalizationResult",i),r.events.on("testResult",s),r.storage.events.on("*",o),()=>{r.storage.events.off("*",o),r.events.off("personalizationResult",i),r.events.off("testResult",s)}}}}async function ae(r,t){r.type==="uniform-in:context:update"&&r.newData&&await t.update(r.newData),r.type==="uniform-in:context:commands"&&r.commands&&Array.isArray(r.commands)&&await t.storage.updateData(r.commands),r.type==="uniform-in:context:forget"&&await t.forget(!1)}export{oe as Context,Qt as CookieTransitionDataStore,Qr as EdgeNodeTagName,Bt as EdgeTransitionDataStore,G as GroupCriteriaEvaluator,rt as ManifestInstance,Ft as SERVER_STATE_ID,se as ScriptType,j as TransitionDataStore,ct as VisitorDataStore,gt as computeAggregateDimensions,St as cookieEvaluator,ie as createConsoleLogDrain,ne as createDebugConsoleLogDrain,tr as createLinearDecay,B as emptyVisitorData,qr as enableConsoleLogDrain,Jr as enableContextDevTools,jr as enableDebugConsoleLogDrain,Nt as evaluateVariantMatch,Vt as eventEvaluator,J as getEnrichmentVectorKey,E as isStringMatch,ot as pageViewCountDimension,yt as pageViewCountEvaluator,xt as pageVisitedEvaluator,qt as personalizeVariations,Dt as queryStringEvaluator,Ct as quirkEvaluator,dt as testVariations};

@@ -1,3 +0,3 @@

var Kt=Object.create;var $=Object.defineProperty;var Jt=Object.getOwnPropertyDescriptor;var Bt=Object.getOwnPropertyNames;var Yt=Object.getPrototypeOf,Ht=Object.prototype.hasOwnProperty;var Wt=(r,t,e)=>t in r?$(r,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[t]=e;var yt=r=>$(r,"__esModule",{value:!0});var Xt=(r,t)=>{for(var e in t)$(r,e,{get:t[e],enumerable:!0})},vt=(r,t,e,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Bt(t))!Ht.call(r,o)&&(e||o!=="default")&&$(r,o,{get:()=>t[o],enumerable:!(i=Jt(t,o))||i.enumerable});return r},J=(r,t)=>vt(yt($(r!=null?Kt(Yt(r)):{},"default",!t&&r&&r.__esModule?{get:()=>r.default,enumerable:!0}:{value:r,enumerable:!0})),r),Zt=(r=>(t,e)=>r&&r.get(t)||(e=vt(yt({}),t,1),r&&r.set(t,e),e))(typeof WeakMap!="undefined"?new WeakMap:0);var S=(r,t,e)=>(Wt(r,typeof t!="symbol"?t+"":t,e),e),ot=(r,t,e)=>{if(!t.has(r))throw TypeError("Cannot "+e)};var s=(r,t,e)=>(ot(r,t,"read from private field"),e?e.call(r):t.get(r)),u=(r,t,e)=>{if(t.has(r))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(r):t.set(r,e)},p=(r,t,e,i)=>(ot(r,t,"write to private field"),i?i.call(r,e):t.set(r,e),e);var g=(r,t,e)=>(ot(r,t,"access private method"),e);var le={};Xt(le,{Context:()=>_t,CookieTransitionDataStore:()=>wt,EdgeNodeTagName:()=>de,EdgeTransitionDataStore:()=>Rt,GroupCriteriaEvaluator:()=>R,ManifestInstance:()=>M,SERVER_STATE_ID:()=>Et,ScriptType:()=>Qt,TransitionDataStore:()=>q,VisitorDataStore:()=>Z,computeAggregateDimensions:()=>st,consoleLogDrain:()=>ce,cookieEvaluator:()=>at,createLinearDecay:()=>ie,debugConsoleLogDrain:()=>ue,emptyVisitorData:()=>_,evaluateVariantMatch:()=>St,eventEvaluator:()=>lt,isStringMatch:()=>v,pageViewCountDimension:()=>B,pageViewCountEvaluator:()=>ct,pageVisitedEvaluator:()=>pt,personalizeVariations:()=>ht,queryStringEvaluator:()=>ut,quirkEvaluator:()=>dt,testVariations:()=>rt});function st(r,t){let e={...r};for(let i in t){let o=Dt(r,i,t,new Set([i]));o!==0&&(e[i]=o)}return e}function Dt(r,t,e,i){var n;let o=0;for(let a of e[t].inputs){let c=(n=r[a.dim])!=null?n:0;if(!c&&e[a.dim]){if(i.has(a.dim))continue;let m=new Set(i);m.add(a.dim),c=Dt(r,a.dim,e,m)}if(c!==0)if(a.sign==="c"){o=0;break}else a.sign==="-"?o-=c:o+=c}return o}var N,x,nt=class{constructor(t,e,i){u(this,N,void 0);u(this,x,void 0);S(this,"signal");p(this,x,t),this.signal=e,p(this,N,i)}computeSignals(t,e){if(t.scores[s(this,x)]>=this.signal.cap&&this.signal.dur!=="t")return;let o=s(this,N).evaluate(t,this.signal.crit,e,this.signal,s(this,x)),n=this.signal.dur==="s"||this.signal.dur==="t"?"modscoreS":"modscore";if(o)e.push({type:n,data:{dimension:s(this,x),delta:this.signal.str}});else if(this.signal.dur==="t"){let a=t.visitor.sessionScores[s(this,x)];a&&e.push({type:n,data:{dimension:s(this,x),delta:-a}})}}};N=new WeakMap,x=new WeakMap;var Vt="_",C,G,M=class{constructor({manifest:t,evaluator:e=new R({})}){u(this,C,void 0);u(this,G,void 0);var i,o,n;p(this,C,(i=t.project)!=null?i:{}),p(this,G,Object.entries((n=(o=s(this,C).pz)==null?void 0:o.sig)!=null?n:[]).map(([a,c])=>new nt(a,c,e)))}rollForControlGroup(){var t,e;return Math.random()<((e=(t=s(this,C).pz)==null?void 0:t.control)!=null?e:0)}getTest(t){var e;return(e=s(this,C).test)==null?void 0:e[t]}computeSignals(t){let e=[];return s(this,G).forEach(i=>{i.computeSignals(t,e)}),e}computeAggregateDimensions(t){var e,i;return st(t,(i=(e=s(this,C).pz)==null?void 0:e.agg)!=null?i:{})}getDimensionByKey(t){var i,o,n,a;let e=t.indexOf(Vt);return e<=0?(o=(i=s(this,C).pz)==null?void 0:i.sig)==null?void 0:o[t]:(a=(n=s(this,C).pz)==null?void 0:n.enr)==null?void 0:a[t.substring(0,e)]}static getEnrichmentVectorKey(t,e){return`${t}${Vt}${e}`}};C=new WeakMap,G=new WeakMap;var at=(r,t)=>{var o;if(t.type!=="CK")return!1;let e=(o=r.state.cookies)==null?void 0:o[t.cookieName];return v(e,t.match)};function Ct(r,t){var i;if(typeof r=="undefined"||r===null)return!1;let e=Number(r);if(isNaN(e))return!1;switch((i=t==null?void 0:t.op)!=null?i:"="){case"=":return e===t.rhs;case"!=":return e!==t.rhs;case">":return e>t.rhs;case"<":return e<t.rhs;default:return console.warn(`Unknown match type ${t.op} is false.`),!1}}var B=M.getEnrichmentVectorKey("$pvc","v"),ct=(r,t,e)=>{var a,c;if(t.type!=="PVC")return!1;let i=!r.previousState||((a=r.state.url)==null?void 0:a.toString())!==((c=r.previousState.url)==null?void 0:c.toString()),n=(r.visitor.sessionScores[B]||0)+1;if(Ct(n,t.match)){let d=e.some(m=>m.type==="modscoreS"&&m.data.dimension===B);return i&&!d&&e.push({type:"modscoreS",data:{dimension:B,delta:1}}),!0}return!1};var ut=(r,t)=>{var i;if(t.type!=="QS")return!1;let e=(i=r.state.url)==null?void 0:i.searchParams.get(t.queryName);return v(e,t.match)};var dt=(r,t,e,i,o)=>{if(t.type!=="QK")return!1;if(typeof window=="undefined"&&i.dur==="t"&&r.scores[o]>0)return!0;let n=r.visitor.quirks[t.key];return v(n,t.match)};var lt=(r,t)=>{var e,i;return t.type!=="EVT"?!1:(i=(e=r.state.events)==null?void 0:e.some(o=>v(o.event,t.event)))!=null?i:!1};var pt=(r,t)=>{var e;return t.type!=="PV"?!1:v((e=r.state.url)==null?void 0:e.pathname,t.path)};var j,R=class{constructor(t){u(this,j,void 0);p(this,j,t)}evaluate(t,e,i,o,n){let a=!(e.op==="&"||!e.op);for(let c of e.clauses){let d;if(c.type==="G")d=this.evaluate(t,c,i,o,n);else{let m=s(this,j)[c.type];if(!m)throw new Error(`${c.type} signal criteria not registered`);d=m(t,c,i,o,n)}if(d===a)return a}return!a}};j=new WeakMap;function v(r,t){var a,c,d,m;let e=(a=t==null?void 0:t.op)!=null?a:"=";if(t.op==="*")return r!==null&&typeof r!="undefined";if(t.op==="!*")return r===null||typeof r=="undefined";if(!("rhs"in t))throw new Error(`Match expression is required for match type ${e}`);let i=(c=t.cs)!=null?c:!1,o=i?r!=null?r:"":xt(r),n=i?t.rhs:xt(t.rhs);switch(e){case"=":return o===n;case"!=":return o!==n;case"~":return(d=o.includes(n))!=null?d:!1;case"!~":return!((m=o.includes(n))!=null?m:!0);case"//":return new RegExp(t.rhs,i?"":"i").test(r!=null?r:"");case"!//":return!new RegExp(t.rhs,i?"":"i").test(r!=null?r:"");default:throw new Error(`Unknown match type ${e}.`)}}function xt(r){var t;return(t=r==null?void 0:r.toUpperCase())!=null?t:""}var _=()=>({quirks:{},scores:{},sessionScores:{},tests:{},consent:!1,controlGroup:!1});var kt=J(require("mitt")),bt=require("dequal/lite"),Et="__UNIFORM_DATA__",E,L,q=class{constructor({initialData:t}){u(this,E,void 0);u(this,L,(0,kt.default)());S(this,"events",{on:s(this,L).on,off:s(this,L).off});t&&p(this,E,t)}get data(){return s(this,E)}updateData(t,e){return p(this,E,e),this.handleUpdateData(t,e)}async delete(t){p(this,E,void 0),await this.handleDelete(t)}signalAsyncDataUpdate(t){(0,bt.dequal)(this.data,t)||(p(this,E,t),s(this,L).emit("dataUpdatedAsync",t))}getClientTransitionState(){if(typeof document=="undefined")return;let t=document.getElementById(Et);return(t==null?void 0:t.textContent)?JSON.parse(t.textContent):void 0}};E=new WeakMap,L=new WeakMap;var Y=require("number-to-base64"),Tt=typeof window=="undefined",O,U,wt=class extends q{constructor({cookieAdapter:t,cookieName:e="ufvd"}){super({initialData:Tt?te(t.get(e)):void 0});u(this,O,void 0);u(this,U,void 0);p(this,O,e),p(this,U,t)}handleDelete(){return s(this,U).remove(s(this,O)),Promise.resolve()}async handleUpdateData(t,e){Tt||(e.consent?s(this,U).set(s(this,O),ee(e)):s(this,U).remove(s(this,O)))}};O=new WeakMap,U=new WeakMap;var Pt="~",Mt="!",Ot="-";function te(r){if(!r)return;let t=r.split(Pt);if(t.length>3)return;let[e,i,o]=t;return{consent:!0,sessionScores:Ut(mt(i)),scores:Ut(mt(o)),tests:mt(e)}}function mt(r){return r.split(Mt).map(e=>e.split(Ot)).reduce((e,i)=>(i.length!==2||(e[i[0]]=i[1]),e),{})}function Ut(r){return Object.entries(r).reduce((t,[e,i])=>(t[e]=(0,Y.bton)(i),t),{})}function ee(r){return[ft(r.tests),ft(It(r.sessionScores)),ft(It(r.scores))].join(Pt)}function It(r){return Object.entries(r).reduce((t,[e,i])=>(t[e]=(0,Y.ntob)(i),t),{})}function ft(r){return Object.entries(r).map(t=>t.join(Ot)).join(Mt)}var H,re,Rt=class extends q{constructor({cookieAdapter:t,visitorIdCookieName:e="ufvi",...i}){super(i);u(this,H);i.initialData||g(this,H,re).call(this).catch(o=>{console.error(o)})}handleDelete(t){throw new Error("Method not implemented.")}async handleUpdateData(t){let e=await new Promise(i=>{setTimeout(()=>{i(void 0)},2e3)});e&&this.signalAsyncDataUpdate(e)}};H=new WeakSet,re=async function(){let t=await new Promise(e=>{setTimeout(()=>{e(void 0)},2e3)});t&&this.signalAsyncDataUpdate(t)};function ie(r){let{gracePeriod:t=864e5,decayRate:e=1/30,decayCap:i=.95}=r!=null?r:{};return function({now:n,lastUpd:a,scores:c,sessionScores:d}){if(typeof a!="number")return!1;let P=n-a-t;if(P<=0)return!1;let K=P/864e5,it=1-Math.min(i,K*e);return it<=0?!1:(qt(c,it),qt(d,it),!0)}}function qt(r,t){for(let e in r)r[e]*=t}var At=J(require("mitt")),W=require("dequal/lite");var gt=class{constructor(){S(this,"inMemoryFallback",{});S(this,"hasLocalStorageObject",typeof localStorage!="undefined")}get(t){let e=this.inMemoryFallback[t];if(!this.hasLocalStorageObject||e)return e;try{let i=localStorage.getItem(t);return i?JSON.parse(i):void 0}catch(i){return e}}set(t,e,i){if(this.inMemoryFallback[t]=e,!(!this.hasLocalStorageObject||!i))try{localStorage.setItem(t,JSON.stringify(e))}catch(o){console.warn(o)}}delete(t,e){e||delete this.inMemoryFallback[t];try{localStorage.removeItem(t)}catch(i){}}};var Lt=J(require("rfdc"));var oe=(0,Lt.default)();function zt(r,t,e){let i=t?oe(t):_();return r.forEach(o=>{var n,a;switch(o.type){case"consent":i.consent=o.data;break;case"setquirk":i.quirks[o.data.key]=o.data.value;break;case"settest":i.tests[o.data.test]=o.data.variant;break;case"modscore":if(e)break;let c=(n=i.scores[o.data.dimension])!=null?n:0;i.scores[o.data.dimension]=c+o.data.delta;break;case"modscoreS":if(e)break;let d=(a=i.sessionScores[o.data.dimension])!=null?a:0;i.sessionScores[o.data.dimension]=d+o.data.delta;break;case"identify":break;default:throw new Error("Unknown command")}}),i}var X="ufvisitor",y,I,A,h,D,T,k,z,tt,se,et,ne,F,$t,Q,Nt,Z=class{constructor(t){u(this,D);u(this,k);u(this,tt);u(this,et);u(this,F);u(this,Q);u(this,y,(0,At.default)());u(this,I,new gt);u(this,A,void 0);u(this,h,void 0);S(this,"events",{on:s(this,y).on,off:s(this,y).off});if(p(this,h,t),s(this,D,T)||g(this,k,z).call(this,g(this,Q,Nt).call(this),!0),t.transitionStore){let e=t.transitionStore.getClientTransitionState();e&&e.quirks&&this.updateData(Object.entries(e.quirks).map(([o,n])=>({type:"setquirk",data:{key:o,value:n}}))),t.transitionStore.events.on("dataUpdatedAsync",o=>{g(this,k,z).call(this,{...s(this,D,T).visitorData,...o})});let i=t.transitionStore.data;i&&g(this,k,z).call(this,{...s(this,D,T).visitorData,...i},!0)}}get data(){let t=s(this,D,T);if(g(this,et,ne).call(this,t)){let{sessionScores:e,...i}=t.visitorData;return g(this,k,z).call(this,{...i,sessionScores:{}}),s(this,y).emit("log",["info",120]),s(this,D,T).visitorData}return t.visitorData}async updateData(t){var i,o;if(t.length===0)return;s(this,y).emit("log",["debug",101,t]);let e=zt(t,this.data,(i=s(this,D,T))==null?void 0:i.visitorData.controlGroup);t.some(n=>n.type==="consent"&&!n.data)&&s(this,I).delete(X,!0),g(this,k,z).call(this,e),await((o=s(this,h).transitionStore)==null?void 0:o.updateData(t,s(this,D,T).visitorData))}async delete(t){var e;s(this,I).delete(X,!1),await((e=s(this,h).transitionStore)==null?void 0:e.delete(t)),s(this,y).emit("log",["info",103,t]),g(this,k,z).call(this,g(this,Q,Nt).call(this))}};y=new WeakMap,I=new WeakMap,A=new WeakMap,h=new WeakMap,D=new WeakSet,T=function(){return s(this,I).get(X)},k=new WeakSet,z=function(t,e=!1){var m,P;let i=s(this,D,T),o=Date.now();g(this,F,$t).call(this,t.scores),g(this,F,$t).call(this,t.sessionScores),(P=(m=s(this,h)).decay)==null||P.call(m,{now:o,lastUpd:i==null?void 0:i.updated,scores:t.scores,sessionScores:t.sessionScores});let n=!(0,W.dequal)(i==null?void 0:i.visitorData.scores,t.scores),a=!(0,W.dequal)(i==null?void 0:i.visitorData.sessionScores,t.sessionScores),c=!(0,W.dequal)(i==null?void 0:i.visitorData.quirks,t.quirks),d={updated:o,visitorData:t};g(this,tt,se).call(this),s(this,I).set(X,d,!!t.consent),s(this,y).emit("log",["debug",102,t]),e||((n||a)&&s(this,y).emit("scoresUpdated",t),c&&s(this,y).emit("quirksUpdated",t))},tt=new WeakSet,se=function(){typeof window=="undefined"||!s(this,h).visitLifespan||(s(this,A)&&window.clearTimeout(s(this,A)),p(this,A,window.setTimeout(()=>{this.data},s(this,h).visitLifespan+50)))},et=new WeakSet,ne=function(t){let e=s(this,h).visitLifespan;return e?t.updated+e<Date.now():!1},F=new WeakSet,$t=function(t){if(!!s(this,h).manifest)for(let e in t){let i=t[e],o=s(this,h).manifest.getDimensionByKey(e);!o||i>o.cap&&(s(this,y).emit("log",["debug",110,{dim:e,score:i,cap:o.cap}]),t[e]=o.cap)}},Q=new WeakSet,Nt=function(){var t,e,i;return{..._(),consent:(t=s(this,h).defaultConsent)!=null?t:!1,controlGroup:(i=(e=s(this,h).manifest)==null?void 0:e.rollForControlGroup())!=null?i:!1}};var jt=J(require("mitt"));function ht({context:r,variations:t,take:e=1}){var c;let i=(c=r.storage.data.controlGroup)!=null?c:!1,o=[],n=!1,a=r.scores;for(let d of t){if(o.length===e)break;if(!d.pz){o.push(d);continue}!i&&St(d.pz,a)&&(n=!0,o.push(d))}return{personalized:n,variations:o}}function St(r,t){return(r==null?void 0:r.crit)?!r.op||r.op==="&"?r.crit.every(e=>Gt(e,t)):r.crit.some(e=>Gt(e,t)):!0}function Gt(r,t){var a;let{op:e,l:i}=r,o=(a=t[i])!=null?a:0;if(e==="+")return Math.max(...Object.values(t))===o&&o>0;if(e==="-")return Math.min(...Object.values(t))===o&&o>0;let n=r.rDim?t[r.rDim]:r.r;if(n===void 0)return!1;if(e===">")return o>n;if(e===">=")return o>=n;if(e==="<")return o<n;if(e==="<=")return o<=n;if(e==="=")return o===n;if(e==="!=")return o!==n;throw new Error(`Unknown op: ${e}`)}var ae=r=>{let{values:t,total:e,missingDistribution:i}=r.reduce((o,n)=>(n.testDistribution?o.total+=n.testDistribution:++o.missingDistribution,o.values.push(n.testDistribution),o),{values:[],total:0,missingDistribution:0});if(e>100)throw new Error(`Total distribution ${e} is over the maximum 100.`);if(e<100){let n=(100-e)/i;t.forEach((a,c)=>{typeof a=="undefined"&&(t[c]=n)})}return t},rt=({name:r,context:t,variations:e})=>{var n;let i,o=t.getTestVariantId(r);if(o===null)return{result:void 0};if(o&&(i=e.find(a=>a.id===o),i||t.log("warn",401,{test:r,variant:o})),!i){let a=ae(e),c=Math.floor(Math.random()*100),d=0;i=e.find((m,P)=>{let K=a[P];if(c>d&&c<=d+K)return m;d+=K}),i&&t.setTestVariantId(r,(n=i.id)!=null?n:"Unknown")}return{result:i}};var b,w,V,f,_t=class{constructor(t){u(this,b,void 0);u(this,w,{});u(this,V,void 0);u(this,f,(0,jt.default)());S(this,"events",{on:s(this,f).on,off:s(this,f).off});S(this,"storage");let{manifest:e,...i}=t;p(this,V,{}),p(this,b,new M({manifest:e,evaluator:new R({CK:at,QS:ut,QK:dt,PVC:ct,EVT:lt,PV:pt})})),this.storage=new Z({manifest:s(this,b),...i}),this.storage.events.on("log",(...n)=>s(this,f).emit("log",...n));let o=n=>{var c;let a={...n.scores};for(let d in n.sessionScores)a[d]=((c=a[d])!=null?c:0)+n.sessionScores[d];a=s(this,b).computeAggregateDimensions(a),p(this,w,a),s(this,f).emit("scoresUpdated",a),s(this,f).emit("log",["info",3,a])};this.storage.events.on("scoresUpdated",o),o(this.storage.data),this.storage.events.on("quirksUpdated",n=>{let a=s(this,b).computeSignals({scores:s(this,w),state:s(this,V),previousState:s(this,V),visitor:this.storage.data});this.storage.updateData(a),s(this,f).emit("quirksUpdated",n.quirks),s(this,f).emit("log",["info",4,n.quirks])}),s(this,f).emit("log",["debug",1,{options:t,scores:s(this,w)}])}get scores(){return s(this,w)}async update(t){let e=[];s(this,f).emit("log",["info",2,t]),t.quirks&&(e.push(...Object.entries(t.quirks).map(([o,n])=>({type:"setquirk",data:{key:o,value:n}}))),t.quirks=void 0),t.enrichments&&(e.push(...t.enrichments.map(o=>({type:"modscore",data:{dimension:M.getEnrichmentVectorKey(o.cat,o.key),delta:o.str}}))),t.enrichments=void 0);let i=s(this,V);p(this,V,{...s(this,V),...t}),e.push(...s(this,b).computeSignals({state:s(this,V),previousState:i,visitor:this.storage.data,scores:s(this,w)})),await this.storage.updateData(e)}getTestVariantId(t){var i;let e=s(this,b).getTest(t);return e?(i=e.wv)!=null?i:this.storage.data.tests[t]:(s(this,f).emit("log",["warn",401,t]),null)}setTestVariantId(t,e){this.storage.updateData([{type:"settest",data:{test:t,variant:e}}])}log(...t){s(this,f).emit("log",t)}test(t){var i;let e=rt({...t,context:this});return s(this,f).emit("testResult",{name:t.name,variantId:(i=e.result)==null?void 0:i.id,control:this.storage.data.controlGroup}),e}personalize(t){let e=ht({...t,context:this});return t.name?s(this,f).emit("personalizationResult",{name:t.name,variantIds:e.variations.map(i=>{var o;return(o=i.id)!=null?o:"Unknown"}),control:this.storage.data.controlGroup}):this.log("warn",301),e}async forget(t){p(this,V,{}),await this.storage.delete(t)}};b=new WeakMap,w=new WeakMap,V=new WeakMap,f=new WeakMap;var ce=([r,t,...e])=>{console[r](`\u{1F94B} [${r}] Uniform event ID ${t}
`,...e.map(i=>JSON.stringify(i,null,2)))};var Ft={1:({options:r,scores:t})=>["tracker","constructed",r,t],2:r=>["tracker","received data update",r],3:r=>["tracker","new score vector",r],4:r=>["tracker","updated quirks",r],101:r=>["storage","received update commands",r],102:r=>["storage","data was updated",r],103:r=>["storage",`data was deleted ${r?"from all devices":"from this device"}`],110:({dim:r,cap:t,score:e})=>["storage",`${r} score ${e} exceeded cap ${t}. Rounded down.`],120:()=>["storage","visitor data expired and was cleared"],301:()=>["placement","Missing `name` field on personalization. Analytics events will not be triggered."],401:r=>["testing",`${r} was unknown; it will not be run.`],402:({test:r,variant:t})=>["testing",`${r} no longer has visitor's variant ${t}; it will be removed.`],700:()=>["gtag","gtag is not defined, skipping analytics event emission. Ensure you have added the gtag script to your page."],701:()=>["gtag","enabled gtag event signal redirection"]};var ue=([r,t,...e])=>{let i=Ft[t],o=`\u{1F94B} [${new Date().toLocaleTimeString()}][${r}]`;i||console[r](`${o} unknown message ID ${t} - ensure all Uniform packages are the same version`,...e);let[n,a,...c]=i(...e);console[r](`${o}[${n}] ${a} (Event ID: ${t})
`,...c.map(d=>JSON.stringify(d,null,2)))};var Qt=(c=>(c.ListStart="nesi-list-start",c.ListEnd="nesi-list-end",c.ListItem="nesi-list-item-html",c.ListItemSettings="nesi-list-item-settings",c.TestStart="nesi-test-start",c.TestEnd="nesi-test-end",c.Unknown="unknown",c))(Qt||{}),de="nesitag";module.exports=Zt(le);0&&(module.exports={Context,CookieTransitionDataStore,EdgeNodeTagName,EdgeTransitionDataStore,GroupCriteriaEvaluator,ManifestInstance,SERVER_STATE_ID,ScriptType,TransitionDataStore,VisitorDataStore,computeAggregateDimensions,consoleLogDrain,cookieEvaluator,createLinearDecay,debugConsoleLogDrain,emptyVisitorData,evaluateVariantMatch,eventEvaluator,isStringMatch,pageViewCountDimension,pageViewCountEvaluator,pageVisitedEvaluator,personalizeVariations,queryStringEvaluator,quirkEvaluator,testVariations});
var oe=Object.create;var N=Object.defineProperty;var ie=Object.getOwnPropertyDescriptor;var ne=Object.getOwnPropertyNames;var se=Object.getPrototypeOf,ae=Object.prototype.hasOwnProperty;var ue=(e,t,r)=>t in e?N(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var Et=e=>N(e,"__esModule",{value:!0});var ce=(e,t)=>{for(var r in t)N(e,r,{get:t[r],enumerable:!0})},Tt=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of ne(t))!ae.call(e,i)&&(r||i!=="default")&&N(e,i,{get:()=>t[i],enumerable:!(o=ie(t,i))||o.enumerable});return e},B=(e,t)=>Tt(Et(N(e!=null?oe(se(e)):{},"default",!t&&e&&e.__esModule?{get:()=>e.default,enumerable:!0}:{value:e,enumerable:!0})),e),de=(e=>(t,r)=>e&&e.get(t)||(r=Tt(Et({}),t,1),e&&e.set(t,r),r))(typeof WeakMap!="undefined"?new WeakMap:0);var h=(e,t,r)=>(ue(e,typeof t!="symbol"?t+"":t,r),r),nt=(e,t,r)=>{if(!t.has(e))throw TypeError("Cannot "+r)};var n=(e,t,r)=>(nt(e,t,"read from private field"),r?r.call(e):t.get(e)),p=(e,t,r)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,r)},f=(e,t,r,o)=>(nt(e,t,"write to private field"),o?o.call(e,r):t.set(e,r),r);var S=(e,t,r)=>(nt(e,t,"access private method"),r);var be={};ce(be,{Context:()=>Wt,CookieTransitionDataStore:()=>zt,EdgeNodeTagName:()=>Ce,EdgeTransitionDataStore:()=>jt,GroupCriteriaEvaluator:()=>U,ManifestInstance:()=>Y,SERVER_STATE_ID:()=>Rt,ScriptType:()=>re,TransitionDataStore:()=>A,VisitorDataStore:()=>tt,computeAggregateDimensions:()=>st,cookieEvaluator:()=>ut,createConsoleLogDrain:()=>Zt,createDebugConsoleLogDrain:()=>ee,createLinearDecay:()=>me,emptyVisitorData:()=>F,enableConsoleLogDrain:()=>ye,enableContextDevTools:()=>Ve,enableDebugConsoleLogDrain:()=>De,evaluateVariantMatch:()=>Dt,eventEvaluator:()=>pt,getEnrichmentVectorKey:()=>_,isStringMatch:()=>y,pageViewCountDimension:()=>X,pageViewCountEvaluator:()=>ct,pageVisitedEvaluator:()=>ft,personalizeVariations:()=>yt,queryStringEvaluator:()=>dt,quirkEvaluator:()=>lt,testVariations:()=>ot});function st(e,t){let r={...e};for(let o in t){let i=kt(e,o,t,new Set([o]));i!==0&&(r[o]=i)}return r}function kt(e,t,r,o){var s;let i=0;for(let a of r[t].inputs){let u=(s=e[a.dim])!=null?s:0;if(!u&&r[a.dim]){if(o.has(a.dim))continue;let l=new Set(o);l.add(a.dim),u=kt(e,a.dim,r,l)}if(u!==0)if(a.sign==="c"){i=0;break}else a.sign==="-"?i-=u:i+=u}return i}var H="_";var $,E,at=class{constructor(t,r,o){p(this,$,void 0);p(this,E,void 0);h(this,"signal");f(this,E,t),this.signal=r,f(this,$,o)}computeSignals(t,r){if(t.scores[n(this,E)]>=this.signal.cap&&this.signal.dur!=="t")return;let i=n(this,$).evaluate(t,this.signal.crit,r,this.signal,n(this,E)),s=this.signal.dur==="s"||this.signal.dur==="t"?"modscoreS":"modscore";if(i)r.push({type:s,data:{dimension:n(this,E),delta:this.signal.str}});else if(this.signal.dur==="t"){let a=t.visitor.sessionScores[n(this,E)];a&&r.push({type:s,data:{dimension:n(this,E),delta:-a}})}}};$=new WeakMap,E=new WeakMap;var x,G,Y=class{constructor({manifest:t,evaluator:r=new U({})}){h(this,"data");p(this,x,void 0);p(this,G,void 0);var o,i,s;f(this,x,(o=t.project)!=null?o:{}),this.data=t,f(this,G,Object.entries((s=(i=n(this,x).pz)==null?void 0:i.sig)!=null?s:[]).map(([a,u])=>new at(a,u,r)))}rollForControlGroup(){var t,r;return Math.random()<((r=(t=n(this,x).pz)==null?void 0:t.control)!=null?r:0)}getTest(t){var r;return(r=n(this,x).test)==null?void 0:r[t]}computeSignals(t){let r=[];return n(this,G).forEach(o=>{o.computeSignals(t,r)}),r}computeAggregateDimensions(t){var r,o;return st(t,(o=(r=n(this,x).pz)==null?void 0:r.agg)!=null?o:{})}getDimensionByKey(t){var o,i,s,a;let r=t.indexOf(H);return r<=0?(i=(o=n(this,x).pz)==null?void 0:o.sig)==null?void 0:i[t]:(a=(s=n(this,x).pz)==null?void 0:s.enr)==null?void 0:a[t.substring(0,r)]}};x=new WeakMap,G=new WeakMap;var ut=(e,t)=>{var i;if(t.type!=="CK")return!1;let r=(i=e.state.cookies)==null?void 0:i[t.cookieName];return y(r,t.match)};function wt(e,t){var o;if(typeof e=="undefined"||e===null)return!1;let r=Number(e);if(isNaN(r))return!1;switch((o=t==null?void 0:t.op)!=null?o:"="){case"=":return r===t.rhs;case"!=":return r!==t.rhs;case">":return r>t.rhs;case"<":return r<t.rhs;default:return console.warn(`Unknown match type ${t.op} is false.`),!1}}function _(e,t){return`${e}${H}${t}`}var X=_("$pvc","v"),ct=(e,t,r)=>{var a,u;if(t.type!=="PVC")return!1;let o=!e.previousState||((a=e.state.url)==null?void 0:a.toString())!==((u=e.previousState.url)==null?void 0:u.toString()),s=(e.visitor.sessionScores[X]||0)+1;if(wt(s,t.match)){let c=r.some(l=>l.type==="modscoreS"&&l.data.dimension===X);return o&&!c&&r.push({type:"modscoreS",data:{dimension:X,delta:1}}),!0}return!1};var dt=(e,t)=>{var o;if(t.type!=="QS")return!1;let r=(o=e.state.url)==null?void 0:o.searchParams.get(t.queryName);return y(r,t.match)};var lt=(e,t,r,o,i)=>{if(t.type!=="QK")return!1;if(typeof window=="undefined"&&o.dur==="t"&&e.scores[i]>0)return!0;let s=e.visitor.quirks[t.key];return y(s,t.match)};var pt=(e,t)=>{var r,o;return t.type!=="EVT"?!1:(o=(r=e.state.events)==null?void 0:r.some(i=>y(i.event,t.event)))!=null?o:!1};var ft=(e,t)=>{var r;return t.type!=="PV"?!1:y((r=e.state.url)==null?void 0:r.pathname,t.path)};var j,U=class{constructor(t){p(this,j,void 0);f(this,j,t)}evaluate(t,r,o,i,s){let a=!(r.op==="&"||!r.op);for(let u of r.clauses){let c;if(u.type==="G")c=this.evaluate(t,u,o,i,s);else{let l=n(this,j)[u.type];if(!l)throw new Error(`${u.type} signal criteria not registered`);c=l(t,u,o,i,s)}if(c===a)return a}return!a}};j=new WeakMap;function y(e,t){var a,u,c,l;let r=(a=t==null?void 0:t.op)!=null?a:"=";if(t.op==="*")return e!==null&&typeof e!="undefined";if(t.op==="!*")return e===null||typeof e=="undefined";if(!("rhs"in t))throw new Error(`Match expression is required for match type ${r}`);let o=(u=t.cs)!=null?u:!1,i=o?e!=null?e:"":Pt(e),s=o?t.rhs:Pt(t.rhs);switch(r){case"=":return i===s;case"!=":return i!==s;case"~":return(c=i.includes(s))!=null?c:!1;case"!~":return!((l=i.includes(s))!=null?l:!0);case"//":return new RegExp(t.rhs,o?"":"i").test(e!=null?e:"");case"!//":return!new RegExp(t.rhs,o?"":"i").test(e!=null?e:"");default:throw new Error(`Unknown match type ${r}.`)}}function Pt(e){var t;return(t=e==null?void 0:e.toUpperCase())!=null?t:""}var F=()=>({quirks:{},scores:{},sessionScores:{},tests:{},consent:!1,controlGroup:!1});var Mt=B(require("mitt")),Ot=require("dequal/lite"),Rt="__UNIFORM_DATA__",k,I,A=class{constructor({initialData:t}){p(this,k,void 0);p(this,I,(0,Mt.default)());h(this,"events",{on:n(this,I).on,off:n(this,I).off});t&&f(this,k,t)}get data(){return n(this,k)}updateData(t,r){return f(this,k,r),this.handleUpdateData(t,r)}async delete(t){f(this,k,void 0),await this.handleDelete(t)}signalAsyncDataUpdate(t){(0,Ot.dequal)(this.data,t)||(f(this,k,t),n(this,I).emit("dataUpdatedAsync",t))}getClientTransitionState(){if(typeof document=="undefined")return;let t=document.getElementById(Rt);return(t==null?void 0:t.textContent)?JSON.parse(t.textContent):void 0}};k=new WeakMap,I=new WeakMap;var mt="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",Lt=mt.split(""),Ut=new Array(123);for(let e=0;e<mt.length;e++)Ut[mt.charCodeAt(e)]=e;var gt=e=>{if(e<0)return`-${gt(-e)}`;let t=e>>>0,r=e/4294967296>>>0,o="";for(;r>0;)o=Lt[63&t]+o,t>>>=6,t|=(63&r)<<26,r>>>=6;let i="";do i=Lt[63&t]+i,t>>>=6;while(t>0);return i+o},At=e=>{let t=0,r=e.charAt(0)==="-"?1:0;for(let o=r;o<e.length;o++)t=t*64+Ut[e.charCodeAt(o)];return r?-t:t};var It=typeof window=="undefined",M,O,zt=class extends A{constructor({cookieAdapter:t,cookieName:r="ufvd"}){super({initialData:It?le(t.get(r)):void 0});p(this,M,void 0);p(this,O,void 0);f(this,M,r),f(this,O,t)}handleDelete(){return n(this,O).remove(n(this,M)),Promise.resolve()}async handleUpdateData(t,r){It||(r.consent?n(this,O).set(n(this,M),pe(r)):n(this,O).remove(n(this,M)))}};M=new WeakMap,O=new WeakMap;var qt="~",Nt="!",$t="-";function le(e){if(!e)return;let t=e.split(qt);if(t.length>3)return;let[r,o,i]=t;return{consent:!0,sessionScores:Gt(ht(o)),scores:Gt(ht(i)),tests:ht(r)}}function ht(e){return e.split(Nt).map(r=>r.split($t)).reduce((r,o)=>(o.length!==2||(r[o[0]]=o[1]),r),{})}function Gt(e){return Object.entries(e).reduce((t,[r,o])=>(t[r]=At(o),t),{})}function pe(e){return[St(e.tests),St(_t(e.sessionScores)),St(_t(e.scores))].join(qt)}function _t(e){return Object.entries(e).reduce((t,[r,o])=>(t[r]=gt(o),t),{})}function St(e){return Object.entries(e).map(t=>t.join($t)).join(Nt)}var W,fe,jt=class extends A{constructor({cookieAdapter:t,visitorIdCookieName:r="ufvi",...o}){super(o);p(this,W);o.initialData||S(this,W,fe).call(this).catch(i=>{console.error(i)})}handleDelete(t){throw new Error("Method not implemented.")}async handleUpdateData(t){let r=await new Promise(o=>{setTimeout(()=>{o(void 0)},2e3)});r&&this.signalAsyncDataUpdate(r)}};W=new WeakSet,fe=async function(){let t=await new Promise(r=>{setTimeout(()=>{r(void 0)},2e3)});t&&this.signalAsyncDataUpdate(t)};function me(e){let{gracePeriod:t=864e5,decayRate:r=1/30,decayCap:o=.95}=e!=null?e:{};return function({now:s,lastUpd:a,scores:u,sessionScores:c}){if(typeof a!="number")return!1;let V=s-a-t;if(V<=0)return!1;let v=V/864e5,L=1-Math.min(o,v*r);return L<=0?!1:(Ft(u,L),Ft(c,L),!0)}}function Ft(e,t){for(let r in e)e[r]*=t}var Jt=B(require("mitt")),Q=require("dequal/lite");var vt=class{constructor(){h(this,"inMemoryFallback",{});h(this,"hasLocalStorageObject",typeof localStorage!="undefined")}get(t){let r=this.inMemoryFallback[t];if(!this.hasLocalStorageObject||r)return r;try{let o=localStorage.getItem(t);return o?JSON.parse(o):void 0}catch(o){return r}}set(t,r,o){if(this.inMemoryFallback[t]=r,!(!this.hasLocalStorageObject||!o))try{localStorage.setItem(t,JSON.stringify(r))}catch(i){console.warn(i)}}delete(t,r){r||delete this.inMemoryFallback[t];try{localStorage.removeItem(t)}catch(o){}}};var Qt=B(require("rfdc"));var ge=(0,Qt.default)();function Kt(e,t,r){let o=t?ge(t):F();return e.forEach(i=>{var s,a;switch(i.type){case"consent":o.consent=i.data;break;case"setquirk":o.quirks[i.data.key]=i.data.value;break;case"settest":o.tests[i.data.test]=i.data.variant;break;case"modscore":if(r)break;let u=(s=o.scores[i.data.dimension])!=null?s:0;o.scores[i.data.dimension]=u+i.data.delta;break;case"modscoreS":if(r)break;let c=(a=o.sessionScores[i.data.dimension])!=null?a:0;o.sessionScores[i.data.dimension]=c+i.data.delta;break;case"identify":break;default:throw new Error("Unknown command")}}),o}var Z="ufvisitor",b,R,q,m,D,w,T,z,et,he,rt,Se,K,Bt,J,Ht,tt=class{constructor(t){p(this,D);p(this,T);p(this,et);p(this,rt);p(this,K);p(this,J);p(this,b,(0,Jt.default)());p(this,R,new vt);p(this,q,void 0);p(this,m,void 0);h(this,"events",{on:n(this,b).on,off:n(this,b).off});if(f(this,m,t),n(this,D,w)||S(this,T,z).call(this,S(this,J,Ht).call(this),!0),t.transitionStore){let r=t.transitionStore.getClientTransitionState();if(r){let i=[];r.quirks&&i.push(...Object.entries(r.quirks).map(([s,a])=>({type:"setquirk",data:{key:s,value:a}}))),r.tests&&i.push(...Object.entries(r.tests).map(([s,a])=>({type:"settest",data:{test:s,variant:a}}))),this.updateData(i),r.ssv&&t.onServerTransitionScoresReceived&&t.onServerTransitionScoresReceived(r.ssv)}t.transitionStore.events.on("dataUpdatedAsync",i=>{S(this,T,z).call(this,{...n(this,D,w).visitorData,...i})});let o=t.transitionStore.data;o&&S(this,T,z).call(this,{...n(this,D,w).visitorData,...o},!0)}}get data(){var r,o;let t=n(this,D,w);if(S(this,rt,Se).call(this,t)){let{sessionScores:i,...s}=t.visitorData;return S(this,T,z).call(this,{...s,sessionScores:{}}),(o=(r=n(this,m)).onLogMessage)==null||o.call(r,["info",120]),n(this,D,w).visitorData}return t.visitorData}get decayEnabled(){return!!n(this,m).decay}async updateData(t){var o,i,s,a;if(t.length===0)return;(i=(o=n(this,m)).onLogMessage)==null||i.call(o,["debug",101,t]);let r=Kt(t,this.data,(s=n(this,D,w))==null?void 0:s.visitorData.controlGroup);t.some(u=>u.type==="consent"&&!u.data)&&n(this,R).delete(Z,!0),S(this,T,z).call(this,r),await((a=n(this,m).transitionStore)==null?void 0:a.updateData(t,n(this,D,w).visitorData))}async delete(t){var r,o,i;n(this,R).delete(Z,!1),await((r=n(this,m).transitionStore)==null?void 0:r.delete(t)),S(this,T,z).call(this,S(this,J,Ht).call(this)),(i=(o=n(this,m)).onLogMessage)==null||i.call(o,["info",103,t])}};b=new WeakMap,R=new WeakMap,q=new WeakMap,m=new WeakMap,D=new WeakSet,w=function(){return n(this,R).get(Z)},T=new WeakSet,z=function(t,r=!1){var V,v,L,Vt,xt,bt;let o=n(this,D,w),i=Date.now();S(this,K,Bt).call(this,t.scores),S(this,K,Bt).call(this,t.sessionScores),(v=(V=n(this,m)).decay)==null||v.call(V,{now:i,lastUpd:o==null?void 0:o.updated,scores:t.scores,sessionScores:t.sessionScores});let s=!(0,Q.dequal)(o==null?void 0:o.visitorData.scores,t.scores),a=!(0,Q.dequal)(o==null?void 0:o.visitorData.sessionScores,t.sessionScores),u=!(0,Q.dequal)(o==null?void 0:o.visitorData.quirks,t.quirks),c=!(0,Q.dequal)(o==null?void 0:o.visitorData.tests,t.tests),l={updated:i,visitorData:t};S(this,et,he).call(this),n(this,R).set(Z,l,!!t.consent),(Vt=(L=n(this,m)).onLogMessage)==null||Vt.call(L,["debug",102,t]),r||((s||a)&&n(this,b).emit("scoresUpdated",t),u&&n(this,b).emit("quirksUpdated",t),c&&n(this,b).emit("testsUpdated",t),((xt=o==null?void 0:o.visitorData)==null?void 0:xt.consent)!==t.consent&&n(this,b).emit("consentUpdated",t),((bt=o==null?void 0:o.visitorData)==null?void 0:bt.controlGroup)!==t.controlGroup&&n(this,b).emit("controlGroupUpdated",t))},et=new WeakSet,he=function(){typeof window=="undefined"||!n(this,m).visitLifespan||(n(this,q)&&window.clearTimeout(n(this,q)),f(this,q,window.setTimeout(()=>{this.data},n(this,m).visitLifespan+50)))},rt=new WeakSet,Se=function(t){let r=n(this,m).visitLifespan;return r?t.updated+r<Date.now():!1},K=new WeakSet,Bt=function(t){var r,o;if(!!n(this,m).manifest)for(let i in t){let s=t[i],a=n(this,m).manifest.getDimensionByKey(i);!a||s>a.cap&&((o=(r=n(this,m)).onLogMessage)==null||o.call(r,["debug",110,{dim:i,score:s,cap:a.cap}]),t[i]=a.cap)}},J=new WeakSet,Ht=function(){var t,r,o;return{...F(),consent:(t=n(this,m).defaultConsent)!=null?t:!1,controlGroup:(o=(r=n(this,m).manifest)==null?void 0:r.rollForControlGroup())!=null?o:!1}};var Xt=B(require("mitt"));function yt({context:e,variations:t,take:r=1}){var u,c;let o=(u=e.storage.data.controlGroup)!=null?u:!1,i=[],s=!1,a=e.scores;for(let l of t){if(i.length===r)break;if(!((c=l.pz)==null?void 0:c.crit.length)){i.push(l);continue}!o&&Dt(l.pz,a)&&(s=!0,i.push(l))}return{personalized:s,variations:i}}function Dt(e,t){return(e==null?void 0:e.crit)?!e.op||e.op==="&"?e.crit.every(r=>Yt(r,t)):e.crit.some(r=>Yt(r,t)):!0}function Yt(e,t){var a;let{op:r,l:o}=e,i=(a=t[o])!=null?a:0;if(r==="+")return Math.max(...Object.values(t))===i&&i>0;if(r==="-")return Math.min(...Object.values(t))===i&&i>0;let s=e.rDim?t[e.rDim]:e.r;if(s===void 0)return!1;if(r===">")return i>s;if(r===">=")return i>=s;if(r==="<")return i<s;if(r==="<=")return i<=s;if(r==="=")return i===s;if(r==="!=")return i!==s;throw new Error(`Unknown op: ${r}`)}var ve=e=>{let{values:t,total:r,missingDistribution:o}=e.reduce((i,s)=>(s.testDistribution?i.total+=s.testDistribution:++i.missingDistribution,i.values.push(s.testDistribution),i),{values:[],total:0,missingDistribution:0});if(r>100)throw new Error(`Total distribution ${r} is over the maximum 100.`);if(r<100){let s=(100-r)/o;t.forEach((a,u)=>{typeof a=="undefined"&&(t[u]=s)})}return t},ot=({name:e,context:t,variations:r})=>{var s;let o,i=t.getTestVariantId(e);if(i===null)return{result:void 0};if(i&&(o=r.find(a=>a.id===i),o||t.log("warn",401,{test:e,variant:i})),!o){let a=ve(r),u=Math.floor(Math.random()*100),c=0;o=r.find((l,V)=>{let v=a[V];if(u>c&&u<=c+v)return l;c+=v}),o&&t.setTestVariantId(e,(s=o.id)!=null?s:"Unknown")}return{result:o}};var P,C,g,Wt=class{constructor(t){h(this,"manifest");p(this,P,{});p(this,C,void 0);p(this,g,(0,Xt.default)());h(this,"events",{on:n(this,g).on,off:n(this,g).off});h(this,"storage");var a,u;let{manifest:r,...o}=t;f(this,C,{}),(a=t.plugins)==null||a.forEach(c=>{!c.logDrain||n(this,g).on("log",c.logDrain)}),this.manifest=new Y({manifest:r,evaluator:new U({CK:ut,QS:dt,QK:lt,PVC:ct,EVT:pt,PV:ft})});let i=!1;this.storage=new tt({...o,manifest:this.manifest,onServerTransitionScoresReceived:c=>{f(this,P,c),i=!0,n(this,g).emit("log",["debug",130,c])},onLogMessage:c=>n(this,g).emit("log",c)});let s=c=>{var V;let l={...c.scores};for(let v in c.sessionScores)l[v]=((V=l[v])!=null?V:0)+c.sessionScores[v];l=this.manifest.computeAggregateDimensions(l),f(this,P,l),n(this,g).emit("scoresUpdated",l),n(this,g).emit("log",["info",3,l])};this.storage.events.on("scoresUpdated",s),i||s(this.storage.data),this.storage.events.on("quirksUpdated",c=>{let l=this.manifest.computeSignals({scores:n(this,P),state:n(this,C),previousState:n(this,C),visitor:this.storage.data});this.storage.updateData(l),n(this,g).emit("quirksUpdated",c.quirks),n(this,g).emit("log",["info",4,c.quirks])}),n(this,g).emit("log",["debug",1]),(u=t.plugins)==null||u.forEach(c=>{!c.init||c.init(this)})}get scores(){return n(this,P)}async update(t){var i;let r=[];n(this,g).emit("log",["info",2,{...t,url:(i=t.url)==null?void 0:i.toString()}]),t.quirks&&(r.push(...Object.entries(t.quirks).map(([s,a])=>({type:"setquirk",data:{key:s,value:a}}))),t.quirks=void 0),t.enrichments&&(r.push(...t.enrichments.map(s=>({type:"modscore",data:{dimension:_(s.cat,s.key),delta:s.str}}))),t.enrichments=void 0);let o=n(this,C);f(this,C,{...n(this,C),...t}),r.push(...this.manifest.computeSignals({state:n(this,C),previousState:o,visitor:this.storage.data,scores:n(this,P)})),await this.storage.updateData(r)}getTestVariantId(t){var o;let r=this.manifest.getTest(t);return r?(o=r.wv)!=null?o:this.storage.data.tests[t]:(n(this,g).emit("log",["warn",401,t]),null)}setTestVariantId(t,r){this.storage.updateData([{type:"settest",data:{test:t,variant:r}}])}log(...t){n(this,g).emit("log",t)}test(t){var o;let r=ot({...t,context:this});return n(this,g).emit("testResult",{name:t.name,variantId:(o=r.result)==null?void 0:o.id,control:this.storage.data.controlGroup}),r}personalize(t){let r=yt({...t,context:this});return t.name?n(this,g).emit("personalizationResult",{name:t.name,variantIds:r.variations.map(o=>{var i;return(i=o.id)!=null?i:"Unknown"}),control:this.storage.data.controlGroup}):this.log("warn",301),r}async forget(t){f(this,C,{}),await this.storage.delete(t)}};P=new WeakMap,C=new WeakMap,g=new WeakMap;function it(e,t){if(e==="none")return!1;switch(t){case"debug":return e==="debug";case"info":return e==="info"||e==="debug";case"warn":return e==="warn"||e==="info"||e==="debug";case"error":return e==="debug"||"info";default:return!1}}function Zt(e){return([t,r,...o])=>{!it(e,t)||console[t](`\u{1F94B} [${t}] Uniform event ID ${r}
`,...o.map(i=>JSON.stringify(i,null,2)))}}function ye(e){return{logDrain:Zt(e)}}var te={1:()=>["tracker","constructed"],2:e=>["tracker","received data update",e],3:e=>["tracker","new score vector",e],4:e=>["tracker","updated quirks",e],101:e=>["storage","received update commands",e],102:e=>["storage","data was updated",e],103:e=>["storage",`data was deleted ${e?"from all devices":"from this device"}`],110:({dim:e,cap:t,score:r})=>["storage",`${e} score ${r} exceeded cap ${t}. Rounded down.`],120:()=>["storage","visitor data expired and was cleared"],130:e=>["storage","server to client transition score data was loaded; it will persist until the next update event occurs",e],301:()=>["placement","Missing `name` field on personalization. Analytics events will not be triggered."],401:e=>["testing",`${e} was unknown; it will not be run.`],402:({test:e,variant:t})=>["testing",`${e} no longer has visitor's variant ${t}; it will be removed.`],700:()=>["gtag","gtag is not defined, skipping analytics event emission. Ensure you have added the gtag script to your page."],701:()=>["gtag","enabled gtag event signal redirection"]};function ee(e){return([t,r,...o])=>{if(!it(e,t))return;let i=te[r],s=`\u{1F94B} [${new Date().toLocaleTimeString()}][${t}]`;i||console[t](`${s} unknown message ID ${r} - ensure all Uniform packages are the same version`,...o);let[a,u,...c]=i(...o);console[t](`${s}[${a}] ${u} (Event ID: ${r})
`,...c.map(l=>JSON.stringify(l,null,2)))}}function De(e){return{logDrain:ee(e)}}var re=(u=>(u.ListStart="nesi-list-start",u.ListEnd="nesi-list-end",u.ListItem="nesi-list-item-html",u.ListItemSettings="nesi-list-item-settings",u.TestStart="nesi-test-start",u.TestEnd="nesi-test-end",u.Unknown="unknown",u))(re||{}),Ce="nesitag";var Ct=typeof top!="undefined";function Ve(){return{logDrain:e=>{!Ct||top==null||top.postMessage({type:"uniform:context:log",message:e},window.location.origin)},init:e=>{let t=[],r=[];Ct&&(window.__UNIFORM_DEVTOOLS_CONTEXT_INSTANCE__=e,top==null||top.addEventListener("message",async a=>{if(!a.data)return;let u=a.data;await xe(u,e)}),top==null||top.postMessage({type:"uniform:context:hello",uiVersion:2},window.location.origin));let o=()=>{!Ct||top==null||top.postMessage({type:"uniform:context:data",data:{scores:e.scores,data:e.storage.data,manifest:e.manifest.data,personalizations:t,tests:r}},window.location.origin)},i=a=>{t.push(a),o()},s=a=>{r.push(a),o()};return e.events.on("personalizationResult",i),e.events.on("testResult",s),e.storage.events.on("*",o),()=>{e.storage.events.off("*",o),e.events.off("personalizationResult",i),e.events.off("testResult",s)}}}}async function xe(e,t){e.type==="uniform-in:context:update"&&e.newData&&await t.update(e.newData),e.type==="uniform-in:context:commands"&&e.commands&&Array.isArray(e.commands)&&await t.storage.updateData(e.commands),e.type==="uniform-in:context:forget"&&await t.forget(!1)}module.exports=de(be);0&&(module.exports={Context,CookieTransitionDataStore,EdgeNodeTagName,EdgeTransitionDataStore,GroupCriteriaEvaluator,ManifestInstance,SERVER_STATE_ID,ScriptType,TransitionDataStore,VisitorDataStore,computeAggregateDimensions,cookieEvaluator,createConsoleLogDrain,createDebugConsoleLogDrain,createLinearDecay,emptyVisitorData,enableConsoleLogDrain,enableContextDevTools,enableDebugConsoleLogDrain,evaluateVariantMatch,eventEvaluator,getEnrichmentVectorKey,isStringMatch,pageViewCountDimension,pageViewCountEvaluator,pageVisitedEvaluator,personalizeVariations,queryStringEvaluator,quirkEvaluator,testVariations});
{
"name": "@uniformdev/context",
"version": "12.2.1-alpha.143+b54f3127",
"version": "12.2.1-alpha.170+899ea147",
"description": "Uniform Context core package",

@@ -57,3 +57,3 @@ "license": "SEE LICENSE IN LICENSE.txt",

"@types/yargs": "17.0.8",
"@uniformdev/cli": "^12.2.1-alpha.143+b54f3127",
"@uniformdev/cli": "^12.2.1-alpha.170+899ea147",
"benny": "^3.7.1",

@@ -75,3 +75,3 @@ "eslint": "8.7.0",

"mitt": "^3.0.0",
"number-to-base64": "^1.0.5",
"p-limit": "^3.1.0",
"rfdc": "^1.3.0"

@@ -82,3 +82,3 @@ },

],
"gitHead": "b54f3127570a6a8232fda786952b3abfc0963a49"
"gitHead": "899ea147cdea482a014e02911fc9554c81dd2cbc"
}

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc