UNPKG

@snowplow/snowtype-core

Version:

A code generator for faster and type-safe Snowplow tracking code

562 lines (516 loc) 272 kB
"use strict";var ql=Object.create;var G=Object.defineProperty;var Kl=Object.getOwnPropertyDescriptor;var Bl=Object.getOwnPropertyNames;var Ql=Object.getPrototypeOf,Yl=Object.prototype.hasOwnProperty;var E=(l,n)=>()=>(n||l((n={exports:{}}).exports,n),n.exports),zl=(l,n)=>{for(var r in n)G(l,r,{get:n[r],enumerable:!0})},Cn=(l,n,r,f)=>{if(n&&typeof n=="object"||typeof n=="function")for(let o of Bl(n))!Yl.call(l,o)&&o!==r&&G(l,o,{get:()=>n[o],enumerable:!(f=Kl(n,o))||f.enumerable});return l};var w=(l,n,r)=>(r=l!=null?ql(Ql(l)):{},Cn(n||!l||!l.__esModule?G(r,"default",{value:l,enumerable:!0}):r,l)),Xl=l=>Cn(G({},"__esModule",{value:!0}),l);var el=E((va,ll)=>{"use strict";ll.exports={id:{language:"javascript",tracker:"@snowplow/browser-tracker"},1:function(l,n,r,f,o){return`/** * Creates a Snowplow Event Specification entity. */ export function createEventSpecification(eventSpecification){ return { schema: 'iglu:com.snowplowanalytics.snowplow/event_specification/jsonschema/1-0-3', data: eventSpecification, } } `},3:function(l,n,r,f,o){return`const ajv = new Ajv({ allErrors: true, verbose: true, strict: false }); addFormats(ajv); const ERROR_CODES = { SCHEMA_VALIDATION_ERROR: (schema) => ({ code: 100, message: "Snowtype Schema Validation Error", description: \`'There was passing of values that does not match the JSON Schema definition for \${schema}.'\`, }), CARDINALITY_RULES_ERROR: (schema) => ({ code: 200, message: "Snowtype Entity Cardinality Rules Error", description: \`\${schema} failed entity rules validation.\`, }), CARDINALITY_RULES_ERROR_NOT_PRESENT: (schema) => ({ code: 201, message: "Snowtype Entity Cardinality Rules Error", description: \`No \${schema} context detected while a rule is present.\`, }), }; function defaultViolationErrorHandler(errorMessage){ const msg = JSON.stringify(errorMessage, undefined, 4); if ( typeof process !== "undefined" && typeof process.env === "object" && process.env.NODE_ENV === "test" ) { throw new Error(JSON.stringify(errorMessage)); } console.warn(msg); }; let violationsHandler = defaultViolationErrorHandler; export const snowtype = { setOptions(options) { violationsHandler = options.violationsHandler || violationsHandler; }, }; function validateSchema(sdj, esId) { let schemaToValidateWith = esId && schemasObject[esId] && schemasObject[esId][sdj.schema]; if(!schemaToValidateWith){ schemaToValidateWith = schemasObject[sdj.schema] } const valid = ajv.validate(schemaToValidateWith, sdj.data); if (!valid && ajv.errors?.length) { violationsHandler({ ...ERROR_CODES.SCHEMA_VALIDATION_ERROR(sdj.schema), errors: ajv.errors, }) } } function between(lowerBound, upperBound) { return (input) => input >= lowerBound && input <= upperBound; } function atLeast(lowerBound) { return (input) => input >= lowerBound; } function compare({ minCardinality, maxCardinality }) { if ( typeof minCardinality === "number" && typeof maxCardinality === "number" ) { return between(minCardinality, maxCardinality); } if (typeof minCardinality === "number") { return atLeast(minCardinality); } return () => true; } function check(cardinalityRule, input) { const comparator = compare(cardinalityRule); const isValid = comparator(input); return isValid; } function validateEntityRules( eventSpecId, context ) { const validationRules = entityRules[eventSpecId]; if (!validationRules) { return; } if (!Array.isArray(context)) { context = []; } const contextCounts = context.reduce((accum, cur) => { const schema = cur.schema; if (accum[schema]) { accum[schema] += 1; } else { accum[schema] = 1; } return accum; }, {}); Object.entries(validationRules).forEach(([schema, cardinalityRule]) => { const input = contextCounts[schema]; if (!input && cardinalityRule?.minCardinality !== 0) { violationsHandler({ ...ERROR_CODES.CARDINALITY_RULES_ERROR_NOT_PRESENT(schema), errors: [], }); return; } const isValid = check(cardinalityRule, input || 0); if (!isValid) { violationsHandler({ ...ERROR_CODES.CARDINALITY_RULES_ERROR(schema), errors: [{ ...cardinalityRule, currentCardinality: input }], }); } }); } `},5:function(l,n,r,f,o,a,e){var i,t=n??(l.nullContext||{}),s=l.lookupProperty||function(u,m){if(Object.prototype.hasOwnProperty.call(u,m))return u[m]};return((i=s(r,"unless").call(t,n!=null?s(n,"isEntityPropertyRule"):n,{name:"unless",hash:{},fn:l.program(6,o,0,a,e),inverse:l.noop,data:o,loc:{start:{line:138,column:0},end:{line:159,column:11}}}))!=null?i:"")+((i=s(r,"unless").call(t,n!=null?s(n,"isEventPropertyRule"):n,{name:"unless",hash:{},fn:l.program(13,o,0,a,e),inverse:l.noop,data:o,loc:{start:{line:160,column:0},end:{line:171,column:11}}}))!=null?i:"")},6:function(l,n,r,f,o,a,e){var i,t,s=n??(l.nullContext||{}),u=l.hooks.helperMissing,m="function",c=l.escapeExpression,y=l.lookupProperty||function(g,p){if(Object.prototype.hasOwnProperty.call(g,p))return g[p]};return`/** * Track a Snowplow event for `+c((t=(t=y(r,"typeName")||(n!=null?y(n,"typeName"):n))!=null?t:u,typeof t===m?t.call(s,{name:"typeName",hash:{},data:o,loc:{start:{line:140,column:30},end:{line:140,column:42}}}):t))+`. * `+c((t=(t=y(r,"description")||(n!=null?y(n,"description"):n))!=null?t:u,typeof t===m?t.call(s,{name:"description",hash:{},data:o,loc:{start:{line:141,column:3},end:{line:141,column:18}}}):t))+` * @param { `+c((t=(t=y(r,"typeName")||(n!=null?y(n,"typeName"):n))!=null?t:u,typeof t===m?t.call(s,{name:"typeName",hash:{},data:o,loc:{start:{line:142,column:12},end:{line:142,column:24}}}):t))+" & Timestamp & Context } "+c((y(r,"startLow")||n&&y(n,"startLow")||u).call(s,n!=null?y(n,"typeName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:142,column:49},end:{line:142,column:70}}}))+" - Attributes for "+c((t=(t=y(r,"typeName")||(n!=null?y(n,"typeName"):n))!=null?t:u,typeof t===m?t.call(s,{name:"typeName",hash:{},data:o,loc:{start:{line:142,column:88},end:{line:142,column:100}}}):t))+`. * @param {string[]} [trackers] - Tracker names to send the event to. */ `+((i=y(r,"unless").call(s,n!=null?y(n,"isEventPropertyRule"):n,{name:"unless",hash:{},fn:l.program(7,o,0,a,e),inverse:l.noop,data:o,loc:{start:{line:145,column:0},end:{line:145,column:49}}}))!=null?i:"")+"function track"+c((t=(t=y(r,"functionName")||(n!=null?y(n,"functionName"):n))!=null?t:u,typeof t===m?t.call(s,{name:"functionName",hash:{},data:o,loc:{start:{line:145,column:63},end:{line:145,column:79}}}):t))+"("+c((y(r,"startLow")||n&&y(n,"startLow")||u).call(s,n!=null?y(n,"typeName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:145,column:80},end:{line:145,column:101}}}))+`, trackers){ const { context, timestamp,`+((i=y(r,"if").call(s,e[1]!=null?y(e[1],"validations"):e[1],{name:"if",hash:{},fn:l.program(9,o,0,a,e),inverse:l.noop,data:o,loc:{start:{line:146,column:29},end:{line:146,column:66}}}))!=null?i:"")+" ...data } = "+c((y(r,"startLow")||n&&y(n,"startLow")||u).call(s,n!=null?y(n,"typeName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:146,column:79},end:{line:146,column:100}}}))+`; const event = { schema: '`+c((t=(t=y(r,"igluUrl")||(n!=null?y(n,"igluUrl"):n))!=null?t:u,typeof t===m?t.call(s,{name:"igluUrl",hash:{},data:o,loc:{start:{line:148,column:13},end:{line:148,column:24}}}):t))+`', data }; `+((i=y(r,"if").call(s,e[1]!=null?y(e[1],"validations"):e[1],{name:"if",hash:{},fn:l.program(11,o,0,a,e),inverse:l.noop,data:o,loc:{start:{line:151,column:2},end:{line:151,column:101}}}))!=null?i:"")+` trackSelfDescribingEvent({ event, context, timestamp, }, trackers); } `},7:function(l,n,r,f,o){return"export "},9:function(l,n,r,f,o){return" __esId,"},11:function(l,n,r,f,o){return"[event].concat(context || []).forEach(s => validateSchema(s, __esId));"},13:function(l,n,r,f,o){var a,e=n??(l.nullContext||{}),i=l.hooks.helperMissing,t="function",s=l.escapeExpression,u=l.lookupProperty||function(m,c){if(Object.prototype.hasOwnProperty.call(m,c))return m[c]};return`/** * Creates a Snowplow `+s((a=(a=u(r,"typeName")||(n!=null?u(n,"typeName"):n))!=null?a:i,typeof a===t?a.call(e,{name:"typeName",hash:{},data:o,loc:{start:{line:162,column:22},end:{line:162,column:34}}}):a))+` entity. * @param { `+s((a=(a=u(r,"typeName")||(n!=null?u(n,"typeName"):n))!=null?a:i,typeof a===t?a.call(e,{name:"typeName",hash:{},data:o,loc:{start:{line:163,column:12},end:{line:163,column:24}}}):a))+" } "+s((u(r,"startLow")||n&&u(n,"startLow")||i).call(e,n!=null?u(n,"typeName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:163,column:27},end:{line:163,column:48}}}))+" - Attributes for "+s((a=(a=u(r,"typeName")||(n!=null?u(n,"typeName"):n))!=null?a:i,typeof a===t?a.call(e,{name:"typeName",hash:{},data:o,loc:{start:{line:163,column:66},end:{line:163,column:78}}}):a))+`. */ export function create`+s((a=(a=u(r,"typeName")||(n!=null?u(n,"typeName"):n))!=null?a:i,typeof a===t?a.call(e,{name:"typeName",hash:{},data:o,loc:{start:{line:165,column:22},end:{line:165,column:34}}}):a))+"("+s((u(r,"startLow")||n&&u(n,"startLow")||i).call(e,n!=null?u(n,"typeName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:165,column:35},end:{line:165,column:56}}}))+`){ return { schema: '`+s((a=(a=u(r,"igluUrl")||(n!=null?u(n,"igluUrl"):n))!=null?a:i,typeof a===t?a.call(e,{name:"igluUrl",hash:{},data:o,loc:{start:{line:167,column:13},end:{line:167,column:24}}}):a))+`', data: `+s((u(r,"startLow")||n&&u(n,"startLow")||i).call(e,n!=null?u(n,"typeName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:168,column:10},end:{line:168,column:31}}}))+` } } `},15:function(l,n,r,f,o,a,e){var i,t=n??(l.nullContext||{}),s=l.lambda,u=l.escapeExpression,m=l.hooks.helperMissing,c=l.lookupProperty||function(y,g){if(Object.prototype.hasOwnProperty.call(y,g))return y[g]};return((i=c(r,"if").call(t,n!=null?c(n,"entities"):n,{name:"if",hash:{},fn:l.program(16,o,0,a,e),inverse:l.noop,data:o,loc:{start:{line:175,column:0},end:{line:182,column:7}}}))!=null?i:"")+"/**"+((i=c(r,"if").call(t,c(r,"lookup").call(t,e[1]!=null?c(e[1],"metadataForAllEventSpecs"):e[1],n!=null?c(n,"id"):n,{name:"lookup",hash:{},data:o,loc:{start:{line:184,column:8},end:{line:184,column:52}}}),{name:"if",hash:{},fn:l.program(19,o,0,a,e),inverse:l.noop,data:o,loc:{start:{line:184,column:1},end:{line:184,column:120}}}))!=null?i:"")+` * Tracks a `+u(s(n!=null?c(n,"generatedName"):n,n))+` event specification. * `+u((c(r,"addEventSpecificationIdentifier")||n&&c(n,"addEventSpecificationIdentifier")||m).call(t,n!=null?c(n,"id"):n,{name:"addEventSpecificationIdentifier",hash:{},data:o,loc:{start:{line:186,column:3},end:{line:186,column:46}}}))+` * @param { `+u(s(n!=null?c(n,"event"):n,n))+" & Timestamp"+((i=c(r,"if").call(t,n!=null?c(n,"entities"):n,{name:"if",hash:{},fn:l.program(21,o,0,a,e),inverse:l.noop,data:o,loc:{start:{line:187,column:38},end:{line:187,column:99}}}))!=null?i:"")+" } "+u((c(r,"startLow")||n&&c(n,"startLow")||m).call(t,n!=null?c(n,"generatedName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:187,column:102},end:{line:187,column:133}}}))+" - Attributes for "+u(s(n!=null?c(n,"generatedName"):n,n))+` event specification. * @param {string[]} [trackers] - Tracker names to send the event specification to. */ export function track`+u(s(n!=null?c(n,"generatedName"):n,n))+"Spec("+u((c(r,"startLow")||n&&c(n,"startLow")||m).call(t,n!=null?c(n,"generatedName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:190,column:48},end:{line:190,column:79}}}))+`, trackers){ const eventSpecificationContext = createEventSpecification({ id: '`+u(s(n!=null?c(n,"id"):n,n))+`', name: '`+u(s(n!=null?c(n,"name"):n,n))+`', data_product_id: '`+u(s(n!=null?c(n,"dataProductId"):n,n))+`', data_product_name: '`+u(s(n!=null?c(n,"dataProductName"):n,n))+`', data_product_domain: '`+u(s(n!=null?c(n,"dataProductDomain"):n,n))+`' }); `+((i=c(r,"if").call(t,e[1]!=null?c(e[1],"validations"):e[1],{name:"if",hash:{},fn:l.program(23,o,0,a,e),inverse:l.noop,data:o,loc:{start:{line:199,column:2},end:{line:204,column:9}}}))!=null?i:"")+" const context = Array.isArray("+u((c(r,"startLow")||n&&c(n,"startLow")||m).call(t,n!=null?c(n,"generatedName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:205,column:32},end:{line:205,column:63}}}))+`.context) ? [...`+u((c(r,"startLow")||n&&c(n,"startLow")||m).call(t,n!=null?c(n,"generatedName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:206,column:10},end:{line:206,column:41}}}))+`.context, eventSpecificationContext] : [eventSpecificationContext]; const modified`+u(s(n!=null?c(n,"generatedName"):n,n))+` = { ...`+u((c(r,"startLow")||n&&c(n,"startLow")||m).call(t,n!=null?c(n,"generatedName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:210,column:7},end:{line:210,column:38}}}))+`, context, `+((i=c(r,"if").call(t,e[1]!=null?c(e[1],"validations"):e[1],{name:"if",hash:{},fn:l.program(25,o,0,a,e),inverse:l.noop,data:o,loc:{start:{line:212,column:4},end:{line:215,column:11}}}))!=null?i:"")+` }; track`+u(s(n!=null?c(n,"event"):n,n))+"(modified"+u(s(n!=null?c(n,"generatedName"):n,n))+`, trackers); } `},16:function(l,n,r,f,o){var a,e=l.lambda,i=l.escapeExpression,t=l.lookupProperty||function(s,u){if(Object.prototype.hasOwnProperty.call(s,u))return s[u]};return`/** * Typedef for `+i(e(n!=null?t(n,"generatedName"):n,n))+` event specification contexts. * @typedef {object} `+i(e(n!=null?t(n,"generatedName"):n,n))+`Contexts * @property {(`+((a=t(r,"join").call(n??(l.nullContext||{}),n!=null?t(n,"entities"):n," | ","Context",{name:"join",hash:{},fn:l.program(17,o,0),inverse:l.noop,data:o,loc:{start:{line:179,column:15},end:{line:179,column:63}}}))!=null?a:"")+")[]} [context] Contexts to include in the "+i(e(n!=null?t(n,"generatedName"):n,n))+` event specification. */ `},17:function(l,n,r,f,o){return""},19:function(l,n,r,f,o,a,e){var i=l.lookupProperty||function(t,s){if(Object.prototype.hasOwnProperty.call(t,s))return t[s]};return l.escapeExpression((i(r,"warningsMetadataJs")||n&&i(n,"warningsMetadataJs")||l.hooks.helperMissing).call(n??(l.nullContext||{}),e[1]!=null?i(e[1],"metadataForAllEventSpecs"):e[1],n!=null?i(n,"id"):n,{name:"warningsMetadataJs",hash:{},data:o,loc:{start:{line:184,column:54},end:{line:184,column:113}}}))},21:function(l,n,r,f,o){var a=l.lookupProperty||function(e,i){if(Object.prototype.hasOwnProperty.call(e,i))return e[i]};return" & "+l.escapeExpression(l.lambda(n!=null?a(n,"generatedName"):n,n))+"Contexts"},23:function(l,n,r,f,o){var a=l.escapeExpression,e=l.lookupProperty||function(i,t){if(Object.prototype.hasOwnProperty.call(i,t))return i[t]};return` validateEntityRules( '`+a(l.lambda(n!=null?e(n,"id"):n,n))+`', `+a((e(r,"startLow")||n&&e(n,"startLow")||l.hooks.helperMissing).call(n??(l.nullContext||{}),n!=null?e(n,"generatedName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:202,column:4},end:{line:202,column:35}}}))+`.context ); `},25:function(l,n,r,f,o){var a=l.lookupProperty||function(e,i){if(Object.prototype.hasOwnProperty.call(e,i))return e[i]};return` /* Used for runtime validation only */ __esId: '`+l.escapeExpression(l.lambda(n!=null?a(n,"id"):n,n))+`' `},27:function(l,n,r,f,o){var a,e=n??(l.nullContext||{}),i=l.lambda,t=l.escapeExpression,s=l.hooks.helperMissing,u=l.lookupProperty||function(m,c){if(Object.prototype.hasOwnProperty.call(m,c))return m[c]};return((a=u(r,"if").call(e,n!=null?u(n,"entities"):n,{name:"if",hash:{},fn:l.program(16,o,0),inverse:l.noop,data:o,loc:{start:{line:222,column:0},end:{line:229,column:7}}}))!=null?a:"")+`/** * Tracks a `+t(i(n!=null?u(n,"generatedName"):n,n))+` event specification. * `+t((u(r,"addEventSpecificationIdentifier")||n&&u(n,"addEventSpecificationIdentifier")||s).call(e,n!=null?u(n,"id"):n,{name:"addEventSpecificationIdentifier",hash:{},data:o,loc:{start:{line:232,column:3},end:{line:232,column:46}}}))+` * @param { `+t((u(r,"ecomFunctionArgument")||n&&u(n,"ecomFunctionArgument")||s).call(e,n!=null?u(n,"event"):n,{name:"ecomFunctionArgument",hash:{},data:o,loc:{start:{line:233,column:12},end:{line:233,column:47}}}))+" "+((a=u(r,"if").call(e,n!=null?u(n,"entities"):n,{name:"if",hash:{},fn:l.program(28,o,0),inverse:l.program(30,o,0),data:o,loc:{start:{line:233,column:48},end:{line:233,column:153}}}))!=null?a:"")+" } "+t((u(r,"startLow")||n&&u(n,"startLow")||s).call(e,n!=null?u(n,"generatedName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:233,column:156},end:{line:233,column:187}}}))+" - Attributes for "+t(i(n!=null?u(n,"generatedName"):n,n))+` event specification. * @param {string[]} [trackers] - Tracker names to send the event specification to. */ export function track`+t(i(n!=null?u(n,"generatedName"):n,n))+"Spec("+t((u(r,"startLow")||n&&u(n,"startLow")||s).call(e,n!=null?u(n,"generatedName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:236,column:48},end:{line:236,column:79}}}))+`, trackers){ const eventSpecificationContext = createEventSpecification({ id: '`+t(i(n!=null?u(n,"id"):n,n))+`', name: '`+t(i(n!=null?u(n,"name"):n,n))+`', data_product_id: '`+t(i(n!=null?u(n,"dataProductId"):n,n))+`', data_product_name: '`+t(i(n!=null?u(n,"dataProductName"):n,n))+`', data_product_domain: '`+t(i(n!=null?u(n,"dataProductDomain"):n,n))+`' }); const context = Array.isArray(`+t((u(r,"startLow")||n&&u(n,"startLow")||s).call(e,n!=null?u(n,"generatedName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:245,column:32},end:{line:245,column:63}}}))+`.context) ? [...`+t((u(r,"startLow")||n&&u(n,"startLow")||s).call(e,n!=null?u(n,"generatedName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:246,column:10},end:{line:246,column:41}}}))+`.context, eventSpecificationContext] : [eventSpecificationContext]; const modified`+t(i(n!=null?u(n,"generatedName"):n,n))+` = { ...`+t((u(r,"startLow")||n&&u(n,"startLow")||s).call(e,n!=null?u(n,"generatedName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:250,column:7},end:{line:250,column:38}}}))+`, context, }; `+t((u(r,"ecomFunction")||n&&u(n,"ecomFunction")||s).call(e,n!=null?u(n,"event"):n,{name:"ecomFunction",hash:{},data:o,loc:{start:{line:254,column:2},end:{line:254,column:29}}}))+"(modified"+t(i(n!=null?u(n,"generatedName"):n,n))+`, trackers); } `},28:function(l,n,r,f,o){var a=l.lookupProperty||function(e,i){if(Object.prototype.hasOwnProperty.call(e,i))return e[i]};return"& "+l.escapeExpression(l.lambda(n!=null?a(n,"generatedName"):n,n))+"Contexts"},30:function(l,n,r,f,o){return"& Ecom.CommonEcommerceEventProperties"},compiler:[8,">= 4.3.0"],main:function(l,n,r,f,o,a,e){var i,t=n??(l.nullContext||{}),s=l.lookupProperty||function(u,m){if(Object.prototype.hasOwnProperty.call(u,m))return u[m]};return((i=s(r,"if").call(t,(s(r,"or")||n&&s(n,"or")||l.hooks.helperMissing).call(t,(i=n!=null?s(n,"eventSpecifications"):n)!=null?s(i,"length"):i,(i=n!=null?s(n,"ecomEventSpecifications"):n)!=null?s(i,"length"):i,{name:"or",hash:{},data:o,loc:{start:{line:1,column:6},end:{line:1,column:68}}}),{name:"if",hash:{},fn:l.program(1,o,0,a,e),inverse:l.noop,data:o,loc:{start:{line:1,column:0},end:{line:12,column:7}}}))!=null?i:"")+` `+((i=s(r,"if").call(t,n!=null?s(n,"validations"):n,{name:"if",hash:{},fn:l.program(3,o,0,a,e),inverse:l.noop,data:o,loc:{start:{line:14,column:0},end:{line:135,column:7}}}))!=null?i:"")+` `+((i=s(r,"each").call(t,n!=null?s(n,"type"):n,{name:"each",hash:{},fn:l.program(5,o,0,a,e),inverse:l.noop,data:o,loc:{start:{line:137,column:0},end:{line:172,column:9}}}))!=null?i:"")+` `+((i=s(r,"each").call(t,n!=null?s(n,"eventSpecifications"):n,{name:"each",hash:{},fn:l.program(15,o,0,a,e),inverse:l.noop,data:o,loc:{start:{line:174,column:0},end:{line:220,column:9}}}))!=null?i:"")+((i=s(r,"each").call(t,n!=null?s(n,"ecomEventSpecifications"):n,{name:"each",hash:{},fn:l.program(27,o,0,a,e),inverse:l.noop,data:o,loc:{start:{line:221,column:0},end:{line:256,column:9}}}))!=null?i:"")},useData:!0,useDepths:!0}});var ol=E((ka,al)=>{"use strict";al.exports={id:{language:"javascript",tracker:"@snowplow/javascript-tracker"},1:function(l,n,r,f,o){var a,e=n??(l.nullContext||{}),i=l.hooks.helperMissing,t="function",s=l.escapeExpression,u=l.lookupProperty||function(m,c){if(Object.prototype.hasOwnProperty.call(m,c))return m[c]};return`/** * Track a Snowplow event for `+s((a=(a=u(r,"typeName")||(n!=null?u(n,"typeName"):n))!=null?a:i,typeof a===t?a.call(e,{name:"typeName",hash:{},data:o,loc:{start:{line:3,column:30},end:{line:3,column:42}}}):a))+`. * `+s((a=(a=u(r,"description")||(n!=null?u(n,"description"):n))!=null?a:i,typeof a===t?a.call(e,{name:"description",hash:{},data:o,loc:{start:{line:4,column:3},end:{line:4,column:18}}}):a))+` * @param { `+s((a=(a=u(r,"typeName")||(n!=null?u(n,"typeName"):n))!=null?a:i,typeof a===t?a.call(e,{name:"typeName",hash:{},data:o,loc:{start:{line:5,column:12},end:{line:5,column:24}}}):a))+" & Timestamp & Context } "+s((u(r,"startLow")||n&&u(n,"startLow")||i).call(e,n!=null?u(n,"typeName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:5,column:49},end:{line:5,column:70}}}))+" - Attributes for "+s((a=(a=u(r,"typeName")||(n!=null?u(n,"typeName"):n))!=null?a:i,typeof a===t?a.call(e,{name:"typeName",hash:{},data:o,loc:{start:{line:5,column:88},end:{line:5,column:100}}}):a))+`. * @param {string[]} [trackers] - Tracker names to send the event to. */ function track`+s((a=(a=u(r,"functionName")||(n!=null?u(n,"functionName"):n))!=null?a:i,typeof a===t?a.call(e,{name:"functionName",hash:{},data:o,loc:{start:{line:8,column:14},end:{line:8,column:30}}}):a))+"("+s((u(r,"startLow")||n&&u(n,"startLow")||i).call(e,n!=null?u(n,"typeName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:8,column:31},end:{line:8,column:52}}}))+`, trackers){ const trackerNames = (trackers && trackers.length) ? ':' + trackers.join(';') : ''; const { context, timestamp, ...data } = `+s((u(r,"startLow")||n&&u(n,"startLow")||i).call(e,n!=null?u(n,"typeName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:10,column:42},end:{line:10,column:63}}}))+`; window.snowplow('trackSelfDescribingEvent' + trackerNames, { event: { schema: '`+s((a=(a=u(r,"igluUrl")||(n!=null?u(n,"igluUrl"):n))!=null?a:i,typeof a===t?a.call(e,{name:"igluUrl",hash:{},data:o,loc:{start:{line:13,column:15},end:{line:13,column:26}}}):a))+`', data }, context, timestamp, }); } /** * Creates a Snowplow `+s((a=(a=u(r,"typeName")||(n!=null?u(n,"typeName"):n))!=null?a:i,typeof a===t?a.call(e,{name:"typeName",hash:{},data:o,loc:{start:{line:22,column:22},end:{line:22,column:34}}}):a))+` entity. * @param { `+s((a=(a=u(r,"typeName")||(n!=null?u(n,"typeName"):n))!=null?a:i,typeof a===t?a.call(e,{name:"typeName",hash:{},data:o,loc:{start:{line:23,column:12},end:{line:23,column:24}}}):a))+" } "+s((u(r,"startLow")||n&&u(n,"startLow")||i).call(e,n!=null?u(n,"typeName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:23,column:27},end:{line:23,column:48}}}))+" - Attributes for "+s((a=(a=u(r,"typeName")||(n!=null?u(n,"typeName"):n))!=null?a:i,typeof a===t?a.call(e,{name:"typeName",hash:{},data:o,loc:{start:{line:23,column:66},end:{line:23,column:78}}}):a))+`. */ function create`+s((a=(a=u(r,"typeName")||(n!=null?u(n,"typeName"):n))!=null?a:i,typeof a===t?a.call(e,{name:"typeName",hash:{},data:o,loc:{start:{line:25,column:15},end:{line:25,column:27}}}):a))+"("+s((u(r,"startLow")||n&&u(n,"startLow")||i).call(e,n!=null?u(n,"typeName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:25,column:28},end:{line:25,column:49}}}))+`){ return { schema: '`+s((a=(a=u(r,"igluUrl")||(n!=null?u(n,"igluUrl"):n))!=null?a:i,typeof a===t?a.call(e,{name:"igluUrl",hash:{},data:o,loc:{start:{line:27,column:13},end:{line:27,column:24}}}):a))+`', data: `+s((u(r,"startLow")||n&&u(n,"startLow")||i).call(e,n!=null?u(n,"typeName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:28,column:10},end:{line:28,column:31}}}))+` } } `},3:function(l,n,r,f,o){return`/** * Creates a Snowplow Event Specification entity. */ export function createEventSpecification(eventSpecification){ return { schema: 'iglu:com.snowplowanalytics.snowplow/event_specification/jsonschema/1-0-3', data: eventSpecification, } } `},5:function(l,n,r,f,o,a,e){var i,t=n??(l.nullContext||{}),s=l.lambda,u=l.escapeExpression,m=l.hooks.helperMissing,c=l.lookupProperty||function(y,g){if(Object.prototype.hasOwnProperty.call(y,g))return y[g]};return((i=c(r,"if").call(t,n!=null?c(n,"entities"):n,{name:"if",hash:{},fn:l.program(6,o,0,a,e),inverse:l.noop,data:o,loc:{start:{line:47,column:0},end:{line:54,column:7}}}))!=null?i:"")+"/**"+((i=c(r,"if").call(t,c(r,"lookup").call(t,e[1]!=null?c(e[1],"metadataForAllEventSpecs"):e[1],n!=null?c(n,"id"):n,{name:"lookup",hash:{},data:o,loc:{start:{line:56,column:8},end:{line:56,column:52}}}),{name:"if",hash:{},fn:l.program(9,o,0,a,e),inverse:l.noop,data:o,loc:{start:{line:56,column:1},end:{line:56,column:120}}}))!=null?i:"")+` * Tracks a `+u(s(n!=null?c(n,"generatedName"):n,n))+` event specification. * `+u((c(r,"addEventSpecificationIdentifier")||n&&c(n,"addEventSpecificationIdentifier")||m).call(t,n!=null?c(n,"id"):n,{name:"addEventSpecificationIdentifier",hash:{},data:o,loc:{start:{line:58,column:3},end:{line:58,column:46}}}))+` * @param { `+u(s(n!=null?c(n,"event"):n,n))+" & Timestamp"+((i=c(r,"if").call(t,n!=null?c(n,"entities"):n,{name:"if",hash:{},fn:l.program(11,o,0,a,e),inverse:l.noop,data:o,loc:{start:{line:59,column:38},end:{line:59,column:99}}}))!=null?i:"")+" } "+u((c(r,"startLow")||n&&c(n,"startLow")||m).call(t,n!=null?c(n,"generatedName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:59,column:102},end:{line:59,column:133}}}))+" - Attributes for "+u(s(n!=null?c(n,"generatedName"):n,n))+` event specification. * @param {string[]} [trackers] - Tracker names to send the event specification to. */ function track`+u(s(n!=null?c(n,"generatedName"):n,n))+"Spec("+u((c(r,"startLow")||n&&c(n,"startLow")||m).call(t,n!=null?c(n,"generatedName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:62,column:41},end:{line:62,column:72}}}))+`, trackers){ const eventSpecificationContext = createEventSpecification({ id: '`+u(s(n!=null?c(n,"id"):n,n))+`', name: '`+u(s(n!=null?c(n,"name"):n,n))+`', data_product_id: '`+u(s(n!=null?c(n,"dataProductId"):n,n))+`', data_product_name: '`+u(s(n!=null?c(n,"dataProductName"):n,n))+`', data_product_domain: '`+u(s(n!=null?c(n,"dataProductDomain"):n,n))+`' }); const context = Array.isArray(`+u((c(r,"startLow")||n&&c(n,"startLow")||m).call(t,n!=null?c(n,"generatedName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:71,column:32},end:{line:71,column:63}}}))+`.context) ? [...`+u((c(r,"startLow")||n&&c(n,"startLow")||m).call(t,n!=null?c(n,"generatedName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:72,column:10},end:{line:72,column:41}}}))+`.context, eventSpecificationContext] : [eventSpecificationContext]; const modified`+u(s(n!=null?c(n,"generatedName"):n,n))+` = { ...`+u((c(r,"startLow")||n&&c(n,"startLow")||m).call(t,n!=null?c(n,"generatedName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:76,column:7},end:{line:76,column:38}}}))+`, context, }; track`+u(s(n!=null?c(n,"event"):n,n))+"(modified"+u(s(n!=null?c(n,"generatedName"):n,n))+`, trackers); } `},6:function(l,n,r,f,o){var a,e=l.lambda,i=l.escapeExpression,t=l.lookupProperty||function(s,u){if(Object.prototype.hasOwnProperty.call(s,u))return s[u]};return`/** * Typedef for `+i(e(n!=null?t(n,"generatedName"):n,n))+` event specification contexts. * @typedef {object} `+i(e(n!=null?t(n,"generatedName"):n,n))+`Contexts * @property {(`+((a=t(r,"join").call(n??(l.nullContext||{}),n!=null?t(n,"entities"):n," | ","Context",{name:"join",hash:{},fn:l.program(7,o,0),inverse:l.noop,data:o,loc:{start:{line:51,column:15},end:{line:51,column:63}}}))!=null?a:"")+")[]} [context] Contexts to include in the "+i(e(n!=null?t(n,"generatedName"):n,n))+` event specification. */ `},7:function(l,n,r,f,o){return""},9:function(l,n,r,f,o,a,e){var i=l.lookupProperty||function(t,s){if(Object.prototype.hasOwnProperty.call(t,s))return t[s]};return l.escapeExpression((i(r,"warningsMetadataJs")||n&&i(n,"warningsMetadataJs")||l.hooks.helperMissing).call(n??(l.nullContext||{}),e[1]!=null?i(e[1],"metadataForAllEventSpecs"):e[1],n!=null?i(n,"id"):n,{name:"warningsMetadataJs",hash:{},data:o,loc:{start:{line:56,column:54},end:{line:56,column:113}}}))},11:function(l,n,r,f,o){var a=l.lookupProperty||function(e,i){if(Object.prototype.hasOwnProperty.call(e,i))return e[i]};return" & "+l.escapeExpression(l.lambda(n!=null?a(n,"generatedName"):n,n))+"Contexts"},compiler:[8,">= 4.3.0"],main:function(l,n,r,f,o,a,e){var i,t,s,u=n??(l.nullContext||{}),m=l.lookupProperty||function(y,g){if(Object.prototype.hasOwnProperty.call(y,g))return y[g]},c="";return i=(t=(t=m(r,"type")||(n!=null?m(n,"type"):n))!=null?t:l.hooks.helperMissing,s={name:"type",hash:{},fn:l.program(1,o,0,a,e),inverse:l.noop,data:o,loc:{start:{line:1,column:0},end:{line:31,column:9}}},typeof t=="function"?t.call(u,s):t),m(r,"type")||(i=l.hooks.blockHelperMissing.call(n,i,s)),i!=null&&(c+=i),c+` `+((i=m(r,"if").call(u,(i=n!=null?m(n,"eventSpecifications"):n)!=null?m(i,"length"):i,{name:"if",hash:{},fn:l.program(3,o,0,a,e),inverse:l.noop,data:o,loc:{start:{line:33,column:0},end:{line:44,column:7}}}))!=null?i:"")+` `+((i=m(r,"each").call(u,n!=null?m(n,"eventSpecifications"):n,{name:"each",hash:{},fn:l.program(5,o,0,a,e),inverse:l.noop,data:o,loc:{start:{line:46,column:0},end:{line:82,column:9}}}))!=null?i:"")},useData:!0,useDepths:!0}});var rl=E((wa,tl)=>{"use strict";tl.exports={id:{language:"javascript",tracker:"@snowplow/node-tracker"},1:function(l,n,r,f,o){return`/** * Creates a Snowplow Event Specification entity. */ export function createEventSpecification(eventSpecification){ return { schema: 'iglu:com.snowplowanalytics.snowplow/event_specification/jsonschema/1-0-3', data: eventSpecification, } } `},3:function(l,n,r,f,o){var a,e=n??(l.nullContext||{}),i=l.hooks.helperMissing,t="function",s=l.escapeExpression,u=l.lookupProperty||function(m,c){if(Object.prototype.hasOwnProperty.call(m,c))return m[c]};return`/** * Track a Snowplow event for `+s((a=(a=u(r,"typeName")||(n!=null?u(n,"typeName"):n))!=null?a:i,typeof a===t?a.call(e,{name:"typeName",hash:{},data:o,loc:{start:{line:21,column:30},end:{line:21,column:42}}}):a))+`. * `+s((a=(a=u(r,"description")||(n!=null?u(n,"description"):n))!=null?a:i,typeof a===t?a.call(e,{name:"description",hash:{},data:o,loc:{start:{line:22,column:3},end:{line:22,column:18}}}):a))+` * @param {Tracker} tracker - Tracker to send the event to. * @param { `+s((a=(a=u(r,"typeName")||(n!=null?u(n,"typeName"):n))!=null?a:i,typeof a===t?a.call(e,{name:"typeName",hash:{},data:o,loc:{start:{line:24,column:12},end:{line:24,column:24}}}):a))+" & Timestamp & Context } "+s((u(r,"startLow")||n&&u(n,"startLow")||i).call(e,n!=null?u(n,"typeName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:24,column:49},end:{line:24,column:70}}}))+" - Attributes for "+s((a=(a=u(r,"typeName")||(n!=null?u(n,"typeName"):n))!=null?a:i,typeof a===t?a.call(e,{name:"typeName",hash:{},data:o,loc:{start:{line:24,column:88},end:{line:24,column:100}}}):a))+`. */ export function track`+s((a=(a=u(r,"functionName")||(n!=null?u(n,"functionName"):n))!=null?a:i,typeof a===t?a.call(e,{name:"functionName",hash:{},data:o,loc:{start:{line:26,column:21},end:{line:26,column:37}}}):a))+"(tracker, "+s((u(r,"startLow")||n&&u(n,"startLow")||i).call(e,n!=null?u(n,"typeName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:26,column:47},end:{line:26,column:68}}}))+`){ const { context, timestamp, ...data } = `+s((u(r,"startLow")||n&&u(n,"startLow")||i).call(e,n!=null?u(n,"typeName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:27,column:42},end:{line:27,column:63}}}))+`; tracker.track(buildSelfDescribingEvent({ event: { schema: '`+s((a=(a=u(r,"igluUrl")||(n!=null?u(n,"igluUrl"):n))!=null?a:i,typeof a===t?a.call(e,{name:"igluUrl",hash:{},data:o,loc:{start:{line:31,column:15},end:{line:31,column:26}}}):a))+`', data } }), context, timestamp); } /** * Creates a Snowplow `+s((a=(a=u(r,"typeName")||(n!=null?u(n,"typeName"):n))!=null?a:i,typeof a===t?a.call(e,{name:"typeName",hash:{},data:o,loc:{start:{line:38,column:22},end:{line:38,column:34}}}):a))+` entity. * @param { `+s((a=(a=u(r,"typeName")||(n!=null?u(n,"typeName"):n))!=null?a:i,typeof a===t?a.call(e,{name:"typeName",hash:{},data:o,loc:{start:{line:39,column:12},end:{line:39,column:24}}}):a))+" } "+s((u(r,"startLow")||n&&u(n,"startLow")||i).call(e,n!=null?u(n,"typeName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:39,column:27},end:{line:39,column:48}}}))+" - Attributes for "+s((a=(a=u(r,"typeName")||(n!=null?u(n,"typeName"):n))!=null?a:i,typeof a===t?a.call(e,{name:"typeName",hash:{},data:o,loc:{start:{line:39,column:66},end:{line:39,column:78}}}):a))+`. */ export function create`+s((a=(a=u(r,"typeName")||(n!=null?u(n,"typeName"):n))!=null?a:i,typeof a===t?a.call(e,{name:"typeName",hash:{},data:o,loc:{start:{line:41,column:22},end:{line:41,column:34}}}):a))+"("+s((u(r,"startLow")||n&&u(n,"startLow")||i).call(e,n!=null?u(n,"typeName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:41,column:35},end:{line:41,column:56}}}))+`){ return { schema: '`+s((a=(a=u(r,"igluUrl")||(n!=null?u(n,"igluUrl"):n))!=null?a:i,typeof a===t?a.call(e,{name:"igluUrl",hash:{},data:o,loc:{start:{line:43,column:13},end:{line:43,column:24}}}):a))+`', data: `+s((u(r,"startLow")||n&&u(n,"startLow")||i).call(e,n!=null?u(n,"typeName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:44,column:10},end:{line:44,column:31}}}))+` } } `},5:function(l,n,r,f,o,a,e){var i,t=n??(l.nullContext||{}),s=l.lambda,u=l.escapeExpression,m=l.hooks.helperMissing,c=l.lookupProperty||function(y,g){if(Object.prototype.hasOwnProperty.call(y,g))return y[g]};return((i=c(r,"if").call(t,n!=null?c(n,"entities"):n,{name:"if",hash:{},fn:l.program(6,o,0,a,e),inverse:l.noop,data:o,loc:{start:{line:50,column:0},end:{line:57,column:7}}}))!=null?i:"")+"/**"+((i=c(r,"if").call(t,c(r,"lookup").call(t,e[1]!=null?c(e[1],"metadataForAllEventSpecs"):e[1],n!=null?c(n,"id"):n,{name:"lookup",hash:{},data:o,loc:{start:{line:59,column:8},end:{line:59,column:52}}}),{name:"if",hash:{},fn:l.program(9,o,0,a,e),inverse:l.noop,data:o,loc:{start:{line:59,column:1},end:{line:59,column:120}}}))!=null?i:"")+` * Tracks a `+u(s(n!=null?c(n,"generatedName"):n,n))+` event specification. * `+u((c(r,"addEventSpecificationIdentifier")||n&&c(n,"addEventSpecificationIdentifier")||m).call(t,n!=null?c(n,"id"):n,{name:"addEventSpecificationIdentifier",hash:{},data:o,loc:{start:{line:61,column:3},end:{line:61,column:46}}}))+` * @param {Tracker} tracker - Tracker to send the tracking event specification to. * @param { `+u(s(n!=null?c(n,"event"):n,n))+" & Timestamp"+((i=c(r,"if").call(t,n!=null?c(n,"entities"):n,{name:"if",hash:{},fn:l.program(11,o,0,a,e),inverse:l.noop,data:o,loc:{start:{line:63,column:38},end:{line:63,column:91}}}))!=null?i:"")+" } "+u((c(r,"startLow")||n&&c(n,"startLow")||m).call(t,n!=null?c(n,"generatedName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:63,column:94},end:{line:63,column:125}}}))+" - Attributes for "+u(s(n!=null?c(n,"generatedName"):n,n))+` event specification. */ export function track`+u(s(n!=null?c(n,"generatedName"):n,n))+"Spec(tracker, "+u((c(r,"startLow")||n&&c(n,"startLow")||m).call(t,n!=null?c(n,"generatedName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:65,column:57},end:{line:65,column:88}}}))+`){ const eventSpecificationContext = createEventSpecification({ id: '`+u(s(n!=null?c(n,"id"):n,n))+`', name: '`+u(s(n!=null?c(n,"name"):n,n))+`', data_product_id: '`+u(s(n!=null?c(n,"dataProductId"):n,n))+`', data_product_name: '`+u(s(n!=null?c(n,"dataProductName"):n,n))+`', data_product_domain: '`+u(s(n!=null?c(n,"dataProductDomain"):n,n))+`' }); const context = Array.isArray(`+u((c(r,"startLow")||n&&c(n,"startLow")||m).call(t,n!=null?c(n,"generatedName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:74,column:31},end:{line:74,column:62}}}))+`.context) ? [...`+u((c(r,"startLow")||n&&c(n,"startLow")||m).call(t,n!=null?c(n,"generatedName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:75,column:10},end:{line:75,column:41}}}))+`.context, eventSpecificationContext] : [eventSpecificationContext]; const modified`+u(s(n!=null?c(n,"generatedName"):n,n))+` = { ...`+u((c(r,"startLow")||n&&c(n,"startLow")||m).call(t,n!=null?c(n,"generatedName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:79,column:7},end:{line:79,column:38}}}))+`, context, }; track`+u(s(n!=null?c(n,"event"):n,n))+"(tracker, modified"+u(s(n!=null?c(n,"generatedName"):n,n))+`); } `},6:function(l,n,r,f,o){var a,e=l.lambda,i=l.escapeExpression,t=l.lookupProperty||function(s,u){if(Object.prototype.hasOwnProperty.call(s,u))return s[u]};return`/** * Typedef for `+i(e(n!=null?t(n,"generatedName"):n,n))+` event specification contexts. * @typedef {object} `+i(e(n!=null?t(n,"event"):n,n))+`Contexts * @property {(`+((a=t(r,"join").call(n??(l.nullContext||{}),n!=null?t(n,"entities"):n," | ","Context",{name:"join",hash:{},fn:l.program(7,o,0),inverse:l.noop,data:o,loc:{start:{line:54,column:15},end:{line:54,column:63}}}))!=null?a:"")+")[]} [context] Contexts to include in the "+i(e(n!=null?t(n,"generatedName"):n,n))+` event specification. */ `},7:function(l,n,r,f,o){return""},9:function(l,n,r,f,o,a,e){var i=l.lookupProperty||function(t,s){if(Object.prototype.hasOwnProperty.call(t,s))return t[s]};return l.escapeExpression((i(r,"warningsMetadataJs")||n&&i(n,"warningsMetadataJs")||l.hooks.helperMissing).call(n??(l.nullContext||{}),e[1]!=null?i(e[1],"metadataForAllEventSpecs"):e[1],n!=null?i(n,"id"):n,{name:"warningsMetadataJs",hash:{},data:o,loc:{start:{line:59,column:54},end:{line:59,column:113}}}))},11:function(l,n,r,f,o){var a=l.lookupProperty||function(e,i){if(Object.prototype.hasOwnProperty.call(e,i))return e[i]};return" & "+l.escapeExpression(l.lambda(n!=null?a(n,"event"):n,n))+"Contexts"},compiler:[8,">= 4.3.0"],main:function(l,n,r,f,o,a,e){var i,t,s,u=n??(l.nullContext||{}),m=l.lookupProperty||function(y,g){if(Object.prototype.hasOwnProperty.call(y,g))return y[g]},c=((i=m(r,"if").call(u,(i=n!=null?m(n,"eventSpecifications"):n)!=null?m(i,"length"):i,{name:"if",hash:{},fn:l.program(1,o,0,a,e),inverse:l.noop,data:o,loc:{start:{line:1,column:0},end:{line:12,column:7}}}))!=null?i:"")+` /** * Typedef for a Node.js tracker object. * @typedef {object} Tracker */ `;return i=(t=(t=m(r,"type")||(n!=null?m(n,"type"):n))!=null?t:l.hooks.helperMissing,s={name:"type",hash:{},fn:l.program(3,o,0,a,e),inverse:l.noop,data:o,loc:{start:{line:19,column:0},end:{line:47,column:9}}},typeof t=="function"?t.call(u,s):t),m(r,"type")||(i=l.hooks.blockHelperMissing.call(n,i,s)),i!=null&&(c+=i),c+` `+((i=m(r,"each").call(u,n!=null?m(n,"eventSpecifications"):n,{name:"each",hash:{},fn:l.program(5,o,0,a,e),inverse:l.noop,data:o,loc:{start:{line:49,column:0},end:{line:85,column:9}}}))!=null?i:"")},useData:!0,useDepths:!0}});var ul=E((Sa,il)=>{"use strict";il.exports={id:{language:"typescript",tracker:"@snowplow/browser-tracker"},1:function(l,n,r,f,o){return`/** * Creates a Snowplow Event Specification entity. */ export function createEventSpecification(eventSpecification: EventSpecification){ return { schema: 'iglu:com.snowplowanalytics.snowplow/event_specification/jsonschema/1-0-3', data: eventSpecification, } } /** * Automatically attached context for event specifications */ interface EventSpecification { id: string; name: string; data_product_id: string; data_product_name: string; data_product_domain: string; } `},3:function(l,n,r,f,o){return`const ajv = new Ajv({ allErrors: true, verbose: true, strict: false }); addFormats(ajv); type EventSpecIdInput = { __esId: string | undefined }; type ERROR_TYPES = | "SCHEMA_VALIDATION_ERROR" | "CARDINALITY_RULES_ERROR" | "CARDINALITY_RULES_ERROR_NOT_PRESENT"; type ERROR_CODE = { code: number; message: string; description: string }; type ERROR_CODES_DICT = Record<ERROR_TYPES, (schema: string) => ERROR_CODE>; const ERROR_CODES: ERROR_CODES_DICT = { SCHEMA_VALIDATION_ERROR: (schema: string) => ({ code: 100, message: "Snowtype Schema Validation Error", description: \`'There was passing of values that does not match the JSON Schema definition for \${schema}.'\`, }), CARDINALITY_RULES_ERROR: (schema: string) => ({ code: 200, message: "Snowtype Entity Cardinality Rules Error", description: \`\${schema} failed entity rules validation.\`, }), CARDINALITY_RULES_ERROR_NOT_PRESENT: (schema: string) => ({ code: 201, message: "Snowtype Entity Cardinality Rules Error", description: \`No \${schema} context detected while a rule is present.\`, }), }; export type ErrorType = { code: number; message: string; description: string; errors: (ErrorObject | Record<string, unknown>)[]; }; const defaultViolationErrorHandler = (errorMessage: ErrorType) => { const msg = JSON.stringify(errorMessage, undefined, 4); if ( typeof process !== "undefined" && typeof process.env === "object" && process.env.NODE_ENV === "test" ) { throw new Error(JSON.stringify(errorMessage)); } console.warn(msg); }; export type SnowtypeOptions = { violationsHandler: (errorMessage: ErrorType) => void; }; let violationsHandler = defaultViolationErrorHandler; export const snowtype = { setOptions(options: Partial<SnowtypeOptions>) { violationsHandler = options.violationsHandler || violationsHandler; }, }; function validateSchema(sdj: SelfDescribingJson, esId?: string) { let schemaToValidateWith = esId && schemasObject[esId] && (schemasObject[esId] as Record<string, AnySchema>)[sdj.schema]; if(!schemaToValidateWith){ schemaToValidateWith = schemasObject[sdj.schema] } const valid = ajv.validate(schemaToValidateWith, sdj.data); if (!valid && ajv.errors?.length) { violationsHandler({ ...ERROR_CODES.SCHEMA_VALIDATION_ERROR(sdj.schema), errors: ajv.errors, }); } } function between(lowerBound: number, upperBound: number){ return (input: number) => input >= lowerBound && input <= upperBound } function atLeast(lowerBound: number){ return (input: number) => input >= lowerBound } function compare({ minCardinality, maxCardinality }: CardinalityRule) { if(typeof minCardinality === 'number' && typeof maxCardinality === 'number'){ return between(minCardinality, maxCardinality) } if(typeof minCardinality === 'number'){ return atLeast(minCardinality) } return () => true } function check(cardinalityRule: CardinalityRule, input: number): boolean { const comparator = compare(cardinalityRule); const isValid = comparator(input); return isValid; } function validateEntityRules( eventSpecId: keyof typeof entityRules, context?: SelfDescribingJson[] ) { const validationRules = entityRules[eventSpecId]; if (!validationRules) { return; } if (!Array.isArray(context)) { context = []; } const contextCounts = context.reduce<Record<string, number>>((accum, cur) => { const schema = cur.schema; if (accum[schema]) { accum[schema] += 1; } else { accum[schema] = 1; } return accum; }, {}); Object.entries(validationRules).forEach(([schema, cardinalityRule]) => { const input = contextCounts[schema]; if (!input && cardinalityRule?.minCardinality !== 0) { violationsHandler({ ...ERROR_CODES.CARDINALITY_RULES_ERROR_NOT_PRESENT(schema), errors: [], }); return; } const isValid = check(cardinalityRule, input || 0); if (!isValid) { violationsHandler({ ...ERROR_CODES.CARDINALITY_RULES_ERROR(schema), errors: [{ ...cardinalityRule, currentCardinality: input }], }); } }); } `},5:function(l,n,r,f,o,a,e){var i,t=n??(l.nullContext||{}),s=l.lookupProperty||function(u,m){if(Object.prototype.hasOwnProperty.call(u,m))return u[m]};return((i=s(r,"unless").call(t,n!=null?s(n,"isEntityPropertyRule"):n,{name:"unless",hash:{},fn:l.program(6,o,0,a,e),inverse:l.noop,data:o,loc:{start:{line:166,column:0},end:{line:185,column:11}}}))!=null?i:"")+((i=s(r,"unless").call(t,n!=null?s(n,"isEventPropertyRule"):n,{name:"unless",hash:{},fn:l.program(15,o,0,a,e),inverse:l.noop,data:o,loc:{start:{line:186,column:0},end:{line:196,column:11}}}))!=null?i:"")},6:function(l,n,r,f,o,a,e){var i,t,s=n??(l.nullContext||{}),u=l.hooks.helperMissing,m="function",c=l.escapeExpression,y=l.lookupProperty||function(g,p){if(Object.prototype.hasOwnProperty.call(g,p))return g[p]};return`/** * Track a Snowplow event for `+c((t=(t=y(r,"typeName")||(n!=null?y(n,"typeName"):n))!=null?t:u,typeof t===m?t.call(s,{name:"typeName",hash:{},data:o,loc:{start:{line:168,column:30},end:{line:168,column:42}}}):t))+`. * `+c((t=(t=y(r,"description")||(n!=null?y(n,"description"):n))!=null?t:u,typeof t===m?t.call(s,{name:"description",hash:{},data:o,loc:{start:{line:169,column:3},end:{line:169,column:18}}}):t))+` */ `+((i=y(r,"unless").call(s,n!=null?y(n,"isEventPropertyRule"):n,{name:"unless",hash:{},fn:l.program(7,o,0,a,e),inverse:l.noop,data:o,loc:{start:{line:171,column:0},end:{line:171,column:49}}}))!=null?i:"")+"function track"+c((t=(t=y(r,"functionName")||(n!=null?y(n,"functionName"):n))!=null?t:u,typeof t===m?t.call(s,{name:"functionName",hash:{},data:o,loc:{start:{line:171,column:63},end:{line:171,column:79}}}):t))+"<T extends {} = any>("+c((y(r,"startLow")||n&&y(n,"startLow")||u).call(s,n!=null?y(n,"typeName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:171,column:100},end:{line:171,column:121}}}))+": "+c((t=(t=y(r,"typeName")||(n!=null?y(n,"typeName"):n))!=null?t:u,typeof t===m?t.call(s,{name:"typeName",hash:{},data:o,loc:{start:{line:171,column:123},end:{line:171,column:135}}}):t))+` & ContextsOrTimestamp<T>, trackers?: string[]){ const { context, timestamp,`+((i=y(r,"if").call(s,e[1]!=null?y(e[1],"validations"):e[1],{name:"if",hash:{},fn:l.program(9,o,0,a,e),inverse:l.noop,data:o,loc:{start:{line:172,column:29},end:{line:172,column:66}}}))!=null?i:"")+" ...data } = "+c((y(r,"startLow")||n&&y(n,"startLow")||u).call(s,n!=null?y(n,"typeName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:172,column:79},end:{line:172,column:100}}}))+((i=y(r,"if").call(s,e[1]!=null?y(e[1],"validations"):e[1],{name:"if",hash:{},fn:l.program(11,o,0,a,e),inverse:l.noop,data:o,loc:{start:{line:172,column:100},end:{line:172,column:180}}}))!=null?i:"")+`; const event: SelfDescribingJson = { schema: '`+c((t=(t=y(r,"igluUrl")||(n!=null?y(n,"igluUrl"):n))!=null?t:u,typeof t===m?t.call(s,{name:"igluUrl",hash:{},data:o,loc:{start:{line:174,column:13},end:{line:174,column:24}}}):t))+`', data }; `+((i=y(r,"if").call(s,e[1]!=null?y(e[1],"validations"):e[1],{name:"if",hash:{},fn:l.program(13,o,0,a,e),inverse:l.noop,data:o,loc:{start:{line:177,column:2},end:{line:177,column:101}}}))!=null?i:"")+` trackSelfDescribingEvent({ event, context, timestamp, }, trackers); } `},7:function(l,n,r,f,o){return"export "},9:function(l,n,r,f,o){return" __esId,"},11:function(l,n,r,f,o){var a=l.lookupProperty||function(e,i){if(Object.prototype.hasOwnProperty.call(e,i))return e[i]};return" as typeof "+l.escapeExpression((a(r,"startLow")||n&&a(n,"startLow")||l.hooks.helperMissing).call(n??(l.nullContext||{}),n!=null?a(n,"typeName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:172,column:133},end:{line:172,column:154}}}))+" & EventSpecIdInput"},13:function(l,n,r,f,o){return"[event].concat(context || []).forEach(s => validateSchema(s, __esId));"},15:function(l,n,r,f,o){var a,e=n??(l.nullContext||{}),i=l.hooks.helperMissing,t="function",s=l.escapeExpression,u=l.lookupProperty||function(m,c){if(Object.prototype.hasOwnProperty.call(m,c))return m[c]};return`/** * Creates a Snowplow `+s((a=(a=u(r,"typeName")||(n!=null?u(n,"typeName"):n))!=null?a:i,typeof a===t?a.call(e,{name:"typeName",hash:{},data:o,loc:{start:{line:188,column:22},end:{line:188,column:34}}}):a))+` entity. */ export function create`+s((a=(a=u(r,"typeName")||(n!=null?u(n,"typeName"):n))!=null?a:i,typeof a===t?a.call(e,{name:"typeName",hash:{},data:o,loc:{start:{line:190,column:22},end:{line:190,column:34}}}):a))+"("+s((u(r,"startLow")||n&&u(n,"startLow")||i).call(e,n!=null?u(n,"typeName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:190,column:35},end:{line:190,column:56}}}))+": "+s((a=(a=u(r,"typeName")||(n!=null?u(n,"typeName"):n))!=null?a:i,typeof a===t?a.call(e,{name:"typeName",hash:{},data:o,loc:{start:{line:190,column:58},end:{line:190,column:70}}}):a))+`){ return { schema: '`+s((a=(a=u(r,"igluUrl")||(n!=null?u(n,"igluUrl"):n))!=null?a:i,typeof a===t?a.call(e,{name:"igluUrl",hash:{},data:o,loc:{start:{line:192,column:13},end:{line:192,column:24}}}):a))+`', data: `+s((u(r,"startLow")||n&&u(n,"startLow")||i).call(e,n!=null?u(n,"typeName"):n,{name:"startLow",hash:{},data:o,loc:{start:{line:193,column:10},end:{line:193,column:31}}}))+` } } `},17:function(l,n,r,f,o,a,e){var i,t=n??(l.nullContext||{}),s=l.lambda,u=l.escapeExpression,m=l.hooks.helperMissing,c=l.lookupProperty||function(y,g){if(Object.prototype.hasOwnProperty.call(y,g))return y[g]};return"/**"+((i=c(r,"if").call(t,c(r,"lookup").call(t,e[1]!=null?c(e[1],"metadataForAllEventSpecs"):e[1],n!=null?c(n,"id"):n,{name:"lookup",hash:{},data:o,loc:{start:{line:201,column:8},end:{line:201,column:52}}}),{name:"if",hash:{},fn:l.program(18,o,0,a,e),inverse:l.noop,data:o,loc:{start:{line:201,c