@walkeros/web-destination-piwikpro 0.0.7 → 0.1.0
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 +34 -21
- package/dist/examples/index.js +10 -49
- package/dist/examples/index.mjs +10 -49
- package/dist/index.browser.js +1 -1
- 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 +3 -2
package/README.md
CHANGED
|
@@ -1,29 +1,23 @@
|
|
|
1
1
|
<p align="left">
|
|
2
2
|
<a href="https://elbwalker.com">
|
|
3
|
-
<img title="elbwalker" src=
|
|
3
|
+
<img title="elbwalker" src="https://www.elbwalker.com/img/elbwalker_logo.png" width="256px"/>
|
|
4
4
|
</a>
|
|
5
5
|
</p>
|
|
6
6
|
|
|
7
7
|
# Piwik PRO Destination for walkerOS
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
[Source Code](https://github.com/elbwalker/walkerOS/tree/main/packages/web/destinations/piwikpro)
|
|
10
|
+
•
|
|
11
|
+
[NPM Package](https://www.npmjs.com/package/@walkeros/web-destination-piwikpro)
|
|
11
12
|
|
|
12
|
-
[
|
|
13
|
+
This package provides a [Piwik PRO](https://piwik.pro/) destination for
|
|
14
|
+
walkerOS. Piwik PRO is a European, privacy-focused web analytics and marketing
|
|
15
|
+
platform that helps businesses track website traffic and user behavior.
|
|
13
16
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
- **Sources**: Capture events from various environments (browser DOM, dataLayer,
|
|
19
|
-
server requests)
|
|
20
|
-
- **Collector**: Processes, validates, and routes events with consent awareness
|
|
21
|
-
- **Destinations**: Send processed events to analytics platforms (GA4, Meta,
|
|
22
|
-
custom APIs)
|
|
23
|
-
|
|
24
|
-
This Piwik PRO destination receives processed events from the walkerOS collector
|
|
25
|
-
and transforms them into Piwik PRO's analytics format, providing
|
|
26
|
-
privacy-compliant analytics with GDPR compliance and data ownership control.
|
|
17
|
+
walkerOS follows a **source → collector → destination** architecture. This Piwik
|
|
18
|
+
PRO destination receives processed events from the walkerOS collector and
|
|
19
|
+
transforms them into Piwik PRO's analytics format, providing privacy-compliant
|
|
20
|
+
analytics with GDPR compliance and data ownership control.
|
|
27
21
|
|
|
28
22
|
## Installation
|
|
29
23
|
|
|
@@ -36,17 +30,36 @@ npm install @walkeros/web-destination-piwikpro
|
|
|
36
30
|
Here's a basic example of how to use the Piwik PRO destination:
|
|
37
31
|
|
|
38
32
|
```typescript
|
|
39
|
-
import {
|
|
33
|
+
import { createCollector } from '@walkeros/collector';
|
|
40
34
|
import { destinationPiwikPro } from '@walkeros/web-destination-piwikpro';
|
|
41
35
|
|
|
36
|
+
const { elb } = await createCollector();
|
|
37
|
+
|
|
42
38
|
elb('walker destination', destinationPiwikPro, {
|
|
43
|
-
|
|
44
|
-
appId: '
|
|
45
|
-
url: 'https://
|
|
39
|
+
settings: {
|
|
40
|
+
appId: 'XXX-XXX-XXX-XXX-XXX', // Required
|
|
41
|
+
url: 'https://your_account_name.piwik.pro/', // Required
|
|
46
42
|
},
|
|
47
43
|
});
|
|
48
44
|
```
|
|
49
45
|
|
|
46
|
+
## Configuration
|
|
47
|
+
|
|
48
|
+
| Name | Type | Description | Required | Example |
|
|
49
|
+
| -------------- | --------- | ---------------------------------------------- | -------- | ---------------------------------------- |
|
|
50
|
+
| `appId` | `string` | ID of the Piwik PRO site | Yes | `'XXX-XXX-XXX-XXX-XXX'` |
|
|
51
|
+
| `url` | `string` | URL of your Piwik PRO account | Yes | `'https://your_account_name.piwik.pro/'` |
|
|
52
|
+
| `linkTracking` | `boolean` | Enables/Disables download and outlink tracking | No | `false` |
|
|
53
|
+
|
|
54
|
+
### Event Mapping
|
|
55
|
+
|
|
56
|
+
For custom event mapping (`mapping.entity.action.settings`):
|
|
57
|
+
|
|
58
|
+
| Name | Type | Description | Required | Example |
|
|
59
|
+
| ----------- | -------- | ------------------------------------- | -------- | -------------- |
|
|
60
|
+
| `goalId` | `string` | ID to count the event as a goal | No | `'1'` |
|
|
61
|
+
| `goalValue` | `string` | Property to be used as the goal value | No | `'data.value'` |
|
|
62
|
+
|
|
50
63
|
## Contribute
|
|
51
64
|
|
|
52
65
|
Feel free to contribute by submitting an
|
package/dist/examples/index.js
CHANGED
|
@@ -32,47 +32,7 @@ __export(events_exports, {
|
|
|
32
32
|
ecommerceOrder: () => ecommerceOrder,
|
|
33
33
|
ecommerceProductDetailView: () => ecommerceProductDetailView
|
|
34
34
|
});
|
|
35
|
-
|
|
36
|
-
// ../../../core/dist/index.mjs
|
|
37
|
-
var e;
|
|
38
|
-
var t;
|
|
39
|
-
var n = Object.getOwnPropertyNames;
|
|
40
|
-
var r = (e = { "package.json"(e2, t2) {
|
|
41
|
-
t2.exports = { name: "@walkeros/core", description: "Core types and platform-agnostic utilities for walkerOS", version: "0.0.7", 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" }] };
|
|
42
|
-
} }, function() {
|
|
43
|
-
return t || (0, e[n(e)[0]])((t = { exports: {} }).exports, t), t.exports;
|
|
44
|
-
});
|
|
45
|
-
var w = { merge: true, shallow: true, extend: true };
|
|
46
|
-
function v(e2, t2 = {}, n2 = {}) {
|
|
47
|
-
n2 = { ...w, ...n2 };
|
|
48
|
-
const r2 = Object.entries(t2).reduce((t3, [r3, o]) => {
|
|
49
|
-
const i = e2[r3];
|
|
50
|
-
return n2.merge && Array.isArray(i) && Array.isArray(o) ? t3[r3] = o.reduce((e3, t4) => e3.includes(t4) ? e3 : [...e3, t4], [...i]) : (n2.extend || r3 in e2) && (t3[r3] = o), t3;
|
|
51
|
-
}, {});
|
|
52
|
-
return n2.shallow ? { ...e2, ...r2 } : (Object.assign(e2, r2), e2);
|
|
53
|
-
}
|
|
54
|
-
function k(e2) {
|
|
55
|
-
return Array.isArray(e2);
|
|
56
|
-
}
|
|
57
|
-
function M(e2) {
|
|
58
|
-
return "object" == typeof e2 && null !== e2 && !k(e2) && "[object Object]" === Object.prototype.toString.call(e2);
|
|
59
|
-
}
|
|
60
|
-
var { version: V } = r();
|
|
61
|
-
function H(e2 = {}) {
|
|
62
|
-
var _a;
|
|
63
|
-
const t2 = e2.timestamp || (/* @__PURE__ */ new Date()).setHours(0, 13, 37, 0), n2 = e2.group || "gr0up", r2 = e2.count || 1, o = v({ event: "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: [{ type: "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: V, tagging: 1 }, source: { type: "web", id: "https://localhost:80", previous_id: "http://remotehost:9001" } }, e2, { merge: false });
|
|
64
|
-
if (e2.event) {
|
|
65
|
-
const [t3, n3] = (_a = e2.event.split(" ")) != null ? _a : [];
|
|
66
|
-
t3 && n3 && (o.entity = t3, o.action = n3);
|
|
67
|
-
}
|
|
68
|
-
return o;
|
|
69
|
-
}
|
|
70
|
-
function z(e2 = "entity action", t2 = {}) {
|
|
71
|
-
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 } };
|
|
72
|
-
return H({ ...{ "cart view": { data: { currency: "EUR", value: 2 * r2.data.price }, context: { shopping: ["cart", 0] }, globals: { pagegroup: "shop" }, nested: [{ type: "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: [{ type: "product", ...r2, context: { shopping: ["checkout", 0] }, nested: [] }, { 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: [{ type: "product", ...r2, context: { shopping: ["complete", 0] }, nested: [] }, { 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": { ...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, event: e2 });
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
// src/examples/events.ts
|
|
35
|
+
var import_core = require("@walkeros/core");
|
|
76
36
|
function getProduct(entity) {
|
|
77
37
|
return {
|
|
78
38
|
sku: entity.data.id,
|
|
@@ -86,11 +46,11 @@ function getProduct(entity) {
|
|
|
86
46
|
};
|
|
87
47
|
}
|
|
88
48
|
function ecommerceOrder() {
|
|
89
|
-
const event =
|
|
49
|
+
const event = (0, import_core.getEvent)("order complete");
|
|
90
50
|
return [
|
|
91
51
|
[
|
|
92
52
|
"ecommerceOrder",
|
|
93
|
-
event.nested.filter((item) => item.
|
|
53
|
+
event.nested.filter((item) => item.entity === "product").map(getProduct),
|
|
94
54
|
{
|
|
95
55
|
orderId: event.data.id,
|
|
96
56
|
grandTotal: event.data.total,
|
|
@@ -102,13 +62,13 @@ function ecommerceOrder() {
|
|
|
102
62
|
];
|
|
103
63
|
}
|
|
104
64
|
function ecommerceAddToCart() {
|
|
105
|
-
const event =
|
|
65
|
+
const event = (0, import_core.getEvent)("product add");
|
|
106
66
|
return [
|
|
107
67
|
["ecommerceAddToCart", [getProduct(event), ,], { currencyCode: "EUR" }]
|
|
108
68
|
];
|
|
109
69
|
}
|
|
110
70
|
function ecommerceProductDetailView() {
|
|
111
|
-
const event =
|
|
71
|
+
const event = (0, import_core.getEvent)("product view");
|
|
112
72
|
return [
|
|
113
73
|
[
|
|
114
74
|
"ecommerceProductDetailView",
|
|
@@ -118,11 +78,11 @@ function ecommerceProductDetailView() {
|
|
|
118
78
|
];
|
|
119
79
|
}
|
|
120
80
|
function ecommerceCartUpdate() {
|
|
121
|
-
const event =
|
|
81
|
+
const event = (0, import_core.getEvent)("cart view");
|
|
122
82
|
return [
|
|
123
83
|
[
|
|
124
84
|
"ecommerceCartUpdate",
|
|
125
|
-
event.nested.filter((item) => item.
|
|
85
|
+
event.nested.filter((item) => item.entity === "product").map(getProduct),
|
|
126
86
|
event.data.value,
|
|
127
87
|
{ currencyCode: "EUR" }
|
|
128
88
|
]
|
|
@@ -138,6 +98,7 @@ __export(mapping_exports, {
|
|
|
138
98
|
ecommerceOrder: () => ecommerceOrder2,
|
|
139
99
|
ecommerceProductDetailView: () => ecommerceProductDetailView2
|
|
140
100
|
});
|
|
101
|
+
var import_core2 = require("@walkeros/core");
|
|
141
102
|
var productMap = {
|
|
142
103
|
sku: "data.id",
|
|
143
104
|
name: "data.name",
|
|
@@ -158,7 +119,7 @@ var ecommerceOrder2 = {
|
|
|
158
119
|
loop: [
|
|
159
120
|
"nested",
|
|
160
121
|
{
|
|
161
|
-
condition: (entity) =>
|
|
122
|
+
condition: (entity) => (0, import_core2.isObject)(entity) && entity.entity === "product",
|
|
162
123
|
map: productMap
|
|
163
124
|
}
|
|
164
125
|
]
|
|
@@ -225,7 +186,7 @@ var ecommerceCartUpdate2 = {
|
|
|
225
186
|
loop: [
|
|
226
187
|
"nested",
|
|
227
188
|
{
|
|
228
|
-
condition: (entity) =>
|
|
189
|
+
condition: (entity) => (0, import_core2.isObject)(entity) && entity.entity === "product",
|
|
229
190
|
map: productMap
|
|
230
191
|
}
|
|
231
192
|
]
|
package/dist/examples/index.mjs
CHANGED
|
@@ -12,47 +12,7 @@ __export(events_exports, {
|
|
|
12
12
|
ecommerceOrder: () => ecommerceOrder,
|
|
13
13
|
ecommerceProductDetailView: () => ecommerceProductDetailView
|
|
14
14
|
});
|
|
15
|
-
|
|
16
|
-
// ../../../core/dist/index.mjs
|
|
17
|
-
var e;
|
|
18
|
-
var t;
|
|
19
|
-
var n = Object.getOwnPropertyNames;
|
|
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.0.7", 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
|
-
} }, function() {
|
|
23
|
-
return t || (0, e[n(e)[0]])((t = { exports: {} }).exports, t), t.exports;
|
|
24
|
-
});
|
|
25
|
-
var w = { merge: true, shallow: true, extend: true };
|
|
26
|
-
function v(e2, t2 = {}, n2 = {}) {
|
|
27
|
-
n2 = { ...w, ...n2 };
|
|
28
|
-
const r2 = Object.entries(t2).reduce((t3, [r3, o]) => {
|
|
29
|
-
const i = e2[r3];
|
|
30
|
-
return n2.merge && Array.isArray(i) && Array.isArray(o) ? t3[r3] = o.reduce((e3, t4) => e3.includes(t4) ? e3 : [...e3, t4], [...i]) : (n2.extend || r3 in e2) && (t3[r3] = o), t3;
|
|
31
|
-
}, {});
|
|
32
|
-
return n2.shallow ? { ...e2, ...r2 } : (Object.assign(e2, r2), e2);
|
|
33
|
-
}
|
|
34
|
-
function k(e2) {
|
|
35
|
-
return Array.isArray(e2);
|
|
36
|
-
}
|
|
37
|
-
function M(e2) {
|
|
38
|
-
return "object" == typeof e2 && null !== e2 && !k(e2) && "[object Object]" === Object.prototype.toString.call(e2);
|
|
39
|
-
}
|
|
40
|
-
var { version: V } = r();
|
|
41
|
-
function H(e2 = {}) {
|
|
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({ event: "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: [{ type: "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: V, tagging: 1 }, source: { type: "web", id: "https://localhost:80", previous_id: "http://remotehost:9001" } }, e2, { merge: false });
|
|
44
|
-
if (e2.event) {
|
|
45
|
-
const [t3, n3] = (_a = e2.event.split(" ")) != null ? _a : [];
|
|
46
|
-
t3 && n3 && (o.entity = t3, o.action = n3);
|
|
47
|
-
}
|
|
48
|
-
return o;
|
|
49
|
-
}
|
|
50
|
-
function z(e2 = "entity action", t2 = {}) {
|
|
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 H({ ...{ "cart view": { data: { currency: "EUR", value: 2 * r2.data.price }, context: { shopping: ["cart", 0] }, globals: { pagegroup: "shop" }, nested: [{ type: "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: [{ type: "product", ...r2, context: { shopping: ["checkout", 0] }, nested: [] }, { 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: [{ type: "product", ...r2, context: { shopping: ["complete", 0] }, nested: [] }, { 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": { ...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, event: e2 });
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// src/examples/events.ts
|
|
15
|
+
import { getEvent } from "@walkeros/core";
|
|
56
16
|
function getProduct(entity) {
|
|
57
17
|
return {
|
|
58
18
|
sku: entity.data.id,
|
|
@@ -66,11 +26,11 @@ function getProduct(entity) {
|
|
|
66
26
|
};
|
|
67
27
|
}
|
|
68
28
|
function ecommerceOrder() {
|
|
69
|
-
const event =
|
|
29
|
+
const event = getEvent("order complete");
|
|
70
30
|
return [
|
|
71
31
|
[
|
|
72
32
|
"ecommerceOrder",
|
|
73
|
-
event.nested.filter((item) => item.
|
|
33
|
+
event.nested.filter((item) => item.entity === "product").map(getProduct),
|
|
74
34
|
{
|
|
75
35
|
orderId: event.data.id,
|
|
76
36
|
grandTotal: event.data.total,
|
|
@@ -82,13 +42,13 @@ function ecommerceOrder() {
|
|
|
82
42
|
];
|
|
83
43
|
}
|
|
84
44
|
function ecommerceAddToCart() {
|
|
85
|
-
const event =
|
|
45
|
+
const event = getEvent("product add");
|
|
86
46
|
return [
|
|
87
47
|
["ecommerceAddToCart", [getProduct(event), ,], { currencyCode: "EUR" }]
|
|
88
48
|
];
|
|
89
49
|
}
|
|
90
50
|
function ecommerceProductDetailView() {
|
|
91
|
-
const event =
|
|
51
|
+
const event = getEvent("product view");
|
|
92
52
|
return [
|
|
93
53
|
[
|
|
94
54
|
"ecommerceProductDetailView",
|
|
@@ -98,11 +58,11 @@ function ecommerceProductDetailView() {
|
|
|
98
58
|
];
|
|
99
59
|
}
|
|
100
60
|
function ecommerceCartUpdate() {
|
|
101
|
-
const event =
|
|
61
|
+
const event = getEvent("cart view");
|
|
102
62
|
return [
|
|
103
63
|
[
|
|
104
64
|
"ecommerceCartUpdate",
|
|
105
|
-
event.nested.filter((item) => item.
|
|
65
|
+
event.nested.filter((item) => item.entity === "product").map(getProduct),
|
|
106
66
|
event.data.value,
|
|
107
67
|
{ currencyCode: "EUR" }
|
|
108
68
|
]
|
|
@@ -118,6 +78,7 @@ __export(mapping_exports, {
|
|
|
118
78
|
ecommerceOrder: () => ecommerceOrder2,
|
|
119
79
|
ecommerceProductDetailView: () => ecommerceProductDetailView2
|
|
120
80
|
});
|
|
81
|
+
import { isObject } from "@walkeros/core";
|
|
121
82
|
var productMap = {
|
|
122
83
|
sku: "data.id",
|
|
123
84
|
name: "data.name",
|
|
@@ -138,7 +99,7 @@ var ecommerceOrder2 = {
|
|
|
138
99
|
loop: [
|
|
139
100
|
"nested",
|
|
140
101
|
{
|
|
141
|
-
condition: (entity) =>
|
|
102
|
+
condition: (entity) => isObject(entity) && entity.entity === "product",
|
|
142
103
|
map: productMap
|
|
143
104
|
}
|
|
144
105
|
]
|
|
@@ -205,7 +166,7 @@ var ecommerceCartUpdate2 = {
|
|
|
205
166
|
loop: [
|
|
206
167
|
"nested",
|
|
207
168
|
{
|
|
208
|
-
condition: (entity) =>
|
|
169
|
+
condition: (entity) => isObject(entity) && entity.entity === "product",
|
|
209
170
|
map: productMap
|
|
210
171
|
}
|
|
211
172
|
]
|
package/dist/index.browser.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var Destination=(()=>{var e,t,r=Object.defineProperty,
|
|
1
|
+
"use strict";var Destination=(()=>{var e,t,r=Object.defineProperty,n=Object.getOwnPropertyDescriptor,a=Object.getOwnPropertyNames,o=Object.prototype.hasOwnProperty,i=(e,t)=>{for(var n in t)r(e,n,{get:t[n],enumerable:!0})},c={};i(c,{DestinationPiwikPro:()=>P,default:()=>G,destinationPiwikPro:()=>M,destinationPiwikProExamples:()=>C});var s=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.0",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[s(e)[0]])((t={exports:{}}).exports,t),t.exports}),p={merge:!0,shallow:!0,extend:!0};function u(e){return Array.isArray(e)}function l(e){return void 0!==e}function m(e){return"object"==typeof e&&null!==e&&!u(e)&&"[object Object]"===Object.prototype.toString.call(e)}function g(e){return"string"==typeof e}function y(e,t="",r){const n=t.split(".");let a=e;for(let e=0;e<n.length;e++){const t=n[e];if("*"===t&&u(a)){const t=n.slice(e+1).join("."),o=[];for(const e of a){const n=y(e,t,r);o.push(n)}return o}if(a=a instanceof Object?a[t]:void 0,!a)break}return l(a)?a:r}var{version:f}=d();function w(e={}){var t;const r=e.timestamp||(new Date).setHours(0,13,37,0),n=e.group||"gr0up",a=e.count||1,o=function(e,t={},r={}){r={...p,...r};const n=Object.entries(t).reduce((t,[n,a])=>{const o=e[n];return r.merge&&Array.isArray(o)&&Array.isArray(a)?t[n]=a.reduce((e,t)=>e.includes(t)?e:[...e,t],[...o]):(r.extend||n in e)&&(t[n]=a),t},{});return r.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:`${r}-${n}-${a}`,trigger:"test",entity:"entity",action:"action",timestamp:r,timing:3.14,group:n,count:a,version:{source:f,tagging:1},source:{type:"web",id:"https://localhost:80",previous_id:"http://remotehost:9001"}},e,{merge:!1});if(e.name){const[r,n]=null!=(t=e.name.split(" "))?t:[];r&&n&&(o.entity=r,o.action=n)}return o}function h(e="entity action",t={}){const r=t.timestamp||(new Date).setHours(0,13,37,0),n={data:{id:"ers",name:"Everyday Ruck Snack",color:"black",size:"l",price:420}},a={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+a.data.price},context:{shopping:["checkout",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",...n,context:{shopping:["checkout",0]},nested:[]},{entity:"product",...a,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",...a,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: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})}function v(e){return function(e){return"boolean"==typeof e}(e)||g(e)||function(e){return"number"==typeof e&&!Number.isNaN(e)}(e)||!l(e)||u(e)&&e.every(v)||m(e)&&Object.values(e).every(v)}function b(e){return v(e)?e:void 0}function k(e,t,r){return async function(...n){try{return await e(...n)}catch(e){if(!t)return;return await t(e)}finally{await(null==r?void 0:r())}}}async function x(e,t={},r={}){var n;if(!l(e))return;const a=m(e)&&e.consent||r.consent||(null==(n=r.collector)?void 0:n.consent),o=u(t)?t:[t];for(const t of o){const n=await k(O)(e,t,{...r,consent:a});if(l(n))return n}}async function O(e,t,r={}){const{collector:n,consent:a}=r;return(u(t)?t:[t]).reduce(async(t,o)=>{const i=await t;if(i)return i;const c=g(o)?{key:o}:o;if(!Object.keys(c).length)return;const{condition:s,consent:d,fn:p,key:m,loop:f,map:w,set:h,validate:v,value:j}=c;if(s&&!await k(s)(e,o,n))return;if(d&&!function(e,t={},r={}){const n={...t,...r},a={};let o=void 0===e;return Object.keys(n).forEach(t=>{n[t]&&(a[t]=!0,e&&e[t]&&(o=!0))}),!!o&&a}(d,a))return j;let P=l(j)?j:e;if(p&&(P=await k(p)(e,o,r)),m&&(P=y(e,m,j)),f){const[t,n]=f,a="this"===t?[e]:await x(e,t,r);u(a)&&(P=(await Promise.all(a.map(e=>x(e,n,r)))).filter(l))}else w?P=await Object.entries(w).reduce(async(t,[n,a])=>{const o=await t,i=await x(e,a,r);return l(i)&&(o[n]=i),o},Promise.resolve({})):h&&(P=await Promise.all(h.map(t=>O(e,t,r))));v&&!await k(v)(P)&&(P=void 0);const C=b(P);return l(C)?C:b(j)},Promise.resolve(void 0))}function j(e){const t={window:globalThis.window,document:globalThis.document};return e?{...t,...e}:t}var P={},C={};i(C,{destinationPiwikProExamples:()=>N});var E={};function S(e){return{sku:e.data.id,name:e.data.name,price:e.data.price,quantity:1,variant:e.data.color,customDimensions:{1:e.data.size}}}function U(){const e=h("order complete");return[["ecommerceOrder",e.nested.filter(e=>"product"===e.entity).map(S),{orderId:e.data.id,grandTotal:e.data.total,tax:e.data.taxes,shipping:e.data.shipping},{currencyCode:"EUR"}]]}function D(){return[["ecommerceAddToCart",[S(h("product add")),,],{currencyCode:"EUR"}]]}function T(){return[["ecommerceProductDetailView",[S(h("product view")),,],{currencyCode:"EUR"}]]}function A(){const e=h("cart view");return[["ecommerceCartUpdate",e.nested.filter(e=>"product"===e.entity).map(S),e.data.value,{currencyCode:"EUR"}]]}i(E,{ecommerceAddToCart:()=>D,ecommerceCartUpdate:()=>A,ecommerceOrder:()=>U,ecommerceProductDetailView:()=>T});var R={};i(R,{config:()=>H,ecommerceAddToCart:()=>_,ecommerceCartUpdate:()=>I,ecommerceOrder:()=>V,ecommerceProductDetailView:()=>q});var z={sku:"data.id",name:"data.name",price:"data.price",quantity:{value:1},variant:{key:"data.color"},customDimensions:{map:{1:"data.size"}}},V={name:"ecommerceOrder",data:{set:[{loop:["nested",{condition:e=>m(e)&&"product"===e.entity,map:z}]},{map:{orderId:"data.id",grandTotal:"data.total",tax:"data.taxes",shipping:"data.shipping"}},{map:{currencyCode:{value:"EUR"}}}]}},_={name:"ecommerceAddToCart",data:{set:[{set:[{map:z}]},{map:{currencyCode:{value:"EUR"}}}]}},q={name:"ecommerceProductDetailView",data:{set:[{set:[{map:z}]},{map:{currencyCode:{value:"EUR"}}}]}},I={name:"ecommerceCartUpdate",data:{set:[{loop:["nested",{condition:e=>m(e)&&"product"===e.entity,map:z}]},"data.value",{map:{currencyCode:{value:"EUR"}}}]}},H={order:{complete:V},product:{add:_,view:q},cart:{view:I}},N={events:E,mapping:R},M={type:"piwikpro",config:{},init({config:e,env:t}){const{window:r}=j(t),n=r,{settings:a={},loadScript:o}=e,{appId:i,url:c}=a;if(!i||!c)return!1;n._paq=n._paq||[];const s=n._paq.push;return o&&(!function(e,t){const{document:r}=j(t),n=r,a=n.createElement("script");a.type="text/javascript",a.src=e+"ppms.js",a.async=!0,a.defer=!0,n.head.appendChild(a)}(c,t),s(["setTrackerUrl",c+"ppms.php"]),s(["setSiteId",i])),!1!==a.linkTracking&&s(["enableLinkTracking"]),e},async push(e,{config:t,mapping:r={},data:n,env:a}){const{window:o}=j(a),i=o._paq.push;if("page view"===e.name&&!r.settings)return void i(["trackPageView",await x(e,"data.title")]);const c=r.settings||{},s=u(n)?n:[n];if(i([e.name,...s]),c.goalId){const t=c.goalValue?x(e,c.goalValue):void 0;i(["trackGoal",c.goalId,t])}}};var $,G=M;return $=c,((e,t,i,c)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let s of a(t))o.call(e,s)||s===i||r(e,s,{get:()=>t[s],enumerable:!(c=n(t,s))||c.enumerable});return e})(r({},"__esModule",{value:!0}),$)})();
|
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,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 asyncGeneratorStep(e,t,r,n,o,a,i){try{var c=e[a](i),s=c.value}catch(e){return void r(e)}c.done?t(s):Promise.resolve(s).then(n,o)}function _async_to_generator(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var a=e.apply(t,r);function i(e){asyncGeneratorStep(a,n,o,i,c,"next",e)}function c(e){asyncGeneratorStep(a,n,o,i,c,"throw",e)}i(void 0)})}}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 _instanceof(e,t){return null!=t&&"undefined"!=typeof Symbol&&t[Symbol.hasInstance]?!!t[Symbol.hasInstance](e):e instanceof t}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,o,a=[],i=!0,c=!1;try{for(r=r.call(e);!(i=(n=r.next()).done)&&(a.push(n.value),!t||a.length!==t);i=!0);}catch(e){c=!0,o=e}finally{try{i||null==r.return||r.return()}finally{if(c)throw o}}return a}}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}}function _ts_generator(e,t){var r,n,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return i.next=c(0),i.throw=c(1),i.return=c(2),"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function c(c){return function(s){return function(c){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,c[0]&&(a=0)),a;)try{if(r=1,n&&(o=2&c[0]?n.return:c[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,c[1])).done)return o;switch(n=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,n=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==c[0]&&2!==c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=t.call(e,a)}catch(e){c=[6,e],n=0}finally{r=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}([c,s])}}}var Destination=function(){var e,t,r=function(e){return Array.isArray(e)},n=function(e){return void 0!==e},o=function(e){return"object"==(void 0===e?"undefined":_type_of(e))&&null!==e&&!r(e)&&"[object Object]"===Object.prototype.toString.call(e)},a=function(e){return"string"==typeof e},i=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,o=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 o=_sliced_to_array(n,2),a=o[0],i=o[1],c=e[a];return r.merge&&Array.isArray(c)&&Array.isArray(i)?t[a]=i.reduce(function(e,t){return e.includes(t)?e:_to_consumable_array(e).concat([t])},_to_consumable_array(c)):(r.extend||a in e)&&(t[a]=i),t},{});return r.shallow?_object_spread({},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:"".concat(t,"-").concat(r,"-").concat(n),trigger:"test",entity:"entity",action:"action",timestamp:t,timing:3.14,group:r,count:n,version:{source:S,tagging:1},source:{type:"web",id:"https://localhost:80",previous_id:"http://remotehost:9001"}},e,{merge:!1});if(e.event){var a,i=_sliced_to_array(null!==(a=e.event.split(" "))&&void 0!==a?a:[],2),c=i[0],s=i[1];c&&s&&(o.entity=c,o.action=s)}return o},c=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),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 i(_object_spread_props(_object_spread({},{"cart view":{data:{currency:"EUR",value:2*n.data.price},context:{shopping:["cart",0]},globals:{pagegroup:"shop"},nested:[{type:"product",data:_object_spread_props(_object_spread({},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:[_object_spread_props(_object_spread({type:"product"},n),{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"},n),{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({},n),{context:{shopping:["intent",0]},globals:{pagegroup:"shop"},nested:[],trigger:"click"}),"product view":_object_spread_props(_object_spread({},n),{context:{shopping:["detail",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"}),"product visible":{data:_object_spread_props(_object_spread({},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: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}))},s=function(e){return P(e)?e:void 0},u=function(e,t,r){return function(){for(var n=arguments.length,o=new Array(n),a=0;a<n;a++)o[a]=arguments[a];return _async_to_generator(function(){var n;return _ts_generator(this,function(a){switch(a.label){case 0:return a.trys.push([0,2,4,6]),[4,e.apply(void 0,_to_consumable_array(o))];case 1:case 3:return[2,a.sent()];case 2:return n=a.sent(),t?[4,t(n)]:[2];case 4:return[4,null==r?void 0:r()];case 5:return a.sent(),[7];case 6:return[2]}})})()}},l=function(e){return _async_to_generator(function(e){var t,a,i,c,s,l,p,d,y,_,f,m,b,g=arguments;return _ts_generator(this,function(v){switch(v.label){case 0:if(t=g.length>1&&void 0!==g[1]?g[1]:{},a=g.length>2&&void 0!==g[2]?g[2]:{},!n(e))return[2];c=o(e)&&e.consent||a.consent||(null===(i=a.collector)||void 0===i?void 0:i.consent),s=r(t)?t:[t],l=!0,p=!1,d=void 0,v.label=1;case 1:v.trys.push([1,6,7,8]),y=s[Symbol.iterator](),v.label=2;case 2:return(l=(_=y.next()).done)?[3,5]:(f=_.value,[4,u(E)(e,f,_object_spread_props(_object_spread({},a),{consent:c}))]);case 3:if(m=v.sent(),n(m))return[2,m];v.label=4;case 4:return l=!0,[3,2];case 5:return[3,8];case 6:return b=v.sent(),p=!0,d=b,[3,8];case 7:try{l||null==y.return||y.return()}finally{if(p)throw d}return[7];case 8:return[2]}})}).apply(this,arguments)},p=function(e){return{sku:e.data.id,name:e.data.name,price:e.data.price,quantity:1,variant:e.data.color,customDimensions:{1:e.data.size}}},d=function(){var e=c("order complete");return[["ecommerceOrder",e.nested.filter(function(e){return"product"===e.type}).map(p),{orderId:e.data.id,grandTotal:e.data.total,tax:e.data.taxes,shipping:e.data.shipping},{currencyCode:"EUR"}]]},y=function(){var e=c("product add");return[["ecommerceAddToCart",[p(e),,],{currencyCode:"EUR"}]]},_=function(){var e=c("product view");return[["ecommerceProductDetailView",[p(e),,],{currencyCode:"EUR"}]]},f=function(){var e=c("cart view");return[["ecommerceCartUpdate",e.nested.filter(function(e){return"product"===e.type}).map(p),e.data.value,{currencyCode:"EUR"}]]},m=Object.defineProperty,b=Object.getOwnPropertyDescriptor,g=Object.getOwnPropertyNames,v=Object.prototype.hasOwnProperty,h=function(e,t){for(var r in t)m(e,r,{get:t[r],enumerable:!0})},w={};h(w,{DestinationPiwikPro:function(){return A},default:function(){return M},destinationPiwikPro:function(){return N},destinationPiwikProExamples:function(){return C}});var j=Object.getOwnPropertyNames,k=(e={"package.json":function(e,t){t.exports={name:"@walkeros/core",description:"Core types and platform-agnostic utilities for walkerOS",version:"0.0.7",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[j(e)[0]])((t={exports:{}}).exports,t),t.exports}),O={merge:!0,shallow:!0,extend:!0};function x(e){for(var t=arguments.length>2?arguments[2]:void 0,o=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:"").split("."),a=e,i=0;i<o.length;i++){var c=o[i];if("*"===c&&r(a)){var s=o.slice(i+1).join("."),u=[],l=!0,p=!1,d=void 0;try{for(var y,_=a[Symbol.iterator]();!(l=(y=_.next()).done);l=!0){var f=x(y.value,s,t);u.push(f)}}catch(e){p=!0,d=e}finally{try{l||null==_.return||_.return()}finally{if(p)throw d}}return u}if(!(a=_instanceof(a,Object)?a[c]:void 0))break}return n(a)?a:t}var S=k().version;function P(e){return function(e){return"boolean"==typeof e}(e)||a(e)||function(e){return"number"==typeof e&&!Number.isNaN(e)}(e)||!n(e)||r(e)&&e.every(P)||o(e)&&Object.values(e).every(P)}function E(e,t){return _async_to_generator(function(e,t){var o,i,c,p=arguments;return _ts_generator(this,function(d){return i=(o=p.length>2&&void 0!==p[2]?p[2]:{}).collector,c=o.consent,[2,(r(t)?t:[t]).reduce(function(t,p){return _async_to_generator(function(){var d,y,_,f,m,b,g,v,h,w,j,k,O,S,P,A,C,D,U,I,T;return _ts_generator(this,function(R){switch(R.label){case 0:return[4,t];case 1:return(d=R.sent())?[2,d]:(y=a(p)?{key:p}:p,Object.keys(y).length?(_=y.condition,f=y.consent,m=y.fn,b=y.key,g=y.loop,v=y.map,h=y.set,w=y.validate,j=y.value,(k=_)?[4,u(_)(e,p,i)]:[3,3]):[2]);case 2:k=!R.sent(),R.label=3;case 3:return k?[2]:f&&!function(e){var t=_object_spread({},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}),r={},n=void 0===e;return Object.keys(t).forEach(function(o){t[o]&&(r[o]=!0,e&&e[o]&&(n=!0))}),!!n&&r}(f,c)?[2,j]:(O=n(j)?j:e,m?[4,u(m)(e,p,o)]:[3,5]);case 4:O=R.sent(),R.label=5;case 5:return b&&(O=x(e,b,j)),g?(S=_sliced_to_array(g,2),P=S[0],A=S[1],"this"!==P?[3,6]:(D=[e],[3,8])):[3,11];case 6:return[4,l(e,P,o)];case 7:D=R.sent(),R.label=8;case 8:return r(C=D)?[4,Promise.all(C.map(function(e){return l(e,A,o)}))]:[3,10];case 9:O=R.sent().filter(n),R.label=10;case 10:return[3,17];case 11:return v?[4,Object.entries(v).reduce(function(t,r){var a=_sliced_to_array(r,2),i=a[0],c=a[1];return _async_to_generator(function(){var r,a;return _ts_generator(this,function(s){switch(s.label){case 0:return[4,t];case 1:return r=s.sent(),[4,l(e,c,o)];case 2:return a=s.sent(),[2,(n(a)&&(r[i]=a),r)]}})})()},Promise.resolve({}))]:[3,13];case 12:return O=R.sent(),[3,16];case 13:return(U=h)?[4,Promise.all(h.map(function(t){return E(e,t,o)}))]:[3,15];case 14:U=O=R.sent(),R.label=15;case 15:R.label=16;case 16:R.label=17;case 17:return(I=w)?[4,u(w)(O)]:[3,19];case 18:I=!R.sent(),R.label=19;case 19:return I&&(O=void 0),T=s(O),[2,n(T)?T:s(j)]}})})()},Promise.resolve(void 0))]})}).apply(this,arguments)}var A={},C={};h(C,{destinationPiwikProExamples:function(){return H}});var D={};h(D,{ecommerceAddToCart:function(){return y},ecommerceCartUpdate:function(){return f},ecommerceOrder:function(){return d},ecommerceProductDetailView:function(){return _}});var U={};h(U,{config:function(){return G},ecommerceAddToCart:function(){return q},ecommerceCartUpdate:function(){return V},ecommerceOrder:function(){return R},ecommerceProductDetailView:function(){return z}});var I,T={sku:"data.id",name:"data.name",price:"data.price",quantity:{value:1},variant:{key:"data.color"},customDimensions:{map:{1:"data.size"}}},R={name:"ecommerceOrder",data:{set:[{loop:["nested",{condition:function(e){return o(e)&&"product"===e.type},map:T}]},{map:{orderId:"data.id",grandTotal:"data.total",tax:"data.taxes",shipping:"data.shipping"}},{map:{currencyCode:{value:"EUR"}}}]}},q={name:"ecommerceAddToCart",data:{set:[{set:[{map:T}]},{map:{currencyCode:{value:"EUR"}}}]}},z={name:"ecommerceProductDetailView",data:{set:[{set:[{map:T}]},{map:{currencyCode:{value:"EUR"}}}]}},V={name:"ecommerceCartUpdate",data:{set:[{loop:["nested",{condition:function(e){return o(e)&&"product"===e.type},map:T}]},"data.value",{map:{currencyCode:{value:"EUR"}}}]}},G={order:{complete:R},product:{add:q,view:z},cart:{view:V}},H={events:D,mapping:U},N={type:"piwikpro",config:{},init:function(e){var t=e.config,r=e.wrap,n=window,o=t.settings,a=void 0===o?{}:o,i=t.loadScript,c=a.appId,s=a.url;if(!c||!s)return!1;n._paq=n._paq||[];var u=r("_paq.push",n._paq.push);i&&(!function(e){var t=document.createElement("script");t.type="text/javascript",t.src=e+"ppms.js",t.async=!0,t.defer=!0,document.head.appendChild(t)}(s),u(["setTrackerUrl",s+"ppms.php"]),u(["setSiteId",c])),!1!==a.linkTracking&&u(["enableLinkTracking"])},push:function(e,t){return _async_to_generator(function(e,t){var n,o,a,i,c,s,u,p,d;return _ts_generator(this,function(y){switch(y.label){case 0:return t.config,n=t.mapping,o=void 0===n?{}:n,a=t.data,i=t.wrap,c=i("_paq.push",window._paq.push),"page view"!==e.event||o.settings?[3,2]:(s=["trackPageView"],[4,l(e,"data.title")]);case 1:return c.apply(void 0,[s.concat([y.sent()])]),[2];case 2:return u=o.settings||{},p=r(a)?a:[a],c([e.event].concat(_to_consumable_array(p))),u.goalId&&(d=u.goalValue?l(e,u.goalValue):void 0,c(["trackGoal",u.goalId,d])),[2]}})}).apply(this,arguments)}},M=N;return I=w,function(e,t,r,n){if(t&&"object"===(void 0===t?"undefined":_type_of(t))||"function"==typeof t){var o=!0,a=!1,i=void 0;try{for(var c,s=function(){var o=c.value;v.call(e,o)||o===r||m(e,o,{get:function(){return t[o]},enumerable:!(n=b(t,o))||n.enumerable})},u=g(t)[Symbol.iterator]();!(o=(c=u.next()).done);o=!0)s()}catch(e){a=!0,i=e}finally{try{o||null==u.return||u.return()}finally{if(a)throw i}}}return e}(m({},"__esModule",{value:!0}),I)}();
|
|
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 asyncGeneratorStep(e,t,r,n,o,a,i){try{var c=e[a](i),s=c.value}catch(e){return void r(e)}c.done?t(s):Promise.resolve(s).then(n,o)}function _async_to_generator(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var a=e.apply(t,r);function i(e){asyncGeneratorStep(a,n,o,i,c,"next",e)}function c(e){asyncGeneratorStep(a,n,o,i,c,"throw",e)}i(void 0)})}}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 _instanceof(e,t){return null!=t&&"undefined"!=typeof Symbol&&t[Symbol.hasInstance]?!!t[Symbol.hasInstance](e):e instanceof t}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,o,a=[],i=!0,c=!1;try{for(r=r.call(e);!(i=(n=r.next()).done)&&(a.push(n.value),!t||a.length!==t);i=!0);}catch(e){c=!0,o=e}finally{try{i||null==r.return||r.return()}finally{if(c)throw o}}return a}}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}}function _ts_generator(e,t){var r,n,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return i.next=c(0),i.throw=c(1),i.return=c(2),"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function c(c){return function(s){return function(c){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,c[0]&&(a=0)),a;)try{if(r=1,n&&(o=2&c[0]?n.return:c[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,c[1])).done)return o;switch(n=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,n=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==c[0]&&2!==c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=t.call(e,a)}catch(e){c=[6,e],n=0}finally{r=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}([c,s])}}}var Destination=function(){var e,t,r=function(e){return Array.isArray(e)},n=function(e){return void 0!==e},o=function(e){return"object"==(void 0===e?"undefined":_type_of(e))&&null!==e&&!r(e)&&"[object Object]"===Object.prototype.toString.call(e)},a=function(e){return"string"==typeof e},i=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,o=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({},x,r);var n=Object.entries(t).reduce(function(t,n){var o=_sliced_to_array(n,2),a=o[0],i=o[1],c=e[a];return r.merge&&Array.isArray(c)&&Array.isArray(i)?t[a]=i.reduce(function(e,t){return e.includes(t)?e:_to_consumable_array(e).concat([t])},_to_consumable_array(c)):(r.extend||a in e)&&(t[a]=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:P,tagging:1},source:{type:"web",id:"https://localhost:80",previous_id:"http://remotehost:9001"}},e,{merge:!1});if(e.name){var a,i=_sliced_to_array(null!==(a=e.name.split(" "))&&void 0!==a?a:[],2),c=i[0],s=i[1];c&&s&&(o.entity=c,o.action=s)}return o},c=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),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 i(_object_spread_props(_object_spread({},{"cart view":{data:{currency:"EUR",value:2*n.data.price},context:{shopping:["cart",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",data:_object_spread_props(_object_spread({},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:[_object_spread_props(_object_spread({entity:"product"},n),{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"},n),{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({},n),{context:{shopping:["intent",0]},globals:{pagegroup:"shop"},nested:[],trigger:"click"}),"product view":_object_spread_props(_object_spread({},n),{context:{shopping:["detail",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"}),"product visible":{data:_object_spread_props(_object_spread({},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: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}))},s=function(e){return E(e)?e:void 0},u=function(e,t,r){return function(){for(var n=arguments.length,o=new Array(n),a=0;a<n;a++)o[a]=arguments[a];return _async_to_generator(function(){var n;return _ts_generator(this,function(a){switch(a.label){case 0:return a.trys.push([0,2,4,6]),[4,e.apply(void 0,_to_consumable_array(o))];case 1:case 3:return[2,a.sent()];case 2:return n=a.sent(),t?[4,t(n)]:[2];case 4:return[4,null==r?void 0:r()];case 5:return a.sent(),[7];case 6:return[2]}})})()}},l=function(e){return _async_to_generator(function(e){var t,a,i,c,s,l,p,d,y,_,f,m,b,g=arguments;return _ts_generator(this,function(v){switch(v.label){case 0:if(t=g.length>1&&void 0!==g[1]?g[1]:{},a=g.length>2&&void 0!==g[2]?g[2]:{},!n(e))return[2];c=o(e)&&e.consent||a.consent||(null===(i=a.collector)||void 0===i?void 0:i.consent),s=r(t)?t:[t],l=!0,p=!1,d=void 0,v.label=1;case 1:v.trys.push([1,6,7,8]),y=s[Symbol.iterator](),v.label=2;case 2:return(l=(_=y.next()).done)?[3,5]:(f=_.value,[4,u(A)(e,f,_object_spread_props(_object_spread({},a),{consent:c}))]);case 3:if(m=v.sent(),n(m))return[2,m];v.label=4;case 4:return l=!0,[3,2];case 5:return[3,8];case 6:return b=v.sent(),p=!0,d=b,[3,8];case 7:try{l||null==y.return||y.return()}finally{if(p)throw d}return[7];case 8:return[2]}})}).apply(this,arguments)},p=function(e){var t={window:globalThis.window,document:globalThis.document};return e?_object_spread({},t,e):t},d=function(e){return{sku:e.data.id,name:e.data.name,price:e.data.price,quantity:1,variant:e.data.color,customDimensions:{1:e.data.size}}},y=function(){var e=c("order complete");return[["ecommerceOrder",e.nested.filter(function(e){return"product"===e.entity}).map(d),{orderId:e.data.id,grandTotal:e.data.total,tax:e.data.taxes,shipping:e.data.shipping},{currencyCode:"EUR"}]]},_=function(){var e=c("product add");return[["ecommerceAddToCart",[d(e),,],{currencyCode:"EUR"}]]},f=function(){var e=c("product view");return[["ecommerceProductDetailView",[d(e),,],{currencyCode:"EUR"}]]},m=function(){var e=c("cart view");return[["ecommerceCartUpdate",e.nested.filter(function(e){return"product"===e.entity}).map(d),e.data.value,{currencyCode:"EUR"}]]},b=Object.defineProperty,g=Object.getOwnPropertyDescriptor,v=Object.getOwnPropertyNames,h=Object.prototype.hasOwnProperty,w=function(e,t){for(var r in t)b(e,r,{get:t[r],enumerable:!0})},j={};w(j,{DestinationPiwikPro:function(){return C},default:function(){return K},destinationPiwikPro:function(){return M},destinationPiwikProExamples:function(){return D}});var k=Object.getOwnPropertyNames,O=(e={"package.json":function(e,t){t.exports={name:"@walkeros/core",description:"Core types and platform-agnostic utilities for walkerOS",version:"0.1.0",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[k(e)[0]])((t={exports:{}}).exports,t),t.exports}),x={merge:!0,shallow:!0,extend:!0};function S(e){for(var t=arguments.length>2?arguments[2]:void 0,o=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:"").split("."),a=e,i=0;i<o.length;i++){var c=o[i];if("*"===c&&r(a)){var s=o.slice(i+1).join("."),u=[],l=!0,p=!1,d=void 0;try{for(var y,_=a[Symbol.iterator]();!(l=(y=_.next()).done);l=!0){var f=S(y.value,s,t);u.push(f)}}catch(e){p=!0,d=e}finally{try{l||null==_.return||_.return()}finally{if(p)throw d}}return u}if(!(a=_instanceof(a,Object)?a[c]:void 0))break}return n(a)?a:t}var P=O().version;function E(e){return function(e){return"boolean"==typeof e}(e)||a(e)||function(e){return"number"==typeof e&&!Number.isNaN(e)}(e)||!n(e)||r(e)&&e.every(E)||o(e)&&Object.values(e).every(E)}function A(e,t){return _async_to_generator(function(e,t){var o,i,c,p=arguments;return _ts_generator(this,function(d){return i=(o=p.length>2&&void 0!==p[2]?p[2]:{}).collector,c=o.consent,[2,(r(t)?t:[t]).reduce(function(t,p){return _async_to_generator(function(){var d,y,_,f,m,b,g,v,h,w,j,k,O,x,P,E,C,D,U,I,T;return _ts_generator(this,function(R){switch(R.label){case 0:return[4,t];case 1:return(d=R.sent())?[2,d]:(y=a(p)?{key:p}:p,Object.keys(y).length?(_=y.condition,f=y.consent,m=y.fn,b=y.key,g=y.loop,v=y.map,h=y.set,w=y.validate,j=y.value,(k=_)?[4,u(_)(e,p,i)]:[3,3]):[2]);case 2:k=!R.sent(),R.label=3;case 3:return k?[2]:f&&!function(e){var t=_object_spread({},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}),r={},n=void 0===e;return Object.keys(t).forEach(function(o){t[o]&&(r[o]=!0,e&&e[o]&&(n=!0))}),!!n&&r}(f,c)?[2,j]:(O=n(j)?j:e,m?[4,u(m)(e,p,o)]:[3,5]);case 4:O=R.sent(),R.label=5;case 5:return b&&(O=S(e,b,j)),g?(x=_sliced_to_array(g,2),P=x[0],E=x[1],"this"!==P?[3,6]:(D=[e],[3,8])):[3,11];case 6:return[4,l(e,P,o)];case 7:D=R.sent(),R.label=8;case 8:return r(C=D)?[4,Promise.all(C.map(function(e){return l(e,E,o)}))]:[3,10];case 9:O=R.sent().filter(n),R.label=10;case 10:return[3,17];case 11:return v?[4,Object.entries(v).reduce(function(t,r){var a=_sliced_to_array(r,2),i=a[0],c=a[1];return _async_to_generator(function(){var r,a;return _ts_generator(this,function(s){switch(s.label){case 0:return[4,t];case 1:return r=s.sent(),[4,l(e,c,o)];case 2:return a=s.sent(),[2,(n(a)&&(r[i]=a),r)]}})})()},Promise.resolve({}))]:[3,13];case 12:return O=R.sent(),[3,16];case 13:return(U=h)?[4,Promise.all(h.map(function(t){return A(e,t,o)}))]:[3,15];case 14:U=O=R.sent(),R.label=15;case 15:R.label=16;case 16:R.label=17;case 17:return(I=w)?[4,u(w)(O)]:[3,19];case 18:I=!R.sent(),R.label=19;case 19:return I&&(O=void 0),T=s(O),[2,n(T)?T:s(j)]}})})()},Promise.resolve(void 0))]})}).apply(this,arguments)}var C={},D={};w(D,{destinationPiwikProExamples:function(){return N}});var U={};w(U,{ecommerceAddToCart:function(){return _},ecommerceCartUpdate:function(){return m},ecommerceOrder:function(){return y},ecommerceProductDetailView:function(){return f}});var I={};w(I,{config:function(){return H},ecommerceAddToCart:function(){return V},ecommerceCartUpdate:function(){return G},ecommerceOrder:function(){return z},ecommerceProductDetailView:function(){return q}});var T,R={sku:"data.id",name:"data.name",price:"data.price",quantity:{value:1},variant:{key:"data.color"},customDimensions:{map:{1:"data.size"}}},z={name:"ecommerceOrder",data:{set:[{loop:["nested",{condition:function(e){return o(e)&&"product"===e.entity},map:R}]},{map:{orderId:"data.id",grandTotal:"data.total",tax:"data.taxes",shipping:"data.shipping"}},{map:{currencyCode:{value:"EUR"}}}]}},V={name:"ecommerceAddToCart",data:{set:[{set:[{map:R}]},{map:{currencyCode:{value:"EUR"}}}]}},q={name:"ecommerceProductDetailView",data:{set:[{set:[{map:R}]},{map:{currencyCode:{value:"EUR"}}}]}},G={name:"ecommerceCartUpdate",data:{set:[{loop:["nested",{condition:function(e){return o(e)&&"product"===e.entity},map:R}]},"data.value",{map:{currencyCode:{value:"EUR"}}}]}},H={order:{complete:z},product:{add:V,view:q},cart:{view:G}},N={events:U,mapping:I},M={type:"piwikpro",config:{},init:function(e){var t=e.config,r=e.env,n=p(r).window,o=t.settings,a=void 0===o?{}:o,i=t.loadScript,c=a.appId,s=a.url;if(!c||!s)return!1;n._paq=n._paq||[];var u=n._paq.push;return i&&(!function(e,t){var r=p(t).document,n=r.createElement("script");n.type="text/javascript",n.src=e+"ppms.js",n.async=!0,n.defer=!0,r.head.appendChild(n)}(s,r),u(["setTrackerUrl",s+"ppms.php"]),u(["setSiteId",c])),!1!==a.linkTracking&&u(["enableLinkTracking"]),t},push:function(e,t){return _async_to_generator(function(e,t){var n,o,a,i,c,s,u,d,y,_,f;return _ts_generator(this,function(m){switch(m.label){case 0:return t.config,n=t.mapping,o=void 0===n?{}:n,a=t.data,i=t.env,c=p(i),s=c.window,u=s._paq.push,"page view"!==e.name||o.settings?[3,2]:(d=["trackPageView"],[4,l(e,"data.title")]);case 1:return u.apply(void 0,[d.concat([m.sent()])]),[2];case 2:return y=o.settings||{},_=r(a)?a:[a],u([e.name].concat(_to_consumable_array(_))),y.goalId&&(f=y.goalValue?l(e,y.goalValue):void 0,u(["trackGoal",y.goalId,f])),[2]}})}).apply(this,arguments)}},K=M;return T=j,function(e,t,r,n){if(t&&"object"===(void 0===t?"undefined":_type_of(t))||"function"==typeof t){var o=!0,a=!1,i=void 0;try{for(var c,s=function(){var o=c.value;h.call(e,o)||o===r||b(e,o,{get:function(){return t[o]},enumerable:!(n=g(t,o))||n.enumerable})},u=v(t)[Symbol.iterator]();!(o=(c=u.next()).done);o=!0)s()}catch(e){a=!0,i=e}finally{try{o||null==u.return||u.return()}finally{if(a)throw i}}}return e}(b({},"__esModule",{value:!0}),T)}();
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e,t
|
|
1
|
+
"use strict";var e,t=Object.defineProperty,a=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,n=Object.prototype.hasOwnProperty,o=(e,a)=>{for(var r in a)t(e,r,{get:a[r],enumerable:!0})},i={};o(i,{DestinationPiwikPro:()=>p,default:()=>j,destinationPiwikPro:()=>q,destinationPiwikProExamples:()=>m}),module.exports=(e=i,((e,o,i,c)=>{if(o&&"object"==typeof o||"function"==typeof o)for(let d of r(o))n.call(e,d)||d===i||t(e,d,{get:()=>o[d],enumerable:!(c=a(o,d))||c.enumerable});return e})(t({},"__esModule",{value:!0}),e));var c=require("@walkeros/core"),d=require("@walkeros/web-core"),p={},m={};o(m,{destinationPiwikProExamples:()=>h});var s={};o(s,{ecommerceAddToCart:()=>v,ecommerceCartUpdate:()=>y,ecommerceOrder:()=>g,ecommerceProductDetailView:()=>w});var u=require("@walkeros/core");function l(e){return{sku:e.data.id,name:e.data.name,price:e.data.price,quantity:1,variant:e.data.color,customDimensions:{1:e.data.size}}}function g(){const e=(0,u.getEvent)("order complete");return[["ecommerceOrder",e.nested.filter(e=>"product"===e.entity).map(l),{orderId:e.data.id,grandTotal:e.data.total,tax:e.data.taxes,shipping:e.data.shipping},{currencyCode:"EUR"}]]}function v(){return[["ecommerceAddToCart",[l((0,u.getEvent)("product add")),,],{currencyCode:"EUR"}]]}function w(){return[["ecommerceProductDetailView",[l((0,u.getEvent)("product view")),,],{currencyCode:"EUR"}]]}function y(){const e=(0,u.getEvent)("cart view");return[["ecommerceCartUpdate",e.nested.filter(e=>"product"===e.entity).map(l),e.data.value,{currencyCode:"EUR"}]]}var f={};o(f,{config:()=>b,ecommerceAddToCart:()=>P,ecommerceCartUpdate:()=>U,ecommerceOrder:()=>C,ecommerceProductDetailView:()=>O});var k=require("@walkeros/core"),E={sku:"data.id",name:"data.name",price:"data.price",quantity:{value:1},variant:{key:"data.color"},customDimensions:{map:{1:"data.size"}}},C={name:"ecommerceOrder",data:{set:[{loop:["nested",{condition:e=>(0,k.isObject)(e)&&"product"===e.entity,map:E}]},{map:{orderId:"data.id",grandTotal:"data.total",tax:"data.taxes",shipping:"data.shipping"}},{map:{currencyCode:{value:"EUR"}}}]}},P={name:"ecommerceAddToCart",data:{set:[{set:[{map:E}]},{map:{currencyCode:{value:"EUR"}}}]}},O={name:"ecommerceProductDetailView",data:{set:[{set:[{map:E}]},{map:{currencyCode:{value:"EUR"}}}]}},U={name:"ecommerceCartUpdate",data:{set:[{loop:["nested",{condition:e=>(0,k.isObject)(e)&&"product"===e.entity,map:E}]},"data.value",{map:{currencyCode:{value:"EUR"}}}]}},b={order:{complete:C},product:{add:P,view:O},cart:{view:U}},h={events:s,mapping:f},q={type:"piwikpro",config:{},init({config:e,env:t}){const{window:a}=(0,d.getEnvironment)(t),r=a,{settings:n={},loadScript:o}=e,{appId:i,url:c}=n;if(!i||!c)return!1;r._paq=r._paq||[];const p=r._paq.push;return o&&(!function(e,t){const{document:a}=(0,d.getEnvironment)(t),r=a,n=r.createElement("script");n.type="text/javascript",n.src=e+"ppms.js",n.async=!0,n.defer=!0,r.head.appendChild(n)}(c,t),p(["setTrackerUrl",c+"ppms.php"]),p(["setSiteId",i])),!1!==n.linkTracking&&p(["enableLinkTracking"]),e},async push(e,{config:t,mapping:a={},data:r,env:n}){const{window:o}=(0,d.getEnvironment)(n),i=o._paq.push;if("page view"===e.name&&!a.settings)return void i(["trackPageView",await(0,c.getMappingValue)(e,"data.title")]);const p=a.settings||{},m=(0,c.isArray)(r)?r:[r];if(i([e.name,...m]),p.goalId){const t=p.goalValue?(0,c.getMappingValue)(e,p.goalValue):void 0;i(["trackGoal",p.goalId,t])}}};var j=q;//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/types/index.ts","../src/examples/index.ts","../src/examples/events.ts","../src/examples/mapping.ts"],"sourcesContent":["import type { Settings, Mapping, Destination } from './types';\nimport { getMappingValue, isArray } from '@walkeros/core';\n\n// Types\nexport * as DestinationPiwikPro from './types';\n\n// Examples\nexport * as destinationPiwikProExamples from './examples';\n\nexport const destinationPiwikPro: Destination = {\n type: 'piwikpro',\n\n config: {},\n\n init({ config, wrap }) {\n const w = window;\n const { settings = {} as Partial<Settings>, loadScript } = config;\n const { appId, url } = settings;\n\n // Required parameters\n if (!appId || !url) return false;\n\n // Set up the Piwik Pro interface _paq\n w._paq = w._paq || [];\n\n const paq = wrap('_paq.push', w._paq.push);\n if (loadScript) {\n // Load the JavaScript Tracking Client\n addScript(url);\n\n // Register the tracker url only with script loading\n paq(['setTrackerUrl', url + 'ppms.php']);\n\n // Register app id\n paq(['setSiteId', appId]);\n }\n\n // Enable download and outlink tracking if not disabled\n if (settings.linkTracking !== false) paq(['enableLinkTracking']);\n },\n\n async push(event, { config, mapping = {}, data, wrap }) {\n const paq = wrap('_paq.push', window._paq!.push);\n\n // Send pageviews if not disabled\n if (event.event === 'page view' && !mapping.settings) {\n paq(['trackPageView', await getMappingValue(event, 'data.title')]);\n return;\n }\n\n const eventMapping: Mapping = mapping.settings || {};\n\n const parameters = isArray(data) ? data : [data];\n\n paq([event.event, ...parameters]);\n\n if (eventMapping.goalId) {\n const goalValue = eventMapping.goalValue\n ? getMappingValue(event, eventMapping.goalValue)\n : undefined;\n\n paq([\n 'trackGoal',\n eventMapping.goalId,\n goalValue,\n // @TODO dimensions\n ]);\n }\n },\n};\n\nfunction addScript(url: string) {\n const script = document.createElement('script');\n script.type = 'text/javascript';\n script.src = url + 'ppms.js';\n script.async = true;\n script.defer = true;\n document.head.appendChild(script);\n}\n\nexport default destinationPiwikPro;\n","import type { Mapping as WalkerOSMapping, Elb } from '@walkeros/core';\nimport type { DestinationWeb } from '@walkeros/web-core';\n\ndeclare global {\n // Augment the global WalkerOS namespace with destination-specific types\n namespace WalkerOS {\n interface Elb extends Elb.RegisterDestination<Destination, Config> {}\n }\n\n interface Window {\n _paq?: Array<unknown>;\n }\n}\n\nexport type Destination = DestinationWeb.Destination<Settings, Mapping>;\nexport type Config = DestinationWeb.Config<Settings, Mapping>;\n\n// Destination-specific settings (internal usage)\nexport interface Settings {\n appId: string;\n // dimensions?: Dimensions;\n linkTracking?: boolean;\n url: string;\n}\n\n// Single event transformation rule\nexport interface Mapping {\n // dimensions?: Dimensions;\n goalId?: string;\n goalValue?: string;\n}\n\nexport type Rule = WalkerOSMapping.Rule<Mapping>;\nexport type Rules = WalkerOSMapping.Rules<Rule>;\n\nexport interface Dimensions {\n [i: number]: string;\n}\n","import * as events from './events';\nimport * as mapping from './mapping';\n\nexport const destinationPiwikProExamples = {\n events,\n mapping\n};\n","import type { WalkerOS } from '@walkeros/core';\nimport { getEvent } from '@walkeros/core';\n\nfunction getProduct(entity: WalkerOS.Entity | WalkerOS.Event) {\n return {\n sku: entity.data.id,\n name: entity.data.name,\n price: entity.data.price,\n quantity: 1,\n variant: entity.data.color,\n customDimensions: {\n 1: entity.data.size,\n },\n };\n}\n\nexport function ecommerceOrder(): unknown[] {\n const event = getEvent('order complete');\n\n return [\n [\n 'ecommerceOrder',\n event.nested.filter((item) => item.type === 'product').map(getProduct),\n {\n orderId: event.data.id,\n grandTotal: event.data.total,\n tax: event.data.taxes,\n shipping: event.data.shipping,\n },\n { currencyCode: 'EUR' },\n ],\n ];\n}\n\nexport function ecommerceAddToCart(): unknown[] {\n const event = getEvent('product add');\n\n return [\n ['ecommerceAddToCart', [getProduct(event), ,], { currencyCode: 'EUR' }],\n ];\n}\n\nexport function ecommerceProductDetailView(): unknown[] {\n const event = getEvent('product view');\n\n return [\n [\n 'ecommerceProductDetailView',\n [getProduct(event), ,],\n { currencyCode: 'EUR' },\n ],\n ];\n}\n\nexport function ecommerceCartUpdate(): unknown[] {\n const event = getEvent('cart view');\n\n return [\n [\n 'ecommerceCartUpdate',\n event.nested.filter((item) => item.type === 'product').map(getProduct),\n event.data.value,\n { currencyCode: 'EUR' },\n ],\n ];\n}\n","import type { Mapping } from '@walkeros/core';\nimport type { DestinationPiwikPro } from '..';\nimport { isObject } from '@walkeros/core';\n\nconst productMap = {\n sku: 'data.id',\n name: 'data.name',\n price: 'data.price',\n quantity: { value: 1 },\n variant: { key: 'data.color' },\n customDimensions: {\n map: {\n 1: 'data.size',\n },\n },\n};\n\nexport const ecommerceOrder: DestinationPiwikPro.Rule = {\n name: 'ecommerceOrder',\n data: {\n set: [\n {\n loop: [\n 'nested',\n {\n condition: (entity) =>\n isObject(entity) && entity.type === 'product',\n map: productMap,\n },\n ],\n },\n {\n map: {\n orderId: 'data.id',\n grandTotal: 'data.total',\n tax: 'data.taxes',\n shipping: 'data.shipping',\n },\n },\n {\n map: {\n currencyCode: { value: 'EUR' },\n },\n },\n ],\n },\n};\n\nexport const ecommerceAddToCart: DestinationPiwikPro.Rule = {\n name: 'ecommerceAddToCart',\n data: {\n set: [\n {\n set: [\n {\n map: productMap,\n },\n ],\n },\n {\n map: {\n currencyCode: { value: 'EUR' },\n },\n },\n ],\n },\n};\n\nexport const ecommerceProductDetailView: DestinationPiwikPro.Rule = {\n name: 'ecommerceProductDetailView',\n data: {\n set: [\n {\n set: [\n {\n map: productMap,\n },\n ],\n },\n {\n map: {\n currencyCode: { value: 'EUR' },\n },\n },\n ],\n },\n};\n\nexport const ecommerceCartUpdate: DestinationPiwikPro.Rule = {\n name: 'ecommerceCartUpdate',\n data: {\n set: [\n {\n loop: [\n 'nested',\n {\n condition: (entity) =>\n isObject(entity) && entity.type === 'product',\n map: productMap,\n },\n ],\n },\n 'data.value',\n {\n map: {\n currencyCode: { value: 'EUR' },\n },\n },\n ],\n },\n};\n\nexport const config = {\n order: { complete: ecommerceOrder },\n product: { add: ecommerceAddToCart, view: ecommerceProductDetailView },\n cart: { view: ecommerceCartUpdate },\n} satisfies DestinationPiwikPro.Rules;\n"],"mappings":"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","names":["ecommerceAddToCart","ecommerceCartUpdate","ecommerceOrder","ecommerceProductDetailView","ecommerceOrder","ecommerceAddToCart","ecommerceProductDetailView","ecommerceCartUpdate","config","w"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/types/index.ts","../src/examples/index.ts","../src/examples/events.ts","../src/examples/mapping.ts"],"sourcesContent":["import type { Settings, Mapping, Destination } from './types';\nimport type { DestinationWeb } from '@walkeros/web-core';\nimport { getMappingValue, isArray } from '@walkeros/core';\nimport { getEnvironment } from '@walkeros/web-core';\n\n// Types\nexport * as DestinationPiwikPro from './types';\n\n// Examples\nexport * as destinationPiwikProExamples from './examples';\n\nexport const destinationPiwikPro: Destination = {\n type: 'piwikpro',\n\n config: {},\n\n init({ config, env }) {\n const { window } = getEnvironment(env);\n const w = window as Window;\n const { settings = {} as Partial<Settings>, loadScript } = config;\n const { appId, url } = settings;\n\n // Required parameters\n if (!appId || !url) return false;\n\n // Set up the Piwik Pro interface _paq\n w._paq = w._paq || [];\n\n const paq = w._paq.push;\n if (loadScript) {\n // Load the JavaScript Tracking Client\n addScript(url, env);\n\n // Register the tracker url only with script loading\n paq(['setTrackerUrl', url + 'ppms.php']);\n\n // Register app id\n paq(['setSiteId', appId]);\n }\n\n // Enable download and outlink tracking if not disabled\n if (settings.linkTracking !== false) paq(['enableLinkTracking']);\n\n return config;\n },\n\n async push(event, { config, mapping = {}, data, env }) {\n const { window } = getEnvironment(env);\n const paq = (window as Window)._paq!.push;\n\n // Send pageviews if not disabled\n if (event.name === 'page view' && !mapping.settings) {\n paq(['trackPageView', await getMappingValue(event, 'data.title')]);\n return;\n }\n\n const eventMapping: Mapping = mapping.settings || {};\n\n const parameters = isArray(data) ? data : [data];\n\n paq([event.name, ...parameters]);\n\n if (eventMapping.goalId) {\n const goalValue = eventMapping.goalValue\n ? getMappingValue(event, eventMapping.goalValue)\n : undefined;\n\n paq([\n 'trackGoal',\n eventMapping.goalId,\n goalValue,\n // @TODO dimensions\n ]);\n }\n },\n};\n\nfunction addScript(url: string, env?: DestinationWeb.Environment) {\n const { document } = getEnvironment(env);\n const doc = document as Document;\n const script = doc.createElement('script');\n script.type = 'text/javascript';\n script.src = url + 'ppms.js';\n script.async = true;\n script.defer = true;\n doc.head.appendChild(script);\n}\n\nexport default destinationPiwikPro;\n","import type { Mapping as WalkerOSMapping, Elb } from '@walkeros/core';\nimport type { DestinationWeb } from '@walkeros/web-core';\n\ndeclare global {\n // Augment the global WalkerOS namespace with destination-specific types\n namespace WalkerOS {\n interface Elb extends Elb.RegisterDestination<Destination, Config> {}\n }\n\n interface Window {\n _paq?: Array<unknown>;\n }\n}\n\nexport type Destination = DestinationWeb.Destination<Settings, Mapping>;\nexport type Config = DestinationWeb.Config<Settings, Mapping>;\n\n// Destination-specific settings (internal usage)\nexport interface Settings {\n appId: string;\n // dimensions?: Dimensions;\n linkTracking?: boolean;\n url: string;\n}\n\n// Single event transformation rule\nexport interface Mapping {\n // dimensions?: Dimensions;\n goalId?: string;\n goalValue?: string;\n}\n\nexport type Rule = WalkerOSMapping.Rule<Mapping>;\nexport type Rules = WalkerOSMapping.Rules<Rule>;\n\nexport interface Dimensions {\n [i: number]: string;\n}\n","import * as events from './events';\nimport * as mapping from './mapping';\n\nexport const destinationPiwikProExamples = {\n events,\n mapping\n};\n","import type { WalkerOS } from '@walkeros/core';\nimport { getEvent } from '@walkeros/core';\n\nfunction getProduct(entity: WalkerOS.Entity | WalkerOS.Event) {\n return {\n sku: entity.data.id,\n name: entity.data.name,\n price: entity.data.price,\n quantity: 1,\n variant: entity.data.color,\n customDimensions: {\n 1: entity.data.size,\n },\n };\n}\n\nexport function ecommerceOrder(): unknown[] {\n const event = getEvent('order complete');\n\n return [\n [\n 'ecommerceOrder',\n event.nested.filter((item) => item.entity === 'product').map(getProduct),\n {\n orderId: event.data.id,\n grandTotal: event.data.total,\n tax: event.data.taxes,\n shipping: event.data.shipping,\n },\n { currencyCode: 'EUR' },\n ],\n ];\n}\n\nexport function ecommerceAddToCart(): unknown[] {\n const event = getEvent('product add');\n\n return [\n ['ecommerceAddToCart', [getProduct(event), ,], { currencyCode: 'EUR' }],\n ];\n}\n\nexport function ecommerceProductDetailView(): unknown[] {\n const event = getEvent('product view');\n\n return [\n [\n 'ecommerceProductDetailView',\n [getProduct(event), ,],\n { currencyCode: 'EUR' },\n ],\n ];\n}\n\nexport function ecommerceCartUpdate(): unknown[] {\n const event = getEvent('cart view');\n\n return [\n [\n 'ecommerceCartUpdate',\n event.nested.filter((item) => item.entity === 'product').map(getProduct),\n event.data.value,\n { currencyCode: 'EUR' },\n ],\n ];\n}\n","import type { DestinationPiwikPro } from '..';\nimport { isObject } from '@walkeros/core';\n\nconst productMap = {\n sku: 'data.id',\n name: 'data.name',\n price: 'data.price',\n quantity: { value: 1 },\n variant: { key: 'data.color' },\n customDimensions: {\n map: {\n 1: 'data.size',\n },\n },\n};\n\nexport const ecommerceOrder: DestinationPiwikPro.Rule = {\n name: 'ecommerceOrder',\n data: {\n set: [\n {\n loop: [\n 'nested',\n {\n condition: (entity) =>\n isObject(entity) && entity.entity === 'product',\n map: productMap,\n },\n ],\n },\n {\n map: {\n orderId: 'data.id',\n grandTotal: 'data.total',\n tax: 'data.taxes',\n shipping: 'data.shipping',\n },\n },\n {\n map: {\n currencyCode: { value: 'EUR' },\n },\n },\n ],\n },\n};\n\nexport const ecommerceAddToCart: DestinationPiwikPro.Rule = {\n name: 'ecommerceAddToCart',\n data: {\n set: [\n {\n set: [\n {\n map: productMap,\n },\n ],\n },\n {\n map: {\n currencyCode: { value: 'EUR' },\n },\n },\n ],\n },\n};\n\nexport const ecommerceProductDetailView: DestinationPiwikPro.Rule = {\n name: 'ecommerceProductDetailView',\n data: {\n set: [\n {\n set: [\n {\n map: productMap,\n },\n ],\n },\n {\n map: {\n currencyCode: { value: 'EUR' },\n },\n },\n ],\n },\n};\n\nexport const ecommerceCartUpdate: DestinationPiwikPro.Rule = {\n name: 'ecommerceCartUpdate',\n data: {\n set: [\n {\n loop: [\n 'nested',\n {\n condition: (entity) =>\n isObject(entity) && entity.entity === 'product',\n map: productMap,\n },\n ],\n },\n 'data.value',\n {\n map: {\n currencyCode: { value: 'EUR' },\n },\n },\n ],\n },\n};\n\nexport const config = {\n order: { complete: ecommerceOrder },\n product: { add: ecommerceAddToCart, view: ecommerceProductDetailView },\n cart: { view: ecommerceCartUpdate },\n} satisfies DestinationPiwikPro.Rules;\n"],"mappings":"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","names":["import_core","ecommerceAddToCart","ecommerceCartUpdate","ecommerceOrder","ecommerceProductDetailView","import_core","config"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var e
|
|
1
|
+
var e=Object.defineProperty,a=(a,t)=>{for(var r in t)e(a,r,{get:t[r],enumerable:!0})};import{getMappingValue as t,isArray as r}from"@walkeros/core";import{getEnvironment as o}from"@walkeros/web-core";var c={},n={};a(n,{destinationPiwikProExamples:()=>P});var i={};a(i,{ecommerceAddToCart:()=>s,ecommerceCartUpdate:()=>l,ecommerceOrder:()=>p,ecommerceProductDetailView:()=>u});import{getEvent as d}from"@walkeros/core";function m(e){return{sku:e.data.id,name:e.data.name,price:e.data.price,quantity:1,variant:e.data.color,customDimensions:{1:e.data.size}}}function p(){const e=d("order complete");return[["ecommerceOrder",e.nested.filter(e=>"product"===e.entity).map(m),{orderId:e.data.id,grandTotal:e.data.total,tax:e.data.taxes,shipping:e.data.shipping},{currencyCode:"EUR"}]]}function s(){return[["ecommerceAddToCart",[m(d("product add")),,],{currencyCode:"EUR"}]]}function u(){return[["ecommerceProductDetailView",[m(d("product view")),,],{currencyCode:"EUR"}]]}function l(){const e=d("cart view");return[["ecommerceCartUpdate",e.nested.filter(e=>"product"===e.entity).map(m),e.data.value,{currencyCode:"EUR"}]]}var v={};a(v,{config:()=>U,ecommerceAddToCart:()=>y,ecommerceCartUpdate:()=>C,ecommerceOrder:()=>f,ecommerceProductDetailView:()=>k});import{isObject as g}from"@walkeros/core";var w={sku:"data.id",name:"data.name",price:"data.price",quantity:{value:1},variant:{key:"data.color"},customDimensions:{map:{1:"data.size"}}},f={name:"ecommerceOrder",data:{set:[{loop:["nested",{condition:e=>g(e)&&"product"===e.entity,map:w}]},{map:{orderId:"data.id",grandTotal:"data.total",tax:"data.taxes",shipping:"data.shipping"}},{map:{currencyCode:{value:"EUR"}}}]}},y={name:"ecommerceAddToCart",data:{set:[{set:[{map:w}]},{map:{currencyCode:{value:"EUR"}}}]}},k={name:"ecommerceProductDetailView",data:{set:[{set:[{map:w}]},{map:{currencyCode:{value:"EUR"}}}]}},C={name:"ecommerceCartUpdate",data:{set:[{loop:["nested",{condition:e=>g(e)&&"product"===e.entity,map:w}]},"data.value",{map:{currencyCode:{value:"EUR"}}}]}},U={order:{complete:f},product:{add:y,view:k},cart:{view:C}},P={events:i,mapping:v},E={type:"piwikpro",config:{},init({config:e,env:a}){const{window:t}=o(a),r=t,{settings:c={},loadScript:n}=e,{appId:i,url:d}=c;if(!i||!d)return!1;r._paq=r._paq||[];const m=r._paq.push;return n&&(!function(e,a){const{document:t}=o(a),r=t,c=r.createElement("script");c.type="text/javascript",c.src=e+"ppms.js",c.async=!0,c.defer=!0,r.head.appendChild(c)}(d,a),m(["setTrackerUrl",d+"ppms.php"]),m(["setSiteId",i])),!1!==c.linkTracking&&m(["enableLinkTracking"]),e},async push(e,{config:a,mapping:c={},data:n,env:i}){const{window:d}=o(i),m=d._paq.push;if("page view"===e.name&&!c.settings)return void m(["trackPageView",await t(e,"data.title")]);const p=c.settings||{},s=r(n)?n:[n];if(m([e.name,...s]),p.goalId){const a=p.goalValue?t(e,p.goalValue):void 0;m(["trackGoal",p.goalId,a])}}};var h=E;export{c as DestinationPiwikPro,h as default,E as destinationPiwikPro,n as destinationPiwikProExamples};//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types/index.ts","../src/examples/index.ts","../src/examples/events.ts","../src/examples/mapping.ts","../src/index.ts"],"sourcesContent":["import type { Mapping as WalkerOSMapping, Elb } from '@walkeros/core';\nimport type { DestinationWeb } from '@walkeros/web-core';\n\ndeclare global {\n // Augment the global WalkerOS namespace with destination-specific types\n namespace WalkerOS {\n interface Elb extends Elb.RegisterDestination<Destination, Config> {}\n }\n\n interface Window {\n _paq?: Array<unknown>;\n }\n}\n\nexport type Destination = DestinationWeb.Destination<Settings, Mapping>;\nexport type Config = DestinationWeb.Config<Settings, Mapping>;\n\n// Destination-specific settings (internal usage)\nexport interface Settings {\n appId: string;\n // dimensions?: Dimensions;\n linkTracking?: boolean;\n url: string;\n}\n\n// Single event transformation rule\nexport interface Mapping {\n // dimensions?: Dimensions;\n goalId?: string;\n goalValue?: string;\n}\n\nexport type Rule = WalkerOSMapping.Rule<Mapping>;\nexport type Rules = WalkerOSMapping.Rules<Rule>;\n\nexport interface Dimensions {\n [i: number]: string;\n}\n","import * as events from './events';\nimport * as mapping from './mapping';\n\nexport const destinationPiwikProExamples = {\n events,\n mapping\n};\n","import type { WalkerOS } from '@walkeros/core';\nimport { getEvent } from '@walkeros/core';\n\nfunction getProduct(entity: WalkerOS.Entity | WalkerOS.Event) {\n return {\n sku: entity.data.id,\n name: entity.data.name,\n price: entity.data.price,\n quantity: 1,\n variant: entity.data.color,\n customDimensions: {\n 1: entity.data.size,\n },\n };\n}\n\nexport function ecommerceOrder(): unknown[] {\n const event = getEvent('order complete');\n\n return [\n [\n 'ecommerceOrder',\n event.nested.filter((item) => item.type === 'product').map(getProduct),\n {\n orderId: event.data.id,\n grandTotal: event.data.total,\n tax: event.data.taxes,\n shipping: event.data.shipping,\n },\n { currencyCode: 'EUR' },\n ],\n ];\n}\n\nexport function ecommerceAddToCart(): unknown[] {\n const event = getEvent('product add');\n\n return [\n ['ecommerceAddToCart', [getProduct(event), ,], { currencyCode: 'EUR' }],\n ];\n}\n\nexport function ecommerceProductDetailView(): unknown[] {\n const event = getEvent('product view');\n\n return [\n [\n 'ecommerceProductDetailView',\n [getProduct(event), ,],\n { currencyCode: 'EUR' },\n ],\n ];\n}\n\nexport function ecommerceCartUpdate(): unknown[] {\n const event = getEvent('cart view');\n\n return [\n [\n 'ecommerceCartUpdate',\n event.nested.filter((item) => item.type === 'product').map(getProduct),\n event.data.value,\n { currencyCode: 'EUR' },\n ],\n ];\n}\n","import type { Mapping } from '@walkeros/core';\nimport type { DestinationPiwikPro } from '..';\nimport { isObject } from '@walkeros/core';\n\nconst productMap = {\n sku: 'data.id',\n name: 'data.name',\n price: 'data.price',\n quantity: { value: 1 },\n variant: { key: 'data.color' },\n customDimensions: {\n map: {\n 1: 'data.size',\n },\n },\n};\n\nexport const ecommerceOrder: DestinationPiwikPro.Rule = {\n name: 'ecommerceOrder',\n data: {\n set: [\n {\n loop: [\n 'nested',\n {\n condition: (entity) =>\n isObject(entity) && entity.type === 'product',\n map: productMap,\n },\n ],\n },\n {\n map: {\n orderId: 'data.id',\n grandTotal: 'data.total',\n tax: 'data.taxes',\n shipping: 'data.shipping',\n },\n },\n {\n map: {\n currencyCode: { value: 'EUR' },\n },\n },\n ],\n },\n};\n\nexport const ecommerceAddToCart: DestinationPiwikPro.Rule = {\n name: 'ecommerceAddToCart',\n data: {\n set: [\n {\n set: [\n {\n map: productMap,\n },\n ],\n },\n {\n map: {\n currencyCode: { value: 'EUR' },\n },\n },\n ],\n },\n};\n\nexport const ecommerceProductDetailView: DestinationPiwikPro.Rule = {\n name: 'ecommerceProductDetailView',\n data: {\n set: [\n {\n set: [\n {\n map: productMap,\n },\n ],\n },\n {\n map: {\n currencyCode: { value: 'EUR' },\n },\n },\n ],\n },\n};\n\nexport const ecommerceCartUpdate: DestinationPiwikPro.Rule = {\n name: 'ecommerceCartUpdate',\n data: {\n set: [\n {\n loop: [\n 'nested',\n {\n condition: (entity) =>\n isObject(entity) && entity.type === 'product',\n map: productMap,\n },\n ],\n },\n 'data.value',\n {\n map: {\n currencyCode: { value: 'EUR' },\n },\n },\n ],\n },\n};\n\nexport const config = {\n order: { complete: ecommerceOrder },\n product: { add: ecommerceAddToCart, view: ecommerceProductDetailView },\n cart: { view: ecommerceCartUpdate },\n} satisfies DestinationPiwikPro.Rules;\n","import type { Settings, Mapping, Destination } from './types';\nimport { getMappingValue, isArray } from '@walkeros/core';\n\n// Types\nexport * as DestinationPiwikPro from './types';\n\n// Examples\nexport * as destinationPiwikProExamples from './examples';\n\nexport const destinationPiwikPro: Destination = {\n type: 'piwikpro',\n\n config: {},\n\n init({ config, wrap }) {\n const w = window;\n const { settings = {} as Partial<Settings>, loadScript } = config;\n const { appId, url } = settings;\n\n // Required parameters\n if (!appId || !url) return false;\n\n // Set up the Piwik Pro interface _paq\n w._paq = w._paq || [];\n\n const paq = wrap('_paq.push', w._paq.push);\n if (loadScript) {\n // Load the JavaScript Tracking Client\n addScript(url);\n\n // Register the tracker url only with script loading\n paq(['setTrackerUrl', url + 'ppms.php']);\n\n // Register app id\n paq(['setSiteId', appId]);\n }\n\n // Enable download and outlink tracking if not disabled\n if (settings.linkTracking !== false) paq(['enableLinkTracking']);\n },\n\n async push(event, { config, mapping = {}, data, wrap }) {\n const paq = wrap('_paq.push', window._paq!.push);\n\n // Send pageviews if not disabled\n if (event.event === 'page view' && !mapping.settings) {\n paq(['trackPageView', await getMappingValue(event, 'data.title')]);\n return;\n }\n\n const eventMapping: Mapping = mapping.settings || {};\n\n const parameters = isArray(data) ? data : [data];\n\n paq([event.event, ...parameters]);\n\n if (eventMapping.goalId) {\n const goalValue = eventMapping.goalValue\n ? getMappingValue(event, eventMapping.goalValue)\n : undefined;\n\n paq([\n 'trackGoal',\n eventMapping.goalId,\n goalValue,\n // @TODO dimensions\n ]);\n }\n },\n};\n\nfunction addScript(url: string) {\n const script = document.createElement('script');\n script.type = 'text/javascript';\n script.src = url + 'ppms.js';\n script.async = true;\n script.defer = true;\n document.head.appendChild(script);\n}\n\nexport default destinationPiwikPro;\n"],"mappings":"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","names":["ecommerceAddToCart","ecommerceCartUpdate","ecommerceOrder","ecommerceProductDetailView","ecommerceOrder","ecommerceAddToCart","ecommerceProductDetailView","ecommerceCartUpdate","config","w"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/types/index.ts","../src/examples/index.ts","../src/examples/events.ts","../src/examples/mapping.ts"],"sourcesContent":["import type { Settings, Mapping, Destination } from './types';\nimport type { DestinationWeb } from '@walkeros/web-core';\nimport { getMappingValue, isArray } from '@walkeros/core';\nimport { getEnvironment } from '@walkeros/web-core';\n\n// Types\nexport * as DestinationPiwikPro from './types';\n\n// Examples\nexport * as destinationPiwikProExamples from './examples';\n\nexport const destinationPiwikPro: Destination = {\n type: 'piwikpro',\n\n config: {},\n\n init({ config, env }) {\n const { window } = getEnvironment(env);\n const w = window as Window;\n const { settings = {} as Partial<Settings>, loadScript } = config;\n const { appId, url } = settings;\n\n // Required parameters\n if (!appId || !url) return false;\n\n // Set up the Piwik Pro interface _paq\n w._paq = w._paq || [];\n\n const paq = w._paq.push;\n if (loadScript) {\n // Load the JavaScript Tracking Client\n addScript(url, env);\n\n // Register the tracker url only with script loading\n paq(['setTrackerUrl', url + 'ppms.php']);\n\n // Register app id\n paq(['setSiteId', appId]);\n }\n\n // Enable download and outlink tracking if not disabled\n if (settings.linkTracking !== false) paq(['enableLinkTracking']);\n\n return config;\n },\n\n async push(event, { config, mapping = {}, data, env }) {\n const { window } = getEnvironment(env);\n const paq = (window as Window)._paq!.push;\n\n // Send pageviews if not disabled\n if (event.name === 'page view' && !mapping.settings) {\n paq(['trackPageView', await getMappingValue(event, 'data.title')]);\n return;\n }\n\n const eventMapping: Mapping = mapping.settings || {};\n\n const parameters = isArray(data) ? data : [data];\n\n paq([event.name, ...parameters]);\n\n if (eventMapping.goalId) {\n const goalValue = eventMapping.goalValue\n ? getMappingValue(event, eventMapping.goalValue)\n : undefined;\n\n paq([\n 'trackGoal',\n eventMapping.goalId,\n goalValue,\n // @TODO dimensions\n ]);\n }\n },\n};\n\nfunction addScript(url: string, env?: DestinationWeb.Environment) {\n const { document } = getEnvironment(env);\n const doc = document as Document;\n const script = doc.createElement('script');\n script.type = 'text/javascript';\n script.src = url + 'ppms.js';\n script.async = true;\n script.defer = true;\n doc.head.appendChild(script);\n}\n\nexport default destinationPiwikPro;\n","import type { Mapping as WalkerOSMapping, Elb } from '@walkeros/core';\nimport type { DestinationWeb } from '@walkeros/web-core';\n\ndeclare global {\n // Augment the global WalkerOS namespace with destination-specific types\n namespace WalkerOS {\n interface Elb extends Elb.RegisterDestination<Destination, Config> {}\n }\n\n interface Window {\n _paq?: Array<unknown>;\n }\n}\n\nexport type Destination = DestinationWeb.Destination<Settings, Mapping>;\nexport type Config = DestinationWeb.Config<Settings, Mapping>;\n\n// Destination-specific settings (internal usage)\nexport interface Settings {\n appId: string;\n // dimensions?: Dimensions;\n linkTracking?: boolean;\n url: string;\n}\n\n// Single event transformation rule\nexport interface Mapping {\n // dimensions?: Dimensions;\n goalId?: string;\n goalValue?: string;\n}\n\nexport type Rule = WalkerOSMapping.Rule<Mapping>;\nexport type Rules = WalkerOSMapping.Rules<Rule>;\n\nexport interface Dimensions {\n [i: number]: string;\n}\n","import * as events from './events';\nimport * as mapping from './mapping';\n\nexport const destinationPiwikProExamples = {\n events,\n mapping\n};\n","import type { WalkerOS } from '@walkeros/core';\nimport { getEvent } from '@walkeros/core';\n\nfunction getProduct(entity: WalkerOS.Entity | WalkerOS.Event) {\n return {\n sku: entity.data.id,\n name: entity.data.name,\n price: entity.data.price,\n quantity: 1,\n variant: entity.data.color,\n customDimensions: {\n 1: entity.data.size,\n },\n };\n}\n\nexport function ecommerceOrder(): unknown[] {\n const event = getEvent('order complete');\n\n return [\n [\n 'ecommerceOrder',\n event.nested.filter((item) => item.entity === 'product').map(getProduct),\n {\n orderId: event.data.id,\n grandTotal: event.data.total,\n tax: event.data.taxes,\n shipping: event.data.shipping,\n },\n { currencyCode: 'EUR' },\n ],\n ];\n}\n\nexport function ecommerceAddToCart(): unknown[] {\n const event = getEvent('product add');\n\n return [\n ['ecommerceAddToCart', [getProduct(event), ,], { currencyCode: 'EUR' }],\n ];\n}\n\nexport function ecommerceProductDetailView(): unknown[] {\n const event = getEvent('product view');\n\n return [\n [\n 'ecommerceProductDetailView',\n [getProduct(event), ,],\n { currencyCode: 'EUR' },\n ],\n ];\n}\n\nexport function ecommerceCartUpdate(): unknown[] {\n const event = getEvent('cart view');\n\n return [\n [\n 'ecommerceCartUpdate',\n event.nested.filter((item) => item.entity === 'product').map(getProduct),\n event.data.value,\n { currencyCode: 'EUR' },\n ],\n ];\n}\n","import type { DestinationPiwikPro } from '..';\nimport { isObject } from '@walkeros/core';\n\nconst productMap = {\n sku: 'data.id',\n name: 'data.name',\n price: 'data.price',\n quantity: { value: 1 },\n variant: { key: 'data.color' },\n customDimensions: {\n map: {\n 1: 'data.size',\n },\n },\n};\n\nexport const ecommerceOrder: DestinationPiwikPro.Rule = {\n name: 'ecommerceOrder',\n data: {\n set: [\n {\n loop: [\n 'nested',\n {\n condition: (entity) =>\n isObject(entity) && entity.entity === 'product',\n map: productMap,\n },\n ],\n },\n {\n map: {\n orderId: 'data.id',\n grandTotal: 'data.total',\n tax: 'data.taxes',\n shipping: 'data.shipping',\n },\n },\n {\n map: {\n currencyCode: { value: 'EUR' },\n },\n },\n ],\n },\n};\n\nexport const ecommerceAddToCart: DestinationPiwikPro.Rule = {\n name: 'ecommerceAddToCart',\n data: {\n set: [\n {\n set: [\n {\n map: productMap,\n },\n ],\n },\n {\n map: {\n currencyCode: { value: 'EUR' },\n },\n },\n ],\n },\n};\n\nexport const ecommerceProductDetailView: DestinationPiwikPro.Rule = {\n name: 'ecommerceProductDetailView',\n data: {\n set: [\n {\n set: [\n {\n map: productMap,\n },\n ],\n },\n {\n map: {\n currencyCode: { value: 'EUR' },\n },\n },\n ],\n },\n};\n\nexport const ecommerceCartUpdate: DestinationPiwikPro.Rule = {\n name: 'ecommerceCartUpdate',\n data: {\n set: [\n {\n loop: [\n 'nested',\n {\n condition: (entity) =>\n isObject(entity) && entity.entity === 'product',\n map: productMap,\n },\n ],\n },\n 'data.value',\n {\n map: {\n currencyCode: { value: 'EUR' },\n },\n },\n ],\n },\n};\n\nexport const config = {\n order: { complete: ecommerceOrder },\n product: { add: ecommerceAddToCart, view: ecommerceProductDetailView },\n cart: { view: ecommerceCartUpdate },\n} satisfies DestinationPiwikPro.Rules;\n"],"mappings":"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","names":["ecommerceAddToCart","ecommerceCartUpdate","ecommerceOrder","ecommerceProductDetailView","config"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@walkeros/web-destination-piwikpro",
|
|
3
3
|
"description": "Piwik PRO destination for walkerOS",
|
|
4
|
-
"version": "0.0
|
|
4
|
+
"version": "0.1.0",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"module": "./dist/index.mjs",
|
|
@@ -30,7 +30,8 @@
|
|
|
30
30
|
"update": "npx npm-check-updates -u && npm update"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@walkeros/
|
|
33
|
+
"@walkeros/core": "0.1.0",
|
|
34
|
+
"@walkeros/web-core": "0.1.0"
|
|
34
35
|
},
|
|
35
36
|
"devDependencies": {},
|
|
36
37
|
"repository": {
|