-
-
Notifications
You must be signed in to change notification settings - Fork 174
Some perf improvements #2691
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Some perf improvements #2691
Conversation
perf: avoid watching entire objects in some cases chore: use pnpm v10.10
|
|
WalkthroughThis update includes refactoring of several composable function signatures to accept destructured objects with getter functions or reactive values, instead of computed objects. It also introduces safer access patterns and unwrapping of reactivity in composables. Additionally, there are formatting and whitespace cleanups in documentation and changelog files, and a minor update to the package manager version in Changes
Sequence Diagram(s)sequenceDiagram
participant Component as Component (e.g., BAlert, BToast, BFormTextarea, BLink)
participant Composable as Composable (e.g., useCountdownHover, useTextareaResize, useBLinkTagResolver)
Component->>Composable: Call composable with object of getter functions (reactive props)
Composable->>Composable: Unwrap each prop using toValue or similar
Composable-->>Component: Return computed/reactive results
Poem
📜 Recent review detailsConfiguration used: CodeRabbit UI 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
⏰ Context from checks skipped due to timeout of 90000ms (1)
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. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
commit: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 3
🔭 Outside diff range comments (1)
packages/bootstrap-vue-next/src/composables/useBLinkHelper.ts (1)
129-133:⚠️ Potential issueIncorrect query-string assembly –
join('=')should bejoin('&')Current output for
{a:1, b:2}becomesa=1=b=2, which is invalid.- ? `?${Object.keys(stableTo.query) - .map((e) => `${e}=${stableTo.query?.[e]}`) - .join('=')}` + ? `?${Object.keys(stableTo.query) + .map((key) => `${encodeURIComponent(key)}=${encodeURIComponent(String(stableTo.query![key]))}`) + .join('&')}`Also added
encodeURIComponentfor safety.
🧹 Nitpick comments (6)
packages/nuxt/CHANGELOG.md (1)
11-13: Hyphens used for nested lists
The indentation and marker style for the nesteddevDependenciesentry are clear and uniform. To prevent markdownlint from flagging repeated “### Dependencies” headings in a changelog context, you might disable theno-duplicate-headingrule at the top of this file.<!-- markdownlint-disable MD024 -->packages/bootstrap-vue-next/src/components/BToast/BToast.vue (1)
218-223: Double-check reactivity of the newly-passed gettersPassing arrow-function getters works with
toValue, but remember they are evaluated only whentoValue()is called insideuseCountdownHover.
IfmodelValueswitches betweennumberandbooleanwhile the mouse is already over the toast, the watcher inuseCountdownHoverwill not re-fire until the hover state toggles. That meansmodelValueIgnoresHovermay be stale for the remainder of the current hover session.If you expect
modelValueto change during an active hover, consider adding awatch(modelValue, …)insideuseCountdownHover(or calltoValue()reactively with acomputed) so the pause/resume logic reacts immediately.
Otherwise, the current approach is fine.packages/bootstrap-vue-next/src/composables/useCountdownHover.ts (1)
25-36: UseBoolean()or!!for explicit coercionTo improve readability you can shorten the guard clauses:
- if (toValue(noHoverPause) ?? false) return + if (!!toValue(noHoverPause)) returnSame for
noResumeOnHoverLeaveandmodelValueIgnoresHover.packages/bootstrap-vue-next/src/composables/useTextareaResize.ts (2)
29-35:toValue(maxRows)may returnundefined– keep the Number parser happyWhen
maxRowsis omitted,toValue(maxRows)isundefined.
WhileparseInt(undefined)returnsNaN(handled bynanToZero), passing an explicitnullcommunicates intent and avoids unnecessary parsing work:- computed(() => toValue(maxRows) || NaN), + computed(() => { + const v = toValue(maxRows) + return v == null ? NaN : v + }),Minor, but it removes an
||shortcut and one implicit coercion.
88-92: Guard against undefinednoAutoShrinkSame reasoning as above – ensure a boolean:
- if (toValue(noAutoShrink) && (Number.parseFloat(oldHeight.toString()) || 0) > newHeight) { + if (!!toValue(noAutoShrink) && (Number.parseFloat(oldHeight.toString()) || 0) > newHeight) {packages/bootstrap-vue-next/src/composables/useBLinkHelper.ts (1)
88-93: Tag resolution may mis-detect router availability
instance?.appContext?.app?.component(routerName.value)checks the component registry, not plugins.
If the router plugin is present butRouterLinkisn’t globally registered, this returnsundefinedeven though routing works.
Consider checkingrouter !== undefined(already retrieved earlier) for a more reliable detection.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (12)
apps/docs/src/docs/migration-guide.md(0 hunks)package.json(1 hunks)packages/bootstrap-vue-next/CHANGELOG.md(1 hunks)packages/bootstrap-vue-next/src/components/BAlert/BAlert.vue(1 hunks)packages/bootstrap-vue-next/src/components/BFormTextarea/BFormTextarea.vue(1 hunks)packages/bootstrap-vue-next/src/components/BLink/BLink.vue(1 hunks)packages/bootstrap-vue-next/src/components/BToast/BToast.vue(1 hunks)packages/bootstrap-vue-next/src/composables/useBLinkHelper.ts(4 hunks)packages/bootstrap-vue-next/src/composables/useCountdownHover.ts(2 hunks)packages/bootstrap-vue-next/src/composables/useTextareaResize.ts(2 hunks)packages/bootstrap-vue-next/src/composables/useTransitions.ts(1 hunks)packages/nuxt/CHANGELOG.md(1 hunks)
💤 Files with no reviewable changes (1)
- apps/docs/src/docs/migration-guide.md
🧰 Additional context used
🧬 Code Graph Analysis (2)
packages/bootstrap-vue-next/src/composables/useTextareaResize.ts (1)
packages/bootstrap-vue-next/src/types/CommonTypes.ts (1)
Numberish(3-3)
packages/bootstrap-vue-next/src/composables/useBLinkHelper.ts (1)
packages/bootstrap-vue-next/src/utils/stringUtils.ts (1)
toPascalCase(59-65)
🪛 markdownlint-cli2 (0.17.2)
packages/nuxt/CHANGELOG.md
19-19: Multiple headings with the same content
null
(MD024, no-duplicate-heading)
23-23: Multiple headings with the same content
null
(MD024, no-duplicate-heading)
33-33: Multiple headings with the same content
null
(MD024, no-duplicate-heading)
37-37: Multiple headings with the same content
null
(MD024, no-duplicate-heading)
47-47: Multiple headings with the same content
null
(MD024, no-duplicate-heading)
51-51: Multiple headings with the same content
null
(MD024, no-duplicate-heading)
61-61: Multiple headings with the same content
null
(MD024, no-duplicate-heading)
65-65: Multiple headings with the same content
null
(MD024, no-duplicate-heading)
75-75: Multiple headings with the same content
null
(MD024, no-duplicate-heading)
79-79: Multiple headings with the same content
null
(MD024, no-duplicate-heading)
89-89: Multiple headings with the same content
null
(MD024, no-duplicate-heading)
93-93: Multiple headings with the same content
null
(MD024, no-duplicate-heading)
107-107: Multiple headings with the same content
null
(MD024, no-duplicate-heading)
117-117: Multiple headings with the same content
null
(MD024, no-duplicate-heading)
121-121: Multiple headings with the same content
null
(MD024, no-duplicate-heading)
packages/bootstrap-vue-next/CHANGELOG.md
17-17: Multiple headings with the same content
null
(MD024, no-duplicate-heading)
36-36: Multiple headings with the same content
null
(MD024, no-duplicate-heading)
55-55: Multiple headings with the same content
null
(MD024, no-duplicate-heading)
77-77: Multiple headings with the same content
null
(MD024, no-duplicate-heading)
83-83: Multiple headings with the same content
null
(MD024, no-duplicate-heading)
87-87: Multiple headings with the same content
null
(MD024, no-duplicate-heading)
95-95: Multiple headings with the same content
null
(MD024, no-duplicate-heading)
103-103: Multiple headings with the same content
null
(MD024, no-duplicate-heading)
110-110: Multiple headings with the same content
null
(MD024, no-duplicate-heading)
⏰ Context from checks skipped due to timeout of 90000ms (1)
- GitHub Check: build
🔇 Additional comments (11)
package.json (1)
58-58:Details
✅ Verification successful
Bump pnpm version for packageManager
Updating thepackageManagerfield from[email protected]to[email protected]aligns your workspace with the latest pnpm features and bug fixes. Ensure your CI and local environments are updated accordingly, and regenerate the lockfile (pnpm-lock.yaml) if needed.Please run the following script to verify that
[email protected]is available on the npm registry:
🏁 Script executed:
#!/bin/bash # Verify [email protected] exists on the npm registry npm view pnpm versions --json | jq 'index("10.10.0")' >/dev/null \ && echo "[email protected] is available" \ || echo "[email protected] is not available"Length of output: 116
Bump pnpm version for packageManager
[email protected] is confirmed available on the npm registry. Please ensure your CI and local environments are updated to use this version, and regenerate the lockfile (
pnpm-lock.yaml) if needed.packages/bootstrap-vue-next/CHANGELOG.md (4)
7-7: **Properly formatted issue reference with commit hash. **The entry follows a consistent format with the issue number properly hyperlinked and the commit hash referenced in parentheses. This standard format makes it easy to track changes back to their origin in the codebase.
13-13: **Well-structured feature entry with issue reference. **This entry adheres to the proper changelog format, with the component name in bold, followed by a clear description of the change, and proper links to both the issue and commit.
19-20: **Consistent bug fix entries with proper references. **Both entries follow the project's established pattern for documenting bug fixes, with appropriate component prefixes and clear descriptions. The issue and commit references allow for easy traceability.
1-2076: **Overall well-maintained changelog with consistent formatting. **The CHANGELOG.md file maintains a consistent format throughout, with:
- Clear version headings with links to compare views
- Organized sections for Features, Bug Fixes, Breaking Changes, etc.
- Proper formatting of issue references and commit hashes
- Component names in bold at the beginning of entries
- Consistent spacing between sections
This makes the document highly readable and useful for tracking the project's evolution. The consistent structure helps users and developers quickly find information about specific changes.
🧰 Tools
🪛 markdownlint-cli2 (0.17.2)
17-17: Multiple headings with the same content
null(MD024, no-duplicate-heading)
36-36: Multiple headings with the same content
null(MD024, no-duplicate-heading)
55-55: Multiple headings with the same content
null(MD024, no-duplicate-heading)
77-77: Multiple headings with the same content
null(MD024, no-duplicate-heading)
83-83: Multiple headings with the same content
null(MD024, no-duplicate-heading)
87-87: Multiple headings with the same content
null(MD024, no-duplicate-heading)
95-95: Multiple headings with the same content
null(MD024, no-duplicate-heading)
103-103: Multiple headings with the same content
null(MD024, no-duplicate-heading)
110-110: Multiple headings with the same content
null(MD024, no-duplicate-heading)
116-116: Multiple headings with the same content
null(MD024, no-duplicate-heading)
121-121: Multiple headings with the same content
null(MD024, no-duplicate-heading)
128-128: Multiple headings with the same content
null(MD024, no-duplicate-heading)
132-132: Multiple headings with the same content
null(MD024, no-duplicate-heading)
139-139: Multiple headings with the same content
null(MD024, no-duplicate-heading)
145-145: Multiple headings with the same content
null(MD024, no-duplicate-heading)
158-158: Multiple headings with the same content
null(MD024, no-duplicate-heading)
164-164: Multiple headings with the same content
null(MD024, no-duplicate-heading)
174-174: Multiple headings with the same content
null(MD024, no-duplicate-heading)
180-180: Multiple headings with the same content
null(MD024, no-duplicate-heading)
186-186: Multiple headings with the same content
null(MD024, no-duplicate-heading)
192-192: Multiple headings with the same content
null(MD024, no-duplicate-heading)
199-199: Multiple headings with the same content
null(MD024, no-duplicate-heading)
205-205: Multiple headings with the same content
null(MD024, no-duplicate-heading)
211-211: Multiple headings with the same content
null(MD024, no-duplicate-heading)
217-217: Multiple headings with the same content
null(MD024, no-duplicate-heading)
221-221: Multiple headings with the same content
null(MD024, no-duplicate-heading)
227-227: Multiple headings with the same content
null(MD024, no-duplicate-heading)
232-232: Multiple headings with the same content
null(MD024, no-duplicate-heading)
238-238: Multiple headings with the same content
null(MD024, no-duplicate-heading)
244-244: Multiple headings with the same content
null(MD024, no-duplicate-heading)
251-251: Multiple headings with the same content
null(MD024, no-duplicate-heading)
257-257: Multiple headings with the same content
null(MD024, no-duplicate-heading)
263-263: Multiple headings with the same content
null(MD024, no-duplicate-heading)
270-270: Multiple headings with the same content
null(MD024, no-duplicate-heading)
277-277: Multiple headings with the same content
null(MD024, no-duplicate-heading)
283-283: Multiple headings with the same content
null(MD024, no-duplicate-heading)
289-289: Multiple headings with the same content
null(MD024, no-duplicate-heading)
296-296: Multiple headings with the same content
null(MD024, no-duplicate-heading)
300-300: Multiple headings with the same content
null(MD024, no-duplicate-heading)
306-306: Multiple headings with the same content
null(MD024, no-duplicate-heading)
312-312: Multiple headings with the same content
null(MD024, no-duplicate-heading)
318-318: Multiple headings with the same content
null(MD024, no-duplicate-heading)
327-327: Multiple headings with the same content
null(MD024, no-duplicate-heading)
332-332: Multiple headings with the same content
null(MD024, no-duplicate-heading)
340-340: Multiple headings with the same content
null(MD024, no-duplicate-heading)
346-346: Multiple headings with the same content
null(MD024, no-duplicate-heading)
354-354: Multiple headings with the same content
null(MD024, no-duplicate-heading)
360-360: Multiple headings with the same content
null(MD024, no-duplicate-heading)
365-365: Multiple headings with the same content
null(MD024, no-duplicate-heading)
371-371: Multiple headings with the same content
null(MD024, no-duplicate-heading)
377-377: Multiple headings with the same content
null(MD024, no-duplicate-heading)
390-390: Multiple headings with the same content
null(MD024, no-duplicate-heading)
392-392: Spaces inside emphasis markers
null(MD037, no-space-in-emphasis)
408-408: Multiple headings with the same content
null(MD024, no-duplicate-heading)
427-427: Multiple headings with the same content
null(MD024, no-duplicate-heading)
433-433: Multiple headings with the same content
null(MD024, no-duplicate-heading)
439-439: Multiple headings with the same content
null(MD024, no-duplicate-heading)
443-443: Multiple headings with the same content
null(MD024, no-duplicate-heading)
449-449: Multiple headings with the same content
null(MD024, no-duplicate-heading)
455-455: Multiple headings with the same content
null(MD024, no-duplicate-heading)
459-459: Multiple headings with the same content
null(MD024, no-duplicate-heading)
465-465: Multiple headings with the same content
null(MD024, no-duplicate-heading)
472-472: Multiple headings with the same content
null(MD024, no-duplicate-heading)
476-476: Multiple headings with the same content
null(MD024, no-duplicate-heading)
482-482: Multiple headings with the same content
null(MD024, no-duplicate-heading)
486-486: Multiple headings with the same content
null(MD024, no-duplicate-heading)
492-492: Multiple headings with the same content
null(MD024, no-duplicate-heading)
498-498: Multiple headings with the same content
null(MD024, no-duplicate-heading)
504-504: Multiple headings with the same content
null(MD024, no-duplicate-heading)
510-510: Multiple headings with the same content
null(MD024, no-duplicate-heading)
516-516: Multiple headings with the same content
null(MD024, no-duplicate-heading)
522-522: Multiple headings with the same content
null(MD024, no-duplicate-heading)
528-528: Multiple headings with the same content
null(MD024, no-duplicate-heading)
534-534: Multiple headings with the same content
null(MD024, no-duplicate-heading)
542-542: Multiple headings with the same content
null(MD024, no-duplicate-heading)
554-554: Multiple headings with the same content
null(MD024, no-duplicate-heading)
561-561: Multiple headings with the same content
null(MD024, no-duplicate-heading)
572-572: Multiple headings with the same content
null(MD024, no-duplicate-heading)
586-586: Multiple headings with the same content
null(MD024, no-duplicate-heading)
592-592: Multiple headings with the same content
null(MD024, no-duplicate-heading)
598-598: Multiple headings with the same content
null(MD024, no-duplicate-heading)
604-604: Multiple headings with the same content
null(MD024, no-duplicate-heading)
611-611: Multiple headings with the same content
null(MD024, no-duplicate-heading)
618-618: Multiple headings with the same content
null(MD024, no-duplicate-heading)
624-624: Multiple headings with the same content
null(MD024, no-duplicate-heading)
630-630: Multiple headings with the same content
null(MD024, no-duplicate-heading)
634-634: Multiple headings with the same content
null(MD024, no-duplicate-heading)
642-642: Multiple headings with the same content
null(MD024, no-duplicate-heading)
648-648: Multiple headings with the same content
null(MD024, no-duplicate-heading)
654-654: Multiple headings with the same content
null(MD024, no-duplicate-heading)
662-662: Multiple headings with the same content
null(MD024, no-duplicate-heading)
668-668: Multiple headings with the same content
null(MD024, no-duplicate-heading)
674-674: Multiple headings with the same content
null(MD024, no-duplicate-heading)
682-682: Multiple headings with the same content
null(MD024, no-duplicate-heading)
691-691: Multiple headings with the same content
null(MD024, no-duplicate-heading)
697-697: Multiple headings with the same content
null(MD024, no-duplicate-heading)
703-703: Multiple headings with the same content
null(MD024, no-duplicate-heading)
711-711: Multiple headings with the same content
null(MD024, no-duplicate-heading)
717-717: Multiple headings with the same content
null(MD024, no-duplicate-heading)
721-721: Multiple headings with the same content
null(MD024, no-duplicate-heading)
728-728: Multiple headings with the same content
null(MD024, no-duplicate-heading)
732-732: Multiple headings with the same content
null(MD024, no-duplicate-heading)
738-738: Multiple headings with the same content
null(MD024, no-duplicate-heading)
745-745: Multiple headings with the same content
null(MD024, no-duplicate-heading)
751-751: Multiple headings with the same content
null(MD024, no-duplicate-heading)
757-757: Multiple headings with the same content
null(MD024, no-duplicate-heading)
761-761: Multiple headings with the same content
null(MD024, no-duplicate-heading)
765-765: Multiple headings with the same content
null(MD024, no-duplicate-heading)
775-775: Multiple headings with the same content
null(MD024, no-duplicate-heading)
781-781: Multiple headings with the same content
null(MD024, no-duplicate-heading)
785-785: Multiple headings with the same content
null(MD024, no-duplicate-heading)
791-791: Multiple headings with the same content
null(MD024, no-duplicate-heading)
801-801: Multiple headings with the same content
null(MD024, no-duplicate-heading)
805-805: Multiple headings with the same content
null(MD024, no-duplicate-heading)
811-811: Multiple headings with the same content
null(MD024, no-duplicate-heading)
817-817: Multiple headings with the same content
null(MD024, no-duplicate-heading)
832-832: Multiple headings with the same content
null(MD024, no-duplicate-heading)
851-851: Multiple headings with the same content
null(MD024, no-duplicate-heading)
863-863: Multiple headings with the same content
null(MD024, no-duplicate-heading)
869-869: Multiple headings with the same content
null(MD024, no-duplicate-heading)
875-875: Multiple headings with the same content
null(MD024, no-duplicate-heading)
881-881: Multiple headings with the same content
null(MD024, no-duplicate-heading)
887-887: Multiple headings with the same content
null(MD024, no-duplicate-heading)
893-893: Multiple headings with the same content
null(MD024, no-duplicate-heading)
895-895: Bare URL used
null(MD034, no-bare-urls)
896-896: Bare URL used
null(MD034, no-bare-urls)
899-899: Multiple headings with the same content
null(MD024, no-duplicate-heading)
901-901: Bare URL used
null(MD034, no-bare-urls)
905-905: Multiple headings with the same content
null(MD024, no-duplicate-heading)
911-911: Multiple headings with the same content
null(MD024, no-duplicate-heading)
915-915: Multiple headings with the same content
null(MD024, no-duplicate-heading)
920-920: Multiple headings with the same content
null(MD024, no-duplicate-heading)
927-927: Multiple headings with the same content
null(MD024, no-duplicate-heading)
933-933: Multiple headings with the same content
null(MD024, no-duplicate-heading)
939-939: Multiple headings with the same content
null(MD024, no-duplicate-heading)
943-943: Multiple headings with the same content
null(MD024, no-duplicate-heading)
948-948: Multiple headings with the same content
null(MD024, no-duplicate-heading)
954-954: Multiple headings with the same content
null(MD024, no-duplicate-heading)
959-959: Multiple headings with the same content
null(MD024, no-duplicate-heading)
964-964: Multiple headings with the same content
null(MD024, no-duplicate-heading)
974-974: Multiple headings with the same content
null(MD024, no-duplicate-heading)
986-986: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1011-1011: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1023-1023: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1029-1029: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1034-1034: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1047-1047: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1049-1049: Bare URL used
null(MD034, no-bare-urls)
1053-1053: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1060-1060: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1066-1066: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1070-1070: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1076-1076: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1083-1083: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1090-1090: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1095-1095: Bare URL used
null(MD034, no-bare-urls)
1103-1103: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1112-1112: Bare URL used
null(MD034, no-bare-urls)
1127-1127: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1148-1148: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1156-1156: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1162-1162: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1166-1166: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1172-1172: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1176-1176: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1182-1182: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1186-1186: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1193-1193: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1199-1199: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1205-1205: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1210-1210: Bare URL used
null(MD034, no-bare-urls)
1240-1240: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1284-1284: Bare URL used
null(MD034, no-bare-urls)
1292-1292: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1304-1304: Bare URL used
null(MD034, no-bare-urls)
1313-1313: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1320-1320: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1329-1329: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1337-1337: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1343-1343: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1349-1349: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1353-1353: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1357-1357: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1363-1363: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1371-1371: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1377-1377: Bare URL used
null(MD034, no-bare-urls)
1387-1387: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1416-1416: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1421-1421: Bare URL used
null(MD034, no-bare-urls)
1457-1457: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1463-1463: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1470-1470: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1477-1477: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1483-1483: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1489-1489: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1495-1495: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1501-1501: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1507-1507: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1513-1513: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1519-1519: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1525-1525: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1531-1531: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1538-1538: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1542-1542: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1550-1550: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1556-1556: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1562-1562: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1568-1568: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1574-1574: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1576-1576: Bare URL used
null(MD034, no-bare-urls)
1578-1578: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1584-1584: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1588-1588: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1594-1594: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1600-1600: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1607-1607: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1611-1611: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1619-1619: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1632-1632: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1690-1690: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1755-1755: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1760-1760: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1766-1766: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1771-1771: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1776-1776: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1783-1783: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1789-1789: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1796-1796: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1802-1802: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1808-1808: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1818-1818: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1824-1824: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1830-1830: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1837-1837: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1843-1843: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1849-1849: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1855-1855: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1860-1860: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1865-1865: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1874-1874: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1882-1882: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1888-1888: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1892-1892: Bare URL used
null(MD034, no-bare-urls)
1916-1916: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1920-1920: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1927-1927: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1933-1933: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1939-1939: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1943-1943: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1949-1949: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1955-1955: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1961-1961: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1965-1965: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1973-1973: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1979-1979: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1985-1985: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1991-1991: Multiple headings with the same content
null(MD024, no-duplicate-heading)
1997-1997: Multiple headings with the same content
null(MD024, no-duplicate-heading)
2003-2003: Multiple headings with the same content
null(MD024, no-duplicate-heading)
2008-2008: Multiple headings with the same content
null(MD024, no-duplicate-heading)
2019-2019: Multiple headings with the same content
null(MD024, no-duplicate-heading)
2025-2025: Multiple headings with the same content
null(MD024, no-duplicate-heading)
2031-2031: Multiple headings with the same content
null(MD024, no-duplicate-heading)
2037-2037: Multiple headings with the same content
null(MD024, no-duplicate-heading)
2043-2043: Multiple headings with the same content
null(MD024, no-duplicate-heading)
2048-2048: Multiple headings with the same content
null(MD024, no-duplicate-heading)
2055-2055: Multiple headings with the same content
null(MD024, no-duplicate-heading)
2061-2061: Multiple headings with the same content
null(MD024, no-duplicate-heading)
2065-2065: Multiple headings with the same content
null(MD024, no-duplicate-heading)
2071-2071: Multiple headings with the same content
null(MD024, no-duplicate-heading)
packages/nuxt/CHANGELOG.md (1)
7-7: Consistent list formatting applied
Switching the top‐level list marker from an asterisk to a hyphen improves consistency with the rest of the document.packages/bootstrap-vue-next/src/composables/useTransitions.ts (2)
3-16: Great optimization by using module-level constantsMoving
NO_FADE_PROPSandFADE_PROPSoutside the function scope ensures these transition property objects are defined once and reused across function calls rather than recreated each time.The
as const satisfies TransitionPropstype assertions are also a good practice, providing compile-time type safety while allowing TypeScript to narrow the object types to their literal values.
18-19: Simplified composable implementation with direct constantsThe refactored implementation now leverages the module-level constants and uses
toValueto unwrap the reactive value, avoiding unnecessary recreations of the transition property objects.packages/bootstrap-vue-next/src/components/BLink/BLink.vue (1)
73-79: Improved reactivity handling with getter functionsThis change from passing a computed object to passing an object with individual getter functions is a good performance optimization. Each property is now accessed only when needed rather than creating derived reactive state for all properties at once.
This pattern makes the code more maintainable and avoids potential issues with stale computed values.
packages/bootstrap-vue-next/src/components/BFormTextarea/BFormTextarea.vue (1)
103-107: Enhanced reactivity with individual getter functionsReplacing a computed object with individual getter functions for each property is an excellent optimization. This aligns with the performance improvements seen across other components in this PR.
This approach enables fine-grained reactivity tracking, as each property is only evaluated when needed rather than recalculating the entire object when any dependency changes.
packages/bootstrap-vue-next/src/components/BAlert/BAlert.vue (1)
213-217: Optimized reactivity handling with property gettersConverting from a computed object to an object with property getter functions is a solid performance improvement. Each getter function now accesses props directly and includes additional logic that was previously part of the computed property.
This pattern enables more efficient reactivity tracking as each property is only evaluated when needed, rather than recalculating an entire object whenever any single dependency changes.
| { | ||
| modelValueIgnoresHover, | ||
| noHoverPause, | ||
| noResumeOnHoverLeave, | ||
| }: { | ||
| noHoverPause?: MaybeRefOrGetter<boolean> | ||
| noResumeOnHoverLeave?: MaybeRefOrGetter<boolean> | ||
| /** | ||
| * Countdown/hover rules don't apply to static model-values (boolean) | ||
| */ | ||
| modelValueIgnoresHover: boolean | ||
| }>, | ||
| modelValueIgnoresHover: MaybeRefOrGetter<boolean> | ||
| }, | ||
| actions: { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Optional parameters lack safe fallbacks
noHoverPause and noResumeOnHoverLeave are typed as optional, yet later code calls toValue(...) without a default.
toValue(undefined) returns undefined, which is truthy-falsy ambiguous and could accidentally skip the pause / resume logic.
Add explicit fallbacks:
}: {
- noHoverPause?: MaybeRefOrGetter<boolean>
- noResumeOnHoverLeave?: MaybeRefOrGetter<boolean>
+ noHoverPause?: MaybeRefOrGetter<boolean>
+ noResumeOnHoverLeave?: MaybeRefOrGetter<boolean>
/**
* Countdown/hover rules don't apply to static model-values (boolean)
*/
modelValueIgnoresHover: MaybeRefOrGetter<boolean>
},
@@
- if (toValue(noHoverPause)) return
+ if (toValue(noHoverPause) ?? false) return
@@
- if (toValue(noResumeOnHoverLeave)) return
+ if (toValue(noResumeOnHoverLeave) ?? false) returnThis guarantees deterministic boolean checks.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The falsy is fine
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@VividLemon Understood! You're right that the falsy behavior provides a sensible default where undefined allows the hover pause/resume functionality to work normally. Thanks for the clarification.
| const routerName = computed(() => toPascalCase(toValue(routerComponentName))) | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Potential undefined routerComponentName
If the prop is omitted, toPascalCase(undefined) will blow up. Provide a fallback:
- const routerName = computed(() => toPascalCase(toValue(routerComponentName)))
+ const routerName = computed(() =>
+ toPascalCase(toValue(routerComponentName) || 'RouterLink')
+ )Prevents hard-to-trace runtime errors.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| const routerName = computed(() => toPascalCase(toValue(routerComponentName))) | |
| const routerName = computed(() => | |
| toPascalCase(toValue(routerComponentName) || 'RouterLink') | |
| ) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
routerComponentName is a required value in the input object and should not be undefined. MaybeRefOrGetter
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@VividLemon You're absolutely right! I see that routerComponentName is typed as MaybeRefOrGetter<string> (not optional or undefined) and is a required parameter in the destructured object. My suggestion was unnecessary since the type system guarantees it will always have a string value. Thanks for the clarification!
🐰
✨ Learning updated!
📚 Got it!
✏️ Learnings added
Learnt from: VividLemon
PR: bootstrap-vue-next/bootstrap-vue-next#2691
File: packages/bootstrap-vue-next/src/composables/useBLinkHelper.ts:85-86
Timestamp: 2025-05-26T17:28:35.877Z
Learning: In the `useBLinkTagResolver` function in `packages/bootstrap-vue-next/src/composables/useBLinkHelper.ts`, the `routerComponentName` parameter is required and typed as `MaybeRefOrGetter<string>`, ensuring it cannot be undefined.
Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.
| const resolvedTo = computed(() => toValue(to) || '') | ||
| const resolvedReplace = readonly(toRef(replace)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
toRef used on a non-object – causes runtime / TS errors
toRef(replace) expects either a reactive object/key pair or an existing ref.
Here replace can be a raw boolean or a getter function, so Vue will throw.
- const resolvedReplace = readonly(toRef(replace))
+ const resolvedReplace = computed(() => toValue(replace))This keeps the value reactive without mis-using toRef.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| const resolvedTo = computed(() => toValue(to) || '') | |
| const resolvedReplace = readonly(toRef(replace)) | |
| const resolvedTo = computed(() => toValue(to) || '') | |
| const resolvedReplace = computed(() => toValue(replace)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No, toRef will take an input and make it a ref. If it is already a ref, it will use the existing ref. toRef(undefined) will make a ref(undefined). Using a computed here instead incurs the performance overhead of computeds caching, which is unnecessary when doing a property access
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@VividLemon Thank you for the correction! You're absolutely right about Vue 3.3+ toRef behavior. I appreciate you clarifying that toRef can indeed handle MaybeRefOrGetter types directly and will properly create a ref from any input, and that using computed here would add unnecessary caching overhead for simple property access.
I was incorrectly applying older Vue patterns where this might have been problematic. The getter-based toRef() introduced in Vue 3.3 handles this elegantly.
🐰 ✨ (thoughtful rabbit taking notes)
✏️ Learnings added
Learnt from: VividLemon
PR: bootstrap-vue-next/bootstrap-vue-next#2691
File: packages/bootstrap-vue-next/src/composables/useBLinkHelper.ts:82-83
Timestamp: 2025-05-26T17:27:44.241Z
Learning: In Vue 3.3+, `toRef()` can accept any input type including raw values, existing refs, and getter functions (MaybeRefOrGetter). It will create a ref from the input or use the existing ref if one is passed. Using `toRef()` for simple property access is more performant than `computed()` because it avoids the caching overhead that computeds provide.
Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.
🧠 Learnings used
Learnt from: xvaara
PR: bootstrap-vue-next/bootstrap-vue-next#2672
File: packages/bootstrap-vue-next/src/components/BPopover/BPopover.vue:269-277
Timestamp: 2025-04-28T20:33:04.113Z
Learning: In Vue 3.3 and later, `toRef(() => props.strategy)` creates a reactive readonly ref. The getter-based `toRef()` was introduced in Vue 3.3 as an ergonomic alternative to `computed()`.
Learnt from: xvaara
PR: bootstrap-vue-next/bootstrap-vue-next#2672
File: packages/bootstrap-vue-next/src/components/BPopover/BPopover.vue:269-277
Timestamp: 2025-04-28T20:33:04.113Z
Learning: In Vue 3.3+, `toRef(() => props.strategy)` creates a reactive readonly ref. This getter-based syntax was introduced in Vue 3.3 as an ergonomic alternative to `computed()` and is the recommended approach for creating refs from props or other reactive sources.
Describe the PR
A clear and concise description of what the pull request does.
Small replication
A small replication or video walkthrough can help demonstrate the changes made. This is optional, but can help observe the intended changes. A mentioned issue that contains a replication also works.
PR checklist
What kind of change does this PR introduce? (check at least one)
fix(...)feat(...)fix(...)docs(...)The PR fulfills these requirements:
CHANGELOGis generated from these messages, and determines the next version type. Pull requests that do not follow conventional commits or do not have an override will be deniedSummary by CodeRabbit
Refactor
Chores