@walkeros/web-source-datalayer 3.3.0 → 3.4.0-next-1776749829492
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 +16 -1
- package/dist/dev.d.ts +16 -1
- 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.js +77 -62
- package/dist/examples/index.mjs +77 -62
- package/dist/index.browser.js +1 -1
- package/dist/index.d.mts +12 -2
- package/dist/index.d.ts +12 -2
- 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 +96 -71
- package/package.json +3 -3
package/dist/dev.d.mts
CHANGED
|
@@ -23,15 +23,30 @@ declare const SettingsSchema: z.ZodObject<{
|
|
|
23
23
|
}, z.core.$strip>;
|
|
24
24
|
type Settings = z.infer<typeof SettingsSchema>;
|
|
25
25
|
|
|
26
|
+
/**
|
|
27
|
+
* dataLayer source rule.settings — describes how to translate an incoming
|
|
28
|
+
* dataLayer push (gtag command, ecommerce event, etc.) into walker command
|
|
29
|
+
* arguments. `command` is a walkerOS Mapping.Value evaluated against the raw
|
|
30
|
+
* dataLayer arguments at capture time.
|
|
31
|
+
*/
|
|
32
|
+
declare const MappingSchema: z.ZodObject<{
|
|
33
|
+
command: z.ZodOptional<z.ZodUnknown>;
|
|
34
|
+
}, z.core.$strip>;
|
|
35
|
+
type Mapping = z.infer<typeof MappingSchema>;
|
|
36
|
+
|
|
26
37
|
declare const settings: _walkeros_core_dev.JSONSchema;
|
|
38
|
+
declare const mapping: _walkeros_core_dev.JSONSchema;
|
|
27
39
|
|
|
28
40
|
declare const index$1_EventPrefix: typeof EventPrefix;
|
|
29
41
|
declare const index$1_JavaScriptVarName: typeof JavaScriptVarName;
|
|
42
|
+
type index$1_Mapping = Mapping;
|
|
43
|
+
declare const index$1_MappingSchema: typeof MappingSchema;
|
|
30
44
|
type index$1_Settings = Settings;
|
|
31
45
|
declare const index$1_SettingsSchema: typeof SettingsSchema;
|
|
46
|
+
declare const index$1_mapping: typeof mapping;
|
|
32
47
|
declare const index$1_settings: typeof settings;
|
|
33
48
|
declare namespace index$1 {
|
|
34
|
-
export { index$1_EventPrefix as EventPrefix, index$1_JavaScriptVarName as JavaScriptVarName, type index$1_Settings as Settings, index$1_SettingsSchema as SettingsSchema, index$1_settings as settings };
|
|
49
|
+
export { index$1_EventPrefix as EventPrefix, index$1_JavaScriptVarName as JavaScriptVarName, type index$1_Mapping as Mapping, index$1_MappingSchema as MappingSchema, type index$1_Settings as Settings, index$1_SettingsSchema as SettingsSchema, index$1_mapping as mapping, index$1_settings as settings };
|
|
35
50
|
}
|
|
36
51
|
|
|
37
52
|
/**
|
package/dist/dev.d.ts
CHANGED
|
@@ -23,15 +23,30 @@ declare const SettingsSchema: z.ZodObject<{
|
|
|
23
23
|
}, z.core.$strip>;
|
|
24
24
|
type Settings = z.infer<typeof SettingsSchema>;
|
|
25
25
|
|
|
26
|
+
/**
|
|
27
|
+
* dataLayer source rule.settings — describes how to translate an incoming
|
|
28
|
+
* dataLayer push (gtag command, ecommerce event, etc.) into walker command
|
|
29
|
+
* arguments. `command` is a walkerOS Mapping.Value evaluated against the raw
|
|
30
|
+
* dataLayer arguments at capture time.
|
|
31
|
+
*/
|
|
32
|
+
declare const MappingSchema: z.ZodObject<{
|
|
33
|
+
command: z.ZodOptional<z.ZodUnknown>;
|
|
34
|
+
}, z.core.$strip>;
|
|
35
|
+
type Mapping = z.infer<typeof MappingSchema>;
|
|
36
|
+
|
|
26
37
|
declare const settings: _walkeros_core_dev.JSONSchema;
|
|
38
|
+
declare const mapping: _walkeros_core_dev.JSONSchema;
|
|
27
39
|
|
|
28
40
|
declare const index$1_EventPrefix: typeof EventPrefix;
|
|
29
41
|
declare const index$1_JavaScriptVarName: typeof JavaScriptVarName;
|
|
42
|
+
type index$1_Mapping = Mapping;
|
|
43
|
+
declare const index$1_MappingSchema: typeof MappingSchema;
|
|
30
44
|
type index$1_Settings = Settings;
|
|
31
45
|
declare const index$1_SettingsSchema: typeof SettingsSchema;
|
|
46
|
+
declare const index$1_mapping: typeof mapping;
|
|
32
47
|
declare const index$1_settings: typeof settings;
|
|
33
48
|
declare namespace index$1 {
|
|
34
|
-
export { index$1_EventPrefix as EventPrefix, index$1_JavaScriptVarName as JavaScriptVarName, type index$1_Settings as Settings, index$1_SettingsSchema as SettingsSchema, index$1_settings as settings };
|
|
49
|
+
export { index$1_EventPrefix as EventPrefix, index$1_JavaScriptVarName as JavaScriptVarName, type index$1_Mapping as Mapping, index$1_MappingSchema as MappingSchema, type index$1_Settings as Settings, index$1_SettingsSchema as SettingsSchema, index$1_mapping as mapping, index$1_settings as settings };
|
|
35
50
|
}
|
|
36
51
|
|
|
37
52
|
/**
|
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:()=>w,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:()=>l,JavaScriptVarName:()=>g,MappingSchema:()=>y,SettingsSchema:()=>m,mapping:()=>_,settings:()=>p});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"),l=u.z.string().min(1).describe("Prefix for filtering dataLayer events"),m=d.z.object({name:g.default("dataLayer").describe("DataLayer variable name (default: dataLayer)").optional(),prefix:l.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()}),v=require("@walkeros/core/dev"),y=v.z.object({command:v.z.unknown().describe("Mapping.Value evaluated against the raw dataLayer arguments to build walker command data (e.g. consent updates).").optional()}),p=(0,s.zodToSchema)(m),_=(0,s.zodToSchema)(y),w={};i(w,{createTrigger:()=>P,env:()=>b,step:()=>U,trigger:()=>O});var b={};i(b,{push:()=>S});var f=()=>{},h=()=>()=>Promise.resolve({ok:!0}),L={error:f,warn:f,info:f,debug:f,throw:e=>{throw"string"==typeof e?new Error(e):e},json:f,scope:()=>L},S={get push(){return h()},get command(){return h()},get elb(){return h()},get window(){return{dataLayer:[],addEventListener:f,removeEventListener:f}},logger:L},U={};i(U,{consentUpdate:()=>k,directEvent:()=>j,gtagAddToCart:()=>z,gtagPurchase:()=>E,gtagViewItem:()=>T});var E={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:[["elb",{name:"dataLayer purchase",data:{transaction_id:"T-12345",value:25.42,currency:"EUR",items:[{item_id:"SKU-1",item_name:"T-Shirt",quantity:1}]}}]]},k={trigger:{type:"gtag"},in:["consent","update",{ad_storage:"granted",analytics_storage:"granted"}],out:[["elb",{name:"dataLayer consent update",data:{ad_storage:"granted",analytics_storage:"granted"}}]]},z={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:[["elb",{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}]}}]]},T={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:[["elb",{name:"dataLayer view_item",data:{currency:"EUR",value:29.99,items:[{item_id:"SKU_67890",item_name:"Sneakers",item_category:"Footwear",price:29.99}]}}]]},j={trigger:{type:"direct"},in:{event:"custom_event",category:"engagement",label:"video_play"},out:[["elb",{name:"dataLayer custom_event",data:{category:"engagement",label:"video_play"}}]]},q=require("@walkeros/collector"),P=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,q.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)}}},O=(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/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"]}
|
|
1
|
+
{"version":3,"sources":["../src/dev.ts","../src/schemas/index.ts","../src/schemas/settings.ts","../src/schemas/primitives.ts","../src/schemas/mapping.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';\nimport { MappingSchema } from './mapping';\n\n// Export primitives\nexport * from './primitives';\n\n// Export Zod schemas and types\nexport { SettingsSchema, type Settings } from './settings';\nexport { MappingSchema, type Mapping } from './mapping';\n\n// JSON Schema exports (for website PropertyTable and documentation tools)\nexport const settings = zodToSchema(SettingsSchema);\nexport const mapping = zodToSchema(MappingSchema);\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","import { z } from '@walkeros/core/dev';\n\n/**\n * dataLayer source rule.settings — describes how to translate an incoming\n * dataLayer push (gtag command, ecommerce event, etc.) into walker command\n * arguments. `command` is a walkerOS Mapping.Value evaluated against the raw\n * dataLayer arguments at capture time.\n */\nexport const MappingSchema = z.object({\n command: z\n .unknown()\n .describe(\n 'Mapping.Value evaluated against the raw dataLayer arguments to build walker command data (e.g. consent updates).',\n )\n .optional(),\n});\n\nexport type Mapping = z.infer<typeof MappingSchema>;\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 [\n 'elb',\n {\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 },\n ],\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 [\n 'elb',\n {\n name: 'dataLayer consent update',\n data: {\n ad_storage: 'granted',\n analytics_storage: 'granted',\n },\n },\n ],\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 [\n 'elb',\n {\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 },\n ],\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 [\n 'elb',\n {\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 },\n ],\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 [\n 'elb',\n {\n name: 'dataLayer custom_event',\n data: {\n category: 'engagement',\n label: 'video_play',\n },\n },\n ],\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","import_dev","trigger"]}
|
package/dist/dev.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var e=Object.defineProperty,
|
|
1
|
+
var e=Object.defineProperty,a=(a,t)=>{for(var r in t)e(a,r,{get:t[r],enumerable:!0})},t={};a(t,{EventPrefix:()=>s,JavaScriptVarName:()=>o,MappingSchema:()=>m,SettingsSchema:()=>d,mapping:()=>l,settings:()=>g});import{zodToSchema as r}from"@walkeros/core/dev";import{z as n}from"@walkeros/core/dev";import{z as i}from"@walkeros/core/dev";var o=i.string().min(1).regex(/^[a-zA-Z_$][a-zA-Z0-9_$]*$/,"Must be a valid JavaScript identifier").describe("JavaScript variable name"),s=i.string().min(1).describe("Prefix for filtering dataLayer events"),d=n.object({name:o.default("dataLayer").describe("DataLayer variable name (default: dataLayer)").optional(),prefix:s.default("dataLayer").describe("Event prefix for filtering which events to process").optional(),filter:n.any().describe("Custom filter function: (event: unknown) => boolean | Promise<boolean>").optional()});import{z as c}from"@walkeros/core/dev";var m=c.object({command:c.unknown().describe("Mapping.Value evaluated against the raw dataLayer arguments to build walker command data (e.g. consent updates).").optional()}),g=r(d),l=r(m),u={};a(u,{createTrigger:()=>k,env:()=>v,step:()=>f,trigger:()=>T});var v={};a(v,{push:()=>w});var p=()=>{},y=()=>()=>Promise.resolve({ok:!0}),_={error:p,warn:p,info:p,debug:p,throw:e=>{throw"string"==typeof e?new Error(e):e},json:p,scope:()=>_},w={get push(){return y()},get command(){return y()},get elb(){return y()},get window(){return{dataLayer:[],addEventListener:p,removeEventListener:p}},logger:_},f={};a(f,{consentUpdate:()=>L,directEvent:()=>U,gtagAddToCart:()=>h,gtagPurchase:()=>b,gtagViewItem:()=>S});var b={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:[["elb",{name:"dataLayer purchase",data:{transaction_id:"T-12345",value:25.42,currency:"EUR",items:[{item_id:"SKU-1",item_name:"T-Shirt",quantity:1}]}}]]},L={trigger:{type:"gtag"},in:["consent","update",{ad_storage:"granted",analytics_storage:"granted"}],out:[["elb",{name:"dataLayer consent update",data:{ad_storage:"granted",analytics_storage:"granted"}}]]},h={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:[["elb",{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}]}}]]},S={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:[["elb",{name:"dataLayer view_item",data:{currency:"EUR",value:29.99,items:[{item_id:"SKU_67890",item_name:"Sneakers",item_category:"Footwear",price:29.99}]}}]]},U={trigger:{type:"direct"},in:{event:"custom_event",category:"engagement",label:"video_play"},out:[["elb",{name:"dataLayer custom_event",data:{category:"engagement",label:"video_play"}}]]};import{startFlow as E}from"@walkeros/collector";var k=async e=>{let a;return{get flow(){return a},trigger:()=>async t=>{var r,n;if(!a){const t={...e};if(t.sources){t.sources={...t.sources};for(const[e,a]of Object.entries(t.sources))(null==(r=a.env)?void 0:r.window)||(t.sources[e]={...a,env:{...a.env,window:window}})}const i=await E({...t,run:null==(n=t.run)||n});a={collector:i.collector,elb:i.elb}}const i=window;i.dataLayer||(i.dataLayer=[]),i.dataLayer.push(t)}}},T=(e,a)=>{const t=a.window;t.dataLayer||(t.dataLayer=[]),t.dataLayer.push(e)};export{u as examples,t 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/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
|
+
{"version":3,"sources":["../src/schemas/index.ts","../src/schemas/settings.ts","../src/schemas/primitives.ts","../src/schemas/mapping.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';\nimport { MappingSchema } from './mapping';\n\n// Export primitives\nexport * from './primitives';\n\n// Export Zod schemas and types\nexport { SettingsSchema, type Settings } from './settings';\nexport { MappingSchema, type Mapping } from './mapping';\n\n// JSON Schema exports (for website PropertyTable and documentation tools)\nexport const settings = zodToSchema(SettingsSchema);\nexport const mapping = zodToSchema(MappingSchema);\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","import { z } from '@walkeros/core/dev';\n\n/**\n * dataLayer source rule.settings — describes how to translate an incoming\n * dataLayer push (gtag command, ecommerce event, etc.) into walker command\n * arguments. `command` is a walkerOS Mapping.Value evaluated against the raw\n * dataLayer arguments at capture time.\n */\nexport const MappingSchema = z.object({\n command: z\n .unknown()\n .describe(\n 'Mapping.Value evaluated against the raw dataLayer arguments to build walker command data (e.g. consent updates).',\n )\n .optional(),\n});\n\nexport type Mapping = z.infer<typeof MappingSchema>;\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 [\n 'elb',\n {\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 },\n ],\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 [\n 'elb',\n {\n name: 'dataLayer consent update',\n data: {\n ad_storage: 'granted',\n analytics_storage: 'granted',\n },\n },\n ],\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 [\n 'elb',\n {\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 },\n ],\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 [\n 'elb',\n {\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 },\n ],\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 [\n 'elb',\n {\n name: 'dataLayer custom_event',\n data: {\n category: 'engagement',\n label: 'video_play',\n },\n },\n ],\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","z","trigger"]}
|
package/dist/examples/index.js
CHANGED
|
@@ -93,17 +93,20 @@ var gtagPurchase = {
|
|
|
93
93
|
items: [{ item_id: "SKU-1", item_name: "T-Shirt", quantity: 1 }]
|
|
94
94
|
}
|
|
95
95
|
],
|
|
96
|
-
out:
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
96
|
+
out: [
|
|
97
|
+
[
|
|
98
|
+
"elb",
|
|
99
|
+
{
|
|
100
|
+
name: "dataLayer purchase",
|
|
101
|
+
data: {
|
|
102
|
+
transaction_id: "T-12345",
|
|
103
|
+
value: 25.42,
|
|
104
|
+
currency: "EUR",
|
|
105
|
+
items: [{ item_id: "SKU-1", item_name: "T-Shirt", quantity: 1 }]
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
]
|
|
109
|
+
]
|
|
107
110
|
};
|
|
108
111
|
var consentUpdate = {
|
|
109
112
|
trigger: { type: "gtag" },
|
|
@@ -115,15 +118,18 @@ var consentUpdate = {
|
|
|
115
118
|
analytics_storage: "granted"
|
|
116
119
|
}
|
|
117
120
|
],
|
|
118
|
-
out:
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
121
|
+
out: [
|
|
122
|
+
[
|
|
123
|
+
"elb",
|
|
124
|
+
{
|
|
125
|
+
name: "dataLayer consent update",
|
|
126
|
+
data: {
|
|
127
|
+
ad_storage: "granted",
|
|
128
|
+
analytics_storage: "granted"
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
]
|
|
132
|
+
]
|
|
127
133
|
};
|
|
128
134
|
var gtagAddToCart = {
|
|
129
135
|
trigger: { type: "gtag" },
|
|
@@ -144,24 +150,27 @@ var gtagAddToCart = {
|
|
|
144
150
|
]
|
|
145
151
|
}
|
|
146
152
|
],
|
|
147
|
-
out:
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
153
|
+
out: [
|
|
154
|
+
[
|
|
155
|
+
"elb",
|
|
156
|
+
{
|
|
157
|
+
name: "dataLayer add_to_cart",
|
|
158
|
+
data: {
|
|
159
|
+
currency: "EUR",
|
|
160
|
+
value: 15.25,
|
|
161
|
+
items: [
|
|
162
|
+
{
|
|
163
|
+
item_id: "SKU_12345",
|
|
164
|
+
item_name: "T-Shirt",
|
|
165
|
+
item_variant: "red",
|
|
166
|
+
quantity: 1,
|
|
167
|
+
price: 15.25
|
|
168
|
+
}
|
|
169
|
+
]
|
|
159
170
|
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
action: "add_to_cart"
|
|
164
|
-
}
|
|
171
|
+
}
|
|
172
|
+
]
|
|
173
|
+
]
|
|
165
174
|
};
|
|
166
175
|
var gtagViewItem = {
|
|
167
176
|
trigger: { type: "gtag" },
|
|
@@ -181,23 +190,26 @@ var gtagViewItem = {
|
|
|
181
190
|
]
|
|
182
191
|
}
|
|
183
192
|
],
|
|
184
|
-
out:
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
193
|
+
out: [
|
|
194
|
+
[
|
|
195
|
+
"elb",
|
|
196
|
+
{
|
|
197
|
+
name: "dataLayer view_item",
|
|
198
|
+
data: {
|
|
199
|
+
currency: "EUR",
|
|
200
|
+
value: 29.99,
|
|
201
|
+
items: [
|
|
202
|
+
{
|
|
203
|
+
item_id: "SKU_67890",
|
|
204
|
+
item_name: "Sneakers",
|
|
205
|
+
item_category: "Footwear",
|
|
206
|
+
price: 29.99
|
|
207
|
+
}
|
|
208
|
+
]
|
|
195
209
|
}
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
action: "view_item"
|
|
200
|
-
}
|
|
210
|
+
}
|
|
211
|
+
]
|
|
212
|
+
]
|
|
201
213
|
};
|
|
202
214
|
var directEvent = {
|
|
203
215
|
trigger: { type: "direct" },
|
|
@@ -206,15 +218,18 @@ var directEvent = {
|
|
|
206
218
|
category: "engagement",
|
|
207
219
|
label: "video_play"
|
|
208
220
|
},
|
|
209
|
-
out:
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
221
|
+
out: [
|
|
222
|
+
[
|
|
223
|
+
"elb",
|
|
224
|
+
{
|
|
225
|
+
name: "dataLayer custom_event",
|
|
226
|
+
data: {
|
|
227
|
+
category: "engagement",
|
|
228
|
+
label: "video_play"
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
]
|
|
232
|
+
]
|
|
218
233
|
};
|
|
219
234
|
|
|
220
235
|
// src/examples/trigger.ts
|
package/dist/examples/index.mjs
CHANGED
|
@@ -70,17 +70,20 @@ var gtagPurchase = {
|
|
|
70
70
|
items: [{ item_id: "SKU-1", item_name: "T-Shirt", quantity: 1 }]
|
|
71
71
|
}
|
|
72
72
|
],
|
|
73
|
-
out:
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
73
|
+
out: [
|
|
74
|
+
[
|
|
75
|
+
"elb",
|
|
76
|
+
{
|
|
77
|
+
name: "dataLayer purchase",
|
|
78
|
+
data: {
|
|
79
|
+
transaction_id: "T-12345",
|
|
80
|
+
value: 25.42,
|
|
81
|
+
currency: "EUR",
|
|
82
|
+
items: [{ item_id: "SKU-1", item_name: "T-Shirt", quantity: 1 }]
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
]
|
|
86
|
+
]
|
|
84
87
|
};
|
|
85
88
|
var consentUpdate = {
|
|
86
89
|
trigger: { type: "gtag" },
|
|
@@ -92,15 +95,18 @@ var consentUpdate = {
|
|
|
92
95
|
analytics_storage: "granted"
|
|
93
96
|
}
|
|
94
97
|
],
|
|
95
|
-
out:
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
98
|
+
out: [
|
|
99
|
+
[
|
|
100
|
+
"elb",
|
|
101
|
+
{
|
|
102
|
+
name: "dataLayer consent update",
|
|
103
|
+
data: {
|
|
104
|
+
ad_storage: "granted",
|
|
105
|
+
analytics_storage: "granted"
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
]
|
|
109
|
+
]
|
|
104
110
|
};
|
|
105
111
|
var gtagAddToCart = {
|
|
106
112
|
trigger: { type: "gtag" },
|
|
@@ -121,24 +127,27 @@ var gtagAddToCart = {
|
|
|
121
127
|
]
|
|
122
128
|
}
|
|
123
129
|
],
|
|
124
|
-
out:
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
130
|
+
out: [
|
|
131
|
+
[
|
|
132
|
+
"elb",
|
|
133
|
+
{
|
|
134
|
+
name: "dataLayer add_to_cart",
|
|
135
|
+
data: {
|
|
136
|
+
currency: "EUR",
|
|
137
|
+
value: 15.25,
|
|
138
|
+
items: [
|
|
139
|
+
{
|
|
140
|
+
item_id: "SKU_12345",
|
|
141
|
+
item_name: "T-Shirt",
|
|
142
|
+
item_variant: "red",
|
|
143
|
+
quantity: 1,
|
|
144
|
+
price: 15.25
|
|
145
|
+
}
|
|
146
|
+
]
|
|
136
147
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
action: "add_to_cart"
|
|
141
|
-
}
|
|
148
|
+
}
|
|
149
|
+
]
|
|
150
|
+
]
|
|
142
151
|
};
|
|
143
152
|
var gtagViewItem = {
|
|
144
153
|
trigger: { type: "gtag" },
|
|
@@ -158,23 +167,26 @@ var gtagViewItem = {
|
|
|
158
167
|
]
|
|
159
168
|
}
|
|
160
169
|
],
|
|
161
|
-
out:
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
170
|
+
out: [
|
|
171
|
+
[
|
|
172
|
+
"elb",
|
|
173
|
+
{
|
|
174
|
+
name: "dataLayer view_item",
|
|
175
|
+
data: {
|
|
176
|
+
currency: "EUR",
|
|
177
|
+
value: 29.99,
|
|
178
|
+
items: [
|
|
179
|
+
{
|
|
180
|
+
item_id: "SKU_67890",
|
|
181
|
+
item_name: "Sneakers",
|
|
182
|
+
item_category: "Footwear",
|
|
183
|
+
price: 29.99
|
|
184
|
+
}
|
|
185
|
+
]
|
|
172
186
|
}
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
action: "view_item"
|
|
177
|
-
}
|
|
187
|
+
}
|
|
188
|
+
]
|
|
189
|
+
]
|
|
178
190
|
};
|
|
179
191
|
var directEvent = {
|
|
180
192
|
trigger: { type: "direct" },
|
|
@@ -183,15 +195,18 @@ var directEvent = {
|
|
|
183
195
|
category: "engagement",
|
|
184
196
|
label: "video_play"
|
|
185
197
|
},
|
|
186
|
-
out:
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
198
|
+
out: [
|
|
199
|
+
[
|
|
200
|
+
"elb",
|
|
201
|
+
{
|
|
202
|
+
name: "dataLayer custom_event",
|
|
203
|
+
data: {
|
|
204
|
+
category: "engagement",
|
|
205
|
+
label: "video_play"
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
]
|
|
209
|
+
]
|
|
195
210
|
};
|
|
196
211
|
|
|
197
212
|
// src/examples/trigger.ts
|