@mdwrk/testing 1.0.0

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/README.md ADDED
@@ -0,0 +1,17 @@
1
+ # mdwrk/testing
2
+
3
+ Shared browser and timing test helpers for Markdown Workspace packages.
4
+
5
+ ## Exports
6
+
7
+ - `mdwrk/testing` — browser and timing helpers
8
+ - `mdwrk/testing/browser` — memory storage and browser stubs
9
+ - `mdwrk/testing/timing` — async timing helpers
10
+ - `mdwrk/testing/vitest-setup` — installs common jsdom-friendly browser stubs
11
+
12
+ ## Example
13
+
14
+ ```ts
15
+ import { createMemoryStorage } from "@mdwrk/testing/browser";
16
+ import { flushMicrotasks } from "@mdwrk/testing/timing";
17
+ ```
@@ -0,0 +1,11 @@
1
+ export interface MemoryStorageLike {
2
+ getItem(key: string): string | null;
3
+ setItem(key: string, value: string): void;
4
+ removeItem(key: string): void;
5
+ clear(): void;
6
+ key(index: number): string | null;
7
+ readonly length: number;
8
+ }
9
+ export declare function createMemoryStorage(initialState?: Readonly<Record<string, string>>): MemoryStorageLike;
10
+ export declare function installMatchMediaStub(matches?: boolean): () => void;
11
+ //# sourceMappingURL=browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACpC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,KAAK,IAAI,IAAI,CAAC;IACd,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,mBAAmB,CAAC,YAAY,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM,GAAG,iBAAiB,CAuB1G;AAED,wBAAgB,qBAAqB,CAAC,OAAO,UAAQ,GAAG,MAAM,IAAI,CAwBjE"}
@@ -0,0 +1,48 @@
1
+ export function createMemoryStorage(initialState = {}) {
2
+ const store = new Map(Object.entries(initialState));
3
+ return {
4
+ getItem(key) {
5
+ return store.has(key) ? store.get(key) ?? null : null;
6
+ },
7
+ setItem(key, value) {
8
+ store.set(key, value);
9
+ },
10
+ removeItem(key) {
11
+ store.delete(key);
12
+ },
13
+ clear() {
14
+ store.clear();
15
+ },
16
+ key(index) {
17
+ return Array.from(store.keys())[index] ?? null;
18
+ },
19
+ get length() {
20
+ return store.size;
21
+ },
22
+ };
23
+ }
24
+ export function installMatchMediaStub(matches = false) {
25
+ const original = window.matchMedia;
26
+ Object.defineProperty(window, "matchMedia", {
27
+ configurable: true,
28
+ writable: true,
29
+ value: (query) => ({
30
+ matches,
31
+ media: query,
32
+ onchange: null,
33
+ addListener: () => undefined,
34
+ removeListener: () => undefined,
35
+ addEventListener: () => undefined,
36
+ removeEventListener: () => undefined,
37
+ dispatchEvent: () => false,
38
+ }),
39
+ });
40
+ return () => {
41
+ Object.defineProperty(window, "matchMedia", {
42
+ configurable: true,
43
+ writable: true,
44
+ value: original,
45
+ });
46
+ };
47
+ }
48
+ //# sourceMappingURL=browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,mBAAmB,CAAC,eAAiD,EAAE;IACrF,MAAM,KAAK,GAAG,IAAI,GAAG,CAAiB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IAEpE,OAAO;QACL,OAAO,CAAC,GAAW;YACjB,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACxD,CAAC;QACD,OAAO,CAAC,GAAW,EAAE,KAAa;YAChC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACxB,CAAC;QACD,UAAU,CAAC,GAAW;YACpB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;QACD,KAAK;YACH,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;QACD,GAAG,CAAC,KAAa;YACf,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;QACjD,CAAC;QACD,IAAI,MAAM;YACR,OAAO,KAAK,CAAC,IAAI,CAAC;QACpB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAO,GAAG,KAAK;IACnD,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC;IACnC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE;QAC1C,YAAY,EAAE,IAAI;QAClB,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC;YACzB,OAAO;YACP,KAAK,EAAE,KAAK;YACZ,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,GAAG,EAAE,CAAC,SAAS;YAC5B,cAAc,EAAE,GAAG,EAAE,CAAC,SAAS;YAC/B,gBAAgB,EAAE,GAAG,EAAE,CAAC,SAAS;YACjC,mBAAmB,EAAE,GAAG,EAAE,CAAC,SAAS;YACpC,aAAa,EAAE,GAAG,EAAE,CAAC,KAAK;SAC3B,CAAC;KACH,CAAC,CAAC;IAEH,OAAO,GAAG,EAAE;QACV,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE;YAC1C,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,QAAQ;SAChB,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from "./version.js";
2
+ export * from "./browser.js";
3
+ export * from "./timing.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ export * from "./version.js";
2
+ export * from "./browser.js";
3
+ export * from "./timing.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function flushMicrotasks(): Promise<void>;
2
+ export declare function nextMacrotask(): Promise<void>;
3
+ //# sourceMappingURL=timing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timing.d.ts","sourceRoot":"","sources":["../src/timing.ts"],"names":[],"mappings":"AAAA,wBAAgB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED,wBAAgB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAE7C"}
package/dist/timing.js ADDED
@@ -0,0 +1,7 @@
1
+ export function flushMicrotasks() {
2
+ return Promise.resolve();
3
+ }
4
+ export function nextMacrotask() {
5
+ return new Promise((resolve) => setTimeout(resolve, 0));
6
+ }
7
+ //# sourceMappingURL=timing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timing.js","sourceRoot":"","sources":["../src/timing.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,eAAe;IAC7B,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const TESTING_PACKAGE_VERSION: "1.0.0";
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,uBAAuB,EAAG,OAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export const TESTING_PACKAGE_VERSION = "1.0.0";
2
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,uBAAuB,GAAG,OAAgB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export interface MarkdownWorkspaceVitestSetupCleanup {
2
+ restore(): void;
3
+ }
4
+ export declare function installMarkdownWorkspaceVitestSetup(): MarkdownWorkspaceVitestSetupCleanup;
5
+ //# sourceMappingURL=vitest-setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vitest-setup.d.ts","sourceRoot":"","sources":["../src/vitest-setup.ts"],"names":[],"mappings":"AA+CA,MAAM,WAAW,mCAAmC;IAClD,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,wBAAgB,mCAAmC,IAAI,mCAAmC,CAWzF"}
@@ -0,0 +1,51 @@
1
+ import { installMatchMediaStub } from "./browser.js";
2
+ function installScrollToStub() {
3
+ const original = window.scrollTo;
4
+ Object.defineProperty(window, "scrollTo", {
5
+ configurable: true,
6
+ writable: true,
7
+ value: () => undefined,
8
+ });
9
+ return () => {
10
+ Object.defineProperty(window, "scrollTo", {
11
+ configurable: true,
12
+ writable: true,
13
+ value: original,
14
+ });
15
+ };
16
+ }
17
+ function installResizeObserverStub() {
18
+ const original = globalThis.ResizeObserver;
19
+ class ResizeObserverStub {
20
+ observe() {
21
+ // no-op for tests
22
+ }
23
+ unobserve() {
24
+ // no-op for tests
25
+ }
26
+ disconnect() {
27
+ // no-op for tests
28
+ }
29
+ }
30
+ globalThis.ResizeObserver = ResizeObserverStub;
31
+ return () => {
32
+ if (original === undefined) {
33
+ delete globalThis.ResizeObserver;
34
+ return;
35
+ }
36
+ globalThis.ResizeObserver = original;
37
+ };
38
+ }
39
+ export function installMarkdownWorkspaceVitestSetup() {
40
+ const restorers = [installMatchMediaStub(), installScrollToStub(), installResizeObserverStub()];
41
+ return {
42
+ restore() {
43
+ while (restorers.length > 0) {
44
+ const restore = restorers.pop();
45
+ restore?.();
46
+ }
47
+ },
48
+ };
49
+ }
50
+ installMarkdownWorkspaceVitestSetup();
51
+ //# sourceMappingURL=vitest-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vitest-setup.js","sourceRoot":"","sources":["../src/vitest-setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAErD,SAAS,mBAAmB;IAC1B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACjC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE;QACxC,YAAY,EAAE,IAAI;QAClB,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,GAAG,EAAE,CAAC,SAAS;KACvB,CAAC,CAAC;IAEH,OAAO,GAAG,EAAE;QACV,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE;YACxC,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,QAAQ;SAChB,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB;IAChC,MAAM,QAAQ,GAAI,UAA+D,CAAC,cAAc,CAAC;IAEjG,MAAM,kBAAkB;QACtB,OAAO;YACL,kBAAkB;QACpB,CAAC;QAED,SAAS;YACP,kBAAkB;QACpB,CAAC;QAED,UAAU;YACR,kBAAkB;QACpB,CAAC;KACF;IAEA,UAAgF,CAAC,cAAc,GAAG,kBAAkB,CAAC;IAEtH,OAAO,GAAG,EAAE;QACV,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAQ,UAA+D,CAAC,cAAc,CAAC;YACvF,OAAO;QACT,CAAC;QACA,UAA8D,CAAC,cAAc,GAAG,QAAQ,CAAC;IAC5F,CAAC,CAAC;AACJ,CAAC;AAMD,MAAM,UAAU,mCAAmC;IACjD,MAAM,SAAS,GAAG,CAAC,qBAAqB,EAAE,EAAE,mBAAmB,EAAE,EAAE,yBAAyB,EAAE,CAAC,CAAC;IAEhG,OAAO;QACL,OAAO;YACL,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC;gBAChC,OAAO,EAAE,EAAE,CAAC;YACd,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,mCAAmC,EAAE,CAAC"}
package/package.json ADDED
@@ -0,0 +1,59 @@
1
+ {
2
+ "version": "1.0.0",
3
+ "type": "module",
4
+ "license": "Apache-2.0",
5
+ "publishConfig": {
6
+ "access": "public"
7
+ },
8
+ "engines": {
9
+ "node": ">=20 <23"
10
+ },
11
+ "files": [
12
+ "dist",
13
+ "README.md"
14
+ ],
15
+ "name": "@mdwrk/testing",
16
+ "description": "Shared browser and React test helpers for Markdown Workspace packages.",
17
+ "sideEffects": [
18
+ "./dist/vitest-setup.js"
19
+ ],
20
+ "keywords": [
21
+ "markdown-workspace",
22
+ "shared",
23
+ "testing",
24
+ "vitest"
25
+ ],
26
+ "scripts": {
27
+ "build": "tsc -p tsconfig.json",
28
+ "typecheck": "tsc --noEmit -p tsconfig.json",
29
+ "lint": "npm run typecheck",
30
+ "test": "npm run typecheck",
31
+ "prepack": "npm run build"
32
+ },
33
+ "exports": {
34
+ ".": {
35
+ "types": "./dist/index.d.ts",
36
+ "import": "./dist/index.js"
37
+ },
38
+ "./version": {
39
+ "types": "./dist/version.d.ts",
40
+ "import": "./dist/version.js"
41
+ },
42
+ "./browser": {
43
+ "types": "./dist/browser.d.ts",
44
+ "import": "./dist/browser.js"
45
+ },
46
+ "./timing": {
47
+ "types": "./dist/timing.d.ts",
48
+ "import": "./dist/timing.js"
49
+ },
50
+ "./vitest-setup": {
51
+ "types": "./dist/vitest-setup.d.ts",
52
+ "import": "./dist/vitest-setup.js"
53
+ }
54
+ },
55
+ "main": "./dist/index.js",
56
+ "types": "./dist/index.d.ts",
57
+ "author": "Jacob Stewart <jacob@swarmauri.com>",
58
+ "homepage": "https://mdwrk.com"
59
+ }