Skip to content

Conversation

@kazupon
Copy link
Member

@kazupon kazupon commented Nov 25, 2025

Summary by CodeRabbit

  • New Features

    • Integrated TypeDoc-based API generation and added new public type exports (IsPart, JsonPaths)
  • Documentation

    • Reorganized docs and sidebar navigation; updated API reference structure, links and admonitions
    • Upgraded docs site to VitePress 2.x alpha and added Typedoc/VitePress integration
  • Bug Fixes

    • Fixed multiple documentation/type signature formatting and overload issues
  • Chores

    • Updated build/dev scripts, tooling, configs and ignore rules for docs/type generation

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link

coderabbitai bot commented Nov 25, 2025

Warning

Rate limit exceeded

@kazupon has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 2 minutes and 43 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between 84653ca and b205b2d.

📒 Files selected for processing (2)
  • docs/api/v11/composition.md (78 hunks)
  • docs/api/v11/general.md (25 hunks)

Walkthrough

Consolidates docs onto TypeDoc-generated API, updates VitePress to v2 alpha, restructures sidebar, exports new type utilities (IsPart, JsonPaths) across packages, adjusts numerous TS typings (component augmentation, formatting overloads), and adds/updates TypeDoc and build tooling/config files.

Changes

Cohort / File(s) Summary
Docs config & sidebar
/.gitignore, docs/.vitepress/config.mts, docs/api/typedoc-sidebar.json
Update .gitignore rules, add typedoc-based sidebar JSON, refactor VitePress sidebar to assemble from typedoc JSON and helper builders.
Typedoc & docs tooling
typedoc.config.mjs, tsconfig.typedoc.json, tsdoc.json, package.json, scripts/build-types.ts
Add TypeDoc config and tsconfig, add typedoc script and run-before-build in docs:build, tweak build script to await async result, update devDependencies and pnpm overrides.
Docs pages & formatting
docs/api/injection.md (deleted), docs/api/v11/*, docs/guide/**/*
Remove injection.md; update many v11 API docs (signatures, whitespace, links); migrate admonitions to standardized markdown, update internal API links and eslint wrappers.
Sidebar data file
docs/api/typedoc-sidebar.json
Add TypeDoc-generated sidebar data describing "general" and "vue" API sections.
ESLint / Knip ignores
eslint.config.ts, knip.config.ts
Exclude packages/vue-i18n/src/vue.d.ts (ESLint) and ignore src/vue.d.ts, src/vue.ts (Knip) for specified workspace.
New/changed public types
packages/core-base/src/types/utils.ts, packages/core-base/src/runtime.ts
Add exported IsPart type; fix parameter name typo in linked signature JSDoc/overload.
Propagated type exports
packages/petite-vue-i18n/src/index.ts, packages/petite-vue-i18n/src/runtime.ts, packages/petite-vue-i18n/src/vue.d.ts, packages/vue-i18n/src/index.ts, packages/vue-i18n/src/runtime.ts
Re-export/add IsPart and JsonPaths to public type exports across petite and main packages; reorder small import lists.
Core type refactor
packages/vue-i18n-core/src/composer.ts, packages/vue-i18n-core/src/i18n.ts, packages/vue-i18n-core/src/plugin.ts, packages/vue-i18n-core/src/plugin/types.ts
Replace local IsPart alias with imported IsPart, update type signatures and JSDoc tags/links.
Component JSDoc updates
packages/vue-i18n-core/src/components/DatetimeFormat.ts, .../NumberFormat.ts, .../Translation.ts
Convert deprecated @VueI18n* tags to {@linkcode}/{@link} and blockquote admonitions; adjust wording and punctuation in docblocks.
Vue component typings & augmentation
packages/vue-i18n/src/vue.d.ts, packages/vue-i18n/src/vue.ts
Remove local IsPart alias, import IsPart/JsonPaths from core, adjust $d/$n overload generics (introduce OptionsType, reorder generics), and add comprehensive ComponentCustomOptions/ComponentCustomProperties augmentation file.
Minor docs/bench cleanup
benchmark/*.mjs, packages/vue-i18n-core/src/components/*.ts, other small docs tweaks
Remove inline eslint-disable comments in benchmarks; minor punctuation and doc wording edits.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~55 minutes

Areas to focus review on:

  • packages/vue-i18n/src/vue.ts — large augmentation with many generics and overloads.
  • packages/vue-i18n/src/vue.d.ts — reordered generics and $d/$n overload changes; ensure consistency with runtime and other typings.
  • docs/.vitepress/config.mts + docs/api/typedoc-sidebar.json — confirm sidebar assembly matches generated TypeDoc output and routing.
  • package.json & TypeDoc/VitePress dependency changes — verify docs build pipeline in CI.

Possibly related PRs

Suggested labels

Type: Improvement

Poem

🐰 Hopped through types and docs with glee,
Sidebars sprouted where JSON should be.
Types shared, overloads tidied tight,
Build scripts await the docs' new light.
A rabbit cheers — compile and flight! 🥕

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: switching API docs generation from api-extractor to typedoc, which is the core objective of this comprehensive PR.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@cloudflare-workers-and-pages
Copy link

cloudflare-workers-and-pages bot commented Nov 25, 2025

Deploying vue-i18n-next with  Cloudflare Pages  Cloudflare Pages

Latest commit: b205b2d
Status: ✅  Deploy successful!
Preview URL: https://54a04dc6.vue-i18n-next.pages.dev
Branch Preview URL: https://docs-migrate-to-typedoc.vue-i18n-next.pages.dev

View logs

@github-actions
Copy link

Size Report

Bundles

File Size Gzip Brotli
core.esm-browser.prod.js 42.91 kB 12.56 kB 11.24 kB
core.global.prod.js 33.56 kB 11.34 kB 10.22 kB
core.runtime.esm-browser.prod.js 27.19 kB 8.37 kB 7.51 kB
core.runtime.global.prod.js 20.13 kB 7.57 kB 6.80 kB
message-compiler.esm-browser.prod.js 21.75 kB 6.32 kB 5.66 kB
message-compiler.global.prod.js 19.48 kB 6.14 kB 5.53 kB
petite-vue-i18n-core.esm-browser.prod.js 23.49 kB 7.57 kB 6.80 kB
petite-vue-i18n-core.global.prod.js 17.14 kB 6.48 kB 5.87 kB
petite-vue-i18n.esm-browser.prod.js 41.72 kB 12.34 kB 11.07 kB
petite-vue-i18n.global.prod.js 32.22 kB 10.72 kB 9.74 kB
petite-vue-i18n.runtime.esm-browser.prod.js 25.85 kB 8.07 kB 7.29 kB
petite-vue-i18n.runtime.global.prod.js 18.80 kB 6.94 kB 6.31 kB
vue-i18n.esm-browser.prod.js 55.37 kB 16.02 kB 14.37 kB
vue-i18n.global.prod.js 42.66 kB 14.03 kB 12.71 kB
vue-i18n.runtime.esm-browser.prod.js 39.49 kB 11.76 kB 10.60 kB
vue-i18n.runtime.global.prod.js 29.23 kB 10.27 kB 9.30 kB

Usages

Name Size Gzip Brotli
packages/size-check-core (@intlify/core) 12.18 kB 4.77 kB 4.29 kB
packages/size-check-petite-vue-i18n (petite-vue-i18n) 83.98 kB 32.15 kB 28.95 kB
packages/size-check-vue-i18n (vue-i18n) 89.11 kB 33.62 kB 30.19 kB

@pkg-pr-new
Copy link

pkg-pr-new bot commented Nov 25, 2025

Open in StackBlitz

@intlify/core

npm i https://pkg.pr.new/@intlify/core@2325

@intlify/core-base

npm i https://pkg.pr.new/@intlify/core-base@2325

@intlify/devtools-types

npm i https://pkg.pr.new/@intlify/devtools-types@2325

@intlify/message-compiler

npm i https://pkg.pr.new/@intlify/message-compiler@2325

petite-vue-i18n

npm i https://pkg.pr.new/petite-vue-i18n@2325

@intlify/shared

npm i https://pkg.pr.new/@intlify/shared@2325

vue-i18n

npm i https://pkg.pr.new/vue-i18n@2325

@intlify/vue-i18n-core

npm i https://pkg.pr.new/@intlify/vue-i18n-core@2325

commit: b205b2d

@kazupon kazupon changed the title docs: switch to typedoc from api-extractor docs: switch to typedoc from api-extractor for API docs Nov 27, 2025
@kazupon kazupon marked this pull request as ready for review November 28, 2025 03:35
@kazupon kazupon changed the title docs: switch to typedoc from api-extractor for API docs docs: switch API docs generation to typedoc from api-extractor Nov 28, 2025
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 11

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
packages/vue-i18n-core/src/i18n.ts (1)

950-1003: Fix JSDoc symbol name and wording in rt/number-formatting docs

Two documentation issues to correct in packages/vue-i18n-core/src/composer.ts:

  1. Line 957: The text refers to {@link UseI18nScope} but this type does not exist in the codebase. The correct exported type is I18nScope (defined in i18n.ts). Update the link to {@link I18nScope}.

  2. Line 1191: In the "Number Formatting" JSDoc block, the description incorrectly says "local scope datetime formats" when describing n() / number formatting. It should say "number formats" for accuracy. The text currently repeats "datetime formats" twice in the same section.

docs/api/v11/composition.md (1)

720-721: Missing closing quote in code example.

The import statement is missing a closing quote:

-import { defineComponent } from 'vue
+import { defineComponent } from 'vue'
♻️ Duplicate comments (1)
packages/vue-i18n-core/src/plugin/types.ts (1)

18-18: Same JSDoc tag change as in plugin.ts.

This change is identical to the one in packages/vue-i18n-core/src/plugin.ts at Line 25. Please verify both locations use the correct TypeDoc tag syntax.

🧹 Nitpick comments (3)
packages/petite-vue-i18n/src/vue.d.ts (1)

1-7: Imports align with $t overload typings; consider future DRYing

Importing JsonPaths and TranslateOptions from @intlify/core-base matches how the $t overload generics are defined below, so the typing surface remains coherent and centralized around core-base types.

If you touch this again, you might consider extracting a shared helper type for the repeated generic head (DefinedLocaleMessage, Keys, ResourceKeys) used across all $t overloads to reduce duplication and keep future changes localized, but this is not urgent.

typedoc.config.mjs (1)

1-37: Typedoc/VitePress config matches the new docs pipeline; consider a couple of small tweaks

This config lines up with the move to TypeDoc + markdown + VitePress:

  • entryPoints restricted to vue-i18n’s main public surfaces is reasonable for API docs.
  • Markdown plugin and VitePress theme options (tables, lists, docsRoot: './docs', etc.) look consistent with the new docs/api layout and sidebar JSON.

Two minor things worth double‑checking:

  1. Group names in groupOrder

    Depending on the exact titles emitted by your TypeDoc/markdown theme (often Classes, Interfaces, Type Aliases, etc.), using 'Class' here may not have any effect if it doesn’t match the generated group label string. It might be worth confirming the exact group names and adjusting to something like:

    groupOrder: ['Variables', 'Functions', 'Classes']

    if that’s what the plugin actually outputs.

  2. cleanOutputDir: false and stale API pages

    Leaving cleanOutputDir as false avoids wiping manually curated files under docs/api, but it does mean that removed symbols could leave behind stale .md files. As long as you’re aware of that trade‑off and don’t rely on docs/api to always reflect the exact current symbol set, this is fine; otherwise consider selectively cleaning or restructuring where custom docs live.

Also, if you intend tsconfig.typedoc.json to drive the docs build, make sure it’s either wired in via your npm script (CLI --tsconfig) or added here as a tsconfig option so this config is self‑contained.

docs/api/v11/composition.md (1)

151-151: Markdown list indentation inconsistency.

Lines 151 and 222 have inconsistent list indentation (1 space instead of 0). This may cause rendering issues in some Markdown parsers:

 See about:
-- [Local Scope](../../guide/essentials/scope#local-scope-2)
+- [Local Scope](../../guide/essentials/scope#local-scope-2)

Also applies to: 222-222

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 326d254 and ea63f94.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (37)
  • .gitignore (1 hunks)
  • docs/.vitepress/config.mts (4 hunks)
  • docs/api/injection.md (0 hunks)
  • docs/api/typedoc-sidebar.json (1 hunks)
  • docs/api/v11/component.md (6 hunks)
  • docs/api/v11/composition.md (82 hunks)
  • docs/api/v11/general.md (26 hunks)
  • docs/api/v11/legacy.md (44 hunks)
  • docs/guide/advanced/composition.md (4 hunks)
  • docs/guide/advanced/lazy.md (1 hunks)
  • docs/guide/essentials/datetime.md (2 hunks)
  • docs/guide/essentials/number.md (2 hunks)
  • docs/guide/essentials/pluralization.md (1 hunks)
  • docs/guide/essentials/syntax.md (1 hunks)
  • eslint.config.ts (1 hunks)
  • knip.config.ts (1 hunks)
  • package.json (4 hunks)
  • packages/core-base/src/runtime.ts (1 hunks)
  • packages/core-base/src/types/utils.ts (1 hunks)
  • packages/petite-vue-i18n/src/index.ts (1 hunks)
  • packages/petite-vue-i18n/src/runtime.ts (1 hunks)
  • packages/petite-vue-i18n/src/vue.d.ts (1 hunks)
  • packages/vue-i18n-core/src/components/DatetimeFormat.ts (1 hunks)
  • packages/vue-i18n-core/src/components/NumberFormat.ts (1 hunks)
  • packages/vue-i18n-core/src/components/Translation.ts (1 hunks)
  • packages/vue-i18n-core/src/composer.ts (46 hunks)
  • packages/vue-i18n-core/src/i18n.ts (7 hunks)
  • packages/vue-i18n-core/src/plugin.ts (1 hunks)
  • packages/vue-i18n-core/src/plugin/types.ts (1 hunks)
  • packages/vue-i18n/src/index.ts (2 hunks)
  • packages/vue-i18n/src/runtime.ts (1 hunks)
  • packages/vue-i18n/src/vue.d.ts (3 hunks)
  • packages/vue-i18n/src/vue.ts (1 hunks)
  • scripts/build-types.ts (1 hunks)
  • tsconfig.typedoc.json (1 hunks)
  • tsdoc.json (1 hunks)
  • typedoc.config.mjs (1 hunks)
💤 Files with no reviewable changes (1)
  • docs/api/injection.md
🧰 Additional context used
🧬 Code graph analysis (4)
packages/core-base/src/types/utils.ts (2)
packages/vue-i18n/src/index.ts (1)
  • IsPart (113-113)
packages/vue-i18n/src/runtime.ts (1)
  • IsPart (103-103)
packages/vue-i18n-core/src/i18n.ts (2)
packages/core-base/src/runtime.ts (2)
  • Locale (46-46)
  • FallbackLocale (56-56)
packages/vue-i18n-core/src/index.ts (2)
  • Locale (16-16)
  • FallbackLocale (8-8)
packages/vue-i18n/src/vue.ts (4)
packages/vue-i18n/src/vue.d.ts (2)
  • ComponentCustomOptions (36-45)
  • ComponentCustomProperties (52-766)
packages/vue-i18n-core/src/composer.ts (4)
  • CustomBlocks (246-246)
  • DefineLocaleMessage (153-153)
  • VueMessageType (126-126)
  • DefineDateTimeFormat (180-180)
packages/vue-i18n/src/index.ts (17)
  • CustomBlocks (80-80)
  • ExportedGlobalComposer (90-90)
  • DefineLocaleMessage (87-87)
  • IsEmptyObject (111-111)
  • JsonPaths (114-114)
  • IsNever (112-112)
  • TranslateOptions (64-64)
  • NamedValue (57-57)
  • MessageFunction (54-54)
  • VueMessageType (107-107)
  • Locale (46-46)
  • DefineDateTimeFormat (86-86)
  • PickupFormatPathKeys (115-115)
  • DateTimeOptions (36-36)
  • IsPart (113-113)
  • NumberOptions (58-58)
  • LocaleMessageValue (50-50)
packages/core-base/src/runtime.ts (3)
  • NamedValue (118-118)
  • MessageFunction (85-85)
  • Locale (46-46)
packages/vue-i18n/src/vue.d.ts (2)
packages/core-base/src/types/utils.ts (1)
  • IsNever (6-6)
packages/core-base/src/number.ts (1)
  • NumberOptions (78-101)
🪛 LanguageTool
docs/api/v11/legacy.md

[grammar] ~896-~896: Use a hyphen to join words.
Context: ...ontains html markup (e.g. around a user provided value). This usage pattern mos...

(QB_NEW_EN_HYPHEN)

docs/api/v11/composition.md

[style] ~827-~827: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...ts than global scope datetime formats. If not, then it’s formatted with global sc...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~925-~925: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...ts than global scope datetime formats. If not, then it’s formatted with global sc...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[grammar] ~1046-~1046: Use a hyphen to join words.
Context: ...contains html markup (e.g. around a user provided value). This usage pattern mos...

(QB_NEW_EN_HYPHEN)


[style] ~1270-~1270: You have already used this phrasing in nearby sentences. Consider replacing it to add variety to your writing.
Context: ...ack if is enabled, so the message will need to be resolved as well. The message resol...

(REP_NEED_TO_VB)


[style] ~1305-~1305: You have already used this phrasing in nearby sentences. Consider replacing it to add variety to your writing.
Context: ... setting will be ignored. That is, you need to resolve the flat JSON by yourself. See...

(REP_NEED_TO_VB)


[style] ~1449-~1449: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...ges than global scope locale messages. If not, then it’s translated with global s...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[grammar] ~1454-~1454: Ensure spelling is correct
Context: ...and and use the structure of the locale messge returned by tm. See about: - [Scope ...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[grammar] ~1486-~1486: Ensure spelling is correct
Context: ...and and use the structure of the locale messge returned by tm. See about: - [Plural...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[grammar] ~1520-~1520: Ensure spelling is correct
Context: ...and and use the structure of the locale messge returned by tm. See about: - [List i...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[grammar] ~1554-~1554: Ensure spelling is correct
Context: ...and and use the structure of the locale messge returned by tm. See about: - [Named ...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[style] ~1600-~1600: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...ges than global scope locale messages. If not, then it’s translated with global s...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)

docs/guide/advanced/lazy.md

[style] ~80-~80: This phrase is redundant. Consider using “outside”.
Context: ...ode example also shows how to handle it outside of the component using the [global prope...

(OUTSIDE_OF)

docs/api/v11/general.md

[grammar] ~515-~515: Ensure spelling is correct
Context: ...allbackWithSimple Fallback with simple implemenation Signature: ```typescript export declar...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[grammar] ~746-~746: Ensure spelling is correct
Context: ...s A resolve message. ### linked(key, optoins) Overloaded linked Signature: `...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[grammar] ~760-~760: Ensure spelling is correct
Context: ... --- | | key | Path | A message key | | optoins | LinkedOptions | An [linked options](#...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

🪛 markdownlint-cli2 (0.18.1)
docs/guide/essentials/syntax.md

45-45: Blank line inside blockquote

(MD028, no-blanks-blockquote)

docs/guide/essentials/datetime.md

47-47: Blank line inside blockquote

(MD028, no-blanks-blockquote)


50-50: Blank line inside blockquote

(MD028, no-blanks-blockquote)

docs/api/v11/legacy.md

902-902: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


906-906: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)

docs/api/v11/composition.md

151-151: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


222-222: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


759-759: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


852-852: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


878-878: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


950-950: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


976-976: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)

docs/guide/essentials/pluralization.md

34-34: Blank line inside blockquote

(MD028, no-blanks-blockquote)

docs/api/v11/general.md

33-33: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


182-182: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


288-288: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


760-760: Link fragments should be valid

(MD051, link-fragments)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Build (windows-latest, 24)
  • GitHub Check: Cloudflare Pages
🔇 Additional comments (46)
docs/guide/advanced/lazy.md (2)

77-83: Good use of eslint directives and admonition formatting.

The eslint-disable/enable markers properly suppress markdown linting warnings, and the conversion from a plain NOTE block to a styled TIP admonition aligns with VitePress v2 conventions and improves documentation readability.


77-83: I'll help you verify the API reference links in this review comment. Let me search for the referenced documentation files.
<function_calls>

#!/bin/bash

Find API documentation files related to I18n

find docs/api -type f -name "I18n" 2>/dev/null | head -20


</function_calls>
<function_calls>

#!/bin/bash

Check the structure of docs/api directory

fd -t f -e md 'general.*interfaces' docs/ 2>/dev/null | head -20


</function_calls>
<function_calls>

#!/bin/bash

List the docs/api directory structure

ls -la docs/api/ 2>/dev/null || echo "docs/api not found"


</function_calls>
<function_calls>

#!/bin/bash

List all markdown files in docs/api

find docs/api -type f -name "*.md" 2>/dev/null | sort


</function_calls>

tsconfig.typedoc.json (1)

1-4: LGTM! TypeDoc configuration is well-structured.

The configuration appropriately extends the base tsconfig and includes the necessary paths for documenting TypeScript sources across all packages.

packages/vue-i18n-core/src/components/Translation.ts (1)

87-91: LGTM! Documentation format modernized for TypeDoc.

The migration from @VueI18nSee tags to {@linkcode} and markdown link syntax aligns well with TypeDoc's modern linking capabilities.

eslint.config.ts (1)

115-115: LGTM! Appropriate exclusion of TypeScript declaration file.

Excluding vue.d.ts from ESLint is reasonable, as declaration files often contain complex type definitions that don't need to follow the same linting rules as regular source files.

packages/core-base/src/types/utils.ts (1)

193-193: LGTM! Good consolidation of type utility.

The IsPart type is being centralized here and exported for reuse across packages. This eliminates duplication and expands the public API surface appropriately. The type correctly extracts the part property type when present, or returns false otherwise.

knip.config.ts (1)

43-43: LGTM! Appropriate file exclusions for Knip analysis.

Excluding vue.d.ts and vue.ts from Knip's dead code detection is reasonable, as these files likely contain type declarations and special runtime code that may appear unused but are actually consumed externally.

scripts/build-types.ts (1)

42-45: Await is correctly applied and essential for proper type handling.

The verification confirms that isolatedDeclaration from oxc-transform is an async function that returns Promise<IsolatedDeclarationsResult>. Without await, dts would be a Promise object rather than the resolved result, causing .errors and .code property accesses to fail. The fix is correct and properly implemented.

docs/api/v11/component.md (2)

9-10: Interface signature formatting change is non-semantic

These interface signature lines are just whitespace/formatting adjustments; no impact on the documented API surface. Looks good to keep docs tidy.

Also applies to: 115-116, 255-256


95-99: Updated See Also link paths look consistent with v11 docs layout

The See Also links now point to ../../guide/..., which matches the expected relative path from docs/api/v11/*.md into the guide section. The cross‑references for datetime, number, and component interpolation appear correct.

Also applies to: 169-173, 200-204

packages/vue-i18n-core/src/components/DatetimeFormat.ts (1)

61-75: DatetimeFormat JSDoc refactor aligns with new TypeDoc style

Switching from custom @VueI18nSee tags to explicit {@linkcode ...} and markdown links plus a [!CAUTION] block is clear and TypeDoc‑friendly, with no impact on runtime behavior.

packages/vue-i18n-core/src/components/NumberFormat.ts (1)

66-80: NumberFormat JSDoc updates are consistent and safe

The new “See the following items…” section, {@linkcode ...} usage, and CAUTION block mirror DatetimeFormat and are appropriate for TypeDoc without affecting the component API.

packages/vue-i18n-core/src/i18n.ts (1)

256-377: ComposerOptions generic/type wiring and docs look coherent

The expanded generic parameters (MessagesLocales/DateTimeFormatsLocales/NumberFormatsLocales and derived _Messages/_DateTimeFormats/_NumberFormats) and the updated “See about:” doc blocks improve type inference and documentation while keeping defaults compatible with existing schemas and locales. No runtime behavior is affected.

packages/vue-i18n-core/src/composer.ts (1)

61-76: Centralizing IsPart type and conditional return types for d/n look correct

Importing IsPart from @intlify/core-base and reusing it in the ComposerDateTimeFormatting and ComposerNumberFormatting overloads keeps the “return parts vs string” conditional logic in sync with the core utilities. The OptionsType unions (Key | ResourceKeys | DateTimeOptions<…> / NumberOptions<…>) still drive IsPart<OptionsType> in the same way, so existing callers should see the same inferred return types.

Also applies to: 1119-1155, 1216-1250

docs/api/v11/legacy.md (2)

77-78: VueI18n generic interface signature correction looks good

The VueI18n<…> interface now has a balanced generic parameter list and composition type parameter; this matches the corresponding Composer shape and restores a well‑formed signature for the legacy API docs.


128-129: Guide link path updates in legacy docs are consistent

The many “See Also” links now use ../../guide/... which matches the directory depth of docs/api/v11/legacy.md and keeps legacy docs aligned with the reorganized guide structure.

Also applies to: 142-143, 155-157, 169-171, 291-292, 347-348, 359-360, 379-381, 446-448, 461-462, 626-627, 750-751, 927-928, 947-948, 979-981, 1000-1001, 1048-1049, 1133-1136, 1170-1171, 1190-1191, 1231-1233, 1252-1254, 1309-1310, 1335-1336, 1364-1366, 1429-1430, 1461-1462, 1581-1582, 1610-1612, 1641-1642, 1674-1676

tsdoc.json (1)

4-7: Adding @module TSDoc block tag is straightforward and consistent

Defining @module as a block tag alongside the existing Vue I18n custom tags is fine and should integrate cleanly with the TSDoc/TypeDoc pipeline.

packages/core-base/src/runtime.ts (1)

76-82: JSDoc @returns tag normalization is fine

Changing @return to @returns for MessageFunction aligns with standard JSDoc/TSDoc style and doesn’t affect types or runtime.

packages/petite-vue-i18n/src/runtime.ts (1)

76-83: JsonPaths utility type re-export is consistent and safe

Adding JsonPaths alongside the other utility types from @intlify/core-base cleanly exposes the new path-typing helper to petite-vue-i18n consumers without affecting runtime behavior. Looks good.

packages/petite-vue-i18n/src/index.ts (1)

77-84: Public JsonPaths export mirrors runtime and core-base

Re-exporting JsonPaths here keeps the public petite-vue-i18n entrypoint aligned with the runtime and the main vue-i18n package, so consumers can access the path helper type directly from this package. No issues from a typing or API-shape perspective.

packages/vue-i18n/src/runtime.ts (1)

100-108: Exposing IsPart and JsonPaths from vue-i18n runtime is consistent

Adding IsPart and JsonPaths to the exported utility types keeps vue-i18n’s runtime entrypoint aligned with @intlify/core-base and the top-level vue-i18n exports, making the new path/segment helpers easily consumable without altering runtime behavior.

.gitignore (1)

11-17: Ignore patterns match the new VitePress/TypeDoc doc layout

Ignoring **/.vitepress/cache and the generated API docs under docs/api/{general,vue} while explicitly keeping docs/api/typedoc-sidebar.json tracked aligns with the new docs generation flow and avoids polluting the repo with build artifacts. Looks appropriate.

docs/guide/essentials/number.md (2)

48-53: TIP for $n overloads matches new API reference layout

The new TIP succinctly points users from $n usage to the centralized API reference (ComponentCustomProperties#n), which fits the TypeDoc-based docs structure and keeps this guide focused on examples. No issues here.


165-170: NOTE linking to NumberFormat scoped slot docs is clear and aligned

The NOTE that directs readers to the NumberFormat type alias page for the full list of supported i18n-n scoped slots and props fits well with the new API docs organization and avoids duplicating reference material in the guide. Looks good as-is; just keep the relative path in sync if the generated file layout ever changes.

docs/api/typedoc-sidebar.json (1)

1-1: LGTM - TypeDoc-generated sidebar configuration.

The sidebar JSON structure correctly defines the navigation for the new TypeDoc-based API documentation. The collapsed groups for Variables, Functions, Interfaces, and Type Aliases align with the expected API structure.

If this file is ever manually edited, consider formatting it for readability. However, since it appears to be auto-generated by TypeDoc, the current minified format is acceptable.

packages/vue-i18n/src/index.ts (2)

1-7: LGTM - Module annotation for TypeDoc grouping.

The @module general JSDoc annotation correctly instructs TypeDoc to organize these exports under the "general" section, which aligns with the new sidebar structure in typedoc-sidebar.json.


110-118: Verification complete: Type export consistency confirmed.

The re-export of IsPart and JsonPaths in packages/vue-i18n/src/index.ts (lines 110-118) is correct and consistent. Both types are properly defined in @intlify/core-base (utils.ts), imported in vue.d.ts, and actively used in type guards and generic constraints:

  • IsPart<OptionsType> is used in return type conditions for formatDate, formatNumber methods (vue.d.ts:617, 682, 737)
  • JsonPaths is used in generic type constraints for multiple method overloads throughout vue.d.ts
docs/guide/advanced/composition.md (4)

65-65: LGTM - Updated API reference link to new TypeDoc structure.

The link correctly points to the new generated Composer interface documentation path.


138-138: LGTM - Composer#t reference updated.


221-221: LGTM - Composer#d reference updated.


259-259: LGTM - Composer#n reference updated.

docs/guide/essentials/pluralization.md (1)

30-42: LGTM - Admonition format and API link updates.

The conversion to [!TIP] and [!NOTE] admonition syntax is consistent with other documentation files in this PR. The API reference link correctly points to the new TypeDoc-generated path.

The markdownlint MD028 warning (blank line inside blockquote) at line 34 is a false positive in this context—the blank line intentionally separates two distinct callout blocks, and VitePress renders them correctly.

docs/guide/essentials/datetime.md (2)

43-58: LGTM - Admonition format and API link updates.

The conversion to [!NOTE] and [!TIP] syntax is consistent with the documentation formatting changes across the PR. The API reference links correctly point to the new TypeDoc-generated paths.

The markdownlint MD028 warnings at lines 47 and 50 are expected—these blank lines intentionally separate distinct callout blocks.


154-159: LGTM - DatetimeFormat API reference updated.

The link to the DatetimeFormat type alias correctly uses the new TypeDoc structure.

packages/vue-i18n/src/vue.d.ts (3)

1-14: LGTM - Import consolidation for IsPart and JsonPaths.

Importing IsPart and JsonPaths from @intlify/core-base instead of defining them locally is the correct approach. This eliminates duplication and ensures type consistency across the codebase.


29-45: LGTM - Internal annotations added.

The @internal and @VueI18nInjection annotations help TypeDoc properly categorize this interface in the generated documentation.


722-737: LGTM - Improved $n overload with conditional return type.

The addition of the OptionsType generic parameter and the IsPart<OptionsType> conditional return type provides better type inference. When options.part is true, the return type correctly infers Intl.NumberFormatPart[] instead of string.

This aligns with the NumberOptions interface from @intlify/core-base which includes part?: boolean.

docs/.vitepress/config.mts (3)

53-58: LGTM - Sidebar construction migrated to flat array.

The sidebar is now built by spreading helper functions into a flat array, which is cleaner than the previous object-based approach. This also enables both the new TypeDoc API docs (sidebarApi()) and the legacy v11 API docs (sidebarApiV11('v11/')) to coexist.


254-294: LGTM - Dual API reference structure.

The renaming of the original sidebarApi to sidebarApiV11 and the creation of a new sidebarApi function that uses the TypeDoc-generated sidebar JSON is a clean approach for:

  1. Current API docs (sidebarApi): TypeDoc-generated from typedoc-sidebar.json
  2. Legacy v11 API docs (sidebarApiV11): Manual sidebar for backward compatibility

The v11 label clearly indicates these are legacy docs, and the namespace parameter (ns = 'v11/') correctly prefixes the links.


3-5: JSON import assertion syntax is fully compatible with your build environment.

The with { type: 'json' } assertion is supported in Node.js 20+ (your project requires >= 20) and your TypeScript config uses target: "esnext" and module: "esnext", which both support this syntax. Vite automatically handles JSON imports with assertions, so no additional configuration is needed.

packages/vue-i18n/src/vue.ts (2)

603-619: Inconsistent Value type constraint in $d overload.

This overload's Value constraint is number | Date but other $d overloads (lines 522, 548, 575) include string as well (number | Date | string). Verify if this is intentional:

   $d<
-    Value extends number | Date = number,
+    Value extends number | Date | string = number,

1-47: New component injection API definitions look good.

The ComponentCustomOptions and ComponentCustomProperties interfaces are well-structured with proper JSDoc documentation. The type imports from @intlify/core-base and @intlify/vue-i18n-core are correctly organized.

package.json (3)

156-158: TypeDoc dependencies added for documentation generation.

The new TypeDoc tooling additions look appropriate:

  • typedoc: Core documentation generator
  • typedoc-plugin-markdown: Markdown output support
  • typedoc-vitepress-theme: VitePress integration

These align well with the PR's objective to migrate from api-extractor to TypeDoc.


170-170: VitePress Vite override to rolldown-vite.

The override "vitepress>vite": "npm:rolldown-vite@7.2.7" pins VitePress's internal Vite dependency to rolldown-vite. This is likely required for compatibility with VitePress 2.x alpha. Ensure this is tracked and updated as VitePress stabilizes.


161-162: Based on my verification, I can now provide the rewritten review comment:


VitePress 2.0.0-alpha.15 is the current latest available version; verify TypeDoc migration compatibility and monitor for breaking changes.

VitePress 2.0.0 has not yet reached a stable release (as of November 2025), and ^2.0.0-alpha.15 is the latest available. VitePress 2.0 alpha includes documented breaking changes in theme/config APIs (sidebar structure: childrenitems), composables (useLocalNav/useSidebar removed), markdown rendering (markdown-it-async, Shiki v3), and search tooling (DocSearch v4 beta).

Since this appears intentional for the TypeDoc migration, verify that:

  1. The docs configuration and theme are compatible with these breaking changes
  2. The caret range (^) doesn't introduce unexpected alpha patch updates; consider pinning to a specific alpha version if stability is critical
  3. The vitepress>vite override to rolldown-vite@7.2.7 remains compatible as alpha releases proceed
docs/api/v11/composition.md (1)

692-692: Typo: "messge" should be "message".

This typo appears in multiple WARNING blocks throughout the documentation (lines 692, 1454, 1486, 1520, 1554):

- [!WARNING]  You need to use `rt` for the locale message returned by `tm`. see the `rt` details.
+ [!WARNING]  You need to use `rt` for the locale message returned by `tm`. See the `rt` details.

Also fix "locale messge" → "locale message" in the related warning blocks.

Likely an incorrect or invalid review comment.

Comment on lines 382 to 383
See about: -
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Incomplete "See about" sections in documentation.

Several method documentation sections have "See about: -" with no actual content. These appear to be placeholders that were not filled in:

  • Line 382-383: getMissingHandler()
  • Line 433-434: getPostTranslationHandler()
  • Line 587-588: setMissingHandler(handler)
  • Line 632-633: setPostTranslationHandler(handler)

Also applies to: 433-434, 587-588, 632-633

🤖 Prompt for AI Agents
In docs/api/v11/composition.md around lines 382-383, 433-434, 587-588 and
632-633, the "See about: -" placeholders for getMissingHandler(),
getPostTranslationHandler(), setMissingHandler(handler) and
setPostTranslationHandler(handler) are incomplete; replace each placeholder with
the appropriate cross-reference or explanatory content: add a brief "See also"
pointing to related methods (e.g., the corresponding set/get counterpart and the
composition or i18n section), or include a short description of what the handler
does and an example usage link, ensuring each entry contains a clear reference
or content instead of the "-" placeholder.

Comment on lines 894 to 901
Whether to escape parameters for list or named interpolation values. When enabled, this option: - Escapes HTML special characters (`<`, `>`, `"`, `'`, `&`, `/`, `=`) in interpolation parameters - Sanitizes the final translated HTML to prevent XSS attacks by: - Escaping dangerous characters in HTML attribute values - Neutralizing event handler attributes (onclick, onerror, etc.) - Disabling javascript: URLs in href, src, action, formaction, and style attributes

This is useful when translation output is used in `v-html` and the translation resource contains html markup (e.g. around a user provided value).

This usage pattern mostly occurs when passing precomputed text strings into UI components.

The escape process involves replacing the following symbols with their respective HTML character entities: `<`, `>`, `"`, `'`.

Setting `escapeParameterHtml` as true should not break existing functionality but provides a safeguard against a subtle type of XSS attack vectors.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Search for escapeParameterHtml and escapeParameter implementations

echo "=== Searching for escapeParameterHtml implementation ==="
rg -n "escapeParameterHtml" -S -A 10 -B 2

echo ""
echo "=== Searching for escapeParameter implementation ==="
rg -n "escapeParameter" -S -A 10 -B 2

echo ""
echo "=== Searching for HTML escaping helpers ==="
rg -n "escapeHtml" -S -A 10 -B 2

Repository: intlify/vue-i18n

Length of output: 33206


Align escapeParameterHtml documentation with actual implementation to avoid false security guarantees

The documentation in docs/api/v11/legacy.md (lines 894–901) incorrectly claims that escapeParameterHtml performs attribute-level sanitization, event handler neutralization, and javascript: URL filtering. The actual implementation (in packages/shared/src/utils.ts, lines 92–98 and packages/core-base/src/translate.ts, lines 743–753) only escapes four characters: <, >, ", '.

The documentation also incorrectly lists &, /, = as escaped characters, which are not. Compare with the accurate description in docs/api/v11/composition.md (line 1050): "The escape process involves replacing the following symbols with their respective HTML character entities: `<`, `>`, `"`, `'`."

Update the legacy.md documentation to match the actual behavior, either by removing the false sanitization claims or by implementing the described security features if they are intended.

As a minor style fix, change "user provided value" to "user‑provided value" on line 896.

🧰 Tools
🪛 LanguageTool

[grammar] ~896-~896: Use a hyphen to join words.
Context: ...ontains html markup (e.g. around a user provided value). This usage pattern mos...

(QB_NEW_EN_HYPHEN)

🤖 Prompt for AI Agents
In docs/api/v11/legacy.md around lines 894–901 (and the phrase on line 896),
update the documentation to accurately describe escapeParameterHtml: replace the
current claim that it escapes `&`, `/`, `=` and performs attribute-level
sanitization, event-handler neutralization, and javascript: URL filtering with
the actual behavior (it only replaces the four characters `<`, `>`, `"` and `'`
with HTML entities); remove the false sanitization/security guarantees or
alternatively note that those additional protections are not implemented here
and would require a separate sanitizer; also change "user provided value" to
"user‑provided value" on line 896.

* If you want to install manually in the `import` syntax, you can set it to `false` to install when needed.
*
* @defaultValue `true`
* @default `true`
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🌐 Web query:

TypeDoc JSDoc @default vs @defaultValue documentation

💡 Result:

Short answer: Use @DefaultValue for TSDoc/TypeDoc (TypeDoc also accepts the JSDoc @default/@DefaultValue synonym). TypeDoc’s docs recommend/recognize the TSDoc tag @DefaultValue and note they also “recognize the commonly used alternative @default” so both work, but @DefaultValue is the TSDoc-standard form. [1][2]

References:


Reconsider the JSDoc tag change; @defaultValue is the TypeDoc standard, not @default.

TypeDoc's official documentation recommends the TSDoc standard tag @defaultValue for documenting default values. While TypeDoc does recognize @default as a JSDoc synonym for backwards compatibility, it is not the preferred form for TypeDoc. The change from @defaultValue to @default appears to move away from TypeDoc's recommended standard rather than being part of a proper migration. If this change is intentional (e.g., adopting JSDoc conventions), it should be documented or reconsidered in favor of the TSDoc standard @defaultValue.

🤖 Prompt for AI Agents
In packages/vue-i18n-core/src/plugin.ts around line 25, the JSDoc tag was
changed from the TSDoc/TypeDoc-standard @defaultValue to @default; revert or
update this to use @defaultValue (or document the deliberate switch to JSDoc if
intentional). Replace the @default tag with @defaultValue to follow TypeDoc
recommendations, or if the change was deliberate, add a brief comment in the
file or repo docs explaining the rationale for adopting @default so reviewers
know it is intentional.

@kazupon
Copy link
Member Author

kazupon commented Nov 28, 2025

related #2098

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (5)
packages/vue-i18n/src/vue.d.ts (3)

669-683: Incorrect type reference: $n overload uses DefineDateTimeFormat instead of DefineNumberFormat.

This overload incorrectly references DefineDateTimeFormat for number formatting. This will cause incorrect type inference when using the options-based $n signature.

   $n<
     Key extends string = string,
     DefinedNumberFormat extends
-      RemovedIndexResources<DefineDateTimeFormat> = RemovedIndexResources<DefineDateTimeFormat>,
+      RemovedIndexResources<DefineNumberFormat> = RemovedIndexResources<DefineNumberFormat>,
     Keys = IsEmptyObject<DefinedNumberFormat> extends false

696-710: Incorrect type reference: $n overload uses DefineDateTimeFormat instead of DefineNumberFormat.

Same issue as above—this key+locale overload incorrectly references DefineDateTimeFormat.

   $n<
     Key extends string = string,
     DefinedNumberFormat extends
-      RemovedIndexResources<DefineDateTimeFormat> = RemovedIndexResources<DefineDateTimeFormat>,
+      RemovedIndexResources<DefineNumberFormat> = RemovedIndexResources<DefineNumberFormat>,
     Keys = IsEmptyObject<DefinedNumberFormat> extends false

723-738: Incorrect type reference: $n overload uses DefineDateTimeFormat instead of DefineNumberFormat.

Same issue—this options+locale overload incorrectly references DefineDateTimeFormat.

   $n<
     Key extends string = string,
     DefinedNumberFormat extends
-      RemovedIndexResources<DefineDateTimeFormat> = RemovedIndexResources<DefineDateTimeFormat>,
+      RemovedIndexResources<DefineNumberFormat> = RemovedIndexResources<DefineNumberFormat>,
     Keys = IsEmptyObject<DefinedNumberFormat> extends false
docs/api/v11/general.md (1)

184-184: Fix awkward phrasing in ExportedGlobalComposer description.

Line 184 contains awkward phrasing: "This interface is the global composer that is provided interface that is injected..."

Reword for clarity:

-This interface is the [global composer](general#global) that is provided interface that is injected into each component with `app.config.globalProperties`.
+This interface is the [global composer](general#global) that is injected into each component via `app.config.globalProperties`.
docs/api/v11/legacy.md (1)

894-902: Remove false security claims from escapeParameter documentation and fix typo.

The documentation at lines 894–902 is contradictory and overstates the functionality. Lines 894–895 falsely claim escaping of &, /, = and advanced sanitization (event handler neutralization, javascript: URL filtering), but the actual implementation (packages/shared/src/utils.ts:92-98) only escapes four characters: <, >, ", '. Line 900 correctly states this; lines 894–895 must be removed.

Additionally, line 896 contains a typo: "user provided" should be "user-provided".

-Whether to escape parameters for list or named interpolation values. When enabled, this option: - Escapes HTML special characters (`<`, `>`, `"`, `'`, `&`, `/`, `=`) in interpolation parameters - Sanitizes the final translated HTML to prevent XSS attacks by: - Escaping dangerous characters in HTML attribute values - Neutralizing event handler attributes (onclick, onerror, etc.) - Disabling javascript: URLs in href, src, action, formaction, and style attributes
+Whether to escape parameters for list or named interpolation values. When enabled, interpolation parameters are escaped before the message is translated.

-This is useful when translation output is used in `v-html` and the translation resource contains html markup (e.g.  around a user provided value).
+This is useful when translation output is used in `v-html` and the translation resource contains html markup (e.g. around a user-provided value).

 This usage pattern mostly occurs when passing precomputed text strings into UI components.

 The escape process involves replacing the following symbols with their respective HTML character entities: `<`, `>`, `"`, `'`.

 Setting `escapeParameter` as true should not break existing functionality but provides a safeguard against a subtle type of XSS attack vectors.
♻️ Duplicate comments (4)
packages/vue-i18n/src/vue.ts (1)

671-740: Type definition error: $n overloads incorrectly use DefineDateTimeFormat instead of DefineNumberFormat.

Three $n overloads (lines 671-685, 698-712, 725-740) incorrectly reference DefineDateTimeFormat when they should use DefineNumberFormat. This mirrors the same issue in vue.d.ts and was previously flagged.

Apply this fix to all three affected overloads (lines 674, 701, 728):

     DefinedNumberFormat extends
-      RemovedIndexResources<DefineDateTimeFormat> = RemovedIndexResources<DefineDateTimeFormat>,
+      RemovedIndexResources<DefineNumberFormat> = RemovedIndexResources<DefineNumberFormat>,
docs/api/v11/legacy.md (1)

896-896: Fix hyphenation: "user provided" should be "user-provided".

Line 896 uses the phrase "user provided value" which should be hyphenated when used as a compound modifier.

-around a user provided value
+around a user-provided value
docs/api/v11/general.md (1)

744-760: Fix parameter name typo: "optoins" should be "options".

The parameter name is misspelled in the method signature and documentation:

  • Line 744: ### linked(key, optoins)
  • Line 750: linked(key: Path, optoins?: LinkedOptions)
  • Line 758: | optoins | LinkedOptions | ...

Update all occurrences to "options":

-### linked(key, optoins)
+### linked(key, options)
-linked(key: Path, optoins?: LinkedOptions): MessageType<T>;
+linked(key: Path, options?: LinkedOptions): MessageType<T>;
-| optoins | LinkedOptions | An [linked options](#linkedoptions) |
+| options | LinkedOptions | An [linked options](#linkedoptions) |
docs/api/v11/composition.md (1)

585-585: Fix incomplete "See about" section.

Line 585 shows "See about: -" with no content. Add proper references or remove the incomplete section.

-See about: -
+See about:
+- [Post Translation Handler](composition#posttranslationhandler)
+- [Handler setup](../../guide/advanced/composition)
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ea63f94 and 126ef80.

📒 Files selected for processing (12)
  • benchmark/complex-jit-aot.mjs (1 hunks)
  • benchmark/complex-jit.mjs (1 hunks)
  • benchmark/complex.mjs (1 hunks)
  • benchmark/simple-jit-aot.mjs (1 hunks)
  • benchmark/simple-jit.mjs (1 hunks)
  • benchmark/simple.mjs (1 hunks)
  • docs/api/v11/composition.md (81 hunks)
  • docs/api/v11/general.md (26 hunks)
  • docs/api/v11/legacy.md (45 hunks)
  • docs/guide/advanced/lazy.md (1 hunks)
  • packages/vue-i18n/src/vue.d.ts (4 hunks)
  • packages/vue-i18n/src/vue.ts (1 hunks)
✅ Files skipped from review due to trivial changes (5)
  • benchmark/complex-jit.mjs
  • benchmark/simple-jit.mjs
  • benchmark/complex-jit-aot.mjs
  • benchmark/complex.mjs
  • benchmark/simple-jit-aot.mjs
🚧 Files skipped from review as they are similar to previous changes (1)
  • docs/guide/advanced/lazy.md
🧰 Additional context used
🧬 Code graph analysis (2)
packages/vue-i18n/src/vue.d.ts (3)
packages/core-base/src/types/utils.ts (2)
  • RemovedIndexResources (173-175)
  • IsNever (6-6)
packages/vue-i18n-core/src/composer.ts (1)
  • DefineNumberFormat (208-208)
packages/core-base/src/number.ts (1)
  • NumberOptions (78-101)
packages/vue-i18n/src/vue.ts (2)
packages/vue-i18n/src/vue.d.ts (2)
  • ComponentCustomOptions (37-46)
  • ComponentCustomProperties (53-767)
packages/core-base/src/runtime.ts (3)
  • NamedValue (118-118)
  • MessageFunction (85-85)
  • Locale (46-46)
🪛 LanguageTool
docs/api/v11/general.md

[grammar] ~744-~744: Ensure spelling is correct
Context: ...s A resolve message. ### linked(key, optoins) Overloaded linked Signature: `...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[grammar] ~758-~758: Ensure spelling is correct
Context: ... --- | | key | Path | A message key | | optoins | LinkedOptions | An [linked options](#...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

docs/api/v11/composition.md

[style] ~825-~825: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...ts than global scope datetime formats. If not, then it’s formatted with global sc...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~923-~923: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...ts than global scope datetime formats. If not, then it’s formatted with global sc...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[grammar] ~1044-~1044: Use a hyphen to join words.
Context: ...contains html markup (e.g. around a user provided value). This usage pattern mos...

(QB_NEW_EN_HYPHEN)


[style] ~1268-~1268: You have already used this phrasing in nearby sentences. Consider replacing it to add variety to your writing.
Context: ...ack if is enabled, so the message will need to be resolved as well. The message resol...

(REP_NEED_TO_VB)


[style] ~1303-~1303: You have already used this phrasing in nearby sentences. Consider replacing it to add variety to your writing.
Context: ... setting will be ignored. That is, you need to resolve the flat JSON by yourself. See...

(REP_NEED_TO_VB)


[style] ~1447-~1447: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...ges than global scope locale messages. If not, then it’s translated with global s...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[grammar] ~1452-~1452: Ensure spelling is correct
Context: ...and and use the structure of the locale messge returned by tm. See about: - [Scope ...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[grammar] ~1484-~1484: Ensure spelling is correct
Context: ...and and use the structure of the locale messge returned by tm. See about: - [Plural...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[grammar] ~1518-~1518: Ensure spelling is correct
Context: ...and and use the structure of the locale messge returned by tm. See about: - [List i...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[grammar] ~1552-~1552: Ensure spelling is correct
Context: ...and and use the structure of the locale messge returned by tm. See about: - [Named ...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[style] ~1598-~1598: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...ges than global scope locale messages. If not, then it’s translated with global s...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)

🪛 markdownlint-cli2 (0.18.1)
docs/api/v11/general.md

33-33: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


288-288: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


758-758: Link fragments should be valid

(MD051, link-fragments)

docs/api/v11/composition.md

84-84: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


151-151: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


194-194: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


207-207: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


431-431: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


442-442: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


572-572: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


617-617: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


698-698: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


771-771: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


862-862: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


873-873: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


877-877: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


924-924: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


944-944: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


948-948: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


962-962: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


973-973: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


1045-1045: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


1049-1049: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


1052-1052: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


1091-1091: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


1128-1128: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


1243-1243: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


1270-1270: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


1302-1302: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


1420-1420: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


1454-1454: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


1485-1485: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


1519-1519: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


1547-1547: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (16)
  • GitHub Check: E2E test for rolldown build (macos-latest, 20)
  • GitHub Check: E2E test for rolldown build (ubuntu-latest, 24)
  • GitHub Check: E2E test for rolldown build (macos-latest, 24)
  • GitHub Check: E2E test for rolldown build (macos-latest, 22)
  • GitHub Check: E2E test for rolldown build (ubuntu-latest, 20)
  • GitHub Check: E2E test for rolldown build (ubuntu-latest, 22)
  • GitHub Check: release
  • GitHub Check: upload
  • GitHub Check: Unit test (windows-latest, 20)
  • GitHub Check: Unit test (windows-latest, 24)
  • GitHub Check: Unit test (windows-latest, 22)
  • GitHub Check: Build (ubuntu-latest, 24)
  • GitHub Check: Build (macos-latest, 24)
  • GitHub Check: Build (windows-latest, 24)
  • GitHub Check: release
  • GitHub Check: Cloudflare Pages
🔇 Additional comments (3)
benchmark/simple.mjs (1)

1-1: Import change is fine; no runtime impact

Dropping the inline ESLint disable on this @intlify/core-base import is safe from a runtime perspective, and the import itself is idiomatic ESM. As long as ESLint passes with current rules, this looks good.

packages/vue-i18n/src/vue.d.ts (1)

1-14: Import additions look correct.

The imports of IsPart, JsonPaths, and DefineNumberFormat are properly added to support the new type machinery for number formatting overloads.

packages/vue-i18n/src/vue.ts (1)

1-48: Module structure and imports look correct.

The module documentation, imports from @intlify/core-base and @intlify/vue-i18n-core, and the ComponentCustomOptions interface are properly defined.

Comment on lines 1044 to 1050
This is useful when translation output is used in `v-html` and the translation resource contains html markup (e.g. around a user provided value).
This usage pattern mostly occurs when passing precomputed text strings into UI components.
The escape process involves replacing the following symbols with their respective HTML character entities: `<`, `>`, `"`, `'`.

Setting `escapeParameter` as true should not break existing functionality but provides a safeguard against a subtle type of XSS attack vectors.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Add hyphenation to compound words and fix grammatical phrase.

Lines 1044-1050 contain two compound word phrasing issues:

  • Line 1044: "user provided value" should be "user-provided value"
  • Line 1049: "html markup" should be "html markup" (acceptable) but check for consistency
-This is useful when translation output is used in `v-html` and the translation resource contains html markup (e.g. around a user provided value).
+This is useful when translation output is used in `v-html` and the translation resource contains html markup (e.g. around a user-provided value).
🧰 Tools
🪛 LanguageTool

[grammar] ~1044-~1044: Use a hyphen to join words.
Context: ...contains html markup (e.g. around a user provided value). This usage pattern mos...

(QB_NEW_EN_HYPHEN)

🪛 markdownlint-cli2 (0.18.1)

1045-1045: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


1049-1049: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)

🤖 Prompt for AI Agents
In docs/api/v11/composition.md around lines 1044 to 1050, change the phrase
"user provided value" to the hyphenated "user-provided value" and standardize
"html" to "HTML" for consistency (e.g., "HTML markup"); keep the rest of the
sentence and punctuation unchanged.

Comment on lines 197 to 198
This property is proxy-like property for `Composer#availableLocales`. About details, see the

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Complete incomplete documentation sentences.

Lines 197, 210, and 223 all end with incomplete phrases "About details, see the" with no target reference. Add proper cross-references or reword:

-This property is proxy-like property for `Composer#availableLocales`. About details, see the
+This property is a proxy-like property for `Composer#availableLocales`. See [Composer.availableLocales](composition#availablelocales) for details.
-This property is proxy-like property for `Composer#fallbackLocale`. About details, see the
+This property is a proxy-like property for `Composer#fallbackLocale`. See [Composer.fallbackLocale](composition#fallbacklocale) for details.
-This property is proxy-like property for `Composer#locale`. About details, see the
+This property is a proxy-like property for `Composer#locale`. See [Composer.locale](composition#locale) for details.

Also applies to: 210-211, 223-224

🤖 Prompt for AI Agents
In docs/api/v11/general.md around lines 197-198, 210-211 and 223-224 the
sentences end with "About details, see the" without a target; update each to
complete the sentence by either (a) adding a proper cross-reference to the
appropriate section or symbol (for example "About details, see
Composer#availableLocales" or use the markdown link to the relevant API
section), or (b) rewording to a self-contained sentence such as "For more
details, see Composer#availableLocales." Ensure the inserted reference matches
the repo's linking style and verify anchors resolve correctly.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

♻️ Duplicate comments (2)
docs/api/v11/general.md (2)

184-184: Complete incomplete property descriptions.

These lines still contain incomplete documentation fragments that were flagged in previous reviews but remain unresolved:

  • Line 184: "that is provided interface" — awkward phrasing. Reword to: "This interface is a proxy to the global composer that is injected into each component via app.config.globalProperties."

  • Lines 197, 210, 223: All end with dangling "About details, see the" with no target reference. Add complete cross-references:

    • Line 197 (availableLocales): Add link to Composer#availableLocales
    • Line 210 (fallbackLocale): Add link to Composer#fallbackLocale
    • Line 223 (locale): Add link to Composer#locale

Example fix for line 197:

-This property is proxy-like property for `Composer#availableLocales`. About details, see the
+This property is a proxy-like property for `Composer#availableLocales`. See [Composer.availableLocales](composition#availablelocales) for details.

Also applies to: 197-197, 210-210, 223-223


288-291: Use heading markup and complete the interface description.

Two issues here:

  1. Line 288: Use ### heading instead of **Details** for consistency (MD036).
  2. Line 290: Complete the incomplete sentence "Specific options for". Add context explaining what these options control:
-**Details**
+### Details
-Specific options for
+I18nAdditionalOptions provides additional Vue I18n plugin configuration options that control global behavior, such as component injection and feature flags.
🧹 Nitpick comments (2)
docs/api/v11/general.md (2)

33-35: Use heading markup for "Examples" section.

Line 33 uses bold emphasis (**Examples**) instead of a Markdown heading. Per markdownlint (MD036), section headers should use heading syntax for consistency:

-**Examples**
+### Examples

309-309: Clarify default value formatting.

Lines 309 and 360 contain unusual formatting ( true`` ) for default values. These should either be:

  1. Properly formatted as: "Default: true"
  2. Or integrated into the Details section above

Currently they appear as orphaned text. Verify this is the intended output from TypeDoc and reformat for clarity:

  If you want to install manually in the `import` syntax, you can set it to `false` to install when needed.
- `true`
+**Default:** `true`

Also applies to: 360-360

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 126ef80 and 84653ca.

📒 Files selected for processing (8)
  • benchmark/complex-jit-aot.mjs (1 hunks)
  • benchmark/complex-jit.mjs (1 hunks)
  • benchmark/complex.mjs (1 hunks)
  • benchmark/simple-jit-aot.mjs (1 hunks)
  • benchmark/simple-jit.mjs (1 hunks)
  • benchmark/simple.mjs (1 hunks)
  • docs/api/v11/general.md (25 hunks)
  • packages/core-base/src/runtime.ts (2 hunks)
✅ Files skipped from review due to trivial changes (1)
  • benchmark/simple.mjs
🚧 Files skipped from review as they are similar to previous changes (5)
  • benchmark/simple-jit.mjs
  • benchmark/simple-jit-aot.mjs
  • packages/core-base/src/runtime.ts
  • benchmark/complex.mjs
  • benchmark/complex-jit-aot.mjs
🧰 Additional context used
🪛 markdownlint-cli2 (0.18.1)
docs/api/v11/general.md

33-33: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


288-288: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (10)
  • GitHub Check: E2E test for rolldown build (macos-latest, 22)
  • GitHub Check: E2E test for rolldown build (macos-latest, 24)
  • GitHub Check: Unit test (windows-latest, 20)
  • GitHub Check: Unit test (windows-latest, 22)
  • GitHub Check: Build (ubuntu-latest, 24)
  • GitHub Check: Build (windows-latest, 24)
  • GitHub Check: Build (macos-latest, 24)
  • GitHub Check: release
  • GitHub Check: release
  • GitHub Check: Cloudflare Pages
🔇 Additional comments (2)
benchmark/complex-jit.mjs (1)

9-9: I'll help you verify and rewrite this review comment. Let me start by examining the actual file and verifying the change.
<function_calls>

#!/bin/bash

First, let's check the current state of the file and understand the context around line 9

head -n 20 benchmark/complex-jit.mjs | cat -n


</function_calls>

Let me also check what the ESLint disable comment was by looking at the git diff:
<function_calls>

#!/bin/bash

Check the git diff to see what was removed

git diff HEAD~1 benchmark/complex-jit.mjs 2>/dev/null || git diff benchmark/complex-jit.mjs 2>/dev/null || echo "No git history available"


</function_calls>

Now let me check if there's an ESLint configuration and verify linting:
<function_calls>

#!/bin/bash

Look for ESLint configuration files

fd -e ".eslintrc*" -e "eslint.config.*" 2>/dev/null | head -20

Check package.json for lint scripts

if [ -f package.json ]; then
grep -A 5 '"lint"' package.json || echo "No lint script found"
fi


</function_calls>

docs/api/v11/general.md (1)

1-1076: Documentation structure migration appears sound.

The TypeDoc migration has successfully consolidated the API documentation with proper signature formatting, improved "See about" cross-references, and clearer section organization. The major issues are the unresolved incomplete descriptions and markdown linting inconsistencies noted above.

Please verify that the previously addressed issues (commit 126ef80) were not reverted and confirm whether these incomplete fragments are expected in the current TypeDoc output configuration.

@kazupon kazupon merged commit 8b2fda0 into master Nov 28, 2025
36 checks passed
@kazupon kazupon deleted the docs/migrate-to-typedoc branch November 28, 2025 04:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants