Skip to content

Commit 0151222

Browse files
committed
Revert "fix: forwarded properties during fallback"
This reverts commit d15d51d.
1 parent dee98b4 commit 0151222

2 files changed

Lines changed: 22 additions & 77 deletions

File tree

src/lib/main/snippet.ts

Lines changed: 22 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
import { debug, emptyObjectValue, resolvePartytownForwardProperty } from '../utils';
1+
import {
2+
debug,
3+
emptyObjectValue,
4+
getOriginalBehavior,
5+
resolvePartytownForwardProperty,
6+
} from '../utils';
27
import type { MainWindow, PartytownConfig } from '../types';
38

49
export function snippet(
@@ -13,8 +18,7 @@ export function snippet(
1318
scripts?: NodeListOf<HTMLScriptElement>,
1419
sandbox?: HTMLIFrameElement | HTMLScriptElement,
1520
mainForwardFn: typeof win = win,
16-
isReady?: number,
17-
forwardPropertyRecords?: [typeof win, string, any, any, boolean][]
21+
isReady?: number
1822
) {
1923
// ES5 just so IE11 doesn't choke on arrow fns
2024
function ready() {
@@ -104,17 +108,10 @@ export function snippet(
104108

105109
// remove any previously patched functions
106110
if (top == win) {
107-
for (i = (forwardPropertyRecords || []).length - 1; i >= 0; i--) {
108-
const [thisObject, property, originalValue, forwardValue, hadOwnProperty] =
109-
forwardPropertyRecords![i];
110-
if (thisObject[property] === forwardValue) {
111-
if (hadOwnProperty) {
112-
thisObject[property] = originalValue;
113-
} else {
114-
delete thisObject[property];
115-
}
116-
}
117-
}
111+
(config!.forward || []).map(function (forwardProps) {
112+
const [property] = resolvePartytownForwardProperty(forwardProps);
113+
delete win[property.split('.')[0] as any];
114+
});
118115
}
119116

120117
for (i = 0; i < scripts!.length; i++) {
@@ -148,17 +145,20 @@ export function snippet(
148145
const [property, { preserveBehavior }] = resolvePartytownForwardProperty(forwardProps);
149146
mainForwardFn = win;
150147
property.split('.').map(function (_, i, forwardPropsArr) {
151-
const forwardProperty = forwardPropsArr[i];
152-
const thisObject = mainForwardFn;
153-
const hadOwnProperty = Object.prototype.hasOwnProperty.call(thisObject, forwardProperty);
154-
const originalValue = thisObject[forwardProperty];
155-
const forwardValue =
148+
mainForwardFn = mainForwardFn[forwardPropsArr[i]] =
156149
i + 1 < forwardPropsArr.length
157-
? originalValue || emptyObjectValue(forwardPropsArr[i + 1])
150+
? mainForwardFn[forwardPropsArr[i]] || emptyObjectValue(forwardPropsArr[i + 1])
158151
: (() => {
159152
let originalFunction: ((...args: any[]) => any) | null = null;
160-
if (preserveBehavior && typeof originalValue === 'function') {
161-
originalFunction = (...args: any[]) => originalValue.apply(thisObject, ...args);
153+
if (preserveBehavior) {
154+
const { methodOrProperty, thisObject } = getOriginalBehavior(
155+
win,
156+
forwardPropsArr
157+
);
158+
if (typeof methodOrProperty === 'function') {
159+
originalFunction = (...args: any[]) =>
160+
methodOrProperty.apply(thisObject, ...args);
161+
}
162162
}
163163
return function () {
164164
let returnValue: any;
@@ -170,14 +170,6 @@ export function snippet(
170170
return returnValue;
171171
};
172172
})();
173-
(forwardPropertyRecords = forwardPropertyRecords || []).push([
174-
thisObject,
175-
forwardProperty,
176-
originalValue,
177-
forwardValue,
178-
hadOwnProperty,
179-
]);
180-
mainForwardFn = thisObject[forwardProperty] = forwardValue;
181173
});
182174
});
183175
}

tests/unit/snippet.spec.ts

Lines changed: 0 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -55,51 +55,4 @@ test('service worker iframe, defaults', ({ win, document, navigator, top }) => {
5555
assert.not.equal(iframeUrl.search, '');
5656
});
5757

58-
test('restores preserved behavior on fallback', ({ win, document, navigator, top }) => {
59-
const dataLayer: unknown[] = [];
60-
const event = { event: 'before-fallback' };
61-
let ready!: () => void;
62-
63-
win.dataLayer = dataLayer;
64-
win.partytown = {
65-
forward: [['dataLayer.push', { preserveBehavior: true }]],
66-
};
67-
Object.defineProperty(document, 'readyState', { value: 'loading' });
68-
win.addEventListener = (_: string, callback: () => void) => (ready = callback);
69-
delete (navigator as any).serviceWorker;
70-
71-
snippet(win, document, navigator, top, false);
72-
win.dataLayer.push(event);
73-
const queuedCalls = win._ptf.length;
74-
ready();
75-
76-
assert.is(win.dataLayer, dataLayer);
77-
assert.equal(win.dataLayer, [event]);
78-
assert.is(win.dataLayer.push, Array.prototype.push);
79-
80-
win.dataLayer.push({ event: 'after-fallback' });
81-
assert.is(win._ptf.length, queuedCalls);
82-
});
83-
84-
test('restores mixed forwards sharing a root on fallback', ({ win, document, navigator, top }) => {
85-
const preserved = () => 'preserved';
86-
const forwarded = () => 'forwarded';
87-
const analytics = (win.analytics = { preserved, forwarded });
88-
let ready!: () => void;
89-
90-
win.partytown = {
91-
forward: [['analytics.preserved', { preserveBehavior: true }], 'analytics.forwarded'],
92-
};
93-
Object.defineProperty(document, 'readyState', { value: 'loading' });
94-
win.addEventListener = (_: string, callback: () => void) => (ready = callback);
95-
delete (navigator as any).serviceWorker;
96-
97-
snippet(win, document, navigator, top, false);
98-
ready();
99-
100-
assert.is(win.analytics, analytics);
101-
assert.is(win.analytics.preserved, preserved);
102-
assert.is(win.analytics.forwarded, forwarded);
103-
});
104-
10558
test.run();

0 commit comments

Comments
 (0)