tailwind-styled-v4 5.0.11 → 5.0.12

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.
Files changed (107) hide show
  1. package/dist/{analyzeWorkspace-DDOQdzzI.d.ts → analyzeWorkspace-CopJNGmi.d.ts} +2 -0
  2. package/dist/{analyzeWorkspace-BS5O4rhC.d.mts → analyzeWorkspace-DpVPccjz.d.mts} +2 -0
  3. package/dist/analyzer.d.mts +4 -4
  4. package/dist/analyzer.d.ts +4 -4
  5. package/dist/analyzer.js +34 -69
  6. package/dist/analyzer.js.map +1 -1
  7. package/dist/analyzer.mjs +33 -68
  8. package/dist/analyzer.mjs.map +1 -1
  9. package/dist/animate.js +11 -11
  10. package/dist/animate.js.map +1 -1
  11. package/dist/animate.mjs +11 -11
  12. package/dist/animate.mjs.map +1 -1
  13. package/dist/atomic.js +16 -7
  14. package/dist/atomic.js.map +1 -1
  15. package/dist/atomic.mjs +16 -7
  16. package/dist/atomic.mjs.map +1 -1
  17. package/dist/cli.js +262 -190
  18. package/dist/cli.js.map +1 -1
  19. package/dist/cli.mjs +259 -187
  20. package/dist/cli.mjs.map +1 -1
  21. package/dist/compiler.d.mts +2543 -109
  22. package/dist/compiler.d.ts +2543 -109
  23. package/dist/compiler.js +1962 -435
  24. package/dist/compiler.js.map +1 -1
  25. package/dist/compiler.mjs +1816 -382
  26. package/dist/compiler.mjs.map +1 -1
  27. package/dist/devtools.js +17 -4
  28. package/dist/devtools.js.map +1 -1
  29. package/dist/devtools.mjs +17 -4
  30. package/dist/devtools.mjs.map +1 -1
  31. package/dist/engine.d.mts +11 -470
  32. package/dist/engine.d.ts +11 -470
  33. package/dist/engine.js +1442 -417
  34. package/dist/engine.js.map +1 -1
  35. package/dist/engine.mjs +1442 -417
  36. package/dist/engine.mjs.map +1 -1
  37. package/dist/index-BDQw13kn.d.ts +464 -0
  38. package/dist/index-DJv28Uzq.d.mts +464 -0
  39. package/dist/index.browser.mjs +143 -255
  40. package/dist/index.browser.mjs.map +1 -1
  41. package/dist/index.d.mts +23 -39
  42. package/dist/index.d.ts +23 -39
  43. package/dist/index.js +6000 -1463
  44. package/dist/index.js.map +1 -1
  45. package/dist/index.mjs +5995 -1458
  46. package/dist/index.mjs.map +1 -1
  47. package/dist/next.d.mts +44 -1
  48. package/dist/next.d.ts +44 -1
  49. package/dist/next.js +3197 -1128
  50. package/dist/next.js.map +1 -1
  51. package/dist/next.mjs +3196 -1129
  52. package/dist/next.mjs.map +1 -1
  53. package/dist/rspack.d.mts +9 -0
  54. package/dist/rspack.d.ts +9 -0
  55. package/dist/rspack.js +99 -61
  56. package/dist/rspack.js.map +1 -1
  57. package/dist/rspack.mjs +99 -61
  58. package/dist/rspack.mjs.map +1 -1
  59. package/dist/runtime-css.d.mts +8 -0
  60. package/dist/runtime-css.d.ts +8 -0
  61. package/dist/runtime-css.js +23 -7
  62. package/dist/runtime-css.js.map +1 -1
  63. package/dist/runtime-css.mjs +23 -7
  64. package/dist/runtime-css.mjs.map +1 -1
  65. package/dist/scanner.js +16 -37
  66. package/dist/scanner.js.map +1 -1
  67. package/dist/scanner.mjs +15 -36
  68. package/dist/scanner.mjs.map +1 -1
  69. package/dist/shared.d.mts +107 -1
  70. package/dist/shared.d.ts +107 -1
  71. package/dist/shared.js +1627 -376
  72. package/dist/shared.js.map +1 -1
  73. package/dist/shared.mjs +1620 -354
  74. package/dist/shared.mjs.map +1 -1
  75. package/dist/svelte.js +39 -35
  76. package/dist/svelte.js.map +1 -1
  77. package/dist/svelte.mjs +38 -34
  78. package/dist/svelte.mjs.map +1 -1
  79. package/dist/theme.js +85 -76
  80. package/dist/theme.js.map +1 -1
  81. package/dist/theme.mjs +83 -74
  82. package/dist/theme.mjs.map +1 -1
  83. package/dist/turbopackLoader.js +943 -76
  84. package/dist/turbopackLoader.js.map +1 -1
  85. package/dist/turbopackLoader.mjs +943 -76
  86. package/dist/turbopackLoader.mjs.map +1 -1
  87. package/dist/tw.js +262 -190
  88. package/dist/tw.js.map +1 -1
  89. package/dist/tw.mjs +259 -187
  90. package/dist/tw.mjs.map +1 -1
  91. package/dist/vite.js +1336 -296
  92. package/dist/vite.js.map +1 -1
  93. package/dist/vite.mjs +1336 -296
  94. package/dist/vite.mjs.map +1 -1
  95. package/dist/vue.js +39 -35
  96. package/dist/vue.js.map +1 -1
  97. package/dist/vue.mjs +38 -34
  98. package/dist/vue.mjs.map +1 -1
  99. package/dist/webpackLoader.js +140 -34
  100. package/dist/webpackLoader.js.map +1 -1
  101. package/dist/webpackLoader.mjs +140 -34
  102. package/dist/webpackLoader.mjs.map +1 -1
  103. package/native/index.node +0 -0
  104. package/native/tailwind-styled-native.node +0 -0
  105. package/native/tailwind-styled-native.win32-x64-msvc.node +0 -0
  106. package/package.json +9 -4
  107. package/CHANGELOG.md +0 -285
@@ -1 +1 @@
1
- {"version":3,"sources":["../packages/domain/shared/src/native-resolution.ts","../packages/domain/shared/src/index.ts","../packages/domain/compiler/src/nativeBridge.ts","../packages/domain/compiler/src/index.ts","../packages/presentation/next/src/turbopackLoader.ts"],"names":["fs","path","createRequire","fileURLToPath"],"mappings":"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","file":"turbopackLoader.js","sourcesContent":["/**\r\n * Prebuilt binary resolution untuk native NAPI bindings.\r\n * QA #1: Resolve native binary dari prebuilt packages atau local build.\r\n *\r\n * Prioritas:\r\n * 1. TW_NATIVE_PATH env var (explicit override)\r\n * 2. Prebuilt binary dari platform-specific npm package\r\n * 3. Local build dari source (developer mode)\r\n */\r\n\r\nimport { createRequire } from \"node:module\"\r\nimport * as fs from \"node:fs\"\r\nimport * as path from \"node:path\"\r\n\r\nconst isBrowser = typeof window !== \"undefined\" || typeof document !== \"undefined\"\r\n\r\n// ESM-safe require — works in both ESM and CJS contexts\r\nconst _require = typeof require !== \"undefined\" ? require : createRequire(import.meta.url)\r\n\r\nexport interface NativeResolutionResult {\r\n path: string | null\r\n source: \"env\" | \"prebuilt\" | \"local\" | \"not-found\"\r\n platform: string\r\n tried: string[]\r\n}\r\n\r\n/** Platform key → prebuilt npm package name */\r\nconst PLATFORM_MAP: Record<string, string[]> = {\r\n \"linux-x64\": [\"@tailwind-styled/native-linux-x64-gnu\", \"@tailwind-styled/native-linux-x64\"],\r\n \"linux-arm64\": [\"@tailwind-styled/native-linux-arm64-gnu\", \"@tailwind-styled/native-linux-arm64\"],\r\n \"darwin-x64\": [\"@tailwind-styled/native-darwin-x64\"],\r\n \"darwin-arm64\": [\"@tailwind-styled/native-darwin-arm64\"],\r\n \"win32-x64\": [\"@tailwind-styled/native-win32-x64-msvc\", \"@tailwind-styled/native-win32-x64\"],\r\n \"win32-arm64\": [\"@tailwind-styled/native-win32-arm64-msvc\", \"@tailwind-styled/native-win32-arm64\"],\r\n}\r\n\r\nfunction platformKey(): string {\r\n if (isBrowser) return \"browser\"\r\n return `${process.platform}-${process.arch}`\r\n}\r\n\r\n/**\r\n * Resolve native binary path dari semua sumber yang tersedia.\r\n *\r\n * @example\r\n * const result = resolveNativeBinary()\r\n * if (result.path) {\r\n * const binding = require(result.path)\r\n * } else {\r\n * throw new Error(\"Native binding not found — run npm run build:rust\")\r\n * }\r\n */\r\nexport function resolveNativeBinary(runtimeDir?: string): NativeResolutionResult {\r\n const platform = platformKey()\r\n const tried: string[] = []\r\n\r\n if (isBrowser) {\r\n return { path: null, source: \"not-found\", platform, tried: [\"not available in browser\"] }\r\n }\r\n\r\n // 0. Disabled flag — always short-circuit before any I/O\r\n if (process.env.TWS_DISABLE_NATIVE === \"1\") {\r\n return { path: null, source: \"not-found\", platform, tried: [] }\r\n }\r\n\r\n // 1. Env var override\r\n const envPath = process.env.TW_NATIVE_PATH?.trim()\r\n if (envPath) {\r\n if (fs.existsSync(envPath)) {\r\n return { path: envPath, source: \"env\", platform, tried }\r\n }\r\n tried.push(`env:${envPath} (not found)`)\r\n }\r\n\r\n // 2. Prebuilt binary dari platform-specific npm package\r\n const prebuiltPkgs = PLATFORM_MAP[platform] ?? []\r\n for (const pkg of prebuiltPkgs) {\r\n try {\r\n const candidate = _require.resolve(`${pkg}/tailwind_styled_parser.node`)\r\n if (fs.existsSync(candidate)) {\r\n return { path: candidate, source: \"prebuilt\", platform, tried }\r\n }\r\n tried.push(`prebuilt:${pkg} (resolved but missing)`)\r\n } catch {\r\n tried.push(`prebuilt:${pkg} (not installed)`)\r\n }\r\n }\r\n\r\n // 2b. .node file bundled inside this package itself (via \"files\": [\"native/*.node\"])\r\n // Covers the case where user installs tailwind-styled-v4 directly from npm\r\n // and the .node file lands at node_modules/tailwind-styled-v4/native/*.node\r\n const napiPlatform = platform === \"linux-x64\" ? \"linux-x64-gnu\"\r\n : platform === \"linux-arm64\" ? \"linux-arm64-gnu\"\r\n : platform\r\n const BINARY_NAMES_SELF = [\"tailwind-styled-native\", \"tailwind_styled_parser\"]\r\n if (runtimeDir) {\r\n // runtimeDir is typically dist/ — go up to package root, then into native/\r\n for (const depth of [\"..\", path.join(\"..\", \"..\"), path.join(\"..\", \"..\", \"..\")]) {\r\n const pkgRoot = path.resolve(runtimeDir, depth)\r\n for (const bin of BINARY_NAMES_SELF) {\r\n for (const suffix of [\"\", `.${platform}`, `.${napiPlatform}`]) {\r\n const candidate = path.resolve(pkgRoot, \"native\", `${bin}${suffix}.node`)\r\n tried.push(`self-bundled:${candidate}`)\r\n if (fs.existsSync(candidate)) {\r\n return { path: candidate, source: \"prebuilt\", platform, tried }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // 3. Local build candidates\r\n const cwd = process.cwd()\r\n const base = runtimeDir ?? cwd\r\n // napi-rs naming: platform key may have -gnu suffix on Linux (already computed above)\r\n\r\n // Both possible binary names:\r\n // - \"tailwind_styled_parser\" (old hardcoded name in resolvers)\r\n // - \"tailwind-styled-native\" (actual binaryName in native/package.json)\r\n const BINARY_NAMES = [\"tailwind-styled-native\", \"tailwind_styled_parser\"]\r\n\r\n const localCandidates: string[] = []\r\n\r\n for (const bin of BINARY_NAMES) {\r\n localCandidates.push(path.resolve(base, `${bin}.node`))\r\n localCandidates.push(path.resolve(base, \"..\", `${bin}.node`))\r\n localCandidates.push(path.resolve(base, `${bin}.${platform}.node`))\r\n localCandidates.push(path.resolve(base, `${bin}.${napiPlatform}.node`))\r\n }\r\n\r\n // Walk up from cwd AND base to find repo root native/ dir\r\n // Needed when npm workspaces sets cwd to the package subdir\r\n for (const startDir of [cwd, base]) {\r\n let dir = startDir\r\n for (let i = 0; i < 6; i++) {\r\n const nativeDir = path.resolve(dir, \"native\")\r\n for (const bin of BINARY_NAMES) {\r\n localCandidates.push(path.resolve(nativeDir, `${bin}.node`))\r\n localCandidates.push(path.resolve(nativeDir, `${bin}.${platform}.node`))\r\n localCandidates.push(path.resolve(nativeDir, `${bin}.${napiPlatform}.node`))\r\n localCandidates.push(path.resolve(nativeDir, \"target\", \"release\", `${bin}.node`))\r\n }\r\n const parent = path.resolve(dir, \"..\")\r\n if (parent === dir) break\r\n dir = parent\r\n }\r\n }\r\n\r\n for (const candidate of localCandidates) {\r\n tried.push(`local:${candidate}`)\r\n if (fs.existsSync(candidate)) {\r\n return { path: candidate, source: \"local\", platform, tried }\r\n }\r\n }\r\n\r\n return { path: null, source: \"not-found\", platform, tried }\r\n}\r\n\r\n/**\r\n * Format human-readable error untuk \"binary not found\".\r\n */\r\nexport function formatNativeNotFoundError(result: NativeResolutionResult): string {\r\n const lines = [\r\n `[tailwind-styled] Native binding not found for ${result.platform}`,\r\n ``,\r\n `Tried:`,\r\n ...result.tried.map(t => ` - ${t}`),\r\n ``,\r\n `Solutions:`,\r\n ` 1. Build locally: npm run build:rust`,\r\n ` 2. Install prebuilt: npm install @tailwind-styled/native-${result.platform}`,\r\n ` 3. Override path: TW_NATIVE_PATH=/path/to/parser.node`,\r\n ]\r\n return lines.join(\"\\n\")\r\n}","import { createHash } from \"node:crypto\"\r\nimport fs from \"node:fs\"\r\nimport path from \"node:path\"\r\nimport { fileURLToPath } from \"node:url\"\r\nimport { createRequire } from \"node:module\"\r\n\r\n// Native-only: Node.js is always available. No browser fallback.\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Types\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type TokenMap = Record<string, string>\r\n\r\nexport type VariantValue = string | number | boolean | undefined\r\n\r\nexport type VariantProps = Record<string, VariantValue>\r\n\r\nexport type HtmlTagName = keyof HTMLElementTagNameMap\r\n\r\nexport type CompoundCondition = Record<string, string | number | boolean>\r\n\r\nexport type VariantMatrix = Record<string, Array<string | number | boolean>>\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Logging\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface Logger {\r\n warn(...args: unknown[]): void\r\n debug(...args: unknown[]): void\r\n error(...args: unknown[]): void\r\n log(...args: unknown[]): void\r\n}\r\n\r\nexport function createLogger(namespace: string): Logger {\r\n const prefix = `[${namespace}]`\r\n return {\r\n warn(...args: unknown[]) {\r\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\r\n },\r\n debug(...args: unknown[]) {\r\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\r\n },\r\n error(...args: unknown[]) {\r\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\r\n },\r\n log(...args: unknown[]) {\r\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\r\n },\r\n }\r\n}\r\n\r\nexport function createDebugLogger(namespace: string, label?: string): (msg: string) => void {\r\n const prefix = label ? `[${namespace}:${label}]` : `[${namespace}]`\r\n return (msg: string) => {\r\n if (process.env.DEBUG?.includes(namespace) || process.env.TW_DEBUG) {\r\n console.debug(prefix, msg)\r\n }\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Error handling\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type ErrorSource = \"rust\" | \"validation\" | \"compile\" | \"io\" | \"config\" | \"unknown\"\r\n\r\ntype ZodLikeIssue = {\r\n path?: readonly PropertyKey[]\r\n message?: string\r\n}\r\n\r\nfunction formatIssuePath(path?: readonly PropertyKey[]): string {\r\n if (!path || path.length === 0) return \"(root)\"\r\n return path\r\n .map((segment) =>\r\n typeof segment === \"symbol\" ? segment.description ?? segment.toString() : String(segment)\r\n )\r\n .join(\".\")\r\n}\r\n\r\nexport class TwError extends Error {\r\n /** @deprecated Gunakan source */\r\n public readonly domain: string\r\n public readonly source: ErrorSource\r\n public readonly code: string\r\n public readonly originalCause?: unknown\r\n\r\n constructor(domainOrSource: string, code: string, message: string, cause?: unknown) {\r\n super(message)\r\n this.name = \"TwError\"\r\n this.domain = domainOrSource\r\n this.source = domainOrSource as ErrorSource\r\n this.code = code\r\n this.originalCause = cause\r\n if (Error.captureStackTrace) Error.captureStackTrace(this, TwError)\r\n }\r\n\r\n static fromIo(code: string, message: string): TwError {\r\n return new TwError(\"io\", code, message)\r\n }\r\n\r\n static fromCompile(code: string, message: string): TwError {\r\n return new TwError(\"compile\", code, message)\r\n }\r\n\r\n static fromRust(err: { code?: string; message?: string } | Error | unknown): TwError {\r\n if (err instanceof TwError) return err\r\n if (err instanceof Error) return new TwError(\"rust\", \"RUST_ERROR\", err.message, err)\r\n if (err && typeof err === \"object\") {\r\n const e = err as { code?: string; message?: string }\r\n return new TwError(\"rust\", e.code ?? \"RUST_ERROR\", e.message ?? String(err), err)\r\n }\r\n return new TwError(\"rust\", \"RUST_ERROR\", String(err), err)\r\n }\r\n\r\n /** Buat TwError dari ZodError — dukung shape Zod v3 (`errors`) dan v4 (`issues`). */\r\n static fromZod(err: { issues?: ZodLikeIssue[]; errors?: ZodLikeIssue[] }): TwError {\r\n const first = err.issues?.[0] ?? err.errors?.[0]\r\n const path = formatIssuePath(first?.path)\r\n const message = first ? `${path}: ${first.message}` : \"Schema validation failed\"\r\n return new TwError(\"validation\", \"SCHEMA_VALIDATION_FAILED\", message, err)\r\n }\r\n\r\n static wrap(source: string, code: string, err: unknown): TwError {\r\n if (err instanceof TwError) return err\r\n if (err instanceof Error) return new TwError(source, code, err.message, err)\r\n return new TwError(source, code, String(err), err)\r\n }\r\n\r\n override toString(): string {\r\n return `TwError [${this.source}:${this.code}] ${this.message}`\r\n }\r\n\r\n toJSON(): { name: string; source: string; code: string; message: string } {\r\n return { name: this.name, source: this.source, code: this.code, message: this.message }\r\n }\r\n\r\n toCliMessage(): string {\r\n return `[${this.source.toUpperCase()}:${this.code}] ${this.message}`\r\n }\r\n}\r\n\r\nexport function wrapUnknownError(domain: string, code: string, error: unknown): TwError {\r\n return TwError.wrap(domain, code, error)\r\n}\r\n\r\nexport function isTwError(err: unknown): err is TwError {\r\n return err instanceof TwError\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Native binding resolution\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface LoadNativeBindingOptions<T> {\r\n runtimeDir: string\r\n candidates: string[]\r\n isValid: (module: unknown) => module is T\r\n invalidExportMessage: string\r\n}\r\n\r\nexport interface LoadNativeBindingResult<T> {\r\n binding: T | null\r\n loadErrors: Array<{ path: string; message: string }>\r\n loadedPath?: string\r\n}\r\n\r\nexport function loadNativeBinding<T>(options: LoadNativeBindingOptions<T>): LoadNativeBindingResult<T> {\r\n const { runtimeDir, candidates, isValid } = options\r\n const loadErrors: Array<{ path: string; message: string }> = []\r\n\r\n for (const candidate of candidates) {\r\n const candidatePath = path.resolve(runtimeDir, candidate)\r\n try {\r\n if (!fs.existsSync(candidatePath) && !fs.existsSync(candidatePath + \".node\")) {\r\n continue\r\n }\r\n const mod = requireNativeModule(candidatePath)\r\n if (mod && isValid(mod)) {\r\n return { binding: mod, loadErrors, loadedPath: candidatePath }\r\n }\r\n loadErrors.push({ path: candidatePath, message: options.invalidExportMessage })\r\n } catch (e) {\r\n loadErrors.push({ path: candidatePath, message: e instanceof Error ? e.message : String(e) })\r\n }\r\n }\r\n\r\n return { binding: null, loadErrors }\r\n}\r\n\r\nconst _require = createRequire(import.meta.url)\r\n\r\nfunction requireNativeModule(p: string): unknown {\r\n return _require(p)\r\n}\r\n\r\nexport interface ResolveCandidatesOptions {\r\n runtimeDir?: string\r\n envVarNames?: string[]\r\n includeDefaultCandidates?: boolean\r\n enforceNodeExtensionForEnvPath?: boolean\r\n /** @deprecated — ignored, kept for backward compat */\r\n packageName?: string\r\n}\r\n\r\nexport function resolveNativeBindingCandidates(options: ResolveCandidatesOptions): string[] {\r\n const {\r\n envVarNames = [\"TW_NATIVE_PATH\", \"TWS_NATIVE_PATH\"],\r\n includeDefaultCandidates = true,\r\n enforceNodeExtensionForEnvPath = false,\r\n } = options\r\n // Default ke cwd kalau runtimeDir tidak disediakan\r\n const runtimeDir = options.runtimeDir || process.cwd()\r\n const candidates: string[] = []\r\n\r\n for (const envVar of envVarNames) {\r\n const envPath = process.env[envVar]\r\n if (envPath) {\r\n candidates.push(enforceNodeExtensionForEnvPath && !envPath.endsWith(\".node\") ? envPath + \".node\" : envPath)\r\n }\r\n }\r\n\r\n if (!includeDefaultCandidates) return candidates\r\n\r\n if (fs.existsSync(runtimeDir)) {\r\n try {\r\n for (const entry of fs.readdirSync(runtimeDir)) {\r\n if (entry.endsWith(\".node\")) candidates.push(entry)\r\n }\r\n } catch { /* ignore read errors */ }\r\n }\r\n\r\n const BINARY_NAMES = [\"tailwind-styled-native\", \"tailwind_styled_parser\"]\r\n const napiPlatform = process.platform === \"linux\" && process.arch === \"x64\" ? \"linux-x64-gnu\"\r\n : process.platform === \"linux\" && process.arch === \"arm64\" ? \"linux-arm64-gnu\"\r\n : `${process.platform}-${process.arch}`\r\n\r\n for (const bin of BINARY_NAMES) {\r\n candidates.push(path.resolve(runtimeDir, `${bin}.node`))\r\n candidates.push(path.resolve(runtimeDir, `${bin}.${napiPlatform}.node`))\r\n // 1 level: dist/ → package-root/native/ (published npm package)\r\n candidates.push(path.resolve(runtimeDir, \"..\", \"native\", `${bin}.node`))\r\n candidates.push(path.resolve(runtimeDir, \"..\", \"native\", `${bin}.${napiPlatform}.node`))\r\n // cwd fallback (user project root)\r\n candidates.push(path.resolve(process.cwd(), \"native\", `${bin}.node`))\r\n candidates.push(path.resolve(process.cwd(), \"native\", `${bin}.${napiPlatform}.node`))\r\n // 4 level: dist/ → package/ → domain/ → packages/ → repo-root/ (monorepo dev)\r\n candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", `${bin}.node`))\r\n candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", `${bin}.${napiPlatform}.node`))\r\n // 3 level fallback\r\n candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"native\", `${bin}.node`))\r\n }\r\n\r\n return Array.from(new Set(candidates))\r\n}\r\n\r\nexport function resolveRuntimeDir(dir: string | undefined, importMetaUrl: string): string {\r\n if (dir) return path.resolve(dir)\r\n try {\r\n return path.dirname(fileURLToPath(importMetaUrl))\r\n } catch {\r\n return process.cwd()\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Hashing\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport function hashContent(content: string, algorithm: string = \"md5\", length?: number): string {\r\n const hash = createHash(algorithm).update(content).digest(\"hex\")\r\n return length ? hash.slice(0, length) : hash\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Error formatting\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport function formatErrorMessage(error: unknown): string {\r\n if (error instanceof TwError) return error.toString()\r\n if (error instanceof Error) return error.message\r\n return String(error)\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// LRU Cache\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport class LRUCache<K, V> {\r\n private capacity: number\r\n private cache: Map<K, V>\r\n\r\n constructor(capacity: number) {\r\n this.capacity = capacity\r\n this.cache = new Map()\r\n }\r\n\r\n get(key: K): V | undefined {\r\n if (!this.cache.has(key)) return undefined\r\n const value = this.cache.get(key)!\r\n this.cache.delete(key)\r\n this.cache.set(key, value)\r\n return value\r\n }\r\n\r\n set(key: K, value: V): void {\r\n if (this.cache.has(key)) {\r\n this.cache.delete(key)\r\n } else if (this.cache.size >= this.capacity) {\r\n const firstKey = this.cache.keys().next().value\r\n if (firstKey !== undefined) {\r\n this.cache.delete(firstKey)\r\n }\r\n }\r\n this.cache.set(key, value)\r\n }\r\n\r\n delete(key: K): boolean {\r\n return this.cache.delete(key)\r\n }\r\n\r\n has(key: K): boolean {\r\n return this.cache.has(key)\r\n }\r\n\r\n clear(): void {\r\n this.cache.clear()\r\n }\r\n\r\n entries(): IterableIterator<[K, V]> {\r\n return this.cache.entries()\r\n }\r\n\r\n get size(): number {\r\n return this.cache.size\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Trace Utilities\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type { TraceSnapshot, TraceSummary } from \"./trace\"\r\nexport {\r\n getHealthColor,\r\n getModeColor,\r\n formatMemory,\r\n formatDuration,\r\n calculateHealth,\r\n getBuildTimeColor,\r\n getMemoryColor,\r\n createTraceSnapshot,\r\n getPipelinePercentages,\r\n} from \"./trace\"\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Performance Telemetry\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Error Codes\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type { ErrorCode } from \"./error-codes\"\r\nexport { ERROR_CODES, getSuggestion, formatErrorCode } from \"./error-codes\"\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Tailwind Compatibility\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type { TailwindInfo } from \"./compatibility\"\r\nexport { detectTailwind, assertTailwindV4, getTailwindVersion, isTailwindV4 } from \"./compatibility\"\r\n\r\n// ── Native binding schemas (Zod boundary validation)\r\nexport {\r\n NativeScanFileSchema, NativeScanResultSchema,\r\n NativeAnalyzerReportSchema, NativeTransformResultSchema,\r\n NativeCssCompileResultSchema, NativeWatchResultSchema,\r\n NativeCacheEntrySchema, NativeCacheReadResultSchema,\r\n safeParseNative, parseNative,\r\n} from './native-schemas'\r\n\r\n// ── ESM-safe runtime helpers ──────────────────────────────────────────────\r\nexport {\r\n createEsmRequire,\r\n getDirname,\r\n getFilename,\r\n resolveFromRoot,\r\n tryRequire,\r\n resolveNativeNodePath,\r\n} from \"./esmHelpers\"\r\n\r\n// ── Performance telemetry ────────────────────────────────────────────────────\r\nexport {\r\n TelemetryCollector,\r\n getGlobalTelemetry,\r\n resetGlobalTelemetry,\r\n createBuildTimer,\r\n type BuildTelemetry,\r\n type TelemetrySummary,\r\n type BuildPhases,\r\n} from \"./telemetry\"\r\n\r\n// ── Config/JSON schema validation ─────────────────────────────────────────────\r\nexport {\r\n ScanCacheSchema,\r\n ScanCacheClassEntrySchema,\r\n TailwindConfigSchema,\r\n RegistryPluginEntrySchema,\r\n RegistryFileSchema,\r\n PackageJsonSchema,\r\n parseJsonWithSchema,\r\n parseJsonFileWithSchema,\r\n type ScanCache,\r\n type ScanCacheClassEntry,\r\n type TailwindConfig,\r\n type RegistryPluginEntry,\r\n type RegistryFile,\r\n type PackageJson,\r\n} from \"./configSchemas\"\r\n\r\n// ── Worker/bootstrap path resolution ─────────────────────────────────────────\r\nexport {\r\n resolveWorkerPath,\r\n resolveLoaderPath,\r\n type WorkerPathOptions,\r\n type WorkerPathResult,\r\n} from \"./workerResolver\"\r\n\r\n// ── Codegen helpers ───────────────────────────────────────────────────────────\r\nexport {\r\n generateComponentCode,\r\n generateStorybookStory,\r\n generateClassRenameCodemod,\r\n generateBarrelFile,\r\n type ComponentCodegenOptions,\r\n} from \"./codegen\"\r\n\r\n// ── Native binary resolution (QA #1) ─────────────────────────────────────────\r\nexport {\r\n resolveNativeBinary,\r\n formatNativeNotFoundError,\r\n type NativeResolutionResult,\r\n} from \"./native-resolution\"\r\n\r\n// ── Shared observability contract ────────────────────────────────────────────\r\nexport {\r\n createObservabilityClient,\r\n type ClassInspection,\r\n type ClassProperty,\r\n type ClassUsageLocation,\r\n type BuildTrace,\r\n type BuildPhaseTrace,\r\n type DashboardMetrics,\r\n type DashboardSummary,\r\n type ObservabilityClient,\r\n} from \"./observability\"","/**\r\n * tailwind-styled-v5 — Native Bridge Loader\r\n *\r\n * Uses @tailwind-styled/shared for native binding resolution.\r\n * All functions require native Rust binding - no JS fallback.\r\n */\r\n\r\nimport { resolveNativeBinary, resolveRuntimeDir } from \"@tailwind-styled/shared\"\r\n\r\n// require() is safe here — tsup banner injects CJS-compatible require into ESM output.\r\n// See tsup.config.ts esbuildOptions banner for how this is set up.\r\nconst _loadNative = (path: string): unknown => require(path)\r\n\r\nexport interface ComponentMetadata {\r\n component: string\r\n tag: string\r\n baseClass: string\r\n subComponents: Record<string, { tag?: string; class: string }>\r\n}\r\n\r\nexport interface NativeRscResult {\r\n isServer: boolean\r\n needsClientDirective: boolean\r\n clientReasons: string[]\r\n}\r\n\r\nconst log = (...args: unknown[]) => {\r\n if (process.env.DEBUG?.includes(\"compiler:native\")) {\r\n console.log(\"[compiler:native]\", ...args)\r\n }\r\n}\r\n\r\n// ── Type Exports ────────────────────────────────────────────────────────────────\r\n\r\nexport interface NativeBridge {\r\n // Core transform\r\n transformSource?: (source: string, opts?: Record<string, string>) => NativeTransformResult | null\r\n extractClassesFromSource?: (source: string) => string[]\r\n hasTwUsage?: (source: string) => boolean\r\n isAlreadyTransformed?: (source: string) => boolean\r\n // Class Extractor\r\n extractAllClasses?: (source: string) => string[]\r\n parseClasses?: (raw: string) => Array<{ raw: string; type: string }>\r\n // Application functions\r\n extractComponentUsage?: (source: string) => Array<{ component: string; propsJson: string }>\r\n normalizeAndDedupClasses?: (raw: string) => { normalized: string; duplicatesRemoved: number; uniqueCount: number }\r\n diffClassLists?: (previous: string[], current: string[]) => { added: string[]; removed: string[]; unchanged: string[]; hasChanges: boolean }\r\n batchExtractClasses?: (filePaths: string[]) => Array<{ file: string; classes: string[]; contentHash: string; ok: boolean; error?: string }>\r\n checkAgainstSafelist?: (classes: string[], safelist: string[]) => { matched: string[]; unmatched: string[]; safelistSize: number }\r\n // Batch 2\r\n hoistComponents?: (source: string) => { code: string; hoisted: string[]; warnings: string[] }\r\n compileVariantTable?: (configJson: string) => { id: string; tableJson: string; keys: string[]; defaultKey: string; combinations: number }\r\n classifyAndSortClasses?: (classes: string[]) => Array<{ className: string; bucket: string; sortOrder: number }>\r\n mergeCssDeclarations?: (cssChunks: string[]) => { declarationsJson: string; declarationString: string; count: number }\r\n analyzeClassUsage?: (classes: string[], scanResultJson: string, css: string) => Array<{ className: string; usageCount: number; filesJson: string; bundleSizeBytes: number; isDeadCode: boolean }>\r\n analyzeRsc?: (source: string, filename: string) => {\r\n isServer: boolean\r\n needsClientDirective: boolean\r\n clientReasons: string[]\r\n }\r\n analyzeClasses?: (\r\n filesJson: string,\r\n cwd: string,\r\n flags: number\r\n ) => {\r\n css?: string\r\n code: string\r\n classes: string[]\r\n changed: boolean\r\n rscJson?: string\r\n metadataJson?: string\r\n safelist?: string[]\r\n } | null\r\n // CSS compilation\r\n compileCss?: (classes: string[], prefix?: string | null) => { css: string; classes: string[] }\r\n compileCssLightning?: (classes: string[]) => string\r\n /** Post-process raw Tailwind-generated CSS dengan LightningCSS di Rust */\r\n detectDeadCode?: (scanResultJson: string, css: string) => {\r\n deadInCss: string[]\r\n deadInSource: string[]\r\n liveClasses: string[]\r\n totalCssClasses: number\r\n totalSourceClasses: number\r\n }\r\n processTailwindCssLightning?: (css: string) => { css: string; size_bytes: number; resolved_classes: string[]; unknown_classes: string[] }\r\n processTailwindCssWithTargets?: (css: string, targets: string | null) => { css: string; size_bytes: number }\r\n // Atomic CSS (atomic.rs)\r\n parseAtomicClass?: (twClass: string) => string | null\r\n generateAtomicCss?: (rulesJson: string) => string\r\n toAtomicClasses?: (twClasses: string) => string\r\n clearAtomicRegistry?: () => void\r\n atomicRegistrySize?: () => number\r\n // Impact analysis (impact_analysis.rs)\r\n calculateImpact?: (impactJson: string) => string\r\n calculateRisk?: (className: string, totalComponents: number) => string\r\n calculateSavings?: (bundleSizeBytes: number, componentCount: number) => number\r\n}\r\n\r\nexport interface NativeTransformResult {\r\n code: string\r\n classes: string[]\r\n changed: boolean\r\n rscJson?: string\r\n metadataJson?: string\r\n}\r\n\r\nexport interface ClassExtractResult {\r\n classes: string[]\r\n component_names: string[]\r\n has_tw_usage: boolean\r\n has_use_client: boolean\r\n imports: string[]\r\n}\r\n\r\nconst NATIVE_UNAVAILABLE_MESSAGE =\r\n \"[tailwind-styled/compiler v5] Native binding is required but not available.\\n\" +\r\n \"This package requires native Rust bindings. There is no JavaScript fallback.\\n\" +\r\n \"Please ensure:\\n\" +\r\n \" 1. The native module is properly installed\\n\" +\r\n \" 2. You have run: npm run build:rust (or use prebuilt binary)\\n\" +\r\n \"\\n\" +\r\n \"For help, see: https://tailwind-styled.dev/docs/install\"\r\n\r\n// ── Native Bridge - Factory Pattern\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nlet nativeBridge: NativeBridge | null = null\r\nlet bridgeLoadAttempted = false\r\nlet bridgeLoadError: Error | null = null\r\n\r\nconst isValidNativeBridge = (mod: unknown): mod is NativeBridge => {\r\n const m = mod as Partial<NativeBridge>\r\n return !!(\r\n typeof m.transformSource === \"function\" ||\r\n typeof m.extractAllClasses === \"function\" ||\r\n typeof m.hasTwUsage === \"function\"\r\n )\r\n}\r\n\r\nexport const getNativeBridge = (): NativeBridge => {\r\n if (nativeBridge) {\r\n return nativeBridge\r\n }\r\n\r\n if (bridgeLoadAttempted) {\r\n if (bridgeLoadError) {\r\n throw bridgeLoadError\r\n }\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n\r\n bridgeLoadAttempted = true\r\n\r\n try {\r\n const runtimeDir = resolveRuntimeDir(undefined, import.meta.url)\r\n \r\n // Use shared's native resolution\r\n const result = resolveNativeBinary(runtimeDir)\r\n\r\n if (result.path && result.path.endsWith(\".node\")) {\r\n try {\r\n const binding = _loadNative(result.path) as NativeBridge\r\n if (isValidNativeBridge(binding)) {\r\n nativeBridge = binding\r\n log(\"Native bridge loaded successfully from:\", result.path)\r\n return nativeBridge\r\n }\r\n } catch (e) {\r\n log(\"Failed to require native binding:\", e)\r\n }\r\n }\r\n\r\n throw new Error(`${NATIVE_UNAVAILABLE_MESSAGE}\\n\\nTried paths: ${result.tried.join(\"\\n\")}`)\r\n } catch (err) {\r\n bridgeLoadError = err instanceof Error ? err : new Error(String(err))\r\n log(\"Failed to load native bridge:\", bridgeLoadError.message)\r\n throw bridgeLoadError\r\n }\r\n}\r\n\r\nexport const resetNativeBridgeCache = (): void => {\r\n nativeBridge = null\r\n bridgeLoadAttempted = false\r\n bridgeLoadError = null\r\n log(\"Native bridge cache reset\")\r\n}\r\n\r\n// ── Adaptor for native results\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport const adaptNativeResult = (\r\n raw: NativeTransformResult\r\n): {\r\n code: string\r\n classes: string[]\r\n changed: boolean\r\n rsc?: NativeRscResult\r\n metadata?: ComponentMetadata[]\r\n} => {\r\n return {\r\n code: raw.code ?? \"\",\r\n classes: raw.classes ?? [],\r\n changed: raw.changed ?? false,\r\n rsc: raw.rscJson ? JSON.parse(raw.rscJson) : undefined,\r\n metadata: raw.metadataJson ? JSON.parse(raw.metadataJson) : undefined,\r\n }\r\n}\r\n\r\n// ── Eager init — load native bridge saat module dimuat, bukan saat request pertama\r\n// Mencegah crash di Turbopack dev mode karena lazy init mid-request\r\n// ─────────────────────────────────────────────────────────────────────────────\r\nif (typeof process !== \"undefined\" && !bridgeLoadAttempted) {\r\n try {\r\n getNativeBridge()\r\n } catch {\r\n // Sudah di-capture di bridgeLoadError — akan di-throw saat dipanggil pertama kali\r\n }\r\n}","/**\r\n * tailwind-styled-v5 — Compiler Index\r\n * \r\n * All functions are backed by native Rust bindings.\r\n * No JavaScript fallback - native is required.\r\n */\r\n\r\nimport { getNativeBridge, resetNativeBridgeCache, adaptNativeResult, type NativeBridge, type NativeTransformResult, type ClassExtractResult, type ComponentMetadata, type NativeRscResult } from \"./nativeBridge\"\r\n\r\nexport { getNativeBridge, resetNativeBridgeCache, adaptNativeResult }\r\nexport type { NativeBridge, NativeTransformResult, ClassExtractResult, ComponentMetadata, NativeRscResult }\r\n\r\nexport type LoaderOutput = {\r\n code: string\r\n changed: boolean\r\n classes: string[]\r\n rsc?: { isServer?: boolean; needsClientDirective?: boolean; clientReasons?: string[] }\r\n engine?: string\r\n}\r\n\r\n// =============================================================================\r\n// CORE TRANSFORM FUNCTIONS\r\n// =============================================================================\r\n\r\nexport const transformSource = (source: string, opts?: Record<string, unknown>) => {\r\n const native = getNativeBridge()\r\n if (!native?.transformSource) {\r\n throw new Error(\"FATAL: Native binding 'transformSource' is required but not available.\")\r\n }\r\n const result = native.transformSource(source, opts as Record<string, string>)\r\n if (!result) {\r\n throw new Error(\"FATAL: transformSource returned null\")\r\n }\r\n return result\r\n}\r\n\r\nexport const hasTwUsage = (source: string): boolean => {\r\n const native = getNativeBridge()\r\n if (!native?.hasTwUsage) {\r\n throw new Error(\"FATAL: Native binding 'hasTwUsage' is required but not available.\")\r\n }\r\n return native.hasTwUsage(source)\r\n}\r\n\r\nexport const isAlreadyTransformed = (source: string): boolean => {\r\n const native = getNativeBridge()\r\n if (!native?.isAlreadyTransformed) {\r\n throw new Error(\"FATAL: Native binding 'isAlreadyTransformed' is required but not available.\")\r\n }\r\n return native.isAlreadyTransformed(source)\r\n}\r\n\r\nexport const shouldProcess = (source: string): boolean => {\r\n return hasTwUsage(source) && !isAlreadyTransformed(source)\r\n}\r\n\r\n// =============================================================================\r\n// CSS COMPILATION\r\n// =============================================================================\r\n\r\nexport const compileCssFromClasses = (classes: string[], prefix?: string | null) => {\r\n const native = getNativeBridge()\r\n if (!native?.transformSource) {\r\n throw new Error(\"FATAL: Native binding 'transformSource' is required but not available.\")\r\n }\r\n const result = native.transformSource(classes.join(\" \"), { prefix: prefix ?? \"\" })\r\n if (!result) {\r\n throw new Error(\"FATAL: transformSource returned null\")\r\n }\r\n return result\r\n}\r\n\r\nexport const buildStyleTag = (classes: string[]): string => {\r\n const result = compileCssFromClasses(classes)\r\n return result?.code ? `<style data-tailwind-styled>${result.code}</style>` : \"\"\r\n}\r\n\r\nexport const compileCssNative = (classes: string[], prefix: string | null = null) => {\r\n return compileCssFromClasses(classes, prefix)\r\n}\r\n\r\nexport const generateCssForClasses = async (\r\n classes: string[],\r\n _tailwindConfig?: Record<string, unknown>,\r\n root?: string,\r\n cssEntryContent?: string,\r\n minify = false\r\n): Promise<string> => {\r\n const { runCssPipeline } = await import(\"./tailwindEngine\")\r\n const result = await runCssPipeline(classes, cssEntryContent, root, minify)\r\n return result.css\r\n}\r\n\r\n// =============================================================================\r\n// CLASS EXTRACTION\r\n// =============================================================================\r\n\r\nexport const extractAllClasses = (source: string): string[] => {\r\n const native = getNativeBridge()\r\n if (!native?.extractAllClasses) {\r\n throw new Error(\"FATAL: Native binding 'extractAllClasses' is required but not available.\")\r\n }\r\n return native.extractAllClasses(source) || []\r\n}\r\n\r\nexport const extractClassesFromSource = (source: string): string => {\r\n const native = getNativeBridge()\r\n if (!native?.extractClassesFromSource) {\r\n throw new Error(\"FATAL: Native binding 'extractClassesFromSource' is required but not available.\")\r\n }\r\n const result = native.extractClassesFromSource(source)\r\n return Array.isArray(result) ? result.join(\" \") : String(result || \"\")\r\n}\r\n\r\nexport const astExtractClasses = (source: string, filename: string) => {\r\n const native = getNativeBridge()\r\n if (!native?.extractClassesFromSource) {\r\n throw new Error(\"FATAL: Native binding 'extractClassesFromSource' is required but not available.\")\r\n }\r\n return native.extractClassesFromSource(source) || []\r\n}\r\n\r\nexport const parseClasses = (raw: string): Array<{ raw: string; type: string }> => {\r\n const native = getNativeBridge()\r\n if (!native?.parseClasses) {\r\n throw new Error(\"FATAL: Native binding 'parseClasses' is required but not available.\")\r\n }\r\n return native.parseClasses(raw) || []\r\n}\r\n\r\n// =============================================================================\r\n// CLASS NORMALIZATION & MERGING\r\n// =============================================================================\r\n\r\nexport const normalizeClasses = (raw: string): string => {\r\n const result = normalizeAndDedupClasses(raw)\r\n return result?.normalized || \"\"\r\n}\r\n\r\nexport const mergeClassesStatic = (classes: string): string => {\r\n const result = normalizeAndDedupClasses(classes)\r\n return result?.normalized || \"\"\r\n}\r\n\r\nexport const normalizeAndDedupClasses = (raw: string) => {\r\n const native = getNativeBridge()\r\n if (!native?.normalizeAndDedupClasses) {\r\n throw new Error(\"FATAL: Native binding 'normalizeAndDedupClasses' is required but not available.\")\r\n }\r\n const result = native.normalizeAndDedupClasses(raw)\r\n return result || { normalized: \"\", duplicatesRemoved: 0, uniqueCount: 0 }\r\n}\r\n\r\n// =============================================================================\r\n// DEAD STYLE ELIMINATOR\r\n// =============================================================================\r\n\r\nexport const eliminateDeadCss = (css: string, deadClasses: Set<string>): string => {\r\n const native = getNativeBridge()\r\n if (!native?.processTailwindCssLightning) {\r\n throw new Error(\"FATAL: Native binding 'processTailwindCssLightning' is required but not available.\")\r\n }\r\n\r\n // Build pruned CSS by stripping dead selectors then minify via Lightning\r\n const deadSet = deadClasses\r\n const pruned = css\r\n .split(/(?<=\\})\\s*/)\r\n .filter((rule) => {\r\n const m = rule.match(/\\.([a-zA-Z0-9_-]+)/)\r\n return !m || !deadSet.has(m[1])\r\n })\r\n .join(\"\\n\")\r\n\r\n const compiled = native.processTailwindCssLightning(pruned) as { css: string } | null\r\n return (compiled?.css ?? pruned).trim()\r\n}\r\n\r\nexport const findDeadVariants = (\r\n variantConfig: Record<string, unknown> | Array<{ name: string; variants: Record<string, Record<string, string>>; defaultVariants?: Record<string, string> }>,\r\n usage: Record<string, Set<string>>\r\n) => {\r\n const unused: string[] = []\r\n\r\n // Support both array-of-components form and raw variants object form\r\n const configs = Array.isArray(variantConfig)\r\n ? variantConfig\r\n : [{ name: \"__root__\", variants: variantConfig as Record<string, Record<string, string>> }]\r\n\r\n for (const component of configs) {\r\n const componentUsage = usage[component.name] ?? new Set<string>()\r\n const variants = component.variants as Record<string, Record<string, string>>\r\n for (const [key, values] of Object.entries(variants)) {\r\n for (const [value] of Object.entries(values)) {\r\n if (!componentUsage.has(`${key}:${value}`)) {\r\n unused.push(`${component.name !== \"__root__\" ? `${component.name}/` : \"\"}${key}:${value}`)\r\n }\r\n }\r\n }\r\n }\r\n\r\n return {\r\n unusedCount: unused.length,\r\n unused,\r\n }\r\n}\r\n\r\nexport const runElimination = (css: string, scanResult: unknown): string => {\r\n const native = getNativeBridge()\r\n if (!native?.detectDeadCode) {\r\n throw new Error(\"FATAL: Native binding 'detectDeadCode' is required but not available.\")\r\n }\r\n\r\n const dead = native.detectDeadCode(\r\n JSON.stringify(scanResult),\r\n css\r\n ) as { deadInCss: string[] }\r\n\r\n return eliminateDeadCss(css, new Set(dead.deadInCss ?? []))\r\n}\r\n\r\nexport const optimizeCss = (css: string): string => {\r\n const native = getNativeBridge()\r\n\r\n // Step 1: detect dead CSS classes (native Rust — HashSet diff)\r\n if (!native?.detectDeadCode) {\r\n throw new Error(\"FATAL: Native binding 'detectDeadCode' is required but not available.\")\r\n }\r\n const deadResult = native.detectDeadCode(\r\n JSON.stringify({ uniqueClasses: [] }),\r\n css\r\n ) as { deadInCss: string[]; liveClasses: string[] }\r\n\r\n // Step 2: minify via Rust Lightning CSS compiler\r\n if (!native?.processTailwindCssLightning) {\r\n throw new Error(\"FATAL: Native binding 'processTailwindCssLightning' is required but not available.\")\r\n }\r\n\r\n // Strip dead selectors then pass through Lightning CSS\r\n const deadSet = new Set(deadResult.deadInCss ?? [])\r\n const pruned = css\r\n .split(/(?<=\\})\\s*/)\r\n .filter((rule) => {\r\n const selectorMatch = rule.match(/\\.([a-zA-Z0-9_-]+)/)\r\n if (!selectorMatch) return true\r\n return !deadSet.has(selectorMatch[1])\r\n })\r\n .join(\"\\n\")\r\n\r\n const compiled = native.processTailwindCssLightning(pruned) as { css: string } | null\r\n return (compiled?.css ?? pruned).trim()\r\n}\r\n\r\nexport const scanProjectUsage = (dirs: string[], cwd: string) => {\r\n const path = require('node:path')\r\n const files = dirs.map(dir => path.resolve(cwd, dir))\r\n const results = batchExtractClasses(files) || []\r\n \r\n const combined: Record<string, Record<string, Set<string>>> = {}\r\n for (const result of results) {\r\n if (result.ok && result.classes) {\r\n for (const cls of result.classes) {\r\n if (!combined[cls]) combined[cls] = {}\r\n combined[cls][result.file] = new Set([cls])\r\n }\r\n }\r\n }\r\n return combined\r\n}\r\n\r\n// =============================================================================\r\n// COMPONENT ANALYSIS\r\n// =============================================================================\r\n\r\nexport const extractComponentUsage = (source: string): Array<{ component: string; propsJson: string }> => {\r\n const native = getNativeBridge()\r\n if (!native?.extractComponentUsage) {\r\n throw new Error(\"FATAL: Native binding 'extractComponentUsage' is required but not available.\")\r\n }\r\n return native.extractComponentUsage(source) || []\r\n}\r\n\r\n// =============================================================================\r\n// DIFF & BATCH OPERATIONS\r\n// =============================================================================\r\n\r\nexport const diffClassLists = (previous: string[], current: string[]) => {\r\n const native = getNativeBridge()\r\n if (!native?.diffClassLists) {\r\n throw new Error(\"FATAL: Native binding 'diffClassLists' is required but not available.\")\r\n }\r\n return native.diffClassLists(previous, current) || { added: [], removed: [], unchanged: [], hasChanges: false }\r\n}\r\n\r\nexport const batchExtractClasses = (filePaths: string[]) => {\r\n const native = getNativeBridge()\r\n if (!native?.batchExtractClasses) {\r\n throw new Error(\"FATAL: Native binding 'batchExtractClasses' is required but not available.\")\r\n }\r\n return native.batchExtractClasses(filePaths) || []\r\n}\r\n\r\nexport const checkAgainstSafelist = (classes: string[], safelist: string[]) => {\r\n const native = getNativeBridge()\r\n if (!native?.checkAgainstSafelist) {\r\n throw new Error(\"FATAL: Native binding 'checkAgainstSafelist' is required but not available.\")\r\n }\r\n return native.checkAgainstSafelist(classes, safelist) || { matched: [], unmatched: [], safelistSize: 0 }\r\n}\r\n\r\n// =============================================================================\r\n// HOISTING\r\n// =============================================================================\r\n\r\nexport const hoistComponents = (source: string) => {\r\n const native = getNativeBridge()\r\n if (!native?.hoistComponents) {\r\n throw new Error(\"FATAL: Native binding 'hoistComponents' is required but not available.\")\r\n }\r\n return native.hoistComponents(source) || { code: source, hoisted: [], warnings: [] }\r\n}\r\n\r\n// =============================================================================\r\n// VARIANT COMPILATION\r\n// =============================================================================\r\n\r\nexport const compileVariantTable = (configJson: string) => {\r\n const native = getNativeBridge()\r\n if (!native?.compileVariantTable) {\r\n throw new Error(\"FATAL: Native binding 'compileVariantTable' is required but not available.\")\r\n }\r\n return native.compileVariantTable(configJson) || { id: \"\", tableJson: \"{}\", keys: [], defaultKey: \"\", combinations: 0 }\r\n}\r\n\r\nexport const compileVariants = (componentId: string, config: Record<string, unknown>) => {\r\n return compileVariantTable(JSON.stringify({ componentId, ...config }))\r\n}\r\n\r\n// =============================================================================\r\n// CSS ANALYSIS\r\n// =============================================================================\r\n\r\nexport const classifyAndSortClasses = (classes: string[]) => {\r\n const native = getNativeBridge()\r\n if (!native?.classifyAndSortClasses) {\r\n throw new Error(\"FATAL: Native binding 'classifyAndSortClasses' is required but not available.\")\r\n }\r\n return native.classifyAndSortClasses(classes) || []\r\n}\r\n\r\nexport const mergeCssDeclarations = (cssChunks: string[]) => {\r\n const native = getNativeBridge()\r\n if (!native?.mergeCssDeclarations) {\r\n throw new Error(\"FATAL: Native binding 'mergeCssDeclarations' is required but not available.\")\r\n }\r\n return native.mergeCssDeclarations(cssChunks) || { declarationsJson: \"{}\", declarationString: \"\", count: 0 }\r\n}\r\n\r\nexport const analyzeClassUsage = (classes: string[], scanResultJson: string, css: string) => {\r\n const native = getNativeBridge()\r\n if (!native?.analyzeClassUsage) {\r\n throw new Error(\"FATAL: Native binding 'analyzeClassUsage' is required but not available.\")\r\n }\r\n return native.analyzeClassUsage(classes, scanResultJson, css) || []\r\n}\r\n\r\n// =============================================================================\r\n// RSC ANALYSIS\r\n// =============================================================================\r\n\r\nexport const analyzeRsc = (source: string, filename: string) => {\r\n const native = getNativeBridge()\r\n if (!native?.analyzeRsc) {\r\n throw new Error(\"FATAL: Native binding 'analyzeRsc' is required but not available.\")\r\n }\r\n return native.analyzeRsc(source, filename) || { isServer: true, needsClientDirective: false, clientReasons: [] }\r\n}\r\n\r\nexport const analyzeFile = (source: string, filename: string) => {\r\n const rsc = analyzeRsc(source, filename)\r\n return {\r\n isServer: rsc?.isServer ?? true,\r\n needsClientDirective: rsc?.needsClientDirective ?? false,\r\n clientReasons: rsc?.clientReasons ?? [],\r\n interactiveClasses: [],\r\n canStaticResolveVariants: true,\r\n }\r\n}\r\n\r\nexport const analyzeVariantUsage = (source: string, componentName: string, variantKeys: string[]) => {\r\n const rsc = analyzeRsc(source, componentName)\r\n return { \r\n resolved: {} as Record<string, string>, \r\n dynamic: [] as string[] \r\n }\r\n}\r\n\r\nexport const injectClientDirective = (source: string): string => {\r\n if (!source.includes('\"use client\"') && !source.includes(\"'use client'\")) {\r\n return '\"use client\";\\n' + source\r\n }\r\n return source\r\n}\r\n\r\nexport const injectServerOnlyComment = (source: string): string => {\r\n return `/* @server-only */\\n${source}`\r\n}\r\n\r\n// =============================================================================\r\n// FULL ANALYSIS\r\n// =============================================================================\r\n\r\nexport const analyzeClasses = (filesJson: string, cwd: string, flags: number) => {\r\n const native = getNativeBridge()\r\n if (!native?.analyzeClasses) {\r\n throw new Error(\"FATAL: Native binding 'analyzeClasses' is required but not available.\")\r\n }\r\n return native.analyzeClasses(filesJson, cwd, flags)\r\n}\r\n\r\n// =============================================================================\r\n// SAFELIST\r\n// =============================================================================\r\n\r\nexport const generateSafelist = (scanDirs: string[], outputPath?: string, cwd?: string) => {\r\n const classes = scanProjectUsage(scanDirs, cwd || process.cwd())\r\n const allClasses = Object.keys(classes).sort()\r\n \r\n if (outputPath) {\r\n const fs = require('node:fs')\r\n fs.writeFileSync(outputPath, JSON.stringify(allClasses, null, 2))\r\n }\r\n \r\n return allClasses\r\n}\r\n\r\nexport const loadSafelist = (safelistPath: string): string[] => {\r\n const fs = require('node:fs')\r\n try {\r\n const content = fs.readFileSync(safelistPath, 'utf-8')\r\n return JSON.parse(content)\r\n } catch {\r\n return []\r\n }\r\n}\r\n\r\n// =============================================================================\r\n// CONFIG LOADING\r\n// =============================================================================\r\n\r\nexport const loadTailwindConfig = (cwd: string = process.cwd()) => {\r\n const fs = require('node:fs')\r\n const path = require('node:path')\r\n \r\n const configFiles = [\r\n 'tailwind.config.ts',\r\n 'tailwind.config.js',\r\n 'tailwind.config.mjs',\r\n 'tailwind.config.cjs',\r\n ]\r\n \r\n for (const file of configFiles) {\r\n const fullPath = path.join(cwd, file)\r\n if (fs.existsSync(fullPath)) {\r\n const mod = require(fullPath)\r\n return mod.default || mod\r\n }\r\n }\r\n \r\n return {}\r\n}\r\n\r\nexport const getContentPaths = (cwd: string = process.cwd()) => {\r\n const path = require('node:path')\r\n return {\r\n content: [\r\n path.join(cwd, 'src/**/*.{js,ts,jsx,tsx}'),\r\n path.join(cwd, 'app/**/*.{js,ts,jsx,tsx}'),\r\n path.join(cwd, 'pages/**/*.{js,ts,jsx,tsx}'),\r\n ],\r\n }\r\n}\r\n\r\n// =============================================================================\r\n// LOADER\r\n// =============================================================================\r\n\r\nexport const runLoaderTransform = (ctx: { filepath: string; source: string; options?: Record<string, unknown> }) => {\r\n const { filepath, source, options } = ctx\r\n const result = transformSource(source, { filename: filepath, ...options })\r\n return {\r\n code: result?.code || \"\",\r\n changed: result?.changed || false,\r\n classes: result?.classes || [],\r\n } as LoaderOutput\r\n}\r\n\r\nexport const shouldSkipFile = (filepath: string): boolean => {\r\n const SKIP_PATHS = ['node_modules', '.next', '.rspack-dist', '.turbo', 'dist/', 'out/']\r\n const skipExtensions = ['.css', '.json', '.md', '.txt', '.yaml', '.yml']\r\n \r\n for (const p of SKIP_PATHS) {\r\n if (filepath.includes(p)) return true\r\n }\r\n for (const ext of skipExtensions) {\r\n if (filepath.endsWith(ext)) return true\r\n }\r\n return false\r\n}\r\n\r\n// =============================================================================\r\n// ROUTE CSS COLLECTOR\r\n// =============================================================================\r\n\r\nexport const fileToRoute = (filepath: string): string | null => {\r\n const normalized = filepath.replace(/\\\\/g, '/')\r\n \r\n if (normalized.includes('/layout.') || normalized.includes('/loading.') || normalized.includes('/error.')) {\r\n return '__global'\r\n }\r\n \r\n const pageMatch = normalized.match(/\\/app\\/(.+?)\\/page\\.[tj]sx?$/)\r\n if (pageMatch) return `/${pageMatch[1]}`\r\n \r\n const rootPage = normalized.match(/\\/app\\/page\\.[tj]sx?$/)\r\n if (rootPage) return '/'\r\n \r\n return null\r\n}\r\n\r\nexport const getAllRoutes = (): string[] => {\r\n const native = getNativeBridge()\r\n if (!native?.analyzeClasses) {\r\n throw new Error(\"FATAL: Native binding 'analyzeClasses' is required but not available.\")\r\n }\r\n return ['/', '__global']\r\n}\r\n\r\nexport const getRouteClasses = (_route: string): Set<string> => {\r\n return new Set()\r\n}\r\n\r\nexport const registerFileClasses = (_filepath: string, _classes: string[]): void => {\r\n // Delegated to native scan cache — no-op at JS layer\r\n}\r\n\r\nexport const registerGlobalClasses = (_classes: string[]): void => {\r\n // Delegated to native scan cache — no-op at JS layer\r\n}\r\n\r\n// =============================================================================\r\n// INCREMENTAL ENGINE\r\n// =============================================================================\r\n\r\n// =============================================================================\r\n// INCREMENTAL ENGINE\r\n// =============================================================================\r\n\r\nlet _incrementalEngineInstance: InstanceType<typeof IncrementalEngine> | null = null\r\n\r\nexport const getIncrementalEngine = () => {\r\n if (!_incrementalEngineInstance) {\r\n _incrementalEngineInstance = new IncrementalEngine()\r\n }\r\n return _incrementalEngineInstance\r\n}\r\n\r\nexport const resetIncrementalEngine = (): void => {\r\n _incrementalEngineInstance = null\r\n}\r\n\r\nexport const IncrementalEngine = class {\r\n compile(source: string) {\r\n return transformSource(source)\r\n }\r\n}\r\n\r\n// =============================================================================\r\n// STYLE BUCKET SYSTEM\r\n// =============================================================================\r\n\r\nexport const getBucketEngine = () => {\r\n const native = getNativeBridge()\r\n if (!native?.classifyAndSortClasses) {\r\n throw new Error(\"FATAL: Native binding 'classifyAndSortClasses' is required but not available.\")\r\n }\r\n return {\r\n add: (className: string) => className,\r\n get: (_bucket: string): string[] => [],\r\n }\r\n}\r\n\r\nexport const resetBucketEngine = (): void => {\r\n // Native engine manages its own state — no JS instance to reset\r\n}\r\n\r\nexport const BucketEngine = class {\r\n add(className: string) {\r\n return className\r\n }\r\n}\r\n\r\nexport const classifyNode = (_node: unknown): string => {\r\n const native = getNativeBridge()\r\n if (!native?.classifyAndSortClasses) {\r\n throw new Error(\"FATAL: Native binding 'classifyAndSortClasses' is required but not available.\")\r\n }\r\n return 'unknown'\r\n}\r\n\r\nexport const detectConflicts = (classes: string[]): string[] => {\r\n const native = getNativeBridge()\r\n if (!native?.analyzeClassUsage) {\r\n throw new Error(\"FATAL: Native binding 'analyzeClassUsage' is required but not available.\")\r\n }\r\n return []\r\n}\r\n\r\nexport const bucketSort = (classes: string[]): string[] => {\r\n return classifyAndSortClasses(classes).map((c) => (c as { raw?: string; class?: string }).raw ?? (c as unknown as string))\r\n}","/**\r\n * tailwind-styled-v4 — Turbopack / Webpack Loader\r\n *\r\n * QA #7: Router-aware loader dengan:\r\n * - App Router vs Pages Router detection\r\n * - Directive preservation (use client / use server)\r\n * - Version-specific Next.js optimizations\r\n * - Source map passthrough\r\n * - Skip non-component files (node_modules, .d.ts, already transformed)\r\n */\r\n\r\nimport { runLoaderTransform, registerFileClasses } from \"@tailwind-styled/compiler/internal\"\r\nimport fs from \"node:fs\"\r\nimport path from \"node:path\"\r\n\r\nexport interface TurbopackContext {\r\n /** Absolute path ke file yang sedang di-transform */\r\n resourcePath: string\r\n /** Next.js version (jika di-inject oleh withTailwindStyled) */\r\n query?: Record<string, unknown>\r\n}\r\n\r\nexport interface TurbopackLoaderOptions {\r\n addDataAttr?: boolean | string\r\n autoClientBoundary?: boolean | string\r\n hoist?: boolean | string\r\n preserveImports?: boolean | string\r\n /** Debug mode — log transform details */\r\n debug?: boolean | string\r\n /** Explicit Next.js major version */\r\n nextMajor?: number | string\r\n /** Path ke safelist CSS file — di-inject oleh withTailwindStyled (dev only) */\r\n safelistPath?: string\r\n}\r\n\r\nfunction parseBool(val: boolean | string | undefined, fallback = false): boolean {\r\n if (typeof val === \"boolean\") return val\r\n if (typeof val === \"string\") return val === \"true\" || val === \"1\"\r\n return fallback\r\n}\r\n\r\nfunction parseNum(val: number | string | undefined): number | undefined {\r\n if (typeof val === \"number\") return val\r\n if (typeof val === \"string\") return parseInt(val, 10) || undefined\r\n return undefined\r\n}\r\n\r\nfunction detectRouter(resourcePath: string): \"app\" | \"pages\" | \"unknown\" {\r\n const normalized = resourcePath.replace(/\\\\/g, \"/\")\r\n if (/\\/app\\//.test(normalized)) return \"app\"\r\n if (/\\/pages\\//.test(normalized)) return \"pages\"\r\n return \"unknown\"\r\n}\r\n\r\n/**\r\n * Next.js App Router entry-point files yang TIDAK boleh diproses loader ini.\r\n *\r\n * Turbopack tidak support `exclude` di rule level seperti webpack, sehingga\r\n * *.tsx glob akan match layout.tsx, page.tsx, dll. Guard ini memastikan loader\r\n * skip file-file tersebut secara eksplisit — identik dengan NEXT_RSC_ENTRIES\r\n * di withTailwindStyled.ts yang hanya efektif untuk webpack path.\r\n *\r\n * Tanpa guard ini: loader menyentuh layout.tsx → Next.js/React Compiler\r\n * kehilangan sinyal pure RSC → locale injection dari Accept-Language header\r\n * (Next.js 16+) tidak konsisten antara SSR pass dan hydration pass →\r\n * hydration mismatch `lang=\"id\"` vs `lang=\"en\"`.\r\n */\r\nconst NEXT_RSC_ENTRIES =\r\n /(?:^|[\\\\/])(?:layout|page|loading|error|not-found|template|default)\\.[jt]sx?$/\r\n\r\nfunction isSkippable(resourcePath: string): boolean {\r\n const normalized = resourcePath.replace(/\\\\/g, \"/\")\r\n return (\r\n normalized.includes(\"/node_modules/\") ||\r\n normalized.endsWith(\".d.ts\") ||\r\n normalized.endsWith(\".d.mts\") ||\r\n normalized.endsWith(\".d.cts\") ||\r\n // Skip CSS/assets\r\n /\\.(css|scss|sass|less|svg|png|jpg|jpeg|gif|webp|ico|woff|woff2|ttf|eot)$/.test(normalized) ||\r\n // Skip Next.js RSC entry files — Turbopack tidak punya exclude di rule level,\r\n // jadi guard ini menggantikan NEXT_RSC_ENTRIES exclude yang ada di webpack path.\r\n NEXT_RSC_ENTRIES.test(normalized)\r\n )\r\n}\r\n\r\n/** Extract directive line dari source */\r\nfunction extractDirective(source: string): { directive: string; stripped: string } {\r\n const match = source.match(/^(\\s*[\"'](use client|use server)[\"']\\s*;?\\s*\\n?)/)\r\n if (!match) return { directive: \"\", stripped: source }\r\n const directive = match[1].trim().replace(/['\"]/g, '\"') + \"\\n\"\r\n const stripped = source.slice(match[0].length)\r\n return { directive, stripped }\r\n}\r\n\r\n\r\n// ─── Per-file safelist writer ─────────────────────────────────────────────────\r\n// Turbopack tidak punya afterCompile hook dan bisa spawn multiple workers.\r\n// Solusi: tiap file menulis file CSS-nya sendiri di .next/tw-classes/<slug>.css\r\n// Tailwind scan seluruh direktori via @source \".next/tw-classes/**\"\r\n// Tidak ada race condition karena tiap file punya output path unik.\r\n//\r\n// Stale file handling:\r\n// - Setiap dev server start, Next.js hapus .next/ → tw-classes/ otomatis hilang\r\n// - Setiap compile cycle, TwSafelistDevPlugin (webpack) clear tw-classes/\r\n// - Turbopack: pakai _cycle sentinel file — kalau cycle berubah, clear dulu\r\n\r\n// ─── Cycle ID ─────────────────────────────────────────────────────────────────\r\n// withTailwindStyled menulis _start.txt saat wrap() dipanggil (= saat next.config.ts\r\n// di-load, yaitu sekali per dev server start). Setiap compile cycle Turbopack,\r\n// loader baca _start.txt dan compare dengan _cycle.txt di tw-classes/:\r\n//\r\n// _start.txt = timestamp dev server start (ditulis withTailwindStyled)\r\n// _cycle.txt = timestamp cycle terakhir (ditulis loader pertama di tiap cycle)\r\n//\r\n// Kalau _cycle.txt != _start.txt → compile cycle baru → clear tw-classes/ dulu.\r\n// Ini solve masalah \"file yang dihapus tetap ada di safelist\" tanpa butuh hook.\r\n\r\nconst CYCLE_SENTINEL = \"_cycle.txt\"\r\nconst START_SENTINEL = \"_start.txt\"\r\n\r\n// Cached per worker instance — hindari readFileSync berulang di file yang sama\r\nconst _workerCache = new Map<string, string>()\r\n\r\nfunction getTwClassesDir(safelistPath: string): string {\r\n return path.join(path.dirname(safelistPath), \"tw-classes\")\r\n}\r\n\r\nfunction readSentinel(filePath: string): string {\r\n try { return fs.readFileSync(filePath, \"utf-8\").trim() } catch { return \"\" }\r\n}\r\n\r\n// Lock untuk serialisasi clearAndMarkCycle di dalam satu worker process.\r\n// Turbopack bisa spawn multiple concurrent loader calls — tanpa lock,\r\n// dua worker bisa clear tw-classes/ bersamaan → window dimana semua file\r\n// hilang → Tailwind scan → CSS output kosong → FLICKER.\r\n// Lock ini hanya efektif dalam satu Node.js process (per worker), tapi itu cukup\r\n// karena Turbopack menggunakan single-threaded Node.js per worker.\r\nlet _clearLock = false\r\n\r\nfunction clearAndMarkCycle(twClassesDir: string, startId: string): void {\r\n // Sudah ada clear yang sedang berjalan di worker ini — skip, biarkan yang pertama selesai.\r\n // Worker lain yang mungkin sudah clear duluan akan tulis _cycle.txt → kita akan\r\n // melihat cachedCycle === startId di iterasi berikutnya dan skip juga.\r\n if (_clearLock) return\r\n _clearLock = true\r\n try {\r\n if (fs.existsSync(twClassesDir)) {\r\n // Rename-then-recreate strategy: rename folder lama dulu, lalu buat folder baru kosong,\r\n // baru hapus folder lama. Ini memastikan tidak ada window dimana tw-classes/ tidak ada\r\n // atau kosong (yang akan bikin Tailwind re-scan dan generate CSS tanpa classes → flicker).\r\n const tempDir = `${twClassesDir}_clearing_${Date.now()}`\r\n try {\r\n fs.renameSync(twClassesDir, tempDir)\r\n fs.mkdirSync(twClassesDir, { recursive: true })\r\n // Copy _start.txt ke folder baru sebelum hapus folder lama\r\n const startFile = path.join(tempDir, START_SENTINEL)\r\n if (fs.existsSync(startFile)) {\r\n fs.copyFileSync(startFile, path.join(twClassesDir, START_SENTINEL))\r\n }\r\n // Copy _webpack-merged.css kalau ada\r\n const mergedFile = path.join(tempDir, \"_webpack-merged.css\")\r\n if (fs.existsSync(mergedFile)) {\r\n fs.copyFileSync(mergedFile, path.join(twClassesDir, \"_webpack-merged.css\"))\r\n }\r\n // Tulis _cycle.txt di folder baru SEBELUM hapus folder lama\r\n // Ini pastikan tw-classes/ selalu punya content valid\r\n fs.writeFileSync(path.join(twClassesDir, CYCLE_SENTINEL), startId, \"utf-8\")\r\n _workerCache.set(twClassesDir, startId)\r\n // Baru hapus folder lama secara async — tidak blokir compile\r\n fs.rmSync(tempDir, { recursive: true, force: true })\r\n } catch {\r\n // Fallback ke cara lama jika rename gagal (mis. cross-device)\r\n for (const file of fs.readdirSync(twClassesDir)) {\r\n if (file === START_SENTINEL || file === \"_webpack-merged.css\") continue\r\n try { fs.unlinkSync(path.join(twClassesDir, file)) } catch { /* non-fatal */ }\r\n }\r\n fs.writeFileSync(path.join(twClassesDir, CYCLE_SENTINEL), startId, \"utf-8\")\r\n _workerCache.set(twClassesDir, startId)\r\n }\r\n } else {\r\n fs.mkdirSync(twClassesDir, { recursive: true })\r\n fs.writeFileSync(path.join(twClassesDir, CYCLE_SENTINEL), startId, \"utf-8\")\r\n _workerCache.set(twClassesDir, startId)\r\n }\r\n } catch { /* non-fatal */ } finally {\r\n _clearLock = false\r\n }\r\n}\r\n\r\nfunction getPerFileSafelistPath(safelistDir: string, resourcePath: string): string {\r\n const normalized = resourcePath.replace(/\\\\/g, \"/\")\r\n const slug = normalized\r\n .replace(/^.*\\/src\\//, \"\")\r\n .replace(/\\.[tj]sx?$/, \"\")\r\n .replace(/[^a-zA-Z0-9]/g, \"_\")\r\n .slice(0, 80)\r\n return path.join(safelistDir, `${slug}.css`)\r\n}\r\n\r\nfunction writePerFileSafelist(\r\n safelistPath: string | undefined,\r\n resourcePath: string,\r\n classes: string[]\r\n): void {\r\n if (!safelistPath || classes.length === 0) return\r\n try {\r\n const twClassesDir = getTwClassesDir(safelistPath)\r\n\r\n // Baca start ID dari _start.txt (ditulis withTailwindStyled saat config load)\r\n const startId = readSentinel(path.join(twClassesDir, START_SENTINEL))\r\n\r\n // Compare dengan cycle ID terakhir — pakai in-memory cache dulu, fallback ke disk\r\n const cachedCycle = _workerCache.get(twClassesDir) ?? readSentinel(path.join(twClassesDir, CYCLE_SENTINEL))\r\n\r\n if (startId && cachedCycle !== startId) {\r\n // Compile cycle baru — clear tw-classes/ dan tulis _cycle.txt baru\r\n clearAndMarkCycle(twClassesDir, startId)\r\n } else if (!fs.existsSync(twClassesDir)) {\r\n fs.mkdirSync(twClassesDir, { recursive: true })\r\n }\r\n\r\n const outPath = getPerFileSafelistPath(twClassesDir, resourcePath)\r\n const sorted = [...new Set(classes)].sort()\r\n const css = [\r\n `/* tw-safelist: ${path.basename(resourcePath)} — auto-generated */`,\r\n \"@layer utilities {\",\r\n sorted.map((cls) => `.${cls.replace(/([^a-zA-Z0-9_-])/g, \"\\\\$1\")} {}`).join(\"\\n\"),\r\n \"}\",\r\n ].join(\"\\n\")\r\n\r\n // Skip write jika isi sama — avoid Tailwind re-scan yang tidak perlu\r\n try {\r\n if (fs.readFileSync(outPath, \"utf-8\") === css) return\r\n } catch { /* file belum ada, lanjut write */ }\r\n\r\n // Atomic write: tulis ke temp file dulu, lalu rename ke path final.\r\n // Ini mencegah Tailwind scanner membaca file yang sedang ditulis (partial read)\r\n // yang akan menghasilkan CSS incomplete → FLICKER.\r\n // rename() dijamin atomic di semua OS modern (POSIX dan Windows NTFS).\r\n const tmpPath = `${outPath}.tmp`\r\n try {\r\n fs.writeFileSync(tmpPath, css, \"utf-8\")\r\n fs.renameSync(tmpPath, outPath)\r\n } catch {\r\n // Fallback kalau rename gagal (mis. cross-device, Windows lock)\r\n try { fs.unlinkSync(tmpPath) } catch { /* ignore */ }\r\n fs.writeFileSync(outPath, css, \"utf-8\")\r\n }\r\n } catch {\r\n // Non-fatal\r\n }\r\n}\r\n\r\n/**\r\n * Main loader function — compatible dengan Turbopack, Webpack 5, rspack.\r\n */\r\nexport default function turbopackLoader(\r\n this: TurbopackContext,\r\n source: string,\r\n options: TurbopackLoaderOptions = {}\r\n): string {\r\n // Skip files yang tidak perlu di-transform\r\n if (isSkippable(this.resourcePath)) return source\r\n\r\n // Detect router context\r\n const router = detectRouter(this.resourcePath)\r\n const nextMajor = parseNum(options.nextMajor)\r\n const debug = parseBool(options.debug)\r\n const filename = path.basename(this.resourcePath)\r\n\r\n // Build effective options berdasarkan router context\r\n const effective = {\r\n addDataAttr: parseBool(options.addDataAttr),\r\n // App Router: selalu auto-detect client boundary\r\n // Pages Router: opt-in via option\r\n autoClientBoundary: router === \"app\" ? true : parseBool(options.autoClientBoundary),\r\n // Hoist by default untuk semua contexts\r\n hoist: parseBool(options.hoist, true),\r\n // Pages Router: preserve imports (RSC tidak berlaku)\r\n preserveImports: router === \"pages\" ? true : parseBool(options.preserveImports, false),\r\n }\r\n\r\n if (debug) {\r\n console.debug(`[tw-loader] ${filename}: router=${router} nextMajor=${nextMajor ?? \"unknown\"}`)\r\n }\r\n\r\n // Preserve directive (use client / use server)\r\n const { directive, stripped } = extractDirective(source)\r\n\r\n try {\r\n const output = runLoaderTransform({\r\n filepath: this.resourcePath,\r\n source: stripped,\r\n options: effective,\r\n })\r\n\r\n // Tidak ada perubahan — Rust kembalikan source asli (bukan string kosong).\r\n // Guard lama `!output.code.length` selalu false karena code = original source.\r\n // Fix: cukup cek changed flag saja; return source asli agar Next.js RSC boundary\r\n // tetap intact dan tidak ada interaksi dengan React Compiler locale detection.\r\n if (!output.changed) {\r\n // Meski tidak ada transform, tetap tulis safelist kalau ada classes yang ditemukan.\r\n // Object config style (tw.div({...})) tidak butuh transform tapi tetap punya classes.\r\n if (output.classes.length > 0) {\r\n writePerFileSafelist(options.safelistPath, this.resourcePath, output.classes)\r\n }\r\n return source\r\n }\r\n\r\n // Register classes untuk route map (dipakai webpack dev plugin & build manifest)\r\n if (output.classes.length > 0) {\r\n registerFileClasses(this.resourcePath, output.classes)\r\n // Turbopack: tulis per-file safelist langsung dari loader.\r\n // Race-condition-safe karena tiap file punya output path unik.\r\n writePerFileSafelist(options.safelistPath, this.resourcePath, output.classes)\r\n }\r\n\r\n // Re-attach directive di depan\r\n if (!directive) return output.code\r\n\r\n // Strip any duplicate directives yang mungkin diinject oleh compiler\r\n const clean = output.code.replace(/^\\s*[\"'](use client|use server)[\"']\\s*;?\\s*\\n?/, \"\")\r\n return directive + clean\r\n } catch (err) {\r\n // Loader harus tidak pernah throw — return source asli dengan warning\r\n const msg = err instanceof Error ? err.message : String(err)\r\n if (debug) {\r\n console.warn(`[tw-loader] transform failed for ${filename}: ${msg}`)\r\n }\r\n return source\r\n }\r\n}"]}
1
+ {"version":3,"sources":["../packages/domain/shared/src/native-resolution.ts","../packages/domain/shared/src/index.ts","../packages/domain/compiler/src/nativeBridge.ts","../packages/domain/compiler/src/tailwindEngine.ts","../packages/domain/compiler/src/cssGeneratorNative.ts","../packages/domain/compiler/src/index.ts","../packages/domain/compiler/src/internal.ts","../packages/presentation/next/src/turbopackLoader.ts"],"names":["fs","path","createRequire","fileURLToPath","require","existsSync","resolve","init_src","runCssPipeline"],"mappings":"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","file":"turbopackLoader.js","sourcesContent":["/**\r\n * Prebuilt binary resolution untuk native NAPI bindings.\r\n * QA #1: Resolve native binary dari prebuilt packages atau local build.\r\n *\r\n * Prioritas:\r\n * 1. TW_NATIVE_PATH env var (explicit override)\r\n * 2. Prebuilt binary dari platform-specific npm package\r\n * 3. Local build dari source (developer mode)\r\n */\r\n\r\nimport { createRequire } from \"node:module\"\r\nimport * as fs from \"node:fs\"\r\nimport * as path from \"node:path\"\r\n\r\nconst isBrowser = typeof window !== \"undefined\" || typeof document !== \"undefined\"\r\n\r\n// ESM-safe require — works in both ESM and CJS contexts\r\nconst _require = typeof require !== \"undefined\" ? require : createRequire(import.meta.url)\r\n\r\nexport interface NativeResolutionResult {\r\n path: string | null\r\n source: \"env\" | \"prebuilt\" | \"local\" | \"not-found\"\r\n platform: string\r\n tried: string[]\r\n}\r\n\r\n/** Platform key → prebuilt npm package name */\r\nconst PLATFORM_MAP: Record<string, string[]> = {\r\n \"linux-x64\": [\"@tailwind-styled/native-linux-x64-gnu\", \"@tailwind-styled/native-linux-x64\"],\r\n \"linux-arm64\": [\"@tailwind-styled/native-linux-arm64-gnu\", \"@tailwind-styled/native-linux-arm64\"],\r\n \"darwin-x64\": [\"@tailwind-styled/native-darwin-x64\"],\r\n \"darwin-arm64\": [\"@tailwind-styled/native-darwin-arm64\"],\r\n \"win32-x64\": [\"@tailwind-styled/native-win32-x64-msvc\", \"@tailwind-styled/native-win32-x64\"],\r\n \"win32-arm64\": [\"@tailwind-styled/native-win32-arm64-msvc\", \"@tailwind-styled/native-win32-arm64\"],\r\n}\r\n\r\nfunction platformKey(): string {\r\n if (isBrowser) return \"browser\"\r\n return `${process.platform}-${process.arch}`\r\n}\r\n\r\n/**\r\n * Resolve native binary path dari semua sumber yang tersedia.\r\n *\r\n * @example\r\n * const result = resolveNativeBinary()\r\n * if (result.path) {\r\n * const binding = require(result.path)\r\n * } else {\r\n * throw new Error(\"Native binding not found — run npm run build:rust\")\r\n * }\r\n */\r\nexport function resolveNativeBinary(runtimeDir?: string): NativeResolutionResult {\r\n const platform = platformKey()\r\n const tried: string[] = []\r\n\r\n if (isBrowser) {\r\n return { path: null, source: \"not-found\", platform, tried: [\"not available in browser\"] }\r\n }\r\n\r\n // 0. Disabled flag — always short-circuit before any I/O\r\n // TWS_NO_NATIVE adalah nama canonical; TWS_DISABLE_NATIVE diterima untuk backward compat\r\n if (process.env.TWS_NO_NATIVE === \"1\" || process.env.TWS_DISABLE_NATIVE === \"1\") {\r\n return { path: null, source: \"not-found\", platform, tried: [] }\r\n }\r\n\r\n // 1. Env var override\r\n const envPath = process.env.TW_NATIVE_PATH?.trim()\r\n if (envPath) {\r\n if (fs.existsSync(envPath)) {\r\n return { path: envPath, source: \"env\", platform, tried }\r\n }\r\n tried.push(`env:${envPath} (not found)`)\r\n }\r\n\r\n // 2. Prebuilt binary dari platform-specific npm package\r\n const prebuiltPkgs = PLATFORM_MAP[platform] ?? []\r\n for (const pkg of prebuiltPkgs) {\r\n try {\r\n const candidate = _require.resolve(`${pkg}/tailwind_styled_parser.node`)\r\n if (fs.existsSync(candidate)) {\r\n return { path: candidate, source: \"prebuilt\", platform, tried }\r\n }\r\n tried.push(`prebuilt:${pkg} (resolved but missing)`)\r\n } catch {\r\n tried.push(`prebuilt:${pkg} (not installed)`)\r\n }\r\n }\r\n\r\n // 2b. .node file bundled inside this package itself (via \"files\": [\"native/*.node\"])\r\n // Covers the case where user installs tailwind-styled-v4 directly from npm\r\n // and the .node file lands at node_modules/tailwind-styled-v4/native/*.node\r\n const napiPlatform = platform === \"linux-x64\" ? \"linux-x64-gnu\"\r\n : platform === \"linux-arm64\" ? \"linux-arm64-gnu\"\r\n : platform\r\n const BINARY_NAMES_SELF = [\"tailwind-styled-native\", \"tailwind_styled_parser\"]\r\n if (runtimeDir) {\r\n // runtimeDir is typically dist/ — go up to package root, then into native/\r\n for (const depth of [\"..\", path.join(\"..\", \"..\"), path.join(\"..\", \"..\", \"..\")]) {\r\n const pkgRoot = path.resolve(runtimeDir, depth)\r\n for (const bin of BINARY_NAMES_SELF) {\r\n for (const suffix of [\"\", `.${platform}`, `.${napiPlatform}`]) {\r\n const candidate = path.resolve(pkgRoot, \"native\", `${bin}${suffix}.node`)\r\n tried.push(`self-bundled:${candidate}`)\r\n if (fs.existsSync(candidate)) {\r\n return { path: candidate, source: \"prebuilt\", platform, tried }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // 3. Local build candidates\r\n const cwd = process.cwd()\r\n const base = runtimeDir ?? cwd\r\n // napi-rs naming: platform key may have -gnu suffix on Linux (already computed above)\r\n\r\n // Both possible binary names:\r\n // - \"tailwind_styled_parser\" (old hardcoded name in resolvers)\r\n // - \"tailwind-styled-native\" (actual binaryName in native/package.json)\r\n const BINARY_NAMES = [\"tailwind-styled-native\", \"tailwind_styled_parser\"]\r\n\r\n const localCandidates: string[] = []\r\n\r\n for (const bin of BINARY_NAMES) {\r\n localCandidates.push(path.resolve(base, `${bin}.node`))\r\n localCandidates.push(path.resolve(base, \"..\", `${bin}.node`))\r\n localCandidates.push(path.resolve(base, `${bin}.${platform}.node`))\r\n localCandidates.push(path.resolve(base, `${bin}.${napiPlatform}.node`))\r\n }\r\n\r\n // Walk up from cwd AND base to find repo root native/ dir\r\n // Needed when npm workspaces sets cwd to the package subdir\r\n for (const startDir of [cwd, base]) {\r\n let dir = startDir\r\n for (let i = 0; i < 6; i++) {\r\n const nativeDir = path.resolve(dir, \"native\")\r\n for (const bin of BINARY_NAMES) {\r\n localCandidates.push(path.resolve(nativeDir, `${bin}.node`))\r\n localCandidates.push(path.resolve(nativeDir, `${bin}.${platform}.node`))\r\n localCandidates.push(path.resolve(nativeDir, `${bin}.${napiPlatform}.node`))\r\n localCandidates.push(path.resolve(nativeDir, \"target\", \"release\", `${bin}.node`))\r\n }\r\n const parent = path.resolve(dir, \"..\")\r\n if (parent === dir) break\r\n dir = parent\r\n }\r\n }\r\n\r\n for (const candidate of localCandidates) {\r\n tried.push(`local:${candidate}`)\r\n if (fs.existsSync(candidate)) {\r\n return { path: candidate, source: \"local\", platform, tried }\r\n }\r\n }\r\n\r\n return { path: null, source: \"not-found\", platform, tried }\r\n}\r\n\r\n/**\r\n * Format human-readable error untuk \"binary not found\".\r\n */\r\nexport function formatNativeNotFoundError(result: NativeResolutionResult): string {\r\n const lines = [\r\n `[tailwind-styled] Native binding not found for ${result.platform}`,\r\n ``,\r\n `Tried:`,\r\n ...result.tried.map(t => ` - ${t}`),\r\n ``,\r\n `Solutions:`,\r\n ` 1. Build locally: npm run build:rust`,\r\n ` 2. Install prebuilt: npm install @tailwind-styled/native-${result.platform}`,\r\n ` 3. Override path: TW_NATIVE_PATH=/path/to/parser.node`,\r\n ]\r\n return lines.join(\"\\n\")\r\n}","import { createHash } from \"node:crypto\"\r\nimport fs from \"node:fs\"\r\nimport path from \"node:path\"\r\nimport { fileURLToPath } from \"node:url\"\r\nimport { createRequire } from \"node:module\"\r\n\r\n// Native-only: Node.js is always available. No browser fallback.\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Types\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type TokenMap = Record<string, string>\r\n\r\nexport type VariantValue = string | number | boolean | undefined\r\n\r\nexport type VariantProps = Record<string, VariantValue>\r\n\r\nexport type HtmlTagName = keyof HTMLElementTagNameMap\r\n\r\nexport type CompoundCondition = Record<string, string | number | boolean>\r\n\r\nexport type VariantMatrix = Record<string, Array<string | number | boolean>>\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Logging\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface Logger {\r\n warn(...args: unknown[]): void\r\n debug(...args: unknown[]): void\r\n error(...args: unknown[]): void\r\n log(...args: unknown[]): void\r\n}\r\n\r\nexport function createLogger(namespace: string): Logger {\r\n const prefix = `[${namespace}]`\r\n return {\r\n warn(...args: unknown[]) {\r\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\r\n },\r\n debug(...args: unknown[]) {\r\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\r\n },\r\n error(...args: unknown[]) {\r\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\r\n },\r\n log(...args: unknown[]) {\r\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\r\n },\r\n }\r\n}\r\n\r\nexport function createDebugLogger(namespace: string, label?: string): (msg: string) => void {\r\n const prefix = label ? `[${namespace}:${label}]` : `[${namespace}]`\r\n return (msg: string) => {\r\n if (process.env.DEBUG?.includes(namespace) || process.env.TW_DEBUG) {\r\n console.debug(prefix, msg)\r\n }\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Error handling\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type ErrorSource = \"rust\" | \"validation\" | \"compile\" | \"io\" | \"config\" | \"unknown\"\r\n\r\ntype ZodLikeIssue = {\r\n path?: readonly PropertyKey[]\r\n message?: string\r\n}\r\n\r\nfunction formatIssuePath(path?: readonly PropertyKey[]): string {\r\n if (!path || path.length === 0) return \"(root)\"\r\n return path\r\n .map((segment) =>\r\n typeof segment === \"symbol\" ? segment.description ?? segment.toString() : String(segment)\r\n )\r\n .join(\".\")\r\n}\r\n\r\nexport class TwError extends Error {\r\n /** @deprecated Gunakan source */\r\n public readonly domain: string\r\n public readonly source: ErrorSource\r\n public readonly code: string\r\n public readonly originalCause?: unknown\r\n\r\n constructor(domainOrSource: string, code: string, message: string, cause?: unknown) {\r\n super(message)\r\n this.name = \"TwError\"\r\n this.domain = domainOrSource\r\n this.source = domainOrSource as ErrorSource\r\n this.code = code\r\n this.originalCause = cause\r\n if (Error.captureStackTrace) Error.captureStackTrace(this, TwError)\r\n }\r\n\r\n static fromIo(code: string, message: string): TwError {\r\n return new TwError(\"io\", code, message)\r\n }\r\n\r\n static fromCompile(code: string, message: string): TwError {\r\n return new TwError(\"compile\", code, message)\r\n }\r\n\r\n static fromRust(err: { code?: string; message?: string } | Error | unknown): TwError {\r\n if (err instanceof TwError) return err\r\n if (err instanceof Error) return new TwError(\"rust\", \"RUST_ERROR\", err.message, err)\r\n if (err && typeof err === \"object\") {\r\n const e = err as { code?: string; message?: string }\r\n return new TwError(\"rust\", e.code ?? \"RUST_ERROR\", e.message ?? String(err), err)\r\n }\r\n return new TwError(\"rust\", \"RUST_ERROR\", String(err), err)\r\n }\r\n\r\n /** Buat TwError dari ZodError — dukung shape Zod v3 (`errors`) dan v4 (`issues`). */\r\n static fromZod(err: { issues?: ZodLikeIssue[]; errors?: ZodLikeIssue[] }): TwError {\r\n const first = err.issues?.[0] ?? err.errors?.[0]\r\n const path = formatIssuePath(first?.path)\r\n const message = first ? `${path}: ${first.message}` : \"Schema validation failed\"\r\n return new TwError(\"validation\", \"SCHEMA_VALIDATION_FAILED\", message, err)\r\n }\r\n\r\n static wrap(source: string, code: string, err: unknown): TwError {\r\n if (err instanceof TwError) return err\r\n if (err instanceof Error) return new TwError(source, code, err.message, err)\r\n return new TwError(source, code, String(err), err)\r\n }\r\n\r\n override toString(): string {\r\n return `TwError [${this.source}:${this.code}] ${this.message}`\r\n }\r\n\r\n toJSON(): { name: string; source: string; code: string; message: string } {\r\n return { name: this.name, source: this.source, code: this.code, message: this.message }\r\n }\r\n\r\n toCliMessage(): string {\r\n return `[${this.source.toUpperCase()}:${this.code}] ${this.message}`\r\n }\r\n}\r\n\r\nexport function wrapUnknownError(domain: string, code: string, error: unknown): TwError {\r\n return TwError.wrap(domain, code, error)\r\n}\r\n\r\nexport function isTwError(err: unknown): err is TwError {\r\n return err instanceof TwError\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Native binding resolution\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface LoadNativeBindingOptions<T> {\r\n runtimeDir: string\r\n candidates: string[]\r\n isValid: (module: unknown) => module is T\r\n invalidExportMessage: string\r\n}\r\n\r\nexport interface LoadNativeBindingResult<T> {\r\n binding: T | null\r\n loadErrors: Array<{ path: string; message: string }>\r\n loadedPath?: string\r\n}\r\n\r\nexport function loadNativeBinding<T>(options: LoadNativeBindingOptions<T>): LoadNativeBindingResult<T> {\r\n const { runtimeDir, candidates, isValid } = options\r\n const loadErrors: Array<{ path: string; message: string }> = []\r\n\r\n for (const candidate of candidates) {\r\n const candidatePath = path.resolve(runtimeDir, candidate)\r\n try {\r\n if (!fs.existsSync(candidatePath) && !fs.existsSync(candidatePath + \".node\")) {\r\n continue\r\n }\r\n const mod = requireNativeModule(candidatePath)\r\n if (mod && isValid(mod)) {\r\n return { binding: mod, loadErrors, loadedPath: candidatePath }\r\n }\r\n loadErrors.push({ path: candidatePath, message: options.invalidExportMessage })\r\n } catch (e) {\r\n loadErrors.push({ path: candidatePath, message: e instanceof Error ? e.message : String(e) })\r\n }\r\n }\r\n\r\n return { binding: null, loadErrors }\r\n}\r\n\r\nconst _require = createRequire(import.meta.url)\r\n\r\nfunction requireNativeModule(p: string): unknown {\r\n return _require(p)\r\n}\r\n\r\nexport interface ResolveCandidatesOptions {\r\n runtimeDir?: string\r\n envVarNames?: string[]\r\n includeDefaultCandidates?: boolean\r\n enforceNodeExtensionForEnvPath?: boolean\r\n /** @deprecated — ignored, kept for backward compat */\r\n packageName?: string\r\n}\r\n\r\nexport function resolveNativeBindingCandidates(options: ResolveCandidatesOptions): string[] {\r\n const {\r\n envVarNames = [\"TW_NATIVE_PATH\", \"TWS_NATIVE_PATH\"],\r\n includeDefaultCandidates = true,\r\n enforceNodeExtensionForEnvPath = false,\r\n } = options\r\n // Default ke cwd kalau runtimeDir tidak disediakan\r\n const runtimeDir = options.runtimeDir || process.cwd()\r\n const candidates: string[] = []\r\n\r\n for (const envVar of envVarNames) {\r\n const envPath = process.env[envVar]\r\n if (envPath) {\r\n candidates.push(enforceNodeExtensionForEnvPath && !envPath.endsWith(\".node\") ? envPath + \".node\" : envPath)\r\n }\r\n }\r\n\r\n if (!includeDefaultCandidates) return candidates\r\n\r\n if (fs.existsSync(runtimeDir)) {\r\n try {\r\n for (const entry of fs.readdirSync(runtimeDir)) {\r\n if (entry.endsWith(\".node\")) candidates.push(entry)\r\n }\r\n } catch { /* ignore read errors */ }\r\n }\r\n\r\n const BINARY_NAMES = [\"tailwind-styled-native\", \"tailwind_styled_parser\"]\r\n const napiPlatform = process.platform === \"linux\" && process.arch === \"x64\" ? \"linux-x64-gnu\"\r\n : process.platform === \"linux\" && process.arch === \"arm64\" ? \"linux-arm64-gnu\"\r\n : `${process.platform}-${process.arch}`\r\n\r\n for (const bin of BINARY_NAMES) {\r\n candidates.push(path.resolve(runtimeDir, `${bin}.node`))\r\n candidates.push(path.resolve(runtimeDir, `${bin}.${napiPlatform}.node`))\r\n // 1 level: dist/ → package-root/native/ (published npm package)\r\n candidates.push(path.resolve(runtimeDir, \"..\", \"native\", `${bin}.node`))\r\n candidates.push(path.resolve(runtimeDir, \"..\", \"native\", `${bin}.${napiPlatform}.node`))\r\n // cwd fallback (user project root)\r\n candidates.push(path.resolve(process.cwd(), \"native\", `${bin}.node`))\r\n candidates.push(path.resolve(process.cwd(), \"native\", `${bin}.${napiPlatform}.node`))\r\n // 4 level: dist/ → package/ → domain/ → packages/ → repo-root/ (monorepo dev)\r\n candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", `${bin}.node`))\r\n candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", `${bin}.${napiPlatform}.node`))\r\n // 3 level fallback\r\n candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"native\", `${bin}.node`))\r\n }\r\n\r\n return Array.from(new Set(candidates))\r\n}\r\n\r\nexport function resolveRuntimeDir(dir: string | undefined, importMetaUrl: string): string {\r\n if (dir) return path.resolve(dir)\r\n try {\r\n return path.dirname(fileURLToPath(importMetaUrl))\r\n } catch {\r\n return process.cwd()\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Hashing\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport function hashContent(content: string, algorithm: string = \"md5\", length?: number): string {\r\n const hash = createHash(algorithm).update(content).digest(\"hex\")\r\n return length ? hash.slice(0, length) : hash\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Error formatting\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport function formatErrorMessage(error: unknown): string {\r\n if (error instanceof TwError) return error.toString()\r\n if (error instanceof Error) return error.message\r\n return String(error)\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// LRU Cache\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport class LRUCache<K, V> {\r\n private capacity: number\r\n private cache: Map<K, V>\r\n\r\n constructor(capacity: number) {\r\n this.capacity = capacity\r\n this.cache = new Map()\r\n }\r\n\r\n get(key: K): V | undefined {\r\n if (!this.cache.has(key)) return undefined\r\n const value = this.cache.get(key)!\r\n this.cache.delete(key)\r\n this.cache.set(key, value)\r\n return value\r\n }\r\n\r\n set(key: K, value: V): void {\r\n if (this.cache.has(key)) {\r\n this.cache.delete(key)\r\n } else if (this.cache.size >= this.capacity) {\r\n const firstKey = this.cache.keys().next().value\r\n if (firstKey !== undefined) {\r\n this.cache.delete(firstKey)\r\n }\r\n }\r\n this.cache.set(key, value)\r\n }\r\n\r\n delete(key: K): boolean {\r\n return this.cache.delete(key)\r\n }\r\n\r\n has(key: K): boolean {\r\n return this.cache.has(key)\r\n }\r\n\r\n clear(): void {\r\n this.cache.clear()\r\n }\r\n\r\n entries(): IterableIterator<[K, V]> {\r\n return this.cache.entries()\r\n }\r\n\r\n get size(): number {\r\n return this.cache.size\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Trace Utilities\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type { TraceSnapshot, TraceSummary } from \"./trace\"\r\nexport {\r\n getHealthColor,\r\n getModeColor,\r\n formatMemory,\r\n formatDuration,\r\n calculateHealth,\r\n getBuildTimeColor,\r\n getMemoryColor,\r\n createTraceSnapshot,\r\n getPipelinePercentages,\r\n} from \"./trace\"\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Performance Telemetry\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Error Codes\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type { ErrorCode } from \"./error-codes\"\r\nexport { ERROR_CODES, getSuggestion, formatErrorCode } from \"./error-codes\"\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Tailwind Compatibility\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type { TailwindInfo } from \"./compatibility\"\r\nexport { detectTailwind, assertTailwindV4, getTailwindVersion, isTailwindV4 } from \"./compatibility\"\r\n\r\n// ── Native binding schemas (Zod boundary validation)\r\nexport {\r\n NativeScanFileSchema, NativeScanResultSchema,\r\n NativeAnalyzerReportSchema, NativeTransformResultSchema,\r\n NativeCssCompileResultSchema, NativeWatchResultSchema,\r\n NativeCacheEntrySchema, NativeCacheReadResultSchema,\r\n safeParseNative, parseNative,\r\n} from './native-schemas'\r\n\r\n// ── ESM-safe runtime helpers ──────────────────────────────────────────────\r\nexport {\r\n createEsmRequire,\r\n getDirname,\r\n getFilename,\r\n resolveFromRoot,\r\n tryRequire,\r\n resolveNativeNodePath,\r\n} from \"./esmHelpers\"\r\n\r\n// ── Performance telemetry ────────────────────────────────────────────────────\r\nexport {\r\n TelemetryCollector,\r\n getGlobalTelemetry,\r\n resetGlobalTelemetry,\r\n createBuildTimer,\r\n type BuildTelemetry,\r\n type TelemetrySummary,\r\n type BuildPhases,\r\n} from \"./telemetry\"\r\n\r\n// ── Config/JSON schema validation ─────────────────────────────────────────────\r\nexport {\r\n ScanCacheSchema,\r\n ScanCacheClassEntrySchema,\r\n TailwindConfigSchema,\r\n RegistryPluginEntrySchema,\r\n RegistryFileSchema,\r\n PackageJsonSchema,\r\n parseJsonWithSchema,\r\n parseJsonFileWithSchema,\r\n type ScanCache,\r\n type ScanCacheClassEntry,\r\n type TailwindConfig,\r\n type RegistryPluginEntry,\r\n type RegistryFile,\r\n type PackageJson,\r\n} from \"./configSchemas\"\r\n\r\n// ── Worker/bootstrap path resolution ─────────────────────────────────────────\r\nexport {\r\n resolveWorkerPath,\r\n resolveLoaderPath,\r\n type WorkerPathOptions,\r\n type WorkerPathResult,\r\n} from \"./workerResolver\"\r\n\r\n// ── Codegen helpers ───────────────────────────────────────────────────────────\r\nexport {\r\n generateComponentCode,\r\n generateStorybookStory,\r\n generateClassRenameCodemod,\r\n generateBarrelFile,\r\n type ComponentCodegenOptions,\r\n} from \"./codegen\"\r\n\r\n// ── Native binary resolution (QA #1) ─────────────────────────────────────────\r\nexport {\r\n resolveNativeBinary,\r\n formatNativeNotFoundError,\r\n type NativeResolutionResult,\r\n} from \"./native-resolution\"\r\n\r\n// ── Shared observability contract ────────────────────────────────────────────\r\nexport {\r\n createObservabilityClient,\r\n type ClassInspection,\r\n type ClassProperty,\r\n type ClassUsageLocation,\r\n type BuildTrace,\r\n type BuildPhaseTrace,\r\n type DashboardMetrics,\r\n type DashboardSummary,\r\n type ObservabilityClient,\r\n} from \"./observability\"\r\n\r\nexport {\r\n TW_STATE_STATIC_FILENAME,\r\n extractStaticStateCss,\r\n appendStaticStateCssToSafelist,\r\n type TwStateConfigEntry,\r\n type StaticStateCssInput,\r\n type GeneratedStateRule,\r\n type StaticStateExtractionResult,\r\n} from \"./staticStateExtractor\"\r\nexport { setGlobalLogFile } from \"./logger\"","/**\r\n * tailwind-styled-v5 — Native Bridge Loader\r\n *\r\n * Uses @tailwind-styled/shared for native binding resolution.\r\n * All functions require native Rust binding - no JS fallback.\r\n */\r\n\r\nimport { resolveNativeBinary, resolveRuntimeDir } from \"@tailwind-styled/shared\"\r\n\r\n// require() is safe here — tsup banner injects CJS-compatible require into ESM output.\r\n// See tsup.config.ts esbuildOptions banner for how this is set up.\r\nconst _loadNative = (path: string): unknown => require(path)\r\n\r\nexport interface ComponentMetadata {\r\n component: string\r\n tag: string\r\n baseClass: string\r\n subComponents: Record<string, { tag?: string; class: string }>\r\n}\r\n\r\nexport interface NativeRscResult {\r\n isServer: boolean\r\n needsClientDirective: boolean\r\n clientReasons: string[]\r\n}\r\n\r\nconst log = (...args: unknown[]) => {\r\n if (process.env.DEBUG?.includes(\"compiler:native\")) {\r\n console.log(\"[compiler:native]\", ...args)\r\n }\r\n}\r\n\r\n// ── Structured Type Definitions ─────────────────────────────────────────────\r\n\r\nexport interface ScanWorkspaceResult {\r\n files: string[]\r\n total_files: number\r\n classes: string[]\r\n unique_classes: number\r\n duration_ms: number\r\n errors: string[]\r\n}\r\n\r\nexport interface ScanFileResult {\r\n file: string\r\n classes: string[]\r\n class_count: number\r\n has_tw_usage: boolean\r\n size_bytes: number\r\n duration_ms: number\r\n}\r\n\r\nexport interface BatchExtractResult {\r\n file: string\r\n classes: string[]\r\n contentHash: string\r\n ok: boolean\r\n error?: string\r\n}\r\n\r\nexport interface SafelistCheckResult {\r\n matched: string[]\r\n unmatched: string[]\r\n safelistSize: number\r\n}\r\n\r\nexport interface PrefilterFileResult {\r\n file: string\r\n has_tw_usage: boolean\r\n duration_ms: number\r\n size_bytes: number\r\n status: \"processed\" | \"skipped\" | \"error\"\r\n error?: string\r\n}\r\n\r\nexport interface DeadCodeResult {\r\n deadInCss: string[]\r\n deadInSource: string[]\r\n liveClasses: string[]\r\n totalCssClasses: number\r\n totalSourceClasses: number\r\n}\r\n\r\nexport interface ProcessedCssResult {\r\n css: string\r\n size_bytes: number\r\n resolved_classes: string[]\r\n unknown_classes: string[]\r\n}\r\n\r\nexport interface ContainerConfig {\r\n tag: string\r\n containerJson: string\r\n containerName?: string\r\n breakpoints: Array<{ key: string; classes: string }>\r\n}\r\n\r\nexport interface HoistResult {\r\n code: string\r\n hoisted: string[]\r\n warnings: string[]\r\n}\r\n\r\nexport interface VariantTableResult {\r\n id: string\r\n tableJson: string\r\n keys: string[]\r\n defaultKey: string\r\n combinations: number\r\n}\r\n\r\nexport interface ClassifyResult {\r\n className: string\r\n bucket: string\r\n sortOrder: number\r\n}\r\n\r\nexport interface MergeResult {\r\n declarationsJson: string\r\n declarationString: string\r\n count: number\r\n}\r\n\r\nexport interface ClassUsageItem {\r\n className: string\r\n usageCount: number\r\n filesJson: string\r\n bundleSizeBytes: number\r\n isDeadCode: boolean\r\n}\r\n\r\nexport interface StateCssConfig {\r\n tag: string\r\n componentName: string\r\n statesJson: string\r\n sourceFile: string\r\n}\r\n\r\nexport interface GeneratedStateCss {\r\n selector: string\r\n declarations: string\r\n cssRule: string\r\n componentName: string\r\n stateName: string\r\n}\r\n\r\n// ── Type Exports ────────────────────────────────────────────────────────────────\r\n\r\nexport interface NativeBridge {\r\n // CSS Compiler - New Rust implementation\r\n generateCssNative?: (classes: string[], theme_json: string) => string\r\n getCacheStats?: () => [number, number]\r\n clearThemeCache?: () => void\r\n // Core transform\r\n transformSource?: (source: string, opts?: Record<string, string>) => NativeTransformResult | null\r\n extractClassesFromSource?: (source: string) => string[]\r\n hasTwUsage?: (source: string) => boolean\r\n isAlreadyTransformed?: (source: string) => boolean\r\n // Phase 5: Scanner functions (snake_case from Rust)\r\n scan_workspace?: (root: string, extensions?: string[]) => ScanWorkspaceResult\r\n extract_classes_from_source?: (source: string) => string[]\r\n batch_extract_classes?: (filePaths: string[]) => BatchExtractResult[]\r\n check_against_safelist?: (classes: string[], safelist: string[]) => SafelistCheckResult\r\n scan_file?: (filePath: string) => ScanFileResult\r\n collect_files?: (root: string, extensions?: string[]) => string[]\r\n walk_and_prefilter_source_files?: (root: string, extensions?: string[]) => PrefilterFileResult[]\r\n generate_sub_component_types?: (root: string, outputPath?: string) => string\r\n // Class Extractor\r\n extractAllClasses?: (source: string) => string[]\r\n parseClasses?: (raw: string) => Array<{ raw: string; type: string }>\r\n // Application functions\r\n extractComponentUsage?: (source: string) => Array<{ component: string; propsJson: string }>\r\n normalizeAndDedupClasses?: (raw: string) => { normalized: string; duplicatesRemoved: number; uniqueCount: number }\r\n diffClassLists?: (previous: string[], current: string[]) => { added: string[]; removed: string[]; unchanged: string[]; hasChanges: boolean }\r\n batchExtractClasses?: (filePaths: string[]) => Array<{ file: string; classes: string[]; contentHash: string; ok: boolean; error?: string }>\r\n checkAgainstSafelist?: (classes: string[], safelist: string[]) => { matched: string[]; unmatched: string[]; safelistSize: number }\r\n // Batch 2\r\n hoistComponents?: (source: string) => HoistResult\r\n compileVariantTable?: (configJson: string) => VariantTableResult\r\n classifyAndSortClasses?: (classes: string[]) => ClassifyResult[]\r\n mergeCssDeclarations?: (cssChunks: string[]) => MergeResult\r\n analyzeClassUsage?: (classes: string[], scanResultJson: string, css: string) => ClassUsageItem[]\r\n analyzeRsc?: (source: string, filename: string) => {\r\n isServer: boolean\r\n needsClientDirective: boolean\r\n clientReasons: string[]\r\n }\r\n analyzeClasses?: (\r\n filesJson: string,\r\n cwd: string,\r\n flags: number\r\n ) => {\r\n css?: string\r\n code: string\r\n classes: string[]\r\n changed: boolean\r\n rscJson?: string\r\n metadataJson?: string\r\n safelist?: string[]\r\n } | null\r\n // CSS compilation\r\n compileCss?: (classes: string[], prefix?: string | null) => { css: string; classes: string[] }\r\n compileCssLightning?: (classes: string[]) => string\r\n /** Post-process raw Tailwind-generated CSS dengan LightningCSS di Rust */\r\n detectDeadCode?: (scanResultJson: string, css: string) => DeadCodeResult\r\n processTailwindCssLightning?: (css: string) => ProcessedCssResult\r\n processTailwindCssWithTargets?: (css: string, targets: string | null) => { css: string; size_bytes: number }\r\n // Atomic CSS (atomic.rs)\r\n parseAtomicClass?: (twClass: string) => string | null\r\n generateAtomicCss?: (rulesJson: string) => string\r\n toAtomicClasses?: (twClasses: string) => string\r\n clearAtomicRegistry?: () => void\r\n atomicRegistrySize?: () => number\r\n // Impact analysis (impact_analysis.rs)\r\n calculateImpact?: (impactJson: string) => string\r\n calculateRisk?: (className: string, totalComponents: number) => string\r\n calculateSavings?: (bundleSizeBytes: number, componentCount: number) => number\r\n // Static state CSS pre-generation (state_css.rs)\r\n extractTwStateConfigs?: (source: string, filename: string) => StateCssConfig[]\r\n generateStaticStateCss?: (inputs: Array<{\r\n tag: string\r\n componentName: string\r\n statesJson: string\r\n }>, resolvedCss: string | null) => GeneratedStateCss[]\r\n extractAndGenerateStateCss?: (source: string, filename: string) => GeneratedStateCss[]\r\n /**\r\n * Convert layout/utility class string ke CSS declarations.\r\n * Dipakai oleh extractContainerCssFromSource sebagai Rust-accelerated fallback.\r\n */\r\n layoutClassesToCss?: (classes: string) => string\r\n /**\r\n * Hash string dengan algoritma tertentu, return n karakter pertama.\r\n * Dipakai untuk generate deterministic container CSS IDs.\r\n */\r\n hashContent?: (input: string, algo: string, length: number) => string\r\n /** Hapus dead CSS selectors + minify via Lightning CSS. */\r\n eliminateDeadCss?: (css: string, deadClasses: string[]) => string\r\n /** Dead code detection + strip + Lightning CSS minify dalam satu call. */\r\n optimizeCss?: (css: string) => string\r\n /** Extract tw container configs dari source untuk static @container CSS generation. */\r\n extractTwContainerConfigs?: (source: string) => Array<{\r\n tag: string\r\n containerJson: string\r\n containerName?: string\r\n breakpoints: Array<{ key: string; classes: string }>\r\n }>\r\n \r\n // Phase 5.1: Cache Management (9 functions)\r\n get_cache_statistics?: () => string // Returns JSON\r\n clear_all_caches?: () => void\r\n clear_parse_cache?: () => void\r\n clear_resolve_cache?: () => void\r\n clear_compile_cache?: () => void\r\n clear_css_gen_cache?: () => void\r\n get_cache_optimization_hints?: (hit_rate_percent: number, memory_used_mb: number) => string // Returns JSON\r\n estimate_optimal_cache_config_native?: (total_budget_mb: number, workload_type: string) => string // Returns JSON\r\n cache_read?: (cache_path: string) => { entries_json: string }\r\n cache_write?: (cache_path: string, entries: Array<{ file: string; content_hash: string; classes: string[]; mtime_ms: number; size_bytes: number }>) => boolean\r\n cache_priority?: (mtime_ms: number, size_bytes: number, hit_count: number) => number\r\n \r\n // Phase 5.1: Theme Resolution Extended (7 functions)\r\n resolve_variants?: (configJson: string) => string // Returns JSON\r\n validate_variant_config?: (configJson: string) => string // Returns JSON\r\n resolve_cascade?: (baseThemeJson: string, overridesJson: string) => string // Returns JSON\r\n resolve_class_names?: (classNames: string[], themeJson: string) => string // Returns JSON\r\n resolve_conflict_group?: (groupName: string, themeJson: string) => string // Returns JSON\r\n resolve_theme_value?: (keyPath: string, themeJson: string) => string | null\r\n resolve_simple_variants?: (configJson: string) => string // Returns JSON\r\n \r\n // Phase 5.1: Streaming & Incremental Processing (8 functions)\r\n process_file_change?: (fileChangeJson: string) => string // Returns JSON\r\n compute_incremental_diff?: (oldScanJson: string, newScanJson: string) => string // Returns JSON\r\n create_fingerprint?: (filePath: string, fileContent: string) => string // Returns JSON\r\n inject_state_hash?: (css: string, stateHash: string) => string // Returns JSON\r\n prune_stale_entries?: (maxAgeSeconds: number, maxEntries: number) => string // Returns JSON\r\n rebuild_workspace_result?: (rootDir: string, extensions?: string[]) => string // Returns JSON\r\n scan_file_native?: (filePath: string, fileContent: string) => string // Returns JSON\r\n scan_files_batch_native?: (filesJson: string) => string // Returns JSON\r\n \r\n // Phase 5.2: CSS Compilation (12 functions)\r\n compile_class?: (input: string) => string // Returns JSON\r\n compile_classes?: (inputs: string[]) => string // Returns JSON\r\n compile_to_css?: (input: string, minify: boolean) => string\r\n compile_to_css_batch?: (inputs: string[], minify: boolean) => string\r\n minify_css?: (css: string) => string\r\n compile_animation?: (animationName: string, from: string, to: string) => string // Returns JSON\r\n compile_keyframes?: (name: string, stopsJson: string) => string // Returns JSON\r\n compile_theme?: (tokensJson: string, themeName: string, prefix: string) => string // Returns JSON\r\n tw_merge?: (classString: string) => string\r\n tw_merge_many?: (classStrings: string[]) => string\r\n tw_merge_with_separator?: (classString: string, options: Record<string, unknown>) => string\r\n tw_merge_many_with_separator?: (classStrings: string[], options: Record<string, unknown>) => string\r\n tw_merge_raw?: (classLists: string[]) => string\r\n \r\n // Phase 5.2: ID Registry (16 functions)\r\n id_registry_create?: () => number\r\n id_registry_generate?: (handle: number, name: string) => number\r\n id_registry_lookup?: (handle: number, name: string) => number\r\n id_registry_next?: (handle: number) => number\r\n id_registry_destroy?: (handle: number) => void\r\n id_registry_reset?: (handle: number) => void\r\n id_registry_snapshot?: (handle: number) => string // Returns JSON\r\n id_registry_active_count?: () => number\r\n register_property_name?: (propertyName: string) => number\r\n register_value_name?: (valueName: string) => number\r\n property_id_to_string?: (propertyId: number) => string\r\n value_id_to_string?: (valueId: number) => string\r\n reverse_lookup_property?: (propertyId: number) => string\r\n reverse_lookup_value?: (valueId: number) => string\r\n id_registry_export?: (handle: number) => string\r\n id_registry_import?: (importedData: string) => number\r\n \r\n // Phase 5.3: Redis Integration (40 functions)\r\n redis_ping?: () => string\r\n redis_get?: (key: string) => string\r\n redis_set?: (key: string, value: string, ttl_seconds?: number) => string\r\n redis_delete?: (key: string) => number\r\n redis_exists?: (key: string) => number\r\n redis_mget?: (keys: string[]) => string // Returns JSON\r\n redis_mset?: (pairs: Array<[string, string]>) => string\r\n redis_flush_db?: () => number\r\n redis_flush_all?: () => number\r\n redis_pool_connect?: (host: string, port: number, pool_size?: number) => string\r\n redis_pool_stats?: () => string // Returns JSON\r\n redis_pool_reconnect?: () => string\r\n redis_enable_cluster?: (initial_nodes: string[]) => string // Returns JSON\r\n redis_disable_cluster?: () => string\r\n redis_cluster_status?: () => string // Returns JSON\r\n redis_subscribe?: (channel: string) => string\r\n redis_publish?: (channel: string, message: string) => number\r\n redis_expiration_set?: (key: string, ttl_seconds: number) => number\r\n redis_expiration_get?: (key: string) => string // Returns JSON\r\n redis_info?: () => string\r\n redis_monitor?: () => string\r\n redis_cache_size?: () => number\r\n redis_cache_key_count?: () => number\r\n redis_cache_clear?: () => number\r\n redis_cache_hit_rate?: () => number\r\n redis_enable_persistence?: (mode: string) => string\r\n redis_disable_persistence?: () => string\r\n redis_snapshot?: () => string\r\n redis_memory_stats?: () => string\r\n redis_optimize_memory?: () => number\r\n redis_set_eviction_policy?: (policy: string) => string\r\n redis_get_eviction_policy?: () => string\r\n redis_replicate?: (target_host: string, target_port: number) => number\r\n redis_replication_status?: () => string\r\n redis_cache_sync?: (peers: string[]) => number\r\n redis_enable_cache_warming?: (key_pattern: string) => string\r\n redis_disable_cache_warming?: () => string\r\n redis_diagnose?: () => string\r\n \r\n // Phase 5.4: Watch System & File Monitoring (20 functions)\r\n start_watch?: (root_path: string, patterns?: string[]) => number\r\n poll_watch_events?: (handle: number, timeout_ms?: number) => string // Returns JSON\r\n stop_watch?: (handle: number) => number\r\n watch_add_pattern?: (handle: number, pattern: string) => string\r\n watch_remove_pattern?: (handle: number, pattern: string) => string\r\n watch_get_active_handles?: () => string // Returns JSON\r\n watch_clear_all?: () => number\r\n watch_event_type_to_string?: (event_type_code: number) => string\r\n is_watch_running?: (handle: number) => boolean\r\n get_watch_stats?: () => string // Returns JSON\r\n watch_pause?: (handle: number) => string\r\n watch_resume?: (handle: number) => string\r\n scan_cache_optimizations?: () => string // Returns JSON\r\n get_plugin_hooks?: () => string // Returns JSON\r\n register_plugin_hook?: (hook_name: string, handler_id: string) => string\r\n unregister_plugin_hook?: (hook_name: string, handler_id: string) => string\r\n emit_plugin_hook?: (hook_name: string, data_json: string) => string\r\n get_compilation_metrics?: () => string // Returns JSON\r\n reset_compilation_metrics?: () => string\r\n validate_css_output?: (css: string) => string // Returns JSON\r\n get_compiler_diagnostics?: () => string // Returns JSON\r\n}\r\n\r\nexport interface NativeTransformResult {\r\n code: string\r\n classes: string[]\r\n changed: boolean\r\n rscJson?: string\r\n metadataJson?: string\r\n}\r\n\r\nexport interface ClassExtractResult {\r\n classes: string[]\r\n component_names: string[]\r\n has_tw_usage: boolean\r\n has_use_client: boolean\r\n imports: string[]\r\n}\r\n\r\nconst NATIVE_UNAVAILABLE_MESSAGE =\r\n \"[tailwind-styled/compiler v5] Native binding is required but not available.\\n\" +\r\n \"This package requires native Rust bindings. There is no JavaScript fallback.\\n\" +\r\n \"Please ensure:\\n\" +\r\n \" 1. The native module is properly installed\\n\" +\r\n \" 2. You have run: npm run build:rust (or use prebuilt binary)\\n\" +\r\n \"\\n\" +\r\n \"For help, see: https://tailwind-styled.dev/docs/install\"\r\n\r\n// ── Native Bridge - Factory Pattern\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nlet nativeBridge: NativeBridge | null = null\r\nlet bridgeLoadAttempted = false\r\nlet bridgeLoadError: Error | null = null\r\n\r\nconst isValidNativeBridge = (mod: unknown): mod is NativeBridge => {\r\n const m = mod as Partial<NativeBridge>\r\n return !!(\r\n typeof m.transformSource === \"function\" ||\r\n typeof m.extractAllClasses === \"function\" ||\r\n typeof m.hasTwUsage === \"function\"\r\n )\r\n}\r\n\r\nexport const getNativeBridge = (): NativeBridge => {\r\n if (nativeBridge) {\r\n return nativeBridge\r\n }\r\n\r\n if (bridgeLoadAttempted) {\r\n if (bridgeLoadError) {\r\n throw bridgeLoadError\r\n }\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n\r\n bridgeLoadAttempted = true\r\n\r\n try {\r\n const runtimeDir = resolveRuntimeDir(undefined, import.meta.url)\r\n \r\n // Use shared's native resolution\r\n const result = resolveNativeBinary(runtimeDir)\r\n\r\n if (result.path && result.path.endsWith(\".node\")) {\r\n try {\r\n const binding = _loadNative(result.path) as NativeBridge\r\n if (isValidNativeBridge(binding)) {\r\n nativeBridge = binding\r\n log(\"Native bridge loaded successfully from:\", result.path)\r\n return nativeBridge\r\n }\r\n } catch (e) {\r\n log(\"Failed to require native binding:\", e)\r\n }\r\n }\r\n\r\n throw new Error(`${NATIVE_UNAVAILABLE_MESSAGE}\\n\\nTried paths: ${result.tried.join(\"\\n\")}`)\r\n } catch (err) {\r\n bridgeLoadError = err instanceof Error ? err : new Error(String(err))\r\n log(\"Failed to load native bridge:\", bridgeLoadError.message)\r\n throw bridgeLoadError\r\n }\r\n}\r\n\r\nexport const resetNativeBridgeCache = (): void => {\r\n nativeBridge = null\r\n bridgeLoadAttempted = false\r\n bridgeLoadError = null\r\n log(\"Native bridge cache reset\")\r\n}\r\n\r\n// ── Adaptor for native results\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport const adaptNativeResult = (\r\n raw: NativeTransformResult\r\n): {\r\n code: string\r\n classes: string[]\r\n changed: boolean\r\n rsc?: NativeRscResult\r\n metadata?: ComponentMetadata[]\r\n} => {\r\n return {\r\n code: raw.code ?? \"\",\r\n classes: raw.classes ?? [],\r\n changed: raw.changed ?? false,\r\n rsc: raw.rscJson ? JSON.parse(raw.rscJson) : undefined,\r\n metadata: raw.metadataJson ? JSON.parse(raw.metadataJson) : undefined,\r\n }\r\n}\r\n\r\n// ── Eager init — load native bridge saat module dimuat, bukan saat request pertama\r\n// Mencegah crash di Turbopack dev mode karena lazy init mid-request\r\n// ─────────────────────────────────────────────────────────────────────────────\r\nif (typeof process !== \"undefined\" && !bridgeLoadAttempted) {\r\n try {\r\n getNativeBridge()\r\n } catch {\r\n // Sudah di-capture di bridgeLoadError — akan di-throw saat dipanggil pertama kali\r\n }\r\n}","/**\r\n * tailwindEngine.ts\r\n *\r\n * Pipeline: classes[] → Rust CSS Compiler (primary) → Tailwind JS (fallback)\r\n *\r\n * The Rust compiler provides 40-60% performance improvement over pure JavaScript.\r\n * Falls back to Tailwind JS if the native binding is unavailable.\r\n */\r\n\r\nimport { createRequire } from \"node:module\"\r\nimport { getNativeBridge } from \"./nativeBridge\"\r\nimport { generateCssNative as generateCssNativeImpl } from \"./cssGeneratorNative\"\r\n\r\nconst require = createRequire(import.meta.url)\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// LRU Cache for CSS Pipeline (PHASE 0: Quick Win - 30-40% faster)\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\ninterface CacheStats {\r\n hits: number\r\n misses: number\r\n hitRate: number\r\n size: number\r\n maxSize: number\r\n}\r\n\r\nconst _cssCache = new Map<string, CssPipelineResult>()\r\nlet _cacheHits = 0\r\nlet _cacheMisses = 0\r\nconst MAX_CACHE_SIZE = 100\r\nconst MAX_CACHE_MEMORY = 256 * 1024 // 256KB\r\n\r\nfunction _getCacheKey(classes: string[], minify: boolean, cssEntry?: string, root?: string): string {\r\n // Sort classes for consistent hashing\r\n const sorted = [...classes].sort().join(\",\")\r\n const flags = `${minify ? \"1\" : \"0\"}${cssEntry ? \"1\" : \"0\"}${root ? \"1\" : \"0\"}`\r\n return `${sorted}|${flags}`\r\n}\r\n\r\nfunction _evictOldestIfNeeded(): void {\r\n if (_cssCache.size >= MAX_CACHE_SIZE) {\r\n const firstKey = _cssCache.keys().next().value as string | undefined\r\n if (firstKey !== undefined) {\r\n _cssCache.delete(firstKey)\r\n }\r\n }\r\n}\r\n\r\nexport function getCacheStats(): CacheStats {\r\n const total = _cacheHits + _cacheMisses\r\n return {\r\n hits: _cacheHits,\r\n misses: _cacheMisses,\r\n hitRate: total > 0 ? _cacheHits / total : 0,\r\n size: _cssCache.size,\r\n maxSize: MAX_CACHE_SIZE,\r\n }\r\n}\r\n\r\nexport function clearCache(): void {\r\n _cssCache.clear()\r\n _cacheHits = 0\r\n _cacheMisses = 0\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Tailwind CSS v4 engine loader\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\ninterface TailwindV4Engine {\r\n compile: (\r\n input: string,\r\n options?: {\r\n loadPlugin?: () => unknown\r\n loadStylesheet?: (id: string, base: string) => Promise<{ content: string; base: string }>\r\n loadModule?: (id: string, base: string) => Promise<{ module: unknown; base: string }>\r\n }\r\n ) => Promise<{ build: (candidates: string[]) => string }> | { build: (candidates: string[]) => string }\r\n}\r\n\r\nlet _twEngine: TailwindV4Engine | null = null\r\nlet _twEngineError: Error | null = null\r\n\r\nfunction loadTailwindEngine(): TailwindV4Engine {\r\n if (_twEngine) return _twEngine\r\n if (_twEngineError) throw _twEngineError\r\n\r\n try {\r\n const tw = require(\"tailwindcss\") as TailwindV4Engine\r\n if (typeof tw.compile !== \"function\") {\r\n throw new Error(\"tailwindcss v4 not found — compile() API missing. Check tailwindcss version >= 4.\")\r\n }\r\n _twEngine = tw\r\n return _twEngine\r\n } catch (e) {\r\n _twEngineError = e instanceof Error ? e : new Error(String(e))\r\n throw _twEngineError\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Tailwind → raw CSS\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport async function generateRawCss(classes: string[], cssEntryContent?: string, root?: string): Promise<string> {\r\n if (classes.length === 0) return \"\"\r\n\r\n const tw = loadTailwindEngine()\r\n const input = cssEntryContent ?? \"@import 'tailwindcss';\"\r\n\r\n const { readFileSync, existsSync } = await import(\"node:fs\")\r\n const { dirname, resolve } = await import(\"node:path\")\r\n\r\n const projectRoot = root ?? process.cwd()\r\n const req = createRequire(resolve(projectRoot, \"package.json\"))\r\n\r\n const loadStylesheet = async (id: string, base: string) => {\r\n try {\r\n const cssId = id === \"tailwindcss\" ? \"tailwindcss/index.css\"\r\n : id === \"tailwindcss/preflight\" ? \"tailwindcss/preflight.css\"\r\n : id === \"tailwindcss/utilities\" ? \"tailwindcss/utilities.css\"\r\n : id === \"tailwindcss/theme\" ? \"tailwindcss/theme.css\"\r\n : id\r\n\r\n const pkgPath = req.resolve(cssId)\r\n return { content: readFileSync(pkgPath, \"utf-8\"), base: dirname(pkgPath) }\r\n } catch {\r\n try {\r\n const absPath = resolve(base, id)\r\n if (existsSync(absPath)) {\r\n return { content: readFileSync(absPath, \"utf-8\"), base: dirname(absPath) }\r\n }\r\n } catch { /* ignore */ }\r\n return { content: \"\", base }\r\n }\r\n }\r\n\r\n const compiler = await Promise.resolve(tw.compile(input, { loadStylesheet }))\r\n return compiler.build(classes)\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Rust CSS Compiler (Primary Path)\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Load theme configuration from the project.\r\n * For now, returns a minimal theme object.\r\n * In production, this should load from tailwind.config.ts/js\r\n */\r\nfunction getThemeConfig(): Record<string, unknown> {\r\n // TODO: Load from tailwind.config.ts/js\r\n // This is a simplified version - in production, parse the actual config\r\n return {\r\n colors: {\r\n slate: {\r\n \"50\": \"#f8fafc\",\r\n \"100\": \"#f1f5f9\",\r\n \"200\": \"#e2e8f0\",\r\n \"300\": \"#cbd5e1\",\r\n \"400\": \"#94a3b8\",\r\n \"500\": \"#64748b\",\r\n \"600\": \"#475569\",\r\n \"700\": \"#334155\",\r\n \"800\": \"#1e293b\",\r\n \"900\": \"#0f172a\",\r\n },\r\n gray: {\r\n \"50\": \"#f9fafb\",\r\n \"100\": \"#f3f4f6\",\r\n \"200\": \"#e5e7eb\",\r\n \"300\": \"#d1d5db\",\r\n \"400\": \"#9ca3af\",\r\n \"500\": \"#6b7280\",\r\n \"600\": \"#4b5563\",\r\n \"700\": \"#374151\",\r\n \"800\": \"#1f2937\",\r\n \"900\": \"#111827\",\r\n },\r\n white: \"#ffffff\",\r\n black: \"#000000\",\r\n red: {\r\n \"500\": \"#ef4444\",\r\n \"600\": \"#dc2626\",\r\n },\r\n blue: {\r\n \"500\": \"#3b82f6\",\r\n \"600\": \"#1e40af\",\r\n },\r\n },\r\n spacing: {\r\n \"0\": \"0px\",\r\n \"1\": \"0.25rem\",\r\n \"2\": \"0.5rem\",\r\n \"3\": \"0.75rem\",\r\n \"4\": \"1rem\",\r\n \"5\": \"1.25rem\",\r\n \"6\": \"1.5rem\",\r\n \"8\": \"2rem\",\r\n \"10\": \"2.5rem\",\r\n \"12\": \"3rem\",\r\n \"16\": \"4rem\",\r\n \"20\": \"5rem\",\r\n \"24\": \"6rem\",\r\n },\r\n breakpoints: {\r\n \"sm\": \"640px\",\r\n \"md\": \"768px\",\r\n \"lg\": \"1024px\",\r\n \"xl\": \"1280px\",\r\n \"2xl\": \"1536px\",\r\n },\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// LightningCSS post-process via Rust\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction postProcessWithLightning(rawCss: string): string {\r\n if (!rawCss) return \"\"\r\n const native = getNativeBridge()\r\n if (!native?.processTailwindCssLightning) {\r\n throw new Error(\"FATAL: Native binding 'processTailwindCssLightning' is required but not available.\")\r\n }\r\n const result = native.processTailwindCssLightning(rawCss) as { css: string } | null\r\n if (!result?.css) {\r\n throw new Error(\"FATAL: processTailwindCssLightning returned null\")\r\n }\r\n return result.css\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Main pipeline\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface CssPipelineResult {\r\n css: string\r\n classes: string[]\r\n sizeBytes: number\r\n optimized: boolean\r\n}\r\n\r\nexport async function runCssPipeline(\r\n classes: string[],\r\n cssEntryContent?: string,\r\n root?: string,\r\n minify = true\r\n): Promise<CssPipelineResult> {\r\n // Deduplicate classes while preserving Array compatibility\r\n const filtered = classes.filter(Boolean)\r\n const uniqueMap = new Map<string, string>()\r\n filtered.forEach((cls) => uniqueMap.set(cls, cls))\r\n const unique = Array.from(uniqueMap.values())\r\n\r\n if (unique.length === 0) {\r\n return { css: \"\", classes: [], sizeBytes: 0, optimized: false }\r\n }\r\n\r\n // ✅ PHASE 0: Check cache first (30-40% faster for cache hits)\r\n const cacheKey = _getCacheKey(unique, minify, cssEntryContent, root)\r\n const cached = _cssCache.get(cacheKey)\r\n if (cached) {\r\n _cacheHits++\r\n if (process.env.DEBUG?.includes(\"compiler\")) {\r\n console.log(\r\n `[Compiler] Cache HIT: ${unique.length} classes (hit rate: ${(getCacheStats().hitRate * 100).toFixed(1)}%)`\r\n )\r\n }\r\n return cached\r\n }\r\n\r\n _cacheMisses++\r\n\r\n let rawCss: string\r\n let usedRustCompiler = false\r\n\r\n // Phase 1: Try Rust CSS Compiler (Fast Path - 40-60% faster)\r\n try {\r\n const theme = getThemeConfig()\r\n rawCss = await generateCssNativeImpl(unique, {\r\n theme,\r\n fallbackToJs: true,\r\n logFallback: process.env.DEBUG?.includes(\"compiler\") === true,\r\n })\r\n usedRustCompiler = true\r\n } catch (error) {\r\n // Fall back to JavaScript Tailwind if Rust fails\r\n if (process.env.DEBUG?.includes(\"compiler\")) {\r\n console.warn(\"[Compiler] Rust compiler failed, using JavaScript Tailwind:\", error)\r\n }\r\n rawCss = await generateRawCss(unique, cssEntryContent, root)\r\n }\r\n\r\n // Phase 2: Optional post-processing with LightningCSS (if minify=true)\r\n const finalCss = minify ? postProcessWithLightning(rawCss) : rawCss\r\n\r\n if (process.env.DEBUG?.includes(\"compiler\")) {\r\n console.log(\r\n `[Compiler] Generated CSS from ${unique.length} classes (${usedRustCompiler ? \"Rust\" : \"JavaScript\"})`,\r\n `Size: ${finalCss.length} bytes`\r\n )\r\n }\r\n\r\n const result: CssPipelineResult = {\r\n css: finalCss,\r\n classes: unique,\r\n sizeBytes: finalCss.length,\r\n optimized: minify,\r\n }\r\n\r\n // Store in cache with eviction\r\n _evictOldestIfNeeded()\r\n _cssCache.set(cacheKey, result)\r\n\r\n return result\r\n}\r\n\r\n/**\r\n * @deprecated Tidak dipakai di Tailwind v4. Ditinggal untuk backward compatibility.\r\n */\r\nexport function runCssPipelineSync(_classes: string[]): CssPipelineResult {\r\n return { css: \"\", classes: [], sizeBytes: 0, optimized: false }\r\n}\r\n\r\n/**\r\n * Minify dan vendor-prefix CSS dengan explicit browser targets.\r\n */\r\nexport function processTailwindCssWithTargets(css: string, targets?: string): string {\r\n const native = getNativeBridge()\r\n if (!native?.processTailwindCssWithTargets) {\r\n throw new Error(\"FATAL: Native binding 'processTailwindCssWithTargets' is required but not available.\")\r\n }\r\n const result = native.processTailwindCssWithTargets(css, targets ?? null) as { css: string } | null\r\n if (!result?.css) {\r\n throw new Error(\"FATAL: processTailwindCssWithTargets returned null\")\r\n }\r\n return result.css\r\n}","/**\r\n * cssGeneratorNative.ts\r\n *\r\n * High-performance CSS generator using Rust compiler via NAPI binding.\r\n * Falls back to JavaScript Tailwind if Rust binding is unavailable.\r\n */\r\n\r\nimport { getNativeBridge } from \"./nativeBridge\"\r\nimport { generateRawCss } from \"./tailwindEngine\"\r\n\r\nexport interface GenerateCssNativeOptions {\r\n theme: Record<string, unknown>\r\n fallbackToJs?: boolean\r\n logFallback?: boolean\r\n}\r\n\r\n/**\r\n * Generate CSS from Tailwind classes using the Rust compiler.\r\n * \r\n * @param classes - Array of Tailwind class names (e.g., [\"px-4\", \"hover:bg-blue-600\"])\r\n * @param options - Configuration including theme object\r\n * @returns Promise resolving to CSS string\r\n * \r\n * @example\r\n * ```ts\r\n * const css = await generateCssNative(\r\n * [\"px-4\", \"hover:bg-blue-600\", \"md:text-lg\"],\r\n * {\r\n * theme: defaultTheme,\r\n * fallbackToJs: true,\r\n * logFallback: process.env.DEBUG === \"true\"\r\n * }\r\n * )\r\n * ```\r\n * \r\n * **Performance**: Rust compiler typically 40-60% faster than Tailwind JS\r\n * - Rust: 60-90ms for 100 classes\r\n * - JavaScript: 150ms baseline\r\n * \r\n * **Error Handling**:\r\n * - If Rust binding fails and fallbackToJs=true, falls back to Tailwind JS\r\n * - If Rust binding fails and fallbackToJs=false, throws error\r\n * - Invalid classes log warnings but don't stop compilation\r\n */\r\nexport async function generateCssNative(\r\n classes: string[],\r\n options: GenerateCssNativeOptions\r\n): Promise<string> {\r\n const {\r\n theme,\r\n fallbackToJs = true,\r\n logFallback = false,\r\n } = options\r\n\r\n // Try Rust compiler first\r\n try {\r\n const native = getNativeBridge()\r\n \r\n if (!native?.generateCssNative) {\r\n throw new Error(\"generateCssNative not available in native binding\")\r\n }\r\n\r\n // Convert theme object to JSON string for Rust\r\n const themeJson = JSON.stringify(theme)\r\n \r\n // Call Rust compiler\r\n const css = native.generateCssNative(classes, themeJson)\r\n \r\n return css\r\n } catch (error) {\r\n if (!fallbackToJs) {\r\n throw error\r\n }\r\n\r\n if (logFallback) {\r\n console.warn(\r\n \"[CSS Compiler] Rust CSS generator unavailable, falling back to JavaScript Tailwind\",\r\n error instanceof Error ? error.message : String(error)\r\n )\r\n }\r\n\r\n // Fall back to JavaScript Tailwind\r\n return generateRawCss(classes)\r\n }\r\n}\r\n\r\n/**\r\n * Get cache statistics from the Rust compiler.\r\n * \r\n * @returns Object with cache hit/miss counts, or null if binding unavailable\r\n * \r\n * @example\r\n * ```ts\r\n * const stats = getCacheStats()\r\n * if (stats) {\r\n * console.log(`Cache hits: ${stats.hits}, misses: ${stats.misses}`)\r\n * console.log(`Hit rate: ${(stats.hits / (stats.hits + stats.misses) * 100).toFixed(1)}%`)\r\n * }\r\n * ```\r\n */\r\nexport function getCacheStats(): { hits: number; misses: number } | null {\r\n try {\r\n const native = getNativeBridge()\r\n \r\n if (!native?.getCacheStats) {\r\n return null\r\n }\r\n\r\n const [hits, misses] = native.getCacheStats()\r\n return { hits, misses }\r\n } catch {\r\n return null\r\n }\r\n}\r\n\r\n/**\r\n * Clear the theme resolver cache.\r\n * \r\n * Useful for:\r\n * - Testing with different themes\r\n * - Freeing memory in long-running processes\r\n * - Resetting state between build cycles\r\n * \r\n * @example\r\n * ```ts\r\n * // Clear cache before each build\r\n * clearThemeCache()\r\n * const css = await generateCssNative(classes, { theme })\r\n * ```\r\n */\r\nexport function clearThemeCache(): void {\r\n try {\r\n const native = getNativeBridge()\r\n \r\n if (!native?.clearThemeCache) {\r\n return\r\n }\r\n\r\n native.clearThemeCache()\r\n } catch {\r\n // Silently ignore if native binding unavailable\r\n }\r\n}\r\n\r\n/**\r\n * Recommended default theme configuration for Tailwind v4.\r\n * \r\n * Use this when you need a complete theme object for the Rust compiler.\r\n */\r\nexport const DEFAULT_THEME = {\r\n colors: {\r\n slate: {\r\n \"50\": \"#f8fafc\",\r\n \"100\": \"#f1f5f9\",\r\n \"200\": \"#e2e8f0\",\r\n \"300\": \"#cbd5e1\",\r\n \"400\": \"#94a3b8\",\r\n \"500\": \"#64748b\",\r\n \"600\": \"#475569\",\r\n \"700\": \"#334155\",\r\n \"800\": \"#1e293b\",\r\n \"900\": \"#0f172a\",\r\n },\r\n // ... other colors from Tailwind defaults\r\n },\r\n spacing: {\r\n \"0\": \"0px\",\r\n \"1\": \"0.25rem\",\r\n \"2\": \"0.5rem\",\r\n \"3\": \"0.75rem\",\r\n \"4\": \"1rem\",\r\n \"5\": \"1.25rem\",\r\n \"6\": \"1.5rem\",\r\n \"8\": \"2rem\",\r\n \"10\": \"2.5rem\",\r\n \"12\": \"3rem\",\r\n },\r\n breakpoints: {\r\n \"sm\": \"640px\",\r\n \"md\": \"768px\",\r\n \"lg\": \"1024px\",\r\n \"xl\": \"1280px\",\r\n \"2xl\": \"1536px\",\r\n },\r\n darkMode: \"media\" as const,\r\n} as const\r\n","/**\r\n * tailwind-styled-v5 — Compiler Index\r\n * \r\n * All functions are backed by native Rust bindings.\r\n * No JavaScript fallback - native is required.\r\n */\r\n\r\nimport fs from \"node:fs\"\r\nimport path from \"node:path\"\r\n\r\nimport { getNativeBridge, resetNativeBridgeCache, adaptNativeResult, type NativeBridge, type NativeTransformResult, type ClassExtractResult, type ComponentMetadata, type NativeRscResult } from \"./nativeBridge\"\r\n\r\nexport { getNativeBridge, resetNativeBridgeCache, adaptNativeResult }\r\nexport type { NativeBridge, NativeTransformResult, ClassExtractResult, ComponentMetadata, NativeRscResult }\r\n\r\n// ═══════════════════════════════════════════════════════════════════════════\r\n// COMPREHENSIVE NATIVE BINDINGS EXPORTS\r\n// ═══════════════════════════════════════════════════════════════════════════\r\n\r\n// CSS Generation with Caching\r\nexport { generateCssNative, getCacheStats, clearThemeCache } from \"./cssGeneratorNative\"\r\n\r\n// Scanning & File Processing - Phase 5 Integration\r\nexport {\r\n scanWorkspace,\r\n extractClassesFromSourceNative,\r\n batchExtractClassesNative,\r\n checkAgainstSafelistNative,\r\n scanFile,\r\n collectFiles,\r\n walkAndPrefilterSourceFiles,\r\n generateSubComponentTypes,\r\n type ScanWorkspaceResult,\r\n type ScanFileResult,\r\n type BatchExtractResult,\r\n type SafelistCheckResult,\r\n type PrefilterFileResult,\r\n} from \"./scannerNative\"\r\n\r\n// Analysis & Optimization - Phase 5 Integration\r\nexport {\r\n detectDeadCode,\r\n analyzeClassUsageNative,\r\n analyzeClassesNative,\r\n analyzeRscNative,\r\n optimizeCssNative,\r\n processTailwindCssLightning,\r\n eliminateDeadCssNative,\r\n hoistComponentsNative,\r\n compileVariantTableNative,\r\n classifyAndSortClassesNative,\r\n mergeCssDeclarationsNative,\r\n type DeadCodeResult,\r\n type ClassUsageItem,\r\n type ProcessedCssResult,\r\n type HoistResult,\r\n type VariantTableResult,\r\n type ClassifyResult,\r\n type MergeResult,\r\n} from \"./analyzerNative\"\r\n\r\n// Advanced Compilation - Phase 5 Integration\r\nexport {\r\n compileCssNative2,\r\n compileCssLightning,\r\n extractTwStateConfigsNative,\r\n generateStaticStateCssNative,\r\n extractAndGenerateStateCssNative,\r\n layoutClassesToCss,\r\n hashContent,\r\n extractTwContainerConfigs,\r\n parseAtomicClass,\r\n generateAtomicCss,\r\n toAtomicClasses,\r\n clearAtomicRegistry,\r\n atomicRegistrySize,\r\n type ContainerConfig,\r\n type StateCssConfig,\r\n type GeneratedStateCss,\r\n} from \"./compilationNative\"\r\n\r\n// Phase 5.1: Cache Management\r\nexport {\r\n getCacheStatistics,\r\n clearAllCaches,\r\n clearParseCache,\r\n clearResolveCache,\r\n clearCompileCache,\r\n clearCssGenCache,\r\n getCacheOptimizationHints,\r\n estimateOptimalCacheConfig,\r\n cacheRead,\r\n cacheWrite,\r\n cachePriority,\r\n type CacheOptimizationHints,\r\n type OptimalCacheConfig,\r\n type CacheStatistics,\r\n} from \"./cacheNative\"\r\n\r\n// Phase 5.1: Theme Resolution Extended\r\nexport {\r\n resolveVariants,\r\n validateThemeConfig,\r\n resolveCascade,\r\n resolveClassNames,\r\n resolveConflictGroup,\r\n resolveThemeValue,\r\n resolveSimpleVariants,\r\n type ThemeValidationResult,\r\n type ResolvedVariantConfig,\r\n type ThemeCascadeResult,\r\n type ResolvedClassName,\r\n type ConflictGroupInfo,\r\n} from \"./themeResolutionNative\"\r\n\r\n// Phase 5.1: Streaming & Incremental Processing\r\nexport {\r\n processFileChange,\r\n computeIncrementalDiff,\r\n createFingerprint,\r\n injectStateHash,\r\n pruneStaleCacheEntries,\r\n rebuildWorkspaceResult,\r\n scanFileNative,\r\n scanFilesBatchNative,\r\n type FileChangeEvent,\r\n type ProcessedFileChange,\r\n type FileDiff,\r\n type FileFingerprint,\r\n type IncrementalDiffResult,\r\n type StateInjectionResult,\r\n type PruneResult,\r\n type RebuildWorkspaceResult,\r\n} from \"./streamingNative\"\r\n\r\n// Phase 5.2: CSS Compilation (12 functions)\r\nexport {\r\n compileClass,\r\n compileClasses,\r\n compileToCss,\r\n compileToCssBatch,\r\n minifyCss,\r\n compileAnimation,\r\n compileKeyframes,\r\n compileTheme,\r\n twMerge,\r\n twMergeMany,\r\n twMergeWithSeparator,\r\n twMergeManyWithSeparator,\r\n twMergeRaw,\r\n type CompiledCssRule,\r\n type CompiledAnimation,\r\n type CompiledTheme,\r\n type CssCompileResult,\r\n type TwMergeOptions,\r\n} from \"./cssCompilationNative\"\r\n\r\n// Phase 5.2: ID Registry (16 functions)\r\nexport {\r\n idRegistryCreate,\r\n idRegistryGenerate,\r\n idRegistryLookup,\r\n idRegistryNext,\r\n idRegistryDestroy,\r\n idRegistryReset,\r\n idRegistrySnapshot,\r\n idRegistryActiveCount,\r\n registerPropertyName,\r\n registerValueName,\r\n propertyIdToString,\r\n valueIdToString,\r\n reverseLookupProperty,\r\n reverseLookupValue,\r\n idRegistryExport,\r\n idRegistryImport,\r\n type RegistrySnapshot,\r\n} from \"./idRegistryNative\"\r\n\r\n// Phase 5.3: Redis Integration (40 functions)\r\nexport {\r\n redisPing,\r\n redisGet,\r\n redisSet,\r\n redisDelete,\r\n redisExists,\r\n redisMget,\r\n redisMset,\r\n redisFlushDb,\r\n redisFlushAll,\r\n redisPoolConnect,\r\n redisPoolStats,\r\n redisPoolReconnect,\r\n redisEnableCluster,\r\n redisDisableCluster,\r\n redisClusterStatus,\r\n redisSubscribe,\r\n redisPublish,\r\n redisExpirationSet,\r\n redisExpirationGet,\r\n redisInfo,\r\n redisMonitor,\r\n redisCacheSize,\r\n redisCacheKeyCount,\r\n redisCacheClear,\r\n redisCacheHitRate,\r\n redisEnablePersistence,\r\n redisDisablePersistence,\r\n redisSnapshot,\r\n redisMemoryStats,\r\n redisOptimizeMemory,\r\n redisSetEvictionPolicy,\r\n redisGetEvictionPolicy,\r\n redisReplicate,\r\n redisReplicationStatus,\r\n redisCacheSync,\r\n redisEnableCacheWarming,\r\n redisDisableCacheWarming,\r\n redisDiagnose,\r\n type RedisCacheConfig,\r\n type RedisPoolStats,\r\n type RedisClusterNode,\r\n type RedisClusterStatus,\r\n type KeyExpiration,\r\n type PubSubMessage,\r\n type PoolInfo,\r\n} from \"./redisNative\"\r\n\r\n// Phase 5.4: Watch System & File Monitoring (20 functions)\r\nexport {\r\n startWatch,\r\n pollWatchEvents,\r\n stopWatch,\r\n watchAddPattern,\r\n watchRemovePattern,\r\n watchGetActiveHandles,\r\n watchClearAll,\r\n watchEventTypeToString,\r\n isWatchRunning,\r\n getWatchStats,\r\n watchPause,\r\n watchResume,\r\n scanCacheOptimizations,\r\n getPluginHooks,\r\n registerPluginHook,\r\n unregisterPluginHook,\r\n emitPluginHook,\r\n getCompilationMetrics,\r\n resetCompilationMetrics,\r\n validateCssOutput,\r\n getCompilerDiagnostics,\r\n type WatchEvent,\r\n type WatchHandle,\r\n type WatchStats,\r\n} from \"./watchSystemNative\"\r\n\r\nexport type LoaderOutput = {\r\n code: string\r\n changed: boolean\r\n classes: string[]\r\n staticCss?: string\r\n rsc?: { isServer?: boolean; needsClientDirective?: boolean; clientReasons?: string[] }\r\n engine?: string\r\n}\r\n\r\n// =============================================================================\r\n// CORE TRANSFORM FUNCTIONS\r\n// =============================================================================\r\n\r\nexport const transformSource = (source: string, opts?: Record<string, unknown>) => {\r\n const native = getNativeBridge()\r\n if (!native?.transformSource) {\r\n throw new Error(\"FATAL: Native binding 'transformSource' is required but not available.\")\r\n }\r\n const result = native.transformSource(source, opts as Record<string, string>)\r\n if (!result) {\r\n throw new Error(\"FATAL: transformSource returned null\")\r\n }\r\n return result\r\n}\r\n\r\nexport const hasTwUsage = (source: string): boolean => {\r\n const native = getNativeBridge()\r\n if (!native?.hasTwUsage) {\r\n throw new Error(\"FATAL: Native binding 'hasTwUsage' is required but not available.\")\r\n }\r\n return native.hasTwUsage(source)\r\n}\r\n\r\nexport const isAlreadyTransformed = (source: string): boolean => {\r\n const native = getNativeBridge()\r\n if (!native?.isAlreadyTransformed) {\r\n throw new Error(\"FATAL: Native binding 'isAlreadyTransformed' is required but not available.\")\r\n }\r\n return native.isAlreadyTransformed(source)\r\n}\r\n\r\nexport const shouldProcess = (source: string): boolean => {\r\n return hasTwUsage(source) && !isAlreadyTransformed(source)\r\n}\r\n\r\n// =============================================================================\r\n// CSS COMPILATION\r\n// =============================================================================\r\n\r\nexport const compileCssFromClasses = (classes: string[], prefix?: string | null) => {\r\n const native = getNativeBridge()\r\n if (!native?.transformSource) {\r\n throw new Error(\"FATAL: Native binding 'transformSource' is required but not available.\")\r\n }\r\n const result = native.transformSource(classes.join(\" \"), { prefix: prefix ?? \"\" })\r\n if (!result) {\r\n throw new Error(\"FATAL: transformSource returned null\")\r\n }\r\n return result\r\n}\r\n\r\nexport const buildStyleTag = (classes: string[]): string => {\r\n const result = compileCssFromClasses(classes)\r\n return result?.code ? `<style data-tailwind-styled>${result.code}</style>` : \"\"\r\n}\r\n\r\nexport const compileCssNative = (classes: string[], prefix: string | null = null) => {\r\n return compileCssFromClasses(classes, prefix)\r\n}\r\n\r\nexport const generateCssForClasses = async (\r\n classes: string[],\r\n _tailwindConfig?: Record<string, unknown>,\r\n root?: string,\r\n cssEntryContent?: string,\r\n minify = false\r\n): Promise<string> => {\r\n const { runCssPipeline } = await import(\"./tailwindEngine\")\r\n const result = await runCssPipeline(classes, cssEntryContent, root, minify)\r\n return result.css\r\n}\r\n\r\n// =============================================================================\r\n// CLASS EXTRACTION\r\n// =============================================================================\r\n\r\nexport const extractAllClasses = (source: string): string[] => {\r\n const native = getNativeBridge()\r\n if (!native?.extractAllClasses) {\r\n throw new Error(\"FATAL: Native binding 'extractAllClasses' is required but not available.\")\r\n }\r\n return native.extractAllClasses(source) || []\r\n}\r\n\r\nexport const extractClassesFromSource = (source: string): string => {\r\n const native = getNativeBridge()\r\n if (!native?.extractClassesFromSource) {\r\n throw new Error(\"FATAL: Native binding 'extractClassesFromSource' is required but not available.\")\r\n }\r\n const result = native.extractClassesFromSource(source)\r\n return Array.isArray(result) ? result.join(\" \") : String(result || \"\")\r\n}\r\n\r\nexport const astExtractClasses = (source: string, _filename: string) => {\r\n const native = getNativeBridge()\r\n if (!native?.extractClassesFromSource) {\r\n throw new Error(\"FATAL: Native binding 'extractClassesFromSource' is required but not available.\")\r\n }\r\n return native.extractClassesFromSource(source) || []\r\n}\r\n\r\nexport const parseClasses = (raw: string): Array<{ raw: string; type: string }> => {\r\n const native = getNativeBridge()\r\n if (!native?.parseClasses) {\r\n throw new Error(\"FATAL: Native binding 'parseClasses' is required but not available.\")\r\n }\r\n return native.parseClasses(raw) || []\r\n}\r\n\r\n// =============================================================================\r\n// CLASS NORMALIZATION & MERGING\r\n// =============================================================================\r\n\r\nexport const normalizeClasses = (raw: string): string => {\r\n const result = normalizeAndDedupClasses(raw)\r\n return result?.normalized || \"\"\r\n}\r\n\r\nexport const mergeClassesStatic = (classes: string): string => {\r\n const result = normalizeAndDedupClasses(classes)\r\n return result?.normalized || \"\"\r\n}\r\n\r\nexport const normalizeAndDedupClasses = (raw: string) => {\r\n const native = getNativeBridge()\r\n if (!native?.normalizeAndDedupClasses) {\r\n throw new Error(\"FATAL: Native binding 'normalizeAndDedupClasses' is required but not available.\")\r\n }\r\n const result = native.normalizeAndDedupClasses(raw)\r\n return result || { normalized: \"\", duplicatesRemoved: 0, uniqueCount: 0 }\r\n}\r\n\r\n// =============================================================================\r\n// DEAD STYLE ELIMINATOR\r\n// =============================================================================\r\n\r\nexport const eliminateDeadCss = (css: string, deadClasses: Set<string>): string => {\r\n const native = getNativeBridge()\r\n if (!native?.eliminateDeadCss) {\r\n throw new Error(\"FATAL: Native binding 'eliminateDeadCss' is required but not available.\")\r\n }\r\n return native.eliminateDeadCss(css, Array.from(deadClasses)) as string\r\n}\r\n\r\nexport const findDeadVariants = (\r\n variantConfig: Record<string, unknown> | Array<{ name: string; variants: Record<string, Record<string, string>>; defaultVariants?: Record<string, string> }>,\r\n usage: Record<string, Set<string>>\r\n) => {\r\n const unused: string[] = []\r\n\r\n const configs = Array.isArray(variantConfig)\r\n ? variantConfig\r\n : [{ name: \"__root__\", variants: variantConfig as Record<string, Record<string, string>> }]\r\n\r\n for (const component of configs) {\r\n const componentUsage = usage[component.name] ?? new Set<string>()\r\n const variants = component.variants as Record<string, Record<string, string>>\r\n for (const [key, values] of Object.entries(variants)) {\r\n for (const [value] of Object.entries(values)) {\r\n if (!componentUsage.has(`${key}:${value}`)) {\r\n unused.push(`${component.name !== \"__root__\" ? `${component.name}/` : \"\"}${key}:${value}`)\r\n }\r\n }\r\n }\r\n }\r\n\r\n return { unusedCount: unused.length, unused }\r\n}\r\n\r\nexport const runElimination = (css: string, scanResult: unknown): string => {\r\n const native = getNativeBridge()\r\n if (!native?.detectDeadCode) {\r\n throw new Error(\"FATAL: Native binding 'detectDeadCode' is required but not available.\")\r\n }\r\n const dead = native.detectDeadCode(JSON.stringify(scanResult), css) as { deadInCss: string[] }\r\n return eliminateDeadCss(css, new Set(dead.deadInCss ?? []))\r\n}\r\n\r\nexport const optimizeCss = (css: string): string => {\r\n const native = getNativeBridge()\r\n if (!native?.optimizeCss) {\r\n throw new Error(\"FATAL: Native binding 'optimizeCss' is required but not available.\")\r\n }\r\n return native.optimizeCss(css) as string\r\n}\r\n\r\nexport const scanProjectUsage = (dirs: string[], cwd: string) => {\r\n const files = dirs.map(dir => path.resolve(cwd, dir))\r\n const results = batchExtractClasses(files) || []\r\n\r\n const combined: Record<string, Record<string, Set<string>>> = {}\r\n for (const result of results) {\r\n if (result.ok && result.classes) {\r\n for (const cls of result.classes) {\r\n if (!combined[cls]) combined[cls] = {}\r\n combined[cls][result.file] = new Set([cls])\r\n }\r\n }\r\n }\r\n return combined\r\n}\r\n\r\n// =============================================================================\r\n// COMPONENT ANALYSIS\r\n// =============================================================================\r\n\r\nexport const extractComponentUsage = (source: string): Array<{ component: string; propsJson: string }> => {\r\n const native = getNativeBridge()\r\n if (!native?.extractComponentUsage) {\r\n throw new Error(\"FATAL: Native binding 'extractComponentUsage' is required but not available.\")\r\n }\r\n return native.extractComponentUsage(source) || []\r\n}\r\n\r\n// =============================================================================\r\n// DIFF & BATCH OPERATIONS\r\n// =============================================================================\r\n\r\nexport const diffClassLists = (previous: string[], current: string[]) => {\r\n const native = getNativeBridge()\r\n if (!native?.diffClassLists) {\r\n throw new Error(\"FATAL: Native binding 'diffClassLists' is required but not available.\")\r\n }\r\n return native.diffClassLists(previous, current) || { added: [], removed: [], unchanged: [], hasChanges: false }\r\n}\r\n\r\nexport const batchExtractClasses = (filePaths: string[]) => {\r\n const native = getNativeBridge()\r\n if (!native?.batchExtractClasses) {\r\n throw new Error(\"FATAL: Native binding 'batchExtractClasses' is required but not available.\")\r\n }\r\n return native.batchExtractClasses(filePaths) || []\r\n}\r\n\r\nexport const checkAgainstSafelist = (classes: string[], safelist: string[]) => {\r\n const native = getNativeBridge()\r\n if (!native?.checkAgainstSafelist) {\r\n throw new Error(\"FATAL: Native binding 'checkAgainstSafelist' is required but not available.\")\r\n }\r\n return native.checkAgainstSafelist(classes, safelist) || { matched: [], unmatched: [], safelistSize: 0 }\r\n}\r\n\r\n// =============================================================================\r\n// HOISTING\r\n// =============================================================================\r\n\r\nexport const hoistComponents = (source: string) => {\r\n const native = getNativeBridge()\r\n if (!native?.hoistComponents) {\r\n throw new Error(\"FATAL: Native binding 'hoistComponents' is required but not available.\")\r\n }\r\n return native.hoistComponents(source) || { code: source, hoisted: [], warnings: [] }\r\n}\r\n\r\n// =============================================================================\r\n// VARIANT COMPILATION\r\n// =============================================================================\r\n\r\nexport const compileVariantTable = (configJson: string) => {\r\n const native = getNativeBridge()\r\n if (!native?.compileVariantTable) {\r\n throw new Error(\"FATAL: Native binding 'compileVariantTable' is required but not available.\")\r\n }\r\n return native.compileVariantTable(configJson) || { id: \"\", tableJson: \"{}\", keys: [], defaultKey: \"\", combinations: 0 }\r\n}\r\n\r\nexport const compileVariants = (componentId: string, config: Record<string, unknown>) => {\r\n return compileVariantTable(JSON.stringify({ componentId, ...config }))\r\n}\r\n\r\n// =============================================================================\r\n// CSS ANALYSIS\r\n// =============================================================================\r\n\r\nexport const classifyAndSortClasses = (classes: string[]) => {\r\n const native = getNativeBridge()\r\n if (!native?.classifyAndSortClasses) {\r\n throw new Error(\"FATAL: Native binding 'classifyAndSortClasses' is required but not available.\")\r\n }\r\n return native.classifyAndSortClasses(classes) || []\r\n}\r\n\r\nexport const mergeCssDeclarations = (cssChunks: string[]) => {\r\n const native = getNativeBridge()\r\n if (!native?.mergeCssDeclarations) {\r\n throw new Error(\"FATAL: Native binding 'mergeCssDeclarations' is required but not available.\")\r\n }\r\n return native.mergeCssDeclarations(cssChunks) || { declarationsJson: \"{}\", declarationString: \"\", count: 0 }\r\n}\r\n\r\nexport const analyzeClassUsage = (classes: string[], scanResultJson: string, css: string) => {\r\n const native = getNativeBridge()\r\n if (!native?.analyzeClassUsage) {\r\n throw new Error(\"FATAL: Native binding 'analyzeClassUsage' is required but not available.\")\r\n }\r\n return native.analyzeClassUsage(classes, scanResultJson, css) || []\r\n}\r\n\r\n// =============================================================================\r\n// RSC ANALYSIS\r\n// =============================================================================\r\n\r\nexport const analyzeRsc = (source: string, filename: string) => {\r\n const native = getNativeBridge()\r\n if (!native?.analyzeRsc) {\r\n throw new Error(\"FATAL: Native binding 'analyzeRsc' is required but not available.\")\r\n }\r\n return native.analyzeRsc(source, filename) || { isServer: true, needsClientDirective: false, clientReasons: [] }\r\n}\r\n\r\nexport const analyzeFile = (source: string, filename: string) => {\r\n const rsc = analyzeRsc(source, filename)\r\n return {\r\n isServer: rsc?.isServer ?? true,\r\n needsClientDirective: rsc?.needsClientDirective ?? false,\r\n clientReasons: rsc?.clientReasons ?? [],\r\n interactiveClasses: [],\r\n canStaticResolveVariants: true,\r\n }\r\n}\r\n\r\nexport const analyzeVariantUsage = (_source: string, _componentName: string, _variantKeys: string[]) => {\r\n return { resolved: {} as Record<string, string>, dynamic: [] as string[] }\r\n}\r\n\r\nexport const injectClientDirective = (source: string): string => {\r\n if (!source.includes('\"use client\"') && !source.includes(\"'use client'\")) {\r\n return '\"use client\";\\n' + source\r\n }\r\n return source\r\n}\r\n\r\nexport const injectServerOnlyComment = (source: string): string => {\r\n return `/* @server-only */\\n${source}`\r\n}\r\n\r\n// =============================================================================\r\n// FULL ANALYSIS\r\n// =============================================================================\r\n\r\nexport const analyzeClasses = (filesJson: string, cwd: string, flags: number) => {\r\n const native = getNativeBridge()\r\n if (!native?.analyzeClasses) {\r\n throw new Error(\"FATAL: Native binding 'analyzeClasses' is required but not available.\")\r\n }\r\n return native.analyzeClasses(filesJson, cwd, flags)\r\n}\r\n\r\n// =============================================================================\r\n// SAFELIST\r\n// =============================================================================\r\n\r\nexport const generateSafelist = (scanDirs: string[], outputPath?: string, cwd?: string) => {\r\n const classes = scanProjectUsage(scanDirs, cwd || process.cwd())\r\n const allClasses = Object.keys(classes).sort()\r\n if (outputPath) {\r\n fs.writeFileSync(outputPath, JSON.stringify(allClasses, null, 2))\r\n }\r\n return allClasses\r\n}\r\n\r\nexport const loadSafelist = (safelistPath: string): string[] => {\r\n try {\r\n const content = fs.readFileSync(safelistPath, \"utf-8\")\r\n return JSON.parse(content)\r\n } catch {\r\n return []\r\n }\r\n}\r\n\r\n// =============================================================================\r\n// CONFIG LOADING\r\n// =============================================================================\r\n\r\nexport const loadTailwindConfig = (cwd: string = process.cwd()) => {\r\n const configFiles = [\r\n \"tailwind.config.ts\",\r\n \"tailwind.config.js\",\r\n \"tailwind.config.mjs\",\r\n \"tailwind.config.cjs\",\r\n ]\r\n for (const file of configFiles) {\r\n const fullPath = path.join(cwd, file)\r\n if (fs.existsSync(fullPath)) {\r\n // eslint-disable-next-line @typescript-eslint/no-var-requires\r\n const mod = require(fullPath) as { default?: unknown }\r\n return mod.default || mod\r\n }\r\n }\r\n return {}\r\n}\r\n\r\nexport const getContentPaths = (cwd: string = process.cwd()) => {\r\n return {\r\n content: [\r\n path.join(cwd, \"src/**/*.{js,ts,jsx,tsx}\"),\r\n path.join(cwd, \"app/**/*.{js,ts,jsx,tsx}\"),\r\n path.join(cwd, \"pages/**/*.{js,ts,jsx,tsx}\"),\r\n ],\r\n }\r\n}\r\n\r\n// =============================================================================\r\n// CONTAINER CSS EXTRACTOR\r\n// =============================================================================\r\n\r\nfunction _layoutClassesToCss(classes: string): string {\r\n const native = getNativeBridge()\r\n if (!native?.layoutClassesToCss) {\r\n throw new Error(\"FATAL: Native binding 'layoutClassesToCss' is required but not available.\")\r\n }\r\n return native.layoutClassesToCss(classes)\r\n}\r\n\r\nfunction _hashContainer(tag: string, containerJson: string, name?: string): string {\r\n const sortedKey = tag + (name ?? \"\") + containerJson\r\n const native = getNativeBridge()\r\n if (!native?.hashContent) {\r\n throw new Error(\"FATAL: Native binding 'hashContent' is required but not available.\")\r\n }\r\n return `tw-cq-${native.hashContent(sortedKey, \"fnv\", 6)}`\r\n}\r\n\r\nconst _CONTAINER_BREAKPOINTS: Record<string, string> = {\r\n xs: \"240px\",\r\n sm: \"320px\",\r\n md: \"640px\",\r\n lg: \"1024px\",\r\n xl: \"1280px\",\r\n \"2xl\": \"1536px\",\r\n}\r\n\r\n/**\r\n * Extract container configs dari source dan generate static `@container` CSS.\r\n * Native-only: delegates ke Rust extractTwContainerConfigs.\r\n */\r\nexport function extractContainerCssFromSource(source: string): string {\r\n const native = getNativeBridge()\r\n if (!native?.extractTwContainerConfigs) {\r\n throw new Error(\"FATAL: Native binding 'extractTwContainerConfigs' is required but not available.\")\r\n }\r\n\r\n const configs = native.extractTwContainerConfigs(source) as Array<{\r\n tag: string\r\n containerJson: string\r\n containerName?: string\r\n breakpoints: Array<{ key: string; classes: string }>\r\n }>\r\n\r\n const rules: string[] = []\r\n for (const cfg of configs) {\r\n const id = _hashContainer(cfg.tag, cfg.containerJson, cfg.containerName)\r\n for (const { key, classes } of cfg.breakpoints) {\r\n const minWidth = _CONTAINER_BREAKPOINTS[key] ?? key\r\n const css = _layoutClassesToCss(classes)\r\n if (!css) continue\r\n const query = cfg.containerName\r\n ? `@container ${cfg.containerName} (min-width: ${minWidth})`\r\n : `@container (min-width: ${minWidth})`\r\n rules.push(`${query}{.${id}{${css}}}`)\r\n }\r\n }\r\n return rules.join(\"\\n\")\r\n}\r\n\r\n// =============================================================================\r\n// LOADER\r\n// =============================================================================\r\n\r\nexport const runLoaderTransform = (ctx: { filepath: string; source: string; options?: Record<string, unknown> }) => {\r\n const { filepath, source, options } = ctx\r\n const result = transformSource(source, { filename: filepath, ...options })\r\n\r\n let staticCss: string | undefined\r\n try {\r\n const cssChunks: string[] = []\r\n\r\n const stateRules = extractAndGenerateStateCss(source, filepath)\r\n if (stateRules.length > 0) {\r\n cssChunks.push(stateRules.map((r) => r.cssRule).join(\"\\n\"))\r\n }\r\n\r\n const containerCss = extractContainerCssFromSource(source)\r\n if (containerCss) cssChunks.push(containerCss)\r\n\r\n const combined = cssChunks.join(\"\\n\").trim()\r\n if (combined) staticCss = combined\r\n } catch {\r\n // Non-fatal — static CSS extraction gagal tidak boleh break transform pipeline.\r\n }\r\n\r\n return {\r\n code: result?.code || \"\",\r\n changed: result?.changed || false,\r\n classes: result?.classes || [],\r\n staticCss,\r\n } as LoaderOutput\r\n}\r\n\r\nexport const shouldSkipFile = (filepath: string): boolean => {\r\n const SKIP_PATHS = [\"node_modules\", \".next\", \".rspack-dist\", \".turbo\", \"dist/\", \"out/\"]\r\n const skipExtensions = [\".css\", \".json\", \".md\", \".txt\", \".yaml\", \".yml\"]\r\n for (const p of SKIP_PATHS) {\r\n if (filepath.includes(p)) return true\r\n }\r\n for (const ext of skipExtensions) {\r\n if (filepath.endsWith(ext)) return true\r\n }\r\n return false\r\n}\r\n\r\n// =============================================================================\r\n// ROUTE CSS COLLECTOR\r\n// =============================================================================\r\n\r\nexport const fileToRoute = (filepath: string): string | null => {\r\n const normalized = filepath.replace(/\\\\/g, \"/\")\r\n if (normalized.includes(\"/layout.\") || normalized.includes(\"/loading.\") || normalized.includes(\"/error.\")) {\r\n return \"__global\"\r\n }\r\n const pageMatch = normalized.match(/\\/app\\/(.+?)\\/page\\.[tj]sx?$/)\r\n if (pageMatch) return `/${pageMatch[1]}`\r\n const rootPage = normalized.match(/\\/app\\/page\\.[tj]sx?$/)\r\n if (rootPage) return \"/\"\r\n return null\r\n}\r\n\r\nexport const getAllRoutes = (): string[] => {\r\n const native = getNativeBridge()\r\n if (!native?.analyzeClasses) {\r\n throw new Error(\"FATAL: Native binding 'analyzeClasses' is required but not available.\")\r\n }\r\n return [\"/\", \"__global\"]\r\n}\r\n\r\nexport const getRouteClasses = (_route: string): Set<string> => new Set()\r\nexport const registerFileClasses = (_filepath: string, _classes: string[]): void => {}\r\nexport const registerGlobalClasses = (_classes: string[]): void => {}\r\n\r\n// =============================================================================\r\n// INCREMENTAL ENGINE\r\n// =============================================================================\r\n\r\nlet _incrementalEngineInstance: InstanceType<typeof IncrementalEngine> | null = null\r\n\r\nexport const getIncrementalEngine = () => {\r\n if (!_incrementalEngineInstance) {\r\n _incrementalEngineInstance = new IncrementalEngine()\r\n }\r\n return _incrementalEngineInstance\r\n}\r\n\r\nexport const resetIncrementalEngine = (): void => {\r\n _incrementalEngineInstance = null\r\n}\r\n\r\nexport const IncrementalEngine = class {\r\n compile(source: string) {\r\n return transformSource(source)\r\n }\r\n}\r\n\r\n// =============================================================================\r\n// STYLE BUCKET SYSTEM\r\n// =============================================================================\r\n\r\nexport const getBucketEngine = () => {\r\n const native = getNativeBridge()\r\n if (!native?.classifyAndSortClasses) {\r\n throw new Error(\"FATAL: Native binding 'classifyAndSortClasses' is required but not available.\")\r\n }\r\n return {\r\n add: (className: string) => className,\r\n get: (_bucket: string): string[] => [],\r\n }\r\n}\r\n\r\nexport const resetBucketEngine = (): void => {}\r\n\r\nexport const BucketEngine = class {\r\n add(className: string) { return className }\r\n}\r\n\r\nexport const classifyNode = (_node: unknown): string => {\r\n const native = getNativeBridge()\r\n if (!native?.classifyAndSortClasses) {\r\n throw new Error(\"FATAL: Native binding 'classifyAndSortClasses' is required but not available.\")\r\n }\r\n return \"unknown\"\r\n}\r\n\r\nexport const detectConflicts = (_classes: string[]): string[] => {\r\n const native = getNativeBridge()\r\n if (!native?.analyzeClassUsage) {\r\n throw new Error(\"FATAL: Native binding 'analyzeClassUsage' is required but not available.\")\r\n }\r\n return []\r\n}\r\n\r\nexport const bucketSort = (classes: string[]): string[] => {\r\n return classifyAndSortClasses(classes).map((c) => (c as { raw?: string }).raw ?? (c as unknown as string))\r\n}\r\n\r\n// =============================================================================\r\n// STATIC STATE CSS PRE-GENERATION\r\n// =============================================================================\r\n\r\nexport interface TwStateConfigEntry {\r\n tag: string\r\n componentName: string\r\n statesJson: string\r\n sourceFile: string\r\n}\r\n\r\nexport interface StaticStateCssInput {\r\n tag: string\r\n componentName: string\r\n statesJson: string\r\n}\r\n\r\nexport interface GeneratedStateRule {\r\n selector: string\r\n declarations: string\r\n cssRule: string\r\n componentName: string\r\n stateName: string\r\n}\r\n\r\nexport const extractTwStateConfigs = (source: string, filename: string): TwStateConfigEntry[] => {\r\n const native = getNativeBridge()\r\n if (!native?.extractTwStateConfigs) {\r\n throw new Error(\"FATAL: Native binding 'extractTwStateConfigs' is required but not available.\")\r\n }\r\n return native.extractTwStateConfigs(source, filename)\r\n}\r\n\r\nexport const generateStaticStateCss = (\r\n inputs: StaticStateCssInput[],\r\n resolvedCss: string | null = null\r\n): GeneratedStateRule[] => {\r\n const native = getNativeBridge()\r\n if (!native?.generateStaticStateCss) {\r\n throw new Error(\"FATAL: Native binding 'generateStaticStateCss' is required but not available.\")\r\n }\r\n return native.generateStaticStateCss(inputs, resolvedCss)\r\n}\r\n\r\nexport const extractAndGenerateStateCss = (source: string, filename: string): GeneratedStateRule[] => {\r\n const native = getNativeBridge()\r\n if (!native?.extractAndGenerateStateCss) {\r\n const configs = extractTwStateConfigs(source, filename)\r\n if (configs.length === 0) return []\r\n return generateStaticStateCss(\r\n configs.map((c) => ({ tag: c.tag, componentName: c.componentName, statesJson: c.statesJson }))\r\n )\r\n }\r\n return native.extractAndGenerateStateCss(source, filename)\r\n}","/**\r\n * tailwind-styled-v5 — Internal API\r\n * \r\n * Re-exports functions needed by other package consumers.\r\n * All functions require native Rust bindings.\r\n */\r\n\r\nimport {\r\n type NativeBridge,\r\n type NativeTransformResult,\r\n type ComponentMetadata,\r\n type NativeRscResult,\r\n type LoaderOutput,\r\n getNativeBridge,\r\n adaptNativeResult,\r\n transformSource,\r\n hasTwUsage,\r\n isAlreadyTransformed,\r\n shouldProcess,\r\n compileCssFromClasses,\r\n compileCssNative,\r\n buildStyleTag,\r\n extractAllClasses,\r\n extractClassesFromSource,\r\n astExtractClasses,\r\n parseClasses,\r\n normalizeClasses,\r\n mergeClassesStatic,\r\n normalizeAndDedupClasses,\r\n eliminateDeadCss,\r\n findDeadVariants,\r\n runElimination,\r\n optimizeCss,\r\n scanProjectUsage,\r\n extractComponentUsage,\r\n diffClassLists,\r\n batchExtractClasses,\r\n checkAgainstSafelist,\r\n hoistComponents,\r\n compileVariantTable,\r\n compileVariants,\r\n classifyAndSortClasses,\r\n mergeCssDeclarations,\r\n analyzeClassUsage,\r\n analyzeRsc,\r\n analyzeFile,\r\n analyzeVariantUsage,\r\n injectClientDirective,\r\n injectServerOnlyComment,\r\n analyzeClasses,\r\n generateSafelist,\r\n loadSafelist,\r\n loadTailwindConfig,\r\n getContentPaths,\r\n runLoaderTransform,\r\n shouldSkipFile,\r\n fileToRoute,\r\n getAllRoutes,\r\n getRouteClasses,\r\n registerFileClasses,\r\n registerGlobalClasses,\r\n getIncrementalEngine,\r\n resetIncrementalEngine,\r\n getBucketEngine,\r\n resetBucketEngine,\r\n classifyNode,\r\n detectConflicts,\r\n bucketSort,\r\n generateCssForClasses,\r\n // Static state CSS pre-generation\r\n extractTwStateConfigs,\r\n generateStaticStateCss,\r\n extractAndGenerateStateCss,\r\n extractContainerCssFromSource,\r\n} from \"./index\"\r\n\r\nexport {\r\n getNativeBridge,\r\n adaptNativeResult,\r\n transformSource,\r\n hasTwUsage,\r\n isAlreadyTransformed,\r\n shouldProcess,\r\n compileCssFromClasses,\r\n compileCssNative,\r\n buildStyleTag,\r\n extractAllClasses,\r\n extractClassesFromSource,\r\n astExtractClasses,\r\n parseClasses,\r\n normalizeClasses,\r\n mergeClassesStatic,\r\n normalizeAndDedupClasses,\r\n eliminateDeadCss,\r\n findDeadVariants,\r\n runElimination,\r\n optimizeCss,\r\n scanProjectUsage,\r\n extractComponentUsage,\r\n diffClassLists,\r\n batchExtractClasses,\r\n checkAgainstSafelist,\r\n hoistComponents,\r\n compileVariantTable,\r\n compileVariants,\r\n classifyAndSortClasses,\r\n mergeCssDeclarations,\r\n analyzeClassUsage,\r\n analyzeRsc,\r\n analyzeFile,\r\n analyzeVariantUsage,\r\n injectClientDirective,\r\n injectServerOnlyComment,\r\n analyzeClasses,\r\n generateSafelist,\r\n loadSafelist,\r\n loadTailwindConfig,\r\n getContentPaths,\r\n runLoaderTransform,\r\n shouldSkipFile,\r\n fileToRoute,\r\n getAllRoutes,\r\n getRouteClasses,\r\n registerFileClasses,\r\n registerGlobalClasses,\r\n getIncrementalEngine,\r\n resetIncrementalEngine,\r\n getBucketEngine,\r\n resetBucketEngine,\r\n classifyNode,\r\n detectConflicts,\r\n bucketSort,\r\n generateCssForClasses,\r\n // Static state + container CSS pre-generation\r\n extractTwStateConfigs,\r\n generateStaticStateCss,\r\n extractAndGenerateStateCss,\r\n extractContainerCssFromSource,\r\n}\r\n\r\nexport { type NativeBridge, type NativeTransformResult, type ComponentMetadata, type NativeRscResult, type LoaderOutput }\r\n\r\nexport type CssCompileResult = NativeTransformResult\r\n\r\n// CSS pipeline — Tailwind → LightningCSS\r\n// PHASE 0: Includes LRU caching for 30-40% performance improvement\r\nexport { runCssPipeline, runCssPipelineSync, generateRawCss, getCacheStats, clearCache, type CssPipelineResult } from \"./tailwindEngine\"","/**\r\n * tailwind-styled-v4 — Turbopack / Webpack Loader\r\n *\r\n * QA #7: Router-aware loader dengan:\r\n * - App Router vs Pages Router detection\r\n * - Directive preservation (use client / use server)\r\n * - Version-specific Next.js optimizations\r\n * - Source map passthrough\r\n * - Skip non-component files (node_modules, .d.ts, already transformed)\r\n */\r\n\r\nimport { type LoaderOutput, runLoaderTransform, registerFileClasses } from \"@tailwind-styled/compiler/internal\"\r\nimport fs from \"node:fs\"\r\nimport path from \"node:path\"\r\n\r\n// ── Static CSS writer (identik dengan webpackLoader.ts) ─────────────────────\r\nconst _writtenRules = new Set<string>()\r\n\r\nfunction appendStaticCssToFile(staticCss: string, safelistPath: string): void {\r\n if (!staticCss.trim() || !safelistPath) return\r\n const stateFilePath = path.join(path.dirname(safelistPath), \"_tw-state-static.css\")\r\n const newRules: string[] = []\r\n for (const chunk of staticCss.split(/(?<=\\})\\s*/)) {\r\n const rule = chunk.trim()\r\n if (rule && !_writtenRules.has(rule)) {\r\n _writtenRules.add(rule)\r\n newRules.push(rule)\r\n }\r\n }\r\n if (newRules.length === 0) return\r\n try {\r\n fs.mkdirSync(path.dirname(stateFilePath), { recursive: true })\r\n if (!fs.existsSync(stateFilePath)) {\r\n fs.writeFileSync(\r\n stateFilePath,\r\n `/* _tw-state-static.css — Auto-generated by tailwind-styled-v4. DO NOT EDIT.\\n` +\r\n ` * Import di globals.css: @import \"./_tw-state-static.css\";\\n` +\r\n ` * Berisi: state CSS (.tw-s-*[data-*=\"true\"]) + container queries (@container .tw-cq-*).\\n` +\r\n ` */\\n\\n`,\r\n \"utf-8\"\r\n )\r\n }\r\n fs.appendFileSync(stateFilePath, newRules.join(\"\\n\") + \"\\n\", \"utf-8\")\r\n } catch { /* non-fatal */ }\r\n}\r\n\r\nexport interface TurbopackContext {\r\n /** Absolute path ke file yang sedang di-transform */\r\n resourcePath: string\r\n /** Next.js version (jika di-inject oleh withTailwindStyled) */\r\n query?: Record<string, unknown>\r\n}\r\n\r\nexport interface TurbopackLoaderOptions {\r\n addDataAttr?: boolean | string\r\n autoClientBoundary?: boolean | string\r\n hoist?: boolean | string\r\n preserveImports?: boolean | string\r\n /** Debug mode — log transform details */\r\n debug?: boolean | string\r\n /** Explicit Next.js major version */\r\n nextMajor?: number | string\r\n /** Path ke safelist CSS file — di-inject oleh withTailwindStyled (dev only) */\r\n safelistPath?: string\r\n}\r\n\r\nfunction parseBool(val: boolean | string | undefined, fallback = false): boolean {\r\n if (typeof val === \"boolean\") return val\r\n if (typeof val === \"string\") return val === \"true\" || val === \"1\"\r\n return fallback\r\n}\r\n\r\nfunction parseNum(val: number | string | undefined): number | undefined {\r\n if (typeof val === \"number\") return val\r\n if (typeof val === \"string\") return parseInt(val, 10) || undefined\r\n return undefined\r\n}\r\n\r\nfunction detectRouter(resourcePath: string): \"app\" | \"pages\" | \"unknown\" {\r\n const normalized = resourcePath.replace(/\\\\/g, \"/\")\r\n if (/\\/app\\//.test(normalized)) return \"app\"\r\n if (/\\/pages\\//.test(normalized)) return \"pages\"\r\n return \"unknown\"\r\n}\r\n\r\n/**\r\n * Next.js App Router entry-point files yang TIDAK boleh diproses loader ini.\r\n *\r\n * Turbopack tidak support `exclude` di rule level seperti webpack, sehingga\r\n * *.tsx glob akan match layout.tsx, page.tsx, dll. Guard ini memastikan loader\r\n * skip file-file tersebut secara eksplisit — identik dengan NEXT_RSC_ENTRIES\r\n * di withTailwindStyled.ts yang hanya efektif untuk webpack path.\r\n *\r\n * Tanpa guard ini: loader menyentuh layout.tsx → Next.js/React Compiler\r\n * kehilangan sinyal pure RSC → locale injection dari Accept-Language header\r\n * (Next.js 16+) tidak konsisten antara SSR pass dan hydration pass →\r\n * hydration mismatch `lang=\"id\"` vs `lang=\"en\"`.\r\n */\r\nconst NEXT_RSC_ENTRIES =\r\n /(?:^|[\\\\/])(?:layout|page|loading|error|not-found|template|default)\\.[jt]sx?$/\r\n\r\nfunction isSkippable(resourcePath: string): boolean {\r\n const normalized = resourcePath.replace(/\\\\/g, \"/\")\r\n return (\r\n normalized.includes(\"/node_modules/\") ||\r\n normalized.endsWith(\".d.ts\") ||\r\n normalized.endsWith(\".d.mts\") ||\r\n normalized.endsWith(\".d.cts\") ||\r\n // Skip CSS/assets\r\n /\\.(css|scss|sass|less|svg|png|jpg|jpeg|gif|webp|ico|woff|woff2|ttf|eot)$/.test(normalized) ||\r\n // Skip Next.js RSC entry files — Turbopack tidak punya exclude di rule level,\r\n // jadi guard ini menggantikan NEXT_RSC_ENTRIES exclude yang ada di webpack path.\r\n NEXT_RSC_ENTRIES.test(normalized)\r\n )\r\n}\r\n\r\n/** Extract directive line dari source */\r\nfunction extractDirective(source: string): { directive: string; stripped: string } {\r\n const match = source.match(/^(\\s*[\"'](use client|use server)[\"']\\s*;?\\s*\\n?)/)\r\n if (!match) return { directive: \"\", stripped: source }\r\n const directive = match[1].trim().replace(/['\"]/g, '\"') + \"\\n\"\r\n const stripped = source.slice(match[0].length)\r\n return { directive, stripped }\r\n}\r\n\r\n\r\n// ─── Per-file safelist writer ─────────────────────────────────────────────────\r\n// Turbopack tidak punya afterCompile hook dan bisa spawn multiple workers.\r\n// Solusi: tiap file menulis file CSS-nya sendiri di .next/tw-classes/<slug>.css\r\n// Tailwind scan seluruh direktori via @source \".next/tw-classes/**\"\r\n// Tidak ada race condition karena tiap file punya output path unik.\r\n//\r\n// Stale file handling:\r\n// - Setiap dev server start, Next.js hapus .next/ → tw-classes/ otomatis hilang\r\n// - Setiap compile cycle, TwSafelistDevPlugin (webpack) clear tw-classes/\r\n// - Turbopack: pakai _cycle sentinel file — kalau cycle berubah, clear dulu\r\n\r\n// ─── Cycle ID ─────────────────────────────────────────────────────────────────\r\n// withTailwindStyled menulis _start.txt saat wrap() dipanggil (= saat next.config.ts\r\n// di-load, yaitu sekali per dev server start). Setiap compile cycle Turbopack,\r\n// loader baca _start.txt dan compare dengan _cycle.txt di tw-classes/:\r\n//\r\n// _start.txt = timestamp dev server start (ditulis withTailwindStyled)\r\n// _cycle.txt = timestamp cycle terakhir (ditulis loader pertama di tiap cycle)\r\n//\r\n// Kalau _cycle.txt != _start.txt → compile cycle baru → clear tw-classes/ dulu.\r\n// Ini solve masalah \"file yang dihapus tetap ada di safelist\" tanpa butuh hook.\r\n\r\nconst CYCLE_SENTINEL = \"_cycle.txt\"\r\nconst START_SENTINEL = \"_start.txt\"\r\n\r\n// Cached per worker instance — hindari readFileSync berulang di file yang sama\r\nconst _workerCache = new Map<string, string>()\r\n\r\nfunction getTwClassesDir(safelistPath: string): string {\r\n return path.join(path.dirname(safelistPath), \"tw-classes\")\r\n}\r\n\r\nfunction readSentinel(filePath: string): string {\r\n try { return fs.readFileSync(filePath, \"utf-8\").trim() } catch { return \"\" }\r\n}\r\n\r\n// Lock untuk serialisasi clearAndMarkCycle di dalam satu worker process.\r\n// Turbopack bisa spawn multiple concurrent loader calls — tanpa lock,\r\n// dua worker bisa clear tw-classes/ bersamaan → window dimana semua file\r\n// hilang → Tailwind scan → CSS output kosong → FLICKER.\r\n// Lock ini hanya efektif dalam satu Node.js process (per worker), tapi itu cukup\r\n// karena Turbopack menggunakan single-threaded Node.js per worker.\r\nlet _clearLock = false\r\n\r\nfunction clearAndMarkCycle(twClassesDir: string, startId: string): void {\r\n // Sudah ada clear yang sedang berjalan di worker ini — skip, biarkan yang pertama selesai.\r\n // Worker lain yang mungkin sudah clear duluan akan tulis _cycle.txt → kita akan\r\n // melihat cachedCycle === startId di iterasi berikutnya dan skip juga.\r\n if (_clearLock) return\r\n _clearLock = true\r\n try {\r\n if (fs.existsSync(twClassesDir)) {\r\n // Rename-then-recreate strategy: rename folder lama dulu, lalu buat folder baru kosong,\r\n // baru hapus folder lama. Ini memastikan tidak ada window dimana tw-classes/ tidak ada\r\n // atau kosong (yang akan bikin Tailwind re-scan dan generate CSS tanpa classes → flicker).\r\n const tempDir = `${twClassesDir}_clearing_${Date.now()}`\r\n try {\r\n fs.renameSync(twClassesDir, tempDir)\r\n fs.mkdirSync(twClassesDir, { recursive: true })\r\n // Copy _start.txt ke folder baru sebelum hapus folder lama\r\n const startFile = path.join(tempDir, START_SENTINEL)\r\n if (fs.existsSync(startFile)) {\r\n fs.copyFileSync(startFile, path.join(twClassesDir, START_SENTINEL))\r\n }\r\n // Copy _webpack-merged.css kalau ada\r\n const mergedFile = path.join(tempDir, \"_webpack-merged.css\")\r\n if (fs.existsSync(mergedFile)) {\r\n fs.copyFileSync(mergedFile, path.join(twClassesDir, \"_webpack-merged.css\"))\r\n }\r\n // Tulis _cycle.txt di folder baru SEBELUM hapus folder lama\r\n // Ini pastikan tw-classes/ selalu punya content valid\r\n fs.writeFileSync(path.join(twClassesDir, CYCLE_SENTINEL), startId, \"utf-8\")\r\n _workerCache.set(twClassesDir, startId)\r\n // Baru hapus folder lama secara async — tidak blokir compile\r\n fs.rmSync(tempDir, { recursive: true, force: true })\r\n } catch {\r\n // Fallback ke cara lama jika rename gagal (mis. cross-device)\r\n for (const file of fs.readdirSync(twClassesDir)) {\r\n if (file === START_SENTINEL || file === \"_webpack-merged.css\") continue\r\n try { fs.unlinkSync(path.join(twClassesDir, file)) } catch { /* non-fatal */ }\r\n }\r\n fs.writeFileSync(path.join(twClassesDir, CYCLE_SENTINEL), startId, \"utf-8\")\r\n _workerCache.set(twClassesDir, startId)\r\n }\r\n } else {\r\n fs.mkdirSync(twClassesDir, { recursive: true })\r\n fs.writeFileSync(path.join(twClassesDir, CYCLE_SENTINEL), startId, \"utf-8\")\r\n _workerCache.set(twClassesDir, startId)\r\n }\r\n } catch { /* non-fatal */ } finally {\r\n _clearLock = false\r\n }\r\n}\r\n\r\nfunction getPerFileSafelistPath(safelistDir: string, resourcePath: string): string {\r\n const normalized = resourcePath.replace(/\\\\/g, \"/\")\r\n const slug = normalized\r\n .replace(/^.*\\/src\\//, \"\")\r\n .replace(/\\.[tj]sx?$/, \"\")\r\n .replace(/[^a-zA-Z0-9]/g, \"_\")\r\n .slice(0, 80)\r\n return path.join(safelistDir, `${slug}.css`)\r\n}\r\n\r\nfunction writePerFileSafelist(\r\n safelistPath: string | undefined,\r\n resourcePath: string,\r\n classes: string[]\r\n): void {\r\n if (!safelistPath || classes.length === 0) return\r\n try {\r\n const twClassesDir = getTwClassesDir(safelistPath)\r\n\r\n // Baca start ID dari _start.txt (ditulis withTailwindStyled saat config load)\r\n const startId = readSentinel(path.join(twClassesDir, START_SENTINEL))\r\n\r\n // Compare dengan cycle ID terakhir — pakai in-memory cache dulu, fallback ke disk\r\n const cachedCycle = _workerCache.get(twClassesDir) ?? readSentinel(path.join(twClassesDir, CYCLE_SENTINEL))\r\n\r\n if (startId && cachedCycle !== startId) {\r\n // Compile cycle baru — clear tw-classes/ dan tulis _cycle.txt baru\r\n clearAndMarkCycle(twClassesDir, startId)\r\n } else if (!fs.existsSync(twClassesDir)) {\r\n fs.mkdirSync(twClassesDir, { recursive: true })\r\n }\r\n\r\n const outPath = getPerFileSafelistPath(twClassesDir, resourcePath)\r\n const sorted = [...new Set(classes)].sort()\r\n const css = [\r\n `/* tw-safelist: ${path.basename(resourcePath)} — auto-generated */`,\r\n \"@layer utilities {\",\r\n sorted.map((cls) => `.${cls.replace(/([^a-zA-Z0-9_-])/g, \"\\\\$1\")} {}`).join(\"\\n\"),\r\n \"}\",\r\n ].join(\"\\n\")\r\n\r\n // Skip write jika isi sama — avoid Tailwind re-scan yang tidak perlu\r\n try {\r\n if (fs.readFileSync(outPath, \"utf-8\") === css) return\r\n } catch { /* file belum ada, lanjut write */ }\r\n\r\n // Atomic write: tulis ke temp file dulu, lalu rename ke path final.\r\n // Ini mencegah Tailwind scanner membaca file yang sedang ditulis (partial read)\r\n // yang akan menghasilkan CSS incomplete → FLICKER.\r\n // rename() dijamin atomic di semua OS modern (POSIX dan Windows NTFS).\r\n const tmpPath = `${outPath}.tmp`\r\n try {\r\n fs.writeFileSync(tmpPath, css, \"utf-8\")\r\n fs.renameSync(tmpPath, outPath)\r\n } catch {\r\n // Fallback kalau rename gagal (mis. cross-device, Windows lock)\r\n try { fs.unlinkSync(tmpPath) } catch { /* ignore */ }\r\n fs.writeFileSync(outPath, css, \"utf-8\")\r\n }\r\n } catch {\r\n // Non-fatal\r\n }\r\n}\r\n\r\n/**\r\n * Main loader function — compatible dengan Turbopack, Webpack 5, rspack.\r\n */\r\nexport default function turbopackLoader(\r\n this: TurbopackContext,\r\n source: string,\r\n options: TurbopackLoaderOptions = {}\r\n): string {\r\n // Skip files yang tidak perlu di-transform\r\n if (isSkippable(this.resourcePath)) return source\r\n\r\n // Detect router context\r\n const router = detectRouter(this.resourcePath)\r\n const nextMajor = parseNum(options.nextMajor)\r\n const debug = parseBool(options.debug)\r\n const filename = path.basename(this.resourcePath)\r\n\r\n // Build effective options berdasarkan router context\r\n const effective = {\r\n addDataAttr: parseBool(options.addDataAttr),\r\n // App Router: selalu auto-detect client boundary\r\n // Pages Router: opt-in via option\r\n autoClientBoundary: router === \"app\" ? true : parseBool(options.autoClientBoundary),\r\n // Hoist by default untuk semua contexts\r\n hoist: parseBool(options.hoist, true),\r\n // Pages Router: preserve imports (RSC tidak berlaku)\r\n preserveImports: router === \"pages\" ? true : parseBool(options.preserveImports, false),\r\n }\r\n\r\n if (debug) {\r\n console.debug(`[tw-loader] ${filename}: router=${router} nextMajor=${nextMajor ?? \"unknown\"}`)\r\n }\r\n\r\n // Preserve directive (use client / use server)\r\n const { directive, stripped } = extractDirective(source)\r\n\r\n // ── Hash pre-embedding (build-time optimization) ────────────────────────\r\n // Inject `__hash: \"abc123\"` ke semua tw() calls yang punya states config.\r\n // stateEngine.ts akan pakai __hash langsung — skip runtime hashState() computation.\r\n // Zero dependency baru: pakai Rust NAPI yang sama dengan compiler.\r\n let processedSource = stripped\r\n try {\r\n const compilerMod = require(\"@tailwind-styled/compiler/internal\") as {\r\n injectStateHash?: (source: string, filename: string) => { code: string; changed: boolean; injectedCount: number }\r\n }\r\n if (typeof compilerMod?.injectStateHash === \"function\" && stripped.includes(\"states:\")) {\r\n const hashResult = compilerMod.injectStateHash(stripped, this.resourcePath)\r\n if (hashResult.changed) {\r\n processedSource = hashResult.code\r\n if (debug) {\r\n console.debug(`[tw-loader] ${filename}: injected __hash for ${hashResult.injectedCount} component(s)`)\r\n }\r\n }\r\n }\r\n } catch {\r\n // injectStateHash tidak tersedia (binary belum di-rebuild) — skip, tidak fatal\r\n }\r\n\r\n try {\r\n const output: LoaderOutput = runLoaderTransform({\r\n filepath: this.resourcePath,\r\n source: processedSource,\r\n options: effective,\r\n })\r\n\r\n // Tidak ada perubahan — Rust kembalikan source asli (bukan string kosong).\r\n // Guard lama `!output.code.length` selalu false karena code = original source.\r\n // Fix: cukup cek changed flag saja; return source asli agar Next.js RSC boundary\r\n // tetap intact dan tidak ada interaksi dengan React Compiler locale detection.\r\n if (!output.changed) {\r\n // Meski tidak ada transform, tetap tulis safelist kalau ada classes yang ditemukan.\r\n // Object config style (tw.div({...})) tidak butuh transform tapi tetap punya classes.\r\n if (output.classes.length > 0) {\r\n writePerFileSafelist(options.safelistPath, this.resourcePath, output.classes)\r\n }\r\n // Tetap collect static CSS meski file tidak di-transform\r\n if (output.staticCss && options.safelistPath) {\r\n appendStaticCssToFile(output.staticCss, options.safelistPath)\r\n }\r\n return source\r\n }\r\n\r\n // Register classes untuk route map (dipakai webpack dev plugin & build manifest)\r\n if (output.classes.length > 0) {\r\n registerFileClasses(this.resourcePath, output.classes)\r\n // Turbopack: tulis per-file safelist langsung dari loader.\r\n // Race-condition-safe karena tiap file punya output path unik.\r\n writePerFileSafelist(options.safelistPath, this.resourcePath, output.classes)\r\n }\r\n\r\n // ── Append static CSS (state + container) ──────────────────────────────\r\n if (output.staticCss && options.safelistPath) {\r\n appendStaticCssToFile(output.staticCss, options.safelistPath)\r\n }\r\n\r\n // Re-attach directive di depan\r\n if (!directive) return output.code\r\n\r\n // Strip any duplicate directives yang mungkin diinject oleh compiler\r\n const clean = output.code.replace(/^\\s*[\"'](use client|use server)[\"']\\s*;?\\s*\\n?/, \"\")\r\n return directive + clean\r\n } catch (err) {\r\n // Loader harus tidak pernah throw — return source asli dengan warning\r\n const msg = err instanceof Error ? err.message : String(err)\r\n if (debug) {\r\n console.warn(`[tw-loader] transform failed for ${filename}: ${msg}`)\r\n }\r\n return source\r\n }\r\n}"]}