@walkeros/web-destination-gtag 0.0.8 → 0.1.1
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/README.md +35 -140
- package/dist/examples/index.js +15 -15
- package/dist/examples/index.mjs +15 -15
- package/dist/index.browser.js +1 -1
- package/dist/index.d.mts +1 -8
- package/dist/index.d.ts +1 -8
- 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/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Google Gtag Destination for walkerOS
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
[Source Code](https://github.com/elbwalker/walkerOS/tree/main/packages/web/destinations/gtag)
|
|
4
|
+
•
|
|
5
|
+
[NPM Package](https://www.npmjs.com/package/@walkeros/web-destination-gtag)
|
|
6
|
+
|
|
7
|
+
The Google Gtag destination provides a unified interface for sending events to
|
|
8
|
+
Google Analytics 4 (GA4), Google Ads, and Google Tag Manager (GTM) through a
|
|
9
|
+
single destination configuration.
|
|
5
10
|
|
|
6
11
|
## Features
|
|
7
12
|
|
|
@@ -20,163 +25,46 @@ Google Ads, and Google Tag Manager (GTM) through a single gtag implementation.
|
|
|
20
25
|
npm install @walkeros/web-destination-gtag
|
|
21
26
|
```
|
|
22
27
|
|
|
23
|
-
##
|
|
24
|
-
|
|
25
|
-
### Single Tool (GA4 Only)
|
|
28
|
+
## Usage
|
|
26
29
|
|
|
27
30
|
```typescript
|
|
31
|
+
import { createCollector } from '@walkeros/collector';
|
|
28
32
|
import { destinationGtag } from '@walkeros/web-destination-gtag';
|
|
29
33
|
|
|
30
|
-
const
|
|
31
|
-
settings: {
|
|
32
|
-
ga4: {
|
|
33
|
-
measurementId: 'G-XXXXXXXXXX',
|
|
34
|
-
},
|
|
35
|
-
},
|
|
36
|
-
});
|
|
37
|
-
```
|
|
34
|
+
const { elb } = await createCollector();
|
|
38
35
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
```typescript
|
|
42
|
-
import { destinationGtag } from '@walkeros/web-destination-gtag';
|
|
43
|
-
|
|
44
|
-
const destination = destinationGtag({
|
|
36
|
+
elb('walker destination', destinationGtag, {
|
|
45
37
|
settings: {
|
|
46
38
|
ga4: {
|
|
47
|
-
measurementId: 'G-XXXXXXXXXX',
|
|
48
|
-
debug: true,
|
|
49
|
-
pageview: false,
|
|
39
|
+
measurementId: 'G-XXXXXXXXXX', // Required for GA4
|
|
50
40
|
},
|
|
51
41
|
ads: {
|
|
52
|
-
conversionId: 'AW-XXXXXXXXX',
|
|
53
|
-
currency: 'EUR',
|
|
42
|
+
conversionId: 'AW-XXXXXXXXX', // Required for Google Ads
|
|
54
43
|
},
|
|
55
44
|
gtm: {
|
|
56
|
-
containerId: 'GTM-XXXXXXX',
|
|
45
|
+
containerId: 'GTM-XXXXXXX', // Required for GTM
|
|
57
46
|
},
|
|
58
47
|
},
|
|
59
48
|
});
|
|
60
49
|
```
|
|
61
50
|
|
|
62
|
-
### With Collector
|
|
63
|
-
|
|
64
|
-
```typescript
|
|
65
|
-
import { collector } from '@walkeros/collector';
|
|
66
|
-
import { destinationGtag } from '@walkeros/web-destination-gtag';
|
|
67
|
-
|
|
68
|
-
const instance = collector({
|
|
69
|
-
destinations: [
|
|
70
|
-
destinationGtag({
|
|
71
|
-
settings: {
|
|
72
|
-
ga4: { measurementId: 'G-XXXXXXXXXX' },
|
|
73
|
-
ads: { conversionId: 'AW-XXXXXXXXX' },
|
|
74
|
-
gtm: { containerId: 'GTM-XXXXXXX' },
|
|
75
|
-
},
|
|
76
|
-
}),
|
|
77
|
-
],
|
|
78
|
-
});
|
|
79
|
-
```
|
|
80
|
-
|
|
81
51
|
## Configuration
|
|
82
52
|
|
|
83
|
-
|
|
53
|
+
| Name | Type | Description | Required | Example |
|
|
54
|
+
| ----- | ------------- | -------------------------------------------------- | -------- | ----------------------------------- |
|
|
55
|
+
| `ga4` | `GA4Settings` | GA4-specific configuration settings | No | `{ measurementId: 'G-XXXXXXXXXX' }` |
|
|
56
|
+
| `ads` | `AdsSettings` | Google Ads specific configuration settings | No | `{ conversionId: 'AW-XXXXXXXXX' }` |
|
|
57
|
+
| `gtm` | `GTMSettings` | Google Tag Manager specific configuration settings | No | `{ containerId: 'GTM-XXXXXXX' }` |
|
|
84
58
|
|
|
85
|
-
|
|
86
|
-
interface GA4Settings {
|
|
87
|
-
measurementId: string; // Required: GA4 Measurement ID
|
|
88
|
-
debug?: boolean; // Enable debug mode
|
|
89
|
-
include?: Include; // Data groups to include
|
|
90
|
-
pageview?: boolean; // Send automatic pageviews (default: true)
|
|
91
|
-
server_container_url?: string; // Server-side GTM URL
|
|
92
|
-
snakeCase?: boolean; // Convert event names to snake_case (default: true)
|
|
93
|
-
transport_url?: string; // Custom transport URL
|
|
94
|
-
}
|
|
95
|
-
```
|
|
59
|
+
### Event Mapping
|
|
96
60
|
|
|
97
|
-
|
|
61
|
+
For custom event mapping (`mapping.entity.action.settings`):
|
|
98
62
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
}
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
### GTM Settings
|
|
107
|
-
|
|
108
|
-
```typescript
|
|
109
|
-
interface GTMSettings {
|
|
110
|
-
containerId: string; // Required: GTM Container ID
|
|
111
|
-
dataLayer?: string; // Custom dataLayer name (default: 'dataLayer')
|
|
112
|
-
domain?: string; // Custom GTM domain
|
|
113
|
-
}
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
## Mapping
|
|
117
|
-
|
|
118
|
-
Each tool supports individual mapping configurations:
|
|
119
|
-
|
|
120
|
-
```typescript
|
|
121
|
-
const mapping = {
|
|
122
|
-
order: {
|
|
123
|
-
complete: {
|
|
124
|
-
name: 'purchase',
|
|
125
|
-
settings: {
|
|
126
|
-
ga4: {
|
|
127
|
-
include: ['data', 'context'],
|
|
128
|
-
},
|
|
129
|
-
ads: {
|
|
130
|
-
conversionId: 'abcxyz',
|
|
131
|
-
},
|
|
132
|
-
gtm: {}, // Uses 'purchase' as event name
|
|
133
|
-
},
|
|
134
|
-
data: {
|
|
135
|
-
map: {
|
|
136
|
-
transaction_id: 'data.id',
|
|
137
|
-
value: 'data.total',
|
|
138
|
-
currency: 'data.currency',
|
|
139
|
-
},
|
|
140
|
-
},
|
|
141
|
-
},
|
|
142
|
-
},
|
|
143
|
-
};
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
### GA4-Specific Mapping
|
|
147
|
-
|
|
148
|
-
```typescript
|
|
149
|
-
settings: {
|
|
150
|
-
ga4: {
|
|
151
|
-
include: ['data', 'context', 'user'], // Data groups to include
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
### Google Ads Conversion Mapping
|
|
157
|
-
|
|
158
|
-
For Google Ads, specify the conversion label in the `settings.ads.label` field:
|
|
159
|
-
|
|
160
|
-
```typescript
|
|
161
|
-
{
|
|
162
|
-
name: 'purchase', // GA4/GTM event name
|
|
163
|
-
settings: {
|
|
164
|
-
ads: {
|
|
165
|
-
label: 'CONVERSION_LABEL', // This becomes AW-XXXXXXXXX/CONVERSION_LABEL
|
|
166
|
-
},
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
### GTM DataLayer Mapping
|
|
172
|
-
|
|
173
|
-
GTM receives the full event data and pushes to the configured dataLayer:
|
|
174
|
-
|
|
175
|
-
```typescript
|
|
176
|
-
settings: {
|
|
177
|
-
gtm: {}, // Uses default dataLayer behavior
|
|
178
|
-
}
|
|
179
|
-
```
|
|
63
|
+
| Name | Type | Description | Required | Example |
|
|
64
|
+
| ----- | ------------ | ----------------------------------------------- | -------- | ---------------------------------- |
|
|
65
|
+
| `ga4` | `GA4Mapping` | GA4-specific event mapping configuration | No | `{ include: ['data', 'context'] }` |
|
|
66
|
+
| `ads` | `AdsMapping` | Google Ads specific event mapping configuration | No | `{ label: 'conversion_label' }` |
|
|
67
|
+
| `gtm` | `GTMMapping` | GTM specific event mapping configuration | No | `{}` |
|
|
180
68
|
|
|
181
69
|
## Examples
|
|
182
70
|
|
|
@@ -209,7 +97,7 @@ const destination = destinationGtag({
|
|
|
209
97
|
loop: [
|
|
210
98
|
'nested',
|
|
211
99
|
{
|
|
212
|
-
condition: (entity) => entity.
|
|
100
|
+
condition: (entity) => entity.entity === 'product',
|
|
213
101
|
map: {
|
|
214
102
|
item_id: 'data.id',
|
|
215
103
|
item_name: 'data.name',
|
|
@@ -325,6 +213,13 @@ const rules: DestinationGtag.Rules = {
|
|
|
325
213
|
- Check the dataLayer name matches your GTM configuration
|
|
326
214
|
- Use GTM Preview mode to debug event flow
|
|
327
215
|
|
|
216
|
+
## Contribute
|
|
217
|
+
|
|
218
|
+
Feel free to contribute by submitting an
|
|
219
|
+
[issue](https://github.com/elbwalker/walkerOS/issues), starting a
|
|
220
|
+
[discussion](https://github.com/elbwalker/walkerOS/discussions), or getting in
|
|
221
|
+
[contact](https://calendly.com/elb-alexander/30min).
|
|
222
|
+
|
|
328
223
|
## License
|
|
329
224
|
|
|
330
225
|
MIT
|
package/dist/examples/index.js
CHANGED
|
@@ -39,7 +39,7 @@ var e;
|
|
|
39
39
|
var t;
|
|
40
40
|
var n = Object.getOwnPropertyNames;
|
|
41
41
|
var r = (e = { "package.json"(e2, t2) {
|
|
42
|
-
t2.exports = { name: "@walkeros/core", description: "Core types and platform-agnostic utilities for walkerOS", version: "0.
|
|
42
|
+
t2.exports = { name: "@walkeros/core", description: "Core types and platform-agnostic utilities for walkerOS", version: "0.1.1", main: "./dist/index.js", module: "./dist/index.mjs", types: "./dist/index.d.ts", license: "MIT", files: ["dist/**"], scripts: { build: "tsup --silent", clean: "rm -rf .turbo && rm -rf node_modules && rm -rf dist", dev: "jest --watchAll --colors", lint: 'tsc && eslint "**/*.ts*"', test: "jest", update: "npx npm-check-updates -u && npm update" }, dependencies: {}, devDependencies: {}, repository: { url: "git+https://github.com/elbwalker/walkerOS.git", directory: "packages/core" }, author: "elbwalker <hello@elbwalker.com>", homepage: "https://github.com/elbwalker/walkerOS#readme", bugs: { url: "https://github.com/elbwalker/walkerOS/issues" }, keywords: ["walker", "walkerOS", "analytics", "tracking", "data collection", "measurement", "data privacy", "privacy friendly", "web analytics", "product analytics", "core", "types", "utils"], funding: [{ type: "GitHub Sponsors", url: "https://github.com/sponsors/elbwalker" }] };
|
|
43
43
|
} }, function() {
|
|
44
44
|
return t || (0, e[n(e)[0]])((t = { exports: {} }).exports, t), t.exports;
|
|
45
45
|
});
|
|
@@ -58,24 +58,24 @@ function k(e2) {
|
|
|
58
58
|
function M(e2) {
|
|
59
59
|
return "object" == typeof e2 && null !== e2 && !k(e2) && "[object Object]" === Object.prototype.toString.call(e2);
|
|
60
60
|
}
|
|
61
|
-
var { version:
|
|
62
|
-
function
|
|
61
|
+
var { version: R } = r();
|
|
62
|
+
function V(e2 = {}) {
|
|
63
63
|
var _a;
|
|
64
|
-
const t2 = e2.timestamp || (/* @__PURE__ */ new Date()).setHours(0, 13, 37, 0), n2 = e2.group || "gr0up", r2 = e2.count || 1, o = v({
|
|
65
|
-
if (e2.
|
|
66
|
-
const [t3, n3] = (_a = e2.
|
|
64
|
+
const t2 = e2.timestamp || (/* @__PURE__ */ new Date()).setHours(0, 13, 37, 0), n2 = e2.group || "gr0up", r2 = e2.count || 1, o = v({ name: "entity action", data: { string: "foo", number: 1, boolean: true, array: [0, "text", false], not: void 0 }, context: { dev: ["test", 1] }, globals: { lang: "elb" }, custom: { completely: "random" }, user: { id: "us3r", device: "c00k13", session: "s3ss10n" }, nested: [{ entity: "child", data: { is: "subordinated" }, nested: [], context: { element: ["child", 0] } }], consent: { functional: true }, id: `${t2}-${n2}-${r2}`, trigger: "test", entity: "entity", action: "action", timestamp: t2, timing: 3.14, group: n2, count: r2, version: { source: R, tagging: 1 }, source: { type: "web", id: "https://localhost:80", previous_id: "http://remotehost:9001" } }, e2, { merge: false });
|
|
65
|
+
if (e2.name) {
|
|
66
|
+
const [t3, n3] = (_a = e2.name.split(" ")) != null ? _a : [];
|
|
67
67
|
t3 && n3 && (o.entity = t3, o.action = n3);
|
|
68
68
|
}
|
|
69
69
|
return o;
|
|
70
70
|
}
|
|
71
|
-
function
|
|
71
|
+
function H(e2 = "entity action", t2 = {}) {
|
|
72
72
|
const n2 = t2.timestamp || (/* @__PURE__ */ new Date()).setHours(0, 13, 37, 0), r2 = { data: { id: "ers", name: "Everyday Ruck Snack", color: "black", size: "l", price: 420 } }, o = { data: { id: "cc", name: "Cool Cap", size: "one size", price: 42 } };
|
|
73
|
-
return
|
|
73
|
+
return V({ ...{ "cart view": { data: { currency: "EUR", value: 2 * r2.data.price }, context: { shopping: ["cart", 0] }, globals: { pagegroup: "shop" }, nested: [{ entity: "product", data: { ...r2.data, quantity: 2 }, context: { shopping: ["cart", 0] }, nested: [] }], trigger: "load" }, "checkout view": { data: { step: "payment", currency: "EUR", value: r2.data.price + o.data.price }, context: { shopping: ["checkout", 0] }, globals: { pagegroup: "shop" }, nested: [{ entity: "product", ...r2, context: { shopping: ["checkout", 0] }, nested: [] }, { entity: "product", ...o, context: { shopping: ["checkout", 0] }, nested: [] }], trigger: "load" }, "order complete": { data: { id: "0rd3r1d", currency: "EUR", shipping: 5.22, taxes: 73.76, total: 555 }, context: { shopping: ["complete", 0] }, globals: { pagegroup: "shop" }, nested: [{ entity: "product", ...r2, context: { shopping: ["complete", 0] }, nested: [] }, { entity: "product", ...o, context: { shopping: ["complete", 0] }, nested: [] }, { entity: "gift", data: { name: "Surprise" }, context: { shopping: ["complete", 0] }, nested: [] }], trigger: "load" }, "page view": { data: { domain: "www.example.com", title: "walkerOS documentation", referrer: "https://www.elbwalker.com/", search: "?foo=bar", hash: "#hash", id: "/docs/" }, globals: { pagegroup: "docs" }, trigger: "load" }, "product add": { ...r2, context: { shopping: ["intent", 0] }, globals: { pagegroup: "shop" }, nested: [], trigger: "click" }, "product view": { ...r2, context: { shopping: ["detail", 0] }, globals: { pagegroup: "shop" }, nested: [], trigger: "load" }, "product visible": { data: { ...r2.data, position: 3, promo: true }, context: { shopping: ["discover", 0] }, globals: { pagegroup: "shop" }, nested: [], trigger: "load" }, "promotion visible": { data: { name: "Setting up tracking easily", position: "hero" }, context: { ab_test: ["engagement", 0] }, globals: { pagegroup: "homepage" }, trigger: "visible" }, "session start": { data: { id: "s3ss10n", start: n2, isNew: true, count: 1, runs: 1, isStart: true, storage: true, referrer: "", device: "c00k13" }, user: { id: "us3r", device: "c00k13", session: "s3ss10n", hash: "h4sh", address: "street number", email: "user@example.com", phone: "+49 123 456 789", userAgent: "Mozilla...", browser: "Chrome", browserVersion: "90", deviceType: "desktop", language: "de-DE", country: "DE", region: "HH", city: "Hamburg", zip: "20354", timezone: "Berlin", os: "walkerOS", osVersion: "1.0", screenSize: "1337x420", ip: "127.0.0.0", internal: true, custom: "value" } } }[e2], ...t2, name: e2 });
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
// src/examples/events.ts
|
|
77
77
|
function ga4Purchase() {
|
|
78
|
-
const event =
|
|
78
|
+
const event = H("order complete");
|
|
79
79
|
return [
|
|
80
80
|
"event",
|
|
81
81
|
"purchase",
|
|
@@ -85,7 +85,7 @@ function ga4Purchase() {
|
|
|
85
85
|
tax: event.data.taxes,
|
|
86
86
|
shipping: event.data.shipping,
|
|
87
87
|
currency: "EUR",
|
|
88
|
-
items: event.nested.filter((item) => item.
|
|
88
|
+
items: event.nested.filter((item) => item.entity === "product").map((item) => ({
|
|
89
89
|
item_id: item.data.id,
|
|
90
90
|
item_name: item.data.name,
|
|
91
91
|
quantity: 1
|
|
@@ -95,7 +95,7 @@ function ga4Purchase() {
|
|
|
95
95
|
];
|
|
96
96
|
}
|
|
97
97
|
function ga4AddToCart() {
|
|
98
|
-
const event =
|
|
98
|
+
const event = H("product add");
|
|
99
99
|
return [
|
|
100
100
|
"event",
|
|
101
101
|
"add_to_cart",
|
|
@@ -114,7 +114,7 @@ function ga4AddToCart() {
|
|
|
114
114
|
];
|
|
115
115
|
}
|
|
116
116
|
function adsConversion() {
|
|
117
|
-
const event =
|
|
117
|
+
const event = H("order complete");
|
|
118
118
|
return [
|
|
119
119
|
"event",
|
|
120
120
|
"conversion",
|
|
@@ -127,7 +127,7 @@ function adsConversion() {
|
|
|
127
127
|
];
|
|
128
128
|
}
|
|
129
129
|
function gtmEvent() {
|
|
130
|
-
const event =
|
|
130
|
+
const event = H("product view");
|
|
131
131
|
return {
|
|
132
132
|
event: "product_view",
|
|
133
133
|
product_id: event.data.id,
|
|
@@ -166,7 +166,7 @@ var ga4Purchase2 = {
|
|
|
166
166
|
loop: [
|
|
167
167
|
"nested",
|
|
168
168
|
{
|
|
169
|
-
condition: (entity) => M(entity) && entity.
|
|
169
|
+
condition: (entity) => M(entity) && entity.entity === "product",
|
|
170
170
|
map: {
|
|
171
171
|
item_id: "data.id",
|
|
172
172
|
item_name: "data.name",
|
|
@@ -253,7 +253,7 @@ var combinedPurchase = {
|
|
|
253
253
|
loop: [
|
|
254
254
|
"nested",
|
|
255
255
|
{
|
|
256
|
-
condition: (entity) => M(entity) && entity.
|
|
256
|
+
condition: (entity) => M(entity) && entity.entity === "product",
|
|
257
257
|
map: {
|
|
258
258
|
item_id: "data.id",
|
|
259
259
|
item_name: "data.name",
|
package/dist/examples/index.mjs
CHANGED
|
@@ -18,7 +18,7 @@ var e;
|
|
|
18
18
|
var t;
|
|
19
19
|
var n = Object.getOwnPropertyNames;
|
|
20
20
|
var r = (e = { "package.json"(e2, t2) {
|
|
21
|
-
t2.exports = { name: "@walkeros/core", description: "Core types and platform-agnostic utilities for walkerOS", version: "0.
|
|
21
|
+
t2.exports = { name: "@walkeros/core", description: "Core types and platform-agnostic utilities for walkerOS", version: "0.1.1", main: "./dist/index.js", module: "./dist/index.mjs", types: "./dist/index.d.ts", license: "MIT", files: ["dist/**"], scripts: { build: "tsup --silent", clean: "rm -rf .turbo && rm -rf node_modules && rm -rf dist", dev: "jest --watchAll --colors", lint: 'tsc && eslint "**/*.ts*"', test: "jest", update: "npx npm-check-updates -u && npm update" }, dependencies: {}, devDependencies: {}, repository: { url: "git+https://github.com/elbwalker/walkerOS.git", directory: "packages/core" }, author: "elbwalker <hello@elbwalker.com>", homepage: "https://github.com/elbwalker/walkerOS#readme", bugs: { url: "https://github.com/elbwalker/walkerOS/issues" }, keywords: ["walker", "walkerOS", "analytics", "tracking", "data collection", "measurement", "data privacy", "privacy friendly", "web analytics", "product analytics", "core", "types", "utils"], funding: [{ type: "GitHub Sponsors", url: "https://github.com/sponsors/elbwalker" }] };
|
|
22
22
|
} }, function() {
|
|
23
23
|
return t || (0, e[n(e)[0]])((t = { exports: {} }).exports, t), t.exports;
|
|
24
24
|
});
|
|
@@ -37,24 +37,24 @@ function k(e2) {
|
|
|
37
37
|
function M(e2) {
|
|
38
38
|
return "object" == typeof e2 && null !== e2 && !k(e2) && "[object Object]" === Object.prototype.toString.call(e2);
|
|
39
39
|
}
|
|
40
|
-
var { version:
|
|
41
|
-
function
|
|
40
|
+
var { version: R } = r();
|
|
41
|
+
function V(e2 = {}) {
|
|
42
42
|
var _a;
|
|
43
|
-
const t2 = e2.timestamp || (/* @__PURE__ */ new Date()).setHours(0, 13, 37, 0), n2 = e2.group || "gr0up", r2 = e2.count || 1, o = v({
|
|
44
|
-
if (e2.
|
|
45
|
-
const [t3, n3] = (_a = e2.
|
|
43
|
+
const t2 = e2.timestamp || (/* @__PURE__ */ new Date()).setHours(0, 13, 37, 0), n2 = e2.group || "gr0up", r2 = e2.count || 1, o = v({ name: "entity action", data: { string: "foo", number: 1, boolean: true, array: [0, "text", false], not: void 0 }, context: { dev: ["test", 1] }, globals: { lang: "elb" }, custom: { completely: "random" }, user: { id: "us3r", device: "c00k13", session: "s3ss10n" }, nested: [{ entity: "child", data: { is: "subordinated" }, nested: [], context: { element: ["child", 0] } }], consent: { functional: true }, id: `${t2}-${n2}-${r2}`, trigger: "test", entity: "entity", action: "action", timestamp: t2, timing: 3.14, group: n2, count: r2, version: { source: R, tagging: 1 }, source: { type: "web", id: "https://localhost:80", previous_id: "http://remotehost:9001" } }, e2, { merge: false });
|
|
44
|
+
if (e2.name) {
|
|
45
|
+
const [t3, n3] = (_a = e2.name.split(" ")) != null ? _a : [];
|
|
46
46
|
t3 && n3 && (o.entity = t3, o.action = n3);
|
|
47
47
|
}
|
|
48
48
|
return o;
|
|
49
49
|
}
|
|
50
|
-
function
|
|
50
|
+
function H(e2 = "entity action", t2 = {}) {
|
|
51
51
|
const n2 = t2.timestamp || (/* @__PURE__ */ new Date()).setHours(0, 13, 37, 0), r2 = { data: { id: "ers", name: "Everyday Ruck Snack", color: "black", size: "l", price: 420 } }, o = { data: { id: "cc", name: "Cool Cap", size: "one size", price: 42 } };
|
|
52
|
-
return
|
|
52
|
+
return V({ ...{ "cart view": { data: { currency: "EUR", value: 2 * r2.data.price }, context: { shopping: ["cart", 0] }, globals: { pagegroup: "shop" }, nested: [{ entity: "product", data: { ...r2.data, quantity: 2 }, context: { shopping: ["cart", 0] }, nested: [] }], trigger: "load" }, "checkout view": { data: { step: "payment", currency: "EUR", value: r2.data.price + o.data.price }, context: { shopping: ["checkout", 0] }, globals: { pagegroup: "shop" }, nested: [{ entity: "product", ...r2, context: { shopping: ["checkout", 0] }, nested: [] }, { entity: "product", ...o, context: { shopping: ["checkout", 0] }, nested: [] }], trigger: "load" }, "order complete": { data: { id: "0rd3r1d", currency: "EUR", shipping: 5.22, taxes: 73.76, total: 555 }, context: { shopping: ["complete", 0] }, globals: { pagegroup: "shop" }, nested: [{ entity: "product", ...r2, context: { shopping: ["complete", 0] }, nested: [] }, { entity: "product", ...o, context: { shopping: ["complete", 0] }, nested: [] }, { entity: "gift", data: { name: "Surprise" }, context: { shopping: ["complete", 0] }, nested: [] }], trigger: "load" }, "page view": { data: { domain: "www.example.com", title: "walkerOS documentation", referrer: "https://www.elbwalker.com/", search: "?foo=bar", hash: "#hash", id: "/docs/" }, globals: { pagegroup: "docs" }, trigger: "load" }, "product add": { ...r2, context: { shopping: ["intent", 0] }, globals: { pagegroup: "shop" }, nested: [], trigger: "click" }, "product view": { ...r2, context: { shopping: ["detail", 0] }, globals: { pagegroup: "shop" }, nested: [], trigger: "load" }, "product visible": { data: { ...r2.data, position: 3, promo: true }, context: { shopping: ["discover", 0] }, globals: { pagegroup: "shop" }, nested: [], trigger: "load" }, "promotion visible": { data: { name: "Setting up tracking easily", position: "hero" }, context: { ab_test: ["engagement", 0] }, globals: { pagegroup: "homepage" }, trigger: "visible" }, "session start": { data: { id: "s3ss10n", start: n2, isNew: true, count: 1, runs: 1, isStart: true, storage: true, referrer: "", device: "c00k13" }, user: { id: "us3r", device: "c00k13", session: "s3ss10n", hash: "h4sh", address: "street number", email: "user@example.com", phone: "+49 123 456 789", userAgent: "Mozilla...", browser: "Chrome", browserVersion: "90", deviceType: "desktop", language: "de-DE", country: "DE", region: "HH", city: "Hamburg", zip: "20354", timezone: "Berlin", os: "walkerOS", osVersion: "1.0", screenSize: "1337x420", ip: "127.0.0.0", internal: true, custom: "value" } } }[e2], ...t2, name: e2 });
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
// src/examples/events.ts
|
|
56
56
|
function ga4Purchase() {
|
|
57
|
-
const event =
|
|
57
|
+
const event = H("order complete");
|
|
58
58
|
return [
|
|
59
59
|
"event",
|
|
60
60
|
"purchase",
|
|
@@ -64,7 +64,7 @@ function ga4Purchase() {
|
|
|
64
64
|
tax: event.data.taxes,
|
|
65
65
|
shipping: event.data.shipping,
|
|
66
66
|
currency: "EUR",
|
|
67
|
-
items: event.nested.filter((item) => item.
|
|
67
|
+
items: event.nested.filter((item) => item.entity === "product").map((item) => ({
|
|
68
68
|
item_id: item.data.id,
|
|
69
69
|
item_name: item.data.name,
|
|
70
70
|
quantity: 1
|
|
@@ -74,7 +74,7 @@ function ga4Purchase() {
|
|
|
74
74
|
];
|
|
75
75
|
}
|
|
76
76
|
function ga4AddToCart() {
|
|
77
|
-
const event =
|
|
77
|
+
const event = H("product add");
|
|
78
78
|
return [
|
|
79
79
|
"event",
|
|
80
80
|
"add_to_cart",
|
|
@@ -93,7 +93,7 @@ function ga4AddToCart() {
|
|
|
93
93
|
];
|
|
94
94
|
}
|
|
95
95
|
function adsConversion() {
|
|
96
|
-
const event =
|
|
96
|
+
const event = H("order complete");
|
|
97
97
|
return [
|
|
98
98
|
"event",
|
|
99
99
|
"conversion",
|
|
@@ -106,7 +106,7 @@ function adsConversion() {
|
|
|
106
106
|
];
|
|
107
107
|
}
|
|
108
108
|
function gtmEvent() {
|
|
109
|
-
const event =
|
|
109
|
+
const event = H("product view");
|
|
110
110
|
return {
|
|
111
111
|
event: "product_view",
|
|
112
112
|
product_id: event.data.id,
|
|
@@ -145,7 +145,7 @@ var ga4Purchase2 = {
|
|
|
145
145
|
loop: [
|
|
146
146
|
"nested",
|
|
147
147
|
{
|
|
148
|
-
condition: (entity) => M(entity) && entity.
|
|
148
|
+
condition: (entity) => M(entity) && entity.entity === "product",
|
|
149
149
|
map: {
|
|
150
150
|
item_id: "data.id",
|
|
151
151
|
item_name: "data.name",
|
|
@@ -232,7 +232,7 @@ var combinedPurchase = {
|
|
|
232
232
|
loop: [
|
|
233
233
|
"nested",
|
|
234
234
|
{
|
|
235
|
-
condition: (entity) => M(entity) && entity.
|
|
235
|
+
condition: (entity) => M(entity) && entity.entity === "product",
|
|
236
236
|
map: {
|
|
237
237
|
item_id: "data.id",
|
|
238
238
|
item_name: "data.name",
|
package/dist/index.browser.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var Destination=(()=>{var e=Object.defineProperty,t=Object.getOwnPropertyDescriptor,a=Object.getOwnPropertyNames,n=Object.prototype.hasOwnProperty,r=(t,a)=>{for(var n in a)e(t,n,{get:a[n],enumerable:!0})},o={};r(o,{DestinationGtag:()=>k,default:()=>z,destinationGtag:()=>P,examples:()=>x});var i,s,c=new Set;function d(e,t="https://www.googletagmanager.com/gtag/js?id="){if(c.has(e))return;const a=document.createElement("script");a.src=t+e,document.head.appendChild(a),c.add(e)}function u(){const e=window;e.dataLayer=e.dataLayer||[],e.gtag||(e.gtag=function(){e.dataLayer.push(arguments)})}function p(e){return e("gtag",window.gtag)}var l=Object.getOwnPropertyNames,g=(i={"package.json"(e,t){t.exports={name:"@walkeros/core",description:"Core types and platform-agnostic utilities for walkerOS",version:"0.0.8",main:"./dist/index.js",module:"./dist/index.mjs",types:"./dist/index.d.ts",license:"MIT",files:["dist/**"],scripts:{build:"tsup --silent",clean:"rm -rf .turbo && rm -rf node_modules && rm -rf dist",dev:"jest --watchAll --colors",lint:'tsc && eslint "**/*.ts*"',test:"jest",update:"npx npm-check-updates -u && npm update"},dependencies:{},devDependencies:{},repository:{url:"git+https://github.com/elbwalker/walkerOS.git",directory:"packages/core"},author:"elbwalker <hello@elbwalker.com>",homepage:"https://github.com/elbwalker/walkerOS#readme",bugs:{url:"https://github.com/elbwalker/walkerOS/issues"},keywords:["walker","walkerOS","analytics","tracking","data collection","measurement","data privacy","privacy friendly","web analytics","product analytics","core","types","utils"],funding:[{type:"GitHub Sponsors",url:"https://github.com/sponsors/elbwalker"}]}}},function(){return s||(0,i[l(i)[0]])((s={exports:{}}).exports,s),s.exports}),m={merge:!0,shallow:!0,extend:!0};function y(e){return"object"==typeof e&&null!==e&&!function(e){return Array.isArray(e)}(e)&&"[object Object]"===Object.prototype.toString.call(e)}var{version:v}=g();function h(e={}){var t;const a=e.timestamp||(new Date).setHours(0,13,37,0),n=e.group||"gr0up",r=e.count||1,o=function(e,t={},a={}){a={...m,...a};const n=Object.entries(t).reduce((t,[n,r])=>{const o=e[n];return a.merge&&Array.isArray(o)&&Array.isArray(r)?t[n]=r.reduce((e,t)=>e.includes(t)?e:[...e,t],[...o]):(a.extend||n in e)&&(t[n]=r),t},{});return a.shallow?{...e,...n}:(Object.assign(e,n),e)}({event:"entity action",data:{string:"foo",number:1,boolean:!0,array:[0,"text",!1],not:void 0},context:{dev:["test",1]},globals:{lang:"elb"},custom:{completely:"random"},user:{id:"us3r",device:"c00k13",session:"s3ss10n"},nested:[{type:"child",data:{is:"subordinated"},nested:[],context:{element:["child",0]}}],consent:{functional:!0},id:`${a}-${n}-${r}`,trigger:"test",entity:"entity",action:"action",timestamp:a,timing:3.14,group:n,count:r,version:{source:v,tagging:1},source:{type:"web",id:"https://localhost:80",previous_id:"http://remotehost:9001"}},e,{merge:!1});if(e.event){const[a,n]=null!=(t=e.event.split(" "))?t:[];a&&n&&(o.entity=a,o.action=n)}return o}function w(e="entity action",t={}){const a=t.timestamp||(new Date).setHours(0,13,37,0),n={data:{id:"ers",name:"Everyday Ruck Snack",color:"black",size:"l",price:420}},r={data:{id:"cc",name:"Cool Cap",size:"one size",price:42}};return h({...{"cart view":{data:{currency:"EUR",value:2*n.data.price},context:{shopping:["cart",0]},globals:{pagegroup:"shop"},nested:[{type:"product",data:{...n.data,quantity:2},context:{shopping:["cart",0]},nested:[]}],trigger:"load"},"checkout view":{data:{step:"payment",currency:"EUR",value:n.data.price+r.data.price},context:{shopping:["checkout",0]},globals:{pagegroup:"shop"},nested:[{type:"product",...n,context:{shopping:["checkout",0]},nested:[]},{type:"product",...r,context:{shopping:["checkout",0]},nested:[]}],trigger:"load"},"order complete":{data:{id:"0rd3r1d",currency:"EUR",shipping:5.22,taxes:73.76,total:555},context:{shopping:["complete",0]},globals:{pagegroup:"shop"},nested:[{type:"product",...n,context:{shopping:["complete",0]},nested:[]},{type:"product",...r,context:{shopping:["complete",0]},nested:[]},{type:"gift",data:{name:"Surprise"},context:{shopping:["complete",0]},nested:[]}],trigger:"load"},"page view":{data:{domain:"www.example.com",title:"walkerOS documentation",referrer:"https://www.elbwalker.com/",search:"?foo=bar",hash:"#hash",id:"/docs/"},globals:{pagegroup:"docs"},trigger:"load"},"product add":{...n,context:{shopping:["intent",0]},globals:{pagegroup:"shop"},nested:[],trigger:"click"},"product view":{...n,context:{shopping:["detail",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"},"product visible":{data:{...n.data,position:3,promo:!0},context:{shopping:["discover",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"},"promotion visible":{data:{name:"Setting up tracking easily",position:"hero"},context:{ab_test:["engagement",0]},globals:{pagegroup:"homepage"},trigger:"visible"},"session start":{data:{id:"s3ss10n",start:a,isNew:!0,count:1,runs:1,isStart:!0,storage:!0,referrer:"",device:"c00k13"},user:{id:"us3r",device:"c00k13",session:"s3ss10n",hash:"h4sh",address:"street number",email:"user@example.com",phone:"+49 123 456 789",userAgent:"Mozilla...",browser:"Chrome",browserVersion:"90",deviceType:"desktop",language:"de-DE",country:"DE",region:"HH",city:"Hamburg",zip:"20354",timezone:"Berlin",os:"walkerOS",osVersion:"1.0",screenSize:"1337x420",ip:"127.0.0.0",internal:!0,custom:"value"}}}[e],...t,event:e})}function b(e,t,a={},n,r){if(!t.measurementId)return;const o=y(n)?n:{},i=function(e,t){const a={};return t.includes("all")&&(t=["context","data","event","globals","source","user","version"]),t.forEach(t=>{let n=e[t]||{};"event"==t&&(n={id:e.id,timing:e.timing,trigger:e.trigger,entity:e.entity,action:e.action,group:e.group,count:e.count}),Object.entries(n).forEach(([e,n])=>{"context"==t&&(n=n[0]),a[`${t}_${e}`]=n})}),a}(e,a.include||t.include||["data"]),s={...i,...o};let c=e.event;!1!==t.snakeCase&&(c=function(e,t=!0){return t?e.replace(/\s+/g,"_").toLowerCase():e}(c)),s.send_to=t.measurementId,t.debug&&(s.debug_mode=!0);p(r)("event",c,s)}var f="dataLayer";function _(e,t,a){const{containerId:n,dataLayer:r,domain:o}=e,i=r||f,s=window;i===f?s.dataLayer=s.dataLayer||[]:s[i]=s[i]||[];const c=s[i];t("dataLayer.push",c.push.bind(c))({"gtm.start":(new Date).getTime(),event:"gtm.js"}),a&&n&&function(e,t,a){const n=a!=f?"&l="+a:"",r=document.createElement("script");r.src=t+e+n,document.head.appendChild(r)}(n,o||"https://www.googletagmanager.com/gtm.js?id=",i)}var k={},x={};r(x,{events:()=>E,mapping:()=>S});var E={};function O(){const e=w("order complete");return["event","purchase",{transaction_id:e.data.id,value:e.data.total,tax:e.data.taxes,shipping:e.data.shipping,currency:"EUR",items:e.nested.filter(e=>"product"===e.type).map(e=>({item_id:e.data.id,item_name:e.data.name,quantity:1})),send_to:"G-XXXXXX-1"}]}function j(){const e=w("product add");return["event","add_to_cart",{currency:"EUR",value:e.data.price,items:[{item_id:e.data.id,item_variant:e.data.color,quantity:1}],send_to:"G-XXXXXX-1"}]}function X(){const e=w("order complete");return["event","conversion",{send_to:"AW-XXXXXXXXX/CONVERSION_LABEL",currency:"EUR",value:e.data.total,transaction_id:e.data.id}]}function I(){const e=w("product view");return{event:"product_view",product_id:e.data.id,product_name:e.data.name,product_category:e.data.category,value:e.data.price,currency:"EUR"}}r(E,{adsConversion:()=>X,ga4AddToCart:()=>j,ga4Purchase:()=>O,gtmEvent:()=>I});var S={};r(S,{adsConversion:()=>U,combinedPurchase:()=>D,config:()=>q,ga4AddToCart:()=>C,ga4Purchase:()=>L,gtmProductView:()=>A});var R,L={name:"purchase",settings:{ga4:{include:["data","context"]}},data:{map:{transaction_id:"data.id",value:"data.total",tax:"data.taxes",shipping:"data.shipping",currency:{key:"data.currency",value:"EUR"},items:{loop:["nested",{condition:e=>y(e)&&"product"===e.type,map:{item_id:"data.id",item_name:"data.name",quantity:{key:"data.quantity",value:1}}}]}}}},C={name:"add_to_cart",settings:{ga4:{include:["data"]}},data:{map:{currency:{value:"EUR",key:"data.currency"},value:"data.price",items:{loop:["this",{map:{item_id:"data.id",item_variant:"data.color",quantity:{value:1,key:"data.quantity"}}}]}}}},U={name:"CONVERSION_LABEL",settings:{ads:{}},data:{map:{value:"data.total",currency:{value:"EUR",key:"data.currency"},transaction_id:"data.id"}}},A={name:"product_view",settings:{gtm:{}},data:{map:{product_id:"data.id",product_name:"data.name",product_category:"data.category",value:"data.price",currency:{value:"EUR",key:"data.currency"}}}},D={name:"purchase",settings:{ga4:{include:["data"]},ads:{},gtm:{}},data:{map:{transaction_id:"data.id",value:"data.total",currency:{value:"EUR",key:"data.currency"},items:{loop:["nested",{condition:e=>y(e)&&"product"===e.type,map:{item_id:"data.id",item_name:"data.name",quantity:{value:1,key:"data.quantity"}}}]}}}},q={order:{complete:D},product:{add:C,view:A}},P={type:"google-gtag",config:{settings:{}},init({config:e,wrap:t}){const{settings:a={},loadScript:n}=e,{ga4:r,ads:o,gtm:i}=a;return(null==r?void 0:r.measurementId)&&function(e,t,a){const{measurementId:n,transport_url:r,server_container_url:o,pageview:i}=e;if(!n)return;a&&d(n),u();const s={};r&&(s.transport_url=r),o&&(s.server_container_url=o),!1===i&&(s.send_page_view=!1);const c=p(t);c("js",new Date),c("config",n,s)}(r,t,n),(null==o?void 0:o.conversionId)&&function(e,t,a){const{conversionId:n}=e;if(!n)return;e.currency||(e.currency="EUR"),a&&d(n),u();const r=p(t);r("js",new Date),r("config",n)}(o,t,n),(null==i?void 0:i.containerId)&&_(i,t,n),!!((null==r?void 0:r.measurementId)||(null==o?void 0:o.conversionId)||(null==i?void 0:i.containerId))&&e},push(e,{config:t,mapping:a={},data:n,wrap:r}){const{settings:o={}}=t,{ga4:i,ads:s,gtm:c}=o,d=a.settings||{};(null==i?void 0:i.measurementId)&&b(e,i,d.ga4,n,r),(null==s?void 0:s.conversionId)&&a.name&&function(e,t,a={},n,r,o){const{conversionId:i,currency:s}=t,c=y(n)?n:{},d=a.label||o;if(!d)return;const u={send_to:`${i}/${d}`,currency:s||"EUR",...c};p(r)("event","conversion",u)}(0,s,d.ads,n,r,a.name),(null==c?void 0:c.containerId)&&function(e,t,a={},n,r){const o=window;r("dataLayer.push",o.dataLayer.push.bind(o.dataLayer))({event:e.event,...y(n)?n:e})}(e,0,d.gtm,n,r)}},z=P;return R=o,((r,o,i,s)=>{if(o&&"object"==typeof o||"function"==typeof o)for(let c of a(o))n.call(r,c)||c===i||e(r,c,{get:()=>o[c],enumerable:!(s=t(o,c))||s.enumerable});return r})(e({},"__esModule",{value:!0}),R)})();
|
|
1
|
+
"use strict";var Destination=(()=>{var e=Object.defineProperty,t=Object.getOwnPropertyDescriptor,a=Object.getOwnPropertyNames,n=Object.prototype.hasOwnProperty,o=(t,a)=>{for(var n in a)e(t,n,{get:a[n],enumerable:!0})},r={};o(r,{DestinationGtag:()=>k,default:()=>P,destinationGtag:()=>q,examples:()=>x});var i,s,c=new Set;function d(e,t="https://www.googletagmanager.com/gtag/js?id=",a=globalThis.document){if(c.has(e))return;const n=a.createElement("script");n.src=t+e,a.head.appendChild(n),c.add(e)}function u(e=globalThis.window){const t=e;t.dataLayer=t.dataLayer||[],t.gtag||(t.gtag=function(){t.dataLayer.push(arguments)})}var l=Object.getOwnPropertyNames,p=(i={"package.json"(e,t){t.exports={name:"@walkeros/core",description:"Core types and platform-agnostic utilities for walkerOS",version:"0.1.1",main:"./dist/index.js",module:"./dist/index.mjs",types:"./dist/index.d.ts",license:"MIT",files:["dist/**"],scripts:{build:"tsup --silent",clean:"rm -rf .turbo && rm -rf node_modules && rm -rf dist",dev:"jest --watchAll --colors",lint:'tsc && eslint "**/*.ts*"',test:"jest",update:"npx npm-check-updates -u && npm update"},dependencies:{},devDependencies:{},repository:{url:"git+https://github.com/elbwalker/walkerOS.git",directory:"packages/core"},author:"elbwalker <hello@elbwalker.com>",homepage:"https://github.com/elbwalker/walkerOS#readme",bugs:{url:"https://github.com/elbwalker/walkerOS/issues"},keywords:["walker","walkerOS","analytics","tracking","data collection","measurement","data privacy","privacy friendly","web analytics","product analytics","core","types","utils"],funding:[{type:"GitHub Sponsors",url:"https://github.com/sponsors/elbwalker"}]}}},function(){return s||(0,i[l(i)[0]])((s={exports:{}}).exports,s),s.exports}),g={merge:!0,shallow:!0,extend:!0};function m(e){return"object"==typeof e&&null!==e&&!function(e){return Array.isArray(e)}(e)&&"[object Object]"===Object.prototype.toString.call(e)}var{version:y}=p();function v(e={}){var t;const a=e.timestamp||(new Date).setHours(0,13,37,0),n=e.group||"gr0up",o=e.count||1,r=function(e,t={},a={}){a={...g,...a};const n=Object.entries(t).reduce((t,[n,o])=>{const r=e[n];return a.merge&&Array.isArray(r)&&Array.isArray(o)?t[n]=o.reduce((e,t)=>e.includes(t)?e:[...e,t],[...r]):(a.extend||n in e)&&(t[n]=o),t},{});return a.shallow?{...e,...n}:(Object.assign(e,n),e)}({name:"entity action",data:{string:"foo",number:1,boolean:!0,array:[0,"text",!1],not:void 0},context:{dev:["test",1]},globals:{lang:"elb"},custom:{completely:"random"},user:{id:"us3r",device:"c00k13",session:"s3ss10n"},nested:[{entity:"child",data:{is:"subordinated"},nested:[],context:{element:["child",0]}}],consent:{functional:!0},id:`${a}-${n}-${o}`,trigger:"test",entity:"entity",action:"action",timestamp:a,timing:3.14,group:n,count:o,version:{source:y,tagging:1},source:{type:"web",id:"https://localhost:80",previous_id:"http://remotehost:9001"}},e,{merge:!1});if(e.name){const[a,n]=null!=(t=e.name.split(" "))?t:[];a&&n&&(r.entity=a,r.action=n)}return r}function h(e="entity action",t={}){const a=t.timestamp||(new Date).setHours(0,13,37,0),n={data:{id:"ers",name:"Everyday Ruck Snack",color:"black",size:"l",price:420}},o={data:{id:"cc",name:"Cool Cap",size:"one size",price:42}};return v({...{"cart view":{data:{currency:"EUR",value:2*n.data.price},context:{shopping:["cart",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",data:{...n.data,quantity:2},context:{shopping:["cart",0]},nested:[]}],trigger:"load"},"checkout view":{data:{step:"payment",currency:"EUR",value:n.data.price+o.data.price},context:{shopping:["checkout",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",...n,context:{shopping:["checkout",0]},nested:[]},{entity:"product",...o,context:{shopping:["checkout",0]},nested:[]}],trigger:"load"},"order complete":{data:{id:"0rd3r1d",currency:"EUR",shipping:5.22,taxes:73.76,total:555},context:{shopping:["complete",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",...n,context:{shopping:["complete",0]},nested:[]},{entity:"product",...o,context:{shopping:["complete",0]},nested:[]},{entity:"gift",data:{name:"Surprise"},context:{shopping:["complete",0]},nested:[]}],trigger:"load"},"page view":{data:{domain:"www.example.com",title:"walkerOS documentation",referrer:"https://www.elbwalker.com/",search:"?foo=bar",hash:"#hash",id:"/docs/"},globals:{pagegroup:"docs"},trigger:"load"},"product add":{...n,context:{shopping:["intent",0]},globals:{pagegroup:"shop"},nested:[],trigger:"click"},"product view":{...n,context:{shopping:["detail",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"},"product visible":{data:{...n.data,position:3,promo:!0},context:{shopping:["discover",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"},"promotion visible":{data:{name:"Setting up tracking easily",position:"hero"},context:{ab_test:["engagement",0]},globals:{pagegroup:"homepage"},trigger:"visible"},"session start":{data:{id:"s3ss10n",start:a,isNew:!0,count:1,runs:1,isStart:!0,storage:!0,referrer:"",device:"c00k13"},user:{id:"us3r",device:"c00k13",session:"s3ss10n",hash:"h4sh",address:"street number",email:"user@example.com",phone:"+49 123 456 789",userAgent:"Mozilla...",browser:"Chrome",browserVersion:"90",deviceType:"desktop",language:"de-DE",country:"DE",region:"HH",city:"Hamburg",zip:"20354",timezone:"Berlin",os:"walkerOS",osVersion:"1.0",screenSize:"1337x420",ip:"127.0.0.0",internal:!0,custom:"value"}}}[e],...t,name:e})}function w(e){const t={window:globalThis.window,document:globalThis.document};return e?{...t,...e}:t}function b(e,t,a={},n,o){const{window:r}=w(o);if(!t.measurementId)return;const i=m(n)?n:{},s=function(e,t){const a={};return t.includes("all")&&(t=["context","data","event","globals","source","user","version"]),t.forEach(t=>{let n=e[t]||{};"event"==t&&(n={id:e.id,timing:e.timing,trigger:e.trigger,entity:e.entity,action:e.action,group:e.group,count:e.count}),Object.entries(n).forEach(([e,n])=>{"context"==t&&(n=n[0]),a[`${t}_${e}`]=n})}),a}(e,a.include||t.include||["data"]),c={...s,...i};let d=e.name;!1!==t.snakeCase&&(d=function(e,t=!0){return t?e.replace(/\s+/g,"_").toLowerCase():e}(d)),c.send_to=t.measurementId,t.debug&&(c.debug_mode=!0);(0,r.gtag)("event",d,c)}var f="dataLayer";function _(e,t,a){const{window:n,document:o}=w(a),{containerId:r,dataLayer:i,domain:s}=e,c=i||f;c===f?n.dataLayer=n.dataLayer||[]:n[c]=n[c]||[];n[c].push({"gtm.start":(new Date).getTime(),event:"gtm.js"}),t&&r&&function(e,t,a,n=globalThis.document){const o=a!=f?"&l="+a:"",r=n.createElement("script");r.src=t+e+o,n.head.appendChild(r)}(r,s||"https://www.googletagmanager.com/gtm.js?id=",c,o)}var k={},x={};o(x,{events:()=>E,mapping:()=>S});var E={};function O(){const e=h("order complete");return["event","purchase",{transaction_id:e.data.id,value:e.data.total,tax:e.data.taxes,shipping:e.data.shipping,currency:"EUR",items:e.nested.filter(e=>"product"===e.entity).map(e=>({item_id:e.data.id,item_name:e.data.name,quantity:1})),send_to:"G-XXXXXX-1"}]}function j(){const e=h("product add");return["event","add_to_cart",{currency:"EUR",value:e.data.price,items:[{item_id:e.data.id,item_variant:e.data.color,quantity:1}],send_to:"G-XXXXXX-1"}]}function X(){const e=h("order complete");return["event","conversion",{send_to:"AW-XXXXXXXXX/CONVERSION_LABEL",currency:"EUR",value:e.data.total,transaction_id:e.data.id}]}function I(){const e=h("product view");return{event:"product_view",product_id:e.data.id,product_name:e.data.name,product_category:e.data.category,value:e.data.price,currency:"EUR"}}o(E,{adsConversion:()=>X,ga4AddToCart:()=>j,ga4Purchase:()=>O,gtmEvent:()=>I});var S={};o(S,{adsConversion:()=>L,combinedPurchase:()=>D,config:()=>T,ga4AddToCart:()=>C,ga4Purchase:()=>A,gtmProductView:()=>U});var R,A={name:"purchase",settings:{ga4:{include:["data","context"]}},data:{map:{transaction_id:"data.id",value:"data.total",tax:"data.taxes",shipping:"data.shipping",currency:{key:"data.currency",value:"EUR"},items:{loop:["nested",{condition:e=>m(e)&&"product"===e.entity,map:{item_id:"data.id",item_name:"data.name",quantity:{key:"data.quantity",value:1}}}]}}}},C={name:"add_to_cart",settings:{ga4:{include:["data"]}},data:{map:{currency:{value:"EUR",key:"data.currency"},value:"data.price",items:{loop:["this",{map:{item_id:"data.id",item_variant:"data.color",quantity:{value:1,key:"data.quantity"}}}]}}}},L={name:"CONVERSION_LABEL",settings:{ads:{}},data:{map:{value:"data.total",currency:{value:"EUR",key:"data.currency"},transaction_id:"data.id"}}},U={name:"product_view",settings:{gtm:{}},data:{map:{product_id:"data.id",product_name:"data.name",product_category:"data.category",value:"data.price",currency:{value:"EUR",key:"data.currency"}}}},D={name:"purchase",settings:{ga4:{include:["data"]},ads:{},gtm:{}},data:{map:{transaction_id:"data.id",value:"data.total",currency:{value:"EUR",key:"data.currency"},items:{loop:["nested",{condition:e=>m(e)&&"product"===e.entity,map:{item_id:"data.id",item_name:"data.name",quantity:{value:1,key:"data.quantity"}}}]}}}},T={order:{complete:D},product:{add:C,view:U}},q={type:"google-gtag",config:{settings:{}},env:{window:{gtag:function(...e){},dataLayer:[]},document:{createElement:e=>({src:"",async:!1,setAttribute:()=>{},removeAttribute:()=>{}}),head:{appendChild:()=>{}}}},init({config:e,env:t}){const{settings:a={},loadScript:n}=e,{ga4:o,ads:r,gtm:i}=a;return(null==o?void 0:o.measurementId)&&function(e,t,a){const{window:n,document:o}=w(a),{measurementId:r,transport_url:i,server_container_url:s,pageview:c}=e;if(!r)return;t&&d(r,void 0,o),u(n);const l={};i&&(l.transport_url=i),s&&(l.server_container_url=s),!1===c&&(l.send_page_view=!1);const p=n.gtag;p("js",new Date),p("config",r,l)}(o,n,t),(null==r?void 0:r.conversionId)&&function(e,t,a){const{window:n,document:o}=w(a),{conversionId:r}=e;if(!r)return;e.currency||(e.currency="EUR"),t&&d(r,void 0,o),u(n);const i=n.gtag;i("js",new Date),i("config",r)}(r,n,t),(null==i?void 0:i.containerId)&&_(i,n,t),!!((null==o?void 0:o.measurementId)||(null==r?void 0:r.conversionId)||(null==i?void 0:i.containerId))&&e},push(e,{config:t,mapping:a={},data:n,env:o}){const{settings:r={}}=t,{ga4:i,ads:s,gtm:c}=r,d=a.settings||{};(null==i?void 0:i.measurementId)&&b(e,i,d.ga4,n,o),(null==s?void 0:s.conversionId)&&a.name&&function(e,t,a={},n,o,r){const{conversionId:i,currency:s}=t,c=m(n)?n:{},d=a.label||o;if(!d)return;const u={send_to:`${i}/${d}`,currency:s||"EUR",...c},{window:l}=w(r);(0,l.gtag)("event","conversion",u)}(0,s,d.ads,n,a.name,o),(null==c?void 0:c.containerId)&&function(e,t,a={},n,o){const{window:r}=w(o),i={event:e.name};r.dataLayer.push({...i,...m(n)?n:e})}(e,0,d.gtm,n,o)}},P=q;return R=r,((o,r,i,s)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let c of a(r))n.call(o,c)||c===i||e(o,c,{get:()=>r[c],enumerable:!(s=t(r,c))||s.enumerable});return o})(e({},"__esModule",{value:!0}),R)})();
|
package/dist/index.d.mts
CHANGED
|
@@ -1,18 +1,12 @@
|
|
|
1
1
|
import { Mapping as Mapping$1 } from '@walkeros/core';
|
|
2
2
|
import { DestinationWeb } from '@walkeros/web-core';
|
|
3
3
|
|
|
4
|
-
interface WindowWithDataLayer extends Window {
|
|
5
|
-
dataLayer: unknown[];
|
|
6
|
-
gtag?: Gtag.Gtag;
|
|
7
|
-
[key: string]: unknown;
|
|
8
|
-
}
|
|
9
4
|
declare global {
|
|
10
5
|
interface Window {
|
|
11
6
|
gtag?: Gtag.Gtag;
|
|
12
7
|
[key: string]: unknown;
|
|
13
8
|
}
|
|
14
9
|
}
|
|
15
|
-
type WindowData = WindowWithDataLayer;
|
|
16
10
|
type Destination = DestinationWeb.Destination<Settings, Mapping>;
|
|
17
11
|
type Config = DestinationWeb.Config<Settings, Mapping>;
|
|
18
12
|
interface Settings {
|
|
@@ -72,9 +66,8 @@ type index$1_Parameters = Parameters;
|
|
|
72
66
|
type index$1_Rule = Rule;
|
|
73
67
|
type index$1_Rules = Rules;
|
|
74
68
|
type index$1_Settings = Settings;
|
|
75
|
-
type index$1_WindowData = WindowData;
|
|
76
69
|
declare namespace index$1 {
|
|
77
|
-
export type { index$1_AdsMapping as AdsMapping, index$1_AdsSettings as AdsSettings, index$1_Config as Config, index$1_Destination as Destination, index$1_GA4Mapping as GA4Mapping, index$1_GA4Settings as GA4Settings, index$1_GTMMapping as GTMMapping, index$1_GTMSettings as GTMSettings, index$1_Include as Include, index$1_Mapping as Mapping, index$1_Param as Param, index$1_Parameters as Parameters, index$1_Rule as Rule, index$1_Rules as Rules, index$1_Settings as Settings
|
|
70
|
+
export type { index$1_AdsMapping as AdsMapping, index$1_AdsSettings as AdsSettings, index$1_Config as Config, index$1_Destination as Destination, index$1_GA4Mapping as GA4Mapping, index$1_GA4Settings as GA4Settings, index$1_GTMMapping as GTMMapping, index$1_GTMSettings as GTMSettings, index$1_Include as Include, index$1_Mapping as Mapping, index$1_Param as Param, index$1_Parameters as Parameters, index$1_Rule as Rule, index$1_Rules as Rules, index$1_Settings as Settings };
|
|
78
71
|
}
|
|
79
72
|
|
|
80
73
|
declare function ga4Purchase$1(): unknown[];
|
package/dist/index.d.ts
CHANGED
|
@@ -1,18 +1,12 @@
|
|
|
1
1
|
import { Mapping as Mapping$1 } from '@walkeros/core';
|
|
2
2
|
import { DestinationWeb } from '@walkeros/web-core';
|
|
3
3
|
|
|
4
|
-
interface WindowWithDataLayer extends Window {
|
|
5
|
-
dataLayer: unknown[];
|
|
6
|
-
gtag?: Gtag.Gtag;
|
|
7
|
-
[key: string]: unknown;
|
|
8
|
-
}
|
|
9
4
|
declare global {
|
|
10
5
|
interface Window {
|
|
11
6
|
gtag?: Gtag.Gtag;
|
|
12
7
|
[key: string]: unknown;
|
|
13
8
|
}
|
|
14
9
|
}
|
|
15
|
-
type WindowData = WindowWithDataLayer;
|
|
16
10
|
type Destination = DestinationWeb.Destination<Settings, Mapping>;
|
|
17
11
|
type Config = DestinationWeb.Config<Settings, Mapping>;
|
|
18
12
|
interface Settings {
|
|
@@ -72,9 +66,8 @@ type index$1_Parameters = Parameters;
|
|
|
72
66
|
type index$1_Rule = Rule;
|
|
73
67
|
type index$1_Rules = Rules;
|
|
74
68
|
type index$1_Settings = Settings;
|
|
75
|
-
type index$1_WindowData = WindowData;
|
|
76
69
|
declare namespace index$1 {
|
|
77
|
-
export type { index$1_AdsMapping as AdsMapping, index$1_AdsSettings as AdsSettings, index$1_Config as Config, index$1_Destination as Destination, index$1_GA4Mapping as GA4Mapping, index$1_GA4Settings as GA4Settings, index$1_GTMMapping as GTMMapping, index$1_GTMSettings as GTMSettings, index$1_Include as Include, index$1_Mapping as Mapping, index$1_Param as Param, index$1_Parameters as Parameters, index$1_Rule as Rule, index$1_Rules as Rules, index$1_Settings as Settings
|
|
70
|
+
export type { index$1_AdsMapping as AdsMapping, index$1_AdsSettings as AdsSettings, index$1_Config as Config, index$1_Destination as Destination, index$1_GA4Mapping as GA4Mapping, index$1_GA4Settings as GA4Settings, index$1_GTMMapping as GTMMapping, index$1_GTMSettings as GTMSettings, index$1_Include as Include, index$1_Mapping as Mapping, index$1_Param as Param, index$1_Parameters as Parameters, index$1_Rule as Rule, index$1_Rules as Rules, index$1_Settings as Settings };
|
|
78
71
|
}
|
|
79
72
|
|
|
80
73
|
declare function ga4Purchase$1(): unknown[];
|
package/dist/index.es5.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";function _array_like_to_array(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,a=new Array(t);r<t;r++)a[r]=e[r];return a}function _array_with_holes(e){if(Array.isArray(e))return e}function _array_without_holes(e){if(Array.isArray(e))return _array_like_to_array(e)}function _define_property(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function _iterable_to_array(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function _iterable_to_array_limit(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var a,n,o=[],i=!0,c=!1;try{for(r=r.call(e);!(i=(a=r.next()).done)&&(o.push(a.value),!t||o.length!==t);i=!0);}catch(e){c=!0,n=e}finally{try{i||null==r.return||r.return()}finally{if(c)throw n}}return o}}function _non_iterable_rest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _non_iterable_spread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _object_spread(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},a=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(a=a.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),a.forEach(function(t){_define_property(e,t,r[t])})}return e}function ownKeys(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,a)}return r}function _object_spread_props(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}function _sliced_to_array(e,t){return _array_with_holes(e)||_iterable_to_array_limit(e,t)||_unsupported_iterable_to_array(e,t)||_non_iterable_rest()}function _to_consumable_array(e){return _array_without_holes(e)||_iterable_to_array(e)||_unsupported_iterable_to_array(e)||_non_iterable_spread()}function _type_of(e){return e&&"undefined"!=typeof Symbol&&e.constructor===Symbol?"symbol":typeof e}function _unsupported_iterable_to_array(e,t){if(e){if("string"==typeof e)return _array_like_to_array(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(r):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?_array_like_to_array(e,t):void 0}}var Destination=function(){var e=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"https://www.googletagmanager.com/gtag/js?id=";if(!h.has(e)){var r=document.createElement("script");r.src=t+e,document.head.appendChild(r),h.add(e)}},t=function(){var e=window;e.dataLayer=e.dataLayer||[],e.gtag||(e.gtag=function(){e.dataLayer.push(arguments)})},r=function(e){return e("gtag",window.gtag)},a=function(e){return"object"==(void 0===e?"undefined":_type_of(e))&&null!==e&&!function(e){return Array.isArray(e)}(e)&&"[object Object]"===Object.prototype.toString.call(e)},n=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.timestamp||(new Date).setHours(0,13,37,0),r=e.group||"gr0up",a=e.count||1,n=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};r=_object_spread({},O,r);var a=Object.entries(t).reduce(function(t,a){var n=_sliced_to_array(a,2),o=n[0],i=n[1],c=e[o];return r.merge&&Array.isArray(c)&&Array.isArray(i)?t[o]=i.reduce(function(e,t){return e.includes(t)?e:_to_consumable_array(e).concat([t])},_to_consumable_array(c)):(r.extend||o in e)&&(t[o]=i),t},{});return r.shallow?_object_spread({},e,a):(Object.assign(e,a),e)}({event:"entity action",data:{string:"foo",number:1,boolean:!0,array:[0,"text",!1],not:void 0},context:{dev:["test",1]},globals:{lang:"elb"},custom:{completely:"random"},user:{id:"us3r",device:"c00k13",session:"s3ss10n"},nested:[{type:"child",data:{is:"subordinated"},nested:[],context:{element:["child",0]}}],consent:{functional:!0},id:"".concat(t,"-").concat(r,"-").concat(a),trigger:"test",entity:"entity",action:"action",timestamp:t,timing:3.14,group:r,count:a,version:{source:k,tagging:1},source:{type:"web",id:"https://localhost:80",previous_id:"http://remotehost:9001"}},e,{merge:!1});if(e.event){var o,i=_sliced_to_array(null!==(o=e.event.split(" "))&&void 0!==o?o:[],2),c=i[0],s=i[1];c&&s&&(n.entity=c,n.action=s)}return n},o=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"entity action",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.timestamp||(new Date).setHours(0,13,37,0),a={data:{id:"ers",name:"Everyday Ruck Snack",color:"black",size:"l",price:420}},o={data:{id:"cc",name:"Cool Cap",size:"one size",price:42}};return n(_object_spread_props(_object_spread({},{"cart view":{data:{currency:"EUR",value:2*a.data.price},context:{shopping:["cart",0]},globals:{pagegroup:"shop"},nested:[{type:"product",data:_object_spread_props(_object_spread({},a.data),{quantity:2}),context:{shopping:["cart",0]},nested:[]}],trigger:"load"},"checkout view":{data:{step:"payment",currency:"EUR",value:a.data.price+o.data.price},context:{shopping:["checkout",0]},globals:{pagegroup:"shop"},nested:[_object_spread_props(_object_spread({type:"product"},a),{context:{shopping:["checkout",0]},nested:[]}),_object_spread_props(_object_spread({type:"product"},o),{context:{shopping:["checkout",0]},nested:[]})],trigger:"load"},"order complete":{data:{id:"0rd3r1d",currency:"EUR",shipping:5.22,taxes:73.76,total:555},context:{shopping:["complete",0]},globals:{pagegroup:"shop"},nested:[_object_spread_props(_object_spread({type:"product"},a),{context:{shopping:["complete",0]},nested:[]}),_object_spread_props(_object_spread({type:"product"},o),{context:{shopping:["complete",0]},nested:[]}),{type:"gift",data:{name:"Surprise"},context:{shopping:["complete",0]},nested:[]}],trigger:"load"},"page view":{data:{domain:"www.example.com",title:"walkerOS documentation",referrer:"https://www.elbwalker.com/",search:"?foo=bar",hash:"#hash",id:"/docs/"},globals:{pagegroup:"docs"},trigger:"load"},"product add":_object_spread_props(_object_spread({},a),{context:{shopping:["intent",0]},globals:{pagegroup:"shop"},nested:[],trigger:"click"}),"product view":_object_spread_props(_object_spread({},a),{context:{shopping:["detail",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"}),"product visible":{data:_object_spread_props(_object_spread({},a.data),{position:3,promo:!0}),context:{shopping:["discover",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"},"promotion visible":{data:{name:"Setting up tracking easily",position:"hero"},context:{ab_test:["engagement",0]},globals:{pagegroup:"homepage"},trigger:"visible"},"session start":{data:{id:"s3ss10n",start:r,isNew:!0,count:1,runs:1,isStart:!0,storage:!0,referrer:"",device:"c00k13"},user:{id:"us3r",device:"c00k13",session:"s3ss10n",hash:"h4sh",address:"street number",email:"user@example.com",phone:"+49 123 456 789",userAgent:"Mozilla...",browser:"Chrome",browserVersion:"90",deviceType:"desktop",language:"de-DE",country:"DE",region:"HH",city:"Hamburg",zip:"20354",timezone:"Berlin",os:"walkerOS",osVersion:"1.0",screenSize:"1337x420",ip:"127.0.0.0",internal:!0,custom:"value"}}}[e],t),{event:e}))},i=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=arguments.length>3?arguments[3]:void 0,i=arguments.length>4?arguments[4]:void 0;if(t.measurementId){var c=a(o)?o:{},s=function(e,t){var r={};return t.includes("all")&&(t=["context","data","event","globals","source","user","version"]),t.forEach(function(t){var a=e[t]||{};"event"==t&&(a={id:e.id,timing:e.timing,trigger:e.trigger,entity:e.entity,action:e.action,group:e.group,count:e.count}),Object.entries(a).forEach(function(e){var a=_sliced_to_array(e,2),n=a[0],o=a[1];"context"==t&&(o=o[0]),r["".concat(t,"_").concat(n)]=o})}),r}(e,n.include||t.include||["data"]),d=_object_spread({},s,c),u=e.event;!1!==t.snakeCase&&(u=function(e){return arguments.length>1&&void 0!==arguments[1]&&!arguments[1]?e:e.replace(/\s+/g,"_").toLowerCase()}(u)),d.send_to=t.measurementId,t.debug&&(d.debug_mode=!0),r(i)("event",u,d)}},c=function(e,t,r){var a=r!=x?"&l="+r:"",n=document.createElement("script");n.src=t+e+a,document.head.appendChild(n)},s=function(){var e=o("order complete");return["event","purchase",{transaction_id:e.data.id,value:e.data.total,tax:e.data.taxes,shipping:e.data.shipping,currency:"EUR",items:e.nested.filter(function(e){return"product"===e.type}).map(function(e){return{item_id:e.data.id,item_name:e.data.name,quantity:1}}),send_to:"G-XXXXXX-1"}]},d=function(){var e=o("product add");return["event","add_to_cart",{currency:"EUR",value:e.data.price,items:[{item_id:e.data.id,item_variant:e.data.color,quantity:1}],send_to:"G-XXXXXX-1"}]},u=function(){var e=o("order complete");return["event","conversion",{send_to:"AW-XXXXXXXXX/CONVERSION_LABEL",currency:"EUR",value:e.data.total,transaction_id:e.data.id}]},l=function(){var e=o("product view");return{event:"product_view",product_id:e.data.id,product_name:e.data.name,product_category:e.data.category,value:e.data.price,currency:"EUR"}},p=Object.defineProperty,g=Object.getOwnPropertyDescriptor,_=Object.getOwnPropertyNames,y=Object.prototype.hasOwnProperty,m=function(e,t){for(var r in t)p(e,r,{get:t[r],enumerable:!0})},v={};m(v,{DestinationGtag:function(){return E},default:function(){return N},destinationGtag:function(){return z},examples:function(){return I}});var f,b,h=new Set,w=Object.getOwnPropertyNames,j=(f={"package.json":function(e,t){t.exports={name:"@walkeros/core",description:"Core types and platform-agnostic utilities for walkerOS",version:"0.0.8",main:"./dist/index.js",module:"./dist/index.mjs",types:"./dist/index.d.ts",license:"MIT",files:["dist/**"],scripts:{build:"tsup --silent",clean:"rm -rf .turbo && rm -rf node_modules && rm -rf dist",dev:"jest --watchAll --colors",lint:'tsc && eslint "**/*.ts*"',test:"jest",update:"npx npm-check-updates -u && npm update"},dependencies:{},devDependencies:{},repository:{url:"git+https://github.com/elbwalker/walkerOS.git",directory:"packages/core"},author:"elbwalker <hello@elbwalker.com>",homepage:"https://github.com/elbwalker/walkerOS#readme",bugs:{url:"https://github.com/elbwalker/walkerOS/issues"},keywords:["walker","walkerOS","analytics","tracking","data collection","measurement","data privacy","privacy friendly","web analytics","product analytics","core","types","utils"],funding:[{type:"GitHub Sponsors",url:"https://github.com/sponsors/elbwalker"}]}}},function(){return b||(0,f[w(f)[0]])((b={exports:{}}).exports,b),b.exports}),O={merge:!0,shallow:!0,extend:!0},k=j().version,x="dataLayer",S="https://www.googletagmanager.com/gtm.js?id=",E={},I={};m(I,{events:function(){return A},mapping:function(){return P}});var A={};m(A,{adsConversion:function(){return u},ga4AddToCart:function(){return d},ga4Purchase:function(){return s},gtmEvent:function(){return l}});var P={};m(P,{adsConversion:function(){return L},combinedPurchase:function(){return U},config:function(){return q},ga4AddToCart:function(){return D},ga4Purchase:function(){return R},gtmProductView:function(){return C}});var X,R={name:"purchase",settings:{ga4:{include:["data","context"]}},data:{map:{transaction_id:"data.id",value:"data.total",tax:"data.taxes",shipping:"data.shipping",currency:{key:"data.currency",value:"EUR"},items:{loop:["nested",{condition:function(e){return a(e)&&"product"===e.type},map:{item_id:"data.id",item_name:"data.name",quantity:{key:"data.quantity",value:1}}}]}}}},D={name:"add_to_cart",settings:{ga4:{include:["data"]}},data:{map:{currency:{value:"EUR",key:"data.currency"},value:"data.price",items:{loop:["this",{map:{item_id:"data.id",item_variant:"data.color",quantity:{value:1,key:"data.quantity"}}}]}}}},L={name:"CONVERSION_LABEL",settings:{ads:{}},data:{map:{value:"data.total",currency:{value:"EUR",key:"data.currency"},transaction_id:"data.id"}}},C={name:"product_view",settings:{gtm:{}},data:{map:{product_id:"data.id",product_name:"data.name",product_category:"data.category",value:"data.price",currency:{value:"EUR",key:"data.currency"}}}},U={name:"purchase",settings:{ga4:{include:["data"]},ads:{},gtm:{}},data:{map:{transaction_id:"data.id",value:"data.total",currency:{value:"EUR",key:"data.currency"},items:{loop:["nested",{condition:function(e){return a(e)&&"product"===e.type},map:{item_id:"data.id",item_name:"data.name",quantity:{value:1,key:"data.quantity"}}}]}}}},q={order:{complete:U},product:{add:D,view:C}},z={type:"google-gtag",config:{settings:{}},init:function(a){var n=a.config,o=a.wrap,i=n.settings,s=void 0===i?{}:i,d=n.loadScript,u=s.ga4,l=s.ads,p=s.gtm;return(null==u?void 0:u.measurementId)&&function(a,n,o){var i=a.measurementId,c=a.transport_url,s=a.server_container_url,d=a.pageview;if(i){o&&e(i),t();var u={};c&&(u.transport_url=c),s&&(u.server_container_url=s),!1===d&&(u.send_page_view=!1);var l=r(n);l("js",new Date),l("config",i,u)}}(u,o,d),(null==l?void 0:l.conversionId)&&function(a,n,o){var i=a.conversionId;if(i){a.currency||(a.currency="EUR"),o&&e(i),t();var c=r(n);c("js",new Date),c("config",i)}}(l,o,d),(null==p?void 0:p.containerId)&&function(e,t,r){var a=e.containerId,n=e.dataLayer,o=e.domain,i=n||x,s=window;i===x?s.dataLayer=s.dataLayer||[]:s[i]=s[i]||[];var d=s[i];t("dataLayer.push",d.push.bind(d))({"gtm.start":(new Date).getTime(),event:"gtm.js"}),r&&a&&c(a,o||S,i)}(p,o,d),!!((null==u?void 0:u.measurementId)||(null==l?void 0:l.conversionId)||(null==p?void 0:p.containerId))&&n},push:function(e,t){var n=t.config,o=t.mapping,c=void 0===o?{}:o,s=t.data,d=t.wrap,u=n.settings,l=void 0===u?{}:u,p=l.ga4,g=l.ads,_=l.gtm,y=c.settings||{};(null==p?void 0:p.measurementId)&&i(e,p,y.ga4,s,d),(null==g?void 0:g.conversionId)&&c.name&&function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=arguments.length>3?arguments[3]:void 0,i=arguments.length>4?arguments[4]:void 0,c=arguments.length>5?arguments[5]:void 0,s=t.conversionId,d=t.currency,u=a(o)?o:{},l=n.label||c;if(l){var p=_object_spread({send_to:"".concat(s,"/").concat(l),currency:d||"EUR"},u);r(i)("event","conversion",p)}}(e,g,y.ads,s,d,c.name),(null==_?void 0:_.containerId)&&function(e,t){var r=arguments.length>3?arguments[3]:void 0,n=window;(arguments.length>4?arguments[4]:void 0)("dataLayer.push",n.dataLayer.push.bind(n.dataLayer))(_object_spread({},{event:e.event},a(r)?r:e))}(e,_,y.gtm,s,d)}},N=z;return X=v,function(e,t,r,a){if(t&&"object"===(void 0===t?"undefined":_type_of(t))||"function"==typeof t){var n=!0,o=!1,i=void 0;try{for(var c,s=function(){var n=c.value;y.call(e,n)||n===r||p(e,n,{get:function(){return t[n]},enumerable:!(a=g(t,n))||a.enumerable})},d=_(t)[Symbol.iterator]();!(n=(c=d.next()).done);n=!0)s()}catch(e){o=!0,i=e}finally{try{n||null==d.return||d.return()}finally{if(o)throw i}}}return e}(p({},"__esModule",{value:!0}),X)}();
|
|
1
|
+
"use strict";function _array_like_to_array(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function _array_with_holes(e){if(Array.isArray(e))return e}function _array_without_holes(e){if(Array.isArray(e))return _array_like_to_array(e)}function _define_property(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function _iterable_to_array(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function _iterable_to_array_limit(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,o=[],i=!0,c=!1;try{for(r=r.call(e);!(i=(n=r.next()).done)&&(o.push(n.value),!t||o.length!==t);i=!0);}catch(e){c=!0,a=e}finally{try{i||null==r.return||r.return()}finally{if(c)throw a}}return o}}function _non_iterable_rest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _non_iterable_spread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _object_spread(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){_define_property(e,t,r[t])})}return e}function ownKeys(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function _object_spread_props(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}function _sliced_to_array(e,t){return _array_with_holes(e)||_iterable_to_array_limit(e,t)||_unsupported_iterable_to_array(e,t)||_non_iterable_rest()}function _to_consumable_array(e){return _array_without_holes(e)||_iterable_to_array(e)||_unsupported_iterable_to_array(e)||_non_iterable_spread()}function _type_of(e){return e&&"undefined"!=typeof Symbol&&e.constructor===Symbol?"symbol":typeof e}function _unsupported_iterable_to_array(e,t){if(e){if("string"==typeof e)return _array_like_to_array(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(r):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?_array_like_to_array(e,t):void 0}}var Destination=function(){var e=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"https://www.googletagmanager.com/gtag/js?id=",r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:globalThis.document;if(!h.has(e)){var n=r.createElement("script");n.src=t+e,r.head.appendChild(n),h.add(e)}},t=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:globalThis.window;e.dataLayer=e.dataLayer||[],e.gtag||(e.gtag=function(){e.dataLayer.push(arguments)})},r=function(e){return"object"==(void 0===e?"undefined":_type_of(e))&&null!==e&&!function(e){return Array.isArray(e)}(e)&&"[object Object]"===Object.prototype.toString.call(e)},n=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.timestamp||(new Date).setHours(0,13,37,0),r=e.group||"gr0up",n=e.count||1,a=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};r=_object_spread({},O,r);var n=Object.entries(t).reduce(function(t,n){var a=_sliced_to_array(n,2),o=a[0],i=a[1],c=e[o];return r.merge&&Array.isArray(c)&&Array.isArray(i)?t[o]=i.reduce(function(e,t){return e.includes(t)?e:_to_consumable_array(e).concat([t])},_to_consumable_array(c)):(r.extend||o in e)&&(t[o]=i),t},{});return r.shallow?_object_spread({},e,n):(Object.assign(e,n),e)}({name:"entity action",data:{string:"foo",number:1,boolean:!0,array:[0,"text",!1],not:void 0},context:{dev:["test",1]},globals:{lang:"elb"},custom:{completely:"random"},user:{id:"us3r",device:"c00k13",session:"s3ss10n"},nested:[{entity:"child",data:{is:"subordinated"},nested:[],context:{element:["child",0]}}],consent:{functional:!0},id:"".concat(t,"-").concat(r,"-").concat(n),trigger:"test",entity:"entity",action:"action",timestamp:t,timing:3.14,group:r,count:n,version:{source:k,tagging:1},source:{type:"web",id:"https://localhost:80",previous_id:"http://remotehost:9001"}},e,{merge:!1});if(e.name){var o,i=_sliced_to_array(null!==(o=e.name.split(" "))&&void 0!==o?o:[],2),c=i[0],d=i[1];c&&d&&(a.entity=c,a.action=d)}return a},a=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"entity action",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.timestamp||(new Date).setHours(0,13,37,0),a={data:{id:"ers",name:"Everyday Ruck Snack",color:"black",size:"l",price:420}},o={data:{id:"cc",name:"Cool Cap",size:"one size",price:42}};return n(_object_spread_props(_object_spread({},{"cart view":{data:{currency:"EUR",value:2*a.data.price},context:{shopping:["cart",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",data:_object_spread_props(_object_spread({},a.data),{quantity:2}),context:{shopping:["cart",0]},nested:[]}],trigger:"load"},"checkout view":{data:{step:"payment",currency:"EUR",value:a.data.price+o.data.price},context:{shopping:["checkout",0]},globals:{pagegroup:"shop"},nested:[_object_spread_props(_object_spread({entity:"product"},a),{context:{shopping:["checkout",0]},nested:[]}),_object_spread_props(_object_spread({entity:"product"},o),{context:{shopping:["checkout",0]},nested:[]})],trigger:"load"},"order complete":{data:{id:"0rd3r1d",currency:"EUR",shipping:5.22,taxes:73.76,total:555},context:{shopping:["complete",0]},globals:{pagegroup:"shop"},nested:[_object_spread_props(_object_spread({entity:"product"},a),{context:{shopping:["complete",0]},nested:[]}),_object_spread_props(_object_spread({entity:"product"},o),{context:{shopping:["complete",0]},nested:[]}),{entity:"gift",data:{name:"Surprise"},context:{shopping:["complete",0]},nested:[]}],trigger:"load"},"page view":{data:{domain:"www.example.com",title:"walkerOS documentation",referrer:"https://www.elbwalker.com/",search:"?foo=bar",hash:"#hash",id:"/docs/"},globals:{pagegroup:"docs"},trigger:"load"},"product add":_object_spread_props(_object_spread({},a),{context:{shopping:["intent",0]},globals:{pagegroup:"shop"},nested:[],trigger:"click"}),"product view":_object_spread_props(_object_spread({},a),{context:{shopping:["detail",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"}),"product visible":{data:_object_spread_props(_object_spread({},a.data),{position:3,promo:!0}),context:{shopping:["discover",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"},"promotion visible":{data:{name:"Setting up tracking easily",position:"hero"},context:{ab_test:["engagement",0]},globals:{pagegroup:"homepage"},trigger:"visible"},"session start":{data:{id:"s3ss10n",start:r,isNew:!0,count:1,runs:1,isStart:!0,storage:!0,referrer:"",device:"c00k13"},user:{id:"us3r",device:"c00k13",session:"s3ss10n",hash:"h4sh",address:"street number",email:"user@example.com",phone:"+49 123 456 789",userAgent:"Mozilla...",browser:"Chrome",browserVersion:"90",deviceType:"desktop",language:"de-DE",country:"DE",region:"HH",city:"Hamburg",zip:"20354",timezone:"Berlin",os:"walkerOS",osVersion:"1.0",screenSize:"1337x420",ip:"127.0.0.0",internal:!0,custom:"value"}}}[e],t),{name:e}))},o=function(e){var t={window:globalThis.window,document:globalThis.document};return e?_object_spread({},t,e):t},i=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=arguments.length>3?arguments[3]:void 0,i=o(arguments.length>4?arguments[4]:void 0).window;if(t.measurementId){var c=r(a)?a:{},d=function(e,t){var r={};return t.includes("all")&&(t=["context","data","event","globals","source","user","version"]),t.forEach(function(t){var n=e[t]||{};"event"==t&&(n={id:e.id,timing:e.timing,trigger:e.trigger,entity:e.entity,action:e.action,group:e.group,count:e.count}),Object.entries(n).forEach(function(e){var n=_sliced_to_array(e,2),a=n[0],o=n[1];"context"==t&&(o=o[0]),r["".concat(t,"_").concat(a)]=o})}),r}(e,n.include||t.include||["data"]),s=_object_spread({},d,c),u=e.name;!1!==t.snakeCase&&(u=function(e){return arguments.length>1&&void 0!==arguments[1]&&!arguments[1]?e:e.replace(/\s+/g,"_").toLowerCase()}(u)),s.send_to=t.measurementId,t.debug&&(s.debug_mode=!0),(0,i.gtag)("event",u,s)}},c=function(e,t,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:globalThis.document,a=r!=x?"&l="+r:"",o=n.createElement("script");o.src=t+e+a,n.head.appendChild(o)},d=function(){var e=a("order complete");return["event","purchase",{transaction_id:e.data.id,value:e.data.total,tax:e.data.taxes,shipping:e.data.shipping,currency:"EUR",items:e.nested.filter(function(e){return"product"===e.entity}).map(function(e){return{item_id:e.data.id,item_name:e.data.name,quantity:1}}),send_to:"G-XXXXXX-1"}]},s=function(){var e=a("product add");return["event","add_to_cart",{currency:"EUR",value:e.data.price,items:[{item_id:e.data.id,item_variant:e.data.color,quantity:1}],send_to:"G-XXXXXX-1"}]},u=function(){var e=a("order complete");return["event","conversion",{send_to:"AW-XXXXXXXXX/CONVERSION_LABEL",currency:"EUR",value:e.data.total,transaction_id:e.data.id}]},l=function(){var e=a("product view");return{event:"product_view",product_id:e.data.id,product_name:e.data.name,product_category:e.data.category,value:e.data.price,currency:"EUR"}},p=Object.defineProperty,g=Object.getOwnPropertyDescriptor,_=Object.getOwnPropertyNames,m=Object.prototype.hasOwnProperty,y=function(e,t){for(var r in t)p(e,r,{get:t[r],enumerable:!0})},v={};y(v,{DestinationGtag:function(){return E},default:function(){return z},destinationGtag:function(){return q},examples:function(){return A}});var f,b,h=new Set,w=Object.getOwnPropertyNames,j=(f={"package.json":function(e,t){t.exports={name:"@walkeros/core",description:"Core types and platform-agnostic utilities for walkerOS",version:"0.1.1",main:"./dist/index.js",module:"./dist/index.mjs",types:"./dist/index.d.ts",license:"MIT",files:["dist/**"],scripts:{build:"tsup --silent",clean:"rm -rf .turbo && rm -rf node_modules && rm -rf dist",dev:"jest --watchAll --colors",lint:'tsc && eslint "**/*.ts*"',test:"jest",update:"npx npm-check-updates -u && npm update"},dependencies:{},devDependencies:{},repository:{url:"git+https://github.com/elbwalker/walkerOS.git",directory:"packages/core"},author:"elbwalker <hello@elbwalker.com>",homepage:"https://github.com/elbwalker/walkerOS#readme",bugs:{url:"https://github.com/elbwalker/walkerOS/issues"},keywords:["walker","walkerOS","analytics","tracking","data collection","measurement","data privacy","privacy friendly","web analytics","product analytics","core","types","utils"],funding:[{type:"GitHub Sponsors",url:"https://github.com/sponsors/elbwalker"}]}}},function(){return b||(0,f[w(f)[0]])((b={exports:{}}).exports,b),b.exports}),O={merge:!0,shallow:!0,extend:!0},k=j().version,x="dataLayer",S="https://www.googletagmanager.com/gtm.js?id=",E={},A={};y(A,{events:function(){return I},mapping:function(){return P}});var I={};y(I,{adsConversion:function(){return u},ga4AddToCart:function(){return s},ga4Purchase:function(){return d},gtmEvent:function(){return l}});var P={};y(P,{adsConversion:function(){return D},combinedPurchase:function(){return L},config:function(){return T},ga4AddToCart:function(){return C},ga4Purchase:function(){return R},gtmProductView:function(){return U}});var X,R={name:"purchase",settings:{ga4:{include:["data","context"]}},data:{map:{transaction_id:"data.id",value:"data.total",tax:"data.taxes",shipping:"data.shipping",currency:{key:"data.currency",value:"EUR"},items:{loop:["nested",{condition:function(e){return r(e)&&"product"===e.entity},map:{item_id:"data.id",item_name:"data.name",quantity:{key:"data.quantity",value:1}}}]}}}},C={name:"add_to_cart",settings:{ga4:{include:["data"]}},data:{map:{currency:{value:"EUR",key:"data.currency"},value:"data.price",items:{loop:["this",{map:{item_id:"data.id",item_variant:"data.color",quantity:{value:1,key:"data.quantity"}}}]}}}},D={name:"CONVERSION_LABEL",settings:{ads:{}},data:{map:{value:"data.total",currency:{value:"EUR",key:"data.currency"},transaction_id:"data.id"}}},U={name:"product_view",settings:{gtm:{}},data:{map:{product_id:"data.id",product_name:"data.name",product_category:"data.category",value:"data.price",currency:{value:"EUR",key:"data.currency"}}}},L={name:"purchase",settings:{ga4:{include:["data"]},ads:{},gtm:{}},data:{map:{transaction_id:"data.id",value:"data.total",currency:{value:"EUR",key:"data.currency"},items:{loop:["nested",{condition:function(e){return r(e)&&"product"===e.entity},map:{item_id:"data.id",item_name:"data.name",quantity:{value:1,key:"data.quantity"}}}]}}}},T={order:{complete:L},product:{add:C,view:U}},q={type:"google-gtag",config:{settings:{}},env:{window:{gtag:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r]},dataLayer:[]},document:{createElement:function(e){return{src:"",async:!1,setAttribute:function(){},removeAttribute:function(){}}},head:{appendChild:function(){}}}},init:function(r){var n=r.config,a=r.env,i=n.settings,d=void 0===i?{}:i,s=n.loadScript,u=d.ga4,l=d.ads,p=d.gtm;return(null==u?void 0:u.measurementId)&&function(r,n,a){var i=o(a),c=i.window,d=i.document,s=r.measurementId,u=r.transport_url,l=r.server_container_url,p=r.pageview;if(s){n&&e(s,void 0,d),t(c);var g={};u&&(g.transport_url=u),l&&(g.server_container_url=l),!1===p&&(g.send_page_view=!1);var _=c.gtag;_("js",new Date),_("config",s,g)}}(u,s,a),(null==l?void 0:l.conversionId)&&function(r,n,a){var i=o(a),c=i.window,d=i.document,s=r.conversionId;if(s){r.currency||(r.currency="EUR"),n&&e(s,void 0,d),t(c);var u=c.gtag;u("js",new Date),u("config",s)}}(l,s,a),(null==p?void 0:p.containerId)&&function(e,t,r){var n=o(r),a=n.window,i=n.document,d=e.containerId,s=e.dataLayer,u=e.domain,l=s||x;l===x?a.dataLayer=a.dataLayer||[]:a[l]=a[l]||[],a[l].push({"gtm.start":(new Date).getTime(),event:"gtm.js"}),t&&d&&c(d,u||S,l,i)}(p,s,a),!!((null==u?void 0:u.measurementId)||(null==l?void 0:l.conversionId)||(null==p?void 0:p.containerId))&&n},push:function(e,t){var n=t.config,a=t.mapping,c=void 0===a?{}:a,d=t.data,s=t.env,u=n.settings,l=void 0===u?{}:u,p=l.ga4,g=l.ads,_=l.gtm,m=c.settings||{};(null==p?void 0:p.measurementId)&&i(e,p,m.ga4,d,s),(null==g?void 0:g.conversionId)&&c.name&&function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=arguments.length>3?arguments[3]:void 0,i=arguments.length>4?arguments[4]:void 0,c=arguments.length>5?arguments[5]:void 0,d=t.conversionId,s=t.currency,u=r(a)?a:{},l=n.label||i;if(l){var p=_object_spread({send_to:"".concat(d,"/").concat(l),currency:s||"EUR"},u);(0,o(c).window.gtag)("event","conversion",p)}}(e,g,m.ads,d,c.name,s),(null==_?void 0:_.containerId)&&function(e,t){var n=arguments.length>3?arguments[3]:void 0,a=o(arguments.length>4?arguments[4]:void 0).window,i={event:e.name};a.dataLayer.push(_object_spread({},i,r(n)?n:e))}(e,_,m.gtm,d,s)}},z=q;return X=v,function(e,t,r,n){if(t&&"object"===(void 0===t?"undefined":_type_of(t))||"function"==typeof t){var a=!0,o=!1,i=void 0;try{for(var c,d=function(){var a=c.value;m.call(e,a)||a===r||p(e,a,{get:function(){return t[a]},enumerable:!(n=g(t,a))||n.enumerable})},s=_(t)[Symbol.iterator]();!(a=(c=s.next()).done);a=!0)d()}catch(e){o=!0,i=e}finally{try{a||null==s.return||s.return()}finally{if(o)throw i}}}return e}(p({},"__esModule",{value:!0}),X)}();
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e,t=Object.defineProperty,a=Object.getOwnPropertyDescriptor,n=Object.getOwnPropertyNames,r=Object.prototype.hasOwnProperty,o=(e,a)=>{for(var n in a)t(e,n,{get:a[n],enumerable:!0})},i={};o(i,{DestinationGtag:()=>x,default:()=>z,destinationGtag:()=>P,examples:()=>E}),module.exports=(e=i,((e,o,i,s)=>{if(o&&"object"==typeof o||"function"==typeof o)for(let c of n(o))r.call(e,c)||c===i||t(e,c,{get:()=>o[c],enumerable:!(s=a(o,c))||s.enumerable});return e})(t({},"__esModule",{value:!0}),e));var s,c,d=new Set;function u(e,t="https://www.googletagmanager.com/gtag/js?id="){if(d.has(e))return;const a=document.createElement("script");a.src=t+e,document.head.appendChild(a),d.add(e)}function p(){const e=window;e.dataLayer=e.dataLayer||[],e.gtag||(e.gtag=function(){e.dataLayer.push(arguments)})}function l(e){return e("gtag",window.gtag)}var g=Object.getOwnPropertyNames,m=(s={"package.json"(e,t){t.exports={name:"@walkeros/core",description:"Core types and platform-agnostic utilities for walkerOS",version:"0.0.8",main:"./dist/index.js",module:"./dist/index.mjs",types:"./dist/index.d.ts",license:"MIT",files:["dist/**"],scripts:{build:"tsup --silent",clean:"rm -rf .turbo && rm -rf node_modules && rm -rf dist",dev:"jest --watchAll --colors",lint:'tsc && eslint "**/*.ts*"',test:"jest",update:"npx npm-check-updates -u && npm update"},dependencies:{},devDependencies:{},repository:{url:"git+https://github.com/elbwalker/walkerOS.git",directory:"packages/core"},author:"elbwalker <hello@elbwalker.com>",homepage:"https://github.com/elbwalker/walkerOS#readme",bugs:{url:"https://github.com/elbwalker/walkerOS/issues"},keywords:["walker","walkerOS","analytics","tracking","data collection","measurement","data privacy","privacy friendly","web analytics","product analytics","core","types","utils"],funding:[{type:"GitHub Sponsors",url:"https://github.com/sponsors/elbwalker"}]}}},function(){return c||(0,s[g(s)[0]])((c={exports:{}}).exports,c),c.exports}),y={merge:!0,shallow:!0,extend:!0};function v(e){return"object"==typeof e&&null!==e&&!function(e){return Array.isArray(e)}(e)&&"[object Object]"===Object.prototype.toString.call(e)}var{version:h}=m();function w(e={}){var t;const a=e.timestamp||(new Date).setHours(0,13,37,0),n=e.group||"gr0up",r=e.count||1,o=function(e,t={},a={}){a={...y,...a};const n=Object.entries(t).reduce((t,[n,r])=>{const o=e[n];return a.merge&&Array.isArray(o)&&Array.isArray(r)?t[n]=r.reduce((e,t)=>e.includes(t)?e:[...e,t],[...o]):(a.extend||n in e)&&(t[n]=r),t},{});return a.shallow?{...e,...n}:(Object.assign(e,n),e)}({event:"entity action",data:{string:"foo",number:1,boolean:!0,array:[0,"text",!1],not:void 0},context:{dev:["test",1]},globals:{lang:"elb"},custom:{completely:"random"},user:{id:"us3r",device:"c00k13",session:"s3ss10n"},nested:[{type:"child",data:{is:"subordinated"},nested:[],context:{element:["child",0]}}],consent:{functional:!0},id:`${a}-${n}-${r}`,trigger:"test",entity:"entity",action:"action",timestamp:a,timing:3.14,group:n,count:r,version:{source:h,tagging:1},source:{type:"web",id:"https://localhost:80",previous_id:"http://remotehost:9001"}},e,{merge:!1});if(e.event){const[a,n]=null!=(t=e.event.split(" "))?t:[];a&&n&&(o.entity=a,o.action=n)}return o}function b(e="entity action",t={}){const a=t.timestamp||(new Date).setHours(0,13,37,0),n={data:{id:"ers",name:"Everyday Ruck Snack",color:"black",size:"l",price:420}},r={data:{id:"cc",name:"Cool Cap",size:"one size",price:42}};return w({...{"cart view":{data:{currency:"EUR",value:2*n.data.price},context:{shopping:["cart",0]},globals:{pagegroup:"shop"},nested:[{type:"product",data:{...n.data,quantity:2},context:{shopping:["cart",0]},nested:[]}],trigger:"load"},"checkout view":{data:{step:"payment",currency:"EUR",value:n.data.price+r.data.price},context:{shopping:["checkout",0]},globals:{pagegroup:"shop"},nested:[{type:"product",...n,context:{shopping:["checkout",0]},nested:[]},{type:"product",...r,context:{shopping:["checkout",0]},nested:[]}],trigger:"load"},"order complete":{data:{id:"0rd3r1d",currency:"EUR",shipping:5.22,taxes:73.76,total:555},context:{shopping:["complete",0]},globals:{pagegroup:"shop"},nested:[{type:"product",...n,context:{shopping:["complete",0]},nested:[]},{type:"product",...r,context:{shopping:["complete",0]},nested:[]},{type:"gift",data:{name:"Surprise"},context:{shopping:["complete",0]},nested:[]}],trigger:"load"},"page view":{data:{domain:"www.example.com",title:"walkerOS documentation",referrer:"https://www.elbwalker.com/",search:"?foo=bar",hash:"#hash",id:"/docs/"},globals:{pagegroup:"docs"},trigger:"load"},"product add":{...n,context:{shopping:["intent",0]},globals:{pagegroup:"shop"},nested:[],trigger:"click"},"product view":{...n,context:{shopping:["detail",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"},"product visible":{data:{...n.data,position:3,promo:!0},context:{shopping:["discover",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"},"promotion visible":{data:{name:"Setting up tracking easily",position:"hero"},context:{ab_test:["engagement",0]},globals:{pagegroup:"homepage"},trigger:"visible"},"session start":{data:{id:"s3ss10n",start:a,isNew:!0,count:1,runs:1,isStart:!0,storage:!0,referrer:"",device:"c00k13"},user:{id:"us3r",device:"c00k13",session:"s3ss10n",hash:"h4sh",address:"street number",email:"user@example.com",phone:"+49 123 456 789",userAgent:"Mozilla...",browser:"Chrome",browserVersion:"90",deviceType:"desktop",language:"de-DE",country:"DE",region:"HH",city:"Hamburg",zip:"20354",timezone:"Berlin",os:"walkerOS",osVersion:"1.0",screenSize:"1337x420",ip:"127.0.0.0",internal:!0,custom:"value"}}}[e],...t,event:e})}function f(e,t,a={},n,r){if(!t.measurementId)return;const o=v(n)?n:{},i=function(e,t){const a={};return t.includes("all")&&(t=["context","data","event","globals","source","user","version"]),t.forEach(t=>{let n=e[t]||{};"event"==t&&(n={id:e.id,timing:e.timing,trigger:e.trigger,entity:e.entity,action:e.action,group:e.group,count:e.count}),Object.entries(n).forEach(([e,n])=>{"context"==t&&(n=n[0]),a[`${t}_${e}`]=n})}),a}(e,a.include||t.include||["data"]),s={...i,...o};let c=e.event;!1!==t.snakeCase&&(c=function(e,t=!0){return t?e.replace(/\s+/g,"_").toLowerCase():e}(c)),s.send_to=t.measurementId,t.debug&&(s.debug_mode=!0);l(r)("event",c,s)}var _="dataLayer";function k(e,t,a){const{containerId:n,dataLayer:r,domain:o}=e,i=r||_,s=window;i===_?s.dataLayer=s.dataLayer||[]:s[i]=s[i]||[];const c=s[i];t("dataLayer.push",c.push.bind(c))({"gtm.start":(new Date).getTime(),event:"gtm.js"}),a&&n&&function(e,t,a){const n=a!=_?"&l="+a:"",r=document.createElement("script");r.src=t+e+n,document.head.appendChild(r)}(n,o||"https://www.googletagmanager.com/gtm.js?id=",i)}var x={},E={};o(E,{events:()=>O,mapping:()=>R});var O={};function j(){const e=b("order complete");return["event","purchase",{transaction_id:e.data.id,value:e.data.total,tax:e.data.taxes,shipping:e.data.shipping,currency:"EUR",items:e.nested.filter(e=>"product"===e.type).map(e=>({item_id:e.data.id,item_name:e.data.name,quantity:1})),send_to:"G-XXXXXX-1"}]}function X(){const e=b("product add");return["event","add_to_cart",{currency:"EUR",value:e.data.price,items:[{item_id:e.data.id,item_variant:e.data.color,quantity:1}],send_to:"G-XXXXXX-1"}]}function I(){const e=b("order complete");return["event","conversion",{send_to:"AW-XXXXXXXXX/CONVERSION_LABEL",currency:"EUR",value:e.data.total,transaction_id:e.data.id}]}function S(){const e=b("product view");return{event:"product_view",product_id:e.data.id,product_name:e.data.name,product_category:e.data.category,value:e.data.price,currency:"EUR"}}o(O,{adsConversion:()=>I,ga4AddToCart:()=>X,ga4Purchase:()=>j,gtmEvent:()=>S});var R={};o(R,{adsConversion:()=>U,combinedPurchase:()=>D,config:()=>q,ga4AddToCart:()=>C,ga4Purchase:()=>L,gtmProductView:()=>A});var L={name:"purchase",settings:{ga4:{include:["data","context"]}},data:{map:{transaction_id:"data.id",value:"data.total",tax:"data.taxes",shipping:"data.shipping",currency:{key:"data.currency",value:"EUR"},items:{loop:["nested",{condition:e=>v(e)&&"product"===e.type,map:{item_id:"data.id",item_name:"data.name",quantity:{key:"data.quantity",value:1}}}]}}}},C={name:"add_to_cart",settings:{ga4:{include:["data"]}},data:{map:{currency:{value:"EUR",key:"data.currency"},value:"data.price",items:{loop:["this",{map:{item_id:"data.id",item_variant:"data.color",quantity:{value:1,key:"data.quantity"}}}]}}}},U={name:"CONVERSION_LABEL",settings:{ads:{}},data:{map:{value:"data.total",currency:{value:"EUR",key:"data.currency"},transaction_id:"data.id"}}},A={name:"product_view",settings:{gtm:{}},data:{map:{product_id:"data.id",product_name:"data.name",product_category:"data.category",value:"data.price",currency:{value:"EUR",key:"data.currency"}}}},D={name:"purchase",settings:{ga4:{include:["data"]},ads:{},gtm:{}},data:{map:{transaction_id:"data.id",value:"data.total",currency:{value:"EUR",key:"data.currency"},items:{loop:["nested",{condition:e=>v(e)&&"product"===e.type,map:{item_id:"data.id",item_name:"data.name",quantity:{value:1,key:"data.quantity"}}}]}}}},q={order:{complete:D},product:{add:C,view:A}},P={type:"google-gtag",config:{settings:{}},init({config:e,wrap:t}){const{settings:a={},loadScript:n}=e,{ga4:r,ads:o,gtm:i}=a;return(null==r?void 0:r.measurementId)&&function(e,t,a){const{measurementId:n,transport_url:r,server_container_url:o,pageview:i}=e;if(!n)return;a&&u(n),p();const s={};r&&(s.transport_url=r),o&&(s.server_container_url=o),!1===i&&(s.send_page_view=!1);const c=l(t);c("js",new Date),c("config",n,s)}(r,t,n),(null==o?void 0:o.conversionId)&&function(e,t,a){const{conversionId:n}=e;if(!n)return;e.currency||(e.currency="EUR"),a&&u(n),p();const r=l(t);r("js",new Date),r("config",n)}(o,t,n),(null==i?void 0:i.containerId)&&k(i,t,n),!!((null==r?void 0:r.measurementId)||(null==o?void 0:o.conversionId)||(null==i?void 0:i.containerId))&&e},push(e,{config:t,mapping:a={},data:n,wrap:r}){const{settings:o={}}=t,{ga4:i,ads:s,gtm:c}=o,d=a.settings||{};(null==i?void 0:i.measurementId)&&f(e,i,d.ga4,n,r),(null==s?void 0:s.conversionId)&&a.name&&function(e,t,a={},n,r,o){const{conversionId:i,currency:s}=t,c=v(n)?n:{},d=a.label||o;if(!d)return;const u={send_to:`${i}/${d}`,currency:s||"EUR",...c};l(r)("event","conversion",u)}(0,s,d.ads,n,r,a.name),(null==c?void 0:c.containerId)&&function(e,t,a={},n,r){const o=window;r("dataLayer.push",o.dataLayer.push.bind(o.dataLayer))({event:e.event,...v(n)?n:e})}(e,0,d.gtm,n,r)}},z=P;//# sourceMappingURL=index.js.map
|
|
1
|
+
"use strict";var e,t=Object.defineProperty,a=Object.getOwnPropertyDescriptor,n=Object.getOwnPropertyNames,r=Object.prototype.hasOwnProperty,o=(e,a)=>{for(var n in a)t(e,n,{get:a[n],enumerable:!0})},i={};o(i,{DestinationGtag:()=>I,default:()=>G,destinationGtag:()=>H,examples:()=>S}),module.exports=(e=i,((e,o,i,s)=>{if(o&&"object"==typeof o||"function"==typeof o)for(let c of n(o))r.call(e,c)||c===i||t(e,c,{get:()=>o[c],enumerable:!(s=a(o,c))||s.enumerable});return e})(t({},"__esModule",{value:!0}),e));var s=new Set;function c(e,t="https://www.googletagmanager.com/gtag/js?id=",a=globalThis.document){if(s.has(e))return;const n=a.createElement("script");n.src=t+e,a.head.appendChild(n),s.add(e)}function d(e=globalThis.window){const t=e;t.dataLayer=t.dataLayer||[],t.gtag||(t.gtag=function(){t.dataLayer.push(arguments)})}var u,l,p=require("@walkeros/web-core");var g=Object.getOwnPropertyNames,m=(u={"package.json"(e,t){t.exports={name:"@walkeros/core",description:"Core types and platform-agnostic utilities for walkerOS",version:"0.1.1",main:"./dist/index.js",module:"./dist/index.mjs",types:"./dist/index.d.ts",license:"MIT",files:["dist/**"],scripts:{build:"tsup --silent",clean:"rm -rf .turbo && rm -rf node_modules && rm -rf dist",dev:"jest --watchAll --colors",lint:'tsc && eslint "**/*.ts*"',test:"jest",update:"npx npm-check-updates -u && npm update"},dependencies:{},devDependencies:{},repository:{url:"git+https://github.com/elbwalker/walkerOS.git",directory:"packages/core"},author:"elbwalker <hello@elbwalker.com>",homepage:"https://github.com/elbwalker/walkerOS#readme",bugs:{url:"https://github.com/elbwalker/walkerOS/issues"},keywords:["walker","walkerOS","analytics","tracking","data collection","measurement","data privacy","privacy friendly","web analytics","product analytics","core","types","utils"],funding:[{type:"GitHub Sponsors",url:"https://github.com/sponsors/elbwalker"}]}}},function(){return l||(0,u[g(u)[0]])((l={exports:{}}).exports,l),l.exports}),v={merge:!0,shallow:!0,extend:!0};function y(e){return"object"==typeof e&&null!==e&&!function(e){return Array.isArray(e)}(e)&&"[object Object]"===Object.prototype.toString.call(e)}var{version:h}=m();function w(e={}){var t;const a=e.timestamp||(new Date).setHours(0,13,37,0),n=e.group||"gr0up",r=e.count||1,o=function(e,t={},a={}){a={...v,...a};const n=Object.entries(t).reduce((t,[n,r])=>{const o=e[n];return a.merge&&Array.isArray(o)&&Array.isArray(r)?t[n]=r.reduce((e,t)=>e.includes(t)?e:[...e,t],[...o]):(a.extend||n in e)&&(t[n]=r),t},{});return a.shallow?{...e,...n}:(Object.assign(e,n),e)}({name:"entity action",data:{string:"foo",number:1,boolean:!0,array:[0,"text",!1],not:void 0},context:{dev:["test",1]},globals:{lang:"elb"},custom:{completely:"random"},user:{id:"us3r",device:"c00k13",session:"s3ss10n"},nested:[{entity:"child",data:{is:"subordinated"},nested:[],context:{element:["child",0]}}],consent:{functional:!0},id:`${a}-${n}-${r}`,trigger:"test",entity:"entity",action:"action",timestamp:a,timing:3.14,group:n,count:r,version:{source:h,tagging:1},source:{type:"web",id:"https://localhost:80",previous_id:"http://remotehost:9001"}},e,{merge:!1});if(e.name){const[a,n]=null!=(t=e.name.split(" "))?t:[];a&&n&&(o.entity=a,o.action=n)}return o}function b(e="entity action",t={}){const a=t.timestamp||(new Date).setHours(0,13,37,0),n={data:{id:"ers",name:"Everyday Ruck Snack",color:"black",size:"l",price:420}},r={data:{id:"cc",name:"Cool Cap",size:"one size",price:42}};return w({...{"cart view":{data:{currency:"EUR",value:2*n.data.price},context:{shopping:["cart",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",data:{...n.data,quantity:2},context:{shopping:["cart",0]},nested:[]}],trigger:"load"},"checkout view":{data:{step:"payment",currency:"EUR",value:n.data.price+r.data.price},context:{shopping:["checkout",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",...n,context:{shopping:["checkout",0]},nested:[]},{entity:"product",...r,context:{shopping:["checkout",0]},nested:[]}],trigger:"load"},"order complete":{data:{id:"0rd3r1d",currency:"EUR",shipping:5.22,taxes:73.76,total:555},context:{shopping:["complete",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",...n,context:{shopping:["complete",0]},nested:[]},{entity:"product",...r,context:{shopping:["complete",0]},nested:[]},{entity:"gift",data:{name:"Surprise"},context:{shopping:["complete",0]},nested:[]}],trigger:"load"},"page view":{data:{domain:"www.example.com",title:"walkerOS documentation",referrer:"https://www.elbwalker.com/",search:"?foo=bar",hash:"#hash",id:"/docs/"},globals:{pagegroup:"docs"},trigger:"load"},"product add":{...n,context:{shopping:["intent",0]},globals:{pagegroup:"shop"},nested:[],trigger:"click"},"product view":{...n,context:{shopping:["detail",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"},"product visible":{data:{...n.data,position:3,promo:!0},context:{shopping:["discover",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"},"promotion visible":{data:{name:"Setting up tracking easily",position:"hero"},context:{ab_test:["engagement",0]},globals:{pagegroup:"homepage"},trigger:"visible"},"session start":{data:{id:"s3ss10n",start:a,isNew:!0,count:1,runs:1,isStart:!0,storage:!0,referrer:"",device:"c00k13"},user:{id:"us3r",device:"c00k13",session:"s3ss10n",hash:"h4sh",address:"street number",email:"user@example.com",phone:"+49 123 456 789",userAgent:"Mozilla...",browser:"Chrome",browserVersion:"90",deviceType:"desktop",language:"de-DE",country:"DE",region:"HH",city:"Hamburg",zip:"20354",timezone:"Berlin",os:"walkerOS",osVersion:"1.0",screenSize:"1337x420",ip:"127.0.0.0",internal:!0,custom:"value"}}}[e],...t,name:e})}var f=require("@walkeros/web-core");function _(e,t,a={},n,r){const{window:o}=(0,f.getEnvironment)(r);if(!t.measurementId)return;const i=y(n)?n:{},s=function(e,t){const a={};return t.includes("all")&&(t=["context","data","event","globals","source","user","version"]),t.forEach(t=>{let n=e[t]||{};"event"==t&&(n={id:e.id,timing:e.timing,trigger:e.trigger,entity:e.entity,action:e.action,group:e.group,count:e.count}),Object.entries(n).forEach(([e,n])=>{"context"==t&&(n=n[0]),a[`${t}_${e}`]=n})}),a}(e,a.include||t.include||["data"]),c={...s,...i};let d=e.name;!1!==t.snakeCase&&(d=function(e,t=!0){return t?e.replace(/\s+/g,"_").toLowerCase():e}(d)),c.send_to=t.measurementId,t.debug&&(c.debug_mode=!0);(0,o.gtag)("event",d,c)}var k=require("@walkeros/web-core");var x=require("@walkeros/web-core");var E=require("@walkeros/web-core"),O="dataLayer";function j(e,t,a){const{window:n,document:r}=(0,E.getEnvironment)(a),{containerId:o,dataLayer:i,domain:s}=e,c=i||O;c===O?n.dataLayer=n.dataLayer||[]:n[c]=n[c]||[];n[c].push({"gtm.start":(new Date).getTime(),event:"gtm.js"}),t&&o&&function(e,t,a,n=globalThis.document){const r=a!=O?"&l="+a:"",o=n.createElement("script");o.src=t+e+r,n.head.appendChild(o)}(o,s||"https://www.googletagmanager.com/gtm.js?id=",c,r)}var X=require("@walkeros/web-core");var I={},S={};o(S,{events:()=>R,mapping:()=>U});var R={};function q(){const e=b("order complete");return["event","purchase",{transaction_id:e.data.id,value:e.data.total,tax:e.data.taxes,shipping:e.data.shipping,currency:"EUR",items:e.nested.filter(e=>"product"===e.entity).map(e=>({item_id:e.data.id,item_name:e.data.name,quantity:1})),send_to:"G-XXXXXX-1"}]}function A(){const e=b("product add");return["event","add_to_cart",{currency:"EUR",value:e.data.price,items:[{item_id:e.data.id,item_variant:e.data.color,quantity:1}],send_to:"G-XXXXXX-1"}]}function C(){const e=b("order complete");return["event","conversion",{send_to:"AW-XXXXXXXXX/CONVERSION_LABEL",currency:"EUR",value:e.data.total,transaction_id:e.data.id}]}function L(){const e=b("product view");return{event:"product_view",product_id:e.data.id,product_name:e.data.name,product_category:e.data.category,value:e.data.price,currency:"EUR"}}o(R,{adsConversion:()=>C,ga4AddToCart:()=>A,ga4Purchase:()=>q,gtmEvent:()=>L});var U={};o(U,{adsConversion:()=>T,combinedPurchase:()=>N,config:()=>$,ga4AddToCart:()=>P,ga4Purchase:()=>D,gtmProductView:()=>z});var D={name:"purchase",settings:{ga4:{include:["data","context"]}},data:{map:{transaction_id:"data.id",value:"data.total",tax:"data.taxes",shipping:"data.shipping",currency:{key:"data.currency",value:"EUR"},items:{loop:["nested",{condition:e=>y(e)&&"product"===e.entity,map:{item_id:"data.id",item_name:"data.name",quantity:{key:"data.quantity",value:1}}}]}}}},P={name:"add_to_cart",settings:{ga4:{include:["data"]}},data:{map:{currency:{value:"EUR",key:"data.currency"},value:"data.price",items:{loop:["this",{map:{item_id:"data.id",item_variant:"data.color",quantity:{value:1,key:"data.quantity"}}}]}}}},T={name:"CONVERSION_LABEL",settings:{ads:{}},data:{map:{value:"data.total",currency:{value:"EUR",key:"data.currency"},transaction_id:"data.id"}}},z={name:"product_view",settings:{gtm:{}},data:{map:{product_id:"data.id",product_name:"data.name",product_category:"data.category",value:"data.price",currency:{value:"EUR",key:"data.currency"}}}},N={name:"purchase",settings:{ga4:{include:["data"]},ads:{},gtm:{}},data:{map:{transaction_id:"data.id",value:"data.total",currency:{value:"EUR",key:"data.currency"},items:{loop:["nested",{condition:e=>y(e)&&"product"===e.entity,map:{item_id:"data.id",item_name:"data.name",quantity:{value:1,key:"data.quantity"}}}]}}}},$={order:{complete:N},product:{add:P,view:z}},H={type:"google-gtag",config:{settings:{}},env:{window:{gtag:function(...e){},dataLayer:[]},document:{createElement:e=>({src:"",async:!1,setAttribute:()=>{},removeAttribute:()=>{}}),head:{appendChild:()=>{}}}},init({config:e,env:t}){const{settings:a={},loadScript:n}=e,{ga4:r,ads:o,gtm:i}=a;return(null==r?void 0:r.measurementId)&&function(e,t,a){const{window:n,document:r}=(0,p.getEnvironment)(a),{measurementId:o,transport_url:i,server_container_url:s,pageview:u}=e;if(!o)return;t&&c(o,void 0,r),d(n);const l={};i&&(l.transport_url=i),s&&(l.server_container_url=s),!1===u&&(l.send_page_view=!1);const g=n.gtag;g("js",new Date),g("config",o,l)}(r,n,t),(null==o?void 0:o.conversionId)&&function(e,t,a){const{window:n,document:r}=(0,k.getEnvironment)(a),{conversionId:o}=e;if(!o)return;e.currency||(e.currency="EUR"),t&&c(o,void 0,r),d(n);const i=n.gtag;i("js",new Date),i("config",o)}(o,n,t),(null==i?void 0:i.containerId)&&j(i,n,t),!!((null==r?void 0:r.measurementId)||(null==o?void 0:o.conversionId)||(null==i?void 0:i.containerId))&&e},push(e,{config:t,mapping:a={},data:n,env:r}){const{settings:o={}}=t,{ga4:i,ads:s,gtm:c}=o,d=a.settings||{};(null==i?void 0:i.measurementId)&&_(e,i,d.ga4,n,r),(null==s?void 0:s.conversionId)&&a.name&&function(e,t,a={},n,r,o){const{conversionId:i,currency:s}=t,c=y(n)?n:{},d=a.label||r;if(!d)return;const u={send_to:`${i}/${d}`,currency:s||"EUR",...c},{window:l}=(0,x.getEnvironment)(o);(0,l.gtag)("event","conversion",u)}(0,s,d.ads,n,a.name,r),(null==c?void 0:c.containerId)&&function(e,t,a={},n,r){const{window:o}=(0,X.getEnvironment)(r),i={event:e.name};o.dataLayer.push({...i,...y(n)?n:e})}(e,0,d.gtm,n,r)}},G=H;//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/shared/gtag.ts","../src/ga4/config.ts","../src/shared/parameters.ts","../src/shared/mapping.ts","../src/ga4/push.ts","../src/ads/config.ts","../src/ads/push.ts","../src/gtm/config.ts","../src/gtm/push.ts","../src/types/index.ts","../src/examples/index.ts","../src/examples/events.ts","../src/examples/mapping.ts"],"sourcesContent":["import type { WalkerOS } from '@walkeros/core';\nimport type { Settings, Destination } from './types';\nimport { initGA4, pushGA4Event } from './ga4';\nimport { initAds, pushAdsEvent } from './ads';\nimport { initGTM, pushGTMEvent } from './gtm';\n\n// Types\nexport * as DestinationGtag from './types';\n\n// Examples\nexport * as examples from './examples';\n\nexport const destinationGtag: Destination = {\n type: 'google-gtag',\n\n config: { settings: {} },\n\n init({ config, wrap }) {\n const { settings = {} as Partial<Settings>, loadScript } = config;\n const { ga4, ads, gtm } = settings;\n\n // Initialize GA4 if configured\n if (ga4?.measurementId) {\n initGA4(ga4, wrap, loadScript);\n }\n\n // Initialize Google Ads if configured\n if (ads?.conversionId) {\n initAds(ads, wrap, loadScript);\n }\n\n // Initialize GTM if configured\n if (gtm?.containerId) {\n initGTM(gtm, wrap, loadScript);\n }\n\n // Fail if no tools are configured\n if (!ga4?.measurementId && !ads?.conversionId && !gtm?.containerId) {\n return false;\n }\n\n return config;\n },\n\n push(event, { config, mapping = {}, data, wrap }) {\n const { settings = {} } = config;\n const { ga4, ads, gtm } = settings;\n const eventMapping = mapping.settings || {};\n\n // Push to GA4 if configured\n if (ga4?.measurementId) {\n pushGA4Event(\n event,\n ga4,\n eventMapping.ga4,\n data as WalkerOS.AnyObject,\n wrap,\n );\n }\n\n // Push to Google Ads if configured and has mapping name\n if (ads?.conversionId && mapping.name) {\n pushAdsEvent(\n event,\n ads,\n eventMapping.ads,\n data as WalkerOS.AnyObject,\n wrap,\n mapping.name,\n );\n }\n\n // Push to GTM if configured\n if (gtm?.containerId) {\n pushGTMEvent(\n event,\n gtm,\n eventMapping.gtm,\n data as WalkerOS.AnyObject,\n wrap,\n );\n }\n },\n};\n\nexport default destinationGtag;\n","// Gtag script loading and initialization utilities\n\nconst loadedScripts = new Set<string>();\n\n// For testing: allow resetting loaded scripts\nexport function resetLoadedScripts(): void {\n loadedScripts.clear();\n}\n\nexport function addScript(\n id: string,\n src = 'https://www.googletagmanager.com/gtag/js?id=',\n): void {\n // Prevent loading the same script multiple times\n if (loadedScripts.has(id)) return;\n\n const script = document.createElement('script');\n script.src = src + id;\n document.head.appendChild(script);\n loadedScripts.add(id);\n}\n\nexport function initializeGtag(): void {\n const w = window;\n\n // Setup dataLayer if not exists\n w.dataLayer = w.dataLayer || [];\n\n // Setup gtag function if not exists\n if (!w.gtag) {\n w.gtag = function () {\n (w.dataLayer as unknown[]).push(arguments);\n };\n }\n}\n\nexport function getGtag(\n wrap: (name: string, fn: Function) => Function,\n): Gtag.Gtag {\n return wrap('gtag', window.gtag) as Gtag.Gtag;\n}\n","import type { WalkerOS } from '@walkeros/core';\nimport type { GA4Settings } from '../types';\nimport { addScript, initializeGtag, getGtag } from '../shared/gtag';\n\nexport function initGA4(\n settings: GA4Settings,\n wrap: (name: string, fn: Function) => Function,\n loadScript?: boolean,\n): void {\n const { measurementId, transport_url, server_container_url, pageview } =\n settings;\n\n if (!measurementId) return;\n\n // Load the gtag script\n if (loadScript) addScript(measurementId);\n\n // Initialize gtag infrastructure\n initializeGtag();\n\n const gtagSettings: WalkerOS.AnyObject = {};\n\n // custom transport_url\n if (transport_url) gtagSettings.transport_url = transport_url;\n\n // custom server_container_url\n if (server_container_url)\n gtagSettings.server_container_url = server_container_url;\n\n // disable pageviews\n if (pageview === false) gtagSettings.send_page_view = false;\n\n const gtag = getGtag(wrap);\n gtag('js', new Date());\n\n // gtag init call\n gtag('config', measurementId, gtagSettings);\n}\n","import type { WalkerOS } from '@walkeros/core';\nimport type { Include, Parameters } from '../types';\n\nexport function getParamsInclude(\n event: WalkerOS.DeepPartialEvent,\n include: Include,\n): Parameters {\n const params: Parameters = {};\n\n // Check for the 'all' group to add each group\n if (include.includes('all'))\n include = [\n 'context',\n 'data',\n 'event',\n 'globals',\n 'source',\n 'user',\n 'version',\n ];\n\n include.forEach((groupName) => {\n let group = event[groupName as keyof Omit<WalkerOS.Event, 'all'>] || {};\n\n // Create a fake group for event properties\n if (groupName == 'event')\n group = {\n id: event.id,\n timing: event.timing,\n trigger: event.trigger,\n entity: event.entity,\n action: event.action,\n group: event.group,\n count: event.count,\n };\n\n Object.entries(group).forEach(([key, val]) => {\n // Different value access for context\n if (groupName == 'context') val = (val as WalkerOS.OrderedProperties)[0];\n\n params[`${groupName}_${key}`] = val;\n });\n });\n\n return params;\n}\n","// Shared mapping utilities for all Google tools\n\nexport function normalizeEventName(\n eventName: string,\n snakeCase = true,\n): string {\n if (!snakeCase) return eventName;\n\n return eventName.replace(/\\s+/g, '_').toLowerCase();\n}\n","import type { WalkerOS } from '@walkeros/core';\nimport type { GA4Settings, GA4Mapping, Parameters } from '../types';\nimport { isObject } from '@walkeros/core';\nimport { getParamsInclude } from '../shared/parameters';\nimport { normalizeEventName } from '../shared/mapping';\nimport { getGtag } from '../shared/gtag';\n\nexport function pushGA4Event(\n event: WalkerOS.Event,\n settings: GA4Settings,\n mapping: GA4Mapping = {},\n data: WalkerOS.AnyObject,\n wrap: (name: string, fn: Function) => Function,\n): void {\n if (!settings.measurementId) return;\n\n const eventData = isObject(data) ? data : {};\n\n const paramsInclude = getParamsInclude(\n event,\n // Add data to include by default\n mapping.include || settings.include || ['data'],\n );\n\n const eventParams: Parameters = {\n ...paramsInclude,\n ...eventData,\n };\n\n // Event name (snake_case default)\n let eventName = event.event; // Assume custom mapped name\n if (settings.snakeCase !== false) {\n // Use snake case if not disabled\n eventName = normalizeEventName(eventName);\n }\n\n // Set the GA4 stream id\n eventParams.send_to = settings.measurementId;\n\n // Debug mode\n if (settings.debug) eventParams.debug_mode = true;\n\n const gtag = getGtag(wrap);\n gtag('event', eventName, eventParams);\n}\n","import type { AdsSettings } from '../types';\nimport { addScript, initializeGtag, getGtag } from '../shared/gtag';\n\nexport function initAds(\n settings: AdsSettings,\n wrap: (name: string, fn: Function) => Function,\n loadScript?: boolean,\n): void {\n const { conversionId } = settings;\n\n if (!conversionId) return;\n\n // Default currency value\n if (!settings.currency) settings.currency = 'EUR';\n\n if (loadScript) addScript(conversionId);\n\n // Initialize gtag infrastructure\n initializeGtag();\n\n const gtag = getGtag(wrap);\n gtag('js', new Date());\n\n // gtag init call\n gtag('config', conversionId);\n}\n","import type { WalkerOS } from '@walkeros/core';\nimport type { AdsSettings, AdsMapping } from '../types';\nimport { isObject } from '@walkeros/core';\nimport { getGtag } from '../shared/gtag';\n\nexport function pushAdsEvent(\n event: WalkerOS.Event,\n settings: AdsSettings,\n mapping: AdsMapping = {},\n data: WalkerOS.AnyObject,\n wrap: (name: string, fn: Function) => Function,\n mappingName?: string,\n): void {\n const { conversionId, currency } = settings;\n const eventData = isObject(data) ? data : {};\n\n // Use label from mapping settings, fallback to mappingName for backward compatibility\n const conversionLabel = mapping.label || mappingName;\n if (!conversionLabel) return;\n\n const params: Gtag.CustomParams = {\n send_to: `${conversionId}/${conversionLabel}`,\n currency: currency || 'EUR',\n ...eventData,\n };\n\n const gtag = getGtag(wrap);\n gtag('event', 'conversion', params);\n}\n","import type { GTMSettings, WindowData } from '../types';\n\nconst defaultDataLayer = 'dataLayer';\nconst defaultDomain = 'https://www.googletagmanager.com/gtm.js?id=';\n\nexport function initGTM(\n settings: GTMSettings,\n wrap: (name: string, fn: Function) => Function,\n loadScript?: boolean,\n): void {\n const { containerId, dataLayer, domain } = settings;\n const dataLayerName = dataLayer || defaultDataLayer;\n\n const win = window as WindowData;\n\n // Initialize the dataLayer (default or custom name)\n if (dataLayerName === defaultDataLayer) {\n win.dataLayer = win.dataLayer || [];\n } else {\n win[dataLayerName] = (win[dataLayerName] as unknown[]) || [];\n }\n\n // Get the appropriate dataLayer array\n const dataLayerArray = win[dataLayerName] as unknown[];\n\n const push = wrap('dataLayer.push', dataLayerArray.push.bind(dataLayerArray));\n push({\n 'gtm.start': new Date().getTime(),\n event: 'gtm.js',\n });\n\n // Load the gtm script and container\n if (loadScript && containerId)\n addScript(containerId, domain || defaultDomain, dataLayerName);\n}\n\nfunction addScript(containerId: string, src: string, dataLayerName: string) {\n const dl = dataLayerName != defaultDataLayer ? '&l=' + dataLayerName : '';\n const script = document.createElement('script');\n script.src = src + containerId + dl;\n document.head.appendChild(script);\n}\n","import type { WalkerOS } from '@walkeros/core';\nimport type { GTMSettings, GTMMapping, WindowData } from '../types';\nimport { isObject } from '@walkeros/core';\n\nexport function pushGTMEvent(\n event: WalkerOS.Event,\n settings: GTMSettings,\n mapping: GTMMapping = {},\n data: WalkerOS.AnyObject,\n wrap: (name: string, fn: Function) => Function,\n): void {\n const win = window as WindowData;\n const push = wrap('dataLayer.push', win.dataLayer.push.bind(win.dataLayer));\n const obj = { event: event.event }; // Use the name mapping by default\n\n push({\n ...obj,\n ...(isObject(data) ? data : event),\n });\n}\n","import type { Mapping as WalkerOSMapping } from '@walkeros/core';\nimport type { DestinationWeb } from '@walkeros/web-core';\n\n// Extend Window interface with specific dataLayer typing\ninterface WindowWithDataLayer extends Window {\n dataLayer: unknown[];\n gtag?: Gtag.Gtag;\n [key: string]: unknown; // For custom dataLayer names and other properties\n}\n\ndeclare global {\n interface Window {\n gtag?: Gtag.Gtag;\n [key: string]: unknown; // For custom dataLayer names and other properties\n }\n}\n\n// Export helper type for internal use\nexport type WindowData = WindowWithDataLayer;\n\nexport type Destination = DestinationWeb.Destination<Settings, Mapping>;\nexport type Config = DestinationWeb.Config<Settings, Mapping>;\n\n// Unified settings for all Google tools\nexport interface Settings {\n // GA4 settings\n ga4?: GA4Settings;\n // Google Ads settings\n ads?: AdsSettings;\n // GTM settings\n gtm?: GTMSettings;\n}\n\n// GA4-specific settings\nexport interface GA4Settings {\n measurementId: string;\n debug?: boolean;\n include?: Include;\n pageview?: boolean;\n server_container_url?: string;\n snakeCase?: boolean;\n transport_url?: string;\n}\n\n// Google Ads specific settings\nexport interface AdsSettings {\n conversionId: string;\n currency?: string;\n}\n\n// Google Ads specific mapping\nexport interface AdsMapping {\n label?: string; // Conversion label for this specific event\n}\n\n// GTM specific settings\nexport interface GTMSettings {\n containerId: string;\n dataLayer?: string;\n domain?: string;\n}\n\n// Unified mapping interface\nexport interface Mapping {\n ga4?: GA4Mapping;\n ads?: AdsMapping;\n gtm?: GTMMapping;\n}\n\n// GA4-specific mapping\nexport interface GA4Mapping {\n include?: Include;\n}\n\n// GTM specific mapping\nexport interface GTMMapping {}\n\nexport type Rule = WalkerOSMapping.Rule<Mapping>;\nexport type Rules = WalkerOSMapping.Rules<Rule>;\nexport type Param = WalkerOSMapping.Value;\n\nexport type Include = Array<\n | 'all'\n | 'context'\n | 'data'\n | 'event'\n | 'globals'\n | 'source'\n | 'user'\n | 'version'\n>;\n\nexport type Parameters = Gtag.ControlParams &\n Gtag.EventParams &\n Gtag.CustomParams;\n","export * as events from './events';\nexport * as mapping from './mapping';\n","import { getEvent } from '@walkeros/core';\n\n// GA4 Purchase Event Example\nexport function ga4Purchase(): unknown[] {\n const event = getEvent('order complete');\n\n return [\n 'event',\n 'purchase',\n {\n transaction_id: event.data.id,\n value: event.data.total,\n tax: event.data.taxes,\n shipping: event.data.shipping,\n currency: 'EUR',\n items: event.nested\n .filter((item) => item.type === 'product')\n .map((item) => ({\n item_id: item.data.id,\n item_name: item.data.name,\n quantity: 1,\n })),\n send_to: 'G-XXXXXX-1',\n },\n ];\n}\n\n// GA4 Add to Cart Event Example\nexport function ga4AddToCart(): unknown[] {\n const event = getEvent('product add');\n\n return [\n 'event',\n 'add_to_cart',\n {\n currency: 'EUR',\n value: event.data.price,\n items: [\n {\n item_id: event.data.id,\n item_variant: event.data.color,\n quantity: 1,\n },\n ],\n send_to: 'G-XXXXXX-1',\n },\n ];\n}\n\n// Google Ads Conversion Event Example\nexport function adsConversion(): unknown[] {\n const event = getEvent('order complete');\n\n return [\n 'event',\n 'conversion',\n {\n send_to: 'AW-XXXXXXXXX/CONVERSION_LABEL',\n currency: 'EUR',\n value: event.data.total,\n transaction_id: event.data.id,\n },\n ];\n}\n\n// GTM DataLayer Push Example\nexport function gtmEvent(): Record<string, unknown> {\n const event = getEvent('product view');\n\n return {\n event: 'product_view',\n product_id: event.data.id,\n product_name: event.data.name,\n product_category: event.data.category,\n value: event.data.price,\n currency: 'EUR',\n };\n}\n","import type { Mapping } from '@walkeros/core';\nimport type { DestinationGtag } from '..';\nimport { isObject } from '@walkeros/core';\n\n// GA4 Purchase Mapping\nexport const ga4Purchase: DestinationGtag.Rule = {\n name: 'purchase',\n settings: {\n ga4: {\n include: ['data', 'context'],\n },\n },\n data: {\n map: {\n transaction_id: 'data.id',\n value: 'data.total',\n tax: 'data.taxes',\n shipping: 'data.shipping',\n currency: { key: 'data.currency', value: 'EUR' },\n items: {\n loop: [\n 'nested',\n {\n condition: (entity) =>\n isObject(entity) && entity.type === 'product',\n map: {\n item_id: 'data.id',\n item_name: 'data.name',\n quantity: { key: 'data.quantity', value: 1 },\n },\n },\n ],\n },\n },\n },\n};\n\n// GA4 Add to Cart Mapping\nexport const ga4AddToCart: DestinationGtag.Rule = {\n name: 'add_to_cart',\n settings: {\n ga4: {\n include: ['data'],\n },\n },\n data: {\n map: {\n currency: { value: 'EUR', key: 'data.currency' },\n value: 'data.price',\n items: {\n loop: [\n 'this',\n {\n map: {\n item_id: 'data.id',\n item_variant: 'data.color',\n quantity: { value: 1, key: 'data.quantity' },\n },\n },\n ],\n },\n },\n },\n};\n\n// Google Ads Conversion Mapping\nexport const adsConversion: DestinationGtag.Rule = {\n name: 'CONVERSION_LABEL', // This becomes the conversion label\n settings: {\n ads: {},\n },\n data: {\n map: {\n value: 'data.total',\n currency: { value: 'EUR', key: 'data.currency' },\n transaction_id: 'data.id',\n },\n },\n};\n\n// GTM Event Mapping\nexport const gtmProductView: DestinationGtag.Rule = {\n name: 'product_view',\n settings: {\n gtm: {},\n },\n data: {\n map: {\n product_id: 'data.id',\n product_name: 'data.name',\n product_category: 'data.category',\n value: 'data.price',\n currency: { value: 'EUR', key: 'data.currency' },\n },\n },\n};\n\n// Combined mapping for all tools\nexport const combinedPurchase: DestinationGtag.Rule = {\n name: 'purchase', // GA4 event name\n settings: {\n ga4: {\n include: ['data'],\n },\n ads: {}, // Will use 'purchase' as conversion label for ads\n gtm: {},\n },\n data: {\n map: {\n transaction_id: 'data.id',\n value: 'data.total',\n currency: { value: 'EUR', key: 'data.currency' },\n items: {\n loop: [\n 'nested',\n {\n condition: (entity) =>\n isObject(entity) && entity.type === 'product',\n map: {\n item_id: 'data.id',\n item_name: 'data.name',\n quantity: { value: 1, key: 'data.quantity' },\n },\n },\n ],\n },\n },\n },\n};\n\n// Example configuration with all mappings\nexport const config = {\n order: { complete: combinedPurchase },\n product: {\n add: ga4AddToCart,\n view: gtmProductView,\n },\n} satisfies DestinationGtag.Rules;\n"],"mappings":"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","names":["w","addScript","adsConversion","ga4AddToCart","ga4Purchase","ga4Purchase","ga4AddToCart","adsConversion","config"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/shared/gtag.ts","../src/ga4/config.ts","../src/shared/parameters.ts","../src/shared/mapping.ts","../src/ga4/push.ts","../src/ads/config.ts","../src/ads/push.ts","../src/gtm/config.ts","../src/gtm/push.ts","../src/types/index.ts","../src/examples/index.ts","../src/examples/events.ts","../src/examples/mapping.ts"],"sourcesContent":["import type { WalkerOS } from '@walkeros/core';\nimport type { Settings, Destination } from './types';\nimport { initGA4, pushGA4Event } from './ga4';\nimport { initAds, pushAdsEvent } from './ads';\nimport { initGTM, pushGTMEvent } from './gtm';\n\n// Types\nexport * as DestinationGtag from './types';\n\n// Examples\nexport * as examples from './examples';\n\nexport const destinationGtag: Destination = {\n type: 'google-gtag',\n\n config: { settings: {} },\n\n env: {\n window: {\n gtag: function (...args: unknown[]): void {},\n dataLayer: [] as unknown[],\n },\n document: {\n createElement: (tagName: string) => ({\n src: '',\n async: false,\n setAttribute: () => {},\n removeAttribute: () => {},\n }),\n head: {\n appendChild: () => {},\n },\n },\n },\n\n init({ config, env }) {\n const { settings = {} as Partial<Settings>, loadScript } = config;\n const { ga4, ads, gtm } = settings;\n\n // Initialize GA4 if configured\n if (ga4?.measurementId) {\n initGA4(ga4, loadScript, env);\n }\n\n // Initialize Google Ads if configured\n if (ads?.conversionId) {\n initAds(ads, loadScript, env);\n }\n\n // Initialize GTM if configured\n if (gtm?.containerId) {\n initGTM(gtm, loadScript, env);\n }\n\n // Fail if no tools are configured\n if (!ga4?.measurementId && !ads?.conversionId && !gtm?.containerId) {\n return false;\n }\n\n return config;\n },\n\n push(event, { config, mapping = {}, data, env }) {\n const { settings = {} } = config;\n const { ga4, ads, gtm } = settings;\n const eventMapping = mapping.settings || {};\n\n // Push to GA4 if configured\n if (ga4?.measurementId) {\n pushGA4Event(\n event,\n ga4,\n eventMapping.ga4,\n data as WalkerOS.AnyObject,\n env,\n );\n }\n\n // Push to Google Ads if configured and has mapping name\n if (ads?.conversionId && mapping.name) {\n pushAdsEvent(\n event,\n ads,\n eventMapping.ads,\n data as WalkerOS.AnyObject,\n mapping.name,\n env,\n );\n }\n\n // Push to GTM if configured\n if (gtm?.containerId) {\n pushGTMEvent(\n event,\n gtm,\n eventMapping.gtm,\n data as WalkerOS.AnyObject,\n env,\n );\n }\n },\n};\n\nexport default destinationGtag;\n","// Gtag script loading and initialization utilities\n\nconst loadedScripts = new Set<string>();\n\n// For testing: allow resetting loaded scripts\nexport function resetLoadedScripts(): void {\n loadedScripts.clear();\n}\n\nexport function addScript(\n id: string,\n src = 'https://www.googletagmanager.com/gtag/js?id=',\n document: Document = globalThis.document,\n): void {\n // Prevent loading the same script multiple times\n if (loadedScripts.has(id)) return;\n\n const script = document.createElement('script');\n script.src = src + id;\n document.head.appendChild(script);\n loadedScripts.add(id);\n}\n\nexport function initializeGtag(window: Window = globalThis.window): void {\n const w = window;\n\n // Setup dataLayer if not exists\n w.dataLayer = w.dataLayer || [];\n\n // Setup gtag function if not exists\n if (!w.gtag) {\n w.gtag = function () {\n (w.dataLayer as unknown[]).push(arguments);\n };\n }\n}\n","import type { WalkerOS } from '@walkeros/core';\nimport type { GA4Settings } from '../types';\nimport type { DestinationWeb } from '@walkeros/web-core';\nimport { addScript, initializeGtag } from '../shared/gtag';\nimport { getEnvironment } from '@walkeros/web-core';\n\nexport function initGA4(\n settings: GA4Settings,\n loadScript?: boolean,\n env?: DestinationWeb.Environment,\n): void {\n const { window, document } = getEnvironment(env);\n const { measurementId, transport_url, server_container_url, pageview } =\n settings;\n\n if (!measurementId) return;\n\n // Load the gtag script\n if (loadScript) addScript(measurementId, undefined, document);\n\n // Initialize gtag infrastructure\n initializeGtag(window);\n\n const gtagSettings: WalkerOS.AnyObject = {};\n\n // custom transport_url\n if (transport_url) gtagSettings.transport_url = transport_url;\n\n // custom server_container_url\n if (server_container_url)\n gtagSettings.server_container_url = server_container_url;\n\n // disable pageviews\n if (pageview === false) gtagSettings.send_page_view = false;\n\n const gtag = window.gtag as Gtag.Gtag;\n gtag('js', new Date());\n\n // gtag init call\n gtag('config', measurementId, gtagSettings);\n}\n","import type { WalkerOS } from '@walkeros/core';\nimport type { Include, Parameters } from '../types';\n\nexport function getParamsInclude(\n event: WalkerOS.DeepPartialEvent,\n include: Include,\n): Parameters {\n const params: Parameters = {};\n\n // Check for the 'all' group to add each group\n if (include.includes('all'))\n include = [\n 'context',\n 'data',\n 'event',\n 'globals',\n 'source',\n 'user',\n 'version',\n ];\n\n include.forEach((groupName) => {\n let group = event[groupName as keyof Omit<WalkerOS.Event, 'all'>] || {};\n\n // Create a fake group for event properties\n if (groupName == 'event')\n group = {\n id: event.id,\n timing: event.timing,\n trigger: event.trigger,\n entity: event.entity,\n action: event.action,\n group: event.group,\n count: event.count,\n };\n\n Object.entries(group).forEach(([key, val]) => {\n // Different value access for context\n if (groupName == 'context') val = (val as WalkerOS.OrderedProperties)[0];\n\n params[`${groupName}_${key}`] = val;\n });\n });\n\n return params;\n}\n","// Shared mapping utilities for all Google tools\n\nexport function normalizeEventName(\n eventName: string,\n snakeCase = true,\n): string {\n if (!snakeCase) return eventName;\n\n return eventName.replace(/\\s+/g, '_').toLowerCase();\n}\n","import type { WalkerOS } from '@walkeros/core';\nimport type { GA4Settings, GA4Mapping, Parameters } from '../types';\nimport type { DestinationWeb } from '@walkeros/web-core';\nimport { isObject } from '@walkeros/core';\nimport { getParamsInclude } from '../shared/parameters';\nimport { normalizeEventName } from '../shared/mapping';\nimport { getEnvironment } from '@walkeros/web-core';\n\nexport function pushGA4Event(\n event: WalkerOS.Event,\n settings: GA4Settings,\n mapping: GA4Mapping = {},\n data: WalkerOS.AnyObject,\n env?: DestinationWeb.Environment,\n): void {\n const { window } = getEnvironment(env);\n\n if (!settings.measurementId) return;\n\n const eventData = isObject(data) ? data : {};\n\n const paramsInclude = getParamsInclude(\n event,\n // Add data to include by default\n mapping.include || settings.include || ['data'],\n );\n\n const eventParams: Parameters = {\n ...paramsInclude,\n ...eventData,\n };\n\n // Event name (snake_case default)\n let eventName = event.name; // Assume custom mapped name\n if (settings.snakeCase !== false) {\n // Use snake case if not disabled\n eventName = normalizeEventName(eventName);\n }\n\n // Set the GA4 stream id\n eventParams.send_to = settings.measurementId;\n\n // Debug mode\n if (settings.debug) eventParams.debug_mode = true;\n\n const gtag = window.gtag as Gtag.Gtag;\n gtag('event', eventName, eventParams);\n}\n","import type { AdsSettings } from '../types';\nimport type { DestinationWeb } from '@walkeros/web-core';\nimport { addScript, initializeGtag } from '../shared/gtag';\nimport { getEnvironment } from '@walkeros/web-core';\n\nexport function initAds(\n settings: AdsSettings,\n loadScript?: boolean,\n env?: DestinationWeb.Environment,\n): void {\n const { window, document } = getEnvironment(env);\n const { conversionId } = settings;\n\n if (!conversionId) return;\n\n // Default currency value\n if (!settings.currency) settings.currency = 'EUR';\n\n if (loadScript) addScript(conversionId, undefined, document);\n\n // Initialize gtag infrastructure\n initializeGtag(window);\n\n const gtag = window.gtag as Gtag.Gtag;\n gtag('js', new Date());\n\n // gtag init call\n gtag('config', conversionId);\n}\n","import type { WalkerOS } from '@walkeros/core';\nimport type { AdsSettings, AdsMapping } from '../types';\nimport type { DestinationWeb } from '@walkeros/web-core';\nimport { isObject } from '@walkeros/core';\nimport { getEnvironment } from '@walkeros/web-core';\n\nexport function pushAdsEvent(\n event: WalkerOS.Event,\n settings: AdsSettings,\n mapping: AdsMapping = {},\n data: WalkerOS.AnyObject,\n mappingName?: string,\n env?: DestinationWeb.Environment,\n): void {\n const { conversionId, currency } = settings;\n const eventData = isObject(data) ? data : {};\n\n // Use label from mapping settings, fallback to mappingName for backward compatibility\n const conversionLabel = mapping.label || mappingName;\n if (!conversionLabel) return;\n\n const params: Gtag.CustomParams = {\n send_to: `${conversionId}/${conversionLabel}`,\n currency: currency || 'EUR',\n ...eventData,\n };\n\n const { window } = getEnvironment(env);\n const gtag = window.gtag as Gtag.Gtag;\n gtag('event', 'conversion', params);\n}\n","import type { GTMSettings } from '../types';\nimport type { DestinationWeb } from '@walkeros/web-core';\nimport { getEnvironment } from '@walkeros/web-core';\n\nconst defaultDataLayer = 'dataLayer';\nconst defaultDomain = 'https://www.googletagmanager.com/gtm.js?id=';\n\nexport function initGTM(\n settings: GTMSettings,\n loadScript?: boolean,\n env?: DestinationWeb.Environment,\n): void {\n const { window, document } = getEnvironment(env);\n const { containerId, dataLayer, domain } = settings;\n const dataLayerName = dataLayer || defaultDataLayer;\n\n // Initialize the dataLayer (default or custom name)\n if (dataLayerName === defaultDataLayer) {\n window.dataLayer = window.dataLayer || [];\n } else {\n window[dataLayerName] = (window[dataLayerName] as unknown[]) || [];\n }\n\n // Get the appropriate dataLayer array\n const dataLayerArray = window[dataLayerName] as unknown[];\n\n dataLayerArray.push({\n 'gtm.start': new Date().getTime(),\n event: 'gtm.js',\n });\n\n // Load the gtm script and container\n if (loadScript && containerId)\n addScript(containerId, domain || defaultDomain, dataLayerName, document);\n}\n\nfunction addScript(\n containerId: string,\n src: string,\n dataLayerName: string,\n document: Document = globalThis.document,\n) {\n const dl = dataLayerName != defaultDataLayer ? '&l=' + dataLayerName : '';\n const script = document.createElement('script');\n script.src = src + containerId + dl;\n document.head.appendChild(script);\n}\n","import type { WalkerOS } from '@walkeros/core';\nimport type { GTMSettings, GTMMapping } from '../types';\nimport type { DestinationWeb } from '@walkeros/web-core';\nimport { isObject } from '@walkeros/core';\nimport { getEnvironment } from '@walkeros/web-core';\n\nexport function pushGTMEvent(\n event: WalkerOS.Event,\n settings: GTMSettings,\n mapping: GTMMapping = {},\n data: WalkerOS.AnyObject,\n env?: DestinationWeb.Environment,\n): void {\n const { window } = getEnvironment(env);\n const obj = { event: event.name }; // Use the name mapping by default\n\n (window.dataLayer as unknown[]).push({\n ...obj,\n ...(isObject(data) ? data : event),\n });\n}\n","import type { Mapping as WalkerOSMapping } from '@walkeros/core';\nimport type { DestinationWeb } from '@walkeros/web-core';\n\n// Extend Window interface with specific dataLayer typing\ninterface WindowWithDataLayer extends Window {\n dataLayer: unknown[];\n gtag?: Gtag.Gtag;\n [key: string]: unknown; // For custom dataLayer names and other properties\n}\n\ndeclare global {\n interface Window {\n gtag?: Gtag.Gtag;\n [key: string]: unknown; // For custom dataLayer names and other properties\n }\n}\n\nexport type Destination = DestinationWeb.Destination<Settings, Mapping>;\nexport type Config = DestinationWeb.Config<Settings, Mapping>;\n\n// Unified settings for all Google tools\nexport interface Settings {\n // GA4 settings\n ga4?: GA4Settings;\n // Google Ads settings\n ads?: AdsSettings;\n // GTM settings\n gtm?: GTMSettings;\n}\n\n// GA4-specific settings\nexport interface GA4Settings {\n measurementId: string;\n debug?: boolean;\n include?: Include;\n pageview?: boolean;\n server_container_url?: string;\n snakeCase?: boolean;\n transport_url?: string;\n}\n\n// Google Ads specific settings\nexport interface AdsSettings {\n conversionId: string;\n currency?: string;\n}\n\n// Google Ads specific mapping\nexport interface AdsMapping {\n label?: string; // Conversion label for this specific event\n}\n\n// GTM specific settings\nexport interface GTMSettings {\n containerId: string;\n dataLayer?: string;\n domain?: string;\n}\n\n// Unified mapping interface\nexport interface Mapping {\n ga4?: GA4Mapping;\n ads?: AdsMapping;\n gtm?: GTMMapping;\n}\n\n// GA4-specific mapping\nexport interface GA4Mapping {\n include?: Include;\n}\n\n// GTM specific mapping\nexport interface GTMMapping {}\n\nexport type Rule = WalkerOSMapping.Rule<Mapping>;\nexport type Rules = WalkerOSMapping.Rules<Rule>;\nexport type Param = WalkerOSMapping.Value;\n\nexport type Include = Array<\n | 'all'\n | 'context'\n | 'data'\n | 'event'\n | 'globals'\n | 'source'\n | 'user'\n | 'version'\n>;\n\nexport type Parameters = Gtag.ControlParams &\n Gtag.EventParams &\n Gtag.CustomParams;\n","export * as events from './events';\nexport * as mapping from './mapping';\n","import { getEvent } from '@walkeros/core';\n\n// GA4 Purchase Event Example\nexport function ga4Purchase(): unknown[] {\n const event = getEvent('order complete');\n\n return [\n 'event',\n 'purchase',\n {\n transaction_id: event.data.id,\n value: event.data.total,\n tax: event.data.taxes,\n shipping: event.data.shipping,\n currency: 'EUR',\n items: event.nested\n .filter((item) => item.entity === 'product')\n .map((item) => ({\n item_id: item.data.id,\n item_name: item.data.name,\n quantity: 1,\n })),\n send_to: 'G-XXXXXX-1',\n },\n ];\n}\n\n// GA4 Add to Cart Event Example\nexport function ga4AddToCart(): unknown[] {\n const event = getEvent('product add');\n\n return [\n 'event',\n 'add_to_cart',\n {\n currency: 'EUR',\n value: event.data.price,\n items: [\n {\n item_id: event.data.id,\n item_variant: event.data.color,\n quantity: 1,\n },\n ],\n send_to: 'G-XXXXXX-1',\n },\n ];\n}\n\n// Google Ads Conversion Event Example\nexport function adsConversion(): unknown[] {\n const event = getEvent('order complete');\n\n return [\n 'event',\n 'conversion',\n {\n send_to: 'AW-XXXXXXXXX/CONVERSION_LABEL',\n currency: 'EUR',\n value: event.data.total,\n transaction_id: event.data.id,\n },\n ];\n}\n\n// GTM DataLayer Push Example\nexport function gtmEvent(): Record<string, unknown> {\n const event = getEvent('product view');\n\n return {\n event: 'product_view',\n product_id: event.data.id,\n product_name: event.data.name,\n product_category: event.data.category,\n value: event.data.price,\n currency: 'EUR',\n };\n}\n","import type { Mapping } from '@walkeros/core';\nimport type { DestinationGtag } from '..';\nimport { isObject } from '@walkeros/core';\n\n// GA4 Purchase Mapping\nexport const ga4Purchase: DestinationGtag.Rule = {\n name: 'purchase',\n settings: {\n ga4: {\n include: ['data', 'context'],\n },\n },\n data: {\n map: {\n transaction_id: 'data.id',\n value: 'data.total',\n tax: 'data.taxes',\n shipping: 'data.shipping',\n currency: { key: 'data.currency', value: 'EUR' },\n items: {\n loop: [\n 'nested',\n {\n condition: (entity) =>\n isObject(entity) && entity.entity === 'product',\n map: {\n item_id: 'data.id',\n item_name: 'data.name',\n quantity: { key: 'data.quantity', value: 1 },\n },\n },\n ],\n },\n },\n },\n};\n\n// GA4 Add to Cart Mapping\nexport const ga4AddToCart: DestinationGtag.Rule = {\n name: 'add_to_cart',\n settings: {\n ga4: {\n include: ['data'],\n },\n },\n data: {\n map: {\n currency: { value: 'EUR', key: 'data.currency' },\n value: 'data.price',\n items: {\n loop: [\n 'this',\n {\n map: {\n item_id: 'data.id',\n item_variant: 'data.color',\n quantity: { value: 1, key: 'data.quantity' },\n },\n },\n ],\n },\n },\n },\n};\n\n// Google Ads Conversion Mapping\nexport const adsConversion: DestinationGtag.Rule = {\n name: 'CONVERSION_LABEL', // This becomes the conversion label\n settings: {\n ads: {},\n },\n data: {\n map: {\n value: 'data.total',\n currency: { value: 'EUR', key: 'data.currency' },\n transaction_id: 'data.id',\n },\n },\n};\n\n// GTM Event Mapping\nexport const gtmProductView: DestinationGtag.Rule = {\n name: 'product_view',\n settings: {\n gtm: {},\n },\n data: {\n map: {\n product_id: 'data.id',\n product_name: 'data.name',\n product_category: 'data.category',\n value: 'data.price',\n currency: { value: 'EUR', key: 'data.currency' },\n },\n },\n};\n\n// Combined mapping for all tools\nexport const combinedPurchase: DestinationGtag.Rule = {\n name: 'purchase', // GA4 event name\n settings: {\n ga4: {\n include: ['data'],\n },\n ads: {}, // Will use 'purchase' as conversion label for ads\n gtm: {},\n },\n data: {\n map: {\n transaction_id: 'data.id',\n value: 'data.total',\n currency: { value: 'EUR', key: 'data.currency' },\n items: {\n loop: [\n 'nested',\n {\n condition: (entity) =>\n isObject(entity) && entity.entity === 'product',\n map: {\n item_id: 'data.id',\n item_name: 'data.name',\n quantity: { value: 1, key: 'data.quantity' },\n },\n },\n ],\n },\n },\n },\n};\n\n// Example configuration with all mappings\nexport const config = {\n order: { complete: combinedPurchase },\n product: {\n add: ga4AddToCart,\n view: gtmProductView,\n },\n} satisfies DestinationGtag.Rules;\n"],"mappings":"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","names":["document","w","document","import_web_core","import_web_core","document","import_web_core","import_web_core","document","addScript","import_web_core","adsConversion","ga4AddToCart","ga4Purchase","ga4Purchase","ga4AddToCart","adsConversion","config"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var e,t,a=Object.defineProperty,n=(e,t)=>{for(var n in t)a(e,n,{get:t[n],enumerable:!0})},r=new Set;function o(e,t="https://www.googletagmanager.com/gtag/js?id="){if(r.has(e))return;const a=document.createElement("script");a.src=t+e,document.head.appendChild(a),r.add(e)}function i(){const e=window;e.dataLayer=e.dataLayer||[],e.gtag||(e.gtag=function(){e.dataLayer.push(arguments)})}function s(e){return e("gtag",window.gtag)}var c=Object.getOwnPropertyNames,d=(e={"package.json"(e,t){t.exports={name:"@walkeros/core",description:"Core types and platform-agnostic utilities for walkerOS",version:"0.0.8",main:"./dist/index.js",module:"./dist/index.mjs",types:"./dist/index.d.ts",license:"MIT",files:["dist/**"],scripts:{build:"tsup --silent",clean:"rm -rf .turbo && rm -rf node_modules && rm -rf dist",dev:"jest --watchAll --colors",lint:'tsc && eslint "**/*.ts*"',test:"jest",update:"npx npm-check-updates -u && npm update"},dependencies:{},devDependencies:{},repository:{url:"git+https://github.com/elbwalker/walkerOS.git",directory:"packages/core"},author:"elbwalker <hello@elbwalker.com>",homepage:"https://github.com/elbwalker/walkerOS#readme",bugs:{url:"https://github.com/elbwalker/walkerOS/issues"},keywords:["walker","walkerOS","analytics","tracking","data collection","measurement","data privacy","privacy friendly","web analytics","product analytics","core","types","utils"],funding:[{type:"GitHub Sponsors",url:"https://github.com/sponsors/elbwalker"}]}}},function(){return t||(0,e[c(e)[0]])((t={exports:{}}).exports,t),t.exports}),u={merge:!0,shallow:!0,extend:!0};function p(e){return"object"==typeof e&&null!==e&&!function(e){return Array.isArray(e)}(e)&&"[object Object]"===Object.prototype.toString.call(e)}var{version:l}=d();function g(e={}){var t;const a=e.timestamp||(new Date).setHours(0,13,37,0),n=e.group||"gr0up",r=e.count||1,o=function(e,t={},a={}){a={...u,...a};const n=Object.entries(t).reduce((t,[n,r])=>{const o=e[n];return a.merge&&Array.isArray(o)&&Array.isArray(r)?t[n]=r.reduce((e,t)=>e.includes(t)?e:[...e,t],[...o]):(a.extend||n in e)&&(t[n]=r),t},{});return a.shallow?{...e,...n}:(Object.assign(e,n),e)}({event:"entity action",data:{string:"foo",number:1,boolean:!0,array:[0,"text",!1],not:void 0},context:{dev:["test",1]},globals:{lang:"elb"},custom:{completely:"random"},user:{id:"us3r",device:"c00k13",session:"s3ss10n"},nested:[{type:"child",data:{is:"subordinated"},nested:[],context:{element:["child",0]}}],consent:{functional:!0},id:`${a}-${n}-${r}`,trigger:"test",entity:"entity",action:"action",timestamp:a,timing:3.14,group:n,count:r,version:{source:l,tagging:1},source:{type:"web",id:"https://localhost:80",previous_id:"http://remotehost:9001"}},e,{merge:!1});if(e.event){const[a,n]=null!=(t=e.event.split(" "))?t:[];a&&n&&(o.entity=a,o.action=n)}return o}function m(e="entity action",t={}){const a=t.timestamp||(new Date).setHours(0,13,37,0),n={data:{id:"ers",name:"Everyday Ruck Snack",color:"black",size:"l",price:420}},r={data:{id:"cc",name:"Cool Cap",size:"one size",price:42}};return g({...{"cart view":{data:{currency:"EUR",value:2*n.data.price},context:{shopping:["cart",0]},globals:{pagegroup:"shop"},nested:[{type:"product",data:{...n.data,quantity:2},context:{shopping:["cart",0]},nested:[]}],trigger:"load"},"checkout view":{data:{step:"payment",currency:"EUR",value:n.data.price+r.data.price},context:{shopping:["checkout",0]},globals:{pagegroup:"shop"},nested:[{type:"product",...n,context:{shopping:["checkout",0]},nested:[]},{type:"product",...r,context:{shopping:["checkout",0]},nested:[]}],trigger:"load"},"order complete":{data:{id:"0rd3r1d",currency:"EUR",shipping:5.22,taxes:73.76,total:555},context:{shopping:["complete",0]},globals:{pagegroup:"shop"},nested:[{type:"product",...n,context:{shopping:["complete",0]},nested:[]},{type:"product",...r,context:{shopping:["complete",0]},nested:[]},{type:"gift",data:{name:"Surprise"},context:{shopping:["complete",0]},nested:[]}],trigger:"load"},"page view":{data:{domain:"www.example.com",title:"walkerOS documentation",referrer:"https://www.elbwalker.com/",search:"?foo=bar",hash:"#hash",id:"/docs/"},globals:{pagegroup:"docs"},trigger:"load"},"product add":{...n,context:{shopping:["intent",0]},globals:{pagegroup:"shop"},nested:[],trigger:"click"},"product view":{...n,context:{shopping:["detail",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"},"product visible":{data:{...n.data,position:3,promo:!0},context:{shopping:["discover",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"},"promotion visible":{data:{name:"Setting up tracking easily",position:"hero"},context:{ab_test:["engagement",0]},globals:{pagegroup:"homepage"},trigger:"visible"},"session start":{data:{id:"s3ss10n",start:a,isNew:!0,count:1,runs:1,isStart:!0,storage:!0,referrer:"",device:"c00k13"},user:{id:"us3r",device:"c00k13",session:"s3ss10n",hash:"h4sh",address:"street number",email:"user@example.com",phone:"+49 123 456 789",userAgent:"Mozilla...",browser:"Chrome",browserVersion:"90",deviceType:"desktop",language:"de-DE",country:"DE",region:"HH",city:"Hamburg",zip:"20354",timezone:"Berlin",os:"walkerOS",osVersion:"1.0",screenSize:"1337x420",ip:"127.0.0.0",internal:!0,custom:"value"}}}[e],...t,event:e})}function y(e,t,a={},n,r){if(!t.measurementId)return;const o=p(n)?n:{},i=function(e,t){const a={};return t.includes("all")&&(t=["context","data","event","globals","source","user","version"]),t.forEach(t=>{let n=e[t]||{};"event"==t&&(n={id:e.id,timing:e.timing,trigger:e.trigger,entity:e.entity,action:e.action,group:e.group,count:e.count}),Object.entries(n).forEach(([e,n])=>{"context"==t&&(n=n[0]),a[`${t}_${e}`]=n})}),a}(e,a.include||t.include||["data"]),c={...i,...o};let d=e.event;!1!==t.snakeCase&&(d=function(e,t=!0){return t?e.replace(/\s+/g,"_").toLowerCase():e}(d)),c.send_to=t.measurementId,t.debug&&(c.debug_mode=!0);s(r)("event",d,c)}var v="dataLayer";function h(e,t,a){const{containerId:n,dataLayer:r,domain:o}=e,i=r||v,s=window;i===v?s.dataLayer=s.dataLayer||[]:s[i]=s[i]||[];const c=s[i];t("dataLayer.push",c.push.bind(c))({"gtm.start":(new Date).getTime(),event:"gtm.js"}),a&&n&&function(e,t,a){const n=a!=v?"&l="+a:"",r=document.createElement("script");r.src=t+e+n,document.head.appendChild(r)}(n,o||"https://www.googletagmanager.com/gtm.js?id=",i)}var w={},b={};n(b,{events:()=>f,mapping:()=>X});var f={};function _(){const e=m("order complete");return["event","purchase",{transaction_id:e.data.id,value:e.data.total,tax:e.data.taxes,shipping:e.data.shipping,currency:"EUR",items:e.nested.filter(e=>"product"===e.type).map(e=>({item_id:e.data.id,item_name:e.data.name,quantity:1})),send_to:"G-XXXXXX-1"}]}function k(){const e=m("product add");return["event","add_to_cart",{currency:"EUR",value:e.data.price,items:[{item_id:e.data.id,item_variant:e.data.color,quantity:1}],send_to:"G-XXXXXX-1"}]}function x(){const e=m("order complete");return["event","conversion",{send_to:"AW-XXXXXXXXX/CONVERSION_LABEL",currency:"EUR",value:e.data.total,transaction_id:e.data.id}]}function E(){const e=m("product view");return{event:"product_view",product_id:e.data.id,product_name:e.data.name,product_category:e.data.category,value:e.data.price,currency:"EUR"}}n(f,{adsConversion:()=>x,ga4AddToCart:()=>k,ga4Purchase:()=>_,gtmEvent:()=>E});var X={};n(X,{adsConversion:()=>I,combinedPurchase:()=>R,config:()=>L,ga4AddToCart:()=>O,ga4Purchase:()=>j,gtmProductView:()=>S});var j={name:"purchase",settings:{ga4:{include:["data","context"]}},data:{map:{transaction_id:"data.id",value:"data.total",tax:"data.taxes",shipping:"data.shipping",currency:{key:"data.currency",value:"EUR"},items:{loop:["nested",{condition:e=>p(e)&&"product"===e.type,map:{item_id:"data.id",item_name:"data.name",quantity:{key:"data.quantity",value:1}}}]}}}},O={name:"add_to_cart",settings:{ga4:{include:["data"]}},data:{map:{currency:{value:"EUR",key:"data.currency"},value:"data.price",items:{loop:["this",{map:{item_id:"data.id",item_variant:"data.color",quantity:{value:1,key:"data.quantity"}}}]}}}},I={name:"CONVERSION_LABEL",settings:{ads:{}},data:{map:{value:"data.total",currency:{value:"EUR",key:"data.currency"},transaction_id:"data.id"}}},S={name:"product_view",settings:{gtm:{}},data:{map:{product_id:"data.id",product_name:"data.name",product_category:"data.category",value:"data.price",currency:{value:"EUR",key:"data.currency"}}}},R={name:"purchase",settings:{ga4:{include:["data"]},ads:{},gtm:{}},data:{map:{transaction_id:"data.id",value:"data.total",currency:{value:"EUR",key:"data.currency"},items:{loop:["nested",{condition:e=>p(e)&&"product"===e.type,map:{item_id:"data.id",item_name:"data.name",quantity:{value:1,key:"data.quantity"}}}]}}}},L={order:{complete:R},product:{add:O,view:S}},C={type:"google-gtag",config:{settings:{}},init({config:e,wrap:t}){const{settings:a={},loadScript:n}=e,{ga4:r,ads:c,gtm:d}=a;return(null==r?void 0:r.measurementId)&&function(e,t,a){const{measurementId:n,transport_url:r,server_container_url:c,pageview:d}=e;if(!n)return;a&&o(n),i();const u={};r&&(u.transport_url=r),c&&(u.server_container_url=c),!1===d&&(u.send_page_view=!1);const p=s(t);p("js",new Date),p("config",n,u)}(r,t,n),(null==c?void 0:c.conversionId)&&function(e,t,a){const{conversionId:n}=e;if(!n)return;e.currency||(e.currency="EUR"),a&&o(n),i();const r=s(t);r("js",new Date),r("config",n)}(c,t,n),(null==d?void 0:d.containerId)&&h(d,t,n),!!((null==r?void 0:r.measurementId)||(null==c?void 0:c.conversionId)||(null==d?void 0:d.containerId))&&e},push(e,{config:t,mapping:a={},data:n,wrap:r}){const{settings:o={}}=t,{ga4:i,ads:c,gtm:d}=o,u=a.settings||{};(null==i?void 0:i.measurementId)&&y(e,i,u.ga4,n,r),(null==c?void 0:c.conversionId)&&a.name&&function(e,t,a={},n,r,o){const{conversionId:i,currency:c}=t,d=p(n)?n:{},u=a.label||o;if(!u)return;const l={send_to:`${i}/${u}`,currency:c||"EUR",...d};s(r)("event","conversion",l)}(0,c,u.ads,n,r,a.name),(null==d?void 0:d.containerId)&&function(e,t,a={},n,r){const o=window;r("dataLayer.push",o.dataLayer.push.bind(o.dataLayer))({event:e.event,...p(n)?n:e})}(e,0,u.gtm,n,r)}},U=C;export{w as DestinationGtag,U as default,C as destinationGtag,b as examples};//# sourceMappingURL=index.mjs.map
|
|
1
|
+
var e,t,a=Object.defineProperty,n=(e,t)=>{for(var n in t)a(e,n,{get:t[n],enumerable:!0})},o=new Set;function r(e,t="https://www.googletagmanager.com/gtag/js?id=",a=globalThis.document){if(o.has(e))return;const n=a.createElement("script");n.src=t+e,a.head.appendChild(n),o.add(e)}function i(e=globalThis.window){const t=e;t.dataLayer=t.dataLayer||[],t.gtag||(t.gtag=function(){t.dataLayer.push(arguments)})}import{getEnvironment as s}from"@walkeros/web-core";var c=Object.getOwnPropertyNames,d=(e={"package.json"(e,t){t.exports={name:"@walkeros/core",description:"Core types and platform-agnostic utilities for walkerOS",version:"0.1.1",main:"./dist/index.js",module:"./dist/index.mjs",types:"./dist/index.d.ts",license:"MIT",files:["dist/**"],scripts:{build:"tsup --silent",clean:"rm -rf .turbo && rm -rf node_modules && rm -rf dist",dev:"jest --watchAll --colors",lint:'tsc && eslint "**/*.ts*"',test:"jest",update:"npx npm-check-updates -u && npm update"},dependencies:{},devDependencies:{},repository:{url:"git+https://github.com/elbwalker/walkerOS.git",directory:"packages/core"},author:"elbwalker <hello@elbwalker.com>",homepage:"https://github.com/elbwalker/walkerOS#readme",bugs:{url:"https://github.com/elbwalker/walkerOS/issues"},keywords:["walker","walkerOS","analytics","tracking","data collection","measurement","data privacy","privacy friendly","web analytics","product analytics","core","types","utils"],funding:[{type:"GitHub Sponsors",url:"https://github.com/sponsors/elbwalker"}]}}},function(){return t||(0,e[c(e)[0]])((t={exports:{}}).exports,t),t.exports}),u={merge:!0,shallow:!0,extend:!0};function l(e){return"object"==typeof e&&null!==e&&!function(e){return Array.isArray(e)}(e)&&"[object Object]"===Object.prototype.toString.call(e)}var{version:p}=d();function g(e={}){var t;const a=e.timestamp||(new Date).setHours(0,13,37,0),n=e.group||"gr0up",o=e.count||1,r=function(e,t={},a={}){a={...u,...a};const n=Object.entries(t).reduce((t,[n,o])=>{const r=e[n];return a.merge&&Array.isArray(r)&&Array.isArray(o)?t[n]=o.reduce((e,t)=>e.includes(t)?e:[...e,t],[...r]):(a.extend||n in e)&&(t[n]=o),t},{});return a.shallow?{...e,...n}:(Object.assign(e,n),e)}({name:"entity action",data:{string:"foo",number:1,boolean:!0,array:[0,"text",!1],not:void 0},context:{dev:["test",1]},globals:{lang:"elb"},custom:{completely:"random"},user:{id:"us3r",device:"c00k13",session:"s3ss10n"},nested:[{entity:"child",data:{is:"subordinated"},nested:[],context:{element:["child",0]}}],consent:{functional:!0},id:`${a}-${n}-${o}`,trigger:"test",entity:"entity",action:"action",timestamp:a,timing:3.14,group:n,count:o,version:{source:p,tagging:1},source:{type:"web",id:"https://localhost:80",previous_id:"http://remotehost:9001"}},e,{merge:!1});if(e.name){const[a,n]=null!=(t=e.name.split(" "))?t:[];a&&n&&(r.entity=a,r.action=n)}return r}function m(e="entity action",t={}){const a=t.timestamp||(new Date).setHours(0,13,37,0),n={data:{id:"ers",name:"Everyday Ruck Snack",color:"black",size:"l",price:420}},o={data:{id:"cc",name:"Cool Cap",size:"one size",price:42}};return g({...{"cart view":{data:{currency:"EUR",value:2*n.data.price},context:{shopping:["cart",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",data:{...n.data,quantity:2},context:{shopping:["cart",0]},nested:[]}],trigger:"load"},"checkout view":{data:{step:"payment",currency:"EUR",value:n.data.price+o.data.price},context:{shopping:["checkout",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",...n,context:{shopping:["checkout",0]},nested:[]},{entity:"product",...o,context:{shopping:["checkout",0]},nested:[]}],trigger:"load"},"order complete":{data:{id:"0rd3r1d",currency:"EUR",shipping:5.22,taxes:73.76,total:555},context:{shopping:["complete",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",...n,context:{shopping:["complete",0]},nested:[]},{entity:"product",...o,context:{shopping:["complete",0]},nested:[]},{entity:"gift",data:{name:"Surprise"},context:{shopping:["complete",0]},nested:[]}],trigger:"load"},"page view":{data:{domain:"www.example.com",title:"walkerOS documentation",referrer:"https://www.elbwalker.com/",search:"?foo=bar",hash:"#hash",id:"/docs/"},globals:{pagegroup:"docs"},trigger:"load"},"product add":{...n,context:{shopping:["intent",0]},globals:{pagegroup:"shop"},nested:[],trigger:"click"},"product view":{...n,context:{shopping:["detail",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"},"product visible":{data:{...n.data,position:3,promo:!0},context:{shopping:["discover",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"},"promotion visible":{data:{name:"Setting up tracking easily",position:"hero"},context:{ab_test:["engagement",0]},globals:{pagegroup:"homepage"},trigger:"visible"},"session start":{data:{id:"s3ss10n",start:a,isNew:!0,count:1,runs:1,isStart:!0,storage:!0,referrer:"",device:"c00k13"},user:{id:"us3r",device:"c00k13",session:"s3ss10n",hash:"h4sh",address:"street number",email:"user@example.com",phone:"+49 123 456 789",userAgent:"Mozilla...",browser:"Chrome",browserVersion:"90",deviceType:"desktop",language:"de-DE",country:"DE",region:"HH",city:"Hamburg",zip:"20354",timezone:"Berlin",os:"walkerOS",osVersion:"1.0",screenSize:"1337x420",ip:"127.0.0.0",internal:!0,custom:"value"}}}[e],...t,name:e})}import{getEnvironment as v}from"@walkeros/web-core";function y(e,t,a={},n,o){const{window:r}=v(o);if(!t.measurementId)return;const i=l(n)?n:{},s=function(e,t){const a={};return t.includes("all")&&(t=["context","data","event","globals","source","user","version"]),t.forEach(t=>{let n=e[t]||{};"event"==t&&(n={id:e.id,timing:e.timing,trigger:e.trigger,entity:e.entity,action:e.action,group:e.group,count:e.count}),Object.entries(n).forEach(([e,n])=>{"context"==t&&(n=n[0]),a[`${t}_${e}`]=n})}),a}(e,a.include||t.include||["data"]),c={...s,...i};let d=e.name;!1!==t.snakeCase&&(d=function(e,t=!0){return t?e.replace(/\s+/g,"_").toLowerCase():e}(d)),c.send_to=t.measurementId,t.debug&&(c.debug_mode=!0);(0,r.gtag)("event",d,c)}import{getEnvironment as h}from"@walkeros/web-core";import{getEnvironment as w}from"@walkeros/web-core";import{getEnvironment as b}from"@walkeros/web-core";var f="dataLayer";function k(e,t,a){const{window:n,document:o}=b(a),{containerId:r,dataLayer:i,domain:s}=e,c=i||f;c===f?n.dataLayer=n.dataLayer||[]:n[c]=n[c]||[];n[c].push({"gtm.start":(new Date).getTime(),event:"gtm.js"}),t&&r&&function(e,t,a,n=globalThis.document){const o=a!=f?"&l="+a:"",r=n.createElement("script");r.src=t+e+o,n.head.appendChild(r)}(r,s||"https://www.googletagmanager.com/gtm.js?id=",c,o)}import{getEnvironment as _}from"@walkeros/web-core";var x={},E={};n(E,{events:()=>X,mapping:()=>R});var X={};function j(){const e=m("order complete");return["event","purchase",{transaction_id:e.data.id,value:e.data.total,tax:e.data.taxes,shipping:e.data.shipping,currency:"EUR",items:e.nested.filter(e=>"product"===e.entity).map(e=>({item_id:e.data.id,item_name:e.data.name,quantity:1})),send_to:"G-XXXXXX-1"}]}function O(){const e=m("product add");return["event","add_to_cart",{currency:"EUR",value:e.data.price,items:[{item_id:e.data.id,item_variant:e.data.color,quantity:1}],send_to:"G-XXXXXX-1"}]}function I(){const e=m("order complete");return["event","conversion",{send_to:"AW-XXXXXXXXX/CONVERSION_LABEL",currency:"EUR",value:e.data.total,transaction_id:e.data.id}]}function S(){const e=m("product view");return{event:"product_view",product_id:e.data.id,product_name:e.data.name,product_category:e.data.category,value:e.data.price,currency:"EUR"}}n(X,{adsConversion:()=>I,ga4AddToCart:()=>O,ga4Purchase:()=>j,gtmEvent:()=>S});var R={};n(R,{adsConversion:()=>L,combinedPurchase:()=>q,config:()=>D,ga4AddToCart:()=>C,ga4Purchase:()=>A,gtmProductView:()=>U});var A={name:"purchase",settings:{ga4:{include:["data","context"]}},data:{map:{transaction_id:"data.id",value:"data.total",tax:"data.taxes",shipping:"data.shipping",currency:{key:"data.currency",value:"EUR"},items:{loop:["nested",{condition:e=>l(e)&&"product"===e.entity,map:{item_id:"data.id",item_name:"data.name",quantity:{key:"data.quantity",value:1}}}]}}}},C={name:"add_to_cart",settings:{ga4:{include:["data"]}},data:{map:{currency:{value:"EUR",key:"data.currency"},value:"data.price",items:{loop:["this",{map:{item_id:"data.id",item_variant:"data.color",quantity:{value:1,key:"data.quantity"}}}]}}}},L={name:"CONVERSION_LABEL",settings:{ads:{}},data:{map:{value:"data.total",currency:{value:"EUR",key:"data.currency"},transaction_id:"data.id"}}},U={name:"product_view",settings:{gtm:{}},data:{map:{product_id:"data.id",product_name:"data.name",product_category:"data.category",value:"data.price",currency:{value:"EUR",key:"data.currency"}}}},q={name:"purchase",settings:{ga4:{include:["data"]},ads:{},gtm:{}},data:{map:{transaction_id:"data.id",value:"data.total",currency:{value:"EUR",key:"data.currency"},items:{loop:["nested",{condition:e=>l(e)&&"product"===e.entity,map:{item_id:"data.id",item_name:"data.name",quantity:{value:1,key:"data.quantity"}}}]}}}},D={order:{complete:q},product:{add:C,view:U}},T={type:"google-gtag",config:{settings:{}},env:{window:{gtag:function(...e){},dataLayer:[]},document:{createElement:e=>({src:"",async:!1,setAttribute:()=>{},removeAttribute:()=>{}}),head:{appendChild:()=>{}}}},init({config:e,env:t}){const{settings:a={},loadScript:n}=e,{ga4:o,ads:c,gtm:d}=a;return(null==o?void 0:o.measurementId)&&function(e,t,a){const{window:n,document:o}=s(a),{measurementId:c,transport_url:d,server_container_url:u,pageview:l}=e;if(!c)return;t&&r(c,void 0,o),i(n);const p={};d&&(p.transport_url=d),u&&(p.server_container_url=u),!1===l&&(p.send_page_view=!1);const g=n.gtag;g("js",new Date),g("config",c,p)}(o,n,t),(null==c?void 0:c.conversionId)&&function(e,t,a){const{window:n,document:o}=h(a),{conversionId:s}=e;if(!s)return;e.currency||(e.currency="EUR"),t&&r(s,void 0,o),i(n);const c=n.gtag;c("js",new Date),c("config",s)}(c,n,t),(null==d?void 0:d.containerId)&&k(d,n,t),!!((null==o?void 0:o.measurementId)||(null==c?void 0:c.conversionId)||(null==d?void 0:d.containerId))&&e},push(e,{config:t,mapping:a={},data:n,env:o}){const{settings:r={}}=t,{ga4:i,ads:s,gtm:c}=r,d=a.settings||{};(null==i?void 0:i.measurementId)&&y(e,i,d.ga4,n,o),(null==s?void 0:s.conversionId)&&a.name&&function(e,t,a={},n,o,r){const{conversionId:i,currency:s}=t,c=l(n)?n:{},d=a.label||o;if(!d)return;const u={send_to:`${i}/${d}`,currency:s||"EUR",...c},{window:p}=w(r);(0,p.gtag)("event","conversion",u)}(0,s,d.ads,n,a.name,o),(null==c?void 0:c.containerId)&&function(e,t,a={},n,o){const{window:r}=_(o),i={event:e.name};r.dataLayer.push({...i,...l(n)?n:e})}(e,0,d.gtm,n,o)}},z=T;export{x as DestinationGtag,z as default,T as destinationGtag,E as examples};//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/shared/gtag.ts","../src/ga4/config.ts","../src/shared/parameters.ts","../src/shared/mapping.ts","../src/ga4/push.ts","../src/ads/config.ts","../src/ads/push.ts","../src/gtm/config.ts","../src/gtm/push.ts","../src/types/index.ts","../src/examples/index.ts","../src/examples/events.ts","../src/examples/mapping.ts","../src/index.ts"],"sourcesContent":["// Gtag script loading and initialization utilities\n\nconst loadedScripts = new Set<string>();\n\n// For testing: allow resetting loaded scripts\nexport function resetLoadedScripts(): void {\n loadedScripts.clear();\n}\n\nexport function addScript(\n id: string,\n src = 'https://www.googletagmanager.com/gtag/js?id=',\n): void {\n // Prevent loading the same script multiple times\n if (loadedScripts.has(id)) return;\n\n const script = document.createElement('script');\n script.src = src + id;\n document.head.appendChild(script);\n loadedScripts.add(id);\n}\n\nexport function initializeGtag(): void {\n const w = window;\n\n // Setup dataLayer if not exists\n w.dataLayer = w.dataLayer || [];\n\n // Setup gtag function if not exists\n if (!w.gtag) {\n w.gtag = function () {\n (w.dataLayer as unknown[]).push(arguments);\n };\n }\n}\n\nexport function getGtag(\n wrap: (name: string, fn: Function) => Function,\n): Gtag.Gtag {\n return wrap('gtag', window.gtag) as Gtag.Gtag;\n}\n","import type { WalkerOS } from '@walkeros/core';\nimport type { GA4Settings } from '../types';\nimport { addScript, initializeGtag, getGtag } from '../shared/gtag';\n\nexport function initGA4(\n settings: GA4Settings,\n wrap: (name: string, fn: Function) => Function,\n loadScript?: boolean,\n): void {\n const { measurementId, transport_url, server_container_url, pageview } =\n settings;\n\n if (!measurementId) return;\n\n // Load the gtag script\n if (loadScript) addScript(measurementId);\n\n // Initialize gtag infrastructure\n initializeGtag();\n\n const gtagSettings: WalkerOS.AnyObject = {};\n\n // custom transport_url\n if (transport_url) gtagSettings.transport_url = transport_url;\n\n // custom server_container_url\n if (server_container_url)\n gtagSettings.server_container_url = server_container_url;\n\n // disable pageviews\n if (pageview === false) gtagSettings.send_page_view = false;\n\n const gtag = getGtag(wrap);\n gtag('js', new Date());\n\n // gtag init call\n gtag('config', measurementId, gtagSettings);\n}\n","import type { WalkerOS } from '@walkeros/core';\nimport type { Include, Parameters } from '../types';\n\nexport function getParamsInclude(\n event: WalkerOS.DeepPartialEvent,\n include: Include,\n): Parameters {\n const params: Parameters = {};\n\n // Check for the 'all' group to add each group\n if (include.includes('all'))\n include = [\n 'context',\n 'data',\n 'event',\n 'globals',\n 'source',\n 'user',\n 'version',\n ];\n\n include.forEach((groupName) => {\n let group = event[groupName as keyof Omit<WalkerOS.Event, 'all'>] || {};\n\n // Create a fake group for event properties\n if (groupName == 'event')\n group = {\n id: event.id,\n timing: event.timing,\n trigger: event.trigger,\n entity: event.entity,\n action: event.action,\n group: event.group,\n count: event.count,\n };\n\n Object.entries(group).forEach(([key, val]) => {\n // Different value access for context\n if (groupName == 'context') val = (val as WalkerOS.OrderedProperties)[0];\n\n params[`${groupName}_${key}`] = val;\n });\n });\n\n return params;\n}\n","// Shared mapping utilities for all Google tools\n\nexport function normalizeEventName(\n eventName: string,\n snakeCase = true,\n): string {\n if (!snakeCase) return eventName;\n\n return eventName.replace(/\\s+/g, '_').toLowerCase();\n}\n","import type { WalkerOS } from '@walkeros/core';\nimport type { GA4Settings, GA4Mapping, Parameters } from '../types';\nimport { isObject } from '@walkeros/core';\nimport { getParamsInclude } from '../shared/parameters';\nimport { normalizeEventName } from '../shared/mapping';\nimport { getGtag } from '../shared/gtag';\n\nexport function pushGA4Event(\n event: WalkerOS.Event,\n settings: GA4Settings,\n mapping: GA4Mapping = {},\n data: WalkerOS.AnyObject,\n wrap: (name: string, fn: Function) => Function,\n): void {\n if (!settings.measurementId) return;\n\n const eventData = isObject(data) ? data : {};\n\n const paramsInclude = getParamsInclude(\n event,\n // Add data to include by default\n mapping.include || settings.include || ['data'],\n );\n\n const eventParams: Parameters = {\n ...paramsInclude,\n ...eventData,\n };\n\n // Event name (snake_case default)\n let eventName = event.event; // Assume custom mapped name\n if (settings.snakeCase !== false) {\n // Use snake case if not disabled\n eventName = normalizeEventName(eventName);\n }\n\n // Set the GA4 stream id\n eventParams.send_to = settings.measurementId;\n\n // Debug mode\n if (settings.debug) eventParams.debug_mode = true;\n\n const gtag = getGtag(wrap);\n gtag('event', eventName, eventParams);\n}\n","import type { AdsSettings } from '../types';\nimport { addScript, initializeGtag, getGtag } from '../shared/gtag';\n\nexport function initAds(\n settings: AdsSettings,\n wrap: (name: string, fn: Function) => Function,\n loadScript?: boolean,\n): void {\n const { conversionId } = settings;\n\n if (!conversionId) return;\n\n // Default currency value\n if (!settings.currency) settings.currency = 'EUR';\n\n if (loadScript) addScript(conversionId);\n\n // Initialize gtag infrastructure\n initializeGtag();\n\n const gtag = getGtag(wrap);\n gtag('js', new Date());\n\n // gtag init call\n gtag('config', conversionId);\n}\n","import type { WalkerOS } from '@walkeros/core';\nimport type { AdsSettings, AdsMapping } from '../types';\nimport { isObject } from '@walkeros/core';\nimport { getGtag } from '../shared/gtag';\n\nexport function pushAdsEvent(\n event: WalkerOS.Event,\n settings: AdsSettings,\n mapping: AdsMapping = {},\n data: WalkerOS.AnyObject,\n wrap: (name: string, fn: Function) => Function,\n mappingName?: string,\n): void {\n const { conversionId, currency } = settings;\n const eventData = isObject(data) ? data : {};\n\n // Use label from mapping settings, fallback to mappingName for backward compatibility\n const conversionLabel = mapping.label || mappingName;\n if (!conversionLabel) return;\n\n const params: Gtag.CustomParams = {\n send_to: `${conversionId}/${conversionLabel}`,\n currency: currency || 'EUR',\n ...eventData,\n };\n\n const gtag = getGtag(wrap);\n gtag('event', 'conversion', params);\n}\n","import type { GTMSettings, WindowData } from '../types';\n\nconst defaultDataLayer = 'dataLayer';\nconst defaultDomain = 'https://www.googletagmanager.com/gtm.js?id=';\n\nexport function initGTM(\n settings: GTMSettings,\n wrap: (name: string, fn: Function) => Function,\n loadScript?: boolean,\n): void {\n const { containerId, dataLayer, domain } = settings;\n const dataLayerName = dataLayer || defaultDataLayer;\n\n const win = window as WindowData;\n\n // Initialize the dataLayer (default or custom name)\n if (dataLayerName === defaultDataLayer) {\n win.dataLayer = win.dataLayer || [];\n } else {\n win[dataLayerName] = (win[dataLayerName] as unknown[]) || [];\n }\n\n // Get the appropriate dataLayer array\n const dataLayerArray = win[dataLayerName] as unknown[];\n\n const push = wrap('dataLayer.push', dataLayerArray.push.bind(dataLayerArray));\n push({\n 'gtm.start': new Date().getTime(),\n event: 'gtm.js',\n });\n\n // Load the gtm script and container\n if (loadScript && containerId)\n addScript(containerId, domain || defaultDomain, dataLayerName);\n}\n\nfunction addScript(containerId: string, src: string, dataLayerName: string) {\n const dl = dataLayerName != defaultDataLayer ? '&l=' + dataLayerName : '';\n const script = document.createElement('script');\n script.src = src + containerId + dl;\n document.head.appendChild(script);\n}\n","import type { WalkerOS } from '@walkeros/core';\nimport type { GTMSettings, GTMMapping, WindowData } from '../types';\nimport { isObject } from '@walkeros/core';\n\nexport function pushGTMEvent(\n event: WalkerOS.Event,\n settings: GTMSettings,\n mapping: GTMMapping = {},\n data: WalkerOS.AnyObject,\n wrap: (name: string, fn: Function) => Function,\n): void {\n const win = window as WindowData;\n const push = wrap('dataLayer.push', win.dataLayer.push.bind(win.dataLayer));\n const obj = { event: event.event }; // Use the name mapping by default\n\n push({\n ...obj,\n ...(isObject(data) ? data : event),\n });\n}\n","import type { Mapping as WalkerOSMapping } from '@walkeros/core';\nimport type { DestinationWeb } from '@walkeros/web-core';\n\n// Extend Window interface with specific dataLayer typing\ninterface WindowWithDataLayer extends Window {\n dataLayer: unknown[];\n gtag?: Gtag.Gtag;\n [key: string]: unknown; // For custom dataLayer names and other properties\n}\n\ndeclare global {\n interface Window {\n gtag?: Gtag.Gtag;\n [key: string]: unknown; // For custom dataLayer names and other properties\n }\n}\n\n// Export helper type for internal use\nexport type WindowData = WindowWithDataLayer;\n\nexport type Destination = DestinationWeb.Destination<Settings, Mapping>;\nexport type Config = DestinationWeb.Config<Settings, Mapping>;\n\n// Unified settings for all Google tools\nexport interface Settings {\n // GA4 settings\n ga4?: GA4Settings;\n // Google Ads settings\n ads?: AdsSettings;\n // GTM settings\n gtm?: GTMSettings;\n}\n\n// GA4-specific settings\nexport interface GA4Settings {\n measurementId: string;\n debug?: boolean;\n include?: Include;\n pageview?: boolean;\n server_container_url?: string;\n snakeCase?: boolean;\n transport_url?: string;\n}\n\n// Google Ads specific settings\nexport interface AdsSettings {\n conversionId: string;\n currency?: string;\n}\n\n// Google Ads specific mapping\nexport interface AdsMapping {\n label?: string; // Conversion label for this specific event\n}\n\n// GTM specific settings\nexport interface GTMSettings {\n containerId: string;\n dataLayer?: string;\n domain?: string;\n}\n\n// Unified mapping interface\nexport interface Mapping {\n ga4?: GA4Mapping;\n ads?: AdsMapping;\n gtm?: GTMMapping;\n}\n\n// GA4-specific mapping\nexport interface GA4Mapping {\n include?: Include;\n}\n\n// GTM specific mapping\nexport interface GTMMapping {}\n\nexport type Rule = WalkerOSMapping.Rule<Mapping>;\nexport type Rules = WalkerOSMapping.Rules<Rule>;\nexport type Param = WalkerOSMapping.Value;\n\nexport type Include = Array<\n | 'all'\n | 'context'\n | 'data'\n | 'event'\n | 'globals'\n | 'source'\n | 'user'\n | 'version'\n>;\n\nexport type Parameters = Gtag.ControlParams &\n Gtag.EventParams &\n Gtag.CustomParams;\n","export * as events from './events';\nexport * as mapping from './mapping';\n","import { getEvent } from '@walkeros/core';\n\n// GA4 Purchase Event Example\nexport function ga4Purchase(): unknown[] {\n const event = getEvent('order complete');\n\n return [\n 'event',\n 'purchase',\n {\n transaction_id: event.data.id,\n value: event.data.total,\n tax: event.data.taxes,\n shipping: event.data.shipping,\n currency: 'EUR',\n items: event.nested\n .filter((item) => item.type === 'product')\n .map((item) => ({\n item_id: item.data.id,\n item_name: item.data.name,\n quantity: 1,\n })),\n send_to: 'G-XXXXXX-1',\n },\n ];\n}\n\n// GA4 Add to Cart Event Example\nexport function ga4AddToCart(): unknown[] {\n const event = getEvent('product add');\n\n return [\n 'event',\n 'add_to_cart',\n {\n currency: 'EUR',\n value: event.data.price,\n items: [\n {\n item_id: event.data.id,\n item_variant: event.data.color,\n quantity: 1,\n },\n ],\n send_to: 'G-XXXXXX-1',\n },\n ];\n}\n\n// Google Ads Conversion Event Example\nexport function adsConversion(): unknown[] {\n const event = getEvent('order complete');\n\n return [\n 'event',\n 'conversion',\n {\n send_to: 'AW-XXXXXXXXX/CONVERSION_LABEL',\n currency: 'EUR',\n value: event.data.total,\n transaction_id: event.data.id,\n },\n ];\n}\n\n// GTM DataLayer Push Example\nexport function gtmEvent(): Record<string, unknown> {\n const event = getEvent('product view');\n\n return {\n event: 'product_view',\n product_id: event.data.id,\n product_name: event.data.name,\n product_category: event.data.category,\n value: event.data.price,\n currency: 'EUR',\n };\n}\n","import type { Mapping } from '@walkeros/core';\nimport type { DestinationGtag } from '..';\nimport { isObject } from '@walkeros/core';\n\n// GA4 Purchase Mapping\nexport const ga4Purchase: DestinationGtag.Rule = {\n name: 'purchase',\n settings: {\n ga4: {\n include: ['data', 'context'],\n },\n },\n data: {\n map: {\n transaction_id: 'data.id',\n value: 'data.total',\n tax: 'data.taxes',\n shipping: 'data.shipping',\n currency: { key: 'data.currency', value: 'EUR' },\n items: {\n loop: [\n 'nested',\n {\n condition: (entity) =>\n isObject(entity) && entity.type === 'product',\n map: {\n item_id: 'data.id',\n item_name: 'data.name',\n quantity: { key: 'data.quantity', value: 1 },\n },\n },\n ],\n },\n },\n },\n};\n\n// GA4 Add to Cart Mapping\nexport const ga4AddToCart: DestinationGtag.Rule = {\n name: 'add_to_cart',\n settings: {\n ga4: {\n include: ['data'],\n },\n },\n data: {\n map: {\n currency: { value: 'EUR', key: 'data.currency' },\n value: 'data.price',\n items: {\n loop: [\n 'this',\n {\n map: {\n item_id: 'data.id',\n item_variant: 'data.color',\n quantity: { value: 1, key: 'data.quantity' },\n },\n },\n ],\n },\n },\n },\n};\n\n// Google Ads Conversion Mapping\nexport const adsConversion: DestinationGtag.Rule = {\n name: 'CONVERSION_LABEL', // This becomes the conversion label\n settings: {\n ads: {},\n },\n data: {\n map: {\n value: 'data.total',\n currency: { value: 'EUR', key: 'data.currency' },\n transaction_id: 'data.id',\n },\n },\n};\n\n// GTM Event Mapping\nexport const gtmProductView: DestinationGtag.Rule = {\n name: 'product_view',\n settings: {\n gtm: {},\n },\n data: {\n map: {\n product_id: 'data.id',\n product_name: 'data.name',\n product_category: 'data.category',\n value: 'data.price',\n currency: { value: 'EUR', key: 'data.currency' },\n },\n },\n};\n\n// Combined mapping for all tools\nexport const combinedPurchase: DestinationGtag.Rule = {\n name: 'purchase', // GA4 event name\n settings: {\n ga4: {\n include: ['data'],\n },\n ads: {}, // Will use 'purchase' as conversion label for ads\n gtm: {},\n },\n data: {\n map: {\n transaction_id: 'data.id',\n value: 'data.total',\n currency: { value: 'EUR', key: 'data.currency' },\n items: {\n loop: [\n 'nested',\n {\n condition: (entity) =>\n isObject(entity) && entity.type === 'product',\n map: {\n item_id: 'data.id',\n item_name: 'data.name',\n quantity: { value: 1, key: 'data.quantity' },\n },\n },\n ],\n },\n },\n },\n};\n\n// Example configuration with all mappings\nexport const config = {\n order: { complete: combinedPurchase },\n product: {\n add: ga4AddToCart,\n view: gtmProductView,\n },\n} satisfies DestinationGtag.Rules;\n","import type { WalkerOS } from '@walkeros/core';\nimport type { Settings, Destination } from './types';\nimport { initGA4, pushGA4Event } from './ga4';\nimport { initAds, pushAdsEvent } from './ads';\nimport { initGTM, pushGTMEvent } from './gtm';\n\n// Types\nexport * as DestinationGtag from './types';\n\n// Examples\nexport * as examples from './examples';\n\nexport const destinationGtag: Destination = {\n type: 'google-gtag',\n\n config: { settings: {} },\n\n init({ config, wrap }) {\n const { settings = {} as Partial<Settings>, loadScript } = config;\n const { ga4, ads, gtm } = settings;\n\n // Initialize GA4 if configured\n if (ga4?.measurementId) {\n initGA4(ga4, wrap, loadScript);\n }\n\n // Initialize Google Ads if configured\n if (ads?.conversionId) {\n initAds(ads, wrap, loadScript);\n }\n\n // Initialize GTM if configured\n if (gtm?.containerId) {\n initGTM(gtm, wrap, loadScript);\n }\n\n // Fail if no tools are configured\n if (!ga4?.measurementId && !ads?.conversionId && !gtm?.containerId) {\n return false;\n }\n\n return config;\n },\n\n push(event, { config, mapping = {}, data, wrap }) {\n const { settings = {} } = config;\n const { ga4, ads, gtm } = settings;\n const eventMapping = mapping.settings || {};\n\n // Push to GA4 if configured\n if (ga4?.measurementId) {\n pushGA4Event(\n event,\n ga4,\n eventMapping.ga4,\n data as WalkerOS.AnyObject,\n wrap,\n );\n }\n\n // Push to Google Ads if configured and has mapping name\n if (ads?.conversionId && mapping.name) {\n pushAdsEvent(\n event,\n ads,\n eventMapping.ads,\n data as WalkerOS.AnyObject,\n wrap,\n mapping.name,\n );\n }\n\n // Push to GTM if configured\n if (gtm?.containerId) {\n pushGTMEvent(\n event,\n gtm,\n eventMapping.gtm,\n data as WalkerOS.AnyObject,\n wrap,\n );\n }\n },\n};\n\nexport default destinationGtag;\n"],"mappings":";;;;;;;AAEA,IAAM,gBAAgB,oBAAI,IAAY;AAO/B,SAAS,UACd,IACA,MAAM,gDACA;AAEN,MAAI,cAAc,IAAI,EAAE,EAAG;AAE3B,QAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,SAAO,MAAM,MAAM;AACnB,WAAS,KAAK,YAAY,MAAM;AAChC,gBAAc,IAAI,EAAE;AACtB;AAEO,SAAS,iBAAuB;AACrC,QAAMA,KAAI;AAGV,EAAAA,GAAE,YAAYA,GAAE,aAAa,CAAC;AAG9B,MAAI,CAACA,GAAE,MAAM;AACX,IAAAA,GAAE,OAAO,WAAY;AACnB,MAACA,GAAE,UAAwB,KAAK,SAAS;AAAA,IAC3C;AAAA,EACF;AACF;AAEO,SAAS,QACd,MACW;AACX,SAAO,KAAK,QAAQ,OAAO,IAAI;AACjC;;;ACpCO,SAAS,QACd,UACA,MACA,YACM;AACN,QAAM,EAAE,eAAe,eAAe,sBAAsB,SAAS,IACnE;AAEF,MAAI,CAAC,cAAe;AAGpB,MAAI,WAAY,WAAU,aAAa;AAGvC,iBAAe;AAEf,QAAM,eAAmC,CAAC;AAG1C,MAAI,cAAe,cAAa,gBAAgB;AAGhD,MAAI;AACF,iBAAa,uBAAuB;AAGtC,MAAI,aAAa,MAAO,cAAa,iBAAiB;AAEtD,QAAM,OAAO,QAAQ,IAAI;AACzB,OAAK,MAAM,oBAAI,KAAK,CAAC;AAGrB,OAAK,UAAU,eAAe,YAAY;AAC5C;A;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClCO,SAAS,iBACd,OACA,SACY;AACZ,QAAM,SAAqB,CAAC;AAG5B,MAAI,QAAQ,SAAS,KAAK;AACxB,cAAU;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEF,UAAQ,QAAQ,CAAC,cAAc;AAC7B,QAAI,QAAQ,MAAM,SAA8C,KAAK,CAAC;AAGtE,QAAI,aAAa;AACf,cAAQ;AAAA,QACN,IAAI,MAAM;AAAA,QACV,QAAQ,MAAM;AAAA,QACd,SAAS,MAAM;AAAA,QACf,QAAQ,MAAM;AAAA,QACd,QAAQ,MAAM;AAAA,QACd,OAAO,MAAM;AAAA,QACb,OAAO,MAAM;AAAA,MACf;AAEF,WAAO,QAAQ,KAAK,EAAE,QAAQ,CAAC,CAAC,KAAK,GAAG,MAAM;AAE5C,UAAI,aAAa,UAAW,OAAO,IAAmC,CAAC;AAEvE,aAAO,GAAG,SAAS,IAAI,GAAG,EAAE,IAAI;AAAA,IAClC,CAAC;AAAA,EACH,CAAC;AAED,SAAO;AACT;;;AC3CO,SAAS,mBACd,WACA,YAAY,MACJ;AACR,MAAI,CAAC,UAAW,QAAO;AAEvB,SAAO,UAAU,QAAQ,QAAQ,GAAG,EAAE,YAAY;AACpD;;;ACFO,SAAS,aACd,OACA,UACA,UAAsB,CAAC,GACvB,MACA,MACM;AACN,MAAI,CAAC,SAAS,cAAe;AAE7B,QAAM,YAAY,EAAS,IAAI,IAAI,OAAO,CAAC;AAE3C,QAAM,gBAAgB;AAAA,IACpB;AAAA;AAAA,IAEA,QAAQ,WAAW,SAAS,WAAW,CAAC,MAAM;AAAA,EAChD;AAEA,QAAM,cAA0B;AAAA,IAC9B,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AAGA,MAAI,YAAY,MAAM;AACtB,MAAI,SAAS,cAAc,OAAO;AAEhC,gBAAY,mBAAmB,SAAS;AAAA,EAC1C;AAGA,cAAY,UAAU,SAAS;AAG/B,MAAI,SAAS,MAAO,aAAY,aAAa;AAE7C,QAAM,OAAO,QAAQ,IAAI;AACzB,OAAK,SAAS,WAAW,WAAW;AACtC;;;ACzCO,SAAS,QACd,UACA,MACA,YACM;AACN,QAAM,EAAE,aAAa,IAAI;AAEzB,MAAI,CAAC,aAAc;AAGnB,MAAI,CAAC,SAAS,SAAU,UAAS,WAAW;AAE5C,MAAI,WAAY,WAAU,YAAY;AAGtC,iBAAe;AAEf,QAAM,OAAO,QAAQ,IAAI;AACzB,OAAK,MAAM,oBAAI,KAAK,CAAC;AAGrB,OAAK,UAAU,YAAY;AAC7B;;;ACpBO,SAAS,aACd,OACA,UACA,UAAsB,CAAC,GACvB,MACA,MACA,aACM;AACN,QAAM,EAAE,cAAc,SAAS,IAAI;AACnC,QAAM,YAAY,EAAS,IAAI,IAAI,OAAO,CAAC;AAG3C,QAAM,kBAAkB,QAAQ,SAAS;AACzC,MAAI,CAAC,gBAAiB;AAEtB,QAAM,SAA4B;AAAA,IAChC,SAAS,GAAG,YAAY,IAAI,eAAe;AAAA,IAC3C,UAAU,YAAY;AAAA,IACtB,GAAG;AAAA,EACL;AAEA,QAAM,OAAO,QAAQ,IAAI;AACzB,OAAK,SAAS,cAAc,MAAM;AACpC;;;AC1BA,IAAM,mBAAmB;AACzB,IAAM,gBAAgB;AAEf,SAAS,QACd,UACA,MACA,YACM;AACN,QAAM,EAAE,aAAa,WAAW,OAAO,IAAI;AAC3C,QAAM,gBAAgB,aAAa;AAEnC,QAAM,MAAM;AAGZ,MAAI,kBAAkB,kBAAkB;AACtC,QAAI,YAAY,IAAI,aAAa,CAAC;AAAA,EACpC,OAAO;AACL,QAAI,aAAa,IAAK,IAAI,aAAa,KAAmB,CAAC;AAAA,EAC7D;AAGA,QAAM,iBAAiB,IAAI,aAAa;AAExC,QAAM,OAAO,KAAK,kBAAkB,eAAe,KAAK,KAAK,cAAc,CAAC;AAC5E,OAAK;AAAA,IACH,cAAa,oBAAI,KAAK,GAAE,QAAQ;AAAA,IAChC,OAAO;AAAA,EACT,CAAC;AAGD,MAAI,cAAc;AAChB,IAAAC,WAAU,aAAa,UAAU,eAAe,aAAa;AACjE;AAEA,SAASA,WAAU,aAAqB,KAAa,eAAuB;AAC1E,QAAM,KAAK,iBAAiB,mBAAmB,QAAQ,gBAAgB;AACvE,QAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,SAAO,MAAM,MAAM,cAAc;AACjC,WAAS,KAAK,YAAY,MAAM;AAClC;;;ACrCO,SAAS,aACd,OACA,UACA,UAAsB,CAAC,GACvB,MACA,MACM;AACN,QAAM,MAAM;AACZ,QAAM,OAAO,KAAK,kBAAkB,IAAI,UAAU,KAAK,KAAK,IAAI,SAAS,CAAC;AAC1E,QAAM,MAAM,EAAE,OAAO,MAAM,MAAM;AAEjC,OAAK;AAAA,IACH,GAAG;AAAA,IACH,GAAI,EAAS,IAAI,IAAI,OAAO;AAAA,EAC9B,CAAC;AACH;;;ACnBA;;;ACAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGO,SAAS,cAAyB;AACvC,QAAM,QAAQ,EAAS,gBAAgB;AAEvC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,gBAAgB,MAAM,KAAK;AAAA,MAC3B,OAAO,MAAM,KAAK;AAAA,MAClB,KAAK,MAAM,KAAK;AAAA,MAChB,UAAU,MAAM,KAAK;AAAA,MACrB,UAAU;AAAA,MACV,OAAO,MAAM,OACV,OAAO,CAAC,SAAS,KAAK,SAAS,SAAS,EACxC,IAAI,CAAC,UAAU;AAAA,QACd,SAAS,KAAK,KAAK;AAAA,QACnB,WAAW,KAAK,KAAK;AAAA,QACrB,UAAU;AAAA,MACZ,EAAE;AAAA,MACJ,SAAS;AAAA,IACX;AAAA,EACF;AACF;AAGO,SAAS,eAA0B;AACxC,QAAM,QAAQ,EAAS,aAAa;AAEpC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,UAAU;AAAA,MACV,OAAO,MAAM,KAAK;AAAA,MAClB,OAAO;AAAA,QACL;AAAA,UACE,SAAS,MAAM,KAAK;AAAA,UACpB,cAAc,MAAM,KAAK;AAAA,UACzB,UAAU;AAAA,QACZ;AAAA,MACF;AAAA,MACA,SAAS;AAAA,IACX;AAAA,EACF;AACF;AAGO,SAAS,gBAA2B;AACzC,QAAM,QAAQ,EAAS,gBAAgB;AAEvC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,SAAS;AAAA,MACT,UAAU;AAAA,MACV,OAAO,MAAM,KAAK;AAAA,MAClB,gBAAgB,MAAM,KAAK;AAAA,IAC7B;AAAA,EACF;AACF;AAGO,SAAS,WAAoC;AAClD,QAAM,QAAQ,EAAS,cAAc;AAErC,SAAO;AAAA,IACL,OAAO;AAAA,IACP,YAAY,MAAM,KAAK;AAAA,IACvB,cAAc,MAAM,KAAK;AAAA,IACzB,kBAAkB,MAAM,KAAK;AAAA,IAC7B,OAAO,MAAM,KAAK;AAAA,IAClB,UAAU;AAAA,EACZ;AACF;;;AC7EA;AAAA;AAAA,uBAAAC;AAAA,EAAA;AAAA;AAAA,sBAAAC;AAAA,EAAA,mBAAAC;AAAA,EAAA;AAAA;AAKO,IAAMC,eAAoC;AAAA,EAC/C,MAAM;AAAA,EACN,UAAU;AAAA,IACR,KAAK;AAAA,MACH,SAAS,CAAC,QAAQ,SAAS;AAAA,IAC7B;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,MACH,gBAAgB;AAAA,MAChB,OAAO;AAAA,MACP,KAAK;AAAA,MACL,UAAU;AAAA,MACV,UAAU,EAAE,KAAK,iBAAiB,OAAO,MAAM;AAAA,MAC/C,OAAO;AAAA,QACL,MAAM;AAAA,UACJ;AAAA,UACA;AAAA,YACE,WAAW,CAAC,WACV,EAAS,MAAM,KAAK,OAAO,SAAS;AAAA,YACtC,KAAK;AAAA,cACH,SAAS;AAAA,cACT,WAAW;AAAA,cACX,UAAU,EAAE,KAAK,iBAAiB,OAAO,EAAE;AAAA,YAC7C;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGO,IAAMC,gBAAqC;AAAA,EAChD,MAAM;AAAA,EACN,UAAU;AAAA,IACR,KAAK;AAAA,MACH,SAAS,CAAC,MAAM;AAAA,IAClB;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,MACH,UAAU,EAAE,OAAO,OAAO,KAAK,gBAAgB;AAAA,MAC/C,OAAO;AAAA,MACP,OAAO;AAAA,QACL,MAAM;AAAA,UACJ;AAAA,UACA;AAAA,YACE,KAAK;AAAA,cACH,SAAS;AAAA,cACT,cAAc;AAAA,cACd,UAAU,EAAE,OAAO,GAAG,KAAK,gBAAgB;AAAA,YAC7C;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGO,IAAMC,iBAAsC;AAAA,EACjD,MAAM;AAAA;AAAA,EACN,UAAU;AAAA,IACR,KAAK,CAAC;AAAA,EACR;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,MACH,OAAO;AAAA,MACP,UAAU,EAAE,OAAO,OAAO,KAAK,gBAAgB;AAAA,MAC/C,gBAAgB;AAAA,IAClB;AAAA,EACF;AACF;AAGO,IAAM,iBAAuC;AAAA,EAClD,MAAM;AAAA,EACN,UAAU;AAAA,IACR,KAAK,CAAC;AAAA,EACR;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,MACH,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,kBAAkB;AAAA,MAClB,OAAO;AAAA,MACP,UAAU,EAAE,OAAO,OAAO,KAAK,gBAAgB;AAAA,IACjD;AAAA,EACF;AACF;AAGO,IAAM,mBAAyC;AAAA,EACpD,MAAM;AAAA;AAAA,EACN,UAAU;AAAA,IACR,KAAK;AAAA,MACH,SAAS,CAAC,MAAM;AAAA,IAClB;AAAA,IACA,KAAK,CAAC;AAAA;AAAA,IACN,KAAK,CAAC;AAAA,EACR;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,MACH,gBAAgB;AAAA,MAChB,OAAO;AAAA,MACP,UAAU,EAAE,OAAO,OAAO,KAAK,gBAAgB;AAAA,MAC/C,OAAO;AAAA,QACL,MAAM;AAAA,UACJ;AAAA,UACA;AAAA,YACE,WAAW,CAAC,WACV,EAAS,MAAM,KAAK,OAAO,SAAS;AAAA,YACtC,KAAK;AAAA,cACH,SAAS;AAAA,cACT,WAAW;AAAA,cACX,UAAU,EAAE,OAAO,GAAG,KAAK,gBAAgB;AAAA,YAC7C;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGO,IAAM,SAAS;AAAA,EACpB,OAAO,EAAE,UAAU,iBAAiB;AAAA,EACpC,SAAS;AAAA,IACP,KAAKD;AAAA,IACL,MAAM;AAAA,EACR;AACF;;;AC7HO,IAAM,kBAA+B;AAAA,EAC1C,MAAM;AAAA,EAEN,QAAQ,EAAE,UAAU,CAAC,EAAE;AAAA,EAEvB,KAAK,EAAE,QAAAE,SAAQ,KAAK,GAAG;AACrB,UAAM,EAAE,WAAW,CAAC,GAAwB,WAAW,IAAIA;AAC3D,UAAM,EAAE,KAAK,KAAK,IAAI,IAAI;AAG1B,QAAI,2BAAK,eAAe;AACtB,cAAQ,KAAK,MAAM,UAAU;AAAA,IAC/B;AAGA,QAAI,2BAAK,cAAc;AACrB,cAAQ,KAAK,MAAM,UAAU;AAAA,IAC/B;AAGA,QAAI,2BAAK,aAAa;AACpB,cAAQ,KAAK,MAAM,UAAU;AAAA,IAC/B;AAGA,QAAI,EAAC,2BAAK,kBAAiB,EAAC,2BAAK,iBAAgB,EAAC,2BAAK,cAAa;AAClE,aAAO;AAAA,IACT;AAEA,WAAOA;AAAA,EACT;AAAA,EAEA,KAAK,OAAO,EAAE,QAAAA,SAAQ,UAAU,CAAC,GAAG,MAAM,KAAK,GAAG;AAChD,UAAM,EAAE,WAAW,CAAC,EAAE,IAAIA;AAC1B,UAAM,EAAE,KAAK,KAAK,IAAI,IAAI;AAC1B,UAAM,eAAe,QAAQ,YAAY,CAAC;AAG1C,QAAI,2BAAK,eAAe;AACtB;AAAA,QACE;AAAA,QACA;AAAA,QACA,aAAa;AAAA,QACb;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAGA,SAAI,2BAAK,iBAAgB,QAAQ,MAAM;AACrC;AAAA,QACE;AAAA,QACA;AAAA,QACA,aAAa;AAAA,QACb;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,MACV;AAAA,IACF;AAGA,QAAI,2BAAK,aAAa;AACpB;AAAA,QACE;AAAA,QACA;AAAA,QACA,aAAa;AAAA,QACb;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAO,gBAAQ;","names":["w","addScript","adsConversion","ga4AddToCart","ga4Purchase","ga4Purchase","ga4AddToCart","adsConversion","config"]}
|
|
1
|
+
{"version":3,"sources":["../src/shared/gtag.ts","../src/ga4/config.ts","../src/shared/parameters.ts","../src/shared/mapping.ts","../src/ga4/push.ts","../src/ads/config.ts","../src/ads/push.ts","../src/gtm/config.ts","../src/gtm/push.ts","../src/types/index.ts","../src/examples/index.ts","../src/examples/events.ts","../src/examples/mapping.ts","../src/index.ts"],"sourcesContent":["// Gtag script loading and initialization utilities\n\nconst loadedScripts = new Set<string>();\n\n// For testing: allow resetting loaded scripts\nexport function resetLoadedScripts(): void {\n loadedScripts.clear();\n}\n\nexport function addScript(\n id: string,\n src = 'https://www.googletagmanager.com/gtag/js?id=',\n document: Document = globalThis.document,\n): void {\n // Prevent loading the same script multiple times\n if (loadedScripts.has(id)) return;\n\n const script = document.createElement('script');\n script.src = src + id;\n document.head.appendChild(script);\n loadedScripts.add(id);\n}\n\nexport function initializeGtag(window: Window = globalThis.window): void {\n const w = window;\n\n // Setup dataLayer if not exists\n w.dataLayer = w.dataLayer || [];\n\n // Setup gtag function if not exists\n if (!w.gtag) {\n w.gtag = function () {\n (w.dataLayer as unknown[]).push(arguments);\n };\n }\n}\n","import type { WalkerOS } from '@walkeros/core';\nimport type { GA4Settings } from '../types';\nimport type { DestinationWeb } from '@walkeros/web-core';\nimport { addScript, initializeGtag } from '../shared/gtag';\nimport { getEnvironment } from '@walkeros/web-core';\n\nexport function initGA4(\n settings: GA4Settings,\n loadScript?: boolean,\n env?: DestinationWeb.Environment,\n): void {\n const { window, document } = getEnvironment(env);\n const { measurementId, transport_url, server_container_url, pageview } =\n settings;\n\n if (!measurementId) return;\n\n // Load the gtag script\n if (loadScript) addScript(measurementId, undefined, document);\n\n // Initialize gtag infrastructure\n initializeGtag(window);\n\n const gtagSettings: WalkerOS.AnyObject = {};\n\n // custom transport_url\n if (transport_url) gtagSettings.transport_url = transport_url;\n\n // custom server_container_url\n if (server_container_url)\n gtagSettings.server_container_url = server_container_url;\n\n // disable pageviews\n if (pageview === false) gtagSettings.send_page_view = false;\n\n const gtag = window.gtag as Gtag.Gtag;\n gtag('js', new Date());\n\n // gtag init call\n gtag('config', measurementId, gtagSettings);\n}\n","import type { WalkerOS } from '@walkeros/core';\nimport type { Include, Parameters } from '../types';\n\nexport function getParamsInclude(\n event: WalkerOS.DeepPartialEvent,\n include: Include,\n): Parameters {\n const params: Parameters = {};\n\n // Check for the 'all' group to add each group\n if (include.includes('all'))\n include = [\n 'context',\n 'data',\n 'event',\n 'globals',\n 'source',\n 'user',\n 'version',\n ];\n\n include.forEach((groupName) => {\n let group = event[groupName as keyof Omit<WalkerOS.Event, 'all'>] || {};\n\n // Create a fake group for event properties\n if (groupName == 'event')\n group = {\n id: event.id,\n timing: event.timing,\n trigger: event.trigger,\n entity: event.entity,\n action: event.action,\n group: event.group,\n count: event.count,\n };\n\n Object.entries(group).forEach(([key, val]) => {\n // Different value access for context\n if (groupName == 'context') val = (val as WalkerOS.OrderedProperties)[0];\n\n params[`${groupName}_${key}`] = val;\n });\n });\n\n return params;\n}\n","// Shared mapping utilities for all Google tools\n\nexport function normalizeEventName(\n eventName: string,\n snakeCase = true,\n): string {\n if (!snakeCase) return eventName;\n\n return eventName.replace(/\\s+/g, '_').toLowerCase();\n}\n","import type { WalkerOS } from '@walkeros/core';\nimport type { GA4Settings, GA4Mapping, Parameters } from '../types';\nimport type { DestinationWeb } from '@walkeros/web-core';\nimport { isObject } from '@walkeros/core';\nimport { getParamsInclude } from '../shared/parameters';\nimport { normalizeEventName } from '../shared/mapping';\nimport { getEnvironment } from '@walkeros/web-core';\n\nexport function pushGA4Event(\n event: WalkerOS.Event,\n settings: GA4Settings,\n mapping: GA4Mapping = {},\n data: WalkerOS.AnyObject,\n env?: DestinationWeb.Environment,\n): void {\n const { window } = getEnvironment(env);\n\n if (!settings.measurementId) return;\n\n const eventData = isObject(data) ? data : {};\n\n const paramsInclude = getParamsInclude(\n event,\n // Add data to include by default\n mapping.include || settings.include || ['data'],\n );\n\n const eventParams: Parameters = {\n ...paramsInclude,\n ...eventData,\n };\n\n // Event name (snake_case default)\n let eventName = event.name; // Assume custom mapped name\n if (settings.snakeCase !== false) {\n // Use snake case if not disabled\n eventName = normalizeEventName(eventName);\n }\n\n // Set the GA4 stream id\n eventParams.send_to = settings.measurementId;\n\n // Debug mode\n if (settings.debug) eventParams.debug_mode = true;\n\n const gtag = window.gtag as Gtag.Gtag;\n gtag('event', eventName, eventParams);\n}\n","import type { AdsSettings } from '../types';\nimport type { DestinationWeb } from '@walkeros/web-core';\nimport { addScript, initializeGtag } from '../shared/gtag';\nimport { getEnvironment } from '@walkeros/web-core';\n\nexport function initAds(\n settings: AdsSettings,\n loadScript?: boolean,\n env?: DestinationWeb.Environment,\n): void {\n const { window, document } = getEnvironment(env);\n const { conversionId } = settings;\n\n if (!conversionId) return;\n\n // Default currency value\n if (!settings.currency) settings.currency = 'EUR';\n\n if (loadScript) addScript(conversionId, undefined, document);\n\n // Initialize gtag infrastructure\n initializeGtag(window);\n\n const gtag = window.gtag as Gtag.Gtag;\n gtag('js', new Date());\n\n // gtag init call\n gtag('config', conversionId);\n}\n","import type { WalkerOS } from '@walkeros/core';\nimport type { AdsSettings, AdsMapping } from '../types';\nimport type { DestinationWeb } from '@walkeros/web-core';\nimport { isObject } from '@walkeros/core';\nimport { getEnvironment } from '@walkeros/web-core';\n\nexport function pushAdsEvent(\n event: WalkerOS.Event,\n settings: AdsSettings,\n mapping: AdsMapping = {},\n data: WalkerOS.AnyObject,\n mappingName?: string,\n env?: DestinationWeb.Environment,\n): void {\n const { conversionId, currency } = settings;\n const eventData = isObject(data) ? data : {};\n\n // Use label from mapping settings, fallback to mappingName for backward compatibility\n const conversionLabel = mapping.label || mappingName;\n if (!conversionLabel) return;\n\n const params: Gtag.CustomParams = {\n send_to: `${conversionId}/${conversionLabel}`,\n currency: currency || 'EUR',\n ...eventData,\n };\n\n const { window } = getEnvironment(env);\n const gtag = window.gtag as Gtag.Gtag;\n gtag('event', 'conversion', params);\n}\n","import type { GTMSettings } from '../types';\nimport type { DestinationWeb } from '@walkeros/web-core';\nimport { getEnvironment } from '@walkeros/web-core';\n\nconst defaultDataLayer = 'dataLayer';\nconst defaultDomain = 'https://www.googletagmanager.com/gtm.js?id=';\n\nexport function initGTM(\n settings: GTMSettings,\n loadScript?: boolean,\n env?: DestinationWeb.Environment,\n): void {\n const { window, document } = getEnvironment(env);\n const { containerId, dataLayer, domain } = settings;\n const dataLayerName = dataLayer || defaultDataLayer;\n\n // Initialize the dataLayer (default or custom name)\n if (dataLayerName === defaultDataLayer) {\n window.dataLayer = window.dataLayer || [];\n } else {\n window[dataLayerName] = (window[dataLayerName] as unknown[]) || [];\n }\n\n // Get the appropriate dataLayer array\n const dataLayerArray = window[dataLayerName] as unknown[];\n\n dataLayerArray.push({\n 'gtm.start': new Date().getTime(),\n event: 'gtm.js',\n });\n\n // Load the gtm script and container\n if (loadScript && containerId)\n addScript(containerId, domain || defaultDomain, dataLayerName, document);\n}\n\nfunction addScript(\n containerId: string,\n src: string,\n dataLayerName: string,\n document: Document = globalThis.document,\n) {\n const dl = dataLayerName != defaultDataLayer ? '&l=' + dataLayerName : '';\n const script = document.createElement('script');\n script.src = src + containerId + dl;\n document.head.appendChild(script);\n}\n","import type { WalkerOS } from '@walkeros/core';\nimport type { GTMSettings, GTMMapping } from '../types';\nimport type { DestinationWeb } from '@walkeros/web-core';\nimport { isObject } from '@walkeros/core';\nimport { getEnvironment } from '@walkeros/web-core';\n\nexport function pushGTMEvent(\n event: WalkerOS.Event,\n settings: GTMSettings,\n mapping: GTMMapping = {},\n data: WalkerOS.AnyObject,\n env?: DestinationWeb.Environment,\n): void {\n const { window } = getEnvironment(env);\n const obj = { event: event.name }; // Use the name mapping by default\n\n (window.dataLayer as unknown[]).push({\n ...obj,\n ...(isObject(data) ? data : event),\n });\n}\n","import type { Mapping as WalkerOSMapping } from '@walkeros/core';\nimport type { DestinationWeb } from '@walkeros/web-core';\n\n// Extend Window interface with specific dataLayer typing\ninterface WindowWithDataLayer extends Window {\n dataLayer: unknown[];\n gtag?: Gtag.Gtag;\n [key: string]: unknown; // For custom dataLayer names and other properties\n}\n\ndeclare global {\n interface Window {\n gtag?: Gtag.Gtag;\n [key: string]: unknown; // For custom dataLayer names and other properties\n }\n}\n\nexport type Destination = DestinationWeb.Destination<Settings, Mapping>;\nexport type Config = DestinationWeb.Config<Settings, Mapping>;\n\n// Unified settings for all Google tools\nexport interface Settings {\n // GA4 settings\n ga4?: GA4Settings;\n // Google Ads settings\n ads?: AdsSettings;\n // GTM settings\n gtm?: GTMSettings;\n}\n\n// GA4-specific settings\nexport interface GA4Settings {\n measurementId: string;\n debug?: boolean;\n include?: Include;\n pageview?: boolean;\n server_container_url?: string;\n snakeCase?: boolean;\n transport_url?: string;\n}\n\n// Google Ads specific settings\nexport interface AdsSettings {\n conversionId: string;\n currency?: string;\n}\n\n// Google Ads specific mapping\nexport interface AdsMapping {\n label?: string; // Conversion label for this specific event\n}\n\n// GTM specific settings\nexport interface GTMSettings {\n containerId: string;\n dataLayer?: string;\n domain?: string;\n}\n\n// Unified mapping interface\nexport interface Mapping {\n ga4?: GA4Mapping;\n ads?: AdsMapping;\n gtm?: GTMMapping;\n}\n\n// GA4-specific mapping\nexport interface GA4Mapping {\n include?: Include;\n}\n\n// GTM specific mapping\nexport interface GTMMapping {}\n\nexport type Rule = WalkerOSMapping.Rule<Mapping>;\nexport type Rules = WalkerOSMapping.Rules<Rule>;\nexport type Param = WalkerOSMapping.Value;\n\nexport type Include = Array<\n | 'all'\n | 'context'\n | 'data'\n | 'event'\n | 'globals'\n | 'source'\n | 'user'\n | 'version'\n>;\n\nexport type Parameters = Gtag.ControlParams &\n Gtag.EventParams &\n Gtag.CustomParams;\n","export * as events from './events';\nexport * as mapping from './mapping';\n","import { getEvent } from '@walkeros/core';\n\n// GA4 Purchase Event Example\nexport function ga4Purchase(): unknown[] {\n const event = getEvent('order complete');\n\n return [\n 'event',\n 'purchase',\n {\n transaction_id: event.data.id,\n value: event.data.total,\n tax: event.data.taxes,\n shipping: event.data.shipping,\n currency: 'EUR',\n items: event.nested\n .filter((item) => item.entity === 'product')\n .map((item) => ({\n item_id: item.data.id,\n item_name: item.data.name,\n quantity: 1,\n })),\n send_to: 'G-XXXXXX-1',\n },\n ];\n}\n\n// GA4 Add to Cart Event Example\nexport function ga4AddToCart(): unknown[] {\n const event = getEvent('product add');\n\n return [\n 'event',\n 'add_to_cart',\n {\n currency: 'EUR',\n value: event.data.price,\n items: [\n {\n item_id: event.data.id,\n item_variant: event.data.color,\n quantity: 1,\n },\n ],\n send_to: 'G-XXXXXX-1',\n },\n ];\n}\n\n// Google Ads Conversion Event Example\nexport function adsConversion(): unknown[] {\n const event = getEvent('order complete');\n\n return [\n 'event',\n 'conversion',\n {\n send_to: 'AW-XXXXXXXXX/CONVERSION_LABEL',\n currency: 'EUR',\n value: event.data.total,\n transaction_id: event.data.id,\n },\n ];\n}\n\n// GTM DataLayer Push Example\nexport function gtmEvent(): Record<string, unknown> {\n const event = getEvent('product view');\n\n return {\n event: 'product_view',\n product_id: event.data.id,\n product_name: event.data.name,\n product_category: event.data.category,\n value: event.data.price,\n currency: 'EUR',\n };\n}\n","import type { Mapping } from '@walkeros/core';\nimport type { DestinationGtag } from '..';\nimport { isObject } from '@walkeros/core';\n\n// GA4 Purchase Mapping\nexport const ga4Purchase: DestinationGtag.Rule = {\n name: 'purchase',\n settings: {\n ga4: {\n include: ['data', 'context'],\n },\n },\n data: {\n map: {\n transaction_id: 'data.id',\n value: 'data.total',\n tax: 'data.taxes',\n shipping: 'data.shipping',\n currency: { key: 'data.currency', value: 'EUR' },\n items: {\n loop: [\n 'nested',\n {\n condition: (entity) =>\n isObject(entity) && entity.entity === 'product',\n map: {\n item_id: 'data.id',\n item_name: 'data.name',\n quantity: { key: 'data.quantity', value: 1 },\n },\n },\n ],\n },\n },\n },\n};\n\n// GA4 Add to Cart Mapping\nexport const ga4AddToCart: DestinationGtag.Rule = {\n name: 'add_to_cart',\n settings: {\n ga4: {\n include: ['data'],\n },\n },\n data: {\n map: {\n currency: { value: 'EUR', key: 'data.currency' },\n value: 'data.price',\n items: {\n loop: [\n 'this',\n {\n map: {\n item_id: 'data.id',\n item_variant: 'data.color',\n quantity: { value: 1, key: 'data.quantity' },\n },\n },\n ],\n },\n },\n },\n};\n\n// Google Ads Conversion Mapping\nexport const adsConversion: DestinationGtag.Rule = {\n name: 'CONVERSION_LABEL', // This becomes the conversion label\n settings: {\n ads: {},\n },\n data: {\n map: {\n value: 'data.total',\n currency: { value: 'EUR', key: 'data.currency' },\n transaction_id: 'data.id',\n },\n },\n};\n\n// GTM Event Mapping\nexport const gtmProductView: DestinationGtag.Rule = {\n name: 'product_view',\n settings: {\n gtm: {},\n },\n data: {\n map: {\n product_id: 'data.id',\n product_name: 'data.name',\n product_category: 'data.category',\n value: 'data.price',\n currency: { value: 'EUR', key: 'data.currency' },\n },\n },\n};\n\n// Combined mapping for all tools\nexport const combinedPurchase: DestinationGtag.Rule = {\n name: 'purchase', // GA4 event name\n settings: {\n ga4: {\n include: ['data'],\n },\n ads: {}, // Will use 'purchase' as conversion label for ads\n gtm: {},\n },\n data: {\n map: {\n transaction_id: 'data.id',\n value: 'data.total',\n currency: { value: 'EUR', key: 'data.currency' },\n items: {\n loop: [\n 'nested',\n {\n condition: (entity) =>\n isObject(entity) && entity.entity === 'product',\n map: {\n item_id: 'data.id',\n item_name: 'data.name',\n quantity: { value: 1, key: 'data.quantity' },\n },\n },\n ],\n },\n },\n },\n};\n\n// Example configuration with all mappings\nexport const config = {\n order: { complete: combinedPurchase },\n product: {\n add: ga4AddToCart,\n view: gtmProductView,\n },\n} satisfies DestinationGtag.Rules;\n","import type { WalkerOS } from '@walkeros/core';\nimport type { Settings, Destination } from './types';\nimport { initGA4, pushGA4Event } from './ga4';\nimport { initAds, pushAdsEvent } from './ads';\nimport { initGTM, pushGTMEvent } from './gtm';\n\n// Types\nexport * as DestinationGtag from './types';\n\n// Examples\nexport * as examples from './examples';\n\nexport const destinationGtag: Destination = {\n type: 'google-gtag',\n\n config: { settings: {} },\n\n env: {\n window: {\n gtag: function (...args: unknown[]): void {},\n dataLayer: [] as unknown[],\n },\n document: {\n createElement: (tagName: string) => ({\n src: '',\n async: false,\n setAttribute: () => {},\n removeAttribute: () => {},\n }),\n head: {\n appendChild: () => {},\n },\n },\n },\n\n init({ config, env }) {\n const { settings = {} as Partial<Settings>, loadScript } = config;\n const { ga4, ads, gtm } = settings;\n\n // Initialize GA4 if configured\n if (ga4?.measurementId) {\n initGA4(ga4, loadScript, env);\n }\n\n // Initialize Google Ads if configured\n if (ads?.conversionId) {\n initAds(ads, loadScript, env);\n }\n\n // Initialize GTM if configured\n if (gtm?.containerId) {\n initGTM(gtm, loadScript, env);\n }\n\n // Fail if no tools are configured\n if (!ga4?.measurementId && !ads?.conversionId && !gtm?.containerId) {\n return false;\n }\n\n return config;\n },\n\n push(event, { config, mapping = {}, data, env }) {\n const { settings = {} } = config;\n const { ga4, ads, gtm } = settings;\n const eventMapping = mapping.settings || {};\n\n // Push to GA4 if configured\n if (ga4?.measurementId) {\n pushGA4Event(\n event,\n ga4,\n eventMapping.ga4,\n data as WalkerOS.AnyObject,\n env,\n );\n }\n\n // Push to Google Ads if configured and has mapping name\n if (ads?.conversionId && mapping.name) {\n pushAdsEvent(\n event,\n ads,\n eventMapping.ads,\n data as WalkerOS.AnyObject,\n mapping.name,\n env,\n );\n }\n\n // Push to GTM if configured\n if (gtm?.containerId) {\n pushGTMEvent(\n event,\n gtm,\n eventMapping.gtm,\n data as WalkerOS.AnyObject,\n env,\n );\n }\n },\n};\n\nexport default destinationGtag;\n"],"mappings":"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","names":["document","w","document","getEnvironment","getEnvironment","document","getEnvironment","getEnvironment","document","addScript","getEnvironment","adsConversion","ga4AddToCart","ga4Purchase","ga4Purchase","ga4AddToCart","adsConversion","config"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@walkeros/web-destination-gtag",
|
|
3
3
|
"description": "Unified Google destination for walkerOS (GA4, Ads, GTM)",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.1.1",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"module": "./dist/index.mjs",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"update": "npx npm-check-updates -u && npm update"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@walkeros/web-core": "0.
|
|
28
|
+
"@walkeros/web-core": "0.1.1"
|
|
29
29
|
},
|
|
30
30
|
"repository": {
|
|
31
31
|
"url": "git+https://github.com/elbwalker/walkerOS.git",
|