@walkeros/web-destination-plausible 0.1.2 → 0.2.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 CHANGED
@@ -30,10 +30,10 @@ npm install @walkeros/web-destination-plausible
30
30
  Here's a basic example of how to use the Plausible destination:
31
31
 
32
32
  ```typescript
33
- import { createCollector } from '@walkeros/collector';
33
+ import { startFlow } from '@walkeros/collector';
34
34
  import { destinationPlausible } from '@walkeros/web-destination-plausible';
35
35
 
36
- const { elb } = await createCollector();
36
+ const { elb } = await startFlow();
37
37
 
38
38
  elb('walker destination', destinationPlausible, {
39
39
  settings: {
@@ -1,11 +1,5 @@
1
1
  import { WalkerOS, Mapping as Mapping$1 } from '@walkeros/core';
2
-
3
- declare function purchase$1(): unknown[];
4
- declare function customEvent$1(): unknown[];
5
-
6
- declare namespace events {
7
- export { customEvent$1 as customEvent, purchase$1 as purchase };
8
- }
2
+ import { DestinationWeb } from '@walkeros/web-core';
9
3
 
10
4
  declare global {
11
5
  interface Window {
@@ -19,8 +13,31 @@ type Plausible = (event: string, options?: {
19
13
  }) => void;
20
14
  interface Mapping {
21
15
  }
16
+ interface Env extends DestinationWeb.Env {
17
+ window: {
18
+ plausible: Plausible & {
19
+ q?: IArguments[];
20
+ };
21
+ };
22
+ }
22
23
  type Rule = Mapping$1.Rule<Mapping>;
23
24
 
25
+ declare const init: Env | undefined;
26
+ declare const push: Env;
27
+
28
+ declare const env_init: typeof init;
29
+ declare const env_push: typeof push;
30
+ declare namespace env {
31
+ export { env_init as init, env_push as push };
32
+ }
33
+
34
+ declare function purchase$1(): unknown[];
35
+ declare function customEvent$1(): unknown[];
36
+
37
+ declare namespace events {
38
+ export { customEvent$1 as customEvent, purchase$1 as purchase };
39
+ }
40
+
24
41
  declare const customEvent: Rule;
25
42
  declare const purchase: Rule;
26
43
  declare const config: {
@@ -39,4 +56,4 @@ declare namespace mapping {
39
56
  export { mapping_config as config, mapping_customEvent as customEvent, mapping_purchase as purchase };
40
57
  }
41
58
 
42
- export { events, mapping };
59
+ export { env, events, mapping };
@@ -1,11 +1,5 @@
1
1
  import { WalkerOS, Mapping as Mapping$1 } from '@walkeros/core';
2
-
3
- declare function purchase$1(): unknown[];
4
- declare function customEvent$1(): unknown[];
5
-
6
- declare namespace events {
7
- export { customEvent$1 as customEvent, purchase$1 as purchase };
8
- }
2
+ import { DestinationWeb } from '@walkeros/web-core';
9
3
 
10
4
  declare global {
11
5
  interface Window {
@@ -19,8 +13,31 @@ type Plausible = (event: string, options?: {
19
13
  }) => void;
20
14
  interface Mapping {
21
15
  }
16
+ interface Env extends DestinationWeb.Env {
17
+ window: {
18
+ plausible: Plausible & {
19
+ q?: IArguments[];
20
+ };
21
+ };
22
+ }
22
23
  type Rule = Mapping$1.Rule<Mapping>;
23
24
 
25
+ declare const init: Env | undefined;
26
+ declare const push: Env;
27
+
28
+ declare const env_init: typeof init;
29
+ declare const env_push: typeof push;
30
+ declare namespace env {
31
+ export { env_init as init, env_push as push };
32
+ }
33
+
34
+ declare function purchase$1(): unknown[];
35
+ declare function customEvent$1(): unknown[];
36
+
37
+ declare namespace events {
38
+ export { customEvent$1 as customEvent, purchase$1 as purchase };
39
+ }
40
+
24
41
  declare const customEvent: Rule;
25
42
  declare const purchase: Rule;
26
43
  declare const config: {
@@ -39,4 +56,4 @@ declare namespace mapping {
39
56
  export { mapping_config as config, mapping_customEvent as customEvent, mapping_purchase as purchase };
40
57
  }
41
58
 
42
- export { events, mapping };
59
+ export { env, events, mapping };
@@ -20,11 +20,60 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/examples/index.ts
21
21
  var examples_exports = {};
22
22
  __export(examples_exports, {
23
+ env: () => env_exports,
23
24
  events: () => events_exports,
24
25
  mapping: () => mapping_exports
25
26
  });
26
27
  module.exports = __toCommonJS(examples_exports);
27
28
 
29
+ // src/examples/env.ts
30
+ var env_exports = {};
31
+ __export(env_exports, {
32
+ init: () => init,
33
+ push: () => push
34
+ });
35
+ var noop = () => {
36
+ };
37
+ var init = {
38
+ window: {
39
+ plausible: void 0
40
+ },
41
+ document: {
42
+ createElement: () => ({
43
+ src: "",
44
+ dataset: {},
45
+ setAttribute: () => {
46
+ },
47
+ removeAttribute: () => {
48
+ }
49
+ }),
50
+ head: { appendChild: () => {
51
+ } },
52
+ querySelector: () => null
53
+ }
54
+ };
55
+ var push = {
56
+ window: {
57
+ plausible: Object.assign(noop, {
58
+ // Add queue property for analytics loading pattern
59
+ q: []
60
+ })
61
+ },
62
+ document: {
63
+ createElement: () => ({
64
+ src: "",
65
+ dataset: {},
66
+ setAttribute: () => {
67
+ },
68
+ removeAttribute: () => {
69
+ }
70
+ }),
71
+ head: { appendChild: () => {
72
+ } },
73
+ querySelector: () => null
74
+ }
75
+ };
76
+
28
77
  // src/examples/events.ts
29
78
  var events_exports = {};
30
79
  __export(events_exports, {
@@ -33,41 +82,32 @@ __export(events_exports, {
33
82
  });
34
83
 
35
84
  // ../../../core/dist/index.mjs
36
- var e;
37
- var t;
38
- var n = Object.getOwnPropertyNames;
39
- var r = (e = { "package.json"(e2, t2) {
40
- t2.exports = { name: "@walkeros/core", description: "Core types and platform-agnostic utilities for walkerOS", version: "0.1.2", 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" }] };
41
- } }, function() {
42
- return t || (0, e[n(e)[0]])((t = { exports: {} }).exports, t), t.exports;
43
- });
44
- var w = { merge: true, shallow: true, extend: true };
45
- function v(e2, t2 = {}, n2 = {}) {
46
- n2 = { ...w, ...n2 };
47
- const r2 = Object.entries(t2).reduce((t3, [r3, o]) => {
48
- const i = e2[r3];
49
- 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;
85
+ var m = { merge: true, shallow: true, extend: true };
86
+ function y(e, t = {}, n = {}) {
87
+ n = { ...m, ...n };
88
+ const r = Object.entries(t).reduce((t2, [r2, o]) => {
89
+ const i = e[r2];
90
+ return n.merge && Array.isArray(i) && Array.isArray(o) ? t2[r2] = o.reduce((e2, t3) => e2.includes(t3) ? e2 : [...e2, t3], [...i]) : (n.extend || r2 in e) && (t2[r2] = o), t2;
50
91
  }, {});
51
- return n2.shallow ? { ...e2, ...r2 } : (Object.assign(e2, r2), e2);
92
+ return n.shallow ? { ...e, ...r } : (Object.assign(e, r), e);
52
93
  }
53
- var { version: R } = r();
54
- function V(e2 = {}) {
94
+ function C(e = {}) {
55
95
  var _a;
56
- const t2 = e2.timestamp || (/* @__PURE__ */ new Date()).setHours(0, 13, 37, 0), n2 = e2.group || "gr0up", r2 = e2.count || 1, o = v({ name: "entity action", data: { string: "foo", number: 1, boolean: true, array: [0, "text", false], not: void 0 }, context: { dev: ["test", 1] }, globals: { lang: "elb" }, custom: { completely: "random" }, user: { id: "us3r", device: "c00k13", session: "s3ss10n" }, nested: [{ entity: "child", data: { is: "subordinated" }, nested: [], context: { element: ["child", 0] } }], consent: { functional: true }, id: `${t2}-${n2}-${r2}`, trigger: "test", entity: "entity", action: "action", timestamp: t2, timing: 3.14, group: n2, count: r2, version: { source: R, tagging: 1 }, source: { type: "web", id: "https://localhost:80", previous_id: "http://remotehost:9001" } }, e2, { merge: false });
57
- if (e2.name) {
58
- const [t3, n3] = (_a = e2.name.split(" ")) != null ? _a : [];
59
- t3 && n3 && (o.entity = t3, o.action = n3);
96
+ const t = e.timestamp || (/* @__PURE__ */ new Date()).setHours(0, 13, 37, 0), n = e.group || "gr0up", r = e.count || 1, o = y({ name: "entity action", data: { string: "foo", number: 1, boolean: true, array: [0, "text", false], not: void 0 }, context: { dev: ["test", 1] }, globals: { lang: "elb" }, custom: { completely: "random" }, user: { id: "us3r", device: "c00k13", session: "s3ss10n" }, nested: [{ entity: "child", data: { is: "subordinated" }, nested: [], context: { element: ["child", 0] } }], consent: { functional: true }, id: `${t}-${n}-${r}`, trigger: "test", entity: "entity", action: "action", timestamp: t, timing: 3.14, group: n, count: r, version: { source: "0.2.0", tagging: 1 }, source: { type: "web", id: "https://localhost:80", previous_id: "http://remotehost:9001" } }, e, { merge: false });
97
+ if (e.name) {
98
+ const [t2, n2] = (_a = e.name.split(" ")) != null ? _a : [];
99
+ t2 && n2 && (o.entity = t2, o.action = n2);
60
100
  }
61
101
  return o;
62
102
  }
63
- function H(e2 = "entity action", t2 = {}) {
64
- 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 } };
65
- return V({ ...{ "cart view": { data: { currency: "EUR", value: 2 * r2.data.price }, context: { shopping: ["cart", 0] }, globals: { pagegroup: "shop" }, nested: [{ entity: "product", data: { ...r2.data, quantity: 2 }, context: { shopping: ["cart", 0] }, nested: [] }], trigger: "load" }, "checkout view": { data: { step: "payment", currency: "EUR", value: r2.data.price + o.data.price }, context: { shopping: ["checkout", 0] }, globals: { pagegroup: "shop" }, nested: [{ entity: "product", ...r2, context: { shopping: ["checkout", 0] }, nested: [] }, { entity: "product", ...o, context: { shopping: ["checkout", 0] }, nested: [] }], trigger: "load" }, "order complete": { data: { id: "0rd3r1d", currency: "EUR", shipping: 5.22, taxes: 73.76, total: 555 }, context: { shopping: ["complete", 0] }, globals: { pagegroup: "shop" }, nested: [{ entity: "product", ...r2, context: { shopping: ["complete", 0] }, nested: [] }, { entity: "product", ...o, context: { shopping: ["complete", 0] }, nested: [] }, { entity: "gift", data: { name: "Surprise" }, context: { shopping: ["complete", 0] }, nested: [] }], trigger: "load" }, "page view": { data: { domain: "www.example.com", title: "walkerOS documentation", referrer: "https://www.elbwalker.com/", search: "?foo=bar", hash: "#hash", id: "/docs/" }, globals: { pagegroup: "docs" }, trigger: "load" }, "product add": { ...r2, context: { shopping: ["intent", 0] }, globals: { pagegroup: "shop" }, nested: [], trigger: "click" }, "product view": { ...r2, context: { shopping: ["detail", 0] }, globals: { pagegroup: "shop" }, nested: [], trigger: "load" }, "product visible": { data: { ...r2.data, position: 3, promo: true }, context: { shopping: ["discover", 0] }, globals: { pagegroup: "shop" }, nested: [], trigger: "load" }, "promotion visible": { data: { name: "Setting up tracking easily", position: "hero" }, context: { ab_test: ["engagement", 0] }, globals: { pagegroup: "homepage" }, trigger: "visible" }, "session start": { data: { id: "s3ss10n", start: n2, isNew: true, count: 1, runs: 1, isStart: true, storage: true, referrer: "", device: "c00k13" }, user: { id: "us3r", device: "c00k13", session: "s3ss10n", hash: "h4sh", address: "street number", email: "user@example.com", phone: "+49 123 456 789", userAgent: "Mozilla...", browser: "Chrome", browserVersion: "90", deviceType: "desktop", language: "de-DE", country: "DE", region: "HH", city: "Hamburg", zip: "20354", timezone: "Berlin", os: "walkerOS", osVersion: "1.0", screenSize: "1337x420", ip: "127.0.0.0", internal: true, custom: "value" } } }[e2], ...t2, name: e2 });
103
+ function _(e = "entity action", t = {}) {
104
+ const n = t.timestamp || (/* @__PURE__ */ new Date()).setHours(0, 13, 37, 0), r = { 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 } };
105
+ return C({ ...{ "cart view": { data: { currency: "EUR", value: 2 * r.data.price }, context: { shopping: ["cart", 0] }, globals: { pagegroup: "shop" }, nested: [{ entity: "product", data: { ...r.data, quantity: 2 }, context: { shopping: ["cart", 0] }, nested: [] }], trigger: "load" }, "checkout view": { data: { step: "payment", currency: "EUR", value: r.data.price + o.data.price }, context: { shopping: ["checkout", 0] }, globals: { pagegroup: "shop" }, nested: [{ entity: "product", ...r, context: { shopping: ["checkout", 0] }, nested: [] }, { entity: "product", ...o, context: { shopping: ["checkout", 0] }, nested: [] }], trigger: "load" }, "order complete": { data: { id: "0rd3r1d", currency: "EUR", shipping: 5.22, taxes: 73.76, total: 555 }, context: { shopping: ["complete", 0] }, globals: { pagegroup: "shop" }, nested: [{ entity: "product", ...r, context: { shopping: ["complete", 0] }, nested: [] }, { entity: "product", ...o, context: { shopping: ["complete", 0] }, nested: [] }, { entity: "gift", data: { name: "Surprise" }, context: { shopping: ["complete", 0] }, nested: [] }], trigger: "load" }, "page view": { data: { domain: "www.example.com", title: "walkerOS documentation", referrer: "https://www.elbwalker.com/", search: "?foo=bar", hash: "#hash", id: "/docs/" }, globals: { pagegroup: "docs" }, trigger: "load" }, "product add": { ...r, context: { shopping: ["intent", 0] }, globals: { pagegroup: "shop" }, nested: [], trigger: "click" }, "product view": { ...r, context: { shopping: ["detail", 0] }, globals: { pagegroup: "shop" }, nested: [], trigger: "load" }, "product visible": { data: { ...r.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: n, 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" } } }[e], ...t, name: e });
66
106
  }
67
107
 
68
108
  // src/examples/events.ts
69
109
  function purchase() {
70
- const event = H("order complete");
110
+ const event = _("order complete");
71
111
  return [
72
112
  "purchase",
73
113
  {
@@ -79,7 +119,7 @@ function purchase() {
79
119
  ];
80
120
  }
81
121
  function customEvent() {
82
- const event = H();
122
+ const event = _();
83
123
  return [
84
124
  "Custom Event",
85
125
  {
@@ -124,6 +164,7 @@ var config = {
124
164
  };
125
165
  // Annotate the CommonJS export names for ESM import in node:
126
166
  0 && (module.exports = {
167
+ env,
127
168
  events,
128
169
  mapping
129
170
  });
@@ -4,6 +4,54 @@ var __export = (target, all) => {
4
4
  __defProp(target, name, { get: all[name], enumerable: true });
5
5
  };
6
6
 
7
+ // src/examples/env.ts
8
+ var env_exports = {};
9
+ __export(env_exports, {
10
+ init: () => init,
11
+ push: () => push
12
+ });
13
+ var noop = () => {
14
+ };
15
+ var init = {
16
+ window: {
17
+ plausible: void 0
18
+ },
19
+ document: {
20
+ createElement: () => ({
21
+ src: "",
22
+ dataset: {},
23
+ setAttribute: () => {
24
+ },
25
+ removeAttribute: () => {
26
+ }
27
+ }),
28
+ head: { appendChild: () => {
29
+ } },
30
+ querySelector: () => null
31
+ }
32
+ };
33
+ var push = {
34
+ window: {
35
+ plausible: Object.assign(noop, {
36
+ // Add queue property for analytics loading pattern
37
+ q: []
38
+ })
39
+ },
40
+ document: {
41
+ createElement: () => ({
42
+ src: "",
43
+ dataset: {},
44
+ setAttribute: () => {
45
+ },
46
+ removeAttribute: () => {
47
+ }
48
+ }),
49
+ head: { appendChild: () => {
50
+ } },
51
+ querySelector: () => null
52
+ }
53
+ };
54
+
7
55
  // src/examples/events.ts
8
56
  var events_exports = {};
9
57
  __export(events_exports, {
@@ -12,41 +60,32 @@ __export(events_exports, {
12
60
  });
13
61
 
14
62
  // ../../../core/dist/index.mjs
15
- var e;
16
- var t;
17
- var n = Object.getOwnPropertyNames;
18
- var r = (e = { "package.json"(e2, t2) {
19
- t2.exports = { name: "@walkeros/core", description: "Core types and platform-agnostic utilities for walkerOS", version: "0.1.2", 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" }] };
20
- } }, function() {
21
- return t || (0, e[n(e)[0]])((t = { exports: {} }).exports, t), t.exports;
22
- });
23
- var w = { merge: true, shallow: true, extend: true };
24
- function v(e2, t2 = {}, n2 = {}) {
25
- n2 = { ...w, ...n2 };
26
- const r2 = Object.entries(t2).reduce((t3, [r3, o]) => {
27
- const i = e2[r3];
28
- 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;
63
+ var m = { merge: true, shallow: true, extend: true };
64
+ function y(e, t = {}, n = {}) {
65
+ n = { ...m, ...n };
66
+ const r = Object.entries(t).reduce((t2, [r2, o]) => {
67
+ const i = e[r2];
68
+ return n.merge && Array.isArray(i) && Array.isArray(o) ? t2[r2] = o.reduce((e2, t3) => e2.includes(t3) ? e2 : [...e2, t3], [...i]) : (n.extend || r2 in e) && (t2[r2] = o), t2;
29
69
  }, {});
30
- return n2.shallow ? { ...e2, ...r2 } : (Object.assign(e2, r2), e2);
70
+ return n.shallow ? { ...e, ...r } : (Object.assign(e, r), e);
31
71
  }
32
- var { version: R } = r();
33
- function V(e2 = {}) {
72
+ function C(e = {}) {
34
73
  var _a;
35
- const t2 = e2.timestamp || (/* @__PURE__ */ new Date()).setHours(0, 13, 37, 0), n2 = e2.group || "gr0up", r2 = e2.count || 1, o = v({ name: "entity action", data: { string: "foo", number: 1, boolean: true, array: [0, "text", false], not: void 0 }, context: { dev: ["test", 1] }, globals: { lang: "elb" }, custom: { completely: "random" }, user: { id: "us3r", device: "c00k13", session: "s3ss10n" }, nested: [{ entity: "child", data: { is: "subordinated" }, nested: [], context: { element: ["child", 0] } }], consent: { functional: true }, id: `${t2}-${n2}-${r2}`, trigger: "test", entity: "entity", action: "action", timestamp: t2, timing: 3.14, group: n2, count: r2, version: { source: R, tagging: 1 }, source: { type: "web", id: "https://localhost:80", previous_id: "http://remotehost:9001" } }, e2, { merge: false });
36
- if (e2.name) {
37
- const [t3, n3] = (_a = e2.name.split(" ")) != null ? _a : [];
38
- t3 && n3 && (o.entity = t3, o.action = n3);
74
+ const t = e.timestamp || (/* @__PURE__ */ new Date()).setHours(0, 13, 37, 0), n = e.group || "gr0up", r = e.count || 1, o = y({ name: "entity action", data: { string: "foo", number: 1, boolean: true, array: [0, "text", false], not: void 0 }, context: { dev: ["test", 1] }, globals: { lang: "elb" }, custom: { completely: "random" }, user: { id: "us3r", device: "c00k13", session: "s3ss10n" }, nested: [{ entity: "child", data: { is: "subordinated" }, nested: [], context: { element: ["child", 0] } }], consent: { functional: true }, id: `${t}-${n}-${r}`, trigger: "test", entity: "entity", action: "action", timestamp: t, timing: 3.14, group: n, count: r, version: { source: "0.2.0", tagging: 1 }, source: { type: "web", id: "https://localhost:80", previous_id: "http://remotehost:9001" } }, e, { merge: false });
75
+ if (e.name) {
76
+ const [t2, n2] = (_a = e.name.split(" ")) != null ? _a : [];
77
+ t2 && n2 && (o.entity = t2, o.action = n2);
39
78
  }
40
79
  return o;
41
80
  }
42
- function H(e2 = "entity action", t2 = {}) {
43
- 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 } };
44
- return V({ ...{ "cart view": { data: { currency: "EUR", value: 2 * r2.data.price }, context: { shopping: ["cart", 0] }, globals: { pagegroup: "shop" }, nested: [{ entity: "product", data: { ...r2.data, quantity: 2 }, context: { shopping: ["cart", 0] }, nested: [] }], trigger: "load" }, "checkout view": { data: { step: "payment", currency: "EUR", value: r2.data.price + o.data.price }, context: { shopping: ["checkout", 0] }, globals: { pagegroup: "shop" }, nested: [{ entity: "product", ...r2, context: { shopping: ["checkout", 0] }, nested: [] }, { entity: "product", ...o, context: { shopping: ["checkout", 0] }, nested: [] }], trigger: "load" }, "order complete": { data: { id: "0rd3r1d", currency: "EUR", shipping: 5.22, taxes: 73.76, total: 555 }, context: { shopping: ["complete", 0] }, globals: { pagegroup: "shop" }, nested: [{ entity: "product", ...r2, context: { shopping: ["complete", 0] }, nested: [] }, { entity: "product", ...o, context: { shopping: ["complete", 0] }, nested: [] }, { entity: "gift", data: { name: "Surprise" }, context: { shopping: ["complete", 0] }, nested: [] }], trigger: "load" }, "page view": { data: { domain: "www.example.com", title: "walkerOS documentation", referrer: "https://www.elbwalker.com/", search: "?foo=bar", hash: "#hash", id: "/docs/" }, globals: { pagegroup: "docs" }, trigger: "load" }, "product add": { ...r2, context: { shopping: ["intent", 0] }, globals: { pagegroup: "shop" }, nested: [], trigger: "click" }, "product view": { ...r2, context: { shopping: ["detail", 0] }, globals: { pagegroup: "shop" }, nested: [], trigger: "load" }, "product visible": { data: { ...r2.data, position: 3, promo: true }, context: { shopping: ["discover", 0] }, globals: { pagegroup: "shop" }, nested: [], trigger: "load" }, "promotion visible": { data: { name: "Setting up tracking easily", position: "hero" }, context: { ab_test: ["engagement", 0] }, globals: { pagegroup: "homepage" }, trigger: "visible" }, "session start": { data: { id: "s3ss10n", start: n2, isNew: true, count: 1, runs: 1, isStart: true, storage: true, referrer: "", device: "c00k13" }, user: { id: "us3r", device: "c00k13", session: "s3ss10n", hash: "h4sh", address: "street number", email: "user@example.com", phone: "+49 123 456 789", userAgent: "Mozilla...", browser: "Chrome", browserVersion: "90", deviceType: "desktop", language: "de-DE", country: "DE", region: "HH", city: "Hamburg", zip: "20354", timezone: "Berlin", os: "walkerOS", osVersion: "1.0", screenSize: "1337x420", ip: "127.0.0.0", internal: true, custom: "value" } } }[e2], ...t2, name: e2 });
81
+ function _(e = "entity action", t = {}) {
82
+ const n = t.timestamp || (/* @__PURE__ */ new Date()).setHours(0, 13, 37, 0), r = { 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 } };
83
+ return C({ ...{ "cart view": { data: { currency: "EUR", value: 2 * r.data.price }, context: { shopping: ["cart", 0] }, globals: { pagegroup: "shop" }, nested: [{ entity: "product", data: { ...r.data, quantity: 2 }, context: { shopping: ["cart", 0] }, nested: [] }], trigger: "load" }, "checkout view": { data: { step: "payment", currency: "EUR", value: r.data.price + o.data.price }, context: { shopping: ["checkout", 0] }, globals: { pagegroup: "shop" }, nested: [{ entity: "product", ...r, context: { shopping: ["checkout", 0] }, nested: [] }, { entity: "product", ...o, context: { shopping: ["checkout", 0] }, nested: [] }], trigger: "load" }, "order complete": { data: { id: "0rd3r1d", currency: "EUR", shipping: 5.22, taxes: 73.76, total: 555 }, context: { shopping: ["complete", 0] }, globals: { pagegroup: "shop" }, nested: [{ entity: "product", ...r, context: { shopping: ["complete", 0] }, nested: [] }, { entity: "product", ...o, context: { shopping: ["complete", 0] }, nested: [] }, { entity: "gift", data: { name: "Surprise" }, context: { shopping: ["complete", 0] }, nested: [] }], trigger: "load" }, "page view": { data: { domain: "www.example.com", title: "walkerOS documentation", referrer: "https://www.elbwalker.com/", search: "?foo=bar", hash: "#hash", id: "/docs/" }, globals: { pagegroup: "docs" }, trigger: "load" }, "product add": { ...r, context: { shopping: ["intent", 0] }, globals: { pagegroup: "shop" }, nested: [], trigger: "click" }, "product view": { ...r, context: { shopping: ["detail", 0] }, globals: { pagegroup: "shop" }, nested: [], trigger: "load" }, "product visible": { data: { ...r.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: n, 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" } } }[e], ...t, name: e });
45
84
  }
46
85
 
47
86
  // src/examples/events.ts
48
87
  function purchase() {
49
- const event = H("order complete");
88
+ const event = _("order complete");
50
89
  return [
51
90
  "purchase",
52
91
  {
@@ -58,7 +97,7 @@ function purchase() {
58
97
  ];
59
98
  }
60
99
  function customEvent() {
61
- const event = H();
100
+ const event = _();
62
101
  return [
63
102
  "Custom Event",
64
103
  {
@@ -102,6 +141,7 @@ var config = {
102
141
  order: { complete: purchase2 }
103
142
  };
104
143
  export {
144
+ env_exports as env,
105
145
  events_exports as events,
106
146
  mapping_exports as mapping
107
147
  };
@@ -1 +1 @@
1
- "use strict";var Destination=(()=>{var e,t,n=Object.defineProperty,o=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,a=Object.prototype.hasOwnProperty,s=(e,t)=>{for(var o in t)n(e,o,{get:t[o],enumerable:!0})},i={};s(i,{DestinationPlausible:()=>b,default:()=>A,destinationPlausible:()=>S,examples:()=>y});var c=Object.getOwnPropertyNames,p=(e={"package.json"(e,t){t.exports={name:"@walkeros/core",description:"Core types and platform-agnostic utilities for walkerOS",version:"0.1.2",main:"./dist/index.js",module:"./dist/index.mjs",types:"./dist/index.d.ts",license:"MIT",files:["dist/**"],scripts:{build:"tsup --silent",clean:"rm -rf .turbo && rm -rf node_modules && rm -rf dist",dev:"jest --watchAll --colors",lint:'tsc && eslint "**/*.ts*"',test:"jest",update:"npx npm-check-updates -u && npm update"},dependencies:{},devDependencies:{},repository:{url:"git+https://github.com/elbwalker/walkerOS.git",directory:"packages/core"},author:"elbwalker <hello@elbwalker.com>",homepage:"https://github.com/elbwalker/walkerOS#readme",bugs:{url:"https://github.com/elbwalker/walkerOS/issues"},keywords:["walker","walkerOS","analytics","tracking","data collection","measurement","data privacy","privacy friendly","web analytics","product analytics","core","types","utils"],funding:[{type:"GitHub Sponsors",url:"https://github.com/sponsors/elbwalker"}]}}},function(){return t||(0,e[c(e)[0]])((t={exports:{}}).exports,t),t.exports}),l={merge:!0,shallow:!0,extend:!0};function u(e){return"object"==typeof e&&null!==e&&!function(e){return Array.isArray(e)}(e)&&"[object Object]"===Object.prototype.toString.call(e)}var{version:d}=p();function g(e={}){var t;const n=e.timestamp||(new Date).setHours(0,13,37,0),o=e.group||"gr0up",r=e.count||1,a=function(e,t={},n={}){n={...l,...n};const o=Object.entries(t).reduce((t,[o,r])=>{const a=e[o];return n.merge&&Array.isArray(a)&&Array.isArray(r)?t[o]=r.reduce((e,t)=>e.includes(t)?e:[...e,t],[...a]):(n.extend||o in e)&&(t[o]=r),t},{});return n.shallow?{...e,...o}:(Object.assign(e,o),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:`${n}-${o}-${r}`,trigger:"test",entity:"entity",action:"action",timestamp:n,timing:3.14,group:o,count:r,version:{source:d,tagging:1},source:{type:"web",id:"https://localhost:80",previous_id:"http://remotehost:9001"}},e,{merge:!1});if(e.name){const[n,o]=null!=(t=e.name.split(" "))?t:[];n&&o&&(a.entity=n,a.action=o)}return a}function m(e="entity action",t={}){const n=t.timestamp||(new Date).setHours(0,13,37,0),o={data:{id:"ers",name:"Everyday Ruck Snack",color:"black",size:"l",price:420}},r={data:{id:"cc",name:"Cool Cap",size:"one size",price:42}};return g({...{"cart view":{data:{currency:"EUR",value:2*o.data.price},context:{shopping:["cart",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",data:{...o.data,quantity:2},context:{shopping:["cart",0]},nested:[]}],trigger:"load"},"checkout view":{data:{step:"payment",currency:"EUR",value:o.data.price+r.data.price},context:{shopping:["checkout",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",...o,context:{shopping:["checkout",0]},nested:[]},{entity:"product",...r,context:{shopping:["checkout",0]},nested:[]}],trigger:"load"},"order complete":{data:{id:"0rd3r1d",currency:"EUR",shipping:5.22,taxes:73.76,total:555},context:{shopping:["complete",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",...o,context:{shopping:["complete",0]},nested:[]},{entity:"product",...r,context:{shopping:["complete",0]},nested:[]},{entity:"gift",data:{name:"Surprise"},context:{shopping:["complete",0]},nested:[]}],trigger:"load"},"page view":{data:{domain:"www.example.com",title:"walkerOS documentation",referrer:"https://www.elbwalker.com/",search:"?foo=bar",hash:"#hash",id:"/docs/"},globals:{pagegroup:"docs"},trigger:"load"},"product add":{...o,context:{shopping:["intent",0]},globals:{pagegroup:"shop"},nested:[],trigger:"click"},"product view":{...o,context:{shopping:["detail",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"},"product visible":{data:{...o.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:n,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 h(e){const t={window:globalThis.window,document:globalThis.document};return e?{...t,...e}:t}var b={},y={};s(y,{events:()=>v,mapping:()=>k});var v={};function w(){return["purchase",{revenue:{currency:"EUR",amount:m("order complete").data.total}}]}function f(){const e=m();return["Custom Event",{props:e.data,revenue:e.data.number}]}s(v,{customEvent:()=>f,purchase:()=>w});var k={};s(k,{config:()=>j,customEvent:()=>x,purchase:()=>O});var x={name:"Custom Event",data:{map:{props:"data",revenue:"data.number"}}},O={name:"purchase",data:{map:{revenue:{map:{currency:{value:"EUR"},amount:"data.total"}}}}},j={entity:{action:x},order:{complete:O}},S={type:"plausible",config:{},init({config:e,env:t}){const{window:n}=h(t),o=n,r=e.settings||{};return e.loadScript&&function(e,t,n="https://plausible.io/js/script.manual.js"){const{document:o}=h(t),r=o,a=r.createElement("script");a.src=n,e&&(a.dataset.domain=e);r.head.appendChild(a)}(r.domain,t),o.plausible=o.plausible||function(){(o.plausible.q=o.plausible.q||[]).push(arguments)},e},push(e,{config:t,data:n,env:o}){const r=u(n)?n:{},{window:a}=h(o);(0,a.plausible)(`${e.name}`,r)}};var E,A=S;return E=i,((e,t,s,i)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let c of r(t))a.call(e,c)||c===s||n(e,c,{get:()=>t[c],enumerable:!(i=o(t,c))||i.enumerable});return e})(n({},"__esModule",{value:!0}),E)})();
1
+ "use strict";var Destination=(()=>{var e=Object.defineProperty,t=Object.getOwnPropertyDescriptor,n=Object.getOwnPropertyNames,o=Object.prototype.hasOwnProperty,a=(t,n)=>{for(var o in n)e(t,o,{get:n[o],enumerable:!0})},r={};a(r,{DestinationPlausible:()=>d,default:()=>O,destinationPlausible:()=>E,examples:()=>l});var i={merge:!0,shallow:!0,extend:!0};function s(e){return"object"==typeof e&&null!==e&&!function(e){return Array.isArray(e)}(e)&&"[object Object]"===Object.prototype.toString.call(e)}function c(e={}){var t;const n=e.timestamp||(new Date).setHours(0,13,37,0),o=e.group||"gr0up",a=e.count||1,r=function(e,t={},n={}){n={...i,...n};const o=Object.entries(t).reduce((t,[o,a])=>{const r=e[o];return n.merge&&Array.isArray(r)&&Array.isArray(a)?t[o]=a.reduce((e,t)=>e.includes(t)?e:[...e,t],[...r]):(n.extend||o in e)&&(t[o]=a),t},{});return n.shallow?{...e,...o}:(Object.assign(e,o),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:`${n}-${o}-${a}`,trigger:"test",entity:"entity",action:"action",timestamp:n,timing:3.14,group:o,count:a,version:{source:"0.2.0",tagging:1},source:{type:"web",id:"https://localhost:80",previous_id:"http://remotehost:9001"}},e,{merge:!1});if(e.name){const[n,o]=null!=(t=e.name.split(" "))?t:[];n&&o&&(r.entity=n,r.action=o)}return r}function p(e="entity action",t={}){const n=t.timestamp||(new Date).setHours(0,13,37,0),o={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 c({...{"cart view":{data:{currency:"EUR",value:2*o.data.price},context:{shopping:["cart",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",data:{...o.data,quantity:2},context:{shopping:["cart",0]},nested:[]}],trigger:"load"},"checkout view":{data:{step:"payment",currency:"EUR",value:o.data.price+a.data.price},context:{shopping:["checkout",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",...o,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",...o,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":{...o,context:{shopping:["intent",0]},globals:{pagegroup:"shop"},nested:[],trigger:"click"},"product view":{...o,context:{shopping:["detail",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"},"product visible":{data:{...o.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:n,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 u(e){return{window:"undefined"!=typeof window?window:globalThis.window,document:"undefined"!=typeof document?document:globalThis.document,...e}}var d={},l={};a(l,{env:()=>g,events:()=>b,mapping:()=>w});var g={};a(g,{init:()=>m,push:()=>h});var m={window:{plausible:void 0},document:{createElement:()=>({src:"",dataset:{},setAttribute:()=>{},removeAttribute:()=>{}}),head:{appendChild:()=>{}},querySelector:()=>null}},h={window:{plausible:Object.assign(()=>{},{q:[]})},document:{createElement:()=>({src:"",dataset:{},setAttribute:()=>{},removeAttribute:()=>{}}),head:{appendChild:()=>{}},querySelector:()=>null}},b={};function y(){return["purchase",{revenue:{currency:"EUR",amount:p("order complete").data.total}}]}function v(){const e=p();return["Custom Event",{props:e.data,revenue:e.data.number}]}a(b,{customEvent:()=>v,purchase:()=>y});var w={};a(w,{config:()=>k,customEvent:()=>f,purchase:()=>x});var f={name:"Custom Event",data:{map:{props:"data",revenue:"data.number"}}},x={name:"purchase",data:{map:{revenue:{map:{currency:{value:"EUR"},amount:"data.total"}}}}},k={entity:{action:f},order:{complete:x}},E={type:"plausible",config:{},init({config:e,env:t}){const{window:n}=u(t),o=n,a=e.settings||{};return e.loadScript&&function(e,t,n="https://plausible.io/js/script.manual.js"){const{document:o}=u(t),a=o,r=a.createElement("script");r.src=n,e&&(r.dataset.domain=e);a.head.appendChild(r)}(a.domain,t),o.plausible=o.plausible||function(){(o.plausible.q=o.plausible.q||[]).push(arguments)},e},push(e,{config:t,data:n,env:o}){const a=s(n)?n:{},{window:r}=u(o);(0,r.plausible)(`${e.name}`,a)}};var j,O=E;return j=r,((a,r,i,s)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let c of n(r))o.call(a,c)||c===i||e(a,c,{get:()=>r[c],enumerable:!(s=t(r,c))||s.enumerable});return a})(e({},"__esModule",{value:!0}),j)})();
package/dist/index.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { WalkerOS, Mapping as Mapping$1 } from '@walkeros/core';
1
+ import { WalkerOS, Destination as Destination$1, Mapping as Mapping$1 } from '@walkeros/core';
2
2
  import { DestinationWeb } from '@walkeros/web-core';
3
3
 
4
4
  declare global {
@@ -11,25 +11,48 @@ declare global {
11
11
  type Plausible = (event: string, options?: {
12
12
  props?: WalkerOS.AnyObject;
13
13
  }) => void;
14
- type Destination = DestinationWeb.Destination<Settings, Mapping>;
15
- type Config = DestinationWeb.Config<Settings, Mapping>;
16
14
  interface Settings {
17
15
  domain?: string;
18
16
  }
19
17
  interface Mapping {
20
18
  }
19
+ interface Env extends DestinationWeb.Env {
20
+ window: {
21
+ plausible: Plausible & {
22
+ q?: IArguments[];
23
+ };
24
+ };
25
+ }
26
+ type Types = Destination$1.Types<Settings, Mapping, Env>;
27
+ type Destination = DestinationWeb.Destination<Types>;
28
+ type Config = DestinationWeb.Config<Types>;
29
+ interface PlausibleDestination extends Destination {
30
+ env?: Env;
31
+ }
21
32
  type Rule = Mapping$1.Rule<Mapping>;
22
33
  type Rules = Mapping$1.Rules<Rule>;
23
34
 
24
35
  type index$1_Config = Config;
25
36
  type index$1_Destination = Destination;
37
+ type index$1_Env = Env;
26
38
  type index$1_Mapping = Mapping;
27
39
  type index$1_Plausible = Plausible;
40
+ type index$1_PlausibleDestination = PlausibleDestination;
28
41
  type index$1_Rule = Rule;
29
42
  type index$1_Rules = Rules;
30
43
  type index$1_Settings = Settings;
44
+ type index$1_Types = Types;
31
45
  declare namespace index$1 {
32
- export type { index$1_Config as Config, index$1_Destination as Destination, index$1_Mapping as Mapping, index$1_Plausible as Plausible, index$1_Rule as Rule, index$1_Rules as Rules, index$1_Settings as Settings };
46
+ export type { index$1_Config as Config, index$1_Destination as Destination, index$1_Env as Env, index$1_Mapping as Mapping, index$1_Plausible as Plausible, index$1_PlausibleDestination as PlausibleDestination, index$1_Rule as Rule, index$1_Rules as Rules, index$1_Settings as Settings, index$1_Types as Types };
47
+ }
48
+
49
+ declare const init: Env | undefined;
50
+ declare const push: Env;
51
+
52
+ declare const env_init: typeof init;
53
+ declare const env_push: typeof push;
54
+ declare namespace env {
55
+ export { env_init as init, env_push as push };
33
56
  }
34
57
 
35
58
  declare function purchase$1(): unknown[];
@@ -57,10 +80,11 @@ declare namespace mapping {
57
80
  export { mapping_config as config, mapping_customEvent as customEvent, mapping_purchase as purchase };
58
81
  }
59
82
 
83
+ declare const index_env: typeof env;
60
84
  declare const index_events: typeof events;
61
85
  declare const index_mapping: typeof mapping;
62
86
  declare namespace index {
63
- export { index_events as events, index_mapping as mapping };
87
+ export { index_env as env, index_events as events, index_mapping as mapping };
64
88
  }
65
89
 
66
90
  declare const destinationPlausible: Destination;
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { WalkerOS, Mapping as Mapping$1 } from '@walkeros/core';
1
+ import { WalkerOS, Destination as Destination$1, Mapping as Mapping$1 } from '@walkeros/core';
2
2
  import { DestinationWeb } from '@walkeros/web-core';
3
3
 
4
4
  declare global {
@@ -11,25 +11,48 @@ declare global {
11
11
  type Plausible = (event: string, options?: {
12
12
  props?: WalkerOS.AnyObject;
13
13
  }) => void;
14
- type Destination = DestinationWeb.Destination<Settings, Mapping>;
15
- type Config = DestinationWeb.Config<Settings, Mapping>;
16
14
  interface Settings {
17
15
  domain?: string;
18
16
  }
19
17
  interface Mapping {
20
18
  }
19
+ interface Env extends DestinationWeb.Env {
20
+ window: {
21
+ plausible: Plausible & {
22
+ q?: IArguments[];
23
+ };
24
+ };
25
+ }
26
+ type Types = Destination$1.Types<Settings, Mapping, Env>;
27
+ type Destination = DestinationWeb.Destination<Types>;
28
+ type Config = DestinationWeb.Config<Types>;
29
+ interface PlausibleDestination extends Destination {
30
+ env?: Env;
31
+ }
21
32
  type Rule = Mapping$1.Rule<Mapping>;
22
33
  type Rules = Mapping$1.Rules<Rule>;
23
34
 
24
35
  type index$1_Config = Config;
25
36
  type index$1_Destination = Destination;
37
+ type index$1_Env = Env;
26
38
  type index$1_Mapping = Mapping;
27
39
  type index$1_Plausible = Plausible;
40
+ type index$1_PlausibleDestination = PlausibleDestination;
28
41
  type index$1_Rule = Rule;
29
42
  type index$1_Rules = Rules;
30
43
  type index$1_Settings = Settings;
44
+ type index$1_Types = Types;
31
45
  declare namespace index$1 {
32
- export type { index$1_Config as Config, index$1_Destination as Destination, index$1_Mapping as Mapping, index$1_Plausible as Plausible, index$1_Rule as Rule, index$1_Rules as Rules, index$1_Settings as Settings };
46
+ export type { index$1_Config as Config, index$1_Destination as Destination, index$1_Env as Env, index$1_Mapping as Mapping, index$1_Plausible as Plausible, index$1_PlausibleDestination as PlausibleDestination, index$1_Rule as Rule, index$1_Rules as Rules, index$1_Settings as Settings, index$1_Types as Types };
47
+ }
48
+
49
+ declare const init: Env | undefined;
50
+ declare const push: Env;
51
+
52
+ declare const env_init: typeof init;
53
+ declare const env_push: typeof push;
54
+ declare namespace env {
55
+ export { env_init as init, env_push as push };
33
56
  }
34
57
 
35
58
  declare function purchase$1(): unknown[];
@@ -57,10 +80,11 @@ declare namespace mapping {
57
80
  export { mapping_config as config, mapping_customEvent as customEvent, mapping_purchase as purchase };
58
81
  }
59
82
 
83
+ declare const index_env: typeof env;
60
84
  declare const index_events: typeof events;
61
85
  declare const index_mapping: typeof mapping;
62
86
  declare namespace index {
63
- export { index_events as events, index_mapping as mapping };
87
+ export { index_env as env, index_events as events, index_mapping as mapping };
64
88
  }
65
89
 
66
90
  declare const destinationPlausible: Destination;
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 _define_property(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function _iterable_to_array(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function _iterable_to_array_limit(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,a=[],i=!0,s=!1;try{for(r=r.call(e);!(i=(n=r.next()).done)&&(a.push(n.value),!t||a.length!==t);i=!0);}catch(e){s=!0,o=e}finally{try{i||null==r.return||r.return()}finally{if(s)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}}var Destination=function(){var e,t,r=function(e){return"object"==(void 0===e?"undefined":_type_of(e))&&null!==e&&!function(e){return Array.isArray(e)}(e)&&"[object Object]"===Object.prototype.toString.call(e)},n=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.timestamp||(new Date).setHours(0,13,37,0),r=e.group||"gr0up",n=e.count||1,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({},g,r);var n=Object.entries(t).reduce(function(t,n){var o=_sliced_to_array(n,2),a=o[0],i=o[1],s=e[a];return r.merge&&Array.isArray(s)&&Array.isArray(i)?t[a]=i.reduce(function(e,t){return e.includes(t)?e:_to_consumable_array(e).concat([t])},_to_consumable_array(s)):(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:m,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),s=i[0],c=i[1];s&&c&&(o.entity=s,o.action=c)}return o},o=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"entity action",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.timestamp||(new Date).setHours(0,13,37,0),o={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 n(_object_spread_props(_object_spread({},{"cart view":{data:{currency:"EUR",value:2*o.data.price},context:{shopping:["cart",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",data:_object_spread_props(_object_spread({},o.data),{quantity:2}),context:{shopping:["cart",0]},nested:[]}],trigger:"load"},"checkout view":{data:{step:"payment",currency:"EUR",value:o.data.price+a.data.price},context:{shopping:["checkout",0]},globals:{pagegroup:"shop"},nested:[_object_spread_props(_object_spread({entity:"product"},o),{context:{shopping:["checkout",0]},nested:[]}),_object_spread_props(_object_spread({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:[_object_spread_props(_object_spread({entity:"product"},o),{context:{shopping:["complete",0]},nested:[]}),_object_spread_props(_object_spread({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":_object_spread_props(_object_spread({},o),{context:{shopping:["intent",0]},globals:{pagegroup:"shop"},nested:[],trigger:"click"}),"product view":_object_spread_props(_object_spread({},o),{context:{shopping:["detail",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"}),"product visible":{data:_object_spread_props(_object_spread({},o.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}))},a=function(e){var t={window:globalThis.window,document:globalThis.document};return e?_object_spread({},t,e):t},i=function(){return["purchase",{revenue:{currency:"EUR",amount:o("order complete").data.total}}]},s=function(){var e=o();return["Custom Event",{props:e.data,revenue:e.data.number}]},c=Object.defineProperty,u=Object.getOwnPropertyDescriptor,p=Object.getOwnPropertyNames,l=Object.prototype.hasOwnProperty,d=function(e,t){for(var r in t)c(e,r,{get:t[r],enumerable:!0})},_={};d(_,{DestinationPlausible:function(){return f},default:function(){return P},destinationPlausible:function(){return S},examples:function(){return h}});var b=Object.getOwnPropertyNames,y=(e={"package.json":function(e,t){t.exports={name:"@walkeros/core",description:"Core types and platform-agnostic utilities for walkerOS",version:"0.1.2",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[b(e)[0]])((t={exports:{}}).exports,t),t.exports}),g={merge:!0,shallow:!0,extend:!0},m=y().version,f={},h={};d(h,{events:function(){return v},mapping:function(){return w}});var v={};d(v,{customEvent:function(){return s},purchase:function(){return i}});var w={};d(w,{config:function(){return x},customEvent:function(){return O},purchase:function(){return k}});var j,O={name:"Custom Event",data:{map:{props:"data",revenue:"data.number"}}},k={name:"purchase",data:{map:{revenue:{map:{currency:{value:"EUR"},amount:"data.total"}}}}},x={entity:{action:O},order:{complete:k}},S={type:"plausible",config:{},init:function(e){var t=e.config,r=e.env,n=a(r).window,o=t.settings||{};return t.loadScript&&function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"https://plausible.io/js/script.manual.js",n=a(t).document,o=n.createElement("script");o.src=r,e&&(o.dataset.domain=e),n.head.appendChild(o)}(o.domain,r),n.plausible=n.plausible||function(){(n.plausible.q=n.plausible.q||[]).push(arguments)},t},push:function(e,t){t.config;var n=t.data,o=t.env,i=r(n)?n:{};(0,a(o).window.plausible)("".concat(e.name),i)}},P=S;return 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 s,d=function(){var o=s.value;l.call(e,o)||o===r||c(e,o,{get:function(){return t[o]},enumerable:!(n=u(t,o))||n.enumerable})},_=p(t)[Symbol.iterator]();!(o=(s=_.next()).done);o=!0)d()}catch(e){a=!0,i=e}finally{try{o||null==_.return||_.return()}finally{if(a)throw i}}}return e}(c({},"__esModule",{value:!0}),j)}();
1
+ "use strict";function _array_like_to_array(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function _array_with_holes(e){if(Array.isArray(e))return e}function _array_without_holes(e){if(Array.isArray(e))return _array_like_to_array(e)}function _define_property(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function _iterable_to_array(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function _iterable_to_array_limit(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,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}}var Destination=function(){var e=function(e){return"object"==(void 0===e?"undefined":_type_of(e))&&null!==e&&!function(e){return Array.isArray(e)}(e)&&"[object Object]"===Object.prototype.toString.call(e)},t=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({},d,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:"0.2.0",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],u=i[1];c&&u&&(o.entity=c,o.action=u)}return o},r=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"entity action",r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=r.timestamp||(new Date).setHours(0,13,37,0),o={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 t(_object_spread_props(_object_spread({},{"cart view":{data:{currency:"EUR",value:2*o.data.price},context:{shopping:["cart",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",data:_object_spread_props(_object_spread({},o.data),{quantity:2}),context:{shopping:["cart",0]},nested:[]}],trigger:"load"},"checkout view":{data:{step:"payment",currency:"EUR",value:o.data.price+a.data.price},context:{shopping:["checkout",0]},globals:{pagegroup:"shop"},nested:[_object_spread_props(_object_spread({entity:"product"},o),{context:{shopping:["checkout",0]},nested:[]}),_object_spread_props(_object_spread({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:[_object_spread_props(_object_spread({entity:"product"},o),{context:{shopping:["complete",0]},nested:[]}),_object_spread_props(_object_spread({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":_object_spread_props(_object_spread({},o),{context:{shopping:["intent",0]},globals:{pagegroup:"shop"},nested:[],trigger:"click"}),"product view":_object_spread_props(_object_spread({},o),{context:{shopping:["detail",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"}),"product visible":{data:_object_spread_props(_object_spread({},o.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:n,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],r),{name:e}))},n=function(e){return _object_spread({window:"undefined"!=typeof window?window:globalThis.window,document:"undefined"!=typeof document?document:globalThis.document},e)},o=function(){return["purchase",{revenue:{currency:"EUR",amount:r("order complete").data.total}}]},a=function(){var e=r();return["Custom Event",{props:e.data,revenue:e.data.number}]},i=Object.defineProperty,c=Object.getOwnPropertyDescriptor,u=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,p=function(e,t){for(var r in t)i(e,r,{get:t[r],enumerable:!0})},l={};p(l,{DestinationPlausible:function(){return _},default:function(){return x},destinationPlausible:function(){return S},examples:function(){return b}});var d={merge:!0,shallow:!0,extend:!0},_={},b={};p(b,{env:function(){return y},events:function(){return m},mapping:function(){return h}});var y={};p(y,{init:function(){return f},push:function(){return g}});var f={window:{plausible:void 0},document:{createElement:function(){return{src:"",dataset:{},setAttribute:function(){},removeAttribute:function(){}}},head:{appendChild:function(){}},querySelector:function(){return null}}},g={window:{plausible:Object.assign(function(){},{q:[]})},document:{createElement:function(){return{src:"",dataset:{},setAttribute:function(){},removeAttribute:function(){}}},head:{appendChild:function(){}},querySelector:function(){return null}}},m={};p(m,{customEvent:function(){return a},purchase:function(){return o}});var h={};p(h,{config:function(){return O},customEvent:function(){return w},purchase:function(){return j}});var v,w={name:"Custom Event",data:{map:{props:"data",revenue:"data.number"}}},j={name:"purchase",data:{map:{revenue:{map:{currency:{value:"EUR"},amount:"data.total"}}}}},O={entity:{action:w},order:{complete:j}},S={type:"plausible",config:{},init:function(e){var t=e.config,r=e.env,o=n(r).window,a=t.settings||{};return t.loadScript&&function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"https://plausible.io/js/script.manual.js",o=n(t).document,a=o.createElement("script");a.src=r,e&&(a.dataset.domain=e),o.head.appendChild(a)}(a.domain,r),o.plausible=o.plausible||function(){(o.plausible.q=o.plausible.q||[]).push(arguments)},t},push:function(t,r){r.config;var o=r.data,a=r.env,i=e(o)?o:{};(0,n(a).window.plausible)("".concat(t.name),i)}},x=S;return v=l,function(e,t,r,n){if(t&&"object"===(void 0===t?"undefined":_type_of(t))||"function"==typeof t){var o=!0,a=!1,p=void 0;try{for(var l,d=function(){var o=l.value;s.call(e,o)||o===r||i(e,o,{get:function(){return t[o]},enumerable:!(n=c(t,o))||n.enumerable})},_=u(t)[Symbol.iterator]();!(o=(l=_.next()).done);o=!0)d()}catch(e){a=!0,p=e}finally{try{o||null==_.return||_.return()}finally{if(a)throw p}}}return e}(i({},"__esModule",{value:!0}),v)}();
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e,t,r,n=Object.defineProperty,o=Object.getOwnPropertyDescriptor,a=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,i=(e,t)=>{for(var r in t)n(e,r,{get:t[r],enumerable:!0})},c={};i(c,{DestinationPlausible:()=>y,default:()=>A,destinationPlausible:()=>S,examples:()=>v}),module.exports=(e=c,((e,t,r,i)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let c of a(t))s.call(e,c)||c===r||n(e,c,{get:()=>t[c],enumerable:!(i=o(t,c))||i.enumerable});return e})(n({},"__esModule",{value:!0}),e));var p=Object.getOwnPropertyNames,l=(t={"package.json"(e,t){t.exports={name:"@walkeros/core",description:"Core types and platform-agnostic utilities for walkerOS",version:"0.1.2",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 r||(0,t[p(t)[0]])((r={exports:{}}).exports,r),r.exports}),u={merge:!0,shallow:!0,extend:!0};function d(e){return"object"==typeof e&&null!==e&&!function(e){return Array.isArray(e)}(e)&&"[object Object]"===Object.prototype.toString.call(e)}var{version:g}=l();function m(e={}){var t;const r=e.timestamp||(new Date).setHours(0,13,37,0),n=e.group||"gr0up",o=e.count||1,a=function(e,t={},r={}){r={...u,...r};const n=Object.entries(t).reduce((t,[n,o])=>{const a=e[n];return r.merge&&Array.isArray(a)&&Array.isArray(o)?t[n]=o.reduce((e,t)=>e.includes(t)?e:[...e,t],[...a]):(r.extend||n in e)&&(t[n]=o),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}-${o}`,trigger:"test",entity:"entity",action:"action",timestamp:r,timing:3.14,group:n,count:o,version:{source:g,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&&(a.entity=r,a.action=n)}return a}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}},o={data:{id:"cc",name:"Cool Cap",size:"one size",price:42}};return m({...{"cart view":{data:{currency:"EUR",value:2*n.data.price},context:{shopping:["cart",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",data:{...n.data,quantity:2},context:{shopping:["cart",0]},nested:[]}],trigger:"load"},"checkout view":{data:{step:"payment",currency:"EUR",value:n.data.price+o.data.price},context:{shopping:["checkout",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",...n,context:{shopping:["checkout",0]},nested:[]},{entity:"product",...o,context:{shopping:["checkout",0]},nested:[]}],trigger:"load"},"order complete":{data:{id:"0rd3r1d",currency:"EUR",shipping:5.22,taxes:73.76,total:555},context:{shopping:["complete",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",...n,context:{shopping:["complete",0]},nested:[]},{entity:"product",...o,context:{shopping:["complete",0]},nested:[]},{entity:"gift",data:{name:"Surprise"},context:{shopping:["complete",0]},nested:[]}],trigger:"load"},"page view":{data:{domain:"www.example.com",title:"walkerOS documentation",referrer:"https://www.elbwalker.com/",search:"?foo=bar",hash:"#hash",id:"/docs/"},globals:{pagegroup:"docs"},trigger:"load"},"product add":{...n,context:{shopping:["intent",0]},globals:{pagegroup:"shop"},nested:[],trigger:"click"},"product view":{...n,context:{shopping:["detail",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"},"product visible":{data:{...n.data,position:3,promo:!0},context:{shopping:["discover",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"},"promotion visible":{data:{name:"Setting up tracking easily",position:"hero"},context:{ab_test:["engagement",0]},globals:{pagegroup:"homepage"},trigger:"visible"},"session start":{data:{id:"s3ss10n",start: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})}var b=require("@walkeros/web-core"),y={},v={};i(v,{events:()=>w,mapping:()=>x});var w={};function f(){return["purchase",{revenue:{currency:"EUR",amount:h("order complete").data.total}}]}function k(){const e=h();return["Custom Event",{props:e.data,revenue:e.data.number}]}i(w,{customEvent:()=>k,purchase:()=>f});var x={};i(x,{config:()=>E,customEvent:()=>O,purchase:()=>j});var O={name:"Custom Event",data:{map:{props:"data",revenue:"data.number"}}},j={name:"purchase",data:{map:{revenue:{map:{currency:{value:"EUR"},amount:"data.total"}}}}},E={entity:{action:O},order:{complete:j}},S={type:"plausible",config:{},init({config:e,env:t}){const{window:r}=(0,b.getEnvironment)(t),n=r,o=e.settings||{};return e.loadScript&&function(e,t,r="https://plausible.io/js/script.manual.js"){const{document:n}=(0,b.getEnvironment)(t),o=n,a=o.createElement("script");a.src=r,e&&(a.dataset.domain=e);o.head.appendChild(a)}(o.domain,t),n.plausible=n.plausible||function(){(n.plausible.q=n.plausible.q||[]).push(arguments)},e},push(e,{config:t,data:r,env:n}){const o=d(r)?r:{},{window:a}=(0,b.getEnvironment)(n);(0,a.plausible)(`${e.name}`,o)}};var A=S;//# sourceMappingURL=index.js.map
1
+ "use strict";var e,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,a=Object.prototype.hasOwnProperty,r=(e,n)=>{for(var o in n)t(e,o,{get:n[o],enumerable:!0})},s={};r(s,{DestinationPlausible:()=>d,default:()=>O,destinationPlausible:()=>j,examples:()=>g}),module.exports=(e=s,((e,r,s,i)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let c of o(r))a.call(e,c)||c===s||t(e,c,{get:()=>r[c],enumerable:!(i=n(r,c))||i.enumerable});return e})(t({},"__esModule",{value:!0}),e));var i={merge:!0,shallow:!0,extend:!0};function c(e){return"object"==typeof e&&null!==e&&!function(e){return Array.isArray(e)}(e)&&"[object Object]"===Object.prototype.toString.call(e)}function p(e={}){var t;const n=e.timestamp||(new Date).setHours(0,13,37,0),o=e.group||"gr0up",a=e.count||1,r=function(e,t={},n={}){n={...i,...n};const o=Object.entries(t).reduce((t,[o,a])=>{const r=e[o];return n.merge&&Array.isArray(r)&&Array.isArray(a)?t[o]=a.reduce((e,t)=>e.includes(t)?e:[...e,t],[...r]):(n.extend||o in e)&&(t[o]=a),t},{});return n.shallow?{...e,...o}:(Object.assign(e,o),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:`${n}-${o}-${a}`,trigger:"test",entity:"entity",action:"action",timestamp:n,timing:3.14,group:o,count:a,version:{source:"0.2.0",tagging:1},source:{type:"web",id:"https://localhost:80",previous_id:"http://remotehost:9001"}},e,{merge:!1});if(e.name){const[n,o]=null!=(t=e.name.split(" "))?t:[];n&&o&&(r.entity=n,r.action=o)}return r}function u(e="entity action",t={}){const n=t.timestamp||(new Date).setHours(0,13,37,0),o={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 p({...{"cart view":{data:{currency:"EUR",value:2*o.data.price},context:{shopping:["cart",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",data:{...o.data,quantity:2},context:{shopping:["cart",0]},nested:[]}],trigger:"load"},"checkout view":{data:{step:"payment",currency:"EUR",value:o.data.price+a.data.price},context:{shopping:["checkout",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",...o,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",...o,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":{...o,context:{shopping:["intent",0]},globals:{pagegroup:"shop"},nested:[],trigger:"click"},"product view":{...o,context:{shopping:["detail",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"},"product visible":{data:{...o.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:n,isNew:!0,count:1,runs:1,isStart:!0,storage:!0,referrer:"",device:"c00k13"},user:{id:"us3r",device:"c00k13",session:"s3ss10n",hash:"h4sh",address:"street number",email:"user@example.com",phone:"+49 123 456 789",userAgent:"Mozilla...",browser:"Chrome",browserVersion:"90",deviceType:"desktop",language:"de-DE",country:"DE",region:"HH",city:"Hamburg",zip:"20354",timezone:"Berlin",os:"walkerOS",osVersion:"1.0",screenSize:"1337x420",ip:"127.0.0.0",internal:!0,custom:"value"}}}[e],...t,name:e})}var l=require("@walkeros/web-core"),d={},g={};r(g,{env:()=>m,events:()=>v,mapping:()=>f});var m={};r(m,{init:()=>h,push:()=>b});var h={window:{plausible:void 0},document:{createElement:()=>({src:"",dataset:{},setAttribute:()=>{},removeAttribute:()=>{}}),head:{appendChild:()=>{}},querySelector:()=>null}},b={window:{plausible:Object.assign(()=>{},{q:[]})},document:{createElement:()=>({src:"",dataset:{},setAttribute:()=>{},removeAttribute:()=>{}}),head:{appendChild:()=>{}},querySelector:()=>null}},v={};function y(){return["purchase",{revenue:{currency:"EUR",amount:u("order complete").data.total}}]}function w(){const e=u();return["Custom Event",{props:e.data,revenue:e.data.number}]}r(v,{customEvent:()=>w,purchase:()=>y});var f={};r(f,{config:()=>k,customEvent:()=>x,purchase:()=>E});var x={name:"Custom Event",data:{map:{props:"data",revenue:"data.number"}}},E={name:"purchase",data:{map:{revenue:{map:{currency:{value:"EUR"},amount:"data.total"}}}}},k={entity:{action:x},order:{complete:E}},j={type:"plausible",config:{},init({config:e,env:t}){const{window:n}=(0,l.getEnv)(t),o=n,a=e.settings||{};return e.loadScript&&function(e,t,n="https://plausible.io/js/script.manual.js"){const{document:o}=(0,l.getEnv)(t),a=o,r=a.createElement("script");r.src=n,e&&(r.dataset.domain=e);a.head.appendChild(r)}(a.domain,t),o.plausible=o.plausible||function(){(o.plausible.q=o.plausible.q||[]).push(arguments)},e},push(e,{config:t,data:n,env:o}){const a=c(n)?n:{},{window:r}=(0,l.getEnv)(o);(0,r.plausible)(`${e.name}`,a)}};var O=j;//# 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 { Config, Destination } from './types';\nimport type { DestinationWeb } from '@walkeros/web-core';\nimport { isObject } from '@walkeros/core';\nimport { getEnvironment } from '@walkeros/web-core';\n\n// Types\nexport * as DestinationPlausible from './types';\n\n// Examples\nexport * as examples from './examples';\n\nexport const destinationPlausible: Destination = {\n type: 'plausible',\n\n config: {},\n\n init({ config, env }) {\n const { window } = getEnvironment(env);\n const w = window as Window;\n const settings = config.settings || {};\n\n if (config.loadScript) addScript(settings.domain, env);\n\n w.plausible =\n w.plausible ||\n function () {\n (w.plausible!.q = w.plausible!.q || []).push(arguments);\n };\n\n return config;\n },\n\n push(event, { config, data, env }) {\n const params = isObject(data) ? data : {};\n\n const { window } = getEnvironment(env);\n const plausible = (window as Window).plausible!;\n plausible(`${event.name}`, params);\n },\n};\n\nfunction addScript(\n domain?: string,\n env?: DestinationWeb.Environment,\n src = 'https://plausible.io/js/script.manual.js',\n) {\n const { document } = getEnvironment(env);\n const doc = document as Document;\n const script = doc.createElement('script');\n script.src = src;\n if (domain) script.dataset.domain = domain;\n doc.head.appendChild(script);\n}\n\nexport default destinationPlausible;\n","import type { Mapping as WalkerOSMapping, WalkerOS } from '@walkeros/core';\nimport type { DestinationWeb } from '@walkeros/web-core';\n\ndeclare global {\n interface Window {\n plausible?: Plausible & { q?: IArguments[] };\n }\n}\n\nexport type Plausible = (\n event: string,\n options?: { props?: WalkerOS.AnyObject },\n) => void;\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 domain?: string; // Name of the domain to be tracked\n}\n\n// Single event transformation rule\nexport interface Mapping {}\n\nexport type Rule = WalkerOSMapping.Rule<Mapping>;\nexport type Rules = WalkerOSMapping.Rules<Rule>;\n","export * as events from './events';\nexport * as mapping from './mapping';\n","import { getEvent } from '@walkeros/core';\n\nexport function purchase(): unknown[] {\n const event = getEvent('order complete');\n\n return [\n 'purchase',\n {\n revenue: {\n currency: 'EUR',\n amount: event.data.total,\n },\n },\n ];\n}\n\nexport function customEvent(): unknown[] {\n const event = getEvent();\n\n return [\n 'Custom Event',\n {\n props: event.data,\n revenue: event.data.number,\n },\n ];\n}\n","import type { Mapping } from '@walkeros/core';\nimport type { DestinationPlausible } from '..';\n\nexport const customEvent: DestinationPlausible.Rule = {\n name: 'Custom Event',\n data: {\n map: {\n props: 'data',\n revenue: 'data.number',\n },\n },\n};\n\nexport const purchase: DestinationPlausible.Rule = {\n name: 'purchase',\n data: {\n map: {\n revenue: {\n map: {\n currency: { value: 'EUR' },\n amount: 'data.total',\n },\n },\n },\n },\n};\n\nexport const config = {\n entity: { action: customEvent },\n order: { complete: purchase },\n} satisfies DestinationPlausible.Rules;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,sBAA+B;;;ACH/B;;;ACAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAEO,SAAS,WAAsB;AACpC,QAAM,QAAQ,EAAS,gBAAgB;AAEvC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,MACE,SAAS;AAAA,QACP,UAAU;AAAA,QACV,QAAQ,MAAM,KAAK;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,cAAyB;AACvC,QAAM,QAAQ,EAAS;AAEvB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,MACE,OAAO,MAAM;AAAA,MACb,SAAS,MAAM,KAAK;AAAA,IACtB;AAAA,EACF;AACF;;;AC1BA;AAAA;AAAA;AAAA,qBAAAA;AAAA,EAAA,gBAAAC;AAAA;AAGO,IAAMD,eAAyC;AAAA,EACpD,MAAM;AAAA,EACN,MAAM;AAAA,IACJ,KAAK;AAAA,MACH,OAAO;AAAA,MACP,SAAS;AAAA,IACX;AAAA,EACF;AACF;AAEO,IAAMC,YAAsC;AAAA,EACjD,MAAM;AAAA,EACN,MAAM;AAAA,IACJ,KAAK;AAAA,MACH,SAAS;AAAA,QACP,KAAK;AAAA,UACH,UAAU,EAAE,OAAO,MAAM;AAAA,UACzB,QAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,SAAS;AAAA,EACpB,QAAQ,EAAE,QAAQD,aAAY;AAAA,EAC9B,OAAO,EAAE,UAAUC,UAAS;AAC9B;;;AJnBO,IAAM,uBAAoC;AAAA,EAC/C,MAAM;AAAA,EAEN,QAAQ,CAAC;AAAA,EAET,KAAK,EAAE,QAAAC,SAAQ,IAAI,GAAG;AACpB,UAAM,EAAE,OAAO,QAAI,gCAAe,GAAG;AACrC,UAAMC,KAAI;AACV,UAAM,WAAWD,QAAO,YAAY,CAAC;AAErC,QAAIA,QAAO,WAAY,WAAU,SAAS,QAAQ,GAAG;AAErD,IAAAC,GAAE,YACAA,GAAE,aACF,WAAY;AACV,OAACA,GAAE,UAAW,IAAIA,GAAE,UAAW,KAAK,CAAC,GAAG,KAAK,SAAS;AAAA,IACxD;AAEF,WAAOD;AAAA,EACT;AAAA,EAEA,KAAK,OAAO,EAAE,QAAAA,SAAQ,MAAM,IAAI,GAAG;AACjC,UAAM,SAAS,EAAS,IAAI,IAAI,OAAO,CAAC;AAExC,UAAM,EAAE,OAAO,QAAI,gCAAe,GAAG;AACrC,UAAM,YAAa,OAAkB;AACrC,cAAU,GAAG,MAAM,IAAI,IAAI,MAAM;AAAA,EACnC;AACF;AAEA,SAAS,UACP,QACA,KACA,MAAM,4CACN;AACA,QAAM,EAAE,UAAAE,UAAS,QAAI,gCAAe,GAAG;AACvC,QAAM,MAAMA;AACZ,QAAM,SAAS,IAAI,cAAc,QAAQ;AACzC,SAAO,MAAM;AACb,MAAI,OAAQ,QAAO,QAAQ,SAAS;AACpC,MAAI,KAAK,YAAY,MAAM;AAC7B;AAEA,IAAO,gBAAQ;","names":["customEvent","purchase","config","w","document"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/types/index.ts","../src/examples/index.ts","../src/examples/env.ts","../src/examples/events.ts","../src/examples/mapping.ts"],"sourcesContent":["import type { Config, Destination } from './types';\nimport type { DestinationWeb } from '@walkeros/web-core';\nimport { isObject } from '@walkeros/core';\nimport { getEnv } from '@walkeros/web-core';\n\n// Types\nexport * as DestinationPlausible from './types';\n\n// Examples\nexport * as examples from './examples';\n\nexport const destinationPlausible: Destination = {\n type: 'plausible',\n\n config: {},\n\n init({ config, env }) {\n const { window } = getEnv(env);\n const w = window as Window;\n const settings = config.settings || {};\n\n if (config.loadScript) addScript(settings.domain, env);\n\n w.plausible =\n w.plausible ||\n function () {\n (w.plausible!.q = w.plausible!.q || []).push(arguments);\n };\n\n return config;\n },\n\n push(event, { config, data, env }) {\n const params = isObject(data) ? data : {};\n\n const { window } = getEnv(env);\n const plausible = (window as Window).plausible!;\n plausible(`${event.name}`, params);\n },\n};\n\nfunction addScript(\n domain?: string,\n env?: DestinationWeb.Env,\n src = 'https://plausible.io/js/script.manual.js',\n) {\n const { document } = getEnv(env);\n const doc = document as Document;\n const script = doc.createElement('script');\n script.src = src;\n if (domain) script.dataset.domain = domain;\n doc.head.appendChild(script);\n}\n\nexport default destinationPlausible;\n","import type {\n Mapping as WalkerOSMapping,\n WalkerOS,\n Destination as CoreDestination,\n} from '@walkeros/core';\nimport type { DestinationWeb } from '@walkeros/web-core';\n\ndeclare global {\n interface Window {\n plausible?: Plausible & { q?: IArguments[] };\n }\n}\n\nexport type Plausible = (\n event: string,\n options?: { props?: WalkerOS.AnyObject },\n) => void;\n\nexport interface Settings {\n domain?: string;\n}\n\nexport interface Mapping {}\n\nexport interface Env extends DestinationWeb.Env {\n window: {\n plausible: Plausible & { q?: IArguments[] };\n };\n}\n\nexport type Types = CoreDestination.Types<Settings, Mapping, Env>;\n\nexport type Destination = DestinationWeb.Destination<Types>;\nexport type Config = DestinationWeb.Config<Types>;\n\nexport interface PlausibleDestination extends Destination {\n env?: Env;\n}\n\nexport type Rule = WalkerOSMapping.Rule<Mapping>;\nexport type Rules = WalkerOSMapping.Rules<Rule>;\n","export * as env from './env';\nexport * as events from './events';\nexport * as mapping from './mapping';\n","import type { Env } from '../types';\n\n/**\n * Example environment configurations for Plausible destination\n *\n * These environments provide standardized mock structures for testing\n * and development without requiring external dependencies.\n */\n\n// Simple no-op function for mocking\nconst noop = () => {};\n\nexport const init: Env | undefined = {\n window: {\n plausible: undefined as unknown as Env['window']['plausible'],\n },\n document: {\n createElement: () => ({\n src: '',\n dataset: {},\n setAttribute: () => {},\n removeAttribute: () => {},\n }),\n head: { appendChild: () => {} },\n querySelector: () => null,\n },\n};\n\nexport const push: Env = {\n window: {\n plausible: Object.assign(noop, {\n // Add queue property for analytics loading pattern\n q: [] as IArguments[],\n }) as unknown as Env['window']['plausible'],\n },\n document: {\n createElement: () => ({\n src: '',\n dataset: {},\n setAttribute: () => {},\n removeAttribute: () => {},\n }),\n head: { appendChild: () => {} },\n querySelector: () => null,\n },\n};\n\n// Future: error scenarios (v2)\n// export const error: Env = { ... };\n","import { getEvent } from '@walkeros/core';\n\nexport function purchase(): unknown[] {\n const event = getEvent('order complete');\n\n return [\n 'purchase',\n {\n revenue: {\n currency: 'EUR',\n amount: event.data.total,\n },\n },\n ];\n}\n\nexport function customEvent(): unknown[] {\n const event = getEvent();\n\n return [\n 'Custom Event',\n {\n props: event.data,\n revenue: event.data.number,\n },\n ];\n}\n","import type { Mapping } from '@walkeros/core';\nimport type { DestinationPlausible } from '..';\n\nexport const customEvent: DestinationPlausible.Rule = {\n name: 'Custom Event',\n data: {\n map: {\n props: 'data',\n revenue: 'data.number',\n },\n },\n};\n\nexport const purchase: DestinationPlausible.Rule = {\n name: 'purchase',\n data: {\n map: {\n revenue: {\n map: {\n currency: { value: 'EUR' },\n amount: 'data.total',\n },\n },\n },\n },\n};\n\nexport const config = {\n entity: { action: customEvent },\n order: { complete: purchase },\n} satisfies DestinationPlausible.Rules;\n"],"mappings":"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","names":["customEvent","purchase","config","document"]}
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- var e,t,a=Object.defineProperty,r=(e,t)=>{for(var r in t)a(e,r,{get:t[r],enumerable:!0})},o=Object.getOwnPropertyNames,n=(e={"package.json"(e,t){t.exports={name:"@walkeros/core",description:"Core types and platform-agnostic utilities for walkerOS",version:"0.1.2",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[o(e)[0]])((t={exports:{}}).exports,t),t.exports}),s={merge:!0,shallow:!0,extend:!0};function i(e){return"object"==typeof e&&null!==e&&!function(e){return Array.isArray(e)}(e)&&"[object Object]"===Object.prototype.toString.call(e)}var{version:c}=n();function p(e={}){var t;const a=e.timestamp||(new Date).setHours(0,13,37,0),r=e.group||"gr0up",o=e.count||1,n=function(e,t={},a={}){a={...s,...a};const r=Object.entries(t).reduce((t,[r,o])=>{const n=e[r];return a.merge&&Array.isArray(n)&&Array.isArray(o)?t[r]=o.reduce((e,t)=>e.includes(t)?e:[...e,t],[...n]):(a.extend||r in e)&&(t[r]=o),t},{});return a.shallow?{...e,...r}:(Object.assign(e,r),e)}({name:"entity action",data:{string:"foo",number:1,boolean:!0,array:[0,"text",!1],not:void 0},context:{dev:["test",1]},globals:{lang:"elb"},custom:{completely:"random"},user:{id:"us3r",device:"c00k13",session:"s3ss10n"},nested:[{entity:"child",data:{is:"subordinated"},nested:[],context:{element:["child",0]}}],consent:{functional:!0},id:`${a}-${r}-${o}`,trigger:"test",entity:"entity",action:"action",timestamp:a,timing:3.14,group:r,count:o,version:{source:c,tagging:1},source:{type:"web",id:"https://localhost:80",previous_id:"http://remotehost:9001"}},e,{merge:!1});if(e.name){const[a,r]=null!=(t=e.name.split(" "))?t:[];a&&r&&(n.entity=a,n.action=r)}return n}function l(e="entity action",t={}){const a=t.timestamp||(new Date).setHours(0,13,37,0),r={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 p({...{"cart view":{data:{currency:"EUR",value:2*r.data.price},context:{shopping:["cart",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",data:{...r.data,quantity:2},context:{shopping:["cart",0]},nested:[]}],trigger:"load"},"checkout view":{data:{step:"payment",currency:"EUR",value:r.data.price+o.data.price},context:{shopping:["checkout",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",...r,context:{shopping:["checkout",0]},nested:[]},{entity:"product",...o,context:{shopping:["checkout",0]},nested:[]}],trigger:"load"},"order complete":{data:{id:"0rd3r1d",currency:"EUR",shipping:5.22,taxes:73.76,total:555},context:{shopping:["complete",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",...r,context:{shopping:["complete",0]},nested:[]},{entity:"product",...o,context:{shopping:["complete",0]},nested:[]},{entity:"gift",data:{name:"Surprise"},context:{shopping:["complete",0]},nested:[]}],trigger:"load"},"page view":{data:{domain:"www.example.com",title:"walkerOS documentation",referrer:"https://www.elbwalker.com/",search:"?foo=bar",hash:"#hash",id:"/docs/"},globals:{pagegroup:"docs"},trigger:"load"},"product add":{...r,context:{shopping:["intent",0]},globals:{pagegroup:"shop"},nested:[],trigger:"click"},"product view":{...r,context:{shopping:["detail",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"},"product visible":{data:{...r.data,position:3,promo:!0},context:{shopping:["discover",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"},"promotion visible":{data:{name:"Setting up tracking easily",position:"hero"},context:{ab_test:["engagement",0]},globals:{pagegroup:"homepage"},trigger:"visible"},"session start":{data:{id:"s3ss10n",start:a,isNew:!0,count:1,runs:1,isStart:!0,storage:!0,referrer:"",device:"c00k13"},user:{id:"us3r",device:"c00k13",session:"s3ss10n",hash:"h4sh",address:"street number",email:"user@example.com",phone:"+49 123 456 789",userAgent:"Mozilla...",browser:"Chrome",browserVersion:"90",deviceType:"desktop",language:"de-DE",country:"DE",region:"HH",city:"Hamburg",zip:"20354",timezone:"Berlin",os:"walkerOS",osVersion:"1.0",screenSize:"1337x420",ip:"127.0.0.0",internal:!0,custom:"value"}}}[e],...t,name:e})}import{getEnvironment as d}from"@walkeros/web-core";var u={},g={};r(g,{events:()=>m,mapping:()=>y});var m={};function h(){return["purchase",{revenue:{currency:"EUR",amount:l("order complete").data.total}}]}function b(){const e=l();return["Custom Event",{props:e.data,revenue:e.data.number}]}r(m,{customEvent:()=>b,purchase:()=>h});var y={};r(y,{config:()=>k,customEvent:()=>v,purchase:()=>w});var v={name:"Custom Event",data:{map:{props:"data",revenue:"data.number"}}},w={name:"purchase",data:{map:{revenue:{map:{currency:{value:"EUR"},amount:"data.total"}}}}},k={entity:{action:v},order:{complete:w}},f={type:"plausible",config:{},init({config:e,env:t}){const{window:a}=d(t),r=a,o=e.settings||{};return e.loadScript&&function(e,t,a="https://plausible.io/js/script.manual.js"){const{document:r}=d(t),o=r,n=o.createElement("script");n.src=a,e&&(n.dataset.domain=e);o.head.appendChild(n)}(o.domain,t),r.plausible=r.plausible||function(){(r.plausible.q=r.plausible.q||[]).push(arguments)},e},push(e,{config:t,data:a,env:r}){const o=i(a)?a:{},{window:n}=d(r);(0,n.plausible)(`${e.name}`,o)}};var x=f;export{u as DestinationPlausible,x as default,f as destinationPlausible,g as examples};//# sourceMappingURL=index.mjs.map
1
+ var e=Object.defineProperty,t=(t,n)=>{for(var a in n)e(t,a,{get:n[a],enumerable:!0})},n={merge:!0,shallow:!0,extend:!0};function a(e){return"object"==typeof e&&null!==e&&!function(e){return Array.isArray(e)}(e)&&"[object Object]"===Object.prototype.toString.call(e)}function o(e={}){var t;const a=e.timestamp||(new Date).setHours(0,13,37,0),o=e.group||"gr0up",r=e.count||1,s=function(e,t={},a={}){a={...n,...a};const o=Object.entries(t).reduce((t,[n,o])=>{const r=e[n];return a.merge&&Array.isArray(r)&&Array.isArray(o)?t[n]=o.reduce((e,t)=>e.includes(t)?e:[...e,t],[...r]):(a.extend||n in e)&&(t[n]=o),t},{});return a.shallow?{...e,...o}:(Object.assign(e,o),e)}({name:"entity action",data:{string:"foo",number:1,boolean:!0,array:[0,"text",!1],not:void 0},context:{dev:["test",1]},globals:{lang:"elb"},custom:{completely:"random"},user:{id:"us3r",device:"c00k13",session:"s3ss10n"},nested:[{entity:"child",data:{is:"subordinated"},nested:[],context:{element:["child",0]}}],consent:{functional:!0},id:`${a}-${o}-${r}`,trigger:"test",entity:"entity",action:"action",timestamp:a,timing:3.14,group:o,count:r,version:{source:"0.2.0",tagging:1},source:{type:"web",id:"https://localhost:80",previous_id:"http://remotehost:9001"}},e,{merge:!1});if(e.name){const[n,a]=null!=(t=e.name.split(" "))?t:[];n&&a&&(s.entity=n,s.action=a)}return s}function r(e="entity action",t={}){const n=t.timestamp||(new Date).setHours(0,13,37,0),a={data:{id:"ers",name:"Everyday Ruck Snack",color:"black",size:"l",price:420}},r={data:{id:"cc",name:"Cool Cap",size:"one size",price:42}};return o({...{"cart view":{data:{currency:"EUR",value:2*a.data.price},context:{shopping:["cart",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",data:{...a.data,quantity:2},context:{shopping:["cart",0]},nested:[]}],trigger:"load"},"checkout view":{data:{step:"payment",currency:"EUR",value:a.data.price+r.data.price},context:{shopping:["checkout",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",...a,context:{shopping:["checkout",0]},nested:[]},{entity:"product",...r,context:{shopping:["checkout",0]},nested:[]}],trigger:"load"},"order complete":{data:{id:"0rd3r1d",currency:"EUR",shipping:5.22,taxes:73.76,total:555},context:{shopping:["complete",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",...a,context:{shopping:["complete",0]},nested:[]},{entity:"product",...r,context:{shopping:["complete",0]},nested:[]},{entity:"gift",data:{name:"Surprise"},context:{shopping:["complete",0]},nested:[]}],trigger:"load"},"page view":{data:{domain:"www.example.com",title:"walkerOS documentation",referrer:"https://www.elbwalker.com/",search:"?foo=bar",hash:"#hash",id:"/docs/"},globals:{pagegroup:"docs"},trigger:"load"},"product add":{...a,context:{shopping:["intent",0]},globals:{pagegroup:"shop"},nested:[],trigger:"click"},"product view":{...a,context:{shopping:["detail",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"},"product visible":{data:{...a.data,position:3,promo:!0},context:{shopping:["discover",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"},"promotion visible":{data:{name:"Setting up tracking easily",position:"hero"},context:{ab_test:["engagement",0]},globals:{pagegroup:"homepage"},trigger:"visible"},"session start":{data:{id:"s3ss10n",start:n,isNew:!0,count:1,runs:1,isStart:!0,storage:!0,referrer:"",device:"c00k13"},user:{id:"us3r",device:"c00k13",session:"s3ss10n",hash:"h4sh",address:"street number",email:"user@example.com",phone:"+49 123 456 789",userAgent:"Mozilla...",browser:"Chrome",browserVersion:"90",deviceType:"desktop",language:"de-DE",country:"DE",region:"HH",city:"Hamburg",zip:"20354",timezone:"Berlin",os:"walkerOS",osVersion:"1.0",screenSize:"1337x420",ip:"127.0.0.0",internal:!0,custom:"value"}}}[e],...t,name:e})}import{getEnv as s}from"@walkeros/web-core";var i={},c={};t(c,{env:()=>p,events:()=>l,mapping:()=>h});var p={};t(p,{init:()=>u,push:()=>d});var u={window:{plausible:void 0},document:{createElement:()=>({src:"",dataset:{},setAttribute:()=>{},removeAttribute:()=>{}}),head:{appendChild:()=>{}},querySelector:()=>null}},d={window:{plausible:Object.assign(()=>{},{q:[]})},document:{createElement:()=>({src:"",dataset:{},setAttribute:()=>{},removeAttribute:()=>{}}),head:{appendChild:()=>{}},querySelector:()=>null}},l={};function g(){return["purchase",{revenue:{currency:"EUR",amount:r("order complete").data.total}}]}function m(){const e=r();return["Custom Event",{props:e.data,revenue:e.data.number}]}t(l,{customEvent:()=>m,purchase:()=>g});var h={};t(h,{config:()=>y,customEvent:()=>b,purchase:()=>v});var b={name:"Custom Event",data:{map:{props:"data",revenue:"data.number"}}},v={name:"purchase",data:{map:{revenue:{map:{currency:{value:"EUR"},amount:"data.total"}}}}},y={entity:{action:b},order:{complete:v}},w={type:"plausible",config:{},init({config:e,env:t}){const{window:n}=s(t),a=n,o=e.settings||{};return e.loadScript&&function(e,t,n="https://plausible.io/js/script.manual.js"){const{document:a}=s(t),o=a,r=o.createElement("script");r.src=n,e&&(r.dataset.domain=e);o.head.appendChild(r)}(o.domain,t),a.plausible=a.plausible||function(){(a.plausible.q=a.plausible.q||[]).push(arguments)},e},push(e,{config:t,data:n,env:o}){const r=a(n)?n:{},{window:i}=s(o);(0,i.plausible)(`${e.name}`,r)}};var f=w;export{i as DestinationPlausible,f as default,w as destinationPlausible,c as examples};//# sourceMappingURL=index.mjs.map
@@ -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 { Config, Destination } from './types';\nimport type { DestinationWeb } from '@walkeros/web-core';\nimport { isObject } from '@walkeros/core';\nimport { getEnvironment } from '@walkeros/web-core';\n\n// Types\nexport * as DestinationPlausible from './types';\n\n// Examples\nexport * as examples from './examples';\n\nexport const destinationPlausible: Destination = {\n type: 'plausible',\n\n config: {},\n\n init({ config, env }) {\n const { window } = getEnvironment(env);\n const w = window as Window;\n const settings = config.settings || {};\n\n if (config.loadScript) addScript(settings.domain, env);\n\n w.plausible =\n w.plausible ||\n function () {\n (w.plausible!.q = w.plausible!.q || []).push(arguments);\n };\n\n return config;\n },\n\n push(event, { config, data, env }) {\n const params = isObject(data) ? data : {};\n\n const { window } = getEnvironment(env);\n const plausible = (window as Window).plausible!;\n plausible(`${event.name}`, params);\n },\n};\n\nfunction addScript(\n domain?: string,\n env?: DestinationWeb.Environment,\n src = 'https://plausible.io/js/script.manual.js',\n) {\n const { document } = getEnvironment(env);\n const doc = document as Document;\n const script = doc.createElement('script');\n script.src = src;\n if (domain) script.dataset.domain = domain;\n doc.head.appendChild(script);\n}\n\nexport default destinationPlausible;\n","import type { Mapping as WalkerOSMapping, WalkerOS } from '@walkeros/core';\nimport type { DestinationWeb } from '@walkeros/web-core';\n\ndeclare global {\n interface Window {\n plausible?: Plausible & { q?: IArguments[] };\n }\n}\n\nexport type Plausible = (\n event: string,\n options?: { props?: WalkerOS.AnyObject },\n) => void;\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 domain?: string; // Name of the domain to be tracked\n}\n\n// Single event transformation rule\nexport interface Mapping {}\n\nexport type Rule = WalkerOSMapping.Rule<Mapping>;\nexport type Rules = WalkerOSMapping.Rules<Rule>;\n","export * as events from './events';\nexport * as mapping from './mapping';\n","import { getEvent } from '@walkeros/core';\n\nexport function purchase(): unknown[] {\n const event = getEvent('order complete');\n\n return [\n 'purchase',\n {\n revenue: {\n currency: 'EUR',\n amount: event.data.total,\n },\n },\n ];\n}\n\nexport function customEvent(): unknown[] {\n const event = getEvent();\n\n return [\n 'Custom Event',\n {\n props: event.data,\n revenue: event.data.number,\n },\n ];\n}\n","import type { Mapping } from '@walkeros/core';\nimport type { DestinationPlausible } from '..';\n\nexport const customEvent: DestinationPlausible.Rule = {\n name: 'Custom Event',\n data: {\n map: {\n props: 'data',\n revenue: 'data.number',\n },\n },\n};\n\nexport const purchase: DestinationPlausible.Rule = {\n name: 'purchase',\n data: {\n map: {\n revenue: {\n map: {\n currency: { value: 'EUR' },\n amount: 'data.total',\n },\n },\n },\n },\n};\n\nexport const config = {\n entity: { action: customEvent },\n order: { complete: purchase },\n} satisfies DestinationPlausible.Rules;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,SAAS,sBAAsB;;;ACH/B;;;ACAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAEO,SAAS,WAAsB;AACpC,QAAM,QAAQ,EAAS,gBAAgB;AAEvC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,MACE,SAAS;AAAA,QACP,UAAU;AAAA,QACV,QAAQ,MAAM,KAAK;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,cAAyB;AACvC,QAAM,QAAQ,EAAS;AAEvB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,MACE,OAAO,MAAM;AAAA,MACb,SAAS,MAAM,KAAK;AAAA,IACtB;AAAA,EACF;AACF;;;AC1BA;AAAA;AAAA;AAAA,qBAAAA;AAAA,EAAA,gBAAAC;AAAA;AAGO,IAAMD,eAAyC;AAAA,EACpD,MAAM;AAAA,EACN,MAAM;AAAA,IACJ,KAAK;AAAA,MACH,OAAO;AAAA,MACP,SAAS;AAAA,IACX;AAAA,EACF;AACF;AAEO,IAAMC,YAAsC;AAAA,EACjD,MAAM;AAAA,EACN,MAAM;AAAA,IACJ,KAAK;AAAA,MACH,SAAS;AAAA,QACP,KAAK;AAAA,UACH,UAAU,EAAE,OAAO,MAAM;AAAA,UACzB,QAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,SAAS;AAAA,EACpB,QAAQ,EAAE,QAAQD,aAAY;AAAA,EAC9B,OAAO,EAAE,UAAUC,UAAS;AAC9B;;;AJnBO,IAAM,uBAAoC;AAAA,EAC/C,MAAM;AAAA,EAEN,QAAQ,CAAC;AAAA,EAET,KAAK,EAAE,QAAAC,SAAQ,IAAI,GAAG;AACpB,UAAM,EAAE,OAAO,IAAI,eAAe,GAAG;AACrC,UAAMC,KAAI;AACV,UAAM,WAAWD,QAAO,YAAY,CAAC;AAErC,QAAIA,QAAO,WAAY,WAAU,SAAS,QAAQ,GAAG;AAErD,IAAAC,GAAE,YACAA,GAAE,aACF,WAAY;AACV,OAACA,GAAE,UAAW,IAAIA,GAAE,UAAW,KAAK,CAAC,GAAG,KAAK,SAAS;AAAA,IACxD;AAEF,WAAOD;AAAA,EACT;AAAA,EAEA,KAAK,OAAO,EAAE,QAAAA,SAAQ,MAAM,IAAI,GAAG;AACjC,UAAM,SAAS,EAAS,IAAI,IAAI,OAAO,CAAC;AAExC,UAAM,EAAE,OAAO,IAAI,eAAe,GAAG;AACrC,UAAM,YAAa,OAAkB;AACrC,cAAU,GAAG,MAAM,IAAI,IAAI,MAAM;AAAA,EACnC;AACF;AAEA,SAAS,UACP,QACA,KACA,MAAM,4CACN;AACA,QAAM,EAAE,UAAAE,UAAS,IAAI,eAAe,GAAG;AACvC,QAAM,MAAMA;AACZ,QAAM,SAAS,IAAI,cAAc,QAAQ;AACzC,SAAO,MAAM;AACb,MAAI,OAAQ,QAAO,QAAQ,SAAS;AACpC,MAAI,KAAK,YAAY,MAAM;AAC7B;AAEA,IAAO,gBAAQ;","names":["customEvent","purchase","config","w","document"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/types/index.ts","../src/examples/index.ts","../src/examples/env.ts","../src/examples/events.ts","../src/examples/mapping.ts"],"sourcesContent":["import type { Config, Destination } from './types';\nimport type { DestinationWeb } from '@walkeros/web-core';\nimport { isObject } from '@walkeros/core';\nimport { getEnv } from '@walkeros/web-core';\n\n// Types\nexport * as DestinationPlausible from './types';\n\n// Examples\nexport * as examples from './examples';\n\nexport const destinationPlausible: Destination = {\n type: 'plausible',\n\n config: {},\n\n init({ config, env }) {\n const { window } = getEnv(env);\n const w = window as Window;\n const settings = config.settings || {};\n\n if (config.loadScript) addScript(settings.domain, env);\n\n w.plausible =\n w.plausible ||\n function () {\n (w.plausible!.q = w.plausible!.q || []).push(arguments);\n };\n\n return config;\n },\n\n push(event, { config, data, env }) {\n const params = isObject(data) ? data : {};\n\n const { window } = getEnv(env);\n const plausible = (window as Window).plausible!;\n plausible(`${event.name}`, params);\n },\n};\n\nfunction addScript(\n domain?: string,\n env?: DestinationWeb.Env,\n src = 'https://plausible.io/js/script.manual.js',\n) {\n const { document } = getEnv(env);\n const doc = document as Document;\n const script = doc.createElement('script');\n script.src = src;\n if (domain) script.dataset.domain = domain;\n doc.head.appendChild(script);\n}\n\nexport default destinationPlausible;\n","import type {\n Mapping as WalkerOSMapping,\n WalkerOS,\n Destination as CoreDestination,\n} from '@walkeros/core';\nimport type { DestinationWeb } from '@walkeros/web-core';\n\ndeclare global {\n interface Window {\n plausible?: Plausible & { q?: IArguments[] };\n }\n}\n\nexport type Plausible = (\n event: string,\n options?: { props?: WalkerOS.AnyObject },\n) => void;\n\nexport interface Settings {\n domain?: string;\n}\n\nexport interface Mapping {}\n\nexport interface Env extends DestinationWeb.Env {\n window: {\n plausible: Plausible & { q?: IArguments[] };\n };\n}\n\nexport type Types = CoreDestination.Types<Settings, Mapping, Env>;\n\nexport type Destination = DestinationWeb.Destination<Types>;\nexport type Config = DestinationWeb.Config<Types>;\n\nexport interface PlausibleDestination extends Destination {\n env?: Env;\n}\n\nexport type Rule = WalkerOSMapping.Rule<Mapping>;\nexport type Rules = WalkerOSMapping.Rules<Rule>;\n","export * as env from './env';\nexport * as events from './events';\nexport * as mapping from './mapping';\n","import type { Env } from '../types';\n\n/**\n * Example environment configurations for Plausible destination\n *\n * These environments provide standardized mock structures for testing\n * and development without requiring external dependencies.\n */\n\n// Simple no-op function for mocking\nconst noop = () => {};\n\nexport const init: Env | undefined = {\n window: {\n plausible: undefined as unknown as Env['window']['plausible'],\n },\n document: {\n createElement: () => ({\n src: '',\n dataset: {},\n setAttribute: () => {},\n removeAttribute: () => {},\n }),\n head: { appendChild: () => {} },\n querySelector: () => null,\n },\n};\n\nexport const push: Env = {\n window: {\n plausible: Object.assign(noop, {\n // Add queue property for analytics loading pattern\n q: [] as IArguments[],\n }) as unknown as Env['window']['plausible'],\n },\n document: {\n createElement: () => ({\n src: '',\n dataset: {},\n setAttribute: () => {},\n removeAttribute: () => {},\n }),\n head: { appendChild: () => {} },\n querySelector: () => null,\n },\n};\n\n// Future: error scenarios (v2)\n// export const error: Env = { ... };\n","import { getEvent } from '@walkeros/core';\n\nexport function purchase(): unknown[] {\n const event = getEvent('order complete');\n\n return [\n 'purchase',\n {\n revenue: {\n currency: 'EUR',\n amount: event.data.total,\n },\n },\n ];\n}\n\nexport function customEvent(): unknown[] {\n const event = getEvent();\n\n return [\n 'Custom Event',\n {\n props: event.data,\n revenue: event.data.number,\n },\n ];\n}\n","import type { Mapping } from '@walkeros/core';\nimport type { DestinationPlausible } from '..';\n\nexport const customEvent: DestinationPlausible.Rule = {\n name: 'Custom Event',\n data: {\n map: {\n props: 'data',\n revenue: 'data.number',\n },\n },\n};\n\nexport const purchase: DestinationPlausible.Rule = {\n name: 'purchase',\n data: {\n map: {\n revenue: {\n map: {\n currency: { value: 'EUR' },\n amount: 'data.total',\n },\n },\n },\n },\n};\n\nexport const config = {\n entity: { action: customEvent },\n order: { complete: purchase },\n} satisfies DestinationPlausible.Rules;\n"],"mappings":"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","names":["customEvent","purchase","config","document"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@walkeros/web-destination-plausible",
3
3
  "description": "Plausible web destination for walkerOS",
4
- "version": "0.1.2",
4
+ "version": "0.2.0",
5
5
  "license": "MIT",
6
6
  "main": "./dist/index.js",
7
7
  "module": "./dist/index.mjs",
@@ -30,7 +30,7 @@
30
30
  "update": "npx npm-check-updates -u && npm update"
31
31
  },
32
32
  "dependencies": {
33
- "@walkeros/web-core": "0.1.2"
33
+ "@walkeros/web-core": "0.2.0"
34
34
  },
35
35
  "devDependencies": {},
36
36
  "repository": {