Skip to content

Commit 0854f3d

Browse files
committed
feat: add alternative way to inform the new property
1 parent a9a029e commit 0854f3d

File tree

6 files changed

+24
-16
lines changed

6 files changed

+24
-16
lines changed

src/lib/main/snippet.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ export function snippet(
108108
// remove any previously patched functions
109109
if (top == win) {
110110
(config!.forward || []).map(function (forwardProps) {
111-
const { property } = resolvePartytownForwardProperty(forwardProps);
111+
const [property] = resolvePartytownForwardProperty(forwardProps);
112112
delete win[property.split('.')[0] as any];
113113
});
114114
}
@@ -141,7 +141,7 @@ export function snippet(
141141
// this is the top window
142142
// patch the functions that'll be forwarded to the worker
143143
(config.forward || []).map(function (forwardProps) {
144-
const { property, preserveBehavior } = resolvePartytownForwardProperty(forwardProps);
144+
const [property, { preserveBehavior }] = resolvePartytownForwardProperty(forwardProps);
145145
mainForwardFn = win;
146146
property.split('.').map(function (_, i, forwardPropsArr) {
147147
mainForwardFn = mainForwardFn[forwardPropsArr[i]] =

src/lib/sandbox/main-forward-trigger.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export const mainForwardTrigger = (worker: PartytownWebWorker, $winId$: WinId, w
2626
win._ptf = undefined;
2727

2828
forwards.map((forwardProps) => {
29-
const { property, preserveBehavior } = resolvePartytownForwardProperty(forwardProps);
29+
const [property, { preserveBehavior }] = resolvePartytownForwardProperty(forwardProps);
3030
mainForwardFn = win;
3131
property.split('.').map((_, i, arr) => {
3232
mainForwardFn = mainForwardFn[arr[i]] =

src/lib/types.ts

+6-2
Original file line numberDiff line numberDiff line change
@@ -522,7 +522,11 @@ export interface PartytownConfig {
522522
nonce?: string;
523523
}
524524

525-
export type PartytownForwardSettingsProperty = { property: string; preserveBehavior: boolean };
525+
export type PartytownForwardPropertySettings = {
526+
preserveBehavior?: boolean;
527+
};
528+
529+
export type PartytownForwardPropertyWithSettings = [string, PartytownForwardPropertySettings?];
526530

527531
/**
528532
* A forward property to patch on `window`. The forward config property is an string,
@@ -532,7 +536,7 @@ export type PartytownForwardSettingsProperty = { property: string; preserveBehav
532536
*
533537
* @public
534538
*/
535-
export type PartytownForwardProperty = string | PartytownForwardSettingsProperty;
539+
export type PartytownForwardProperty = string | PartytownForwardPropertyWithSettings;
536540

537541
/**
538542
* @public

src/lib/utils.ts

+13-9
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ import type {
22
ApplyPath,
33
MainWindow,
44
PartytownForwardProperty,
5-
PartytownForwardSettingsProperty,
5+
PartytownForwardPropertySettings,
6+
PartytownForwardPropertyWithSettings,
67
RandomId,
78
StringIndexable,
89
} from './types';
@@ -145,16 +146,19 @@ export const isValidUrl = (url: any): boolean => {
145146
}
146147
};
147148

149+
const defaultPartytownForwardPropertySettings: Required<PartytownForwardPropertySettings> = {
150+
preserveBehavior: false,
151+
};
152+
148153
export const resolvePartytownForwardProperty = (
149-
property: PartytownForwardProperty
150-
): PartytownForwardSettingsProperty => {
151-
if (typeof property === 'string') {
152-
return {
153-
property,
154-
preserveBehavior: false,
155-
};
154+
propertyOrPropertyWithSettings: PartytownForwardProperty
155+
): Required<PartytownForwardPropertyWithSettings> => {
156+
if (typeof propertyOrPropertyWithSettings === 'string') {
157+
return [propertyOrPropertyWithSettings, defaultPartytownForwardPropertySettings];
156158
}
157-
return property;
159+
const [property, settings = defaultPartytownForwardPropertySettings] =
160+
propertyOrPropertyWithSettings;
161+
return [property, { ...defaultPartytownForwardPropertySettings, ...settings }];
158162
};
159163

160164
type GetOriginalBehaviorReturn = {

tests/integrations/event-forwarding/index.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
'superDuperFunction',
1313
'superArray.push',
1414
'KiwiSizing',
15-
{ property: 'superPreservedArray.unshift', preserveBehavior: true },
15+
['superPreservedArray.unshift', { preserveBehavior: true }],
1616
],
1717
logCalls: true,
1818
logGetters: true,

tests/integrations/gtm/preserve-behavior.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
return url;
2323
},
24-
forward: [{ property: 'dataLayer.push', preserveBehavior: true }],
24+
forward: [['dataLayer.push', { preserveBehavior: true }]],
2525
logCalls: true,
2626
logGetters: true,
2727
logSetters: true,

0 commit comments

Comments
 (0)