@c15t/scripts 2.2.0 → 3.0.0-alpha.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.
Files changed (197) hide show
  1. package/AGENTS.md +74 -48
  2. package/README.md +3 -3
  3. package/dist/e2e-test-utils.js +60 -24
  4. package/dist/engine/compile.js +45 -45
  5. package/dist/engine/runtime.js +119 -119
  6. package/dist/registry.js +186 -176
  7. package/dist/resolve.js +12 -12
  8. package/dist/vendors/_shared/attributes.js +5 -5
  9. package/dist/vendors/_shared/google-consent.js +10 -10
  10. package/dist/vendors/_shared/install-builders.js +9 -9
  11. package/dist/vendors/_shared/script-url.js +12 -12
  12. package/dist/vendors/ads-and-pixels/linkedin-insights.js +16 -16
  13. package/dist/vendors/ads-and-pixels/meta-pixel.js +82 -82
  14. package/dist/vendors/ads-and-pixels/microsoft-uet.js +57 -57
  15. package/dist/vendors/ads-and-pixels/openai-pixel.js +88 -0
  16. package/dist/vendors/ads-and-pixels/reddit-pixel.js +39 -39
  17. package/dist/vendors/ads-and-pixels/snapchat-pixel.js +25 -25
  18. package/dist/vendors/ads-and-pixels/tiktok-pixel.js +31 -31
  19. package/dist/vendors/ads-and-pixels/x-pixel.js +17 -17
  20. package/dist/vendors/analytics/adobe-analytics.js +17 -17
  21. package/dist/vendors/analytics/ahrefs-analytics.js +8 -8
  22. package/dist/vendors/analytics/amplitude.js +39 -39
  23. package/dist/vendors/analytics/clearbit.js +11 -11
  24. package/dist/vendors/analytics/cloudflare-web-analytics.js +13 -13
  25. package/dist/vendors/analytics/databuddy.js +45 -45
  26. package/dist/vendors/analytics/fathom-analytics.js +15 -15
  27. package/dist/vendors/analytics/google-tag.js +23 -23
  28. package/dist/vendors/analytics/heap.js +37 -37
  29. package/dist/vendors/analytics/hightouch.js +30 -30
  30. package/dist/vendors/analytics/hotjar.js +14 -14
  31. package/dist/vendors/analytics/logrocket.js +24 -24
  32. package/dist/vendors/analytics/matomo-analytics.js +51 -51
  33. package/dist/vendors/analytics/microsoft-clarity.js +31 -31
  34. package/dist/vendors/analytics/mixpanel-analytics.js +31 -31
  35. package/dist/vendors/analytics/pirsch.js +27 -27
  36. package/dist/vendors/analytics/plausible-analytics.js +24 -24
  37. package/dist/vendors/analytics/posthog.js +84 -79
  38. package/dist/vendors/analytics/promptwatch.js +8 -8
  39. package/dist/vendors/analytics/rudderstack.js +50 -50
  40. package/dist/vendors/analytics/rybbit-analytics.js +30 -30
  41. package/dist/vendors/analytics/segment.js +16 -16
  42. package/dist/vendors/analytics/umami-analytics.js +16 -16
  43. package/dist/vendors/analytics/vercel-analytics.js +22 -22
  44. package/dist/vendors/functional/crisp.js +49 -51
  45. package/dist/vendors/functional/intercom.js +18 -18
  46. package/dist/vendors/tag-managers/google-tag-manager.js +20 -20
  47. package/dist-types/__tests__/helpers.d.ts +10 -10
  48. package/dist-types/engine/compile.d.ts +2 -2
  49. package/dist-types/engine/runtime.d.ts +3 -3
  50. package/dist-types/registry.d.ts +182 -173
  51. package/dist-types/resolve.d.ts +2 -2
  52. package/dist-types/types.d.ts +2 -2
  53. package/dist-types/vendors/_shared/attributes.d.ts +2 -2
  54. package/dist-types/vendors/_shared/google-consent.d.ts +2 -2
  55. package/dist-types/vendors/_shared/install-builders.d.ts +1 -1
  56. package/dist-types/vendors/_shared/script-url.d.ts +6 -6
  57. package/dist-types/vendors/ads-and-pixels/linkedin-insights.d.ts +14 -14
  58. package/dist-types/vendors/ads-and-pixels/meta-pixel.d.ts +27 -27
  59. package/dist-types/vendors/ads-and-pixels/microsoft-uet.d.ts +40 -40
  60. package/dist-types/vendors/ads-and-pixels/openai-pixel.d.ts +211 -0
  61. package/dist-types/vendors/ads-and-pixels/reddit-pixel.d.ts +28 -29
  62. package/dist-types/vendors/ads-and-pixels/snapchat-pixel.d.ts +23 -23
  63. package/dist-types/vendors/ads-and-pixels/tiktok-pixel.d.ts +22 -22
  64. package/dist-types/vendors/ads-and-pixels/x-pixel.d.ts +15 -15
  65. package/dist-types/vendors/analytics/adobe-analytics.d.ts +3 -3
  66. package/dist-types/vendors/analytics/ahrefs-analytics.d.ts +5 -5
  67. package/dist-types/vendors/analytics/amplitude.d.ts +24 -24
  68. package/dist-types/vendors/analytics/clearbit.d.ts +5 -5
  69. package/dist-types/vendors/analytics/cloudflare-web-analytics.d.ts +6 -6
  70. package/dist-types/vendors/analytics/databuddy.d.ts +34 -31
  71. package/dist-types/vendors/analytics/fathom-analytics.d.ts +8 -8
  72. package/dist-types/vendors/analytics/google-tag.d.ts +17 -17
  73. package/dist-types/vendors/analytics/heap.d.ts +17 -17
  74. package/dist-types/vendors/analytics/hightouch.d.ts +15 -15
  75. package/dist-types/vendors/analytics/hotjar.d.ts +9 -9
  76. package/dist-types/vendors/analytics/logrocket.d.ts +11 -11
  77. package/dist-types/vendors/analytics/matomo-analytics.d.ts +3 -3
  78. package/dist-types/vendors/analytics/microsoft-clarity.d.ts +12 -13
  79. package/dist-types/vendors/analytics/mixpanel-analytics.d.ts +20 -20
  80. package/dist-types/vendors/analytics/pirsch.d.ts +10 -10
  81. package/dist-types/vendors/analytics/plausible-analytics.d.ts +13 -13
  82. package/dist-types/vendors/analytics/posthog.d.ts +35 -32
  83. package/dist-types/vendors/analytics/promptwatch.d.ts +5 -5
  84. package/dist-types/vendors/analytics/rudderstack.d.ts +16 -16
  85. package/dist-types/vendors/analytics/rybbit-analytics.d.ts +15 -15
  86. package/dist-types/vendors/analytics/segment.d.ts +11 -11
  87. package/dist-types/vendors/analytics/umami-analytics.d.ts +9 -9
  88. package/dist-types/vendors/analytics/vercel-analytics.d.ts +13 -13
  89. package/dist-types/vendors/functional/crisp.d.ts +9 -9
  90. package/dist-types/vendors/functional/intercom.d.ts +12 -12
  91. package/dist-types/vendors/tag-managers/google-tag-manager.d.ts +16 -16
  92. package/docs/README.md +74 -48
  93. package/docs/assets/v3/brand-bar.png +0 -0
  94. package/docs/assets/v3/brand-card.png +0 -0
  95. package/docs/assets/v3/choice-wall.png +0 -0
  96. package/docs/assets/v3/mobile-card.png +0 -0
  97. package/docs/assets/v3/preferences.png +0 -0
  98. package/docs/customization/overview.md +45 -0
  99. package/docs/customization/recipes.md +79 -0
  100. package/docs/customization/slots.md +55 -0
  101. package/docs/customization/tokens.md +76 -0
  102. package/docs/customization/translations.md +49 -0
  103. package/docs/frameworks/javascript/script-loader.md +30 -339
  104. package/docs/frameworks/next/script-loader.md +134 -467
  105. package/docs/frameworks/react/script-loader.md +35 -535
  106. package/docs/guides/consent-state.md +60 -0
  107. package/docs/guides/data-fetching.md +163 -0
  108. package/docs/guides/deployment-modes.md +63 -0
  109. package/docs/guides/troubleshooting.md +68 -0
  110. package/docs/guides/verify-consent.md +62 -0
  111. package/docs/integrations/adobe-analytics.md +239 -105
  112. package/docs/integrations/ahrefs-analytics.md +238 -104
  113. package/docs/integrations/amplitude.md +219 -157
  114. package/docs/integrations/building-integrations.md +32 -224
  115. package/docs/integrations/clearbit.md +247 -86
  116. package/docs/integrations/cloudflare-web-analytics.md +250 -84
  117. package/docs/integrations/crisp.md +251 -97
  118. package/docs/integrations/databuddy.md +259 -153
  119. package/docs/integrations/fathom-analytics.md +239 -96
  120. package/docs/integrations/google-maps.md +328 -207
  121. package/docs/integrations/google-tag-manager.md +248 -96
  122. package/docs/integrations/google-tag.md +261 -90
  123. package/docs/integrations/heap.md +222 -149
  124. package/docs/integrations/hightouch.md +225 -131
  125. package/docs/integrations/hotjar.md +239 -90
  126. package/docs/integrations/intercom.md +239 -98
  127. package/docs/integrations/linkedin-insights.md +243 -113
  128. package/docs/integrations/logrocket.md +241 -123
  129. package/docs/integrations/matomo-analytics.md +256 -111
  130. package/docs/integrations/meta-pixel.md +197 -324
  131. package/docs/integrations/microsoft-clarity.md +233 -114
  132. package/docs/integrations/microsoft-uet.md +245 -110
  133. package/docs/integrations/mixpanel-analytics.md +252 -87
  134. package/docs/integrations/openai-pixel.md +441 -0
  135. package/docs/integrations/overview.md +95 -133
  136. package/docs/integrations/pirsch.md +249 -96
  137. package/docs/integrations/plausible-analytics.md +241 -100
  138. package/docs/integrations/posthog.md +353 -214
  139. package/docs/integrations/promptwatch.md +251 -81
  140. package/docs/integrations/reddit-pixel.md +226 -173
  141. package/docs/integrations/rudderstack.md +244 -187
  142. package/docs/integrations/rybbit-analytics.md +244 -91
  143. package/docs/integrations/segment.md +238 -92
  144. package/docs/integrations/snapchat-pixel.md +240 -110
  145. package/docs/integrations/tiktok-pixel.md +249 -81
  146. package/docs/integrations/umami-analytics.md +242 -95
  147. package/docs/integrations/vercel-analytics.md +242 -90
  148. package/docs/integrations/x-pixel.md +238 -104
  149. package/docs/integrations/youtube.md +354 -142
  150. package/docs/upgrade-v3.md +334 -0
  151. package/package.json +85 -78
  152. package/readme.json +2 -2
  153. package/dist/e2e-test-utils.cjs +0 -166
  154. package/dist/engine/compile.cjs +0 -130
  155. package/dist/engine/runtime.cjs +0 -475
  156. package/dist/registry.cjs +0 -423
  157. package/dist/resolve.cjs +0 -71
  158. package/dist/types.cjs +0 -69
  159. package/dist/vendors/_shared/attributes.cjs +0 -55
  160. package/dist/vendors/_shared/google-consent.cjs +0 -69
  161. package/dist/vendors/_shared/install-builders.cjs +0 -59
  162. package/dist/vendors/_shared/script-url.cjs +0 -78
  163. package/dist/vendors/ads-and-pixels/linkedin-insights.cjs +0 -89
  164. package/dist/vendors/ads-and-pixels/meta-pixel.cjs +0 -206
  165. package/dist/vendors/ads-and-pixels/microsoft-uet.cjs +0 -151
  166. package/dist/vendors/ads-and-pixels/reddit-pixel.cjs +0 -151
  167. package/dist/vendors/ads-and-pixels/snapchat-pixel.cjs +0 -131
  168. package/dist/vendors/ads-and-pixels/tiktok-pixel.cjs +0 -130
  169. package/dist/vendors/ads-and-pixels/x-pixel.cjs +0 -92
  170. package/dist/vendors/analytics/adobe-analytics.cjs +0 -90
  171. package/dist/vendors/analytics/ahrefs-analytics.cjs +0 -68
  172. package/dist/vendors/analytics/amplitude.cjs +0 -193
  173. package/dist/vendors/analytics/clearbit.cjs +0 -69
  174. package/dist/vendors/analytics/cloudflare-web-analytics.cjs +0 -73
  175. package/dist/vendors/analytics/databuddy.cjs +0 -144
  176. package/dist/vendors/analytics/fathom-analytics.cjs +0 -76
  177. package/dist/vendors/analytics/google-tag.cjs +0 -107
  178. package/dist/vendors/analytics/heap.cjs +0 -181
  179. package/dist/vendors/analytics/hightouch.cjs +0 -153
  180. package/dist/vendors/analytics/hotjar.cjs +0 -85
  181. package/dist/vendors/analytics/logrocket.cjs +0 -99
  182. package/dist/vendors/analytics/matomo-analytics.cjs +0 -232
  183. package/dist/vendors/analytics/microsoft-clarity.cjs +0 -138
  184. package/dist/vendors/analytics/mixpanel-analytics.cjs +0 -134
  185. package/dist/vendors/analytics/pirsch.cjs +0 -108
  186. package/dist/vendors/analytics/plausible-analytics.cjs +0 -122
  187. package/dist/vendors/analytics/posthog.cjs +0 -236
  188. package/dist/vendors/analytics/promptwatch.cjs +0 -70
  189. package/dist/vendors/analytics/rudderstack.cjs +0 -227
  190. package/dist/vendors/analytics/rybbit-analytics.cjs +0 -104
  191. package/dist/vendors/analytics/segment.cjs +0 -97
  192. package/dist/vendors/analytics/umami-analytics.cjs +0 -80
  193. package/dist/vendors/analytics/vercel-analytics.cjs +0 -94
  194. package/dist/vendors/functional/crisp.cjs +0 -143
  195. package/dist/vendors/functional/intercom.cjs +0 -89
  196. package/dist/vendors/tag-managers/google-tag-manager.cjs +0 -100
  197. package/docs/shared/react/guides/script-loader.md +0 -311
@@ -1,16 +1,16 @@
1
- import { emitScriptDebugEvent } from "c15t";
1
+ import { emitScriptDebugEvent } from "@c15t/core";
2
2
  import { RUNTIME_VALUE_KIND } from "../types.js";
3
- function isRuntimeValue(value) {
3
+ const runtime_isRuntimeValue = function(value) {
4
4
  if (null === value || 'object' != typeof value || Array.isArray(value)) return false;
5
5
  const candidate = value;
6
6
  return candidate.kind === RUNTIME_VALUE_KIND && ('date' === candidate.value || 'timestamp' === candidate.value);
7
- }
8
- function resolveRuntimeValue(value) {
7
+ };
8
+ const runtime_resolveRuntimeValue = function(value) {
9
9
  if ('date' === value.value) return new Date();
10
10
  return Date.now();
11
- }
12
- function cloneStepValue(value) {
13
- if (isRuntimeValue(value)) return resolveRuntimeValue(value);
11
+ };
12
+ const runtime_cloneStepValue = function cloneStepValue(value) {
13
+ if (runtime_isRuntimeValue(value)) return runtime_resolveRuntimeValue(value);
14
14
  if (value instanceof Date) return new Date(value);
15
15
  if (Array.isArray(value)) return value.map((item)=>cloneStepValue(item));
16
16
  if (null !== value && 'object' == typeof value) return Object.fromEntries(Object.entries(value).map(([key, nestedValue])=>[
@@ -18,11 +18,11 @@ function cloneStepValue(value) {
18
18
  cloneStepValue(nestedValue)
19
19
  ]));
20
20
  return value;
21
- }
22
- function isRecord(value) {
21
+ };
22
+ const runtime_isRecord = function(value) {
23
23
  return null !== value && 'object' == typeof value && !Array.isArray(value);
24
- }
25
- function getPathTarget(root, path) {
24
+ };
25
+ const runtime_getPathTarget = function(root, path) {
26
26
  if (0 === path.length) return;
27
27
  let target = root;
28
28
  for (const segment of path.slice(0, -1)){
@@ -31,11 +31,11 @@ function getPathTarget(root, path) {
31
31
  target = next;
32
32
  }
33
33
  return {
34
- target,
35
- key: path[path.length - 1]
34
+ key: path[path.length - 1],
35
+ target
36
36
  };
37
- }
38
- function resolveQueueTarget(root, queue, owner) {
37
+ };
38
+ const runtime_resolveQueueTarget = function(root, queue, owner) {
39
39
  if ('global' in queue && 'string' == typeof queue.global) {
40
40
  const queueTarget = root[queue.global];
41
41
  return Array.isArray(queueTarget) ? queueTarget : void 0;
@@ -44,15 +44,15 @@ function resolveQueueTarget(root, queue, owner) {
44
44
  const queueProperty = queue.property;
45
45
  const queueTarget = owner[queueProperty];
46
46
  return Array.isArray(queueTarget) ? queueTarget : void 0;
47
- }
48
- function executeStep(step) {
47
+ };
48
+ const runtime_executeStep = function(step) {
49
49
  const win = window;
50
50
  switch(step.type){
51
51
  case 'setGlobal':
52
52
  {
53
53
  const shouldSet = false !== step.ifUndefined;
54
54
  if (shouldSet && void 0 !== win[step.name]) break;
55
- win[step.name] = cloneStepValue(step.value);
55
+ win[step.name] = runtime_cloneStepValue(step.value);
56
56
  break;
57
57
  }
58
58
  case 'defineQueueFunction':
@@ -76,7 +76,7 @@ function executeStep(step) {
76
76
  const dispatcher = self && step.dispatchProperty ? self[step.dispatchProperty] : void 0;
77
77
  const runtimeArgs = Array.from(arguments);
78
78
  if ('function' == typeof dispatcher) return void dispatcher.apply(self, runtimeArgs);
79
- const queueTarget = resolveQueueTarget(win, step.queue, self);
79
+ const queueTarget = runtime_resolveQueueTarget(win, step.queue, self);
80
80
  if (!queueTarget) return;
81
81
  if ('array' === step.queueFormat) return void queueTarget.push(runtimeArgs);
82
82
  queueTarget.push(arguments);
@@ -89,14 +89,14 @@ function executeStep(step) {
89
89
  }
90
90
  for (const alias of step.aliases ?? [])win[alias] = stub;
91
91
  for (const selfReference of step.selfReferences ?? [])stubRecord[selfReference] = stub;
92
- for (const [key, value] of Object.entries(step.properties ?? {}))stubRecord[key] = cloneStepValue(value);
92
+ for (const [key, value] of Object.entries(step.properties ?? {}))stubRecord[key] = runtime_cloneStepValue(value);
93
93
  break;
94
94
  }
95
95
  case 'callGlobal':
96
96
  {
97
97
  const target = win[step.global];
98
98
  if (!target) break;
99
- const args = (step.args ?? []).map((arg)=>cloneStepValue(arg));
99
+ const args = (step.args ?? []).map((arg)=>runtime_cloneStepValue(arg));
100
100
  if (step.method) {
101
101
  const objectTarget = target;
102
102
  const method = objectTarget[step.method];
@@ -107,16 +107,16 @@ function executeStep(step) {
107
107
  case 'pushToQueue':
108
108
  {
109
109
  const queueTarget = win[step.queue];
110
- if (Array.isArray(queueTarget)) queueTarget.push(cloneStepValue(step.value));
110
+ if (Array.isArray(queueTarget)) queueTarget.push(runtime_cloneStepValue(step.value));
111
111
  break;
112
112
  }
113
113
  case 'setGlobalPath':
114
114
  {
115
- const rootGlobal = step.path[0];
115
+ const [rootGlobal] = step.path;
116
116
  if (step.ifGlobalIsQueue && (!rootGlobal || !Array.isArray(win[rootGlobal]))) break;
117
- const pathTarget = getPathTarget(win, step.path);
117
+ const pathTarget = runtime_getPathTarget(win, step.path);
118
118
  if (!pathTarget) break;
119
- pathTarget.target[pathTarget.key] = cloneStepValue(step.value);
119
+ pathTarget.target[pathTarget.key] = runtime_cloneStepValue(step.value);
120
120
  break;
121
121
  }
122
122
  case 'defineQueueMethods':
@@ -126,15 +126,15 @@ function executeStep(step) {
126
126
  if (!step.queue && !Array.isArray(target)) break;
127
127
  const targetRecord = target;
128
128
  for (const methodName of step.methods)targetRecord[methodName] = (...args)=>{
129
- const queueTarget = resolveQueueTarget(win, step.queue ?? {
129
+ const queueTarget = runtime_resolveQueueTarget(win, step.queue ?? {
130
130
  global: step.target
131
131
  }, targetRecord);
132
132
  if (!queueTarget) return;
133
133
  if ('methodCall' === step.queueFormat || 'wrappedMethodCall' === step.queueFormat || 'voidMethodCall' === step.queueFormat) {
134
134
  const promise = new Promise((resolve)=>{
135
135
  queueTarget.push({
136
- name: methodName,
137
136
  args,
137
+ name: methodName,
138
138
  resolve
139
139
  });
140
140
  });
@@ -145,13 +145,13 @@ function executeStep(step) {
145
145
  return promise;
146
146
  }
147
147
  if ('callback' === step.queueFormat) return void queueTarget.push({
148
- name: methodName,
149
148
  fn: ()=>{
150
149
  const latestTarget = win[step.target];
151
150
  if (null === latestTarget || 'object' != typeof latestTarget && 'function' != typeof latestTarget) return;
152
151
  const method = latestTarget[methodName];
153
152
  if ('function' == typeof method) method.apply(latestTarget, args);
154
- }
153
+ },
154
+ name: methodName
155
155
  });
156
156
  queueTarget.push([
157
157
  methodName,
@@ -172,8 +172,8 @@ function executeStep(step) {
172
172
  for (const methodName of step.methods)prototype[methodName] = function(...args) {
173
173
  const queueTarget = this[queueProperty];
174
174
  if (Array.isArray(queueTarget)) queueTarget.push({
175
- name: methodName,
176
- args
175
+ args,
176
+ name: methodName
177
177
  });
178
178
  return this;
179
179
  };
@@ -186,19 +186,19 @@ function executeStep(step) {
186
186
  if (null === target || 'object' != typeof target && 'function' != typeof target) break;
187
187
  if (step.ifGlobalIsQueue && !Array.isArray(target)) break;
188
188
  const targetRecord = target;
189
- for (const method of step.methods)targetRecord[method.name] = 'return' === method.behavior ? ()=>cloneStepValue(method.value) : ()=>{};
189
+ for (const method of step.methods)targetRecord[method.name] = 'return' === method.behavior ? ()=>runtime_cloneStepValue(method.value) : ()=>{};
190
190
  break;
191
191
  }
192
192
  case 'constructGlobal':
193
193
  {
194
194
  const Constructor = win[step.constructor];
195
195
  if ('function' != typeof Constructor) break;
196
- const args = (step.args ?? []).map((arg)=>cloneStepValue(arg));
196
+ const args = (step.args ?? []).map((arg)=>runtime_cloneStepValue(arg));
197
197
  if (step.copyAssignedValueToArgProperty) {
198
198
  const firstArg = args[0];
199
- const targetOptions = isRecord(firstArg) ? firstArg : {};
199
+ const targetOptions = runtime_isRecord(firstArg) ? firstArg : {};
200
200
  targetOptions[step.copyAssignedValueToArgProperty] = win[step.assignTo];
201
- if (!isRecord(firstArg)) args.unshift(targetOptions);
201
+ if (!runtime_isRecord(firstArg)) args.unshift(targetOptions);
202
202
  }
203
203
  win[step.assignTo] = new Constructor(...args);
204
204
  break;
@@ -206,81 +206,81 @@ function executeStep(step) {
206
206
  case 'loadScript':
207
207
  break;
208
208
  }
209
- }
210
- function executePhaseSteps(steps, context) {
209
+ };
210
+ const runtime_executePhaseSteps = function(steps, context) {
211
211
  if (0 === steps.length) return;
212
212
  emitScriptDebugEvent({
213
- source: 'manifest-runtime',
214
- scope: 'phase',
215
213
  action: 'phase_start',
216
- message: `Manifest phase ${context.phase} started`,
217
- scriptId: context.scriptId,
218
- elementId: context.elementId,
219
- hasConsent: context.hasConsent,
220
214
  callback: context.callback,
221
- phase: context.phase,
222
215
  data: {
223
216
  stepCount: steps.length
224
- }
217
+ },
218
+ elementId: context.elementId,
219
+ hasConsent: context.hasConsent,
220
+ message: `Manifest phase ${context.phase} started`,
221
+ phase: context.phase,
222
+ scope: 'phase',
223
+ scriptId: context.scriptId,
224
+ source: 'manifest-runtime'
225
225
  });
226
226
  for (const [stepIndex, step] of steps.entries())try {
227
- executeStep(step);
227
+ runtime_executeStep(step);
228
228
  emitScriptDebugEvent({
229
- source: 'manifest-runtime',
230
- scope: 'step',
231
229
  action: 'step_executed',
232
- message: `Executed ${step.type}`,
233
- scriptId: context.scriptId,
230
+ callback: context.callback,
234
231
  elementId: context.elementId,
235
232
  hasConsent: context.hasConsent,
236
- callback: context.callback,
233
+ message: `Executed ${step.type}`,
237
234
  phase: context.phase,
238
- stepType: step.type,
239
- stepIndex
235
+ scope: 'step',
236
+ scriptId: context.scriptId,
237
+ source: 'manifest-runtime',
238
+ stepIndex,
239
+ stepType: step.type
240
240
  });
241
241
  } catch (error) {
242
242
  emitScriptDebugEvent({
243
- source: 'manifest-runtime',
244
- scope: 'step',
245
243
  action: 'step_error',
246
- message: `Failed to execute ${step.type}`,
247
- scriptId: context.scriptId,
244
+ callback: context.callback,
245
+ data: {
246
+ error: error instanceof Error ? error.message : 'string' == typeof error ? error : 'Unknown error'
247
+ },
248
248
  elementId: context.elementId,
249
249
  hasConsent: context.hasConsent,
250
- callback: context.callback,
250
+ message: `Failed to execute ${step.type}`,
251
251
  phase: context.phase,
252
- stepType: step.type,
252
+ scope: 'step',
253
+ scriptId: context.scriptId,
254
+ source: 'manifest-runtime',
253
255
  stepIndex,
254
- data: {
255
- error: error instanceof Error ? error.message : 'string' == typeof error ? error : 'Unknown error'
256
- }
256
+ stepType: step.type
257
257
  });
258
258
  throw error;
259
259
  }
260
260
  emitScriptDebugEvent({
261
- source: 'manifest-runtime',
262
- scope: 'phase',
263
261
  action: 'phase_complete',
264
- message: `Manifest phase ${context.phase} completed`,
265
- scriptId: context.scriptId,
266
- elementId: context.elementId,
267
- hasConsent: context.hasConsent,
268
262
  callback: context.callback,
269
- phase: context.phase,
270
263
  data: {
271
264
  stepCount: steps.length
272
- }
265
+ },
266
+ elementId: context.elementId,
267
+ hasConsent: context.hasConsent,
268
+ message: `Manifest phase ${context.phase} completed`,
269
+ phase: context.phase,
270
+ scope: 'phase',
271
+ scriptId: context.scriptId,
272
+ source: 'manifest-runtime'
273
273
  });
274
- }
275
- function mapConsentState(mapping, consents) {
274
+ };
275
+ const runtime_mapConsentState = function(mapping, consents) {
276
276
  const result = {};
277
277
  for (const [c15tCategory, vendorTypes] of Object.entries(mapping)){
278
278
  const isGranted = consents[c15tCategory];
279
279
  for (const vendorType of vendorTypes)result[vendorType] = isGranted ? 'granted' : 'denied';
280
280
  }
281
281
  return result;
282
- }
283
- function partitionConsentIds(mapping, consents) {
282
+ };
283
+ const runtime_partitionConsentIds = function(mapping, consents) {
284
284
  const allowedConsentIds = [];
285
285
  const deniedConsentIds = [];
286
286
  for (const [c15tCategory, consentIds] of Object.entries(mapping)){
@@ -291,147 +291,147 @@ function partitionConsentIds(mapping, consents) {
291
291
  allowedConsentIds,
292
292
  deniedConsentIds
293
293
  };
294
- }
295
- function getConsentSignalSteps(resolvedManifest, mode, consents) {
294
+ };
295
+ const runtime_getConsentSignalSteps = function(resolvedManifest, mode, consents) {
296
296
  if (!resolvedManifest.consentMapping || !resolvedManifest.consentSignal) return [];
297
297
  switch(resolvedManifest.consentSignal){
298
298
  case 'gtag':
299
299
  {
300
- const mapped = mapConsentState(resolvedManifest.consentMapping, consents);
300
+ const mapped = runtime_mapConsentState(resolvedManifest.consentMapping, consents);
301
301
  return [
302
302
  {
303
- type: 'callGlobal',
304
- global: resolvedManifest.consentSignalTarget ?? 'gtag',
305
303
  args: [
306
304
  'consent',
307
305
  mode,
308
306
  mapped
309
- ]
307
+ ],
308
+ global: resolvedManifest.consentSignalTarget ?? 'gtag',
309
+ type: 'callGlobal'
310
310
  }
311
311
  ];
312
312
  }
313
313
  case 'rudderstack':
314
314
  {
315
- const partition = partitionConsentIds(resolvedManifest.consentMapping, consents);
315
+ const partition = runtime_partitionConsentIds(resolvedManifest.consentMapping, consents);
316
316
  return [
317
317
  {
318
- type: 'callGlobal',
319
- global: resolvedManifest.consentSignalTarget ?? 'rudderanalytics',
320
- method: 'consent',
321
318
  args: [
322
319
  {
323
320
  consentManagement: {
324
- enabled: true,
325
- provider: 'custom',
326
321
  allowedConsentIds: partition.allowedConsentIds,
327
- deniedConsentIds: partition.deniedConsentIds
322
+ deniedConsentIds: partition.deniedConsentIds,
323
+ enabled: true,
324
+ provider: 'custom'
328
325
  }
329
326
  }
330
- ]
327
+ ],
328
+ global: resolvedManifest.consentSignalTarget ?? 'rudderanalytics',
329
+ method: 'consent',
330
+ type: 'callGlobal'
331
331
  }
332
332
  ];
333
333
  }
334
334
  }
335
- }
336
- function resolvedManifestToScript(resolvedManifest) {
335
+ };
336
+ const runtime_resolvedManifestToScript = function(resolvedManifest) {
337
337
  const hasConsentMapping = !!(resolvedManifest.consentMapping && resolvedManifest.consentSignal);
338
338
  const hasLoadConsentBranches = !!(resolvedManifest.onLoadGrantedSteps.length > 0 || resolvedManifest.onLoadDeniedSteps.length > 0);
339
339
  const hasConsentLifecycle = !!(resolvedManifest.onConsentChangeSteps.length > 0 || resolvedManifest.onConsentGrantedSteps.length > 0 || resolvedManifest.onConsentDeniedSteps.length > 0 || hasConsentMapping);
340
340
  const script = {
341
- id: resolvedManifest.vendor,
342
- category: resolvedManifest.category,
343
341
  alwaysLoad: resolvedManifest.alwaysLoad,
344
- persistAfterConsentRevoked: resolvedManifest.persistAfterConsentRevoked,
345
- callbackOnly: resolvedManifest.loadScript ? void 0 : true,
346
- src: resolvedManifest.loadScript?.src,
347
342
  async: resolvedManifest.loadScript?.async,
343
+ attributes: resolvedManifest.loadScript?.attributes,
344
+ callbackOnly: resolvedManifest.loadScript ? void 0 : true,
345
+ category: resolvedManifest.category,
348
346
  defer: resolvedManifest.loadScript?.defer,
349
- attributes: resolvedManifest.loadScript?.attributes
347
+ id: resolvedManifest.vendor,
348
+ persistAfterConsentRevoked: resolvedManifest.persistAfterConsentRevoked,
349
+ src: resolvedManifest.loadScript?.src
350
350
  };
351
351
  if (resolvedManifest.bootstrapSteps.length > 0 || resolvedManifest.setupSteps.length > 0 || resolvedManifest.onBeforeLoadGrantedSteps.length > 0 || resolvedManifest.onBeforeLoadDeniedSteps.length > 0 || hasConsentMapping) script.onBeforeLoad = (info)=>{
352
352
  const baseContext = {
353
- scriptId: resolvedManifest.vendor,
353
+ callback: 'onBeforeLoad',
354
354
  elementId: info.elementId,
355
355
  hasConsent: info.hasConsent,
356
- callback: 'onBeforeLoad'
356
+ scriptId: resolvedManifest.vendor
357
357
  };
358
- executePhaseSteps(resolvedManifest.bootstrapSteps, {
358
+ runtime_executePhaseSteps(resolvedManifest.bootstrapSteps, {
359
359
  ...baseContext,
360
360
  phase: 'bootstrap'
361
361
  });
362
- executePhaseSteps(getConsentSignalSteps(resolvedManifest, 'default', info.consents), {
362
+ runtime_executePhaseSteps(runtime_getConsentSignalSteps(resolvedManifest, 'default', info.consents), {
363
363
  ...baseContext,
364
364
  phase: 'consent-default'
365
365
  });
366
- executePhaseSteps(resolvedManifest.setupSteps, {
366
+ runtime_executePhaseSteps(resolvedManifest.setupSteps, {
367
367
  ...baseContext,
368
368
  phase: 'setup'
369
369
  });
370
- executePhaseSteps(info.hasConsent ? resolvedManifest.onBeforeLoadGrantedSteps : resolvedManifest.onBeforeLoadDeniedSteps, {
370
+ runtime_executePhaseSteps(info.hasConsent ? resolvedManifest.onBeforeLoadGrantedSteps : resolvedManifest.onBeforeLoadDeniedSteps, {
371
371
  ...baseContext,
372
372
  phase: info.hasConsent ? 'onBeforeLoadGranted' : 'onBeforeLoadDenied'
373
373
  });
374
374
  };
375
375
  if (resolvedManifest.afterLoadSteps.length > 0) script.onLoad = (info)=>{
376
376
  const baseContext = {
377
- scriptId: resolvedManifest.vendor,
377
+ callback: 'onLoad',
378
378
  elementId: info.elementId,
379
379
  hasConsent: info.hasConsent,
380
- callback: 'onLoad'
380
+ scriptId: resolvedManifest.vendor
381
381
  };
382
- executePhaseSteps(resolvedManifest.afterLoadSteps, {
382
+ runtime_executePhaseSteps(resolvedManifest.afterLoadSteps, {
383
383
  ...baseContext,
384
384
  phase: 'afterLoad'
385
385
  });
386
- if (info.hasConsent && resolvedManifest.onLoadGrantedSteps.length > 0) executePhaseSteps(resolvedManifest.onLoadGrantedSteps, {
386
+ if (info.hasConsent && resolvedManifest.onLoadGrantedSteps.length > 0) runtime_executePhaseSteps(resolvedManifest.onLoadGrantedSteps, {
387
387
  ...baseContext,
388
388
  phase: 'onLoadGranted'
389
389
  });
390
- else if (!info.hasConsent && resolvedManifest.onLoadDeniedSteps.length > 0) executePhaseSteps(resolvedManifest.onLoadDeniedSteps, {
390
+ else if (!info.hasConsent && resolvedManifest.onLoadDeniedSteps.length > 0) runtime_executePhaseSteps(resolvedManifest.onLoadDeniedSteps, {
391
391
  ...baseContext,
392
392
  phase: 'onLoadDenied'
393
393
  });
394
394
  };
395
395
  else if (hasLoadConsentBranches) script.onLoad = (info)=>{
396
396
  const baseContext = {
397
- scriptId: resolvedManifest.vendor,
397
+ callback: 'onLoad',
398
398
  elementId: info.elementId,
399
399
  hasConsent: info.hasConsent,
400
- callback: 'onLoad'
400
+ scriptId: resolvedManifest.vendor
401
401
  };
402
- if (info.hasConsent && resolvedManifest.onLoadGrantedSteps.length > 0) executePhaseSteps(resolvedManifest.onLoadGrantedSteps, {
402
+ if (info.hasConsent && resolvedManifest.onLoadGrantedSteps.length > 0) runtime_executePhaseSteps(resolvedManifest.onLoadGrantedSteps, {
403
403
  ...baseContext,
404
404
  phase: 'onLoadGranted'
405
405
  });
406
- else if (!info.hasConsent && resolvedManifest.onLoadDeniedSteps.length > 0) executePhaseSteps(resolvedManifest.onLoadDeniedSteps, {
406
+ else if (!info.hasConsent && resolvedManifest.onLoadDeniedSteps.length > 0) runtime_executePhaseSteps(resolvedManifest.onLoadDeniedSteps, {
407
407
  ...baseContext,
408
408
  phase: 'onLoadDenied'
409
409
  });
410
410
  };
411
411
  if (hasConsentLifecycle) script.onConsentChange = (info)=>{
412
412
  const baseContext = {
413
- scriptId: resolvedManifest.vendor,
413
+ callback: 'onConsentChange',
414
414
  elementId: info.elementId,
415
415
  hasConsent: info.hasConsent,
416
- callback: 'onConsentChange'
416
+ scriptId: resolvedManifest.vendor
417
417
  };
418
- executePhaseSteps(getConsentSignalSteps(resolvedManifest, 'update', info.consents), {
418
+ runtime_executePhaseSteps(runtime_getConsentSignalSteps(resolvedManifest, 'update', info.consents), {
419
419
  ...baseContext,
420
420
  phase: 'consent-update'
421
421
  });
422
- if (resolvedManifest.onConsentChangeSteps.length > 0) executePhaseSteps(resolvedManifest.onConsentChangeSteps, {
422
+ if (resolvedManifest.onConsentChangeSteps.length > 0) runtime_executePhaseSteps(resolvedManifest.onConsentChangeSteps, {
423
423
  ...baseContext,
424
424
  phase: 'onConsentChange'
425
425
  });
426
- if (info.hasConsent && resolvedManifest.onConsentGrantedSteps.length > 0) executePhaseSteps(resolvedManifest.onConsentGrantedSteps, {
426
+ if (info.hasConsent && resolvedManifest.onConsentGrantedSteps.length > 0) runtime_executePhaseSteps(resolvedManifest.onConsentGrantedSteps, {
427
427
  ...baseContext,
428
428
  phase: 'onConsentGranted'
429
429
  });
430
- else if (!info.hasConsent && resolvedManifest.onConsentDeniedSteps.length > 0) executePhaseSteps(resolvedManifest.onConsentDeniedSteps, {
430
+ else if (!info.hasConsent && resolvedManifest.onConsentDeniedSteps.length > 0) runtime_executePhaseSteps(resolvedManifest.onConsentDeniedSteps, {
431
431
  ...baseContext,
432
432
  phase: 'onConsentDenied'
433
433
  });
434
434
  };
435
435
  return script;
436
- }
437
- export { resolvedManifestToScript };
436
+ };
437
+ export { runtime_resolvedManifestToScript as resolvedManifestToScript };