Skip to content

v4 takes the @studiometa/js-toolkit name at 4.0.0-alpha.0 - #871

Merged
titouanmathis merged 1 commit into
mainfrom
feat/v4-takes-the-package-name
Aug 26, 2026
Merged

v4 takes the @studiometa/js-toolkit name at 4.0.0-alpha.0#871
titouanmathis merged 1 commit into
mainfrom
feat/v4-takes-the-package-name

Conversation

@titouanmathis

Copy link
Copy Markdown
Contributor

What

v4 takes the @studiometa/js-toolkit name at 4.0.0-alpha.0, and main becomes the 4.x line.

The prototype was @studiometa/js-toolkit-v4, private, at version 0.0.0. Nothing outside this repository could install it, which blocks the beta feedback, the @studiometa/ui 2.0 port and any pilot project.

An npm workspace cannot hold two packages under one name, so v3 had to leave main. It did, intact, on 3.x.

The two lines

Branch Line npm Documentation
main 4.x next js-toolkit-v4.studiometa.dev
3.x 3.x, in maintenance latest js-toolkit.studiometa.dev

latest stays at 3.9.0. PRs #708, #749 and #750 are retargeted at 3.x.

Changes

  • packages/v4/packages/js-toolkit/ with git mv, so the history follows. packages/js-toolkit/ (v3), packages/docs/ (3.x documentation) and packages/demo/ (3.x playground) are deleted here and live on 3.x.
  • 360 occurrences of @studiometa/js-toolkit-v4 across 122 files — docs samples, specs, ported @studiometa/ui families, packed-package consumers, and the Vitest and TypeScript aliases. The twoslash caches were regenerated by the docs build, since a cache is keyed on the sample and every sample changed.
  • Every packages/v4 path: root scripts, generate-subpaths.js, the lint and format configs, the workflows.
  • Publish metadata: README.md and LICENSE in the tarball, publishConfig.access, repository, author, license, bugs, homepage. check-package.js expects the two new top-level files and still refuses anything that is not a build artifact.
  • src/coexistence.spec.ts and tsconfig.coexistence.json are deleted. They are the only files needing both versions installed at once, so they stay on 3.x; RATIONALE.md records where they went.
  • Install instructions say @studiometa/js-toolkit@next, because plain npm install gives 3.x until 4.0.0 ships.

Two things this surfaced rather than caused

  • oxlint. The component-authoring block applied to v3's sources and the 3.x demo. It is retargeted at migration/ and demo/ — minus require-config and async-lifecycle-methods, which encode a v3 shape: v4 lets an abstract base declare no config, and mounted() returns its cleanup, so making it async is the mistake rather than the rule.
  • vite-plugin-decorators filtered on code: '@' alone, so it handed demo/index.html to SWC, which parsed it as TypeScript and threw. The root never exposed the v4 demo's build script, so nothing ran into it. This PR exposes it as npm run demo:build and adds the id filter the code filter needed.

Documentation domains

js-toolkit.studiometa.dev must keep serving the 3.x pages for the whole prerelease. The Cloudflare Pages project js-toolkit now has 3.x as its production branch, and docs.yml on that branch names the branch explicitly, since an Actions checkout can be detached.

Verified before this PR deletes packages/docs: the first deploy from 3.x landed as a production deployment carrying the js-toolkit.studiometa.dev alias.

Verification

  • npm run build — clean
  • npm run lint — clean, apart from one unicorn(no-useless-spread) warning that predates this branch
  • npm test — 113 files, 1569 tests, all passing
  • npm run check:package — 596 files, 306.6 kB packed; Node, browser and TypeScript packed consumers pass
  • npm run docs:build and npm run demo:build — both pass

Not in this PR

The release plumbing: the lockstep postversion hook, the publish workflow gate, the changelog and the tag itself.

🤖 Generated with Claude Code

https://claude.ai/code/session_011izFBQT4AsFcD4tVZz1f7R

The v4 prototype was `@studiometa/js-toolkit-v4`, private, at version
0.0.0, so nothing outside this repository could install it. It is now the
package: `@studiometa/js-toolkit@4.0.0-alpha.0`, publishable, in
`packages/js-toolkit/`.

An npm workspace cannot hold two packages under one name, so v3 had to
leave `main` for v4 to take it. It did, intact, on the `3.x` branch, which
keeps the `latest` release, the documentation at js-toolkit.studiometa.dev
and the three open pull requests that target v3.

What moved:

- `packages/v4/` → `packages/js-toolkit/`, with `git mv` so the history
  follows. `packages/js-toolkit/` (v3), `packages/docs/` (the 3.x
  documentation) and `packages/demo/` (the 3.x playground) are deleted
  here and live on `3.x`.
- 360 occurrences of `@studiometa/js-toolkit-v4` across 122 files: the
  docs samples, the specs, the ported `@studiometa/ui` families, the
  packed-package consumers and the Vitest and TypeScript path aliases. The
  twoslash caches were regenerated by the docs build, since a cache is
  keyed on the sample and every sample changed.
- Every `packages/v4` path: the root scripts, `generate-subpaths.js`, the
  lint and format configs, and the workflows.

What the package gained, because it is published now: a `README.md` and a
`LICENSE` in the tarball, `publishConfig.access`, and the repository,
author, license, bugs and homepage fields. `check-package.js` asserts the
packed top level, so it now expects those two files and still refuses
anything that is not a build artifact.

`src/coexistence.spec.ts` and `tsconfig.coexistence.json` are deleted.
They are the only files that need both versions installed at once, and
they stay on `3.x` where v3's sources are. RATIONALE.md says so where it
describes the symbol that spec defends.

Two things this move surfaced rather than caused:

- `oxlint`'s component-authoring block applied to v3's sources and the 3.x
  demo. Retargeted at `migration/` and `demo/`, which is where this
  repository writes components now — minus `require-config` and
  `async-lifecycle-methods`, which encode a v3 shape: v4 lets an abstract
  base declare no config, and `mounted()` returns its cleanup, so making
  it `async` is the mistake rather than the rule.
- `vite-plugin-decorators` filtered on `code: '@'` alone, so it handed
  `demo/index.html` to SWC, which parsed it as TypeScript and threw. The
  root never exposed the v4 demo's build script, so nothing ran into it.
  This commit exposes it as `npm run demo:build`, and adds the `id` filter
  the `code` filter needed.

Documentation: js-toolkit-v4.studiometa.dev keeps its domain for the whole
prerelease, and the Cloudflare Pages project `js-toolkit` now has `3.x` as
its production branch, so js-toolkit.studiometa.dev keeps serving the 3.x
pages from that branch. Verified before this commit deletes them: the
first deploy from `3.x` landed as a production deployment carrying the
custom domain. The two domains swap when 4.0.0 ships. Until then the
install instructions say `@studiometa/js-toolkit@next`, since plain
`npm install` gives 3.x.

`focus-trap` moves from the root to this package: it is an optional peer
of `@vueuse/integrations`, which VitePress uses, and the docs build fails
without it.

Verified: `npm run build`, `npm run lint`, `npm test` (113 files, 1569
tests), `npm run check:package` (596 files, 306.6 kB packed, Node, browser
and TypeScript consumers), `npm run docs:build` and `npm run demo:build`.

Release plumbing — the lockstep `postversion` hook, the publish workflow
and the tag itself — is the next commit, not this one.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011izFBQT4AsFcD4tVZz1f7R
@github-actions

Copy link
Copy Markdown

Export size

Bundled per export with peer dependencies left external, dynamic imports excluded and the output minified; sizes are gzipped.

@studiometa/js-toolkit

Export Size (gzip) Diff
test 11.77 kB +11.77 kB (+100.0%)
component 11.65 kB +11.65 kB (+100.0%)
registerComponent 11.26 kB +10.97 kB (+3681.6%)
registerComponents 11.27 kB +10.92 kB (+3141.6%)
on 8.93 kB +8.93 kB (+100.0%)
registerManifest 11.32 kB +8.45 kB (+294.2%)
(barrel) 22.72 kB +5.24 kB (+30.0%)
withScrollProgress 4.33 kB +4.33 kB (+100.0%)
useScrollProgress 3.64 kB +3.64 kB (+100.0%)
withScroll 3.33 kB +3.33 kB (+100.0%)
swap 2.89 kB +2.89 kB (+100.0%)
getUnmountedInstances 2.87 kB +2.87 kB (+100.0%)
getMountedInstances 2.87 kB +2.87 kB (+100.0%)
utils/selectorFor 2.77 kB +2.77 kB (+100.0%)
getInstances 2.86 kB +2.68 kB (+1467.4%)
useWindowScroll 2.65 kB +2.65 kB (+100.0%)
withRaf 2.62 kB +2.62 kB (+100.0%)
watchAttributeNamespace 2.54 kB +2.54 kB (+100.0%)
withPointer 2.52 kB +2.52 kB (+100.0%)
utils/smoothTo 2.82 kB +2.36 kB (+507.6%)
whenDOMSettled 2.34 kB +2.34 kB (+100.0%)
createUrlSearchParamsInHashStorage 2.34 kB +2.34 kB (+100.0%)
createUrlSearchParamsStorage 2.34 kB +2.34 kB (+100.0%)
createSessionStorage 2.32 kB +2.32 kB (+100.0%)
createLocalStorage 2.32 kB +2.32 kB (+100.0%)
createStorage 2.3 kB +2.3 kB (+100.0%)
withKey 2.14 kB +2.14 kB (+100.0%)
withInView 2.11 kB +2.11 kB (+100.0%)
withResize 2.1 kB +2.1 kB (+100.0%)
watchAttributes 2.02 kB +2.02 kB (+100.0%)
withDrag 4.02 kB +1.84 kB (+84.2%)
viewTransition 1.66 kB +1.66 kB (+100.0%)
defaultScheduler 1.49 kB +1.49 kB (+100.0%)
useBreakpoint 1.44 kB +1.44 kB (+100.0%)
subscribeContext 1.43 kB +1.43 kB (+100.0%)
useWindowSize 1.43 kB +1.43 kB (+100.0%)
useInView 1.42 kB +1.42 kB (+100.0%)
createFallbackProvider 1.32 kB +1.32 kB (+100.0%)
useScroll 2.67 kB +1.31 kB (+95.9%)
useDrag 3.35 kB +1.3 kB (+63.4%)
domUpdate 1.23 kB +1.23 kB (+100.0%)
createMemoryStorageProvider 1.21 kB +1.21 kB (+100.0%)
createUrlSearchParamsInHashProvider 1.21 kB +1.21 kB (+100.0%)
createUrlSearchParamsProvider 1.21 kB +1.21 kB (+100.0%)
memoryStorageProvider 1.21 kB +1.21 kB (+100.0%)
localStorageProvider 1.2 kB +1.2 kB (+100.0%)
sessionStorageProvider 1.2 kB +1.2 kB (+100.0%)
urlSearchParamsInHashProvider 1.2 kB +1.2 kB (+100.0%)
urlSearchParamsProvider 1.2 kB +1.2 kB (+100.0%)
withMutation 2.09 kB +1.1 kB (+111.8%)
usePrefersReducedMotion 1.09 kB +1.09 kB (+100.0%)
emitExtendable 1.08 kB +1.08 kB (+100.0%)
createGroup 1.07 kB +1.07 kB (+100.0%)
useMediaQuery 1.05 kB +1.05 kB (+100.0%)
createServiceMixin 1015 B +1015 B (+100.0%)
useRaf 1.94 kB +962 B (+93.6%)
signal 921 B +921 B (+100.0%)
utils/scrollPosition 857 B +857 B (+100.0%)
setBreakpoints 803 B +803 B (+100.0%)
BREAKPOINTS 774 B +774 B (+100.0%)
getBreakpoints 774 B +774 B (+100.0%)
provideRootContext 746 B +746 B (+100.0%)
DIAGNOSTICS 714 B +714 B (+100.0%)
usePointer 1.85 kB +712 B (+60.4%)
provideContext 700 B +700 B (+100.0%)
utils/enterTransition 679 B +679 B (+100.0%)
utils/leaveTransition 679 B +679 B (+100.0%)
injectContext 672 B +672 B (+100.0%)
createService 640 B +640 B (+100.0%)
injectContextSync 630 B +630 B (+100.0%)
utils/lockScroll 561 B +561 B (+100.0%)
useKey 1.46 kB +557 B (+59.1%)
useMutation 1.4 kB +555 B (+63.4%)
utils/loadLink 772 B +535 B (+225.7%)
utils/saveActiveElement 568 B +476 B (+517.4%)
createContext 468 B +468 B (+100.0%)
defineManifest 979 B +467 B (+91.2%)
utils/untrapFocus 583 B +463 B (+385.8%)
utils/loadScript 692 B +441 B (+175.7%)
utils/kebabCase 421 B +421 B (+100.0%)
reportDiagnostic 329 B +329 B (+100.0%)
perTarget 322 B +322 B (+100.0%)
warn 321 B +321 B (+100.0%)
utils/deepmerge 312 B +312 B (+100.0%)
useResize 1.42 kB +301 B (+26.0%)
utils/trapFocus 711 B +270 B (+61.2%)
children 244 B +244 B (+100.0%)
utils/inertiaStep 232 B +232 B (+100.0%)
utils/setClassesOrStyles 218 B +218 B (+100.0%)
utils/inertiaDecay 199 B +199 B (+100.0%)
utils/spring 343 B +189 B (+122.7%)
provide 185 B +185 B (+100.0%)
utils/inertiaTimeConstant 178 B +178 B (+100.0%)
toggle 177 B +177 B (+100.0%)
inject 176 B +176 B (+100.0%)
until 172 B +172 B (+100.0%)
DRAG_MODES 162 B +162 B (+100.0%)
utils/decayOver 162 B +162 B (+100.0%)
utils/clampDampFactor 157 B +157 B (+100.0%)
EVENTS 153 B +153 B (+100.0%)
utils/TRANSFORM_PROPS 137 B +137 B (+100.0%)
utils/TRANSITION_OPTIONS 132 B +132 B (+100.0%)
SWAP_MODES 129 B +129 B (+100.0%)
getInstance 128 B +128 B (+100.0%)
read 126 B +126 B (+100.0%)
write 124 B +124 B (+100.0%)
namespaceQualifier 120 B +120 B (+100.0%)
utils/capitalize 119 B +119 B (+100.0%)
utils/SCROLL_ALIGNMENTS 117 B +117 B (+100.0%)
nextFrame 115 B +115 B (+100.0%)
utils/DEFAULT_DAMP_FACTOR 109 B +109 B (+100.0%)
utils/damp 211 B +105 B (+99.1%)
utils/MAX_SPRING_RATIO 100 B +100 B (+100.0%)
utils/SCROLL_AXES 100 B +100 B (+100.0%)
utils/INERTIA_FRAME 97 B +97 B (+100.0%)
jsonSerializer 95 B +95 B (+100.0%)
utils/createRange 205 B +90 B (+78.3%)
utils/memo 217 B +87 B (+66.9%)
utils/getOffsetSizes 268 B +74 B (+38.1%)
MOUNT_ATTRIBUTE 69 B +69 B (+100.0%)
utils/camelCase 449 B +44 B (+10.9%)
utils/lerp 120 B +36 B (+42.9%)
utils/clamp 133 B +35 B (+35.7%)
utils/clamp01 149 B +35 B (+30.7%)
utils/map 128 B +35 B (+37.6%)
utils/round 130 B +35 B (+36.8%)
utils/fold 200 B +32 B (+19.0%)
utils/wrap 154 B +32 B (+26.2%)
utils/pascalCase 434 B +27 B (+6.6%)
utils/throttle 151 B +26 B (+20.8%)
utils/mean 147 B +21 B (+16.7%)
utils/randomInt 132 B +19 B (+16.8%)
utils/inertiaFinalValue 187 B +18 B (+10.7%)
utils/snakeCase 421 B +15 B (+3.7%)
utils/matrix 150 B +14 B (+10.3%)
utils/isBoolean 90 B +12 B (+15.4%)
utils/isDefined 87 B +12 B (+16.0%)
utils/isNumber 103 B +12 B (+13.2%)
utils/isString 89 B +12 B (+15.6%)
utils/withTrailingSlash 153 B +11 B (+7.7%)
utils/isNull 78 B +10 B (+14.7%)
utils/withLeadingSlash 152 B +10 B (+7.0%)
utils/withTrailingCharacters 143 B +8 B (+5.9%)
utils/isFunction 86 B +7 B (+8.9%)
utils/isObject 115 B +7 B (+6.5%)
utils/withLeadingCharacters 142 B +7 B (+5.2%)
utils/withoutTrailingCharacters 129 B +7 B (+5.7%)
utils/withoutTrailingSlash 140 B +7 B (+5.3%)
utils/withoutLeadingCharacters 127 B +5 B (+4.1%)
utils/withoutLeadingSlash 138 B +5 B (+3.8%)
utils/loadImage 245 B +4 B (+1.7%)
utils/createElement 638 B +3 B (+0.5%)
utils/debounce 121 B -1 B (-0.8%)
utils/createEaseInOut 120 B -3 B (-2.4%)
utils/withoutTrailingCharactersRecursive 147 B -18 B (-10.9%)
utils/withoutLeadingCharactersRecursive 144 B -21 B (-12.7%)
fromMetaGlob 203 B -25 B (-11.0%)
utils/objectToURLSearchParams 266 B -56 B (-17.4%)
version 56 B -56 B (-100.0%)
IDLE_TIMEOUT 57 B -57 B (-100.0%)
utils/transform 286 B -61 B (-17.6%)
utils/isArray 63 B -63 B (-100.0%)
utils/randomItem 163 B -71 B (-30.3%)
VISIBLE_ROOT_MARGIN 72 B -72 B (-100.0%)
utils/isDev 78 B -78 B (-100.0%)
utils/hasWindow 88 B -88 B (-100.0%)
DEFAULT_DIAGNOSTIC_PREFIX 102 B -102 B (-100.0%)
getScopedGroups 104 B -104 B (-100.0%)
utils/isEmptyString 108 B -108 B (-100.0%)
withName 109 B -109 B (-100.0%)
composeManifests 119 B -119 B (-100.0%)
utils/collidePointRect 122 B -122 B (-100.0%)
utils/keyCodes 122 B -122 B (-100.0%)
utils/getAncestorWhere 123 B -123 B (-100.0%)
getInstanceFromElement 125 B -125 B (-100.0%)
utils/startsWith 125 B -125 B (-100.0%)
utils/collidePointCircle 128 B -128 B (-100.0%)
utils/collideRectRect 128 B -128 B (-100.0%)
utils/createNoopProvider 128 B -128 B (-100.0%)
utils/endsWith 128 B -128 B (-100.0%)
utils/collideCircleCircle 129 B -129 B (-100.0%)
utils/easeInOutSine 156 B -132 B (-45.8%)
utils/historyPush 391 B -133 B (-25.4%)
utils/nextMicrotask 133 B -133 B (-100.0%)
utils/historyReplace 392 B -134 B (-25.5%)
utils/easeInOutCirc 150 B -138 B (-47.9%)
utils/easeInOutExpo 150 B -138 B (-47.9%)
utils/getComponentResolver 140 B -140 B (-100.0%)
utils/easeInOutCubic 141 B -148 B (-51.2%)
utils/getAncestorWhereUntil 148 B -148 B (-100.0%)
utils/nextTick 148 B -148 B (-100.0%)
utils/easeInOutQuad 139 B -149 B (-51.7%)
utils/easeInOutQuart 140 B -149 B (-51.6%)
utils/easeInOutQuint 140 B -149 B (-51.6%)
utils/easeOutSine 132 B -154 B (-53.8%)
utils/easeOutExpo 124 B -162 B (-56.6%)
withExtraConfig 163 B -163 B (-100.0%)
utils/easeOutCirc 121 B -165 B (-57.7%)
utils/createMemoryStorageProvider 174 B -174 B (-100.0%)
utils/easeOutQuart 112 B -174 B (-60.8%)
utils/easeOutQuint 111 B -175 B (-61.2%)
utils/easeOutQuad 110 B -176 B (-61.5%)
utils/easeOutCubic 111 B -177 B (-61.5%)
utils/nextFrame 179 B -179 B (-100.0%)
utils/easeInSine 104 B -181 B (-63.5%)
withFreezedOptions 187 B -187 B (-100.0%)
utils/easeInExpo 97 B -189 B (-66.1%)
utils/easeInCirc 94 B -191 B (-67.0%)
utils/collideCircleRect 192 B -192 B (-100.0%)
getClosestParent 197 B -197 B (-100.0%)
readEagerTokens 201 B -201 B (-100.0%)
getDirectChildren 202 B -202 B (-100.0%)
utils/easeInQuad 80 B -205 B (-71.9%)
utils/easeInQuart 81 B -205 B (-71.7%)
utils/easeInQuint 81 B -205 B (-71.7%)
utils/boundingRectToCircle 206 B -206 B (-100.0%)
utils/easeInCubic 81 B -206 B (-71.8%)
utils/isEmpty 206 B -206 B (-100.0%)
utils/cache 208 B -208 B (-100.0%)
isDirectChild 218 B -218 B (-100.0%)
utils/loadElement 220 B -220 B (-100.0%)
importWhenIdle 225 B -225 B (-100.0%)
utils/memoize 228 B -228 B (-100.0%)
utils/addStyle 239 B -239 B (-100.0%)
utils/addClass 240 B -240 B (-100.0%)
utils/loadIframe 241 B -241 B (-100.0%)
utils/removeClass 242 B -242 B (-100.0%)
utils/toggleClass 242 B -242 B (-100.0%)
importOnMediaQuery 243 B -243 B (-100.0%)
utils/removeStyle 243 B -243 B (-100.0%)
importWhenPrefersMotion 271 B -271 B (-100.0%)
utils/createSessionStorageProvider 288 B -288 B (-100.0%)
utils/Queue 291 B -291 B (-100.0%)
utils/createLocalStorageProvider 296 B -296 B (-100.0%)
withIntersectionObserver 303 B -303 B (-100.0%)
utils/useScheduler 309 B -309 B (-100.0%)
utils/domScheduler 310 B -310 B (-100.0%)
utils/lowerCase 84 B -320 B (-79.2%)
utils/upperCase 84 B -320 B (-79.2%)
defineFeatures 326 B -326 B (-100.0%)
withMountWhenInView 347 B -347 B (-100.0%)
withMountOnMediaQuery 393 B -393 B (-100.0%)
utils/dashCase 404 B -404 B (-100.0%)
closestComponent 419 B -419 B (-100.0%)
utils/createUrlSearchParamsProvider 429 B -429 B (-100.0%)
withMountWhenPrefersMotion 431 B -431 B (-100.0%)
utils/transition 577 B -433 B (-42.9%)
withGroup 455 B -455 B (-100.0%)
utils/createUrlSearchParamsInHashProvider 461 B -461 B (-100.0%)
utils/scrollTo 1.86 kB -462 B (-19.5%)
utils/SmartQueue 473 B -473 B (-100.0%)
utils/ease 519 B -519 B (-100.0%)
Base 8.59 kB -521 B (-5.6%)
logTree 551 B -551 B (-100.0%)
queryComponent 594 B -594 B (-100.0%)
AbstractService 598 B -598 B (-100.0%)
queryComponentAll 601 B -601 B (-100.0%)
LoadService 666 B -666 B (-100.0%)
useLoad 676 B -676 B (-100.0%)
utils/sessionStorageProvider 838 B -838 B (-100.0%)
utils/localStorageProvider 839 B -839 B (-100.0%)
utils/urlSearchParamsProvider 839 B -839 B (-100.0%)
utils/memoryStorageProvider 843 B -843 B (-100.0%)
utils/urlSearchParamsInHashProvider 845 B -845 B (-100.0%)
MutationService 849 B -849 B (-100.0%)
utils 9.25 kB -855 B (-8.3%)
importOnInteraction 926 B -926 B (-100.0%)
importWhenVisible 935 B -935 B (-100.0%)
KeyService 935 B -935 B (-100.0%)
createApp 996 B -996 B (-100.0%)
RafService 1020 B -1020 B (-100.0%)
ResizeService 1.12 kB -1.12 kB (-100.0%)
PointerService 1.13 kB -1.13 kB (-100.0%)
withRelativePointer 1.29 kB -1.29 kB (-100.0%)
utils/createStorage 1.3 kB -1.3 kB (-100.0%)
utils/createLocalStorage 1.32 kB -1.32 kB (-100.0%)
utils/createSessionStorage 1.32 kB -1.32 kB (-100.0%)
utils/createUrlSearchParamsStorage 1.34 kB -1.34 kB (-100.0%)
utils/createUrlSearchParamsInHashStorage 1.35 kB -1.35 kB (-100.0%)
ScrollService 1.36 kB -1.36 kB (-100.0%)
withBreakpointManager 1.54 kB -1.54 kB (-100.0%)
withBreakpointObserver 1.71 kB -1.71 kB (-100.0%)
utils/tween 1.72 kB -1.72 kB (-100.0%)
DragService 2.02 kB -2.02 kB (-100.0%)
ComponentLoader 2.31 kB -2.31 kB (-100.0%)
withResponsiveOptions 2.4 kB -2.4 kB (-100.0%)
autoload 2.4 kB -2.4 kB (-100.0%)
registerManifests 2.89 kB -2.89 kB (-100.0%)
withScrolledInView 3.05 kB -3.05 kB (-100.0%)
utils/animate 3.34 kB -3.34 kB (-100.0%)
Unchanged (7)

@studiometa/js-toolkit

Export Size (gzip) Diff
fromWebpackContext 131 B
utils/createEaseOut 91 B
utils/easeLinear 77 B
utils/noop 62 B
utils/noopValue 76 B
utils/random 93 B
utils/wait 103 B

@codecov

codecov Bot commented Aug 26, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 94.55%. Comparing base (7f65a75) to head (3e74e36).

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #871      +/-   ##
==========================================
- Coverage   97.06%   94.55%   -2.51%     
==========================================
  Files         176       38     -138     
  Lines        4561     1176    -3385     
  Branches     1330      498     -832     
==========================================
- Hits         4427     1112    -3315     
+ Misses        122       57      -65     
+ Partials       12        7       -5     
Flag Coverage Δ
eslint-plugin-js-toolkit 94.55% <ø> (ø)
js-toolkit ?

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@github-actions

Copy link
Copy Markdown

Code Review

Risk: Low — No demonstrable blocking defects were found in the files opened; the package rename and v4 workspace transition are safe to merge subject to the unreviewed files being validated separately.

The change promotes the v4 prototype to @studiometa/js-toolkit@4.0.0-alpha.0, relocates its documentation and demo under the published package, updates workspace scripts and CI paths, and removes the v3 packages from main. I reviewed package.json, packages/js-toolkit/package.json, packages/js-toolkit/vitest.bench.config.js, .github/actions/bench-diff/action.yml, .github/workflows/benchmarks.yml, .github/workflows/docs.yml, .github/workflows/export-size.yml, .github/workflows/tests.yml, .gitignore, .oxfmtrc.json, .oxlintrc.json, README.md, CHANGELOG.md, and the relevant portions of package-lock.json and the commit diff. I did not open the files listed under .code-review-skipped/, nor the many other changed files whose diffs were not opened individually, including the package source, migration, demo, documentation, scripts, generated caches, and remaining workflow/configuration files.


Review usage: 1,596,123 in (1,292,449 cached) / 1,064 out tokens — $0.2576 (openrouter/openai/gpt-5.6-luna, thinking: low)

Reviewed by @weareikko/code-review v0.9.5 for commit 3e74e36.

@github-actions

Copy link
Copy Markdown

mount benchmarks

Base and head measured on this runner, alternating over 3 rounds each; every value is the median of the round medians. Running both sides on one machine is what removes cross-machine noise — a cached baseline from another runner would put it back.

A move under 25%, or on a benchmark under 5 ms, is not reported as a change: it is inside the measured noise of a shared runner.

The base commit has no benchmark suite, so every benchmark below is new. A base that failed to build or measure would have failed this job rather than appearing here.

Group Benchmark Base Head us / component Change
mount 1000 components, one insertion control — declared but unregistered - 2.20 ms 2.20 new
mount 1000 components, one insertion flat - 17.0 ms 17.00 new
mount 1000 components, one insertion in-view — one controller per element - 31.6 ms 31.60 new
mount 1000 components, one insertion nested 4 deep - 14.6 ms 14.60 new
mount 1000 components, one insertion realistic — 5 refs, 3 options, 4 handlers - 72.3 ms 72.30 new
mount 1000 components, one insertion responsive option — breakpoint cascade per mount - 16.4 ms 16.40 new
mount 1000 flat components, 1 vs 10 insertions 1 insertion - 11.7 ms 11.70 new
mount 1000 flat components, 1 vs 10 insertions 10 insertions - 12.5 ms 12.50 new
mount 5000 components, one insertion control — declared but unregistered - 18.1 ms 3.62 new
mount 5000 components, one insertion flat - 70.0 ms 14.00 new
mount 5000 components, one insertion in-view — one controller per element - 170.8 ms 34.16 new
mount 5000 components, one insertion nested 4 deep - 68.5 ms 13.70 new
mount 5000 components, one insertion realistic — 5 refs, 3 options, 4 handlers - 324.6 ms 64.92 new
mount 5000 components, one insertion responsive option — breakpoint cascade per mount - 83.6 ms 16.72 new
mount 5000 flat components, 1 vs 10 insertions 1 insertion - 69.0 ms 13.80 new
mount 5000 flat components, 1 vs 10 insertions 10 insertions - 70.9 ms 14.18 new
unmount 1000 flat components, one removal flat - 2.40 ms 2.40 new
unmount 5000 flat components, one removal flat - 15.3 ms 3.06 new

@titouanmathis
titouanmathis merged commit 2c32178 into main Aug 26, 2026
10 checks passed
@titouanmathis
titouanmathis deleted the feat/v4-takes-the-package-name branch August 26, 2026 19:45
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.

1 participant