Repository navigation
Conversation
…nd StyleX imports The generated stylesheet always resolved to an empty module, so Bun.build dropped every style, and the pre-parse gate only accepted import declarations of @devup-ui/react, so files using the alias packages, StyleX, subpaths or re-exports ran the runtime stubs. DevupUI() now serves the complete sheet to the CSS loader after defer(), and the gate reads the real imports with Bun.Transpiler.scanImports. Refs #686 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
… built stylesheets A stylesheet module is built on its first import, and the shared base is read from disk past the plugin, so styles extracted later were missing from webpack and Rsbuild output; Rsbuild also served a module-wide string kept only when it grew. The files the entries reach are now extracted before the build, the base on disk is kept current, and a compilation whose stylesheets changed is run once more, writing only the complete result. Rsbuild serves each stylesheet from the current sheet. Refs #686 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…into feat/deterministic-numbering # Conflicts: # packages/next-plugin/src/loader.ts
…inistic-numbering
…ing order Refs #694 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #694 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
… forwarding alone Refs #694 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #694, #686 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #694, #686 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #694, #686 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #694, #686 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #694, #686 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #694, #686 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #694, #686 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…to fix/atom-hoist-names
Refs #694, #686 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #694, #686 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Contributor
Changepacks@devup-ui/wasm@1.0.83 → 1.0.84 - bindings/devup-ui-wasm/package.jsonPatch
@devup-ui/bun-plugin@1.0.22 → 1.0.23 - packages/bun-plugin/package.jsonPatch
@devup-ui/components@0.1.60 → 0.1.61 - packages/components/package.jsonPatch
@devup-ui/next-plugin@1.0.90 → 1.0.91 - packages/next-plugin/package.jsonPatch
@devup-ui/plugin-utils@1.0.17 → 1.0.18 - packages/plugin-utils/package.jsonPatch
@devup-ui/rsbuild-plugin@1.0.67 → 1.0.68 - packages/rsbuild-plugin/package.jsonPatch
@devup-ui/vite-plugin@1.0.73 → 1.0.74 - packages/vite-plugin/package.jsonPatch
@devup-ui/webpack-plugin@1.0.71 → 1.0.72 - packages/webpack-plugin/package.jsonPatch
|
Codecov Report✅ All modified and coverable lines are covered by tests.
🚀 New features to boost your workflow:
|
This was referenced Oct 4, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Refs #694, #686 (W29). #743 (
feat/deterministic-numbering) 위에 쌓은 PR이며, #743이 먼저 병합되어야 합니다. PR base는 요청대로main입니다.요약
atomHoist에서 JSX는a-a/b-a를 참조하지만 공유 CSS는.a/.b만 정의하던 오류를 수정합니다. 클래스 이름과 배치는 추출 순서가 아니라, 원자 스타일의 내용과 추출 전에 확정한 canonical bucket의 route reach로 결정합니다.css(),styled(), StyleX, vanilla-extract, 선택자, 반응형 스타일, 동적 CSS 변수와 keyframes의 참조가 실제 CSS 정의와 일치합니다.!important값의 클래스 충돌도 수정합니다.w={["$token"]}/boxShadow={["$token"]}의 첫 값이 JSX와 CSS에서 서로 다른 클래스로 계산되던 오류와, 일반 반응형 변수 토큰과의 충돌을 함께 수정합니다.updatedBaseStyle을 전달하여 플러그인이 공유 CSS를 갱신합니다.동작
호이스팅 여부는 첫 소스를 처리하기 전에
importFileRoutes가 제공한 reach로 고정합니다. threshold 이상인 bucket의 원자는 공유 이름으로devup-ui.css에 한 번 정의하고, 그 외 원자는 파일 이름 공간과 파일별 CSS를 유지합니다. 나중에 도착한 reach 때문에 이미 출력한 이름이나 배치가 바뀌지 않습니다.이름은 속성, 정규화한 값, 반응형 level, 선택자/at-rule 구조, layer, style order, 공유/로컬 이름 공간을 충돌 없이 인코딩합니다. atom 모드에서는 debug 여부나 파일 추출 순서로 이름이 바뀌지 않습니다. 변수와 keyframes도 내용으로 이름을 정하며, 파일별 keyframes는 해당 파일의 CSS에 남습니다.
호이스팅 배치와 고정한 계획은 sheet에 저장되어, CSS loader가 현재 atom 설정 없이 sheet를 복원해도 같은 CSS를 출력합니다.
export한 sheet에는 항상
atomNamingVersion: 1을 넣습니다. 추출 전의 빈 sheet나 이전 sheet를 복원한 경우에도 기존 Next loader 옵션의 cache fingerprint가 달라져, 오류가 있던 예전 JSX 캐시를 유지하지 않습니다. 기존 CSS 데이터와 round-trip은 보존합니다.기존 재현 스크립트의 실제 출력은
ab/ba모두 다음과 같습니다:파일별 CSS는
@import "./devup-ui.css";만 갖고, 두 출력 모두updatedBaseStyle: true입니다. 공유 클래스 이름과 CSS는 두 순서에서 동일합니다.바이트와 무효화 비용
8개 route, 모든 route가 미리 도달하는 공유 모듈 32개, 모듈마다 동일 원자 80개, route마다 고유 원자 25개인 fixture를 측정했습니다. threshold는 2이며, 공통 상수 한 개가 바뀌어 공유 소비자 32개의 선언이 바뀌는 새 배포 빌드를 비교합니다. gzip은 파일마다 압축하여 합산했고, header와 import-only 파일도 포함했습니다.
충돌 없는 이름 때문에 수정 전의 잘못된 출력보다 raw 20,322 bytes, gzip 1,593 bytes가 증가합니다. 대신 적용되지 않던 2,760개 참조를 모두 복구합니다. 정상 파일별 CSS와 비교하면 raw 39,252 bytes, gzip 11,805 bytes를 줄입니다. CSS 요청 수가 줄었다고 주장하지 않습니다.
기존의 일괄 30% 무효화 주장은 늦은 원자 합집합과 정의되지 않은 클래스가 포함된 fixture에서 나온 것이므로 그대로 유지하지 않았습니다. 새 Rust fixture는 실제 참조/선언 일치, 32회 선언 대 1회 선언, 32개 변경 파일 대 1개 변경 파일, 제거되는 선언 payload로 계산한 바이트 절감을 검증합니다. 이름 길이 비용도 계산에 포함합니다.
새로 생기는 오류
없습니다. 런타임 스타일 평가나 의존성을 추가하지 않습니다.
남는 한계
resetBuildState까지 로컬로 유지합니다.cwd/src고정으로 root App/Pages layout reach가 빠지는 경우,codeExtractWithoutSourceMap이 source map을 생성하는 INF-06, CSS 버전 header의 기존 쉼표. coordinator/plugin-utils 담당 영역은 변경하지 않았습니다.검증
cargo fmt --all, Rust 1.99 workspace/all-target Clippy 통과cargo test --workspace: 2,154 통과, 실패 없음; snapshot 변경은 저장한atom_plan/hoisted필드 2개뿐bun run build통과bun test: 5,530 통과, 실패 없음, 함수/라인 커버리지 100%css()/styled()/StyleX, 동적 priority, keyframes, 선택자/반응형, 공유/로컬, debug/prefix, 늦은 reach, 새 빌드, import한 vanilla-extract 모듈 참조 확인bun lint: 기존 경고 2개 외 오류/새 경고 없음W30 통합 업데이트: 이 브랜치는
main의a935315c까지 포함합니다 (#747 vinext/RSC CSS 보존 및 #700 버전 업데이트).W30 최종 CI
aaab75652615aedae65ec102e3576ea05b3c3c33,main의a935315c까지 포함; MERGEABLE/CLEAN 확인37177129245: success,publish/landing-next-e2e/vinext-rsc-css-e2e/benchmark모두 통과10042/10042), Bun5530통과 / 0 실패, 함수·라인 커버리지 100%