fix: move patch function into utils to improve bundling (#1631)
* fix: move patch function into utils to improve bundling --------- Co-authored-by: pauldambra <pauldambra@users.noreply.github.com> Co-authored-by: Justin Halsall <Juice10@users.noreply.github.com>
This commit is contained in:
8
.changeset/itchy-tables-compete.md
Normal file
8
.changeset/itchy-tables-compete.md
Normal file
@@ -0,0 +1,8 @@
|
||||
---
|
||||
"@rrweb/rrweb-plugin-console-record": patch
|
||||
"@rrweb/record": patch
|
||||
"rrweb": patch
|
||||
"@rrweb/utils": patch
|
||||
---
|
||||
|
||||
Move patch function into @rrweb/utils to improve bundling
|
||||
@@ -53,6 +53,7 @@
|
||||
"puppeteer": "^20.9.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"rrweb": "^2.0.0-alpha.18"
|
||||
"rrweb": "^2.0.0-alpha.18",
|
||||
"@rrweb/utils": "^2.0.0-alpha.18"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import type { listenerHandler, RecordPlugin, IWindow } from '@rrweb/types';
|
||||
import { utils } from 'rrweb';
|
||||
import { patch } from '@rrweb/utils';
|
||||
import { ErrorStackParser, StackFrame } from './error-stack-parser';
|
||||
import { stringify } from './stringify';
|
||||
|
||||
@@ -183,7 +183,7 @@ function initLogObserver(
|
||||
};
|
||||
}
|
||||
// replace the logger.{level}. return a restore function
|
||||
return utils.patch(
|
||||
return patch(
|
||||
_logger,
|
||||
level,
|
||||
(original: (...args: Array<unknown>) => void) => {
|
||||
|
||||
@@ -56,7 +56,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@rrweb/types": "^2.0.0-alpha.18",
|
||||
"rrweb": "^2.0.0-alpha.18"
|
||||
"rrweb": "^2.0.0-alpha.18",
|
||||
"@rrweb/utils": "^2.0.0-alpha.18"
|
||||
},
|
||||
"browserslist": [
|
||||
"supports es6-class"
|
||||
|
||||
@@ -11,6 +11,9 @@
|
||||
},
|
||||
{
|
||||
"path": "../rrweb"
|
||||
},
|
||||
{
|
||||
"path": "../utils"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -15,10 +15,10 @@ import {
|
||||
getWindowWidth,
|
||||
isBlocked,
|
||||
legacy_isTouchEvent,
|
||||
patch,
|
||||
StyleSheetMirror,
|
||||
nowTimestamp,
|
||||
} from '../utils';
|
||||
import { patch } from '@rrweb/utils';
|
||||
import type { observerParam, MutationBufferParam } from '../types';
|
||||
import {
|
||||
IncrementalSource,
|
||||
|
||||
@@ -5,7 +5,8 @@ import {
|
||||
type IWindow,
|
||||
type listenerHandler,
|
||||
} from '@rrweb/types';
|
||||
import { hookSetter, isBlocked, patch } from '../../../utils';
|
||||
import { hookSetter, isBlocked } from '../../../utils';
|
||||
import { patch } from '@rrweb/utils';
|
||||
import { serializeArgs } from './serialize-args';
|
||||
|
||||
export default function initCanvas2DMutationObserver(
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import type { ICanvas } from 'rrweb-snapshot';
|
||||
import type { blockClass, IWindow, listenerHandler } from '@rrweb/types';
|
||||
import { isBlocked, patch } from '../../../utils';
|
||||
import { isBlocked } from '../../../utils';
|
||||
import { patch } from '@rrweb/utils';
|
||||
|
||||
function getNormalizedContextName(contextType: string) {
|
||||
return contextType === 'experimental-webgl' ? 'webgl' : contextType;
|
||||
|
||||
@@ -6,7 +6,8 @@ import {
|
||||
type IWindow,
|
||||
type listenerHandler,
|
||||
} from '@rrweb/types';
|
||||
import { hookSetter, isBlocked, patch } from '../../../utils';
|
||||
import { hookSetter, isBlocked } from '../../../utils';
|
||||
import { patch } from '@rrweb/utils';
|
||||
import { saveWebGLVar, serializeArgs } from './serialize-args';
|
||||
|
||||
function patchGLPrototype(
|
||||
|
||||
@@ -9,10 +9,10 @@ import {
|
||||
initScrollObserver,
|
||||
initAdoptedStyleSheetObserver,
|
||||
} from './observer';
|
||||
import { patch, inDom } from '../utils';
|
||||
import { inDom } from '../utils';
|
||||
import type { Mirror } from 'rrweb-snapshot';
|
||||
import { isNativeShadowDom } from 'rrweb-snapshot';
|
||||
import dom from '@rrweb/utils';
|
||||
import dom, { patch } from '@rrweb/utils';
|
||||
|
||||
type BypassOptions = Omit<
|
||||
MutationBufferParam,
|
||||
|
||||
@@ -127,49 +127,6 @@ export function hookSetter<T>(
|
||||
return () => hookSetter(target, key, original || {}, true);
|
||||
}
|
||||
|
||||
// copy from https://github.com/getsentry/sentry-javascript/blob/b2109071975af8bf0316d3b5b38f519bdaf5dc15/packages/utils/src/object.ts
|
||||
export function patch(
|
||||
source: { [key: string]: any },
|
||||
name: string,
|
||||
replacement: (...args: unknown[]) => unknown,
|
||||
): () => void {
|
||||
try {
|
||||
if (!(name in source)) {
|
||||
return () => {
|
||||
//
|
||||
};
|
||||
}
|
||||
|
||||
const original = source[name] as () => unknown;
|
||||
const wrapped = replacement(original);
|
||||
|
||||
// Make sure it's a function first, as we need to attach an empty prototype for `defineProperties` to work
|
||||
// otherwise it'll throw "TypeError: Object.defineProperties called on non-object"
|
||||
if (typeof wrapped === 'function') {
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
||||
wrapped.prototype = wrapped.prototype || {};
|
||||
Object.defineProperties(wrapped, {
|
||||
__rrweb_original__: {
|
||||
enumerable: false,
|
||||
value: original,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
source[name] = wrapped;
|
||||
|
||||
return () => {
|
||||
source[name] = original;
|
||||
};
|
||||
} catch {
|
||||
return () => {
|
||||
//
|
||||
};
|
||||
// This can throw if multiple fill happens on a global object like XMLHttpRequest
|
||||
// Fixes https://github.com/getsentry/sentry-javascript/issues/2043
|
||||
}
|
||||
}
|
||||
|
||||
// guard against old third party libraries which redefine Date.now
|
||||
let nowTimestamp = Date.now;
|
||||
|
||||
|
||||
@@ -222,6 +222,49 @@ export function mutationObserverCtor(): (typeof MutationObserver)['prototype']['
|
||||
return getUntaintedPrototype('MutationObserver').constructor;
|
||||
}
|
||||
|
||||
// copy from https://github.com/getsentry/sentry-javascript/blob/b2109071975af8bf0316d3b5b38f519bdaf5dc15/packages/utils/src/object.ts
|
||||
export function patch(
|
||||
source: { [key: string]: any },
|
||||
name: string,
|
||||
replacement: (...args: unknown[]) => unknown,
|
||||
): () => void {
|
||||
try {
|
||||
if (!(name in source)) {
|
||||
return () => {
|
||||
//
|
||||
};
|
||||
}
|
||||
|
||||
const original = source[name] as () => unknown;
|
||||
const wrapped = replacement(original);
|
||||
|
||||
// Make sure it's a function first, as we need to attach an empty prototype for `defineProperties` to work
|
||||
// otherwise it'll throw "TypeError: Object.defineProperties called on non-object"
|
||||
if (typeof wrapped === 'function') {
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
||||
wrapped.prototype = wrapped.prototype || {};
|
||||
Object.defineProperties(wrapped, {
|
||||
__rrweb_original__: {
|
||||
enumerable: false,
|
||||
value: original,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
source[name] = wrapped;
|
||||
|
||||
return () => {
|
||||
source[name] = original;
|
||||
};
|
||||
} catch {
|
||||
return () => {
|
||||
//
|
||||
};
|
||||
// This can throw if multiple fill happens on a global object like XMLHttpRequest
|
||||
// Fixes https://github.com/getsentry/sentry-javascript/issues/2043
|
||||
}
|
||||
}
|
||||
|
||||
export default {
|
||||
childNodes,
|
||||
parentNode,
|
||||
@@ -235,4 +278,5 @@ export default {
|
||||
querySelector,
|
||||
querySelectorAll,
|
||||
mutationObserver: mutationObserverCtor,
|
||||
patch,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user