{"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  title: 'gtag purchase',\n  description:\n    'A gtag purchase call pushed to the dataLayer is captured as a walker dataLayer purchase event with item details.',\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  title: 'Consent update',\n  description:\n    'A gtag consent update is captured from the dataLayer as a walker dataLayer consent update event.',\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  title: 'gtag add_to_cart',\n  description:\n    'A gtag add_to_cart call pushed to the dataLayer is captured as a walker dataLayer add_to_cart event.',\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  title: 'gtag view_item',\n  description:\n    'A gtag view_item call pushed to the dataLayer is captured as a walker dataLayer view_item event with item data.',\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  title: 'Direct dataLayer event',\n  description:\n    'A plain object pushed directly onto the dataLayer is captured as a walker dataLayer custom event.',\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"]}