@leaflink/dom-testing-utils 5.2.1 → 5.2.2

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.
@@ -0,0 +1,23 @@
1
+ export interface IntersectionObserverMock extends IntersectionObserver {
2
+ target: Element | null;
3
+ scrollCallback: IntersectionObserverCallback;
4
+ onScroll(e: Event): void;
5
+ }
6
+ export declare class IntersectionObserverMock implements IntersectionObserverMock {
7
+ root: IntersectionObserver['root'];
8
+ rootMargin: IntersectionObserver['rootMargin'];
9
+ thresholds: IntersectionObserver['thresholds'];
10
+ target: Element | null;
11
+ disconnect: IntersectionObserver['disconnect'];
12
+ observe: IntersectionObserver['observe'];
13
+ takeRecords: IntersectionObserver['takeRecords'];
14
+ unobserve: IntersectionObserver['unobserve'];
15
+ scrollCallback: IntersectionObserverCallback;
16
+ constructor(callback: IntersectionObserverCallback);
17
+ }
18
+ export declare function mockIntersectionObserver(): void;
19
+ /**
20
+ * Dispatches the custom scroll event used by the viewable directive. Used
21
+ * in tandem with the IntersectionObserverMock to perform the scroll.
22
+ */
23
+ export declare function dispatchCustomScroll(eventDetails?: Partial<IntersectionObserverEntry>): void;
@@ -0,0 +1,72 @@
1
+ export class IntersectionObserverMock {
2
+ root = null;
3
+ rootMargin = '0px 0px 0px 0px';
4
+ thresholds = [];
5
+ target = null;
6
+ disconnect = IntersectionObserverMock.prototype.disconnect.bind(this);
7
+ observe = IntersectionObserverMock.prototype.observe.bind(this);
8
+ takeRecords = IntersectionObserverMock.prototype.takeRecords.bind(this);
9
+ unobserve = IntersectionObserverMock.prototype.unobserve.bind(this);
10
+ scrollCallback;
11
+ onScroll(e) {
12
+ if (!(e instanceof CustomEvent)) {
13
+ return;
14
+ }
15
+ const { detail } = e;
16
+ this.scrollCallback([
17
+ {
18
+ intersectionRatio: detail.intersectionRatio,
19
+ isIntersecting: detail.isIntersecting,
20
+ },
21
+ ], new IntersectionObserverMock(this.scrollCallback));
22
+ }
23
+ constructor(callback) {
24
+ this.scrollCallback = callback;
25
+ window.addEventListener('scroll', this.onScroll.bind(this));
26
+ }
27
+ }
28
+ export function mockIntersectionObserver() {
29
+ IntersectionObserverMock.prototype.disconnect = vi.fn(function () { });
30
+ IntersectionObserverMock.prototype.observe = vi.fn(function (element) {
31
+ this.target = element;
32
+ });
33
+ IntersectionObserverMock.prototype.takeRecords = vi.fn(function () {
34
+ return [];
35
+ });
36
+ IntersectionObserverMock.prototype.unobserve = vi.fn(function () {
37
+ this.target = null;
38
+ window.removeEventListener('scroll', this.onScroll);
39
+ });
40
+ vi.stubGlobal('IntersectionObserver', IntersectionObserverMock);
41
+ }
42
+ /**
43
+ * Dispatches the custom scroll event used by the viewable directive. Used
44
+ * in tandem with the IntersectionObserverMock to perform the scroll.
45
+ */
46
+ export function dispatchCustomScroll(eventDetails) {
47
+ const MOCK_DOM_RECT = {
48
+ bottom: 0,
49
+ height: 0,
50
+ left: 0,
51
+ right: 0,
52
+ top: 0,
53
+ width: 0,
54
+ x: 0,
55
+ y: 0,
56
+ toJSON: () => null,
57
+ };
58
+ const detail = {
59
+ boundingClientRect: MOCK_DOM_RECT,
60
+ intersectionRatio: 1,
61
+ intersectionRect: MOCK_DOM_RECT,
62
+ isIntersecting: true,
63
+ rootBounds: null,
64
+ target: document.body,
65
+ time: 0,
66
+ ...eventDetails,
67
+ };
68
+ window.dispatchEvent(new CustomEvent('scroll', {
69
+ detail,
70
+ }));
71
+ }
72
+ //# sourceMappingURL=IntersectionObserverMock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IntersectionObserverMock.js","sourceRoot":"src/","sources":["mocks/IntersectionObserverMock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ type RawLocation = Pick<Location, 'hash' | 'host' | 'hostname' | 'href' | 'origin' | 'pathname' | 'search'>;
2
+ /**
3
+ * Mocks the global location object with the provided location object. Defaults to window.location.
4
+ */
5
+ export declare function mockLocation(location?: Partial<RawLocation>): void;
6
+ export {};
@@ -0,0 +1,70 @@
1
+ const originalLocation = window.location;
2
+ /**
3
+ * Mocks the global location object with the provided location object. Defaults to window.location.
4
+ */
5
+ export function mockLocation(location) {
6
+ const locationMock = Object.defineProperties({}, {
7
+ ...Object.getOwnPropertyDescriptors(originalLocation),
8
+ assign: {
9
+ configurable: true,
10
+ value: vi.fn(),
11
+ },
12
+ reload: {
13
+ configurable: true,
14
+ value: vi.fn(),
15
+ },
16
+ push: {
17
+ configurable: true,
18
+ value: vi.fn(),
19
+ },
20
+ replace: {
21
+ configurable: true,
22
+ value: vi.fn(),
23
+ },
24
+ href: {
25
+ configurable: true,
26
+ writable: true,
27
+ value: location?.href || originalLocation.href,
28
+ },
29
+ host: {
30
+ configurable: true,
31
+ writable: true,
32
+ value: location?.host || originalLocation.host,
33
+ },
34
+ hostname: {
35
+ configurable: true,
36
+ writable: true,
37
+ value: location?.hostname || originalLocation.hostname,
38
+ },
39
+ ...(location?.pathname !== undefined && {
40
+ pathname: {
41
+ configurable: true,
42
+ writable: true,
43
+ value: location.pathname,
44
+ },
45
+ }),
46
+ ...(location?.search !== undefined && {
47
+ search: {
48
+ configurable: true,
49
+ writable: true,
50
+ value: location.search,
51
+ },
52
+ }),
53
+ ...(location?.hash !== undefined && {
54
+ hash: {
55
+ configurable: true,
56
+ writable: true,
57
+ value: location.hash,
58
+ },
59
+ }),
60
+ ...(location?.origin !== undefined && {
61
+ origin: {
62
+ configurable: true,
63
+ writable: true,
64
+ value: location.origin,
65
+ },
66
+ }),
67
+ });
68
+ vi.stubGlobal('location', locationMock);
69
+ }
70
+ //# sourceMappingURL=LocationMock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocationMock.js","sourceRoot":"src/","sources":["mocks/LocationMock.ts"],"names":[],"mappings":"AAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,QAAQ,CAAC;AAIzC;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,QAA+B;IAC1D,MAAM,YAAY,GAAG,MAAM,CAAC,gBAAgB,CAAC,EAAc,EAAE;QAC3D,GAAG,MAAM,CAAC,yBAAyB,CAAC,gBAAgB,CAAC;QACrD,MAAM,EAAE;YACN,YAAY,EAAE,IAAI;YAClB,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;SACf;QACD,MAAM,EAAE;YACN,YAAY,EAAE,IAAI;YAClB,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;SACf;QACD,IAAI,EAAE;YACJ,YAAY,EAAE,IAAI;YAClB,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;SACf;QACD,OAAO,EAAE;YACP,YAAY,EAAE,IAAI;YAClB,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;SACf;QACD,IAAI,EAAE;YACJ,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,QAAQ,EAAE,IAAI,IAAI,gBAAgB,CAAC,IAAI;SAC/C;QACD,IAAI,EAAE;YACJ,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,QAAQ,EAAE,IAAI,IAAI,gBAAgB,CAAC,IAAI;SAC/C;QACD,QAAQ,EAAE;YACR,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,QAAQ,EAAE,QAAQ,IAAI,gBAAgB,CAAC,QAAQ;SACvD;QACD,GAAG,CAAC,QAAQ,EAAE,QAAQ,KAAK,SAAS,IAAI;YACtC,QAAQ,EAAE;gBACR,YAAY,EAAE,IAAI;gBAClB,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,QAAQ,CAAC,QAAQ;aACzB;SACF,CAAC;QACF,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,SAAS,IAAI;YACpC,MAAM,EAAE;gBACN,YAAY,EAAE,IAAI;gBAClB,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,QAAQ,CAAC,MAAM;aACvB;SACF,CAAC;QACF,GAAG,CAAC,QAAQ,EAAE,IAAI,KAAK,SAAS,IAAI;YAClC,IAAI,EAAE;gBACJ,YAAY,EAAE,IAAI;gBAClB,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,QAAQ,CAAC,IAAI;aACrB;SACF,CAAC;QACF,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,SAAS,IAAI;YACpC,MAAM,EAAE;gBACN,YAAY,EAAE,IAAI;gBAClB,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,QAAQ,CAAC,MAAM;aACvB;SACF,CAAC;KACH,CAAC,CAAC;IAEH,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare class MutationObserverMock implements MutationObserver {
2
+ takeRecords: MutationObserver['takeRecords'];
3
+ observe: MutationObserver['observe'];
4
+ disconnect: MutationObserver['disconnect'];
5
+ constructor();
6
+ }
7
+ export declare function mockMutationObserver(): void;
@@ -0,0 +1,15 @@
1
+ export class MutationObserverMock {
2
+ takeRecords = MutationObserverMock.prototype.takeRecords.bind(this);
3
+ observe = MutationObserverMock.prototype.observe.bind(this);
4
+ disconnect = MutationObserverMock.prototype.disconnect.bind(this);
5
+ constructor() { }
6
+ }
7
+ export function mockMutationObserver() {
8
+ MutationObserverMock.prototype.takeRecords = vi.fn(function () {
9
+ return [];
10
+ });
11
+ MutationObserverMock.prototype.observe = vi.fn(function () { });
12
+ MutationObserverMock.prototype.disconnect = vi.fn(function () { });
13
+ vi.stubGlobal('MutationObserver', MutationObserverMock);
14
+ }
15
+ //# sourceMappingURL=MutationObserverMock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MutationObserverMock.js","sourceRoot":"src/","sources":["mocks/MutationObserverMock.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,oBAAoB;IAC/B,WAAW,GAAoC,oBAAoB,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrG,OAAO,GAAgC,oBAAoB,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzF,UAAU,GAAmC,oBAAoB,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAElG,gBAAe,CAAC;CACjB;AAED,MAAM,UAAU,oBAAoB;IAClC,oBAAoB,CAAC,SAAS,CAAC,WAAW,GAAG,EAAE,CAAC,EAAE,CAAC;QACjD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IACH,oBAAoB,CAAC,SAAS,CAAC,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,cAAuC,CAAC,CAAC,CAAC;IACzF,oBAAoB,CAAC,SAAS,CAAC,UAAU,GAAG,EAAE,CAAC,EAAE,CAAC,cAAuC,CAAC,CAAC,CAAC;IAE5F,EAAE,CAAC,UAAU,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare class ResizeObserverMock implements ResizeObserver {
2
+ disconnect: ResizeObserver['disconnect'];
3
+ observe: ResizeObserver['observe'];
4
+ unobserve: ResizeObserver['unobserve'];
5
+ constructor();
6
+ }
7
+ export declare function mockResizeObserver(): void;
@@ -0,0 +1,13 @@
1
+ export class ResizeObserverMock {
2
+ disconnect = ResizeObserverMock.prototype.disconnect.bind(this);
3
+ observe = ResizeObserverMock.prototype.observe.bind(this);
4
+ unobserve = ResizeObserverMock.prototype.unobserve.bind(this);
5
+ constructor() { }
6
+ }
7
+ export function mockResizeObserver() {
8
+ ResizeObserverMock.prototype.disconnect = vi.fn(function () { });
9
+ ResizeObserverMock.prototype.observe = vi.fn(function () { });
10
+ ResizeObserverMock.prototype.unobserve = vi.fn(function () { });
11
+ vi.stubGlobal('ResizeObserver', ResizeObserverMock);
12
+ }
13
+ //# sourceMappingURL=ResizeObserverMock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResizeObserverMock.js","sourceRoot":"src/","sources":["mocks/ResizeObserverMock.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,kBAAkB;IAC7B,UAAU,GAAiC,kBAAkB,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9F,OAAO,GAA8B,kBAAkB,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrF,SAAS,GAAgC,kBAAkB,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE3F,gBAAe,CAAC;CACjB;AAED,MAAM,UAAU,kBAAkB;IAChC,kBAAkB,CAAC,SAAS,CAAC,UAAU,GAAG,EAAE,CAAC,EAAE,CAAC,cAAqC,CAAC,CAAC,CAAC;IACxF,kBAAkB,CAAC,SAAS,CAAC,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,cAAqC,CAAC,CAAC,CAAC;IACrF,kBAAkB,CAAC,SAAS,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC,cAAqC,CAAC,CAAC,CAAC;IAEvF,EAAE,CAAC,UAAU,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;AACtD,CAAC"}
@@ -0,0 +1,5 @@
1
+ export interface StubMatchMediaArgs {
2
+ matches: boolean;
3
+ mediaQueryMatches?: Record<string, boolean>;
4
+ }
5
+ export declare function mockMatchMedia({ matches, mediaQueryMatches }: StubMatchMediaArgs): void;
@@ -0,0 +1,15 @@
1
+ export function mockMatchMedia({ matches, mediaQueryMatches }) {
2
+ vi.stubGlobal('matchMedia', vi.fn(function (query) {
3
+ return {
4
+ matches: mediaQueryMatches && mediaQueryMatches[query] !== undefined ? mediaQueryMatches[query] : matches,
5
+ media: query,
6
+ onchange: null,
7
+ addListener: vi.fn(), // deprecated
8
+ removeListener: vi.fn(), // deprecated
9
+ addEventListener: vi.fn(),
10
+ removeEventListener: vi.fn(),
11
+ dispatchEvent: vi.fn(),
12
+ };
13
+ }));
14
+ }
15
+ //# sourceMappingURL=matchMediaMock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matchMediaMock.js","sourceRoot":"src/","sources":["mocks/matchMediaMock.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,cAAc,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAsB;IAC/E,EAAE,CAAC,UAAU,CACX,YAAY,EACZ,EAAE,CAAC,EAAE,CAAC,UAAU,KAAa;QAC3B,OAAO;YACL,OAAO,EAAE,iBAAiB,IAAI,iBAAiB,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO;YACzG,KAAK,EAAE,KAAK;YACZ,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,aAAa;YACnC,cAAc,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,aAAa;YACtC,gBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE;YACzB,mBAAmB,EAAE,EAAE,CAAC,EAAE,EAAE;YAC5B,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE;SACvB,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
package/dist/setup-env.js CHANGED
@@ -3,12 +3,47 @@ import { configure as configureTestingLibrary } from '@testing-library/vue';
3
3
  // eslint-disable-next-line no-restricted-imports
4
4
  import { config, flushPromises } from '@vue/test-utils';
5
5
  import { vi } from 'vitest';
6
+ import { mockIntersectionObserver } from './mocks/IntersectionObserverMock.js';
7
+ import { mockLocation } from './mocks/LocationMock.js';
8
+ import { mockMatchMedia } from './mocks/matchMediaMock.js';
9
+ import { mockMutationObserver } from './mocks/MutationObserverMock.js';
10
+ import { mockResizeObserver } from './mocks/ResizeObserverMock.js';
6
11
  import cleanupDialogs, { cleanupDialogsMountNode } from './utils/cleanupDialogs.js';
7
12
  import cleanupDropdowns from './utils/cleanupDropdowns.js';
8
13
  import cleanupMenus, { cleanupMenusMountNode } from './utils/cleanupMenus.js';
9
14
  import cleanupModals, { cleanupModalsMountNode } from './utils/cleanupModals.js';
10
15
  import cleanupNoty from './utils/cleanupNoty.js';
11
16
  import cleanupToasts, { cleanupToastsMountNode } from './utils/cleanupToasts.js';
17
+ // checking if an element is hidden is quite expensive
18
+ // this is only done in CI as a fail safe. It can still explicitly be checked
19
+ // in the test files which helps documenting what is part of the DOM but hidden
20
+ // from assistive technology
21
+ const defaultHidden = !process.env.CI;
22
+ configureTestingLibrary({ testIdAttribute: 'data-test', defaultHidden });
23
+ // Mock the debounce function so that we can test it synchronously
24
+ vi.mock('lodash-es/debounce', () => {
25
+ return {
26
+ default: (fn) => {
27
+ fn.cancel = vi.fn();
28
+ return fn;
29
+ },
30
+ };
31
+ });
32
+ beforeEach(() => {
33
+ vi.stubGlobal('open', vi.fn());
34
+ mockLocation();
35
+ mockResizeObserver();
36
+ mockIntersectionObserver();
37
+ mockMutationObserver();
38
+ mockMatchMedia({ matches: false });
39
+ global.URL.createObjectURL = vi.fn();
40
+ // Uploading a file does not use axios, so mock the fetch api
41
+ // See src/services/api/files.js->uploadFile for more info
42
+ vi.stubGlobal('fetch', vi.fn().mockResolvedValue({ json: vi.fn().mockResolvedValue({}) }));
43
+ // https://github.com/jsdom/jsdom/issues/1695
44
+ Element.prototype.scrollIntoView = vi.fn();
45
+ config.global.mocks['$t'] = (msg) => msg;
46
+ });
12
47
  afterEach(() => {
13
48
  cleanupModals();
14
49
  cleanupToasts();
@@ -22,81 +57,10 @@ afterEach(async () => {
22
57
  await flushPromises();
23
58
  });
24
59
  afterAll(() => {
25
- // restore `window.location` to the original `jsdom`
26
- // `Location` object
27
- // @ts-expect-error - accepts string & Location type
28
- global.window.location = oldWindowLocation;
29
60
  // remove mount nodes from the DOM
30
61
  cleanupModalsMountNode();
31
62
  cleanupToastsMountNode();
32
63
  cleanupDialogsMountNode();
33
64
  cleanupMenusMountNode();
34
65
  });
35
- // checking if an element is hidden is quite expensive
36
- // this is only done in CI as a fail safe. It can still explicitly be checked
37
- // in the test files which helps documenting what is part of the DOM but hidden
38
- // from assistive technology
39
- const defaultHidden = !process.env.CI;
40
- configureTestingLibrary({ testIdAttribute: 'data-test', defaultHidden });
41
- // Mock the debounce function so that we can test it synchronously
42
- vi.mock('lodash-es/debounce', () => {
43
- return {
44
- default: (fn) => {
45
- fn.cancel = vi.fn();
46
- return fn;
47
- },
48
- };
49
- });
50
- config.global.mocks['$t'] = (msg) => msg;
51
- const oldWindowLocation = global.window.location;
52
- // @ts-expect-error - dunno
53
- delete global.window.location;
54
- // @ts-expect-error - dunno
55
- global.window.location = Object.defineProperties({}, {
56
- ...Object.getOwnPropertyDescriptors(oldWindowLocation),
57
- assign: {
58
- configurable: true,
59
- value: vi.fn(),
60
- },
61
- href: {
62
- configurable: true,
63
- writable: true,
64
- value: {
65
- replace: vi.fn(),
66
- },
67
- },
68
- });
69
- vi.stubGlobal('open', vi.fn());
70
- global.window.ResizeObserver =
71
- global.window.ResizeObserver ||
72
- class ResizeObserver {
73
- observe() { }
74
- unobserve() { }
75
- disconnect() { }
76
- };
77
- const IntersectionObserverMock = vi.fn(() => ({
78
- get root() {
79
- return;
80
- },
81
- disconnect: vi.fn(),
82
- observe: vi.fn(),
83
- takeRecords: vi.fn(),
84
- unobserve: vi.fn(),
85
- }));
86
- vi.stubGlobal('IntersectionObserver', IntersectionObserverMock);
87
- // Uploading a file does not use axios, so mock the fetch api
88
- // See src/services/api/files.js->uploadFile for more info
89
- vi.stubGlobal('fetch', vi.fn().mockResolvedValue({ json: vi.fn().mockResolvedValue({}) }));
90
- // https://github.com/jsdom/jsdom/issues/1695
91
- Element.prototype.scrollIntoView = vi.fn();
92
- window.matchMedia = vi.fn((query) => ({
93
- matches: false,
94
- media: query,
95
- onchange: null,
96
- addListener: vi.fn(),
97
- removeListener: vi.fn(),
98
- addEventListener: vi.fn(),
99
- removeEventListener: vi.fn(),
100
- dispatchEvent: vi.fn(),
101
- }));
102
66
  //# sourceMappingURL=setup-env.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"setup-env.js","sourceRoot":"src/","sources":["setup-env.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup-env.js","sourceRoot":"src/","sources":["setup-env.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leaflink/dom-testing-utils",
3
- "version": "5.2.1",
3
+ "version": "5.2.2",
4
4
  "description": "Frontend DOM testing utilities",
5
5
  "engines": {
6
6
  "node": ">=18",