{
  "$meta": {
    "package": "@walkeros/web-source-datalayer",
    "version": "4.2.1",
    "type": "source",
    "platform": [
      "web"
    ],
    "renderer": "codebox",
    "docs": "https://www.walkeros.io/docs/sources/web/datalayer",
    "source": "https://github.com/elbwalker/walkerOS/tree/main/packages/web/sources/dataLayer/src"
  },
  "schemas": {
    "mapping": {
      "$schema": "http://json-schema.org/draft-07/schema#",
      "type": "object",
      "properties": {
        "command": {
          "description": "Mapping.Value evaluated against the raw dataLayer arguments to build walker command data (e.g. consent updates)."
        }
      },
      "additionalProperties": false
    },
    "settings": {
      "$schema": "http://json-schema.org/draft-07/schema#",
      "type": "object",
      "properties": {
        "name": {
          "default": "dataLayer",
          "description": "DataLayer variable name (default: dataLayer)",
          "type": "string",
          "minLength": 1,
          "pattern": "^[a-zA-Z_$][a-zA-Z0-9_$]*$"
        },
        "prefix": {
          "default": "dataLayer",
          "description": "Event prefix for filtering which events to process",
          "type": "string",
          "minLength": 1
        },
        "filter": {
          "description": "Custom filter function: (event: unknown) => boolean | Promise<boolean>"
        }
      },
      "additionalProperties": false
    }
  },
  "examples": {
    "createTrigger": {
      "$code": "async e=>{let a;return{get flow(){return a},trigger:()=>async t=>{var r,i;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 n=await U({...t,run:null==(i=t.run)||i});a={collector:n.collector,elb:n.elb}}const n=window;n.dataLayer||(n.dataLayer=[]),n.dataLayer.push(t)}}}"
    },
    "env": {
      "push": {
        "push": {
          "$code": "()=>Promise.resolve({ok:!0})"
        },
        "command": {
          "$code": "()=>Promise.resolve({ok:!0})"
        },
        "elb": {
          "$code": "()=>Promise.resolve({ok:!0})"
        },
        "window": {
          "dataLayer": [],
          "addEventListener": {
            "$code": "()=>{}"
          },
          "removeEventListener": {
            "$code": "()=>{}"
          }
        },
        "logger": {
          "error": {
            "$code": "()=>{}"
          },
          "warn": {
            "$code": "()=>{}"
          },
          "info": {
            "$code": "()=>{}"
          },
          "debug": {
            "$code": "()=>{}"
          },
          "throw": {
            "$code": "e=>{throw\"string\"==typeof e?new Error(e):e}"
          },
          "json": {
            "$code": "()=>{}"
          },
          "scope": {
            "$code": "()=>_"
          }
        }
      }
    },
    "step": {
      "consentUpdate": {
        "title": "Consent update",
        "description": "A gtag consent update is captured from the dataLayer as a walker dataLayer consent update event.",
        "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"
              }
            }
          ]
        ]
      },
      "directEvent": {
        "title": "Direct dataLayer event",
        "description": "A plain object pushed directly onto the dataLayer is captured as a walker dataLayer custom event.",
        "trigger": {
          "type": "direct"
        },
        "in": {
          "event": "custom_event",
          "category": "engagement",
          "label": "video_play"
        },
        "out": [
          [
            "elb",
            {
              "name": "dataLayer custom_event",
              "data": {
                "category": "engagement",
                "label": "video_play"
              }
            }
          ]
        ]
      },
      "gtagAddToCart": {
        "title": "gtag add_to_cart",
        "description": "A gtag add_to_cart call pushed to the dataLayer is captured as a walker dataLayer add_to_cart event.",
        "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
                  }
                ]
              }
            }
          ]
        ]
      },
      "gtagPurchase": {
        "title": "gtag purchase",
        "description": "A gtag purchase call pushed to the dataLayer is captured as a walker dataLayer purchase event with item details.",
        "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
                  }
                ]
              }
            }
          ]
        ]
      },
      "gtagViewItem": {
        "title": "gtag view_item",
        "description": "A gtag view_item call pushed to the dataLayer is captured as a walker dataLayer view_item event with item data.",
        "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
                  }
                ]
              }
            }
          ]
        ]
      }
    },
    "trigger": {
      "$code": "(e,a)=>{const t=a.window;t.dataLayer||(t.dataLayer=[]),t.dataLayer.push(e)}"
    }
  }
}