tailwind-styled-v4 5.0.8 → 5.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +204 -416
- package/README.md +45 -15
- package/dist/{analyzeWorkspace-DuJKh7Ty.d.mts → analyzeWorkspace-BS5O4rhC.d.mts} +47 -2
- package/dist/{analyzeWorkspace-Ct_NTAWt.d.ts → analyzeWorkspace-DDOQdzzI.d.ts} +47 -2
- package/dist/analyzer.d.mts +5 -3
- package/dist/analyzer.d.ts +5 -3
- package/dist/analyzer.js +563 -468
- package/dist/analyzer.js.map +1 -1
- package/dist/analyzer.mjs +562 -467
- package/dist/analyzer.mjs.map +1 -1
- package/dist/animate.d.mts +4 -7
- package/dist/animate.d.ts +4 -7
- package/dist/animate.js +171 -265
- package/dist/animate.js.map +1 -1
- package/dist/animate.mjs +165 -264
- package/dist/animate.mjs.map +1 -1
- package/dist/atomic.d.mts +22 -1
- package/dist/atomic.d.ts +22 -1
- package/dist/atomic.js +221 -165
- package/dist/atomic.js.map +1 -1
- package/dist/atomic.mjs +200 -165
- package/dist/atomic.mjs.map +1 -1
- package/dist/cli.d.mts +60 -1
- package/dist/cli.d.ts +60 -1
- package/dist/cli.js +1261 -1517
- package/dist/cli.js.map +1 -1
- package/dist/cli.mjs +1238 -1513
- package/dist/cli.mjs.map +1 -1
- package/dist/compiler.d.mts +38 -7
- package/dist/compiler.d.ts +38 -7
- package/dist/compiler.js +174 -197
- package/dist/compiler.js.map +1 -1
- package/dist/compiler.mjs +151 -194
- package/dist/compiler.mjs.map +1 -1
- package/dist/devtools.js +7 -31
- package/dist/devtools.js.map +1 -1
- package/dist/devtools.mjs +7 -31
- package/dist/devtools.mjs.map +1 -1
- package/dist/engine.d.mts +134 -63
- package/dist/engine.d.ts +134 -63
- package/dist/engine.js +2863 -2482
- package/dist/engine.js.map +1 -1
- package/dist/engine.mjs +2852 -2485
- package/dist/engine.mjs.map +1 -1
- package/dist/{index-eWAocnD2.d.mts → index-NDINUhLN.d.mts} +3 -1
- package/dist/{index-eWAocnD2.d.ts → index-NDINUhLN.d.ts} +3 -1
- package/dist/index.d.mts +63 -32
- package/dist/index.d.ts +63 -32
- package/dist/index.js +335 -169
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +315 -169
- package/dist/index.mjs.map +1 -1
- package/dist/{liveTokenEngine-DSUk88P6.d.ts → liveTokenEngine-CN9ian1R.d.ts} +1 -1
- package/dist/{liveTokenEngine-CX5_0c4q.d.mts → liveTokenEngine-DKoWRtqH.d.mts} +1 -1
- package/dist/next.d.mts +10 -4
- package/dist/next.d.ts +10 -4
- package/dist/next.js +32 -45
- package/dist/next.js.map +1 -1
- package/dist/next.mjs +30 -43
- package/dist/next.mjs.map +1 -1
- package/dist/plugin-api.d.mts +8 -2
- package/dist/plugin-api.d.ts +8 -2
- package/dist/plugin-api.js +14 -2
- package/dist/plugin-api.js.map +1 -1
- package/dist/plugin-api.mjs +14 -3
- package/dist/plugin-api.mjs.map +1 -1
- package/dist/plugin-registry.js +51 -11
- package/dist/plugin-registry.js.map +1 -1
- package/dist/plugin-registry.mjs +51 -11
- package/dist/plugin-registry.mjs.map +1 -1
- package/dist/plugin.d.mts +5 -7
- package/dist/plugin.d.ts +5 -7
- package/dist/plugin.js +16 -15
- package/dist/plugin.js.map +1 -1
- package/dist/plugin.mjs +16 -16
- package/dist/plugin.mjs.map +1 -1
- package/dist/rspack.js +17 -38
- package/dist/rspack.js.map +1 -1
- package/dist/rspack.mjs +15 -36
- package/dist/rspack.mjs.map +1 -1
- package/dist/runtime.d.mts +2 -2
- package/dist/runtime.d.ts +2 -2
- package/dist/scanner.d.mts +10 -1
- package/dist/scanner.d.ts +10 -1
- package/dist/scanner.js +298 -124
- package/dist/scanner.js.map +1 -1
- package/dist/scanner.mjs +296 -124
- package/dist/scanner.mjs.map +1 -1
- package/dist/shared.d.mts +1 -1
- package/dist/shared.d.ts +1 -1
- package/dist/shared.js +104 -176
- package/dist/shared.js.map +1 -1
- package/dist/shared.mjs +85 -176
- package/dist/shared.mjs.map +1 -1
- package/dist/storybook-addon.d.mts +1 -1
- package/dist/storybook-addon.d.ts +1 -1
- package/dist/svelte.d.mts +1 -1
- package/dist/svelte.d.ts +1 -1
- package/dist/svelte.js +166 -3
- package/dist/svelte.js.map +1 -1
- package/dist/svelte.mjs +143 -1
- package/dist/svelte.mjs.map +1 -1
- package/dist/syntax.js +21 -21
- package/dist/syntax.js.map +1 -1
- package/dist/syntax.mjs +21 -21
- package/dist/syntax.mjs.map +1 -1
- package/dist/testing.js +9 -1
- package/dist/testing.js.map +1 -1
- package/dist/testing.mjs +9 -1
- package/dist/testing.mjs.map +1 -1
- package/dist/theme.d.mts +2 -2
- package/dist/theme.d.ts +2 -2
- package/dist/theme.js +40 -112
- package/dist/theme.js.map +1 -1
- package/dist/theme.mjs +37 -110
- package/dist/theme.mjs.map +1 -1
- package/dist/turbopackLoader.js +84 -126
- package/dist/turbopackLoader.js.map +1 -1
- package/dist/turbopackLoader.mjs +68 -124
- package/dist/turbopackLoader.mjs.map +1 -1
- package/dist/tw.js +1256 -1517
- package/dist/tw.js.map +1 -1
- package/dist/tw.mjs +1236 -1513
- package/dist/tw.mjs.map +1 -1
- package/dist/vite.js +1783 -823
- package/dist/vite.js.map +1 -1
- package/dist/vite.mjs +1767 -821
- package/dist/vite.mjs.map +1 -1
- package/dist/vue.d.mts +1 -1
- package/dist/vue.d.ts +1 -1
- package/dist/vue.js +165 -4
- package/dist/vue.js.map +1 -1
- package/dist/vue.mjs +141 -1
- package/dist/vue.mjs.map +1 -1
- package/dist/webpackLoader.js +69 -108
- package/dist/webpackLoader.js.map +1 -1
- package/dist/webpackLoader.mjs +49 -104
- package/dist/webpackLoader.mjs.map +1 -1
- package/native/tailwind-styled-native.node +0 -0
- package/package.json +22 -24
package/CHANGELOG.md
CHANGED
|
@@ -1,497 +1,285 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Semua perubahan signifikan pada project ini didokumentasikan di file ini.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
---
|
|
6
6
|
|
|
7
|
-
-
|
|
8
|
-
- **20-50x faster** class deduplication via `normalizeAndDedupClasses` in Rust
|
|
9
|
-
- **30x faster** class parsing via `parseClasses` in Rust
|
|
7
|
+
## [5.0.6-canary] — 2026-04-29
|
|
10
8
|
|
|
11
|
-
|
|
9
|
+
> Rilis canary terkini. Versi ini mencerminkan state aktual dari source code.
|
|
12
10
|
|
|
13
|
-
|
|
14
|
-
- Auto-fallback with exponential backoff
|
|
15
|
-
- Telemetry with Prometheus/JSON/Console exporters
|
|
16
|
-
- Clear error messages if native binary missing
|
|
11
|
+
### ⚠️ Breaking Changes
|
|
17
12
|
|
|
18
|
-
###
|
|
13
|
+
### CI/CD Consolidation
|
|
14
|
+
- **Removed legacy workflows**: `build-matrix.yml`, `compat-matrix.yml`, `example-next-app.yml`, `plugin-registry-benchmark.yml`, `plugin-registry-test.yml`, `publish-benchmark.yml`, `quality.yml`, `release-candidate-gate.yml`, `rust-parser-regression.yml`, `scale-benchmark.yml`, `test-coverage.yml`
|
|
15
|
+
- **New unified CI**: All CI/CD functionality consolidated into `ci.yml`
|
|
16
|
+
- **New release workflow**: `release-candidate.yml` replaces `release-candidate-gate.yml`
|
|
17
|
+
- **Updated workflows**: `benchmark.yml`, `dependencies.yml`, `publish-alpha.yml`, `publish.yml`
|
|
18
|
+
|
|
19
|
+
### Build Configuration
|
|
20
|
+
- `native/Cargo.lock` is now tracked for reproducible native builds
|
|
21
|
+
- `package-lock.json` added to root for consistent npm dependency management
|
|
22
|
+
- Removed temporary clippy output files (`native/clippy-final.txt`, `native/clippy-warnings.txt`)
|
|
23
|
+
- `examples/next-js-app/package-lock.json` now tracked
|
|
24
|
+
|
|
25
|
+
### 📦 Packages (26 total)
|
|
26
|
+
|
|
27
|
+
| Domain | Package |
|
|
28
|
+
|---|---|
|
|
29
|
+
| Core | `@tailwind-styled/core`, `@tailwind-styled/runtime`, `@tailwind-styled/shared` |
|
|
30
|
+
| Compiler | `@tailwind-styled/compiler`, `@tailwind-styled/syntax`, `@tailwind-styled/atomic` |
|
|
31
|
+
| Build | `@tailwind-styled/engine`, `@tailwind-styled/scanner`, `@tailwind-styled/analyzer` |
|
|
32
|
+
| Adapters | `@tailwind-styled/next`, `@tailwind-styled/vite`, `@tailwind-styled/rspack` |
|
|
33
|
+
| Styling | `@tailwind-styled/animate`, `@tailwind-styled/theme`, `@tailwind-styled/preset`, `@tailwind-styled/runtime-css` |
|
|
34
|
+
| Plugins | `@tailwind-styled/plugin`, `@tailwind-styled/plugin-api`, `@tailwind-styled/plugin-registry` |
|
|
35
|
+
| Infra | `@tailwind-styled/dashboard`, `@tailwind-styled/devtools`, `@tailwind-styled/studio-desktop` |
|
|
36
|
+
| Framework | `@tailwind-styled/vue`, `@tailwind-styled/svelte` |
|
|
37
|
+
| DX | `@tailwind-styled/testing`, `@tailwind-styled/storybook-addon` |
|
|
38
|
+
|
|
39
|
+
### 🦀 Rust Native Engine
|
|
40
|
+
|
|
41
|
+
- **92 NAPI functions** tersedia via `napi-rs` — scan, cache, parse, normalize, diff, analyze, minify, lint
|
|
42
|
+
- **137 Rust `pub fn`** di `native/src/` — termasuk internal helpers
|
|
43
|
+
- **LightningCSS** sebagai post-processor: minify, vendor prefix, dead-code strip
|
|
44
|
+
- Pipeline: `Tailwind JS compile()` → `Rust processTailwindCssLightning()` → final CSS
|
|
45
|
+
- Persistent DashMap cache — cold start scan `<10ms`, incremental `~0ms`
|
|
46
|
+
- `callOptional` pattern — native-first, JS fallback jika binary tidak tersedia
|
|
47
|
+
|
|
48
|
+
### 🧪 Testing
|
|
49
|
+
|
|
50
|
+
- **52 test files**, **675+ test cases** total
|
|
51
|
+
- Coverage: core, compiler, engine, scanner, analyzer, adapter Next/Vite/Rspack, Vue, Svelte, testing utils, storybook-addon, theme, animate, plugin-registry, CLI, devtools, dashboard
|
|
52
|
+
- `packages/domain/testing/` — custom matchers: `expectClasses()`, `expectEngineMetrics()`, `toHaveEngineMetrics()`, `expandVariantMatrix()`
|
|
53
|
+
- Test pipeline: Vitest + `.mjs` integration tests
|
|
54
|
+
|
|
55
|
+
### ✅ Resolved (vs styled-components)
|
|
56
|
+
|
|
57
|
+
| Kekurangan styled-components | Status |
|
|
58
|
+
|---|---|
|
|
59
|
+
| Runtime overhead ~15KB | ✅ ~4.5KB runtime, CSS di-extract build time |
|
|
60
|
+
| SSR complexity (`ServerStyleSheet`) | ✅ Tidak diperlukan — RSC entries dikecualikan dari loader otomatis |
|
|
61
|
+
| Class name tidak deterministik | ✅ Pakai Tailwind class asli langsung, zero hash |
|
|
62
|
+
| RSC tidak support | ✅ `tw.server.*` namespace + auto RSC boundary detection di loader |
|
|
63
|
+
| TypeScript verbose (`$prop`) | ✅ Variants API di config object, generics otomatis |
|
|
64
|
+
| Tidak tree-shakeable | ✅ DSE (Dead Style Eliminator) terintegrasi di pipeline |
|
|
65
|
+
|
|
66
|
+
### ⚠️ Catatan
|
|
67
|
+
|
|
68
|
+
- `stateEngine.ts` menggunakan runtime `<style>` injection di dev mode / fallback — tidak aktif di production build
|
|
69
|
+
- `TW_MAP` di `stateEngine.ts` hanya dipakai saat compiler tidak tersedia (`TWS_NO_NATIVE=1`) — tidak relevan di production
|
|
70
|
+
- E2E tests belum ada — 52 test files semuanya unit/integration level
|
|
71
|
+
- HMR belum ada di adapter Next.js (sudah ada di Vite)
|
|
19
72
|
|
|
20
|
-
|
|
21
|
-
- Unit tests for health check & telemetry
|
|
22
|
-
- Benchmark suite for performance regression
|
|
73
|
+
---
|
|
23
74
|
|
|
24
|
-
|
|
75
|
+
## [4.5.0-alpha.1] — 2026-04-18
|
|
25
76
|
|
|
26
|
-
|
|
27
|
-
- Run `npx tw setup` after installation
|
|
77
|
+
### 🚀 Performance (Rust Native)
|
|
28
78
|
|
|
29
|
-
|
|
79
|
+
- **10x** variant resolution via `resolve_variants` di Rust
|
|
80
|
+
- **23x** class deduplication via `normalizeAndDedupClasses` di Rust
|
|
81
|
+
- **30x** class parsing via `parseClasses` di Rust
|
|
30
82
|
|
|
31
|
-
|
|
32
|
-
|-----------|-----------|-------------|-------------|
|
|
33
|
-
| Variant resolution | 0.52ms | 0.048ms | **10.8x** |
|
|
34
|
-
| Class deduplication | 2.1ms | 0.09ms | **23.3x** |
|
|
35
|
-
| Class parsing | 3.0ms | 0.10ms | **30x** |
|
|
83
|
+
### 🛡️ Reliability
|
|
36
84
|
|
|
37
|
-
|
|
85
|
+
- Health check monitoring untuk native bridge
|
|
86
|
+
- Auto-fallback dengan exponential backoff
|
|
87
|
+
- Telemetry: Prometheus / JSON / Console exporters
|
|
88
|
+
- Error message jelas jika native binary tidak ditemukan
|
|
38
89
|
|
|
39
|
-
|
|
90
|
+
### 🧪 Testing & Quality
|
|
40
91
|
|
|
41
|
-
|
|
92
|
+
- Integration tests untuk semua core functions
|
|
93
|
+
- Unit tests untuk health check & telemetry
|
|
94
|
+
- Benchmark suite untuk performance regression
|
|
42
95
|
|
|
43
|
-
|
|
44
|
-
- `cache_read` return type diubah dari `CacheReadResult` → `napi::Result<CacheReadResult>` — error file tidak bisa dibaca sekarang dipropagasi ke JS dengan pesan deskriptif
|
|
45
|
-
- `scan_workspace` sudah return `napi::Result` — error directory tidak ditemukan langsung dilempar ke JS
|
|
96
|
+
### ⚠️ Breaking
|
|
46
97
|
|
|
47
|
-
|
|
48
|
-
-
|
|
49
|
-
- Cache HIT/MISS/write-fail sekarang semua melalui `log.debug()` — terkontrol via `TWS_LOG_LEVEL`
|
|
98
|
+
- JS fallbacks dihapus — native binary sekarang required
|
|
99
|
+
- Jalankan `npx tw setup` setelah install
|
|
50
100
|
|
|
51
|
-
|
|
52
|
-
- Plugin `onError` hook dipanggil sebelum error dipropagasi — plugin tidak bisa crash engine
|
|
53
|
-
- `watch()` emit event `{ type: "error" }` saat watcher atau transform gagal
|
|
101
|
+
### 📊 Benchmark
|
|
54
102
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
103
|
+
| Operasi | v4.4 (JS) | v4.5 (Rust) | Peningkatan |
|
|
104
|
+
|---|---|---|---|
|
|
105
|
+
| Variant resolution | 0.52ms | 0.048ms | **10.8×** |
|
|
106
|
+
| Class deduplication | 2.1ms | 0.09ms | **23.3×** |
|
|
107
|
+
| Class parsing | 3.0ms | 0.10ms | **30×** |
|
|
58
108
|
|
|
59
109
|
---
|
|
60
110
|
|
|
61
|
-
|
|
111
|
+
## [4.5.0] — Sprint 6–10 Platform Overhaul — 2026-03-21
|
|
62
112
|
|
|
63
|
-
|
|
64
|
-
- Hapus `@tailwind-styled/compiler` dan `@tailwind-styled/plugin` dari `external`
|
|
65
|
-
- Tambah `noExternal` agar compiler di-bundle inline ke adapter
|
|
66
|
-
- `esbuildOptions` skip `*.node` native binaries Tailwind v4
|
|
113
|
+
### Sprint 6 — Error Handling & Logging
|
|
67
114
|
|
|
68
|
-
|
|
69
|
-
-
|
|
70
|
-
-
|
|
71
|
-
-
|
|
115
|
+
- `cache_read` dan `scan_workspace` sekarang return `napi::Result` — error dipropagasi ke JS dengan pesan deskriptif
|
|
116
|
+
- Scanner logging terpusat via `createLogger("scanner")` dari `@tailwind-styled/shared`
|
|
117
|
+
- Cache HIT/MISS/write-fail dikontrol via `TWS_LOG_LEVEL`
|
|
118
|
+
- Plugin `onError` hook dipanggil sebelum error propagasi — plugin tidak bisa crash engine
|
|
119
|
+
- `watch()` emit `{ type: "error" }` saat watcher atau transform gagal
|
|
120
|
+
- `TWS_LOG_LEVEL=debug|info|warn|error|silent` + `TWS_DEBUG_SCANNER=1`
|
|
72
121
|
|
|
73
|
-
|
|
74
|
-
- Buat `tsup.config.ts` dari scratch
|
|
75
|
-
- `noExternal: ["@tailwind-styled/compiler"]`
|
|
76
|
-
- `preserveImports: true` di `runLoaderTransform` call
|
|
122
|
+
### Sprint 7 — Platform Adapters
|
|
77
123
|
|
|
78
|
-
|
|
79
|
-
- `
|
|
80
|
-
-
|
|
81
|
-
|
|
82
|
-
|
|
124
|
+
- Next.js, Vite, Rspack: compiler di-bundle inline — tidak perlu install `@tailwind-styled/compiler` terpisah
|
|
125
|
+
- `preserveImports: true` di semua loaders — `cv`, `cx`, `cn` dijamin tidak distrip
|
|
126
|
+
- Rspack `tsup.config.ts` dibuat dari scratch
|
|
127
|
+
- RSC Auto-inject: `detectRSCBoundary()` dan `autoInjectClientBoundary()` sebagai public API
|
|
128
|
+
- `webpackLoader.ts` dan `turbopackLoader.ts` auto-inject `"use client"` berdasarkan `analyzeFile()`
|
|
83
129
|
|
|
84
130
|
### Sprint 8 — Developer Tooling
|
|
85
131
|
|
|
86
|
-
|
|
87
|
-
-
|
|
88
|
-
-
|
|
89
|
-
|
|
90
|
-
#### DevTools (`packages/infrastructure/devtools/src/index.tsx`)
|
|
91
|
-
- Hapus tombol "Run Rust Workspace Scan" — tidak bisa jalan di browser environment
|
|
92
|
-
- Hapus `getRustAnalyzer()`, `runRustScan`, `rustReport`, `rustScanning`
|
|
93
|
-
- Ganti dengan panel **Engine Metrics** yang fetch dari `http://localhost:3000/metrics` (dashboard)
|
|
94
|
-
- Fallback message: "Rust analyzer hanya tersedia via CLI atau dashboard — `tw analyze . | tw dashboard`"
|
|
95
|
-
- DOM Scan tetap ada dan berfungsi
|
|
96
|
-
|
|
97
|
-
#### VSCode Extension (`packages/infrastructure/vscode/src/extension.ts`, `scripts/postbuild.cjs`)
|
|
98
|
-
- `startLspServer` cek `dist/lsp.mjs` sebagai kandidat pertama (bundled bersama extension)
|
|
99
|
-
- Tambah `packages/infrastructure/vscode/scripts/postbuild.cjs` — copy `scripts/v48/lsp.mjs` ke `dist/lsp.mjs` setiap build
|
|
100
|
-
- `package.json` tambah `"postbuild": "node scripts/postbuild.cjs"`
|
|
101
|
-
|
|
102
|
-
---
|
|
132
|
+
- CLI: `tw analyze --json` dan `tw stats --json` output clean parseable (suppress `console.log`)
|
|
133
|
+
- DevTools: hapus "Run Rust Workspace Scan" — ganti panel **Engine Metrics** dari `localhost:3000/metrics`
|
|
134
|
+
- VSCode: `startLspServer` cek `dist/lsp.mjs` bundled dulu, `postbuild.cjs` otomatis copy
|
|
135
|
+
- Tambah keybindings (`Ctrl+Shift+T/N/S`), `configuration` settings, `menus` context
|
|
103
136
|
|
|
104
137
|
### Sprint 9 — Studio Desktop (Electron)
|
|
105
138
|
|
|
106
|
-
|
|
107
|
-
- `
|
|
108
|
-
- Engine IPC handlers baru: `engine-scan`, `engine-build`, `engine-watch-start`, `engine-watch-stop`, `engine-reset`
|
|
109
|
-
- `createEngine` dari `@tailwind-styled/engine` di-lazy-load per project
|
|
110
|
-
- Engine di-reset otomatis saat `change-project` dipanggil
|
|
139
|
+
- Engine IPC handlers: `engine-scan`, `engine-build`, `engine-watch-start`, `engine-watch-stop`, `engine-reset`
|
|
140
|
+
- `createEngine` lazy-load per project, reset otomatis saat `change-project`
|
|
111
141
|
- Engine events di-forward ke renderer via `mainWindow.webContents.send("engine-event")`
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
-
|
|
115
|
-
|
|
116
|
-
#### Package (`packages/infrastructure/studio-desktop/package.json`)
|
|
117
|
-
- Tambah `@tailwind-styled/shared` ke dependencies
|
|
118
|
-
- Script `dev` update dengan fallback message jika Electron belum terinstall
|
|
119
|
-
|
|
120
|
-
---
|
|
142
|
+
- `contextBridge` ekspos: `engineScan`, `engineBuild`, `engineWatchStart`, `engineWatchStop`, `onEngineEvent`
|
|
143
|
+
- Studio Desktop: `loading-error.html` fallback dengan auto-retry
|
|
144
|
+
- Auto-updater via `electron-updater` — check 10 detik setelah startup, manual via Tools menu
|
|
145
|
+
- Tray icon: toggle window, double-click focus, context menu (Open, Browser, Quit)
|
|
121
146
|
|
|
122
147
|
### Sprint 10 — Testing & Documentation
|
|
123
148
|
|
|
124
|
-
|
|
125
|
-
-
|
|
126
|
-
-
|
|
127
|
-
-
|
|
128
|
-
- Tambah `tailwindMatchersWithMetrics` — combined export semua matchers
|
|
129
|
-
|
|
130
|
-
#### Test Suites Baru
|
|
131
|
-
- `packages/domain/testing/test/sprint9-platform.test.mjs` — 23 tests: next/vite/rspack adapter configs, preserveImports, studio-desktop engine IPC
|
|
132
|
-
- `packages/domain/testing/test/sprint10-integration.test.mjs` — 28 tests: Sprint 6–8 error handling, logging, engine propagation, DevTools safety, VSCode LSP, metrics matchers
|
|
133
|
-
|
|
134
|
-
#### Test Results
|
|
135
|
-
- Total: **84/86 tests pass**
|
|
136
|
-
- 2 failing tests: pre-existing `twMerge/cn` extraction (unrelated to engine changes)
|
|
137
|
-
|
|
138
|
-
---
|
|
139
|
-
|
|
140
|
-
## v4.2.0 — Sprint 1 & 2 Complete (2026-03-15)
|
|
141
|
-
|
|
142
|
-
### New Packages
|
|
143
|
-
|
|
144
|
-
- **`@tailwind-styled/vue`** — Vue 3 adapter: `tw()`, `cv()`, `extend()`, `TailwindStyledPlugin`. Full variant/compound variant support with `twMerge` conflict resolution.
|
|
145
|
-
- **`@tailwind-styled/svelte`** — Svelte 4/5 adapter: `cv()`, `tw()`, `use:styled` action, `createVariants()` (Svelte 5 runes compatible).
|
|
146
|
-
|
|
147
|
-
### New Features
|
|
148
|
-
|
|
149
|
-
#### Parser & Compiler (v4.6)
|
|
150
|
-
- `tw parse <file>` — Full AST traversal with 3-tier strategy: `oxc-parser` (Rust) → `@babel/parser` → regex fallback. Extracts classes from JSX `className`, template literals, `twMerge()`, `cn()`, `clsx()` calls.
|
|
151
|
-
- Real tree shaking (`tw shake <css>`) — CSS selector analysis against source scan. Removes unused rules based on actual class usage, not sentinel strings. Supports `@layer`, `@media` preservation.
|
|
152
|
-
|
|
153
|
-
#### Compiler Optimization (v4.7/v4.9)
|
|
154
|
-
- `tw optimize <file>` — Constant folding (`true ? A : B → A`), class deduplication, `twMerge` literal pre-computation.
|
|
155
|
-
|
|
156
|
-
#### Parallel & Ecosystem (v4.8)
|
|
157
|
-
- `scripts/v48/lint-parallel.mjs` — Multi-threaded linting via `worker_threads`
|
|
158
|
-
- LSP server (`tw lsp`) — hover, completion (Tailwind class autocomplete), diagnostics via `vscode-languageserver`
|
|
159
|
-
|
|
160
|
-
#### Dashboard & Metrics
|
|
161
|
-
- `@tailwind-styled/dashboard` — Live metrics server with file-watch IPC. Reads `.tw-cache/metrics.json` written by engine. Real-time HTML UI with build history chart.
|
|
162
|
-
- `packages/domain/engine/src/metricsWriter.ts` — Connects engine build results → `.tw-cache/metrics.json` → dashboard.
|
|
163
|
-
|
|
164
|
-
#### Plugin Registry
|
|
165
|
-
- `@tailwind-styled/plugin-registry` — `tw-plugin search/install/list` CLI. Registry now includes 4 official + 2 community plugins with docs and install commands.
|
|
166
|
-
|
|
167
|
-
#### Testing & Storybook
|
|
168
|
-
- `@tailwind-styled/testing` — `expectClasses()`, `expectNoClasses()`, `expandVariantMatrix()`, `testAllVariants()`, `expectClassesEqual()`, Jest/Vitest custom matchers (`tailwindMatchers`).
|
|
169
|
-
- `@tailwind-styled/storybook-addon` — `generateArgTypes()`, `withTailwindStyled()` decorator, `getVariantClass()`, `createVariantStoryArgs()`.
|
|
170
|
-
|
|
171
|
-
#### AI & Studio (v4.5)
|
|
172
|
-
- `tw ai "describe"` — Anthropic API integration for component generation. Fallback to smart static templates (card/nav/button detection) when `ANTHROPIC_API_KEY` not set.
|
|
173
|
-
- `tw studio` — Web-based component studio: scans project for `tw()`/`cv()` components, HTML UI with search + AI generator endpoint.
|
|
174
|
-
- `tw sync <init|pull|push|diff>` — W3C DTCG design token sync. Push to CSS variables (`--color-primary: #3b82f6`) or Tailwind `@theme {}` block.
|
|
175
|
-
|
|
176
|
-
#### Distributed Build (v5.0 preview)
|
|
177
|
-
- `tw cluster <init|build|status>` — Real `worker_threads` pool. Distributes file scan across CPU cores. Reports throughput (files/sec).
|
|
178
|
-
|
|
179
|
-
### Tests Added (Sprint 2)
|
|
180
|
-
- `packages/domain/scanner/test/parse-v46.test.mjs` — 20 unit tests for parse pipeline
|
|
181
|
-
- `packages/domain/compiler/test/shake-v47.test.mjs` — 10 unit tests for tree shaking
|
|
182
|
-
- `packages/presentation/vue/test/vue-adapter.test.mjs` — 9 unit tests for Vue cv()
|
|
183
|
-
- `packages/presentation/svelte/test/svelte-adapter.test.mjs` — 12 unit tests for Svelte cv()/tw()
|
|
184
|
-
- `packages/domain/testing/test/testing-utils.test.mjs` — 18 unit tests for testing utilities
|
|
185
|
-
- `examples/integration-test/sprint2.integration.test.mjs` — 9 integration tests (parse→shake pipeline, dashboard HTTP, real-world component patterns)
|
|
186
|
-
|
|
187
|
-
### Benchmark
|
|
188
|
-
- `scripts/benchmark/sprint2-bench.mjs` — Measures parse (files/sec), shake (% CSS reduction), cluster (throughput) with memory snapshot. Output: `docs/benchmark/sprint2-results.json`.
|
|
189
|
-
|
|
190
|
-
### Documentation
|
|
191
|
-
- `docs/known-limitations/tw-parse.md` — Fallback modes, `.vue`/`.svelte` support gap, dynamic class limitations
|
|
192
|
-
- `docs/known-limitations/tw-transform.md` — JSX runtime requirements, hoist behavior, source map availability
|
|
193
|
-
- `docs/known-limitations/tw-lint.md` — Worker config, exit codes, missing `--format json`
|
|
194
|
-
|
|
195
|
-
### CI & Quality
|
|
196
|
-
- Smoke tests expanded to cover Sprint 1+2 features (Oxide pipeline, plugin registry, sync, AI, cluster)
|
|
197
|
-
- All packages bumped to `4.2.0`
|
|
198
|
-
|
|
199
|
-
---
|
|
200
|
-
|
|
201
|
-
## v2.1.0-alpha.1 — Tailwind v4 Upgrade Path
|
|
202
|
-
|
|
203
|
-
### Added
|
|
204
|
-
- New workspace packages: `@tailwind-styled/scanner` and `@tailwind-styled/engine`.
|
|
205
|
-
- Core Tailwind v4 helpers: parser, CSS-first theme reader, merge layer, styled resolver.
|
|
206
|
-
- CLI phase upgrades: `init`, `scan`, `migrate`, and interactive `migrate --wizard`.
|
|
207
|
-
- Vite plugin build-end integration with scanner reports and optional engine build call.
|
|
208
|
-
- Native parser scaffold (`native/`) plus benchmark script (`benchmarks/native-parser-bench.mjs`).
|
|
209
|
-
- Release workflow/docs scaffold: `.github/workflows/publish-alpha.yml`, `RELEASE.md`, `ANNOUNCEMENT.md`.
|
|
210
|
-
|
|
211
|
-
### Notes
|
|
212
|
-
- Native parser remains optional and uses fallback strategy until binding is shipped in CI artifacts.
|
|
149
|
+
- `EngineMetricsSnapshot` interface + `expectEngineMetrics()` + `toHaveEngineMetrics()` + `tailwindMatchersWithMetrics`
|
|
150
|
+
- `sprint9-platform.test.mjs` — 23 tests: adapter configs, preserveImports, studio IPC
|
|
151
|
+
- `sprint10-integration.test.mjs` — 28 tests: error handling, logging, DevTools safety, VSCode LSP, metrics
|
|
152
|
+
- **84/86 tests pass** — 2 failing pre-existing (unrelated `twMerge/cn`)
|
|
213
153
|
|
|
214
154
|
---
|
|
215
155
|
|
|
216
|
-
##
|
|
156
|
+
## [4.3.0–4.5.0] — 2026-03-16
|
|
217
157
|
|
|
218
|
-
###
|
|
219
|
-
- **Removed `styled-components` dependency** — peer dep dihapus.
|
|
220
|
-
- **`styledFactory`, `shouldForwardProp`, `blockProp`, `allowProp`** — dihapus.
|
|
221
|
-
- **`propEngine`, `responsiveEngine`** — dipindahkan ke compiler.
|
|
222
|
-
- **`ThemeContext`** — dihapus.
|
|
223
|
-
|
|
224
|
-
### New Features
|
|
225
|
-
- **Zero-runtime output** — `tw.div\`...\`` dikompilasi ke pure `React.forwardRef`.
|
|
226
|
-
- **Compiler-driven variants** — Variant config dikompilasi ke static lookup table.
|
|
227
|
-
- **RSC-aware** — Auto detect server vs client components.
|
|
228
|
-
- **`withTailwindStyled()` plugin** — Next.js plugin dengan Turbopack + Webpack support.
|
|
229
|
-
- **`tailwindStyledPlugin()` Vite plugin** — Same compiler pipeline untuk Vite 5+.
|
|
158
|
+
### Fitur Baru
|
|
230
159
|
|
|
231
|
-
|
|
160
|
+
- **`tw ai`** — Anthropic API untuk component generation, multi-provider (`anthropic|openai|ollama`), fallback ke static templates
|
|
161
|
+
- **`tw studio`** — Web-based component studio: scan project, search, AI generator endpoint
|
|
162
|
+
- **`tw cluster`** — `worker_threads` pool: distribusi scan ke CPU cores
|
|
163
|
+
- **`tw registry`** — Local/team HTTP registry, npm-compatible packument protocol, tarball publish/install
|
|
164
|
+
- **`tw sync`** — W3C DTCG design token sync: pull/push HTTP/HTTPS, S3 protocol, Figma multi-mode
|
|
165
|
+
- **`tw preflight`** — 8 checks: Node version, bundler, Tailwind config, deprecated patterns, TypeScript, auto-fix
|
|
166
|
+
- **`tw audit`** — Deprecated class scanner, a11y checks, npm audit security, `--scope` dan `--json`
|
|
167
|
+
- **`@tailwind-styled/shared`** — Package baru: `LRUCache` (TTL), `createLogger`, `hashContent/File`, `debounce/throttle`, `parseVersion`
|
|
232
168
|
|
|
233
|
-
|
|
169
|
+
### tw parse — Multi-format
|
|
234
170
|
|
|
235
|
-
|
|
236
|
-
- `
|
|
237
|
-
-
|
|
238
|
-
-
|
|
171
|
+
- `.vue/.svelte/.mdx/.html` — regex-direct strategy, skip Babel (lebih cepat)
|
|
172
|
+
- `.js/.jsx/.ts/.tsx` — Oxc-first → Babel → regex
|
|
173
|
+
- Native Rust Tier 0: coba `native/index.mjs` (.node binding) sebelum Oxc
|
|
174
|
+
- Parse chain: **native → oxc → babel → regex**
|
|
239
175
|
|
|
240
|
-
###
|
|
241
|
-
- `tw preflight [--fix] [--json]` — command baru: 8 checks (Node version, package.json, tailwind-styled, bundler, tailwind-merge, Tailwind config, deprecated patterns, TypeScript), auto-fix sederhana
|
|
242
|
-
- `tw audit` — real checks: deprecated class scanner, a11y (img alt, onClick keyboard, div onClick, focus state), npm audit security, class count estimate; `--scope=deprecated|a11y|security|performance` dan `--json`
|
|
243
|
-
- `tw deploy` — baca package.json, tulis `.tw-cache/deploy-manifest.json`, `--dry-run` support
|
|
244
|
-
- `tw share` — baca manifest yang ada, generate payload dengan installCommand dan importExample
|
|
176
|
+
### Next.js Route CSS
|
|
245
177
|
|
|
246
|
-
|
|
247
|
-
- `
|
|
248
|
-
-
|
|
249
|
-
- `@tailwind-styled/shared` — package baru: `LRUCache` (TTL support), `createLogger`, `hashContent`/`hashFile`, `debounce`/`throttle`, `parseVersion`/`satisfiesMinVersion`
|
|
250
|
-
- `packages/domain/compiler` — migrasi `hashFileContent` ke `@tailwind-styled/shared`
|
|
178
|
+
- `routeCssMiddleware.ts` — `getRouteCssLinks()`, `injectRouteCssIntoHtml()`
|
|
179
|
+
- `withTailwindStyled` write `css-manifest.json` ke `.next/static/css/tw/`
|
|
180
|
+
- Dynamic route CSS: `[id]`, `[...slug]` dengan cache per params kombinasi
|
|
251
181
|
|
|
252
182
|
### Tests
|
|
253
|
-
- `packages/domain/testing/test/v43-v45.test.mjs` — 28 tests covering shared package, audit, AI provider, preflight
|
|
254
183
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
- `scripts/v49/critical-css.mjs` — upgraded: real CSS rule parsing, `--inline`, `--out=file`, id/tag/class extraction, savedPercent metric
|
|
258
|
-
- `scripts/v48/lint-parallel.mjs` — `--format=sarif` (SARIF 2.1 untuk GitHub Code Scanning), `--fix` auto-deduplicate duplicate classes
|
|
259
|
-
- `scripts/v46/parse.mjs` — bugfix: regex fallback sekarang mengekstrak kelas dari `twMerge()`, `cn()`, `cx()`, `clsx()` calls
|
|
260
|
-
- `packages/infrastructure/vscode/package.json` — tambah keybindings (Ctrl+Shift+T/N/S), `configuration` settings, `menus` context
|
|
261
|
-
- `packages/domain/shared/tsconfig.json` — tsconfig untuk build
|
|
262
|
-
- `.github/workflows/benchmark.yml` — sprint2-bench, plugin-registry SLO, toolchain benchmark
|
|
263
|
-
- `scripts/validate/dependency-matrix-check.mjs` — validasi packages baru v4.2
|
|
264
|
-
- `packages/infrastructure/cli/src/index.ts` — fix preflight handler (hapus `--input-type=module` orphan)
|
|
265
|
-
- `docs/known-limitations/` — update status aktual untuk tw-lint, tw-split-optimize, tw-v50
|
|
184
|
+
- `v43-v45.test.mjs` — 28 tests: shared package, audit, AI provider, preflight
|
|
185
|
+
- `sprint7.test.mjs` — 30 tests, semua pass
|
|
266
186
|
|
|
267
187
|
---
|
|
268
188
|
|
|
269
|
-
##
|
|
270
|
-
|
|
271
|
-
### New Features
|
|
189
|
+
## [4.2.0] — Sprint 1 & 2 — 2026-03-15
|
|
272
190
|
|
|
273
|
-
|
|
274
|
-
- `scripts/v45/registry.mjs` — Lightweight local/team HTTP registry server
|
|
275
|
-
- `tw deploy --registry=http://localhost:4040` — Real HTTP publish ke registry
|
|
276
|
-
- `tw registry serve|list|info` — Manage registry dari CLI
|
|
277
|
-
- Token auth via `TW_REGISTRY_TOKEN` env var
|
|
191
|
+
### Packages Baru
|
|
278
192
|
|
|
279
|
-
|
|
280
|
-
-
|
|
281
|
-
-
|
|
282
|
-
-
|
|
193
|
+
- **`@tailwind-styled/vue`** — Vue 3: `tw()`, `cv()`, `extend()`, `TailwindStyledPlugin`
|
|
194
|
+
- **`@tailwind-styled/svelte`** — Svelte 4/5: `cv()`, `tw()`, `use:styled`, `createVariants()` (Svelte 5 runes)
|
|
195
|
+
- **`@tailwind-styled/testing`** — `expectClasses()`, `expandVariantMatrix()`, `testAllVariants()`, Jest/Vitest matchers
|
|
196
|
+
- **`@tailwind-styled/storybook-addon`** — `generateArgTypes()`, `withTailwindStyled()` decorator
|
|
197
|
+
- **`@tailwind-styled/dashboard`** — Live metrics server, file-watch IPC, HTML UI dengan build history chart
|
|
198
|
+
- **`@tailwind-styled/plugin-registry`** — `tw-plugin search/install/list` CLI, 4 official + 2 community plugins
|
|
283
199
|
|
|
284
|
-
|
|
285
|
-
- `tw sync pull --from=https://cdn.example.com/tokens.json` — HTTP/HTTPS URL pull
|
|
286
|
-
- `tw sync push --to-url=https://api.example.com/tokens` — HTTP push ke endpoint
|
|
287
|
-
- Figma subcommand sekarang tersedia: `tw sync figma pull|push|diff`
|
|
200
|
+
### Fitur Compiler
|
|
288
201
|
|
|
289
|
-
|
|
290
|
-
- `
|
|
291
|
-
- `
|
|
292
|
-
-
|
|
202
|
+
- `tw parse <file>` — 3-tier AST: `oxc-parser` → `@babel/parser` → regex. Extract dari JSX, template literal, `twMerge()`, `cn()`, `clsx()`
|
|
203
|
+
- `tw shake <css>` — Real tree shaking berbasis CSS selector analysis, support `@layer`, `@media`
|
|
204
|
+
- `tw optimize <file>` — Constant folding, class deduplication, `twMerge` literal pre-computation
|
|
205
|
+
- LSP server (`tw lsp`) — hover, completion (Tailwind autocomplete), diagnostics via `vscode-languageserver`
|
|
206
|
+
- `tw cluster build` — `worker_threads` pool, throughput report (files/sec)
|
|
293
207
|
|
|
294
|
-
|
|
295
|
-
- `routeCss: true` option di `tailwindStyledPlugin()` — run split-routes + shake per route
|
|
296
|
-
- `routeCssDir` — konfigurasi output dir
|
|
297
|
-
- `deadStyleElimination: true` — shake setiap route CSS chunk
|
|
208
|
+
### Tests
|
|
298
209
|
|
|
299
|
-
|
|
300
|
-
- `
|
|
301
|
-
- `packages/infrastructure/studio-desktop/src/updater.js` — electron-updater integration (GitHub Releases)
|
|
302
|
-
- Auto-update check 10 detik setelah startup, manual via Tools menu
|
|
210
|
+
- 6 test suites baru, 78 unit tests + 9 integration tests
|
|
211
|
+
- `scripts/benchmark/sprint2-bench.mjs` — parse/shake/cluster metrics ke `docs/benchmark/sprint2-results.json`
|
|
303
212
|
|
|
304
213
|
---
|
|
305
214
|
|
|
306
|
-
##
|
|
307
|
-
|
|
308
|
-
### Tarball Registry (npm-compatible)
|
|
309
|
-
- `scripts/v45/registry-tarball.mjs` — `tw registry publish` buat + upload tarball, `tw install <pkg>` download + install, `tw registry versions <pkg>` list versions
|
|
310
|
-
- `scripts/v45/registry.mjs` — upgrade: PUT `/packages/:name` endpoint, GET `/packages/:name/versions`, GET `/packages/:name/-/:tarball.tgz`, tarball storage di `tarballs/`, version history di `.versions.json`
|
|
311
|
-
- `tw install` shorthand command di CLI
|
|
312
|
-
|
|
313
|
-
### RSC Auto-inject
|
|
314
|
-
- `packages/domain/compiler/src/rscAnalyzer.ts` — export `detectRSCBoundary()` dan `autoInjectClientBoundary()` sebagai public API Sprint 7
|
|
315
|
-
- `packages/presentation/next/src/webpackLoader.ts` — import rscAnalyzer, auto-inject `"use client"` berdasarkan `analyzeFile()` analysis
|
|
316
|
-
- `packages/presentation/next/src/turbopackLoader.ts` — import rscAnalyzer (Sprint 7 alignment)
|
|
215
|
+
## [4.5.0] — Implementation Session — 2026-04
|
|
317
216
|
|
|
318
|
-
###
|
|
319
|
-
- `scripts/v45/figma-multi.mjs` — pull dari multiple Figma files (`--file=key1,key2`), mode selection (`--mode=dark`), diff antar mode (`diff --from=light --to=dark`), `modes` command untuk list available modes
|
|
320
|
-
- `tw sync figma` CLI otomatis route ke `figma-multi.mjs` jika ada `--file=`, `--mode=`, atau `modes` command
|
|
217
|
+
### Bug Fixes
|
|
321
218
|
|
|
322
|
-
|
|
323
|
-
- `
|
|
324
|
-
-
|
|
325
|
-
-
|
|
219
|
+
- VSCode Extension: `extension.ts` pakai `completionProvider.ts` dan `hoverProvider.ts` yang benar (sebelumnya inline hardcoded)
|
|
220
|
+
- CLI scan: flag `--save` menulis `.tailwind-styled/scan-cache.json` format lengkap untuk VSCode EngineService
|
|
221
|
+
- `TWS_DISABLE_NATIVE` env var dikenali di `nativeBridge.ts` dan `nativeBinding.ts`
|
|
222
|
+
- `TwError` upgrade: `fromZod()`, `source`, `originalCause`, `toJSON()`, `toCliMessage()`
|
|
223
|
+
- `ReverseLookup`: `clearCache()`, `pruneCache()`, `MAX_CACHE_BYTES` untuk mencegah memory leak
|
|
224
|
+
- `cssToIr`: `createIdGenerator()` factory — eliminasi race condition
|
|
225
|
+
- DSE: `runDeadStyleElimination()` sekarang memanggil `eliminateDeadCss` + `optimizeCss`
|
|
226
|
+
- `CvFn/TwComponentFactory`: eliminasi `any`, proper generics dengan `InferVariantProps<C>`
|
|
227
|
+
- `extend()`: overload baru support `extend({ classes, variants })` dalam satu call
|
|
228
|
+
- `astTransform`: `mode` option dihapus dari destructuring
|
|
326
229
|
|
|
327
|
-
###
|
|
328
|
-
- `scripts/v47/minify.mjs` — 3-tier: oxc-minify (mangle+dead-code+compress) → esbuild (transform) → regex fallback
|
|
329
|
-
- Opsi: `--mangle`, `--dead-code`, `--comments=false`, `--target=`, `--json`, `--write`, `--out=`
|
|
330
|
-
- Report: mode, original/minified bytes, reduction%, durationMs
|
|
331
|
-
|
|
332
|
-
### Tests
|
|
333
|
-
- `packages/domain/testing/test/sprint7.test.mjs` — 30 tests, semua pass
|
|
334
|
-
|
|
335
|
-
---
|
|
336
|
-
|
|
337
|
-
## Sprint 8 (2026-03-16)
|
|
230
|
+
### Added
|
|
338
231
|
|
|
339
|
-
|
|
340
|
-
-
|
|
341
|
-
-
|
|
342
|
-
-
|
|
343
|
-
-
|
|
232
|
+
- Zod schemas untuk semua native binding responses (`native-schemas.ts`)
|
|
233
|
+
- Engine facade: `scanWorkspace()`, `analyzeWorkspace()`, `generateSafelist()`, `build()`
|
|
234
|
+
- `CONTRIBUTING.md`: section "Berkontribusi tanpa Rust"
|
|
235
|
+
- `docs/api/engine.md`, `analyzer.md`, `cli.md`
|
|
236
|
+
- `.github/workflows/plugin-registry-test.yml` matrix CI
|
|
237
|
+
- `tsconfig.build.json` + `tsconfig.dev.json` — separation of concerns
|
|
344
238
|
|
|
345
|
-
###
|
|
346
|
-
- `--rules=path/to/rules.json` — load custom rules dari file JSON
|
|
347
|
-
- `.tw-lint.json` di CWD auto-loaded tanpa flag
|
|
348
|
-
- `--rule="pattern:message"` — inline custom rule (repeatable)
|
|
349
|
-
- Rule format: `{ id, pattern, message, severity: "error"|"warning" }`
|
|
350
|
-
- Output report: `customRulesLoaded` field
|
|
239
|
+
### Tests Ditambah
|
|
351
240
|
|
|
352
|
-
|
|
353
|
-
-
|
|
354
|
-
- `--severity=error|warning` — set minimum severity yang memicu exit code 1
|
|
355
|
-
- Output report: `noExit0` dan `severity` fields
|
|
241
|
+
- **39 test files baru**, **318 test cases** baru
|
|
242
|
+
- Coverage: semua domain packages, semua adapters, Vue, Svelte, CLI, infrastructure
|
|
356
243
|
|
|
357
244
|
---
|
|
358
245
|
|
|
359
|
-
##
|
|
246
|
+
## [2.0.0] — Major Upgrade (Compiler-Driven)
|
|
360
247
|
|
|
361
|
-
###
|
|
362
|
-
- `packages/infrastructure/studio-desktop/src/icons/tray.png` + `tray@2x.png` — gradient blue-to-teal PNG icon
|
|
363
|
-
- `createTray()` fully implemented: `new Tray(iconPath)`, tooltip, context menu
|
|
364
|
-
- Context menu: Open Studio, Open in Browser, separator, project name, Quit
|
|
365
|
-
- `tray.on("click")` — toggle window visibility
|
|
366
|
-
- `tray.on("double-click")` — focus window
|
|
248
|
+
### Breaking Changes
|
|
367
249
|
|
|
368
|
-
|
|
369
|
-
- `
|
|
370
|
-
-
|
|
371
|
-
-
|
|
372
|
-
- `tw plugin marketplace` + `tw plugin publish` commands di CLI
|
|
250
|
+
- Hapus dependency `styled-components`
|
|
251
|
+
- Hapus `styledFactory`, `shouldForwardProp`, `blockProp`, `allowProp`
|
|
252
|
+
- Hapus `propEngine`, `responsiveEngine` — dipindahkan ke compiler
|
|
253
|
+
- Hapus `ThemeContext`
|
|
373
254
|
|
|
374
|
-
###
|
|
375
|
-
- Hybrid strategy: `.vue/.svelte/.mdx/.html` → regex-direct (skip Babel, faster)
|
|
376
|
-
- `extractFromVue()` — extract `<script>` + `class=` from template
|
|
377
|
-
- `extractFromSvelte()` — extract `<script>` + `class=` / `class:directive`
|
|
378
|
-
- `extractFromMdx()` — extract JSX blocks + imports
|
|
379
|
-
- `.js/.jsx/.ts/.tsx` tetap Oxc-first → Babel → regex
|
|
255
|
+
### Features
|
|
380
256
|
|
|
381
|
-
|
|
382
|
-
-
|
|
383
|
-
-
|
|
257
|
+
- **Zero-runtime output** — `tw.div\`...\`` dikompilasi ke pure `React.forwardRef`
|
|
258
|
+
- **Compiler-driven variants** — dikompilasi ke static lookup table
|
|
259
|
+
- **RSC-aware** — auto detect server vs client components
|
|
260
|
+
- **`withTailwindStyled()`** — Next.js plugin dengan Turbopack + Webpack support
|
|
261
|
+
- **`tailwindStyledPlugin()`** — Vite 5+ support
|
|
384
262
|
|
|
385
263
|
---
|
|
386
264
|
|
|
387
|
-
##
|
|
388
|
-
|
|
389
|
-
### tw lint — Tailwind config custom rules validation
|
|
390
|
-
- `loadTailwindConfigClasses()` — static analysis dari `tailwind.config.js/ts/mjs/cjs`
|
|
391
|
-
- Ekstrak: `addUtilities()`, `addComponents()`, `extend:` theme keys
|
|
392
|
-
- Config classes suppress false-positive deprecated warnings
|
|
393
|
-
- `knownConfigClasses` diteruskan ke worker threads via `workerData`
|
|
394
|
-
|
|
395
|
-
### Registry — npm packument protocol
|
|
396
|
-
- `GET /:name` endpoint — returns npm packument format: `dist-tags`, `versions`, `dist.tarball`
|
|
397
|
-
- Compatible dengan `npm install --registry=http://localhost:4040`
|
|
398
|
-
- `tw registry help` command added
|
|
265
|
+
## Roadmap
|
|
399
266
|
|
|
400
|
-
###
|
|
401
|
-
- `startLspServer()` / `stopLspServer()` — manage `lsp.mjs` process lifecycle
|
|
402
|
-
- Reads `tailwindStyled.lsp.enable` setting (default: true)
|
|
403
|
-
- Auto-restart on settings change via `onDidChangeConfiguration`
|
|
404
|
-
- Clean shutdown di `deactivate()`
|
|
267
|
+
### v5 (target: ~8 minggu)
|
|
405
268
|
|
|
406
|
-
|
|
407
|
-
- `tw sync pull --from=s3://bucket/key` — resolve via `AWS_ENDPOINT_URL` → HTTP
|
|
408
|
-
- Native `@aws-sdk/client-s3` fallback jika available
|
|
409
|
-
- Helpful error message jika tidak ada credentials
|
|
269
|
+
Berdasarkan `compiler-v5-upgrade-plan.md`:
|
|
410
270
|
|
|
411
|
-
|
|
412
|
-
-
|
|
413
|
-
-
|
|
414
|
-
-
|
|
271
|
+
- [ ] Hapus semua JS fallback — Rust native only wajib
|
|
272
|
+
- [ ] Pangkas 120+ exports compiler → ~20 public API
|
|
273
|
+
- [ ] Hapus `mode` option — zero-runtime only
|
|
274
|
+
- [ ] Hapus Tailwind v3 support — v4 only
|
|
275
|
+
- [ ] Integrasikan DSE ke pipeline utama (sekarang masih standalone)
|
|
276
|
+
- [ ] Pisahkan atomic CSS ke `@tailwind-styled/atomic` (sudah ada packagenya)
|
|
277
|
+
- [ ] E2E + integration tests
|
|
415
278
|
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
## Sprint 10+ (2026-03-16)
|
|
419
|
-
|
|
420
|
-
### Manifest dev mode serving
|
|
421
|
-
- `withTailwindStyled({ devManifest: true })` — default aktif di dev mode
|
|
422
|
-
- Next.js rewrites: `/__tw/css-manifest.json` → `.next/static/css/tw/css-manifest.json`
|
|
423
|
-
- `/__tw/:path*.css` → route CSS chunks di `.next/static/css/tw/`
|
|
424
|
-
- `routeCssMiddleware` — tambah `public/__tw/` sebagai path candidate
|
|
425
|
-
|
|
426
|
-
### Plugin registry checksum & auto-update
|
|
427
|
-
- `PluginRegistry.verifyIntegrity(name)` — sha256 hash comparison
|
|
428
|
-
- `PluginRegistry.checkForUpdate(name)` — semver diff vs installed version
|
|
429
|
-
- `PluginRegistry.checkAllUpdates()` — batch update check semua plugins
|
|
430
|
-
- CLI: `tw plugin update-check` + `tw plugin verify <name>` (+ `--json`)
|
|
431
|
-
|
|
432
|
-
### CSS generation heading fix (tw-v50.md)
|
|
433
|
-
- Heading diupdate: "Output hanya classCount — full CSS generation Sprint 10+" → "CSS Generation — cluster output Sprint 10+"
|
|
434
|
-
- Workaround diperjelas: `tw cluster build src/ && tw split src/ artifacts/route-css`
|
|
435
|
-
|
|
436
|
-
## [Implementation Session 2026-04] — Major Test Coverage + Bug Fixes
|
|
437
|
-
|
|
438
|
-
### Fixed
|
|
439
|
-
- **VSCode Extension**: `extension.ts` sekarang menggunakan `providers/completionProvider.ts` dan `hoverProvider.ts` yang benar (sebelumnya inline hardcoded)
|
|
440
|
-
- **CLI scan**: flag `--save` menulis `.tailwind-styled/scan-cache.json` dengan format lengkap untuk VSCode EngineService
|
|
441
|
-
- **RC Gate workflow**: referensi `.mjs` yang broken diganti dengan runner yang benar
|
|
442
|
-
- **TWS_DISABLE_NATIVE**: env var sekarang dikenali di `nativeBridge.ts` dan `nativeBinding.ts`
|
|
443
|
-
- **TwError**: upgrade dengan `fromZod()`, `source`, `originalCause`, `toJSON()`, `toCliMessage()`
|
|
444
|
-
- **ReverseLookup**: `clearCache()`, `pruneCache()`, MAX_CACHE_BYTES untuk mencegah memory leak (QA #33)
|
|
445
|
-
- **cssToIr**: `createIdGenerator()` factory pattern — eliminasi race condition (QA #32)
|
|
446
|
-
- **DSE**: `runDeadStyleElimination()` sekarang memanggil `eliminateDeadCss` + `optimizeCss` (Phase 3 compiler v5)
|
|
447
|
-
- **ImpactTracker**: `analyzeWithBundle()` dan `analyzeAll()` — bundleAnalyzer sekarang digunakan
|
|
448
|
-
- **CvFn/TwComponentFactory**: eliminasi `any`, proper generics dengan `InferVariantProps<C>` (CRITIQUE-20 #1)
|
|
449
|
-
- **extend()**: overload baru yang support `extend({ classes, variants })` dalam satu call (CRITIQUE-20 #2)
|
|
450
|
-
- **CLI prototype commands**: graceful handler dengan info berguna daripada crash
|
|
451
|
-
- **CLI docs**: label prototype di help dengan path script
|
|
452
|
-
- **test fixtures**: `generate.mjs` ESM rewrite (QA #30)
|
|
453
|
-
- **tsconfig**: pisahkan `tsconfig.build.json` (tanpa path aliases) dan `tsconfig.dev.json` (QA #24)
|
|
454
|
-
- **astParser**: zero-let — `loadOxcParseSync()` factory
|
|
455
|
-
- **astTransform**: `mode` option dihapus dari destructuring
|
|
279
|
+
### v6 (setelah v5 stabil)
|
|
456
280
|
|
|
457
|
-
|
|
458
|
-
-
|
|
459
|
-
-
|
|
460
|
-
-
|
|
461
|
-
-
|
|
462
|
-
- `CONTRIBUTING.md`: section "Berkontribusi tanpa Rust" (CRITIQUE-20 #20)
|
|
463
|
-
- `docs/plugin-registry.md`: complete documentation (Track B Issue 7)
|
|
464
|
-
- `docs/api/engine.md`, `analyzer.md`, `cli.md`: English translation
|
|
465
|
-
- `artifacts/.gitkeep`: scaffold untuk RC gate artifacts
|
|
466
|
-
- `.github/workflows/plugin-registry-test.yml`: matrix CI (Track B Issue 1)
|
|
467
|
-
- `tsconfig.build.json`, `tsconfig.dev.json`: separation of concerns (QA #24)
|
|
468
|
-
|
|
469
|
-
### Tests Added (39 test files, 318 test cases)
|
|
470
|
-
- `packages/domain/shared/tests/`: errors, hash, cache, nativeBinding, native-schemas
|
|
471
|
-
- `packages/domain/compiler/tests/`: transformSource, extractAllClasses, incrementalEngine, variants, dse
|
|
472
|
-
- `packages/domain/engine/tests/`: facade functions
|
|
473
|
-
- `packages/domain/scanner/tests/`: isScannableFile, scanFile, scanWorkspace
|
|
474
|
-
- `packages/domain/analyzer/tests/`: classToCss, analyzeWorkspace
|
|
475
|
-
- `packages/domain/atomic/tests/`: parseAtomicClass, generateAtomicCss, toAtomicClasses
|
|
476
|
-
- `packages/domain/preset/tests/`: defaultPreset, designTokens, generateTailwindCss
|
|
477
|
-
- `packages/domain/plugin-registry/__tests__/`: 20 integration tests
|
|
478
|
-
- `packages/domain/plugin-registry/benchmark/`: SLO benchmark
|
|
479
|
-
- `packages/presentation/vue/__tests__/`: cv(), tw(), extend()
|
|
480
|
-
- `packages/presentation/svelte/__tests__/`: cv(), tw()
|
|
481
|
-
- `packages/domain/testing/__tests__/`: all matchers (18 tests)
|
|
482
|
-
- `packages/infrastructure/storybook-addon/tests/`: generateArgTypes, enumerateVariantProps (18 tests)
|
|
483
|
-
- `packages/domain/theme/tests/`: liveToken, tokenRef, tokenVar, ThemeRegistry
|
|
484
|
-
- `packages/domain/runtime-css/tests/`: batchedInjector
|
|
485
|
-
- `packages/domain/runtime/tests/`: cx(), createComponent
|
|
486
|
-
- `packages/presentation/vite/tests/`: tailwindStyledPlugin
|
|
487
|
-
- `packages/presentation/next/tests/`: withTailwindStyled
|
|
488
|
-
- `packages/presentation/rspack/tests/`: TailwindStyledRspackPlugin
|
|
489
|
-
- `packages/infrastructure/cli/tests/`: scan (--save), preflight, args
|
|
490
|
-
- `packages/domain/plugin-api/tests/`: createPluginRegistry, createPluginContext
|
|
491
|
-
- `packages/domain/plugin/tests/`: createTwPlugin, registerTransform
|
|
492
|
-
- `packages/domain/animate/tests/`: AnimationRegistry, animate, compileAnimation
|
|
493
|
-
- `packages/infrastructure/dashboard/tests/`: state, metrics, normalizeMetrics
|
|
494
|
-
- `packages/infrastructure/devtools/tests/`: exports
|
|
495
|
-
- `packages/domain/core/tests/`: cv(), cx(), cxm()
|
|
496
|
-
- `packages/domain/syntax/tests/`: parseClasses(), extractAllClasses()
|
|
497
|
-
- `tests/smoke/`: root-imports, pipeline, adapters
|
|
281
|
+
- [ ] Docs website
|
|
282
|
+
- [ ] HMR di adapter Next.js (sudah ada di Vite)
|
|
283
|
+
- [ ] macOS & Windows binary publish ke npm (CI matrix sudah ready)
|
|
284
|
+
- [ ] Plugin starter/codegen
|
|
285
|
+
- [ ] devtools traces lintas tooling
|