@absmartly/sdk-plugins 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (177) hide show
  1. package/README.md +1101 -0
  2. package/dist/absmartly-cookie.min.js +1 -0
  3. package/dist/absmartly-dom-changes-core.min.js +1 -0
  4. package/dist/absmartly-dom-changes-lite.min.js +1 -0
  5. package/dist/absmartly-overrides-full.min.js +1 -0
  6. package/dist/absmartly-overrides-lite.min.js +1 -0
  7. package/dist/absmartly-sdk-plugins.min.js +1 -0
  8. package/dist/absmartly-vitals.min.js +1 -0
  9. package/es/cookies/CookiePlugin.js +410 -0
  10. package/es/cookies/CookiePlugin.js.map +1 -0
  11. package/es/cookies/index.js +2 -0
  12. package/es/cookies/index.js.map +1 -0
  13. package/es/core/DOMChangesPluginLite.js +1124 -0
  14. package/es/core/DOMChangesPluginLite.js.map +1 -0
  15. package/es/core/DOMManipulatorLite.js +410 -0
  16. package/es/core/DOMManipulatorLite.js.map +1 -0
  17. package/es/core/ExposureTracker.js +501 -0
  18. package/es/core/ExposureTracker.js.map +1 -0
  19. package/es/core/HTMLInjector.js +333 -0
  20. package/es/core/HTMLInjector.js.map +1 -0
  21. package/es/core/PendingChangeManager.js +440 -0
  22. package/es/core/PendingChangeManager.js.map +1 -0
  23. package/es/core/StyleSheetManager.js +78 -0
  24. package/es/core/StyleSheetManager.js.map +1 -0
  25. package/es/entries/cookie-only.js +10 -0
  26. package/es/entries/cookie-only.js.map +1 -0
  27. package/es/entries/dom-only.js +13 -0
  28. package/es/entries/dom-only.js.map +1 -0
  29. package/es/entries/dom-with-overrides-full.js +19 -0
  30. package/es/entries/dom-with-overrides-full.js.map +1 -0
  31. package/es/entries/dom-with-overrides-lite.js +15 -0
  32. package/es/entries/dom-with-overrides-lite.js.map +1 -0
  33. package/es/entries/overrides-full-only.js +15 -0
  34. package/es/entries/overrides-full-only.js.map +1 -0
  35. package/es/entries/overrides-lite-only.js +12 -0
  36. package/es/entries/overrides-lite-only.js.map +1 -0
  37. package/es/entries/vitals-only.js +10 -0
  38. package/es/entries/vitals-only.js.map +1 -0
  39. package/es/index.js +17 -0
  40. package/es/index.js.map +1 -0
  41. package/es/overrides/BrowserCookieAdapter.js +76 -0
  42. package/es/overrides/BrowserCookieAdapter.js.map +1 -0
  43. package/es/overrides/OverridesPlugin.js +903 -0
  44. package/es/overrides/OverridesPlugin.js.map +1 -0
  45. package/es/overrides/OverridesPluginFull.js +32 -0
  46. package/es/overrides/OverridesPluginFull.js.map +1 -0
  47. package/es/overrides/OverridesPluginLite.js +352 -0
  48. package/es/overrides/OverridesPluginLite.js.map +1 -0
  49. package/es/overrides/index.js +4 -0
  50. package/es/overrides/index.js.map +1 -0
  51. package/es/overrides/types.js +2 -0
  52. package/es/overrides/types.js.map +1 -0
  53. package/es/parsers/VariantExtractor.js +570 -0
  54. package/es/parsers/VariantExtractor.js.map +1 -0
  55. package/es/types/index.js +2 -0
  56. package/es/types/index.js.map +1 -0
  57. package/es/utils/URLMatcher.js +114 -0
  58. package/es/utils/URLMatcher.js.map +1 -0
  59. package/es/utils/debug.js +184 -0
  60. package/es/utils/debug.js.map +1 -0
  61. package/es/vitals/WebVitalsPlugin.js +379 -0
  62. package/es/vitals/WebVitalsPlugin.js.map +1 -0
  63. package/es/vitals/index.js +2 -0
  64. package/es/vitals/index.js.map +1 -0
  65. package/lib/cookies/CookiePlugin.d.ts +55 -0
  66. package/lib/cookies/CookiePlugin.js +413 -0
  67. package/lib/cookies/CookiePlugin.js.map +1 -0
  68. package/lib/cookies/index.d.ts +2 -0
  69. package/lib/cookies/index.js +6 -0
  70. package/lib/cookies/index.js.map +1 -0
  71. package/lib/core/DOMChangesPluginLite.d.ts +89 -0
  72. package/lib/core/DOMChangesPluginLite.js +1127 -0
  73. package/lib/core/DOMChangesPluginLite.js.map +1 -0
  74. package/lib/core/DOMManipulatorLite.d.ts +21 -0
  75. package/lib/core/DOMManipulatorLite.js +413 -0
  76. package/lib/core/DOMManipulatorLite.js.map +1 -0
  77. package/lib/core/ExposureTracker.d.ts +81 -0
  78. package/lib/core/ExposureTracker.js +504 -0
  79. package/lib/core/ExposureTracker.js.map +1 -0
  80. package/lib/core/HTMLInjector.d.ts +19 -0
  81. package/lib/core/HTMLInjector.js +336 -0
  82. package/lib/core/HTMLInjector.js.map +1 -0
  83. package/lib/core/PendingChangeManager.d.ts +31 -0
  84. package/lib/core/PendingChangeManager.js +443 -0
  85. package/lib/core/PendingChangeManager.js.map +1 -0
  86. package/lib/core/StyleSheetManager.d.ts +16 -0
  87. package/lib/core/StyleSheetManager.js +81 -0
  88. package/lib/core/StyleSheetManager.js.map +1 -0
  89. package/lib/entries/cookie-only.d.ts +8 -0
  90. package/lib/entries/cookie-only.js +12 -0
  91. package/lib/entries/cookie-only.js.map +1 -0
  92. package/lib/entries/dom-only.d.ts +9 -0
  93. package/lib/entries/dom-only.js +29 -0
  94. package/lib/entries/dom-only.js.map +1 -0
  95. package/lib/entries/dom-with-overrides-full.d.ts +15 -0
  96. package/lib/entries/dom-with-overrides-full.js +39 -0
  97. package/lib/entries/dom-with-overrides-full.js.map +1 -0
  98. package/lib/entries/dom-with-overrides-lite.d.ts +11 -0
  99. package/lib/entries/dom-with-overrides-lite.js +32 -0
  100. package/lib/entries/dom-with-overrides-lite.js.map +1 -0
  101. package/lib/entries/overrides-full-only.d.ts +11 -0
  102. package/lib/entries/overrides-full-only.js +33 -0
  103. package/lib/entries/overrides-full-only.js.map +1 -0
  104. package/lib/entries/overrides-lite-only.d.ts +8 -0
  105. package/lib/entries/overrides-lite-only.js +28 -0
  106. package/lib/entries/overrides-lite-only.js.map +1 -0
  107. package/lib/entries/vitals-only.d.ts +8 -0
  108. package/lib/entries/vitals-only.js +12 -0
  109. package/lib/entries/vitals-only.js.map +1 -0
  110. package/lib/index.d.ts +13 -0
  111. package/lib/index.js +34 -0
  112. package/lib/index.js.map +1 -0
  113. package/lib/overrides/BrowserCookieAdapter.d.ts +6 -0
  114. package/lib/overrides/BrowserCookieAdapter.js +79 -0
  115. package/lib/overrides/BrowserCookieAdapter.js.map +1 -0
  116. package/lib/overrides/OverridesPlugin.d.ts +33 -0
  117. package/lib/overrides/OverridesPlugin.js +906 -0
  118. package/lib/overrides/OverridesPlugin.js.map +1 -0
  119. package/lib/overrides/OverridesPluginFull.d.ts +9 -0
  120. package/lib/overrides/OverridesPluginFull.js +35 -0
  121. package/lib/overrides/OverridesPluginFull.js.map +1 -0
  122. package/lib/overrides/OverridesPluginLite.d.ts +27 -0
  123. package/lib/overrides/OverridesPluginLite.js +355 -0
  124. package/lib/overrides/OverridesPluginLite.js.map +1 -0
  125. package/lib/overrides/index.d.ts +3 -0
  126. package/lib/overrides/index.js +23 -0
  127. package/lib/overrides/index.js.map +1 -0
  128. package/lib/overrides/types.d.ts +43 -0
  129. package/lib/overrides/types.js +3 -0
  130. package/lib/overrides/types.js.map +1 -0
  131. package/lib/parsers/VariantExtractor.d.ts +49 -0
  132. package/lib/parsers/VariantExtractor.js +573 -0
  133. package/lib/parsers/VariantExtractor.js.map +1 -0
  134. package/lib/types/index.d.ts +177 -0
  135. package/lib/types/index.js +3 -0
  136. package/lib/types/index.js.map +1 -0
  137. package/lib/utils/URLMatcher.d.ts +20 -0
  138. package/lib/utils/URLMatcher.js +117 -0
  139. package/lib/utils/URLMatcher.js.map +1 -0
  140. package/lib/utils/debug.d.ts +41 -0
  141. package/lib/utils/debug.js +195 -0
  142. package/lib/utils/debug.js.map +1 -0
  143. package/lib/vitals/WebVitalsPlugin.d.ts +37 -0
  144. package/lib/vitals/WebVitalsPlugin.js +382 -0
  145. package/lib/vitals/WebVitalsPlugin.js.map +1 -0
  146. package/lib/vitals/index.d.ts +2 -0
  147. package/lib/vitals/index.js +6 -0
  148. package/lib/vitals/index.js.map +1 -0
  149. package/package.json +94 -0
  150. package/types/cookies/CookiePlugin.d.ts +55 -0
  151. package/types/cookies/index.d.ts +2 -0
  152. package/types/core/DOMChangesPluginLite.d.ts +89 -0
  153. package/types/core/DOMManipulatorLite.d.ts +21 -0
  154. package/types/core/ExposureTracker.d.ts +81 -0
  155. package/types/core/HTMLInjector.d.ts +19 -0
  156. package/types/core/PendingChangeManager.d.ts +31 -0
  157. package/types/core/StyleSheetManager.d.ts +16 -0
  158. package/types/entries/cookie-only.d.ts +8 -0
  159. package/types/entries/dom-only.d.ts +9 -0
  160. package/types/entries/dom-with-overrides-full.d.ts +15 -0
  161. package/types/entries/dom-with-overrides-lite.d.ts +11 -0
  162. package/types/entries/overrides-full-only.d.ts +11 -0
  163. package/types/entries/overrides-lite-only.d.ts +8 -0
  164. package/types/entries/vitals-only.d.ts +8 -0
  165. package/types/index.d.ts +13 -0
  166. package/types/overrides/BrowserCookieAdapter.d.ts +6 -0
  167. package/types/overrides/OverridesPlugin.d.ts +33 -0
  168. package/types/overrides/OverridesPluginFull.d.ts +9 -0
  169. package/types/overrides/OverridesPluginLite.d.ts +27 -0
  170. package/types/overrides/index.d.ts +3 -0
  171. package/types/overrides/types.d.ts +43 -0
  172. package/types/parsers/VariantExtractor.d.ts +49 -0
  173. package/types/types/index.d.ts +177 -0
  174. package/types/utils/URLMatcher.d.ts +20 -0
  175. package/types/utils/debug.d.ts +41 -0
  176. package/types/vitals/WebVitalsPlugin.d.ts +37 -0
  177. package/types/vitals/index.d.ts +2 -0
@@ -0,0 +1,382 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
22
+ var __generator = (this && this.__generator) || function (thisArg, body) {
23
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
24
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
+ function verb(n) { return function (v) { return step([n, v]); }; }
26
+ function step(op) {
27
+ if (f) throw new TypeError("Generator is already executing.");
28
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
29
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
+ if (y = 0, t) op = [op[0] & 2, t.value];
31
+ switch (op[0]) {
32
+ case 0: case 1: t = op; break;
33
+ case 4: _.label++; return { value: op[1], done: false };
34
+ case 5: _.label++; y = op[1]; op = [0]; continue;
35
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
+ default:
37
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
+ if (t[2]) _.ops.pop();
42
+ _.trys.pop(); continue;
43
+ }
44
+ op = body.call(thisArg, _);
45
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
+ }
48
+ };
49
+ var __read = (this && this.__read) || function (o, n) {
50
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
51
+ if (!m) return o;
52
+ var i = m.call(o), r, ar = [], e;
53
+ try {
54
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
55
+ }
56
+ catch (error) { e = { error: error }; }
57
+ finally {
58
+ try {
59
+ if (r && !r.done && (m = i["return"])) m.call(i);
60
+ }
61
+ finally { if (e) throw e.error; }
62
+ }
63
+ return ar;
64
+ };
65
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
66
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
67
+ if (ar || !(i in from)) {
68
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
69
+ ar[i] = from[i];
70
+ }
71
+ }
72
+ return to.concat(ar || Array.prototype.slice.call(from));
73
+ };
74
+ var __values = (this && this.__values) || function(o) {
75
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
76
+ if (m) return m.call(o);
77
+ if (o && typeof o.length === "number") return {
78
+ next: function () {
79
+ if (o && i >= o.length) o = void 0;
80
+ return { value: o && o[i++], done: !o };
81
+ }
82
+ };
83
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
84
+ };
85
+ Object.defineProperty(exports, "__esModule", { value: true });
86
+ exports.WebVitalsPlugin = void 0;
87
+ var debug_1 = require("../utils/debug");
88
+ var WebVitalsPlugin = /** @class */ (function () {
89
+ function WebVitalsPlugin(options) {
90
+ if (options === void 0) { options = {}; }
91
+ this.webVitalsLoaded = false;
92
+ this.metricsTracked = false;
93
+ this.context = options.context;
94
+ this.debug = options.debug || false;
95
+ this.trackWebVitals = options.trackWebVitals !== false;
96
+ this.trackPageMetrics = options.trackPageMetrics !== false;
97
+ this.webVitalsUrl =
98
+ options.webVitalsUrl || 'https://unpkg.com/web-vitals@4/dist/web-vitals.iife.js';
99
+ this.autoTrack = options.autoTrack !== false;
100
+ }
101
+ WebVitalsPlugin.prototype.debugLog = function () {
102
+ var args = [];
103
+ for (var _i = 0; _i < arguments.length; _i++) {
104
+ args[_i] = arguments[_i];
105
+ }
106
+ if (this.debug) {
107
+ debug_1.logDebug.apply(void 0, __spreadArray(['[WebVitalsPlugin]'], __read(args), false));
108
+ }
109
+ };
110
+ WebVitalsPlugin.prototype.setContext = function (context) {
111
+ this.context = context;
112
+ this.debugLog('Context set for WebVitalsPlugin');
113
+ };
114
+ WebVitalsPlugin.prototype.loadWebVitalsLibrary = function () {
115
+ return __awaiter(this, void 0, void 0, function () {
116
+ var _this = this;
117
+ return __generator(this, function (_a) {
118
+ if (this.webVitalsLoaded || typeof window === 'undefined') {
119
+ return [2 /*return*/];
120
+ }
121
+ return [2 /*return*/, new Promise(function (resolve, reject) {
122
+ var script = document.createElement('script');
123
+ script.src = _this.webVitalsUrl;
124
+ script.onload = function () {
125
+ _this.webVitalsLoaded = true;
126
+ _this.debugLog('Web Vitals library loaded');
127
+ resolve();
128
+ };
129
+ script.onerror = function (error) {
130
+ (0, debug_1.logDebug)('[WebVitalsPlugin] Failed to load Web Vitals library:', error);
131
+ reject(error);
132
+ };
133
+ document.head.appendChild(script);
134
+ })];
135
+ });
136
+ });
137
+ };
138
+ WebVitalsPlugin.prototype.trackWebVitalsMetrics = function (context) {
139
+ return __awaiter(this, void 0, void 0, function () {
140
+ var ctx, webVitals, error_1;
141
+ var _this = this;
142
+ return __generator(this, function (_a) {
143
+ switch (_a.label) {
144
+ case 0:
145
+ ctx = context || this.context;
146
+ if (!ctx) {
147
+ (0, debug_1.logDebug)('[WebVitalsPlugin] No context available for tracking web vitals');
148
+ return [2 /*return*/];
149
+ }
150
+ if (!this.trackWebVitals) {
151
+ return [2 /*return*/];
152
+ }
153
+ _a.label = 1;
154
+ case 1:
155
+ _a.trys.push([1, 3, , 4]);
156
+ return [4 /*yield*/, this.loadWebVitalsLibrary()];
157
+ case 2:
158
+ _a.sent();
159
+ webVitals = window.webVitals;
160
+ if (!webVitals) {
161
+ (0, debug_1.logDebug)('[WebVitalsPlugin] Web Vitals library not available');
162
+ return [2 /*return*/];
163
+ }
164
+ // Track Core Web Vitals
165
+ webVitals.onCLS(function (metric) {
166
+ _this.debugLog('CLS:', metric);
167
+ ctx.track('cls_score', __assign({}, metric));
168
+ });
169
+ webVitals.onLCP(function (metric) {
170
+ _this.debugLog('LCP:', metric);
171
+ ctx.track('lcp_score', __assign({}, metric));
172
+ });
173
+ webVitals.onFCP(function (metric) {
174
+ _this.debugLog('FCP:', metric);
175
+ ctx.track('fcp_score', __assign({}, metric));
176
+ });
177
+ webVitals.onINP(function (metric) {
178
+ _this.debugLog('INP:', metric);
179
+ ctx.track('inp_score', __assign({}, metric));
180
+ });
181
+ webVitals.onTTFB(function (metric) {
182
+ _this.debugLog('TTFB:', metric);
183
+ ctx.track('ttfb_score', __assign({}, metric));
184
+ });
185
+ this.debugLog('Web Vitals tracking initialized');
186
+ return [3 /*break*/, 4];
187
+ case 3:
188
+ error_1 = _a.sent();
189
+ (0, debug_1.logDebug)('[WebVitalsPlugin] Error tracking web vitals:', error_1);
190
+ ctx.track('vitals_tracking_error', {
191
+ error: error_1.message,
192
+ type: error_1.name,
193
+ });
194
+ return [3 /*break*/, 4];
195
+ case 4: return [2 /*return*/];
196
+ }
197
+ });
198
+ });
199
+ };
200
+ WebVitalsPlugin.prototype.trackPageMetricsData = function (context) {
201
+ var _this = this;
202
+ var ctx = context || this.context;
203
+ if (!ctx) {
204
+ (0, debug_1.logDebug)('[WebVitalsPlugin] No context available for tracking page metrics');
205
+ return;
206
+ }
207
+ if (!this.trackPageMetrics || this.metricsTracked) {
208
+ return;
209
+ }
210
+ try {
211
+ // Track immediate metrics
212
+ this.trackImmediateMetrics(ctx);
213
+ // Track load-dependent metrics
214
+ if (document.readyState === 'complete') {
215
+ this.trackLoadMetrics(ctx);
216
+ }
217
+ else {
218
+ window.addEventListener('load', function () { return _this.trackLoadMetrics(ctx); });
219
+ }
220
+ this.metricsTracked = true;
221
+ }
222
+ catch (error) {
223
+ (0, debug_1.logDebug)('[WebVitalsPlugin] Error tracking page metrics:', error);
224
+ ctx.track('metrics_tracking_error', {
225
+ error: error.message,
226
+ type: error.name,
227
+ });
228
+ }
229
+ };
230
+ WebVitalsPlugin.prototype.trackImmediateMetrics = function (context) {
231
+ var e_1, _a, e_2, _b;
232
+ var navigation = performance.getEntriesByType('navigation')[0];
233
+ if (!navigation) {
234
+ this.debugLog('Navigation timing not available');
235
+ return;
236
+ }
237
+ // Network timing metrics
238
+ var timingMetrics = {
239
+ dns: navigation.domainLookupEnd - navigation.domainLookupStart,
240
+ tcp: navigation.connectEnd - navigation.connectStart,
241
+ ttfb: navigation.responseStart - navigation.requestStart,
242
+ download: navigation.responseEnd - navigation.responseStart,
243
+ total_fetch: navigation.responseEnd - navigation.requestStart,
244
+ };
245
+ try {
246
+ for (var _c = __values(Object.entries(timingMetrics)), _d = _c.next(); !_d.done; _d = _c.next()) {
247
+ var _e = __read(_d.value, 2), metric = _e[0], value = _e[1];
248
+ context.track("page_timing_".concat(metric), {
249
+ value: value,
250
+ unit: 'ms',
251
+ });
252
+ this.debugLog("Page timing ".concat(metric, ":"), value);
253
+ }
254
+ }
255
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
256
+ finally {
257
+ try {
258
+ if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
259
+ }
260
+ finally { if (e_1) throw e_1.error; }
261
+ }
262
+ // Size metrics
263
+ var sizeMetrics = {
264
+ total_size: navigation.transferSize,
265
+ header_size: navigation.transferSize - navigation.encodedBodySize,
266
+ html_size: navigation.decodedBodySize,
267
+ compressed_html_size: navigation.encodedBodySize,
268
+ };
269
+ try {
270
+ for (var _f = __values(Object.entries(sizeMetrics)), _g = _f.next(); !_g.done; _g = _f.next()) {
271
+ var _h = __read(_g.value, 2), metric = _h[0], value = _h[1];
272
+ context.track("page_".concat(metric), {
273
+ value: value,
274
+ unit: 'bytes',
275
+ });
276
+ this.debugLog("Page ".concat(metric, ":"), value);
277
+ }
278
+ }
279
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
280
+ finally {
281
+ try {
282
+ if (_g && !_g.done && (_b = _f.return)) _b.call(_f);
283
+ }
284
+ finally { if (e_2) throw e_2.error; }
285
+ }
286
+ // Compression ratio
287
+ if (navigation.encodedBodySize > 0) {
288
+ var compressionRatio = navigation.decodedBodySize / navigation.encodedBodySize;
289
+ context.track('page_compression_ratio', {
290
+ value: compressionRatio,
291
+ });
292
+ this.debugLog('Compression ratio:', compressionRatio);
293
+ }
294
+ };
295
+ WebVitalsPlugin.prototype.trackLoadMetrics = function (context) {
296
+ var e_3, _a;
297
+ var navigation = performance.getEntriesByType('navigation')[0];
298
+ if (!navigation) {
299
+ return;
300
+ }
301
+ // DOM processing and total load time
302
+ var domProcessing = navigation.domComplete - navigation.responseEnd;
303
+ context.track('page_timing_dom_processing', {
304
+ value: domProcessing,
305
+ metric: 'DOM Processing',
306
+ unit: 'ms',
307
+ rating: domProcessing <= 500 ? 'good' : domProcessing <= 1000 ? 'needs-improvement' : 'poor',
308
+ });
309
+ this.debugLog('DOM processing:', domProcessing);
310
+ var totalLoad = navigation.loadEventEnd - navigation.fetchStart;
311
+ context.track('page_timing_total_load', {
312
+ value: totalLoad,
313
+ metric: 'Total Load',
314
+ unit: 'ms',
315
+ rating: totalLoad <= 2000 ? 'good' : totalLoad <= 4000 ? 'needs-improvement' : 'poor',
316
+ });
317
+ this.debugLog('Total load:', totalLoad);
318
+ // DOM element counts
319
+ var domMetrics = {
320
+ elements: document.getElementsByTagName('*').length,
321
+ imageCount: document.getElementsByTagName('img').length,
322
+ scriptCount: document.getElementsByTagName('script').length,
323
+ styleCount: document.getElementsByTagName('style').length,
324
+ linkCount: document.getElementsByTagName('link').length,
325
+ };
326
+ try {
327
+ for (var _b = __values(Object.entries(domMetrics)), _c = _b.next(); !_c.done; _c = _b.next()) {
328
+ var _d = __read(_c.value, 2), metric = _d[0], value = _d[1];
329
+ context.track("dom_".concat(metric), {
330
+ value: value,
331
+ metric: metric,
332
+ unit: 'count',
333
+ rating: value <= 1000 ? 'good' : value <= 2000 ? 'needs-improvement' : 'poor',
334
+ });
335
+ this.debugLog("DOM ".concat(metric, ":"), value);
336
+ }
337
+ }
338
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
339
+ finally {
340
+ try {
341
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
342
+ }
343
+ finally { if (e_3) throw e_3.error; }
344
+ }
345
+ };
346
+ WebVitalsPlugin.prototype.initialize = function () {
347
+ return __awaiter(this, void 0, void 0, function () {
348
+ return __generator(this, function (_a) {
349
+ switch (_a.label) {
350
+ case 0:
351
+ this.debugLog('Initializing WebVitalsPlugin');
352
+ if (!this.context) {
353
+ this.debugLog('No context available during initialization');
354
+ return [2 /*return*/];
355
+ }
356
+ if (!this.autoTrack) return [3 /*break*/, 3];
357
+ if (!this.trackWebVitals) return [3 /*break*/, 2];
358
+ return [4 /*yield*/, this.trackWebVitalsMetrics()];
359
+ case 1:
360
+ _a.sent();
361
+ _a.label = 2;
362
+ case 2:
363
+ // Start tracking page metrics
364
+ if (this.trackPageMetrics) {
365
+ this.trackPageMetricsData();
366
+ }
367
+ _a.label = 3;
368
+ case 3:
369
+ this.debugLog('WebVitalsPlugin initialized successfully');
370
+ return [2 /*return*/];
371
+ }
372
+ });
373
+ });
374
+ };
375
+ WebVitalsPlugin.prototype.reset = function () {
376
+ this.metricsTracked = false;
377
+ this.debugLog('WebVitalsPlugin reset');
378
+ };
379
+ return WebVitalsPlugin;
380
+ }());
381
+ exports.WebVitalsPlugin = WebVitalsPlugin;
382
+ //# sourceMappingURL=WebVitalsPlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebVitalsPlugin.js","sourceRoot":"","sources":["../../src/vitals/WebVitalsPlugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { WebVitalsPlugin } from './WebVitalsPlugin';
2
+ export type { WebVitalsPluginOptions, Metric } from './WebVitalsPlugin';
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WebVitalsPlugin = void 0;
4
+ var WebVitalsPlugin_1 = require("./WebVitalsPlugin");
5
+ Object.defineProperty(exports, "WebVitalsPlugin", { enumerable: true, get: function () { return WebVitalsPlugin_1.WebVitalsPlugin; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vitals/index.ts"],"names":[],"mappings":";;;AAAA,qDAAoD;AAA3C,kHAAA,eAAe,OAAA"}
package/package.json ADDED
@@ -0,0 +1,94 @@
1
+ {
2
+ "name": "@absmartly/sdk-plugins",
3
+ "version": "1.0.1",
4
+ "description": "Collection of plugins for ABsmartly JavaScript SDK",
5
+ "main": "lib/index.js",
6
+ "module": "es/index.js",
7
+ "browser": "dist/absmartly-sdk-plugins.min.js",
8
+ "types": "types/index.d.ts",
9
+ "files": [
10
+ "lib",
11
+ "es",
12
+ "dist",
13
+ "types"
14
+ ],
15
+ "scripts": {
16
+ "clean": "rm -rf lib es dist types",
17
+ "format": "prettier --write \"src/**/*.{js,ts,tsx}\"",
18
+ "lint": "eslint src --ext .ts,.tsx",
19
+ "compile:cjs": "tsc -p tsconfig.cjs.json",
20
+ "compile:es": "tsc -p tsconfig.es.json",
21
+ "compile:types": "tsc -p tsconfig.types.json",
22
+ "compile": "npm run compile:cjs && npm run compile:es && npm run compile:types",
23
+ "bundle": "webpack --mode production --env BUILD_TYPE=all",
24
+ "bundle:dom": "webpack --mode production --env BUILD_TYPE=dom-only",
25
+ "bundle:lite": "webpack --mode production --env BUILD_TYPE=dom-lite",
26
+ "bundle:full": "webpack --mode production --env BUILD_TYPE=dom-full",
27
+ "bundle:cookie": "webpack --mode production --env BUILD_TYPE=cookie-only",
28
+ "bundle:vitals": "webpack --mode production --env BUILD_TYPE=vitals-only",
29
+ "postbundle": "cp dist/*.min.js ../absmartly.com/static/ 2>/dev/null || true",
30
+ "bundle:dev": "webpack --mode development --env BUILD_TYPE=all --devtool source-map",
31
+ "bundle:dev:all": "npm run bundle:dev:dom && npm run bundle:dev:lite && npm run bundle:dev:full && npm run bundle:dev:cookie && npm run bundle:dev:vitals && npm run bundle:dev:overrides",
32
+ "bundle:dev:dom": "webpack --mode development --env BUILD_TYPE=dom-only --devtool source-map",
33
+ "bundle:dev:lite": "webpack --mode development --env BUILD_TYPE=dom-lite --devtool source-map",
34
+ "bundle:dev:full": "webpack --mode development --env BUILD_TYPE=dom-full --devtool source-map",
35
+ "bundle:dev:cookie": "webpack --mode development --env BUILD_TYPE=cookie-only --devtool source-map",
36
+ "bundle:dev:vitals": "webpack --mode development --env BUILD_TYPE=vitals-only --devtool source-map",
37
+ "bundle:dev:overrides": "webpack --mode development --env BUILD_TYPE=overrides-lite --devtool source-map && webpack --mode development --env BUILD_TYPE=overrides-full --devtool source-map",
38
+ "build": "npm run clean && npm run format && npm run lint && npm run compile && npm run bundle",
39
+ "build:dev": "npm run clean && npm run format && npm run lint && npm run compile && npm run bundle:dev",
40
+ "build:all": "npm run build && npm run bundle:dev && npm run rename:dev",
41
+ "rename:dev": "cd dist && for file in *.js; do if [[ ! \"$file\" == *.min.js ]] && [[ ! \"$file\" == *.dev.js ]]; then mv \"$file\" \"${file%.js}.dev.js\"; fi; done; exit 0",
42
+ "test": "jest",
43
+ "test:watch": "jest --watch",
44
+ "test:coverage": "jest --coverage",
45
+ "dev": "tsc --watch",
46
+ "dev:all": "npm run compile:cjs -- --watch & npm run compile:es -- --watch & npm run compile:types -- --watch",
47
+ "watch": "webpack --mode development --watch --env BUILD_TYPE=all --devtool source-map",
48
+ "prepublishOnly": "npm run build && npm test",
49
+ "deploy": "npm run build && npm test && npm publish --access public",
50
+ "deploy:dry-run": "npm run build && npm test && npm publish --dry-run --access public",
51
+ "version:patch": "npm version patch",
52
+ "version:minor": "npm version minor",
53
+ "version:major": "npm version major"
54
+ },
55
+ "repository": {
56
+ "type": "git",
57
+ "url": "git+https://github.com/absmartly/sdk-plugins.git"
58
+ },
59
+ "keywords": [
60
+ "absmartly",
61
+ "ab-testing",
62
+ "experimentation",
63
+ "dom-manipulation",
64
+ "visual-editor"
65
+ ],
66
+ "author": "ABsmartly",
67
+ "license": "MIT",
68
+ "bugs": {
69
+ "url": "https://github.com/absmartly/dom-changes-plugin/issues"
70
+ },
71
+ "homepage": "https://github.com/absmartly/dom-changes-plugin#readme",
72
+ "peerDependencies": {
73
+ "@absmartly/javascript-sdk": "^1.0.0"
74
+ },
75
+ "devDependencies": {
76
+ "@testing-library/jest-dom": "^6.8.0",
77
+ "@types/jest": "^29.5.14",
78
+ "@types/node": "^20.8.0",
79
+ "@typescript-eslint/eslint-plugin": "^6.7.4",
80
+ "@typescript-eslint/parser": "^6.7.4",
81
+ "eslint": "^8.50.0",
82
+ "eslint-config-prettier": "^9.0.0",
83
+ "eslint-plugin-prettier": "^5.0.0",
84
+ "jest": "^29.7.0",
85
+ "jest-environment-jsdom": "^29.7.0",
86
+ "jsdom": "^26.1.0",
87
+ "prettier": "^3.0.3",
88
+ "ts-jest": "^29.4.1",
89
+ "ts-loader": "^9.4.4",
90
+ "typescript": "^5.2.2",
91
+ "webpack": "^5.88.2",
92
+ "webpack-cli": "^5.1.4"
93
+ }
94
+ }
@@ -0,0 +1,55 @@
1
+ import type { Context } from '@absmartly/javascript-sdk';
2
+ export interface CookiePluginOptions {
3
+ context?: Context;
4
+ debug?: boolean;
5
+ cookieDomain?: string;
6
+ cookiePath?: string;
7
+ sameSite?: 'Strict' | 'Lax' | 'None';
8
+ secure?: boolean;
9
+ cookieExpiryDays?: number;
10
+ unitIdCookieName?: string;
11
+ publicIdCookieName?: string;
12
+ expiryCookieName?: string;
13
+ utmCookieName?: string;
14
+ utmParamsList?: string[];
15
+ autoUpdateExpiry?: boolean;
16
+ expiryCheckInterval?: number;
17
+ }
18
+ export declare class CookiePlugin {
19
+ private context?;
20
+ private debug;
21
+ private cookieDomain;
22
+ private cookiePath;
23
+ private sameSite;
24
+ private secure;
25
+ private cookieExpiryDays;
26
+ private unitIdCookieName;
27
+ private publicIdCookieName;
28
+ private expiryCookieName;
29
+ private utmCookieName;
30
+ private utmParams;
31
+ private autoUpdateExpiry;
32
+ private expiryCheckInterval;
33
+ private unitId?;
34
+ constructor(options?: CookiePluginOptions);
35
+ private debugLog;
36
+ private getCookie;
37
+ private setCookie;
38
+ private deleteCookie;
39
+ private isLocalStorageAvailable;
40
+ private generateFastUniqueID;
41
+ getUnitId(): string | null;
42
+ setUnitId(unitId: string): void;
43
+ generateAndSetUnitId(): string;
44
+ updateExpiryTimestamp(): void;
45
+ isExpiryFresh(): boolean;
46
+ getUtmParams(): Record<string, string>;
47
+ storeUtmParams(params: Record<string, string>): void;
48
+ getStoredUtmParams(): Record<string, string> | null;
49
+ applyUtmAttributesToContext(context?: Context): void;
50
+ clearAllCookies(): void;
51
+ initialize(): Promise<void>;
52
+ setContext(context: Context): void;
53
+ needsWorkerCall(searchParams?: URLSearchParams): boolean;
54
+ trackLanding(context?: Context): void;
55
+ }
@@ -0,0 +1,2 @@
1
+ export { CookiePlugin } from './CookiePlugin';
2
+ export type { CookiePluginOptions } from './CookiePlugin';
@@ -0,0 +1,89 @@
1
+ import { PluginConfig, DOMChange, EventCallback, EventCallbackData } from '../types';
2
+ import { DOMManipulatorLite } from './DOMManipulatorLite';
3
+ import { VariantExtractor } from '../parsers/VariantExtractor';
4
+ import { StyleSheetManager } from './StyleSheetManager';
5
+ import { ExposureTracker } from './ExposureTracker';
6
+ import { HTMLInjector } from './HTMLInjector';
7
+ export declare class DOMChangesPluginLite {
8
+ static readonly VERSION: string;
9
+ protected config: Required<PluginConfig>;
10
+ protected domManipulator: DOMManipulatorLite;
11
+ protected variantExtractor: VariantExtractor;
12
+ protected exposureTracker: ExposureTracker;
13
+ protected htmlInjector: HTMLInjector;
14
+ protected mutationObserver: MutationObserver | null;
15
+ protected exposedExperiments: Set<string>;
16
+ protected eventListeners: Map<string, EventCallback[]>;
17
+ protected styleManagers: Map<string, StyleSheetManager>;
18
+ protected initialized: boolean;
19
+ protected watchedElements: WeakMap<Element, Set<string>>;
20
+ protected persistenceObserver: MutationObserver | null;
21
+ protected reapplyingElements: Set<Element>;
22
+ protected reapplyLogThrottle: Map<string, number>;
23
+ protected appliedStyleChanges: Map<string, DOMChange[]>;
24
+ protected antiFlickerTimeout: number | null;
25
+ protected antiFlickerStyleId: string;
26
+ constructor(config: PluginConfig);
27
+ ready(): Promise<void>;
28
+ initialize(): Promise<void>;
29
+ private setupMutationObserver;
30
+ /**
31
+ * Set up URL change listener for SPA mode
32
+ * Re-evaluates URL filters when URL changes and applies/removes changes accordingly
33
+ */
34
+ private setupURLChangeListener;
35
+ /**
36
+ * Remove all currently applied changes
37
+ * Used when URL changes in SPA mode
38
+ */
39
+ private removeAllChanges;
40
+ /**
41
+ * Apply HTML injections and DOM changes in parallel to minimize flickering
42
+ */
43
+ private applyInjectionsAndChanges;
44
+ /**
45
+ * Apply HTML injections from all variants
46
+ */
47
+ private applyHTMLInjections;
48
+ applyChanges(experimentName?: string): Promise<void>;
49
+ /**
50
+ * Get all experiments with their variant data and metadata
51
+ */
52
+ private getAllExperimentsData;
53
+ /**
54
+ * Extract changes from DOMChangesData and apply global defaults
55
+ */
56
+ private extractChangesFromData;
57
+ /**
58
+ * Extract all variant changes for cross-variant tracking
59
+ */
60
+ private extractAllVariantChanges;
61
+ /**
62
+ * Determine if visual changes should be applied based on URL filter
63
+ */
64
+ private shouldApplyVisualChanges;
65
+ hasChanges(experimentName: string): boolean;
66
+ applyChange(change: DOMChange, experimentName: string): boolean;
67
+ on(event: string, callback: EventCallback): void;
68
+ off(event: string, callback?: EventCallback): void;
69
+ protected emit(event: string, data?: EventCallbackData): void;
70
+ getStyleManager(experimentName: string): StyleSheetManager;
71
+ buildCssRule(selector: string, properties: Record<string, string>, important?: boolean): string;
72
+ buildStateRules(selector: string, states: any, important?: boolean): string;
73
+ refreshExperiments(): void;
74
+ destroy(): void;
75
+ protected registerWithContext(): void;
76
+ protected unregisterFromContext(): void;
77
+ /**
78
+ * Hide content to prevent flicker before experiments are applied
79
+ */
80
+ private hideContent;
81
+ /**
82
+ * Show hidden content after experiments are applied
83
+ */
84
+ private showContent;
85
+ watchElement(element: Element, experimentName: string, change: DOMChange): void;
86
+ unwatchElement(element: Element, experimentName: string): void;
87
+ private setupPersistenceObserver;
88
+ private checkStyleOverwritten;
89
+ }