diff --git a/package.json b/package.json index 171bef3f8..0f2457de9 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "eslint": "^9.39.2", "jsdom": "^27.1.0", "lerna": "^9.0.3", - "prettier": "~3.6.2", + "prettier": "3.7.4", "pretty-quick": "^4.2.2", "semver": "^7.7.3", "tsx": "^4.21.0", diff --git a/packages/code-infra/package.json b/packages/code-infra/package.json index 3aa105b20..fe0668af5 100644 --- a/packages/code-infra/package.json +++ b/packages/code-infra/package.json @@ -116,7 +116,7 @@ "peerDependencies": { "@next/eslint-plugin-next": "*", "eslint": "^9.0.0", - "prettier": "~3.5.3", + "prettier": "^3.0.0", "typescript": "^5.0.0" }, "devDependencies": { diff --git a/packages/docs-infra/src/CodeHighlighter/types.ts b/packages/docs-infra/src/CodeHighlighter/types.ts index 26f6ac154..b6523c544 100644 --- a/packages/docs-infra/src/CodeHighlighter/types.ts +++ b/packages/docs-infra/src/CodeHighlighter/types.ts @@ -160,7 +160,8 @@ export interface LoadFileOptions { * Options for the loadCodeVariant function, extending LoadFileOptions with required function dependencies */ export interface LoadVariantOptions - extends LoadFileOptions, + extends + LoadFileOptions, Pick< CodeFunctionProps, 'sourceParser' | 'loadSource' | 'loadVariantMeta' | 'sourceTransformers' @@ -170,7 +171,8 @@ export interface LoadVariantOptions * Options for loading fallback code with various configuration flags */ export interface LoadFallbackCodeOptions - extends LoadFileOptions, + extends + LoadFileOptions, CodeFunctionProps, Pick, Pick { @@ -296,7 +298,8 @@ export interface CodeClientRenderingProps { * This serves as the foundation for other CodeHighlighter-related interfaces. */ export interface CodeHighlighterBaseProps - extends CodeIdentityProps, + extends + CodeIdentityProps, CodeContentProps, CodeLoadingProps, CodeFunctionProps, @@ -307,7 +310,8 @@ export interface CodeHighlighterBaseProps * Used when rendering happens in the browser with lazy loading and interactive features. */ export interface CodeHighlighterClientProps - extends CodeIdentityProps, + extends + CodeIdentityProps, CodeContentProps, Omit, CodeClientRenderingProps { diff --git a/packages/docs-infra/src/pipeline/syncPageIndex/mergeMetadataMarkdown.ts b/packages/docs-infra/src/pipeline/syncPageIndex/mergeMetadataMarkdown.ts index 7e7d6c1c4..c61343563 100644 --- a/packages/docs-infra/src/pipeline/syncPageIndex/mergeMetadataMarkdown.ts +++ b/packages/docs-infra/src/pipeline/syncPageIndex/mergeMetadataMarkdown.ts @@ -9,8 +9,10 @@ import { /** * Options for mergeMetadataMarkdown */ -export interface MergeMetadataMarkdownOptions - extends Omit { +export interface MergeMetadataMarkdownOptions extends Omit< + MetadataToMarkdownOptions, + 'editableMarker' | 'indexWrapperComponent' +> { /** If true, pages in existing markdown that aren't in newMetadata will be preserved. If false (default), they are removed. */ preserveUnlisted?: boolean; /** diff --git a/packages/docs-infra/src/pipeline/transformHtmlCodePrecomputed/transformHtmlCodePrecomputed.test.ts b/packages/docs-infra/src/pipeline/transformHtmlCodePrecomputed/transformHtmlCodePrecomputed.test.ts index 8981f475f..cb29f478e 100644 --- a/packages/docs-infra/src/pipeline/transformHtmlCodePrecomputed/transformHtmlCodePrecomputed.test.ts +++ b/packages/docs-infra/src/pipeline/transformHtmlCodePrecomputed/transformHtmlCodePrecomputed.test.ts @@ -11,9 +11,8 @@ import type { VariantCode } from '../../CodeHighlighter/types'; vi.mock('../loadCodeVariant/loadCodeVariant', () => ({ loadCodeVariant: vi.fn(async (url: string, variantName: string, variant: VariantCode) => { // Import normalizeLanguage inside the mock to apply normalization - const { normalizeLanguage: normalize } = await import( - '../loaderUtils/getLanguageFromExtension' - ); + const { normalizeLanguage: normalize } = + await import('../loaderUtils/getLanguageFromExtension'); // Simple mock that just returns the input with some transforms applied // Also normalize language like the real implementation does diff --git a/packages/test-utils/src/createRenderer.tsx b/packages/test-utils/src/createRenderer.tsx index 515f90b71..b9c776932 100644 --- a/packages/test-utils/src/createRenderer.tsx +++ b/packages/test-utils/src/createRenderer.tsx @@ -102,6 +102,10 @@ export interface MuiRenderResult extends RenderResult; } export interface MuiRenderToStringResult { @@ -139,6 +143,11 @@ function render( setProps(props) { testingLibraryRenderResult.rerender(React.cloneElement(element, props)); }, + async setPropsAsync(props) { + await rtlAct(async () => { + testingLibraryRenderResult.rerender(React.cloneElement(element, props)); + }); + }, }; return result; @@ -176,6 +185,11 @@ export interface Clock { * @param timeoutMS */ tick(timeoutMS: number): void; + /** + * Tick the clock ahead `timeoutMS` milliseconds. And also flush any microtasks queued in between. + * @param timeoutMS + */ + tickAsync(timeoutMS: number): Promise; /** * Returns true if we're running with "real" i.e. native timers. */ @@ -274,6 +288,11 @@ function createClock( vi.advanceTimersByTime(timeoutMS); }); }, + async tickAsync(timeoutMS: number) { + await rtlAct(async () => { + await vi.advanceTimersByTimeAsync(timeoutMS); + }); + }, runAll() { rtlAct(() => { vi.runAllTimers(); @@ -552,7 +571,18 @@ function act(callback: () => void | T | Promise) { return rtlAct(callback); } -const bodyBoundQueries = within(document.body, { ...queries, ...customQueries }); +function createBodyBoundQueries() { + return within(document.body, { ...queries, ...customQueries }); +} + +const bodyBoundQueries = + typeof document === 'undefined' + ? new Proxy({} as ReturnType, { + get: () => { + throw new Error('bodyBoundQueries is not available in a non-DOM environment'); + }, + }) + : createBodyBoundQueries(); export { configure, diff --git a/packages/test-utils/src/ignoreActWarnings.ts b/packages/test-utils/src/ignoreActWarnings.ts new file mode 100644 index 000000000..3c6e56df3 --- /dev/null +++ b/packages/test-utils/src/ignoreActWarnings.ts @@ -0,0 +1,19 @@ +import { onTestFinished } from 'vitest'; + +export function ignoreActWarnings() { + const originalConsoleError = console.error; + console.error = new Proxy(console.error, { + apply(target, thisArg, args) { + if ( + typeof args[0] === 'string' && + args[0].includes('An update to %s inside a test was not wrapped in act') + ) { + return; + } + Reflect.apply(target, thisArg, args); + }, + }); + onTestFinished(() => { + console.error = originalConsoleError; + }); +} diff --git a/packages/test-utils/src/index.ts b/packages/test-utils/src/index.ts index c9ec5676b..2e665813f 100644 --- a/packages/test-utils/src/index.ts +++ b/packages/test-utils/src/index.ts @@ -15,3 +15,4 @@ export { export { fireEvent as fireDiscreteEvent } from '@testing-library/react/pure.js'; export { flushMicrotasks } from './flushMicrotasks'; export * from './env'; +export { ignoreActWarnings } from './ignoreActWarnings'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e0c47beff..9fd198866 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -62,11 +62,11 @@ importers: specifier: ^9.0.3 version: 9.0.3(@types/node@22.19.0)(babel-plugin-macros@3.1.0) prettier: - specifier: ~3.6.2 - version: 3.6.2 + specifier: 3.7.4 + version: 3.7.4 pretty-quick: specifier: ^4.2.2 - version: 4.2.2(prettier@3.6.2) + version: 4.2.2(prettier@3.7.4) semver: specifier: ^7.7.3 version: 7.7.3 @@ -702,7 +702,7 @@ importers: version: 0.1.2 prettier: specifier: ^3.0.0 - version: 3.6.2 + version: 3.7.4 proper-lockfile: specifier: ^4.1.2 version: 4.1.2 @@ -11905,11 +11905,6 @@ packages: engines: {node: '>=14'} hasBin: true - prettier@3.6.2: - resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} - engines: {node: '>=14'} - hasBin: true - prettier@3.7.4: resolution: {integrity: sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==} engines: {node: '>=14'} @@ -21951,7 +21946,7 @@ snapshots: '@babel/core': 7.28.5 core-js: 3.46.0 lodash.mergewith: 4.6.2 - prettier: 3.6.2 + prettier: 3.7.4 pretty-format: 30.2.0 rejoinder: 2.1.0 strip-indent~3: strip-indent@3.0.0 @@ -28006,8 +28001,6 @@ snapshots: prettier@3.4.2: {} - prettier@3.6.2: {} - prettier@3.7.4: {} pretty-bytes@6.1.1: {} @@ -28028,14 +28021,14 @@ snapshots: dependencies: parse-ms: 4.0.0 - pretty-quick@4.2.2(prettier@3.6.2): + pretty-quick@4.2.2(prettier@3.7.4): dependencies: '@pkgr/core': 0.2.9 ignore: 7.0.5 mri: 1.2.0 picocolors: 1.1.1 picomatch: 4.0.3 - prettier: 3.6.2 + prettier: 3.7.4 tinyexec: 0.3.2 tslib: 2.8.1