@absmartly/sdk-plugins 1.1.2 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/absmartly-dom-changes-core.min.js +1 -1
- package/dist/absmartly-dom-changes-lite.min.js +1 -1
- package/dist/absmartly-overrides-full.min.js +1 -1
- package/dist/absmartly-overrides-lite.min.js +1 -1
- package/dist/absmartly-sdk-plugins.min.js +1 -1
- package/es/core/DOMChangesPluginLite.js +192 -220
- package/es/core/DOMChangesPluginLite.js.map +1 -1
- package/es/core/DOMManipulatorLite.js +66 -9
- package/es/core/DOMManipulatorLite.js.map +1 -1
- package/es/core/ExposureTracker.js +136 -11
- package/es/core/ExposureTracker.js.map +1 -1
- package/es/entries/dom-with-overrides-lite.js +3 -0
- package/es/entries/dom-with-overrides-lite.js.map +1 -1
- package/es/index.js +9 -2
- package/es/index.js.map +1 -1
- package/es/overrides/OverridesPlugin.js +2 -2
- package/es/overrides/OverridesPlugin.js.map +1 -1
- package/es/overrides/OverridesPluginLite.js +29 -1
- package/es/overrides/OverridesPluginLite.js.map +1 -1
- package/es/overrides/overridesUtils.js +27 -18
- package/es/overrides/overridesUtils.js.map +1 -1
- package/es/parsers/VariantExtractor.js +14 -7
- package/es/parsers/VariantExtractor.js.map +1 -1
- package/es/url-redirect/URLRedirectExtractor.js +185 -0
- package/es/url-redirect/URLRedirectExtractor.js.map +1 -0
- package/es/url-redirect/URLRedirectMatcher.js +115 -0
- package/es/url-redirect/URLRedirectMatcher.js.map +1 -0
- package/es/url-redirect/URLRedirectPlugin.js +350 -0
- package/es/url-redirect/URLRedirectPlugin.js.map +1 -0
- package/es/url-redirect/index.js +5 -0
- package/es/url-redirect/index.js.map +1 -0
- package/es/url-redirect/types.js +2 -0
- package/es/url-redirect/types.js.map +1 -0
- package/es/utils/persistence.js +278 -0
- package/es/utils/persistence.js.map +1 -0
- package/es/utils/plugin-registry.js +47 -0
- package/es/utils/plugin-registry.js.map +1 -0
- package/lib/core/DOMChangesPluginLite.d.ts +10 -7
- package/lib/core/DOMChangesPluginLite.js +192 -220
- package/lib/core/DOMChangesPluginLite.js.map +1 -1
- package/lib/core/DOMManipulatorLite.js +66 -9
- package/lib/core/DOMManipulatorLite.js.map +1 -1
- package/lib/core/ExposureTracker.d.ts +6 -0
- package/lib/core/ExposureTracker.js +136 -11
- package/lib/core/ExposureTracker.js.map +1 -1
- package/lib/entries/dom-with-overrides-lite.d.ts +2 -0
- package/lib/entries/dom-with-overrides-lite.js +3 -1
- package/lib/entries/dom-with-overrides-lite.js.map +1 -1
- package/lib/index.d.ts +8 -2
- package/lib/index.js +17 -1
- package/lib/index.js.map +1 -1
- package/lib/overrides/OverridesPlugin.js +2 -2
- package/lib/overrides/OverridesPlugin.js.map +1 -1
- package/lib/overrides/OverridesPluginLite.d.ts +8 -0
- package/lib/overrides/OverridesPluginLite.js +29 -1
- package/lib/overrides/OverridesPluginLite.js.map +1 -1
- package/lib/overrides/overridesUtils.d.ts +10 -5
- package/lib/overrides/overridesUtils.js +28 -18
- package/lib/overrides/overridesUtils.js.map +1 -1
- package/lib/parsers/VariantExtractor.js +14 -7
- package/lib/parsers/VariantExtractor.js.map +1 -1
- package/lib/types/index.d.ts +1 -0
- package/lib/url-redirect/URLRedirectExtractor.d.ts +16 -0
- package/lib/url-redirect/URLRedirectExtractor.js +188 -0
- package/lib/url-redirect/URLRedirectExtractor.js.map +1 -0
- package/lib/url-redirect/URLRedirectMatcher.d.ts +8 -0
- package/lib/url-redirect/URLRedirectMatcher.js +118 -0
- package/lib/url-redirect/URLRedirectMatcher.js.map +1 -0
- package/lib/url-redirect/URLRedirectPlugin.d.ts +21 -0
- package/lib/url-redirect/URLRedirectPlugin.js +353 -0
- package/lib/url-redirect/URLRedirectPlugin.js.map +1 -0
- package/lib/url-redirect/index.d.ts +4 -0
- package/lib/url-redirect/index.js +25 -0
- package/lib/url-redirect/index.js.map +1 -0
- package/lib/url-redirect/types.d.ts +29 -0
- package/lib/url-redirect/types.js +3 -0
- package/lib/url-redirect/types.js.map +1 -0
- package/lib/utils/persistence.d.ts +23 -0
- package/lib/utils/persistence.js +281 -0
- package/lib/utils/persistence.js.map +1 -0
- package/lib/utils/plugin-registry.d.ts +40 -0
- package/lib/utils/plugin-registry.js +53 -0
- package/lib/utils/plugin-registry.js.map +1 -0
- package/package.json +59 -3
- package/types/core/DOMChangesPluginLite.d.ts +10 -7
- package/types/core/ExposureTracker.d.ts +6 -0
- package/types/entries/dom-with-overrides-lite.d.ts +2 -0
- package/types/index.d.ts +8 -2
- package/types/overrides/OverridesPluginLite.d.ts +8 -0
- package/types/overrides/overridesUtils.d.ts +10 -5
- package/types/types/index.d.ts +1 -0
- package/types/url-redirect/URLRedirectExtractor.d.ts +16 -0
- package/types/url-redirect/URLRedirectMatcher.d.ts +8 -0
- package/types/url-redirect/URLRedirectPlugin.d.ts +21 -0
- package/types/url-redirect/index.d.ts +4 -0
- package/types/url-redirect/types.d.ts +29 -0
- package/types/utils/persistence.d.ts +23 -0
- package/types/utils/plugin-registry.d.ts +40 -0
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __values = (this && this.__values) || function(o) {
|
|
3
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
4
|
+
if (m) return m.call(o);
|
|
5
|
+
if (o && typeof o.length === "number") return {
|
|
6
|
+
next: function () {
|
|
7
|
+
if (o && i >= o.length) o = void 0;
|
|
8
|
+
return { value: o && o[i++], done: !o };
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
12
|
+
};
|
|
13
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
14
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
15
|
+
if (!m) return o;
|
|
16
|
+
var i = m.call(o), r, ar = [], e;
|
|
17
|
+
try {
|
|
18
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
19
|
+
}
|
|
20
|
+
catch (error) { e = { error: error }; }
|
|
21
|
+
finally {
|
|
22
|
+
try {
|
|
23
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
24
|
+
}
|
|
25
|
+
finally { if (e) throw e.error; }
|
|
26
|
+
}
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
+
exports.DOMPersistenceManager = void 0;
|
|
31
|
+
var debug_1 = require("./debug");
|
|
32
|
+
var DOMPersistenceManager = /** @class */ (function () {
|
|
33
|
+
function DOMPersistenceManager(config) {
|
|
34
|
+
this.watchedElements = new WeakMap();
|
|
35
|
+
this.persistenceObserver = null;
|
|
36
|
+
this.reapplyingElements = new Set();
|
|
37
|
+
this.reapplyLogThrottle = new Map();
|
|
38
|
+
this.appliedChanges = new Map();
|
|
39
|
+
this.config = config;
|
|
40
|
+
}
|
|
41
|
+
DOMPersistenceManager.prototype.watchElement = function (element, experimentName, change) {
|
|
42
|
+
var experiments = this.watchedElements.get(element);
|
|
43
|
+
if (!experiments) {
|
|
44
|
+
experiments = new Set();
|
|
45
|
+
this.watchedElements.set(element, experiments);
|
|
46
|
+
}
|
|
47
|
+
experiments.add(experimentName);
|
|
48
|
+
if (!this.appliedChanges.has(experimentName)) {
|
|
49
|
+
this.appliedChanges.set(experimentName, []);
|
|
50
|
+
}
|
|
51
|
+
var changes = this.appliedChanges.get(experimentName);
|
|
52
|
+
var isNewWatch = !changes.includes(change);
|
|
53
|
+
if (isNewWatch) {
|
|
54
|
+
changes.push(change);
|
|
55
|
+
if (this.config.debug) {
|
|
56
|
+
var currentStyles_1 = {};
|
|
57
|
+
if (change.value && typeof change.value === 'object') {
|
|
58
|
+
Object.keys(change.value).forEach(function (prop) {
|
|
59
|
+
var cssProp = prop.replace(/([A-Z])/g, '-$1').toLowerCase();
|
|
60
|
+
currentStyles_1[cssProp] = element.style.getPropertyValue(cssProp);
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
(0, debug_1.logDebug)('[WATCH-ELEMENT] Started watching element for persistence', {
|
|
64
|
+
experimentName: experimentName,
|
|
65
|
+
selector: change.selector,
|
|
66
|
+
element: element.tagName,
|
|
67
|
+
changeType: change.type,
|
|
68
|
+
value: change.value,
|
|
69
|
+
currentStyles: change.type === 'style' ? currentStyles_1 : undefined,
|
|
70
|
+
timestamp: Date.now(),
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (!this.persistenceObserver) {
|
|
75
|
+
this.setupPersistenceObserver();
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
DOMPersistenceManager.prototype.unwatchElement = function (element, experimentName) {
|
|
79
|
+
var experiments = this.watchedElements.get(element);
|
|
80
|
+
if (experiments) {
|
|
81
|
+
experiments.delete(experimentName);
|
|
82
|
+
if (experiments.size === 0) {
|
|
83
|
+
this.watchedElements.delete(element);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
DOMPersistenceManager.prototype.unwatchExperiment = function (experimentName) {
|
|
88
|
+
this.appliedChanges.delete(experimentName);
|
|
89
|
+
};
|
|
90
|
+
DOMPersistenceManager.prototype.getAppliedChanges = function () {
|
|
91
|
+
return this.appliedChanges;
|
|
92
|
+
};
|
|
93
|
+
DOMPersistenceManager.prototype.clearAll = function () {
|
|
94
|
+
this.appliedChanges.clear();
|
|
95
|
+
};
|
|
96
|
+
DOMPersistenceManager.prototype.destroy = function () {
|
|
97
|
+
if (this.persistenceObserver) {
|
|
98
|
+
this.persistenceObserver.disconnect();
|
|
99
|
+
this.persistenceObserver = null;
|
|
100
|
+
}
|
|
101
|
+
this.appliedChanges.clear();
|
|
102
|
+
this.reapplyingElements.clear();
|
|
103
|
+
this.reapplyLogThrottle.clear();
|
|
104
|
+
};
|
|
105
|
+
DOMPersistenceManager.prototype.setupPersistenceObserver = function () {
|
|
106
|
+
var _this = this;
|
|
107
|
+
if (this.persistenceObserver)
|
|
108
|
+
return;
|
|
109
|
+
if (this.config.debug) {
|
|
110
|
+
(0, debug_1.logDebug)('[PERSISTENCE-OBSERVER] Setting up persistence observer', {
|
|
111
|
+
timestamp: Date.now(),
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
this.persistenceObserver = new MutationObserver(function (mutations) {
|
|
115
|
+
if (_this.config.debug) {
|
|
116
|
+
(0, debug_1.logDebug)('[MUTATION-DETECTED] Persistence observer detected mutations', {
|
|
117
|
+
mutationCount: mutations.length,
|
|
118
|
+
timestamp: Date.now(),
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
mutations.forEach(function (mutation) {
|
|
122
|
+
var element = mutation.target;
|
|
123
|
+
if (_this.reapplyingElements.has(element)) {
|
|
124
|
+
if (_this.config.debug) {
|
|
125
|
+
(0, debug_1.logDebug)('[MUTATION-SKIP] Skipping mutation - currently reapplying', {
|
|
126
|
+
element: element.tagName,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
var experiments = _this.watchedElements.get(element);
|
|
132
|
+
if (experiments) {
|
|
133
|
+
if (_this.config.debug) {
|
|
134
|
+
var elementKey = "mutation:".concat(element.tagName, ":").concat(element.getAttribute('name') || element.className);
|
|
135
|
+
var now = Date.now();
|
|
136
|
+
var lastLogged = _this.reapplyLogThrottle.get(elementKey) || 0;
|
|
137
|
+
if (now - lastLogged > 5000) {
|
|
138
|
+
(0, debug_1.logDebug)('[MUTATION-ON-WATCHED] Mutation detected on watched element', {
|
|
139
|
+
element: element.tagName,
|
|
140
|
+
attributeName: mutation.attributeName,
|
|
141
|
+
oldValue: mutation.oldValue,
|
|
142
|
+
experiments: Array.from(experiments),
|
|
143
|
+
});
|
|
144
|
+
_this.reapplyLogThrottle.set(elementKey, now);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
experiments.forEach(function (experimentName) {
|
|
148
|
+
var appliedChanges = _this.appliedChanges.get(experimentName);
|
|
149
|
+
if (appliedChanges) {
|
|
150
|
+
appliedChanges.forEach(function (change) {
|
|
151
|
+
var e_1, _a, e_2, _b;
|
|
152
|
+
var needsReapply = false;
|
|
153
|
+
if (change.type === 'style' &&
|
|
154
|
+
mutation.attributeName === 'style' &&
|
|
155
|
+
change.persistStyle !== false) {
|
|
156
|
+
needsReapply = _this.checkStyleOverwritten(element, change.value);
|
|
157
|
+
}
|
|
158
|
+
else if (change.type === 'attribute' && change.persistAttribute !== false) {
|
|
159
|
+
if (change.value && typeof change.value === 'object') {
|
|
160
|
+
try {
|
|
161
|
+
for (var _c = __values(Object.keys(change.value)), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
162
|
+
var attrName = _d.value;
|
|
163
|
+
if (mutation.attributeName === attrName) {
|
|
164
|
+
needsReapply = _this.checkAttributeOverwritten(element, change.value);
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
170
|
+
finally {
|
|
171
|
+
try {
|
|
172
|
+
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
|
|
173
|
+
}
|
|
174
|
+
finally { if (e_1) throw e_1.error; }
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
if (needsReapply) {
|
|
179
|
+
_this.reapplyingElements.add(element);
|
|
180
|
+
var logKey = "".concat(experimentName, "-").concat(change.selector);
|
|
181
|
+
var now = Date.now();
|
|
182
|
+
var lastLogged = _this.reapplyLogThrottle.get(logKey) || 0;
|
|
183
|
+
if (_this.config.debug && now - lastLogged > 5000) {
|
|
184
|
+
(0, debug_1.logDebug)('[REAPPLY-TRIGGERED] Reapplying after mutation (React/framework conflict detected)', {
|
|
185
|
+
experimentName: experimentName,
|
|
186
|
+
selector: change.selector,
|
|
187
|
+
element: element.tagName,
|
|
188
|
+
changeType: change.type,
|
|
189
|
+
timestamp: now,
|
|
190
|
+
});
|
|
191
|
+
_this.reapplyLogThrottle.set(logKey, now);
|
|
192
|
+
if (_this.reapplyLogThrottle.size > 100) {
|
|
193
|
+
var oldestAllowed = now - 60000;
|
|
194
|
+
try {
|
|
195
|
+
for (var _e = __values(_this.reapplyLogThrottle.entries()), _f = _e.next(); !_f.done; _f = _e.next()) {
|
|
196
|
+
var _g = __read(_f.value, 2), key = _g[0], time = _g[1];
|
|
197
|
+
if (time < oldestAllowed) {
|
|
198
|
+
_this.reapplyLogThrottle.delete(key);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
203
|
+
finally {
|
|
204
|
+
try {
|
|
205
|
+
if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
|
|
206
|
+
}
|
|
207
|
+
finally { if (e_2) throw e_2.error; }
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
_this.config.onReapply(change, experimentName);
|
|
212
|
+
setTimeout(function () {
|
|
213
|
+
_this.reapplyingElements.delete(element);
|
|
214
|
+
}, 0);
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
});
|
|
221
|
+
});
|
|
222
|
+
this.persistenceObserver.observe(document.body, {
|
|
223
|
+
attributes: true,
|
|
224
|
+
subtree: true,
|
|
225
|
+
attributeOldValue: true,
|
|
226
|
+
});
|
|
227
|
+
if (this.config.debug) {
|
|
228
|
+
(0, debug_1.logDebug)('[PERSISTENCE-OBSERVER] Setup complete - now observing mutations', {
|
|
229
|
+
target: 'document.body',
|
|
230
|
+
attributeFilter: ['style', 'class'],
|
|
231
|
+
subtree: true,
|
|
232
|
+
timestamp: Date.now(),
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
};
|
|
236
|
+
DOMPersistenceManager.prototype.checkStyleOverwritten = function (element, expectedStyles) {
|
|
237
|
+
var e_3, _a;
|
|
238
|
+
try {
|
|
239
|
+
for (var _b = __values(Object.entries(expectedStyles)), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
240
|
+
var _d = __read(_c.value, 2), prop = _d[0], value = _d[1];
|
|
241
|
+
var cssProp = prop.replace(/([A-Z])/g, '-$1').toLowerCase();
|
|
242
|
+
var currentValue = element.style.getPropertyValue(cssProp);
|
|
243
|
+
var currentPriority = element.style.getPropertyPriority(cssProp);
|
|
244
|
+
if (currentValue !== value || (value.includes('!important') && !currentPriority)) {
|
|
245
|
+
return true;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
250
|
+
finally {
|
|
251
|
+
try {
|
|
252
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
253
|
+
}
|
|
254
|
+
finally { if (e_3) throw e_3.error; }
|
|
255
|
+
}
|
|
256
|
+
return false;
|
|
257
|
+
};
|
|
258
|
+
DOMPersistenceManager.prototype.checkAttributeOverwritten = function (element, expectedAttributes) {
|
|
259
|
+
var e_4, _a;
|
|
260
|
+
try {
|
|
261
|
+
for (var _b = __values(Object.entries(expectedAttributes)), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
262
|
+
var _d = __read(_c.value, 2), attr = _d[0], value = _d[1];
|
|
263
|
+
var currentValue = element.getAttribute(attr);
|
|
264
|
+
if (currentValue !== value) {
|
|
265
|
+
return true;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
270
|
+
finally {
|
|
271
|
+
try {
|
|
272
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
273
|
+
}
|
|
274
|
+
finally { if (e_4) throw e_4.error; }
|
|
275
|
+
}
|
|
276
|
+
return false;
|
|
277
|
+
};
|
|
278
|
+
return DOMPersistenceManager;
|
|
279
|
+
}());
|
|
280
|
+
exports.DOMPersistenceManager = DOMPersistenceManager;
|
|
281
|
+
//# sourceMappingURL=persistence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../src/utils/persistence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global plugin registry for ABsmartly plugins
|
|
3
|
+
* Allows detection and inspection of loaded plugins
|
|
4
|
+
*/
|
|
5
|
+
export interface PluginRegistryEntry {
|
|
6
|
+
name: string;
|
|
7
|
+
version: string;
|
|
8
|
+
initialized: boolean;
|
|
9
|
+
timestamp: number;
|
|
10
|
+
capabilities?: string[];
|
|
11
|
+
instance?: any;
|
|
12
|
+
}
|
|
13
|
+
export interface PluginRegistry {
|
|
14
|
+
dom?: PluginRegistryEntry;
|
|
15
|
+
overrides?: PluginRegistryEntry;
|
|
16
|
+
cookie?: PluginRegistryEntry;
|
|
17
|
+
vitals?: PluginRegistryEntry;
|
|
18
|
+
urlRedirect?: PluginRegistryEntry;
|
|
19
|
+
}
|
|
20
|
+
declare global {
|
|
21
|
+
interface Window {
|
|
22
|
+
__ABSMARTLY_PLUGINS__?: PluginRegistry;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Register a plugin in the global registry
|
|
27
|
+
*/
|
|
28
|
+
export declare function registerPlugin(pluginType: keyof PluginRegistry, entry: PluginRegistryEntry): void;
|
|
29
|
+
/**
|
|
30
|
+
* Unregister a plugin from the global registry
|
|
31
|
+
*/
|
|
32
|
+
export declare function unregisterPlugin(pluginType: keyof PluginRegistry): void;
|
|
33
|
+
/**
|
|
34
|
+
* Check if a plugin is registered
|
|
35
|
+
*/
|
|
36
|
+
export declare function isPluginRegistered(pluginType: keyof PluginRegistry): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Get all registered plugins
|
|
39
|
+
*/
|
|
40
|
+
export declare function getRegisteredPlugins(): PluginRegistry;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Global plugin registry for ABsmartly plugins
|
|
4
|
+
* Allows detection and inspection of loaded plugins
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.registerPlugin = registerPlugin;
|
|
8
|
+
exports.unregisterPlugin = unregisterPlugin;
|
|
9
|
+
exports.isPluginRegistered = isPluginRegistered;
|
|
10
|
+
exports.getRegisteredPlugins = getRegisteredPlugins;
|
|
11
|
+
/**
|
|
12
|
+
* Register a plugin in the global registry
|
|
13
|
+
*/
|
|
14
|
+
function registerPlugin(pluginType, entry) {
|
|
15
|
+
if (typeof window === 'undefined') {
|
|
16
|
+
return; // Not in browser environment
|
|
17
|
+
}
|
|
18
|
+
if (!window.__ABSMARTLY_PLUGINS__) {
|
|
19
|
+
window.__ABSMARTLY_PLUGINS__ = {};
|
|
20
|
+
}
|
|
21
|
+
window.__ABSMARTLY_PLUGINS__[pluginType] = entry;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Unregister a plugin from the global registry
|
|
25
|
+
*/
|
|
26
|
+
function unregisterPlugin(pluginType) {
|
|
27
|
+
if (typeof window === 'undefined') {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
if (window.__ABSMARTLY_PLUGINS__) {
|
|
31
|
+
delete window.__ABSMARTLY_PLUGINS__[pluginType];
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Check if a plugin is registered
|
|
36
|
+
*/
|
|
37
|
+
function isPluginRegistered(pluginType) {
|
|
38
|
+
var _a;
|
|
39
|
+
if (typeof window === 'undefined') {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
return !!(window.__ABSMARTLY_PLUGINS__ && ((_a = window.__ABSMARTLY_PLUGINS__[pluginType]) === null || _a === void 0 ? void 0 : _a.initialized));
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Get all registered plugins
|
|
46
|
+
*/
|
|
47
|
+
function getRegisteredPlugins() {
|
|
48
|
+
if (typeof window === 'undefined') {
|
|
49
|
+
return {};
|
|
50
|
+
}
|
|
51
|
+
return window.__ABSMARTLY_PLUGINS__ || {};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=plugin-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-registry.js","sourceRoot":"","sources":["../../src/utils/plugin-registry.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AA4BH,wCAUC;AAKD,4CAQC;AAKD,gDAMC;AAKD,oDAMC;AAhDD;;GAEG;AACH,SAAgB,cAAc,CAAC,UAAgC,EAAE,KAA0B;IACzF,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,CAAC,6BAA6B;IACvC,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC;QAClC,MAAM,CAAC,qBAAqB,GAAG,EAAE,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,qBAAqB,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAAC,UAAgC;IAC/D,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO;IACT,CAAC;IAED,IAAI,MAAM,CAAC,qBAAqB,EAAE,CAAC;QACjC,OAAO,MAAM,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAC,UAAgC;;IACjE,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,qBAAqB,KAAI,MAAA,MAAM,CAAC,qBAAqB,CAAC,UAAU,CAAC,0CAAE,WAAW,CAAA,CAAC,CAAC;AACnG,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB;IAClC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,MAAM,CAAC,qBAAqB,IAAI,EAAE,CAAC;AAC5C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,67 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@absmartly/sdk-plugins",
|
|
3
|
-
"version": "1.1
|
|
3
|
+
"version": "1.2.1",
|
|
4
4
|
"description": "Collection of plugins for ABsmartly JavaScript SDK",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "es/index.js",
|
|
7
7
|
"browser": "dist/absmartly-sdk-plugins.min.js",
|
|
8
8
|
"types": "types/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"source": "./src/index.ts",
|
|
12
|
+
"types": "./types/index.d.ts",
|
|
13
|
+
"import": "./es/index.js",
|
|
14
|
+
"require": "./lib/index.js"
|
|
15
|
+
},
|
|
16
|
+
"./dom-changes": {
|
|
17
|
+
"source": "./src/core/DOMChangesPluginLite.ts",
|
|
18
|
+
"types": "./types/core/DOMChangesPluginLite.d.ts",
|
|
19
|
+
"import": "./es/core/DOMChangesPluginLite.js",
|
|
20
|
+
"require": "./lib/core/DOMChangesPluginLite.js"
|
|
21
|
+
},
|
|
22
|
+
"./cookie": {
|
|
23
|
+
"source": "./src/cookies/CookiePlugin.ts",
|
|
24
|
+
"types": "./types/cookies/CookiePlugin.d.ts",
|
|
25
|
+
"import": "./es/cookies/CookiePlugin.js",
|
|
26
|
+
"require": "./lib/cookies/CookiePlugin.js"
|
|
27
|
+
},
|
|
28
|
+
"./web-vitals": {
|
|
29
|
+
"source": "./src/vitals/WebVitalsPlugin.ts",
|
|
30
|
+
"types": "./types/vitals/WebVitalsPlugin.d.ts",
|
|
31
|
+
"import": "./es/vitals/WebVitalsPlugin.js",
|
|
32
|
+
"require": "./lib/vitals/WebVitalsPlugin.js"
|
|
33
|
+
},
|
|
34
|
+
"./overrides": {
|
|
35
|
+
"source": "./src/overrides/overridesUtils.ts",
|
|
36
|
+
"types": "./types/overrides/overridesUtils.d.ts",
|
|
37
|
+
"import": "./es/overrides/overridesUtils.js",
|
|
38
|
+
"require": "./lib/overrides/overridesUtils.js"
|
|
39
|
+
},
|
|
40
|
+
"./url-redirect": {
|
|
41
|
+
"source": "./src/url-redirect/URLRedirectPlugin.ts",
|
|
42
|
+
"types": "./types/url-redirect/URLRedirectPlugin.d.ts",
|
|
43
|
+
"import": "./es/url-redirect/URLRedirectPlugin.js",
|
|
44
|
+
"require": "./lib/url-redirect/URLRedirectPlugin.js"
|
|
45
|
+
},
|
|
46
|
+
"./core/dom-manipulator": {
|
|
47
|
+
"source": "./src/core/DOMManipulatorLite.ts",
|
|
48
|
+
"types": "./types/core/DOMManipulatorLite.d.ts",
|
|
49
|
+
"import": "./es/core/DOMManipulatorLite.js",
|
|
50
|
+
"require": "./lib/core/DOMManipulatorLite.js"
|
|
51
|
+
},
|
|
52
|
+
"./core/style-sheet-manager": {
|
|
53
|
+
"source": "./src/core/StyleSheetManager.ts",
|
|
54
|
+
"types": "./types/core/StyleSheetManager.d.ts",
|
|
55
|
+
"import": "./es/core/StyleSheetManager.js",
|
|
56
|
+
"require": "./lib/core/StyleSheetManager.js"
|
|
57
|
+
},
|
|
58
|
+
"./core/pending-change-manager": {
|
|
59
|
+
"source": "./src/core/PendingChangeManager.ts",
|
|
60
|
+
"types": "./types/core/PendingChangeManager.d.ts",
|
|
61
|
+
"import": "./es/core/PendingChangeManager.js",
|
|
62
|
+
"require": "./lib/core/PendingChangeManager.js"
|
|
63
|
+
}
|
|
64
|
+
},
|
|
9
65
|
"files": [
|
|
10
66
|
"lib",
|
|
11
67
|
"es",
|
|
@@ -46,8 +102,8 @@
|
|
|
46
102
|
"dev:all": "npm run compile:cjs -- --watch & npm run compile:es -- --watch & npm run compile:types -- --watch",
|
|
47
103
|
"watch": "webpack --mode development --watch --env BUILD_TYPE=all --devtool source-map",
|
|
48
104
|
"prepublishOnly": "npm run build && npm test",
|
|
49
|
-
"
|
|
50
|
-
"
|
|
105
|
+
"publish": "npm run build && npm publish --access public",
|
|
106
|
+
"publish:dry-run": "npm run build && npm publish --dry-run --access public",
|
|
51
107
|
"version:patch": "npm version patch",
|
|
52
108
|
"version:minor": "npm version minor",
|
|
53
109
|
"version:major": "npm version major"
|
|
@@ -4,6 +4,7 @@ import { VariantExtractor } from '../parsers/VariantExtractor';
|
|
|
4
4
|
import { StyleSheetManager } from './StyleSheetManager';
|
|
5
5
|
import { ExposureTracker } from './ExposureTracker';
|
|
6
6
|
import { HTMLInjector } from './HTMLInjector';
|
|
7
|
+
import { DOMPersistenceManager } from '../utils/persistence';
|
|
7
8
|
export declare class DOMChangesPluginLite {
|
|
8
9
|
static readonly VERSION: string;
|
|
9
10
|
protected config: Required<PluginConfig>;
|
|
@@ -16,11 +17,7 @@ export declare class DOMChangesPluginLite {
|
|
|
16
17
|
protected eventListeners: Map<string, EventCallback[]>;
|
|
17
18
|
protected styleManagers: Map<string, StyleSheetManager>;
|
|
18
19
|
protected initialized: boolean;
|
|
19
|
-
protected
|
|
20
|
-
protected persistenceObserver: MutationObserver | null;
|
|
21
|
-
protected reapplyingElements: Set<Element>;
|
|
22
|
-
protected reapplyLogThrottle: Map<string, number>;
|
|
23
|
-
protected appliedChanges: Map<string, DOMChange[]>;
|
|
20
|
+
protected persistenceManager: DOMPersistenceManager | null;
|
|
24
21
|
protected antiFlickerTimeout: number | null;
|
|
25
22
|
protected antiFlickerStyleId: string;
|
|
26
23
|
private readyPromise;
|
|
@@ -75,6 +72,14 @@ export declare class DOMChangesPluginLite {
|
|
|
75
72
|
destroy(): void;
|
|
76
73
|
protected registerWithContext(): void;
|
|
77
74
|
protected unregisterFromContext(): void;
|
|
75
|
+
/**
|
|
76
|
+
* Register plugin in global registry for detection
|
|
77
|
+
*/
|
|
78
|
+
protected registerGlobally(): void;
|
|
79
|
+
/**
|
|
80
|
+
* Unregister plugin from global registry
|
|
81
|
+
*/
|
|
82
|
+
protected unregisterGlobally(): void;
|
|
78
83
|
/**
|
|
79
84
|
* Hide content to prevent flicker before experiments are applied
|
|
80
85
|
*/
|
|
@@ -85,6 +90,4 @@ export declare class DOMChangesPluginLite {
|
|
|
85
90
|
private showContent;
|
|
86
91
|
watchElement(element: Element, experimentName: string, change: DOMChange): void;
|
|
87
92
|
unwatchElement(element: Element, experimentName: string): void;
|
|
88
|
-
private setupPersistenceObserver;
|
|
89
|
-
private checkStyleOverwritten;
|
|
90
93
|
}
|
|
@@ -20,6 +20,12 @@ export declare class ExposureTracker {
|
|
|
20
20
|
* Uses inline-block with minimal dimensions to be observable but not affect layout
|
|
21
21
|
*/
|
|
22
22
|
private createContainerPlaceholder;
|
|
23
|
+
/**
|
|
24
|
+
* Create an in-place placeholder that replaces a deleted element
|
|
25
|
+
* This allows viewport tracking for delete changes
|
|
26
|
+
* Returns the number of placeholders created
|
|
27
|
+
*/
|
|
28
|
+
private createInPlacePlaceholder;
|
|
23
29
|
/**
|
|
24
30
|
* Get the original parent selector for move changes
|
|
25
31
|
* This should be called BEFORE the move is applied
|
|
@@ -5,12 +5,14 @@
|
|
|
5
5
|
import { DOMChangesPluginLite } from '../core/DOMChangesPluginLite';
|
|
6
6
|
import { OverridesPluginLite } from '../overrides/OverridesPluginLite';
|
|
7
7
|
import { CookiePlugin } from '../cookies/CookiePlugin';
|
|
8
|
+
import { DOMPersistenceManager } from '../utils/persistence';
|
|
8
9
|
export * from '../types';
|
|
9
10
|
export * from '../overrides/types';
|
|
10
11
|
export type { CookiePluginOptions } from '../cookies/CookiePlugin';
|
|
11
12
|
export type { CookieOptions } from '../cookies/cookieUtils';
|
|
12
13
|
export { DOMChangesPluginLite, OverridesPluginLite, CookiePlugin };
|
|
13
14
|
export { DOMChangesPluginLite as DOMChangesPlugin };
|
|
15
|
+
export { DOMPersistenceManager };
|
|
14
16
|
export { getCookie, setCookie, deleteCookie, generateUniqueId, generateUUID, isLocalStorageAvailable, } from '../cookies/cookieUtils';
|
|
15
17
|
export { getQueryStringOverrides, parseOverrideCookie, getCookieOverrides as getOverrideCookie, serializeOverrides, persistOverridesToCookie, getOverrides, } from '../overrides/overridesUtils';
|
|
16
18
|
export type { SimpleOverride, OverrideOptions } from '../overrides/overridesUtils';
|
package/types/index.d.ts
CHANGED
|
@@ -3,15 +3,21 @@ import { OverridesPlugin } from './overrides/OverridesPlugin';
|
|
|
3
3
|
import { BrowserCookieAdapter } from './overrides/BrowserCookieAdapter';
|
|
4
4
|
import { CookiePlugin } from './cookies/CookiePlugin';
|
|
5
5
|
import { WebVitalsPlugin } from './vitals/WebVitalsPlugin';
|
|
6
|
+
import { URLRedirectPlugin } from './url-redirect/URLRedirectPlugin';
|
|
6
7
|
export * from './types';
|
|
7
8
|
export * from './overrides/types';
|
|
9
|
+
export * from './url-redirect/types';
|
|
8
10
|
export type { CookiePluginOptions } from './cookies/CookiePlugin';
|
|
9
11
|
export type { CookieOptions } from './cookies/cookieUtils';
|
|
10
12
|
export type { WebVitalsPluginOptions, Metric } from './vitals/WebVitalsPlugin';
|
|
11
13
|
export { DOMChangesPluginLite, DOMChangesPluginLite as DOMChangesPlugin, // Alias for backward compatibility
|
|
12
14
|
OverridesPlugin, // Legacy export - this is the original full-featured version
|
|
13
|
-
BrowserCookieAdapter, CookiePlugin, WebVitalsPlugin, };
|
|
15
|
+
BrowserCookieAdapter, CookiePlugin, WebVitalsPlugin, URLRedirectPlugin, };
|
|
14
16
|
export { getCookie, setCookie, deleteCookie, generateUniqueId, generateUUID, isLocalStorageAvailable, } from './cookies/cookieUtils';
|
|
15
|
-
export { getQueryStringOverrides, parseOverrideCookie, getCookieOverrides, serializeOverrides, persistOverridesToCookie, getOverrides, } from './overrides/overridesUtils';
|
|
17
|
+
export { DEFAULT_OVERRIDE_COOKIE_NAME, DEFAULT_OVERRIDE_QUERY_PREFIX, getQueryStringOverrides, parseOverrideCookie, getCookieOverrides, serializeOverrides, persistOverridesToCookie, getOverrides, } from './overrides/overridesUtils';
|
|
16
18
|
export type { SimpleOverride, OverrideOptions } from './overrides/overridesUtils';
|
|
19
|
+
export { registerPlugin, unregisterPlugin, isPluginRegistered, getRegisteredPlugins, } from './utils/plugin-registry';
|
|
20
|
+
export type { PluginRegistry, PluginRegistryEntry } from './utils/plugin-registry';
|
|
21
|
+
export { URLRedirectExtractor } from './url-redirect/URLRedirectExtractor';
|
|
22
|
+
export { URLRedirectMatcher } from './url-redirect/URLRedirectMatcher';
|
|
17
23
|
export default DOMChangesPluginLite;
|
|
@@ -23,5 +23,13 @@ export declare class OverridesPluginLite {
|
|
|
23
23
|
protected registerWithContext(): void;
|
|
24
24
|
protected unregisterFromContext(): void;
|
|
25
25
|
destroy(): void;
|
|
26
|
+
/**
|
|
27
|
+
* Register plugin in global registry for detection
|
|
28
|
+
*/
|
|
29
|
+
protected registerGlobally(): void;
|
|
30
|
+
/**
|
|
31
|
+
* Unregister plugin from global registry
|
|
32
|
+
*/
|
|
33
|
+
protected unregisterGlobally(): void;
|
|
26
34
|
}
|
|
27
35
|
export {};
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
* These can be used independently for lightweight override operations
|
|
4
4
|
* without requiring the full OverridesPlugin class
|
|
5
5
|
*/
|
|
6
|
+
export declare const DEFAULT_OVERRIDE_COOKIE_NAME = "absmartly_overrides";
|
|
7
|
+
export declare const DEFAULT_OVERRIDE_QUERY_PREFIX = "exp_";
|
|
6
8
|
export interface SimpleOverride {
|
|
7
9
|
variant: number;
|
|
8
10
|
env?: number;
|
|
@@ -15,7 +17,7 @@ export interface OverrideOptions {
|
|
|
15
17
|
}
|
|
16
18
|
/**
|
|
17
19
|
* Parse query string parameters for experiment overrides
|
|
18
|
-
* @param queryPrefix - Prefix for experiment parameters (
|
|
20
|
+
* @param queryPrefix - Prefix for experiment parameters (default: DEFAULT_OVERRIDE_QUERY_PREFIX)
|
|
19
21
|
* @param searchParams - Optional URLSearchParams instance (defaults to window.location.search)
|
|
20
22
|
*/
|
|
21
23
|
export declare function getQueryStringOverrides(queryPrefix?: string, searchParams?: URLSearchParams): Record<string, number | SimpleOverride>;
|
|
@@ -26,8 +28,10 @@ export declare function getQueryStringOverrides(queryPrefix?: string, searchPara
|
|
|
26
28
|
export declare function parseOverrideCookie(value: string): Record<string, number | SimpleOverride>;
|
|
27
29
|
/**
|
|
28
30
|
* Get experiment overrides from cookie
|
|
31
|
+
* @param cookieName - Name of the cookie to read (default: DEFAULT_OVERRIDE_COOKIE_NAME)
|
|
32
|
+
* @param cookieHeader - Optional cookie header string (for server-side use). If not provided, uses document.cookie
|
|
29
33
|
*/
|
|
30
|
-
export declare function getCookieOverrides(cookieName?: string): Record<string, number | SimpleOverride>;
|
|
34
|
+
export declare function getCookieOverrides(cookieName?: string, cookieHeader?: string): Record<string, number | SimpleOverride>;
|
|
31
35
|
/**
|
|
32
36
|
* Serialize overrides to cookie value format
|
|
33
37
|
*/
|
|
@@ -40,9 +44,10 @@ export declare function persistOverridesToCookie(overrides: Record<string, numbe
|
|
|
40
44
|
* Get experiment overrides from query string or cookie
|
|
41
45
|
* Returns normalized Record<string, number> for use with SDK createContext
|
|
42
46
|
*
|
|
43
|
-
* @param cookieName - Name of the cookie to read/write (default:
|
|
44
|
-
* @param queryPrefix - Prefix for query string parameters (default:
|
|
47
|
+
* @param cookieName - Name of the cookie to read/write (default: DEFAULT_OVERRIDE_COOKIE_NAME)
|
|
48
|
+
* @param queryPrefix - Prefix for query string parameters (default: DEFAULT_OVERRIDE_QUERY_PREFIX)
|
|
45
49
|
* @param searchParams - Optional URLSearchParams instance (defaults to window.location.search)
|
|
50
|
+
* @param cookieHeader - Optional cookie header string (for server-side use). If not provided, uses document.cookie
|
|
46
51
|
* @returns Normalized overrides as Record<string, number>
|
|
47
52
|
*/
|
|
48
|
-
export declare function getOverrides(cookieName?: string, queryPrefix?: string, searchParams?: URLSearchParams): Record<string, number>;
|
|
53
|
+
export declare function getOverrides(cookieName?: string, queryPrefix?: string, searchParams?: URLSearchParams, cookieHeader?: string): Record<string, number>;
|
package/types/types/index.d.ts
CHANGED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ABsmartlyContext } from '../types';
|
|
2
|
+
import { URLRedirectConfig } from './types';
|
|
3
|
+
export declare class URLRedirectExtractor {
|
|
4
|
+
private context;
|
|
5
|
+
private variableName;
|
|
6
|
+
private debug;
|
|
7
|
+
private cachedConfigs;
|
|
8
|
+
constructor(context: ABsmartlyContext, variableName?: string, debug?: boolean);
|
|
9
|
+
clearCache(): void;
|
|
10
|
+
extractAllConfigs(): Map<string, Map<number, URLRedirectConfig>>;
|
|
11
|
+
private extractConfigsForExperiment;
|
|
12
|
+
private parseConfig;
|
|
13
|
+
private isValidRedirect;
|
|
14
|
+
getConfigForExperiment(experimentName: string): URLRedirectConfig | null;
|
|
15
|
+
getAllVariantConfigs(experimentName: string): Map<number, URLRedirectConfig>;
|
|
16
|
+
}
|