@walkeros/web-source-datalayer 3.0.2 → 3.1.0-next-1773969156384
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dev.d.mts +7 -5
- package/dist/dev.d.ts +7 -5
- package/dist/dev.js +1 -1
- package/dist/dev.js.map +1 -1
- package/dist/dev.mjs +1 -1
- package/dist/dev.mjs.map +1 -1
- package/dist/examples/index.d.mts +5 -4
- package/dist/examples/index.d.ts +5 -4
- package/dist/examples/index.js +50 -12
- package/dist/examples/index.mjs +47 -10
- package/dist/index.browser.js +1 -1
- package/dist/index.d.mts +5 -4
- package/dist/index.d.ts +5 -4
- package/dist/index.es5.js +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/walkerOS.json +27 -7
- package/package.json +6 -4
package/dist/dev.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as _walkeros_core_dev from '@walkeros/core/dev';
|
|
2
2
|
import { z } from '@walkeros/core/dev';
|
|
3
|
-
import { Source, Flow } from '@walkeros/core';
|
|
3
|
+
import { Source, Flow, Trigger } from '@walkeros/core';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* JavaScript variable name
|
|
@@ -68,14 +68,16 @@ declare namespace step {
|
|
|
68
68
|
export { step_consentUpdate as consentUpdate, step_directEvent as directEvent, step_gtagAddToCart as gtagAddToCart, step_gtagPurchase as gtagPurchase, step_gtagViewItem as gtagViewItem };
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
-
|
|
72
|
-
|
|
71
|
+
declare const createTrigger: Trigger.CreateFn<unknown, void>;
|
|
72
|
+
/** Pushes step example input to window.dataLayer after source init. */
|
|
73
|
+
declare const trigger: (input: unknown, env: Record<string, unknown>) => void;
|
|
73
74
|
|
|
75
|
+
declare const index_createTrigger: typeof createTrigger;
|
|
74
76
|
declare const index_env: typeof env;
|
|
75
|
-
declare const index_setup: typeof setup;
|
|
76
77
|
declare const index_step: typeof step;
|
|
78
|
+
declare const index_trigger: typeof trigger;
|
|
77
79
|
declare namespace index {
|
|
78
|
-
export {
|
|
80
|
+
export { index_createTrigger as createTrigger, index_env as env, index_step as step, index_trigger as trigger };
|
|
79
81
|
}
|
|
80
82
|
|
|
81
83
|
export { index as examples, index$1 as schemas };
|
package/dist/dev.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as _walkeros_core_dev from '@walkeros/core/dev';
|
|
2
2
|
import { z } from '@walkeros/core/dev';
|
|
3
|
-
import { Source, Flow } from '@walkeros/core';
|
|
3
|
+
import { Source, Flow, Trigger } from '@walkeros/core';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* JavaScript variable name
|
|
@@ -68,14 +68,16 @@ declare namespace step {
|
|
|
68
68
|
export { step_consentUpdate as consentUpdate, step_directEvent as directEvent, step_gtagAddToCart as gtagAddToCart, step_gtagPurchase as gtagPurchase, step_gtagViewItem as gtagViewItem };
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
-
|
|
72
|
-
|
|
71
|
+
declare const createTrigger: Trigger.CreateFn<unknown, void>;
|
|
72
|
+
/** Pushes step example input to window.dataLayer after source init. */
|
|
73
|
+
declare const trigger: (input: unknown, env: Record<string, unknown>) => void;
|
|
73
74
|
|
|
75
|
+
declare const index_createTrigger: typeof createTrigger;
|
|
74
76
|
declare const index_env: typeof env;
|
|
75
|
-
declare const index_setup: typeof setup;
|
|
76
77
|
declare const index_step: typeof step;
|
|
78
|
+
declare const index_trigger: typeof trigger;
|
|
77
79
|
declare namespace index {
|
|
78
|
-
export {
|
|
80
|
+
export { index_createTrigger as createTrigger, index_env as env, index_step as step, index_trigger as trigger };
|
|
79
81
|
}
|
|
80
82
|
|
|
81
83
|
export { index as examples, index$1 as schemas };
|
package/dist/dev.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e,t=Object.defineProperty,a=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,n=Object.prototype.hasOwnProperty,i=(e,a)=>{for(var r in a)t(e,r,{get:a[r],enumerable:!0})},o={};i(o,{examples:()=>
|
|
1
|
+
"use strict";var e,t=Object.defineProperty,a=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,n=Object.prototype.hasOwnProperty,i=(e,a)=>{for(var r in a)t(e,r,{get:a[r],enumerable:!0})},o={};i(o,{examples:()=>v,schemas:()=>c}),module.exports=(e=o,((e,i,o,c)=>{if(i&&"object"==typeof i||"function"==typeof i)for(let s of r(i))n.call(e,s)||s===o||t(e,s,{get:()=>i[s],enumerable:!(c=a(i,s))||c.enumerable});return e})(t({},"__esModule",{value:!0}),e));var c={};i(c,{EventPrefix:()=>m,JavaScriptVarName:()=>g,SettingsSchema:()=>l,settings:()=>y});var s=require("@walkeros/core/dev"),d=require("@walkeros/core/dev"),u=require("@walkeros/core/dev"),g=u.z.string().min(1).regex(/^[a-zA-Z_$][a-zA-Z0-9_$]*$/,"Must be a valid JavaScript identifier").describe("JavaScript variable name"),m=u.z.string().min(1).describe("Prefix for filtering dataLayer events"),l=d.z.object({name:g.default("dataLayer").describe("DataLayer variable name (default: dataLayer)").optional(),prefix:m.default("dataLayer").describe("Event prefix for filtering which events to process").optional(),filter:d.z.any().describe("Custom filter function: (event: unknown) => boolean | Promise<boolean>").optional()}),y=(0,s.zodToSchema)(l),v={};i(v,{createTrigger:()=>j,env:()=>p,step:()=>L,trigger:()=>k});var p={};i(p,{push:()=>b});var _=()=>{},w=()=>()=>Promise.resolve({ok:!0}),f={error:_,warn:_,info:_,debug:_,throw:e=>{throw"string"==typeof e?new Error(e):e},json:_,scope:()=>f},b={get push(){return w()},get command(){return w()},get elb(){return w()},get window(){return{dataLayer:[],addEventListener:_,removeEventListener:_}},logger:f},L={};i(L,{consentUpdate:()=>S,directEvent:()=>P,gtagAddToCart:()=>U,gtagPurchase:()=>h,gtagViewItem:()=>E});var h={trigger:{type:"gtag"},in:["event","purchase",{transaction_id:"T-12345",value:25.42,currency:"EUR",items:[{item_id:"SKU-1",item_name:"T-Shirt",quantity:1}]}],out:{name:"dataLayer purchase",data:{transaction_id:"T-12345",value:25.42,currency:"EUR",items:[{item_id:"SKU-1",item_name:"T-Shirt",quantity:1}]},entity:"dataLayer",action:"purchase"}},S={trigger:{type:"gtag"},in:["consent","update",{ad_storage:"granted",analytics_storage:"granted"}],out:{name:"dataLayer consent update",data:{ad_storage:"granted",analytics_storage:"granted"},entity:"dataLayer",action:"consent"}},U={trigger:{type:"gtag"},in:["event","add_to_cart",{currency:"EUR",value:15.25,items:[{item_id:"SKU_12345",item_name:"T-Shirt",item_variant:"red",quantity:1,price:15.25}]}],out:{name:"dataLayer add_to_cart",data:{currency:"EUR",value:15.25,items:[{item_id:"SKU_12345",item_name:"T-Shirt",item_variant:"red",quantity:1,price:15.25}]},entity:"dataLayer",action:"add_to_cart"}},E={trigger:{type:"gtag"},in:["event","view_item",{currency:"EUR",value:29.99,items:[{item_id:"SKU_67890",item_name:"Sneakers",item_category:"Footwear",price:29.99}]}],out:{name:"dataLayer view_item",data:{currency:"EUR",value:29.99,items:[{item_id:"SKU_67890",item_name:"Sneakers",item_category:"Footwear",price:29.99}]},entity:"dataLayer",action:"view_item"}},P={trigger:{type:"direct"},in:{event:"custom_event",category:"engagement",label:"video_play"},out:{name:"dataLayer custom_event",data:{category:"engagement",label:"video_play"},entity:"dataLayer",action:"custom_event"}},T=require("@walkeros/collector"),j=async e=>{let t;return{get flow(){return t},trigger:()=>async a=>{var r,n;if(!t){const a={...e};if(a.sources){a.sources={...a.sources};for(const[e,t]of Object.entries(a.sources))(null==(r=t.env)?void 0:r.window)||(a.sources[e]={...t,env:{...t.env,window:window}})}const i=await(0,T.startFlow)({...a,run:null==(n=a.run)||n});t={collector:i.collector,elb:i.elb}}const i=window;i.dataLayer||(i.dataLayer=[]),i.dataLayer.push(a)}}},k=(e,t)=>{const a=t.window;a.dataLayer||(a.dataLayer=[]),a.dataLayer.push(e)};//# sourceMappingURL=dev.js.map
|
package/dist/dev.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/dev.ts","../src/schemas/index.ts","../src/schemas/settings.ts","../src/schemas/primitives.ts","../src/examples/index.ts","../src/examples/env.ts","../src/examples/step.ts","../src/examples/setup.ts"],"sourcesContent":["export * as schemas from './schemas';\nexport * as examples from './examples';\n","import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\n\n// Export primitives\nexport * from './primitives';\n\n// Export Zod schemas and types\nexport { SettingsSchema, type Settings } from './settings';\n\n// JSON Schema exports (for website PropertyTable and documentation tools)\nexport const settings = zodToSchema(SettingsSchema);\n","import { z } from '@walkeros/core/dev';\nimport { JavaScriptVarName, EventPrefix } from './primitives';\n\n/**\n * DataLayer source settings schema\n */\nexport const SettingsSchema = z.object({\n name: JavaScriptVarName.default('dataLayer')\n .describe('DataLayer variable name (default: dataLayer)')\n .optional(),\n\n prefix: EventPrefix.default('dataLayer')\n .describe('Event prefix for filtering which events to process')\n .optional(),\n\n filter: z\n .any()\n .describe(\n 'Custom filter function: (event: unknown) => boolean | Promise<boolean>',\n )\n .optional(),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\n/**\n * JavaScript variable name\n * Used for dataLayer variable naming\n */\nexport const JavaScriptVarName = z\n .string()\n .min(1)\n .regex(/^[a-zA-Z_$][a-zA-Z0-9_$]*$/, 'Must be a valid JavaScript identifier')\n .describe('JavaScript variable name');\n\n/**\n * Event prefix\n * Used for filtering dataLayer events\n */\nexport const EventPrefix = z\n .string()\n .min(1)\n .describe('Prefix for filtering dataLayer events');\n","export * as env from './env';\nexport * as step from './step';\nexport { setup } from './setup';\n","import type { Source, Elb, Logger } from '@walkeros/core';\n\n/**\n * Example environment configurations for dataLayer source\n *\n * These environments provide standardized mock structures for testing\n * dataLayer interception without requiring a real window object.\n */\n\n// Simple no-op function for mocking\nconst noop = () => {};\n\n// Create a properly typed elb/push/command function that returns a promise with PushResult\nconst createMockElbFn = (): Elb.Fn => {\n const fn = (() =>\n Promise.resolve({\n ok: true,\n })) as Elb.Fn;\n return fn;\n};\n\n// Simple no-op logger for demo purposes\nconst noopLogger: Logger.Instance = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n throw: (message: string | Error) => {\n throw typeof message === 'string' ? new Error(message) : message;\n },\n json: noop,\n scope: () => noopLogger,\n};\n\n/**\n * Environment interface for dataLayer source\n */\ninterface DataLayerEnv extends Source.BaseEnv {\n window?: typeof window;\n}\n\n/**\n * Mock window object with dataLayer array\n */\nconst createMockWindow = () => ({\n dataLayer: [] as unknown[],\n addEventListener: noop,\n removeEventListener: noop,\n});\n\n/**\n * Standard mock environment for testing dataLayer source\n *\n * Use this for testing dataLayer.push interception and event transformation\n * without requiring a real browser environment.\n */\nexport const push: DataLayerEnv = {\n get push() {\n return createMockElbFn();\n },\n get command() {\n return createMockElbFn();\n },\n get elb() {\n return createMockElbFn();\n },\n get window() {\n return createMockWindow() as unknown as typeof window;\n },\n logger: noopLogger,\n};\n","import type { Flow } from '@walkeros/core';\n\nexport const gtagPurchase: Flow.StepExample = {\n in: [\n 'event',\n 'purchase',\n {\n transaction_id: 'T-12345',\n value: 25.42,\n currency: 'EUR',\n items: [{ item_id: 'SKU-1', item_name: 'T-Shirt', quantity: 1 }],\n },\n ],\n out: {\n name: 'dataLayer purchase',\n data: {\n transaction_id: 'T-12345',\n value: 25.42,\n currency: 'EUR',\n items: [{ item_id: 'SKU-1', item_name: 'T-Shirt', quantity: 1 }],\n },\n entity: 'dataLayer',\n action: 'purchase',\n },\n};\n\nexport const consentUpdate: Flow.StepExample = {\n in: [\n 'consent',\n 'update',\n {\n ad_storage: 'granted',\n analytics_storage: 'granted',\n },\n ],\n out: {\n name: 'dataLayer consent update',\n data: {\n ad_storage: 'granted',\n analytics_storage: 'granted',\n },\n entity: 'dataLayer',\n action: 'consent update',\n },\n};\n\nexport const gtagAddToCart: Flow.StepExample = {\n in: [\n 'event',\n 'add_to_cart',\n {\n currency: 'EUR',\n value: 15.25,\n items: [\n {\n item_id: 'SKU_12345',\n item_name: 'T-Shirt',\n item_variant: 'red',\n quantity: 1,\n price: 15.25,\n },\n ],\n },\n ],\n out: {\n name: 'dataLayer add_to_cart',\n data: {\n currency: 'EUR',\n value: 15.25,\n items: [\n {\n item_id: 'SKU_12345',\n item_name: 'T-Shirt',\n item_variant: 'red',\n quantity: 1,\n price: 15.25,\n },\n ],\n },\n entity: 'dataLayer',\n action: 'add_to_cart',\n },\n};\n\nexport const gtagViewItem: Flow.StepExample = {\n in: [\n 'event',\n 'view_item',\n {\n currency: 'EUR',\n value: 29.99,\n items: [\n {\n item_id: 'SKU_67890',\n item_name: 'Sneakers',\n item_category: 'Footwear',\n price: 29.99,\n },\n ],\n },\n ],\n out: {\n name: 'dataLayer view_item',\n data: {\n currency: 'EUR',\n value: 29.99,\n items: [\n {\n item_id: 'SKU_67890',\n item_name: 'Sneakers',\n item_category: 'Footwear',\n price: 29.99,\n },\n ],\n },\n entity: 'dataLayer',\n action: 'view_item',\n },\n};\n\nexport const directEvent: Flow.StepExample = {\n in: {\n event: 'custom_event',\n category: 'engagement',\n label: 'video_play',\n },\n out: {\n name: 'dataLayer custom_event',\n data: {\n category: 'engagement',\n label: 'video_play',\n },\n entity: 'dataLayer',\n action: 'custom_event',\n },\n};\n","import type { Source } from '@walkeros/core';\n\n/** Prepopulates window.dataLayer before source init. */\nexport const setup: Source.SetupFn = (input, env) => {\n const win = env.window as Window & { dataLayer?: unknown[] };\n if (!win.dataLayer) win.dataLayer = [];\n\n if (Array.isArray(input)) {\n for (const item of input) win.dataLayer.push(item);\n } else if (input && typeof input === 'object') {\n win.dataLayer.push(input);\n }\n};\n"],"mappings":"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","names":["import_dev","import_dev"]}
|
|
1
|
+
{"version":3,"sources":["../src/dev.ts","../src/schemas/index.ts","../src/schemas/settings.ts","../src/schemas/primitives.ts","../src/examples/index.ts","../src/examples/env.ts","../src/examples/step.ts","../src/examples/trigger.ts"],"sourcesContent":["export * as schemas from './schemas';\nexport * as examples from './examples';\n","import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\n\n// Export primitives\nexport * from './primitives';\n\n// Export Zod schemas and types\nexport { SettingsSchema, type Settings } from './settings';\n\n// JSON Schema exports (for website PropertyTable and documentation tools)\nexport const settings = zodToSchema(SettingsSchema);\n","import { z } from '@walkeros/core/dev';\nimport { JavaScriptVarName, EventPrefix } from './primitives';\n\n/**\n * DataLayer source settings schema\n */\nexport const SettingsSchema = z.object({\n name: JavaScriptVarName.default('dataLayer')\n .describe('DataLayer variable name (default: dataLayer)')\n .optional(),\n\n prefix: EventPrefix.default('dataLayer')\n .describe('Event prefix for filtering which events to process')\n .optional(),\n\n filter: z\n .any()\n .describe(\n 'Custom filter function: (event: unknown) => boolean | Promise<boolean>',\n )\n .optional(),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\n/**\n * JavaScript variable name\n * Used for dataLayer variable naming\n */\nexport const JavaScriptVarName = z\n .string()\n .min(1)\n .regex(/^[a-zA-Z_$][a-zA-Z0-9_$]*$/, 'Must be a valid JavaScript identifier')\n .describe('JavaScript variable name');\n\n/**\n * Event prefix\n * Used for filtering dataLayer events\n */\nexport const EventPrefix = z\n .string()\n .min(1)\n .describe('Prefix for filtering dataLayer events');\n","export * as env from './env';\nexport * as step from './step';\nexport { createTrigger, trigger } from './trigger';\n","import type { Source, Elb, Logger } from '@walkeros/core';\n\n/**\n * Example environment configurations for dataLayer source\n *\n * These environments provide standardized mock structures for testing\n * dataLayer interception without requiring a real window object.\n */\n\n// Simple no-op function for mocking\nconst noop = () => {};\n\n// Create a properly typed elb/push/command function that returns a promise with PushResult\nconst createMockElbFn = (): Elb.Fn => {\n const fn = (() =>\n Promise.resolve({\n ok: true,\n })) as Elb.Fn;\n return fn;\n};\n\n// Simple no-op logger for demo purposes\nconst noopLogger: Logger.Instance = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n throw: (message: string | Error) => {\n throw typeof message === 'string' ? new Error(message) : message;\n },\n json: noop,\n scope: () => noopLogger,\n};\n\n/**\n * Environment interface for dataLayer source\n */\ninterface DataLayerEnv extends Source.BaseEnv {\n window?: typeof window;\n}\n\n/**\n * Mock window object with dataLayer array\n */\nconst createMockWindow = () => ({\n dataLayer: [] as unknown[],\n addEventListener: noop,\n removeEventListener: noop,\n});\n\n/**\n * Standard mock environment for testing dataLayer source\n *\n * Use this for testing dataLayer.push interception and event transformation\n * without requiring a real browser environment.\n */\nexport const push: DataLayerEnv = {\n get push() {\n return createMockElbFn();\n },\n get command() {\n return createMockElbFn();\n },\n get elb() {\n return createMockElbFn();\n },\n get window() {\n return createMockWindow() as unknown as typeof window;\n },\n logger: noopLogger,\n};\n","import type { Flow } from '@walkeros/core';\n\nexport const gtagPurchase: Flow.StepExample = {\n trigger: { type: 'gtag' },\n in: [\n 'event',\n 'purchase',\n {\n transaction_id: 'T-12345',\n value: 25.42,\n currency: 'EUR',\n items: [{ item_id: 'SKU-1', item_name: 'T-Shirt', quantity: 1 }],\n },\n ],\n out: {\n name: 'dataLayer purchase',\n data: {\n transaction_id: 'T-12345',\n value: 25.42,\n currency: 'EUR',\n items: [{ item_id: 'SKU-1', item_name: 'T-Shirt', quantity: 1 }],\n },\n entity: 'dataLayer',\n action: 'purchase',\n },\n};\n\nexport const consentUpdate: Flow.StepExample = {\n trigger: { type: 'gtag' },\n in: [\n 'consent',\n 'update',\n {\n ad_storage: 'granted',\n analytics_storage: 'granted',\n },\n ],\n out: {\n name: 'dataLayer consent update',\n data: {\n ad_storage: 'granted',\n analytics_storage: 'granted',\n },\n entity: 'dataLayer',\n action: 'consent',\n },\n};\n\nexport const gtagAddToCart: Flow.StepExample = {\n trigger: { type: 'gtag' },\n in: [\n 'event',\n 'add_to_cart',\n {\n currency: 'EUR',\n value: 15.25,\n items: [\n {\n item_id: 'SKU_12345',\n item_name: 'T-Shirt',\n item_variant: 'red',\n quantity: 1,\n price: 15.25,\n },\n ],\n },\n ],\n out: {\n name: 'dataLayer add_to_cart',\n data: {\n currency: 'EUR',\n value: 15.25,\n items: [\n {\n item_id: 'SKU_12345',\n item_name: 'T-Shirt',\n item_variant: 'red',\n quantity: 1,\n price: 15.25,\n },\n ],\n },\n entity: 'dataLayer',\n action: 'add_to_cart',\n },\n};\n\nexport const gtagViewItem: Flow.StepExample = {\n trigger: { type: 'gtag' },\n in: [\n 'event',\n 'view_item',\n {\n currency: 'EUR',\n value: 29.99,\n items: [\n {\n item_id: 'SKU_67890',\n item_name: 'Sneakers',\n item_category: 'Footwear',\n price: 29.99,\n },\n ],\n },\n ],\n out: {\n name: 'dataLayer view_item',\n data: {\n currency: 'EUR',\n value: 29.99,\n items: [\n {\n item_id: 'SKU_67890',\n item_name: 'Sneakers',\n item_category: 'Footwear',\n price: 29.99,\n },\n ],\n },\n entity: 'dataLayer',\n action: 'view_item',\n },\n};\n\nexport const directEvent: Flow.StepExample = {\n trigger: { type: 'direct' },\n in: {\n event: 'custom_event',\n category: 'engagement',\n label: 'video_play',\n },\n out: {\n name: 'dataLayer custom_event',\n data: {\n category: 'engagement',\n label: 'video_play',\n },\n entity: 'dataLayer',\n action: 'custom_event',\n },\n};\n","import type { Trigger, Collector } from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\n\nconst createTrigger: Trigger.CreateFn<unknown, void> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<unknown, void> = () => async (content: unknown) => {\n // Lazy startFlow — source patches window.dataLayer.push during init\n if (!flow) {\n // Ensure dataLayer sources get the window env for interception\n const enrichedConfig = { ...config };\n if (enrichedConfig.sources) {\n enrichedConfig.sources = { ...enrichedConfig.sources };\n for (const [id, source] of Object.entries(enrichedConfig.sources)) {\n if (!source.env?.window) {\n enrichedConfig.sources[id] = {\n ...source,\n env: { ...source.env, window },\n };\n }\n }\n }\n const result = await startFlow({\n ...enrichedConfig,\n run: enrichedConfig.run ?? true,\n });\n flow = { collector: result.collector, elb: result.elb };\n }\n\n // Push to dataLayer — the interceptor catches it\n const win = window as Window & { dataLayer?: unknown[] };\n if (!win.dataLayer) win.dataLayer = [];\n win.dataLayer.push(content);\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n\n/** Pushes step example input to window.dataLayer after source init. */\nconst trigger = (input: unknown, env: Record<string, unknown>): void => {\n const win = env.window as Window & { dataLayer?: unknown[] };\n if (!win.dataLayer) win.dataLayer = [];\n win.dataLayer.push(input);\n};\n\nexport { createTrigger, trigger };\n"],"mappings":"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","names":["import_dev","import_dev","trigger"]}
|
package/dist/dev.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var e=Object.defineProperty,
|
|
1
|
+
var e=Object.defineProperty,t=(t,a)=>{for(var r in a)e(t,r,{get:a[r],enumerable:!0})},a={};t(a,{EventPrefix:()=>c,JavaScriptVarName:()=>o,SettingsSchema:()=>s,settings:()=>d});import{zodToSchema as r}from"@walkeros/core/dev";import{z as i}from"@walkeros/core/dev";import{z as n}from"@walkeros/core/dev";var o=n.string().min(1).regex(/^[a-zA-Z_$][a-zA-Z0-9_$]*$/,"Must be a valid JavaScript identifier").describe("JavaScript variable name"),c=n.string().min(1).describe("Prefix for filtering dataLayer events"),s=i.object({name:o.default("dataLayer").describe("DataLayer variable name (default: dataLayer)").optional(),prefix:c.default("dataLayer").describe("Event prefix for filtering which events to process").optional(),filter:i.any().describe("Custom filter function: (event: unknown) => boolean | Promise<boolean>").optional()}),d=r(s),m={};t(m,{createTrigger:()=>S,env:()=>g,step:()=>_,trigger:()=>U});var g={};t(g,{push:()=>v});var u=()=>{},y=()=>()=>Promise.resolve({ok:!0}),l={error:u,warn:u,info:u,debug:u,throw:e=>{throw"string"==typeof e?new Error(e):e},json:u,scope:()=>l},v={get push(){return y()},get command(){return y()},get elb(){return y()},get window(){return{dataLayer:[],addEventListener:u,removeEventListener:u}},logger:l},_={};t(_,{consentUpdate:()=>w,directEvent:()=>b,gtagAddToCart:()=>f,gtagPurchase:()=>p,gtagViewItem:()=>L});var p={trigger:{type:"gtag"},in:["event","purchase",{transaction_id:"T-12345",value:25.42,currency:"EUR",items:[{item_id:"SKU-1",item_name:"T-Shirt",quantity:1}]}],out:{name:"dataLayer purchase",data:{transaction_id:"T-12345",value:25.42,currency:"EUR",items:[{item_id:"SKU-1",item_name:"T-Shirt",quantity:1}]},entity:"dataLayer",action:"purchase"}},w={trigger:{type:"gtag"},in:["consent","update",{ad_storage:"granted",analytics_storage:"granted"}],out:{name:"dataLayer consent update",data:{ad_storage:"granted",analytics_storage:"granted"},entity:"dataLayer",action:"consent"}},f={trigger:{type:"gtag"},in:["event","add_to_cart",{currency:"EUR",value:15.25,items:[{item_id:"SKU_12345",item_name:"T-Shirt",item_variant:"red",quantity:1,price:15.25}]}],out:{name:"dataLayer add_to_cart",data:{currency:"EUR",value:15.25,items:[{item_id:"SKU_12345",item_name:"T-Shirt",item_variant:"red",quantity:1,price:15.25}]},entity:"dataLayer",action:"add_to_cart"}},L={trigger:{type:"gtag"},in:["event","view_item",{currency:"EUR",value:29.99,items:[{item_id:"SKU_67890",item_name:"Sneakers",item_category:"Footwear",price:29.99}]}],out:{name:"dataLayer view_item",data:{currency:"EUR",value:29.99,items:[{item_id:"SKU_67890",item_name:"Sneakers",item_category:"Footwear",price:29.99}]},entity:"dataLayer",action:"view_item"}},b={trigger:{type:"direct"},in:{event:"custom_event",category:"engagement",label:"video_play"},out:{name:"dataLayer custom_event",data:{category:"engagement",label:"video_play"},entity:"dataLayer",action:"custom_event"}};import{startFlow as h}from"@walkeros/collector";var S=async e=>{let t;return{get flow(){return t},trigger:()=>async a=>{var r,i;if(!t){const a={...e};if(a.sources){a.sources={...a.sources};for(const[e,t]of Object.entries(a.sources))(null==(r=t.env)?void 0:r.window)||(a.sources[e]={...t,env:{...t.env,window:window}})}const n=await h({...a,run:null==(i=a.run)||i});t={collector:n.collector,elb:n.elb}}const n=window;n.dataLayer||(n.dataLayer=[]),n.dataLayer.push(a)}}},U=(e,t)=>{const a=t.window;a.dataLayer||(a.dataLayer=[]),a.dataLayer.push(e)};export{m as examples,a as schemas};//# sourceMappingURL=dev.mjs.map
|
package/dist/dev.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/schemas/index.ts","../src/schemas/settings.ts","../src/schemas/primitives.ts","../src/examples/index.ts","../src/examples/env.ts","../src/examples/step.ts","../src/examples/setup.ts"],"sourcesContent":["import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\n\n// Export primitives\nexport * from './primitives';\n\n// Export Zod schemas and types\nexport { SettingsSchema, type Settings } from './settings';\n\n// JSON Schema exports (for website PropertyTable and documentation tools)\nexport const settings = zodToSchema(SettingsSchema);\n","import { z } from '@walkeros/core/dev';\nimport { JavaScriptVarName, EventPrefix } from './primitives';\n\n/**\n * DataLayer source settings schema\n */\nexport const SettingsSchema = z.object({\n name: JavaScriptVarName.default('dataLayer')\n .describe('DataLayer variable name (default: dataLayer)')\n .optional(),\n\n prefix: EventPrefix.default('dataLayer')\n .describe('Event prefix for filtering which events to process')\n .optional(),\n\n filter: z\n .any()\n .describe(\n 'Custom filter function: (event: unknown) => boolean | Promise<boolean>',\n )\n .optional(),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\n/**\n * JavaScript variable name\n * Used for dataLayer variable naming\n */\nexport const JavaScriptVarName = z\n .string()\n .min(1)\n .regex(/^[a-zA-Z_$][a-zA-Z0-9_$]*$/, 'Must be a valid JavaScript identifier')\n .describe('JavaScript variable name');\n\n/**\n * Event prefix\n * Used for filtering dataLayer events\n */\nexport const EventPrefix = z\n .string()\n .min(1)\n .describe('Prefix for filtering dataLayer events');\n","export * as env from './env';\nexport * as step from './step';\nexport { setup } from './setup';\n","import type { Source, Elb, Logger } from '@walkeros/core';\n\n/**\n * Example environment configurations for dataLayer source\n *\n * These environments provide standardized mock structures for testing\n * dataLayer interception without requiring a real window object.\n */\n\n// Simple no-op function for mocking\nconst noop = () => {};\n\n// Create a properly typed elb/push/command function that returns a promise with PushResult\nconst createMockElbFn = (): Elb.Fn => {\n const fn = (() =>\n Promise.resolve({\n ok: true,\n })) as Elb.Fn;\n return fn;\n};\n\n// Simple no-op logger for demo purposes\nconst noopLogger: Logger.Instance = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n throw: (message: string | Error) => {\n throw typeof message === 'string' ? new Error(message) : message;\n },\n json: noop,\n scope: () => noopLogger,\n};\n\n/**\n * Environment interface for dataLayer source\n */\ninterface DataLayerEnv extends Source.BaseEnv {\n window?: typeof window;\n}\n\n/**\n * Mock window object with dataLayer array\n */\nconst createMockWindow = () => ({\n dataLayer: [] as unknown[],\n addEventListener: noop,\n removeEventListener: noop,\n});\n\n/**\n * Standard mock environment for testing dataLayer source\n *\n * Use this for testing dataLayer.push interception and event transformation\n * without requiring a real browser environment.\n */\nexport const push: DataLayerEnv = {\n get push() {\n return createMockElbFn();\n },\n get command() {\n return createMockElbFn();\n },\n get elb() {\n return createMockElbFn();\n },\n get window() {\n return createMockWindow() as unknown as typeof window;\n },\n logger: noopLogger,\n};\n","import type { Flow } from '@walkeros/core';\n\nexport const gtagPurchase: Flow.StepExample = {\n in: [\n 'event',\n 'purchase',\n {\n transaction_id: 'T-12345',\n value: 25.42,\n currency: 'EUR',\n items: [{ item_id: 'SKU-1', item_name: 'T-Shirt', quantity: 1 }],\n },\n ],\n out: {\n name: 'dataLayer purchase',\n data: {\n transaction_id: 'T-12345',\n value: 25.42,\n currency: 'EUR',\n items: [{ item_id: 'SKU-1', item_name: 'T-Shirt', quantity: 1 }],\n },\n entity: 'dataLayer',\n action: 'purchase',\n },\n};\n\nexport const consentUpdate: Flow.StepExample = {\n in: [\n 'consent',\n 'update',\n {\n ad_storage: 'granted',\n analytics_storage: 'granted',\n },\n ],\n out: {\n name: 'dataLayer consent update',\n data: {\n ad_storage: 'granted',\n analytics_storage: 'granted',\n },\n entity: 'dataLayer',\n action: 'consent update',\n },\n};\n\nexport const gtagAddToCart: Flow.StepExample = {\n in: [\n 'event',\n 'add_to_cart',\n {\n currency: 'EUR',\n value: 15.25,\n items: [\n {\n item_id: 'SKU_12345',\n item_name: 'T-Shirt',\n item_variant: 'red',\n quantity: 1,\n price: 15.25,\n },\n ],\n },\n ],\n out: {\n name: 'dataLayer add_to_cart',\n data: {\n currency: 'EUR',\n value: 15.25,\n items: [\n {\n item_id: 'SKU_12345',\n item_name: 'T-Shirt',\n item_variant: 'red',\n quantity: 1,\n price: 15.25,\n },\n ],\n },\n entity: 'dataLayer',\n action: 'add_to_cart',\n },\n};\n\nexport const gtagViewItem: Flow.StepExample = {\n in: [\n 'event',\n 'view_item',\n {\n currency: 'EUR',\n value: 29.99,\n items: [\n {\n item_id: 'SKU_67890',\n item_name: 'Sneakers',\n item_category: 'Footwear',\n price: 29.99,\n },\n ],\n },\n ],\n out: {\n name: 'dataLayer view_item',\n data: {\n currency: 'EUR',\n value: 29.99,\n items: [\n {\n item_id: 'SKU_67890',\n item_name: 'Sneakers',\n item_category: 'Footwear',\n price: 29.99,\n },\n ],\n },\n entity: 'dataLayer',\n action: 'view_item',\n },\n};\n\nexport const directEvent: Flow.StepExample = {\n in: {\n event: 'custom_event',\n category: 'engagement',\n label: 'video_play',\n },\n out: {\n name: 'dataLayer custom_event',\n data: {\n category: 'engagement',\n label: 'video_play',\n },\n entity: 'dataLayer',\n action: 'custom_event',\n },\n};\n","import type { Source } from '@walkeros/core';\n\n/** Prepopulates window.dataLayer before source init. */\nexport const setup: Source.SetupFn = (input, env) => {\n const win = env.window as Window & { dataLayer?: unknown[] };\n if (!win.dataLayer) win.dataLayer = [];\n\n if (Array.isArray(input)) {\n for (const item of input) win.dataLayer.push(item);\n } else if (input && typeof input === 'object') {\n win.dataLayer.push(input);\n }\n};\n"],"mappings":"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","names":["z","z"]}
|
|
1
|
+
{"version":3,"sources":["../src/schemas/index.ts","../src/schemas/settings.ts","../src/schemas/primitives.ts","../src/examples/index.ts","../src/examples/env.ts","../src/examples/step.ts","../src/examples/trigger.ts"],"sourcesContent":["import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\n\n// Export primitives\nexport * from './primitives';\n\n// Export Zod schemas and types\nexport { SettingsSchema, type Settings } from './settings';\n\n// JSON Schema exports (for website PropertyTable and documentation tools)\nexport const settings = zodToSchema(SettingsSchema);\n","import { z } from '@walkeros/core/dev';\nimport { JavaScriptVarName, EventPrefix } from './primitives';\n\n/**\n * DataLayer source settings schema\n */\nexport const SettingsSchema = z.object({\n name: JavaScriptVarName.default('dataLayer')\n .describe('DataLayer variable name (default: dataLayer)')\n .optional(),\n\n prefix: EventPrefix.default('dataLayer')\n .describe('Event prefix for filtering which events to process')\n .optional(),\n\n filter: z\n .any()\n .describe(\n 'Custom filter function: (event: unknown) => boolean | Promise<boolean>',\n )\n .optional(),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\n/**\n * JavaScript variable name\n * Used for dataLayer variable naming\n */\nexport const JavaScriptVarName = z\n .string()\n .min(1)\n .regex(/^[a-zA-Z_$][a-zA-Z0-9_$]*$/, 'Must be a valid JavaScript identifier')\n .describe('JavaScript variable name');\n\n/**\n * Event prefix\n * Used for filtering dataLayer events\n */\nexport const EventPrefix = z\n .string()\n .min(1)\n .describe('Prefix for filtering dataLayer events');\n","export * as env from './env';\nexport * as step from './step';\nexport { createTrigger, trigger } from './trigger';\n","import type { Source, Elb, Logger } from '@walkeros/core';\n\n/**\n * Example environment configurations for dataLayer source\n *\n * These environments provide standardized mock structures for testing\n * dataLayer interception without requiring a real window object.\n */\n\n// Simple no-op function for mocking\nconst noop = () => {};\n\n// Create a properly typed elb/push/command function that returns a promise with PushResult\nconst createMockElbFn = (): Elb.Fn => {\n const fn = (() =>\n Promise.resolve({\n ok: true,\n })) as Elb.Fn;\n return fn;\n};\n\n// Simple no-op logger for demo purposes\nconst noopLogger: Logger.Instance = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n throw: (message: string | Error) => {\n throw typeof message === 'string' ? new Error(message) : message;\n },\n json: noop,\n scope: () => noopLogger,\n};\n\n/**\n * Environment interface for dataLayer source\n */\ninterface DataLayerEnv extends Source.BaseEnv {\n window?: typeof window;\n}\n\n/**\n * Mock window object with dataLayer array\n */\nconst createMockWindow = () => ({\n dataLayer: [] as unknown[],\n addEventListener: noop,\n removeEventListener: noop,\n});\n\n/**\n * Standard mock environment for testing dataLayer source\n *\n * Use this for testing dataLayer.push interception and event transformation\n * without requiring a real browser environment.\n */\nexport const push: DataLayerEnv = {\n get push() {\n return createMockElbFn();\n },\n get command() {\n return createMockElbFn();\n },\n get elb() {\n return createMockElbFn();\n },\n get window() {\n return createMockWindow() as unknown as typeof window;\n },\n logger: noopLogger,\n};\n","import type { Flow } from '@walkeros/core';\n\nexport const gtagPurchase: Flow.StepExample = {\n trigger: { type: 'gtag' },\n in: [\n 'event',\n 'purchase',\n {\n transaction_id: 'T-12345',\n value: 25.42,\n currency: 'EUR',\n items: [{ item_id: 'SKU-1', item_name: 'T-Shirt', quantity: 1 }],\n },\n ],\n out: {\n name: 'dataLayer purchase',\n data: {\n transaction_id: 'T-12345',\n value: 25.42,\n currency: 'EUR',\n items: [{ item_id: 'SKU-1', item_name: 'T-Shirt', quantity: 1 }],\n },\n entity: 'dataLayer',\n action: 'purchase',\n },\n};\n\nexport const consentUpdate: Flow.StepExample = {\n trigger: { type: 'gtag' },\n in: [\n 'consent',\n 'update',\n {\n ad_storage: 'granted',\n analytics_storage: 'granted',\n },\n ],\n out: {\n name: 'dataLayer consent update',\n data: {\n ad_storage: 'granted',\n analytics_storage: 'granted',\n },\n entity: 'dataLayer',\n action: 'consent',\n },\n};\n\nexport const gtagAddToCart: Flow.StepExample = {\n trigger: { type: 'gtag' },\n in: [\n 'event',\n 'add_to_cart',\n {\n currency: 'EUR',\n value: 15.25,\n items: [\n {\n item_id: 'SKU_12345',\n item_name: 'T-Shirt',\n item_variant: 'red',\n quantity: 1,\n price: 15.25,\n },\n ],\n },\n ],\n out: {\n name: 'dataLayer add_to_cart',\n data: {\n currency: 'EUR',\n value: 15.25,\n items: [\n {\n item_id: 'SKU_12345',\n item_name: 'T-Shirt',\n item_variant: 'red',\n quantity: 1,\n price: 15.25,\n },\n ],\n },\n entity: 'dataLayer',\n action: 'add_to_cart',\n },\n};\n\nexport const gtagViewItem: Flow.StepExample = {\n trigger: { type: 'gtag' },\n in: [\n 'event',\n 'view_item',\n {\n currency: 'EUR',\n value: 29.99,\n items: [\n {\n item_id: 'SKU_67890',\n item_name: 'Sneakers',\n item_category: 'Footwear',\n price: 29.99,\n },\n ],\n },\n ],\n out: {\n name: 'dataLayer view_item',\n data: {\n currency: 'EUR',\n value: 29.99,\n items: [\n {\n item_id: 'SKU_67890',\n item_name: 'Sneakers',\n item_category: 'Footwear',\n price: 29.99,\n },\n ],\n },\n entity: 'dataLayer',\n action: 'view_item',\n },\n};\n\nexport const directEvent: Flow.StepExample = {\n trigger: { type: 'direct' },\n in: {\n event: 'custom_event',\n category: 'engagement',\n label: 'video_play',\n },\n out: {\n name: 'dataLayer custom_event',\n data: {\n category: 'engagement',\n label: 'video_play',\n },\n entity: 'dataLayer',\n action: 'custom_event',\n },\n};\n","import type { Trigger, Collector } from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\n\nconst createTrigger: Trigger.CreateFn<unknown, void> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<unknown, void> = () => async (content: unknown) => {\n // Lazy startFlow — source patches window.dataLayer.push during init\n if (!flow) {\n // Ensure dataLayer sources get the window env for interception\n const enrichedConfig = { ...config };\n if (enrichedConfig.sources) {\n enrichedConfig.sources = { ...enrichedConfig.sources };\n for (const [id, source] of Object.entries(enrichedConfig.sources)) {\n if (!source.env?.window) {\n enrichedConfig.sources[id] = {\n ...source,\n env: { ...source.env, window },\n };\n }\n }\n }\n const result = await startFlow({\n ...enrichedConfig,\n run: enrichedConfig.run ?? true,\n });\n flow = { collector: result.collector, elb: result.elb };\n }\n\n // Push to dataLayer — the interceptor catches it\n const win = window as Window & { dataLayer?: unknown[] };\n if (!win.dataLayer) win.dataLayer = [];\n win.dataLayer.push(content);\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n\n/** Pushes step example input to window.dataLayer after source init. */\nconst trigger = (input: unknown, env: Record<string, unknown>): void => {\n const win = env.window as Window & { dataLayer?: unknown[] };\n if (!win.dataLayer) win.dataLayer = [];\n win.dataLayer.push(input);\n};\n\nexport { createTrigger, trigger };\n"],"mappings":"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","names":["z","z","trigger"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Source, Flow } from '@walkeros/core';
|
|
1
|
+
import { Source, Flow, Trigger } from '@walkeros/core';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Environment interface for dataLayer source
|
|
@@ -34,7 +34,8 @@ declare namespace step {
|
|
|
34
34
|
export { step_consentUpdate as consentUpdate, step_directEvent as directEvent, step_gtagAddToCart as gtagAddToCart, step_gtagPurchase as gtagPurchase, step_gtagViewItem as gtagViewItem };
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
declare const createTrigger: Trigger.CreateFn<unknown, void>;
|
|
38
|
+
/** Pushes step example input to window.dataLayer after source init. */
|
|
39
|
+
declare const trigger: (input: unknown, env: Record<string, unknown>) => void;
|
|
39
40
|
|
|
40
|
-
export {
|
|
41
|
+
export { createTrigger, env, step, trigger };
|
package/dist/examples/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Source, Flow } from '@walkeros/core';
|
|
1
|
+
import { Source, Flow, Trigger } from '@walkeros/core';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Environment interface for dataLayer source
|
|
@@ -34,7 +34,8 @@ declare namespace step {
|
|
|
34
34
|
export { step_consentUpdate as consentUpdate, step_directEvent as directEvent, step_gtagAddToCart as gtagAddToCart, step_gtagPurchase as gtagPurchase, step_gtagViewItem as gtagViewItem };
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
declare const createTrigger: Trigger.CreateFn<unknown, void>;
|
|
38
|
+
/** Pushes step example input to window.dataLayer after source init. */
|
|
39
|
+
declare const trigger: (input: unknown, env: Record<string, unknown>) => void;
|
|
39
40
|
|
|
40
|
-
export {
|
|
41
|
+
export { createTrigger, env, step, trigger };
|
package/dist/examples/index.js
CHANGED
|
@@ -20,9 +20,10 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
20
20
|
// src/examples/index.ts
|
|
21
21
|
var examples_exports = {};
|
|
22
22
|
__export(examples_exports, {
|
|
23
|
+
createTrigger: () => createTrigger,
|
|
23
24
|
env: () => env_exports,
|
|
24
|
-
|
|
25
|
-
|
|
25
|
+
step: () => step_exports,
|
|
26
|
+
trigger: () => trigger
|
|
26
27
|
});
|
|
27
28
|
module.exports = __toCommonJS(examples_exports);
|
|
28
29
|
|
|
@@ -81,6 +82,7 @@ __export(step_exports, {
|
|
|
81
82
|
gtagViewItem: () => gtagViewItem
|
|
82
83
|
});
|
|
83
84
|
var gtagPurchase = {
|
|
85
|
+
trigger: { type: "gtag" },
|
|
84
86
|
in: [
|
|
85
87
|
"event",
|
|
86
88
|
"purchase",
|
|
@@ -104,6 +106,7 @@ var gtagPurchase = {
|
|
|
104
106
|
}
|
|
105
107
|
};
|
|
106
108
|
var consentUpdate = {
|
|
109
|
+
trigger: { type: "gtag" },
|
|
107
110
|
in: [
|
|
108
111
|
"consent",
|
|
109
112
|
"update",
|
|
@@ -119,10 +122,11 @@ var consentUpdate = {
|
|
|
119
122
|
analytics_storage: "granted"
|
|
120
123
|
},
|
|
121
124
|
entity: "dataLayer",
|
|
122
|
-
action: "consent
|
|
125
|
+
action: "consent"
|
|
123
126
|
}
|
|
124
127
|
};
|
|
125
128
|
var gtagAddToCart = {
|
|
129
|
+
trigger: { type: "gtag" },
|
|
126
130
|
in: [
|
|
127
131
|
"event",
|
|
128
132
|
"add_to_cart",
|
|
@@ -160,6 +164,7 @@ var gtagAddToCart = {
|
|
|
160
164
|
}
|
|
161
165
|
};
|
|
162
166
|
var gtagViewItem = {
|
|
167
|
+
trigger: { type: "gtag" },
|
|
163
168
|
in: [
|
|
164
169
|
"event",
|
|
165
170
|
"view_item",
|
|
@@ -195,6 +200,7 @@ var gtagViewItem = {
|
|
|
195
200
|
}
|
|
196
201
|
};
|
|
197
202
|
var directEvent = {
|
|
203
|
+
trigger: { type: "direct" },
|
|
198
204
|
in: {
|
|
199
205
|
event: "custom_event",
|
|
200
206
|
category: "engagement",
|
|
@@ -211,19 +217,51 @@ var directEvent = {
|
|
|
211
217
|
}
|
|
212
218
|
};
|
|
213
219
|
|
|
214
|
-
// src/examples/
|
|
215
|
-
var
|
|
220
|
+
// src/examples/trigger.ts
|
|
221
|
+
var import_collector = require("@walkeros/collector");
|
|
222
|
+
var createTrigger = async (config) => {
|
|
223
|
+
let flow;
|
|
224
|
+
const trigger2 = () => async (content) => {
|
|
225
|
+
var _a, _b;
|
|
226
|
+
if (!flow) {
|
|
227
|
+
const enrichedConfig = { ...config };
|
|
228
|
+
if (enrichedConfig.sources) {
|
|
229
|
+
enrichedConfig.sources = { ...enrichedConfig.sources };
|
|
230
|
+
for (const [id, source] of Object.entries(enrichedConfig.sources)) {
|
|
231
|
+
if (!((_a = source.env) == null ? void 0 : _a.window)) {
|
|
232
|
+
enrichedConfig.sources[id] = {
|
|
233
|
+
...source,
|
|
234
|
+
env: { ...source.env, window }
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
const result = await (0, import_collector.startFlow)({
|
|
240
|
+
...enrichedConfig,
|
|
241
|
+
run: (_b = enrichedConfig.run) != null ? _b : true
|
|
242
|
+
});
|
|
243
|
+
flow = { collector: result.collector, elb: result.elb };
|
|
244
|
+
}
|
|
245
|
+
const win = window;
|
|
246
|
+
if (!win.dataLayer) win.dataLayer = [];
|
|
247
|
+
win.dataLayer.push(content);
|
|
248
|
+
};
|
|
249
|
+
return {
|
|
250
|
+
get flow() {
|
|
251
|
+
return flow;
|
|
252
|
+
},
|
|
253
|
+
trigger: trigger2
|
|
254
|
+
};
|
|
255
|
+
};
|
|
256
|
+
var trigger = (input, env) => {
|
|
216
257
|
const win = env.window;
|
|
217
258
|
if (!win.dataLayer) win.dataLayer = [];
|
|
218
|
-
|
|
219
|
-
for (const item of input) win.dataLayer.push(item);
|
|
220
|
-
} else if (input && typeof input === "object") {
|
|
221
|
-
win.dataLayer.push(input);
|
|
222
|
-
}
|
|
259
|
+
win.dataLayer.push(input);
|
|
223
260
|
};
|
|
224
261
|
// Annotate the CommonJS export names for ESM import in node:
|
|
225
262
|
0 && (module.exports = {
|
|
263
|
+
createTrigger,
|
|
226
264
|
env,
|
|
227
|
-
|
|
228
|
-
|
|
265
|
+
step,
|
|
266
|
+
trigger
|
|
229
267
|
});
|
package/dist/examples/index.mjs
CHANGED
|
@@ -59,6 +59,7 @@ __export(step_exports, {
|
|
|
59
59
|
gtagViewItem: () => gtagViewItem
|
|
60
60
|
});
|
|
61
61
|
var gtagPurchase = {
|
|
62
|
+
trigger: { type: "gtag" },
|
|
62
63
|
in: [
|
|
63
64
|
"event",
|
|
64
65
|
"purchase",
|
|
@@ -82,6 +83,7 @@ var gtagPurchase = {
|
|
|
82
83
|
}
|
|
83
84
|
};
|
|
84
85
|
var consentUpdate = {
|
|
86
|
+
trigger: { type: "gtag" },
|
|
85
87
|
in: [
|
|
86
88
|
"consent",
|
|
87
89
|
"update",
|
|
@@ -97,10 +99,11 @@ var consentUpdate = {
|
|
|
97
99
|
analytics_storage: "granted"
|
|
98
100
|
},
|
|
99
101
|
entity: "dataLayer",
|
|
100
|
-
action: "consent
|
|
102
|
+
action: "consent"
|
|
101
103
|
}
|
|
102
104
|
};
|
|
103
105
|
var gtagAddToCart = {
|
|
106
|
+
trigger: { type: "gtag" },
|
|
104
107
|
in: [
|
|
105
108
|
"event",
|
|
106
109
|
"add_to_cart",
|
|
@@ -138,6 +141,7 @@ var gtagAddToCart = {
|
|
|
138
141
|
}
|
|
139
142
|
};
|
|
140
143
|
var gtagViewItem = {
|
|
144
|
+
trigger: { type: "gtag" },
|
|
141
145
|
in: [
|
|
142
146
|
"event",
|
|
143
147
|
"view_item",
|
|
@@ -173,6 +177,7 @@ var gtagViewItem = {
|
|
|
173
177
|
}
|
|
174
178
|
};
|
|
175
179
|
var directEvent = {
|
|
180
|
+
trigger: { type: "direct" },
|
|
176
181
|
in: {
|
|
177
182
|
event: "custom_event",
|
|
178
183
|
category: "engagement",
|
|
@@ -189,18 +194,50 @@ var directEvent = {
|
|
|
189
194
|
}
|
|
190
195
|
};
|
|
191
196
|
|
|
192
|
-
// src/examples/
|
|
193
|
-
|
|
197
|
+
// src/examples/trigger.ts
|
|
198
|
+
import { startFlow } from "@walkeros/collector";
|
|
199
|
+
var createTrigger = async (config) => {
|
|
200
|
+
let flow;
|
|
201
|
+
const trigger2 = () => async (content) => {
|
|
202
|
+
var _a, _b;
|
|
203
|
+
if (!flow) {
|
|
204
|
+
const enrichedConfig = { ...config };
|
|
205
|
+
if (enrichedConfig.sources) {
|
|
206
|
+
enrichedConfig.sources = { ...enrichedConfig.sources };
|
|
207
|
+
for (const [id, source] of Object.entries(enrichedConfig.sources)) {
|
|
208
|
+
if (!((_a = source.env) == null ? void 0 : _a.window)) {
|
|
209
|
+
enrichedConfig.sources[id] = {
|
|
210
|
+
...source,
|
|
211
|
+
env: { ...source.env, window }
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
const result = await startFlow({
|
|
217
|
+
...enrichedConfig,
|
|
218
|
+
run: (_b = enrichedConfig.run) != null ? _b : true
|
|
219
|
+
});
|
|
220
|
+
flow = { collector: result.collector, elb: result.elb };
|
|
221
|
+
}
|
|
222
|
+
const win = window;
|
|
223
|
+
if (!win.dataLayer) win.dataLayer = [];
|
|
224
|
+
win.dataLayer.push(content);
|
|
225
|
+
};
|
|
226
|
+
return {
|
|
227
|
+
get flow() {
|
|
228
|
+
return flow;
|
|
229
|
+
},
|
|
230
|
+
trigger: trigger2
|
|
231
|
+
};
|
|
232
|
+
};
|
|
233
|
+
var trigger = (input, env) => {
|
|
194
234
|
const win = env.window;
|
|
195
235
|
if (!win.dataLayer) win.dataLayer = [];
|
|
196
|
-
|
|
197
|
-
for (const item of input) win.dataLayer.push(item);
|
|
198
|
-
} else if (input && typeof input === "object") {
|
|
199
|
-
win.dataLayer.push(input);
|
|
200
|
-
}
|
|
236
|
+
win.dataLayer.push(input);
|
|
201
237
|
};
|
|
202
238
|
export {
|
|
239
|
+
createTrigger,
|
|
203
240
|
env_exports as env,
|
|
204
|
-
|
|
205
|
-
|
|
241
|
+
step_exports as step,
|
|
242
|
+
trigger
|
|
206
243
|
};
|