tailwind-styled-v4 5.0.13 → 5.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/atomic.js +14 -14
- package/dist/atomic.js.map +1 -1
- package/dist/atomic.mjs +14 -14
- package/dist/atomic.mjs.map +1 -1
- package/dist/cli.js +14 -14
- package/dist/cli.js.map +1 -1
- package/dist/cli.mjs +14 -14
- package/dist/cli.mjs.map +1 -1
- package/dist/compiler.js +14 -14
- package/dist/compiler.js.map +1 -1
- package/dist/compiler.mjs +14 -14
- package/dist/compiler.mjs.map +1 -1
- package/dist/engine.js +14 -14
- package/dist/engine.js.map +1 -1
- package/dist/engine.mjs +14 -14
- package/dist/engine.mjs.map +1 -1
- package/dist/index.browser.mjs +3 -1
- package/dist/index.browser.mjs.map +1 -1
- package/dist/index.js +45 -25
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +45 -25
- package/dist/index.mjs.map +1 -1
- package/dist/next.js +14 -14
- package/dist/next.js.map +1 -1
- package/dist/next.mjs +14 -14
- package/dist/next.mjs.map +1 -1
- package/dist/shared.d.mts +3 -2
- package/dist/shared.d.ts +3 -2
- package/dist/shared.js +14 -14
- package/dist/shared.js.map +1 -1
- package/dist/shared.mjs +14 -14
- package/dist/shared.mjs.map +1 -1
- package/dist/svelte.js +42 -24
- package/dist/svelte.js.map +1 -1
- package/dist/svelte.mjs +42 -24
- package/dist/svelte.mjs.map +1 -1
- package/dist/turbopackLoader.js +14 -14
- package/dist/turbopackLoader.js.map +1 -1
- package/dist/turbopackLoader.mjs +14 -14
- package/dist/turbopackLoader.mjs.map +1 -1
- package/dist/tw.js +14 -14
- package/dist/tw.js.map +1 -1
- package/dist/tw.mjs +14 -14
- package/dist/tw.mjs.map +1 -1
- package/dist/vite.js +14 -14
- package/dist/vite.js.map +1 -1
- package/dist/vite.mjs +14 -14
- package/dist/vite.mjs.map +1 -1
- package/dist/vue.js +42 -24
- package/dist/vue.js.map +1 -1
- package/dist/vue.mjs +42 -24
- package/dist/vue.mjs.map +1 -1
- package/dist/webpackLoader.js +14 -14
- package/dist/webpackLoader.js.map +1 -1
- package/dist/webpackLoader.mjs +14 -14
- package/dist/webpackLoader.mjs.map +1 -1
- package/package.json +3 -2
- package/native/index.node +0 -0
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../packages/domain/shared/src/trace.ts","../packages/domain/shared/src/error-codes.ts","../packages/domain/shared/src/compatibility.ts","../packages/domain/shared/src/native-schemas.ts","../packages/domain/shared/src/esmHelpers.ts","../packages/domain/shared/src/telemetry.ts","../packages/domain/shared/src/configSchemas.ts","../packages/domain/shared/src/workerResolver.ts","../packages/domain/shared/src/codegen.ts","../packages/domain/shared/src/native-resolution.ts","../packages/domain/shared/src/observability.ts","../packages/domain/compiler/src/nativeBridge.ts","../packages/domain/compiler/src/compiler/cssGeneratorNative.ts","../packages/domain/compiler/src/compiler/compilationNative.ts","../packages/domain/compiler/src/compiler/cssCompilationNative.ts","../packages/domain/compiler/src/compiler/idRegistryNative.ts","../packages/domain/compiler/src/compiler/streamingNative.ts","../packages/domain/compiler/src/compiler/tailwindEngine.ts","../packages/domain/compiler/src/compiler/index.ts","../packages/domain/compiler/src/parser/index.ts","../packages/domain/compiler/src/analyzer/analyzerNative.ts","../packages/domain/compiler/src/analyzer/themeResolutionNative.ts","../packages/domain/compiler/src/analyzer/scannerNative.ts","../packages/domain/compiler/src/analyzer/index.ts","../packages/domain/compiler/src/cache/cacheNative.ts","../packages/domain/compiler/src/cache/index.ts","../packages/domain/compiler/src/redis/redisNative.ts","../packages/domain/compiler/src/redis/index.ts","../packages/domain/compiler/src/watch/watchSystemNative.ts","../packages/domain/compiler/src/watch/index.ts","../packages/domain/compiler/src/index.ts","../packages/domain/compiler/src/internal.ts","../packages/domain/shared/src/staticStateExtractor.ts","../packages/domain/shared/src/logger.ts","../packages/domain/shared/src/index.ts","../packages/domain/scanner/src/native-bridge.ts","../packages/domain/scanner/src/cache-native.ts","../packages/domain/scanner/src/parallel-scanner.ts","../packages/domain/scanner/src/schemas.ts","../packages/domain/scanner/src/index.ts","../packages/domain/engine/src/native-bridge.ts","../packages/domain/core/src/native.ts","../packages/domain/core/src/containerQuery.ts","../packages/domain/core/src/merge.ts","../packages/domain/core/src/stateEngine.ts","../packages/domain/core/src/createComponent.ts","../packages/domain/core/src/cv.ts","../packages/domain/core/src/cx.ts","../packages/domain/theme/src/liveTokenEngine.ts","../packages/domain/core/src/registry.ts","../packages/domain/core/src/styled.ts","../packages/domain/core/src/styledSystem.ts","../packages/domain/core/src/twProxy.ts","../packages/domain/core/src/twTheme.ts","../packages/domain/analyzer/src/analyzeWorkspace.ts","../packages/domain/analyzer/src/binding.ts","../packages/domain/analyzer/src/utils.ts","../packages/domain/analyzer/src/schemas.ts","../packages/domain/analyzer/src/semantic.ts","../packages/domain/engine/src/index.ts","../packages/domain/engine/src/incremental.ts","../packages/domain/engine/src/metrics.ts","../packages/domain/engine/src/metricsWriter.ts","../packages/domain/engine/src/plugin-api.ts","../packages/domain/engine/src/schemas.ts","../packages/domain/engine/src/watch.ts"],"names":["path","z","isBrowser","cv","exports","fs","t","init_src","createRequire","runCssPipeline","batchExtractClasses","log","createLogger","hashContent","_require","batchExtractClassesNative","scanFileNative","scanFilesBatchNative","getDirname","fileURLToPath","scannerGetBinding","collectFiles","resolve","formatIssuePath","src_exports","isScannableFile","scanFile","scanWorkspace","Worker","nativeBinding","scanWorkspaceNative","init_native_bridge","getBinding","NATIVE_UNAVAILABLE_MESSAGE","_loadNative","layoutClassesToCss","twMerge","rules","React","resolveVariants","merged","extended","result","baseComponent","component","setToken","setTokens","applyTokenSet","formatErrorMessage","getNativeBinding","formatIssues","parseWithSchema","detectConflicts","extractClassesNative","loadTailwindConfig","DEFAULT_EXTENSIONS","rebuildWorkspaceResult","existing","_native","resolveNativeBinary","pathToFileURL"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\r\n * Shared trace utilities for CLI, devtools, and dashboard\r\n * \r\n * Provides reusable trace snapshot handling, formatting, and analysis\r\n * across the tailwind-styled-v4 ecosystem without introducing coupling.\r\n */\r\n\r\nexport interface TraceSnapshot {\r\n generatedAt: string\r\n buildMs: number | null\r\n scanMs: number | null\r\n analyzeMs: number | null\r\n compileMs: number | null\r\n memoryMb: { rss: number; heapUsed: number; heapTotal: number } | null\r\n classCount: number | null\r\n fileCount: number | null\r\n cssBytes: number | null\r\n mode: string | null\r\n eventsReceived?: number\r\n eventsProcessed?: number\r\n batchesProcessed?: number\r\n incrementalUpdates?: number\r\n fullRescans?: number\r\n}\r\n\r\nexport interface TraceSummary {\r\n workspace: {\r\n totalPackages: number\r\n totalFiles: number\r\n totalClasses: number\r\n lastScanDurationMs: number\r\n lastBuildDurationMs: number\r\n }\r\n cache: {\r\n hitRate: number\r\n totalEntries: number\r\n memoryUsageMb: number\r\n }\r\n pipeline: {\r\n scanDurationMs: number\r\n analyzeDurationMs: number\r\n compileDurationMs: number\r\n totalDurationMs: number\r\n }\r\n health: {\r\n status: \"healthy\" | \"degraded\" | \"unhealthy\"\r\n issues: Array<{ severity: string; message: string }>\r\n }\r\n}\r\n\r\n/**\r\n * Get health status color for UI rendering\r\n */\r\nexport function getHealthColor(status?: string): string {\r\n switch (status) {\r\n case \"healthy\":\r\n return \"#34d399\"\r\n case \"degraded\":\r\n return \"#fbbf24\"\r\n case \"unhealthy\":\r\n return \"#f87171\"\r\n default:\r\n return \"#52525b\"\r\n }\r\n}\r\n\r\n/**\r\n * Get mode color for UI rendering\r\n */\r\nexport function getModeColor(mode?: string | null): string {\r\n switch (mode) {\r\n case \"build\":\r\n return \"#fbbf24\"\r\n case \"watch\":\r\n return \"#34d399\"\r\n case \"jit\":\r\n return \"#60a5fa\"\r\n case \"error\":\r\n return \"#f87171\"\r\n case \"idle\":\r\n return \"#71717a\"\r\n default:\r\n return \"#52525b\"\r\n }\r\n}\r\n\r\n/**\r\n * Format memory in human-readable format\r\n */\r\nexport function formatMemory(bytes: number): string {\r\n if (bytes < 1024) return `${Math.round(bytes)}B`\r\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`\r\n return `${(bytes / (1024 * 1024)).toFixed(1)}MB`\r\n}\r\n\r\n/**\r\n * Format duration in human-readable format\r\n */\r\nexport function formatDuration(ms: number | null): string {\r\n if (ms === null) return \"—\"\r\n if (ms < 1000) return `${ms}ms`\r\n return `${(ms / 1000).toFixed(1)}s`\r\n}\r\n\r\n/**\r\n * Calculate health status from metrics\r\n */\r\nexport function calculateHealth(\r\n metrics: TraceSnapshot,\r\n summary?: TraceSummary\r\n): \"healthy\" | \"degraded\" | \"unhealthy\" {\r\n if (summary?.health?.status) return summary.health.status\r\n\r\n // Fallback to simple heuristics\r\n if (metrics.mode === \"error\") return \"unhealthy\"\r\n if ((metrics.buildMs ?? 0) > 5000) return \"degraded\"\r\n if (metrics.memoryMb && metrics.memoryMb.heapUsed > 500) return \"degraded\"\r\n return \"healthy\"\r\n}\r\n\r\n/**\r\n * Get color for build time indicator\r\n */\r\nexport function getBuildTimeColor(ms: number | null): string {\r\n if (ms === null) return \"#52525b\"\r\n if (ms > 1000) return \"#f87171\" // red - very slow\r\n if (ms > 500) return \"#fbbf24\" // amber - acceptable\r\n return \"#34d399\" // green - fast\r\n}\r\n\r\n/**\r\n * Get color for memory usage indicator\r\n */\r\nexport function getMemoryColor(mb: number): string {\r\n if (mb > 500) return \"#f87171\" // red - high\r\n if (mb > 250) return \"#fbbf24\" // amber - moderate\r\n return \"#34d399\" // green - low\r\n}\r\n\r\n/**\r\n * Create trace snapshot from dashboard data\r\n */\r\nexport function createTraceSnapshot(data: Record<string, unknown>): TraceSnapshot {\r\n return {\r\n generatedAt: (data.generatedAt as string) || new Date().toISOString(),\r\n buildMs: (data.buildMs as number) ?? null,\r\n scanMs: (data.scanMs as number) ?? null,\r\n analyzeMs: (data.analyzeMs as number) ?? null,\r\n compileMs: (data.compileMs as number) ?? null,\r\n memoryMb: (data.memoryMb as { rss: number; heapUsed: number; heapTotal: number } | null) ?? null,\r\n classCount: (data.classCount as number) ?? null,\r\n fileCount: (data.fileCount as number) ?? null,\r\n cssBytes: (data.cssBytes as number) ?? null,\r\n mode: (data.mode as string) ?? null,\r\n eventsReceived: (data.eventsReceived as number | undefined) ?? undefined,\r\n eventsProcessed: (data.eventsProcessed as number | undefined) ?? undefined,\r\n batchesProcessed: (data.batchesProcessed as number | undefined) ?? undefined,\r\n incrementalUpdates: (data.incrementalUpdates as number | undefined) ?? undefined,\r\n fullRescans: (data.fullRescans as number | undefined) ?? undefined,\r\n }\r\n}\r\n\r\n/**\r\n * Calculate pipeline time distribution\r\n */\r\nexport function getPipelinePercentages(metrics: TraceSnapshot): {\r\n scanPct: number\r\n analyzePct: number\r\n compilePct: number\r\n} {\r\n const scan = metrics.scanMs ?? 0\r\n const analyze = metrics.analyzeMs ?? 0\r\n const compile = metrics.compileMs ?? 0\r\n const total = scan + analyze + compile\r\n\r\n if (total === 0) {\r\n return { scanPct: 0, analyzePct: 0, compilePct: 0 }\r\n }\r\n\r\n return {\r\n scanPct: (scan / total) * 100,\r\n analyzePct: (analyze / total) * 100,\r\n compilePct: (compile / total) * 100,\r\n }\r\n}\r\n","/**\r\n * Error code registry — single source of truth for all error codes.\r\n *\r\n * Format: E[0-9]xx for errors, W[0-9]xx for warnings.\r\n * Use with TwError for consistent error handling.\r\n */\r\n\r\nexport const ERROR_CODES = {\r\n // E0xx — Native binding\r\n NATIVE_NOT_FOUND: \"E001\",\r\n NATIVE_LOAD_FAILED: \"E002\",\r\n NATIVE_VERSION_MISMATCH: \"E003\",\r\n SCANNER_NATIVE_NOT_FOUND: \"E004\",\r\n SCANNER_HASH_FAILED: \"E005\",\r\n NATIVE_TRANSFORM_UNAVAILABLE: \"E006\",\r\n\r\n // E2xx — Compilation\r\n MISSING_REACT_IMPORT: \"E201\",\r\n UNSUPPORTED_PATTERN: \"E202\",\r\n TEMPLATE_PARSE_ERROR: \"E203\",\r\n COMPILE_TIMEOUT: \"E204\",\r\n\r\n // E3xx — Compatibility\r\n TAILWIND_VERSION_UNSUPPORTED: \"E301\",\r\n NODE_VERSION_UNSUPPORTED: \"E302\",\r\n\r\n // E4xx — Cache\r\n CACHE_READ_FAILED: \"E401\",\r\n CACHE_WRITE_FAILED: \"E402\",\r\n CACHE_CORRUPTED: \"E403\",\r\n\r\n // E5xx — RSC\r\n RSC_BOUNDARY_CONFLICT: \"E501\",\r\n\r\n // W1xx — Warnings\r\n DYNAMIC_CONTENT: \"W101\",\r\n INVALID_VARIANT_VALUE: \"W201\",\r\n DEPRECATED_MODE: \"W301\",\r\n} as const\r\n\r\nexport type ErrorCode = (typeof ERROR_CODES)[keyof typeof ERROR_CODES]\r\n\r\nconst ERROR_SUGGESTIONS: Record<string, string> = {\r\n E001: \"Run: npm install @tailwind-styled/native-{platform} or build from source\",\r\n E002: \"Try: npm rebuild or reinstall the package\",\r\n E003: \"Run: npm install tailwind-styled-v4@latest to sync versions\",\r\n E004: \"Run: npm install @tailwind-styled/scanner\",\r\n E006: \"Run: npm install @tailwind-styled/compiler\",\r\n E301: \"Upgrade: npm install tailwindcss@^4\",\r\n}\r\n\r\nexport function getSuggestion(code: string): string | undefined {\r\n return ERROR_SUGGESTIONS[code]\r\n}\r\n\r\nexport function formatErrorCode(code: string): string {\r\n const prefix = code.startsWith(\"E\") ? \"Error\" : code.startsWith(\"W\") ? \"Warning\" : \"Code\"\r\n return `[${prefix} ${code}]`\r\n}\r\n","/**\r\n * Tailwind CSS version detection and compatibility checks.\r\n *\r\n * tailwind-styled-v4 requires Tailwind CSS v4.x.\r\n * This module detects the installed version and provides\r\n * clear error messages for unsupported versions.\r\n */\r\n\r\nexport interface TailwindInfo {\r\n version: string\r\n major: number\r\n supported: boolean\r\n path: string | null\r\n}\r\n\r\nexport function detectTailwind(): TailwindInfo {\r\n try {\r\n const pkgPath = require.resolve(\"tailwindcss/package.json\")\r\n const { version } = require(pkgPath)\r\n const major = Number.parseInt(version.split(\".\")[0], 10)\r\n return { version, major, supported: major >= 4, path: pkgPath }\r\n } catch {\r\n return { version: \"not-installed\", major: 0, supported: false, path: null }\r\n }\r\n}\r\n\r\nexport function assertTailwindV4(): void {\r\n const info = detectTailwind()\r\n if (!info.supported) {\r\n const message = info.major === 0\r\n ? \"tailwindcss is not installed. Run: npm install tailwindcss@^4\"\r\n : `tailwind-styled-v4 requires Tailwind CSS v4.x. Found: v${info.version}. Upgrade: npm install tailwindcss@^4`\r\n\r\n if (process.env.NODE_ENV !== \"production\") {\r\n console.warn(`[tailwind-styled] ${message}`)\r\n }\r\n }\r\n}\r\n\r\nexport function getTailwindVersion(): string {\r\n return detectTailwind().version\r\n}\r\n\r\nexport function isTailwindV4(): boolean {\r\n return detectTailwind().supported\r\n}\r\n","/**\r\n * Zod schemas untuk validasi native binding responses.\r\n *\r\n * Dipakai untuk memvalidasi data yang datang dari Rust native bindings\r\n * sebelum masuk ke domain logic TypeScript.\r\n *\r\n * Pattern:\r\n * const raw = native.scanWorkspace(root)\r\n * const validated = NativeScanResultSchema.parse(raw)\r\n * // Setelah ini, gunakan `validated` (trusted typed object)\r\n */\r\nimport { z } from \"zod\"\r\n\r\n// ── Scan ─────────────────────────────────────────────────────────────────────\r\n\r\nexport const NativeScanFileSchema = z.object({\r\n file: z.string().min(1, \"file path cannot be empty\"),\r\n classes: z.array(z.string()),\r\n hash: z.string().optional(),\r\n})\r\n\r\nexport type NativeScanFile = z.infer<typeof NativeScanFileSchema>\r\n\r\nexport const NativeScanResultSchema = z.object({\r\n files: z.array(NativeScanFileSchema),\r\n totalFiles: z.number().int().nonnegative(),\r\n uniqueClasses: z.array(z.string()),\r\n})\r\n\r\nexport type NativeScanResult = z.infer<typeof NativeScanResultSchema>\r\n\r\n// ── Analyzer ──────────────────────────────────────────────────────────────────\r\n\r\nexport const NativeClassUsageSchema = z.object({\r\n name: z.string(),\r\n count: z.number().int().nonnegative(),\r\n files: z.array(z.string()).optional(),\r\n})\r\n\r\nexport type NativeClassUsage = z.infer<typeof NativeClassUsageSchema>\r\n\r\nexport const NativeAnalyzerReportSchema = z.object({\r\n root: z.string(),\r\n topClasses: z.array(NativeClassUsageSchema).optional(),\r\n safelist: z.array(z.string()).optional(),\r\n css: z.string().optional(),\r\n conflicts: z.array(z.unknown()).optional(),\r\n unusedClasses: z.array(z.string()).optional(),\r\n durationMs: z.number().nonnegative().optional(),\r\n})\r\n\r\nexport type NativeAnalyzerReport = z.infer<typeof NativeAnalyzerReportSchema>\r\n\r\n// ── Transform ─────────────────────────────────────────────────────────────────\r\n\r\nexport const NativeTransformResultSchema = z.object({\r\n code: z.string(),\r\n classes: z.array(z.string()),\r\n changed: z.boolean(),\r\n rsc: z.object({\r\n isServer: z.boolean(),\r\n needsClientDirective: z.boolean(),\r\n clientReasons: z.array(z.string()),\r\n }).optional(),\r\n})\r\n\r\nexport type NativeTransformResult = z.infer<typeof NativeTransformResultSchema>\r\n\r\n// ── CSS Compile ───────────────────────────────────────────────────────────────\r\n\r\nexport const NativeCssCompileResultSchema = z.object({\r\n css: z.string(),\r\n resolvedClasses: z.array(z.string()),\r\n unresolvedClasses: z.array(z.string()).optional(),\r\n})\r\n\r\nexport type NativeCssCompileResult = z.infer<typeof NativeCssCompileResultSchema>\r\n\r\n// ── Watch ────────────────────────────────────────────────────────────────────\r\n\r\nexport const NativeWatchEventSchema = z.object({\r\n type: z.enum([\"change\", \"unlink\", \"create\"]),\r\n path: z.string(),\r\n})\r\n\r\nexport type NativeWatchEvent = z.infer<typeof NativeWatchEventSchema>\r\n\r\nexport const NativeWatchResultSchema = z.object({\r\n status: z.enum([\"ok\", \"error\"]),\r\n handleId: z.string().optional(),\r\n error: z.string().optional(),\r\n})\r\n\r\nexport type NativeWatchResult = z.infer<typeof NativeWatchResultSchema>\r\n\r\n// ── Cache ────────────────────────────────────────────────────────────────────\r\n\r\nexport const NativeCacheEntrySchema = z.object({\r\n file: z.string(),\r\n hash: z.string(),\r\n classes: z.array(z.string()),\r\n timestamp: z.number(),\r\n size: z.number().optional(),\r\n})\r\n\r\nexport type NativeCacheEntry = z.infer<typeof NativeCacheEntrySchema>\r\n\r\nexport const NativeCacheReadResultSchema = z.object({\r\n entries: z.array(NativeCacheEntrySchema),\r\n version: z.string().optional(),\r\n})\r\n\r\nexport type NativeCacheReadResult = z.infer<typeof NativeCacheReadResultSchema>\r\n\r\n// ── Helpers ───────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Validasi native binding response dengan fallback ke nilai default.\r\n * Gunakan ini di hot path agar tidak crash saat native returns unexpected shape.\r\n *\r\n * @example\r\n * const raw = native.scanWorkspace(root)\r\n * const result = safeParseNative(NativeScanResultSchema, raw, {\r\n * files: [], totalFiles: 0, uniqueClasses: []\r\n * })\r\n */\r\nexport function safeParseNative<T>(\r\n schema: z.ZodType<T>,\r\n data: unknown,\r\n fallback: T\r\n): T {\r\n const result = schema.safeParse(data)\r\n return result.success ? result.data : fallback\r\n}\r\n\r\n/**\r\n * Parse native response — throw TwError jika gagal.\r\n * Gunakan ini di boundary entry points.\r\n */\r\nexport function parseNative<T>(schema: z.ZodType<T>, data: unknown, context: string): T {\r\n const result = schema.safeParse(data)\r\n if (!result.success) {\r\n const first = result.error.issues[0]\r\n const path = first?.path?.join(\".\") ?? \"(root)\"\r\n throw new Error(\r\n `[${context}] Native binding returned unexpected data: ${path}: ${first?.message ?? \"validation failed\"}`\r\n )\r\n }\r\n return result.data\r\n}\r\n","/**\r\n * ESM-safe runtime helpers untuk monorepo.\r\n *\r\n * Menggantikan pola fragile seperti:\r\n * - `createRequire(import.meta.url)` → gunakan `createEsmRequire()`\r\n * - `__dirname` → gunakan `getDirname(import.meta.url)`\r\n * - `__filename` → gunakan `getFilename(import.meta.url)`\r\n *\r\n * Semua helper ini bekerja di ESM dan CJS.\r\n *\r\n * @module @tailwind-styled/shared/esmHelpers\r\n */\r\n\r\nconst isBrowser = typeof window !== \"undefined\" || typeof document !== \"undefined\"\r\n\r\n// Safe check for require availability - works in both CJS and ESM\r\nlet nodeModuleRef: typeof import(\"node:module\") | null = null\r\nfunction getNodeModuleRef(): typeof import(\"node:module\") | null {\r\n if (isBrowser) return null\r\n if (nodeModuleRef !== null) return nodeModuleRef\r\n try {\r\n // Test if require actually works\r\n const test = typeof require === 'function' ? (require('node:module') as typeof import(\"node:module\")) : null\r\n nodeModuleRef = test\r\n return test\r\n } catch {\r\n nodeModuleRef = null\r\n return null\r\n }\r\n}\r\n\r\nlet _nodePath: typeof import(\"node:path\") | null = null\r\nlet _nodeUrl: typeof import(\"node:url\") | null = null\r\nlet _nodeFs: typeof import(\"node:fs\") | null = null\r\nlet _nodeCrypto: typeof import(\"node:crypto\") | null = null\r\nlet _nodeOs: typeof import(\"node:os\") | null = null\r\n\r\nfunction getNodePath(): typeof import(\"node:path\") {\r\n if (isBrowser) throw new Error(\"node:path not available in browser\")\r\n const nodeRequire = getNodeModuleRef()\r\n if (!nodeRequire) throw new Error(\"require not available\")\r\n if (!_nodePath) _nodePath = nodeRequire.createRequire(import.meta.url)(\"node:path\") as typeof import(\"node:path\")\r\n return _nodePath!\r\n}\r\nfunction getNodeUrl(): typeof import(\"node:url\") {\r\n if (isBrowser) throw new Error(\"node:url not available in browser\")\r\n const nodeRequire = getNodeModuleRef()\r\n if (!nodeRequire) throw new Error(\"require not available\")\r\n if (!_nodeUrl) _nodeUrl = nodeRequire.createRequire(import.meta.url)(\"node:url\") as typeof import(\"node:url\")\r\n return _nodeUrl!\r\n}\r\nfunction getNodeFs(): typeof import(\"node:fs\") {\r\n if (isBrowser) throw new Error(\"node:fs not available in browser\")\r\n const nodeRequire = getNodeModuleRef()\r\n if (!nodeRequire) throw new Error(\"require not available\")\r\n if (!_nodeFs) _nodeFs = nodeRequire.createRequire(import.meta.url)(\"node:fs\") as typeof import(\"node:fs\")\r\n return _nodeFs!\r\n}\r\nfunction getNodeCrypto(): typeof import(\"node:crypto\") {\r\n if (isBrowser) throw new Error(\"node:crypto not available in browser\")\r\n const nodeRequire = getNodeModuleRef()\r\n if (!nodeRequire) throw new Error(\"require not available\")\r\n if (!_nodeCrypto) _nodeCrypto = nodeRequire.createRequire(import.meta.url)(\"node:crypto\") as typeof import(\"node:crypto\")\r\n return _nodeCrypto!\r\n}\r\nfunction getNodeOs(): typeof import(\"node:os\") {\r\n if (isBrowser) throw new Error(\"node:os not available in browser\")\r\n const nodeRequire = getNodeModuleRef()\r\n if (!nodeRequire) throw new Error(\"require not available\")\r\n if (!_nodeOs) _nodeOs = nodeRequire.createRequire(import.meta.url)(\"node:os\") as typeof import(\"node:os\")\r\n return _nodeOs!\r\n}\r\n\r\n/**\r\n * Buat `require()` function yang relative terhadap sebuah ESM module.\r\n *\r\n * @example\r\n * // Ganti: createRequire(import.meta.url)(\"some-pkg\")\r\n * const req = createEsmRequire(import.meta.url)\r\n * const mod = req(\"some-pkg\")\r\n */\r\nexport function createEsmRequire(importMetaUrl: string): NodeRequire {\r\n if (isBrowser) throw new Error(\"require not available in browser\")\r\n const nodeRequire = getNodeModuleRef()\r\n if (!nodeRequire) throw new Error(\"require not available\")\r\n return nodeRequire.createRequire(importMetaUrl)\r\n}\r\n\r\n/**\r\n * Dapat `__dirname` dari `import.meta.url`.\r\n *\r\n * @example\r\n * // Ganti: const __dirname = ...\r\n * const dir = getDirname(import.meta.url)\r\n */\r\nexport function getDirname(importMetaUrl: string): string {\r\n if (isBrowser) return \"\"\r\n const nodePath = getNodePath()\r\n const nodeUrl = getNodeUrl()\r\n return nodePath.dirname(nodeUrl.fileURLToPath(importMetaUrl))\r\n}\r\n\r\n/**\r\n * Dapat `__filename` dari `import.meta.url`.\r\n */\r\nexport function getFilename(importMetaUrl: string): string {\r\n if (isBrowser) return \"\"\r\n return getNodeUrl().fileURLToPath(importMetaUrl)\r\n}\r\n\r\n/**\r\n * Resolve path dari root monorepo (bukan CWD).\r\n * Berguna untuk scripts dan tools yang dipanggil dari lokasi berbeda.\r\n *\r\n * @example\r\n * const root = resolveFromRoot(\"packages/domain/shared/src\")\r\n */\r\nexport function resolveFromRoot(...segments: string[]): string {\r\n if (isBrowser) return segments.join(\"/\")\r\n\r\n const nodePath = getNodePath()\r\n const nodeFs = getNodeFs()\r\n \r\n let dir = getDirname(import.meta.url)\r\n for (let i = 0; i < 10; i++) {\r\n const pkgPath = nodePath.join(dir, \"package.json\")\r\n try {\r\n const pkg = JSON.parse(nodeFs.readFileSync(pkgPath, \"utf-8\"))\r\n if (pkg.workspaces) {\r\n return nodePath.resolve(dir, ...segments)\r\n }\r\n } catch { /* intentionally silent */ }\r\n dir = nodePath.dirname(dir)\r\n }\r\n return nodePath.resolve(process.cwd(), ...segments)\r\n}\r\n\r\n/**\r\n * Require sebuah module dengan fallback ke null jika tidak tersedia.\r\n * Berguna untuk optional dependencies.\r\n *\r\n * @example\r\n * const oxc = tryRequire(\"oxc-parser\", import.meta.url)\r\n * if (!oxc) console.warn(\"oxc-parser not installed\")\r\n */\r\nexport function tryRequire<T = unknown>(\r\n moduleName: string,\r\n importMetaUrl: string\r\n): T | null {\r\n if (isBrowser) return null\r\n try {\r\n return createEsmRequire(importMetaUrl)(moduleName) as T\r\n } catch { /* intentionally silent — optional dep */ }\r\n return null\r\n}\r\n\r\n/**\r\n * Resolve .node binary path yang cross-platform dan ESM-safe.\r\n * Menggantikan pola `path.resolve(__dirname, \"../native.node\")`.\r\n */\r\nexport function resolveNativeNodePath(\r\n importMetaUrl: string,\r\n ...relativeSegments: string[]\r\n): string {\r\n if (isBrowser) return relativeSegments.join(\"/\")\r\n return getNodePath().resolve(getDirname(importMetaUrl), ...relativeSegments)\r\n}","/**\r\n * Build performance telemetry untuk tailwind-styled-v4.\r\n * QA #14: Visibility ke build performance — scan speed, cache hit rate, trends.\r\n *\r\n * Design: zero-dependency, ring-buffer based, opt-in via TWS_TELEMETRY=1.\r\n */\r\n\r\nexport interface BuildPhases {\r\n scan: number\r\n compile: number\r\n engine: number\r\n output: number\r\n}\r\n\r\nexport interface BuildTelemetry {\r\n timestamp: number\r\n durationMs: number\r\n filesScanned: number\r\n filesCached: number\r\n classesExtracted: number\r\n nativeVersion?: string\r\n phases: BuildPhases\r\n cacheHitRate: number\r\n mode?: string\r\n}\r\n\r\nexport interface TelemetrySummary {\r\n totalBuilds: number\r\n avgDurationMs: number\r\n p95DurationMs: number\r\n avgCacheHitRate: number\r\n avgFilesScanned: number\r\n avgClassesExtracted: number\r\n phaseAvgs: BuildPhases\r\n slowestBuildMs: number\r\n fastestBuildMs: number\r\n}\r\n\r\nconst RING_BUFFER_SIZE = 100\r\n\r\nexport class TelemetryCollector {\r\n private data: BuildTelemetry[] = []\r\n private enabled: boolean\r\n\r\n constructor(enabled?: boolean) {\r\n this.enabled =\r\n enabled ??\r\n (process.env.TWS_TELEMETRY === \"1\" || process.env.TWS_TELEMETRY === \"true\")\r\n }\r\n\r\n record(build: BuildTelemetry): void {\r\n if (!this.enabled) return\r\n if (this.data.length >= RING_BUFFER_SIZE) {\r\n this.data.shift() // ring buffer — hapus entri tertua\r\n }\r\n this.data.push(build)\r\n }\r\n\r\n snapshot(): BuildTelemetry[] {\r\n return [...this.data]\r\n }\r\n\r\n summary(): TelemetrySummary | null {\r\n if (this.data.length === 0) return null\r\n\r\n const durations = this.data.map(d => d.durationMs).sort((a, b) => a - b)\r\n const p95Idx = Math.floor(durations.length * 0.95)\r\n\r\n const avg = (arr: number[]) => arr.reduce((a, b) => a + b, 0) / arr.length\r\n\r\n return {\r\n totalBuilds: this.data.length,\r\n avgDurationMs: avg(durations),\r\n p95DurationMs: durations[p95Idx] ?? durations[durations.length - 1] ?? 0,\r\n avgCacheHitRate: avg(this.data.map(d => d.cacheHitRate)),\r\n avgFilesScanned: avg(this.data.map(d => d.filesScanned)),\r\n avgClassesExtracted: avg(this.data.map(d => d.classesExtracted)),\r\n phaseAvgs: {\r\n scan: avg(this.data.map(d => d.phases.scan)),\r\n compile: avg(this.data.map(d => d.phases.compile)),\r\n engine: avg(this.data.map(d => d.phases.engine)),\r\n output: avg(this.data.map(d => d.phases.output)),\r\n },\r\n slowestBuildMs: durations[durations.length - 1] ?? 0,\r\n fastestBuildMs: durations[0] ?? 0,\r\n }\r\n }\r\n\r\n reset(): void {\r\n this.data = []\r\n }\r\n\r\n /** Format ringkas untuk CLI output */\r\n formatCli(): string {\r\n const s = this.summary()\r\n if (!s) return \"[telemetry] no data\"\r\n return [\r\n `[telemetry] ${s.totalBuilds} builds`,\r\n `avg ${s.avgDurationMs.toFixed(0)}ms`,\r\n `p95 ${s.p95DurationMs.toFixed(0)}ms`,\r\n `cache hit ${(s.avgCacheHitRate * 100).toFixed(0)}%`,\r\n `${s.avgFilesScanned.toFixed(0)} files`,\r\n ].join(\" · \")\r\n }\r\n\r\n /** Export sebagai JSON untuk dashboard/prometheus */\r\n toJSON(): object {\r\n return {\r\n summary: this.summary(),\r\n history: this.data.slice(-20), // last 20 builds\r\n }\r\n }\r\n}\r\n\r\n/** Global singleton telemetry collector */\r\nlet _globalCollector: TelemetryCollector | null = null\r\n\r\nexport function getGlobalTelemetry(): TelemetryCollector {\r\n if (!_globalCollector) {\r\n _globalCollector = new TelemetryCollector()\r\n }\r\n return _globalCollector\r\n}\r\n\r\nexport function resetGlobalTelemetry(): void {\r\n _globalCollector = null\r\n}\r\n\r\n/** Helper untuk record build dengan timing otomatis */\r\nexport function createBuildTimer() {\r\n const start = Date.now()\r\n const phases: Partial<BuildPhases> = {}\r\n let phaseStart = start\r\n\r\n return {\r\n phase(name: keyof BuildPhases): void {\r\n const now = Date.now()\r\n phases[name] = now - phaseStart\r\n phaseStart = now\r\n },\r\n finish(opts: Omit<BuildTelemetry, \"timestamp\" | \"durationMs\" | \"phases\" | \"cacheHitRate\"> & {\r\n cacheHitRate?: number\r\n }): BuildTelemetry {\r\n const now = Date.now()\r\n const record: BuildTelemetry = {\r\n timestamp: start,\r\n durationMs: now - start,\r\n phases: {\r\n scan: phases.scan ?? 0,\r\n compile: phases.compile ?? 0,\r\n engine: phases.engine ?? 0,\r\n output: phases.output ?? now - start,\r\n },\r\n cacheHitRate: opts.cacheHitRate ?? 0,\r\n ...opts,\r\n }\r\n getGlobalTelemetry().record(record)\r\n return record\r\n },\r\n }\r\n}\r\n","/**\r\n * Zod schemas untuk JSON, cache, manifest, dan config reads.\r\n * PLAN.md: \"JSON, cache, manifest, and config reads should be parsed into typed schema-backed values\"\r\n *\r\n * Pattern: validate at the I/O boundary, pass typed values inward.\r\n */\r\nimport { z } from \"zod\"\r\n\r\n// ── Scan Cache ────────────────────────────────────────────────────────────────\r\n\r\n/** Schema untuk .tailwind-styled/scan-cache.json */\r\nexport const ScanCacheClassEntrySchema = z.object({\r\n name: z.string().min(1),\r\n usedIn: z.array(z.string()),\r\n risk: z.enum([\"low\", \"medium\", \"high\"]).default(\"low\"),\r\n bundleContribution: z.number().nonnegative().default(0),\r\n variants: z.array(z.string()).default([]),\r\n})\r\nexport type ScanCacheClassEntry = z.infer<typeof ScanCacheClassEntrySchema>\r\n\r\nexport const ScanCacheSchema = z.object({\r\n version: z.string().default(\"1\"),\r\n generatedAt: z.string(),\r\n root: z.string(),\r\n classNames: z.array(ScanCacheClassEntrySchema),\r\n totalFiles: z.number().int().nonnegative(),\r\n uniqueCount: z.number().int().nonnegative(),\r\n})\r\nexport type ScanCache = z.infer<typeof ScanCacheSchema>\r\n\r\n// ── Tailwind Config ───────────────────────────────────────────────────────────\r\n\r\nexport const TailwindContentItemSchema = z.union([\r\n z.string(),\r\n z.object({\r\n raw: z.string(),\r\n extension: z.string().optional(),\r\n }),\r\n z.object({\r\n files: z.array(z.string()),\r\n transform: z.record(z.string(), z.unknown()).optional(),\r\n }),\r\n])\r\n\r\nexport const TailwindConfigSchema = z.object({\r\n content: z.array(TailwindContentItemSchema).optional(),\r\n theme: z.record(z.string(), z.unknown()).optional(),\r\n plugins: z.array(z.unknown()).optional(),\r\n darkMode: z.union([z.literal(\"class\"), z.literal(\"media\"), z.literal(false)]).optional(),\r\n prefix: z.string().optional(),\r\n safelist: z.array(z.union([z.string(), z.object({ pattern: z.instanceof(RegExp) })])).optional(),\r\n blocklist: z.array(z.string()).optional(),\r\n}).passthrough() // Allow additional Tailwind v4 config keys\r\nexport type TailwindConfig = z.infer<typeof TailwindConfigSchema>\r\n\r\n// ── Plugin Registry Entry ─────────────────────────────────────────────────────\r\n\r\nexport const RegistryPluginEntrySchema = z.object({\r\n name: z.string().min(1),\r\n description: z.string(),\r\n version: z.string(),\r\n tags: z.array(z.string()).default([]),\r\n official: z.boolean().default(false),\r\n docs: z.string().url().optional(),\r\n install: z.string().optional(),\r\n integrity: z.string().optional(),\r\n})\r\nexport type RegistryPluginEntry = z.infer<typeof RegistryPluginEntrySchema>\r\n\r\nexport const RegistryFileSchema = z.object({\r\n version: z.string(),\r\n official: z.array(RegistryPluginEntrySchema).default([]),\r\n community: z.array(RegistryPluginEntrySchema).default([]),\r\n})\r\nexport type RegistryFile = z.infer<typeof RegistryFileSchema>\r\n\r\n// ── Package.json (minimal) ────────────────────────────────────────────────────\r\n\r\nexport const PackageJsonSchema = z.object({\r\n name: z.string(),\r\n version: z.string(),\r\n scripts: z.record(z.string(), z.string()).optional(),\r\n dependencies: z.record(z.string(), z.string()).optional(),\r\n devDependencies: z.record(z.string(), z.string()).optional(),\r\n peerDependencies: z.record(z.string(), z.string()).optional(),\r\n main: z.string().optional(),\r\n module: z.string().optional(),\r\n exports: z.unknown().optional(),\r\n type: z.enum([\"module\", \"commonjs\"]).optional(),\r\n}).passthrough()\r\nexport type PackageJson = z.infer<typeof PackageJsonSchema>\r\n\r\n// ── Helpers ────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Parse JSON string dengan schema validation.\r\n * Melempar error yang human-readable jika gagal.\r\n *\r\n * @example\r\n * const cache = parseJsonWithSchema(\r\n * fs.readFileSync(\".tailwind-styled/scan-cache.json\", \"utf-8\"),\r\n * ScanCacheSchema,\r\n * \"scan-cache.json\"\r\n * )\r\n */\r\nexport function parseJsonWithSchema<T>(\r\n jsonString: string,\r\n schema: z.ZodType<T>,\r\n sourceName: string\r\n): T {\r\n let parsed: unknown\r\n try {\r\n parsed = JSON.parse(jsonString)\r\n } catch (err) {\r\n throw new Error(\r\n `[${sourceName}] Invalid JSON: ${err instanceof Error ? err.message : String(err)}`\r\n )\r\n }\r\n\r\n const result = schema.safeParse(parsed)\r\n if (!result.success) {\r\n const issues = result.error.issues\r\n .map((e) => ` ${e.path.join(\".\")}: ${e.message}`)\r\n .join(\"\\n\")\r\n throw new Error(`[${sourceName}] Schema validation failed:\\n${issues}`)\r\n }\r\n\r\n return result.data\r\n}\r\n\r\n/**\r\n * Parse JSON file dengan schema validation.\r\n *\r\n * @example\r\n * const pkg = parseJsonFileWithSchema(\"package.json\", PackageJsonSchema)\r\n */\r\nexport function parseJsonFileWithSchema<T>(\r\n filePath: string,\r\n schema: z.ZodType<T>\r\n): T {\r\n const { readFileSync } = require(\"node:fs\") as typeof import(\"node:fs\")\r\n const { basename } = require(\"node:path\") as typeof import(\"node:path\")\r\n\r\n let content: string\r\n try {\r\n content = readFileSync(filePath, \"utf-8\")\r\n } catch (err) {\r\n throw new Error(\r\n `[${basename(filePath)}] Could not read file: ${err instanceof Error ? err.message : String(err)}`\r\n )\r\n }\r\n\r\n return parseJsonWithSchema(content, schema, basename(filePath))\r\n}\r\n","/**\r\n * Worker/bootstrap path resolution untuk artifact release safety.\r\n * Dari monorepo checklist: \"Perkuat worker/bootstrap path agar artifact release aman\"\r\n *\r\n * Masalah: path ke worker/loader script bisa berbeda antara:\r\n * - Development (src/*.ts)\r\n * - Built dist (dist/*.js / dist/*.cjs)\r\n * - Packed npm artifact (dist/ saja, tanpa src/)\r\n *\r\n * Solusi: resolve path secara hierarchical dengan fallback yang eksplisit.\r\n */\r\n\r\nconst isBrowser = typeof window !== \"undefined\" || typeof document !== \"undefined\"\r\n\r\nconst NODE_URL = typeof window === \"undefined\" || typeof document === \"undefined\" ? \"node:url\" : null\r\nconst NODE_FS = typeof window === \"undefined\" || typeof document === \"undefined\" ? \"node:fs\" : null\r\nconst NODE_PATH = typeof window === \"undefined\" || typeof document === \"undefined\" ? \"node:path\" : null\r\n\r\nfunction getDirnameFromUrl(importMetaUrl: string): string {\r\n if (!importMetaUrl) return \"\"\r\n if (isBrowser) return \"\"\r\n\r\n try {\r\n const nodeUrl = require(NODE_URL!)\r\n const nodePath = require(NODE_PATH!)\r\n // fileURLToPath returns the file path — we need the directory\r\n return nodePath.dirname(nodeUrl.fileURLToPath(importMetaUrl))\r\n } catch {\r\n if (importMetaUrl.startsWith(\"file://\")) {\r\n const filePath = importMetaUrl.slice(7)\r\n // strip the filename to get the directory\r\n const lastSlash = filePath.lastIndexOf(\"/\")\r\n return lastSlash >= 0 ? filePath.slice(0, lastSlash) : filePath\r\n }\r\n return \"\"\r\n }\r\n}\r\n\r\nfunction resolvePath(...segments: string[]): string {\r\n if (isBrowser) return segments.join(\"/\").replace(/\\/+/g, \"/\")\r\n try {\r\n const nodePath = require(NODE_PATH!)\r\n return nodePath.resolve(...segments)\r\n } catch {\r\n return segments.join(\"/\").replace(/\\/+/g, \"/\")\r\n }\r\n}\r\n\r\nfunction existsSync(path: string): boolean {\r\n if (isBrowser) return false\r\n try {\r\n const nodeFs = require(NODE_FS!)\r\n return nodeFs.existsSync(path)\r\n } catch {\r\n return false\r\n }\r\n}\r\n\r\nexport interface WorkerPathOptions {\r\n /** Nama file worker tanpa extension */\r\n basename: string\r\n /** Import meta URL dari caller module */\r\n importMetaUrl: string\r\n /** Extensions yang dicoba secara urutan (default: [\".cjs\", \".js\", \".mjs\"]) */\r\n extensions?: string[]\r\n /** Sub-directories relatif dari runtimeDir yang dicoba */\r\n subdirs?: string[]\r\n /** Throw jika tidak ditemukan (default: true) */\r\n required?: boolean\r\n}\r\n\r\nexport interface WorkerPathResult {\r\n /** Absolute path ke worker file */\r\n path: string\r\n /** Extension yang ditemukan */\r\n extension: string\r\n /** Apakah ini dari CJS atau ESM artifact */\r\n format: \"cjs\" | \"esm\"\r\n}\r\n\r\n/**\r\n * Resolve worker/loader script path yang aman untuk release artifacts.\r\n *\r\n * Prioritas:\r\n * 1. CJS (.cjs) — untuk Node.js workers yang butuh require()\r\n * 2. JS (.js) — bundled output\r\n * 3. MJS (.mjs) — explicit ESM\r\n *\r\n * @example\r\n * const workerPath = resolveWorkerPath({\r\n * basename: \"scanner-worker\",\r\n * importMetaUrl: import.meta.url,\r\n * })\r\n * // → \"/path/to/dist/scanner-worker.cjs\"\r\n */\r\nexport function resolveWorkerPath(opts: WorkerPathOptions): WorkerPathResult {\r\n if (isBrowser) {\r\n throw new Error(\"Worker resolution not available in browser\")\r\n }\r\n\r\n const {\r\n basename,\r\n importMetaUrl,\r\n extensions = [\".cjs\", \".js\", \".mjs\"],\r\n subdirs = [\".\", \"workers\", \"lib\"],\r\n required = true,\r\n } = opts\r\n\r\n const runtimeDir = getDirnameFromUrl(importMetaUrl)\r\n\r\n // Try each subdir + extension combination\r\n for (const subdir of subdirs) {\r\n for (const ext of extensions) {\r\n const candidate = resolvePath(runtimeDir, subdir, `${basename}${ext}`)\r\n if (existsSync(candidate)) {\r\n return {\r\n path: candidate,\r\n extension: ext,\r\n format: ext === \".cjs\" ? \"cjs\" : \"esm\",\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (required) {\r\n const tried = subdirs.flatMap(d =>\r\n extensions.map(e => resolvePath(runtimeDir, d, `${basename}${e}`))\r\n )\r\n throw new Error(\r\n `[worker-resolver] Could not find worker script \"${basename}\".\\n` +\r\n `Tried:\\n${tried.map(p => ` - ${p}`).join(\"\\n\")}\\n` +\r\n `Ensure the package is built: npm run build`\r\n )\r\n }\r\n\r\n return { path: \"\", extension: \"\", format: \"cjs\" }\r\n}\r\n\r\n/**\r\n * Resolve loader path (untuk webpack/rspack/vite loaders).\r\n * Same as resolveWorkerPath but dengan nama yang lebih eksplisit.\r\n */\r\nexport function resolveLoaderPath(\r\n loaderBasename: string,\r\n importMetaUrl: string\r\n): string {\r\n return resolveWorkerPath({\r\n basename: loaderBasename,\r\n importMetaUrl,\r\n extensions: [\".cjs\", \".js\", \".mjs\"],\r\n subdirs: [\".\", \"loaders\", \"lib\"],\r\n }).path\r\n}","/**\r\n * Codegen helpers untuk tailwind-styled-v4.\r\n * Dari monorepo checklist: \"Tambahkan helper codegen bila memang relevan\"\r\n *\r\n * Berguna untuk:\r\n * - Generate component boilerplate dari config\r\n * - Generate type definitions dari variant schemas\r\n * - Generate Storybook stories dari cv() configs\r\n * - Generate migration codemods\r\n *\r\n * Design: tidak ada coupling ke compiler — hanya string manipulation.\r\n */\r\n\r\nexport interface ComponentCodegenOptions {\r\n /** Nama komponen (PascalCase) */\r\n name: string\r\n /** HTML tag */\r\n tag?: string\r\n /** Base classes */\r\n base?: string\r\n /** Variant definitions */\r\n variants?: Record<string, Record<string, string>>\r\n /** Default variants */\r\n defaultVariants?: Record<string, string>\r\n /** Compound variants */\r\n compoundVariants?: Array<{ class: string; [key: string]: string }>\r\n /** Framework target */\r\n framework?: \"react\" | \"vue\" | \"svelte\" | \"vanilla\"\r\n /** Include TypeScript types */\r\n withTypes?: boolean\r\n /** Include Storybook story */\r\n withStory?: boolean\r\n}\r\n\r\n/**\r\n * Generate cv() component boilerplate.\r\n *\r\n * @example\r\n * const code = generateComponentCode({\r\n * name: \"Button\",\r\n * tag: \"button\",\r\n * base: \"px-4 py-2 rounded font-medium\",\r\n * variants: {\r\n * intent: { primary: \"bg-blue-500 text-white\", danger: \"bg-red-500 text-white\" },\r\n * size: { sm: \"h-8 text-sm\", lg: \"h-12 text-lg\" },\r\n * },\r\n * defaultVariants: { intent: \"primary\", size: \"sm\" },\r\n * })\r\n */\r\nexport function generateComponentCode(opts: ComponentCodegenOptions): string {\r\n const {\r\n name,\r\n tag = \"div\",\r\n base = \"\",\r\n variants = {},\r\n defaultVariants = {},\r\n compoundVariants = [],\r\n framework = \"react\",\r\n withTypes = true,\r\n } = opts\r\n\r\n const variantKeys = Object.keys(variants)\r\n const lines: string[] = []\r\n\r\n // Imports\r\n if (framework === \"react\") {\r\n lines.push(`import { tw } from \"tailwind-styled-v4\"`)\r\n if (withTypes && variantKeys.length > 0) {\r\n lines.push(`import type { InferVariantProps } from \"tailwind-styled-v4\"`)\r\n }\r\n } else if (framework === \"vue\") {\r\n lines.push(`import { tw } from \"@tailwind-styled/vue\"`)\r\n } else if (framework === \"svelte\") {\r\n lines.push(`import { tw } from \"@tailwind-styled/svelte\"`)\r\n }\r\n\r\n lines.push(\"\")\r\n\r\n // Config object\r\n const configLines: string[] = [`export const ${name} = tw.${tag}({`]\r\n if (base) configLines.push(` base: \"${base}\",`)\r\n\r\n if (variantKeys.length > 0) {\r\n configLines.push(` variants: {`)\r\n for (const [key, values] of Object.entries(variants)) {\r\n configLines.push(` ${key}: {`)\r\n for (const [val, cls] of Object.entries(values)) {\r\n configLines.push(` ${val}: \"${cls}\",`)\r\n }\r\n configLines.push(` },`)\r\n }\r\n configLines.push(` },`)\r\n }\r\n\r\n if (compoundVariants.length > 0) {\r\n configLines.push(` compoundVariants: [`)\r\n for (const cv of compoundVariants) {\r\n const { class: cls, ...conditions } = cv\r\n const condStr = Object.entries(conditions)\r\n .map(([k, v]) => `${k}: \"${v}\"`)\r\n .join(\", \")\r\n configLines.push(` { ${condStr}, class: \"${cls}\" },`)\r\n }\r\n configLines.push(` ],`)\r\n }\r\n\r\n if (Object.keys(defaultVariants).length > 0) {\r\n configLines.push(` defaultVariants: {`)\r\n for (const [k, v] of Object.entries(defaultVariants)) {\r\n configLines.push(` ${k}: \"${v}\",`)\r\n }\r\n configLines.push(` },`)\r\n }\r\n\r\n configLines.push(`})`)\r\n lines.push(...configLines)\r\n\r\n // TypeScript type alias\r\n if (withTypes && variantKeys.length > 0 && framework === \"react\") {\r\n lines.push(\"\")\r\n lines.push(`export type ${name}Props = InferVariantProps<typeof ${name}> & {`)\r\n lines.push(` children?: React.ReactNode`)\r\n lines.push(` className?: string`)\r\n lines.push(`}`)\r\n }\r\n\r\n return lines.join(\"\\n\")\r\n}\r\n\r\n/**\r\n * Generate Storybook stories dari component config.\r\n *\r\n * @example\r\n * const stories = generateStorybookStory({ name: \"Button\", ... })\r\n */\r\nexport function generateStorybookStory(opts: ComponentCodegenOptions): string {\r\n const { name, variants = {}, defaultVariants = {} } = opts\r\n const lines: string[] = []\r\n\r\n lines.push(`import type { Meta, StoryObj } from \"@storybook/react\"`)\r\n lines.push(`import { ${name} } from \"./${name}\"`)\r\n lines.push(`import { generateArgTypes, generateDefaultArgs } from \"tailwind-styled-v4\"`)\r\n lines.push(``)\r\n lines.push(`const config = {`)\r\n if (Object.keys(variants).length > 0) {\r\n lines.push(` variants: ${JSON.stringify(variants, null, 2).replace(/^/gm, \" \")},`)\r\n }\r\n if (Object.keys(defaultVariants).length > 0) {\r\n lines.push(` defaultVariants: ${JSON.stringify(defaultVariants)},`)\r\n }\r\n lines.push(`}`)\r\n lines.push(``)\r\n lines.push(`const meta: Meta<typeof ${name}> = {`)\r\n lines.push(` title: \"Components/${name}\",`)\r\n lines.push(` component: ${name},`)\r\n lines.push(` argTypes: generateArgTypes(config),`)\r\n lines.push(` args: generateDefaultArgs(config),`)\r\n lines.push(`}`)\r\n lines.push(``)\r\n lines.push(`export default meta`)\r\n lines.push(`type Story = StoryObj<typeof ${name}>`)\r\n lines.push(``)\r\n lines.push(`export const Default: Story = {}`)\r\n\r\n // Generate one story per variant combo (up to 6)\r\n const variantEntries = Object.entries(variants)\r\n if (variantEntries.length > 0) {\r\n const [firstKey, firstValues] = variantEntries[0]\r\n const valueKeys = Object.keys(firstValues).slice(0, 4)\r\n for (const val of valueKeys) {\r\n const storyName = `${firstKey.charAt(0).toUpperCase()}${firstKey.slice(1)}${val.charAt(0).toUpperCase()}${val.slice(1)}`\r\n lines.push(``)\r\n lines.push(`export const ${storyName}: Story = {`)\r\n lines.push(` args: { ${firstKey}: \"${val}\" },`)\r\n lines.push(`}`)\r\n }\r\n }\r\n\r\n return lines.join(\"\\n\")\r\n}\r\n\r\n/**\r\n * Generate migration codemod untuk class renames.\r\n * Berguna saat ada class yang deprecated atau diganti nama.\r\n *\r\n * @example\r\n * const codemod = generateClassRenameCodemod({\r\n * \"btn-primary\": \"bg-blue-500 text-white\",\r\n * \"btn-danger\": \"bg-red-500 text-white\",\r\n * })\r\n */\r\nexport function generateClassRenameCodemod(\r\n renames: Record<string, string>,\r\n opts: { format?: \"jscodeshift\" | \"regex\"; filename?: string } = {}\r\n): string {\r\n const { format = \"regex\", filename = \"rename-classes.mjs\" } = opts\r\n const lines: string[] = []\r\n\r\n if (format === \"regex\") {\r\n lines.push(`#!/usr/bin/env node`)\r\n lines.push(`/**`)\r\n lines.push(` * Auto-generated class rename codemod`)\r\n lines.push(` * Usage: node ${filename} ./src`)\r\n lines.push(` */`)\r\n lines.push(`import fs from \"node:fs\"`)\r\n lines.push(`import path from \"node:path\"`)\r\n lines.push(`import { execSync } from \"node:child_process\"`)\r\n lines.push(``)\r\n lines.push(`const RENAMES = {`)\r\n for (const [from, to] of Object.entries(renames)) {\r\n lines.push(` \"${from}\": \"${to}\",`)\r\n }\r\n lines.push(`}`)\r\n lines.push(``)\r\n lines.push(`const dir = process.argv[2] ?? \".\"`)\r\n lines.push(`const files = execSync(\\`find \\${dir} -name \"*.tsx\" -o -name \"*.ts\" -o -name \"*.jsx\"\\`, { encoding: \"utf-8\" }).split(\"\\\\n\").filter(Boolean)`)\r\n lines.push(``)\r\n lines.push(`let total = 0`)\r\n lines.push(`for (const file of files) {`)\r\n lines.push(` let content = fs.readFileSync(file, \"utf-8\")`)\r\n lines.push(` let changed = false`)\r\n lines.push(` for (const [from, to] of Object.entries(RENAMES)) {`)\r\n lines.push(' const re = new RegExp(`\\\\\\\\b${from.replace(/[.*+?^${}()|[\\\\\\\\]\\\\\\\\]/g, \"\\\\\\\\$&\")}\\\\\\\\b`, \"g\")')\r\n lines.push(` if (re.test(content)) { content = content.replace(re, to); changed = true; total++ }`)\r\n lines.push(` }`)\r\n lines.push(` if (changed) fs.writeFileSync(file, content)`)\r\n lines.push(`}`)\r\n lines.push(`console.log(\\`Renamed \\${total} occurrences in \\${files.length} files\\`)`)\r\n }\r\n\r\n return lines.join(\"\\n\")\r\n}\r\n\r\n/**\r\n * Generate index barrel file untuk sebuah directory.\r\n *\r\n * @example\r\n * const barrel = generateBarrelFile([\"Button\", \"Card\", \"Input\"], \"src/components\")\r\n */\r\nexport function generateBarrelFile(\r\n exports: string[],\r\n dir: string,\r\n opts: { includeTypes?: boolean } = {}\r\n): string {\r\n const { includeTypes = true } = opts\r\n const lines: string[] = []\r\n lines.push(`// Auto-generated barrel file for ${dir}`)\r\n lines.push(`// Run: npx tsx scripts/generate-barrel.ts to regenerate`)\r\n lines.push(``)\r\n for (const name of exports) {\r\n lines.push(`export { default as ${name}, type ${name}Props } from \"./${name}\"`)\r\n if (includeTypes) {\r\n lines.push(`export type * from \"./${name}\"`)\r\n }\r\n }\r\n return lines.join(\"\\n\")\r\n}\r\n","/**\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}","/**\r\n * Shared observability contract lintas CLI, dashboard, dan devtools.\r\n * Dari execution-log: \"Stabilkan shared observability contract\"\r\n *\r\n * Semua surface inspection (CLI why, DevTools trace, dashboard /inspect)\r\n * menggunakan type contract yang sama di sini.\r\n */\r\n\r\n// ── Class Inspection Surface ─────────────────────────────────────────────────\r\n\r\nexport interface ClassProperty {\r\n property: string\r\n value: string\r\n}\r\n\r\nexport interface ClassUsageLocation {\r\n file: string\r\n line: number\r\n column: number\r\n usage: \"direct\" | \"variant\" | \"component\"\r\n}\r\n\r\n/** Unified inspection result - dipakai oleh CLI, DevTools, Dashboard */\r\nexport interface ClassInspection {\r\n className: string\r\n /** CSS properties yang di-set oleh class ini */\r\n properties: ClassProperty[]\r\n /** Konflik dengan class lain (property conflicts) */\r\n conflicts: string[]\r\n /** Files yang menggunakan class ini */\r\n usedIn: ClassUsageLocation[]\r\n /** Risk level untuk removal */\r\n risk: \"low\" | \"medium\" | \"high\"\r\n /** Estimated bundle contribution dalam bytes */\r\n bundleBytes: number\r\n /** Raw CSS string */\r\n css: string\r\n /** Variant chain (hover:, md:, dll) */\r\n variants: string[]\r\n /** Timestamp */\r\n inspectedAt: number\r\n}\r\n\r\n// ── Build Trace Surface ───────────────────────────────────────────────────────\r\n\r\nexport interface BuildPhaseTrace {\r\n phase: \"scan\" | \"compile\" | \"engine\" | \"output\"\r\n durationMs: number\r\n filesProcessed?: number\r\n classesFound?: number\r\n}\r\n\r\nexport interface BuildTrace {\r\n buildId: string\r\n totalDurationMs: number\r\n phases: BuildPhaseTrace[]\r\n classCount: number\r\n fileCount: number\r\n cacheHitRate: number\r\n mode: string\r\n timestamp: number\r\n}\r\n\r\n// ── Dashboard Metrics Surface ─────────────────────────────────────────────────\r\n\r\nexport interface DashboardMetrics {\r\n buildMs: number\r\n scanMs: number\r\n analyzeMs: number\r\n compileMs: number\r\n classCount: number\r\n fileCount: number\r\n mode: string\r\n cacheHitRate?: number\r\n nativeVersion?: string\r\n}\r\n\r\nexport interface DashboardSummary {\r\n totalBuilds: number\r\n avgBuildMs: number\r\n p95BuildMs: number\r\n avgCacheHitRate: number\r\n lastBuild: DashboardMetrics | null\r\n}\r\n\r\n// ── Observability Client ──────────────────────────────────────────────────────\r\n\r\nexport interface ObservabilityClient {\r\n /** Fetch class inspection dari dashboard */\r\n inspectClass(className: string): Promise<ClassInspection | null>\r\n /** Fetch current metrics */\r\n getMetrics(): Promise<DashboardMetrics | null>\r\n /** Fetch summary */\r\n getSummary(): Promise<DashboardSummary | null>\r\n /** Fetch build history */\r\n getHistory(): Promise<BuildTrace[]>\r\n}\r\n\r\n/** Buat observability client yang connect ke dashboard server */\r\nexport function createObservabilityClient(\r\n opts: { baseUrl?: string; timeoutMs?: number } = {}\r\n): ObservabilityClient {\r\n const { baseUrl = \"http://localhost:7421\", timeoutMs = 3000 } = opts\r\n\r\n async function fetchJson<T>(path: string): Promise<T | null> {\r\n try {\r\n const res = await fetch(`${baseUrl}${path}`, {\r\n signal: AbortSignal.timeout(timeoutMs),\r\n })\r\n if (!res.ok) return null\r\n return await res.json() as T\r\n } catch {\r\n return null\r\n }\r\n }\r\n\r\n return {\r\n async inspectClass(className: string): Promise<ClassInspection | null> {\r\n const data = await fetchJson<ClassInspection>(`/inspect?class=${encodeURIComponent(className)}`)\r\n if (!data) return null\r\n return { ...data, inspectedAt: Date.now() }\r\n },\r\n\r\n async getMetrics(): Promise<DashboardMetrics | null> {\r\n return fetchJson<DashboardMetrics>(\"/metrics\")\r\n },\r\n\r\n async getSummary(): Promise<DashboardSummary | null> {\r\n return fetchJson<DashboardSummary>(\"/summary\")\r\n },\r\n\r\n async getHistory(): Promise<BuildTrace[]> {\r\n const data = await fetchJson<BuildTrace[]>(\"/history\")\r\n return Array.isArray(data) ? data : []\r\n },\r\n }\r\n}\r\n","/**\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 // ── Cache Management (napi_bridge_cache.rs) ────────────────────────────────\r\n configureCacheBackend?: (configJson: string) => string\r\n getRecommendedCacheConfig?: (workloadType: string) => string\r\n clearAllCachesNapi?: () => void\r\n clearResolveCacheNapi?: () => void\r\n clearCompileCacheNapi?: () => void\r\n clearCssGenCacheNapi?: () => void\r\n getResolverPoolStats?: () => string\r\n clearResolverPool?: () => string\r\n getCacheOptimizationHints?: () => string\r\n estimateStreamingBatchSize?: (targetMemoryMb: number) => string\r\n\r\n // ── Parsing (napi_bridge_parsing.rs) ──────────────────────────────────────\r\n parseClass?: (input: string) => string\r\n compileClassNapi?: (input: string) => string\r\n getParseStats?: () => string\r\n clearParseCacheNapi?: () => void\r\n\r\n // ── Theme Parsing (napi_bridge_theme_parsing.rs) ───────────────────────────\r\n parseColorsNapi?: (colorsJson: string) => string | Record<string, string>\r\n parseSpacingNapi?: (spacingJson: string) => string | Record<string, string>\r\n parseTransformNapi?: (transformJson: string) => string | Record<string, string>\r\n normalizeColorNapi?: (color: string, opacity: string) => string\r\n sanitizeColorNapi?: (color: string) => string\r\n splitRgbaNapi?: (color: string) => string | { r: number; g: number; b: number; a: number }\r\n validateColorsNapi?: (colorsJson: string) => boolean\r\n validateBreakpointsNapi?: (breakpointsJson: string) => boolean\r\n runHealthCheck?: () => void\r\n\r\n // ── Watch (napi_bridge_watch.rs) ───────────────────────────────────────────\r\n watchFiles?: (rootDir: string, optionsJson?: string | null) => string\r\n stopWatching?: (handleId: number) => string\r\n getWatchEvents?: (handleId: number, maxEvents?: number | null) => string\r\n getWatchPerformance?: () => string\r\n clearWatchStats?: () => string\r\n getActiveWatches?: () => number\r\n setWatchMetrics?: (metricName: string, value: string) => string\r\n setWatchAggregation?: (aggregationType: string) => string\r\n\r\n // ── Week 6 Optimization (week6_api.rs) ────────────────────────────────────\r\n getOptimizationRecommendations?: (hitRate: number, memoryMb: number, classCount: number) => string\r\n estimateOptimalBatchSize?: (totalClasses: number, memoryAvailableMb: number) => number\r\n predictMemoryUsage?: (uniqueClasses: number, avgClassSizeBytes: number) => number\r\n recommendCachingStrategy?: (isSsr: boolean, memoryConstraintMb: number) => string\r\n benchmarkStreamingVsBuffered?: (classCount: number) => string\r\n getWeek6OptimizationStatus?: () => string\r\n\r\n // ── Scan Cache (scan_cache_api.rs) ────────────────────────────────────────\r\n scanCacheGet?: (filePath: string, contentHash: string) => string[] | null\r\n scanCachePut?: (filePath: string, contentHash: string, classes: string[], mtimeMs: number, size: number) => void\r\n scanCacheInvalidate?: (filePath: string) => void\r\n scanCacheStats?: () => { size: 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\r\n// ── Re-export all 63 wrapper functions from nativeBridgeWrappers\r\n// These provide complete type safety, error handling, and JSDoc documentation\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport {\r\n // Redis Cache Functions (40)\r\n redis_pool_connect,\r\n redis_pool_stats,\r\n redis_pool_reconnect,\r\n redis_ping,\r\n redis_get,\r\n redis_set,\r\n redis_delete,\r\n redis_exists,\r\n redis_mget,\r\n redis_mset,\r\n redis_flush_db,\r\n redis_flush_all,\r\n redis_cache_size,\r\n redis_cache_key_count,\r\n redis_cache_clear,\r\n redis_cache_hit_rate,\r\n redis_info,\r\n redis_monitor,\r\n redis_enable_cluster,\r\n redis_disable_cluster,\r\n redis_cluster_status,\r\n redis_expiration_set,\r\n redis_expiration_get,\r\n redis_subscribe,\r\n redis_publish,\r\n redis_enable_persistence,\r\n redis_disable_persistence,\r\n redis_snapshot,\r\n redis_replicate,\r\n redis_replication_status,\r\n redis_enable_cache_warming,\r\n redis_disable_cache_warming,\r\n redis_cache_sync,\r\n redis_set_eviction_policy,\r\n redis_get_eviction_policy,\r\n redis_memory_stats,\r\n redis_optimize_memory,\r\n redis_diagnose,\r\n // Watch System Functions (20)\r\n start_watch,\r\n poll_watch_events,\r\n stop_watch,\r\n watch_add_pattern,\r\n watch_remove_pattern,\r\n watch_pause,\r\n watch_resume,\r\n is_watch_running,\r\n get_watch_stats,\r\n watch_get_active_handles,\r\n watch_clear_all,\r\n register_plugin_hook,\r\n unregister_plugin_hook,\r\n emit_plugin_hook,\r\n get_plugin_hooks,\r\n // ID Registry Functions (16)\r\n id_registry_create,\r\n id_registry_generate,\r\n id_registry_lookup,\r\n id_registry_next,\r\n id_registry_destroy,\r\n id_registry_reset,\r\n id_registry_snapshot,\r\n id_registry_active_count,\r\n register_property_name,\r\n register_value_name,\r\n property_id_to_string,\r\n value_id_to_string,\r\n reverse_lookup_property,\r\n reverse_lookup_value,\r\n id_registry_export,\r\n id_registry_import,\r\n // Incremental Compilation Functions (8)\r\n process_file_change,\r\n compute_incremental_diff,\r\n create_fingerprint,\r\n inject_state_hash,\r\n prune_stale_entries,\r\n rebuild_workspace_result,\r\n scan_files_batch_native,\r\n // Theme Resolution Functions (7)\r\n resolve_variants,\r\n validate_variant_config,\r\n resolve_cascade,\r\n resolve_class_names,\r\n resolve_conflict_group,\r\n resolve_theme_value,\r\n resolve_simple_variants,\r\n} from \"./nativeBridgeWrappers\"","/**\r\n * cssGeneratorNative.ts\r\n *\r\n * High-performance CSS generator using Rust compiler via NAPI binding.\r\n * Rust-only implementation - no JavaScript fallback.\r\n */\r\n\r\nimport { getNativeBridge } from \"../nativeBridge\"\r\n\r\nexport interface GenerateCssNativeOptions {\r\n theme: Record<string, unknown>\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 { theme } = options\r\n\r\n const native = getNativeBridge()\r\n \r\n if (!native?.generateCssNative) {\r\n throw new Error(\r\n \"FATAL: Rust CSS generator (generateCssNative) is required but not available. \" +\r\n \"Ensure native binding is properly loaded. Check that native/.node binary exists.\"\r\n )\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 - no fallback, fail fast\r\n const css = native.generateCssNative(classes, themeJson)\r\n \r\n return css\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 * compilationNative.ts\r\n *\r\n * Native Rust bindings for CSS compilation and advanced features.\r\n */\r\n\r\nimport { getNativeBridge } from \"../nativeBridge\"\r\nexport type {\r\n ContainerConfig,\r\n StateCssConfig,\r\n GeneratedStateCss,\r\n} from \"../nativeBridge\"\r\n\r\n/**\r\n * Compile Tailwind classes directly to CSS.\r\n */\r\nexport function compileCssNative2(classes: string[], prefix?: string | null) {\r\n const native = getNativeBridge()\r\n if (!native?.compileCss) throw new Error(\"compileCss not available\")\r\n return native.compileCss(classes, prefix)\r\n}\r\n\r\n/**\r\n * Compile CSS using Lightning CSS post-processing.\r\n */\r\nexport function compileCssLightning(classes: string[]): string {\r\n const native = getNativeBridge()\r\n if (!native?.compileCssLightning) throw new Error(\"compileCssLightning not available\")\r\n return native.compileCssLightning(classes)\r\n}\r\n\r\n/**\r\n * Extract Tailwind state configurations from source code.\r\n */\r\nexport function extractTwStateConfigsNative(source: string, filename: string) {\r\n const native = getNativeBridge()\r\n if (!native?.extractTwStateConfigs) throw new Error(\"extractTwStateConfigs not available\")\r\n return native.extractTwStateConfigs(source, filename)\r\n}\r\n\r\n/**\r\n * Generate static state CSS from configuration.\r\n */\r\nexport function generateStaticStateCssNative(\r\n inputs: Array<{\r\n tag: string\r\n componentName: string\r\n statesJson: string\r\n }>,\r\n resolvedCss?: string | null\r\n) {\r\n const native = getNativeBridge()\r\n if (!native?.generateStaticStateCss) throw new Error(\"generateStaticStateCss not available\")\r\n return native.generateStaticStateCss(inputs, resolvedCss ?? null)\r\n}\r\n\r\n/**\r\n * Extract and generate state CSS in one step.\r\n */\r\nexport function extractAndGenerateStateCssNative(source: string, filename: string) {\r\n const native = getNativeBridge()\r\n if (!native?.extractAndGenerateStateCss) throw new Error(\"extractAndGenerateStateCss not available\")\r\n return native.extractAndGenerateStateCss(source, filename)\r\n}\r\n\r\n/**\r\n * Convert layout/utility class string to CSS declarations.\r\n */\r\nexport function layoutClassesToCss(classes: string): string {\r\n const native = getNativeBridge()\r\n if (!native?.layoutClassesToCss) throw new Error(\"layoutClassesToCss not available\")\r\n return native.layoutClassesToCss(classes)\r\n}\r\n\r\n/**\r\n * Hash content for deterministic ID generation.\r\n */\r\nexport function hashContent(input: string, algorithm: string = \"sha256\", length: number = 8): string {\r\n const native = getNativeBridge()\r\n if (!native?.hashContent) throw new Error(\"hashContent not available\")\r\n return native.hashContent(input, algorithm, length)\r\n}\r\n\r\n/**\r\n * Extract container query configurations from source.\r\n */\r\nexport function extractTwContainerConfigs(source: string) {\r\n const native = getNativeBridge()\r\n if (!native?.extractTwContainerConfigs) throw new Error(\"extractTwContainerConfigs not available\")\r\n return native.extractTwContainerConfigs(source)\r\n}\r\n\r\n/**\r\n * Parse Tailwind class into atomic CSS representation.\r\n */\r\nexport function parseAtomicClass(twClass: string): string | null {\r\n const native = getNativeBridge()\r\n if (!native?.parseAtomicClass) throw new Error(\"parseAtomicClass not available\")\r\n return native.parseAtomicClass(twClass)\r\n}\r\n\r\n/**\r\n * Generate atomic CSS from rules.\r\n */\r\nexport function generateAtomicCss(rulesJson: string): string {\r\n const native = getNativeBridge()\r\n if (!native?.generateAtomicCss) throw new Error(\"generateAtomicCss not available\")\r\n return native.generateAtomicCss(rulesJson)\r\n}\r\n\r\n/**\r\n * Convert Tailwind classes to atomic CSS classes.\r\n */\r\nexport function toAtomicClasses(twClasses: string): string {\r\n const native = getNativeBridge()\r\n if (!native?.toAtomicClasses) throw new Error(\"toAtomicClasses not available\")\r\n return native.toAtomicClasses(twClasses)\r\n}\r\n\r\n/**\r\n * Clear atomic CSS registry.\r\n */\r\nexport function clearAtomicRegistry(): void {\r\n const native = getNativeBridge()\r\n if (!native?.clearAtomicRegistry) return\r\n native.clearAtomicRegistry()\r\n}\r\n\r\n/**\r\n * Get atomic registry size.\r\n */\r\nexport function atomicRegistrySize(): number {\r\n const native = getNativeBridge()\r\n if (!native?.atomicRegistrySize) return 0\r\n return native.atomicRegistrySize()\r\n}\r\n\r\n","/**\r\n * cssCompilationNative.ts\r\n *\r\n * Phase 5.2: Advanced CSS Compilation - Complex CSS generation and transformations\r\n * Exposes 12 CSS compilation functions for animations, themes, and merging\r\n */\r\n\r\nimport { getNativeBridge } from \"../nativeBridge\"\r\n\r\n/**\r\n * Compiled CSS rule result\r\n */\r\nexport interface CompiledCssRule {\r\n selector: string\r\n declarations: string\r\n properties: Array<{ key: string; value: string }>\r\n specificity: number\r\n}\r\n\r\n/**\r\n * Compiled animation result\r\n */\r\nexport interface CompiledAnimation {\r\n animation_id: string\r\n keyframes_css: string\r\n animation_rule: string\r\n duration_ms: number\r\n}\r\n\r\n/**\r\n * Compiled theme result\r\n */\r\nexport interface CompiledTheme {\r\n selector: string\r\n variables: Array<{ name: string; value: string }>\r\n variables_css: string\r\n theme_name: string\r\n}\r\n\r\n/**\r\n * CSS compile result with metadata\r\n */\r\nexport interface CssCompileResult {\r\n css: string\r\n resolved_classes: string[]\r\n unknown_classes: string[]\r\n size_bytes: number\r\n duration_ms: number\r\n}\r\n\r\n/**\r\n * tw_merge options\r\n */\r\nexport interface TwMergeOptions {\r\n separator?: string\r\n debug?: boolean\r\n}\r\n\r\n/**\r\n * Compile a single Tailwind class to CSS rule\r\n * Full compilation pipeline: parse → resolve → generate\r\n *\r\n * @param input - Single Tailwind class (e.g., \"md:hover:bg-blue-600/50\")\r\n * @returns Compiled CSS rule as JSON\r\n *\r\n * @example\r\n * ```ts\r\n * const rule = compileClass('md:hover:bg-blue-600')\r\n * // Returns: {\r\n * // selector: '.md\\\\:hover\\\\:bg-blue-600',\r\n * // declarations: 'background-color: #2563eb;',\r\n * // ...\r\n * // }\r\n * ```\r\n */\r\nexport function compileClass(input: string): CompiledCssRule {\r\n const native = getNativeBridge()\r\n if (!native?.compile_class) throw new Error(\"compile_class not available\")\r\n const resultJson = native.compile_class(input)\r\n try {\r\n return JSON.parse(resultJson)\r\n } catch {\r\n return {\r\n selector: \"\",\r\n declarations: \"\",\r\n properties: [],\r\n specificity: 0,\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Compile multiple Tailwind classes to CSS rules\r\n * Batch processing with parallel compilation\r\n *\r\n * @param inputs - Array of Tailwind classes\r\n * @returns JSON string of compiled rules\r\n *\r\n * @example\r\n * ```ts\r\n * const rules = compileClasses(['px-4', 'bg-blue-600', 'hover:opacity-80'])\r\n * ```\r\n */\r\nexport function compileClasses(inputs: string[]): CssCompileResult {\r\n const native = getNativeBridge()\r\n if (!native?.compile_classes) throw new Error(\"compile_classes not available\")\r\n const resultJson = native.compile_classes(inputs)\r\n try {\r\n return JSON.parse(resultJson)\r\n } catch {\r\n return {\r\n css: \"\",\r\n resolved_classes: [],\r\n unknown_classes: [],\r\n size_bytes: 0,\r\n duration_ms: 0,\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * One-step: class → CSS string\r\n * Compiles and generates in single call\r\n *\r\n * @param input - Single Tailwind class\r\n * @param minify - Whether to minify output (default: false)\r\n * @returns Generated CSS string\r\n *\r\n * @example\r\n * ```ts\r\n * const css = compileToCss('bg-blue-600')\r\n * // Returns: \".bg-blue-600 { background-color: #2563eb; }\"\r\n *\r\n * const minified = compileToCss('bg-blue-600', true)\r\n * // Returns: \".bg-blue-600{background-color:#2563eb}\"\r\n * ```\r\n */\r\nexport function compileToCss(input: string, minify?: boolean): string {\r\n const native = getNativeBridge()\r\n if (!native?.compile_to_css) throw new Error(\"compile_to_css not available\")\r\n return native.compile_to_css(input, minify ?? false)\r\n}\r\n\r\n/**\r\n * Batch compile to CSS\r\n * Compiles multiple classes and generates combined CSS\r\n *\r\n * @param inputs - Array of Tailwind classes\r\n * @param minify - Whether to minify output\r\n * @returns Combined CSS string\r\n *\r\n * @example\r\n * ```ts\r\n * const css = compileToCssBatch(['px-4', 'bg-blue-600'], true)\r\n * ```\r\n */\r\nexport function compileToCssBatch(inputs: string[], minify?: boolean): string {\r\n const native = getNativeBridge()\r\n if (!native?.compile_to_css_batch) throw new Error(\"compile_to_css_batch not available\")\r\n return native.compile_to_css_batch(inputs, minify ?? false)\r\n}\r\n\r\n/**\r\n * Minify CSS string\r\n * Removes unnecessary whitespace and formatting\r\n *\r\n * @param css - Raw CSS string\r\n * @returns Minified CSS (40-60% size reduction)\r\n *\r\n * @example\r\n * ```ts\r\n * const css = \".px-4 { padding-left: 1rem; padding-right: 1rem; }\"\r\n * const minified = minifyCss(css)\r\n * // Returns: \".px-4{padding-left:1rem;padding-right:1rem}\"\r\n * ```\r\n */\r\nexport function minifyCss(css: string): string {\r\n const native = getNativeBridge()\r\n if (!native?.minify_css) throw new Error(\"minify_css not available\")\r\n return native.minify_css(css)\r\n}\r\n\r\n/**\r\n * Compile animation from from/to states\r\n * Generates @keyframes and animation rule\r\n *\r\n * @param animationName - Animation name\r\n * @param from - From state classes (e.g., \"opacity-0 scale-95\")\r\n * @param to - To state classes (e.g., \"opacity-100 scale-100\")\r\n * @returns Compiled animation with keyframes\r\n *\r\n * @example\r\n * ```ts\r\n * const anim = compileAnimation('fade-in', 'opacity-0', 'opacity-100')\r\n * console.log(anim.keyframes_css) // @keyframes fade-in { ... }\r\n * console.log(anim.animation_rule) // animation: fade-in 300ms;\r\n * ```\r\n */\r\nexport function compileAnimation(\r\n animationName: string,\r\n from: string,\r\n to: string\r\n): CompiledAnimation {\r\n const native = getNativeBridge()\r\n if (!native?.compile_animation) throw new Error(\"compile_animation not available\")\r\n const resultJson = native.compile_animation(animationName, from, to)\r\n try {\r\n return JSON.parse(resultJson)\r\n } catch {\r\n return {\r\n animation_id: \"\",\r\n keyframes_css: \"\",\r\n animation_rule: \"\",\r\n duration_ms: 0,\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Compile keyframes from stop definitions\r\n * Creates @keyframes from percentage stops\r\n *\r\n * @param name - Keyframes name\r\n * @param stopsJson - JSON array of stops: `[{\"stop\":\"0%\",\"classes\":\"opacity-0\"}...]`\r\n * @returns Compiled @keyframes rule\r\n *\r\n * @example\r\n * ```ts\r\n * const kf = compileKeyframes('slide-in', JSON.stringify([\r\n * { stop: '0%', classes: 'translate-x-full' },\r\n * { stop: '100%', classes: 'translate-x-0' }\r\n * ]))\r\n * ```\r\n */\r\nexport function compileKeyframes(name: string, stopsJson: string): CompiledAnimation {\r\n const native = getNativeBridge()\r\n if (!native?.compile_keyframes) throw new Error(\"compile_keyframes not available\")\r\n const resultJson = native.compile_keyframes(name, stopsJson)\r\n try {\r\n return JSON.parse(resultJson)\r\n } catch {\r\n return {\r\n animation_id: \"\",\r\n keyframes_css: \"\",\r\n animation_rule: \"\",\r\n duration_ms: 0,\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Compile theme to CSS variables\r\n * Converts token map to CSS custom properties\r\n *\r\n * @param tokensJson - Theme tokens as JSON\r\n * @param themeName - Theme name (\"light\", \"dark\", etc.)\r\n * @param prefix - CSS variable prefix (e.g., \"tw\" → \"--tw-color-primary\")\r\n * @returns Compiled theme with variables CSS\r\n *\r\n * @example\r\n * ```ts\r\n * const theme = compileTheme(\r\n * JSON.stringify({ colors: { blue: { 600: '#2563eb' } } }),\r\n * 'light',\r\n * 'tw'\r\n * )\r\n * // Returns CSS: :root { --tw-color-blue-600: #2563eb; }\r\n * ```\r\n */\r\nexport function compileTheme(\r\n tokensJson: string,\r\n themeName: string,\r\n prefix: string\r\n): CompiledTheme {\r\n const native = getNativeBridge()\r\n if (!native?.compile_theme) throw new Error(\"compile_theme not available\")\r\n const resultJson = native.compile_theme(tokensJson, themeName, prefix)\r\n try {\r\n return JSON.parse(resultJson)\r\n } catch {\r\n return {\r\n selector: \":root\",\r\n variables: [],\r\n variables_css: \"\",\r\n theme_name: themeName,\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Merge conflicting Tailwind classes\r\n * Resolves conflicts intelligently (last-one-wins by default)\r\n *\r\n * @param classString - Space-separated class string (e.g., \"px-4 px-8 bg-red-500 bg-blue-600\")\r\n * @returns Merged classes with conflicts resolved\r\n *\r\n * @example\r\n * ```ts\r\n * const merged = twMerge('px-4 px-8 bg-red-500 bg-blue-600')\r\n * // Returns: \"px-8 bg-blue-600\"\r\n * ```\r\n */\r\nexport function twMerge(classString: string): string {\r\n const native = getNativeBridge()\r\n if (!native?.tw_merge) throw new Error(\"tw_merge not available\")\r\n return native.tw_merge(classString)\r\n}\r\n\r\n/**\r\n * Merge multiple class strings\r\n * Combines and resolves conflicts across multiple strings\r\n *\r\n * @param classStrings - Array of class strings\r\n * @returns Merged result\r\n *\r\n * @example\r\n * ```ts\r\n * const merged = twMergeMany([\r\n * 'px-4 hover:bg-blue-600',\r\n * 'px-8 hover:opacity-80'\r\n * ])\r\n * // Returns: \"px-8 hover:bg-blue-600 hover:opacity-80\"\r\n * ```\r\n */\r\nexport function twMergeMany(classStrings: string[]): string {\r\n const native = getNativeBridge()\r\n if (!native?.tw_merge_many) throw new Error(\"tw_merge_many not available\")\r\n return native.tw_merge_many(classStrings)\r\n}\r\n\r\n/**\r\n * Merge with custom separator\r\n * Useful for non-standard class separators\r\n *\r\n * @param classString - Classes to merge\r\n * @param options - Merge options (separator, debug)\r\n * @returns Merged classes\r\n *\r\n * @example\r\n * ```ts\r\n * const merged = twMergeWithSeparator(\r\n * 'px-4,px-8,bg-red-500,bg-blue-600',\r\n * { separator: ',' }\r\n * )\r\n * ```\r\n */\r\nexport function twMergeWithSeparator(\r\n classString: string,\r\n options: TwMergeOptions\r\n): string {\r\n const native = getNativeBridge()\r\n if (!native?.tw_merge_with_separator)\r\n throw new Error(\"tw_merge_with_separator not available\")\r\n const opts = {\r\n separator: options.separator,\r\n debug: options.debug,\r\n }\r\n return native.tw_merge_with_separator(classString, opts)\r\n}\r\n\r\n/**\r\n * Merge many with custom separator\r\n * Batch merge with custom separator\r\n *\r\n * @param classStrings - Array of class strings\r\n * @param options - Merge options\r\n * @returns Merged result\r\n */\r\nexport function twMergeManyWithSeparator(\r\n classStrings: string[],\r\n options: TwMergeOptions\r\n): string {\r\n const native = getNativeBridge()\r\n if (!native?.tw_merge_many_with_separator)\r\n throw new Error(\"tw_merge_many_with_separator not available\")\r\n const opts = {\r\n separator: options.separator,\r\n debug: options.debug,\r\n }\r\n return native.tw_merge_many_with_separator(classStrings, opts)\r\n}\r\n\r\n/**\r\n * Raw merge from class lists\r\n * Direct merge without preprocessing\r\n *\r\n * @param classLists - Array of class lists\r\n * @returns Merged classes\r\n *\r\n * @example\r\n * ```ts\r\n * const merged = twMergeRaw(['px-4 px-8', 'bg-red bg-blue'])\r\n * ```\r\n */\r\nexport function twMergeRaw(classLists: string[]): string {\r\n const native = getNativeBridge()\r\n if (!native?.tw_merge_raw) throw new Error(\"tw_merge_raw not available\")\r\n return native.tw_merge_raw(classLists)\r\n}\r\n\r\n","/**\r\n * idRegistryNative.ts\r\n *\r\n * Phase 5.2: ID Registry Management - Efficient ID generation and lookup\r\n * Exposes 16 ID registry functions for deterministic class/component identification\r\n */\r\n\r\nimport { getNativeBridge } from \"../nativeBridge\"\r\n\r\n/**\r\n * Registry snapshot data\r\n */\r\nexport interface RegistrySnapshot {\r\n handle: number\r\n next_id: number\r\n entries: Array<{ name: string; id: number }>\r\n total_entries: number\r\n}\r\n\r\n/**\r\n * Create a new ID generator\r\n * Returns a handle to be used in subsequent operations\r\n *\r\n * @returns Generator handle (u32)\r\n *\r\n * @example\r\n * ```ts\r\n * const handle = idRegistryCreate()\r\n * // Use handle for all subsequent operations\r\n * try {\r\n * const id = idRegistryGenerate(handle, 'MyComponent')\r\n * // ... use id ...\r\n * } finally {\r\n * idRegistryDestroy(handle) // Clean up\r\n * }\r\n * ```\r\n */\r\nexport function idRegistryCreate(): number {\r\n const native = getNativeBridge()\r\n if (!native?.id_registry_create) throw new Error(\"id_registry_create not available\")\r\n return native.id_registry_create()\r\n}\r\n\r\n/**\r\n * Generate a new ID for a name\r\n * Same name always returns same ID (deterministic)\r\n *\r\n * @param handle - Generator handle from idRegistryCreate()\r\n * @param name - Identifier name (e.g., component name, class name)\r\n * @returns Generated ID\r\n *\r\n * @example\r\n * ```ts\r\n * const handle = idRegistryCreate()\r\n * const id1 = idRegistryGenerate(handle, 'Button') // Returns 1\r\n * const id2 = idRegistryGenerate(handle, 'Button') // Returns 1 (same)\r\n * const id3 = idRegistryGenerate(handle, 'Card') // Returns 2 (different)\r\n * ```\r\n */\r\nexport function idRegistryGenerate(handle: number, name: string): number {\r\n const native = getNativeBridge()\r\n if (!native?.id_registry_generate) throw new Error(\"id_registry_generate not available\")\r\n return native.id_registry_generate(handle, name)\r\n}\r\n\r\n/**\r\n * Lookup existing ID for a name\r\n * Returns -1 if not found\r\n *\r\n * @param handle - Generator handle\r\n * @param name - Name to look up\r\n * @returns ID if found, -1 if not found\r\n *\r\n * @example\r\n * ```ts\r\n * const id = idRegistryLookup(handle, 'Button')\r\n * if (id !== -1) {\r\n * console.log(`Button has ID: ${id}`)\r\n * } else {\r\n * console.log('Button not in registry yet')\r\n * }\r\n * ```\r\n */\r\nexport function idRegistryLookup(handle: number, name: string): number {\r\n const native = getNativeBridge()\r\n if (!native?.id_registry_lookup) throw new Error(\"id_registry_lookup not available\")\r\n return native.id_registry_lookup(handle, name)\r\n}\r\n\r\n/**\r\n * Get the next ID that would be assigned\r\n * Useful for knowing how many unique IDs exist\r\n *\r\n * @param handle - Generator handle\r\n * @returns Next available ID\r\n *\r\n * @example\r\n * ```ts\r\n * const handle = idRegistryCreate()\r\n * idRegistryGenerate(handle, 'Button')\r\n * idRegistryGenerate(handle, 'Card')\r\n * const nextId = idRegistryNext(handle) // Returns 2 (next available)\r\n * ```\r\n */\r\nexport function idRegistryNext(handle: number): number {\r\n const native = getNativeBridge()\r\n if (!native?.id_registry_next) throw new Error(\"id_registry_next not available\")\r\n return native.id_registry_next(handle)\r\n}\r\n\r\n/**\r\n * Destroy a registry (clean up resources)\r\n * Must be called when done with registry\r\n *\r\n * @param handle - Generator handle\r\n *\r\n * @example\r\n * ```ts\r\n * const handle = idRegistryCreate()\r\n * try {\r\n * // Use registry\r\n * } finally {\r\n * idRegistryDestroy(handle)\r\n * }\r\n * ```\r\n */\r\nexport function idRegistryDestroy(handle: number): void {\r\n const native = getNativeBridge()\r\n if (!native?.id_registry_destroy) return\r\n native.id_registry_destroy(handle)\r\n}\r\n\r\n/**\r\n * Reset registry to initial state\r\n * Clears all entries but reuses handle\r\n *\r\n * @param handle - Generator handle\r\n *\r\n * @example\r\n * ```ts\r\n * const handle = idRegistryCreate()\r\n * idRegistryGenerate(handle, 'Component1')\r\n * idRegistryGenerate(handle, 'Component2')\r\n * idRegistryReset(handle) // Clear all\r\n * const id = idRegistryNext(handle) // Back to 0\r\n * ```\r\n */\r\nexport function idRegistryReset(handle: number): void {\r\n const native = getNativeBridge()\r\n if (!native?.id_registry_reset) return\r\n native.id_registry_reset(handle)\r\n}\r\n\r\n/**\r\n * Get snapshot of current registry state\r\n * Useful for serialization/debugging\r\n *\r\n * @param handle - Generator handle\r\n * @returns Snapshot with all entries\r\n *\r\n * @example\r\n * ```ts\r\n * const handle = idRegistryCreate()\r\n * idRegistryGenerate(handle, 'Button')\r\n * idRegistryGenerate(handle, 'Card')\r\n * const snapshot = idRegistrySnapshot(handle)\r\n * console.log(JSON.stringify(snapshot, null, 2))\r\n * ```\r\n */\r\nexport function idRegistrySnapshot(handle: number): RegistrySnapshot {\r\n const native = getNativeBridge()\r\n if (!native?.id_registry_snapshot) throw new Error(\"id_registry_snapshot not available\")\r\n const snapshotJson = native.id_registry_snapshot(handle)\r\n try {\r\n return JSON.parse(snapshotJson)\r\n } catch {\r\n return {\r\n handle,\r\n next_id: 0,\r\n entries: [],\r\n total_entries: 0,\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Get count of active registries\r\n * Useful for monitoring resource usage\r\n *\r\n * @returns Number of active generator handles\r\n *\r\n * @example\r\n * ```ts\r\n * console.log(`Active registries: ${idRegistryActiveCount()}`)\r\n * ```\r\n */\r\nexport function idRegistryActiveCount(): number {\r\n const native = getNativeBridge()\r\n if (!native?.id_registry_active_count) throw new Error(\"id_registry_active_count not available\")\r\n return native.id_registry_active_count()\r\n}\r\n\r\n/**\r\n * Register a property name with global registry\r\n * Maps property names to consistent IDs\r\n *\r\n * @param propertyName - Property name (e.g., \"background-color\")\r\n * @returns Assigned property ID\r\n *\r\n * @example\r\n * ```ts\r\n * const bgColorId = registerPropertyName('background-color')\r\n * const paddingId = registerPropertyName('padding')\r\n * ```\r\n */\r\nexport function registerPropertyName(propertyName: string): number {\r\n const native = getNativeBridge()\r\n if (!native?.register_property_name)\r\n throw new Error(\"register_property_name not available\")\r\n return native.register_property_name(propertyName)\r\n}\r\n\r\n/**\r\n * Register a value name with global registry\r\n * Maps values to consistent IDs\r\n *\r\n * @param valueName - Value name (e.g., \"blue-600\")\r\n * @returns Assigned value ID\r\n *\r\n * @example\r\n * ```ts\r\n * const blueId = registerValueName('blue-600')\r\n * const redId = registerValueName('red-500')\r\n * ```\r\n */\r\nexport function registerValueName(valueName: string): number {\r\n const native = getNativeBridge()\r\n if (!native?.register_value_name) throw new Error(\"register_value_name not available\")\r\n return native.register_value_name(valueName)\r\n}\r\n\r\n/**\r\n * Convert property ID back to name\r\n * Reverse lookup for serialized data\r\n *\r\n * @param propertyId - Property ID\r\n * @returns Property name or empty string if not found\r\n *\r\n * @example\r\n * ```ts\r\n * const bgColorId = registerPropertyName('background-color')\r\n * const name = propertyIdToString(bgColorId)\r\n * console.log(name) // \"background-color\"\r\n * ```\r\n */\r\nexport function propertyIdToString(propertyId: number): string {\r\n const native = getNativeBridge()\r\n if (!native?.property_id_to_string) throw new Error(\"property_id_to_string not available\")\r\n return native.property_id_to_string(propertyId)\r\n}\r\n\r\n/**\r\n * Convert value ID back to name\r\n * Reverse lookup for serialized data\r\n *\r\n * @param valueId - Value ID\r\n * @returns Value name or empty string if not found\r\n *\r\n * @example\r\n * ```ts\r\n * const blueId = registerValueName('blue-600')\r\n * const value = valueIdToString(blueId)\r\n * console.log(value) // \"blue-600\"\r\n * ```\r\n */\r\nexport function valueIdToString(valueId: number): string {\r\n const native = getNativeBridge()\r\n if (!native?.value_id_to_string) throw new Error(\"value_id_to_string not available\")\r\n return native.value_id_to_string(valueId)\r\n}\r\n\r\n/**\r\n * Reverse lookup: find property by ID\r\n * Alternative way to look up property names\r\n *\r\n * @param propertyId - Property ID to look up\r\n * @returns Property name\r\n */\r\nexport function reverseLookupProperty(propertyId: number): string {\r\n const native = getNativeBridge()\r\n if (!native?.reverse_lookup_property)\r\n throw new Error(\"reverse_lookup_property not available\")\r\n return native.reverse_lookup_property(propertyId)\r\n}\r\n\r\n/**\r\n * Reverse lookup: find value by ID\r\n * Alternative way to look up value names\r\n *\r\n * @param valueId - Value ID to look up\r\n * @returns Value name\r\n */\r\nexport function reverseLookupValue(valueId: number): string {\r\n const native = getNativeBridge()\r\n if (!native?.reverse_lookup_value) throw new Error(\"reverse_lookup_value not available\")\r\n return native.reverse_lookup_value(valueId)\r\n}\r\n\r\n/**\r\n * Export registry state for persistence\r\n * Useful for saving/restoring registry data\r\n *\r\n * @param handle - Generator handle\r\n * @returns Serialized registry state\r\n *\r\n * @example\r\n * ```ts\r\n * const exported = idRegistryExport(handle)\r\n * // Save to file/database\r\n * ```\r\n */\r\nexport function idRegistryExport(handle: number): string {\r\n const native = getNativeBridge()\r\n if (!native?.id_registry_export) throw new Error(\"id_registry_export not available\")\r\n return native.id_registry_export(handle)\r\n}\r\n\r\n/**\r\n * Import registry state\r\n * Restore registry from saved state\r\n *\r\n * @param importedData - Serialized registry data\r\n * @returns New handle with imported data\r\n *\r\n * @example\r\n * ```ts\r\n * const handle = idRegistryImport(savedData)\r\n * // Registry restored with same IDs\r\n * ```\r\n */\r\nexport function idRegistryImport(importedData: string): number {\r\n const native = getNativeBridge()\r\n if (!native?.id_registry_import) throw new Error(\"id_registry_import not available\")\r\n return native.id_registry_import(importedData)\r\n}\r\n\r\n","/**\r\n * streamingNative.ts\r\n *\r\n * Phase 5.1: Streaming & Incremental Processing - Handle file changes efficiently\r\n * Exposes 8 functions for real-time incremental compilation\r\n */\r\n\r\nimport { getNativeBridge } from \"../nativeBridge\"\r\n\r\n/**\r\n * File change notification\r\n */\r\nexport interface FileChangeEvent {\r\n file_path: string\r\n event_type: \"added\" | \"modified\" | \"deleted\"\r\n old_content?: string\r\n new_content?: string\r\n timestamp_ms: number\r\n}\r\n\r\n/**\r\n * Processed file change result\r\n */\r\nexport interface ProcessedFileChange {\r\n file_path: string\r\n status: \"processed\" | \"skipped\" | \"error\"\r\n old_classes: string[]\r\n new_classes: string[]\r\n added_classes: string[]\r\n removed_classes: string[]\r\n changed: boolean\r\n fingerprint: string\r\n error?: string\r\n}\r\n\r\n/**\r\n * Diff between two scan results\r\n */\r\nexport interface FileDiff {\r\n added_files: string[]\r\n removed_files: string[]\r\n modified_files: string[]\r\n added_classes: string[]\r\n removed_classes: string[]\r\n total_changes: number\r\n}\r\n\r\n/**\r\n * File fingerprint for change detection\r\n */\r\nexport interface FileFingerprint {\r\n file_path: string\r\n content_hash: string\r\n size_bytes: number\r\n mtime_ms: number\r\n class_hash: string\r\n signature: string\r\n}\r\n\r\n/**\r\n * Incremental diff result\r\n */\r\nexport interface IncrementalDiffResult {\r\n is_changed: boolean\r\n changes_count: number\r\n diff: FileDiff\r\n processing_time_ms: number\r\n}\r\n\r\n/**\r\n * State injection result\r\n */\r\nexport interface StateInjectionResult {\r\n injected: boolean\r\n state_hash: string\r\n affected_files: number\r\n total_injected_bytes: number\r\n}\r\n\r\n/**\r\n * Stale entry pruning result\r\n */\r\nexport interface PruneResult {\r\n entries_before: number\r\n entries_after: number\r\n entries_removed: number\r\n freed_bytes: number\r\n}\r\n\r\n/**\r\n * Rebuilt workspace result\r\n */\r\nexport interface RebuildWorkspaceResult {\r\n total_files_scanned: number\r\n total_classes_found: number\r\n unique_classes: number\r\n build_time_ms: number\r\n files_with_changes: number\r\n}\r\n\r\n/**\r\n * Process a single file change event\r\n * Called when a file is added, modified, or deleted\r\n *\r\n * @param fileChangeJson - JSON string describing the file change\r\n * @returns Processing result with class changes\r\n *\r\n * @example\r\n * ```ts\r\n * const change = processFileChange(JSON.stringify({\r\n * file_path: 'src/Button.tsx',\r\n * event_type: 'modified',\r\n * new_content: 'export const Button = ...',\r\n * timestamp_ms: Date.now()\r\n * }))\r\n *\r\n * console.log('Added classes:', change.added_classes)\r\n * console.log('Removed classes:', change.removed_classes)\r\n * ```\r\n */\r\nexport function processFileChange(fileChangeJson: string): ProcessedFileChange {\r\n const native = getNativeBridge()\r\n if (!native?.process_file_change) throw new Error(\"process_file_change not available\")\r\n const resultJson = native.process_file_change(fileChangeJson)\r\n try {\r\n return JSON.parse(resultJson)\r\n } catch {\r\n return {\r\n file_path: \"\",\r\n status: \"error\",\r\n old_classes: [],\r\n new_classes: [],\r\n added_classes: [],\r\n removed_classes: [],\r\n changed: false,\r\n fingerprint: \"\",\r\n error: \"Failed to parse result\",\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Compute incremental diff between old and new scan results\r\n * Efficient way to identify only what changed\r\n *\r\n * @param oldScanJson - JSON string of previous scan result\r\n * @param newScanJson - JSON string of new scan result\r\n * @returns Diff showing what changed\r\n *\r\n * @example\r\n * ```ts\r\n * const oldResult = scanWorkspace('./src')\r\n * // ... files changed ...\r\n * const newResult = scanWorkspace('./src')\r\n *\r\n * const diff = computeIncrementalDiff(\r\n * JSON.stringify(oldResult),\r\n * JSON.stringify(newResult)\r\n * )\r\n *\r\n * if (diff.is_changed) {\r\n * console.log(`${diff.changes_count} files changed`)\r\n * console.log('Added:', diff.diff.added_classes)\r\n * console.log('Removed:', diff.diff.removed_classes)\r\n * }\r\n * ```\r\n */\r\nexport function computeIncrementalDiff(\r\n oldScanJson: string,\r\n newScanJson: string\r\n): IncrementalDiffResult {\r\n const native = getNativeBridge()\r\n if (!native?.compute_incremental_diff)\r\n throw new Error(\"compute_incremental_diff not available\")\r\n const resultJson = native.compute_incremental_diff(oldScanJson, newScanJson)\r\n try {\r\n return JSON.parse(resultJson)\r\n } catch {\r\n return {\r\n is_changed: false,\r\n changes_count: 0,\r\n diff: {\r\n added_files: [],\r\n removed_files: [],\r\n modified_files: [],\r\n added_classes: [],\r\n removed_classes: [],\r\n total_changes: 0,\r\n },\r\n processing_time_ms: 0,\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Create a fingerprint of a file for change detection\r\n * Use fingerprints to quickly check if file needs reprocessing\r\n *\r\n * @param filePath - Path to file\r\n * @param fileContent - File content\r\n * @returns File fingerprint\r\n *\r\n * @example\r\n * ```ts\r\n * const fingerprint = createFingerprint('src/Button.tsx', fileContent)\r\n * // Store fingerprint, check later if content changed\r\n * const newFingerprint = createFingerprint('src/Button.tsx', newContent)\r\n * if (fingerprint.signature !== newFingerprint.signature) {\r\n * // Content changed, needs reprocessing\r\n * }\r\n * ```\r\n */\r\nexport function createFingerprint(filePath: string, fileContent: string): FileFingerprint {\r\n const native = getNativeBridge()\r\n if (!native?.create_fingerprint) throw new Error(\"create_fingerprint not available\")\r\n const fingerprintJson = native.create_fingerprint(filePath, fileContent)\r\n try {\r\n return JSON.parse(fingerprintJson)\r\n } catch {\r\n return {\r\n file_path: filePath,\r\n content_hash: \"\",\r\n size_bytes: fileContent.length,\r\n mtime_ms: Date.now(),\r\n class_hash: \"\",\r\n signature: \"\",\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Inject state hash into compiled CSS\r\n * Marks CSS with version/state hash for cache busting\r\n *\r\n * @param css - Raw CSS string\r\n * @param stateHash - State hash to inject\r\n * @returns Modified CSS with injected state\r\n *\r\n * @example\r\n * ```ts\r\n * const css = compileCssNative2(['px-4', 'bg-blue-600'])\r\n * const withState = injectStateHash(css, 'v5-hash-123')\r\n * // CSS now includes version marker for cache control\r\n * ```\r\n */\r\nexport function injectStateHash(css: string, stateHash: string): StateInjectionResult {\r\n const native = getNativeBridge()\r\n if (!native?.inject_state_hash) throw new Error(\"inject_state_hash not available\")\r\n const resultJson = native.inject_state_hash(css, stateHash)\r\n try {\r\n return JSON.parse(resultJson)\r\n } catch {\r\n return {\r\n injected: false,\r\n state_hash: stateHash,\r\n affected_files: 0,\r\n total_injected_bytes: 0,\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Prune stale entries from cache\r\n * Removes old/unused cache entries to free memory\r\n *\r\n * @param maxAgeSeconds - Remove entries older than this many seconds\r\n * @param maxEntries - Keep only this many most-recent entries\r\n * @returns Result of pruning operation\r\n *\r\n * @example\r\n * ```ts\r\n * // Remove cache entries older than 1 hour, keep max 10000 entries\r\n * const result = pruneStaleCacheEntries(3600, 10000)\r\n * console.log(`Freed ${result.freed_bytes / 1024}KB`)\r\n * ```\r\n */\r\nexport function pruneStaleCacheEntries(maxAgeSeconds: number, maxEntries: number): PruneResult {\r\n const native = getNativeBridge()\r\n if (!native?.prune_stale_entries) throw new Error(\"prune_stale_entries not available\")\r\n const resultJson = native.prune_stale_entries(maxAgeSeconds, maxEntries)\r\n try {\r\n return JSON.parse(resultJson)\r\n } catch {\r\n return {\r\n entries_before: 0,\r\n entries_after: 0,\r\n entries_removed: 0,\r\n freed_bytes: 0,\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Rebuild workspace result from scratch\r\n * Useful after major configuration changes\r\n *\r\n * @param rootDir - Root directory to scan\r\n * @param extensions - File extensions to scan (e.g., [\".tsx\", \".ts\"])\r\n * @returns Rebuilt workspace result\r\n *\r\n * @example\r\n * ```ts\r\n * const result = rebuildWorkspaceResult('./src', ['.tsx', '.ts'])\r\n * console.log(`Found ${result.unique_classes} unique classes`)\r\n * console.log(`${result.files_with_changes} files had changes`)\r\n * ```\r\n */\r\nexport function rebuildWorkspaceResult(\r\n rootDir: string,\r\n extensions?: string[]\r\n): RebuildWorkspaceResult {\r\n const native = getNativeBridge()\r\n if (!native?.rebuild_workspace_result)\r\n throw new Error(\"rebuild_workspace_result not available\")\r\n const resultJson = native.rebuild_workspace_result(rootDir, extensions || [])\r\n try {\r\n return JSON.parse(resultJson)\r\n } catch {\r\n return {\r\n total_files_scanned: 0,\r\n total_classes_found: 0,\r\n unique_classes: 0,\r\n build_time_ms: 0,\r\n files_with_changes: 0,\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Scan a single file with incremental state\r\n * Returns only new/changed classes since last scan\r\n *\r\n * @param filePath - Path to file\r\n * @param fileContent - File content\r\n * @returns Updated classes and change status\r\n *\r\n * @example\r\n * ```ts\r\n * // On file change, get only what changed\r\n * const file = scanFileNative('src/Button.tsx', newContent)\r\n * if (file.changed) {\r\n * console.log('Added:', file.added_classes)\r\n * console.log('Removed:', file.removed_classes)\r\n * }\r\n * ```\r\n */\r\nexport function scanFileNative(\r\n filePath: string,\r\n fileContent: string\r\n): {\r\n file: string\r\n classes: string[]\r\n added_classes: string[]\r\n removed_classes: string[]\r\n changed: boolean\r\n} {\r\n const native = getNativeBridge()\r\n if (!native?.scan_file_native) throw new Error(\"scan_file_native not available\")\r\n const resultJson = native.scan_file_native(filePath, fileContent)\r\n try {\r\n return JSON.parse(resultJson)\r\n } catch {\r\n return {\r\n file: filePath,\r\n classes: [],\r\n added_classes: [],\r\n removed_classes: [],\r\n changed: false,\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Scan multiple files in batch with incremental state\r\n * Efficient batch processing of file changes\r\n *\r\n * @param filesJson - JSON array of {file, content} objects\r\n * @returns Results for each file\r\n *\r\n * @example\r\n * ```ts\r\n * const files = [\r\n * { file: 'src/Button.tsx', content: newButtonContent },\r\n * { file: 'src/Card.tsx', content: newCardContent }\r\n * ]\r\n * const results = scanFilesBatchNative(JSON.stringify(files))\r\n * ```\r\n */\r\nexport function scanFilesBatchNative(\r\n filesJson: string\r\n): Array<{\r\n file: string\r\n classes: string[]\r\n changed: boolean\r\n}> {\r\n const native = getNativeBridge()\r\n if (!native?.scan_files_batch_native)\r\n throw new Error(\"scan_files_batch_native not available\")\r\n const resultJson = native.scan_files_batch_native(filesJson)\r\n try {\r\n return JSON.parse(resultJson)\r\n } catch {\r\n return []\r\n }\r\n}\r\n\r\n","/**\r\n * tailwindEngine.ts\r\n *\r\n * Pipeline: classes[] → Rust CSS Compiler (only path)\r\n *\r\n * The Rust compiler provides 40-60% performance improvement over pure JavaScript.\r\n * No JavaScript fallback - fail fast if native binding 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// Deprecated - Kept for reference only, not used\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// The JavaScript Tailwind engine path has been removed in favor of Rust-only\r\n// compilation. The code below is legacy and can be removed in future cleanup.\r\n\r\n// export async function generateRawCss(...) { /* removed */ }\r\n// export function loadTailwindEngine() { /* removed */ }\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: Rust CSS Compiler (Only Path - no JS fallback)\r\n const theme = getThemeConfig()\r\n rawCss = await generateCssNativeImpl(unique, { theme })\r\n usedRustCompiler = true\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","/**\r\n * Compiler Sub-entry Point\r\n * \r\n * Exports CSS generation and compilation functionality.\r\n * - CSS generation with caching\r\n * - Compilation of classes to CSS\r\n * - ID registry management\r\n * - Streaming and incremental processing\r\n */\r\n\r\nexport {\r\n generateCssNative,\r\n getCacheStats,\r\n clearThemeCache,\r\n} from './cssGeneratorNative'\r\n\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\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\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\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\nexport { runCssPipeline } from './tailwindEngine'\r\n","/**\r\n * Parser Sub-entry Point\r\n * \r\n * Exports class parsing and extraction functionality.\r\n * - Tailwind class parsing\r\n * - Class extraction from source\r\n * - Class normalization and deduplication\r\n * - Component analysis\r\n */\r\n\r\nimport { getNativeBridge } from '../nativeBridge'\r\n\r\n// ============================================================================\r\n// PARSING FUNCTIONS\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 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\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// 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// BATCH OPERATIONS\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// DIFF & MERGING\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\n// Re-export types if any\r\nexport type { ClassExtractResult, ComponentMetadata } from '../nativeBridge'\r\n","/**\r\n * analyzerNative.ts\r\n *\r\n * Native Rust bindings for CSS analysis and optimization.\r\n */\r\n\r\nimport { getNativeBridge } from \"../nativeBridge\"\r\nexport type {\r\n DeadCodeResult,\r\n ClassUsageItem,\r\n ContainerConfig,\r\n HoistResult,\r\n VariantTableResult,\r\n ClassifyResult,\r\n MergeResult,\r\n ProcessedCssResult,\r\n} from \"../nativeBridge\"\r\n\r\n/**\r\n * Detect dead CSS selectors in generated CSS.\r\n */\r\nexport function detectDeadCode(scanResultJson: string, css: string) {\r\n const native = getNativeBridge()\r\n if (!native?.detectDeadCode) throw new Error(\"detectDeadCode not available\")\r\n return native.detectDeadCode(scanResultJson, css)\r\n}\r\n\r\n/**\r\n * Analyze class usage across scanned files.\r\n */\r\nexport function analyzeClassUsageNative(classes: string[], scanResultJson: string, css: string) {\r\n const native = getNativeBridge()\r\n if (!native?.analyzeClassUsage) throw new Error(\"analyzeClassUsage not available\")\r\n return native.analyzeClassUsage(classes, scanResultJson, css)\r\n}\r\n\r\n/**\r\n * Analyze entire class list and generate CSS.\r\n */\r\nexport function analyzeClassesNative(filesJson: string, cwd: string, flags?: number) {\r\n const native = getNativeBridge()\r\n if (!native?.analyzeClasses) throw new Error(\"analyzeClasses not available\")\r\n return native.analyzeClasses(filesJson, cwd, flags ?? 0)\r\n}\r\n\r\n/**\r\n * Analyze React Server Component requirements.\r\n */\r\nexport function analyzeRscNative(source: string, filename: string) {\r\n const native = getNativeBridge()\r\n if (!native?.analyzeRsc) throw new Error(\"analyzeRsc not available\")\r\n return native.analyzeRsc(source, filename)\r\n}\r\n\r\n/**\r\n * Optimize CSS by removing dead code and minifying.\r\n */\r\nexport function optimizeCssNative(css: string) {\r\n const native = getNativeBridge()\r\n if (!native?.processTailwindCssLightning) throw new Error(\"processTailwindCssLightning not available\")\r\n const result = native.processTailwindCssLightning(css)\r\n return {\r\n css: result.css,\r\n originalSize: css.length,\r\n optimizedSize: result.size_bytes,\r\n reductionPercentage: ((css.length - result.size_bytes) / css.length) * 100,\r\n }\r\n}\r\n\r\n/**\r\n * Process Tailwind CSS with Lightning CSS post-processing.\r\n */\r\nexport function processTailwindCssLightning(css: string) {\r\n const native = getNativeBridge()\r\n if (!native?.processTailwindCssLightning) throw new Error(\"processTailwindCssLightning not available\")\r\n return native.processTailwindCssLightning(css)\r\n}\r\n\r\n/**\r\n * Eliminate dead CSS selectors.\r\n */\r\nexport function eliminateDeadCssNative(css: string, deadClasses: string[]): string {\r\n const native = getNativeBridge()\r\n if (!native?.eliminateDeadCss) throw new Error(\"eliminateDeadCss not available\")\r\n return native.eliminateDeadCss(css, deadClasses)\r\n}\r\n\r\n/**\r\n * Hoist components from source code.\r\n */\r\nexport function hoistComponentsNative(source: string) {\r\n const native = getNativeBridge()\r\n if (!native?.hoistComponents) throw new Error(\"hoistComponents not available\")\r\n return native.hoistComponents(source)\r\n}\r\n\r\n/**\r\n * Compile variant configuration table.\r\n */\r\nexport function compileVariantTableNative(configJson: string) {\r\n const native = getNativeBridge()\r\n if (!native?.compileVariantTable) throw new Error(\"compileVariantTable not available\")\r\n return native.compileVariantTable(configJson)\r\n}\r\n\r\n/**\r\n * Classify and sort classes by bucket.\r\n */\r\nexport function classifyAndSortClassesNative(classes: string[]) {\r\n const native = getNativeBridge()\r\n if (!native?.classifyAndSortClasses) throw new Error(\"classifyAndSortClasses not available\")\r\n return native.classifyAndSortClasses(classes)\r\n}\r\n\r\n/**\r\n * Merge CSS declarations from multiple chunks.\r\n */\r\nexport function mergeCssDeclarationsNative(cssChunks: string[]) {\r\n const native = getNativeBridge()\r\n if (!native?.mergeCssDeclarations) throw new Error(\"mergeCssDeclarations not available\")\r\n return native.mergeCssDeclarations(cssChunks)\r\n}\r\n","/**\r\n * themeResolutionNative.ts\r\n *\r\n * Phase 5.1: Theme Resolution Extended - Advanced theme configuration handling\r\n * Exposes 7 theme resolution functions for complex Tailwind configurations\r\n */\r\n\r\nimport { getNativeBridge } from \"../nativeBridge\"\r\n\r\n/**\r\n * Validation result for theme config\r\n */\r\nexport interface ThemeValidationResult {\r\n is_valid: boolean\r\n errors: string[]\r\n warnings: string[]\r\n suggestions: string[]\r\n}\r\n\r\n/**\r\n * Resolved variant configuration\r\n */\r\nexport interface ResolvedVariantConfig {\r\n variants: string[]\r\n supported: string[]\r\n deprecated: string[]\r\n conflicting: string[]\r\n}\r\n\r\n/**\r\n * Theme cascade resolution result\r\n */\r\nexport interface ThemeCascadeResult {\r\n base_theme: Record<string, unknown>\r\n user_overrides: Record<string, unknown>\r\n merged_theme: Record<string, unknown>\r\n conflict_resolutions: Array<{\r\n key: string\r\n base_value: unknown\r\n override_value: unknown\r\n resolution: \"override\" | \"merge\" | \"error\"\r\n }>\r\n}\r\n\r\n/**\r\n * Class name resolution from theme\r\n */\r\nexport interface ResolvedClassName {\r\n class_name: string\r\n property: string\r\n value: string\r\n from_theme_path: string\r\n is_responsive: boolean\r\n variants: string[]\r\n}\r\n\r\n/**\r\n * Conflict group information\r\n */\r\nexport interface ConflictGroupInfo {\r\n group_name: string\r\n conflicting_classes: string[]\r\n description: string\r\n resolution_strategy: string\r\n}\r\n\r\n/**\r\n * Get all resolved variants from theme configuration\r\n * Parses theme config and returns all variant prefixes\r\n *\r\n * @param configJson - JSON string of theme configuration\r\n * @returns Resolved variants with metadata\r\n *\r\n * @example\r\n * ```ts\r\n * const config = {\r\n * screens: { md: '768px', lg: '1024px' },\r\n * state: { hover: '&:hover', focus: '&:focus' }\r\n * }\r\n * const variants = resolveVariants(JSON.stringify(config))\r\n * console.log(variants.variants) // ['md', 'lg', 'hover', 'focus', ...]\r\n * ```\r\n */\r\nexport function resolveVariants(configJson: string): ResolvedVariantConfig {\r\n const native = getNativeBridge()\r\n if (!native?.resolve_variants) throw new Error(\"resolve_variants not available\")\r\n const resultJson = native.resolve_variants(configJson)\r\n try {\r\n return JSON.parse(resultJson)\r\n } catch {\r\n return {\r\n variants: [],\r\n supported: [],\r\n deprecated: [],\r\n conflicting: [],\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Validate theme configuration for correctness\r\n * Checks for common issues and provides warnings\r\n *\r\n * @param configJson - JSON string of theme configuration\r\n * @returns Validation result with errors and suggestions\r\n *\r\n * @example\r\n * ```ts\r\n * const result = validateThemeConfig(JSON.stringify(myTheme))\r\n * if (!result.is_valid) {\r\n * console.error('Errors:', result.errors)\r\n * console.warn('Warnings:', result.warnings)\r\n * }\r\n * ```\r\n */\r\nexport function validateThemeConfig(configJson: string): ThemeValidationResult {\r\n const native = getNativeBridge()\r\n if (!native?.validate_variant_config) throw new Error(\"validate_variant_config not available\")\r\n const resultJson = native.validate_variant_config(configJson)\r\n try {\r\n return JSON.parse(resultJson)\r\n } catch {\r\n return {\r\n is_valid: false,\r\n errors: [\"Unable to parse configuration\"],\r\n warnings: [],\r\n suggestions: [],\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Resolve theme cascade (base + overrides)\r\n * Merges base theme with user overrides intelligently\r\n *\r\n * @param baseThemeJson - Base theme configuration\r\n * @param overridesJson - User overrides configuration\r\n * @returns Merged theme with conflict information\r\n *\r\n * @example\r\n * ```ts\r\n * const cascade = resolveCascade(\r\n * JSON.stringify(baseTheme),\r\n * JSON.stringify(userOverrides)\r\n * )\r\n * console.log(cascade.merged_theme)\r\n * console.log('Conflicts resolved:', cascade.conflict_resolutions.length)\r\n * ```\r\n */\r\nexport function resolveCascade(\r\n baseThemeJson: string,\r\n overridesJson: string\r\n): ThemeCascadeResult {\r\n const native = getNativeBridge()\r\n if (!native?.resolve_cascade) throw new Error(\"resolve_cascade not available\")\r\n const resultJson = native.resolve_cascade(baseThemeJson, overridesJson)\r\n try {\r\n return JSON.parse(resultJson)\r\n } catch {\r\n return {\r\n base_theme: {},\r\n user_overrides: {},\r\n merged_theme: {},\r\n conflict_resolutions: [],\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Resolve class names from theme\r\n * Maps Tailwind class names to theme values\r\n *\r\n * @param classNames - Array of Tailwind class names (e.g., [\"text-lg\", \"bg-blue-600\"])\r\n * @param themeJson - Theme configuration\r\n * @returns Resolved class name information\r\n *\r\n * @example\r\n * ```ts\r\n * const resolved = resolveClassNames(\r\n * ['text-lg', 'bg-blue-600', 'md:p-4'],\r\n * JSON.stringify(theme)\r\n * )\r\n * resolved.forEach(item => {\r\n * console.log(`${item.class_name} -> ${item.property}: ${item.value}`)\r\n * })\r\n * ```\r\n */\r\nexport function resolveClassNames(\r\n classNames: string[],\r\n themeJson: string\r\n): ResolvedClassName[] {\r\n const native = getNativeBridge()\r\n if (!native?.resolve_class_names) throw new Error(\"resolve_class_names not available\")\r\n const resultJson = native.resolve_class_names(classNames, themeJson)\r\n try {\r\n return JSON.parse(resultJson)\r\n } catch {\r\n return []\r\n }\r\n}\r\n\r\n/**\r\n * Get conflict group information\r\n * Identifies classes that conflict with each other\r\n *\r\n * @param groupName - Conflict group name (e.g., \"display\", \"position\", \"flex-direction\")\r\n * @param themeJson - Theme configuration\r\n * @returns Information about the conflict group\r\n *\r\n * @example\r\n * ```ts\r\n * const info = resolveConflictGroup('display', JSON.stringify(theme))\r\n * console.log('Conflicting classes:', info.conflicting_classes)\r\n * console.log('Strategy:', info.resolution_strategy)\r\n * ```\r\n */\r\nexport function resolveConflictGroup(groupName: string, themeJson: string): ConflictGroupInfo {\r\n const native = getNativeBridge()\r\n if (!native?.resolve_conflict_group)\r\n throw new Error(\"resolve_conflict_group not available\")\r\n const resultJson = native.resolve_conflict_group(groupName, themeJson)\r\n try {\r\n return JSON.parse(resultJson)\r\n } catch {\r\n return {\r\n group_name: groupName,\r\n conflicting_classes: [],\r\n description: \"\",\r\n resolution_strategy: \"last-wins\",\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Resolve theme value from key path\r\n * Navigates nested theme config to find values\r\n *\r\n * @param keyPath - Dot-separated path (e.g., \"colors.blue.600\")\r\n * @param themeJson - Theme configuration\r\n * @returns Resolved value or null if not found\r\n *\r\n * @example\r\n * ```ts\r\n * const color = resolveThemeValue('colors.blue.600', JSON.stringify(theme))\r\n * console.log(color) // \"#2563eb\" or similar\r\n * ```\r\n */\r\nexport function resolveThemeValue(keyPath: string, themeJson: string): string | null {\r\n const native = getNativeBridge()\r\n if (!native?.resolve_theme_value) throw new Error(\"resolve_theme_value not available\")\r\n return native.resolve_theme_value(keyPath, themeJson)\r\n}\r\n\r\n/**\r\n * Get all simple variants from configuration\r\n * Returns variants that don't require complex selector nesting\r\n *\r\n * @param configJson - Theme/variant configuration\r\n * @returns Array of simple variant names\r\n *\r\n * @example\r\n * ```ts\r\n * const simpleVariants = resolveSimpleVariants(JSON.stringify(config))\r\n * console.log(simpleVariants)\r\n * // [\"hover\", \"focus\", \"active\", \"group-hover\", ...]\r\n * ```\r\n */\r\nexport function resolveSimpleVariants(configJson: string): string[] {\r\n const native = getNativeBridge()\r\n if (!native?.resolve_simple_variants) throw new Error(\"resolve_simple_variants not available\")\r\n const resultJson = native.resolve_simple_variants(configJson)\r\n try {\r\n return JSON.parse(resultJson)\r\n } catch {\r\n return []\r\n }\r\n}\r\n","/**\r\n * scannerNative.ts - Rust bindings for workspace scanning and class extraction\r\n */\r\n\r\nimport { getNativeBridge } from \"../nativeBridge\"\r\n\r\nexport type {\r\n ScanWorkspaceResult,\r\n ScanFileResult,\r\n BatchExtractResult,\r\n SafelistCheckResult,\r\n PrefilterFileResult,\r\n} from \"../nativeBridge\"\r\n\r\nexport function scanWorkspace(root: string, extensions?: string[]) {\r\n const native = getNativeBridge()\r\n if (!native?.scan_workspace) throw new Error(\"scan_workspace not available\")\r\n return native.scan_workspace(root, extensions)\r\n}\r\n\r\nexport function extractClassesFromSourceNative(source: string): string[] {\r\n const native = getNativeBridge()\r\n if (!native?.extract_classes_from_source) throw new Error(\"extract_classes_from_source not available\")\r\n return native.extract_classes_from_source(source)\r\n}\r\n\r\nexport function batchExtractClassesNative(filePaths: string[]) {\r\n const native = getNativeBridge()\r\n if (!native?.batch_extract_classes) throw new Error(\"batch_extract_classes not available\")\r\n return native.batch_extract_classes(filePaths)\r\n}\r\n\r\nexport function checkAgainstSafelistNative(classes: string[], safelist: string[]) {\r\n const native = getNativeBridge()\r\n if (!native?.check_against_safelist) throw new Error(\"check_against_safelist not available\")\r\n return native.check_against_safelist(classes, safelist)\r\n}\r\n\r\nexport function scanFile(filePath: string) {\r\n const native = getNativeBridge()\r\n if (!native?.scan_file) throw new Error(\"scan_file not available\")\r\n return native.scan_file(filePath)\r\n}\r\n\r\nexport function collectFiles(root: string, extensions?: string[]) {\r\n const native = getNativeBridge()\r\n if (!native?.collect_files) throw new Error(\"collect_files not available\")\r\n return native.collect_files(root, extensions)\r\n}\r\n\r\nexport function walkAndPrefilterSourceFiles(root: string, extensions?: string[], _parallel?: boolean) {\r\n const native = getNativeBridge()\r\n if (!native?.walk_and_prefilter_source_files) throw new Error(\"walk_and_prefilter_source_files not available\")\r\n return native.walk_and_prefilter_source_files(root, extensions)\r\n}\r\n\r\nexport function generateSubComponentTypes(root: string, outputPath?: string): string {\r\n const native = getNativeBridge()\r\n if (!native?.generate_sub_component_types) throw new Error(\"generate_sub_component_types not available\")\r\n return native.generate_sub_component_types(root, outputPath)\r\n}\r\n","/**\r\n * Analyzer Sub-entry Point\r\n * \r\n * Exports analysis and optimization functionality.\r\n * - CSS and class analysis\r\n * - Dead code detection\r\n * - Theme resolution and validation\r\n * - Code classification and optimization\r\n */\r\n\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\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\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 * cacheNative.ts\r\n *\r\n * Phase 5.1: Cache Management - Advanced caching strategies and optimization\r\n * Exposes 9 cache-related Rust functions for improved performance tuning\r\n */\r\n\r\nimport { getNativeBridge } from \"../nativeBridge\"\r\n\r\n/**\r\n * Cache optimization hints and recommendations\r\n */\r\nexport interface CacheOptimizationHints {\r\n current_strategy: string\r\n recommended_strategy: string\r\n estimated_improvement_percent: number\r\n suggested_memory_mb: number\r\n notes: string[]\r\n}\r\n\r\n/**\r\n * Optimal cache configuration recommendations\r\n */\r\nexport interface OptimalCacheConfig {\r\n parse_cache_size: number\r\n resolve_cache_size: number\r\n compile_cache_size: number\r\n css_gen_cache_size: number\r\n recommended_eviction_policy: string\r\n ttl_seconds: number\r\n expected_hit_rate_percent: number\r\n}\r\n\r\n/**\r\n * Cache statistics from all layers\r\n */\r\nexport interface CacheStatistics {\r\n parse_cache: { hits: number; misses: number; size: number }\r\n resolve_cache: { hits: number; misses: number; size: number }\r\n compile_cache: { hits: number; misses: number; size: number }\r\n css_gen_cache: { hits: number; misses: number; size: number }\r\n overall_hit_rate: number\r\n total_memory_bytes: number\r\n}\r\n\r\n/**\r\n * Get comprehensive cache statistics across all layers\r\n * Useful for monitoring and optimization\r\n *\r\n * @returns Cache stats including hit rates, sizes, and recommendations\r\n * @example\r\n * ```ts\r\n * const stats = getCacheStatistics()\r\n * console.log(`Overall hit rate: ${stats.overall_hit_rate}%`)\r\n * console.log(`Total memory used: ${stats.total_memory_bytes / 1024}KB`)\r\n * ```\r\n */\r\nexport function getCacheStatistics(): CacheStatistics {\r\n const native = getNativeBridge()\r\n if (!native?.get_cache_statistics) throw new Error(\"get_cache_statistics not available\")\r\n const statsJson = native.get_cache_statistics()\r\n try {\r\n return JSON.parse(statsJson)\r\n } catch {\r\n return {\r\n parse_cache: { hits: 0, misses: 0, size: 0 },\r\n resolve_cache: { hits: 0, misses: 0, size: 0 },\r\n compile_cache: { hits: 0, misses: 0, size: 0 },\r\n css_gen_cache: { hits: 0, misses: 0, size: 0 },\r\n overall_hit_rate: 0,\r\n total_memory_bytes: 0,\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Clear all caches (parse, resolve, compile, CSS generation)\r\n * Use when switching themes or major configuration changes\r\n *\r\n * @example\r\n * ```ts\r\n * // Clear before switching themes\r\n * clearAllCaches()\r\n * const css = await generateCssNative(classes, { theme: newTheme })\r\n * ```\r\n */\r\nexport function clearAllCaches(): void {\r\n const native = getNativeBridge()\r\n if (!native?.clear_all_caches) return\r\n try {\r\n native.clear_all_caches()\r\n } catch {\r\n // Silently ignore if not available\r\n }\r\n}\r\n\r\n/**\r\n * Clear only the parse cache\r\n * Useful when parser behavior changes or cache gets stale\r\n */\r\nexport function clearParseCache(): void {\r\n const native = getNativeBridge()\r\n if (!native?.clear_parse_cache) return\r\n try {\r\n native.clear_parse_cache()\r\n } catch {\r\n // Silently ignore\r\n }\r\n}\r\n\r\n/**\r\n * Clear only the resolve cache\r\n * Use when theme configuration changes\r\n */\r\nexport function clearResolveCache(): void {\r\n const native = getNativeBridge()\r\n if (!native?.clear_resolve_cache) return\r\n try {\r\n native.clear_resolve_cache()\r\n } catch {\r\n // Silently ignore\r\n }\r\n}\r\n\r\n/**\r\n * Clear only the compile cache\r\n * Use when Tailwind configuration changes\r\n */\r\nexport function clearCompileCache(): void {\r\n const native = getNativeBridge()\r\n if (!native?.clear_compile_cache) return\r\n try {\r\n native.clear_compile_cache()\r\n } catch {\r\n // Silently ignore\r\n }\r\n}\r\n\r\n/**\r\n * Clear only the CSS generation cache\r\n * Use when theme or layout changes\r\n */\r\nexport function clearCssGenCache(): void {\r\n const native = getNativeBridge()\r\n if (!native?.clear_css_gen_cache) return\r\n try {\r\n native.clear_css_gen_cache()\r\n } catch {\r\n // Silently ignore\r\n }\r\n}\r\n\r\n/**\r\n * Get optimization hints based on current cache performance\r\n * Analyzes hit rates and suggests improvements\r\n *\r\n * @param hitRatePercent - Current hit rate (0-100)\r\n * @param memoryUsedMb - Memory currently used in MB\r\n * @returns Optimization recommendations\r\n *\r\n * @example\r\n * ```ts\r\n * const stats = getCacheStatistics()\r\n * const hints = getCacheOptimizationHints(\r\n * stats.overall_hit_rate,\r\n * stats.total_memory_bytes / (1024 * 1024)\r\n * )\r\n * console.log(`Recommendation: ${hints.recommended_strategy}`)\r\n * console.log(`Potential improvement: ${hints.estimated_improvement_percent}%`)\r\n * ```\r\n */\r\nexport function getCacheOptimizationHints(\r\n hitRatePercent: number,\r\n memoryUsedMb: number\r\n): CacheOptimizationHints {\r\n const native = getNativeBridge()\r\n if (!native?.get_cache_optimization_hints)\r\n throw new Error(\"get_cache_optimization_hints not available\")\r\n const hintsJson = native.get_cache_optimization_hints(\r\n Math.min(100, Math.max(0, hitRatePercent)),\r\n Math.max(1, memoryUsedMb)\r\n )\r\n try {\r\n return JSON.parse(hintsJson)\r\n } catch {\r\n return {\r\n current_strategy: \"unknown\",\r\n recommended_strategy: \"increase_size\",\r\n estimated_improvement_percent: 0,\r\n suggested_memory_mb: 256,\r\n notes: [\"Unable to analyze cache statistics\"],\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Estimate optimal cache configuration for your workload\r\n * Analyzes typical patterns and recommends sizes\r\n *\r\n * @param totalBudgetMb - Maximum memory budget in MB\r\n * @param workloadType - \"small\" (< 100 files), \"medium\" (100-1000), \"large\" (1000+)\r\n * @returns Recommended cache configuration\r\n *\r\n * @example\r\n * ```ts\r\n * const config = estimateOptimalCacheConfig(512, 'large')\r\n * console.log(`Parse cache: ${config.parse_cache_size}MB`)\r\n * console.log(`Expected hit rate: ${config.expected_hit_rate_percent}%`)\r\n * ```\r\n */\r\nexport function estimateOptimalCacheConfig(\r\n totalBudgetMb: number,\r\n workloadType: \"small\" | \"medium\" | \"large\"\r\n): OptimalCacheConfig {\r\n const native = getNativeBridge()\r\n if (!native?.estimate_optimal_cache_config_native)\r\n throw new Error(\"estimate_optimal_cache_config_native not available\")\r\n const configJson = native.estimate_optimal_cache_config_native(\r\n Math.max(64, totalBudgetMb),\r\n workloadType\r\n )\r\n try {\r\n return JSON.parse(configJson)\r\n } catch {\r\n // Return sensible defaults\r\n return {\r\n parse_cache_size: 128,\r\n resolve_cache_size: 64,\r\n compile_cache_size: 256,\r\n css_gen_cache_size: 128,\r\n recommended_eviction_policy: \"lru\",\r\n ttl_seconds: 3600,\r\n expected_hit_rate_percent: 75,\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Read cache from disk (persistence)\r\n * Restores cached data from previous sessions\r\n *\r\n * @param cachePath - Path to cache file\r\n * @returns Entries loaded from disk\r\n *\r\n * @example\r\n * ```ts\r\n * const entries = cacheRead('./.tw-cache/scan.json')\r\n * // Warm up cache with persisted data\r\n * ```\r\n */\r\nexport function cacheRead(cachePath: string): Array<{\r\n file: string\r\n contentHash: string\r\n classes: string[]\r\n mtimeMs: number\r\n sizeBytes: number\r\n}> {\r\n const native = getNativeBridge()\r\n if (!native?.cache_read) throw new Error(\"cache_read not available\")\r\n const result = native.cache_read(cachePath)\r\n try {\r\n return JSON.parse(result.entries_json || \"[]\")\r\n } catch {\r\n return []\r\n }\r\n}\r\n\r\n/**\r\n * Write cache to disk (persistence)\r\n * Saves cached data for next session\r\n *\r\n * @param cachePath - Path where cache should be written\r\n * @param entries - Cache entries to persist\r\n * @returns Success status\r\n *\r\n * @example\r\n * ```ts\r\n * const stats = getCacheStatistics()\r\n * const success = cacheWrite(\r\n * './.tw-cache/scan.json',\r\n * // entries array from previous scan\r\n * )\r\n * ```\r\n */\r\nexport function cacheWrite(\r\n cachePath: string,\r\n entries: Array<{\r\n file: string\r\n contentHash: string\r\n classes: string[]\r\n mtimeMs: number\r\n sizeBytes: number\r\n }>\r\n): boolean {\r\n const native = getNativeBridge()\r\n if (!native?.cache_write) throw new Error(\"cache_write not available\")\r\n try {\r\n const result = native.cache_write(\r\n cachePath,\r\n entries.map((e) => ({\r\n file: e.file,\r\n content_hash: e.contentHash,\r\n classes: e.classes,\r\n mtime_ms: e.mtimeMs,\r\n size_bytes: e.sizeBytes,\r\n }))\r\n )\r\n return typeof result === \"boolean\" ? result : result === true\r\n } catch {\r\n return false\r\n }\r\n}\r\n\r\n/**\r\n * Calculate cache priority score for file ordering\r\n * Useful for prioritizing which files to scan first\r\n *\r\n * @param mtimeMs - File modification time in milliseconds\r\n * @param sizeBytes - File size in bytes\r\n * @param hitCount - Number of times this file was accessed from cache\r\n * @returns Priority score (higher = process first)\r\n *\r\n * @example\r\n * ```ts\r\n * const priority = cachePriority(Date.now(), 2048, 5)\r\n * // Use priority to sort files for scanning\r\n * ```\r\n */\r\nexport function cachePriority(mtimeMs: number, sizeBytes: number, hitCount: number): number {\r\n const native = getNativeBridge()\r\n if (!native?.cache_priority) throw new Error(\"cache_priority not available\")\r\n return native.cache_priority(mtimeMs, sizeBytes, hitCount)\r\n}\r\n","/**\r\n * Cache Sub-entry Point\r\n * \r\n * Exports cache management functionality.\r\n * - Cache statistics retrieval\r\n * - Cache clearing operations\r\n * - Cache optimization\r\n * - Cache configuration\r\n */\r\n\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 * redisNative.ts\r\n *\r\n * Phase 5.3: Redis Integration - Distributed caching and cluster support\r\n * Exposes 40 Redis functions for high-performance distributed CSS compilation caching\r\n */\r\n\r\nimport { getNativeBridge } from \"../nativeBridge\"\r\n\r\n/**\r\n * Redis pool configuration\r\n */\r\nexport interface RedisCacheConfig {\r\n host: string\r\n port: number\r\n database: number\r\n password?: string\r\n pool_size: number\r\n connection_timeout_ms: number\r\n}\r\n\r\n/**\r\n * Redis pool statistics\r\n */\r\nexport interface RedisPoolStats {\r\n connected_count: number\r\n idle_count: number\r\n waiting_count: number\r\n total_requests: number\r\n total_errors: number\r\n}\r\n\r\n/**\r\n * Redis cluster node information\r\n */\r\nexport interface RedisClusterNode {\r\n node_id: string\r\n host: string\r\n port: number\r\n is_master: boolean\r\n slot_range: Array<{ start: number; end: number }>\r\n connected: boolean\r\n}\r\n\r\n/**\r\n * Redis cluster status\r\n */\r\nexport interface RedisClusterStatus {\r\n enabled: boolean\r\n cluster_state: string\r\n nodes: RedisClusterNode[]\r\n slots_assigned: number\r\n slots_ok: number\r\n slots_fail: number\r\n}\r\n\r\n/**\r\n * Key expiration information\r\n */\r\nexport interface KeyExpiration {\r\n key: string\r\n ttl_seconds: number\r\n expiration_timestamp: number\r\n is_persistent: boolean\r\n}\r\n\r\n/**\r\n * Pub/Sub message\r\n */\r\nexport interface PubSubMessage {\r\n channel: string\r\n message: string\r\n timestamp_ms: number\r\n subscriber_count: number\r\n}\r\n\r\n/**\r\n * Connection pool information\r\n */\r\nexport interface PoolInfo {\r\n host: string\r\n port: number\r\n pool_size: number\r\n active_connections: number\r\n idle_connections: number\r\n average_latency_ms: number\r\n}\r\n\r\n/**\r\n * Ping Redis server for connectivity check\r\n *\r\n * @returns \"PONG\" if connected, error message otherwise\r\n *\r\n * @example\r\n * ```ts\r\n * const response = redisPing()\r\n * if (response === \"PONG\") console.log(\"Connected\")\r\n * ```\r\n */\r\nexport function redisPing(): string {\r\n const native = getNativeBridge()\r\n if (!native?.redis_ping) throw new Error(\"redis_ping not available\")\r\n return native.redis_ping()\r\n}\r\n\r\n/**\r\n * Get value from Redis\r\n *\r\n * @param key - Cache key\r\n * @returns Value if found, null if not found\r\n *\r\n * @example\r\n * ```ts\r\n * const value = redisGet('compiled:bg-blue-600')\r\n * if (value) console.log(JSON.parse(value))\r\n * ```\r\n */\r\nexport function redisGet(key: string): string | null {\r\n const native = getNativeBridge()\r\n if (!native?.redis_get) throw new Error(\"redis_get not available\")\r\n const result = native.redis_get(key)\r\n return result === \"nil\" ? null : result\r\n}\r\n\r\n/**\r\n * Set value in Redis\r\n *\r\n * @param key - Cache key\r\n * @param value - Value to store\r\n * @param ttl_seconds - Time to live in seconds (optional)\r\n * @returns \"OK\" on success\r\n *\r\n * @example\r\n * ```ts\r\n * redisSet('compiled:bg-blue-600', JSON.stringify(css), 3600)\r\n * ```\r\n */\r\nexport function redisSet(key: string, value: string, ttl_seconds?: number): string {\r\n const native = getNativeBridge()\r\n if (!native?.redis_set) throw new Error(\"redis_set not available\")\r\n return native.redis_set(key, value, ttl_seconds)\r\n}\r\n\r\n/**\r\n * Delete key from Redis\r\n *\r\n * @param key - Cache key\r\n * @returns Number of keys deleted\r\n *\r\n * @example\r\n * ```ts\r\n * const deleted = redisDelete('compiled:bg-blue-600')\r\n * console.log(`Deleted ${deleted} keys`)\r\n * ```\r\n */\r\nexport function redisDelete(key: string): number {\r\n const native = getNativeBridge()\r\n if (!native?.redis_delete) throw new Error(\"redis_delete not available\")\r\n return native.redis_delete(key)\r\n}\r\n\r\n/**\r\n * Check if key exists in Redis\r\n *\r\n * @param key - Cache key\r\n * @returns 1 if exists, 0 if not\r\n *\r\n * @example\r\n * ```ts\r\n * if (redisExists('compiled:bg-blue-600')) {\r\n * console.log('Cache hit')\r\n * }\r\n * ```\r\n */\r\nexport function redisExists(key: string): number {\r\n const native = getNativeBridge()\r\n if (!native?.redis_exists) throw new Error(\"redis_exists not available\")\r\n return native.redis_exists(key)\r\n}\r\n\r\n/**\r\n * Get multiple values from Redis (atomic operation)\r\n *\r\n * @param keys - Array of cache keys\r\n * @returns Array of values (null for missing keys)\r\n *\r\n * @example\r\n * ```ts\r\n * const values = redisMget(['key1', 'key2', 'key3'])\r\n * ```\r\n */\r\nexport function redisMget(keys: string[]): Array<string | null> {\r\n const native = getNativeBridge()\r\n if (!native?.redis_mget) throw new Error(\"redis_mget not available\")\r\n const result = native.redis_mget(keys)\r\n try {\r\n return JSON.parse(result)\r\n } catch {\r\n return keys.map(() => null)\r\n }\r\n}\r\n\r\n/**\r\n * Set multiple key-value pairs in Redis (atomic operation)\r\n *\r\n * @param pairs - Array of [key, value] tuples\r\n * @returns \"OK\" on success\r\n *\r\n * @example\r\n * ```ts\r\n * redisMset([\r\n * ['key1', 'value1'],\r\n * ['key2', 'value2']\r\n * ])\r\n * ```\r\n */\r\nexport function redisMset(pairs: Array<[string, string]>): string {\r\n const native = getNativeBridge()\r\n if (!native?.redis_mset) throw new Error(\"redis_mset not available\")\r\n return native.redis_mset(pairs)\r\n}\r\n\r\n/**\r\n * Flush all keys from current Redis database\r\n *\r\n * @returns Number of keys deleted\r\n *\r\n * @example\r\n * ```ts\r\n * const flushed = redisFlushDb()\r\n * console.log(`Flushed ${flushed} keys from database`)\r\n * ```\r\n */\r\nexport function redisFlushDb(): number {\r\n const native = getNativeBridge()\r\n if (!native?.redis_flush_db) throw new Error(\"redis_flush_db not available\")\r\n return native.redis_flush_db()\r\n}\r\n\r\n/**\r\n * Flush all keys from all Redis databases (cluster-wide)\r\n *\r\n * @returns Number of keys deleted\r\n *\r\n * @example\r\n * ```ts\r\n * const flushed = redisFlushAll()\r\n * console.log(`Flushed ${flushed} keys from all databases`)\r\n * ```\r\n */\r\nexport function redisFlushAll(): number {\r\n const native = getNativeBridge()\r\n if (!native?.redis_flush_all) throw new Error(\"redis_flush_all not available\")\r\n return native.redis_flush_all()\r\n}\r\n\r\n/**\r\n * Initialize Redis connection pool\r\n *\r\n * @param host - Redis host (e.g., \"localhost\")\r\n * @param port - Redis port (default: 6379)\r\n * @param pool_size - Connection pool size (default: 32)\r\n * @returns Pool info JSON\r\n *\r\n * @example\r\n * ```ts\r\n * const info = redisPoolConnect('localhost', 6379, 32)\r\n * console.log(info)\r\n * ```\r\n */\r\nexport function redisPoolConnect(host: string, port: number, pool_size?: number): string {\r\n const native = getNativeBridge()\r\n if (!native?.redis_pool_connect) throw new Error(\"redis_pool_connect not available\")\r\n return native.redis_pool_connect(host, port, pool_size)\r\n}\r\n\r\n/**\r\n * Get Redis pool statistics\r\n *\r\n * @returns Pool stats as JSON string\r\n *\r\n * @example\r\n * ```ts\r\n * const stats = redisPoolStats()\r\n * const parsed: RedisPoolStats = JSON.parse(stats)\r\n * console.log(`Connected: ${parsed.connected_count}`)\r\n * ```\r\n */\r\nexport function redisPoolStats(): RedisPoolStats {\r\n const native = getNativeBridge()\r\n if (!native?.redis_pool_stats) throw new Error(\"redis_pool_stats not available\")\r\n const result = native.redis_pool_stats()\r\n try {\r\n return JSON.parse(result)\r\n } catch {\r\n return {\r\n connected_count: 0,\r\n idle_count: 0,\r\n waiting_count: 0,\r\n total_requests: 0,\r\n total_errors: 0,\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Reconnect Redis pool after disconnect\r\n *\r\n * @returns \"OK\" if reconnected\r\n *\r\n * @example\r\n * ```ts\r\n * const result = redisPoolReconnect()\r\n * console.log(result)\r\n * ```\r\n */\r\nexport function redisPoolReconnect(): string {\r\n const native = getNativeBridge()\r\n if (!native?.redis_pool_reconnect) throw new Error(\"redis_pool_reconnect not available\")\r\n return native.redis_pool_reconnect()\r\n}\r\n\r\n/**\r\n * Enable Redis cluster mode\r\n *\r\n * @param initial_nodes - Initial cluster nodes (host:port format)\r\n * @returns Cluster status JSON\r\n *\r\n * @example\r\n * ```ts\r\n * const status = redisEnableCluster(['localhost:6379', 'localhost:6380'])\r\n * ```\r\n */\r\nexport function redisEnableCluster(initial_nodes: string[]): RedisClusterStatus {\r\n const native = getNativeBridge()\r\n if (!native?.redis_enable_cluster) throw new Error(\"redis_enable_cluster not available\")\r\n const result = native.redis_enable_cluster(initial_nodes)\r\n try {\r\n return JSON.parse(result)\r\n } catch {\r\n return {\r\n enabled: false,\r\n cluster_state: \"error\",\r\n nodes: [],\r\n slots_assigned: 0,\r\n slots_ok: 0,\r\n slots_fail: 0,\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Disable Redis cluster mode\r\n *\r\n * @returns \"OK\" when disabled\r\n *\r\n * @example\r\n * ```ts\r\n * const result = redisDisableCluster()\r\n * ```\r\n */\r\nexport function redisDisableCluster(): string {\r\n const native = getNativeBridge()\r\n if (!native?.redis_disable_cluster) throw new Error(\"redis_disable_cluster not available\")\r\n return native.redis_disable_cluster()\r\n}\r\n\r\n/**\r\n * Get current Redis cluster status\r\n *\r\n * @returns Cluster status information\r\n *\r\n * @example\r\n * ```ts\r\n * const status = redisClusterStatus()\r\n * if (status.enabled) console.log(`Cluster has ${status.nodes.length} nodes`)\r\n * ```\r\n */\r\nexport function redisClusterStatus(): RedisClusterStatus {\r\n const native = getNativeBridge()\r\n if (!native?.redis_cluster_status) throw new Error(\"redis_cluster_status not available\")\r\n const result = native.redis_cluster_status()\r\n try {\r\n return JSON.parse(result)\r\n } catch {\r\n return {\r\n enabled: false,\r\n cluster_state: \"unknown\",\r\n nodes: [],\r\n slots_assigned: 0,\r\n slots_ok: 0,\r\n slots_fail: 0,\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Subscribe to Redis pub/sub channel\r\n *\r\n * @param channel - Channel name\r\n * @param callback - Function to call on message (optional)\r\n * @returns Subscription ID\r\n *\r\n * @example\r\n * ```ts\r\n * const id = redisSubscribe('cache:updates', (msg) => {\r\n * console.log(`Update: ${msg.message}`)\r\n * })\r\n * ```\r\n */\r\nexport function redisSubscribe(channel: string): string {\r\n const native = getNativeBridge()\r\n if (!native?.redis_subscribe) throw new Error(\"redis_subscribe not available\")\r\n return native.redis_subscribe(channel)\r\n}\r\n\r\n/**\r\n * Publish message to Redis pub/sub channel\r\n *\r\n * @param channel - Channel name\r\n * @param message - Message to publish\r\n * @returns Number of subscribers that received the message\r\n *\r\n * @example\r\n * ```ts\r\n * const count = redisPublish('cache:updates', 'CSS compiled')\r\n * console.log(`Delivered to ${count} subscribers`)\r\n * ```\r\n */\r\nexport function redisPublish(channel: string, message: string): number {\r\n const native = getNativeBridge()\r\n if (!native?.redis_publish) throw new Error(\"redis_publish not available\")\r\n return native.redis_publish(channel, message)\r\n}\r\n\r\n/**\r\n * Set expiration on key\r\n *\r\n * @param key - Cache key\r\n * @param ttl_seconds - Time to live in seconds\r\n * @returns 1 if timeout set, 0 if key doesn't exist\r\n *\r\n * @example\r\n * ```ts\r\n * redisExpirationSet('compiled:bg-blue-600', 3600)\r\n * ```\r\n */\r\nexport function redisExpirationSet(key: string, ttl_seconds: number): number {\r\n const native = getNativeBridge()\r\n if (!native?.redis_expiration_set) throw new Error(\"redis_expiration_set not available\")\r\n return native.redis_expiration_set(key, ttl_seconds)\r\n}\r\n\r\n/**\r\n * Get expiration info for key\r\n *\r\n * @param key - Cache key\r\n * @returns Expiration information\r\n *\r\n * @example\r\n * ```ts\r\n * const info = redisExpirationGet('compiled:bg-blue-600')\r\n * console.log(`TTL: ${info.ttl_seconds} seconds`)\r\n * ```\r\n */\r\nexport function redisExpirationGet(key: string): KeyExpiration {\r\n const native = getNativeBridge()\r\n if (!native?.redis_expiration_get) throw new Error(\"redis_expiration_get not available\")\r\n const result = native.redis_expiration_get(key)\r\n try {\r\n return JSON.parse(result)\r\n } catch {\r\n return {\r\n key,\r\n ttl_seconds: -1,\r\n expiration_timestamp: 0,\r\n is_persistent: true,\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Get Redis server info\r\n *\r\n * @returns Server information JSON\r\n *\r\n * @example\r\n * ```ts\r\n * const info = redisInfo()\r\n * ```\r\n */\r\nexport function redisInfo(): string {\r\n const native = getNativeBridge()\r\n if (!native?.redis_info) throw new Error(\"redis_info not available\")\r\n return native.redis_info()\r\n}\r\n\r\n/**\r\n * Monitor Redis operations in real-time (for debugging)\r\n *\r\n * @returns Monitor output stream\r\n *\r\n * @example\r\n * ```ts\r\n * const monitor = redisMonitor()\r\n * // Logs all Redis operations\r\n * ```\r\n */\r\nexport function redisMonitor(): string {\r\n const native = getNativeBridge()\r\n if (!native?.redis_monitor) throw new Error(\"redis_monitor not available\")\r\n return native.redis_monitor()\r\n}\r\n\r\n/**\r\n * Get size of cache in bytes\r\n *\r\n * @returns Total memory usage in bytes\r\n *\r\n * @example\r\n * ```ts\r\n * const bytes = redisCacheSize()\r\n * console.log(`Cache: ${bytes / 1024 / 1024} MB`)\r\n * ```\r\n */\r\nexport function redisCacheSize(): number {\r\n const native = getNativeBridge()\r\n if (!native?.redis_cache_size) throw new Error(\"redis_cache_size not available\")\r\n return native.redis_cache_size()\r\n}\r\n\r\n/**\r\n * Get number of keys in cache\r\n *\r\n * @returns Total key count\r\n *\r\n * @example\r\n * ```ts\r\n * const count = redisCacheKeyCount()\r\n * console.log(`Cached keys: ${count}`)\r\n * ```\r\n */\r\nexport function redisCacheKeyCount(): number {\r\n const native = getNativeBridge()\r\n if (!native?.redis_cache_key_count) throw new Error(\"redis_cache_key_count not available\")\r\n return native.redis_cache_key_count()\r\n}\r\n\r\n/**\r\n * Clear Redis cache and reset statistics\r\n *\r\n * @returns Number of keys cleared\r\n *\r\n * @example\r\n * ```ts\r\n * const cleared = redisCacheClear()\r\n * console.log(`Cleared ${cleared} keys`)\r\n * ```\r\n */\r\nexport function redisCacheClear(): number {\r\n const native = getNativeBridge()\r\n if (!native?.redis_cache_clear) throw new Error(\"redis_cache_clear not available\")\r\n return native.redis_cache_clear()\r\n}\r\n\r\n/**\r\n * Get Redis cache hit rate statistics\r\n *\r\n * @returns Hit rate percentage (0-100)\r\n *\r\n * @example\r\n * ```ts\r\n * const hitRate = redisCacheHitRate()\r\n * console.log(`Hit rate: ${hitRate}%`)\r\n * ```\r\n */\r\nexport function redisCacheHitRate(): number {\r\n const native = getNativeBridge()\r\n if (!native?.redis_cache_hit_rate) throw new Error(\"redis_cache_hit_rate not available\")\r\n return native.redis_cache_hit_rate()\r\n}\r\n\r\n/**\r\n * Enable Redis persistence (AOF/RDB)\r\n *\r\n * @param mode - \"aof\" or \"rdb\"\r\n * @returns \"OK\" on success\r\n *\r\n * @example\r\n * ```ts\r\n * redisEnablePersistence('aof')\r\n * ```\r\n */\r\nexport function redisEnablePersistence(mode: string): string {\r\n const native = getNativeBridge()\r\n if (!native?.redis_enable_persistence) throw new Error(\"redis_enable_persistence not available\")\r\n return native.redis_enable_persistence(mode)\r\n}\r\n\r\n/**\r\n * Disable Redis persistence\r\n *\r\n * @returns \"OK\" on success\r\n *\r\n * @example\r\n * ```ts\r\n * redisDisablePersistence()\r\n * ```\r\n */\r\nexport function redisDisablePersistence(): string {\r\n const native = getNativeBridge()\r\n if (!native?.redis_disable_persistence) throw new Error(\"redis_disable_persistence not available\")\r\n return native.redis_disable_persistence()\r\n}\r\n\r\n/**\r\n * Save Redis data to disk (snapshot)\r\n *\r\n * @returns \"OK\" on success\r\n *\r\n * @example\r\n * ```ts\r\n * redisSnapshot()\r\n * ```\r\n */\r\nexport function redisSnapshot(): string {\r\n const native = getNativeBridge()\r\n if (!native?.redis_snapshot) throw new Error(\"redis_snapshot not available\")\r\n return native.redis_snapshot()\r\n}\r\n\r\n/**\r\n * Get Redis memory statistics and recommendations\r\n *\r\n * @returns Memory info JSON\r\n *\r\n * @example\r\n * ```ts\r\n * const memory = redisMemoryStats()\r\n * console.log(memory)\r\n * ```\r\n */\r\nexport function redisMemoryStats(): string {\r\n const native = getNativeBridge()\r\n if (!native?.redis_memory_stats) throw new Error(\"redis_memory_stats not available\")\r\n return native.redis_memory_stats()\r\n}\r\n\r\n/**\r\n * Optimize Redis memory usage\r\n *\r\n * @returns Number of keys optimized\r\n *\r\n * @example\r\n * ```ts\r\n * const optimized = redisOptimizeMemory()\r\n * console.log(`Optimized ${optimized} keys`)\r\n * ```\r\n */\r\nexport function redisOptimizeMemory(): number {\r\n const native = getNativeBridge()\r\n if (!native?.redis_optimize_memory) throw new Error(\"redis_optimize_memory not available\")\r\n return native.redis_optimize_memory()\r\n}\r\n\r\n/**\r\n * Set Redis key eviction policy\r\n *\r\n * @param policy - LRU, LFU, TTL, RANDOM, etc.\r\n * @returns \"OK\" on success\r\n *\r\n * @example\r\n * ```ts\r\n * redisSetEvictionPolicy('allkeys-lru')\r\n * ```\r\n */\r\nexport function redisSetEvictionPolicy(policy: string): string {\r\n const native = getNativeBridge()\r\n if (!native?.redis_set_eviction_policy) throw new Error(\"redis_set_eviction_policy not available\")\r\n return native.redis_set_eviction_policy(policy)\r\n}\r\n\r\n/**\r\n * Get current Redis eviction policy\r\n *\r\n * @returns Current policy name\r\n *\r\n * @example\r\n * ```ts\r\n * const policy = redisGetEvictionPolicy()\r\n * console.log(`Eviction policy: ${policy}`)\r\n * ```\r\n */\r\nexport function redisGetEvictionPolicy(): string {\r\n const native = getNativeBridge()\r\n if (!native?.redis_get_eviction_policy) throw new Error(\"redis_get_eviction_policy not available\")\r\n return native.redis_get_eviction_policy()\r\n}\r\n\r\n/**\r\n * Replicate data to another Redis instance\r\n *\r\n * @param target_host - Target host\r\n * @param target_port - Target port\r\n * @returns Number of keys replicated\r\n *\r\n * @example\r\n * ```ts\r\n * const replicated = redisReplicate('replica.example.com', 6379)\r\n * console.log(`Replicated ${replicated} keys`)\r\n * ```\r\n */\r\nexport function redisReplicate(target_host: string, target_port: number): number {\r\n const native = getNativeBridge()\r\n if (!native?.redis_replicate) throw new Error(\"redis_replicate not available\")\r\n return native.redis_replicate(target_host, target_port)\r\n}\r\n\r\n/**\r\n * Get replication status\r\n *\r\n * @returns Replication info JSON\r\n *\r\n * @example\r\n * ```ts\r\n * const status = redisReplicationStatus()\r\n * console.log(status)\r\n * ```\r\n */\r\nexport function redisReplicationStatus(): string {\r\n const native = getNativeBridge()\r\n if (!native?.redis_replication_status) throw new Error(\"redis_replication_status not available\")\r\n return native.redis_replication_status()\r\n}\r\n\r\n/**\r\n * Sync cache between Redis instances (distributed cache sync)\r\n *\r\n * @param peers - Array of peer Redis addresses\r\n * @returns Number of keys synced\r\n *\r\n * @example\r\n * ```ts\r\n * const synced = redisCacheSync(['redis1:6379', 'redis2:6379'])\r\n * console.log(`Synced ${synced} keys`)\r\n * ```\r\n */\r\nexport function redisCacheSync(peers: string[]): number {\r\n const native = getNativeBridge()\r\n if (!native?.redis_cache_sync) throw new Error(\"redis_cache_sync not available\")\r\n return native.redis_cache_sync(peers)\r\n}\r\n\r\n/**\r\n * Enable automatic cache warming\r\n *\r\n * @param key_pattern - Glob pattern for keys to warm (e.g., \"compiled:*\")\r\n * @returns \"OK\" on success\r\n *\r\n * @example\r\n * ```ts\r\n * redisEnableCacheWarming('compiled:*')\r\n * ```\r\n */\r\nexport function redisEnableCacheWarming(key_pattern: string): string {\r\n const native = getNativeBridge()\r\n if (!native?.redis_enable_cache_warming) throw new Error(\"redis_enable_cache_warming not available\")\r\n return native.redis_enable_cache_warming(key_pattern)\r\n}\r\n\r\n/**\r\n * Disable cache warming\r\n *\r\n * @returns \"OK\" on success\r\n *\r\n * @example\r\n * ```ts\r\n * redisDisableCacheWarming()\r\n * ```\r\n */\r\nexport function redisDisableCacheWarming(): string {\r\n const native = getNativeBridge()\r\n if (!native?.redis_disable_cache_warming) throw new Error(\"redis_disable_cache_warming not available\")\r\n return native.redis_disable_cache_warming()\r\n}\r\n\r\n/**\r\n * Diagnose Redis connection issues\r\n *\r\n * @returns Diagnostic report\r\n *\r\n * @example\r\n * ```ts\r\n * const diagnosis = redisDiagnose()\r\n * console.log(diagnosis)\r\n * ```\r\n */\r\nexport function redisDiagnose(): string {\r\n const native = getNativeBridge()\r\n if (!native?.redis_diagnose) throw new Error(\"redis_diagnose not available\")\r\n return native.redis_diagnose()\r\n}\r\n","/**\r\n * Redis Sub-entry Point\r\n * \r\n * Exports Redis and distributed cache functionality.\r\n * - Redis operations (get, set, delete, etc.)\r\n * - Redis pool management\r\n * - Cluster management\r\n * - Cache synchronization\r\n * - Persistence management\r\n */\r\n\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 * watchSystemNative.ts\r\n *\r\n * Phase 5.4: Watch System & File Monitoring - Real-time CSS recompilation\r\n * Exposes 12 watch/monitoring functions for hot-reload and incremental compilation\r\n */\r\n\r\nimport { getNativeBridge } from \"../nativeBridge\"\r\n\r\n/**\r\n * File watch event\r\n */\r\nexport interface WatchEvent {\r\n event_type: \"create\" | \"modify\" | \"delete\" | \"rename\"\r\n file_path: string\r\n timestamp_ms: number\r\n is_dir: boolean\r\n}\r\n\r\n/**\r\n * Watch handle for tracking active watchers\r\n */\r\nexport interface WatchHandle {\r\n handle_id: number\r\n patterns: string[]\r\n is_running: boolean\r\n created_at_ms: number\r\n}\r\n\r\n/**\r\n * Watch statistics\r\n */\r\nexport interface WatchStats {\r\n active_watchers: number\r\n total_events: number\r\n events_this_second: number\r\n average_latency_ms: number\r\n largest_batch_size: number\r\n}\r\n\r\n/**\r\n * Start file system watcher for directory\r\n *\r\n * @param root_path - Directory to watch\r\n * @param patterns - Glob patterns to match (e.g., [\"*.tsx\", \"*.ts\"])\r\n * @returns Handle ID for the watcher\r\n *\r\n * @example\r\n * ```ts\r\n * const handle = startWatch('./src', ['*.tsx', '*.ts'])\r\n * // Watcher is now active\r\n * ```\r\n */\r\nexport function startWatch(root_path: string, patterns?: string[]): number {\r\n const native = getNativeBridge()\r\n if (!native?.start_watch) throw new Error(\"start_watch not available\")\r\n return native.start_watch(root_path, patterns)\r\n}\r\n\r\n/**\r\n * Poll for watch events (non-blocking)\r\n *\r\n * @param handle - Watcher handle from startWatch()\r\n * @param timeout_ms - Max time to wait for events (default: 100)\r\n * @returns Array of watch events\r\n *\r\n * @example\r\n * ```ts\r\n * const handle = startWatch('./src', ['*.tsx'])\r\n * const events = pollWatchEvents(handle, 100)\r\n * events.forEach(evt => {\r\n * console.log(`${evt.event_type}: ${evt.file_path}`)\r\n * })\r\n * ```\r\n */\r\nexport function pollWatchEvents(handle: number, timeout_ms?: number): WatchEvent[] {\r\n const native = getNativeBridge()\r\n if (!native?.poll_watch_events) throw new Error(\"poll_watch_events not available\")\r\n const result = native.poll_watch_events(handle, timeout_ms)\r\n try {\r\n return JSON.parse(result)\r\n } catch {\r\n return []\r\n }\r\n}\r\n\r\n/**\r\n * Stop file system watcher\r\n *\r\n * @param handle - Watcher handle\r\n * @returns Number of events processed before stopping\r\n *\r\n * @example\r\n * ```ts\r\n * const eventsProcessed = stopWatch(handle)\r\n * console.log(`Watcher processed ${eventsProcessed} events`)\r\n * ```\r\n */\r\nexport function stopWatch(handle: number): number {\r\n const native = getNativeBridge()\r\n if (!native?.stop_watch) throw new Error(\"stop_watch not available\")\r\n return native.stop_watch(handle)\r\n}\r\n\r\n/**\r\n * Add pattern to active watcher\r\n *\r\n * @param handle - Watcher handle\r\n * @param pattern - Glob pattern to add (e.g., \"*.md\")\r\n * @returns \"OK\" on success\r\n *\r\n * @example\r\n * ```ts\r\n * watchAddPattern(handle, '*.md')\r\n * // Now watching markdown files too\r\n * ```\r\n */\r\nexport function watchAddPattern(handle: number, pattern: string): string {\r\n const native = getNativeBridge()\r\n if (!native?.watch_add_pattern) throw new Error(\"watch_add_pattern not available\")\r\n return native.watch_add_pattern(handle, pattern)\r\n}\r\n\r\n/**\r\n * Remove pattern from watcher\r\n *\r\n * @param handle - Watcher handle\r\n * @param pattern - Pattern to remove\r\n * @returns \"OK\" on success\r\n *\r\n * @example\r\n * ```ts\r\n * watchRemovePattern(handle, '*.md')\r\n * ```\r\n */\r\nexport function watchRemovePattern(handle: number, pattern: string): string {\r\n const native = getNativeBridge()\r\n if (!native?.watch_remove_pattern) throw new Error(\"watch_remove_pattern not available\")\r\n return native.watch_remove_pattern(handle, pattern)\r\n}\r\n\r\n/**\r\n * Get all active watcher handles\r\n *\r\n * @returns Array of active watch handles\r\n *\r\n * @example\r\n * ```ts\r\n * const handles = watchGetActiveHandles()\r\n * console.log(`${handles.length} active watchers`)\r\n * ```\r\n */\r\nexport function watchGetActiveHandles(): WatchHandle[] {\r\n const native = getNativeBridge()\r\n if (!native?.watch_get_active_handles) throw new Error(\"watch_get_active_handles not available\")\r\n const result = native.watch_get_active_handles()\r\n try {\r\n return JSON.parse(result)\r\n } catch {\r\n return []\r\n }\r\n}\r\n\r\n/**\r\n * Clear all active watchers\r\n *\r\n * @returns Number of watchers cleared\r\n *\r\n * @example\r\n * ```ts\r\n * const cleared = watchClearAll()\r\n * console.log(`Cleared ${cleared} watchers`)\r\n * ```\r\n */\r\nexport function watchClearAll(): number {\r\n const native = getNativeBridge()\r\n if (!native?.watch_clear_all) throw new Error(\"watch_clear_all not available\")\r\n return native.watch_clear_all()\r\n}\r\n\r\n/**\r\n * Convert watch event type to string\r\n *\r\n * @param event_type_code - Event type code (0-3)\r\n * @returns Event type as string\r\n *\r\n * @example\r\n * ```ts\r\n * const typeStr = watchEventTypeToString(0)\r\n * console.log(typeStr) // \"create\"\r\n * ```\r\n */\r\nexport function watchEventTypeToString(event_type_code: number): string {\r\n const native = getNativeBridge()\r\n if (!native?.watch_event_type_to_string) throw new Error(\"watch_event_type_to_string not available\")\r\n return native.watch_event_type_to_string(event_type_code)\r\n}\r\n\r\n/**\r\n * Check if watcher is running\r\n *\r\n * @param handle - Watcher handle\r\n * @returns True if running\r\n *\r\n * @example\r\n * ```ts\r\n * if (isWatchRunning(handle)) {\r\n * console.log(\"Watcher is active\")\r\n * }\r\n * ```\r\n */\r\nexport function isWatchRunning(handle: number): boolean {\r\n const native = getNativeBridge()\r\n if (!native?.is_watch_running) throw new Error(\"is_watch_running not available\")\r\n return native.is_watch_running(handle)\r\n}\r\n\r\n/**\r\n * Get watch system statistics\r\n *\r\n * @returns Watch statistics\r\n *\r\n * @example\r\n * ```ts\r\n * const stats = getWatchStats()\r\n * console.log(`Active: ${stats.active_watchers}, Events: ${stats.total_events}`)\r\n * ```\r\n */\r\nexport function getWatchStats(): WatchStats {\r\n const native = getNativeBridge()\r\n if (!native?.get_watch_stats) throw new Error(\"get_watch_stats not available\")\r\n const result = native.get_watch_stats()\r\n try {\r\n return JSON.parse(result)\r\n } catch {\r\n return {\r\n active_watchers: 0,\r\n total_events: 0,\r\n events_this_second: 0,\r\n average_latency_ms: 0,\r\n largest_batch_size: 0,\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Pause watching (pause event delivery without stopping watcher)\r\n *\r\n * @param handle - Watcher handle\r\n * @returns \"OK\" on success\r\n *\r\n * @example\r\n * ```ts\r\n * watchPause(handle)\r\n * // Events still detected but not delivered\r\n * ```\r\n */\r\nexport function watchPause(handle: number): string {\r\n const native = getNativeBridge()\r\n if (!native?.watch_pause) throw new Error(\"watch_pause not available\")\r\n return native.watch_pause(handle)\r\n}\r\n\r\n/**\r\n * Resume watching after pause\r\n *\r\n * @param handle - Watcher handle\r\n * @returns \"OK\" on success\r\n *\r\n * @example\r\n * ```ts\r\n * watchResume(handle)\r\n * // Event delivery resumes\r\n * ```\r\n */\r\nexport function watchResume(handle: number): string {\r\n const native = getNativeBridge()\r\n if (!native?.watch_resume) throw new Error(\"watch_resume not available\")\r\n return native.watch_resume(handle)\r\n}\r\n\r\n/**\r\n * Scan cache and get optimization recommendations\r\n *\r\n * @returns Optimization hints JSON\r\n *\r\n * @example\r\n * ```ts\r\n * const hints = scanCacheOptimizations()\r\n * console.log(hints)\r\n * ```\r\n */\r\nexport function scanCacheOptimizations(): string {\r\n const native = getNativeBridge()\r\n if (!native?.scan_cache_optimizations) throw new Error(\"scan_cache_optimizations not available\")\r\n return native.scan_cache_optimizations()\r\n}\r\n\r\n/**\r\n * Get plugin hook list\r\n *\r\n * @returns Available plugin hooks\r\n *\r\n * @example\r\n * ```ts\r\n * const hooks = getPluginHooks()\r\n * console.log(hooks)\r\n * ```\r\n */\r\nexport function getPluginHooks(): string[] {\r\n const native = getNativeBridge()\r\n if (!native?.get_plugin_hooks) throw new Error(\"get_plugin_hooks not available\")\r\n const result = native.get_plugin_hooks()\r\n try {\r\n return JSON.parse(result)\r\n } catch {\r\n return []\r\n }\r\n}\r\n\r\n/**\r\n * Register plugin hook handler\r\n *\r\n * @param hook_name - Hook name\r\n * @param handler_id - Handler identifier\r\n * @returns \"OK\" on success\r\n *\r\n * @example\r\n * ```ts\r\n * registerPluginHook('compile:before', 'my-handler-1')\r\n * ```\r\n */\r\nexport function registerPluginHook(hook_name: string, handler_id: string): string {\r\n const native = getNativeBridge()\r\n if (!native?.register_plugin_hook) throw new Error(\"register_plugin_hook not available\")\r\n return native.register_plugin_hook(hook_name, handler_id)\r\n}\r\n\r\n/**\r\n * Unregister plugin hook handler\r\n *\r\n * @param hook_name - Hook name\r\n * @param handler_id - Handler identifier\r\n * @returns \"OK\" on success\r\n *\r\n * @example\r\n * ```ts\r\n * unregisterPluginHook('compile:before', 'my-handler-1')\r\n * ```\r\n */\r\nexport function unregisterPluginHook(hook_name: string, handler_id: string): string {\r\n const native = getNativeBridge()\r\n if (!native?.unregister_plugin_hook) throw new Error(\"unregister_plugin_hook not available\")\r\n return native.unregister_plugin_hook(hook_name, handler_id)\r\n}\r\n\r\n/**\r\n * Emit plugin hook event\r\n *\r\n * @param hook_name - Hook name\r\n * @param data_json - Event data as JSON\r\n * @returns Modified data\r\n *\r\n * @example\r\n * ```ts\r\n * const result = emitPluginHook('compile:before', JSON.stringify({css: '...'}))\r\n * ```\r\n */\r\nexport function emitPluginHook(hook_name: string, data_json: string): string {\r\n const native = getNativeBridge()\r\n if (!native?.emit_plugin_hook) throw new Error(\"emit_plugin_hook not available\")\r\n return native.emit_plugin_hook(hook_name, data_json)\r\n}\r\n\r\n/**\r\n * Get compilation performance metrics\r\n *\r\n * @returns Performance metrics\r\n *\r\n * @example\r\n * ```ts\r\n * const metrics = getCompilationMetrics()\r\n * console.log(metrics)\r\n * ```\r\n */\r\nexport function getCompilationMetrics(): string {\r\n const native = getNativeBridge()\r\n if (!native?.get_compilation_metrics) throw new Error(\"get_compilation_metrics not available\")\r\n return native.get_compilation_metrics()\r\n}\r\n\r\n/**\r\n * Reset compilation performance counters\r\n *\r\n * @returns \"OK\" on success\r\n *\r\n * @example\r\n * ```ts\r\n * resetCompilationMetrics()\r\n * ```\r\n */\r\nexport function resetCompilationMetrics(): string {\r\n const native = getNativeBridge()\r\n if (!native?.reset_compilation_metrics) throw new Error(\"reset_compilation_metrics not available\")\r\n return native.reset_compilation_metrics()\r\n}\r\n\r\n/**\r\n * Validate CSS output for errors\r\n *\r\n * @param css - CSS to validate\r\n * @returns Validation result as JSON\r\n *\r\n * @example\r\n * ```ts\r\n * const result = validateCssOutput('.test { color: red; }')\r\n * ```\r\n */\r\nexport function validateCssOutput(css: string): string {\r\n const native = getNativeBridge()\r\n if (!native?.validate_css_output) throw new Error(\"validate_css_output not available\")\r\n return native.validate_css_output(css)\r\n}\r\n\r\n/**\r\n * Get compiler diagnostics\r\n *\r\n * @returns Diagnostic information\r\n *\r\n * @example\r\n * ```ts\r\n * const diagnostics = getCompilerDiagnostics()\r\n * console.log(diagnostics)\r\n * ```\r\n */\r\nexport function getCompilerDiagnostics(): string {\r\n const native = getNativeBridge()\r\n if (!native?.get_compiler_diagnostics) throw new Error(\"get_compiler_diagnostics not available\")\r\n return native.get_compiler_diagnostics()\r\n}\r\n","/**\r\n * Watch Sub-entry Point\r\n * \r\n * Exports file watching and compilation monitoring functionality.\r\n * - File system watching\r\n * - Watch event polling and management\r\n * - Watch statistics\r\n * - Plugin hooks\r\n * - Compilation metrics\r\n */\r\n\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\n * tailwind-styled-v5 — Compiler Main Entry Point\r\n * \r\n * Re-exports all sub-entry points for backward compatibility.\r\n * For better tree-shaking, import from specific sub-entries:\r\n * - '@tailwind-styled/compiler/compiler' - CSS generation and compilation\r\n * - '@tailwind-styled/compiler/parser' - Class parsing and extraction\r\n * - '@tailwind-styled/compiler/analyzer' - Analysis and optimization\r\n * - '@tailwind-styled/compiler/cache' - Cache management\r\n * - '@tailwind-styled/compiler/redis' - Redis and distributed cache\r\n * - '@tailwind-styled/compiler/watch' - File watching and monitoring\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// RE-EXPORT ALL SUB-ENTRIES FOR BACKWARD COMPATIBILITY\r\n// ═══════════════════════════════════════════════════════════════════════════\r\n\r\n// Compiler sub-entry - CSS generation, compilation, ID registry, streaming\r\nexport * from './compiler'\r\n\r\n// Parser sub-entry - Class parsing and extraction\r\nexport * from './parser'\r\n\r\n// Analyzer sub-entry - Analysis, optimization, theme resolution\r\nexport * from './analyzer'\r\n\r\n// Cache sub-entry - Cache management\r\nexport * from './cache'\r\n\r\n// Redis sub-entry - Redis and distributed cache\r\nexport * from './redis'\r\n\r\n// Watch sub-entry - File watching and monitoring\r\nexport * from './watch'\r\n\r\n// ═══════════════════════════════════════════════════════════════════════════\r\n// TRANSFORM & CORE 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// ADDITIONAL UTILITIES\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 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 try {\r\n const { runCssPipeline } = await import(\"./compiler/tailwindEngine\")\r\n const result = await runCssPipeline(classes, cssEntryContent, root, minify)\r\n return result.css\r\n } catch {\r\n // Fallback if import fails\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(\" \"), {})\r\n return result?.code || \"\"\r\n }\r\n}\r\n\r\n// ═══════════════════════════════════════════════════════════════════════════\r\n// DEAD STYLE ELIMINATION\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 scanProjectUsage = (dirs: string[], cwd: string) => {\r\n // Import locally to avoid circular dependency\r\n const { batchExtractClasses } = require('./parser')\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// CONFIG & UTILITIES\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\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 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 EXTRACTION\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\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 INTERFACE\r\n// ═══════════════════════════════════════════════════════════════════════════\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\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 (err) {\r\n // Non-fatal — static CSS extraction failure should not break transform pipeline.\r\n console.debug(\"Static CSS extraction warning:\", err)\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 MANAGEMENT\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 class IncrementalEngine {\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 class BucketEngine {\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 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 const sorted = native.classifyAndSortClasses(classes)\r\n return sorted.map((c) => (c as { raw?: string }).raw ?? (c as unknown as string))\r\n}\r\n\r\n// ═══════════════════════════════════════════════════════════════════════════\r\n// RSC & FILE ANALYSIS CONTINUED\r\n// ═══════════════════════════════════════════════════════════════════════════\r\n\r\nexport const analyzeFile = (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 const rsc = native.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// 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 entries: TwStateConfigEntry[],\r\n _themeConfig?: Record<string, unknown>\r\n): GeneratedStateRule[] => {\r\n const rules: GeneratedStateRule[] = []\r\n for (const entry of entries) {\r\n const stateConfig = JSON.parse(entry.statesJson) as Record<string, string>\r\n for (const [stateName, classes] of Object.entries(stateConfig)) {\r\n rules.push({\r\n selector: `.${entry.componentName}[data-state=\"${stateName}\"]`,\r\n declarations: classes,\r\n cssRule: `.${entry.componentName}[data-state=\"${stateName}\"]{${classes}}`,\r\n componentName: entry.componentName,\r\n stateName,\r\n })\r\n }\r\n }\r\n return rules\r\n}\r\n\r\nexport const extractAndGenerateStateCss = (source: string, filename: string): GeneratedStateRule[] => {\r\n const entries = extractTwStateConfigs(source, filename)\r\n return generateStaticStateCss(entries)\r\n}\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 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 scanProjectUsage,\r\n extractComponentUsage,\r\n diffClassLists,\r\n batchExtractClasses,\r\n checkAgainstSafelist,\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 analyzeFile,\r\n analyzeVariantUsage,\r\n injectClientDirective,\r\n injectServerOnlyComment,\r\n analyzeClasses,\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 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 scanProjectUsage,\r\n extractComponentUsage,\r\n diffClassLists,\r\n batchExtractClasses,\r\n checkAgainstSafelist,\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 analyzeFile,\r\n analyzeVariantUsage,\r\n injectClientDirective,\r\n injectServerOnlyComment,\r\n analyzeClasses,\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, getCacheStats, clearCache, type CssPipelineResult } from \"./compiler/tailwindEngine\"\r\n\r\n// Re-export all sub-entries directly for convenience\r\nexport * from \"./compiler\"\r\nexport * from \"./parser\"\r\nexport * from \"./analyzer\"\r\nexport * from \"./cache\"\r\nexport * from \"./redis\"\r\nexport * from \"./watch\"\r\n\r\n","/**\r\n * staticStateExtractor.ts — Build-time State CSS Pre-generator\r\n *\r\n * Mengkoordinasi pipeline untuk mengeliminasi runtime CSS injection untuk `states` config.\r\n *\r\n * Flow:\r\n * 1. Walk semua source files (.ts/.tsx/.js/.jsx)\r\n * 2. Per file: panggil `extractTwStateConfigs()` (Rust NAPI)\r\n * → temukan semua `tw.tag({ states: {...} })` calls\r\n * 3. Kumpulkan semua configs, panggil `generateStaticStateCss()` (Rust NAPI)\r\n * → compute hash identik dengan runtime stateEngine.ts\r\n * → generate CSS rules dengan selector `.tw-s-[hash][data-stateName=\"true\"]`\r\n * 4. Append hasilnya ke safelist CSS file\r\n *\r\n * Hasilnya: browser load state CSS dari static file — ZERO runtime injection,\r\n * ZERO flicker saat component dengan states di-render.\r\n *\r\n * Dipanggil dari withTailwindStyled.ts setelah initial Tailwind CSS scan.\r\n *\r\n * @module staticStateExtractor\r\n */\r\n\r\nimport fs from \"node:fs\"\r\nimport path from \"node:path\"\r\n\r\n// ── Types (mirror dari native/src/application/state_css.rs) ────────────────\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 interface StaticStateExtractionResult {\r\n /** Total source files di-scan */\r\n filesScanned: number\r\n /** Files yang punya tw() state configs */\r\n filesWithStates: number\r\n /** Total komponen dengan states ditemukan */\r\n componentsFound: number\r\n /** Total CSS rules yang di-generate */\r\n rulesGenerated: number\r\n /** Rules yang tidak bisa di-resolve (butuh Tailwind full pipeline) */\r\n rulesSkipped: number\r\n /** CSS yang siap di-append ke safelist file */\r\n generatedCss: string\r\n /** Debug: semua rules yang di-generate */\r\n rules: GeneratedStateRule[]\r\n}\r\n\r\n// ── Source file extensions yang di-scan ────────────────────────────────────\r\n\r\nconst SOURCE_EXTENSIONS = new Set([\".ts\", \".tsx\", \".js\", \".jsx\", \".mts\", \".mjs\"])\r\nconst IGNORE_PATTERNS = [\"node_modules\", \".next\", \"dist\", \"build\", \".git\", \"coverage\", \"__tests__\"]\r\n\r\n// ── Native bridge lazy loader ───────────────────────────────────────────────\r\n\r\ninterface PrefilterFileResult {\r\n path: string\r\n content: string\r\n}\r\n\r\nlet _native: {\r\n extractTwStateConfigs: (source: string, filename: string) => TwStateConfigEntry[]\r\n generateStaticStateCss: (inputs: StaticStateCssInput[], resolvedCss?: string | null) => GeneratedStateRule[]\r\n extractAndGenerateStateCss: (source: string, filename: string) => GeneratedStateRule[]\r\n walkAndPrefilterSourceFiles?: (\r\n root: string,\r\n extensions?: string[] | null,\r\n ignoreDirs?: string[] | null,\r\n requiredSubstrings?: string[] | null,\r\n maxFiles?: number | null,\r\n parallel?: boolean | null,\r\n ) => PrefilterFileResult[]\r\n} | null = null\r\n\r\nfunction getNative() {\r\n if (_native) return _native\r\n try {\r\n // Pakai require dinamis — sama dengan pattern di file lain\r\n const mod = require(\"@tailwind-styled/compiler/internal\") as {\r\n extractTwStateConfigs?: (source: string, filename: string) => TwStateConfigEntry[]\r\n generateStaticStateCss?: (inputs: StaticStateCssInput[]) => GeneratedStateRule[]\r\n extractAndGenerateStateCss?: (source: string, filename: string) => GeneratedStateRule[]\r\n }\r\n if (\r\n typeof mod?.extractTwStateConfigs !== \"function\" ||\r\n typeof mod?.generateStaticStateCss !== \"function\"\r\n ) {\r\n return null\r\n }\r\n _native = {\r\n extractTwStateConfigs: mod.extractTwStateConfigs,\r\n generateStaticStateCss: mod.generateStaticStateCss,\r\n extractAndGenerateStateCss: mod.extractAndGenerateStateCss ?? (\r\n // Fallback jika extractAndGenerateStateCss belum di-export\r\n (source: string, filename: string) => {\r\n const configs = mod.extractTwStateConfigs!(source, filename)\r\n if (configs.length === 0) return []\r\n return mod.generateStaticStateCss!(configs.map((c) => ({\r\n tag: c.tag,\r\n componentName: c.componentName,\r\n statesJson: c.statesJson,\r\n })))\r\n }\r\n ),\r\n }\r\n return _native\r\n } catch {\r\n return null\r\n }\r\n}\r\n\r\n// ── File walker ──────────────────────────────────────────────────────────────\r\n\r\nfunction* walkSourceFiles(dir: string): Generator<string> {\r\n let entries: fs.Dirent[]\r\n try {\r\n entries = fs.readdirSync(dir, { withFileTypes: true })\r\n } catch {\r\n return\r\n }\r\n\r\n for (const entry of entries) {\r\n const fullPath = path.join(dir, entry.name)\r\n\r\n if (entry.isDirectory()) {\r\n if (IGNORE_PATTERNS.some((p) => entry.name === p || entry.name.startsWith(p))) continue\r\n yield* walkSourceFiles(fullPath)\r\n } else if (entry.isFile()) {\r\n const ext = path.extname(entry.name)\r\n if (SOURCE_EXTENSIONS.has(ext)) yield fullPath\r\n }\r\n }\r\n}\r\n\r\n// ── CSS generation header ────────────────────────────────────────────────────\r\n\r\nfunction buildCssHeader(result: StaticStateExtractionResult): string {\r\n return [\r\n \"/* ─────────────────────────────────────────────────────────────────────\",\r\n \" * tw-state-static.css — Auto-generated by staticStateExtractor.ts\",\r\n \" * DO NOT EDIT. Re-generated on each build.\",\r\n \" *\",\r\n ` * Files scanned: ${result.filesScanned}`,\r\n ` * Files with states: ${result.filesWithStates}`,\r\n ` * Components found: ${result.componentsFound}`,\r\n ` * Rules generated: ${result.rulesGenerated}`,\r\n ` * Rules skipped: ${result.rulesSkipped} (akan di-inject runtime sebagai fallback)`,\r\n \" *\",\r\n \" * Selector format: .tw-s-[hash][data-stateName=\\\"true\\\"] { ... }\",\r\n \" * Hash identik dengan yang dibuat oleh stateEngine.ts di runtime.\",\r\n \" * ─────────────────────────────────────────────────────────────────── */\",\r\n \"\",\r\n ].join(\"\\n\")\r\n}\r\n\r\n// ── Main API ─────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Scan semua source files di `srcDir`, extract tw() state configs,\r\n * generate static CSS, dan return hasilnya.\r\n *\r\n * @param srcDir Root directory untuk scan (biasanya `process.cwd()/src`)\r\n * @param options Optional configuration\r\n */\r\nexport function extractStaticStateCss(\r\n srcDir: string,\r\n options: {\r\n /** Emit debug logging */\r\n verbose?: boolean\r\n /** Max files untuk di-scan (default: unlimited) */\r\n maxFiles?: number\r\n /**\r\n * CSS output dari Tailwind pipeline (isi `_initial-scan.css`).\r\n *\r\n * Kalau di-provide, dipakai untuk resolve class names via `parseTailwindCssToClassMap`\r\n * → semua Tailwind class (termasuk `w-full`, `ring-2`, dll) bisa di-resolve dengan benar.\r\n *\r\n * Kalau tidak di-provide, fallback ke Rust resolver (hanya class sederhana yang ter-resolve).\r\n */\r\n resolvedCss?: string\r\n } = {}\r\n): StaticStateExtractionResult {\r\n const { verbose = false, maxFiles = Infinity } = options\r\n\r\n const native = getNative()\r\n if (!native) {\r\n if (verbose) {\r\n process.stderr.write(\r\n \"[tw:static-state] native module tidak tersedia — skip static CSS pre-generation\\n\"\r\n )\r\n }\r\n return {\r\n filesScanned: 0,\r\n filesWithStates: 0,\r\n componentsFound: 0,\r\n rulesGenerated: 0,\r\n rulesSkipped: 0,\r\n generatedCss: \"\",\r\n rules: [],\r\n }\r\n }\r\n\r\n // ── Step 1: Collect all configs dari semua source files ──────────────────\r\n\r\n const allConfigs: TwStateConfigEntry[] = []\r\n let filesScanned = 0\r\n let filesWithStates = 0\r\n\r\n // ── Fast path: walkAndPrefilterSourceFiles — walk + read + pre-filter di Rust ──\r\n // Eliminasi: JS fs.readdirSync recursive + fs.readFileSync per file +\r\n // JS String.includes() pre-filter. Rust fs::read_dir + contains() ~5-10x lebih cepat.\r\n if (native.walkAndPrefilterSourceFiles) {\r\n const prefiltered = native.walkAndPrefilterSourceFiles(\r\n srcDir,\r\n [\".ts\", \".tsx\", \".js\", \".jsx\", \".mts\", \".mjs\"],\r\n [\"node_modules\", \".next\", \"dist\", \"build\", \".git\", \"coverage\", \"__tests__\"],\r\n // Required substrings — AND logic, identik dengan JS pre-filter di bawah\r\n [\"states:\", \"tw.\"],\r\n maxFiles === Infinity ? null : maxFiles,\r\n null // sequential — parallel mode opsional untuk large monorepo\r\n )\r\n\r\n for (const { path: filePath, content: source } of prefiltered) {\r\n filesScanned++\r\n const configs = native.extractTwStateConfigs(source, filePath)\r\n if (configs.length > 0) {\r\n filesWithStates++\r\n allConfigs.push(...configs)\r\n if (verbose) {\r\n process.stderr.write(\r\n `[tw:static-state] ${path.relative(srcDir, filePath)}: ${configs.length} komponen\\n`\r\n )\r\n }\r\n }\r\n }\r\n } else {\r\n // ── Fallback: JS generator + readFileSync + JS pre-filter ────────────────\r\n for (const filePath of walkSourceFiles(srcDir)) {\r\n if (filesScanned >= maxFiles) break\r\n\r\n let source: string\r\n try {\r\n source = fs.readFileSync(filePath, \"utf-8\")\r\n } catch {\r\n continue\r\n }\r\n\r\n filesScanned++\r\n\r\n // Quick pre-filter — skip files tanpa states config\r\n if (!source.includes(\"states:\") && !source.includes(\"states :\")) continue\r\n if (!source.includes(\"tw.\") && !source.includes(\"tailwind-styled\")) continue\r\n\r\n const configs = native.extractTwStateConfigs(source, filePath)\r\n if (configs.length > 0) {\r\n filesWithStates++\r\n allConfigs.push(...configs)\r\n if (verbose) {\r\n process.stderr.write(\r\n `[tw:static-state] ${path.relative(srcDir, filePath)}: ${configs.length} komponen\\n`\r\n )\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (allConfigs.length === 0) {\r\n return {\r\n filesScanned,\r\n filesWithStates: 0,\r\n componentsFound: 0,\r\n rulesGenerated: 0,\r\n rulesSkipped: 0,\r\n generatedCss: \"\",\r\n rules: [],\r\n }\r\n }\r\n\r\n // ── Step 2: Deduplicate configs (sama statesJson dari files berbeda) ─────\r\n\r\n const seen = new Set<string>()\r\n const uniqueConfigs: StaticStateCssInput[] = []\r\n\r\n for (const config of allConfigs) {\r\n const key = `${config.tag}::${config.statesJson}`\r\n if (!seen.has(key)) {\r\n seen.add(key)\r\n uniqueConfigs.push({\r\n tag: config.tag,\r\n componentName: config.componentName,\r\n statesJson: config.statesJson,\r\n })\r\n }\r\n }\r\n\r\n // ── Step 3: Generate CSS rules ─────────────────────────────────────────────\r\n // Rust handles everything: parse resolvedCss → class map → build rules.\r\n // Pass resolvedCss (Tailwind pipeline output) agar Rust bisa resolve semua\r\n // Tailwind class termasuk `w-full`, `ring-2`, dll yang tidak ada di TW_MAP statis.\r\n\r\n const allRules = native.generateStaticStateCss(uniqueConfigs, options.resolvedCss ?? null)\r\n // Count skipped: state entries yang tidak ter-resolve\r\n // (rules yang declarations-nya kosong sudah di-filter oleh Rust)\r\n const rulesSkipped = uniqueConfigs.reduce((total, cfg) => {\r\n try {\r\n const stateMap = JSON.parse(cfg.statesJson) as Record<string, string>\r\n return total + Object.keys(stateMap).length\r\n } catch { return total }\r\n }, 0) - allRules.length\r\n\r\n // ── Step 4: Build CSS output ───────────────────────────────────────────────\r\n\r\n // Group rules per component untuk komentar yang informatif\r\n const byComponent = new Map<string, GeneratedStateRule[]>()\r\n for (const rule of allRules) {\r\n const existing = byComponent.get(rule.componentName) ?? []\r\n existing.push(rule)\r\n byComponent.set(rule.componentName, existing)\r\n }\r\n\r\n const cssBlocks: string[] = []\r\n for (const [componentName, rules] of byComponent) {\r\n cssBlocks.push(`/* ${componentName} */`)\r\n for (const rule of rules) {\r\n cssBlocks.push(`/* state: ${rule.stateName} */`)\r\n cssBlocks.push(rule.cssRule)\r\n }\r\n cssBlocks.push(\"\")\r\n }\r\n\r\n const result: StaticStateExtractionResult = {\r\n filesScanned,\r\n filesWithStates,\r\n componentsFound: allConfigs.length,\r\n rulesGenerated: allRules.length,\r\n rulesSkipped: Math.max(0, rulesSkipped),\r\n generatedCss: cssBlocks.join(\"\\n\"),\r\n rules: allRules,\r\n }\r\n\r\n result.generatedCss = buildCssHeader(result) + result.generatedCss\r\n return result\r\n}\r\n\r\n/** Nama file output untuk static state CSS — di-import langsung dari globals.css */\r\nexport const TW_STATE_STATIC_FILENAME = \"_tw-state-static.css\"\r\n\r\n/**\r\n * Extract static state CSS dan tulis ke file terpisah `_tw-state-static.css`\r\n * di `.next/tw-classes/_tw-state-static.css` — grouped bersama `_initial-scan.css`.\r\n *\r\n * File ini harus di-`@import` langsung dari globals.css karena berisi raw CSS\r\n * (bukan Tailwind class names), sehingga tidak bisa di-pickup oleh `@source`.\r\n *\r\n * Dipanggil dari `withTailwindStyled.ts` setelah initial Tailwind scan.\r\n *\r\n * @param srcDir Source directory untuk scan\r\n * @param safelistPath Path ke safelist CSS file — dipakai untuk derive direktori output\r\n * @param options Optional config\r\n * @returns Summary string untuk logging\r\n */\r\nexport function appendStaticStateCssToSafelist(\r\n srcDir: string,\r\n safelistPath: string,\r\n options: {\r\n verbose?: boolean\r\n /**\r\n * CSS output dari Tailwind pipeline — isi dari `_initial-scan.css`.\r\n *\r\n * Wajib di-provide untuk resolve semua Tailwind class dengan benar.\r\n * Kalau tidak di-provide, fallback ke Rust resolver (class sederhana saja).\r\n */\r\n resolvedCss?: string\r\n } = {}\r\n): string {\r\n const result = extractStaticStateCss(srcDir, options)\r\n\r\n // Selalu tulis file (kosong jika tidak ada rules) supaya @import di globals.css\r\n // tidak error saat cold start sebelum ada komponen dengan states.\r\n const twClassesDir = path.join(path.dirname(safelistPath), \"tw-classes\")\r\n fs.mkdirSync(twClassesDir, { recursive: true })\r\n const stateFilePath = path.join(twClassesDir, TW_STATE_STATIC_FILENAME)\r\n\r\n if (result.rulesGenerated === 0) {\r\n try {\r\n // Tulis file kosong agar @import globals.css tidak error\r\n fs.writeFileSync(\r\n stateFilePath,\r\n \"/* tw-state-static.css — tidak ada state rules yang di-generate */\\n\",\r\n \"utf-8\"\r\n )\r\n } catch { /* non-fatal */ }\r\n return `[tw:static-state] tidak ada state rules yang di-generate (${result.filesScanned} files di-scan)`\r\n }\r\n\r\n try {\r\n // Tulis ke file terpisah — REPLACE setiap build supaya selalu fresh.\r\n // File ini di-@import langsung dari globals.css (bukan @source),\r\n // karena berisi raw CSS selector (.tw-s-[hash][data-state=\"true\"]),\r\n // bukan Tailwind class names yang bisa di-scan oleh @source.\r\n fs.writeFileSync(stateFilePath, result.generatedCss, \"utf-8\")\r\n\r\n return [\r\n `[tw:static-state] ${result.rulesGenerated} static state rules di-generate`,\r\n ` → ${result.filesScanned} files scanned, ${result.filesWithStates} dengan states`,\r\n ` → ${result.componentsFound} components, ${result.rulesSkipped} rules skipped (fallback ke runtime)`,\r\n ` → ditulis ke tw-classes/${TW_STATE_STATIC_FILENAME}`,\r\n ].join(\"\\n\")\r\n } catch (writeErr) {\r\n const msg = writeErr instanceof Error ? writeErr.message : String(writeErr)\r\n return `[tw:static-state] gagal tulis state CSS: ${msg}`\r\n }\r\n}","/**\r\n * Centralized logger — replaces scattered console.log/warn/error calls\r\n * across packages.\r\n *\r\n * Mendukung file output ke `.next/tw-classes/_tw-build.log` via `setLogFile()`.\r\n */\r\nimport fs from \"node:fs\"\r\nimport path from \"node:path\"\r\n\r\nexport type LogLevel = \"silent\" | \"error\" | \"warn\" | \"info\" | \"debug\"\r\n\r\nconst LEVELS: Record<LogLevel, number> = { silent: 0, error: 1, warn: 2, info: 3, debug: 4 }\r\n\r\nfunction getEnvLevel(): LogLevel {\r\n const env = process.env.TWS_LOG_LEVEL?.toLowerCase()\r\n if (env && env in LEVELS) return env as LogLevel\r\n return process.env.TWS_DEBUG_SCANNER === \"1\" ? \"debug\" : \"info\"\r\n}\r\n\r\nexport interface Logger {\r\n error(...args: unknown[]): void\r\n warn(...args: unknown[]): void\r\n info(...args: unknown[]): void\r\n debug(...args: unknown[]): void\r\n setLevel(level: LogLevel): void\r\n setLogFile(filePath: string): void\r\n}\r\n\r\n// Global log file path — diset dari withTailwindStyled.ts saat startup\r\nlet _globalLogFile: string | null = null\r\nlet _logFileInitialized = false\r\n\r\nexport function setGlobalLogFile(filePath: string): void {\r\n _globalLogFile = filePath\r\n _logFileInitialized = false\r\n // Buat/reset file saat pertama kali di-set (tiap dev server start)\r\n try {\r\n fs.mkdirSync(path.dirname(filePath), { recursive: true })\r\n fs.writeFileSync(\r\n filePath,\r\n `# tailwind-styled build log — ${new Date().toISOString()}\\n`,\r\n \"utf-8\"\r\n )\r\n _logFileInitialized = true\r\n } catch { /* non-fatal */ }\r\n}\r\n\r\nfunction writeToFile(line: string): void {\r\n if (!_globalLogFile || !_logFileInitialized) return\r\n try {\r\n fs.appendFileSync(_globalLogFile, line)\r\n } catch { /* non-fatal */ }\r\n}\r\n\r\nexport function createLogger(prefix: string, level?: LogLevel): Logger {\r\n const loggerState = {\r\n currentLevel: level ?? getEnvLevel(),\r\n setLevel(l: LogLevel) {\r\n this.currentLevel = l\r\n },\r\n }\r\n\r\n const log = (msgLevel: LogLevel, stream: \"stdout\" | \"stderr\", args: unknown[]) => {\r\n if (LEVELS[msgLevel] > LEVELS[loggerState.currentLevel]) return\r\n const line = `[${prefix}] ${args.map(String).join(\" \")}\\n`\r\n process[stream].write(line)\r\n writeToFile(line)\r\n }\r\n\r\n return {\r\n error: (...a) => log(\"error\", \"stderr\", a),\r\n warn: (...a) => log(\"warn\", \"stderr\", a),\r\n info: (...a) => log(\"info\", \"stdout\", a),\r\n debug: (...a) => log(\"debug\", \"stderr\", a),\r\n setLevel: loggerState.setLevel,\r\n setLogFile: (filePath: string) => setGlobalLogFile(filePath),\r\n }\r\n}\r\n\r\nexport const logger = createLogger(\"tailwind-styled\")","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 * Scanner — Rust native bridge\r\n *\r\n * Wraps the Rust scan_workspace and extract_classes_from_source functions.\r\n * Uses @tailwind-styled/shared for native binding resolution.\r\n */\r\nimport path from \"node:path\"\r\nimport { fileURLToPath } from \"node:url\"\r\nimport {\r\n createDebugLogger,\r\n loadNativeBinding,\r\n resolveNativeBindingCandidates,\r\n TwError,\r\n} from \"@tailwind-styled/shared\"\r\n\r\nconst log = createDebugLogger(\"scanner:native\")\r\n\r\n// ESM-compatible __dirname equivalent\r\nfunction getDirname(): string {\r\n if (typeof __dirname !== \"undefined\") {\r\n return __dirname\r\n }\r\n if (typeof import.meta !== \"undefined\" && import.meta.url) {\r\n return path.dirname(fileURLToPath(import.meta.url))\r\n }\r\n return process.cwd()\r\n}\r\n\r\ninterface NativeScannerBinding {\r\n scanWorkspace?: (\r\n root: string,\r\n extensions: string[] | null\r\n ) => {\r\n files: Array<{ file: string; classes: string[]; hash: string }>\r\n totalFiles: number\r\n uniqueClasses: string[] | null\r\n } | null\r\n extractClassesFromSource?: (source: string) => string[] | null\r\n hashFileContent?: (content: string) => string | null\r\n cacheRead?: (cachePath: string) => {\r\n entries: Array<{\r\n file: string\r\n classes: string[]\r\n hash: string\r\n mtimeMs: number\r\n size: number\r\n hitCount: number\r\n lastSeenMs?: number\r\n }>\r\n version: number\r\n } | null\r\n cacheWrite?: (\r\n cachePath: string,\r\n entries: Array<{\r\n file: string\r\n classes: string[]\r\n hash: string\r\n mtimeMs: number\r\n size: number\r\n hitCount: number\r\n lastSeenMs?: number\r\n }>\r\n ) => boolean\r\n cachePriority?: (\r\n mtimeMs: number,\r\n size: number,\r\n cachedMtimeMs: number,\r\n cachedSize: number,\r\n cachedHitCount: number,\r\n cachedLastSeenMs: number,\r\n nowMs: number\r\n ) => number\r\n batchExtractClasses?: (filePaths: string[]) => Array<{\r\n file: string\r\n classes: string[]\r\n content_hash: string\r\n ok: boolean\r\n error?: string | null\r\n }>\r\n scanCacheGet?: (filePath: string, contentHash: string) => string[] | null\r\n scanCachePut?: (filePath: string, contentHash: string, classes: string[], mtimeMs: number, size: number) => void\r\n scanCacheInvalidate?: (filePath: string) => void\r\n scanCacheStats?: () => { size: number }\r\n scanFile?: (filePath: string) => {\r\n file: string\r\n classes: string[]\r\n hash: string\r\n ok: boolean\r\n error?: string | null\r\n }\r\n collectFiles?: (root: string, extensions: string[] | null, ignoreDirs: string[] | null) => string[]\r\n scanFilesBatch?: (filePaths: string[]) => Array<{\r\n file: string\r\n classes: string[]\r\n hash: string\r\n }>\r\n generateSubComponentTypes?: (\r\n root: string,\r\n outputPath: string | null\r\n ) => {\r\n components: Array<{ name: string; classes: string[] }>\r\n outputPath: string | null\r\n totalFiles: number\r\n }\r\n /** Batch-check file existence + stale age. Menggantikan pruneStaleEntries() */\r\n pruneStaleEntries?: (\r\n entries: Array<{ file: string; lastSeenMs: number }>,\r\n maxAgeMs: number | null,\r\n checkExists: boolean | null\r\n ) => { keptIndices: number[]; removed: number }\r\n /** Hitung class frequency stats dari disk cache. Menggantikan computeCacheStats() */\r\n computeCacheStats?: (\r\n filesClasses: string[][],\r\n sizes: number[],\r\n top: number | null\r\n ) => {\r\n totalEntries: number\r\n totalClasses: number\r\n totalSizeBytes: number\r\n avgClassesPerEntryX100: number\r\n mostUsedClasses: Array<{ class: string; count: number }>\r\n }\r\n /** Rebuild workspace result — Rust HashSet dedup + sort. Menggantikan JS fallback di mergeResults() */\r\n rebuildWorkspaceResult?: (\r\n files: Array<{ file: string; classes: readonly string[] }>\r\n ) => { files: Array<{ file: string; classes: string[] }>; totalFiles: number; uniqueClasses: string[] }\r\n\r\n // ── Watch API (QA #12) ──────────────────────────────────────────────────\r\n /** Mulai native file watcher via `notify` crate. Returns handleId. */\r\n startWatch?: (rootDir: string) => { status: string; handleId: number }\r\n /** Poll events yang terkumpul sejak poll terakhir. Queue dikosongkan setelah dipoll. */\r\n pollWatchEvents?: (handleId: number) => Array<{ kind: string; path: string }>\r\n /** Hentikan watcher dengan handleId. */\r\n stopWatch?: (handleId: number) => boolean\r\n}\r\n\r\nconst isValidScannerBinding = (module: unknown): module is NativeScannerBinding => {\r\n const candidate = module as Partial<NativeScannerBinding> | null | undefined\r\n return !!(\r\n candidate &&\r\n (candidate.scanWorkspace ||\r\n candidate.extractClassesFromSource ||\r\n candidate.hashFileContent ||\r\n candidate.cacheRead ||\r\n candidate.cacheWrite)\r\n )\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────\r\n// Native Bridge - Factory Pattern\r\n// ─────────────────────────────────────────────────────────────────────────\r\n\r\nconst createScannerBridgeLoader = () => {\r\n const _state = {\r\n binding: undefined as NativeScannerBinding | null | undefined,\r\n loadError: null as string | null,\r\n candidatePaths: [] as string[],\r\n }\r\n\r\n const throwNativeBindingError = (): never => {\r\n const lines = [\r\n \"FATAL: Native scanner binding not found.\",\r\n \"\",\r\n \"This package requires the Rust native binding 'tailwind_styled_parser.node'.\",\r\n \"The binding was not found in any of these paths:\",\r\n ..._state.candidatePaths.map((p) => ` - ${p}`),\r\n \"\",\r\n ]\r\n\r\n if (_state.loadError) {\r\n lines.push(\"Load error:\", ` ${_state.loadError}`, \"\")\r\n }\r\n\r\n lines.push(\r\n \"To fix this, run:\",\r\n \" npm run build:rust\",\r\n \"\",\r\n \"This will build the native Rust module from the 'native/' directory.\",\r\n \"If you're using this package in a CI/CD environment, ensure Rust toolchain is installed\",\r\n \"and 'npm run build:rust' is executed before running tests or building.\"\r\n )\r\n\r\n throw new TwError(\"rust\", \"SCANNER_NATIVE_BINDING_NOT_FOUND\", lines.join(\"\\n\"))\r\n }\r\n\r\n const scannerGetBinding = (): NativeScannerBinding => {\r\n const cachedBinding = _state.binding\r\n if (cachedBinding !== undefined) {\r\n if (cachedBinding !== null) {\r\n return cachedBinding\r\n }\r\n return throwNativeBindingError()\r\n }\r\n\r\n const runtimeDir = getDirname()\r\n const candidates = resolveNativeBindingCandidates({\r\n runtimeDir,\r\n includeDefaultCandidates: true,\r\n })\r\n\r\n _state.candidatePaths = candidates\r\n\r\n const { binding, loadErrors } = loadNativeBinding<NativeScannerBinding>({\r\n runtimeDir,\r\n candidates,\r\n isValid: isValidScannerBinding,\r\n invalidExportMessage: \"Module loaded but missing expected scanner binding functions\",\r\n })\r\n\r\n if (binding) {\r\n log(`scanner native binding loaded successfully`)\r\n _state.binding = binding\r\n return _state.binding\r\n }\r\n\r\n if (loadErrors.length > 0) {\r\n _state.loadError = loadErrors.map((e) => `${e.path}: ${e.message}`).join(\"; \")\r\n }\r\n\r\n _state.binding = null\r\n return throwNativeBindingError()\r\n }\r\n\r\n return {\r\n get: scannerGetBinding,\r\n scannerGetBinding,\r\n reset: (): void => {\r\n _state.binding = undefined\r\n _state.loadError = null\r\n _state.candidatePaths = []\r\n },\r\n }\r\n}\r\n\r\nconst scannerBridgeLoader = createScannerBridgeLoader()\r\nconst scannerGetBinding = scannerBridgeLoader.get\r\n\r\nexport const resetScannerBridgeCache = scannerBridgeLoader.reset\r\n\r\nexport function scanWorkspaceNative(\r\n root: string,\r\n extensions?: string[]\r\n): ReturnType<NonNullable<NativeScannerBinding[\"scanWorkspace\"]>> {\r\n return scannerGetBinding().scanWorkspace!(root, extensions ?? null)\r\n}\r\n\r\nexport function extractClassesNative(source: string): string[] {\r\n const result = scannerGetBinding().extractClassesFromSource?.(source)\r\n if (result === null || result === undefined) {\r\n throw new TwError(\r\n \"rust\",\r\n \"SCANNER_EXTRACT_FAILED\",\r\n \"Native extractClassesFromSource returned null/undefined\"\r\n )\r\n }\r\n return result\r\n}\r\n\r\nexport function hashContentNative(content: string): string {\r\n const result = scannerGetBinding().hashFileContent?.(content)\r\n if (result === null || result === undefined) {\r\n throw new TwError(\r\n \"rust\",\r\n \"SCANNER_HASH_FAILED\",\r\n \"Native hashFileContent returned null/undefined\"\r\n )\r\n }\r\n return result\r\n}\r\n\r\nexport function isRustCacheAvailable(): boolean {\r\n return true\r\n}\r\n\r\nexport function hasNativeScannerBinding(): boolean {\r\n try {\r\n scannerBridgeLoader.get()\r\n return true\r\n } catch {\r\n return false\r\n }\r\n}\r\n\r\nexport function cacheReadNative(\r\n cachePath: string\r\n): ReturnType<NonNullable<NativeScannerBinding[\"cacheRead\"]>> {\r\n const result = scannerGetBinding().cacheRead?.(cachePath)\r\n if (result === null || result === undefined) {\r\n throw new TwError(\r\n \"rust\",\r\n \"SCANNER_CACHE_READ_FAILED\",\r\n \"Native cacheRead returned null/undefined\"\r\n )\r\n }\r\n return result\r\n}\r\n\r\nexport function cacheWriteNative(\r\n cachePath: string,\r\n entries: Parameters<NonNullable<NativeScannerBinding[\"cacheWrite\"]>>[1]\r\n): boolean {\r\n const result = scannerGetBinding().cacheWrite?.(cachePath, entries)\r\n if (result === null || result === undefined) {\r\n throw new TwError(\r\n \"rust\",\r\n \"SCANNER_CACHE_WRITE_FAILED\",\r\n \"Native cacheWrite returned null/undefined\"\r\n )\r\n }\r\n return result\r\n}\r\n\r\nexport function cachePriorityNative(\r\n mtimeMs: number,\r\n size: number,\r\n cachedMtimeMs: number,\r\n cachedSize: number,\r\n cachedHitCount: number,\r\n cachedLastSeenMs: number,\r\n nowMs = Date.now()\r\n): number {\r\n const result = scannerGetBinding().cachePriority?.(\r\n mtimeMs,\r\n size,\r\n cachedMtimeMs,\r\n cachedSize,\r\n cachedHitCount,\r\n cachedLastSeenMs,\r\n nowMs\r\n )\r\n if (result === null || result === undefined) {\r\n throw new TwError(\r\n \"rust\",\r\n \"SCANNER_CACHE_PRIORITY_FAILED\",\r\n \"Native cachePriority returned null/undefined\"\r\n )\r\n }\r\n return result\r\n}\r\n\r\nexport function batchExtractClassesNative(filePaths: string[]): Array<{\r\n file: string\r\n classes: string[]\r\n content_hash: string\r\n ok: boolean\r\n error?: string | null\r\n}> {\r\n const binding = scannerGetBinding()\r\n if (!binding.batchExtractClasses) {\r\n throw new Error(\"FATAL: Native binding 'batchExtractClasses' is required but not available.\")\r\n }\r\n return binding.batchExtractClasses(filePaths) ?? []\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// In-memory scan cache (Rust DashMap — zero disk I/O)\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport function scanCacheGet(filePath: string, contentHash: string): string[] | null {\r\n const binding = scannerGetBinding()\r\n if (!binding.scanCacheGet) {\r\n throw new Error(\"FATAL: Native binding 'scanCacheGet' is required but not available.\")\r\n }\r\n return binding.scanCacheGet(filePath, contentHash) ?? null\r\n}\r\n\r\nexport function scanCachePut(\r\n filePath: string,\r\n contentHash: string,\r\n classes: string[],\r\n mtimeMs: number,\r\n size: number\r\n): void {\r\n const binding = scannerGetBinding()\r\n if (!binding.scanCachePut) {\r\n throw new Error(\"FATAL: Native binding 'scanCachePut' is required but not available.\")\r\n }\r\n binding.scanCachePut(filePath, contentHash, classes, mtimeMs, size)\r\n}\r\n\r\nexport function scanCacheInvalidate(filePath: string): void {\r\n const binding = scannerGetBinding()\r\n if (!binding.scanCacheInvalidate) {\r\n throw new Error(\"FATAL: Native binding 'scanCacheInvalidate' is required but not available.\")\r\n }\r\n binding.scanCacheInvalidate(filePath)\r\n}\r\n\r\nexport function scanCacheStats(): { size: number } {\r\n const binding = scannerGetBinding()\r\n if (!binding.scanCacheStats) {\r\n throw new Error(\"FATAL: Native binding 'scanCacheStats' is required but not available.\")\r\n }\r\n return binding.scanCacheStats() as { size: number }\r\n}\r\nexport function scanFileNative(filePath: string): {\r\n file: string\r\n classes: string[]\r\n hash: string\r\n ok: boolean\r\n error?: string | null\r\n} {\r\n const binding = scannerGetBinding()\r\n if (!binding.scanFile) {\r\n throw new Error(\"FATAL: Native binding 'scanFile' is required but not available.\")\r\n }\r\n return binding.scanFile(filePath)\r\n}\r\n/**\r\n * Native file walker — kumpulkan file paths rekursif tanpa baca konten.\r\n *\r\n * Menggantikan `collectFiles()` di `parallel-scanner.ts`.\r\n * Returns null jika binding tidak tersedia (fallback ke JS).\r\n */\r\nexport function collectFilesNative(\r\n root: string,\r\n extensions: string[] | null,\r\n ignoreDirs: string[] | null\r\n): string[] | null {\r\n const binding = scannerGetBinding()\r\n if (!binding.collectFiles) return null\r\n return binding.collectFiles(root, extensions, ignoreDirs)\r\n}\r\n/**\r\n * Batch scan + hash banyak file sekaligus dalam satu NAPI call.\r\n *\r\n * Menggantikan loop `scanFileNative()` per file di worker thread.\r\n * Rust: `par_iter()` via rayon — semua file diproses paralel di thread pool Rust,\r\n * tanpa overhead spawn JS worker untuk setiap chunk.\r\n *\r\n * Kapan pakai ini vs `batchExtractClassesNative`:\r\n * - `scanFilesBatch` → butuh {file, classes, hash} — scan + hash sekaligus\r\n * - `batchExtractClasses` → hanya butuh {file, classes, content_hash, ok, error}\r\n *\r\n * Returns: array dengan panjang sama dengan input. File yang gagal dibaca\r\n * dikembalikan dengan classes:[] dan hash:\"\".\r\n */\r\nexport function scanFilesBatchNative(filePaths: string[]): Array<{\r\n file: string\r\n classes: string[]\r\n hash: string\r\n}> {\r\n const binding = scannerGetBinding()\r\n if (!binding.scanFilesBatch) {\r\n // Fallback: panggil scanFile satu per satu\r\n return filePaths.map((fp) => {\r\n try {\r\n const r = binding.scanFile?.(fp)\r\n return r\r\n ? { file: r.file, classes: r.classes, hash: r.hash ?? \"\" }\r\n : { file: fp, classes: [], hash: \"\" }\r\n } catch {\r\n return { file: fp, classes: [], hash: \"\" }\r\n }\r\n })\r\n }\r\n return binding.scanFilesBatch(filePaths)\r\n}\r\n \r\n/**\r\n * Scan workspace rekursif dan generate TypeScript type declarations\r\n * untuk setiap sub-component yang ditemukan.\r\n *\r\n * Menggantikan operasi scan manual + string codegen di JS.\r\n * Rust: walkdir + regex class extraction + type codegen dalam satu pass.\r\n *\r\n * @param root Direktori root workspace\r\n * @param outputPath Path output file .d.ts (opsional — kalau null, hanya return result)\r\n */\r\nexport function generateSubComponentTypesNative(\r\n root: string,\r\n outputPath?: string\r\n): {\r\n components: Array<{ name: string; classes: string[] }>\r\n outputPath: string | null\r\n totalFiles: number\r\n} | null {\r\n const binding = scannerGetBinding()\r\n if (!binding.generateSubComponentTypes) return null\r\n return binding.generateSubComponentTypes(root, outputPath ?? null) as {\r\n components: Array<{ name: string; classes: string[] }>\r\n outputPath: string | null\r\n totalFiles: number\r\n }\r\n}\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// pruneStaleEntries + computeCacheStats — native wrappers\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Batch-check file existence + stale age menggunakan Rust syscalls.\r\n * Returns `null` jika native tidak tersedia (JS fallback di caller).\r\n *\r\n * Menggantikan loop `existsSync()` di `pruneStaleEntries()` (cache-native.ts).\r\n */\r\nexport function pruneStaleEntriesNative(\r\n entries: Array<{ file: string; lastSeenMs?: number }>,\r\n maxAgeMs?: number,\r\n checkExists?: boolean\r\n): { keptIndices: number[]; removed: number } | null {\r\n const binding = scannerGetBinding()\r\n if (!binding.pruneStaleEntries) return null\r\n return binding.pruneStaleEntries(\r\n entries.map((e) => ({ file: e.file, lastSeenMs: e.lastSeenMs ?? 0 })),\r\n maxAgeMs ?? null,\r\n checkExists ?? null\r\n )\r\n}\r\n\r\n/**\r\n * Hitung class frequency + stats dari disk cache entries menggunakan Rust.\r\n * Returns `null` jika native tidak tersedia (JS fallback di caller).\r\n *\r\n * Menggantikan `computeCacheStats()` di `cache-native.ts`.\r\n */\r\nexport function rebuildWorkspaceResultNative(\r\n files: Array<{ file: string; classes: readonly string[] }>\r\n): { files: typeof files; totalFiles: number; uniqueClasses: string[] } | null {\r\n const binding = scannerBridgeLoader.get()\r\n if (!binding?.rebuildWorkspaceResult) return null\r\n try {\r\n return binding.rebuildWorkspaceResult(files)\r\n } catch {\r\n return null\r\n }\r\n}\r\n\r\nexport function computeCacheStatsNative(\r\n filesClasses: string[][],\r\n sizes: number[],\r\n top?: number\r\n): {\r\n totalEntries: number\r\n totalClasses: number\r\n totalSizeBytes: number\r\n avgClassesPerEntryX100: number\r\n mostUsedClasses: Array<{ class: string; count: number }>\r\n} | null {\r\n const binding = scannerGetBinding()\r\n if (!binding.computeCacheStats) return null\r\n return binding.computeCacheStats(filesClasses, sizes, top ?? null)\r\n}\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Watch API — native wrappers (QA #12)\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Mulai native file watcher menggunakan `notify` crate (Rust).\r\n * Returns `null` jika binding tidak tersedia — fallback ke fs.watch JS.\r\n */\r\nexport function startWatchNative(rootDir: string): { status: string; handleId: number } | null {\r\n try {\r\n const binding = scannerGetBinding()\r\n if (!binding.startWatch) return null\r\n return binding.startWatch(rootDir)\r\n } catch {\r\n return null\r\n }\r\n}\r\n\r\n/**\r\n * Poll events dari native watcher queue. Queue dikosongkan setelah dipoll.\r\n * Returns array kosong jika tidak ada events atau binding tidak tersedia.\r\n */\r\nexport function pollWatchEventsNative(handleId: number): Array<{ kind: string; path: string }> {\r\n try {\r\n const binding = scannerGetBinding()\r\n if (!binding.pollWatchEvents) return []\r\n return binding.pollWatchEvents(handleId)\r\n } catch {\r\n return []\r\n }\r\n}\r\n\r\n/**\r\n * Hentikan native watcher dengan handleId.\r\n */\r\nexport function stopWatchNative(handleId: number): boolean {\r\n try {\r\n const binding = scannerGetBinding()\r\n if (!binding.stopWatch) return false\r\n return binding.stopWatch(handleId)\r\n } catch {\r\n return false\r\n }\r\n}\r\n\r\n/**\r\n * Cek apakah native watch API tersedia.\r\n */\r\nexport function hasNativeWatchBinding(): boolean {\r\n try {\r\n const binding = scannerGetBinding()\r\n return !!(binding.startWatch && binding.pollWatchEvents && binding.stopWatch)\r\n } catch {\r\n return false\r\n }\r\n}","/**\r\n * tailwind-styled-v4 — Scanner Cache (Rust-backed)\r\n *\r\n * This module REQUIRES native Rust bindings and will FAIL LOUDLY if they are not available.\r\n * NO JavaScript fallback is provided.\r\n */\r\n\r\nimport fs from \"node:fs\"\r\nimport path from \"node:path\"\r\nimport {\r\n cachePriorityNative,\r\n cacheReadNative,\r\n cacheWriteNative,\r\n scanCacheGet,\r\n scanCachePut,\r\n scanCacheInvalidate,\r\n scanCacheStats,\r\n pruneStaleEntriesNative,\r\n computeCacheStatsNative,\r\n} from \"./native-bridge\"\r\n\r\nfunction defaultCachePath(rootDir: string, cacheDir?: string): string {\r\n const dir = cacheDir\r\n ? path.resolve(rootDir, cacheDir)\r\n : path.join(process.cwd(), \".cache\", \"tailwind-styled\")\r\n return path.join(dir, \"scanner-cache.json\")\r\n}\r\n\r\n// ── Public API ────────────────────────────────────────────────────────────────\r\n\r\nexport interface NativeCacheEntry {\r\n file: string\r\n classes: string[]\r\n hash: string\r\n mtimeMs: number\r\n size: number\r\n hitCount: number\r\n /** Terakhir file ditemukan di filesystem (ms epoch). Digunakan untuk stale cleanup. */\r\n lastSeenMs?: number\r\n}\r\n\r\n/** Default stale threshold — 7 hari */\r\nconst STALE_THRESHOLD_MS = 7 * 24 * 60 * 60 * 1000\r\n\r\n/**\r\n * Hapus entri cache yang sudah stale (file sudah tidak ada atau lastSeenMs terlalu lama).\r\n *\r\n * Native-first: Rust batch-check semua file dalam satu pass tanpa\r\n * event loop overhead. JS fallback: existsSync loop per file.\r\n */\r\nexport function pruneStaleEntries(\r\n entries: NativeCacheEntry[],\r\n opts: { maxAgeMs?: number; rootDir?: string } = {}\r\n): { pruned: NativeCacheEntry[]; removed: number } {\r\n const nativeResult = pruneStaleEntriesNative(\r\n entries.map((e) => ({ file: e.file, lastSeenMs: e.lastSeenMs })),\r\n opts.maxAgeMs,\r\n !!opts.rootDir\r\n )\r\n\r\n if (nativeResult !== null) {\r\n const pruned = nativeResult.keptIndices.map((i) => entries[i])\r\n return { pruned, removed: nativeResult.removed }\r\n }\r\n\r\n throw new Error(\"FATAL: Native binding 'pruneStaleEntries' is required but not available.\")\r\n}\r\n\r\n/**\r\n * Read scanner cache from disk using Rust parser.\r\n * REQUIRES native binding - throws if unavailable.\r\n *\r\n * FIX: Pastikan folder cache ada sebelum Rust coba baca file,\r\n * supaya tidak error \"os error 3 (path not found)\" pada first run.\r\n */\r\nexport function readCache(rootDir: string, cacheDir?: string): NativeCacheEntry[] {\r\n const cachePath = defaultCachePath(rootDir, cacheDir)\r\n\r\n // Buat folder cache jika belum ada — cegah \"os error 3\" pada first run\r\n fs.mkdirSync(path.dirname(cachePath), { recursive: true })\r\n\r\n const result = cacheReadNative(cachePath)\r\n if (!result) return []\r\n\r\n return result.entries.map((e) => ({\r\n file: e.file,\r\n classes: e.classes,\r\n hash: e.hash,\r\n mtimeMs: e.mtimeMs,\r\n size: e.size,\r\n hitCount: e.hitCount,\r\n lastSeenMs: e.lastSeenMs,\r\n }))\r\n}\r\n\r\n/**\r\n * Write scanner cache to disk using Rust serialiser.\r\n * REQUIRES native binding - throws if unavailable.\r\n *\r\n * FIX: Pastikan folder cache ada sebelum Rust coba tulis file.\r\n */\r\nexport function writeCache(rootDir: string, entries: NativeCacheEntry[], cacheDir?: string): void {\r\n const cachePath = defaultCachePath(rootDir, cacheDir)\r\n\r\n // Buat folder cache jika belum ada — cegah write gagal pada first run\r\n fs.mkdirSync(path.dirname(cachePath), { recursive: true })\r\n\r\n const success = cacheWriteNative(cachePath, entries)\r\n if (!success) {\r\n throw new Error(\r\n \"Native cacheWrite failed. Run 'npm run build:rust' to rebuild native bindings.\"\r\n )\r\n }\r\n}\r\n\r\n/**\r\n * Compute priority score for a file using the Rust SmartCache algorithm.\r\n * Higher = process first.\r\n * REQUIRES native binding - throws if unavailable.\r\n */\r\nexport function filePriority(\r\n mtimeMs: number,\r\n size: number,\r\n cached: { mtimeMs: number; size: number; hitCount: number; lastSeenMs?: number } | undefined,\r\n nowMs = Date.now()\r\n): number {\r\n return cachePriorityNative(\r\n mtimeMs,\r\n size,\r\n cached?.mtimeMs ?? 0,\r\n cached?.size ?? 0,\r\n cached?.hitCount ?? 0,\r\n cached?.lastSeenMs ?? 0,\r\n nowMs\r\n )\r\n}\r\n\r\nexport interface CacheStats {\r\n totalEntries: number\r\n totalClasses: number\r\n totalSizeBytes: number\r\n avgClassesPerEntry: number\r\n mostUsedClasses: Array<{ class: string; count: number }>\r\n}\r\n\r\n/**\r\n * Rust in-memory cache — hot path untuk per-file lookup saat scan.\r\n * Jauh lebih cepat dari disk JSON cache untuk file yang baru saja di-scan.\r\n */\r\nexport const hotCache = {\r\n get: scanCacheGet,\r\n put: scanCachePut,\r\n invalidate: scanCacheInvalidate,\r\n} as const\r\n\r\n/**\r\n * Stats dari Rust in-memory cache (DashMap).\r\n * `size` = jumlah entry saat ini di cache.\r\n */\r\nexport function getHotCacheStats(): { size: number } {\r\n return scanCacheStats()\r\n}\r\n\r\n/**\r\n * Compute disk cache stats dari entries (diperlukan untuk mostUsedClasses).\r\n *\r\n * Native-first: Rust HashMap count + partial sort — ~3× lebih cepat\r\n * dari JS Map untuk workspace besar (5000+ entries).\r\n * JS fallback: manual Map count + .sort().\r\n */\r\nexport function computeCacheStats(entries: NativeCacheEntry[]): CacheStats {\r\n if (entries.length === 0) {\r\n return { totalEntries: 0, totalClasses: 0, totalSizeBytes: 0, avgClassesPerEntry: 0, mostUsedClasses: [] }\r\n }\r\n\r\n // Native-first\r\n const nativeResult = computeCacheStatsNative(\r\n entries.map((e) => e.classes),\r\n entries.map((e) => e.size),\r\n 10\r\n )\r\n\r\n if (nativeResult !== null) {\r\n return {\r\n totalEntries: nativeResult.totalEntries,\r\n totalClasses: nativeResult.totalClasses,\r\n totalSizeBytes: nativeResult.totalSizeBytes,\r\n avgClassesPerEntry: nativeResult.avgClassesPerEntryX100 / 100,\r\n mostUsedClasses: nativeResult.mostUsedClasses,\r\n }\r\n }\r\n\r\n throw new Error(\"FATAL: Native binding 'computeCacheStats' is required but not available.\")\r\n}","/**\r\n * Native parallel scanner menggunakan worker threads + Rust batchExtractClasses.\r\n *\r\n * Untuk workspaces besar (200+ files), file-list dibagi ke beberapa worker.\r\n * Setiap worker memanggil native `batchExtractClasses` yang sudah memakai\r\n * rayon par_iter di sisi Rust — sehingga parallelism terjadi di dua level:\r\n * 1. Multiple worker threads (TS/Node level)\r\n * 2. rayon par_iter di dalam setiap worker (Rust level)\r\n *\r\n * Untuk workspace kecil (< PARALLEL_THRESHOLD), langsung panggil batchExtractClasses\r\n * di main thread — overhead spawn worker tidak worth it.\r\n */\r\n\r\nimport { Worker, isMainThread, parentPort, workerData } from \"node:worker_threads\"\r\nimport path from \"node:path\"\r\nimport { availableParallelism } from \"node:os\"\r\nimport { fileURLToPath } from \"node:url\"\r\n\r\nimport { isScannableFile, DEFAULT_EXTENSIONS, DEFAULT_IGNORES } from \"./index\"\r\nimport { batchExtractClassesNative, collectFilesNative, rebuildWorkspaceResultNative } from \"./native-bridge\"\r\nimport type { ScanWorkspaceResult, ScanFileResult } from \"./types\"\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Constants\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nconst PARALLEL_THRESHOLD = 50\r\nconst DEFAULT_CHUNK_SIZE = 150\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Types\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface ParallelScanOptions {\r\n extensions?: string[]\r\n ignoreDirs?: string[]\r\n maxWorkers?: number\r\n chunkSize?: number\r\n}\r\n\r\ninterface NativeBatchResult {\r\n file: string\r\n classes: string[]\r\n content_hash: string\r\n ok: boolean\r\n error?: string | null\r\n}\r\n\r\ninterface WorkerInput {\r\n filePaths: string[]\r\n}\r\n\r\ntype WorkerOutput =\r\n | { ok: true; results: NativeBatchResult[] }\r\n | { ok: false; error: string }\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// File collection\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// File collection — native-first, JS fallback\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Kumpulkan semua file yang cocok secara rekursif dari rootDir.\r\n *\r\n * Native: satu Rust walk tanpa JS event loop overhead — 2–5× lebih cepat\r\n * untuk workspace besar. Tidak membaca konten file, hanya paths.\r\n *\r\n * JS fallback: dipakai jika native binding tidak tersedia (mis. test env).\r\n */\r\nfunction collectFiles(rootDir: string, extensions: string[], ignoreDirs: string[]): string[] {\r\n const native = collectFilesNative(rootDir, extensions, ignoreDirs)\r\n if (native !== null) return native\r\n throw new Error(\"FATAL: Native binding 'collectFiles' is required but not available.\")\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Merge results\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction mergeResults(batchResults: NativeBatchResult[]): ScanWorkspaceResult {\r\n const files: ScanFileResult[] = batchResults.map((r) => ({\r\n file: r.file,\r\n classes: r.classes,\r\n hash: r.content_hash,\r\n }))\r\n const native = rebuildWorkspaceResultNative(files)\r\n if (native) return native\r\n throw new Error(\"FATAL: Native binding 'rebuildWorkspaceResult' is required but not available.\")\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Worker thread entry point\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nif (!isMainThread && parentPort) {\r\n const { filePaths } = workerData as WorkerInput\r\n try {\r\n const results = batchExtractClassesNative(filePaths)\r\n const msg: WorkerOutput = { ok: true, results }\r\n parentPort.postMessage(msg)\r\n } catch (error) {\r\n const msg: WorkerOutput = {\r\n ok: false,\r\n error: error instanceof Error ? error.message : String(error),\r\n }\r\n parentPort.postMessage(msg)\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// __filename compat CJS + ESM\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\ndeclare const __filename: string | undefined\r\nconst _workerFilename =\r\n typeof __filename !== \"undefined\" ? __filename : fileURLToPath(import.meta.url)\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Spawn worker for one chunk\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction runChunkInWorker(filePaths: string[]): Promise<NativeBatchResult[]> {\r\n return new Promise((resolve, reject) => {\r\n const worker = new Worker(_workerFilename, {\r\n workerData: { filePaths } satisfies WorkerInput,\r\n })\r\n worker.once(\"message\", (payload: WorkerOutput) => {\r\n if (payload.ok) {\r\n resolve(payload.results)\r\n } else {\r\n reject(new Error(payload.error ?? \"parallel-scanner worker failed\"))\r\n }\r\n })\r\n worker.once(\"error\", reject)\r\n worker.once(\"exit\", (code) => {\r\n if (code !== 0) reject(new Error(`parallel-scanner worker exited with code ${code}`))\r\n })\r\n })\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Public API\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport async function scanWorkspaceParallel(\r\n rootDir: string,\r\n options: ParallelScanOptions = {}\r\n): Promise<ScanWorkspaceResult> {\r\n const {\r\n extensions = DEFAULT_EXTENSIONS,\r\n ignoreDirs = DEFAULT_IGNORES,\r\n maxWorkers = Math.max(1, availableParallelism() - 1),\r\n chunkSize = DEFAULT_CHUNK_SIZE,\r\n } = options\r\n\r\n const files = collectFiles(path.resolve(rootDir), extensions, ignoreDirs)\r\n\r\n if (files.length < PARALLEL_THRESHOLD) {\r\n return mergeResults(batchExtractClassesNative(files))\r\n }\r\n\r\n const chunks: string[][] = []\r\n for (let i = 0; i < files.length; i += chunkSize) {\r\n chunks.push(files.slice(i, i + chunkSize))\r\n }\r\n\r\n const allResults: NativeBatchResult[] = []\r\n for (let i = 0; i < chunks.length; i += maxWorkers) {\r\n const batch = chunks.slice(i, i + maxWorkers)\r\n const batchResults = await Promise.all(batch.map(runChunkInWorker))\r\n allResults.push(...batchResults.flat())\r\n }\r\n\r\n return mergeResults(allResults)\r\n}","import { z } from \"zod\"\r\nimport { TwError } from \"@tailwind-styled/shared\"\r\n\r\nconst formatIssuePath = (path: readonly PropertyKey[]): string =>\r\n path.length > 0\r\n ? path\r\n .map((segment) =>\r\n typeof segment === \"symbol\" ? segment.description ?? segment.toString() : String(segment)\r\n )\r\n .join(\".\")\r\n : \"<root>\"\r\n\r\nconst formatIssues = (error: z.ZodError): string =>\r\n error.issues\r\n .map((issue) => {\r\n const path = formatIssuePath(issue.path)\r\n return `${path}: ${issue.message}`\r\n })\r\n .join(\"; \")\r\n\r\nconst parseWithSchema = <T>(schema: z.ZodType<T>, data: unknown, label: string): T => {\r\n const parsed = schema.safeParse(data)\r\n if (parsed.success) return parsed.data\r\n const details = formatIssues(parsed.error)\r\n throw new TwError(\r\n \"validation\",\r\n \"SCHEMA_VALIDATION_FAILED\",\r\n details ? `${label}: ${details}` : label,\r\n parsed.error\r\n )\r\n}\r\n\r\nconst NonNegativeIntegerSchema = z.number().int().min(0)\r\n\r\nexport const ScanWorkspaceOptionsSchema = z.object({\r\n includeExtensions: z.array(z.string()).optional(),\r\n ignoreDirectories: z.array(z.string()).optional(),\r\n useCache: z.boolean().optional(),\r\n cacheDir: z.string().min(1).optional(),\r\n smartInvalidation: z.boolean().optional(),\r\n})\r\n\r\nexport type ScanWorkspaceOptions = z.infer<typeof ScanWorkspaceOptionsSchema>\r\n\r\nexport const ScanFileResultSchema = z.object({\r\n file: z.string(),\r\n classes: z.array(z.string()),\r\n hash: z.string().optional(),\r\n})\r\n\r\nexport type ScanFileResult = z.infer<typeof ScanFileResultSchema>\r\n\r\nexport const ScanWorkspaceResultSchema = z\r\n .object({\r\n files: z.array(ScanFileResultSchema),\r\n totalFiles: NonNegativeIntegerSchema,\r\n uniqueClasses: z.array(z.string()),\r\n })\r\n .refine((value) => value.totalFiles === value.files.length, {\r\n message: \"scan result totalFiles must match files.length\",\r\n path: [\"totalFiles\"],\r\n })\r\n\r\nexport type ScanWorkspaceResult = z.infer<typeof ScanWorkspaceResultSchema>\r\n\r\nexport const ScannerWorkerRequestSchema = z.object({\r\n rootDir: z.string().min(1),\r\n options: ScanWorkspaceOptionsSchema.optional(),\r\n})\r\n\r\nexport type ScannerWorkerRequest = z.infer<typeof ScannerWorkerRequestSchema>\r\n\r\nexport const ScannerWorkerSuccessMessageSchema = z.object({\r\n ok: z.literal(true),\r\n result: ScanWorkspaceResultSchema,\r\n})\r\n\r\nexport const ScannerWorkerErrorMessageSchema = z.object({\r\n ok: z.literal(false),\r\n error: z.string().optional(),\r\n})\r\n\r\nexport const ScannerWorkerMessageSchema = z.union([\r\n ScannerWorkerSuccessMessageSchema,\r\n ScannerWorkerErrorMessageSchema,\r\n])\r\n\r\nexport type ScannerWorkerMessage = z.infer<typeof ScannerWorkerMessageSchema>\r\n\r\nexport const parseScanWorkspaceOptions = (options: unknown) =>\r\n parseWithSchema(ScanWorkspaceOptionsSchema, options ?? {}, \"scanner options are invalid\")\r\n\r\nexport const parseScanFileResult = (result: unknown) =>\r\n parseWithSchema(ScanFileResultSchema, result, \"scanner file result is invalid\")\r\n\r\nexport const parseScanWorkspaceResult = (result: unknown) =>\r\n parseWithSchema(ScanWorkspaceResultSchema, result, \"scanner workspace result is invalid\")\r\n\r\nexport const parseScannerWorkerRequest = (request: unknown) =>\r\n parseWithSchema(ScannerWorkerRequestSchema, request, \"scanner worker request is invalid\")\r\n\r\nexport const parseScannerWorkerMessage = (message: unknown) =>\r\n parseWithSchema(ScannerWorkerMessageSchema, message, \"scanner worker message is invalid\")\r\n","import fs from \"node:fs\"\r\nimport { createRequire } from \"node:module\"\r\nimport path from \"node:path\"\r\nimport { fileURLToPath } from \"node:url\"\r\nimport { Worker } from \"node:worker_threads\"\r\nimport { createLogger } from \"@tailwind-styled/shared\"\r\nimport { filePriority, type NativeCacheEntry, readCache, writeCache } from \"./cache-native\"\r\nimport { hashContentNative, isRustCacheAvailable } from \"./native-bridge\"\r\nimport { scanWorkspaceParallel } from \"./parallel-scanner\"\r\nimport {\r\n parseScannerWorkerMessage,\r\n parseScanWorkspaceOptions,\r\n parseScanWorkspaceResult,\r\n type ScanFileResult,\r\n type ScanWorkspaceOptions,\r\n type ScanWorkspaceResult,\r\n} from \"./schemas\"\r\n\r\nconst log = createLogger(\"scanner\")\r\n\r\nconst SCAN_WORKER_TIMEOUT_MS = 120_000\r\n\r\ntype NativeParsedClass = { raw?: string }\r\n// ClassExtractResult shape dari Rust (napi-rs export)\r\ntype NativeClassExtractResult = {\r\n classes: string[]\r\n componentNames: string[]\r\n hasTwUsage: boolean\r\n hasUseClient: boolean\r\n imports: string[]\r\n}\r\ntype NativeParserBinding = {\r\n parse_classes?: (input: string) => NativeParsedClass[]\r\n parseClasses?: (input: string) => NativeParsedClass[]\r\n // Rust returns ClassExtractResult object, bukan plain string[]\r\n extractClassesFromSource?: (source: string) => NativeClassExtractResult | string[] | null\r\n batchExtractClassesNative?: (filePaths: string[]) => Array<{\r\n file: string; classes: string[]; contentHash: string; ok: boolean; error?: string\r\n }>\r\n}\r\n\r\nfunction getRuntimeDir(): string {\r\n if (typeof __dirname !== \"undefined\" && __dirname.length > 0) {\r\n return __dirname\r\n }\r\n if (typeof import.meta !== \"undefined\" && import.meta.url) {\r\n return path.dirname(fileURLToPath(import.meta.url))\r\n }\r\n return process.cwd()\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────\r\n// Native Parser Binding - Factory Pattern (no let!)\r\n// ─────────────────────────────────────────────────────────────────────────\r\n\r\nconst createNativeParserLoader = () => {\r\n const _state = {\r\n binding: undefined as NativeParserBinding | null | undefined,\r\n initError: null as string | null,\r\n }\r\n\r\n const debugNative = (message: string): void => {\r\n log.debug(`[native] ${message}`)\r\n }\r\n\r\n const loadNativeParserBinding = (): NativeParserBinding | null => {\r\n if (_state.binding !== undefined) return _state.binding\r\n\r\n const runtimeDir = getRuntimeDir()\r\n const req = createRequire(path.join(runtimeDir, \"noop.cjs\"))\r\n\r\n const _platform = process.platform\r\n const _arch = process.arch\r\n const _platformArch = `${_platform}-${_arch}`\r\n const _platformArchGnu = _platformArch === \"linux-x64\" ? \"linux-x64-gnu\"\r\n : _platformArch === \"linux-arm64\" ? \"linux-arm64-gnu\"\r\n : _platformArch\r\n\r\n const candidates = [\r\n // ── binaryName baru: tailwind-styled-native (napi-rs naming) ──\r\n // cwd = repo root saat run dari root, atau package dir saat workspaces\r\n path.resolve(process.cwd(), \"native\", \"tailwind-styled-native.node\"),\r\n path.resolve(process.cwd(), \"native\", `tailwind-styled-native.${_platformArch}.node`),\r\n path.resolve(process.cwd(), \"native\", `tailwind-styled-native.${_platformArchGnu}.node`),\r\n // runtimeDir = dist/ → naik 1 level ke package root (npm install case)\r\n // e.g. node_modules/tailwind-styled-v4/dist/ → node_modules/tailwind-styled-v4/native/\r\n path.resolve(runtimeDir, \"..\", \"native\", \"tailwind-styled-native.node\"),\r\n path.resolve(runtimeDir, \"..\", \"native\", `tailwind-styled-native.${_platformArch}.node`),\r\n path.resolve(runtimeDir, \"..\", \"native\", `tailwind-styled-native.${_platformArchGnu}.node`),\r\n // runtimeDir = dist/ → naik 4 level ke repo root (monorepo dev case)\r\n path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", \"tailwind-styled-native.node\"),\r\n path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", `tailwind-styled-native.${_platformArchGnu}.node`),\r\n // 3 level fallback (jika package di-nest lebih dangkal)\r\n path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"native\", \"tailwind-styled-native.node\"),\r\n path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"native\", `tailwind-styled-native.${_platformArchGnu}.node`),\r\n // ── binaryName lama: tailwind_styled_parser (backward compat) ──\r\n path.resolve(process.cwd(), \"native/tailwind_styled_parser.node\"),\r\n path.resolve(process.cwd(), \"native/build/Release/tailwind_styled_parser.node\"),\r\n path.resolve(runtimeDir, \"..\", \"native\", \"tailwind_styled_parser.node\"),\r\n path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", \"tailwind_styled_parser.node\"),\r\n path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"native\", \"tailwind_styled_parser.node\"),\r\n path.resolve(\r\n runtimeDir,\r\n \"..\",\r\n \"..\",\r\n \"..\",\r\n \"native\",\r\n \"build\",\r\n \"Release\",\r\n \"tailwind_styled_parser.node\"\r\n ),\r\n ]\r\n\r\n for (const fullPath of candidates) {\r\n if (!fs.existsSync(fullPath)) continue\r\n try {\r\n const required = req(fullPath) as NativeParserBinding\r\n if (\r\n required &&\r\n (typeof required.extractClassesFromSource === \"function\" ||\r\n typeof required.parseClasses === \"function\" ||\r\n typeof required.parse_classes === \"function\")\r\n ) {\r\n _state.binding = required\r\n debugNative(`using native parser from ${fullPath}`)\r\n return _state.binding\r\n }\r\n } catch (error) {\r\n _state.initError = error instanceof Error ? error.message : String(error)\r\n }\r\n }\r\n\r\n _state.binding = null\r\n if (!_state.initError) {\r\n _state.initError = \"native .node binding not found\"\r\n }\r\n debugNative(`native binding not available: ${_state.initError}`)\r\n return _state.binding\r\n }\r\n\r\n return {\r\n get: loadNativeParserBinding,\r\n reset: (): void => {\r\n _state.binding = undefined\r\n _state.initError = null\r\n },\r\n }\r\n}\r\n\r\nconst nativeParserLoader = createNativeParserLoader()\r\n\r\nfunction normalizeWithNativeParser(tokens: string[]): string[] {\r\n const binding = nativeParserLoader.get()\r\n const parseClasses = binding?.parseClasses ?? binding?.parse_classes\r\n if (!binding || typeof parseClasses !== \"function\") {\r\n throw new Error(\r\n \"Native parser binding is required but not available. Run 'npm run build:rust' to build it.\"\r\n )\r\n }\r\n\r\n try {\r\n const parsed = parseClasses(tokens.join(\" \"))\r\n const normalized = parsed.map((item) => item.raw?.trim() ?? \"\").filter(Boolean)\r\n return Array.from(new Set(normalized))\r\n } catch (error) {\r\n const errorMessage = error instanceof Error ? error.message : String(error)\r\n throw new Error(`Native parser failed: ${errorMessage}. Run 'npm run build:rust' to rebuild.`)\r\n }\r\n}\r\n\r\nexport type { ScanFileResult, ScanWorkspaceOptions, ScanWorkspaceResult } from \"./schemas\"\r\nexport {\r\n parseScannerWorkerMessage,\r\n parseScanWorkspaceOptions,\r\n parseScanWorkspaceResult,\r\n} from \"./schemas\"\r\n\r\nexport const DEFAULT_EXTENSIONS = [\".js\", \".jsx\", \".ts\", \".tsx\", \".mjs\", \".cjs\"]\r\nexport const DEFAULT_IGNORES = [\"node_modules\", \".git\", \".next\", \"dist\", \"out\", \".turbo\", \".cache\"]\r\n\r\nfunction resolveScannerWorkerModulePath(): string | null {\r\n const runtimeDir = (() => {\r\n if (typeof __dirname !== \"undefined\" && __dirname.length > 0) {\r\n return __dirname\r\n }\r\n // ESM fallback\r\n if (typeof import.meta !== \"undefined\" && import.meta.url) {\r\n return path.dirname(fileURLToPath(import.meta.url))\r\n }\r\n // Final fallback\r\n return process.cwd()\r\n })()\r\n\r\n const candidates = [\r\n path.resolve(runtimeDir, \"worker.cjs\"),\r\n path.resolve(runtimeDir, \"worker.js\"),\r\n path.resolve(runtimeDir, \"worker.ts\"),\r\n ]\r\n\r\n for (const candidate of candidates) {\r\n if (fs.existsSync(candidate)) return candidate\r\n }\r\n\r\n return null\r\n}\r\n\r\nfunction scanWorkspaceInWorker(\r\n rootDir: string,\r\n options: ScanWorkspaceOptions\r\n): Promise<ScanWorkspaceResult> {\r\n const normalizedOptions = parseScanWorkspaceOptions(options)\r\n const modulePath = resolveScannerWorkerModulePath()\r\n if (!modulePath) {\r\n return Promise.reject(new Error(\"scanner worker module path could not be resolved\"))\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n const settleState = { settled: false }\r\n\r\n const worker = new Worker(modulePath, { workerData: { rootDir, options: normalizedOptions } })\r\n\r\n const timeout = setTimeout(() => {\r\n if (!settleState.settled) {\r\n settleState.settled = true\r\n void worker.terminate()\r\n reject(new Error(`scanner worker timed out after ${SCAN_WORKER_TIMEOUT_MS}ms`))\r\n }\r\n }, SCAN_WORKER_TIMEOUT_MS)\r\n\r\n const finish = (callback: () => void) => {\r\n if (settleState.settled) return\r\n settleState.settled = true\r\n clearTimeout(timeout)\r\n callback()\r\n }\r\n\r\n worker.once(\"message\", (payload: unknown) => {\r\n const message = parseScannerWorkerMessage(payload)\r\n finish(() => {\r\n if (message?.ok) {\r\n resolve(parseScanWorkspaceResult(message.result))\r\n return\r\n }\r\n reject(new Error(message?.error ?? \"scanner worker failed without an error message\"))\r\n })\r\n })\r\n\r\n worker.once(\"error\", (error: Error) => {\r\n finish(() => reject(error))\r\n })\r\n\r\n worker.once(\"exit\", (code: number) => {\r\n if (code !== 0) {\r\n finish(() => reject(new Error(`scanner worker exited with code ${code}`)))\r\n }\r\n })\r\n })\r\n}\r\n\r\nfunction buildExtensionSet(includeExtensions: string[]): Set<string> {\r\n return new Set(includeExtensions)\r\n}\r\n\r\nfunction collectCandidates(\r\n rootDir: string,\r\n ignoreDirectories: Set<string>,\r\n extensionSet: Set<string>\r\n): string[] {\r\n const candidates: string[] = []\r\n const directories = [rootDir]\r\n\r\n while (directories.length > 0) {\r\n const currentDir = directories.pop()\r\n if (!currentDir) continue\r\n\r\n const entries = (() => {\r\n try {\r\n return fs.readdirSync(currentDir, { withFileTypes: true })\r\n } catch {\r\n return [] as fs.Dirent[]\r\n }\r\n })()\r\n\r\n for (const entry of entries) {\r\n const fullPath = path.join(currentDir, entry.name)\r\n\r\n if (entry.isDirectory()) {\r\n if (!ignoreDirectories.has(entry.name)) directories.push(fullPath)\r\n continue\r\n }\r\n\r\n if (!entry.isFile()) continue\r\n if (!extensionSet.has(path.extname(entry.name))) continue\r\n candidates.push(fullPath)\r\n }\r\n }\r\n\r\n return candidates\r\n}\r\n\r\nfunction toCacheSize(size: number): number {\r\n if (!Number.isFinite(size)) return 0\r\n const normalized = Math.max(0, Math.trunc(size))\r\n return Math.min(normalized, 0xffffffff)\r\n}\r\n\r\nexport function scanSource(source: string): string[] {\r\n const nativeBinding = nativeParserLoader.get()\r\n if (nativeBinding?.extractClassesFromSource) {\r\n const result = nativeBinding.extractClassesFromSource(source)\r\n // Rust mengembalikan ClassExtractResult { classes: string[], ... }\r\n // bukan plain string[] — handle kedua kemungkinan untuk backward compat\r\n if (Array.isArray(result)) {\r\n return Array.from(new Set(result.filter(Boolean)))\r\n }\r\n if (result !== null && result !== undefined && Array.isArray((result as NativeClassExtractResult).classes)) {\r\n return Array.from(new Set((result as NativeClassExtractResult).classes.filter(Boolean)))\r\n }\r\n }\r\n\r\n throw new Error(\r\n \"FATAL: Native parser binding is required but not available.\\n\" +\r\n \"This package requires native Rust bindings.\\n\\n\" +\r\n \"Resolution steps:\\n\" +\r\n \"1. Build the native Rust module: npm run build:rust\"\r\n )\r\n}\r\n\r\nexport function isScannableFile(filePath: string, includeExtensions = DEFAULT_EXTENSIONS): boolean {\r\n return includeExtensions.includes(path.extname(filePath))\r\n}\r\n\r\nexport function scanFile(filePath: string): ScanFileResult {\r\n const { scanFileNative } = require(\"./native-bridge\")\r\n const result = scanFileNative(filePath) as {\r\n file: string; classes: string[]; hash: string; ok: boolean; error?: string | null\r\n }\r\n if (!result.ok) {\r\n throw new Error(`scanFile failed for ${filePath}: ${result.error ?? \"unknown error\"}`)\r\n }\r\n return {\r\n file: result.file,\r\n classes: result.classes,\r\n ...(result.hash ? { hash: result.hash } : {}),\r\n }\r\n}\r\n\r\nexport function scanWorkspace(\r\n rootDir: string,\r\n options: ScanWorkspaceOptions = {}\r\n): ScanWorkspaceResult {\r\n const normalizedOptions = parseScanWorkspaceOptions(options)\r\n const includeExtensions = normalizedOptions.includeExtensions ?? DEFAULT_EXTENSIONS\r\n const extensionSet = buildExtensionSet(includeExtensions)\r\n const ignoreDirectories = new Set(normalizedOptions.ignoreDirectories ?? DEFAULT_IGNORES)\r\n const useCache = normalizedOptions.useCache ?? true\r\n const _smartInvalidation = normalizedOptions.smartInvalidation ?? true\r\n\r\n const files: ScanFileResult[] = []\r\n const unique = new Set<string>()\r\n const candidates = collectCandidates(rootDir, ignoreDirectories, extensionSet)\r\n\r\n const processResult = (result: ScanFileResult) => {\r\n files.push(result)\r\n for (const cls of result.classes) unique.add(cls)\r\n }\r\n\r\n \r\n const { scanWorkspaceNative } = require(\"./native-bridge\")\r\n\r\n if (!normalizedOptions.cacheDir && !useCache) {\r\n const nativeResult = scanWorkspaceNative(rootDir, includeExtensions)\r\n if (nativeResult) {\r\n return parseScanWorkspaceResult({\r\n files: nativeResult.files.map((f: { file: string; classes: string[]; hash?: string }) => ({\r\n file: f.file,\r\n classes: f.classes,\r\n ...(f.hash ? { hash: f.hash } : {}),\r\n })),\r\n totalFiles: nativeResult.totalFiles,\r\n uniqueClasses: nativeResult.uniqueClasses,\r\n })\r\n }\r\n }\r\n\r\n if (useCache && isRustCacheAvailable()) {\r\n const cacheEntries: NativeCacheEntry[] = (() => {\r\n try {\r\n return readCache(rootDir, normalizedOptions.cacheDir)\r\n } catch (error) {\r\n log.debug(\r\n `cache read failed, continuing without persisted cache: ${\r\n error instanceof Error ? error.message : String(error)\r\n }`\r\n )\r\n return []\r\n }\r\n })()\r\n\r\n const cacheMap = new Map(cacheEntries.map((entry) => [entry.file, entry]))\r\n const nowMs = Date.now()\r\n const ranked: Array<{\r\n filePath: string\r\n stat: fs.Stats\r\n size: number\r\n cached?: NativeCacheEntry\r\n priority: number\r\n }> = []\r\n\r\n for (const filePath of candidates) {\r\n const stat = (() => {\r\n try {\r\n return fs.statSync(filePath)\r\n } catch {\r\n return null\r\n }\r\n })()\r\n if (!stat) continue\r\n\r\n const size = toCacheSize(stat.size)\r\n const cached = cacheMap.get(filePath)\r\n const priority = filePriority(\r\n stat.mtimeMs,\r\n size,\r\n cached\r\n ? {\r\n mtimeMs: cached.mtimeMs,\r\n size: cached.size,\r\n hitCount: cached.hitCount,\r\n lastSeenMs: 0,\r\n }\r\n : undefined,\r\n nowMs\r\n )\r\n\r\n ranked.push({ filePath, stat, size, cached, priority })\r\n }\r\n\r\n ranked.sort((a, b) => b.priority - a.priority)\r\n\r\n const updatedEntries: NativeCacheEntry[] = []\r\n\r\n for (const { filePath, stat, size, cached } of ranked) {\r\n const content = (() => {\r\n try {\r\n return fs.readFileSync(filePath, \"utf8\")\r\n } catch {\r\n return null\r\n }\r\n })()\r\n if (!content) continue\r\n\r\n const hash = hashContentNative(content)\r\n if (\r\n cached &&\r\n cached.hash === hash &&\r\n cached.mtimeMs === stat.mtimeMs &&\r\n cached.size === size\r\n ) {\r\n log.debug(`cache HIT ${filePath}`)\r\n processResult({ file: filePath, classes: cached.classes })\r\n updatedEntries.push({\r\n file: filePath,\r\n classes: cached.classes,\r\n hash: cached.hash,\r\n mtimeMs: stat.mtimeMs,\r\n size,\r\n hitCount: (cached.hitCount ?? 0) + 1,\r\n })\r\n continue\r\n }\r\n\r\n log.debug(`cache MISS ${filePath}`)\r\n const classes = scanSource(content)\r\n processResult({ file: filePath, classes })\r\n updatedEntries.push({\r\n file: filePath,\r\n classes,\r\n hash,\r\n mtimeMs: stat.mtimeMs,\r\n size,\r\n hitCount: 1,\r\n })\r\n }\r\n\r\n try {\r\n writeCache(rootDir, updatedEntries, normalizedOptions.cacheDir)\r\n } catch (error) {\r\n log.debug(`cache write failed: ${error instanceof Error ? error.message : String(error)}`)\r\n }\r\n\r\n return parseScanWorkspaceResult({\r\n files,\r\n totalFiles: files.length,\r\n uniqueClasses: Array.from(unique).sort(),\r\n })\r\n }\r\n\r\n // Fast path: gunakan Rust batch extraction jika tersedia (parallel, tanpa GC)\r\n const batchNative = nativeParserLoader.get()?.batchExtractClassesNative\r\n if (batchNative) {\r\n const batchResults = batchNative(candidates)\r\n for (const r of batchResults ?? []) {\r\n if (r.ok) processResult({ file: r.file, classes: r.classes })\r\n }\r\n } else {\r\n for (const filePath of candidates) {\r\n processResult(scanFile(filePath))\r\n }\r\n }\r\n\r\n return parseScanWorkspaceResult({\r\n files,\r\n totalFiles: files.length,\r\n uniqueClasses: Array.from(unique).sort(),\r\n })\r\n}\r\n\r\nexport async function scanWorkspaceAsync(\r\n rootDir: string,\r\n options: ScanWorkspaceOptions = {}\r\n): Promise<ScanWorkspaceResult> {\r\n const normalizedOptions = parseScanWorkspaceOptions(options)\r\n\r\n // Large workspaces: use native parallel scanner (multiple workers + Rust rayon)\r\n try {\r\n return await scanWorkspaceParallel(rootDir, {\r\n extensions: normalizedOptions.includeExtensions,\r\n ignoreDirs: normalizedOptions.ignoreDirectories,\r\n }) as ScanWorkspaceResult\r\n } catch (parallelError) {\r\n log.debug(\r\n `parallel scan failed, retrying with single worker: ${\r\n parallelError instanceof Error ? parallelError.message : String(parallelError)\r\n }`\r\n )\r\n }\r\n\r\n // Fallback: single worker thread (still native)\r\n try {\r\n return await scanWorkspaceInWorker(rootDir, normalizedOptions)\r\n } catch (error) {\r\n log.debug(\r\n `worker scan failed, retrying with sync native scanner: ${\r\n error instanceof Error ? error.message : String(error)\r\n }`\r\n )\r\n return scanWorkspace(rootDir, normalizedOptions)\r\n }\r\n}\r\nexport { extractClassesNative, batchExtractClassesNative } from \"./native-bridge\"","/**\r\n * Engine — Rust native bridge\r\n *\r\n * Uses @tailwind-styled/shared for native binding resolution.\r\n */\r\nimport path from \"node:path\"\r\nimport {\r\n createDebugLogger,\r\n getDirname as getEsmDirname,\r\n loadNativeBinding,\r\n resolveNativeBindingCandidates,\r\n TwError,\r\n} from \"@tailwind-styled/shared\"\r\n\r\nconst log = createDebugLogger(\"engine:native\")\r\n\r\nfunction getDirname(): string {\r\n if (typeof __dirname !== \"undefined\") return __dirname\r\n if (typeof import.meta !== \"undefined\" && import.meta.url) {\r\n return getEsmDirname(import.meta.url)\r\n }\r\n return process.cwd()\r\n}\r\n\r\ninterface NativeEngineBinding {\r\n computeIncrementalDiff?: (\r\n previousJson: string,\r\n currentJson: string\r\n ) => {\r\n addedClasses: string[]\r\n removedClasses: string[]\r\n changedFiles: string[]\r\n unchangedFiles: number\r\n } | null\r\n hashFileContent?: (content: string) => string | null\r\n processFileChange?: (\r\n filepath: string,\r\n newClasses: string[],\r\n content: string | null\r\n ) => { added: string[]; removed: string[] } | null\r\n // Batch 3 additions\r\n parseCssRules?: (css: string) => Array<{\r\n className: string; property: string; value: string\r\n isImportant: boolean; variants: string[]; specificity: number\r\n }>\r\n batchSplitClasses?: (classes: string[]) => Array<{\r\n variantKey: string; base: string; variants: string[]\r\n isArbitrary: boolean; hasModifier: boolean; modifier?: string\r\n }>\r\n detectClassConflicts?: (usagesJson: string) => {\r\n conflicts: Array<{ group: string; variantKey: string; classes: string[]; message: string }>\r\n conflictedClassNames: string[]\r\n }\r\n classifyKnownClasses?: (classes: string[], safelist: string[], customUtilities: string[]) => Array<{\r\n className: string; isKnown: boolean; variantKey: string; baseClass: string\r\n utilityPrefix: string; isArbitrary: boolean\r\n }>\r\n diffClassLists?: (previous: string[], current: string[]) => {\r\n added: string[]; removed: string[]; unchanged: string[]; hasChanges: boolean\r\n }\r\n // Incremental helpers (incremental.rs)\r\n applyClassDiff?: (existing: string[], added: string[], removed: string[]) => string[]\r\n areClassSetsEqual?: (a: string[], b: string[]) => boolean\r\n rebuildWorkspaceResult?: (files: Array<{ file: string; classes: string[] }>) => {\r\n files: Array<{ file: string; classes: string[] }>\r\n totalFiles: number\r\n uniqueClasses: string[]\r\n }\r\n // Batch 4\r\n parseCssToRules?: (css: string, prefix?: string | null) => Array<{\r\n className: string; property: string; value: string; important: boolean\r\n variants: string[]; pseudoClasses: string[]; mediaQuery: string | null\r\n specificity: number; layer: string | null\r\n }>\r\n calculateBundleContributions?: (classes: string[], css: string) => Array<{\r\n className: string; sizeBytes: number; variantChains: string[]\r\n dependencies: string[]; inCss: boolean\r\n }>\r\n detectDeadCode?: (scanResultJson: string, css: string) => {\r\n deadInCss: string[]; deadInSource: string[]; liveClasses: string[]\r\n totalCssClasses: number; totalSourceClasses: number\r\n }\r\n calculateImpactScores?: (\r\n classes: string[], scanResultJson: string, css: string,\r\n usageWeight: number, sizeWeight: number\r\n ) => Array<{\r\n className: string; usageScore: number; sizeScore: number\r\n impactScore: number; usageCount: number; sizeBytes: number\r\n }>\r\n analyzeClassUsage?: (\r\n classes: string[], scanResultJson: string, css: string\r\n ) => Array<{\r\n className: string; usageCount: number; filesJson: string\r\n bundleSizeBytes: number; isDeadCode: boolean\r\n }>\r\n extractAllClasses?: (css: string) => string[]\r\n /** Build variant prefix dependency chain. e.g. \"md:hover:bg-red\" → [\"md:\", \"md:hover:\"] */\r\n buildDependencyChain: (className: string) => string[]\r\n analyzeRouteClassDistribution?: (routeFilesJson: string, scanResultJson: string) => Array<{\r\n route: string; classes: string[]; exclusiveClasses: string[]; classCount: number\r\n }>\r\n /**\r\n * Resolve CSS cascade for a set of rules — pure Rust computation.\r\n *\r\n * Rust #[napi] signature:\r\n * pub fn resolve_cascade(rules_json: String) -> String\r\n *\r\n * Input JSON: Array<{ id: number, property: number, origin: number,\r\n * importance: number, layerOrder: number, specificity: number,\r\n * conditionResult: number, insertionOrder: number }>\r\n *\r\n * Output JSON: { resolutions: Array<{ id: number, propertyId: number,\r\n * winnerId: number, loserIds: number[], stage: number,\r\n * finalDecision: string, causes: Array<{ type: string, [key: string]: unknown }> }> }\r\n */\r\n resolveCascade?: (rulesJson: string) => string\r\n /** FNV-1a fingerprint over ordered string parts — replaces createFingerprint() in ir.ts */\r\n createFingerprint?: (parts: string[]) => string\r\n /**\r\n * Parse CSS + assign semua IDs + fingerprint + assemble RuleIR — satu pass di Rust.\r\n *\r\n * Menggantikan JS loop di parseCssToIr() yang memanggil createFingerprint(),\r\n * registerPropertyName(), registerValueName() per-rule (N × NAPI calls → 1 call).\r\n *\r\n * Return AssembledIrResult: { rules, classToRuleIds, layers }\r\n * JS hanya wrap numerik IDs ke typed RuleId/PropertyId/dll objects.\r\n */\r\n assembleCssIr?: (css: string, prefix?: string | null) => {\r\n rules: Array<{\r\n ruleId: number; selectorId: number; propertyId: number; valueId: number\r\n layerId: number; conditionId: number\r\n propertyName: string; valueName: string; layerName: string\r\n origin: number; importance: number; layerOrder: number; specificity: number\r\n conditionResult: number; insertionOrder: number; fingerprint: string; className: string\r\n }>\r\n classToRuleIds: Array<{ className: string; ruleIds: number[] }>\r\n layers: Array<{ name: string; layerId: number; order: number }>\r\n }\r\n /** DashMap-backed CSS reverse lookup — replaces ReverseLookup class */\r\n reverseLookupFromCss?: (css: string, property: string, value: string) => Array<{\r\n property: string; value: string\r\n usedInClasses: Array<{ className: string; specificity: number; isOverride: boolean; variants: string[] }>\r\n }>\r\n reverseLookupByProperty?: (css: string, property: string) => Array<{\r\n property: string; value: string\r\n usedInClasses: Array<{ className: string; specificity: number; isOverride: boolean; variants: string[] }>\r\n }>\r\n reverseLookupFindDependents?: (css: string, className: string) => string[]\r\n reverseLookupClearCache?: () => void\r\n reverseLookupCacheSize?: () => number\r\n // Impact analysis (impact_analysis.rs)\r\n calculateImpact?: (impactJson: string) => string\r\n\r\n isCriticalClass?: (className: string) => boolean\r\n generateSuggestions?: (className: string, impactJson: string) => string[]\r\n computeImpactMetadata?: (className: string, impactJson: string) => string\r\n idRegistryActiveCount?: () => number\r\n\r\n/*\r\n // Impact scorer granular (impact_scorer.rs)\r\n // Dipakai oleh ImpactTracker sebagai alternatif calculateImpact yang lebih granular.\r\n isCriticalClass?: (className: string) => boolean\r\n generateSuggestions?: (className: string, impactJson: string) => string[]\r\n /**\r\n * Compute risk + savings + suggestions dalam satu call.\r\n * Menggantikan 3 call terpisah: calculateRisk + calculateSavings + generateSuggestions.\r\n * Input: {className, totalComponents, indirectUsage, bundleSizeBytes}\r\n * Output JSON: {riskLevel, estimatedSavings, suggestions}\r\n *\\/\r\n computeImpactMetadata?: (className: string, impactJson: string) => string\r\n \r\n // ID Registry diagnostics (id_registry.rs)\r\n idRegistryActiveCount?: () => number\r\n*/\r\n\r\n calculateRisk?: (className: string, totalComponents: number) => string\r\n calculateSavings?: (bundleSizeBytes: number, componentCount: number) => number\r\n // Class utilities (class_utils.rs) — menggantikan cn() di cx.ts\r\n resolveClassNames?: (inputs: string[]) => string\r\n // Property/Value name registry (domain/model.rs) — menggantikan in-memory Maps di ir.ts\r\n registerPropertyName?: (id: number, name: string) => void\r\n registerValueName?: (id: number, name: string) => void\r\n propertyIdToString?: (id: number) => string\r\n valueIdToString?: (id: number) => string\r\n clearNameRegistries?: () => void\r\n}\r\n\r\nconst isValidEngineBinding = (module: unknown): module is NativeEngineBinding => {\r\n const candidate = module as Partial<NativeEngineBinding> | null | undefined\r\n return !!(\r\n candidate &&\r\n (candidate.computeIncrementalDiff || candidate.processFileChange || candidate.hashFileContent)\r\n )\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────\r\n// Native Bridge - Factory Pattern\r\n// ─────────────────────────────────────────────────────────────────────────\r\n\r\nconst createEngineBindingLoader = () => {\r\n const _state = {\r\n binding: undefined as NativeEngineBinding | null | undefined,\r\n loadError: null as string | null,\r\n candidatePaths: [] as string[],\r\n }\r\n\r\n const throwNativeBindingError = (): never => {\r\n const lines = [\r\n \"FATAL: Native engine binding not found.\",\r\n \"\",\r\n \"This package requires the Rust native binding 'tailwind_styled_parser.node'.\",\r\n \"The binding was not found in any of these paths:\",\r\n ..._state.candidatePaths.map((p) => ` - ${p}`),\r\n \"\",\r\n ]\r\n\r\n if (_state.loadError) {\r\n lines.push(\"Load error:\", ` ${_state.loadError}`, \"\")\r\n }\r\n\r\n lines.push(\r\n \"To fix this, run:\",\r\n \" npm run build:rust\",\r\n \"\",\r\n \"This will build the native Rust module from the 'native/' directory.\",\r\n \"If you're using this package in a CI/CD environment, ensure Rust toolchain is installed\",\r\n \"and 'npm run build:rust' is executed before running tests or building.\"\r\n )\r\n\r\n throw new TwError(\"rust\", \"ENGINE_NATIVE_BINDING_NOT_FOUND\", lines.join(\"\\n\"))\r\n }\r\n\r\n const getBinding = (): NativeEngineBinding => {\r\n const cached = _state.binding\r\n if (cached !== undefined) {\r\n if (cached === null) {\r\n return throwNativeBindingError()\r\n }\r\n return cached\r\n }\r\n\r\n const runtimeDir = getDirname()\r\n const candidates = resolveNativeBindingCandidates({\r\n runtimeDir,\r\n includeDefaultCandidates: true,\r\n })\r\n\r\n _state.candidatePaths = candidates\r\n\r\n const { binding, loadErrors } = loadNativeBinding<NativeEngineBinding>({\r\n runtimeDir,\r\n candidates,\r\n isValid: isValidEngineBinding,\r\n invalidExportMessage: \"Module loaded but missing expected engine binding functions\",\r\n })\r\n\r\n if (binding) {\r\n log(`engine native binding loaded successfully`)\r\n _state.binding = binding\r\n return binding\r\n }\r\n\r\n if (loadErrors.length > 0) {\r\n _state.loadError = loadErrors.map((e) => `${e.path}: ${e.message}`).join(\"; \")\r\n }\r\n\r\n _state.binding = null\r\n return throwNativeBindingError()\r\n }\r\n\r\n return {\r\n get: getBinding,\r\n reset: (): void => {\r\n _state.binding = undefined\r\n _state.loadError = null\r\n _state.candidatePaths = []\r\n },\r\n }\r\n}\r\n\r\nconst engineBindingLoader = createEngineBindingLoader()\r\n\r\nexport function getNativeEngineBinding(): NativeEngineBinding {\r\n return engineBindingLoader.get()\r\n}\r\n\r\nexport function computeIncrementalDiff(\r\n previousJson: string,\r\n currentJson: string\r\n): {\r\n addedClasses: string[]\r\n removedClasses: string[]\r\n changedFiles: string[]\r\n unchangedFiles: number\r\n} {\r\n const result = getNativeEngineBinding().computeIncrementalDiff?.(previousJson, currentJson)\r\n if (result === null || result === undefined) {\r\n throw new TwError(\r\n \"rust\",\r\n \"ENGINE_DIFF_FAILED\",\r\n \"Native computeIncrementalDiff returned null/undefined\"\r\n )\r\n }\r\n return result\r\n}\r\n\r\nexport function hashFileContent(content: string): string {\r\n const result = getNativeEngineBinding().hashFileContent?.(content)\r\n if (result === null || result === undefined) {\r\n throw new TwError(\r\n \"rust\",\r\n \"ENGINE_HASH_FAILED\",\r\n \"Native hashFileContent returned null/undefined\"\r\n )\r\n }\r\n return result\r\n}\r\n\r\nexport function processFileChange(\r\n filepath: string,\r\n newClasses: string[],\r\n content: string | null\r\n): { added: string[]; removed: string[] } {\r\n const result = getNativeEngineBinding().processFileChange?.(filepath, newClasses, content)\r\n if (result === null || result === undefined) {\r\n throw new TwError(\r\n \"rust\",\r\n \"ENGINE_PROCESS_FAILED\",\r\n \"Native processFileChange returned null/undefined\"\r\n )\r\n }\r\n return result\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Route-level CSS analysis\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface RouteClassMap {\r\n route: string\r\n classes: string[]\r\n exclusiveClasses: string[]\r\n classCount: number\r\n}\r\n\r\n/**\r\n * Analisis distribusi classes per route — untuk CSS code splitting.\r\n *\r\n * @param routeFiles - map { route: filePath[] } menentukan file mana ke route mana\r\n * @param scanResult - hasil scan workspace\r\n *\r\n * @example\r\n * const routes = analyzeRouteClassDistribution(\r\n * { \"/\": [\"src/app/page.tsx\"], \"/about\": [\"src/app/about/page.tsx\"] },\r\n * scanResult\r\n * )\r\n */\r\nexport function analyzeRouteClassDistribution(\r\n routeFiles: Record<string, string[]>,\r\n scanResult: { files: Array<{ file: string; classes: string[] }> }\r\n): RouteClassMap[] {\r\n const native = getNativeEngineBinding()\r\n if (!native?.analyzeRouteClassDistribution) {\r\n throw new Error(\"FATAL: Native binding 'analyzeRouteClassDistribution' is required but not available.\")\r\n }\r\n return native.analyzeRouteClassDistribution(\r\n JSON.stringify(routeFiles),\r\n JSON.stringify(scanResult)\r\n ) as RouteClassMap[]\r\n}\r\n\r\n// ═══════════════════════════════════════════════════════════════════════════\r\n \r\n/*\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// ID Registry diagnostics\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n \r\n/**\r\n * Jumlah ID registry yang aktif saat ini.\r\n * Berguna untuk diagnostics dan memory leak detection di development.\r\n *\r\n * @example\r\n * console.log(`Active registries: ${getIdRegistryActiveCount()}`)\r\n *\\/\r\nexport function getIdRegistryActiveCount(): number {\r\n return getNativeEngineBinding().idRegistryActiveCount?.() ?? 0\r\n}\r\n*/\r\n\r\nexport function getIdRegistryActiveCount(): number {\r\n return getNativeEngineBinding().idRegistryActiveCount?.() ?? 0\r\n}","/**\r\n * tailwind-styled-v5 — Native Rust Bindings\r\n *\r\n * All functions require native Rust bindings.\r\n * Uses @tailwind-styled/shared for native resolution.\r\n */\r\n\r\nimport { createRequire } from \"node:module\"\r\nimport { dirname } from \"node:path\"\r\nimport { fileURLToPath } from \"node:url\"\r\nimport { resolveNativeBinary } from \"@tailwind-styled/shared\"\r\n\r\nconst isBrowser = typeof window !== \"undefined\" || typeof document !== \"undefined\"\r\nconst NATIVE_UNAVAILABLE_MESSAGE =\r\n \"[tailwind-styled/core] Native binding is required but not available.\\n\" +\r\n \"Please ensure you have run: npm run build:rust\"\r\n\r\nconst _nodeRequire = createRequire(import.meta.url)\r\nconst _loadNative = (path: string): unknown => _nodeRequire(path)\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Type Definitions\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface ParsedClassModifier {\r\n type: \"opacity\" | \"arbitrary\"\r\n value: string\r\n}\r\n\r\nexport interface ParsedClass {\r\n raw: string\r\n base: string\r\n variants: string[]\r\n modifier?: ParsedClassModifier\r\n}\r\n\r\nexport interface ThemeConfig {\r\n colors: Record<string, string>\r\n spacing: Record<string, string>\r\n fonts: Record<string, string>\r\n breakpoints: Record<string, string>\r\n animations: Record<string, string>\r\n raw: Record<string, string>\r\n}\r\n\r\ninterface NativeBinding {\r\n batchSplitClasses?: (input: string[]) => Array<{\r\n variantKey: string\r\n base: string\r\n variants: string[]\r\n isArbitrary: boolean\r\n hasModifier: boolean\r\n }>\r\n \r\n twMergeRaw?: (classLists: string[]) => string\r\n flattenAndResolve?: (nestedJson: string) => string\r\n resolveConflictGroup?: (base: string) => string\r\n\r\n compileTheme?: (themeConfig: string) => { css: string; variables: Record<string, string> }\r\n extractCssVars?: (css: string) => Record<string, string>\r\n extractThemeFromCss?: (css: string) => Array<{ key: string; value: string }>\r\n parseCssRules?: (css: string) => Array<{\r\n className: string\r\n property: string\r\n value: string\r\n isImportant: boolean\r\n variants: string[]\r\n specificity: number\r\n }>\r\n parseCssToRules?: (css: string) => string\r\n detectDeadCode?: (css: string, usedClasses: string[]) => string[]\r\n classifyKnownClasses?: (classes: string[]) => Array<{ className: string; category: string }>\r\n detectClassConflicts?: (classes: string) => { conflicts: Array<{ class1: string; class2: string; reason: string }>; conflictedClassNames: string[] }\r\n resolveVariants?: (configJson: string, propsJson: string) => { classes: string; resolvedCount: number }\r\n resolveSimpleVariants?: (base: string | null, variants: Record<string, Record<string, string>>, defaults: Record<string, string>, props: Record<string, string>) => string\r\n /** Parse template literal yang sudah di-join. Menggantikan parseTemplate() di twProxy.ts */\r\n parseTemplate?: (raw: string) => {\r\n base: string\r\n subsJson: string\r\n hasSubs: boolean\r\n }\r\n /** Validate ComponentConfig — menggantikan validateVariantConfig() di cv.ts */\r\n validateVariantConfig?: (configJson: string) => {\r\n valid: boolean\r\n errors: Array<{ errorType: string; key: string; value?: string; message: string }>\r\n warnings: string[]\r\n }\r\n /** Build lookup key untuk generated registry — menggantikan key builder di lookupGenerated() */\r\n buildVariantLookupKey?: (defaultVariantsJson: string, propsJson: string) => string\r\n /** Menggantikan cn() — filter+join class names dalam satu Rust pass. (class_utils.rs) */\r\n resolveClassNames?: (inputs: string[]) => string\r\n /** tw_merge dengan custom separator dan optional debug */\r\n twMergeWithSeparator?: (classString: string, opts: { separator?: string; debug?: boolean }) => string\r\n /** tw_merge_many dengan custom separator */\r\n twMergeManyWithSeparator?: (classStrings: string[], opts: { separator?: string; debug?: boolean }) => string\r\n /** conflict-aware Tailwind class merger — port of tailwind-merge. (tw_merge.rs) */\r\n twMerge?: (classString: string) => string\r\n /** variadic convenience wrapper untuk twMerge. (tw_merge.rs) */\r\n twMergeMany?: (classStrings: string[]) => string\r\n /** Tailwind classes → semicolon-separated inline CSS declarations. (state_css.rs) */\r\n twClassesToCss?: (classes: string) => string\r\n /**\r\n * Generate semua CSS rules untuk satu component dari state config — satu Rust call.\r\n *\r\n * Menggantikan JS loop di `injectStateStyles()` dan `generateStateCss()` yang\r\n * memanggil `twClassesToCss()` per state entry (N × NAPI calls → 1 call).\r\n *\r\n * @param id Component state class, e.g. `\"tw-s-abc123\"`\r\n * @param stateMapJson JSON object `{\"loading\":\"opacity-60 cursor-wait\",\"selected\":\"ring-2\"}`\r\n * @param resolvedCss Opsional Tailwind pipeline CSS untuk resolve named classes\r\n * @returns Array of `{ cssRule, stateName, declarations }` — satu per state entry\r\n */\r\n generateRuntimeStateCss?: (\r\n id: string,\r\n stateMapJson: string,\r\n resolvedCss: string | null\r\n ) => Array<{ cssRule: string; stateName: string; declarations: string }>\r\n /**\r\n * Hash a content string — menggantikan JS djb2 loop di hashState() dan hashContainer().\r\n * algorithm: \"md5\" | \"sha256\" | \"fnv\" | \"ahash\" (default: \"md5\")\r\n * length: potong output hex ke N karakter (mis. 6 untuk short ID)\r\n */\r\n hashContent?: (content: string, algorithm?: \"md5\" | \"sha256\" | \"fnv\" | \"ahash\", length?: number) => string\r\n /** Iterative CSS var() chain resolver. (theme.rs) */\r\n resolveThemeValue?: (key: string, rawMapJson: string) => string\r\n /**\r\n * Parse @theme CSS blocks, classify tokens ke buckets, resolve semua var() —\r\n * satu Rust call menggantikan extractThemeFromCss() + N × resolveThemeValue().\r\n * Return ClassifiedThemeConfig: { colors, spacing, fonts, breakpoints, animations, raw }\r\n */\r\n extractThemeFromCssClassified?: (css: string) => {\r\n colors: Record<string, string>\r\n spacing: Record<string, string>\r\n fonts: Record<string, string>\r\n breakpoints: Record<string, string>\r\n animations: Record<string, string>\r\n raw: Record<string, string>\r\n }\r\n /**\r\n * Generate TypeScript interface TailwindStyledThemeTokens dari theme JSON.\r\n * Build-time CLI only (tw generate-types). Menggantikan generateTypeDefinitions() JS.\r\n */\r\n generateTypeDefinitions?: (themeJson: string) => string\r\n /**\r\n * Generate `:root { --prefix-group-name: value; ... }` CSS block dari SystemTokenMap.\r\n *\r\n * Menggantikan nested JS loop di `injectTokensToRoot()` dan `setTokens()` di `styledSystem.ts`.\r\n *\r\n * `tokensJson`: JSON dari `SystemTokenMap` — `{\"colors\":{\"primary\":\"#6366f1\"},\"radius\":{\"base\":\"0.5rem\"}}`\r\n * `prefix`: CSS variable prefix, e.g. `\"sys\"` → `--sys-colors-primary`\r\n */\r\n generateSystemTokenCss?: (tokensJson: string, prefix: string) => string\r\n /** Parse sub-component block syntax from tw`` template. (tw_merge.rs) */\r\n parseSubcomponentBlocksNapi?: (template: string, componentName: string) => {\r\n baseClasses: string\r\n subMapJson: string\r\n }\r\n /** Menggantikan layoutClassesToCss() — static lookup + split dalam satu Rust pass. (container_query.rs) */\r\n layoutClassesToCss?: (classes: string) => string\r\n /** Menggantikan buildContainerRules() — generate @container CSS rules. (container_query.rs) */\r\n buildContainerRules?: (\r\n id: string,\r\n breakpoints: Array<{ key: string; classes: string }>,\r\n containerName: string | null\r\n ) => string\r\n /** Pre-generate semua kombinasi boolean states via bitmask (tw_merge.rs) */\r\n pregenerateStatesNapi?: (states: Record<string, string>) => {\r\n lookupJson: string\r\n stateKeys: string[]\r\n combinations: number\r\n }\r\n\r\n // ── Theme Parsing (napi_bridge_theme_parsing.rs) ───────────────────────────\r\n parseColorsNapi?: (colorsJson: string) => string | Record<string, string>\r\n parseSpacingNapi?: (spacingJson: string) => string | Record<string, string>\r\n parseTransformNapi?: (transformJson: string) => string | Record<string, string>\r\n normalizeColorNapi?: (color: string, opacity: string) => string\r\n sanitizeColorNapi?: (color: string) => string\r\n splitRgbaNapi?: (color: string) => string | { r: number; g: number; b: number; a: number }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Binding Loader\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nlet nativeBinding: NativeBinding | null = null\r\nlet bindingLoadAttempted = false\r\n\r\nconst getBinding = (): NativeBinding => {\r\n if (isBrowser) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE + \"\\n\\nNative bindings are not available in browser. Use the compiled CSS output instead.\")\r\n }\r\n \r\n if (nativeBinding) return nativeBinding\r\n\r\n if (bindingLoadAttempted) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n\r\n bindingLoadAttempted = true\r\n\r\n try {\r\n const runtimeDir = isBrowser ? \"\" : dirname(fileURLToPath(import.meta.url))\r\n const result = isBrowser\r\n ? { path: null, source: \"not-found\", platform: \"browser\", tried: [] }\r\n : resolveNativeBinary(runtimeDir)\r\n\r\n if (result.path && result.path.endsWith(\".node\")) {\r\n const mod = _loadNative(result.path) as NativeBinding\r\n if (mod?.batchSplitClasses) {\r\n nativeBinding = mod\r\n return nativeBinding\r\n }\r\n }\r\n\r\n throw new Error(`${NATIVE_UNAVAILABLE_MESSAGE}\\n\\nTried: ${result.tried.join(\"\\n\")}`)\r\n } catch (err) {\r\n throw err instanceof Error ? err : new Error(String(err))\r\n }\r\n}\r\n\r\nexport const resetNativeBinding = (): void => {\r\n nativeBinding = null\r\n bindingLoadAttempted = false\r\n}\r\n\r\nexport const getNativeBinding = getBinding\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Parser Functions\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction splitClassListNative(input: string): string[] {\r\n const binding = getBinding()\r\n if (!binding?.batchSplitClasses) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n const result = binding.batchSplitClasses([input])\r\n if (result.length === 0) return []\r\n return result[0].base.split(\" \").filter(Boolean)\r\n}\r\n\r\nfunction parseClassTokenNative(rawToken: string): ParsedClass {\r\n const binding = getBinding()\r\n if (!binding?.batchSplitClasses) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n const result = binding.batchSplitClasses([rawToken])\r\n if (result.length === 0) {\r\n return { raw: rawToken, base: rawToken, variants: [] }\r\n }\r\n const r = result[0]\r\n const parsed: ParsedClass = {\r\n raw: r.base,\r\n base: r.base,\r\n variants: r.variants,\r\n }\r\n if (r.hasModifier) {\r\n const opacityMatch = r.base.match(/^(.*)\\/(\\d{1,3})$/)\r\n if (opacityMatch && opacityMatch[1].length > 0) {\r\n parsed.base = opacityMatch[1]\r\n parsed.modifier = { type: \"opacity\", value: opacityMatch[2] }\r\n } else {\r\n const arbitraryMatch = r.base.match(/\\((--[a-zA-Z0-9_-]+)\\)/)\r\n if (arbitraryMatch) {\r\n parsed.modifier = { type: \"arbitrary\", value: arbitraryMatch[1] }\r\n }\r\n }\r\n }\r\n return parsed\r\n}\r\n\r\nexport function splitClassList(input: string): string[] {\r\n return splitClassListNative(input)\r\n}\r\n\r\nexport function parseClassToken(rawToken: string): ParsedClass {\r\n return parseClassTokenNative(rawToken)\r\n}\r\n\r\nexport function parseTailwindClasses(input: string): ParsedClass[] {\r\n const classes = splitClassListNative(input)\r\n return classes.map((c) => parseClassTokenNative(c))\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// CSS/Theme Functions\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport function compileTheme(themeConfig: Record<string, unknown>) {\r\n const binding = getBinding()\r\n if (!binding?.compileTheme) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n return binding.compileTheme(JSON.stringify(themeConfig))\r\n}\r\n\r\nexport function extractCssVars(css: string): Record<string, string> {\r\n const binding = getBinding()\r\n if (!binding?.extractCssVars) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n return binding.extractCssVars(css)\r\n}\r\n\r\nexport function parseCssRules(css: string) {\r\n const binding = getBinding()\r\n if (!binding?.parseCssRules) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n return binding.parseCssRules(css)\r\n}\r\n\r\nexport function parseCssToRules(css: string): string {\r\n const binding = getBinding()\r\n if (!binding?.parseCssToRules) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n return binding.parseCssToRules(css)\r\n}\r\n\r\nexport function detectDeadCode(css: string, usedClasses: string[]): string[] {\r\n const binding = getBinding()\r\n if (!binding?.detectDeadCode) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n return binding.detectDeadCode(css, usedClasses)\r\n}\r\n\r\nexport function classifyKnownClasses(classes: string[]) {\r\n const binding = getBinding()\r\n if (!binding?.classifyKnownClasses) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n return binding.classifyKnownClasses(classes)\r\n}\r\n\r\nexport function detectClassConflicts(classes: string[]) {\r\n const binding = getBinding()\r\n if (!binding?.detectClassConflicts) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n return binding.detectClassConflicts(classes.join(\" \"))\r\n}\r\n\r\nexport function extractThemeFromCSS(cssContent: string): ThemeConfig {\r\n const binding = getBinding()\r\n if (!binding?.parseCssRules) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n \r\n const properties = binding.parseCssRules(cssContent)\r\n const theme: ThemeConfig = {\r\n colors: {},\r\n spacing: {},\r\n fonts: {},\r\n breakpoints: {},\r\n animations: {},\r\n raw: {},\r\n }\r\n \r\n const prefixMap: Record<string, keyof ThemeConfig> = {\r\n \"color-\": \"colors\",\r\n \"spacing-\": \"spacing\",\r\n \"font-\": \"fonts\",\r\n \"breakpoint-\": \"breakpoints\",\r\n \"animate-\": \"animations\",\r\n }\r\n \r\n for (const prop of properties) {\r\n const cssVar = prop.property.replace(/^--/, \"\")\r\n theme.raw[cssVar] = prop.value\r\n \r\n for (const [prefix, category] of Object.entries(prefixMap)) {\r\n if (cssVar.startsWith(prefix)) {\r\n const name = cssVar.slice(prefix.length)\r\n if (name) theme[category][name] = prop.value\r\n break\r\n }\r\n }\r\n }\r\n \r\n return theme\r\n}","/**\r\n * tailwind-styled-v4 — Container Query Engine\r\n *\r\n * Generates @container rules from a simple breakpoint config.\r\n *\r\n * Usage:\r\n * const Card = tw.div({\r\n * base: \"p-4\",\r\n * container: {\r\n * sm: \"flex-col\", // @container (min-width: 320px)\r\n * md: \"flex-row\", // @container (min-width: 640px)\r\n * lg: \"grid-cols-3\", // @container (min-width: 1024px)\r\n * },\r\n * containerName: \"card\",\r\n * })\r\n *\r\n * // Wrap with container context:\r\n * const CardWrapper = tw.div`@container`\r\n *\r\n * Named containers:\r\n * const SidebarCard = tw.div({\r\n * base: \"p-2\",\r\n * container: { lg: \"text-sm\" },\r\n * containerName: \"sidebar\",\r\n * })\r\n * // Generates: @container sidebar (min-width: 1024px) { ... }\r\n */\r\n\r\nimport type { ContainerConfig } from \"./types\"\r\nimport { getNativeBinding } from \"./native\"\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Breakpoint map — matches Tailwind defaults\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// Registry\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface ContainerEntry {\r\n id: string\r\n tag: string\r\n containerName?: string\r\n breakpoints: Array<{ minWidth: string; classes: string }>\r\n cssInjected: boolean\r\n}\r\n\r\nconst containerRegistry = new Map<string, ContainerEntry>()\r\n\r\ndeclare global {\r\n interface Window {\r\n __TW_CONTAINER_REGISTRY__?: typeof containerRegistry\r\n }\r\n}\r\n\r\nif (typeof window !== \"undefined\") {\r\n window.__TW_CONTAINER_REGISTRY__ = containerRegistry\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Hash\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n// Cache untuk hashContainer — container config tidak berubah antar render.\r\n// Sama dengan _hashStateCache di stateEngine.ts.\r\nconst _hashContainerCache = new Map<string, string>()\r\n\r\nfunction hashContainer(tag: string, container: ContainerConfig, name?: string): string {\r\n const sortedKey = tag + (name ?? \"\") + JSON.stringify(Object.entries(container).sort())\r\n const cached = _hashContainerCache.get(sortedKey)\r\n if (cached) return cached\r\n\r\n const native = getNativeBinding()\r\n if (!native?.hashContent) {\r\n throw new Error(\"FATAL: Native binding 'hashContent' is required but not available.\")\r\n }\r\n const id = `tw-cq-${native.hashContent(sortedKey, \"fnv\", 6)}`\r\n\r\n _hashContainerCache.set(sortedKey, id)\r\n return id\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// CSS generator\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Konversi layout class string → inline CSS declarations.\r\n * Native-only: Rust static lookup table (zero alloc) + split_whitespace.\r\n */\r\nfunction layoutClassesToCss(classes: string): string {\r\n const native = getNativeBinding()\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 buildContainerRules(\r\n id: string,\r\n container: ContainerConfig,\r\n containerName?: string\r\n): string {\r\n const rules = Object.entries(container)\r\n .map(([key, value]) => {\r\n const minWidth =\r\n typeof value === \"string\"\r\n ? (CONTAINER_BREAKPOINTS[key] ?? key)\r\n : (value.minWidth ?? CONTAINER_BREAKPOINTS[key] ?? key)\r\n const classes = typeof value === \"string\" ? value : value.classes\r\n\r\n const css = layoutClassesToCss(classes)\r\n if (!css) return null\r\n\r\n const query = containerName\r\n ? `@container ${containerName} (min-width: ${minWidth})`\r\n : `@container (min-width: ${minWidth})`\r\n\r\n return `${query}{.${id}{${css}}}`\r\n })\r\n .filter(Boolean) as string[]\r\n\r\n return rules.join(\"\\n\")\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Batched injector — resolve sekali di module load\r\nlet _cqBatchedInjectFn: ((css: string) => void) | null = null\r\ntry {\r\n // eslint-disable-next-line @typescript-eslint/no-var-requires\r\n const mod = require(\"@tailwind-styled/runtime-css/batched\") as { batchedInject: (css: string) => void }\r\n if (typeof mod?.batchedInject === \"function\") _cqBatchedInjectFn = mod.batchedInject\r\n} catch { /* runtime-css tidak terinstall */ }\r\n\r\n// Static CSS detection cache — skip injection kalau @container rule sudah ada di stylesheet\r\nconst _cqStaticDetected = new Set<string>()\r\n\r\n// Style injection\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction injectContainerStyles(\r\n id: string,\r\n container: ContainerConfig,\r\n containerName?: string\r\n): void {\r\n if (typeof document === \"undefined\") return\r\n const styleId = `tw-cq-${id}`\r\n if (document.getElementById(styleId)) return\r\n\r\n // ── Static CSS guard ─────────────────────────────────────────────────────\r\n // Skip injection kalau @container rule untuk ID ini sudah ada di stylesheet statis.\r\n if (_cqStaticDetected.has(id)) return\r\n if (typeof document.styleSheets !== \"undefined\") {\r\n // Cari @container rule yang mengandung selector `.{id}` di dalamnya\r\n const selectorTarget = `.${id}`\r\n for (let i = 0; i < document.styleSheets.length; i++) {\r\n try {\r\n const rules = document.styleSheets[i].cssRules\r\n for (let j = 0; j < rules.length; j++) {\r\n const rule = rules[j]\r\n // CSSContainerRule (instanceof CSSRule type 12) atau CSSMediaRule\r\n if (rule.cssText.includes(selectorTarget)) {\r\n _cqStaticDetected.add(id)\r\n return\r\n }\r\n }\r\n } catch { continue }\r\n }\r\n }\r\n\r\n const css = buildContainerRules(id, container, containerName)\r\n if (!css) return\r\n\r\n // _batchedInjectFn di-resolve sekali di module level (lihat deklarasi di atas)\r\n if (_cqBatchedInjectFn) {\r\n for (const rule of css.split(\"\\n\").filter(Boolean)) _cqBatchedInjectFn(rule)\r\n return\r\n }\r\n\r\n const style = document.createElement(\"style\")\r\n style.id = styleId\r\n style.setAttribute(\"data-tw-container\", id)\r\n style.textContent = css\r\n document.head.appendChild(style)\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Public API\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface ContainerQueryResult {\r\n containerClass: string\r\n hasContainer: true\r\n}\r\n\r\nexport function processContainer(\r\n tag: string,\r\n container: ContainerConfig,\r\n containerName?: string\r\n): ContainerQueryResult {\r\n const id = hashContainer(tag, container, containerName)\r\n\r\n if (!containerRegistry.has(id)) {\r\n const breakpoints = Object.entries(container).map(([key, value]) => ({\r\n minWidth: CONTAINER_BREAKPOINTS[key] ?? key,\r\n classes: typeof value === \"string\" ? value : value.classes,\r\n }))\r\n containerRegistry.set(id, {\r\n id,\r\n tag,\r\n containerName,\r\n breakpoints,\r\n cssInjected: false,\r\n })\r\n }\r\n\r\n injectContainerStyles(id, container, containerName)\r\n containerRegistry.get(id)!.cssInjected = true\r\n\r\n return { containerClass: id, hasContainer: true }\r\n}\r\n\r\n/**\r\n * Generate @container CSS rules dari breakpoint config.\r\n *\r\n * Native-only: Rust string building tanpa intermediate allocations.\r\n */\r\nexport function generateContainerCss(\r\n tag: string,\r\n container: ContainerConfig,\r\n containerName?: string\r\n): string {\r\n const id = hashContainer(tag, container, containerName)\r\n\r\n const native = getNativeBinding()\r\n if (!native?.buildContainerRules) {\r\n throw new Error(\"FATAL: Native binding 'buildContainerRules' is required but not available.\")\r\n }\r\n const breakpoints = Object.entries(container).map(([key, value]) => ({\r\n key,\r\n classes: typeof value === \"string\" ? value : value.classes,\r\n }))\r\n return native.buildContainerRules(id, breakpoints, containerName ?? null)\r\n}\r\n\r\nexport function getContainerRegistry(): Map<string, ContainerEntry> {\r\n return containerRegistry\r\n}","/**\r\n * tailwind-styled-v4 — createTwMerge()\r\n * Pure Node.js — requires native Rust binding.\r\n */\r\n\r\nimport { getNativeBinding } from \"./native\"\r\nimport type { ThemeConfig } from \"./themeReader\"\r\n\r\nexport interface MergeOptions {\r\n prefix?: string\r\n separator?: string\r\n theme?: ThemeConfig\r\n}\r\n\r\nexport function createTwMerge(_options: MergeOptions = {}) {\r\n return function twMerge(...classLists: Array<string | undefined | null | false>): string {\r\n const inputs: string[] = []\r\n for (let i = 0; i < classLists.length; i++) {\r\n const v = classLists[i]\r\n if (v) inputs.push(String(v))\r\n }\r\n if (inputs.length === 0) return \"\"\r\n\r\n const native = getNativeBinding()\r\n if (!native?.twMergeRaw) {\r\n throw new Error(\"Native binding 'twMergeRaw' is required but not available.\")\r\n }\r\n return native.twMergeRaw(inputs)\r\n }\r\n}\r\n\r\nexport const twMerge = createTwMerge()\r\n\r\nexport function mergeWithRules(\r\n rules: Record<string, (classes: string[]) => string>,\r\n ...classLists: string[]\r\n): string {\r\n const base = twMerge(...classLists)\r\n const classes = Object.values(rules).reduce(\r\n (acc, rule) => twMerge(rule(acc)).split(/\\s+/).filter(Boolean),\r\n base.split(/\\s+/).filter(Boolean)\r\n )\r\n return classes.join(\" \")\r\n}","/**\r\n * tailwind-styled-v4 — Reactive State Engine\r\n *\r\n * Zero-JS CSS state management via data attributes.\r\n * No React re-render needed for style changes.\r\n *\r\n * How it works:\r\n * 1. tw.button({ state: { active: \"bg-blue-500\", loading: \"opacity-70\" } })\r\n * 2. State engine generates a unique class + injects CSS:\r\n * .tw-s-abc123[data-active=\"true\"] { @apply bg-blue-500; }\r\n * .tw-s-abc123[data-loading=\"true\"] { @apply opacity-70; }\r\n * 3. Component renders with the state class\r\n * 4. User sets data-active=\"true\" directly — no state needed\r\n *\r\n * Devtools integration:\r\n * All components register to __TW_STATE_REGISTRY__ for devtools inspection.\r\n */\r\n\r\nimport type { StateConfig } from \"./types\"\r\nimport { getNativeBinding } from \"./native\"\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Registry — tracks all state-enabled components\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface StateComponentEntry {\r\n id: string\r\n tag: string\r\n states: string[]\r\n cssInjected: boolean\r\n}\r\n\r\nconst stateRegistry = new Map<string, StateComponentEntry>()\r\n\r\ndeclare global {\r\n interface Window {\r\n __TW_STATE_REGISTRY__?: typeof stateRegistry\r\n }\r\n}\r\n\r\nif (typeof window !== \"undefined\") {\r\n window.__TW_STATE_REGISTRY__ = stateRegistry\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Deterministic hash — same config → same class (no re-injection on HMR)\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n// Cache untuk hashState — state config tidak berubah antar render,\r\n// hash hanya perlu dihitung sekali per (tag, state) kombinasi.\r\nconst _hashStateCache = new Map<string, string>()\r\n\r\nfunction hashState(tag: string, state: StateConfig): string {\r\n // Key untuk cache: sort untuk determinism (Object.entries order tidak guaranteed)\r\n const sortedKey = tag + JSON.stringify(Object.entries(state).sort())\r\n const cached = _hashStateCache.get(sortedKey)\r\n if (cached) return cached\r\n\r\n const native = getNativeBinding()\r\n if (!native?.hashContent) {\r\n throw new Error(\"FATAL: Native binding 'hashContent' is required but not available.\")\r\n }\r\n const id = `tw-s-${native.hashContent(sortedKey, \"fnv\", 6)}`\r\n\r\n _hashStateCache.set(sortedKey, id)\r\n return id\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// CSS generator — Tailwind class → plain CSS via Rust (required)\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Convert Tailwind utility classes → semicolon-separated inline CSS declarations.\r\n * Native-only: delegates ke Rust `tw_classes_to_css` (state_css.rs).\r\n *\r\n * @internal — called by injectStateStyles()\r\n */\r\n// Cache untuk twClassesToCss — classes string dari state config tidak berubah.\r\n// Ini hot path: dipanggil untuk setiap state entry setiap kali injectStateStyles\r\n// dipanggil. Dengan cache, Rust hanya dipanggil sekali per unique class string.\r\nconst _twClassesToCssCache = new Map<string, string>()\r\n\r\nfunction twClassesToCss(classes: string): string {\r\n const cached = _twClassesToCssCache.get(classes)\r\n if (cached !== undefined) return cached\r\n\r\n const native = getNativeBinding()\r\n if (!native?.twClassesToCss) {\r\n throw new Error(\"FATAL: Native binding 'twClassesToCss' is required but not available.\")\r\n }\r\n const result = native.twClassesToCss(classes)\r\n _twClassesToCssCache.set(classes, result)\r\n return result\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Static CSS detection cache — per component ID\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Kalau ID sudah ketemu di stylesheet statis, simpan ke Set ini supaya\r\n// iterasi `document.styleSheets` hanya terjadi SEKALI per component ID,\r\n// bukan setiap kali komponen mount.\r\nconst _staticCssDetected = new Set<string>()\r\n// require() di-cache hasilnya di sini supaya tidak ada module resolution overhead\r\n// setiap kali ada state change di browser.\r\nlet _batchedInjectFn: ((css: string) => void) | null = null\r\ntry {\r\n // eslint-disable-next-line @typescript-eslint/no-var-requires\r\n const mod = require(\"@tailwind-styled/runtime-css/batched\") as { batchedInject: (css: string) => void }\r\n if (typeof mod?.batchedInject === \"function\") _batchedInjectFn = mod.batchedInject\r\n} catch {\r\n // runtime-css tidak terinstall — fallback ke per-element style tag\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Style injection — batched for performance (FIX CSS Rule Batching)\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction injectStateStyles(id: string, state: StateConfig): void {\r\n if (typeof document === \"undefined\") return\r\n\r\n const styleId = `tw-state-${id}`\r\n if (document.getElementById(styleId)) return // already injected\r\n\r\n // ── Static CSS check ──────────────────────────────────────────────────────\r\n // Cek apakah CSS untuk component ini sudah ada dari static file\r\n // (di-generate oleh staticStateExtractor.ts saat build time).\r\n //\r\n // Cara detect: cari selector `.{id}[data-` di semua stylesheets yang ada.\r\n // Kalau ketemu, berarti static pre-generation sudah cover component ini\r\n // → skip runtime injection sepenuhnya (zero batchedInject call).\r\n //\r\n // `_staticCssDetected` cache: iterasi styleSheets hanya sekali per ID.\r\n if (_staticCssDetected.has(id)) return\r\n\r\n if (typeof document.styleSheets !== \"undefined\") {\r\n const selectorPrefix = `.${id}[data-`\r\n for (let i = 0; i < document.styleSheets.length; i++) {\r\n try {\r\n const sheet = document.styleSheets[i]\r\n // sheet.cssRules bisa throw SecurityError untuk cross-origin sheets\r\n const rules = sheet.cssRules\r\n for (let j = 0; j < rules.length; j++) {\r\n const rule = rules[j]\r\n if (rule instanceof CSSStyleRule && rule.selectorText.startsWith(selectorPrefix)) {\r\n // Static CSS sudah mencakup component ini — tidak perlu inject\r\n _staticCssDetected.add(id)\r\n return\r\n }\r\n }\r\n } catch {\r\n // Cross-origin atau CSSOM tidak accessible — skip sheet ini\r\n continue\r\n }\r\n }\r\n }\r\n\r\n const rules = Object.entries(state)\r\n .map(([stateName, classes]) => {\r\n const css = twClassesToCss(classes)\r\n return css ? `.${id}[data-${stateName}=\"true\"]{${css}}` : null\r\n })\r\n .filter(Boolean) as string[]\r\n\r\n if (rules.length === 0) return\r\n\r\n // Try batched injector first (available when runtime-css is installed).\r\n // _batchedInjectFn di-resolve sekali di module level — hindari require() dinamis\r\n // (dynamic require = module resolution + file I/O) setiap kali ada state change.\r\n if (_batchedInjectFn) {\r\n for (const rule of rules) _batchedInjectFn(rule)\r\n return\r\n }\r\n\r\n const style = document.createElement(\"style\")\r\n style.id = styleId\r\n style.setAttribute(\"data-tw-state\", id)\r\n style.textContent = rules.join(\"\\n\")\r\n document.head.appendChild(style)\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Public API\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface StateEngineResult {\r\n /** CSS class to add to the component */\r\n stateClass: string\r\n /** Whether this component uses state (for SSR data attributes) */\r\n hasState: true\r\n /** List of state names (for devtools) */\r\n stateNames: string[]\r\n}\r\n\r\n/**\r\n * Process a StateConfig for a component.\r\n * Returns the state class and injects CSS (client-side only).\r\n *\r\n * @param tag HTML tag name\r\n * @param state State config object\r\n * @param precomputedHash Optional pre-computed hash dari `inject_state_hash()` Rust transform.\r\n * Kalau ada, skip runtime `hashState()` sepenuhnya → zero hashing overhead.\r\n */\r\nexport function processState(\r\n tag: string,\r\n state: StateConfig,\r\n precomputedHash?: string\r\n): StateEngineResult {\r\n // Pakai pre-computed hash kalau tersedia (di-inject oleh turbopackLoader via Rust)\r\n // Format: 6-char FNV-1a hex — identik dengan output hashState()\r\n const id = precomputedHash\r\n ? `tw-s-${precomputedHash}`\r\n : hashState(tag, state)\r\n const stateNames = Object.keys(state)\r\n\r\n // Register for devtools\r\n if (!stateRegistry.has(id)) {\r\n stateRegistry.set(id, {\r\n id,\r\n tag,\r\n states: stateNames,\r\n cssInjected: false,\r\n })\r\n }\r\n\r\n // Inject CSS (client only)\r\n injectStateStyles(id, state)\r\n\r\n // Mark as injected\r\n const entry = stateRegistry.get(id)!\r\n entry.cssInjected = true\r\n\r\n return { stateClass: id, hasState: true, stateNames }\r\n}\r\n\r\n/**\r\n * Generate SSR-safe CSS string for a state config.\r\n * Used by SSR to inject styles into <head>.\r\n */\r\nexport function generateStateCss(tag: string, state: StateConfig): string {\r\n const id = hashState(tag, state)\r\n\r\n const rules = Object.entries(state)\r\n .map(([stateName, classes]) => {\r\n const css = twClassesToCss(classes)\r\n return css ? `.${id}[data-${stateName}=\"true\"]{${css}}` : null\r\n })\r\n .filter(Boolean) as string[]\r\n\r\n return rules.join(\"\\n\")\r\n}\r\n\r\n/**\r\n * Get the state registry (for devtools).\r\n */\r\nexport function getStateRegistry(): Map<string, StateComponentEntry> {\r\n return stateRegistry\r\n}","// AnimateOptions loaded dynamically to avoid bundling @tailwind-styled/animate\r\ntype AnimateOptions = { from: string; to: string; duration?: number; easing?: string; delay?: number; fill?: string; iterations?: number | \"infinite\"; direction?: string; name?: string }\r\nimport React from \"react\"\r\n\r\nimport { processContainer } from \"./containerQuery\"\r\nimport { twMerge } from \"./merge\"\r\nimport { getNativeBinding } from \"./native\"\r\nimport { processState } from \"./stateEngine\"\r\nimport type { ComponentConfig, InferSubFromConfig, SubValue, TwStyledComponent } from \"./types\"\r\n\r\nconst ALWAYS_BLOCKED = new Set([\"base\", \"_ref\", \"state\", \"container\", \"containerName\"])\r\n\r\n// ── Template parse cache ──────────────────────────────────────────────────────\r\n// parseSubcomponentBlocksNapi + JSON.parse sebelumnya dipanggil ulang setiap\r\n// render (extractBaseClasses + parseSubComponentBlocks dipanggil dari render path).\r\n// Cache ini memastikan Rust hanya dipanggil SEKALI per unique template string.\r\n// Template string dari tw.div({ base: \"...\" }) tidak berubah antar render,\r\n// jadi cache ini practically never evicted selama app berjalan.\r\ninterface _ParsedTemplate {\r\n baseClasses: string\r\n subMap: Map<string, string>\r\n}\r\nconst _templateParseCache = new Map<string, _ParsedTemplate>()\r\n\r\n// Cache untuk statesLookup — key: JSON.stringify(statesConfig sorted)\r\n// Menghindari Rust pregenerateStatesNapi + JSON.parse ulang untuk config identik\r\ninterface _StatesLookupEntry { lookup: Record<number, string>; keys: string[] }\r\nconst _statesLookupCache = new Map<string, _StatesLookupEntry>()\r\n\r\nfunction _getParsedTemplate(template: string): _ParsedTemplate {\r\n const cached = _templateParseCache.get(template)\r\n if (cached) return cached\r\n\r\n let result: _ParsedTemplate\r\n\r\n try {\r\n const native = getNativeBinding()\r\n if (native?.parseSubcomponentBlocksNapi) {\r\n const r = native.parseSubcomponentBlocksNapi(template, \"tw\")\r\n const raw = JSON.parse(r.subMapJson) as Record<string, string>\r\n result = {\r\n baseClasses: r.baseClasses.trim().replace(/\\s+/g, \" \"),\r\n subMap: new Map(Object.entries(raw)),\r\n }\r\n _templateParseCache.set(template, result)\r\n return result\r\n }\r\n } catch {\r\n // fall through\r\n }\r\n\r\n throw new Error(\"FATAL: Native binding 'parseSubcomponentBlocksNapi' is required but not available.\")\r\n}\r\n\r\n/**\r\n * Extract sub-component blocks dari template → Map<name, classes>\r\n * Cache-first: Rust + JSON.parse hanya dipanggil SEKALI per template string.\r\n */\r\nfunction parseSubComponentBlocks(template: string): Map<string, string> {\r\n return _getParsedTemplate(template).subMap\r\n}\r\n\r\n/**\r\n * Strip semua sub-component blocks dari template string → base class string.\r\n * Cache-first: Rust hanya dipanggil SEKALI per template string.\r\n */\r\nfunction extractBaseClasses(template: string): string {\r\n return _getParsedTemplate(template).baseClasses\r\n}\r\n\r\n// Valid HTML semantic tags yang otomatis di-detect dari key name\r\nconst SEMANTIC_HTML_TAGS = new Set([\r\n \"article\", \"aside\", \"details\", \"figcaption\", \"figure\",\r\n \"footer\", \"header\", \"main\", \"mark\", \"nav\", \"section\", \"summary\", \"time\",\r\n \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\",\r\n \"p\", \"ul\", \"ol\", \"li\", \"dl\", \"dt\", \"dd\",\r\n \"table\", \"thead\", \"tbody\", \"tfoot\", \"tr\", \"th\", \"td\",\r\n \"form\", \"fieldset\", \"legend\", \"label\",\r\n \"a\", \"button\", \"img\", \"span\", \"div\",\r\n \"blockquote\", \"pre\", \"code\", \"em\", \"strong\", \"small\",\r\n])\r\n\r\n/**\r\n * Parse sub-component key — support dua format:\r\n *\r\n * 1. \"tag:name\" → tag HTML explicit, nama component = name\r\n * contoh: \"header:topBar\" → tag=header, componentName=topBar\r\n *\r\n * 2. \"name\" → cek apakah nama adalah valid HTML tag\r\n * contoh: \"header\" → tag=header, componentName=header\r\n * contoh: \"icon\" → tag=span (fallback), componentName=icon\r\n */\r\nfunction parseSubKey(key: string): { tag: string; componentName: string } {\r\n const colonIdx = key.indexOf(\":\")\r\n if (colonIdx !== -1) {\r\n const tag = key.slice(0, colonIdx).trim()\r\n const componentName = key.slice(colonIdx + 1).trim()\r\n return { tag: tag || \"span\", componentName: componentName || tag }\r\n }\r\n const isSemanticTag = SEMANTIC_HTML_TAGS.has(key)\r\n return { tag: isSemanticTag ? key : \"span\", componentName: key }\r\n}\r\n\r\n/**\r\n * Buat sub-component React FC dengan classes-nya sendiri.\r\n * Support tag override dan asChild pattern.\r\n *\r\n * @param tag - HTML tag yang dirender, default \"span\"\r\n * @param asChild - jika true, merge className ke direct child element\r\n */\r\nfunction createSubComponentAccessor(\r\n parentDisplayName: string,\r\n name: string,\r\n classes: string,\r\n tag: string = \"span\",\r\n asChild: boolean = false\r\n): React.FC<{ children?: React.ReactNode; className?: string }> {\r\n const SubComponent: React.FC<{ children?: React.ReactNode; className?: string }> = ({\r\n children,\r\n className,\r\n }) => {\r\n const mergedClass = className ? `${classes} ${className}` : classes\r\n\r\n // asChild: clone direct child element dan merge className ke dalamnya\r\n if (asChild && React.isValidElement(children)) {\r\n const child = React.Children.only(children) as React.ReactElement<{ className?: string }>\r\n return React.cloneElement(child, {\r\n className: child.props.className\r\n ? `${mergedClass} ${child.props.className}`\r\n : mergedClass,\r\n })\r\n }\r\n\r\n return React.createElement(tag, { className: mergedClass }, children)\r\n }\r\n SubComponent.displayName = `${parentDisplayName}[${name}]`\r\n return SubComponent\r\n}\r\n\r\n/** Register semua sub-components ke component object.\r\n * Sumber: (1) config.sub object — prioritas utama, TypeScript infer keys-nya.\r\n * (2) parseSubComponentBlocks dari template string — fallback untuk template literal syntax.\r\n *\r\n * config.sub value bisa berupa:\r\n * - string: \"font-bold text-lg\" → render sebagai <span>\r\n * - SubComponentConfig: { classes: \"...\", tag: \"header\", asChild: false }\r\n */\r\nfunction registerSubComponents<P extends object>(\r\n component: TwStyledComponent<P>,\r\n template: string,\r\n configSub?: Record<string, SubValue>\r\n): void {\r\n const displayName = component.displayName ?? \"tw\"\r\n const map = component as unknown as Record<string, unknown>\r\n\r\n // Priority 1: config.sub object — explicit, fully typed\r\n if (configSub) {\r\n for (const [key, value] of Object.entries(configSub)) {\r\n if (typeof value === \"string\") {\r\n // String value — pakai parseSubKey untuk detect semantic tag dari key\r\n const { tag, componentName } = parseSubKey(key)\r\n map[componentName] = createSubComponentAccessor(\r\n displayName, componentName, value.trim().replace(/\\s+/g, \" \"), tag\r\n )\r\n } else {\r\n // Nested object — key adalah HTML tag, nested keys adalah component names\r\n // contoh: h2: { title: \"text-xl\", subtitle: \"text-lg\" }\r\n // → Card.title renders <h2>, Card.subtitle renders <h2>\r\n const tag = key\r\n for (const [componentName, classes] of Object.entries(value)) {\r\n map[componentName] = createSubComponentAccessor(\r\n displayName, componentName, classes.trim().replace(/\\s+/g, \" \"), tag\r\n )\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Priority 2: template block parsing — untuk template literal syntax\r\n const blocks = parseSubComponentBlocks(template)\r\n for (const [name, classes] of blocks) {\r\n if (!(name in map)) {\r\n map[name] = createSubComponentAccessor(displayName, name, classes)\r\n }\r\n }\r\n}\r\n\r\nimport type { InferVariantProps, InferStatesProps } from \"./types\"\r\n\r\n// Props yang diterima component saat render — typed dari config user\r\ntype RuntimeProps<TConfig extends ComponentConfig> =\r\n InferVariantProps<TConfig> &\r\n InferStatesProps<TConfig> &\r\n { className?: string; children?: React.ReactNode } &\r\n Record<string, unknown> // HTML attrs dan props lainnya tetap diterima\r\n\r\nfunction normalizeClassName(value: unknown): string | undefined {\r\n return typeof value === \"string\" ? value : undefined\r\n}\r\n\r\nfunction makeFilterProps(variantKeys: Set<string>, stateKeys: Set<string> = new Set()) {\r\n return function filterProps(props: Record<string, unknown>): Record<string, unknown> {\r\n const out: Record<string, unknown> = {}\r\n for (const key in props) {\r\n if (variantKeys.has(key)) continue\r\n if (stateKeys.has(key)) continue // states dari config user — tidak diteruskan ke DOM\r\n if (key.startsWith(\"$\")) continue\r\n if (ALWAYS_BLOCKED.has(key)) continue\r\n out[key] = props[key]\r\n }\r\n return out\r\n }\r\n}\r\n\r\nfunction resolveVariants(\r\n variants: Record<string, Record<string, string>>,\r\n props: Record<string, unknown>,\r\n defaults: Record<string, string>\r\n): string {\r\n // Only include declared variant keys — prevents non-variant props (e.g. `selected`, `disabled`)\r\n // from leaking into the resolver and causing SSR/client hydration mismatches.\r\n // The Rust binding and JS fallback must receive identical, variant-scoped props.\r\n const variantKeys = Object.keys(variants)\r\n const cleanProps: Record<string, string> = {}\r\n for (const k of variantKeys) {\r\n const v = props[k]\r\n if (v !== undefined && v !== null) cleanProps[k] = String(v)\r\n }\r\n\r\n try {\r\n const binding = getNativeBinding()\r\n if (binding?.resolveSimpleVariants) {\r\n const result = binding.resolveSimpleVariants(null, variants, defaults, cleanProps)\r\n return result.trim().replace(/\\s+/g, \" \")\r\n }\r\n } catch {\r\n // fall through\r\n }\r\n\r\n throw new Error(\"FATAL: Native binding 'resolveSimpleVariants' is required but not available.\")\r\n}\r\n\r\n/**\r\n * Resolve states bitmask dari props → lookup class string.\r\n * O(1) — hitung bitmask dari boolean props, lookup di pre-generated table.\r\n *\r\n * Fallback: kalau lookup tidak tersedia, cx() runtime.\r\n */\r\nfunction resolveStates(\r\n statesConfig: Record<string, string>,\r\n stateKeys: string[],\r\n statesLookup: Record<number, string> | null,\r\n props: Record<string, unknown>\r\n): string {\r\n // Fast path: pre-generated bitmask lookup (Rust) — O(1)\r\n // Rust binary v5.0.6-canary.0.0.51+ uses join (not twMerge) so ring-2 + ring-blue-500\r\n // are both preserved correctly.\r\n if (statesLookup && stateKeys.length > 0) {\r\n let mask = 0\r\n for (let i = 0; i < stateKeys.length; i++) {\r\n if (props[stateKeys[i]]) mask |= (1 << i)\r\n }\r\n return statesLookup[mask] ?? \"\"\r\n }\r\n\r\n // Fallback: runtime join — additive, no conflict resolution\r\n const activeClasses = stateKeys\r\n .filter(k => props[k])\r\n .map(k => statesConfig[k])\r\n .filter(Boolean)\r\n\r\n return activeClasses.join(\" \")\r\n}\r\n\r\nfunction resolveCompound(\r\n compounds: ReadonlyArray<{ readonly class: string; readonly [key: string]: unknown }>,\r\n props: Record<string, unknown>\r\n): string {\r\n const classes: string[] = []\r\n for (const compound of compounds) {\r\n const { class: compoundClass, ...conditions } = compound as {\r\n class: string\r\n [key: string]: unknown\r\n }\r\n const matches = Object.entries(conditions).every(([key, value]) => props[key] === value)\r\n if (matches) {\r\n classes.push(compoundClass)\r\n }\r\n }\r\n return classes.join(\" \")\r\n}\r\n\r\n/** Carry over subcomponent keys from source to target (exclude internal methods) */\r\nfunction carryOverSubComponents<P extends object>(\r\n target: TwStyledComponent<P>,\r\n source: TwStyledComponent<P>\r\n): void {\r\n const INTERNAL_KEYS = new Set([\"extend\", \"withVariants\", \"animate\", \"withSub\", \"displayName\"])\r\n for (const key of Object.keys(source)) {\r\n if (!INTERNAL_KEYS.has(key)) {\r\n ;(target as unknown as Record<string, unknown>)[key] = (source as unknown as Record<string, unknown>)[key]\r\n }\r\n }\r\n}\r\n\r\nfunction attachExtend<TConfig extends ComponentConfig>(\r\n component: TwStyledComponent<TConfig, string>,\r\n originalTag: React.ElementType,\r\n base: string,\r\n config: ComponentConfig\r\n): TwStyledComponent<TConfig, string> {\r\n /**\r\n * Extend component dengan extra classes (template literal).\r\n *\r\n * @example\r\n * const PrimaryBtn = Button.extend`bg-blue-500 text-white`\r\n */\r\n function extendWithClasses(strings: TemplateStringsArray): TwStyledComponent<TConfig, string>\r\n /**\r\n * Extend component dengan extra classes + variant overrides (object).\r\n * Ini menyelesaikan gap desain yang disebutkan di CRITIQUE-20 #2.\r\n *\r\n * @example\r\n * // Extend classes DAN tambah variant sekaligus\r\n * const BigDangerBtn = Button.extend({\r\n * classes: \"text-lg px-8\",\r\n * variants: { loading: { true: \"opacity-50\" } },\r\n * defaultVariants: { loading: \"false\" }\r\n * })\r\n */\r\n function extendWithClasses(extendConfig: {\r\n classes?: string\r\n variants?: ComponentConfig[\"variants\"]\r\n defaultVariants?: ComponentConfig[\"defaultVariants\"]\r\n compoundVariants?: ComponentConfig[\"compoundVariants\"]\r\n }): TwStyledComponent<TConfig, string>\r\n function extendWithClasses(\r\n stringsOrConfig: TemplateStringsArray | {\r\n classes?: string\r\n variants?: ComponentConfig[\"variants\"]\r\n defaultVariants?: ComponentConfig[\"defaultVariants\"]\r\n compoundVariants?: ComponentConfig[\"compoundVariants\"]\r\n }\r\n ): TwStyledComponent<TConfig, string> {\r\n // Template literal path\r\n if (Array.isArray(stringsOrConfig) && \"raw\" in stringsOrConfig) {\r\n const rawExtra = (stringsOrConfig as TemplateStringsArray).raw.join(\"\").trim().replace(/\\s+/g, \" \")\r\n // Strip sub-blocks from both sides before merging base classes\r\n const merged = twMerge(extractBaseClasses(base), extractBaseClasses(rawExtra))\r\n const extended = createComponent(\r\n originalTag,\r\n typeof config === \"string\" ? merged : { ...config, base: merged }\r\n )\r\n // Carry over parent sub-components first, then apply overrides from extend template\r\n carryOverSubComponents(extended as unknown as TwStyledComponent<ComponentConfig, string>, component as unknown as TwStyledComponent<ComponentConfig, string>)\r\n const extendSubBlocks = parseSubComponentBlocks(rawExtra)\r\n if (extendSubBlocks.size > 0) {\r\n const extComp = extended as unknown as Record<string, unknown>\r\n const displayName = extended.displayName ?? \"tw\"\r\n for (const [subName, subClasses] of extendSubBlocks) {\r\n extComp[subName] = createSubComponentAccessor(displayName, subName, subClasses)\r\n }\r\n }\r\n return extended as unknown as TwStyledComponent<TConfig, string>\r\n }\r\n\r\n // Object config path — support extend + withVariants in one call\r\n const extCfg = stringsOrConfig as {\r\n classes?: string\r\n variants?: ComponentConfig[\"variants\"]\r\n defaultVariants?: ComponentConfig[\"defaultVariants\"]\r\n compoundVariants?: ComponentConfig[\"compoundVariants\"]\r\n }\r\n const extraClasses = extCfg.classes ?? \"\"\r\n const merged = twMerge(extractBaseClasses(base), extraClasses)\r\n const existing = typeof config === \"object\" ? config : {}\r\n const extended = createComponent(originalTag, {\r\n ...existing,\r\n base: merged,\r\n variants: { ...(existing.variants ?? {}), ...(extCfg.variants ?? {}) },\r\n compoundVariants: [\r\n ...(existing.compoundVariants ?? []),\r\n ...(extCfg.compoundVariants ?? []),\r\n ],\r\n defaultVariants: {\r\n ...(existing.defaultVariants ?? {}),\r\n ...(extCfg.defaultVariants ?? {}),\r\n },\r\n })\r\n carryOverSubComponents(extended as unknown as TwStyledComponent<ComponentConfig, string>, component as unknown as TwStyledComponent<ComponentConfig, string>)\r\n return extended as unknown as TwStyledComponent<TConfig, string>\r\n }\r\n\r\n component.extend = extendWithClasses as TwStyledComponent<TConfig, string>[\"extend\"]\r\n\r\n component.withVariants = (newConfig: Partial<ComponentConfig>) => {\r\n const existing = typeof config === \"object\" ? config : {}\r\n return createComponent(originalTag, {\r\n ...existing,\r\n base,\r\n variants: { ...(existing.variants ?? {}), ...(newConfig.variants ?? {}) },\r\n compoundVariants: [\r\n ...(existing.compoundVariants ?? []),\r\n ...(newConfig.compoundVariants ?? []),\r\n ],\r\n defaultVariants: {\r\n ...(existing.defaultVariants ?? {}),\r\n ...(newConfig.defaultVariants ?? {}),\r\n },\r\n }) as unknown as TwStyledComponent<TConfig, string>\r\n }\r\n\r\n // .animate() dipindah ke tailwind-styled-v4/animate agar tidak bundle @tailwind-styled/animate\r\n // ke dalam main browser bundle (animate butuh Rust native binding → Node.js only)\r\n component.animate = async (_opts: AnimateOptions) => {\r\n console.warn(\r\n \"[tailwind-styled-v4] .animate() tidak tersedia di main bundle.\\n\" +\r\n \"Gunakan: import { animate } from \\\"tailwind-styled-v4/animate\\\"\"\r\n )\r\n return component\r\n }\r\n\r\n // .withSub<\"icon\" | \"badge\">() — declare sub-component names untuk TypeScript\r\n // Runtime: no-op, hanya untuk type inference\r\n component.withSub = (() => component) as TwStyledComponent<TConfig, string>[\"withSub\"]\r\n\r\n return component\r\n}\r\n\r\nexport function createComponent<TConfig extends ComponentConfig>(\r\n tag: React.ElementType,\r\n config: TConfig | string\r\n): TwStyledComponent<TConfig, InferSubFromConfig<TConfig>> {\r\n const isStatic = typeof config === \"string\"\r\n const base = typeof config === \"string\" ? config : (config.base ?? \"\")\r\n const variants = typeof config === \"string\" ? {} : (config.variants ?? {}) as Record<string, Record<string, string>>\r\n const compoundVariants = typeof config === \"string\" ? [] : (config.compoundVariants ?? [])\r\n const defaultVariants = typeof config === \"string\" ? {} : (config.defaultVariants ?? {})\r\n const stateConfig = typeof config === \"string\" ? undefined : config.state\r\n const containerConfig = typeof config === \"string\" ? undefined : config.container\r\n const containerName = typeof config === \"string\" ? undefined : config.containerName\r\n const configSub = typeof config === \"string\" ? undefined : config.sub\r\n const statesConfig = typeof config === \"string\" ? undefined : config.states\r\n\r\n // Pre-generate states bitmask lookup via Rust (build time).\r\n // Cache key: sorted JSON dari statesConfig — statesConfig tidak berubah antar\r\n // createComponent calls dengan config yang sama (mis. HMR), jadi cache ini\r\n // menghindari JSON.parse + Rust call ulang untuk config identik.\r\n let statesLookup: Record<number, string> | null = null\r\n let stateKeys: string[] = []\r\n if (statesConfig && Object.keys(statesConfig).length > 0) {\r\n stateKeys = Object.keys(statesConfig)\r\n const statesCacheKey = JSON.stringify(statesConfig, Object.keys(statesConfig).sort())\r\n const cachedStates = _statesLookupCache.get(statesCacheKey)\r\n if (cachedStates) {\r\n statesLookup = cachedStates.lookup\r\n stateKeys = cachedStates.keys\r\n } else {\r\n try {\r\n const native = getNativeBinding()\r\n if (native?.pregenerateStatesNapi) {\r\n const result = native.pregenerateStatesNapi(statesConfig)\r\n // JSON.parse sekali — disimpan di cache, tidak pernah di-parse ulang\r\n statesLookup = JSON.parse(result.lookupJson) as Record<number, string>\r\n stateKeys = result.stateKeys\r\n _statesLookupCache.set(statesCacheKey, { lookup: statesLookup, keys: stateKeys })\r\n }\r\n } catch (e) {\r\n console.warn(\"[tailwind-styled-v4] states pre-generation failed, falling back to runtime cx()\", e)\r\n }\r\n }\r\n }\r\n\r\n const stateResult = stateConfig\r\n ? processState(\r\n typeof tag === \"string\" ? tag : \"component\",\r\n stateConfig,\r\n // Pakai pre-computed hash dari turbopackLoader (Rust inject_state_hash)\r\n // kalau tersedia — skip runtime hashState() computation sepenuhnya\r\n (config as { __hash?: string }).__hash\r\n )\r\n : null\r\n const containerResult = containerConfig\r\n ? processContainer(typeof tag === \"string\" ? tag : \"component\", containerConfig, containerName)\r\n : null\r\n\r\n const engineClasses = [stateResult?.stateClass, containerResult?.containerClass]\r\n .filter(Boolean)\r\n .join(\" \")\r\n\r\n const filterProps = makeFilterProps(new Set(Object.keys(variants)), new Set(stateKeys))\r\n const tagLabel =\r\n typeof tag === \"string\" ? tag : ((tag as { displayName?: string }).displayName ?? \"Component\")\r\n\r\n if (isStatic || Object.keys(variants).length === 0) {\r\n const baseComponent = React.forwardRef<unknown, RuntimeProps<TConfig>>((props, ref) => {\r\n const { className, ...rest } = props\r\n const runtimeClassName = normalizeClassName(className)\r\n const statesClasses = statesConfig\r\n ? resolveStates(statesConfig, stateKeys, statesLookup, props)\r\n : \"\"\r\n // statesClasses appended AFTER twMerge to prevent conflict resolution\r\n // from removing valid class combinations like ring-2 + ring-blue-500\r\n const mergedBase = twMerge(extractBaseClasses(base), engineClasses, runtimeClassName)\r\n const className2 = statesClasses ? `${mergedBase} ${statesClasses}`.trim() : mergedBase\r\n return React.createElement(tag, {\r\n ref,\r\n ...filterProps(rest),\r\n className: className2,\r\n })\r\n })\r\n\r\n const component = baseComponent as unknown as TwStyledComponent<TConfig, InferSubFromConfig<TConfig>>\r\n component.displayName = `tw.${tagLabel}`\r\n const result = attachExtend<TConfig>(component, tag, base, config as ComponentConfig)\r\n registerSubComponents(result, base, configSub)\r\n return wrapWithSubProxy(result, tagLabel)\r\n }\r\n\r\n const baseComponent = React.forwardRef<unknown, RuntimeProps<TConfig>>((props, ref) => {\r\n const { className, ...rest } = props\r\n const runtimeClassName = normalizeClassName(className)\r\n const variantClasses = resolveVariants(variants, props, defaultVariants)\r\n const compoundClasses = resolveCompound(compoundVariants, props)\r\n const statesClasses = statesConfig\r\n ? resolveStates(statesConfig, stateKeys, statesLookup, props)\r\n : \"\"\r\n\r\n // statesClasses appended AFTER twMerge — prevents conflict resolution\r\n // from removing valid combinations like ring-2 + ring-blue-500\r\n const mergedBase = twMerge(extractBaseClasses(base), variantClasses, compoundClasses, engineClasses, runtimeClassName)\r\n const className2 = statesClasses ? `${mergedBase} ${statesClasses}`.trim() : mergedBase\r\n\r\n return React.createElement(tag, {\r\n ref,\r\n ...filterProps(rest),\r\n className: className2,\r\n })\r\n })\r\n\r\n const component = baseComponent as unknown as TwStyledComponent<TConfig, InferSubFromConfig<TConfig>>\r\n component.displayName = `tw.${tagLabel}`\r\n const result = attachExtend<TConfig>(component, tag, base, config as ComponentConfig)\r\n registerSubComponents(result, base, configSub)\r\n return wrapWithSubProxy(result, tagLabel)\r\n}\r\n\r\n// ── Sub-component fallback proxy ──────────────────────────────────────────────\r\n/**\r\n * Wrap component dengan Proxy sehingga akses ke sub-component yang tidak\r\n * terdefinisi (misal Button.footer) tidak mengembalikan undefined dan crash,\r\n * tapi fallback ke <span> passthrough yang render children-nya saja.\r\n */\r\nconst SKIP_PROXY_KEYS = new Set([\r\n \"extend\", \"withVariants\", \"animate\", \"withSub\",\r\n \"displayName\", \"$$typeof\", \"render\", \"prototype\",\r\n \"__esModule\", \"then\",\r\n])\r\n\r\nfunction wrapWithSubProxy<P extends object>(\r\n component: TwStyledComponent<P>,\r\n tagLabel: string\r\n): TwStyledComponent<P> {\r\n return new Proxy(component, {\r\n get(target, prop: string | symbol) {\r\n const value = (target as unknown as Record<string | symbol, unknown>)[prop]\r\n // Jika sudah ada (sub-component terdefinisi, method, dll) → pakai langsung\r\n if (value !== undefined) return value\r\n // Skip known internal / React symbols\r\n if (typeof prop === \"symbol\") return value\r\n if (SKIP_PROXY_KEYS.has(prop as string)) return value\r\n // Fallback: buat passthrough <span> untuk sub-component yang tidak terdefinisi\r\n const Fallback: React.FC<{ children?: React.ReactNode; className?: string }> = ({\r\n children,\r\n className,\r\n }) => React.createElement(\"span\", { className }, children)\r\n Fallback.displayName = `tw.${tagLabel}.${prop as string}(fallback)`\r\n return Fallback\r\n },\r\n })\r\n}","/**\r\n * tailwind-styled-v4 — cv()\r\n *\r\n * Runtime: native-first with fallback to generated variant tables.\r\n *\r\n * Dua mode:\r\n * 1. GENERATED (optimal) — import dari variants.generated.ts hasil `npx tw compile-variants`\r\n * → O(1) lookup, static, zero runtime computation\r\n * 2. RUNTIME (fallback) — compute on-the-fly via native binding\r\n * → Requires native Rust binding for variant resolution\r\n */\r\n\r\nimport { twMerge } from \"./merge\"\r\nimport type { ComponentConfig, CvFn, InferVariantProps } from \"./types\"\r\nimport { getNativeBinding } from \"./native\"\r\n\r\n// Registry untuk generated lookup tables\r\n// Diisi oleh cv.register() dari generated file\r\nconst __generatedRegistry: Record<string, Record<string, string>> = {}\r\n\r\n/**\r\n * Register pre-computed variant table dari generated file.\r\n * Dipanggil otomatis saat import variants.generated.ts\r\n */\r\nexport function registerVariantTable(\r\n componentId: string,\r\n table: Record<string, string>\r\n): void {\r\n __generatedRegistry[componentId] = table\r\n}\r\n\r\n// Cache untuk sorted variant keys per componentId — sort() hanya dilakukan sekali\r\n// per componentId karena variantKeys tidak berubah selama runtime\r\nconst _sortedVariantKeysCache = new Map<string, string[]>()\r\n\r\nfunction lookupGenerated(\r\n componentId: string,\r\n props: Record<string, unknown>,\r\n defaultVariants?: Record<string, string>,\r\n variantKeys?: string[]\r\n): string | undefined {\r\n const table = __generatedRegistry[componentId]\r\n if (!table) return undefined\r\n\r\n const merged = { ...defaultVariants, ...props }\r\n\r\n // Cached sorted keys — sort() hanya dilakukan sekali per componentId\r\n let sortedKeys = _sortedVariantKeysCache.get(componentId)\r\n if (!sortedKeys) {\r\n const keysToUse = variantKeys\r\n ? variantKeys\r\n : Object.keys(merged).filter((k) => k !== \"className\")\r\n sortedKeys = [...keysToUse].sort()\r\n _sortedVariantKeysCache.set(componentId, sortedKeys)\r\n }\r\n\r\n // buildVariantLookupKey di Rust — satu NAPI call, eliminasi JS string concat loop\r\n const binding = getNativeBinding()\r\n if (!binding?.buildVariantLookupKey) {\r\n throw new Error(\"FATAL: Native binding 'buildVariantLookupKey' is required but not available.\")\r\n }\r\n const relevantDefaults: Record<string, string> = {}\r\n const relevantProps: Record<string, string> = {}\r\n for (const k of sortedKeys) {\r\n const dv = defaultVariants?.[k]\r\n if (dv !== undefined) relevantDefaults[k] = String(dv)\r\n const pv = (props as Record<string, unknown>)[k]\r\n if (pv !== undefined && pv !== null) relevantProps[k] = String(pv)\r\n }\r\n const key = binding.buildVariantLookupKey(\r\n JSON.stringify(relevantDefaults),\r\n JSON.stringify(relevantProps)\r\n )\r\n return table[key]\r\n}\r\n\r\n// Cache config JSON per config object reference — menghindari JSON.stringify ulang\r\n// untuk config yang sama. WeakMap dipakai agar GC bisa collect config jika\r\n// komponen di-unmount (tidak ada strong reference leak).\r\nconst _configJsonCache = new WeakMap<object, string>()\r\n\r\nfunction _getConfigJson(config: object): string {\r\n let json = _configJsonCache.get(config)\r\n if (!json) {\r\n json = JSON.stringify(config)\r\n _configJsonCache.set(config, json)\r\n }\r\n return json\r\n}\r\n\r\n// Native Rust variant resolution\r\nfunction resolveVariantsNative<C extends ComponentConfig>(\r\n config: C,\r\n props: InferVariantProps<C> & { className?: string } & Readonly<Record<string, unknown>>\r\n): string {\r\n const { variants = {}, defaultVariants = {} } = config\r\n\r\n try {\r\n const binding = getNativeBinding()\r\n if (!binding?.resolveVariants) {\r\n throw new Error(\"resolveVariants not available\")\r\n }\r\n\r\n const variantKeys = Object.keys(variants as Record<string, Record<string, string>>)\r\n const configJson = (() => {\r\n // Convert TypeScript camelCase field names to Rust snake_case\r\n const cfgObj = (config as unknown as Record<string, unknown>)\r\n const cfgStr = JSON.stringify(cfgObj)\r\n const parsed = JSON.parse(cfgStr) as Record<string, unknown>\r\n\r\n // Rename defaultVariants to default_variants for Rust compatibility\r\n if ('defaultVariants' in parsed && !('default_variants' in parsed)) {\r\n parsed.default_variants = parsed.defaultVariants\r\n delete parsed.defaultVariants\r\n }\r\n\r\n // Rename compoundVariants to compound_variants. The Rust VariantConfig has\r\n // no serde alias for this field (unlike default_variants), so without the\r\n // rename Rust silently falls back to an empty vec and drops every compound.\r\n if ('compoundVariants' in parsed && !('compound_variants' in parsed)) {\r\n parsed.compound_variants = parsed.compoundVariants\r\n delete parsed.compoundVariants\r\n }\r\n\r\n // Rust requires a `variants` field (it is not #[serde(default)]); a base-only\r\n // or compound-only config omits it, which makes deserialization fail.\r\n if (!('variants' in parsed) || parsed.variants == null) {\r\n parsed.variants = {}\r\n }\r\n\r\n return JSON.stringify(parsed)\r\n })()\r\n const cleanProps: Record<string, string> = {}\r\n for (const k of variantKeys) {\r\n const dv = (defaultVariants as Record<string, string>)[k]\r\n if (dv !== undefined && dv !== null) cleanProps[k] = String(dv)\r\n }\r\n for (const k of variantKeys) {\r\n const v = (props as Record<string, unknown>)[k]\r\n if (v !== undefined && v !== null) cleanProps[k] = String(v)\r\n }\r\n const propsJson = JSON.stringify(cleanProps)\r\n const result = binding.resolveVariants(configJson, propsJson)\r\n // NAPI returns VariantResult object with .classes property\r\n return (result as unknown as { classes: string })?.classes ?? ''\r\n } catch (_err) {\r\n // Fallback: manually resolve if native not available or throws error\r\n if (process.env.NODE_ENV !== \"production\") {\r\n console.warn(\"[cv() fallback] getNativeBinding threw error, using JS fallback\")\r\n }\r\n const result: string[] = []\r\n const { base = \"\", compoundVariants = [] } = config\r\n if (base) result.push(base)\r\n\r\n const merged: Record<string, unknown> = { ...defaultVariants }\r\n for (const [key, values] of Object.entries(variants || {})) {\r\n const selected = (props as Record<string, unknown>)[key] ?? defaultVariants?.[key]\r\n if (selected !== undefined && selected !== null) merged[key] = selected\r\n if (selected && typeof values === 'object' && values !== null) {\r\n const variantValues = values as Record<string, string>\r\n if (variantValues[String(selected)]) {\r\n result.push(variantValues[String(selected)])\r\n }\r\n }\r\n }\r\n\r\n // Compound variants — parity with the native path, which resolves these in Rust.\r\n // Without this, compoundVariants are silently dropped whenever the binding is absent.\r\n for (const compound of compoundVariants) {\r\n const { class: compoundClass, ...conditions } = compound as {\r\n class: string\r\n } & Record<string, unknown>\r\n const matches = Object.entries(conditions).every(\r\n ([k, v]) => String(merged[k]) === String(v)\r\n )\r\n if (matches && compoundClass) result.push(compoundClass)\r\n }\r\n\r\n return result.join(\" \")\r\n }\r\n}\r\n\r\nexport function cv<C extends ComponentConfig>(config: C, componentId?: string): CvFn<C> {\r\n if (process.env.NODE_ENV !== \"production\") {\r\n const { variants = {}, defaultVariants = {} } = config\r\n for (const dk of Object.keys(defaultVariants)) {\r\n if (!(dk in variants)) {\r\n console.warn(`[tailwind-styled] defaultVariants[\"${dk}\"] not in variants`)\r\n }\r\n }\r\n }\r\n\r\n return (\r\n props: InferVariantProps<C> & { className?: string } & Readonly<Record<string, unknown>> = {} as never\r\n ): string => {\r\n let result: string\r\n const variantKeys = Object.keys(config.variants ?? {})\r\n\r\n // Mode 1: generated lookup table (O(1), hasil compile-variants)\r\n if (componentId) {\r\n const generated = lookupGenerated(\r\n componentId,\r\n props as Record<string, unknown>,\r\n config.defaultVariants as Record<string, string>,\r\n variantKeys\r\n )\r\n result = generated ?? resolveVariantsNative(config, props)\r\n } else {\r\n // Mode 2: runtime resolution via native binding\r\n result = resolveVariantsNative(config, props)\r\n }\r\n\r\n return props.className ? twMerge(result, props.className) : result\r\n }\r\n}\r\n\r\nexport interface VariantValidationError {\r\n type: \"unknown_key\" | \"unknown_value\" | \"missing_default\" | \"compound_condition_missing\"\r\n key: string\r\n value?: string\r\n message: string\r\n}\r\n\r\nexport interface VariantValidationResult {\r\n valid: boolean\r\n errors: VariantValidationError[]\r\n warnings: string[]\r\n}\r\n\r\nexport function validateVariantConfig(config: ComponentConfig): VariantValidationResult {\r\n const errors: VariantValidationError[] = []\r\n const warnings: string[] = []\r\n const { variants = {}, defaultVariants = {}, compoundVariants = [] } = config\r\n\r\n for (const [key, val] of Object.entries(defaultVariants)) {\r\n if (!(key in variants)) {\r\n errors.push({ type: \"unknown_key\", key, message: `defaultVariants[\"${key}\"] not in variants` })\r\n } else if (val && !((variants[key] ?? {})[val])) {\r\n errors.push({ type: \"unknown_value\", key, value: val, message: `invalid value \"${val}\"` })\r\n }\r\n }\r\n\r\n for (const [i, compound] of compoundVariants.entries()) {\r\n const { class: _cls, ...conditions } = compound\r\n for (const [key] of Object.entries(conditions)) {\r\n if (!(key in variants)) {\r\n errors.push({\r\n type: \"unknown_key\",\r\n key,\r\n message: `compoundVariants[${i}]: \"${key}\" not in variants`,\r\n })\r\n }\r\n }\r\n }\r\n\r\n return { valid: errors.length === 0, errors, warnings }\r\n}","/**\r\n * tailwind-styled-v4 v2 — cx / cn\r\n * Pure Node.js — requires native Rust binding.\r\n */\r\n\r\nimport { getNativeBinding } from \"./native\"\r\n\r\ntype ClassValue = string | undefined | null | false | 0\r\n\r\n/**\r\n * cn — simple class name joiner (no conflict resolution).\r\n * Delegates ke Rust `resolve_class_names`.\r\n *\r\n * @example cn(\"p-4\", isActive && \"opacity-100\") → \"p-4 opacity-100\"\r\n */\r\nexport function cn(...inputs: (ClassValue | ClassValue[])[]): string {\r\n const strings: string[] = []\r\n for (const item of inputs) {\r\n if (Array.isArray(item)) {\r\n for (const v of item) { if (v) strings.push(String(v)) }\r\n } else if (item) {\r\n strings.push(String(item))\r\n }\r\n }\r\n if (strings.length === 0) return \"\"\r\n\r\n const native = getNativeBinding()\r\n if (!native?.resolveClassNames) {\r\n throw new Error(\"Native binding 'resolveClassNames' is required but not available.\")\r\n }\r\n return native.resolveClassNames(strings)\r\n}\r\n\r\n/**\r\n * cx — conflict-aware class merger.\r\n * Delegates ke Rust `tw_merge_many`.\r\n *\r\n * @example cx(\"p-4 p-8\") → \"p-8\"\r\n * @example cx(\"bg-red-500\", \"bg-blue-500\") → \"bg-blue-500\"\r\n * @example cx([\"flex\", \"items-center\"], \"px-4\") → \"flex items-center px-4\"\r\n */\r\nexport function cx(...inputs: (ClassValue | ClassValue[])[]): string {\r\n const filtered = (inputs as unknown[]).flat().filter(Boolean) as string[]\r\n if (filtered.length === 0) return \"\"\r\n\r\n const native = getNativeBinding()\r\n if (!native?.twMergeMany) {\r\n throw new Error(\"Native binding 'twMergeMany' is required but not available.\")\r\n }\r\n return native.twMergeMany(filtered)\r\n}\r\n\r\n/** @deprecated Use cx() instead. */\r\nexport const cxm = cx\r\n\r\n/**\r\n * cxn — cx() dengan nested array support.\r\n * Delegates ke Rust `flatten_and_resolve`.\r\n *\r\n * @example cxn([\"p-4\", [\"flex\", isActive && \"gap-2\"], null]) → \"p-4 flex gap-2\"\r\n */\r\nexport function cxn(inputs: unknown[]): string {\r\n if (inputs.length === 0) return \"\"\r\n\r\n const native = getNativeBinding()\r\n if (!native?.flattenAndResolve) {\r\n throw new Error(\"Native binding 'flattenAndResolve' is required but not available.\")\r\n }\r\n return native.flattenAndResolve(JSON.stringify(inputs))\r\n}","import React from \"react\"\r\n\r\nimport type { TokenMap } from '@tailwind-styled/shared'\r\nexport type { TokenMap }\r\n\r\nexport type TokenSubscriber = (tokens: TokenMap) => void\r\n\r\nexport interface LiveTokenSet {\r\n vars: Record<string, string>\r\n get(name: string): string | undefined\r\n set(name: string, value: string): void\r\n setAll(tokens: TokenMap): void\r\n snapshot(): TokenMap\r\n}\r\n\r\nexport interface LiveTokenEngineBridge {\r\n getToken(name: string): string | undefined\r\n getTokens(): TokenMap\r\n setToken(name: string, value: string): void\r\n setTokens(tokens: TokenMap): void\r\n applyTokenSet(tokens: TokenMap): void\r\n subscribeTokens(fn: TokenSubscriber): () => void\r\n subscribe?(fn: TokenSubscriber): () => void\r\n}\r\n\r\ninterface LiveTokenEngineRuntime {\r\n liveToken(tokens: TokenMap): LiveTokenSet\r\n getToken(name: string): string | undefined\r\n getTokens(): TokenMap\r\n setToken(name: string, value: string): void\r\n setTokens(tokens: TokenMap): void\r\n applyTokenSet(tokens: TokenMap): void\r\n generateTokenCssString(): string\r\n subscribe(fn: TokenSubscriber): () => void\r\n}\r\n\r\nconst TOKEN_ENGINE_KEY = \"__TW_TOKEN_ENGINE__\"\r\n\r\nexport function tokenVar(name: string): string {\r\n const normalized = name.replace(/[^a-zA-Z0-9-]/g, \"-\").toLowerCase()\r\n return `--tw-token-${normalized}`\r\n}\r\n\r\nexport function tokenRef(name: string): string {\r\n return `var(${tokenVar(name)})`\r\n}\r\n\r\nconst buildRootCss = (tokens: TokenMap): string => {\r\n const vars = Object.entries(tokens)\r\n .map(([name, value]) => ` ${tokenVar(name)}: ${value};`)\r\n .join(\"\\n\")\r\n return `:root {\\n${vars}\\n}`\r\n}\r\n\r\nconst createLiveTokenEngine = (): LiveTokenEngineRuntime => {\r\n const state = {\r\n currentTokens: {} as TokenMap,\r\n styleEl: null as HTMLStyleElement | null,\r\n }\r\n const subscribers = new Set<TokenSubscriber>()\r\n\r\n const syncStyleEl = (): void => {\r\n if (typeof document === \"undefined\") return\r\n\r\n if (!state.styleEl) {\r\n const styleEl = document.createElement(\"style\")\r\n styleEl.id = \"tw-live-tokens\"\r\n styleEl.setAttribute(\"data-tw-tokens\", \"true\")\r\n document.head.appendChild(styleEl)\r\n state.styleEl = styleEl\r\n }\r\n\r\n state.styleEl.textContent = buildRootCss(state.currentTokens)\r\n }\r\n\r\n const notifySubscribers = (): void => {\r\n const snapshot = { ...state.currentTokens }\r\n for (const subscriber of subscribers) {\r\n try {\r\n subscriber(snapshot)\r\n } catch {\r\n // Intentionally ignore subscriber errors.\r\n }\r\n }\r\n }\r\n\r\n const setToken = (name: string, value: string): void => {\r\n state.currentTokens = { ...state.currentTokens, [name]: value }\r\n if (typeof document !== \"undefined\") {\r\n document.documentElement.style.setProperty(tokenVar(name), value)\r\n }\r\n syncStyleEl()\r\n notifySubscribers()\r\n }\r\n\r\n const setTokens = (tokens: TokenMap): void => {\r\n state.currentTokens = { ...state.currentTokens, ...tokens }\r\n if (typeof document !== \"undefined\") {\r\n const root = document.documentElement\r\n for (const [name, value] of Object.entries(tokens)) {\r\n root.style.setProperty(tokenVar(name), value)\r\n }\r\n }\r\n syncStyleEl()\r\n notifySubscribers()\r\n }\r\n\r\n const applyTokenSet = (tokens: TokenMap): void => {\r\n if (typeof document !== \"undefined\") {\r\n const root = document.documentElement\r\n for (const name of Object.keys(state.currentTokens)) {\r\n if (!(name in tokens)) {\r\n root.style.removeProperty(tokenVar(name))\r\n }\r\n }\r\n for (const [name, value] of Object.entries(tokens)) {\r\n root.style.setProperty(tokenVar(name), value)\r\n }\r\n }\r\n\r\n state.currentTokens = { ...tokens }\r\n syncStyleEl()\r\n notifySubscribers()\r\n }\r\n\r\n return {\r\n liveToken(tokens: TokenMap): LiveTokenSet {\r\n setTokens(tokens)\r\n\r\n const vars: Record<string, string> = {}\r\n for (const name of Object.keys(tokens)) {\r\n vars[name] = tokenRef(name)\r\n }\r\n\r\n return {\r\n vars,\r\n get(name: string) {\r\n return state.currentTokens[name]\r\n },\r\n set(name: string, value: string) {\r\n setToken(name, value)\r\n },\r\n setAll(nextTokens: TokenMap) {\r\n setTokens(nextTokens)\r\n },\r\n snapshot() {\r\n return { ...state.currentTokens }\r\n },\r\n }\r\n },\r\n getToken(name: string): string | undefined {\r\n return state.currentTokens[name]\r\n },\r\n getTokens(): TokenMap {\r\n return { ...state.currentTokens }\r\n },\r\n setToken,\r\n setTokens,\r\n applyTokenSet,\r\n generateTokenCssString(): string {\r\n return buildRootCss(state.currentTokens)\r\n },\r\n subscribe(fn: TokenSubscriber): () => void {\r\n subscribers.add(fn)\r\n return () => {\r\n subscribers.delete(fn)\r\n }\r\n },\r\n }\r\n}\r\n\r\nconst engine = createLiveTokenEngine()\r\n\r\nexport function liveToken(tokens: TokenMap): LiveTokenSet {\r\n return engine.liveToken(tokens)\r\n}\r\n\r\nexport function setToken(name: string, value: string): void {\r\n engine.setToken(name, value)\r\n}\r\n\r\nexport function setTokens(tokens: TokenMap): void {\r\n engine.setTokens(tokens)\r\n}\r\n\r\nexport function applyTokenSet(tokens: TokenMap): void {\r\n engine.applyTokenSet(tokens)\r\n}\r\n\r\nexport function getToken(name: string): string | undefined {\r\n return engine.getToken(name)\r\n}\r\n\r\nexport function getTokens(): TokenMap {\r\n return engine.getTokens()\r\n}\r\n\r\nexport function subscribeTokens(fn: TokenSubscriber): () => void {\r\n return engine.subscribe(fn)\r\n}\r\n\r\nexport function generateTokenCssString(): string {\r\n return engine.generateTokenCssString()\r\n}\r\n\r\nexport function createUseTokens() {\r\n return function useTokens(): TokenMap {\r\n const [tokens, setTokensState] = React.useState<TokenMap>(engine.getTokens())\r\n\r\n React.useEffect(() => {\r\n setTokensState(engine.getTokens())\r\n return engine.subscribe((nextTokens) => setTokensState(nextTokens))\r\n }, [])\r\n\r\n return tokens\r\n }\r\n}\r\n\r\nexport const liveTokenEngine: LiveTokenEngineBridge = {\r\n getToken: engine.getToken,\r\n getTokens: engine.getTokens,\r\n setToken: engine.setToken,\r\n setTokens: engine.setTokens,\r\n applyTokenSet: engine.applyTokenSet,\r\n subscribeTokens: engine.subscribe,\r\n subscribe: engine.subscribe,\r\n}\r\n\r\ndeclare global {\r\n interface Window {\r\n __TW_TOKEN_ENGINE__?: LiveTokenEngineBridge\r\n }\r\n}\r\n\r\nconst globalTokenEngine = globalThis as typeof globalThis & {\r\n [TOKEN_ENGINE_KEY]?: LiveTokenEngineBridge\r\n}\r\n\r\nglobalTokenEngine[TOKEN_ENGINE_KEY] = liveTokenEngine\r\nif (typeof window !== \"undefined\") {\r\n window.__TW_TOKEN_ENGINE__ = liveTokenEngine\r\n}\r\n","import React from \"react\"\r\n\r\nexport interface SubComponentProps {\r\n children?: React.ReactNode\r\n className?: string\r\n}\r\n\r\nexport interface SubComponentEntry {\r\n name: string\r\n component: React.FC<SubComponentProps>\r\n defaultClasses?: string\r\n}\r\n\r\nconst subComponentRegistry = new Map<string, SubComponentEntry>()\r\n\r\nexport function registerSubComponent(entry: SubComponentEntry): void {\r\n subComponentRegistry.set(entry.name, entry)\r\n}\r\n\r\nexport function getSubComponent(name: string): SubComponentEntry | undefined {\r\n return subComponentRegistry.get(name)\r\n}\r\n\r\nexport function getAllSubComponents(): SubComponentEntry[] {\r\n return Array.from(subComponentRegistry.values())\r\n}\r\n\r\nexport function withSubComponents<T extends object>(\r\n Component: T,\r\n subComponentNames: string[]\r\n): T & Record<string, React.FC<SubComponentProps>> {\r\n const result = { ...Component } as Record<string, unknown>\r\n for (const name of subComponentNames) {\r\n const entry = getSubComponent(name)\r\n if (entry) result[name] = entry.component\r\n }\r\n return result as T & Record<string, React.FC<SubComponentProps>>\r\n}\r\n\r\nregisterSubComponent({\r\n name: \"icon\",\r\n component: ({ children, className }) => React.createElement(\"span\", { className }, children),\r\n defaultClasses: \"\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"text\",\r\n component: ({ children, className }) => React.createElement(\"span\", { className }, children),\r\n defaultClasses: \"\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"badge\",\r\n component: ({ children, className }) =>\r\n React.createElement(\r\n \"span\",\r\n {\r\n className: `ml-2 px-2 py-0.5 text-xs rounded-full bg-red-500 text-white ${className || \"\"}`,\r\n },\r\n children\r\n ),\r\n defaultClasses: \"ml-2 px-2 py-0.5 text-xs rounded-full bg-red-500 text-white\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"header\",\r\n component: ({ children, className }) =>\r\n React.createElement(\"header\", { className: `font-bold text-lg ${className || \"\"}` }, children),\r\n defaultClasses: \"font-bold text-lg\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"body\",\r\n component: ({ children, className }) =>\r\n React.createElement(\"div\", { className: `flex-1 ${className || \"\"}` }, children),\r\n defaultClasses: \"flex-1\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"footer\",\r\n component: ({ children, className }) =>\r\n React.createElement(\"footer\", { className: `border-t pt-4 ${className || \"\"}` }, children),\r\n defaultClasses: \"border-t pt-4\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"content\",\r\n component: ({ children, className }) => React.createElement(\"div\", { className }, children),\r\n defaultClasses: \"\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"title\",\r\n component: ({ children, className }) =>\r\n React.createElement(\"div\", { className: `font-semibold ${className || \"\"}` }, children),\r\n defaultClasses: \"font-semibold\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"message\",\r\n component: ({ children, className }) =>\r\n React.createElement(\"div\", { className: `text-sm ${className || \"\"}` }, children),\r\n defaultClasses: \"text-sm\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"close\",\r\n component: ({ children, className }) =>\r\n React.createElement(\"span\", { className: `cursor-pointer ${className || \"\"}` }, children),\r\n defaultClasses: \"cursor-pointer\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"image\",\r\n component: ({ className }) => React.createElement(\"img\", { className }),\r\n defaultClasses: \"\",\r\n})\r\n","import { twMerge } from \"./merge\"\r\n\r\nexport interface StyledOptions {\r\n base?: string\r\n variants?: Record<string, Record<string, string>>\r\n defaultVariants?: Record<string, string>\r\n compoundVariants?: Array<{\r\n variants: Record<string, string>\r\n className: string\r\n }>\r\n}\r\n\r\nexport type StyledProps = {\r\n className?: string\r\n} & Record<string, string | number | boolean | undefined>\r\n\r\nfunction resolveVariantClass(options: StyledOptions, props: StyledProps): string[] {\r\n const out: string[] = []\r\n const variants = options.variants ?? {}\r\n const defaults = options.defaultVariants ?? {}\r\n\r\n for (const [variantName, valueMap] of Object.entries(variants)) {\r\n const value = props[variantName] ?? defaults[variantName]\r\n if (value === undefined) continue\r\n\r\n const key = String(value)\r\n const cls = valueMap[key]\r\n if (cls) out.push(cls)\r\n }\r\n\r\n for (const compound of options.compoundVariants ?? []) {\r\n const matches = Object.entries(compound.variants).every(([k, expected]) => {\r\n const current = props[k] ?? defaults[k]\r\n return String(current) === expected\r\n })\r\n\r\n if (matches) out.push(compound.className)\r\n }\r\n\r\n return out\r\n}\r\n\r\nexport function resolveStyledClassName(options: StyledOptions, props: StyledProps = {}): string {\r\n const parts = [options.base ?? \"\", ...resolveVariantClass(options, props), props.className ?? \"\"]\r\n return twMerge(...parts)\r\n}\r\n\r\nexport function styled(options: StyledOptions) {\r\n return function getClassName(props: StyledProps = {}): string {\r\n return resolveStyledClassName(options, props)\r\n }\r\n}\r\n","/**\r\n * tailwind-styled-v4 — createStyledSystem()\r\n *\r\n * Design System Factory — Mode 3 API.\r\n *\r\n * Level 1 — utility: tw.div`p-4`\r\n * Level 2 — styled: tw(Button)`px-4`\r\n * Level 3 — design system: ui.button({ variant: \"primary\" })\r\n *\r\n * Usage:\r\n * const ui = createStyledSystem({\r\n * tokens: {\r\n * colors: { primary: \"#6366f1\", muted: \"#71717a\" },\r\n * radius: { base: \"0.5rem\", full: \"9999px\" },\r\n * },\r\n * components: {\r\n * button: {\r\n * base: \"inline-flex items-center font-medium transition-colors\",\r\n * variants: {\r\n * variant: {\r\n * primary: \"bg-[var(--sys-color-primary)] text-white\",\r\n * ghost: \"bg-transparent border border-current\",\r\n * danger: \"bg-red-500 text-white\",\r\n * },\r\n * size: {\r\n * sm: \"h-8 px-3 text-sm\",\r\n * md: \"h-10 px-4 text-base\",\r\n * lg: \"h-12 px-6 text-lg\",\r\n * },\r\n * },\r\n * defaultVariants: { variant: \"primary\", size: \"md\" },\r\n * },\r\n * },\r\n * })\r\n *\r\n * const Button = ui.button()\r\n * // → <Button variant=\"primary\" size=\"lg\" />\r\n *\r\n * // Token access\r\n * ui.token(\"colors.primary\") // → \"var(--sys-color-primary)\"\r\n * ui.cssVar(\"colors.primary\") // → \"#6366f1\"\r\n */\r\n\r\nimport type React from \"react\"\r\n\r\nimport { createComponent } from \"./createComponent\"\r\nimport { getNativeBinding } from \"./native\"\r\nimport type { ComponentConfig, TwStyledComponent } from \"./types\"\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// System token types\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type SystemTokenMap = Record<string, Record<string, string>>\r\n\r\nexport interface SystemComponentConfig extends ComponentConfig {\r\n /** Extra class applied only when used from the system (e.g. system-level resets) */\r\n systemBase?: string\r\n /** HTML tag for the component */\r\n tag?: string\r\n}\r\n\r\nexport interface StyledSystemConfig<\r\n T extends SystemTokenMap = SystemTokenMap,\r\n C extends Record<string, SystemComponentConfig> = Record<string, SystemComponentConfig>,\r\n> {\r\n /** Design tokens — injected as CSS custom properties under --sys-{group}-{name} */\r\n tokens?: T\r\n /** Component presets */\r\n components?: C\r\n /** CSS variable prefix. Default: \"sys\" → --sys-color-primary */\r\n prefix?: string\r\n /** If true, auto-inject token CSS vars into :root on init. Default: true */\r\n injectTokens?: boolean\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Token → CSS var helpers\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction tokenVarName(prefix: string, group: string, name: string): string {\r\n return `--${prefix}-${group}-${name}`\r\n}\r\n\r\nfunction tokenVarRef(prefix: string, group: string, name: string): string {\r\n return `var(${tokenVarName(prefix, group, name)})`\r\n}\r\n\r\nfunction resolveTokenRef(tokens: SystemTokenMap, prefix: string, value: string): string {\r\n // If value is \"token:colors.primary\" → resolve to var(--sys-colors-primary)\r\n if (value.startsWith(\"token:\")) {\r\n const path = value.slice(6)\r\n const [group, name] = path.split(\".\")\r\n if (group && name && tokens[group]?.[name] !== undefined) {\r\n return tokenVarRef(prefix, group, name)\r\n }\r\n }\r\n return value\r\n}\r\n\r\nfunction injectTokensToRoot(tokens: SystemTokenMap, prefix: string): void {\r\n if (typeof document === \"undefined\") return\r\n\r\n const styleId = `__tw-sys-tokens-${prefix}`\r\n if (document.getElementById(styleId)) return\r\n\r\n const style = document.createElement(\"style\")\r\n style.id = styleId\r\n style.textContent = _buildTokenCss(tokens, prefix)\r\n document.head.appendChild(style)\r\n}\r\n\r\n/**\r\n * Build `:root { --prefix-group-name: value; ... }` CSS string.\r\n *\r\n * Fast path: generateSystemTokenCss() di Rust — eliminasi nested JS loop.\r\n * Fallback: JS string building (identik dengan implementasi sebelumnya).\r\n *\r\n * Dipakai oleh `injectTokensToRoot()` (init) dan `setTokens()` (runtime update).\r\n */\r\nfunction _buildTokenCss(tokens: SystemTokenMap, prefix: string): string {\r\n const binding = getNativeBinding()\r\n if (!binding?.generateSystemTokenCss) {\r\n throw new Error(\"FATAL: Native binding 'generateSystemTokenCss' is required but not available.\")\r\n }\r\n return binding.generateSystemTokenCss(JSON.stringify(tokens), prefix)\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Variant class resolver — replaces \"token:*\" references inside variant values\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction resolveComponentConfig(\r\n config: SystemComponentConfig,\r\n tokens: SystemTokenMap,\r\n prefix: string\r\n): ComponentConfig {\r\n const resolveStr = (s: string) => resolveTokenRef(tokens, prefix, s)\r\n\r\n const base = resolveStr(config.base ?? \"\")\r\n const systemBase = resolveStr(config.systemBase ?? \"\")\r\n const mergedBase = [systemBase, base].filter(Boolean).join(\" \")\r\n\r\n const variants: Record<string, Record<string, string>> = {}\r\n for (const [variantKey, variantMap] of Object.entries(config.variants ?? {})) {\r\n variants[variantKey] = {}\r\n for (const [optKey, classes] of Object.entries(variantMap)) {\r\n variants[variantKey][optKey] = classes.split(\" \").map(resolveStr).join(\" \")\r\n }\r\n }\r\n\r\n const compoundVariants = (config.compoundVariants ?? []).map((cv) => {\r\n const { class: cls, ...rest } = cv\r\n return { class: resolveStr(cls), ...rest }\r\n })\r\n\r\n return {\r\n base: mergedBase,\r\n variants,\r\n compoundVariants,\r\n defaultVariants: config.defaultVariants ?? {},\r\n state: config.state,\r\n container: config.container,\r\n containerName: config.containerName,\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// StyledSystem instance type\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type SystemComponentFactory<C extends SystemComponentConfig> = (\r\n overrides?: Partial<C>\r\n) => TwStyledComponent<ComponentConfig, string>\r\n\r\nexport type StyledSystemInstance<\r\n T extends SystemTokenMap,\r\n C extends Record<string, SystemComponentConfig>,\r\n> = {\r\n [K in keyof C]: SystemComponentFactory<C[K]>\r\n} & {\r\n /**\r\n * Get the CSS variable reference for a token.\r\n * @example ui.token(\"colors.primary\") → \"var(--sys-colors-primary)\"\r\n */\r\n token(path: string): string\r\n /**\r\n * Get the raw value of a token.\r\n * @example ui.rawToken(\"colors.primary\") → \"#6366f1\"\r\n */\r\n rawToken(path: string): string | undefined\r\n /**\r\n * Update token values at runtime (re-injects into :root).\r\n */\r\n setTokens(updates: Partial<{ [G in keyof T]: Partial<T[G]> }>): void\r\n /**\r\n * Access the resolved component config for a registered component.\r\n */\r\n getConfig(name: keyof C): ComponentConfig | undefined\r\n /**\r\n * The tokens object (for reference).\r\n */\r\n tokens: T\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// createStyledSystem\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport function createStyledSystem<\r\n T extends SystemTokenMap = SystemTokenMap,\r\n C extends Record<string, SystemComponentConfig> = Record<string, SystemComponentConfig>,\r\n>(config: StyledSystemConfig<T, C>): StyledSystemInstance<T, C> {\r\n const prefix = config.prefix ?? \"sys\"\r\n const tokens = (config.tokens ?? {}) as T\r\n const componentDefs = config.components ?? ({} as C)\r\n const shouldInject = config.injectTokens !== false\r\n\r\n // Inject tokens into :root on first call (client only)\r\n if (shouldInject && typeof window !== \"undefined\") {\r\n injectTokensToRoot(tokens as SystemTokenMap, prefix)\r\n }\r\n\r\n // Cache resolved component configs\r\n const resolvedConfigs = new Map<string, ComponentConfig>()\r\n\r\n for (const [name, compCfg] of Object.entries(componentDefs)) {\r\n resolvedConfigs.set(\r\n name,\r\n resolveComponentConfig(compCfg, tokens as SystemTokenMap, prefix)\r\n )\r\n }\r\n\r\n // Build component factories\r\n const factories: Record<string, SystemComponentFactory<SystemComponentConfig>> = {}\r\n\r\n for (const [name, compCfg] of Object.entries(componentDefs)) {\r\n const tag = compCfg.tag ?? \"div\"\r\n\r\n factories[name] = (overrides?: Partial<SystemComponentConfig>) => {\r\n const baseResolved = resolvedConfigs.get(name)!\r\n const runtimeTag = tag as React.ElementType\r\n\r\n if (!overrides || Object.keys(overrides).length === 0) {\r\n return createComponent(runtimeTag, baseResolved) as unknown as TwStyledComponent<ComponentConfig, string>\r\n }\r\n\r\n // Merge overrides into resolved config\r\n const overrideResolved = resolveComponentConfig(\r\n overrides as SystemComponentConfig,\r\n tokens as SystemTokenMap,\r\n prefix\r\n )\r\n\r\n const merged: ComponentConfig = {\r\n base: [baseResolved.base, overrideResolved.base].filter(Boolean).join(\" \"),\r\n variants: {\r\n ...(baseResolved.variants ?? undefined),\r\n ...(overrideResolved.variants ?? undefined),\r\n },\r\n compoundVariants: [\r\n ...(baseResolved.compoundVariants ?? []),\r\n ...(overrideResolved.compoundVariants ?? []),\r\n ],\r\n defaultVariants: {\r\n ...(baseResolved.defaultVariants ?? undefined),\r\n ...(overrideResolved.defaultVariants ?? undefined),\r\n },\r\n state: overrideResolved.state ?? baseResolved.state,\r\n container: overrideResolved.container ?? baseResolved.container,\r\n containerName: overrideResolved.containerName ?? baseResolved.containerName,\r\n }\r\n\r\n return createComponent(runtimeTag, merged) as unknown as TwStyledComponent<ComponentConfig, string>\r\n }\r\n }\r\n\r\n // Token utilities\r\n function token(path: string): string {\r\n const [group, name] = path.split(\".\")\r\n if (!group || !name) return path\r\n return tokenVarRef(prefix, group, name)\r\n }\r\n\r\n function rawToken(path: string): string | undefined {\r\n const [group, name] = path.split(\".\")\r\n if (!group || !name) return undefined\r\n return (tokens as SystemTokenMap)[group]?.[name]\r\n }\r\n\r\n function setTokens(updates: Partial<{ [G in keyof T]: Partial<T[G]> }>): void {\r\n if (typeof document === \"undefined\") return\r\n\r\n // Find or create the :root style element\r\n const styleId = `__tw-sys-tokens-${prefix}`\r\n const style =\r\n (document.getElementById(styleId) as HTMLStyleElement | null) ??\r\n (() => {\r\n const el = document.createElement(\"style\")\r\n el.id = styleId\r\n document.head.appendChild(el)\r\n return el\r\n })()\r\n\r\n // Merge updates into tokens and re-generate\r\n for (const [group, map] of Object.entries(updates)) {\r\n if (!tokens[group as keyof T]) continue\r\n for (const [name, value] of Object.entries(map as Record<string, string>)) {\r\n ;(tokens as SystemTokenMap)[group][name] = value\r\n }\r\n }\r\n\r\n style.textContent = _buildTokenCss(tokens as SystemTokenMap, prefix)\r\n }\r\n\r\n function getConfig(name: keyof C): ComponentConfig | undefined {\r\n return resolvedConfigs.get(name as string)\r\n }\r\n\r\n return Object.assign(factories, {\r\n token,\r\n rawToken,\r\n setTokens,\r\n getConfig,\r\n tokens,\r\n }) as StyledSystemInstance<T, C>\r\n}","/**\r\n * tailwind-styled-v4 v2 — tw\r\n *\r\n * API:\r\n * tw.div`p-4 bg-zinc-900`\r\n * tw.button`px-4 [icon] { h-4 w-4 }` ← sub-components inline\r\n * tw.button({ base: \"px-4\", variants: { size: { sm: \"text-sm\" } } })\r\n * tw(Link)`underline text-blue-400`\r\n * tw.server.div`p-4` ← server-only, compiler enforced + runtime dev warning\r\n */\r\n\r\nimport React from \"react\"\r\nimport { createComponent } from \"./createComponent\"\r\nimport { getNativeBinding } from \"./native\"\r\nimport type {\r\n ComponentConfig,\r\n TwComponentFactory,\r\n TwObject,\r\n TwServerObject,\r\n TwStyledComponent,\r\n TwTagFactory,\r\n TwTagFactoryAny,\r\n} from \"./types\"\r\n\r\n// types.ts is single source of truth — re-export for consumers\r\nexport type { TwComponentFactory, TwObject, TwServerObject, TwTagFactory }\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Template parser\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\ninterface ParsedTemplate {\r\n /** Base classes — tanpa sub-component blocks */\r\n base: string\r\n /** Sub-component map: { icon: \"h-4 w-4 ...\", badge: \"px-2 ...\" } */\r\n subs: Record<string, string>\r\n /** Ada sub-component atau tidak */\r\n hasSubs: boolean\r\n}\r\n\r\n// Cache untuk parseTemplate — raw template string tidak berubah antar hot reloads\r\nconst _parsedTemplateCache = new Map<string, ParsedTemplate>()\r\n\r\n/**\r\n * parseTemplate — native-first, cache-first.\r\n * Native-only: delegates ke Rust `parse_template`.\r\n */\r\nfunction parseTemplate(strings: TemplateStringsArray, exprs: unknown[]): ParsedTemplate {\r\n const raw = strings.raw.reduce((acc, str, i) => {\r\n const expr = exprs[i]\r\n const exprStr = typeof expr === \"function\" ? \"\" : (expr ?? \"\")\r\n return acc + str + String(exprStr)\r\n }, \"\")\r\n\r\n const cached = _parsedTemplateCache.get(raw)\r\n if (cached) return cached\r\n\r\n const binding = getNativeBinding()\r\n if (!binding?.parseTemplate) {\r\n throw new Error(\"FATAL: Native binding 'parseTemplate' is required but not available.\")\r\n }\r\n\r\n const r = binding.parseTemplate(raw)\r\n const subs: Record<string, string> = r.hasSubs ? JSON.parse(r.subsJson) : {}\r\n const result: ParsedTemplate = { base: r.base, subs, hasSubs: r.hasSubs }\r\n _parsedTemplateCache.set(raw, result)\r\n return result\r\n}\r\n\r\ntype RuntimeTagFactory = ((\r\n stringsOrConfig: TemplateStringsArray | ComponentConfig,\r\n ...exprs: unknown[]\r\n) => TwStyledComponent<ComponentConfig, string>) &\r\n TwTagFactoryAny\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// makeTag\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction makeTag(tag: React.ElementType): RuntimeTagFactory {\r\n return ((\r\n stringsOrConfig: TemplateStringsArray | ComponentConfig,\r\n ...exprs: unknown[]\r\n ): TwStyledComponent<ComponentConfig, string> => {\r\n // Object config path\r\n if (\r\n !Array.isArray(stringsOrConfig) &&\r\n typeof stringsOrConfig === \"object\" &&\r\n stringsOrConfig !== null &&\r\n !(\"raw\" in stringsOrConfig)\r\n ) {\r\n return createComponent(tag, stringsOrConfig as ComponentConfig) as unknown as TwStyledComponent<ComponentConfig, string>\r\n }\r\n\r\n // Template literal path\r\n const parsed = parseTemplate(stringsOrConfig as TemplateStringsArray, exprs)\r\n\r\n // Buat component dari base classes\r\n const component = createComponent(tag, parsed.base)\r\n\r\n // Attach sub-components sebagai React.FC dari classes yang di-extract\r\n if (parsed.hasSubs) {\r\n for (const [name, classes] of Object.entries(parsed.subs)) {\r\n // Setiap sub-component adalah styled span/div dengan classesnya\r\n const SubComp = React.forwardRef<\r\n HTMLSpanElement,\r\n { children?: React.ReactNode; className?: string }\r\n >(({ children, className }, ref) =>\r\n React.createElement(\"span\", {\r\n ref,\r\n className: className ? `${classes} ${className}` : classes,\r\n }, children)\r\n )\r\n SubComp.displayName = `tw.${typeof tag === \"string\" ? tag : \"component\"}.${name}`;\r\n ;(component as unknown as Record<string, unknown>)[name] = SubComp\r\n }\r\n }\r\n\r\n return component as unknown as TwStyledComponent<ComponentConfig, string>\r\n }) as RuntimeTagFactory\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// HTML tag list\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nconst HTML_TAGS = [\r\n \"div\", \"section\", \"article\", \"aside\", \"header\", \"footer\", \"main\", \"nav\",\r\n \"figure\", \"figcaption\", \"details\", \"summary\",\r\n \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\",\r\n \"p\", \"span\", \"strong\", \"em\", \"b\", \"i\", \"s\", \"u\", \"small\", \"mark\",\r\n \"abbr\", \"cite\", \"code\", \"kbd\", \"samp\", \"var\", \"time\", \"address\",\r\n \"blockquote\", \"q\", \"del\", \"ins\", \"sub\", \"sup\",\r\n \"ul\", \"ol\", \"li\", \"dl\", \"dt\", \"dd\",\r\n \"table\", \"thead\", \"tbody\", \"tfoot\", \"tr\", \"th\", \"td\", \"caption\",\r\n \"colgroup\", \"col\",\r\n \"img\", \"picture\", \"video\", \"audio\", \"source\", \"track\",\r\n \"canvas\", \"svg\", \"path\", \"circle\", \"rect\", \"line\",\r\n \"polyline\", \"polygon\", \"g\", \"defs\", \"use\", \"symbol\",\r\n \"form\", \"input\", \"textarea\", \"select\", \"option\", \"optgroup\",\r\n \"button\", \"label\", \"fieldset\", \"legend\", \"output\",\r\n \"progress\", \"meter\", \"datalist\",\r\n \"a\", \"area\", \"map\", \"iframe\", \"embed\", \"object\",\r\n \"pre\", \"hr\", \"br\", \"wbr\", \"dialog\", \"menu\", \"template\", \"slot\",\r\n] as const\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// tw.server — server-only namespace with dev warning\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction makeServerTag(tag: React.ElementType): RuntimeTagFactory {\r\n const baseFactory = makeTag(tag)\r\n if (typeof window !== \"undefined\" && process.env.NODE_ENV !== \"production\") {\r\n return ((\r\n stringsOrConfig: TemplateStringsArray | ComponentConfig,\r\n ...exprs: unknown[]\r\n ): TwStyledComponent<ComponentConfig, string> => {\r\n const tagName =\r\n typeof tag === \"string\"\r\n ? tag\r\n : ((tag as { displayName?: string }).displayName ?? \"Component\")\r\n console.warn(\r\n `[tailwind-styled-v4] tw.server.${tagName} rendered in browser. ` +\r\n `Ensure withTailwindStyled or Vite plugin is configured.`\r\n )\r\n return baseFactory(stringsOrConfig, ...exprs)\r\n }) as RuntimeTagFactory\r\n }\r\n return baseFactory\r\n}\r\n\r\nconst serverFactories: Record<string, RuntimeTagFactory> = {}\r\nfor (const tag of HTML_TAGS) {\r\n serverFactories[tag] = makeServerTag(tag as React.ElementType)\r\n}\r\n\r\nexport const server: TwServerObject = serverFactories as unknown as TwServerObject\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// tw — main export\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nconst tagFactories: Record<string, RuntimeTagFactory> = {}\r\nfor (const tag of HTML_TAGS) {\r\n tagFactories[tag] = makeTag(tag as React.ElementType)\r\n}\r\n\r\nfunction twCallable(component: React.ComponentType<unknown>) {\r\n return makeTag(component)\r\n}\r\n\r\nexport const tw: TwObject = Object.assign(twCallable, tagFactories, {\r\n server,\r\n}) as unknown as TwObject","/**\r\n * tailwind-styled-v4 v2 — twTheme\r\n *\r\n * UPGRADE #1: Tailwind v4 CSS Variables integration.\r\n *\r\n * Tailwind v4 uses @theme inline to expose design tokens as CSS custom properties:\r\n * @theme inline {\r\n * --color-background: var(--background);\r\n * --color-foreground: var(--foreground);\r\n * --font-sans: var(--font-geist-sans);\r\n * }\r\n *\r\n * This module bridges tw() syntax with those CSS variables — zero config,\r\n * full IDE support, type-safe design tokens.\r\n *\r\n * @example\r\n * // Without twTheme (verbose, error-prone)\r\n * const Box = tw.div`bg-[var(--color-background)] text-[var(--color-foreground)]`\r\n *\r\n * // With twTheme (clean, type-safe)\r\n * const Box = tw.div`${t.bg(\"color-background\")} ${t.text(\"color-foreground\")}`\r\n *\r\n * // Or with createTheme for full project-level token map\r\n * const theme = createTheme({\r\n * colors: { bg: \"color-background\", fg: \"color-foreground\", primary: \"color-primary\" },\r\n * fonts: { sans: \"font-sans\", mono: \"font-mono\" },\r\n * })\r\n * const Box = tw.div`bg-${theme.colors.bg} text-${theme.colors.fg}`\r\n */\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Core helper — CSS variable reference\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Reference a CSS custom property in Tailwind v4 arbitrary value syntax.\r\n *\r\n * @example\r\n * cssVar(\"color-background\") → \"var(--color-background)\"\r\n * cssVar(\"color-primary\", \"#3b82f6\") → \"var(--color-primary, #3b82f6)\"\r\n */\r\nexport function cssVar(varName: string, fallback?: string): string {\r\n const name = varName.startsWith(\"--\") ? varName : `--${varName}`\r\n return fallback ? `var(${name}, ${fallback})` : `var(${name})`\r\n}\r\n\r\n/**\r\n * Generate a Tailwind v4 arbitrary value that references a CSS variable.\r\n *\r\n * @example\r\n * twVar(\"bg\", \"color-background\") → \"bg-[var(--color-background)]\"\r\n * twVar(\"text\", \"color-foreground\") → \"text-[var(--color-foreground)]\"\r\n * twVar(\"border\", \"color-border\", \"#e5e7eb\") → \"border-[var(--color-border,#e5e7eb)]\"\r\n */\r\nexport function twVar(property: string, varName: string, fallback?: string): string {\r\n const ref = fallback ? `var(--${varName},${fallback})` : `var(--${varName})`\r\n return `${property}-[${ref}]`\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Convenience shorthand builders\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport const t = {\r\n /** Background color from CSS variable: t.bg(\"color-primary\") → \"bg-[var(--color-primary)]\" */\r\n bg: (v: string, fb?: string) => twVar(\"bg\", v, fb),\r\n /** Text color from CSS variable */\r\n text: (v: string, fb?: string) => twVar(\"text\", v, fb),\r\n /** Border color from CSS variable */\r\n border: (v: string, fb?: string) => twVar(\"border\", v, fb),\r\n /** Ring color from CSS variable */\r\n ring: (v: string, fb?: string) => twVar(\"ring\", v, fb),\r\n /** Outline color from CSS variable */\r\n outline: (v: string, fb?: string) => twVar(\"outline\", v, fb),\r\n /** Fill color from CSS variable (SVG) */\r\n fill: (v: string, fb?: string) => twVar(\"fill\", v, fb),\r\n /** Stroke color from CSS variable (SVG) */\r\n stroke: (v: string, fb?: string) => twVar(\"stroke\", v, fb),\r\n /** Font family from CSS variable */\r\n font: (v: string, fb?: string) => twVar(\"font\", v, fb),\r\n /** Shadow from CSS variable */\r\n shadow: (v: string, fb?: string) => twVar(\"shadow\", v, fb),\r\n /** Any arbitrary property from CSS variable */\r\n var: (property: string, v: string, fb?: string) => twVar(property, v, fb),\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// createTheme — project-level design token map\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface ThemeTokenMap {\r\n colors?: Record<string, string>\r\n fonts?: Record<string, string>\r\n spacing?: Record<string, string>\r\n [key: string]: Record<string, string> | undefined\r\n}\r\n\r\nexport type ResolvedThemeTokens<T extends ThemeTokenMap> = {\r\n [Group in keyof T]: T[Group] extends Record<string, string>\r\n ? {\r\n [Token in keyof T[Group]]: string\r\n }\r\n : never\r\n}\r\n\r\n/**\r\n * Create a typed theme token map from your CSS variable names.\r\n * Returns helper functions that generate Tailwind v4 arbitrary values.\r\n *\r\n * @example\r\n * // Define your tokens (match your globals.css @theme block)\r\n * const theme = createTheme({\r\n * colors: {\r\n * bg: \"color-background\",\r\n * fg: \"color-foreground\",\r\n * primary: \"color-primary\",\r\n * muted: \"color-muted\",\r\n * },\r\n * fonts: {\r\n * sans: \"font-sans\",\r\n * mono: \"font-mono\",\r\n * },\r\n * })\r\n *\r\n * // Use in tw components\r\n * const Card = tw.div`\r\n * bg-${theme.colors.bg}\r\n * text-${theme.colors.fg}\r\n * font-${theme.fonts.sans}\r\n * `\r\n * // → tw.div`bg-[var(--color-background)] text-[var(--color-foreground)] font-[var(--font-sans)]`\r\n *\r\n * // Use in cv()\r\n * const button = cv({\r\n * base: `px-4 py-2 ${theme.colors.bg} ${theme.colors.fg}`,\r\n * variants: { ... }\r\n * })\r\n */\r\nexport function createTheme<T extends ThemeTokenMap>(tokenMap: T): ResolvedThemeTokens<T> {\r\n const resolved: Record<string, Record<string, string>> = {}\r\n\r\n for (const group in tokenMap) {\r\n resolved[group] = {}\r\n const tokens = tokenMap[group]!\r\n for (const name in tokens) {\r\n const varName = tokens[name]\r\n const prefix = getGroupPrefix(group)\r\n resolved[group][name] = prefix ? twVar(prefix, varName) : cssVar(varName)\r\n }\r\n }\r\n\r\n return resolved as ResolvedThemeTokens<T>\r\n}\r\n\r\nfunction getGroupPrefix(group: string): string {\r\n const map: Record<string, string> = {\r\n colors: \"bg\", // default to bg; user can use t.text() for text colors\r\n fonts: \"font\",\r\n spacing: \"p\",\r\n shadows: \"shadow\",\r\n }\r\n return map[group] ?? \"\"\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Standard Tailwind v4 tokens\r\n//\r\n// Pre-built token references for the default next-app globals.css setup.\r\n// These match what Tailwind v4's @theme inline generates.\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Pre-built references for standard Tailwind v4 CSS variable tokens.\r\n * Works out of the box with next-app-standar-config globals.css.\r\n *\r\n * @example\r\n * import { v4Tokens } from \"tailwind-styled-v4\"\r\n *\r\n * const Page = tw.div`${v4Tokens.bg} ${v4Tokens.text}`\r\n * // → tw.div`bg-[var(--color-background)] text-[var(--color-foreground)]`\r\n */\r\nexport const v4Tokens = {\r\n /** bg-[var(--color-background)] */\r\n bg: twVar(\"bg\", \"color-background\"),\r\n /** text-[var(--color-foreground)] */\r\n text: twVar(\"text\", \"color-foreground\"),\r\n /** font-[var(--font-sans)] */\r\n fontSans: twVar(\"font\", \"font-sans\"),\r\n /** font-[var(--font-mono)] */\r\n fontMono: twVar(\"font\", \"font-mono\"),\r\n} as const\r\n","import path from \"node:path\"\r\n\r\nimport type { ScanWorkspaceResult } from \"@tailwind-styled/scanner\"\r\nimport { scanWorkspaceAsync } from \"@tailwind-styled/scanner\"\r\n\r\nimport { requireNativeBinding } from \"./binding\"\r\nimport { parseAnalyzerOptions, parseNativeReport } from \"./schemas\"\r\nimport { buildSemanticReport } from \"./semantic\"\r\nimport type { AnalyzerOptions, AnalyzerReport, ClassUsage } from \"./types\"\r\nimport { debugLog, formatErrorMessage, sanitizeFrequentThreshold, sanitizeTopLimit } from \"./utils\"\r\n\r\nfunction normalizeScan(\r\n scan: ScanWorkspaceResult,\r\n includeClass?: (className: string) => boolean\r\n): ScanWorkspaceResult {\r\n if (!includeClass) return scan\r\n\r\n const filteredFiles = scan.files.map((file) => ({\r\n file: file.file,\r\n classes: file.classes.filter((className) => includeClass(className)),\r\n }))\r\n\r\n const unique = new Set<string>()\r\n for (const file of filteredFiles) {\r\n for (const className of file.classes) {\r\n unique.add(className)\r\n }\r\n }\r\n\r\n return {\r\n files: filteredFiles,\r\n totalFiles: scan.totalFiles,\r\n uniqueClasses: Array.from(unique).sort(),\r\n }\r\n}\r\n\r\nexport async function collectClassCounts(scan: ScanWorkspaceResult): Promise<Map<string, number>> {\r\n const native = await requireNativeBinding()\r\n if (!native?.collectClassCounts) {\r\n throw new Error(\"FATAL: Native binding 'collectClassCounts' is required but not available.\")\r\n }\r\n const filesJson = JSON.stringify(\r\n scan.files.map((f) => ({ file: f.file ?? \"\", classes: f.classes }))\r\n )\r\n const result = native.collectClassCounts(filesJson) as Array<{ name: string; count: number }>\r\n const counts = new Map<string, number>()\r\n for (const entry of result) counts.set(entry.name, entry.count)\r\n return counts\r\n}\r\n\r\nfunction buildClassUsage(counts: Map<string, number>): ClassUsage[] {\r\n return Array.from(counts.entries())\r\n .map(([name, count]) => ({ name, count }))\r\n .sort((left, right) => {\r\n if (right.count !== left.count) return right.count - left.count\r\n return left.name.localeCompare(right.name)\r\n })\r\n}\r\n\r\nexport async function buildDistribution(\r\n usages: ClassUsage[],\r\n native?: Awaited<ReturnType<typeof requireNativeBinding>>\r\n): Promise<Record<string, number>> {\r\n const binding = native ?? (await requireNativeBinding())\r\n if (!binding?.buildDistribution) {\r\n throw new Error(\"FATAL: Native binding 'buildDistribution' is required but not available.\")\r\n }\r\n const result = binding.buildDistribution(\r\n JSON.stringify(usages.map((u) => ({ name: u.name, count: u.count })))\r\n ) as { once: number; few: number; moderate: number; frequent: number }\r\n return {\r\n \"1\": result.once,\r\n \"2-3\": result.few,\r\n \"4-7\": result.moderate,\r\n \"8+\": result.frequent,\r\n }\r\n}\r\n\r\n/**\r\n * Analyze Tailwind class usage in a workspace and return usage statistics.\r\n * Set `semantic.tailwindConfigPath` to override Tailwind config lookup.\r\n * @example\r\n * const report = await analyzeWorkspace(\"./src\", {\r\n * classStats: { top: 20, frequentThreshold: 2 },\r\n * semantic: { tailwindConfigPath: \"tailwind.config.js\" },\r\n * })\r\n */\r\nexport async function analyzeWorkspace(\r\n root: string,\r\n options: AnalyzerOptions = {}\r\n): Promise<AnalyzerReport> {\r\n const startedAtMs = Date.now()\r\n const resolvedRoot = path.resolve(root)\r\n const normalizedOptions = parseAnalyzerOptions(options)\r\n\r\n // 1. Scan workspace - const dengan IIFE async\r\n const scan = await (async () => {\r\n const scanStartedAtMs = Date.now()\r\n try {\r\n const result = await scanWorkspaceAsync(resolvedRoot, normalizedOptions.scanner)\r\n debugLog(\r\n `scanWorkspaceAsync processed ${result.totalFiles} files in ${Date.now() - scanStartedAtMs}ms`\r\n )\r\n return result\r\n } catch (error) {\r\n throw new Error(\r\n `Failed to scan workspace at \"${resolvedRoot}\": ${formatErrorMessage(error)}`,\r\n {\r\n cause: error,\r\n }\r\n )\r\n }\r\n })()\r\n\r\n const normalizedScan = normalizeScan(scan, normalizedOptions.includeClass)\r\n const topLimit = sanitizeTopLimit(normalizedOptions.classStats?.top)\r\n const frequentThreshold = sanitizeFrequentThreshold(\r\n normalizedOptions.classStats?.frequentThreshold\r\n )\r\n\r\n const binding = await requireNativeBinding()\r\n const filesJson = JSON.stringify(\r\n normalizedScan.files.map((file) => ({ file: file.file, classes: file.classes }))\r\n )\r\n\r\n // 2. Native report - const dengan IIFE\r\n const nativeReport = (() => {\r\n try {\r\n const report = binding.analyzeClasses(filesJson, resolvedRoot, topLimit)\r\n if (!report) {\r\n throw new Error(`Native analyzer returned no report for \"${resolvedRoot}\".`)\r\n }\r\n return parseNativeReport(report)\r\n } catch (error) {\r\n throw new Error(\r\n `Native analyzer failed for \"${resolvedRoot}\": ${formatErrorMessage(error)}`,\r\n {\r\n cause: error,\r\n }\r\n )\r\n }\r\n })()\r\n\r\n const counts = await collectClassCounts(normalizedScan)\r\n const baseAll = buildClassUsage(counts)\r\n\r\n // 3. Semantic report - const dengan IIFE async\r\n const { all, semanticReport } = await (async () => {\r\n if (!normalizedOptions.semantic) {\r\n return { all: baseAll, semanticReport: undefined }\r\n }\r\n\r\n const semanticOption =\r\n typeof normalizedOptions.semantic === \"object\" ? normalizedOptions.semantic : undefined\r\n const semanticStartedAtMs = Date.now()\r\n\r\n try {\r\n const report = await buildSemanticReport(baseAll, resolvedRoot, semanticOption)\r\n debugLog(`semantic report built in ${Date.now() - semanticStartedAtMs}ms`)\r\n\r\n if (report.conflicts.length === 0) {\r\n return { all: baseAll, semanticReport: report }\r\n }\r\n\r\n const conflicted = new Set(report.conflicts.flatMap((conflict) => conflict.classes))\r\n const updatedAll = baseAll.map((usage) =>\r\n conflicted.has(usage.name) ? { ...usage, isConflict: true } : usage\r\n )\r\n return { all: updatedAll, semanticReport: report }\r\n } catch (error) {\r\n throw new Error(\r\n `Failed to build semantic report for \"${resolvedRoot}\": ${formatErrorMessage(error)}`,\r\n { cause: error }\r\n )\r\n }\r\n })()\r\n\r\n // 4. Statistics — native-first: satu pass Rust vs 4× JS iterations\r\n const classStatsNative = binding?.computeClassStats?.(\r\n JSON.stringify(all),\r\n topLimit,\r\n frequentThreshold\r\n )\r\n const top: typeof all = classStatsNative ? JSON.parse(classStatsNative.topJson) : all.slice(0, topLimit)\r\n const frequent: typeof all = classStatsNative ? JSON.parse(classStatsNative.frequentJson) : all.filter((usage) => usage.count >= frequentThreshold).slice(0, topLimit)\r\n const unique: typeof all = classStatsNative ? JSON.parse(classStatsNative.uniqueJson) : all.filter((usage) => usage.count === 1)\r\n const totalClassOccurrences: number = classStatsNative\r\n ? classStatsNative.totalClassOccurrences\r\n : all.reduce((sum, usage) => sum + usage.count, 0)\r\n\r\n debugLog(\r\n `analyzeWorkspace completed in ${Date.now() - startedAtMs}ms ` +\r\n `(files=${normalizedScan.totalFiles}, uniqueClasses=${all.length})`\r\n )\r\n\r\n const distribution = await buildDistribution(all, binding)\r\n\r\n return {\r\n root: nativeReport.root || resolvedRoot,\r\n totalFiles: nativeReport.totalFiles,\r\n uniqueClassCount: all.length,\r\n totalClassOccurrences,\r\n classStats: {\r\n all,\r\n top,\r\n frequent,\r\n unique,\r\n distribution,\r\n },\r\n // topClasses — alias for classStats.top (test contract & backward compat)\r\n topClasses: top,\r\n safelist: all.map((usage) => usage.name),\r\n ...(semanticReport ? { semantic: semanticReport } : {}),\r\n }\r\n}","import {\r\n loadNativeBinding,\r\n resolveNativeBindingCandidates,\r\n resolveRuntimeDir,\r\n} from \"@tailwind-styled/shared\"\r\n\r\nimport type { NativeAnalyzerBinding, NativeCssCompilerBinding } from \"./types\"\r\nimport { debugLog } from \"./utils\"\r\n\r\nconst isAnalyzerModule = (module: unknown): module is NativeAnalyzerBinding => {\r\n const candidate = module as Partial<NativeAnalyzerBinding> | null | undefined\r\n return typeof candidate?.analyzeClasses === \"function\"\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────\r\n// Native Analyzer Binding - Factory Pattern (no let!)\r\n// ─────────────────────────────────────────────────────────────────────────\r\n\r\nconst createAnalyzerBindingLoader = () => {\r\n const _state = { bindingPromise: null as Promise<NativeAnalyzerBinding | null> | null }\r\n\r\n const getBindingPromise = (): Promise<NativeAnalyzerBinding | null> => {\r\n if (_state.bindingPromise) return _state.bindingPromise\r\n\r\n _state.bindingPromise = (async (): Promise<NativeAnalyzerBinding | null> => {\r\n const runtimeDir = resolveRuntimeDir(\r\n typeof __dirname === \"string\" ? __dirname : undefined,\r\n import.meta.url\r\n )\r\n const candidates = resolveNativeBindingCandidates({\r\n runtimeDir,\r\n envVarNames: [\"TWS_NATIVE_PATH\"],\r\n })\r\n\r\n const { binding, loadErrors, loadedPath } = await loadNativeBinding<NativeAnalyzerBinding>({\r\n runtimeDir,\r\n candidates,\r\n isValid: isAnalyzerModule,\r\n invalidExportMessage: \"Module loaded but missing `analyzeClasses` export.\",\r\n })\r\n\r\n if (binding) {\r\n debugLog(`native binding loaded from: ${loadedPath}`)\r\n return binding\r\n }\r\n\r\n if (loadErrors.length > 0) {\r\n debugLog(\r\n `native binding load failed for ${loadErrors.length} candidate(s): ${loadErrors\r\n .map((entry) => `${entry.path} (${entry.message})`)\r\n .join(\"; \")}`\r\n )\r\n } else {\r\n debugLog(\"native binding not found in any candidate path\")\r\n }\r\n\r\n return null\r\n })()\r\n\r\n return _state.bindingPromise\r\n }\r\n\r\n return {\r\n get: getBindingPromise,\r\n reset: (): void => {\r\n _state.bindingPromise = null\r\n },\r\n }\r\n}\r\n\r\nconst analyzerBindingLoader = createAnalyzerBindingLoader()\r\n\r\nexport async function getNativeBinding(): Promise<NativeAnalyzerBinding | null> {\r\n return analyzerBindingLoader.get()\r\n}\r\n\r\nexport async function requireNativeBinding(): Promise<NativeAnalyzerBinding> {\r\n const binding = await analyzerBindingLoader.get()\r\n if (binding?.analyzeClasses) return binding\r\n\r\n // Untuk error reporting, kita perlu akses ke candidates dan loadErrors\r\n // Tapi karena async, kita perlu load ulang atau simpan state\r\n const runtimeDir = resolveRuntimeDir(\r\n typeof __dirname === \"string\" ? __dirname : undefined,\r\n import.meta.url\r\n )\r\n const candidates = resolveNativeBindingCandidates({\r\n runtimeDir,\r\n envVarNames: [\"TWS_NATIVE_PATH\"],\r\n })\r\n\r\n const { loadErrors } = await loadNativeBinding<NativeAnalyzerBinding>({\r\n runtimeDir,\r\n candidates,\r\n isValid: isAnalyzerModule,\r\n invalidExportMessage: \"Module loaded but missing `analyzeClasses` export.\",\r\n })\r\n\r\n const lines = [\r\n \"Native analyzer binding not found. Ensure `tailwind_styled_parser.node` is built.\",\r\n ]\r\n\r\n lines.push(\"Checked paths:\")\r\n for (const candidate of candidates) lines.push(`- ${candidate}`)\r\n if (loadErrors.length > 0) {\r\n lines.push(\"Load errors:\")\r\n for (const failure of loadErrors) {\r\n lines.push(`- ${failure.path}: ${failure.message}`)\r\n }\r\n }\r\n\r\n throw new Error(lines.join(\"\\n\"))\r\n}\r\n\r\nexport async function requireNativeCssCompiler(): Promise<NativeCssCompilerBinding> {\r\n const binding = await requireNativeBinding()\r\n if (typeof binding.compileCss === \"function\") return binding as NativeCssCompilerBinding\r\n\r\n throw new Error(`Native analyzer compileCss binding is missing.`)\r\n}\r\n","import fs from \"node:fs\"\r\nimport { createDebugLogger } from \"@tailwind-styled/shared\"\r\n\r\nexport const DEFAULT_TOP_LIMIT = 10\r\nexport const DEFAULT_FREQUENT_THRESHOLD = 2\r\nexport const DEBUG_NAMESPACE = \"tailwind-styled:analyzer\"\r\n\r\nexport function formatErrorMessage(error: unknown): string {\r\n return error instanceof Error ? error.message : String(error)\r\n}\r\n\r\nexport function isRecord(value: unknown): value is Record<string, unknown> {\r\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false\r\n const proto = Object.getPrototypeOf(value)\r\n return proto === Object.prototype || proto === null\r\n}\r\n\r\nexport async function pathExists(filePath: string): Promise<boolean> {\r\n try {\r\n await fs.promises.access(filePath, fs.constants.F_OK)\r\n return true\r\n } catch {\r\n return false\r\n }\r\n}\r\n\r\nexport const debugLog = createDebugLogger(DEBUG_NAMESPACE, \"tailwind-styled/analyzer\")\r\n\r\nexport function sanitizeTopLimit(value: number | undefined): number {\r\n if (!Number.isFinite(value)) return DEFAULT_TOP_LIMIT\r\n return Math.max(1, Math.trunc(value as number))\r\n}\r\n\r\nexport function sanitizeFrequentThreshold(value: number | undefined): number {\r\n if (!Number.isFinite(value)) return DEFAULT_FREQUENT_THRESHOLD\r\n return Math.max(1, Math.trunc(value as number))\r\n}\r\n","import { TwError } from \"@tailwind-styled/shared\"\r\nimport type { ScanWorkspaceOptions } from \"@tailwind-styled/scanner\"\r\nimport { z } from \"zod\"\r\n\r\nconst formatIssuePath = (path: readonly PropertyKey[]): string =>\r\n path.length > 0\r\n ? path\r\n .map((segment) =>\r\n typeof segment === \"symbol\" ? segment.description ?? segment.toString() : String(segment)\r\n )\r\n .join(\".\")\r\n : \"<root>\"\r\n\r\nconst isPlainObject = (value: unknown): value is Record<string, unknown> => {\r\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false\r\n const proto = Object.getPrototypeOf(value)\r\n return proto === Object.prototype || proto === null\r\n}\r\n\r\nconst formatIssues = (error: z.ZodError): string =>\r\n error.issues\r\n .map((issue) => {\r\n const path = formatIssuePath(issue.path)\r\n return `${path}: ${issue.message}`\r\n })\r\n .join(\"; \")\r\n\r\nconst parseWithSchema = <T>(schema: z.ZodType<T>, data: unknown, label: string): T => {\r\n const parsed = schema.safeParse(data)\r\n if (parsed.success) return parsed.data\r\n const details = formatIssues(parsed.error)\r\n throw new TwError(\r\n \"validation\",\r\n \"SCHEMA_VALIDATION_FAILED\",\r\n details ? `${label}: ${details}` : label,\r\n parsed.error\r\n )\r\n}\r\n\r\nconst CountSchema = z.number().int().min(0)\r\n\r\nexport const ClassUsageSchema = z.object({\r\n name: z.string(),\r\n count: CountSchema,\r\n isUnused: z.boolean().optional(),\r\n isConflict: z.boolean().optional(),\r\n})\r\n\r\nexport const ClassConflictSchema = z.object({\r\n className: z.string(),\r\n variants: z.array(z.string()),\r\n classes: z.array(z.string()),\r\n message: z.string(),\r\n})\r\n\r\nconst ClassCountSchema = z.object({\r\n name: z.string(),\r\n count: CountSchema,\r\n})\r\n\r\nexport const NativeReportSchema = z.object({\r\n root: z.string(),\r\n totalFiles: CountSchema,\r\n uniqueClassCount: CountSchema,\r\n totalClassOccurrences: CountSchema,\r\n topClasses: z.array(ClassCountSchema),\r\n duplicateCandidates: z.array(ClassCountSchema),\r\n safelist: z.array(z.string()),\r\n})\r\n\r\nexport const NativeCssCompileResultSchema = z.object({\r\n css: z.string(),\r\n resolvedClasses: z.array(z.string()),\r\n unknownClasses: z.array(z.string()),\r\n sizeBytes: CountSchema,\r\n})\r\n\r\nconst AnalyzerClassStatsSchema = z.object({\r\n top: z\r\n .number({\r\n error: \"analyzeWorkspace options.classStats.top must be a number when provided.\",\r\n })\r\n .finite()\r\n .optional(),\r\n frequentThreshold: z\r\n .number({\r\n error:\r\n \"analyzeWorkspace options.classStats.frequentThreshold must be a number when provided.\",\r\n })\r\n .finite()\r\n .optional(),\r\n})\r\n\r\nconst AnalyzerSemanticOptionsSchema = z.object({\r\n tailwindConfigPath: z\r\n .string({\r\n error:\r\n \"analyzeWorkspace options.semantic.tailwindConfigPath must be a non-empty string when provided.\",\r\n })\r\n .min(\r\n 1,\r\n \"analyzeWorkspace options.semantic.tailwindConfigPath must be a non-empty string when provided.\"\r\n )\r\n .optional(),\r\n})\r\n\r\nexport const AnalyzerOptionsSchema = z.object({\r\n scanner: z\r\n .custom<ScanWorkspaceOptions>(\r\n (value) => isPlainObject(value),\r\n \"analyzeWorkspace options.scanner must be an object when provided.\"\r\n )\r\n .optional(),\r\n classStats: AnalyzerClassStatsSchema.optional(),\r\n semantic: z\r\n .union([\r\n z.boolean({\r\n error: \"analyzeWorkspace options.semantic must be a boolean or an object when provided.\",\r\n }),\r\n AnalyzerSemanticOptionsSchema,\r\n ])\r\n .optional(),\r\n includeClass: z\r\n .custom<(className: string) => boolean>(\r\n (value) => typeof value === \"function\",\r\n \"analyzeWorkspace options.includeClass must be a function when provided.\"\r\n )\r\n .optional(),\r\n})\r\n\r\nexport const ClassToCssOptionsSchema = z.object({\r\n prefix: z\r\n .union([z.string(), z.null()], {\r\n error: \"classToCss options.prefix must be a string or null when provided.\",\r\n })\r\n .optional(),\r\n strict: z\r\n .boolean({\r\n error: \"classToCss options.strict must be a boolean when provided.\",\r\n })\r\n .optional(),\r\n})\r\n\r\nexport const parseAnalyzerOptions = (options: unknown) =>\r\n parseWithSchema(AnalyzerOptionsSchema, options ?? {}, \"analyzeWorkspace options are invalid\")\r\n\r\nexport const parseNativeReport = (report: unknown) =>\r\n parseWithSchema(NativeReportSchema, report, \"Native analyzer report is invalid\")\r\n\r\nexport const parseNativeCssCompileResult = (result: unknown, className?: string) =>\r\n parseWithSchema(\r\n NativeCssCompileResultSchema,\r\n result,\r\n className\r\n ? `Native CSS compile result is invalid for class \"${className}\"`\r\n : \"Native CSS compile result is invalid\"\r\n )\r\n\r\nexport const parseClassToCssOptions = (options: unknown) =>\r\n parseWithSchema(ClassToCssOptionsSchema, options ?? {}, \"classToCss options are invalid\")\r\n","import fs from \"node:fs\"\r\nimport path from \"node:path\"\r\nimport { pathToFileURL } from \"node:url\"\r\n\r\nimport type {\r\n AnalyzerSemanticReport,\r\n ClassConflict,\r\n ClassUsage,\r\n LoadedTailwindConfig,\r\n TailwindConfigCacheEntry,\r\n} from \"./types\"\r\nimport { getNativeBinding } from \"./binding\"\r\nimport { debugLog, formatErrorMessage, isRecord, pathExists } from \"./utils\"\r\n\r\n\r\nconst SUPPORTED_TAILWIND_CONFIG_EXTENSIONS = new Set([\".ts\", \".js\", \".cjs\", \".mjs\"])\r\n\r\nconst tailwindConfigCache = new Map<string, TailwindConfigCacheEntry>()\r\n\r\nexport const splitVariantAndBase = (className: string): { variantKey: string; base: string } => {\r\n const parts = className.split(\":\")\r\n if (parts.length <= 1) return { variantKey: \"\", base: className }\r\n const base = parts.pop() ?? className\r\n return { variantKey: parts.join(\":\"), base }\r\n}\r\n\r\n/**\r\n * resolveConflictGroup — delegates ke Rust `resolve_conflict_group`.\r\n * Return: string | null — null jika tidak ada conflict group.\r\n */\r\nexport const resolveConflictGroup = async (base: string): Promise<string | null> => {\r\n const native = await getNativeBinding()\r\n if (!native?.resolveConflictGroup) {\r\n throw new Error(\"Native binding 'resolveConflictGroup' is required but not available.\")\r\n }\r\n const result = native.resolveConflictGroup(base) as string\r\n return result.length > 0 ? result : null\r\n}\r\n\r\nconst detectConflicts = async (\r\n usages: ClassUsage[]\r\n): Promise<{\r\n conflicts: ClassConflict[]\r\n conflictedClassNames: Set<string>\r\n}> => {\r\n // Native-first: Rust HashSet conflict detection (required)\r\n const native = await getNativeBinding()\r\n if (!native?.detectClassConflicts) {\r\n throw new Error(\"FATAL: Native binding 'detectClassConflicts' is required but not available.\")\r\n }\r\n const result = native.detectClassConflicts(JSON.stringify(usages.map((u) => ({ name: u.name, count: u.count }))))\r\n return {\r\n conflicts: result.conflicts.map((c) => ({\r\n className: c.group,\r\n variants: c.variantKey.length > 0 ? c.variantKey.split(\":\") : [],\r\n classes: c.classes,\r\n message: c.message,\r\n })),\r\n conflictedClassNames: new Set(result.conflictedClassNames),\r\n }\r\n}\r\n\r\nconst isSupportedTailwindConfigPath = (configPath: string): boolean => {\r\n return SUPPORTED_TAILWIND_CONFIG_EXTENSIONS.has(path.extname(configPath).toLowerCase())\r\n}\r\n\r\nconst resolveTailwindConfigPath = async (\r\n root: string,\r\n explicitPath?: string\r\n): Promise<string | null> => {\r\n if (explicitPath) {\r\n const resolved = path.resolve(root, explicitPath)\r\n if (!(await pathExists(resolved))) return null\r\n return resolved\r\n }\r\n\r\n const candidates = [\r\n \"tailwind.config.ts\",\r\n \"tailwind.config.js\",\r\n \"tailwind.config.cjs\",\r\n \"tailwind.config.mjs\",\r\n ]\r\n\r\n for (const candidate of candidates) {\r\n const fullPath = path.resolve(root, candidate)\r\n if (await pathExists(fullPath)) return fullPath\r\n }\r\n\r\n return null\r\n}\r\n\r\nconst collectSafelistFromConfig = (config: Record<string, unknown>): string[] => {\r\n const raw = config.safelist\r\n if (!Array.isArray(raw)) return []\r\n\r\n const out = new Set<string>()\r\n for (const entry of raw) {\r\n if (typeof entry === \"string\" && entry.length > 0) {\r\n out.add(entry)\r\n continue\r\n }\r\n if (!entry || typeof entry !== \"object\") continue\r\n const pattern = (entry as Record<string, unknown>).pattern\r\n if (typeof pattern === \"string\" && pattern.length > 0) {\r\n out.add(pattern)\r\n }\r\n }\r\n\r\n return Array.from(out)\r\n}\r\n\r\nconst collectCustomUtilities = (config: Record<string, unknown>): Set<string> => {\r\n const out = new Set<string>()\r\n const theme = config.theme\r\n if (!theme || typeof theme !== \"object\") return out\r\n\r\n const extend = (theme as Record<string, unknown>).extend\r\n if (!extend || typeof extend !== \"object\") return out\r\n\r\n for (const [section, value] of Object.entries(extend as Record<string, unknown>)) {\r\n if (!value || typeof value !== \"object\" || Array.isArray(value)) continue\r\n for (const key of Object.keys(value as Record<string, unknown>)) {\r\n out.add(`${section}-${key}`)\r\n if (section === \"colors\") {\r\n out.add(`bg-${key}`)\r\n out.add(`text-${key}`)\r\n out.add(`border-${key}`)\r\n } else if (section === \"spacing\") {\r\n out.add(`p-${key}`)\r\n out.add(`m-${key}`)\r\n out.add(`gap-${key}`)\r\n out.add(`w-${key}`)\r\n out.add(`h-${key}`)\r\n } else if (section === \"fontSize\") {\r\n out.add(`text-${key}`)\r\n } else if (section === \"borderRadius\") {\r\n out.add(`rounded-${key}`)\r\n } else if (section === \"boxShadow\") {\r\n out.add(`shadow-${key}`)\r\n }\r\n }\r\n }\r\n\r\n return out\r\n}\r\n\r\nconst collectSafelistFromSource = async (configPath: string): Promise<string[]> => {\r\n const source = await fs.promises.readFile(configPath, \"utf8\")\r\n\r\n // Gunakan native AST parser untuk ekstrak string literals dari config\r\n // Lebih akurat dari regex — handle template literals, multiline, nested quotes\r\n const { extractClassesNative } = await import(\"@tailwind-styled/scanner\")\r\n const allTokens = extractClassesNative(source)\r\n\r\n // Filter hanya token yang berasal dari safelist block\r\n // Native parse sudah return semua string value — kita cek apakah safelist array ada di source\r\n const hasSafelist = source.includes(\"safelist\")\r\n if (!hasSafelist) return []\r\n\r\n // Ambil baris-baris safelist dari source untuk batasi scope\r\n const safelistMatch = source.match(/safelist\\s*:\\s*\\[([\\s\\S]*?)\\]/m)?.[1]\r\n if (!safelistMatch) return []\r\n\r\n // Cross-reference: hanya return token yang muncul di dalam safelist block\r\n const safelistSet = new Set<string>()\r\n for (const token of safelistMatch.matchAll(/[\"'`]([^\"'`]+)[\"'`]/g)) {\r\n const value = token[1].trim()\r\n if (value.length > 0) safelistSet.add(value)\r\n }\r\n\r\n // Intersect dengan native extracted tokens untuk validasi\r\n return allTokens.filter((t: string) => safelistSet.has(t))\r\n}\r\n\r\nconst loadTailwindConfig = async (\r\n root: string,\r\n semanticOption?: { tailwindConfigPath?: string }\r\n): Promise<LoadedTailwindConfig | null> => {\r\n const startMs = Date.now()\r\n const configPath = await resolveTailwindConfigPath(root, semanticOption?.tailwindConfigPath)\r\n if (!configPath) return null\r\n\r\n if (!isSupportedTailwindConfigPath(configPath)) {\r\n return {\r\n path: configPath,\r\n loaded: false,\r\n warning: `Unsupported Tailwind config extension at \"${configPath}\". Supported extensions: .ts, .js, .cjs, .mjs.`,\r\n safelist: new Set<string>(),\r\n customUtilities: new Set<string>(),\r\n }\r\n }\r\n\r\n const configStat = await fs.promises.stat(configPath).catch(() => null)\r\n if (configStat) {\r\n const cached = tailwindConfigCache.get(configPath)\r\n if (cached && cached.mtimeMs === configStat.mtimeMs && cached.size === configStat.size) {\r\n debugLog(\r\n `tailwind config cache hit: ${configPath} (${cached.config.safelist.size} safelist entries)`\r\n )\r\n return cached.config\r\n }\r\n }\r\n\r\n const result = await (async (): Promise<{\r\n config: Record<string, unknown> | null\r\n warning: string | undefined\r\n }> => {\r\n try {\r\n const cacheBustToken = Math.trunc(configStat?.mtimeMs ?? Date.now())\r\n const imported = await import(`${pathToFileURL(configPath).href}?tws_mtime=${cacheBustToken}`)\r\n const candidate = (imported.default ?? imported) as unknown\r\n if (isRecord(candidate)) {\r\n return { config: candidate, warning: undefined }\r\n } else if (typeof candidate === \"function\") {\r\n const evaluated = candidate()\r\n if (isRecord(evaluated)) {\r\n return { config: evaluated, warning: undefined }\r\n }\r\n return { config: null, warning: \"Tailwind config export function must return an object.\" }\r\n }\r\n return {\r\n config: null,\r\n warning: \"Tailwind config export must be an object or a function returning an object.\",\r\n }\r\n } catch (error) {\r\n return { config: null, warning: formatErrorMessage(error) }\r\n }\r\n })()\r\n\r\n const { config, warning } = result\r\n\r\n const safelist = new Set<string>()\r\n const customUtilities = new Set<string>()\r\n\r\n if (config) {\r\n for (const item of collectSafelistFromConfig(config)) safelist.add(item)\r\n for (const item of collectCustomUtilities(config)) customUtilities.add(item)\r\n }\r\n\r\n if (safelist.size === 0) {\r\n try {\r\n for (const item of await collectSafelistFromSource(configPath)) safelist.add(item)\r\n } catch (error) {\r\n debugLog(\r\n `failed to parse safelist from source at \"${configPath}\": ${formatErrorMessage(error)}`\r\n )\r\n // keep empty if source parsing fails\r\n }\r\n }\r\n\r\n const loaded = {\r\n path: configPath,\r\n loaded: config !== null,\r\n warning,\r\n safelist,\r\n customUtilities,\r\n }\r\n\r\n if (configStat) {\r\n tailwindConfigCache.set(configPath, {\r\n mtimeMs: configStat.mtimeMs,\r\n size: configStat.size,\r\n config: loaded,\r\n })\r\n }\r\n\r\n debugLog(\r\n `tailwind config loaded from \"${configPath}\" in ${Date.now() - startMs}ms ` +\r\n `(loaded=${loaded.loaded}, safelist=${loaded.safelist.size}, custom=${loaded.customUtilities.size})`\r\n )\r\n\r\n return loaded\r\n }\r\n\r\nexport const utilityPrefix = (baseClass: string): string => {\r\n const normalized = baseClass.startsWith(\"-\") ? baseClass.slice(1) : baseClass\r\n if (normalized.includes(\"[\") && normalized.includes(\"]\")) return \"arbitrary\"\r\n if (normalized.startsWith(\"min-w-\")) return \"min-w\"\r\n if (normalized.startsWith(\"max-w-\")) return \"max-w\"\r\n if (normalized.startsWith(\"min-h-\")) return \"min-h\"\r\n if (normalized.startsWith(\"max-h-\")) return \"max-h\"\r\n if (normalized.startsWith(\"space-x-\")) return \"space-x\"\r\n if (normalized.startsWith(\"space-y-\")) return \"space-y\"\r\n if (normalized.startsWith(\"inline-\")) return \"inline\"\r\n if (normalized.startsWith(\"border-\")) return \"border\"\r\n if (normalized.startsWith(\"text-\")) return \"text\"\r\n if (normalized.startsWith(\"bg-\")) return \"bg\"\r\n if (normalized.startsWith(\"rounded\")) return \"rounded\"\r\n if (normalized.startsWith(\"shadow\")) return \"shadow\"\r\n const hyphen = normalized.indexOf(\"-\")\r\n if (hyphen < 0) return normalized\r\n return normalized.slice(0, hyphen)\r\n}\r\n\r\nexport const buildSemanticReport = async (\r\n usages: ClassUsage[],\r\n root: string,\r\n semanticOption?: { tailwindConfigPath?: string }\r\n): Promise<AnalyzerSemanticReport> => {\r\n const loadedConfig = await loadTailwindConfig(root, semanticOption)\r\n const safelist = loadedConfig?.safelist ?? new Set<string>()\r\n const customUtilities = loadedConfig?.customUtilities ?? new Set<string>()\r\n const usageNames = new Set(usages.map((usage) => usage.name))\r\n\r\n const unusedClasses: ClassUsage[] = Array.from(safelist)\r\n .filter((className) => !usageNames.has(className))\r\n .sort()\r\n .map((className) => ({ name: className, count: 0, isUnused: true }))\r\n\r\n // ── Unknown classes — native-first (required) ─────────────────────────────\r\n const native = await getNativeBinding()\r\n if (!native?.classifyKnownClasses) {\r\n throw new Error(\"FATAL: Native binding 'classifyKnownClasses' is required but not available.\")\r\n }\r\n const classNames = usages.map((u) => u.name)\r\n const results = native.classifyKnownClasses(\r\n classNames,\r\n Array.from(safelist),\r\n Array.from(customUtilities)\r\n )\r\n const unknownSet = new Set(\r\n results\r\n .filter((r: { className: string; isKnown: boolean }) => !r.isKnown)\r\n .map((r: { className: string; isKnown: boolean }) => r.className)\r\n )\r\n const unknownClasses = usages\r\n .filter((usage) => unknownSet.has(usage.name))\r\n .map((usage) => ({ ...usage, isUnused: true }))\r\n\r\n const { conflicts } = await detectConflicts(usages)\r\n\r\n return {\r\n unusedClasses,\r\n unknownClasses,\r\n conflicts,\r\n ...(loadedConfig\r\n ? {\r\n tailwindConfig: {\r\n path: loadedConfig.path,\r\n loaded: loadedConfig.loaded,\r\n safelistCount: loadedConfig.safelist.size,\r\n customUtilityCount: loadedConfig.customUtilities.size,\r\n ...(loadedConfig.warning ? { warning: loadedConfig.warning } : {}),\r\n },\r\n }\r\n : {}),\r\n }\r\n}","import fs from \"node:fs\"\r\nimport path from \"node:path\"\r\nimport { pathToFileURL } from \"node:url\"\r\nimport {\r\n type AnalyzerReport,\r\n type AnalyzerSemanticReport,\r\n analyzeWorkspace as runWorkspaceAnalysis,\r\n} from \"@tailwind-styled/analyzer\"\r\nimport { generateCssForClasses, mergeClassesStatic } from \"@tailwind-styled/compiler/internal\"\r\nimport {\r\n type ScanWorkspaceOptions,\r\n type ScanWorkspaceResult,\r\n scanWorkspaceAsync,\r\n} from \"@tailwind-styled/scanner\"\r\nimport { createLogger, TwError, wrapUnknownError } from \"@tailwind-styled/shared\"\r\n\r\nimport { applyIncrementalChange } from \"./incremental\"\r\nimport { ImpactTracker } from \"./impactTracker\"\r\nimport { EngineMetricsCollector, type EngineMetricsSnapshot } from \"./metrics\"\r\nimport { writeMetrics } from \"./metricsWriter\"\r\nimport {\r\n type EnginePlugin,\r\n runAfterBuild,\r\n runAfterScan,\r\n runAfterWatch,\r\n runBeforeBuild,\r\n runBeforeScan,\r\n runBeforeWatch,\r\n runOnError,\r\n runTransformClasses,\r\n} from \"./plugin-api\"\r\nimport { parseEngineOptions, parseEngineWatchOptions } from \"./schemas\"\r\nimport { type WorkspaceWatcher, watchWorkspace } from \"./watch\"\r\n\r\nconst DEFAULT_LARGE_FILE_THRESHOLD_BYTES = 10 * 1024 * 1024\r\nconst DEFAULT_FLUSH_DEBOUNCE_MS = 100\r\nconst DEFAULT_MAX_EVENTS_PER_FLUSH = 100\r\nconst _DEFAULT_WATCH_EVENT_TYPE: EngineBuildWatchEventType = \"change\"\r\n\r\nconst configState = {\r\n cachedTailwindConfig: undefined as Record<string, unknown> | undefined,\r\n tailwindConfigLoaded: false,\r\n setLoaded(config: Record<string, unknown> | undefined) {\r\n this.cachedTailwindConfig = config\r\n this.tailwindConfigLoaded = true\r\n },\r\n getConfig() {\r\n return this.cachedTailwindConfig\r\n },\r\n isLoaded() {\r\n return this.tailwindConfigLoaded\r\n },\r\n}\r\nconst log = createLogger(\"engine\")\r\n\r\nexport interface EngineOptions {\r\n root?: string\r\n scanner?: ScanWorkspaceOptions\r\n compileCss?: boolean\r\n tailwindConfigPath?: string\r\n plugins?: EnginePlugin[]\r\n /** Enable analyzer integration - provides semantic report (unused classes, conflicts). Default: false */\r\n analyze?: boolean\r\n}\r\n\r\nexport interface EngineWatchOptions {\r\n debounceMs?: number\r\n maxEventsPerFlush?: number\r\n largeFileThreshold?: number\r\n}\r\n\r\nexport interface BuildResult {\r\n scan: ScanWorkspaceResult\r\n mergedClassList: string\r\n css: string\r\n /** Analyzer semantic report - present when analyze: true in options */\r\n analysis?: {\r\n unusedClasses: string[]\r\n classConflicts: Array<{\r\n className: string\r\n files: string[]\r\n classes?: string[]\r\n message?: string\r\n }>\r\n classUsage: Record<string, number>\r\n semantic?: AnalyzerSemanticReport\r\n report: AnalyzerReport\r\n }\r\n}\r\n\r\ninterface BuildExecutionMetrics {\r\n analyzeMs: number\r\n compileMs: number\r\n}\r\n\r\ninterface BuildExecution {\r\n result: BuildResult\r\n metrics: BuildExecutionMetrics\r\n}\r\n\r\ntype EngineBuildWatchEventType = \"initial\" | \"change\" | \"unlink\" | \"full-rescan\"\r\n\r\nexport type EngineWatchEvent =\r\n | {\r\n type: EngineBuildWatchEventType\r\n filePath?: string\r\n result: BuildResult\r\n metrics?: EngineMetricsSnapshot\r\n }\r\n | {\r\n type: \"error\"\r\n filePath?: string\r\n error: string\r\n metrics?: EngineMetricsSnapshot\r\n }\r\n\r\nexport interface TailwindStyledEngine {\r\n scan(): Promise<ScanWorkspaceResult>\r\n scanWorkspace(): Promise<ScanWorkspaceResult>\r\n analyzeWorkspace(): Promise<Awaited<ReturnType<typeof runWorkspaceAnalysis>>>\r\n generateSafelist(): Promise<string[]>\r\n build(): Promise<BuildResult>\r\n watch(\r\n onEvent: (event: EngineWatchEvent) => void,\r\n options?: EngineWatchOptions\r\n ): Promise<{ close(): void }>\r\n}\r\n\r\nasync function loadTailwindConfigFromPath(\r\n root: string,\r\n tailwindConfigPath?: string\r\n): Promise<Record<string, unknown> | undefined> {\r\n if (!tailwindConfigPath) return undefined\r\n\r\n const configPath = path.resolve(root, tailwindConfigPath)\r\n if (!fs.existsSync(configPath)) {\r\n throw TwError.fromIo(\"CONFIG_NOT_FOUND\", `tailwindConfigPath not found: ${configPath}`)\r\n }\r\n\r\n const imported = await import(pathToFileURL(configPath).href)\r\n const config = (imported.default ?? imported) as Record<string, unknown>\r\n return config\r\n}\r\n\r\nasync function tryRunAnalyzer(root: string, options: EngineOptions) {\r\n try {\r\n const report = await runWorkspaceAnalysis(root, {\r\n scanner: options.scanner,\r\n semantic: true,\r\n })\r\n\r\n const classUsage: Record<string, number> = {}\r\n for (const usage of report.classStats.all) {\r\n classUsage[usage.name] = usage.count\r\n }\r\n\r\n const semantic = report.semantic\r\n return {\r\n unusedClasses: semantic?.unusedClasses.map((usage) => usage.name) ?? [],\r\n classConflicts:\r\n semantic?.conflicts.map((conflict) => ({\r\n className: conflict.className,\r\n files: [],\r\n classes: [...conflict.classes],\r\n message: conflict.message,\r\n })) ?? [],\r\n classUsage,\r\n semantic,\r\n report,\r\n }\r\n } catch (e) {\r\n log.warn(\"Analyzer not available:\", String(e))\r\n return undefined\r\n }\r\n}\r\n\r\nasync function buildFromScan(\r\n scan: ScanWorkspaceResult,\r\n root: string,\r\n options: EngineOptions,\r\n tailwindConfig?: Record<string, unknown>\r\n): Promise<BuildExecution> {\r\n const plugins = options.plugins ?? []\r\n const context = { root, timestamp: Date.now() }\r\n\r\n await runBeforeBuild(plugins, scan, context)\r\n const compileStartedAt = Date.now()\r\n const transformedClasses = await runTransformClasses(plugins, scan.uniqueClasses, context)\r\n const mergedClassList = mergeClassesStatic(transformedClasses.join(\" \"))\r\n\r\n const css =\r\n options.compileCss !== false && mergedClassList.length > 0\r\n ? await generateCssForClasses(\r\n mergedClassList.split(/\\s+/).filter(Boolean),\r\n tailwindConfig,\r\n root\r\n )\r\n : \"\"\r\n\r\n const compileMs = Date.now() - compileStartedAt\r\n const analyzeStartedAt = Date.now()\r\n const analysis = options.analyze ? await tryRunAnalyzer(root, options) : undefined\r\n const analyzeMs = options.analyze ? Date.now() - analyzeStartedAt : 0\r\n\r\n const result: BuildResult = {\r\n scan,\r\n mergedClassList,\r\n css,\r\n analysis,\r\n }\r\n\r\n return {\r\n result: await runAfterBuild(plugins, result, context),\r\n metrics: {\r\n analyzeMs,\r\n compileMs,\r\n },\r\n }\r\n}\r\n\r\nfunction countWorkspacePackages(root: string): number {\r\n const packagesDir = path.join(root, \"packages\")\r\n if (!fs.existsSync(packagesDir)) return 0\r\n\r\n try {\r\n return fs\r\n .readdirSync(packagesDir, { withFileTypes: true })\r\n .filter(\r\n (entry) =>\r\n entry.isDirectory() && fs.existsSync(path.join(packagesDir, entry.name, \"package.json\"))\r\n ).length\r\n } catch (err) {\r\n log.debug(`countWorkspacePackages: ${err instanceof Error ? err.message : String(err)}`)\r\n return 0\r\n }\r\n}\r\n\r\nfunction writeDashboardMetrics(\r\n root: string,\r\n mode: \"build\" | \"watch\" | \"error\",\r\n result: BuildResult | null,\r\n metrics: Partial<{\r\n buildMs: number\r\n scanMs: number\r\n analyzeMs: number\r\n compileMs: number\r\n lastEventType: string\r\n error: string\r\n }> &\r\n Partial<EngineMetricsSnapshot>\r\n): void {\r\n writeMetrics(\r\n {\r\n mode,\r\n buildMs: metrics.buildMs,\r\n scanMs: metrics.scanMs,\r\n analyzeMs: metrics.analyzeMs,\r\n compileMs: metrics.compileMs,\r\n classCount: result?.scan.uniqueClasses.length ?? 0,\r\n fileCount: result?.scan.totalFiles ?? 0,\r\n cssBytes: result ? Buffer.byteLength(result.css, \"utf8\") : 0,\r\n packageCount: countWorkspacePackages(root),\r\n error: metrics.error,\r\n lastEventType: metrics.lastEventType,\r\n eventsReceived: metrics.eventsReceived,\r\n eventsProcessed: metrics.eventsProcessed,\r\n batchesProcessed: metrics.batchesProcessed,\r\n incrementalUpdates: metrics.incrementalUpdates,\r\n fullRescans: metrics.fullRescans,\r\n skippedLargeFiles: metrics.skippedLargeFiles,\r\n queueMaxSize: metrics.queueMaxSize,\r\n lastBuildMs: metrics.lastBuildMs,\r\n avgBuildMs: metrics.avgBuildMs,\r\n },\r\n root\r\n )\r\n}\r\n\r\nexport async function createEngine(rawOptions: EngineOptions = {}): Promise<TailwindStyledEngine> {\r\n // ── Boundary validation: validate options with Zod before entering domain logic ──\r\n const options = parseEngineOptions(rawOptions)\r\n\r\n const root = options.root ?? process.cwd()\r\n const resolvedRoot = path.resolve(root)\r\n\r\n const plugins = (rawOptions as EngineOptions).plugins ?? []\r\n\r\n const getTailwindConfig = async (): Promise<Record<string, unknown> | undefined> => {\r\n if (configState.isLoaded()) return configState.getConfig()\r\n const config = await loadTailwindConfigFromPath(resolvedRoot, options.tailwindConfigPath)\r\n configState.setLoaded(config)\r\n return config\r\n }\r\n\r\n const reportEngineError = async (error: unknown): Promise<Error> => {\r\n const normalized = error instanceof TwError\r\n ? error\r\n : wrapUnknownError(\"compile\", \"ENGINE_ERROR\", error)\r\n const context = { root: resolvedRoot, timestamp: Date.now() }\r\n try {\r\n await runOnError(plugins, normalized, context)\r\n } catch (pluginError) {\r\n log.error(\r\n \"plugin onError hook failed:\",\r\n pluginError instanceof Error ? pluginError.message : String(pluginError)\r\n )\r\n }\r\n log.error(normalized.message)\r\n return normalized\r\n }\r\n\r\n const doScan = async (): Promise<ScanWorkspaceResult> => {\r\n try {\r\n const context = { root: resolvedRoot, timestamp: Date.now() }\r\n await runBeforeScan(plugins, context)\r\n const scan = await scanWorkspaceAsync(resolvedRoot, options.scanner)\r\n return await runAfterScan(plugins, scan, context)\r\n } catch (error) {\r\n throw await reportEngineError(error)\r\n }\r\n }\r\n\r\n const doAnalyze = async (): Promise<Awaited<ReturnType<typeof runWorkspaceAnalysis>>> => {\r\n try {\r\n return await runWorkspaceAnalysis(resolvedRoot, {\r\n scanner: options.scanner,\r\n })\r\n } catch (error) {\r\n throw await reportEngineError(error)\r\n }\r\n }\r\n\r\n const doGenerateSafelist = async (): Promise<string[]> => {\r\n const scan = await doScan()\r\n return [...scan.uniqueClasses]\r\n }\r\n\r\n return {\r\n scan: doScan,\r\n scanWorkspace: doScan,\r\n analyzeWorkspace: doAnalyze,\r\n generateSafelist: doGenerateSafelist,\r\n async build(): Promise<BuildResult> {\r\n const scanStartedAt = Date.now()\r\n const scan = await doScan()\r\n const scanMs = Date.now() - scanStartedAt\r\n try {\r\n const buildStartedAt = Date.now()\r\n const execution = await buildFromScan(\r\n scan,\r\n resolvedRoot,\r\n options,\r\n await getTailwindConfig()\r\n )\r\n const buildMs = Date.now() - buildStartedAt\r\n writeDashboardMetrics(resolvedRoot, \"build\", execution.result, {\r\n buildMs,\r\n scanMs,\r\n analyzeMs: execution.metrics.analyzeMs,\r\n compileMs: execution.metrics.compileMs,\r\n })\r\n return execution.result\r\n } catch (error) {\r\n const normalized = await reportEngineError(error)\r\n writeDashboardMetrics(resolvedRoot, \"error\", null, {\r\n scanMs,\r\n error: normalized.message,\r\n })\r\n throw normalized\r\n }\r\n },\r\n async watch(\r\n onEvent: (event: EngineWatchEvent) => void,\r\n rawWatchOptions: EngineWatchOptions = {}\r\n ): Promise<{ close(): void }> {\r\n // ── Boundary validation: validate watch options with Zod ──\r\n const watchOptions = parseEngineWatchOptions(rawWatchOptions)\r\n\r\n const flushDebounceMs = watchOptions.debounceMs ?? DEFAULT_FLUSH_DEBOUNCE_MS\r\n const maxEventsPerFlush = watchOptions.maxEventsPerFlush ?? DEFAULT_MAX_EVENTS_PER_FLUSH\r\n const largeFileThreshold =\r\n watchOptions.largeFileThreshold ?? DEFAULT_LARGE_FILE_THRESHOLD_BYTES\r\n\r\n const tailwindConfig = await getTailwindConfig()\r\n const watchContext = { root: resolvedRoot, timestamp: Date.now() }\r\n await runBeforeWatch(plugins, watchContext)\r\n\r\n const initialScanStartedAt = Date.now()\r\n const initialScan = await doScan()\r\n const initialScanMs = Date.now() - initialScanStartedAt\r\n\r\n const watchState = {\r\n currentScan: initialScan,\r\n timer: null as NodeJS.Timeout | null,\r\n setTimer(t: NodeJS.Timeout | null) {\r\n this.timer = t\r\n },\r\n clearTimer() {\r\n if (this.timer) {\r\n clearTimeout(this.timer)\r\n this.timer = null\r\n }\r\n },\r\n }\r\n\r\n try {\r\n const initialBuildStartedAt = Date.now()\r\n const execution = await buildFromScan(\r\n watchState.currentScan,\r\n resolvedRoot,\r\n options,\r\n tailwindConfig\r\n )\r\n const initialBuildMs = Date.now() - initialBuildStartedAt\r\n writeDashboardMetrics(resolvedRoot, \"watch\", execution.result, {\r\n buildMs: initialBuildMs,\r\n scanMs: initialScanMs,\r\n analyzeMs: execution.metrics.analyzeMs,\r\n compileMs: execution.metrics.compileMs,\r\n lastEventType: \"initial\",\r\n })\r\n onEvent({\r\n type: \"initial\",\r\n result: execution.result,\r\n })\r\n } catch (error) {\r\n const normalized = await reportEngineError(error)\r\n writeDashboardMetrics(resolvedRoot, \"error\", null, {\r\n scanMs: initialScanMs,\r\n error: normalized.message,\r\n lastEventType: \"initial\",\r\n })\r\n onEvent({ type: \"error\", error: normalized.message })\r\n throw normalized\r\n }\r\n\r\n const queue: Array<{ type: \"change\" | \"unlink\"; filePath: string }> = []\r\n const metrics = new EngineMetricsCollector()\r\n\r\n const scheduleFlush = (): void => {\r\n if (watchState.timer) return\r\n watchState.setTimer(\r\n setTimeout(() => {\r\n watchState.clearTimer()\r\n void flushBatch()\r\n }, flushDebounceMs)\r\n )\r\n }\r\n\r\n const shouldForceFullRescan = (event: {\r\n type: \"change\" | \"unlink\"\r\n filePath: string\r\n }): boolean => {\r\n if (event.type === \"unlink\") return false\r\n try {\r\n const stat = fs.statSync(event.filePath)\r\n if (stat.size > largeFileThreshold) {\r\n metrics.markSkippedLargeFile()\r\n return true\r\n }\r\n } catch (statErr) {\r\n // File mungkin sudah dihapus antara event dan stat — non-fatal\r\n log.debug(`stat failed for ${event.filePath}: ${statErr instanceof Error ? statErr.message : String(statErr)}`)\r\n return false\r\n }\r\n return false\r\n }\r\n\r\n const flushBatch = async (): Promise<void> => {\r\n if (queue.length === 0) return\r\n\r\n const batch = queue.splice(0, maxEventsPerFlush)\r\n metrics.markBatchProcessed(batch.length)\r\n\r\n const forceRescan = batch.some((event) => shouldForceFullRescan(event))\r\n const lastEvent = batch[batch.length - 1]\r\n\r\n const eventTypeState = { emittedType: lastEvent.type as EngineBuildWatchEventType }\r\n const scanStartedAt = Date.now()\r\n\r\n try {\r\n if (forceRescan) {\r\n watchState.currentScan = await doScan()\r\n metrics.markFullRescan()\r\n eventTypeState.emittedType = \"full-rescan\"\r\n } else {\r\n for (const event of batch) {\r\n watchState.currentScan = applyIncrementalChange(\r\n watchState.currentScan,\r\n event.filePath,\r\n event.type,\r\n options.scanner\r\n )\r\n metrics.markIncremental()\r\n }\r\n }\r\n } catch (error) {\r\n const normalized = await reportEngineError(error)\r\n log.warn(\"incremental path failed, forcing full rescan:\", normalized.message)\r\n watchState.currentScan = await doScan()\r\n metrics.markFullRescan()\r\n eventTypeState.emittedType = \"full-rescan\"\r\n }\r\n\r\n const scanMs = Date.now() - scanStartedAt\r\n\r\n try {\r\n const started = Date.now()\r\n const execution = await buildFromScan(\r\n watchState.currentScan,\r\n resolvedRoot,\r\n options,\r\n tailwindConfig\r\n )\r\n const buildMs = Date.now() - started\r\n metrics.markBuildDuration(buildMs)\r\n const snapshot = metrics.snapshot()\r\n writeDashboardMetrics(resolvedRoot, \"watch\", execution.result, {\r\n scanMs,\r\n buildMs,\r\n analyzeMs: execution.metrics.analyzeMs,\r\n compileMs: execution.metrics.compileMs,\r\n lastEventType: eventTypeState.emittedType,\r\n ...snapshot,\r\n })\r\n\r\n onEvent({\r\n type: eventTypeState.emittedType,\r\n filePath: lastEvent.filePath,\r\n result: execution.result,\r\n metrics: snapshot,\r\n })\r\n } catch (error) {\r\n const normalized = await reportEngineError(error)\r\n const snapshot = metrics.snapshot()\r\n writeDashboardMetrics(resolvedRoot, \"error\", null, {\r\n scanMs,\r\n error: normalized.message,\r\n lastEventType: eventTypeState.emittedType,\r\n ...snapshot,\r\n })\r\n onEvent({\r\n type: \"error\",\r\n filePath: lastEvent.filePath,\r\n error: normalized.message,\r\n metrics: snapshot,\r\n })\r\n }\r\n\r\n if (queue.length > 0) scheduleFlush()\r\n }\r\n\r\n const watcher: WorkspaceWatcher = watchWorkspace(\r\n resolvedRoot,\r\n (event) => {\r\n queue.push(event)\r\n metrics.markEventReceived(queue.length)\r\n scheduleFlush()\r\n },\r\n {\r\n ignoreDirectories: options.scanner?.ignoreDirectories,\r\n debounceMs: flushDebounceMs,\r\n onError: (error, directory) => {\r\n void reportEngineError(error)\r\n onEvent({\r\n type: \"error\",\r\n filePath: directory,\r\n error: error.message,\r\n metrics: metrics.snapshot(),\r\n })\r\n },\r\n }\r\n )\r\n\r\n return {\r\n async close() {\r\n watchState.clearTimer()\r\n watcher.close()\r\n await runAfterWatch(plugins, watchContext)\r\n },\r\n }\r\n },\r\n }\r\n}\r\n\r\n// Re-export internal API (including IR types)\r\nexport * from \"./internal\"\r\n// Re-export schemas\r\nexport {\r\n type BuildResultInput,\r\n BuildResultSchema,\r\n type EngineOptionsInput,\r\n EngineOptionsSchema,\r\n type EngineWatchOptionsInput,\r\n EngineWatchOptionsSchema,\r\n parseEngineOptions,\r\n parseEngineWatchOptions,\r\n} from \"./schemas\"\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Standalone facade functions — tidak perlu createEngine()\r\n// Berguna untuk CLI, adapter, dan tooling yang tidak butuh watch/lifecycle penuh\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Scan workspace dan return hasil scan.\r\n * Facade tipis di atas scanWorkspaceAsync dari @tailwind-styled/scanner.\r\n *\r\n * @example\r\n * const result = await scanWorkspace({ root: \"./src\" })\r\n * console.log(result.uniqueClasses)\r\n */\r\nexport async function scanWorkspace(\r\n opts: { root?: string; extensions?: string[]; ignoreDirectories?: string[] } = {}\r\n): Promise<ScanWorkspaceResult> {\r\n const root = path.resolve(opts.root ?? process.cwd())\r\n return scanWorkspaceAsync(root, {\r\n includeExtensions: opts.extensions,\r\n ignoreDirectories: opts.ignoreDirectories,\r\n })\r\n}\r\n\r\n/**\r\n * Analyze workspace — scan + analyze classes.\r\n * Facade di atas runWorkspaceAnalysis.\r\n *\r\n * @example\r\n * const report = await analyzeWorkspace({ root: \"./src\" })\r\n * console.log(report.topClasses)\r\n */\r\nexport async function analyzeWorkspace(\r\n opts: { root?: string; top?: number } = {}\r\n): Promise<Awaited<ReturnType<typeof runWorkspaceAnalysis>>> {\r\n const root = path.resolve(opts.root ?? process.cwd())\r\n return runWorkspaceAnalysis(root, {\r\n classStats: { top: opts.top ?? 20 },\r\n })\r\n}\r\n\r\n/**\r\n * Generate safelist dari scan result.\r\n * Berguna untuk Tailwind config safelist generation.\r\n *\r\n * @example\r\n * const safelist = await generateSafelist({ root: \"./src\" })\r\n * // Pakai di tailwind.config.ts: { safelist }\r\n */\r\nexport async function generateSafelist(\r\n opts: { root?: string } = {}\r\n): Promise<string[]> {\r\n const scan = await scanWorkspace(opts)\r\n return scan.uniqueClasses\r\n}\r\n\r\n/**\r\n * Build CSS dari scan result.\r\n * One-shot build tanpa watch mode.\r\n *\r\n * @example\r\n * const result = await build({ root: \"./src\" })\r\n * fs.writeFileSync(\"dist/tailwind.css\", result.css)\r\n */\r\nexport async function build(\r\n opts: EngineOptions = {}\r\n): Promise<{ css: string; classes: string[]; totalFiles: number }> {\r\n const engine = await createEngine(opts)\r\n const result = await engine.build()\r\n return {\r\n css: result.css,\r\n classes: result.mergedClassList.split(/\\s+/).filter(Boolean),\r\n totalFiles: result.scan.totalFiles,\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Shared trace/inspection surface — reusable across CLI, devtools, dashboard\r\n// (dari monorepo checklist: \"Tambahkan mode trace yang reusable\")\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type { TraceResult, RuleTrace, ConflictTrace, VariantTrace, FinalStyleProperty } from \"./trace\"\r\nexport { trace, buildProvenanceChain } from \"./trace\"\r\n\r\n/**\r\n * High-level trace API — satu entry point untuk semua tooling.\r\n *\r\n * Dipakai oleh:\r\n * - CLI: `tw trace <class>`\r\n * - DevTools: TracePanel fetch\r\n * - Dashboard: trace endpoint\r\n *\r\n * @example\r\n * const result = await traceClass(\"flex\", scanResult, cssString)\r\n * console.log(result.finalStyle) // [{ property: \"display\", value: \"flex\" }]\r\n */\r\nexport async function traceClass(\r\n className: string,\r\n scanResult: ScanWorkspaceResult,\r\n css: string\r\n): Promise<import(\"./trace\").TraceResult | null> {\r\n if (!className || !css) return null\r\n\r\n try {\r\n const { parseCssToIr } = await import(\"./cssToIr\")\r\n const { CascadeResolver } = await import(\"./resolver\")\r\n const { trace } = await import(\"./trace\")\r\n\r\n const { rules, classToRuleIds } = parseCssToIr(css)\r\n const resolver = new CascadeResolver()\r\n resolver.addRules(rules)\r\n for (const [registeredClassName, ruleIds] of classToRuleIds) {\r\n resolver.registerClass(registeredClassName, ruleIds)\r\n }\r\n\r\n return trace(className, resolver)\r\n } catch (traceErr) {\r\n log.debug(`traceClass(\"${className}\"): ${traceErr instanceof Error ? traceErr.message : String(traceErr)}`)\r\n return null\r\n }\r\n}\r\n\r\n/**\r\n * Trace multiple classes at once — for batch inspection.\r\n */\r\nexport async function traceClasses(\r\n classNames: string[],\r\n scanResult: ScanWorkspaceResult,\r\n css: string\r\n): Promise<Map<string, import(\"./trace\").TraceResult>> {\r\n const results = new Map<string, import(\"./trace\").TraceResult>()\r\n\r\n for (const cls of classNames) {\r\n const result = await traceClass(cls, scanResult, css)\r\n if (result) results.set(cls, result)\r\n }\r\n\r\n return results\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Surface Inspection — consistent API untuk CLI, devtools, dashboard\r\n// (dari monorepo checklist: \"Tambahkan surface inspection yang konsisten\")\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface InspectionReport {\r\n className: string\r\n /** CSS rules yang dihasilkan */\r\n css: string\r\n /** Properties yang di-set */\r\n properties: Array<{ property: string; value: string }>\r\n /** Classes yang berkonflik dengan ini */\r\n conflicts: string[]\r\n /** Files yang menggunakan class ini */\r\n usedIn: string[]\r\n /** Risk level untuk removal */\r\n risk: \"low\" | \"medium\" | \"high\"\r\n /** Estimated bundle contribution */\r\n bundleBytes: number\r\n}\r\n\r\n/**\r\n * Inspect a single class — gabungan trace + impact + usage.\r\n * Reusable surface untuk CLI (`tw why`), DevTools panel, dashboard endpoint.\r\n *\r\n * @example\r\n * const report = await inspectClass(\"flex\", scanResult, cssString)\r\n * console.log(report.properties) // [{ property: \"display\", value: \"flex\" }]\r\n * console.log(report.usedIn) // [\"src/Button.tsx\", \"src/Card.tsx\"]\r\n * console.log(report.risk) // \"low\"\r\n */\r\nexport async function inspectClass(\r\n className: string,\r\n scanResult: ScanWorkspaceResult,\r\n css = \"\"\r\n): Promise<InspectionReport> {\r\n const normalizedClass = className.startsWith(\".\") ? className.slice(1) : className\r\n\r\n // Usage: files yang menggunakan class ini\r\n const usedIn = (scanResult.files ?? [])\r\n .filter(f => f.classes?.includes(normalizedClass))\r\n .map(f => f.file)\r\n const usedInLocations = usedIn.map((file) => ({ file, line: 1, column: 1 }))\r\n\r\n // Trace: get CSS properties\r\n const traceResult = await traceClass(normalizedClass, scanResult, css)\r\n const properties = traceResult?.finalStyle ?? []\r\n\r\n // Impact: risk level\r\n const tracker = new ImpactTracker()\r\n const dummyBundle = {\r\n className: normalizedClass,\r\n totalUsage: usedIn.length,\r\n files: usedInLocations,\r\n bundleSizeBytes: 0,\r\n variantChains: [],\r\n isDeadCode: usedIn.length === 0,\r\n dependencies: [],\r\n }\r\n const impact = tracker.calculateImpact(normalizedClass, dummyBundle, scanResult)\r\n\r\n return {\r\n className: normalizedClass,\r\n css,\r\n properties: properties.map(p => ({ property: p.property, value: p.value })),\r\n conflicts: [], // populated by trace conflicts if available\r\n usedIn,\r\n risk: impact.riskLevel,\r\n bundleBytes: impact.bundleSizeBytes,\r\n }\r\n}\r\n","import fs from \"node:fs\"\r\nimport path from \"node:path\"\r\n\r\nimport {\r\n isScannableFile,\r\n type ScanWorkspaceOptions,\r\n type ScanWorkspaceResult,\r\n scanFile,\r\n} from \"@tailwind-styled/scanner\"\r\nimport { createLogger } from \"@tailwind-styled/shared\"\r\n\r\nimport { getNativeEngineBinding } from \"./native-bridge\"\r\n\r\nconst DEFAULT_EXTENSIONS = [\".js\", \".jsx\", \".ts\", \".tsx\", \".mjs\", \".cjs\"]\r\nconst log = createLogger(\"engine:incremental\")\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Internal helpers — native-first, JS fallback\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Rebuild ScanWorkspaceResult dari Map file → entry.\r\n *\r\n * Native: satu pass Rust HashSet dedup + sort_unstable.\r\n * JS fallback: Array.from(new Set(...)) dengan multiple allocations.\r\n */\r\nfunction rebuildWorkspaceResult(\r\n byFile: Map<string, ScanWorkspaceResult[\"files\"][number]>\r\n): ScanWorkspaceResult {\r\n const files = Array.from(byFile.values())\r\n const native = getNativeEngineBinding()\r\n\r\n if (native?.rebuildWorkspaceResult) {\r\n const result = native.rebuildWorkspaceResult(files)\r\n return {\r\n files: result.files,\r\n totalFiles: result.totalFiles,\r\n uniqueClasses: result.uniqueClasses,\r\n }\r\n }\r\n\r\n throw new Error(\"FATAL: Native binding 'rebuildWorkspaceResult' is required but not available.\")\r\n}\r\n\r\n/**\r\n * Apply incremental class diff: (existing ∪ added) ∖ removed.\r\n *\r\n * Native: Rust HashSet O(n+m) tanpa GC pause.\r\n * JS fallback: JS Set dengan intermediate allocations.\r\n */\r\nfunction applyClassDiff(existing: string[], added: string[], removed: string[]): string[] {\r\n const native = getNativeEngineBinding()\r\n\r\n if (native?.applyClassDiff) {\r\n return native.applyClassDiff(existing, added, removed)\r\n }\r\n\r\n throw new Error(\"FATAL: Native binding 'applyClassDiff' is required but not available.\")\r\n}\r\n\r\n/**\r\n * Cek apakah dua class array berisi elemen identik (order-independent).\r\n *\r\n * Native: single-pass HashSet lookup O(n+m).\r\n * JS fallback: buat Set(b) lalu iterate a.\r\n */\r\nfunction areClassSetsEqual(a: string[], b: string[]): boolean {\r\n const native = getNativeEngineBinding()\r\n\r\n if (native?.areClassSetsEqual) {\r\n return native.areClassSetsEqual(a, b)\r\n }\r\n\r\n throw new Error(\"FATAL: Native binding 'areClassSetsEqual' is required but not available.\")\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Public API (tidak berubah dari sebelumnya)\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface WorkspaceDiff {\r\n addedClasses: string[]\r\n removedClasses: string[]\r\n changedFiles: string[]\r\n unchangedFiles: number\r\n}\r\n\r\n/**\r\n * Diff dua ScanWorkspaceResult menggunakan Rust computeIncrementalDiff.\r\n */\r\nexport function diffWorkspaceResults(\r\n previous: ScanWorkspaceResult,\r\n current: ScanWorkspaceResult\r\n): WorkspaceDiff {\r\n const native = getNativeEngineBinding()\r\n if (!native?.computeIncrementalDiff) {\r\n throw new Error(\"FATAL: Native binding 'computeIncrementalDiff' is required but not available.\")\r\n }\r\n\r\n const result = native.computeIncrementalDiff(\r\n JSON.stringify(previous.files),\r\n JSON.stringify(current.files)\r\n ) as WorkspaceDiff | null\r\n\r\n if (!result) {\r\n return { addedClasses: [], removedClasses: [], changedFiles: [], unchangedFiles: 0 }\r\n }\r\n\r\n log.debug(\r\n `native diff workspace: +${result.addedClasses.length} classes, -${result.removedClasses.length} classes, ${result.changedFiles.length} files changed`\r\n )\r\n\r\n return result\r\n}\r\n\r\n/**\r\n * Apply an incremental file-change event to an existing scan result.\r\n *\r\n * Semua tiga helper internal sekarang native-first:\r\n * rebuildWorkspaceResult → Rust rebuild_workspace_result\r\n * applyClassDiff → Rust apply_class_diff\r\n * areClassSetsEqual → Rust are_class_sets_equal\r\n */\r\nexport function applyIncrementalChange(\r\n previous: ScanWorkspaceResult,\r\n filePath: string,\r\n type: \"change\" | \"unlink\",\r\n scanner?: ScanWorkspaceOptions\r\n): ScanWorkspaceResult {\r\n const includeExtensions = scanner?.includeExtensions ?? DEFAULT_EXTENSIONS\r\n if (!isScannableFile(filePath, includeExtensions)) return previous\r\n\r\n const byFile = new Map(previous.files.map((f) => [path.resolve(f.file), f]))\r\n const normalizedPath = path.resolve(filePath)\r\n\r\n const native = getNativeEngineBinding()\r\n if (!native?.processFileChange) {\r\n throw new Error(\r\n \"FATAL: Native binding 'processFileChange' is required but not available.\\n\" +\r\n \"This package requires native Rust bindings.\\n\\n\" +\r\n \"Resolution steps:\\n\" +\r\n \"1. Build the native Rust module: npm run build:rust\"\r\n )\r\n }\r\n\r\n if (type === \"unlink\") {\r\n const existing = byFile.get(normalizedPath)\r\n log.debug(`native unlink ${normalizedPath}`)\r\n native.processFileChange(normalizedPath, existing?.classes ?? [], null)\r\n byFile.delete(normalizedPath)\r\n return rebuildWorkspaceResult(byFile)\r\n }\r\n\r\n log.debug(`native change ${normalizedPath}`)\r\n const scanned = scanFile(normalizedPath)\r\n const content = fs.readFileSync(normalizedPath, \"utf8\")\r\n const diff = native.processFileChange(normalizedPath, scanned.classes, content)\r\n const existing = byFile.get(normalizedPath)\r\n\r\n if (diff && existing) {\r\n log.debug(`native diff ${normalizedPath} +${diff.added.length} -${diff.removed.length}`)\r\n const diffApplied = applyClassDiff(existing.classes, diff.added, diff.removed)\r\n const classes = areClassSetsEqual(diffApplied, scanned.classes)\r\n ? diffApplied\r\n : scanned.classes\r\n byFile.set(normalizedPath, { file: normalizedPath, classes })\r\n } else {\r\n log.debug(`native diff cold-sync ${normalizedPath}`)\r\n byFile.set(normalizedPath, { file: normalizedPath, classes: scanned.classes })\r\n }\r\n\r\n return rebuildWorkspaceResult(byFile)\r\n}","export interface EngineMetricsSnapshot {\r\n eventsReceived: number\r\n eventsProcessed: number\r\n batchesProcessed: number\r\n incrementalUpdates: number\r\n fullRescans: number\r\n skippedLargeFiles: number\r\n queueMaxSize: number\r\n lastBuildMs: number\r\n avgBuildMs: number\r\n}\r\n\r\nexport class EngineMetricsCollector {\r\n private eventsReceived = 0\r\n private eventsProcessed = 0\r\n private batchesProcessed = 0\r\n private incrementalUpdates = 0\r\n private fullRescans = 0\r\n private skippedLargeFiles = 0\r\n private queueMaxSize = 0\r\n private lastBuildMs = 0\r\n private totalBuildMs = 0\r\n\r\n markEventReceived(queueSize: number): void {\r\n this.eventsReceived += 1\r\n if (queueSize > this.queueMaxSize) this.queueMaxSize = queueSize\r\n }\r\n\r\n markBatchProcessed(batchSize: number): void {\r\n this.batchesProcessed += 1\r\n this.eventsProcessed += batchSize\r\n }\r\n\r\n markIncremental(): void {\r\n this.incrementalUpdates += 1\r\n }\r\n\r\n markFullRescan(): void {\r\n this.fullRescans += 1\r\n }\r\n\r\n markSkippedLargeFile(): void {\r\n this.skippedLargeFiles += 1\r\n }\r\n\r\n markBuildDuration(ms: number): void {\r\n this.lastBuildMs = ms\r\n this.totalBuildMs += ms\r\n }\r\n\r\n snapshot(): EngineMetricsSnapshot {\r\n const avgBuildMs = this.batchesProcessed > 0 ? this.totalBuildMs / this.batchesProcessed : 0\r\n return {\r\n eventsReceived: this.eventsReceived,\r\n eventsProcessed: this.eventsProcessed,\r\n batchesProcessed: this.batchesProcessed,\r\n incrementalUpdates: this.incrementalUpdates,\r\n fullRescans: this.fullRescans,\r\n skippedLargeFiles: this.skippedLargeFiles,\r\n queueMaxSize: this.queueMaxSize,\r\n lastBuildMs: this.lastBuildMs,\r\n avgBuildMs,\r\n }\r\n }\r\n}\r\n","/**\r\n * tailwind-styled-v4 — Metrics Writer\r\n *\r\n * Menulis metrics dari engine ke file `.tw-cache/metrics.json`\r\n * sehingga dashboard server bisa membaca secara real-time.\r\n *\r\n * Dipanggil dari engine setelah setiap build selesai.\r\n */\r\n\r\nimport fs from \"node:fs\"\r\nimport path from \"node:path\"\r\nimport { performance } from \"node:perf_hooks\"\r\nimport { createLogger } from \"@tailwind-styled/shared\"\r\n\r\nconst _log = createLogger(\"tw:metrics\")\r\n\r\nexport interface BuildMetrics {\r\n buildMs?: number\r\n scanMs?: number\r\n analyzeMs?: number\r\n compileMs?: number\r\n classCount?: number\r\n fileCount?: number\r\n cssBytes?: number\r\n packageCount?: number\r\n memoryMb?: { rss: number; heapUsed: number; heapTotal: number }\r\n mode?: \"jit\" | \"build\" | \"watch\" | \"idle\" | \"error\"\r\n route?: string\r\n error?: string\r\n lastEventType?: string\r\n eventsReceived?: number\r\n eventsProcessed?: number\r\n batchesProcessed?: number\r\n incrementalUpdates?: number\r\n fullRescans?: number\r\n skippedLargeFiles?: number\r\n queueMaxSize?: number\r\n lastBuildMs?: number\r\n avgBuildMs?: number\r\n generatedAt?: string\r\n}\r\n\r\nconst METRICS_FILE_NAME = \"metrics.json\"\r\nconst CACHE_DIR = \".tw-cache\"\r\n\r\n/**\r\n * Tulis metrics ke file untuk dibaca oleh dashboard server.\r\n * Non-blocking — error diabaikan.\r\n */\r\nexport function writeMetrics(metrics: BuildMetrics, cwd = process.cwd()): void {\r\n try {\r\n const cacheDir = path.join(cwd, CACHE_DIR)\r\n fs.mkdirSync(cacheDir, { recursive: true })\r\n\r\n const mem = process.memoryUsage()\r\n const data: BuildMetrics = {\r\n ...metrics,\r\n memoryMb: {\r\n rss: Math.round(mem.rss / 1024 / 1024),\r\n heapUsed: Math.round(mem.heapUsed / 1024 / 1024),\r\n heapTotal: Math.round(mem.heapTotal / 1024 / 1024),\r\n },\r\n generatedAt: new Date().toISOString(),\r\n }\r\n\r\n fs.writeFileSync(path.join(cacheDir, METRICS_FILE_NAME), JSON.stringify(data, null, 2))\r\n } catch {\r\n // Non-critical — dashboard adalah opsional\r\n }\r\n}\r\n\r\n/**\r\n * Higher-order wrapper — ukur durasi fungsi dan tulis metrics.\r\n *\r\n * @example\r\n * const result = await withMetrics('build', async () => {\r\n * return await engine.build()\r\n * }, { classCount: result.scan.uniqueClasses.length })\r\n */\r\nexport async function withMetrics<T>(\r\n mode: BuildMetrics[\"mode\"],\r\n fn: () => Promise<T>,\r\n extraMetrics: Partial<BuildMetrics> = {},\r\n cwd = process.cwd()\r\n): Promise<T> {\r\n const start = performance.now()\r\n const result = await fn()\r\n const elapsed = Math.round(performance.now() - start)\r\n\r\n writeMetrics({ mode, buildMs: elapsed, ...extraMetrics }, cwd)\r\n\r\n return result\r\n}\r\n\r\n/**\r\n * Buat timer untuk mengukur scan time.\r\n *\r\n * @example\r\n * const timer = startScanTimer()\r\n * const scan = scanWorkspace(root)\r\n * writeMetrics({ scanMs: timer.elapsed(), classCount: scan.uniqueClasses.length })\r\n */\r\nexport function startTimer() {\r\n const start = performance.now()\r\n return {\r\n elapsed: () => Math.round(performance.now() - start),\r\n }\r\n}\r\n\r\nexport default { writeMetrics, withMetrics, startTimer }\r\n","import type { ScanWorkspaceResult } from \"@tailwind-styled/scanner\"\r\nimport type { BuildResult } from \"./index\"\r\n\r\nexport interface EnginePluginContext {\r\n root: string\r\n timestamp: number\r\n}\r\n\r\nexport interface EngineWatchContext {\r\n root: string\r\n timestamp: number\r\n}\r\n\r\nexport interface EnginePlugin {\r\n name: string\r\n beforeScan?(context: EnginePluginContext): void | Promise<void>\r\n afterScan?(\r\n scan: ScanWorkspaceResult,\r\n context: EnginePluginContext\r\n ): ScanWorkspaceResult | undefined | Promise<ScanWorkspaceResult | undefined>\r\n transformClasses?(\r\n classes: string[],\r\n context: EnginePluginContext\r\n ): string[] | undefined | Promise<string[] | undefined>\r\n beforeBuild?(scan: ScanWorkspaceResult, context: EnginePluginContext): void | Promise<void>\r\n afterBuild?(\r\n result: BuildResult,\r\n context: EnginePluginContext\r\n ): BuildResult | undefined | Promise<BuildResult | undefined>\r\n onError?(error: Error, context: EnginePluginContext): void | Promise<void>\r\n beforeWatch?(context: EngineWatchContext): void | Promise<void>\r\n afterWatch?(context: EngineWatchContext): void | Promise<void>\r\n}\r\n\r\nexport async function runBeforeScan(\r\n plugins: EnginePlugin[],\r\n context: EnginePluginContext\r\n): Promise<void> {\r\n for (const plugin of plugins) {\r\n await plugin.beforeScan?.(context)\r\n }\r\n}\r\n\r\nexport async function runAfterScan(\r\n plugins: EnginePlugin[],\r\n scan: ScanWorkspaceResult,\r\n context: EnginePluginContext\r\n): Promise<ScanWorkspaceResult> {\r\n return await plugins.reduce(async (currentPromise, plugin) => {\r\n const current = await currentPromise\r\n const next = await plugin.afterScan?.(current, context)\r\n return next ?? current\r\n }, Promise.resolve(scan))\r\n}\r\n\r\nexport async function runTransformClasses(\r\n plugins: EnginePlugin[],\r\n classes: string[],\r\n context: EnginePluginContext\r\n): Promise<string[]> {\r\n return await plugins.reduce(async (currentPromise, plugin) => {\r\n const current = await currentPromise\r\n const next = await plugin.transformClasses?.(current, context)\r\n return next ?? current\r\n }, Promise.resolve(classes))\r\n}\r\n\r\nexport async function runBeforeBuild(\r\n plugins: EnginePlugin[],\r\n scan: ScanWorkspaceResult,\r\n context: EnginePluginContext\r\n): Promise<void> {\r\n for (const plugin of plugins) {\r\n await plugin.beforeBuild?.(scan, context)\r\n }\r\n}\r\n\r\nexport async function runAfterBuild(\r\n plugins: EnginePlugin[],\r\n result: BuildResult,\r\n context: EnginePluginContext\r\n): Promise<BuildResult> {\r\n return plugins.reduce(async (acc, plugin) => {\r\n const current = await acc\r\n const next = await plugin.afterBuild?.(current, context)\r\n return next !== undefined ? next : current\r\n }, Promise.resolve(result))\r\n}\r\n\r\nexport async function runOnError(\r\n plugins: EnginePlugin[],\r\n error: Error,\r\n context: EnginePluginContext\r\n): Promise<void> {\r\n for (const plugin of plugins) {\r\n await plugin.onError?.(error, context)\r\n }\r\n}\r\n\r\nexport async function runBeforeWatch(\r\n plugins: EnginePlugin[],\r\n context: EngineWatchContext\r\n): Promise<void> {\r\n for (const plugin of plugins) {\r\n await plugin.beforeWatch?.(context)\r\n }\r\n}\r\n\r\nexport async function runAfterWatch(\r\n plugins: EnginePlugin[],\r\n context: EngineWatchContext\r\n): Promise<void> {\r\n for (const plugin of plugins) {\r\n await plugin.afterWatch?.(context)\r\n }\r\n}\r\n","import { z } from \"zod\"\r\nimport type { EnginePlugin } from \"./plugin-api\"\r\n\r\nconst formatIssues = (error: z.ZodError): string =>\r\n error.issues\r\n .map((issue) => {\r\n const p = issue.path.length > 0 ? issue.path.join(\".\") : \"<root>\"\r\n return `${p}: ${issue.message}`\r\n })\r\n .join(\"; \")\r\n\r\nconst parseWithSchema = <T>(schema: z.ZodType<T>, data: unknown, label: string): T => {\r\n const parsed = schema.safeParse(data)\r\n if (parsed.success) return parsed.data\r\n throw new TypeError(`${label}: ${formatIssues(parsed.error)}`)\r\n}\r\n\r\nexport const EngineOptionsSchema = z.object({\r\n root: z.string().optional(),\r\n scanner: z\r\n .object({\r\n includeExtensions: z.array(z.string()).optional(),\r\n ignoreDirectories: z.array(z.string()).optional(),\r\n useCache: z.boolean().optional(),\r\n cacheDir: z.string().min(1).optional(),\r\n smartInvalidation: z.boolean().optional(),\r\n })\r\n .optional(),\r\n compileCss: z.boolean().optional(),\r\n tailwindConfigPath: z.string().optional(),\r\n analyze: z.boolean().optional(),\r\n plugins: z.array(z.custom<EnginePlugin>()).optional(),\r\n})\r\n\r\nexport type EngineOptionsInput = z.infer<typeof EngineOptionsSchema>\r\n\r\nexport const EngineWatchOptionsSchema = z.object({\r\n debounceMs: z.number().int().min(0).optional(),\r\n maxEventsPerFlush: z.number().int().min(1).optional(),\r\n largeFileThreshold: z.number().int().min(0).optional(),\r\n})\r\n\r\nexport type EngineWatchOptionsInput = z.infer<typeof EngineWatchOptionsSchema>\r\n\r\nexport const BuildResultSchema = z.object({\r\n scan: z.object({\r\n files: z.array(\r\n z.object({ file: z.string(), classes: z.array(z.string()), hash: z.string().optional() })\r\n ),\r\n totalFiles: z.number().int().min(0),\r\n uniqueClasses: z.array(z.string()),\r\n }),\r\n mergedClassList: z.string(),\r\n css: z.string(),\r\n analysis: z\r\n .object({\r\n unusedClasses: z.array(z.string()),\r\n classConflicts: z.array(\r\n z.object({\r\n className: z.string(),\r\n files: z.array(z.string()),\r\n classes: z.array(z.string()).optional(),\r\n message: z.string().optional(),\r\n })\r\n ),\r\n classUsage: z.record(z.string(), z.number()),\r\n })\r\n .optional(),\r\n})\r\n\r\nexport type BuildResultInput = z.infer<typeof BuildResultSchema>\r\n\r\nexport const parseEngineOptions = (options: unknown) =>\r\n parseWithSchema(EngineOptionsSchema, options ?? {}, \"engine options are invalid\")\r\n\r\nexport const parseEngineWatchOptions = (options: unknown) =>\r\n parseWithSchema(EngineWatchOptionsSchema, options ?? {}, \"engine watch options are invalid\")\r\n","/**\r\n * watch.ts — File system watcher for tailwind-styled-v4.\r\n *\r\n * Native-only: uses Rust `notify`-based watcher via NAPI\r\n * (`start_watch` / `poll_watch_events` / `stop_watch` from watch_api.rs).\r\n *\r\n * Polling interval: 200ms (configurable via `pollIntervalMs`).\r\n */\r\n\r\n// Lazy-load native binding\r\nlet _native: {\r\n startWatch?: (rootDir: string) => { status: string; handleId: number }\r\n pollWatchEvents?: (handleId: number) => Array<{ kind: string; path: string }>\r\n stopWatch?: (handleId: number) => boolean\r\n} | null = null\r\n\r\nfunction getNativeWatcher() {\r\n if (_native !== null) return _native\r\n try {\r\n const { resolveNativeBinary } = require(\"@tailwind-styled/shared\")\r\n const { path: binPath } = resolveNativeBinary(__dirname)\r\n if (binPath) {\r\n _native = require(binPath)\r\n }\r\n } catch {\r\n _native = {}\r\n }\r\n return _native\r\n}\r\n\r\nexport interface WatcherOptions {\r\n /** Directories to ignore (currently not enforced by native watcher, kept for API compatibility). */\r\n ignoreDirectories?: string[]\r\n /** Delay before emitting change event to reduce noisy bursts (applied in Rust layer). */\r\n debounceMs?: number\r\n /** Polling interval in ms for the Rust native watcher (default: 200). */\r\n pollIntervalMs?: number\r\n onError?: (error: Error, directory: string) => void\r\n}\r\n\r\nexport interface WatcherEvent {\r\n type: \"change\" | \"unlink\"\r\n filePath: string\r\n}\r\n\r\nexport interface WorkspaceWatcher {\r\n close(): void\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Native Rust watcher (notify v6)\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction watchWorkspaceNative(\r\n rootDir: string,\r\n onEvent: (event: WatcherEvent) => void,\r\n options: WatcherOptions\r\n): WorkspaceWatcher | null {\r\n const native = getNativeWatcher()\r\n if (!native?.startWatch || !native?.pollWatchEvents || !native?.stopWatch) {\r\n return null\r\n }\r\n\r\n const result = native.startWatch(rootDir)\r\n if (!result || result.status !== \"ok\") {\r\n return null\r\n }\r\n\r\n const { handleId } = result\r\n const pollMs = options.pollIntervalMs ?? 200\r\n const pending = new Map<string, { event: WatcherEvent; timer: NodeJS.Timeout }>()\r\n const debounceMs = options.debounceMs ?? 100\r\n\r\n function enqueue(event: WatcherEvent) {\r\n const key = `${event.type}:${event.filePath}`\r\n const existing = pending.get(key)\r\n if (existing) clearTimeout(existing.timer)\r\n const timer = setTimeout(() => {\r\n pending.delete(key)\r\n onEvent(event)\r\n }, debounceMs)\r\n pending.set(key, { event, timer })\r\n }\r\n\r\n const intervalId = setInterval(() => {\r\n try {\r\n const events = native.pollWatchEvents!(handleId)\r\n for (const ev of events) {\r\n const type: WatcherEvent[\"type\"] = ev.kind === \"unlink\" ? \"unlink\" : \"change\"\r\n enqueue({ type, filePath: ev.path })\r\n }\r\n } catch (err) {\r\n options.onError?.(\r\n err instanceof Error ? err : new Error(String(err)),\r\n rootDir\r\n )\r\n }\r\n }, pollMs)\r\n\r\n return {\r\n close() {\r\n clearInterval(intervalId)\r\n for (const { timer } of pending.values()) clearTimeout(timer)\r\n pending.clear()\r\n try {\r\n native.stopWatch!(handleId)\r\n } catch {\r\n // ignore\r\n }\r\n },\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Public API — native-only\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * watchWorkspace — watches `rootDir` recursively for file changes.\r\n *\r\n * Requires native Rust watcher. Throws if native binding unavailable.\r\n */\r\nexport function watchWorkspace(\r\n rootDir: string,\r\n onEvent: (event: WatcherEvent) => void,\r\n options: WatcherOptions = {}\r\n): WorkspaceWatcher {\r\n const nativeWatcher = watchWorkspaceNative(rootDir, onEvent, options)\r\n if (!nativeWatcher) {\r\n throw new Error(\"FATAL: Native watcher is required but not available. Build the native module: npm run build:rust\")\r\n }\r\n return nativeWatcher\r\n}"]}
|
|
1
|
+
{"version":3,"sources":["../packages/domain/shared/src/trace.ts","../packages/domain/shared/src/error-codes.ts","../packages/domain/shared/src/compatibility.ts","../packages/domain/shared/src/native-schemas.ts","../packages/domain/shared/src/esmHelpers.ts","../packages/domain/shared/src/telemetry.ts","../packages/domain/shared/src/configSchemas.ts","../packages/domain/shared/src/workerResolver.ts","../packages/domain/shared/src/codegen.ts","../packages/domain/shared/src/native-resolution.ts","../packages/domain/shared/src/observability.ts","../packages/domain/compiler/src/nativeBridge.ts","../packages/domain/compiler/src/compiler/cssGeneratorNative.ts","../packages/domain/compiler/src/compiler/compilationNative.ts","../packages/domain/compiler/src/compiler/cssCompilationNative.ts","../packages/domain/compiler/src/compiler/idRegistryNative.ts","../packages/domain/compiler/src/compiler/streamingNative.ts","../packages/domain/compiler/src/compiler/tailwindEngine.ts","../packages/domain/compiler/src/compiler/index.ts","../packages/domain/compiler/src/parser/index.ts","../packages/domain/compiler/src/analyzer/analyzerNative.ts","../packages/domain/compiler/src/analyzer/themeResolutionNative.ts","../packages/domain/compiler/src/analyzer/scannerNative.ts","../packages/domain/compiler/src/analyzer/index.ts","../packages/domain/compiler/src/cache/cacheNative.ts","../packages/domain/compiler/src/cache/index.ts","../packages/domain/compiler/src/redis/redisNative.ts","../packages/domain/compiler/src/redis/index.ts","../packages/domain/compiler/src/watch/watchSystemNative.ts","../packages/domain/compiler/src/watch/index.ts","../packages/domain/compiler/src/index.ts","../packages/domain/compiler/src/internal.ts","../packages/domain/shared/src/staticStateExtractor.ts","../packages/domain/shared/src/logger.ts","../packages/domain/shared/src/index.ts","../packages/domain/scanner/src/native-bridge.ts","../packages/domain/scanner/src/cache-native.ts","../packages/domain/scanner/src/parallel-scanner.ts","../packages/domain/scanner/src/schemas.ts","../packages/domain/scanner/src/index.ts","../packages/domain/engine/src/native-bridge.ts","../packages/domain/core/src/native.ts","../packages/domain/core/src/containerQuery.ts","../packages/domain/core/src/merge.ts","../packages/domain/core/src/stateEngine.ts","../packages/domain/core/src/createComponent.ts","../packages/domain/core/src/cv.ts","../packages/domain/core/src/cx.ts","../packages/domain/theme/src/liveTokenEngine.ts","../packages/domain/core/src/registry.ts","../packages/domain/core/src/styled.ts","../packages/domain/core/src/styledSystem.ts","../packages/domain/core/src/twProxy.ts","../packages/domain/core/src/twTheme.ts","../packages/domain/analyzer/src/analyzeWorkspace.ts","../packages/domain/analyzer/src/binding.ts","../packages/domain/analyzer/src/utils.ts","../packages/domain/analyzer/src/schemas.ts","../packages/domain/analyzer/src/semantic.ts","../packages/domain/engine/src/index.ts","../packages/domain/engine/src/incremental.ts","../packages/domain/engine/src/metrics.ts","../packages/domain/engine/src/metricsWriter.ts","../packages/domain/engine/src/plugin-api.ts","../packages/domain/engine/src/schemas.ts","../packages/domain/engine/src/watch.ts"],"names":["path","z","isBrowser","cv","exports","fs","t","init_src","createRequire","runCssPipeline","batchExtractClasses","log","createLogger","hashContent","_require","batchExtractClassesNative","scanFileNative","scanFilesBatchNative","getDirname","fileURLToPath","scannerGetBinding","collectFiles","resolve","formatIssuePath","src_exports","isScannableFile","scanFile","scanWorkspace","Worker","nativeBinding","scanWorkspaceNative","init_native_bridge","getBinding","NATIVE_UNAVAILABLE_MESSAGE","_loadNative","layoutClassesToCss","twMerge","rules","React","resolveVariants","merged","extended","result","baseComponent","component","setToken","setTokens","applyTokenSet","formatErrorMessage","getNativeBinding","formatIssues","parseWithSchema","detectConflicts","extractClassesNative","loadTailwindConfig","DEFAULT_EXTENSIONS","rebuildWorkspaceResult","existing","_native","resolveNativeBinary","pathToFileURL"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\r\n * Shared trace utilities for CLI, devtools, and dashboard\r\n * \r\n * Provides reusable trace snapshot handling, formatting, and analysis\r\n * across the tailwind-styled-v4 ecosystem without introducing coupling.\r\n */\r\n\r\nexport interface TraceSnapshot {\r\n generatedAt: string\r\n buildMs: number | null\r\n scanMs: number | null\r\n analyzeMs: number | null\r\n compileMs: number | null\r\n memoryMb: { rss: number; heapUsed: number; heapTotal: number } | null\r\n classCount: number | null\r\n fileCount: number | null\r\n cssBytes: number | null\r\n mode: string | null\r\n eventsReceived?: number\r\n eventsProcessed?: number\r\n batchesProcessed?: number\r\n incrementalUpdates?: number\r\n fullRescans?: number\r\n}\r\n\r\nexport interface TraceSummary {\r\n workspace: {\r\n totalPackages: number\r\n totalFiles: number\r\n totalClasses: number\r\n lastScanDurationMs: number\r\n lastBuildDurationMs: number\r\n }\r\n cache: {\r\n hitRate: number\r\n totalEntries: number\r\n memoryUsageMb: number\r\n }\r\n pipeline: {\r\n scanDurationMs: number\r\n analyzeDurationMs: number\r\n compileDurationMs: number\r\n totalDurationMs: number\r\n }\r\n health: {\r\n status: \"healthy\" | \"degraded\" | \"unhealthy\"\r\n issues: Array<{ severity: string; message: string }>\r\n }\r\n}\r\n\r\n/**\r\n * Get health status color for UI rendering\r\n */\r\nexport function getHealthColor(status?: string): string {\r\n switch (status) {\r\n case \"healthy\":\r\n return \"#34d399\"\r\n case \"degraded\":\r\n return \"#fbbf24\"\r\n case \"unhealthy\":\r\n return \"#f87171\"\r\n default:\r\n return \"#52525b\"\r\n }\r\n}\r\n\r\n/**\r\n * Get mode color for UI rendering\r\n */\r\nexport function getModeColor(mode?: string | null): string {\r\n switch (mode) {\r\n case \"build\":\r\n return \"#fbbf24\"\r\n case \"watch\":\r\n return \"#34d399\"\r\n case \"jit\":\r\n return \"#60a5fa\"\r\n case \"error\":\r\n return \"#f87171\"\r\n case \"idle\":\r\n return \"#71717a\"\r\n default:\r\n return \"#52525b\"\r\n }\r\n}\r\n\r\n/**\r\n * Format memory in human-readable format\r\n */\r\nexport function formatMemory(bytes: number): string {\r\n if (bytes < 1024) return `${Math.round(bytes)}B`\r\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`\r\n return `${(bytes / (1024 * 1024)).toFixed(1)}MB`\r\n}\r\n\r\n/**\r\n * Format duration in human-readable format\r\n */\r\nexport function formatDuration(ms: number | null): string {\r\n if (ms === null) return \"—\"\r\n if (ms < 1000) return `${ms}ms`\r\n return `${(ms / 1000).toFixed(1)}s`\r\n}\r\n\r\n/**\r\n * Calculate health status from metrics\r\n */\r\nexport function calculateHealth(\r\n metrics: TraceSnapshot,\r\n summary?: TraceSummary\r\n): \"healthy\" | \"degraded\" | \"unhealthy\" {\r\n if (summary?.health?.status) return summary.health.status\r\n\r\n // Fallback to simple heuristics\r\n if (metrics.mode === \"error\") return \"unhealthy\"\r\n if ((metrics.buildMs ?? 0) > 5000) return \"degraded\"\r\n if (metrics.memoryMb && metrics.memoryMb.heapUsed > 500) return \"degraded\"\r\n return \"healthy\"\r\n}\r\n\r\n/**\r\n * Get color for build time indicator\r\n */\r\nexport function getBuildTimeColor(ms: number | null): string {\r\n if (ms === null) return \"#52525b\"\r\n if (ms > 1000) return \"#f87171\" // red - very slow\r\n if (ms > 500) return \"#fbbf24\" // amber - acceptable\r\n return \"#34d399\" // green - fast\r\n}\r\n\r\n/**\r\n * Get color for memory usage indicator\r\n */\r\nexport function getMemoryColor(mb: number): string {\r\n if (mb > 500) return \"#f87171\" // red - high\r\n if (mb > 250) return \"#fbbf24\" // amber - moderate\r\n return \"#34d399\" // green - low\r\n}\r\n\r\n/**\r\n * Create trace snapshot from dashboard data\r\n */\r\nexport function createTraceSnapshot(data: Record<string, unknown>): TraceSnapshot {\r\n return {\r\n generatedAt: (data.generatedAt as string) || new Date().toISOString(),\r\n buildMs: (data.buildMs as number) ?? null,\r\n scanMs: (data.scanMs as number) ?? null,\r\n analyzeMs: (data.analyzeMs as number) ?? null,\r\n compileMs: (data.compileMs as number) ?? null,\r\n memoryMb: (data.memoryMb as { rss: number; heapUsed: number; heapTotal: number } | null) ?? null,\r\n classCount: (data.classCount as number) ?? null,\r\n fileCount: (data.fileCount as number) ?? null,\r\n cssBytes: (data.cssBytes as number) ?? null,\r\n mode: (data.mode as string) ?? null,\r\n eventsReceived: (data.eventsReceived as number | undefined) ?? undefined,\r\n eventsProcessed: (data.eventsProcessed as number | undefined) ?? undefined,\r\n batchesProcessed: (data.batchesProcessed as number | undefined) ?? undefined,\r\n incrementalUpdates: (data.incrementalUpdates as number | undefined) ?? undefined,\r\n fullRescans: (data.fullRescans as number | undefined) ?? undefined,\r\n }\r\n}\r\n\r\n/**\r\n * Calculate pipeline time distribution\r\n */\r\nexport function getPipelinePercentages(metrics: TraceSnapshot): {\r\n scanPct: number\r\n analyzePct: number\r\n compilePct: number\r\n} {\r\n const scan = metrics.scanMs ?? 0\r\n const analyze = metrics.analyzeMs ?? 0\r\n const compile = metrics.compileMs ?? 0\r\n const total = scan + analyze + compile\r\n\r\n if (total === 0) {\r\n return { scanPct: 0, analyzePct: 0, compilePct: 0 }\r\n }\r\n\r\n return {\r\n scanPct: (scan / total) * 100,\r\n analyzePct: (analyze / total) * 100,\r\n compilePct: (compile / total) * 100,\r\n }\r\n}\r\n","/**\r\n * Error code registry — single source of truth for all error codes.\r\n *\r\n * Format: E[0-9]xx for errors, W[0-9]xx for warnings.\r\n * Use with TwError for consistent error handling.\r\n */\r\n\r\nexport const ERROR_CODES = {\r\n // E0xx — Native binding\r\n NATIVE_NOT_FOUND: \"E001\",\r\n NATIVE_LOAD_FAILED: \"E002\",\r\n NATIVE_VERSION_MISMATCH: \"E003\",\r\n SCANNER_NATIVE_NOT_FOUND: \"E004\",\r\n SCANNER_HASH_FAILED: \"E005\",\r\n NATIVE_TRANSFORM_UNAVAILABLE: \"E006\",\r\n\r\n // E2xx — Compilation\r\n MISSING_REACT_IMPORT: \"E201\",\r\n UNSUPPORTED_PATTERN: \"E202\",\r\n TEMPLATE_PARSE_ERROR: \"E203\",\r\n COMPILE_TIMEOUT: \"E204\",\r\n\r\n // E3xx — Compatibility\r\n TAILWIND_VERSION_UNSUPPORTED: \"E301\",\r\n NODE_VERSION_UNSUPPORTED: \"E302\",\r\n\r\n // E4xx — Cache\r\n CACHE_READ_FAILED: \"E401\",\r\n CACHE_WRITE_FAILED: \"E402\",\r\n CACHE_CORRUPTED: \"E403\",\r\n\r\n // E5xx — RSC\r\n RSC_BOUNDARY_CONFLICT: \"E501\",\r\n\r\n // W1xx — Warnings\r\n DYNAMIC_CONTENT: \"W101\",\r\n INVALID_VARIANT_VALUE: \"W201\",\r\n DEPRECATED_MODE: \"W301\",\r\n} as const\r\n\r\nexport type ErrorCode = (typeof ERROR_CODES)[keyof typeof ERROR_CODES]\r\n\r\nconst ERROR_SUGGESTIONS: Record<string, string> = {\r\n E001: \"Run: npm install @tailwind-styled/native-{platform} or build from source\",\r\n E002: \"Try: npm rebuild or reinstall the package\",\r\n E003: \"Run: npm install tailwind-styled-v4@latest to sync versions\",\r\n E004: \"Run: npm install @tailwind-styled/scanner\",\r\n E006: \"Run: npm install @tailwind-styled/compiler\",\r\n E301: \"Upgrade: npm install tailwindcss@^4\",\r\n}\r\n\r\nexport function getSuggestion(code: string): string | undefined {\r\n return ERROR_SUGGESTIONS[code]\r\n}\r\n\r\nexport function formatErrorCode(code: string): string {\r\n const prefix = code.startsWith(\"E\") ? \"Error\" : code.startsWith(\"W\") ? \"Warning\" : \"Code\"\r\n return `[${prefix} ${code}]`\r\n}\r\n","/**\r\n * Tailwind CSS version detection and compatibility checks.\r\n *\r\n * tailwind-styled-v4 requires Tailwind CSS v4.x.\r\n * This module detects the installed version and provides\r\n * clear error messages for unsupported versions.\r\n */\r\n\r\nexport interface TailwindInfo {\r\n version: string\r\n major: number\r\n supported: boolean\r\n path: string | null\r\n}\r\n\r\nexport function detectTailwind(): TailwindInfo {\r\n try {\r\n const pkgPath = require.resolve(\"tailwindcss/package.json\")\r\n const { version } = require(pkgPath)\r\n const major = Number.parseInt(version.split(\".\")[0], 10)\r\n return { version, major, supported: major >= 4, path: pkgPath }\r\n } catch {\r\n return { version: \"not-installed\", major: 0, supported: false, path: null }\r\n }\r\n}\r\n\r\nexport function assertTailwindV4(): void {\r\n const info = detectTailwind()\r\n if (!info.supported) {\r\n const message = info.major === 0\r\n ? \"tailwindcss is not installed. Run: npm install tailwindcss@^4\"\r\n : `tailwind-styled-v4 requires Tailwind CSS v4.x. Found: v${info.version}. Upgrade: npm install tailwindcss@^4`\r\n\r\n if (process.env.NODE_ENV !== \"production\") {\r\n console.warn(`[tailwind-styled] ${message}`)\r\n }\r\n }\r\n}\r\n\r\nexport function getTailwindVersion(): string {\r\n return detectTailwind().version\r\n}\r\n\r\nexport function isTailwindV4(): boolean {\r\n return detectTailwind().supported\r\n}\r\n","/**\r\n * Zod schemas untuk validasi native binding responses.\r\n *\r\n * Dipakai untuk memvalidasi data yang datang dari Rust native bindings\r\n * sebelum masuk ke domain logic TypeScript.\r\n *\r\n * Pattern:\r\n * const raw = native.scanWorkspace(root)\r\n * const validated = NativeScanResultSchema.parse(raw)\r\n * // Setelah ini, gunakan `validated` (trusted typed object)\r\n */\r\nimport { z } from \"zod\"\r\n\r\n// ── Scan ─────────────────────────────────────────────────────────────────────\r\n\r\nexport const NativeScanFileSchema = z.object({\r\n file: z.string().min(1, \"file path cannot be empty\"),\r\n classes: z.array(z.string()),\r\n hash: z.string().optional(),\r\n})\r\n\r\nexport type NativeScanFile = z.infer<typeof NativeScanFileSchema>\r\n\r\nexport const NativeScanResultSchema = z.object({\r\n files: z.array(NativeScanFileSchema),\r\n totalFiles: z.number().int().nonnegative(),\r\n uniqueClasses: z.array(z.string()),\r\n})\r\n\r\nexport type NativeScanResult = z.infer<typeof NativeScanResultSchema>\r\n\r\n// ── Analyzer ──────────────────────────────────────────────────────────────────\r\n\r\nexport const NativeClassUsageSchema = z.object({\r\n name: z.string(),\r\n count: z.number().int().nonnegative(),\r\n files: z.array(z.string()).optional(),\r\n})\r\n\r\nexport type NativeClassUsage = z.infer<typeof NativeClassUsageSchema>\r\n\r\nexport const NativeAnalyzerReportSchema = z.object({\r\n root: z.string(),\r\n topClasses: z.array(NativeClassUsageSchema).optional(),\r\n safelist: z.array(z.string()).optional(),\r\n css: z.string().optional(),\r\n conflicts: z.array(z.unknown()).optional(),\r\n unusedClasses: z.array(z.string()).optional(),\r\n durationMs: z.number().nonnegative().optional(),\r\n})\r\n\r\nexport type NativeAnalyzerReport = z.infer<typeof NativeAnalyzerReportSchema>\r\n\r\n// ── Transform ─────────────────────────────────────────────────────────────────\r\n\r\nexport const NativeTransformResultSchema = z.object({\r\n code: z.string(),\r\n classes: z.array(z.string()),\r\n changed: z.boolean(),\r\n rsc: z.object({\r\n isServer: z.boolean(),\r\n needsClientDirective: z.boolean(),\r\n clientReasons: z.array(z.string()),\r\n }).optional(),\r\n})\r\n\r\nexport type NativeTransformResult = z.infer<typeof NativeTransformResultSchema>\r\n\r\n// ── CSS Compile ───────────────────────────────────────────────────────────────\r\n\r\nexport const NativeCssCompileResultSchema = z.object({\r\n css: z.string(),\r\n resolvedClasses: z.array(z.string()),\r\n unresolvedClasses: z.array(z.string()).optional(),\r\n})\r\n\r\nexport type NativeCssCompileResult = z.infer<typeof NativeCssCompileResultSchema>\r\n\r\n// ── Watch ────────────────────────────────────────────────────────────────────\r\n\r\nexport const NativeWatchEventSchema = z.object({\r\n type: z.enum([\"change\", \"unlink\", \"create\"]),\r\n path: z.string(),\r\n})\r\n\r\nexport type NativeWatchEvent = z.infer<typeof NativeWatchEventSchema>\r\n\r\nexport const NativeWatchResultSchema = z.object({\r\n status: z.enum([\"ok\", \"error\"]),\r\n handleId: z.string().optional(),\r\n error: z.string().optional(),\r\n})\r\n\r\nexport type NativeWatchResult = z.infer<typeof NativeWatchResultSchema>\r\n\r\n// ── Cache ────────────────────────────────────────────────────────────────────\r\n\r\nexport const NativeCacheEntrySchema = z.object({\r\n file: z.string(),\r\n hash: z.string(),\r\n classes: z.array(z.string()),\r\n timestamp: z.number(),\r\n size: z.number().optional(),\r\n})\r\n\r\nexport type NativeCacheEntry = z.infer<typeof NativeCacheEntrySchema>\r\n\r\nexport const NativeCacheReadResultSchema = z.object({\r\n entries: z.array(NativeCacheEntrySchema),\r\n version: z.string().optional(),\r\n})\r\n\r\nexport type NativeCacheReadResult = z.infer<typeof NativeCacheReadResultSchema>\r\n\r\n// ── Helpers ───────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Validasi native binding response dengan fallback ke nilai default.\r\n * Gunakan ini di hot path agar tidak crash saat native returns unexpected shape.\r\n *\r\n * @example\r\n * const raw = native.scanWorkspace(root)\r\n * const result = safeParseNative(NativeScanResultSchema, raw, {\r\n * files: [], totalFiles: 0, uniqueClasses: []\r\n * })\r\n */\r\nexport function safeParseNative<T>(\r\n schema: z.ZodType<T>,\r\n data: unknown,\r\n fallback: T\r\n): T {\r\n const result = schema.safeParse(data)\r\n return result.success ? result.data : fallback\r\n}\r\n\r\n/**\r\n * Parse native response — throw TwError jika gagal.\r\n * Gunakan ini di boundary entry points.\r\n */\r\nexport function parseNative<T>(schema: z.ZodType<T>, data: unknown, context: string): T {\r\n const result = schema.safeParse(data)\r\n if (!result.success) {\r\n const first = result.error.issues[0]\r\n const path = first?.path?.join(\".\") ?? \"(root)\"\r\n throw new Error(\r\n `[${context}] Native binding returned unexpected data: ${path}: ${first?.message ?? \"validation failed\"}`\r\n )\r\n }\r\n return result.data\r\n}\r\n","/**\r\n * ESM-safe runtime helpers untuk monorepo.\r\n *\r\n * Menggantikan pola fragile seperti:\r\n * - `createRequire(import.meta.url)` → gunakan `createEsmRequire()`\r\n * - `__dirname` → gunakan `getDirname(import.meta.url)`\r\n * - `__filename` → gunakan `getFilename(import.meta.url)`\r\n *\r\n * Semua helper ini bekerja di ESM dan CJS.\r\n *\r\n * @module @tailwind-styled/shared/esmHelpers\r\n */\r\n\r\nconst isBrowser = typeof window !== \"undefined\" || typeof document !== \"undefined\"\r\n\r\n// Safe check for require availability - works in both CJS and ESM\r\nlet nodeModuleRef: typeof import(\"node:module\") | null = null\r\nfunction getNodeModuleRef(): typeof import(\"node:module\") | null {\r\n if (isBrowser) return null\r\n if (nodeModuleRef !== null) return nodeModuleRef\r\n try {\r\n // Test if require actually works\r\n const test = typeof require === 'function' ? (require('node:module') as typeof import(\"node:module\")) : null\r\n nodeModuleRef = test\r\n return test\r\n } catch {\r\n nodeModuleRef = null\r\n return null\r\n }\r\n}\r\n\r\nlet _nodePath: typeof import(\"node:path\") | null = null\r\nlet _nodeUrl: typeof import(\"node:url\") | null = null\r\nlet _nodeFs: typeof import(\"node:fs\") | null = null\r\nlet _nodeCrypto: typeof import(\"node:crypto\") | null = null\r\nlet _nodeOs: typeof import(\"node:os\") | null = null\r\n\r\nfunction getNodePath(): typeof import(\"node:path\") {\r\n if (isBrowser) throw new Error(\"node:path not available in browser\")\r\n const nodeRequire = getNodeModuleRef()\r\n if (!nodeRequire) throw new Error(\"require not available\")\r\n if (!_nodePath) _nodePath = nodeRequire.createRequire(import.meta.url)(\"node:path\") as typeof import(\"node:path\")\r\n return _nodePath!\r\n}\r\nfunction getNodeUrl(): typeof import(\"node:url\") {\r\n if (isBrowser) throw new Error(\"node:url not available in browser\")\r\n const nodeRequire = getNodeModuleRef()\r\n if (!nodeRequire) throw new Error(\"require not available\")\r\n if (!_nodeUrl) _nodeUrl = nodeRequire.createRequire(import.meta.url)(\"node:url\") as typeof import(\"node:url\")\r\n return _nodeUrl!\r\n}\r\nfunction getNodeFs(): typeof import(\"node:fs\") {\r\n if (isBrowser) throw new Error(\"node:fs not available in browser\")\r\n const nodeRequire = getNodeModuleRef()\r\n if (!nodeRequire) throw new Error(\"require not available\")\r\n if (!_nodeFs) _nodeFs = nodeRequire.createRequire(import.meta.url)(\"node:fs\") as typeof import(\"node:fs\")\r\n return _nodeFs!\r\n}\r\nfunction getNodeCrypto(): typeof import(\"node:crypto\") {\r\n if (isBrowser) throw new Error(\"node:crypto not available in browser\")\r\n const nodeRequire = getNodeModuleRef()\r\n if (!nodeRequire) throw new Error(\"require not available\")\r\n if (!_nodeCrypto) _nodeCrypto = nodeRequire.createRequire(import.meta.url)(\"node:crypto\") as typeof import(\"node:crypto\")\r\n return _nodeCrypto!\r\n}\r\nfunction getNodeOs(): typeof import(\"node:os\") {\r\n if (isBrowser) throw new Error(\"node:os not available in browser\")\r\n const nodeRequire = getNodeModuleRef()\r\n if (!nodeRequire) throw new Error(\"require not available\")\r\n if (!_nodeOs) _nodeOs = nodeRequire.createRequire(import.meta.url)(\"node:os\") as typeof import(\"node:os\")\r\n return _nodeOs!\r\n}\r\n\r\n/**\r\n * Buat `require()` function yang relative terhadap sebuah ESM module.\r\n *\r\n * @example\r\n * // Ganti: createRequire(import.meta.url)(\"some-pkg\")\r\n * const req = createEsmRequire(import.meta.url)\r\n * const mod = req(\"some-pkg\")\r\n */\r\nexport function createEsmRequire(importMetaUrl: string): NodeRequire {\r\n if (isBrowser) throw new Error(\"require not available in browser\")\r\n const nodeRequire = getNodeModuleRef()\r\n if (!nodeRequire) throw new Error(\"require not available\")\r\n return nodeRequire.createRequire(importMetaUrl)\r\n}\r\n\r\n/**\r\n * Dapat `__dirname` dari `import.meta.url`.\r\n *\r\n * @example\r\n * // Ganti: const __dirname = ...\r\n * const dir = getDirname(import.meta.url)\r\n */\r\nexport function getDirname(importMetaUrl: string): string {\r\n if (isBrowser) return \"\"\r\n const nodePath = getNodePath()\r\n const nodeUrl = getNodeUrl()\r\n return nodePath.dirname(nodeUrl.fileURLToPath(importMetaUrl))\r\n}\r\n\r\n/**\r\n * Dapat `__filename` dari `import.meta.url`.\r\n */\r\nexport function getFilename(importMetaUrl: string): string {\r\n if (isBrowser) return \"\"\r\n return getNodeUrl().fileURLToPath(importMetaUrl)\r\n}\r\n\r\n/**\r\n * Resolve path dari root monorepo (bukan CWD).\r\n * Berguna untuk scripts dan tools yang dipanggil dari lokasi berbeda.\r\n *\r\n * @example\r\n * const root = resolveFromRoot(\"packages/domain/shared/src\")\r\n */\r\nexport function resolveFromRoot(...segments: string[]): string {\r\n if (isBrowser) return segments.join(\"/\")\r\n\r\n const nodePath = getNodePath()\r\n const nodeFs = getNodeFs()\r\n \r\n let dir = getDirname(import.meta.url)\r\n for (let i = 0; i < 10; i++) {\r\n const pkgPath = nodePath.join(dir, \"package.json\")\r\n try {\r\n const pkg = JSON.parse(nodeFs.readFileSync(pkgPath, \"utf-8\"))\r\n if (pkg.workspaces) {\r\n return nodePath.resolve(dir, ...segments)\r\n }\r\n } catch { /* intentionally silent */ }\r\n dir = nodePath.dirname(dir)\r\n }\r\n return nodePath.resolve(process.cwd(), ...segments)\r\n}\r\n\r\n/**\r\n * Require sebuah module dengan fallback ke null jika tidak tersedia.\r\n * Berguna untuk optional dependencies.\r\n *\r\n * @example\r\n * const oxc = tryRequire(\"oxc-parser\", import.meta.url)\r\n * if (!oxc) console.warn(\"oxc-parser not installed\")\r\n */\r\nexport function tryRequire<T = unknown>(\r\n moduleName: string,\r\n importMetaUrl: string\r\n): T | null {\r\n if (isBrowser) return null\r\n try {\r\n return createEsmRequire(importMetaUrl)(moduleName) as T\r\n } catch { /* intentionally silent — optional dep */ }\r\n return null\r\n}\r\n\r\n/**\r\n * Resolve .node binary path yang cross-platform dan ESM-safe.\r\n * Menggantikan pola `path.resolve(__dirname, \"../native.node\")`.\r\n */\r\nexport function resolveNativeNodePath(\r\n importMetaUrl: string,\r\n ...relativeSegments: string[]\r\n): string {\r\n if (isBrowser) return relativeSegments.join(\"/\")\r\n return getNodePath().resolve(getDirname(importMetaUrl), ...relativeSegments)\r\n}","/**\r\n * Build performance telemetry untuk tailwind-styled-v4.\r\n * QA #14: Visibility ke build performance — scan speed, cache hit rate, trends.\r\n *\r\n * Design: zero-dependency, ring-buffer based, opt-in via TWS_TELEMETRY=1.\r\n */\r\n\r\nexport interface BuildPhases {\r\n scan: number\r\n compile: number\r\n engine: number\r\n output: number\r\n}\r\n\r\nexport interface BuildTelemetry {\r\n timestamp: number\r\n durationMs: number\r\n filesScanned: number\r\n filesCached: number\r\n classesExtracted: number\r\n nativeVersion?: string\r\n phases: BuildPhases\r\n cacheHitRate: number\r\n mode?: string\r\n}\r\n\r\nexport interface TelemetrySummary {\r\n totalBuilds: number\r\n avgDurationMs: number\r\n p95DurationMs: number\r\n avgCacheHitRate: number\r\n avgFilesScanned: number\r\n avgClassesExtracted: number\r\n phaseAvgs: BuildPhases\r\n slowestBuildMs: number\r\n fastestBuildMs: number\r\n}\r\n\r\nconst RING_BUFFER_SIZE = 100\r\n\r\nexport class TelemetryCollector {\r\n private data: BuildTelemetry[] = []\r\n private enabled: boolean\r\n\r\n constructor(enabled?: boolean) {\r\n this.enabled =\r\n enabled ??\r\n (process.env.TWS_TELEMETRY === \"1\" || process.env.TWS_TELEMETRY === \"true\")\r\n }\r\n\r\n record(build: BuildTelemetry): void {\r\n if (!this.enabled) return\r\n if (this.data.length >= RING_BUFFER_SIZE) {\r\n this.data.shift() // ring buffer — hapus entri tertua\r\n }\r\n this.data.push(build)\r\n }\r\n\r\n snapshot(): BuildTelemetry[] {\r\n return [...this.data]\r\n }\r\n\r\n summary(): TelemetrySummary | null {\r\n if (this.data.length === 0) return null\r\n\r\n const durations = this.data.map(d => d.durationMs).sort((a, b) => a - b)\r\n const p95Idx = Math.floor(durations.length * 0.95)\r\n\r\n const avg = (arr: number[]) => arr.reduce((a, b) => a + b, 0) / arr.length\r\n\r\n return {\r\n totalBuilds: this.data.length,\r\n avgDurationMs: avg(durations),\r\n p95DurationMs: durations[p95Idx] ?? durations[durations.length - 1] ?? 0,\r\n avgCacheHitRate: avg(this.data.map(d => d.cacheHitRate)),\r\n avgFilesScanned: avg(this.data.map(d => d.filesScanned)),\r\n avgClassesExtracted: avg(this.data.map(d => d.classesExtracted)),\r\n phaseAvgs: {\r\n scan: avg(this.data.map(d => d.phases.scan)),\r\n compile: avg(this.data.map(d => d.phases.compile)),\r\n engine: avg(this.data.map(d => d.phases.engine)),\r\n output: avg(this.data.map(d => d.phases.output)),\r\n },\r\n slowestBuildMs: durations[durations.length - 1] ?? 0,\r\n fastestBuildMs: durations[0] ?? 0,\r\n }\r\n }\r\n\r\n reset(): void {\r\n this.data = []\r\n }\r\n\r\n /** Format ringkas untuk CLI output */\r\n formatCli(): string {\r\n const s = this.summary()\r\n if (!s) return \"[telemetry] no data\"\r\n return [\r\n `[telemetry] ${s.totalBuilds} builds`,\r\n `avg ${s.avgDurationMs.toFixed(0)}ms`,\r\n `p95 ${s.p95DurationMs.toFixed(0)}ms`,\r\n `cache hit ${(s.avgCacheHitRate * 100).toFixed(0)}%`,\r\n `${s.avgFilesScanned.toFixed(0)} files`,\r\n ].join(\" · \")\r\n }\r\n\r\n /** Export sebagai JSON untuk dashboard/prometheus */\r\n toJSON(): object {\r\n return {\r\n summary: this.summary(),\r\n history: this.data.slice(-20), // last 20 builds\r\n }\r\n }\r\n}\r\n\r\n/** Global singleton telemetry collector */\r\nlet _globalCollector: TelemetryCollector | null = null\r\n\r\nexport function getGlobalTelemetry(): TelemetryCollector {\r\n if (!_globalCollector) {\r\n _globalCollector = new TelemetryCollector()\r\n }\r\n return _globalCollector\r\n}\r\n\r\nexport function resetGlobalTelemetry(): void {\r\n _globalCollector = null\r\n}\r\n\r\n/** Helper untuk record build dengan timing otomatis */\r\nexport function createBuildTimer() {\r\n const start = Date.now()\r\n const phases: Partial<BuildPhases> = {}\r\n let phaseStart = start\r\n\r\n return {\r\n phase(name: keyof BuildPhases): void {\r\n const now = Date.now()\r\n phases[name] = now - phaseStart\r\n phaseStart = now\r\n },\r\n finish(opts: Omit<BuildTelemetry, \"timestamp\" | \"durationMs\" | \"phases\" | \"cacheHitRate\"> & {\r\n cacheHitRate?: number\r\n }): BuildTelemetry {\r\n const now = Date.now()\r\n const record: BuildTelemetry = {\r\n timestamp: start,\r\n durationMs: now - start,\r\n phases: {\r\n scan: phases.scan ?? 0,\r\n compile: phases.compile ?? 0,\r\n engine: phases.engine ?? 0,\r\n output: phases.output ?? now - start,\r\n },\r\n cacheHitRate: opts.cacheHitRate ?? 0,\r\n ...opts,\r\n }\r\n getGlobalTelemetry().record(record)\r\n return record\r\n },\r\n }\r\n}\r\n","/**\r\n * Zod schemas untuk JSON, cache, manifest, dan config reads.\r\n * PLAN.md: \"JSON, cache, manifest, and config reads should be parsed into typed schema-backed values\"\r\n *\r\n * Pattern: validate at the I/O boundary, pass typed values inward.\r\n */\r\nimport { z } from \"zod\"\r\n\r\n// ── Scan Cache ────────────────────────────────────────────────────────────────\r\n\r\n/** Schema untuk .tailwind-styled/scan-cache.json */\r\nexport const ScanCacheClassEntrySchema = z.object({\r\n name: z.string().min(1),\r\n usedIn: z.array(z.string()),\r\n risk: z.enum([\"low\", \"medium\", \"high\"]).default(\"low\"),\r\n bundleContribution: z.number().nonnegative().default(0),\r\n variants: z.array(z.string()).default([]),\r\n})\r\nexport type ScanCacheClassEntry = z.infer<typeof ScanCacheClassEntrySchema>\r\n\r\nexport const ScanCacheSchema = z.object({\r\n version: z.string().default(\"1\"),\r\n generatedAt: z.string(),\r\n root: z.string(),\r\n classNames: z.array(ScanCacheClassEntrySchema),\r\n totalFiles: z.number().int().nonnegative(),\r\n uniqueCount: z.number().int().nonnegative(),\r\n})\r\nexport type ScanCache = z.infer<typeof ScanCacheSchema>\r\n\r\n// ── Tailwind Config ───────────────────────────────────────────────────────────\r\n\r\nexport const TailwindContentItemSchema = z.union([\r\n z.string(),\r\n z.object({\r\n raw: z.string(),\r\n extension: z.string().optional(),\r\n }),\r\n z.object({\r\n files: z.array(z.string()),\r\n transform: z.record(z.string(), z.unknown()).optional(),\r\n }),\r\n])\r\n\r\nexport const TailwindConfigSchema = z.object({\r\n content: z.array(TailwindContentItemSchema).optional(),\r\n theme: z.record(z.string(), z.unknown()).optional(),\r\n plugins: z.array(z.unknown()).optional(),\r\n darkMode: z.union([z.literal(\"class\"), z.literal(\"media\"), z.literal(false)]).optional(),\r\n prefix: z.string().optional(),\r\n safelist: z.array(z.union([z.string(), z.object({ pattern: z.instanceof(RegExp) })])).optional(),\r\n blocklist: z.array(z.string()).optional(),\r\n}).passthrough() // Allow additional Tailwind v4 config keys\r\nexport type TailwindConfig = z.infer<typeof TailwindConfigSchema>\r\n\r\n// ── Plugin Registry Entry ─────────────────────────────────────────────────────\r\n\r\nexport const RegistryPluginEntrySchema = z.object({\r\n name: z.string().min(1),\r\n description: z.string(),\r\n version: z.string(),\r\n tags: z.array(z.string()).default([]),\r\n official: z.boolean().default(false),\r\n docs: z.string().url().optional(),\r\n install: z.string().optional(),\r\n integrity: z.string().optional(),\r\n})\r\nexport type RegistryPluginEntry = z.infer<typeof RegistryPluginEntrySchema>\r\n\r\nexport const RegistryFileSchema = z.object({\r\n version: z.string(),\r\n official: z.array(RegistryPluginEntrySchema).default([]),\r\n community: z.array(RegistryPluginEntrySchema).default([]),\r\n})\r\nexport type RegistryFile = z.infer<typeof RegistryFileSchema>\r\n\r\n// ── Package.json (minimal) ────────────────────────────────────────────────────\r\n\r\nexport const PackageJsonSchema = z.object({\r\n name: z.string(),\r\n version: z.string(),\r\n scripts: z.record(z.string(), z.string()).optional(),\r\n dependencies: z.record(z.string(), z.string()).optional(),\r\n devDependencies: z.record(z.string(), z.string()).optional(),\r\n peerDependencies: z.record(z.string(), z.string()).optional(),\r\n main: z.string().optional(),\r\n module: z.string().optional(),\r\n exports: z.unknown().optional(),\r\n type: z.enum([\"module\", \"commonjs\"]).optional(),\r\n}).passthrough()\r\nexport type PackageJson = z.infer<typeof PackageJsonSchema>\r\n\r\n// ── Helpers ────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Parse JSON string dengan schema validation.\r\n * Melempar error yang human-readable jika gagal.\r\n *\r\n * @example\r\n * const cache = parseJsonWithSchema(\r\n * fs.readFileSync(\".tailwind-styled/scan-cache.json\", \"utf-8\"),\r\n * ScanCacheSchema,\r\n * \"scan-cache.json\"\r\n * )\r\n */\r\nexport function parseJsonWithSchema<T>(\r\n jsonString: string,\r\n schema: z.ZodType<T>,\r\n sourceName: string\r\n): T {\r\n let parsed: unknown\r\n try {\r\n parsed = JSON.parse(jsonString)\r\n } catch (err) {\r\n throw new Error(\r\n `[${sourceName}] Invalid JSON: ${err instanceof Error ? err.message : String(err)}`\r\n )\r\n }\r\n\r\n const result = schema.safeParse(parsed)\r\n if (!result.success) {\r\n const issues = result.error.issues\r\n .map((e) => ` ${e.path.join(\".\")}: ${e.message}`)\r\n .join(\"\\n\")\r\n throw new Error(`[${sourceName}] Schema validation failed:\\n${issues}`)\r\n }\r\n\r\n return result.data\r\n}\r\n\r\n/**\r\n * Parse JSON file dengan schema validation.\r\n *\r\n * @example\r\n * const pkg = parseJsonFileWithSchema(\"package.json\", PackageJsonSchema)\r\n */\r\nexport function parseJsonFileWithSchema<T>(\r\n filePath: string,\r\n schema: z.ZodType<T>\r\n): T {\r\n const { readFileSync } = require(\"node:fs\") as typeof import(\"node:fs\")\r\n const { basename } = require(\"node:path\") as typeof import(\"node:path\")\r\n\r\n let content: string\r\n try {\r\n content = readFileSync(filePath, \"utf-8\")\r\n } catch (err) {\r\n throw new Error(\r\n `[${basename(filePath)}] Could not read file: ${err instanceof Error ? err.message : String(err)}`\r\n )\r\n }\r\n\r\n return parseJsonWithSchema(content, schema, basename(filePath))\r\n}\r\n","/**\r\n * Worker/bootstrap path resolution untuk artifact release safety.\r\n * Dari monorepo checklist: \"Perkuat worker/bootstrap path agar artifact release aman\"\r\n *\r\n * Masalah: path ke worker/loader script bisa berbeda antara:\r\n * - Development (src/*.ts)\r\n * - Built dist (dist/*.js / dist/*.cjs)\r\n * - Packed npm artifact (dist/ saja, tanpa src/)\r\n *\r\n * Solusi: resolve path secara hierarchical dengan fallback yang eksplisit.\r\n */\r\n\r\nconst isBrowser = typeof window !== \"undefined\" || typeof document !== \"undefined\"\r\n\r\nconst NODE_URL = typeof window === \"undefined\" || typeof document === \"undefined\" ? \"node:url\" : null\r\nconst NODE_FS = typeof window === \"undefined\" || typeof document === \"undefined\" ? \"node:fs\" : null\r\nconst NODE_PATH = typeof window === \"undefined\" || typeof document === \"undefined\" ? \"node:path\" : null\r\n\r\nfunction getDirnameFromUrl(importMetaUrl: string): string {\r\n if (!importMetaUrl) return \"\"\r\n if (isBrowser) return \"\"\r\n\r\n try {\r\n const nodeUrl = require(NODE_URL!)\r\n const nodePath = require(NODE_PATH!)\r\n // fileURLToPath returns the file path — we need the directory\r\n return nodePath.dirname(nodeUrl.fileURLToPath(importMetaUrl))\r\n } catch {\r\n if (importMetaUrl.startsWith(\"file://\")) {\r\n const filePath = importMetaUrl.slice(7)\r\n // strip the filename to get the directory\r\n const lastSlash = filePath.lastIndexOf(\"/\")\r\n return lastSlash >= 0 ? filePath.slice(0, lastSlash) : filePath\r\n }\r\n return \"\"\r\n }\r\n}\r\n\r\nfunction resolvePath(...segments: string[]): string {\r\n if (isBrowser) return segments.join(\"/\").replace(/\\/+/g, \"/\")\r\n try {\r\n const nodePath = require(NODE_PATH!)\r\n return nodePath.resolve(...segments)\r\n } catch {\r\n return segments.join(\"/\").replace(/\\/+/g, \"/\")\r\n }\r\n}\r\n\r\nfunction existsSync(path: string): boolean {\r\n if (isBrowser) return false\r\n try {\r\n const nodeFs = require(NODE_FS!)\r\n return nodeFs.existsSync(path)\r\n } catch {\r\n return false\r\n }\r\n}\r\n\r\nexport interface WorkerPathOptions {\r\n /** Nama file worker tanpa extension */\r\n basename: string\r\n /** Import meta URL dari caller module */\r\n importMetaUrl: string\r\n /** Extensions yang dicoba secara urutan (default: [\".cjs\", \".js\", \".mjs\"]) */\r\n extensions?: string[]\r\n /** Sub-directories relatif dari runtimeDir yang dicoba */\r\n subdirs?: string[]\r\n /** Throw jika tidak ditemukan (default: true) */\r\n required?: boolean\r\n}\r\n\r\nexport interface WorkerPathResult {\r\n /** Absolute path ke worker file */\r\n path: string\r\n /** Extension yang ditemukan */\r\n extension: string\r\n /** Apakah ini dari CJS atau ESM artifact */\r\n format: \"cjs\" | \"esm\"\r\n}\r\n\r\n/**\r\n * Resolve worker/loader script path yang aman untuk release artifacts.\r\n *\r\n * Prioritas:\r\n * 1. CJS (.cjs) — untuk Node.js workers yang butuh require()\r\n * 2. JS (.js) — bundled output\r\n * 3. MJS (.mjs) — explicit ESM\r\n *\r\n * @example\r\n * const workerPath = resolveWorkerPath({\r\n * basename: \"scanner-worker\",\r\n * importMetaUrl: import.meta.url,\r\n * })\r\n * // → \"/path/to/dist/scanner-worker.cjs\"\r\n */\r\nexport function resolveWorkerPath(opts: WorkerPathOptions): WorkerPathResult {\r\n if (isBrowser) {\r\n throw new Error(\"Worker resolution not available in browser\")\r\n }\r\n\r\n const {\r\n basename,\r\n importMetaUrl,\r\n extensions = [\".cjs\", \".js\", \".mjs\"],\r\n subdirs = [\".\", \"workers\", \"lib\"],\r\n required = true,\r\n } = opts\r\n\r\n const runtimeDir = getDirnameFromUrl(importMetaUrl)\r\n\r\n // Try each subdir + extension combination\r\n for (const subdir of subdirs) {\r\n for (const ext of extensions) {\r\n const candidate = resolvePath(runtimeDir, subdir, `${basename}${ext}`)\r\n if (existsSync(candidate)) {\r\n return {\r\n path: candidate,\r\n extension: ext,\r\n format: ext === \".cjs\" ? \"cjs\" : \"esm\",\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (required) {\r\n const tried = subdirs.flatMap(d =>\r\n extensions.map(e => resolvePath(runtimeDir, d, `${basename}${e}`))\r\n )\r\n throw new Error(\r\n `[worker-resolver] Could not find worker script \"${basename}\".\\n` +\r\n `Tried:\\n${tried.map(p => ` - ${p}`).join(\"\\n\")}\\n` +\r\n `Ensure the package is built: npm run build`\r\n )\r\n }\r\n\r\n return { path: \"\", extension: \"\", format: \"cjs\" }\r\n}\r\n\r\n/**\r\n * Resolve loader path (untuk webpack/rspack/vite loaders).\r\n * Same as resolveWorkerPath but dengan nama yang lebih eksplisit.\r\n */\r\nexport function resolveLoaderPath(\r\n loaderBasename: string,\r\n importMetaUrl: string\r\n): string {\r\n return resolveWorkerPath({\r\n basename: loaderBasename,\r\n importMetaUrl,\r\n extensions: [\".cjs\", \".js\", \".mjs\"],\r\n subdirs: [\".\", \"loaders\", \"lib\"],\r\n }).path\r\n}","/**\r\n * Codegen helpers untuk tailwind-styled-v4.\r\n * Dari monorepo checklist: \"Tambahkan helper codegen bila memang relevan\"\r\n *\r\n * Berguna untuk:\r\n * - Generate component boilerplate dari config\r\n * - Generate type definitions dari variant schemas\r\n * - Generate Storybook stories dari cv() configs\r\n * - Generate migration codemods\r\n *\r\n * Design: tidak ada coupling ke compiler — hanya string manipulation.\r\n */\r\n\r\nexport interface ComponentCodegenOptions {\r\n /** Nama komponen (PascalCase) */\r\n name: string\r\n /** HTML tag */\r\n tag?: string\r\n /** Base classes */\r\n base?: string\r\n /** Variant definitions */\r\n variants?: Record<string, Record<string, string>>\r\n /** Default variants */\r\n defaultVariants?: Record<string, string>\r\n /** Compound variants */\r\n compoundVariants?: Array<{ class: string; [key: string]: string }>\r\n /** Framework target */\r\n framework?: \"react\" | \"vue\" | \"svelte\" | \"vanilla\"\r\n /** Include TypeScript types */\r\n withTypes?: boolean\r\n /** Include Storybook story */\r\n withStory?: boolean\r\n}\r\n\r\n/**\r\n * Generate cv() component boilerplate.\r\n *\r\n * @example\r\n * const code = generateComponentCode({\r\n * name: \"Button\",\r\n * tag: \"button\",\r\n * base: \"px-4 py-2 rounded font-medium\",\r\n * variants: {\r\n * intent: { primary: \"bg-blue-500 text-white\", danger: \"bg-red-500 text-white\" },\r\n * size: { sm: \"h-8 text-sm\", lg: \"h-12 text-lg\" },\r\n * },\r\n * defaultVariants: { intent: \"primary\", size: \"sm\" },\r\n * })\r\n */\r\nexport function generateComponentCode(opts: ComponentCodegenOptions): string {\r\n const {\r\n name,\r\n tag = \"div\",\r\n base = \"\",\r\n variants = {},\r\n defaultVariants = {},\r\n compoundVariants = [],\r\n framework = \"react\",\r\n withTypes = true,\r\n } = opts\r\n\r\n const variantKeys = Object.keys(variants)\r\n const lines: string[] = []\r\n\r\n // Imports\r\n if (framework === \"react\") {\r\n lines.push(`import { tw } from \"tailwind-styled-v4\"`)\r\n if (withTypes && variantKeys.length > 0) {\r\n lines.push(`import type { InferVariantProps } from \"tailwind-styled-v4\"`)\r\n }\r\n } else if (framework === \"vue\") {\r\n lines.push(`import { tw } from \"@tailwind-styled/vue\"`)\r\n } else if (framework === \"svelte\") {\r\n lines.push(`import { tw } from \"@tailwind-styled/svelte\"`)\r\n }\r\n\r\n lines.push(\"\")\r\n\r\n // Config object\r\n const configLines: string[] = [`export const ${name} = tw.${tag}({`]\r\n if (base) configLines.push(` base: \"${base}\",`)\r\n\r\n if (variantKeys.length > 0) {\r\n configLines.push(` variants: {`)\r\n for (const [key, values] of Object.entries(variants)) {\r\n configLines.push(` ${key}: {`)\r\n for (const [val, cls] of Object.entries(values)) {\r\n configLines.push(` ${val}: \"${cls}\",`)\r\n }\r\n configLines.push(` },`)\r\n }\r\n configLines.push(` },`)\r\n }\r\n\r\n if (compoundVariants.length > 0) {\r\n configLines.push(` compoundVariants: [`)\r\n for (const cv of compoundVariants) {\r\n const { class: cls, ...conditions } = cv\r\n const condStr = Object.entries(conditions)\r\n .map(([k, v]) => `${k}: \"${v}\"`)\r\n .join(\", \")\r\n configLines.push(` { ${condStr}, class: \"${cls}\" },`)\r\n }\r\n configLines.push(` ],`)\r\n }\r\n\r\n if (Object.keys(defaultVariants).length > 0) {\r\n configLines.push(` defaultVariants: {`)\r\n for (const [k, v] of Object.entries(defaultVariants)) {\r\n configLines.push(` ${k}: \"${v}\",`)\r\n }\r\n configLines.push(` },`)\r\n }\r\n\r\n configLines.push(`})`)\r\n lines.push(...configLines)\r\n\r\n // TypeScript type alias\r\n if (withTypes && variantKeys.length > 0 && framework === \"react\") {\r\n lines.push(\"\")\r\n lines.push(`export type ${name}Props = InferVariantProps<typeof ${name}> & {`)\r\n lines.push(` children?: React.ReactNode`)\r\n lines.push(` className?: string`)\r\n lines.push(`}`)\r\n }\r\n\r\n return lines.join(\"\\n\")\r\n}\r\n\r\n/**\r\n * Generate Storybook stories dari component config.\r\n *\r\n * @example\r\n * const stories = generateStorybookStory({ name: \"Button\", ... })\r\n */\r\nexport function generateStorybookStory(opts: ComponentCodegenOptions): string {\r\n const { name, variants = {}, defaultVariants = {} } = opts\r\n const lines: string[] = []\r\n\r\n lines.push(`import type { Meta, StoryObj } from \"@storybook/react\"`)\r\n lines.push(`import { ${name} } from \"./${name}\"`)\r\n lines.push(`import { generateArgTypes, generateDefaultArgs } from \"tailwind-styled-v4\"`)\r\n lines.push(``)\r\n lines.push(`const config = {`)\r\n if (Object.keys(variants).length > 0) {\r\n lines.push(` variants: ${JSON.stringify(variants, null, 2).replace(/^/gm, \" \")},`)\r\n }\r\n if (Object.keys(defaultVariants).length > 0) {\r\n lines.push(` defaultVariants: ${JSON.stringify(defaultVariants)},`)\r\n }\r\n lines.push(`}`)\r\n lines.push(``)\r\n lines.push(`const meta: Meta<typeof ${name}> = {`)\r\n lines.push(` title: \"Components/${name}\",`)\r\n lines.push(` component: ${name},`)\r\n lines.push(` argTypes: generateArgTypes(config),`)\r\n lines.push(` args: generateDefaultArgs(config),`)\r\n lines.push(`}`)\r\n lines.push(``)\r\n lines.push(`export default meta`)\r\n lines.push(`type Story = StoryObj<typeof ${name}>`)\r\n lines.push(``)\r\n lines.push(`export const Default: Story = {}`)\r\n\r\n // Generate one story per variant combo (up to 6)\r\n const variantEntries = Object.entries(variants)\r\n if (variantEntries.length > 0) {\r\n const [firstKey, firstValues] = variantEntries[0]\r\n const valueKeys = Object.keys(firstValues).slice(0, 4)\r\n for (const val of valueKeys) {\r\n const storyName = `${firstKey.charAt(0).toUpperCase()}${firstKey.slice(1)}${val.charAt(0).toUpperCase()}${val.slice(1)}`\r\n lines.push(``)\r\n lines.push(`export const ${storyName}: Story = {`)\r\n lines.push(` args: { ${firstKey}: \"${val}\" },`)\r\n lines.push(`}`)\r\n }\r\n }\r\n\r\n return lines.join(\"\\n\")\r\n}\r\n\r\n/**\r\n * Generate migration codemod untuk class renames.\r\n * Berguna saat ada class yang deprecated atau diganti nama.\r\n *\r\n * @example\r\n * const codemod = generateClassRenameCodemod({\r\n * \"btn-primary\": \"bg-blue-500 text-white\",\r\n * \"btn-danger\": \"bg-red-500 text-white\",\r\n * })\r\n */\r\nexport function generateClassRenameCodemod(\r\n renames: Record<string, string>,\r\n opts: { format?: \"jscodeshift\" | \"regex\"; filename?: string } = {}\r\n): string {\r\n const { format = \"regex\", filename = \"rename-classes.mjs\" } = opts\r\n const lines: string[] = []\r\n\r\n if (format === \"regex\") {\r\n lines.push(`#!/usr/bin/env node`)\r\n lines.push(`/**`)\r\n lines.push(` * Auto-generated class rename codemod`)\r\n lines.push(` * Usage: node ${filename} ./src`)\r\n lines.push(` */`)\r\n lines.push(`import fs from \"node:fs\"`)\r\n lines.push(`import path from \"node:path\"`)\r\n lines.push(`import { execSync } from \"node:child_process\"`)\r\n lines.push(``)\r\n lines.push(`const RENAMES = {`)\r\n for (const [from, to] of Object.entries(renames)) {\r\n lines.push(` \"${from}\": \"${to}\",`)\r\n }\r\n lines.push(`}`)\r\n lines.push(``)\r\n lines.push(`const dir = process.argv[2] ?? \".\"`)\r\n lines.push(`const files = execSync(\\`find \\${dir} -name \"*.tsx\" -o -name \"*.ts\" -o -name \"*.jsx\"\\`, { encoding: \"utf-8\" }).split(\"\\\\n\").filter(Boolean)`)\r\n lines.push(``)\r\n lines.push(`let total = 0`)\r\n lines.push(`for (const file of files) {`)\r\n lines.push(` let content = fs.readFileSync(file, \"utf-8\")`)\r\n lines.push(` let changed = false`)\r\n lines.push(` for (const [from, to] of Object.entries(RENAMES)) {`)\r\n lines.push(' const re = new RegExp(`\\\\\\\\b${from.replace(/[.*+?^${}()|[\\\\\\\\]\\\\\\\\]/g, \"\\\\\\\\$&\")}\\\\\\\\b`, \"g\")')\r\n lines.push(` if (re.test(content)) { content = content.replace(re, to); changed = true; total++ }`)\r\n lines.push(` }`)\r\n lines.push(` if (changed) fs.writeFileSync(file, content)`)\r\n lines.push(`}`)\r\n lines.push(`console.log(\\`Renamed \\${total} occurrences in \\${files.length} files\\`)`)\r\n }\r\n\r\n return lines.join(\"\\n\")\r\n}\r\n\r\n/**\r\n * Generate index barrel file untuk sebuah directory.\r\n *\r\n * @example\r\n * const barrel = generateBarrelFile([\"Button\", \"Card\", \"Input\"], \"src/components\")\r\n */\r\nexport function generateBarrelFile(\r\n exports: string[],\r\n dir: string,\r\n opts: { includeTypes?: boolean } = {}\r\n): string {\r\n const { includeTypes = true } = opts\r\n const lines: string[] = []\r\n lines.push(`// Auto-generated barrel file for ${dir}`)\r\n lines.push(`// Run: npx tsx scripts/generate-barrel.ts to regenerate`)\r\n lines.push(``)\r\n for (const name of exports) {\r\n lines.push(`export { default as ${name}, type ${name}Props } from \"./${name}\"`)\r\n if (includeTypes) {\r\n lines.push(`export type * from \"./${name}\"`)\r\n }\r\n }\r\n return lines.join(\"\\n\")\r\n}\r\n","/**\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. Local native/ folder in npm package (via \"files\": [\"native/*.node\"])\r\n * 3. Prebuilt binary dari platform-specific npm package\r\n * 4. 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. Local build candidates FIRST (native/ folder in node_modules package)\r\n // When installed via npm, \"files\": [\"native/*.node\"] includes them\r\n // Priority: 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\", \"index\"]\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(`native:${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 // 2b. 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 // 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}","/**\r\n * Shared observability contract lintas CLI, dashboard, dan devtools.\r\n * Dari execution-log: \"Stabilkan shared observability contract\"\r\n *\r\n * Semua surface inspection (CLI why, DevTools trace, dashboard /inspect)\r\n * menggunakan type contract yang sama di sini.\r\n */\r\n\r\n// ── Class Inspection Surface ─────────────────────────────────────────────────\r\n\r\nexport interface ClassProperty {\r\n property: string\r\n value: string\r\n}\r\n\r\nexport interface ClassUsageLocation {\r\n file: string\r\n line: number\r\n column: number\r\n usage: \"direct\" | \"variant\" | \"component\"\r\n}\r\n\r\n/** Unified inspection result - dipakai oleh CLI, DevTools, Dashboard */\r\nexport interface ClassInspection {\r\n className: string\r\n /** CSS properties yang di-set oleh class ini */\r\n properties: ClassProperty[]\r\n /** Konflik dengan class lain (property conflicts) */\r\n conflicts: string[]\r\n /** Files yang menggunakan class ini */\r\n usedIn: ClassUsageLocation[]\r\n /** Risk level untuk removal */\r\n risk: \"low\" | \"medium\" | \"high\"\r\n /** Estimated bundle contribution dalam bytes */\r\n bundleBytes: number\r\n /** Raw CSS string */\r\n css: string\r\n /** Variant chain (hover:, md:, dll) */\r\n variants: string[]\r\n /** Timestamp */\r\n inspectedAt: number\r\n}\r\n\r\n// ── Build Trace Surface ───────────────────────────────────────────────────────\r\n\r\nexport interface BuildPhaseTrace {\r\n phase: \"scan\" | \"compile\" | \"engine\" | \"output\"\r\n durationMs: number\r\n filesProcessed?: number\r\n classesFound?: number\r\n}\r\n\r\nexport interface BuildTrace {\r\n buildId: string\r\n totalDurationMs: number\r\n phases: BuildPhaseTrace[]\r\n classCount: number\r\n fileCount: number\r\n cacheHitRate: number\r\n mode: string\r\n timestamp: number\r\n}\r\n\r\n// ── Dashboard Metrics Surface ─────────────────────────────────────────────────\r\n\r\nexport interface DashboardMetrics {\r\n buildMs: number\r\n scanMs: number\r\n analyzeMs: number\r\n compileMs: number\r\n classCount: number\r\n fileCount: number\r\n mode: string\r\n cacheHitRate?: number\r\n nativeVersion?: string\r\n}\r\n\r\nexport interface DashboardSummary {\r\n totalBuilds: number\r\n avgBuildMs: number\r\n p95BuildMs: number\r\n avgCacheHitRate: number\r\n lastBuild: DashboardMetrics | null\r\n}\r\n\r\n// ── Observability Client ──────────────────────────────────────────────────────\r\n\r\nexport interface ObservabilityClient {\r\n /** Fetch class inspection dari dashboard */\r\n inspectClass(className: string): Promise<ClassInspection | null>\r\n /** Fetch current metrics */\r\n getMetrics(): Promise<DashboardMetrics | null>\r\n /** Fetch summary */\r\n getSummary(): Promise<DashboardSummary | null>\r\n /** Fetch build history */\r\n getHistory(): Promise<BuildTrace[]>\r\n}\r\n\r\n/** Buat observability client yang connect ke dashboard server */\r\nexport function createObservabilityClient(\r\n opts: { baseUrl?: string; timeoutMs?: number } = {}\r\n): ObservabilityClient {\r\n const { baseUrl = \"http://localhost:7421\", timeoutMs = 3000 } = opts\r\n\r\n async function fetchJson<T>(path: string): Promise<T | null> {\r\n try {\r\n const res = await fetch(`${baseUrl}${path}`, {\r\n signal: AbortSignal.timeout(timeoutMs),\r\n })\r\n if (!res.ok) return null\r\n return await res.json() as T\r\n } catch {\r\n return null\r\n }\r\n }\r\n\r\n return {\r\n async inspectClass(className: string): Promise<ClassInspection | null> {\r\n const data = await fetchJson<ClassInspection>(`/inspect?class=${encodeURIComponent(className)}`)\r\n if (!data) return null\r\n return { ...data, inspectedAt: Date.now() }\r\n },\r\n\r\n async getMetrics(): Promise<DashboardMetrics | null> {\r\n return fetchJson<DashboardMetrics>(\"/metrics\")\r\n },\r\n\r\n async getSummary(): Promise<DashboardSummary | null> {\r\n return fetchJson<DashboardSummary>(\"/summary\")\r\n },\r\n\r\n async getHistory(): Promise<BuildTrace[]> {\r\n const data = await fetchJson<BuildTrace[]>(\"/history\")\r\n return Array.isArray(data) ? data : []\r\n },\r\n }\r\n}\r\n","/**\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 // ── Cache Management (napi_bridge_cache.rs) ────────────────────────────────\r\n configureCacheBackend?: (configJson: string) => string\r\n getRecommendedCacheConfig?: (workloadType: string) => string\r\n clearAllCachesNapi?: () => void\r\n clearResolveCacheNapi?: () => void\r\n clearCompileCacheNapi?: () => void\r\n clearCssGenCacheNapi?: () => void\r\n getResolverPoolStats?: () => string\r\n clearResolverPool?: () => string\r\n getCacheOptimizationHints?: () => string\r\n estimateStreamingBatchSize?: (targetMemoryMb: number) => string\r\n\r\n // ── Parsing (napi_bridge_parsing.rs) ──────────────────────────────────────\r\n parseClass?: (input: string) => string\r\n compileClassNapi?: (input: string) => string\r\n getParseStats?: () => string\r\n clearParseCacheNapi?: () => void\r\n\r\n // ── Theme Parsing (napi_bridge_theme_parsing.rs) ───────────────────────────\r\n parseColorsNapi?: (colorsJson: string) => string | Record<string, string>\r\n parseSpacingNapi?: (spacingJson: string) => string | Record<string, string>\r\n parseTransformNapi?: (transformJson: string) => string | Record<string, string>\r\n normalizeColorNapi?: (color: string, opacity: string) => string\r\n sanitizeColorNapi?: (color: string) => string\r\n splitRgbaNapi?: (color: string) => string | { r: number; g: number; b: number; a: number }\r\n validateColorsNapi?: (colorsJson: string) => boolean\r\n validateBreakpointsNapi?: (breakpointsJson: string) => boolean\r\n runHealthCheck?: () => void\r\n\r\n // ── Watch (napi_bridge_watch.rs) ───────────────────────────────────────────\r\n watchFiles?: (rootDir: string, optionsJson?: string | null) => string\r\n stopWatching?: (handleId: number) => string\r\n getWatchEvents?: (handleId: number, maxEvents?: number | null) => string\r\n getWatchPerformance?: () => string\r\n clearWatchStats?: () => string\r\n getActiveWatches?: () => number\r\n setWatchMetrics?: (metricName: string, value: string) => string\r\n setWatchAggregation?: (aggregationType: string) => string\r\n\r\n // ── Week 6 Optimization (week6_api.rs) ────────────────────────────────────\r\n getOptimizationRecommendations?: (hitRate: number, memoryMb: number, classCount: number) => string\r\n estimateOptimalBatchSize?: (totalClasses: number, memoryAvailableMb: number) => number\r\n predictMemoryUsage?: (uniqueClasses: number, avgClassSizeBytes: number) => number\r\n recommendCachingStrategy?: (isSsr: boolean, memoryConstraintMb: number) => string\r\n benchmarkStreamingVsBuffered?: (classCount: number) => string\r\n getWeek6OptimizationStatus?: () => string\r\n\r\n // ── Scan Cache (scan_cache_api.rs) ────────────────────────────────────────\r\n scanCacheGet?: (filePath: string, contentHash: string) => string[] | null\r\n scanCachePut?: (filePath: string, contentHash: string, classes: string[], mtimeMs: number, size: number) => void\r\n scanCacheInvalidate?: (filePath: string) => void\r\n scanCacheStats?: () => { size: 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\r\n// ── Re-export all 63 wrapper functions from nativeBridgeWrappers\r\n// These provide complete type safety, error handling, and JSDoc documentation\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport {\r\n // Redis Cache Functions (40)\r\n redis_pool_connect,\r\n redis_pool_stats,\r\n redis_pool_reconnect,\r\n redis_ping,\r\n redis_get,\r\n redis_set,\r\n redis_delete,\r\n redis_exists,\r\n redis_mget,\r\n redis_mset,\r\n redis_flush_db,\r\n redis_flush_all,\r\n redis_cache_size,\r\n redis_cache_key_count,\r\n redis_cache_clear,\r\n redis_cache_hit_rate,\r\n redis_info,\r\n redis_monitor,\r\n redis_enable_cluster,\r\n redis_disable_cluster,\r\n redis_cluster_status,\r\n redis_expiration_set,\r\n redis_expiration_get,\r\n redis_subscribe,\r\n redis_publish,\r\n redis_enable_persistence,\r\n redis_disable_persistence,\r\n redis_snapshot,\r\n redis_replicate,\r\n redis_replication_status,\r\n redis_enable_cache_warming,\r\n redis_disable_cache_warming,\r\n redis_cache_sync,\r\n redis_set_eviction_policy,\r\n redis_get_eviction_policy,\r\n redis_memory_stats,\r\n redis_optimize_memory,\r\n redis_diagnose,\r\n // Watch System Functions (20)\r\n start_watch,\r\n poll_watch_events,\r\n stop_watch,\r\n watch_add_pattern,\r\n watch_remove_pattern,\r\n watch_pause,\r\n watch_resume,\r\n is_watch_running,\r\n get_watch_stats,\r\n watch_get_active_handles,\r\n watch_clear_all,\r\n register_plugin_hook,\r\n unregister_plugin_hook,\r\n emit_plugin_hook,\r\n get_plugin_hooks,\r\n // ID Registry Functions (16)\r\n id_registry_create,\r\n id_registry_generate,\r\n id_registry_lookup,\r\n id_registry_next,\r\n id_registry_destroy,\r\n id_registry_reset,\r\n id_registry_snapshot,\r\n id_registry_active_count,\r\n register_property_name,\r\n register_value_name,\r\n property_id_to_string,\r\n value_id_to_string,\r\n reverse_lookup_property,\r\n reverse_lookup_value,\r\n id_registry_export,\r\n id_registry_import,\r\n // Incremental Compilation Functions (8)\r\n process_file_change,\r\n compute_incremental_diff,\r\n create_fingerprint,\r\n inject_state_hash,\r\n prune_stale_entries,\r\n rebuild_workspace_result,\r\n scan_files_batch_native,\r\n // Theme Resolution Functions (7)\r\n resolve_variants,\r\n validate_variant_config,\r\n resolve_cascade,\r\n resolve_class_names,\r\n resolve_conflict_group,\r\n resolve_theme_value,\r\n resolve_simple_variants,\r\n} from \"./nativeBridgeWrappers\"","/**\r\n * cssGeneratorNative.ts\r\n *\r\n * High-performance CSS generator using Rust compiler via NAPI binding.\r\n * Rust-only implementation - no JavaScript fallback.\r\n */\r\n\r\nimport { getNativeBridge } from \"../nativeBridge\"\r\n\r\nexport interface GenerateCssNativeOptions {\r\n theme: Record<string, unknown>\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 { theme } = options\r\n\r\n const native = getNativeBridge()\r\n \r\n if (!native?.generateCssNative) {\r\n throw new Error(\r\n \"FATAL: Rust CSS generator (generateCssNative) is required but not available. \" +\r\n \"Ensure native binding is properly loaded. Check that native/.node binary exists.\"\r\n )\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 - no fallback, fail fast\r\n const css = native.generateCssNative(classes, themeJson)\r\n \r\n return css\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 * compilationNative.ts\r\n *\r\n * Native Rust bindings for CSS compilation and advanced features.\r\n */\r\n\r\nimport { getNativeBridge } from \"../nativeBridge\"\r\nexport type {\r\n ContainerConfig,\r\n StateCssConfig,\r\n GeneratedStateCss,\r\n} from \"../nativeBridge\"\r\n\r\n/**\r\n * Compile Tailwind classes directly to CSS.\r\n */\r\nexport function compileCssNative2(classes: string[], prefix?: string | null) {\r\n const native = getNativeBridge()\r\n if (!native?.compileCss) throw new Error(\"compileCss not available\")\r\n return native.compileCss(classes, prefix)\r\n}\r\n\r\n/**\r\n * Compile CSS using Lightning CSS post-processing.\r\n */\r\nexport function compileCssLightning(classes: string[]): string {\r\n const native = getNativeBridge()\r\n if (!native?.compileCssLightning) throw new Error(\"compileCssLightning not available\")\r\n return native.compileCssLightning(classes)\r\n}\r\n\r\n/**\r\n * Extract Tailwind state configurations from source code.\r\n */\r\nexport function extractTwStateConfigsNative(source: string, filename: string) {\r\n const native = getNativeBridge()\r\n if (!native?.extractTwStateConfigs) throw new Error(\"extractTwStateConfigs not available\")\r\n return native.extractTwStateConfigs(source, filename)\r\n}\r\n\r\n/**\r\n * Generate static state CSS from configuration.\r\n */\r\nexport function generateStaticStateCssNative(\r\n inputs: Array<{\r\n tag: string\r\n componentName: string\r\n statesJson: string\r\n }>,\r\n resolvedCss?: string | null\r\n) {\r\n const native = getNativeBridge()\r\n if (!native?.generateStaticStateCss) throw new Error(\"generateStaticStateCss not available\")\r\n return native.generateStaticStateCss(inputs, resolvedCss ?? null)\r\n}\r\n\r\n/**\r\n * Extract and generate state CSS in one step.\r\n */\r\nexport function extractAndGenerateStateCssNative(source: string, filename: string) {\r\n const native = getNativeBridge()\r\n if (!native?.extractAndGenerateStateCss) throw new Error(\"extractAndGenerateStateCss not available\")\r\n return native.extractAndGenerateStateCss(source, filename)\r\n}\r\n\r\n/**\r\n * Convert layout/utility class string to CSS declarations.\r\n */\r\nexport function layoutClassesToCss(classes: string): string {\r\n const native = getNativeBridge()\r\n if (!native?.layoutClassesToCss) throw new Error(\"layoutClassesToCss not available\")\r\n return native.layoutClassesToCss(classes)\r\n}\r\n\r\n/**\r\n * Hash content for deterministic ID generation.\r\n */\r\nexport function hashContent(input: string, algorithm: string = \"sha256\", length: number = 8): string {\r\n const native = getNativeBridge()\r\n if (!native?.hashContent) throw new Error(\"hashContent not available\")\r\n return native.hashContent(input, algorithm, length)\r\n}\r\n\r\n/**\r\n * Extract container query configurations from source.\r\n */\r\nexport function extractTwContainerConfigs(source: string) {\r\n const native = getNativeBridge()\r\n if (!native?.extractTwContainerConfigs) throw new Error(\"extractTwContainerConfigs not available\")\r\n return native.extractTwContainerConfigs(source)\r\n}\r\n\r\n/**\r\n * Parse Tailwind class into atomic CSS representation.\r\n */\r\nexport function parseAtomicClass(twClass: string): string | null {\r\n const native = getNativeBridge()\r\n if (!native?.parseAtomicClass) throw new Error(\"parseAtomicClass not available\")\r\n return native.parseAtomicClass(twClass)\r\n}\r\n\r\n/**\r\n * Generate atomic CSS from rules.\r\n */\r\nexport function generateAtomicCss(rulesJson: string): string {\r\n const native = getNativeBridge()\r\n if (!native?.generateAtomicCss) throw new Error(\"generateAtomicCss not available\")\r\n return native.generateAtomicCss(rulesJson)\r\n}\r\n\r\n/**\r\n * Convert Tailwind classes to atomic CSS classes.\r\n */\r\nexport function toAtomicClasses(twClasses: string): string {\r\n const native = getNativeBridge()\r\n if (!native?.toAtomicClasses) throw new Error(\"toAtomicClasses not available\")\r\n return native.toAtomicClasses(twClasses)\r\n}\r\n\r\n/**\r\n * Clear atomic CSS registry.\r\n */\r\nexport function clearAtomicRegistry(): void {\r\n const native = getNativeBridge()\r\n if (!native?.clearAtomicRegistry) return\r\n native.clearAtomicRegistry()\r\n}\r\n\r\n/**\r\n * Get atomic registry size.\r\n */\r\nexport function atomicRegistrySize(): number {\r\n const native = getNativeBridge()\r\n if (!native?.atomicRegistrySize) return 0\r\n return native.atomicRegistrySize()\r\n}\r\n\r\n","/**\r\n * cssCompilationNative.ts\r\n *\r\n * Phase 5.2: Advanced CSS Compilation - Complex CSS generation and transformations\r\n * Exposes 12 CSS compilation functions for animations, themes, and merging\r\n */\r\n\r\nimport { getNativeBridge } from \"../nativeBridge\"\r\n\r\n/**\r\n * Compiled CSS rule result\r\n */\r\nexport interface CompiledCssRule {\r\n selector: string\r\n declarations: string\r\n properties: Array<{ key: string; value: string }>\r\n specificity: number\r\n}\r\n\r\n/**\r\n * Compiled animation result\r\n */\r\nexport interface CompiledAnimation {\r\n animation_id: string\r\n keyframes_css: string\r\n animation_rule: string\r\n duration_ms: number\r\n}\r\n\r\n/**\r\n * Compiled theme result\r\n */\r\nexport interface CompiledTheme {\r\n selector: string\r\n variables: Array<{ name: string; value: string }>\r\n variables_css: string\r\n theme_name: string\r\n}\r\n\r\n/**\r\n * CSS compile result with metadata\r\n */\r\nexport interface CssCompileResult {\r\n css: string\r\n resolved_classes: string[]\r\n unknown_classes: string[]\r\n size_bytes: number\r\n duration_ms: number\r\n}\r\n\r\n/**\r\n * tw_merge options\r\n */\r\nexport interface TwMergeOptions {\r\n separator?: string\r\n debug?: boolean\r\n}\r\n\r\n/**\r\n * Compile a single Tailwind class to CSS rule\r\n * Full compilation pipeline: parse → resolve → generate\r\n *\r\n * @param input - Single Tailwind class (e.g., \"md:hover:bg-blue-600/50\")\r\n * @returns Compiled CSS rule as JSON\r\n *\r\n * @example\r\n * ```ts\r\n * const rule = compileClass('md:hover:bg-blue-600')\r\n * // Returns: {\r\n * // selector: '.md\\\\:hover\\\\:bg-blue-600',\r\n * // declarations: 'background-color: #2563eb;',\r\n * // ...\r\n * // }\r\n * ```\r\n */\r\nexport function compileClass(input: string): CompiledCssRule {\r\n const native = getNativeBridge()\r\n if (!native?.compile_class) throw new Error(\"compile_class not available\")\r\n const resultJson = native.compile_class(input)\r\n try {\r\n return JSON.parse(resultJson)\r\n } catch {\r\n return {\r\n selector: \"\",\r\n declarations: \"\",\r\n properties: [],\r\n specificity: 0,\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Compile multiple Tailwind classes to CSS rules\r\n * Batch processing with parallel compilation\r\n *\r\n * @param inputs - Array of Tailwind classes\r\n * @returns JSON string of compiled rules\r\n *\r\n * @example\r\n * ```ts\r\n * const rules = compileClasses(['px-4', 'bg-blue-600', 'hover:opacity-80'])\r\n * ```\r\n */\r\nexport function compileClasses(inputs: string[]): CssCompileResult {\r\n const native = getNativeBridge()\r\n if (!native?.compile_classes) throw new Error(\"compile_classes not available\")\r\n const resultJson = native.compile_classes(inputs)\r\n try {\r\n return JSON.parse(resultJson)\r\n } catch {\r\n return {\r\n css: \"\",\r\n resolved_classes: [],\r\n unknown_classes: [],\r\n size_bytes: 0,\r\n duration_ms: 0,\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * One-step: class → CSS string\r\n * Compiles and generates in single call\r\n *\r\n * @param input - Single Tailwind class\r\n * @param minify - Whether to minify output (default: false)\r\n * @returns Generated CSS string\r\n *\r\n * @example\r\n * ```ts\r\n * const css = compileToCss('bg-blue-600')\r\n * // Returns: \".bg-blue-600 { background-color: #2563eb; }\"\r\n *\r\n * const minified = compileToCss('bg-blue-600', true)\r\n * // Returns: \".bg-blue-600{background-color:#2563eb}\"\r\n * ```\r\n */\r\nexport function compileToCss(input: string, minify?: boolean): string {\r\n const native = getNativeBridge()\r\n if (!native?.compile_to_css) throw new Error(\"compile_to_css not available\")\r\n return native.compile_to_css(input, minify ?? false)\r\n}\r\n\r\n/**\r\n * Batch compile to CSS\r\n * Compiles multiple classes and generates combined CSS\r\n *\r\n * @param inputs - Array of Tailwind classes\r\n * @param minify - Whether to minify output\r\n * @returns Combined CSS string\r\n *\r\n * @example\r\n * ```ts\r\n * const css = compileToCssBatch(['px-4', 'bg-blue-600'], true)\r\n * ```\r\n */\r\nexport function compileToCssBatch(inputs: string[], minify?: boolean): string {\r\n const native = getNativeBridge()\r\n if (!native?.compile_to_css_batch) throw new Error(\"compile_to_css_batch not available\")\r\n return native.compile_to_css_batch(inputs, minify ?? false)\r\n}\r\n\r\n/**\r\n * Minify CSS string\r\n * Removes unnecessary whitespace and formatting\r\n *\r\n * @param css - Raw CSS string\r\n * @returns Minified CSS (40-60% size reduction)\r\n *\r\n * @example\r\n * ```ts\r\n * const css = \".px-4 { padding-left: 1rem; padding-right: 1rem; }\"\r\n * const minified = minifyCss(css)\r\n * // Returns: \".px-4{padding-left:1rem;padding-right:1rem}\"\r\n * ```\r\n */\r\nexport function minifyCss(css: string): string {\r\n const native = getNativeBridge()\r\n if (!native?.minify_css) throw new Error(\"minify_css not available\")\r\n return native.minify_css(css)\r\n}\r\n\r\n/**\r\n * Compile animation from from/to states\r\n * Generates @keyframes and animation rule\r\n *\r\n * @param animationName - Animation name\r\n * @param from - From state classes (e.g., \"opacity-0 scale-95\")\r\n * @param to - To state classes (e.g., \"opacity-100 scale-100\")\r\n * @returns Compiled animation with keyframes\r\n *\r\n * @example\r\n * ```ts\r\n * const anim = compileAnimation('fade-in', 'opacity-0', 'opacity-100')\r\n * console.log(anim.keyframes_css) // @keyframes fade-in { ... }\r\n * console.log(anim.animation_rule) // animation: fade-in 300ms;\r\n * ```\r\n */\r\nexport function compileAnimation(\r\n animationName: string,\r\n from: string,\r\n to: string\r\n): CompiledAnimation {\r\n const native = getNativeBridge()\r\n if (!native?.compile_animation) throw new Error(\"compile_animation not available\")\r\n const resultJson = native.compile_animation(animationName, from, to)\r\n try {\r\n return JSON.parse(resultJson)\r\n } catch {\r\n return {\r\n animation_id: \"\",\r\n keyframes_css: \"\",\r\n animation_rule: \"\",\r\n duration_ms: 0,\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Compile keyframes from stop definitions\r\n * Creates @keyframes from percentage stops\r\n *\r\n * @param name - Keyframes name\r\n * @param stopsJson - JSON array of stops: `[{\"stop\":\"0%\",\"classes\":\"opacity-0\"}...]`\r\n * @returns Compiled @keyframes rule\r\n *\r\n * @example\r\n * ```ts\r\n * const kf = compileKeyframes('slide-in', JSON.stringify([\r\n * { stop: '0%', classes: 'translate-x-full' },\r\n * { stop: '100%', classes: 'translate-x-0' }\r\n * ]))\r\n * ```\r\n */\r\nexport function compileKeyframes(name: string, stopsJson: string): CompiledAnimation {\r\n const native = getNativeBridge()\r\n if (!native?.compile_keyframes) throw new Error(\"compile_keyframes not available\")\r\n const resultJson = native.compile_keyframes(name, stopsJson)\r\n try {\r\n return JSON.parse(resultJson)\r\n } catch {\r\n return {\r\n animation_id: \"\",\r\n keyframes_css: \"\",\r\n animation_rule: \"\",\r\n duration_ms: 0,\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Compile theme to CSS variables\r\n * Converts token map to CSS custom properties\r\n *\r\n * @param tokensJson - Theme tokens as JSON\r\n * @param themeName - Theme name (\"light\", \"dark\", etc.)\r\n * @param prefix - CSS variable prefix (e.g., \"tw\" → \"--tw-color-primary\")\r\n * @returns Compiled theme with variables CSS\r\n *\r\n * @example\r\n * ```ts\r\n * const theme = compileTheme(\r\n * JSON.stringify({ colors: { blue: { 600: '#2563eb' } } }),\r\n * 'light',\r\n * 'tw'\r\n * )\r\n * // Returns CSS: :root { --tw-color-blue-600: #2563eb; }\r\n * ```\r\n */\r\nexport function compileTheme(\r\n tokensJson: string,\r\n themeName: string,\r\n prefix: string\r\n): CompiledTheme {\r\n const native = getNativeBridge()\r\n if (!native?.compile_theme) throw new Error(\"compile_theme not available\")\r\n const resultJson = native.compile_theme(tokensJson, themeName, prefix)\r\n try {\r\n return JSON.parse(resultJson)\r\n } catch {\r\n return {\r\n selector: \":root\",\r\n variables: [],\r\n variables_css: \"\",\r\n theme_name: themeName,\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Merge conflicting Tailwind classes\r\n * Resolves conflicts intelligently (last-one-wins by default)\r\n *\r\n * @param classString - Space-separated class string (e.g., \"px-4 px-8 bg-red-500 bg-blue-600\")\r\n * @returns Merged classes with conflicts resolved\r\n *\r\n * @example\r\n * ```ts\r\n * const merged = twMerge('px-4 px-8 bg-red-500 bg-blue-600')\r\n * // Returns: \"px-8 bg-blue-600\"\r\n * ```\r\n */\r\nexport function twMerge(classString: string): string {\r\n const native = getNativeBridge()\r\n if (!native?.tw_merge) throw new Error(\"tw_merge not available\")\r\n return native.tw_merge(classString)\r\n}\r\n\r\n/**\r\n * Merge multiple class strings\r\n * Combines and resolves conflicts across multiple strings\r\n *\r\n * @param classStrings - Array of class strings\r\n * @returns Merged result\r\n *\r\n * @example\r\n * ```ts\r\n * const merged = twMergeMany([\r\n * 'px-4 hover:bg-blue-600',\r\n * 'px-8 hover:opacity-80'\r\n * ])\r\n * // Returns: \"px-8 hover:bg-blue-600 hover:opacity-80\"\r\n * ```\r\n */\r\nexport function twMergeMany(classStrings: string[]): string {\r\n const native = getNativeBridge()\r\n if (!native?.tw_merge_many) throw new Error(\"tw_merge_many not available\")\r\n return native.tw_merge_many(classStrings)\r\n}\r\n\r\n/**\r\n * Merge with custom separator\r\n * Useful for non-standard class separators\r\n *\r\n * @param classString - Classes to merge\r\n * @param options - Merge options (separator, debug)\r\n * @returns Merged classes\r\n *\r\n * @example\r\n * ```ts\r\n * const merged = twMergeWithSeparator(\r\n * 'px-4,px-8,bg-red-500,bg-blue-600',\r\n * { separator: ',' }\r\n * )\r\n * ```\r\n */\r\nexport function twMergeWithSeparator(\r\n classString: string,\r\n options: TwMergeOptions\r\n): string {\r\n const native = getNativeBridge()\r\n if (!native?.tw_merge_with_separator)\r\n throw new Error(\"tw_merge_with_separator not available\")\r\n const opts = {\r\n separator: options.separator,\r\n debug: options.debug,\r\n }\r\n return native.tw_merge_with_separator(classString, opts)\r\n}\r\n\r\n/**\r\n * Merge many with custom separator\r\n * Batch merge with custom separator\r\n *\r\n * @param classStrings - Array of class strings\r\n * @param options - Merge options\r\n * @returns Merged result\r\n */\r\nexport function twMergeManyWithSeparator(\r\n classStrings: string[],\r\n options: TwMergeOptions\r\n): string {\r\n const native = getNativeBridge()\r\n if (!native?.tw_merge_many_with_separator)\r\n throw new Error(\"tw_merge_many_with_separator not available\")\r\n const opts = {\r\n separator: options.separator,\r\n debug: options.debug,\r\n }\r\n return native.tw_merge_many_with_separator(classStrings, opts)\r\n}\r\n\r\n/**\r\n * Raw merge from class lists\r\n * Direct merge without preprocessing\r\n *\r\n * @param classLists - Array of class lists\r\n * @returns Merged classes\r\n *\r\n * @example\r\n * ```ts\r\n * const merged = twMergeRaw(['px-4 px-8', 'bg-red bg-blue'])\r\n * ```\r\n */\r\nexport function twMergeRaw(classLists: string[]): string {\r\n const native = getNativeBridge()\r\n if (!native?.tw_merge_raw) throw new Error(\"tw_merge_raw not available\")\r\n return native.tw_merge_raw(classLists)\r\n}\r\n\r\n","/**\r\n * idRegistryNative.ts\r\n *\r\n * Phase 5.2: ID Registry Management - Efficient ID generation and lookup\r\n * Exposes 16 ID registry functions for deterministic class/component identification\r\n */\r\n\r\nimport { getNativeBridge } from \"../nativeBridge\"\r\n\r\n/**\r\n * Registry snapshot data\r\n */\r\nexport interface RegistrySnapshot {\r\n handle: number\r\n next_id: number\r\n entries: Array<{ name: string; id: number }>\r\n total_entries: number\r\n}\r\n\r\n/**\r\n * Create a new ID generator\r\n * Returns a handle to be used in subsequent operations\r\n *\r\n * @returns Generator handle (u32)\r\n *\r\n * @example\r\n * ```ts\r\n * const handle = idRegistryCreate()\r\n * // Use handle for all subsequent operations\r\n * try {\r\n * const id = idRegistryGenerate(handle, 'MyComponent')\r\n * // ... use id ...\r\n * } finally {\r\n * idRegistryDestroy(handle) // Clean up\r\n * }\r\n * ```\r\n */\r\nexport function idRegistryCreate(): number {\r\n const native = getNativeBridge()\r\n if (!native?.id_registry_create) throw new Error(\"id_registry_create not available\")\r\n return native.id_registry_create()\r\n}\r\n\r\n/**\r\n * Generate a new ID for a name\r\n * Same name always returns same ID (deterministic)\r\n *\r\n * @param handle - Generator handle from idRegistryCreate()\r\n * @param name - Identifier name (e.g., component name, class name)\r\n * @returns Generated ID\r\n *\r\n * @example\r\n * ```ts\r\n * const handle = idRegistryCreate()\r\n * const id1 = idRegistryGenerate(handle, 'Button') // Returns 1\r\n * const id2 = idRegistryGenerate(handle, 'Button') // Returns 1 (same)\r\n * const id3 = idRegistryGenerate(handle, 'Card') // Returns 2 (different)\r\n * ```\r\n */\r\nexport function idRegistryGenerate(handle: number, name: string): number {\r\n const native = getNativeBridge()\r\n if (!native?.id_registry_generate) throw new Error(\"id_registry_generate not available\")\r\n return native.id_registry_generate(handle, name)\r\n}\r\n\r\n/**\r\n * Lookup existing ID for a name\r\n * Returns -1 if not found\r\n *\r\n * @param handle - Generator handle\r\n * @param name - Name to look up\r\n * @returns ID if found, -1 if not found\r\n *\r\n * @example\r\n * ```ts\r\n * const id = idRegistryLookup(handle, 'Button')\r\n * if (id !== -1) {\r\n * console.log(`Button has ID: ${id}`)\r\n * } else {\r\n * console.log('Button not in registry yet')\r\n * }\r\n * ```\r\n */\r\nexport function idRegistryLookup(handle: number, name: string): number {\r\n const native = getNativeBridge()\r\n if (!native?.id_registry_lookup) throw new Error(\"id_registry_lookup not available\")\r\n return native.id_registry_lookup(handle, name)\r\n}\r\n\r\n/**\r\n * Get the next ID that would be assigned\r\n * Useful for knowing how many unique IDs exist\r\n *\r\n * @param handle - Generator handle\r\n * @returns Next available ID\r\n *\r\n * @example\r\n * ```ts\r\n * const handle = idRegistryCreate()\r\n * idRegistryGenerate(handle, 'Button')\r\n * idRegistryGenerate(handle, 'Card')\r\n * const nextId = idRegistryNext(handle) // Returns 2 (next available)\r\n * ```\r\n */\r\nexport function idRegistryNext(handle: number): number {\r\n const native = getNativeBridge()\r\n if (!native?.id_registry_next) throw new Error(\"id_registry_next not available\")\r\n return native.id_registry_next(handle)\r\n}\r\n\r\n/**\r\n * Destroy a registry (clean up resources)\r\n * Must be called when done with registry\r\n *\r\n * @param handle - Generator handle\r\n *\r\n * @example\r\n * ```ts\r\n * const handle = idRegistryCreate()\r\n * try {\r\n * // Use registry\r\n * } finally {\r\n * idRegistryDestroy(handle)\r\n * }\r\n * ```\r\n */\r\nexport function idRegistryDestroy(handle: number): void {\r\n const native = getNativeBridge()\r\n if (!native?.id_registry_destroy) return\r\n native.id_registry_destroy(handle)\r\n}\r\n\r\n/**\r\n * Reset registry to initial state\r\n * Clears all entries but reuses handle\r\n *\r\n * @param handle - Generator handle\r\n *\r\n * @example\r\n * ```ts\r\n * const handle = idRegistryCreate()\r\n * idRegistryGenerate(handle, 'Component1')\r\n * idRegistryGenerate(handle, 'Component2')\r\n * idRegistryReset(handle) // Clear all\r\n * const id = idRegistryNext(handle) // Back to 0\r\n * ```\r\n */\r\nexport function idRegistryReset(handle: number): void {\r\n const native = getNativeBridge()\r\n if (!native?.id_registry_reset) return\r\n native.id_registry_reset(handle)\r\n}\r\n\r\n/**\r\n * Get snapshot of current registry state\r\n * Useful for serialization/debugging\r\n *\r\n * @param handle - Generator handle\r\n * @returns Snapshot with all entries\r\n *\r\n * @example\r\n * ```ts\r\n * const handle = idRegistryCreate()\r\n * idRegistryGenerate(handle, 'Button')\r\n * idRegistryGenerate(handle, 'Card')\r\n * const snapshot = idRegistrySnapshot(handle)\r\n * console.log(JSON.stringify(snapshot, null, 2))\r\n * ```\r\n */\r\nexport function idRegistrySnapshot(handle: number): RegistrySnapshot {\r\n const native = getNativeBridge()\r\n if (!native?.id_registry_snapshot) throw new Error(\"id_registry_snapshot not available\")\r\n const snapshotJson = native.id_registry_snapshot(handle)\r\n try {\r\n return JSON.parse(snapshotJson)\r\n } catch {\r\n return {\r\n handle,\r\n next_id: 0,\r\n entries: [],\r\n total_entries: 0,\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Get count of active registries\r\n * Useful for monitoring resource usage\r\n *\r\n * @returns Number of active generator handles\r\n *\r\n * @example\r\n * ```ts\r\n * console.log(`Active registries: ${idRegistryActiveCount()}`)\r\n * ```\r\n */\r\nexport function idRegistryActiveCount(): number {\r\n const native = getNativeBridge()\r\n if (!native?.id_registry_active_count) throw new Error(\"id_registry_active_count not available\")\r\n return native.id_registry_active_count()\r\n}\r\n\r\n/**\r\n * Register a property name with global registry\r\n * Maps property names to consistent IDs\r\n *\r\n * @param propertyName - Property name (e.g., \"background-color\")\r\n * @returns Assigned property ID\r\n *\r\n * @example\r\n * ```ts\r\n * const bgColorId = registerPropertyName('background-color')\r\n * const paddingId = registerPropertyName('padding')\r\n * ```\r\n */\r\nexport function registerPropertyName(propertyName: string): number {\r\n const native = getNativeBridge()\r\n if (!native?.register_property_name)\r\n throw new Error(\"register_property_name not available\")\r\n return native.register_property_name(propertyName)\r\n}\r\n\r\n/**\r\n * Register a value name with global registry\r\n * Maps values to consistent IDs\r\n *\r\n * @param valueName - Value name (e.g., \"blue-600\")\r\n * @returns Assigned value ID\r\n *\r\n * @example\r\n * ```ts\r\n * const blueId = registerValueName('blue-600')\r\n * const redId = registerValueName('red-500')\r\n * ```\r\n */\r\nexport function registerValueName(valueName: string): number {\r\n const native = getNativeBridge()\r\n if (!native?.register_value_name) throw new Error(\"register_value_name not available\")\r\n return native.register_value_name(valueName)\r\n}\r\n\r\n/**\r\n * Convert property ID back to name\r\n * Reverse lookup for serialized data\r\n *\r\n * @param propertyId - Property ID\r\n * @returns Property name or empty string if not found\r\n *\r\n * @example\r\n * ```ts\r\n * const bgColorId = registerPropertyName('background-color')\r\n * const name = propertyIdToString(bgColorId)\r\n * console.log(name) // \"background-color\"\r\n * ```\r\n */\r\nexport function propertyIdToString(propertyId: number): string {\r\n const native = getNativeBridge()\r\n if (!native?.property_id_to_string) throw new Error(\"property_id_to_string not available\")\r\n return native.property_id_to_string(propertyId)\r\n}\r\n\r\n/**\r\n * Convert value ID back to name\r\n * Reverse lookup for serialized data\r\n *\r\n * @param valueId - Value ID\r\n * @returns Value name or empty string if not found\r\n *\r\n * @example\r\n * ```ts\r\n * const blueId = registerValueName('blue-600')\r\n * const value = valueIdToString(blueId)\r\n * console.log(value) // \"blue-600\"\r\n * ```\r\n */\r\nexport function valueIdToString(valueId: number): string {\r\n const native = getNativeBridge()\r\n if (!native?.value_id_to_string) throw new Error(\"value_id_to_string not available\")\r\n return native.value_id_to_string(valueId)\r\n}\r\n\r\n/**\r\n * Reverse lookup: find property by ID\r\n * Alternative way to look up property names\r\n *\r\n * @param propertyId - Property ID to look up\r\n * @returns Property name\r\n */\r\nexport function reverseLookupProperty(propertyId: number): string {\r\n const native = getNativeBridge()\r\n if (!native?.reverse_lookup_property)\r\n throw new Error(\"reverse_lookup_property not available\")\r\n return native.reverse_lookup_property(propertyId)\r\n}\r\n\r\n/**\r\n * Reverse lookup: find value by ID\r\n * Alternative way to look up value names\r\n *\r\n * @param valueId - Value ID to look up\r\n * @returns Value name\r\n */\r\nexport function reverseLookupValue(valueId: number): string {\r\n const native = getNativeBridge()\r\n if (!native?.reverse_lookup_value) throw new Error(\"reverse_lookup_value not available\")\r\n return native.reverse_lookup_value(valueId)\r\n}\r\n\r\n/**\r\n * Export registry state for persistence\r\n * Useful for saving/restoring registry data\r\n *\r\n * @param handle - Generator handle\r\n * @returns Serialized registry state\r\n *\r\n * @example\r\n * ```ts\r\n * const exported = idRegistryExport(handle)\r\n * // Save to file/database\r\n * ```\r\n */\r\nexport function idRegistryExport(handle: number): string {\r\n const native = getNativeBridge()\r\n if (!native?.id_registry_export) throw new Error(\"id_registry_export not available\")\r\n return native.id_registry_export(handle)\r\n}\r\n\r\n/**\r\n * Import registry state\r\n * Restore registry from saved state\r\n *\r\n * @param importedData - Serialized registry data\r\n * @returns New handle with imported data\r\n *\r\n * @example\r\n * ```ts\r\n * const handle = idRegistryImport(savedData)\r\n * // Registry restored with same IDs\r\n * ```\r\n */\r\nexport function idRegistryImport(importedData: string): number {\r\n const native = getNativeBridge()\r\n if (!native?.id_registry_import) throw new Error(\"id_registry_import not available\")\r\n return native.id_registry_import(importedData)\r\n}\r\n\r\n","/**\r\n * streamingNative.ts\r\n *\r\n * Phase 5.1: Streaming & Incremental Processing - Handle file changes efficiently\r\n * Exposes 8 functions for real-time incremental compilation\r\n */\r\n\r\nimport { getNativeBridge } from \"../nativeBridge\"\r\n\r\n/**\r\n * File change notification\r\n */\r\nexport interface FileChangeEvent {\r\n file_path: string\r\n event_type: \"added\" | \"modified\" | \"deleted\"\r\n old_content?: string\r\n new_content?: string\r\n timestamp_ms: number\r\n}\r\n\r\n/**\r\n * Processed file change result\r\n */\r\nexport interface ProcessedFileChange {\r\n file_path: string\r\n status: \"processed\" | \"skipped\" | \"error\"\r\n old_classes: string[]\r\n new_classes: string[]\r\n added_classes: string[]\r\n removed_classes: string[]\r\n changed: boolean\r\n fingerprint: string\r\n error?: string\r\n}\r\n\r\n/**\r\n * Diff between two scan results\r\n */\r\nexport interface FileDiff {\r\n added_files: string[]\r\n removed_files: string[]\r\n modified_files: string[]\r\n added_classes: string[]\r\n removed_classes: string[]\r\n total_changes: number\r\n}\r\n\r\n/**\r\n * File fingerprint for change detection\r\n */\r\nexport interface FileFingerprint {\r\n file_path: string\r\n content_hash: string\r\n size_bytes: number\r\n mtime_ms: number\r\n class_hash: string\r\n signature: string\r\n}\r\n\r\n/**\r\n * Incremental diff result\r\n */\r\nexport interface IncrementalDiffResult {\r\n is_changed: boolean\r\n changes_count: number\r\n diff: FileDiff\r\n processing_time_ms: number\r\n}\r\n\r\n/**\r\n * State injection result\r\n */\r\nexport interface StateInjectionResult {\r\n injected: boolean\r\n state_hash: string\r\n affected_files: number\r\n total_injected_bytes: number\r\n}\r\n\r\n/**\r\n * Stale entry pruning result\r\n */\r\nexport interface PruneResult {\r\n entries_before: number\r\n entries_after: number\r\n entries_removed: number\r\n freed_bytes: number\r\n}\r\n\r\n/**\r\n * Rebuilt workspace result\r\n */\r\nexport interface RebuildWorkspaceResult {\r\n total_files_scanned: number\r\n total_classes_found: number\r\n unique_classes: number\r\n build_time_ms: number\r\n files_with_changes: number\r\n}\r\n\r\n/**\r\n * Process a single file change event\r\n * Called when a file is added, modified, or deleted\r\n *\r\n * @param fileChangeJson - JSON string describing the file change\r\n * @returns Processing result with class changes\r\n *\r\n * @example\r\n * ```ts\r\n * const change = processFileChange(JSON.stringify({\r\n * file_path: 'src/Button.tsx',\r\n * event_type: 'modified',\r\n * new_content: 'export const Button = ...',\r\n * timestamp_ms: Date.now()\r\n * }))\r\n *\r\n * console.log('Added classes:', change.added_classes)\r\n * console.log('Removed classes:', change.removed_classes)\r\n * ```\r\n */\r\nexport function processFileChange(fileChangeJson: string): ProcessedFileChange {\r\n const native = getNativeBridge()\r\n if (!native?.process_file_change) throw new Error(\"process_file_change not available\")\r\n const resultJson = native.process_file_change(fileChangeJson)\r\n try {\r\n return JSON.parse(resultJson)\r\n } catch {\r\n return {\r\n file_path: \"\",\r\n status: \"error\",\r\n old_classes: [],\r\n new_classes: [],\r\n added_classes: [],\r\n removed_classes: [],\r\n changed: false,\r\n fingerprint: \"\",\r\n error: \"Failed to parse result\",\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Compute incremental diff between old and new scan results\r\n * Efficient way to identify only what changed\r\n *\r\n * @param oldScanJson - JSON string of previous scan result\r\n * @param newScanJson - JSON string of new scan result\r\n * @returns Diff showing what changed\r\n *\r\n * @example\r\n * ```ts\r\n * const oldResult = scanWorkspace('./src')\r\n * // ... files changed ...\r\n * const newResult = scanWorkspace('./src')\r\n *\r\n * const diff = computeIncrementalDiff(\r\n * JSON.stringify(oldResult),\r\n * JSON.stringify(newResult)\r\n * )\r\n *\r\n * if (diff.is_changed) {\r\n * console.log(`${diff.changes_count} files changed`)\r\n * console.log('Added:', diff.diff.added_classes)\r\n * console.log('Removed:', diff.diff.removed_classes)\r\n * }\r\n * ```\r\n */\r\nexport function computeIncrementalDiff(\r\n oldScanJson: string,\r\n newScanJson: string\r\n): IncrementalDiffResult {\r\n const native = getNativeBridge()\r\n if (!native?.compute_incremental_diff)\r\n throw new Error(\"compute_incremental_diff not available\")\r\n const resultJson = native.compute_incremental_diff(oldScanJson, newScanJson)\r\n try {\r\n return JSON.parse(resultJson)\r\n } catch {\r\n return {\r\n is_changed: false,\r\n changes_count: 0,\r\n diff: {\r\n added_files: [],\r\n removed_files: [],\r\n modified_files: [],\r\n added_classes: [],\r\n removed_classes: [],\r\n total_changes: 0,\r\n },\r\n processing_time_ms: 0,\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Create a fingerprint of a file for change detection\r\n * Use fingerprints to quickly check if file needs reprocessing\r\n *\r\n * @param filePath - Path to file\r\n * @param fileContent - File content\r\n * @returns File fingerprint\r\n *\r\n * @example\r\n * ```ts\r\n * const fingerprint = createFingerprint('src/Button.tsx', fileContent)\r\n * // Store fingerprint, check later if content changed\r\n * const newFingerprint = createFingerprint('src/Button.tsx', newContent)\r\n * if (fingerprint.signature !== newFingerprint.signature) {\r\n * // Content changed, needs reprocessing\r\n * }\r\n * ```\r\n */\r\nexport function createFingerprint(filePath: string, fileContent: string): FileFingerprint {\r\n const native = getNativeBridge()\r\n if (!native?.create_fingerprint) throw new Error(\"create_fingerprint not available\")\r\n const fingerprintJson = native.create_fingerprint(filePath, fileContent)\r\n try {\r\n return JSON.parse(fingerprintJson)\r\n } catch {\r\n return {\r\n file_path: filePath,\r\n content_hash: \"\",\r\n size_bytes: fileContent.length,\r\n mtime_ms: Date.now(),\r\n class_hash: \"\",\r\n signature: \"\",\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Inject state hash into compiled CSS\r\n * Marks CSS with version/state hash for cache busting\r\n *\r\n * @param css - Raw CSS string\r\n * @param stateHash - State hash to inject\r\n * @returns Modified CSS with injected state\r\n *\r\n * @example\r\n * ```ts\r\n * const css = compileCssNative2(['px-4', 'bg-blue-600'])\r\n * const withState = injectStateHash(css, 'v5-hash-123')\r\n * // CSS now includes version marker for cache control\r\n * ```\r\n */\r\nexport function injectStateHash(css: string, stateHash: string): StateInjectionResult {\r\n const native = getNativeBridge()\r\n if (!native?.inject_state_hash) throw new Error(\"inject_state_hash not available\")\r\n const resultJson = native.inject_state_hash(css, stateHash)\r\n try {\r\n return JSON.parse(resultJson)\r\n } catch {\r\n return {\r\n injected: false,\r\n state_hash: stateHash,\r\n affected_files: 0,\r\n total_injected_bytes: 0,\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Prune stale entries from cache\r\n * Removes old/unused cache entries to free memory\r\n *\r\n * @param maxAgeSeconds - Remove entries older than this many seconds\r\n * @param maxEntries - Keep only this many most-recent entries\r\n * @returns Result of pruning operation\r\n *\r\n * @example\r\n * ```ts\r\n * // Remove cache entries older than 1 hour, keep max 10000 entries\r\n * const result = pruneStaleCacheEntries(3600, 10000)\r\n * console.log(`Freed ${result.freed_bytes / 1024}KB`)\r\n * ```\r\n */\r\nexport function pruneStaleCacheEntries(maxAgeSeconds: number, maxEntries: number): PruneResult {\r\n const native = getNativeBridge()\r\n if (!native?.prune_stale_entries) throw new Error(\"prune_stale_entries not available\")\r\n const resultJson = native.prune_stale_entries(maxAgeSeconds, maxEntries)\r\n try {\r\n return JSON.parse(resultJson)\r\n } catch {\r\n return {\r\n entries_before: 0,\r\n entries_after: 0,\r\n entries_removed: 0,\r\n freed_bytes: 0,\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Rebuild workspace result from scratch\r\n * Useful after major configuration changes\r\n *\r\n * @param rootDir - Root directory to scan\r\n * @param extensions - File extensions to scan (e.g., [\".tsx\", \".ts\"])\r\n * @returns Rebuilt workspace result\r\n *\r\n * @example\r\n * ```ts\r\n * const result = rebuildWorkspaceResult('./src', ['.tsx', '.ts'])\r\n * console.log(`Found ${result.unique_classes} unique classes`)\r\n * console.log(`${result.files_with_changes} files had changes`)\r\n * ```\r\n */\r\nexport function rebuildWorkspaceResult(\r\n rootDir: string,\r\n extensions?: string[]\r\n): RebuildWorkspaceResult {\r\n const native = getNativeBridge()\r\n if (!native?.rebuild_workspace_result)\r\n throw new Error(\"rebuild_workspace_result not available\")\r\n const resultJson = native.rebuild_workspace_result(rootDir, extensions || [])\r\n try {\r\n return JSON.parse(resultJson)\r\n } catch {\r\n return {\r\n total_files_scanned: 0,\r\n total_classes_found: 0,\r\n unique_classes: 0,\r\n build_time_ms: 0,\r\n files_with_changes: 0,\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Scan a single file with incremental state\r\n * Returns only new/changed classes since last scan\r\n *\r\n * @param filePath - Path to file\r\n * @param fileContent - File content\r\n * @returns Updated classes and change status\r\n *\r\n * @example\r\n * ```ts\r\n * // On file change, get only what changed\r\n * const file = scanFileNative('src/Button.tsx', newContent)\r\n * if (file.changed) {\r\n * console.log('Added:', file.added_classes)\r\n * console.log('Removed:', file.removed_classes)\r\n * }\r\n * ```\r\n */\r\nexport function scanFileNative(\r\n filePath: string,\r\n fileContent: string\r\n): {\r\n file: string\r\n classes: string[]\r\n added_classes: string[]\r\n removed_classes: string[]\r\n changed: boolean\r\n} {\r\n const native = getNativeBridge()\r\n if (!native?.scan_file_native) throw new Error(\"scan_file_native not available\")\r\n const resultJson = native.scan_file_native(filePath, fileContent)\r\n try {\r\n return JSON.parse(resultJson)\r\n } catch {\r\n return {\r\n file: filePath,\r\n classes: [],\r\n added_classes: [],\r\n removed_classes: [],\r\n changed: false,\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Scan multiple files in batch with incremental state\r\n * Efficient batch processing of file changes\r\n *\r\n * @param filesJson - JSON array of {file, content} objects\r\n * @returns Results for each file\r\n *\r\n * @example\r\n * ```ts\r\n * const files = [\r\n * { file: 'src/Button.tsx', content: newButtonContent },\r\n * { file: 'src/Card.tsx', content: newCardContent }\r\n * ]\r\n * const results = scanFilesBatchNative(JSON.stringify(files))\r\n * ```\r\n */\r\nexport function scanFilesBatchNative(\r\n filesJson: string\r\n): Array<{\r\n file: string\r\n classes: string[]\r\n changed: boolean\r\n}> {\r\n const native = getNativeBridge()\r\n if (!native?.scan_files_batch_native)\r\n throw new Error(\"scan_files_batch_native not available\")\r\n const resultJson = native.scan_files_batch_native(filesJson)\r\n try {\r\n return JSON.parse(resultJson)\r\n } catch {\r\n return []\r\n }\r\n}\r\n\r\n","/**\r\n * tailwindEngine.ts\r\n *\r\n * Pipeline: classes[] → Rust CSS Compiler (only path)\r\n *\r\n * The Rust compiler provides 40-60% performance improvement over pure JavaScript.\r\n * No JavaScript fallback - fail fast if native binding 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// Deprecated - Kept for reference only, not used\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// The JavaScript Tailwind engine path has been removed in favor of Rust-only\r\n// compilation. The code below is legacy and can be removed in future cleanup.\r\n\r\n// export async function generateRawCss(...) { /* removed */ }\r\n// export function loadTailwindEngine() { /* removed */ }\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: Rust CSS Compiler (Only Path - no JS fallback)\r\n const theme = getThemeConfig()\r\n rawCss = await generateCssNativeImpl(unique, { theme })\r\n usedRustCompiler = true\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","/**\r\n * Compiler Sub-entry Point\r\n * \r\n * Exports CSS generation and compilation functionality.\r\n * - CSS generation with caching\r\n * - Compilation of classes to CSS\r\n * - ID registry management\r\n * - Streaming and incremental processing\r\n */\r\n\r\nexport {\r\n generateCssNative,\r\n getCacheStats,\r\n clearThemeCache,\r\n} from './cssGeneratorNative'\r\n\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\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\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\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\nexport { runCssPipeline } from './tailwindEngine'\r\n","/**\r\n * Parser Sub-entry Point\r\n * \r\n * Exports class parsing and extraction functionality.\r\n * - Tailwind class parsing\r\n * - Class extraction from source\r\n * - Class normalization and deduplication\r\n * - Component analysis\r\n */\r\n\r\nimport { getNativeBridge } from '../nativeBridge'\r\n\r\n// ============================================================================\r\n// PARSING FUNCTIONS\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 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\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// 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// BATCH OPERATIONS\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// DIFF & MERGING\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\n// Re-export types if any\r\nexport type { ClassExtractResult, ComponentMetadata } from '../nativeBridge'\r\n","/**\r\n * analyzerNative.ts\r\n *\r\n * Native Rust bindings for CSS analysis and optimization.\r\n */\r\n\r\nimport { getNativeBridge } from \"../nativeBridge\"\r\nexport type {\r\n DeadCodeResult,\r\n ClassUsageItem,\r\n ContainerConfig,\r\n HoistResult,\r\n VariantTableResult,\r\n ClassifyResult,\r\n MergeResult,\r\n ProcessedCssResult,\r\n} from \"../nativeBridge\"\r\n\r\n/**\r\n * Detect dead CSS selectors in generated CSS.\r\n */\r\nexport function detectDeadCode(scanResultJson: string, css: string) {\r\n const native = getNativeBridge()\r\n if (!native?.detectDeadCode) throw new Error(\"detectDeadCode not available\")\r\n return native.detectDeadCode(scanResultJson, css)\r\n}\r\n\r\n/**\r\n * Analyze class usage across scanned files.\r\n */\r\nexport function analyzeClassUsageNative(classes: string[], scanResultJson: string, css: string) {\r\n const native = getNativeBridge()\r\n if (!native?.analyzeClassUsage) throw new Error(\"analyzeClassUsage not available\")\r\n return native.analyzeClassUsage(classes, scanResultJson, css)\r\n}\r\n\r\n/**\r\n * Analyze entire class list and generate CSS.\r\n */\r\nexport function analyzeClassesNative(filesJson: string, cwd: string, flags?: number) {\r\n const native = getNativeBridge()\r\n if (!native?.analyzeClasses) throw new Error(\"analyzeClasses not available\")\r\n return native.analyzeClasses(filesJson, cwd, flags ?? 0)\r\n}\r\n\r\n/**\r\n * Analyze React Server Component requirements.\r\n */\r\nexport function analyzeRscNative(source: string, filename: string) {\r\n const native = getNativeBridge()\r\n if (!native?.analyzeRsc) throw new Error(\"analyzeRsc not available\")\r\n return native.analyzeRsc(source, filename)\r\n}\r\n\r\n/**\r\n * Optimize CSS by removing dead code and minifying.\r\n */\r\nexport function optimizeCssNative(css: string) {\r\n const native = getNativeBridge()\r\n if (!native?.processTailwindCssLightning) throw new Error(\"processTailwindCssLightning not available\")\r\n const result = native.processTailwindCssLightning(css)\r\n return {\r\n css: result.css,\r\n originalSize: css.length,\r\n optimizedSize: result.size_bytes,\r\n reductionPercentage: ((css.length - result.size_bytes) / css.length) * 100,\r\n }\r\n}\r\n\r\n/**\r\n * Process Tailwind CSS with Lightning CSS post-processing.\r\n */\r\nexport function processTailwindCssLightning(css: string) {\r\n const native = getNativeBridge()\r\n if (!native?.processTailwindCssLightning) throw new Error(\"processTailwindCssLightning not available\")\r\n return native.processTailwindCssLightning(css)\r\n}\r\n\r\n/**\r\n * Eliminate dead CSS selectors.\r\n */\r\nexport function eliminateDeadCssNative(css: string, deadClasses: string[]): string {\r\n const native = getNativeBridge()\r\n if (!native?.eliminateDeadCss) throw new Error(\"eliminateDeadCss not available\")\r\n return native.eliminateDeadCss(css, deadClasses)\r\n}\r\n\r\n/**\r\n * Hoist components from source code.\r\n */\r\nexport function hoistComponentsNative(source: string) {\r\n const native = getNativeBridge()\r\n if (!native?.hoistComponents) throw new Error(\"hoistComponents not available\")\r\n return native.hoistComponents(source)\r\n}\r\n\r\n/**\r\n * Compile variant configuration table.\r\n */\r\nexport function compileVariantTableNative(configJson: string) {\r\n const native = getNativeBridge()\r\n if (!native?.compileVariantTable) throw new Error(\"compileVariantTable not available\")\r\n return native.compileVariantTable(configJson)\r\n}\r\n\r\n/**\r\n * Classify and sort classes by bucket.\r\n */\r\nexport function classifyAndSortClassesNative(classes: string[]) {\r\n const native = getNativeBridge()\r\n if (!native?.classifyAndSortClasses) throw new Error(\"classifyAndSortClasses not available\")\r\n return native.classifyAndSortClasses(classes)\r\n}\r\n\r\n/**\r\n * Merge CSS declarations from multiple chunks.\r\n */\r\nexport function mergeCssDeclarationsNative(cssChunks: string[]) {\r\n const native = getNativeBridge()\r\n if (!native?.mergeCssDeclarations) throw new Error(\"mergeCssDeclarations not available\")\r\n return native.mergeCssDeclarations(cssChunks)\r\n}\r\n","/**\r\n * themeResolutionNative.ts\r\n *\r\n * Phase 5.1: Theme Resolution Extended - Advanced theme configuration handling\r\n * Exposes 7 theme resolution functions for complex Tailwind configurations\r\n */\r\n\r\nimport { getNativeBridge } from \"../nativeBridge\"\r\n\r\n/**\r\n * Validation result for theme config\r\n */\r\nexport interface ThemeValidationResult {\r\n is_valid: boolean\r\n errors: string[]\r\n warnings: string[]\r\n suggestions: string[]\r\n}\r\n\r\n/**\r\n * Resolved variant configuration\r\n */\r\nexport interface ResolvedVariantConfig {\r\n variants: string[]\r\n supported: string[]\r\n deprecated: string[]\r\n conflicting: string[]\r\n}\r\n\r\n/**\r\n * Theme cascade resolution result\r\n */\r\nexport interface ThemeCascadeResult {\r\n base_theme: Record<string, unknown>\r\n user_overrides: Record<string, unknown>\r\n merged_theme: Record<string, unknown>\r\n conflict_resolutions: Array<{\r\n key: string\r\n base_value: unknown\r\n override_value: unknown\r\n resolution: \"override\" | \"merge\" | \"error\"\r\n }>\r\n}\r\n\r\n/**\r\n * Class name resolution from theme\r\n */\r\nexport interface ResolvedClassName {\r\n class_name: string\r\n property: string\r\n value: string\r\n from_theme_path: string\r\n is_responsive: boolean\r\n variants: string[]\r\n}\r\n\r\n/**\r\n * Conflict group information\r\n */\r\nexport interface ConflictGroupInfo {\r\n group_name: string\r\n conflicting_classes: string[]\r\n description: string\r\n resolution_strategy: string\r\n}\r\n\r\n/**\r\n * Get all resolved variants from theme configuration\r\n * Parses theme config and returns all variant prefixes\r\n *\r\n * @param configJson - JSON string of theme configuration\r\n * @returns Resolved variants with metadata\r\n *\r\n * @example\r\n * ```ts\r\n * const config = {\r\n * screens: { md: '768px', lg: '1024px' },\r\n * state: { hover: '&:hover', focus: '&:focus' }\r\n * }\r\n * const variants = resolveVariants(JSON.stringify(config))\r\n * console.log(variants.variants) // ['md', 'lg', 'hover', 'focus', ...]\r\n * ```\r\n */\r\nexport function resolveVariants(configJson: string): ResolvedVariantConfig {\r\n const native = getNativeBridge()\r\n if (!native?.resolve_variants) throw new Error(\"resolve_variants not available\")\r\n const resultJson = native.resolve_variants(configJson)\r\n try {\r\n return JSON.parse(resultJson)\r\n } catch {\r\n return {\r\n variants: [],\r\n supported: [],\r\n deprecated: [],\r\n conflicting: [],\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Validate theme configuration for correctness\r\n * Checks for common issues and provides warnings\r\n *\r\n * @param configJson - JSON string of theme configuration\r\n * @returns Validation result with errors and suggestions\r\n *\r\n * @example\r\n * ```ts\r\n * const result = validateThemeConfig(JSON.stringify(myTheme))\r\n * if (!result.is_valid) {\r\n * console.error('Errors:', result.errors)\r\n * console.warn('Warnings:', result.warnings)\r\n * }\r\n * ```\r\n */\r\nexport function validateThemeConfig(configJson: string): ThemeValidationResult {\r\n const native = getNativeBridge()\r\n if (!native?.validate_variant_config) throw new Error(\"validate_variant_config not available\")\r\n const resultJson = native.validate_variant_config(configJson)\r\n try {\r\n return JSON.parse(resultJson)\r\n } catch {\r\n return {\r\n is_valid: false,\r\n errors: [\"Unable to parse configuration\"],\r\n warnings: [],\r\n suggestions: [],\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Resolve theme cascade (base + overrides)\r\n * Merges base theme with user overrides intelligently\r\n *\r\n * @param baseThemeJson - Base theme configuration\r\n * @param overridesJson - User overrides configuration\r\n * @returns Merged theme with conflict information\r\n *\r\n * @example\r\n * ```ts\r\n * const cascade = resolveCascade(\r\n * JSON.stringify(baseTheme),\r\n * JSON.stringify(userOverrides)\r\n * )\r\n * console.log(cascade.merged_theme)\r\n * console.log('Conflicts resolved:', cascade.conflict_resolutions.length)\r\n * ```\r\n */\r\nexport function resolveCascade(\r\n baseThemeJson: string,\r\n overridesJson: string\r\n): ThemeCascadeResult {\r\n const native = getNativeBridge()\r\n if (!native?.resolve_cascade) throw new Error(\"resolve_cascade not available\")\r\n const resultJson = native.resolve_cascade(baseThemeJson, overridesJson)\r\n try {\r\n return JSON.parse(resultJson)\r\n } catch {\r\n return {\r\n base_theme: {},\r\n user_overrides: {},\r\n merged_theme: {},\r\n conflict_resolutions: [],\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Resolve class names from theme\r\n * Maps Tailwind class names to theme values\r\n *\r\n * @param classNames - Array of Tailwind class names (e.g., [\"text-lg\", \"bg-blue-600\"])\r\n * @param themeJson - Theme configuration\r\n * @returns Resolved class name information\r\n *\r\n * @example\r\n * ```ts\r\n * const resolved = resolveClassNames(\r\n * ['text-lg', 'bg-blue-600', 'md:p-4'],\r\n * JSON.stringify(theme)\r\n * )\r\n * resolved.forEach(item => {\r\n * console.log(`${item.class_name} -> ${item.property}: ${item.value}`)\r\n * })\r\n * ```\r\n */\r\nexport function resolveClassNames(\r\n classNames: string[],\r\n themeJson: string\r\n): ResolvedClassName[] {\r\n const native = getNativeBridge()\r\n if (!native?.resolve_class_names) throw new Error(\"resolve_class_names not available\")\r\n const resultJson = native.resolve_class_names(classNames, themeJson)\r\n try {\r\n return JSON.parse(resultJson)\r\n } catch {\r\n return []\r\n }\r\n}\r\n\r\n/**\r\n * Get conflict group information\r\n * Identifies classes that conflict with each other\r\n *\r\n * @param groupName - Conflict group name (e.g., \"display\", \"position\", \"flex-direction\")\r\n * @param themeJson - Theme configuration\r\n * @returns Information about the conflict group\r\n *\r\n * @example\r\n * ```ts\r\n * const info = resolveConflictGroup('display', JSON.stringify(theme))\r\n * console.log('Conflicting classes:', info.conflicting_classes)\r\n * console.log('Strategy:', info.resolution_strategy)\r\n * ```\r\n */\r\nexport function resolveConflictGroup(groupName: string, themeJson: string): ConflictGroupInfo {\r\n const native = getNativeBridge()\r\n if (!native?.resolve_conflict_group)\r\n throw new Error(\"resolve_conflict_group not available\")\r\n const resultJson = native.resolve_conflict_group(groupName, themeJson)\r\n try {\r\n return JSON.parse(resultJson)\r\n } catch {\r\n return {\r\n group_name: groupName,\r\n conflicting_classes: [],\r\n description: \"\",\r\n resolution_strategy: \"last-wins\",\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Resolve theme value from key path\r\n * Navigates nested theme config to find values\r\n *\r\n * @param keyPath - Dot-separated path (e.g., \"colors.blue.600\")\r\n * @param themeJson - Theme configuration\r\n * @returns Resolved value or null if not found\r\n *\r\n * @example\r\n * ```ts\r\n * const color = resolveThemeValue('colors.blue.600', JSON.stringify(theme))\r\n * console.log(color) // \"#2563eb\" or similar\r\n * ```\r\n */\r\nexport function resolveThemeValue(keyPath: string, themeJson: string): string | null {\r\n const native = getNativeBridge()\r\n if (!native?.resolve_theme_value) throw new Error(\"resolve_theme_value not available\")\r\n return native.resolve_theme_value(keyPath, themeJson)\r\n}\r\n\r\n/**\r\n * Get all simple variants from configuration\r\n * Returns variants that don't require complex selector nesting\r\n *\r\n * @param configJson - Theme/variant configuration\r\n * @returns Array of simple variant names\r\n *\r\n * @example\r\n * ```ts\r\n * const simpleVariants = resolveSimpleVariants(JSON.stringify(config))\r\n * console.log(simpleVariants)\r\n * // [\"hover\", \"focus\", \"active\", \"group-hover\", ...]\r\n * ```\r\n */\r\nexport function resolveSimpleVariants(configJson: string): string[] {\r\n const native = getNativeBridge()\r\n if (!native?.resolve_simple_variants) throw new Error(\"resolve_simple_variants not available\")\r\n const resultJson = native.resolve_simple_variants(configJson)\r\n try {\r\n return JSON.parse(resultJson)\r\n } catch {\r\n return []\r\n }\r\n}\r\n","/**\r\n * scannerNative.ts - Rust bindings for workspace scanning and class extraction\r\n */\r\n\r\nimport { getNativeBridge } from \"../nativeBridge\"\r\n\r\nexport type {\r\n ScanWorkspaceResult,\r\n ScanFileResult,\r\n BatchExtractResult,\r\n SafelistCheckResult,\r\n PrefilterFileResult,\r\n} from \"../nativeBridge\"\r\n\r\nexport function scanWorkspace(root: string, extensions?: string[]) {\r\n const native = getNativeBridge()\r\n if (!native?.scan_workspace) throw new Error(\"scan_workspace not available\")\r\n return native.scan_workspace(root, extensions)\r\n}\r\n\r\nexport function extractClassesFromSourceNative(source: string): string[] {\r\n const native = getNativeBridge()\r\n if (!native?.extract_classes_from_source) throw new Error(\"extract_classes_from_source not available\")\r\n return native.extract_classes_from_source(source)\r\n}\r\n\r\nexport function batchExtractClassesNative(filePaths: string[]) {\r\n const native = getNativeBridge()\r\n if (!native?.batch_extract_classes) throw new Error(\"batch_extract_classes not available\")\r\n return native.batch_extract_classes(filePaths)\r\n}\r\n\r\nexport function checkAgainstSafelistNative(classes: string[], safelist: string[]) {\r\n const native = getNativeBridge()\r\n if (!native?.check_against_safelist) throw new Error(\"check_against_safelist not available\")\r\n return native.check_against_safelist(classes, safelist)\r\n}\r\n\r\nexport function scanFile(filePath: string) {\r\n const native = getNativeBridge()\r\n if (!native?.scan_file) throw new Error(\"scan_file not available\")\r\n return native.scan_file(filePath)\r\n}\r\n\r\nexport function collectFiles(root: string, extensions?: string[]) {\r\n const native = getNativeBridge()\r\n if (!native?.collect_files) throw new Error(\"collect_files not available\")\r\n return native.collect_files(root, extensions)\r\n}\r\n\r\nexport function walkAndPrefilterSourceFiles(root: string, extensions?: string[], _parallel?: boolean) {\r\n const native = getNativeBridge()\r\n if (!native?.walk_and_prefilter_source_files) throw new Error(\"walk_and_prefilter_source_files not available\")\r\n return native.walk_and_prefilter_source_files(root, extensions)\r\n}\r\n\r\nexport function generateSubComponentTypes(root: string, outputPath?: string): string {\r\n const native = getNativeBridge()\r\n if (!native?.generate_sub_component_types) throw new Error(\"generate_sub_component_types not available\")\r\n return native.generate_sub_component_types(root, outputPath)\r\n}\r\n","/**\r\n * Analyzer Sub-entry Point\r\n * \r\n * Exports analysis and optimization functionality.\r\n * - CSS and class analysis\r\n * - Dead code detection\r\n * - Theme resolution and validation\r\n * - Code classification and optimization\r\n */\r\n\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\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\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 * cacheNative.ts\r\n *\r\n * Phase 5.1: Cache Management - Advanced caching strategies and optimization\r\n * Exposes 9 cache-related Rust functions for improved performance tuning\r\n */\r\n\r\nimport { getNativeBridge } from \"../nativeBridge\"\r\n\r\n/**\r\n * Cache optimization hints and recommendations\r\n */\r\nexport interface CacheOptimizationHints {\r\n current_strategy: string\r\n recommended_strategy: string\r\n estimated_improvement_percent: number\r\n suggested_memory_mb: number\r\n notes: string[]\r\n}\r\n\r\n/**\r\n * Optimal cache configuration recommendations\r\n */\r\nexport interface OptimalCacheConfig {\r\n parse_cache_size: number\r\n resolve_cache_size: number\r\n compile_cache_size: number\r\n css_gen_cache_size: number\r\n recommended_eviction_policy: string\r\n ttl_seconds: number\r\n expected_hit_rate_percent: number\r\n}\r\n\r\n/**\r\n * Cache statistics from all layers\r\n */\r\nexport interface CacheStatistics {\r\n parse_cache: { hits: number; misses: number; size: number }\r\n resolve_cache: { hits: number; misses: number; size: number }\r\n compile_cache: { hits: number; misses: number; size: number }\r\n css_gen_cache: { hits: number; misses: number; size: number }\r\n overall_hit_rate: number\r\n total_memory_bytes: number\r\n}\r\n\r\n/**\r\n * Get comprehensive cache statistics across all layers\r\n * Useful for monitoring and optimization\r\n *\r\n * @returns Cache stats including hit rates, sizes, and recommendations\r\n * @example\r\n * ```ts\r\n * const stats = getCacheStatistics()\r\n * console.log(`Overall hit rate: ${stats.overall_hit_rate}%`)\r\n * console.log(`Total memory used: ${stats.total_memory_bytes / 1024}KB`)\r\n * ```\r\n */\r\nexport function getCacheStatistics(): CacheStatistics {\r\n const native = getNativeBridge()\r\n if (!native?.get_cache_statistics) throw new Error(\"get_cache_statistics not available\")\r\n const statsJson = native.get_cache_statistics()\r\n try {\r\n return JSON.parse(statsJson)\r\n } catch {\r\n return {\r\n parse_cache: { hits: 0, misses: 0, size: 0 },\r\n resolve_cache: { hits: 0, misses: 0, size: 0 },\r\n compile_cache: { hits: 0, misses: 0, size: 0 },\r\n css_gen_cache: { hits: 0, misses: 0, size: 0 },\r\n overall_hit_rate: 0,\r\n total_memory_bytes: 0,\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Clear all caches (parse, resolve, compile, CSS generation)\r\n * Use when switching themes or major configuration changes\r\n *\r\n * @example\r\n * ```ts\r\n * // Clear before switching themes\r\n * clearAllCaches()\r\n * const css = await generateCssNative(classes, { theme: newTheme })\r\n * ```\r\n */\r\nexport function clearAllCaches(): void {\r\n const native = getNativeBridge()\r\n if (!native?.clear_all_caches) return\r\n try {\r\n native.clear_all_caches()\r\n } catch {\r\n // Silently ignore if not available\r\n }\r\n}\r\n\r\n/**\r\n * Clear only the parse cache\r\n * Useful when parser behavior changes or cache gets stale\r\n */\r\nexport function clearParseCache(): void {\r\n const native = getNativeBridge()\r\n if (!native?.clear_parse_cache) return\r\n try {\r\n native.clear_parse_cache()\r\n } catch {\r\n // Silently ignore\r\n }\r\n}\r\n\r\n/**\r\n * Clear only the resolve cache\r\n * Use when theme configuration changes\r\n */\r\nexport function clearResolveCache(): void {\r\n const native = getNativeBridge()\r\n if (!native?.clear_resolve_cache) return\r\n try {\r\n native.clear_resolve_cache()\r\n } catch {\r\n // Silently ignore\r\n }\r\n}\r\n\r\n/**\r\n * Clear only the compile cache\r\n * Use when Tailwind configuration changes\r\n */\r\nexport function clearCompileCache(): void {\r\n const native = getNativeBridge()\r\n if (!native?.clear_compile_cache) return\r\n try {\r\n native.clear_compile_cache()\r\n } catch {\r\n // Silently ignore\r\n }\r\n}\r\n\r\n/**\r\n * Clear only the CSS generation cache\r\n * Use when theme or layout changes\r\n */\r\nexport function clearCssGenCache(): void {\r\n const native = getNativeBridge()\r\n if (!native?.clear_css_gen_cache) return\r\n try {\r\n native.clear_css_gen_cache()\r\n } catch {\r\n // Silently ignore\r\n }\r\n}\r\n\r\n/**\r\n * Get optimization hints based on current cache performance\r\n * Analyzes hit rates and suggests improvements\r\n *\r\n * @param hitRatePercent - Current hit rate (0-100)\r\n * @param memoryUsedMb - Memory currently used in MB\r\n * @returns Optimization recommendations\r\n *\r\n * @example\r\n * ```ts\r\n * const stats = getCacheStatistics()\r\n * const hints = getCacheOptimizationHints(\r\n * stats.overall_hit_rate,\r\n * stats.total_memory_bytes / (1024 * 1024)\r\n * )\r\n * console.log(`Recommendation: ${hints.recommended_strategy}`)\r\n * console.log(`Potential improvement: ${hints.estimated_improvement_percent}%`)\r\n * ```\r\n */\r\nexport function getCacheOptimizationHints(\r\n hitRatePercent: number,\r\n memoryUsedMb: number\r\n): CacheOptimizationHints {\r\n const native = getNativeBridge()\r\n if (!native?.get_cache_optimization_hints)\r\n throw new Error(\"get_cache_optimization_hints not available\")\r\n const hintsJson = native.get_cache_optimization_hints(\r\n Math.min(100, Math.max(0, hitRatePercent)),\r\n Math.max(1, memoryUsedMb)\r\n )\r\n try {\r\n return JSON.parse(hintsJson)\r\n } catch {\r\n return {\r\n current_strategy: \"unknown\",\r\n recommended_strategy: \"increase_size\",\r\n estimated_improvement_percent: 0,\r\n suggested_memory_mb: 256,\r\n notes: [\"Unable to analyze cache statistics\"],\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Estimate optimal cache configuration for your workload\r\n * Analyzes typical patterns and recommends sizes\r\n *\r\n * @param totalBudgetMb - Maximum memory budget in MB\r\n * @param workloadType - \"small\" (< 100 files), \"medium\" (100-1000), \"large\" (1000+)\r\n * @returns Recommended cache configuration\r\n *\r\n * @example\r\n * ```ts\r\n * const config = estimateOptimalCacheConfig(512, 'large')\r\n * console.log(`Parse cache: ${config.parse_cache_size}MB`)\r\n * console.log(`Expected hit rate: ${config.expected_hit_rate_percent}%`)\r\n * ```\r\n */\r\nexport function estimateOptimalCacheConfig(\r\n totalBudgetMb: number,\r\n workloadType: \"small\" | \"medium\" | \"large\"\r\n): OptimalCacheConfig {\r\n const native = getNativeBridge()\r\n if (!native?.estimate_optimal_cache_config_native)\r\n throw new Error(\"estimate_optimal_cache_config_native not available\")\r\n const configJson = native.estimate_optimal_cache_config_native(\r\n Math.max(64, totalBudgetMb),\r\n workloadType\r\n )\r\n try {\r\n return JSON.parse(configJson)\r\n } catch {\r\n // Return sensible defaults\r\n return {\r\n parse_cache_size: 128,\r\n resolve_cache_size: 64,\r\n compile_cache_size: 256,\r\n css_gen_cache_size: 128,\r\n recommended_eviction_policy: \"lru\",\r\n ttl_seconds: 3600,\r\n expected_hit_rate_percent: 75,\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Read cache from disk (persistence)\r\n * Restores cached data from previous sessions\r\n *\r\n * @param cachePath - Path to cache file\r\n * @returns Entries loaded from disk\r\n *\r\n * @example\r\n * ```ts\r\n * const entries = cacheRead('./.tw-cache/scan.json')\r\n * // Warm up cache with persisted data\r\n * ```\r\n */\r\nexport function cacheRead(cachePath: string): Array<{\r\n file: string\r\n contentHash: string\r\n classes: string[]\r\n mtimeMs: number\r\n sizeBytes: number\r\n}> {\r\n const native = getNativeBridge()\r\n if (!native?.cache_read) throw new Error(\"cache_read not available\")\r\n const result = native.cache_read(cachePath)\r\n try {\r\n return JSON.parse(result.entries_json || \"[]\")\r\n } catch {\r\n return []\r\n }\r\n}\r\n\r\n/**\r\n * Write cache to disk (persistence)\r\n * Saves cached data for next session\r\n *\r\n * @param cachePath - Path where cache should be written\r\n * @param entries - Cache entries to persist\r\n * @returns Success status\r\n *\r\n * @example\r\n * ```ts\r\n * const stats = getCacheStatistics()\r\n * const success = cacheWrite(\r\n * './.tw-cache/scan.json',\r\n * // entries array from previous scan\r\n * )\r\n * ```\r\n */\r\nexport function cacheWrite(\r\n cachePath: string,\r\n entries: Array<{\r\n file: string\r\n contentHash: string\r\n classes: string[]\r\n mtimeMs: number\r\n sizeBytes: number\r\n }>\r\n): boolean {\r\n const native = getNativeBridge()\r\n if (!native?.cache_write) throw new Error(\"cache_write not available\")\r\n try {\r\n const result = native.cache_write(\r\n cachePath,\r\n entries.map((e) => ({\r\n file: e.file,\r\n content_hash: e.contentHash,\r\n classes: e.classes,\r\n mtime_ms: e.mtimeMs,\r\n size_bytes: e.sizeBytes,\r\n }))\r\n )\r\n return typeof result === \"boolean\" ? result : result === true\r\n } catch {\r\n return false\r\n }\r\n}\r\n\r\n/**\r\n * Calculate cache priority score for file ordering\r\n * Useful for prioritizing which files to scan first\r\n *\r\n * @param mtimeMs - File modification time in milliseconds\r\n * @param sizeBytes - File size in bytes\r\n * @param hitCount - Number of times this file was accessed from cache\r\n * @returns Priority score (higher = process first)\r\n *\r\n * @example\r\n * ```ts\r\n * const priority = cachePriority(Date.now(), 2048, 5)\r\n * // Use priority to sort files for scanning\r\n * ```\r\n */\r\nexport function cachePriority(mtimeMs: number, sizeBytes: number, hitCount: number): number {\r\n const native = getNativeBridge()\r\n if (!native?.cache_priority) throw new Error(\"cache_priority not available\")\r\n return native.cache_priority(mtimeMs, sizeBytes, hitCount)\r\n}\r\n","/**\r\n * Cache Sub-entry Point\r\n * \r\n * Exports cache management functionality.\r\n * - Cache statistics retrieval\r\n * - Cache clearing operations\r\n * - Cache optimization\r\n * - Cache configuration\r\n */\r\n\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 * redisNative.ts\r\n *\r\n * Phase 5.3: Redis Integration - Distributed caching and cluster support\r\n * Exposes 40 Redis functions for high-performance distributed CSS compilation caching\r\n */\r\n\r\nimport { getNativeBridge } from \"../nativeBridge\"\r\n\r\n/**\r\n * Redis pool configuration\r\n */\r\nexport interface RedisCacheConfig {\r\n host: string\r\n port: number\r\n database: number\r\n password?: string\r\n pool_size: number\r\n connection_timeout_ms: number\r\n}\r\n\r\n/**\r\n * Redis pool statistics\r\n */\r\nexport interface RedisPoolStats {\r\n connected_count: number\r\n idle_count: number\r\n waiting_count: number\r\n total_requests: number\r\n total_errors: number\r\n}\r\n\r\n/**\r\n * Redis cluster node information\r\n */\r\nexport interface RedisClusterNode {\r\n node_id: string\r\n host: string\r\n port: number\r\n is_master: boolean\r\n slot_range: Array<{ start: number; end: number }>\r\n connected: boolean\r\n}\r\n\r\n/**\r\n * Redis cluster status\r\n */\r\nexport interface RedisClusterStatus {\r\n enabled: boolean\r\n cluster_state: string\r\n nodes: RedisClusterNode[]\r\n slots_assigned: number\r\n slots_ok: number\r\n slots_fail: number\r\n}\r\n\r\n/**\r\n * Key expiration information\r\n */\r\nexport interface KeyExpiration {\r\n key: string\r\n ttl_seconds: number\r\n expiration_timestamp: number\r\n is_persistent: boolean\r\n}\r\n\r\n/**\r\n * Pub/Sub message\r\n */\r\nexport interface PubSubMessage {\r\n channel: string\r\n message: string\r\n timestamp_ms: number\r\n subscriber_count: number\r\n}\r\n\r\n/**\r\n * Connection pool information\r\n */\r\nexport interface PoolInfo {\r\n host: string\r\n port: number\r\n pool_size: number\r\n active_connections: number\r\n idle_connections: number\r\n average_latency_ms: number\r\n}\r\n\r\n/**\r\n * Ping Redis server for connectivity check\r\n *\r\n * @returns \"PONG\" if connected, error message otherwise\r\n *\r\n * @example\r\n * ```ts\r\n * const response = redisPing()\r\n * if (response === \"PONG\") console.log(\"Connected\")\r\n * ```\r\n */\r\nexport function redisPing(): string {\r\n const native = getNativeBridge()\r\n if (!native?.redis_ping) throw new Error(\"redis_ping not available\")\r\n return native.redis_ping()\r\n}\r\n\r\n/**\r\n * Get value from Redis\r\n *\r\n * @param key - Cache key\r\n * @returns Value if found, null if not found\r\n *\r\n * @example\r\n * ```ts\r\n * const value = redisGet('compiled:bg-blue-600')\r\n * if (value) console.log(JSON.parse(value))\r\n * ```\r\n */\r\nexport function redisGet(key: string): string | null {\r\n const native = getNativeBridge()\r\n if (!native?.redis_get) throw new Error(\"redis_get not available\")\r\n const result = native.redis_get(key)\r\n return result === \"nil\" ? null : result\r\n}\r\n\r\n/**\r\n * Set value in Redis\r\n *\r\n * @param key - Cache key\r\n * @param value - Value to store\r\n * @param ttl_seconds - Time to live in seconds (optional)\r\n * @returns \"OK\" on success\r\n *\r\n * @example\r\n * ```ts\r\n * redisSet('compiled:bg-blue-600', JSON.stringify(css), 3600)\r\n * ```\r\n */\r\nexport function redisSet(key: string, value: string, ttl_seconds?: number): string {\r\n const native = getNativeBridge()\r\n if (!native?.redis_set) throw new Error(\"redis_set not available\")\r\n return native.redis_set(key, value, ttl_seconds)\r\n}\r\n\r\n/**\r\n * Delete key from Redis\r\n *\r\n * @param key - Cache key\r\n * @returns Number of keys deleted\r\n *\r\n * @example\r\n * ```ts\r\n * const deleted = redisDelete('compiled:bg-blue-600')\r\n * console.log(`Deleted ${deleted} keys`)\r\n * ```\r\n */\r\nexport function redisDelete(key: string): number {\r\n const native = getNativeBridge()\r\n if (!native?.redis_delete) throw new Error(\"redis_delete not available\")\r\n return native.redis_delete(key)\r\n}\r\n\r\n/**\r\n * Check if key exists in Redis\r\n *\r\n * @param key - Cache key\r\n * @returns 1 if exists, 0 if not\r\n *\r\n * @example\r\n * ```ts\r\n * if (redisExists('compiled:bg-blue-600')) {\r\n * console.log('Cache hit')\r\n * }\r\n * ```\r\n */\r\nexport function redisExists(key: string): number {\r\n const native = getNativeBridge()\r\n if (!native?.redis_exists) throw new Error(\"redis_exists not available\")\r\n return native.redis_exists(key)\r\n}\r\n\r\n/**\r\n * Get multiple values from Redis (atomic operation)\r\n *\r\n * @param keys - Array of cache keys\r\n * @returns Array of values (null for missing keys)\r\n *\r\n * @example\r\n * ```ts\r\n * const values = redisMget(['key1', 'key2', 'key3'])\r\n * ```\r\n */\r\nexport function redisMget(keys: string[]): Array<string | null> {\r\n const native = getNativeBridge()\r\n if (!native?.redis_mget) throw new Error(\"redis_mget not available\")\r\n const result = native.redis_mget(keys)\r\n try {\r\n return JSON.parse(result)\r\n } catch {\r\n return keys.map(() => null)\r\n }\r\n}\r\n\r\n/**\r\n * Set multiple key-value pairs in Redis (atomic operation)\r\n *\r\n * @param pairs - Array of [key, value] tuples\r\n * @returns \"OK\" on success\r\n *\r\n * @example\r\n * ```ts\r\n * redisMset([\r\n * ['key1', 'value1'],\r\n * ['key2', 'value2']\r\n * ])\r\n * ```\r\n */\r\nexport function redisMset(pairs: Array<[string, string]>): string {\r\n const native = getNativeBridge()\r\n if (!native?.redis_mset) throw new Error(\"redis_mset not available\")\r\n return native.redis_mset(pairs)\r\n}\r\n\r\n/**\r\n * Flush all keys from current Redis database\r\n *\r\n * @returns Number of keys deleted\r\n *\r\n * @example\r\n * ```ts\r\n * const flushed = redisFlushDb()\r\n * console.log(`Flushed ${flushed} keys from database`)\r\n * ```\r\n */\r\nexport function redisFlushDb(): number {\r\n const native = getNativeBridge()\r\n if (!native?.redis_flush_db) throw new Error(\"redis_flush_db not available\")\r\n return native.redis_flush_db()\r\n}\r\n\r\n/**\r\n * Flush all keys from all Redis databases (cluster-wide)\r\n *\r\n * @returns Number of keys deleted\r\n *\r\n * @example\r\n * ```ts\r\n * const flushed = redisFlushAll()\r\n * console.log(`Flushed ${flushed} keys from all databases`)\r\n * ```\r\n */\r\nexport function redisFlushAll(): number {\r\n const native = getNativeBridge()\r\n if (!native?.redis_flush_all) throw new Error(\"redis_flush_all not available\")\r\n return native.redis_flush_all()\r\n}\r\n\r\n/**\r\n * Initialize Redis connection pool\r\n *\r\n * @param host - Redis host (e.g., \"localhost\")\r\n * @param port - Redis port (default: 6379)\r\n * @param pool_size - Connection pool size (default: 32)\r\n * @returns Pool info JSON\r\n *\r\n * @example\r\n * ```ts\r\n * const info = redisPoolConnect('localhost', 6379, 32)\r\n * console.log(info)\r\n * ```\r\n */\r\nexport function redisPoolConnect(host: string, port: number, pool_size?: number): string {\r\n const native = getNativeBridge()\r\n if (!native?.redis_pool_connect) throw new Error(\"redis_pool_connect not available\")\r\n return native.redis_pool_connect(host, port, pool_size)\r\n}\r\n\r\n/**\r\n * Get Redis pool statistics\r\n *\r\n * @returns Pool stats as JSON string\r\n *\r\n * @example\r\n * ```ts\r\n * const stats = redisPoolStats()\r\n * const parsed: RedisPoolStats = JSON.parse(stats)\r\n * console.log(`Connected: ${parsed.connected_count}`)\r\n * ```\r\n */\r\nexport function redisPoolStats(): RedisPoolStats {\r\n const native = getNativeBridge()\r\n if (!native?.redis_pool_stats) throw new Error(\"redis_pool_stats not available\")\r\n const result = native.redis_pool_stats()\r\n try {\r\n return JSON.parse(result)\r\n } catch {\r\n return {\r\n connected_count: 0,\r\n idle_count: 0,\r\n waiting_count: 0,\r\n total_requests: 0,\r\n total_errors: 0,\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Reconnect Redis pool after disconnect\r\n *\r\n * @returns \"OK\" if reconnected\r\n *\r\n * @example\r\n * ```ts\r\n * const result = redisPoolReconnect()\r\n * console.log(result)\r\n * ```\r\n */\r\nexport function redisPoolReconnect(): string {\r\n const native = getNativeBridge()\r\n if (!native?.redis_pool_reconnect) throw new Error(\"redis_pool_reconnect not available\")\r\n return native.redis_pool_reconnect()\r\n}\r\n\r\n/**\r\n * Enable Redis cluster mode\r\n *\r\n * @param initial_nodes - Initial cluster nodes (host:port format)\r\n * @returns Cluster status JSON\r\n *\r\n * @example\r\n * ```ts\r\n * const status = redisEnableCluster(['localhost:6379', 'localhost:6380'])\r\n * ```\r\n */\r\nexport function redisEnableCluster(initial_nodes: string[]): RedisClusterStatus {\r\n const native = getNativeBridge()\r\n if (!native?.redis_enable_cluster) throw new Error(\"redis_enable_cluster not available\")\r\n const result = native.redis_enable_cluster(initial_nodes)\r\n try {\r\n return JSON.parse(result)\r\n } catch {\r\n return {\r\n enabled: false,\r\n cluster_state: \"error\",\r\n nodes: [],\r\n slots_assigned: 0,\r\n slots_ok: 0,\r\n slots_fail: 0,\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Disable Redis cluster mode\r\n *\r\n * @returns \"OK\" when disabled\r\n *\r\n * @example\r\n * ```ts\r\n * const result = redisDisableCluster()\r\n * ```\r\n */\r\nexport function redisDisableCluster(): string {\r\n const native = getNativeBridge()\r\n if (!native?.redis_disable_cluster) throw new Error(\"redis_disable_cluster not available\")\r\n return native.redis_disable_cluster()\r\n}\r\n\r\n/**\r\n * Get current Redis cluster status\r\n *\r\n * @returns Cluster status information\r\n *\r\n * @example\r\n * ```ts\r\n * const status = redisClusterStatus()\r\n * if (status.enabled) console.log(`Cluster has ${status.nodes.length} nodes`)\r\n * ```\r\n */\r\nexport function redisClusterStatus(): RedisClusterStatus {\r\n const native = getNativeBridge()\r\n if (!native?.redis_cluster_status) throw new Error(\"redis_cluster_status not available\")\r\n const result = native.redis_cluster_status()\r\n try {\r\n return JSON.parse(result)\r\n } catch {\r\n return {\r\n enabled: false,\r\n cluster_state: \"unknown\",\r\n nodes: [],\r\n slots_assigned: 0,\r\n slots_ok: 0,\r\n slots_fail: 0,\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Subscribe to Redis pub/sub channel\r\n *\r\n * @param channel - Channel name\r\n * @param callback - Function to call on message (optional)\r\n * @returns Subscription ID\r\n *\r\n * @example\r\n * ```ts\r\n * const id = redisSubscribe('cache:updates', (msg) => {\r\n * console.log(`Update: ${msg.message}`)\r\n * })\r\n * ```\r\n */\r\nexport function redisSubscribe(channel: string): string {\r\n const native = getNativeBridge()\r\n if (!native?.redis_subscribe) throw new Error(\"redis_subscribe not available\")\r\n return native.redis_subscribe(channel)\r\n}\r\n\r\n/**\r\n * Publish message to Redis pub/sub channel\r\n *\r\n * @param channel - Channel name\r\n * @param message - Message to publish\r\n * @returns Number of subscribers that received the message\r\n *\r\n * @example\r\n * ```ts\r\n * const count = redisPublish('cache:updates', 'CSS compiled')\r\n * console.log(`Delivered to ${count} subscribers`)\r\n * ```\r\n */\r\nexport function redisPublish(channel: string, message: string): number {\r\n const native = getNativeBridge()\r\n if (!native?.redis_publish) throw new Error(\"redis_publish not available\")\r\n return native.redis_publish(channel, message)\r\n}\r\n\r\n/**\r\n * Set expiration on key\r\n *\r\n * @param key - Cache key\r\n * @param ttl_seconds - Time to live in seconds\r\n * @returns 1 if timeout set, 0 if key doesn't exist\r\n *\r\n * @example\r\n * ```ts\r\n * redisExpirationSet('compiled:bg-blue-600', 3600)\r\n * ```\r\n */\r\nexport function redisExpirationSet(key: string, ttl_seconds: number): number {\r\n const native = getNativeBridge()\r\n if (!native?.redis_expiration_set) throw new Error(\"redis_expiration_set not available\")\r\n return native.redis_expiration_set(key, ttl_seconds)\r\n}\r\n\r\n/**\r\n * Get expiration info for key\r\n *\r\n * @param key - Cache key\r\n * @returns Expiration information\r\n *\r\n * @example\r\n * ```ts\r\n * const info = redisExpirationGet('compiled:bg-blue-600')\r\n * console.log(`TTL: ${info.ttl_seconds} seconds`)\r\n * ```\r\n */\r\nexport function redisExpirationGet(key: string): KeyExpiration {\r\n const native = getNativeBridge()\r\n if (!native?.redis_expiration_get) throw new Error(\"redis_expiration_get not available\")\r\n const result = native.redis_expiration_get(key)\r\n try {\r\n return JSON.parse(result)\r\n } catch {\r\n return {\r\n key,\r\n ttl_seconds: -1,\r\n expiration_timestamp: 0,\r\n is_persistent: true,\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Get Redis server info\r\n *\r\n * @returns Server information JSON\r\n *\r\n * @example\r\n * ```ts\r\n * const info = redisInfo()\r\n * ```\r\n */\r\nexport function redisInfo(): string {\r\n const native = getNativeBridge()\r\n if (!native?.redis_info) throw new Error(\"redis_info not available\")\r\n return native.redis_info()\r\n}\r\n\r\n/**\r\n * Monitor Redis operations in real-time (for debugging)\r\n *\r\n * @returns Monitor output stream\r\n *\r\n * @example\r\n * ```ts\r\n * const monitor = redisMonitor()\r\n * // Logs all Redis operations\r\n * ```\r\n */\r\nexport function redisMonitor(): string {\r\n const native = getNativeBridge()\r\n if (!native?.redis_monitor) throw new Error(\"redis_monitor not available\")\r\n return native.redis_monitor()\r\n}\r\n\r\n/**\r\n * Get size of cache in bytes\r\n *\r\n * @returns Total memory usage in bytes\r\n *\r\n * @example\r\n * ```ts\r\n * const bytes = redisCacheSize()\r\n * console.log(`Cache: ${bytes / 1024 / 1024} MB`)\r\n * ```\r\n */\r\nexport function redisCacheSize(): number {\r\n const native = getNativeBridge()\r\n if (!native?.redis_cache_size) throw new Error(\"redis_cache_size not available\")\r\n return native.redis_cache_size()\r\n}\r\n\r\n/**\r\n * Get number of keys in cache\r\n *\r\n * @returns Total key count\r\n *\r\n * @example\r\n * ```ts\r\n * const count = redisCacheKeyCount()\r\n * console.log(`Cached keys: ${count}`)\r\n * ```\r\n */\r\nexport function redisCacheKeyCount(): number {\r\n const native = getNativeBridge()\r\n if (!native?.redis_cache_key_count) throw new Error(\"redis_cache_key_count not available\")\r\n return native.redis_cache_key_count()\r\n}\r\n\r\n/**\r\n * Clear Redis cache and reset statistics\r\n *\r\n * @returns Number of keys cleared\r\n *\r\n * @example\r\n * ```ts\r\n * const cleared = redisCacheClear()\r\n * console.log(`Cleared ${cleared} keys`)\r\n * ```\r\n */\r\nexport function redisCacheClear(): number {\r\n const native = getNativeBridge()\r\n if (!native?.redis_cache_clear) throw new Error(\"redis_cache_clear not available\")\r\n return native.redis_cache_clear()\r\n}\r\n\r\n/**\r\n * Get Redis cache hit rate statistics\r\n *\r\n * @returns Hit rate percentage (0-100)\r\n *\r\n * @example\r\n * ```ts\r\n * const hitRate = redisCacheHitRate()\r\n * console.log(`Hit rate: ${hitRate}%`)\r\n * ```\r\n */\r\nexport function redisCacheHitRate(): number {\r\n const native = getNativeBridge()\r\n if (!native?.redis_cache_hit_rate) throw new Error(\"redis_cache_hit_rate not available\")\r\n return native.redis_cache_hit_rate()\r\n}\r\n\r\n/**\r\n * Enable Redis persistence (AOF/RDB)\r\n *\r\n * @param mode - \"aof\" or \"rdb\"\r\n * @returns \"OK\" on success\r\n *\r\n * @example\r\n * ```ts\r\n * redisEnablePersistence('aof')\r\n * ```\r\n */\r\nexport function redisEnablePersistence(mode: string): string {\r\n const native = getNativeBridge()\r\n if (!native?.redis_enable_persistence) throw new Error(\"redis_enable_persistence not available\")\r\n return native.redis_enable_persistence(mode)\r\n}\r\n\r\n/**\r\n * Disable Redis persistence\r\n *\r\n * @returns \"OK\" on success\r\n *\r\n * @example\r\n * ```ts\r\n * redisDisablePersistence()\r\n * ```\r\n */\r\nexport function redisDisablePersistence(): string {\r\n const native = getNativeBridge()\r\n if (!native?.redis_disable_persistence) throw new Error(\"redis_disable_persistence not available\")\r\n return native.redis_disable_persistence()\r\n}\r\n\r\n/**\r\n * Save Redis data to disk (snapshot)\r\n *\r\n * @returns \"OK\" on success\r\n *\r\n * @example\r\n * ```ts\r\n * redisSnapshot()\r\n * ```\r\n */\r\nexport function redisSnapshot(): string {\r\n const native = getNativeBridge()\r\n if (!native?.redis_snapshot) throw new Error(\"redis_snapshot not available\")\r\n return native.redis_snapshot()\r\n}\r\n\r\n/**\r\n * Get Redis memory statistics and recommendations\r\n *\r\n * @returns Memory info JSON\r\n *\r\n * @example\r\n * ```ts\r\n * const memory = redisMemoryStats()\r\n * console.log(memory)\r\n * ```\r\n */\r\nexport function redisMemoryStats(): string {\r\n const native = getNativeBridge()\r\n if (!native?.redis_memory_stats) throw new Error(\"redis_memory_stats not available\")\r\n return native.redis_memory_stats()\r\n}\r\n\r\n/**\r\n * Optimize Redis memory usage\r\n *\r\n * @returns Number of keys optimized\r\n *\r\n * @example\r\n * ```ts\r\n * const optimized = redisOptimizeMemory()\r\n * console.log(`Optimized ${optimized} keys`)\r\n * ```\r\n */\r\nexport function redisOptimizeMemory(): number {\r\n const native = getNativeBridge()\r\n if (!native?.redis_optimize_memory) throw new Error(\"redis_optimize_memory not available\")\r\n return native.redis_optimize_memory()\r\n}\r\n\r\n/**\r\n * Set Redis key eviction policy\r\n *\r\n * @param policy - LRU, LFU, TTL, RANDOM, etc.\r\n * @returns \"OK\" on success\r\n *\r\n * @example\r\n * ```ts\r\n * redisSetEvictionPolicy('allkeys-lru')\r\n * ```\r\n */\r\nexport function redisSetEvictionPolicy(policy: string): string {\r\n const native = getNativeBridge()\r\n if (!native?.redis_set_eviction_policy) throw new Error(\"redis_set_eviction_policy not available\")\r\n return native.redis_set_eviction_policy(policy)\r\n}\r\n\r\n/**\r\n * Get current Redis eviction policy\r\n *\r\n * @returns Current policy name\r\n *\r\n * @example\r\n * ```ts\r\n * const policy = redisGetEvictionPolicy()\r\n * console.log(`Eviction policy: ${policy}`)\r\n * ```\r\n */\r\nexport function redisGetEvictionPolicy(): string {\r\n const native = getNativeBridge()\r\n if (!native?.redis_get_eviction_policy) throw new Error(\"redis_get_eviction_policy not available\")\r\n return native.redis_get_eviction_policy()\r\n}\r\n\r\n/**\r\n * Replicate data to another Redis instance\r\n *\r\n * @param target_host - Target host\r\n * @param target_port - Target port\r\n * @returns Number of keys replicated\r\n *\r\n * @example\r\n * ```ts\r\n * const replicated = redisReplicate('replica.example.com', 6379)\r\n * console.log(`Replicated ${replicated} keys`)\r\n * ```\r\n */\r\nexport function redisReplicate(target_host: string, target_port: number): number {\r\n const native = getNativeBridge()\r\n if (!native?.redis_replicate) throw new Error(\"redis_replicate not available\")\r\n return native.redis_replicate(target_host, target_port)\r\n}\r\n\r\n/**\r\n * Get replication status\r\n *\r\n * @returns Replication info JSON\r\n *\r\n * @example\r\n * ```ts\r\n * const status = redisReplicationStatus()\r\n * console.log(status)\r\n * ```\r\n */\r\nexport function redisReplicationStatus(): string {\r\n const native = getNativeBridge()\r\n if (!native?.redis_replication_status) throw new Error(\"redis_replication_status not available\")\r\n return native.redis_replication_status()\r\n}\r\n\r\n/**\r\n * Sync cache between Redis instances (distributed cache sync)\r\n *\r\n * @param peers - Array of peer Redis addresses\r\n * @returns Number of keys synced\r\n *\r\n * @example\r\n * ```ts\r\n * const synced = redisCacheSync(['redis1:6379', 'redis2:6379'])\r\n * console.log(`Synced ${synced} keys`)\r\n * ```\r\n */\r\nexport function redisCacheSync(peers: string[]): number {\r\n const native = getNativeBridge()\r\n if (!native?.redis_cache_sync) throw new Error(\"redis_cache_sync not available\")\r\n return native.redis_cache_sync(peers)\r\n}\r\n\r\n/**\r\n * Enable automatic cache warming\r\n *\r\n * @param key_pattern - Glob pattern for keys to warm (e.g., \"compiled:*\")\r\n * @returns \"OK\" on success\r\n *\r\n * @example\r\n * ```ts\r\n * redisEnableCacheWarming('compiled:*')\r\n * ```\r\n */\r\nexport function redisEnableCacheWarming(key_pattern: string): string {\r\n const native = getNativeBridge()\r\n if (!native?.redis_enable_cache_warming) throw new Error(\"redis_enable_cache_warming not available\")\r\n return native.redis_enable_cache_warming(key_pattern)\r\n}\r\n\r\n/**\r\n * Disable cache warming\r\n *\r\n * @returns \"OK\" on success\r\n *\r\n * @example\r\n * ```ts\r\n * redisDisableCacheWarming()\r\n * ```\r\n */\r\nexport function redisDisableCacheWarming(): string {\r\n const native = getNativeBridge()\r\n if (!native?.redis_disable_cache_warming) throw new Error(\"redis_disable_cache_warming not available\")\r\n return native.redis_disable_cache_warming()\r\n}\r\n\r\n/**\r\n * Diagnose Redis connection issues\r\n *\r\n * @returns Diagnostic report\r\n *\r\n * @example\r\n * ```ts\r\n * const diagnosis = redisDiagnose()\r\n * console.log(diagnosis)\r\n * ```\r\n */\r\nexport function redisDiagnose(): string {\r\n const native = getNativeBridge()\r\n if (!native?.redis_diagnose) throw new Error(\"redis_diagnose not available\")\r\n return native.redis_diagnose()\r\n}\r\n","/**\r\n * Redis Sub-entry Point\r\n * \r\n * Exports Redis and distributed cache functionality.\r\n * - Redis operations (get, set, delete, etc.)\r\n * - Redis pool management\r\n * - Cluster management\r\n * - Cache synchronization\r\n * - Persistence management\r\n */\r\n\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 * watchSystemNative.ts\r\n *\r\n * Phase 5.4: Watch System & File Monitoring - Real-time CSS recompilation\r\n * Exposes 12 watch/monitoring functions for hot-reload and incremental compilation\r\n */\r\n\r\nimport { getNativeBridge } from \"../nativeBridge\"\r\n\r\n/**\r\n * File watch event\r\n */\r\nexport interface WatchEvent {\r\n event_type: \"create\" | \"modify\" | \"delete\" | \"rename\"\r\n file_path: string\r\n timestamp_ms: number\r\n is_dir: boolean\r\n}\r\n\r\n/**\r\n * Watch handle for tracking active watchers\r\n */\r\nexport interface WatchHandle {\r\n handle_id: number\r\n patterns: string[]\r\n is_running: boolean\r\n created_at_ms: number\r\n}\r\n\r\n/**\r\n * Watch statistics\r\n */\r\nexport interface WatchStats {\r\n active_watchers: number\r\n total_events: number\r\n events_this_second: number\r\n average_latency_ms: number\r\n largest_batch_size: number\r\n}\r\n\r\n/**\r\n * Start file system watcher for directory\r\n *\r\n * @param root_path - Directory to watch\r\n * @param patterns - Glob patterns to match (e.g., [\"*.tsx\", \"*.ts\"])\r\n * @returns Handle ID for the watcher\r\n *\r\n * @example\r\n * ```ts\r\n * const handle = startWatch('./src', ['*.tsx', '*.ts'])\r\n * // Watcher is now active\r\n * ```\r\n */\r\nexport function startWatch(root_path: string, patterns?: string[]): number {\r\n const native = getNativeBridge()\r\n if (!native?.start_watch) throw new Error(\"start_watch not available\")\r\n return native.start_watch(root_path, patterns)\r\n}\r\n\r\n/**\r\n * Poll for watch events (non-blocking)\r\n *\r\n * @param handle - Watcher handle from startWatch()\r\n * @param timeout_ms - Max time to wait for events (default: 100)\r\n * @returns Array of watch events\r\n *\r\n * @example\r\n * ```ts\r\n * const handle = startWatch('./src', ['*.tsx'])\r\n * const events = pollWatchEvents(handle, 100)\r\n * events.forEach(evt => {\r\n * console.log(`${evt.event_type}: ${evt.file_path}`)\r\n * })\r\n * ```\r\n */\r\nexport function pollWatchEvents(handle: number, timeout_ms?: number): WatchEvent[] {\r\n const native = getNativeBridge()\r\n if (!native?.poll_watch_events) throw new Error(\"poll_watch_events not available\")\r\n const result = native.poll_watch_events(handle, timeout_ms)\r\n try {\r\n return JSON.parse(result)\r\n } catch {\r\n return []\r\n }\r\n}\r\n\r\n/**\r\n * Stop file system watcher\r\n *\r\n * @param handle - Watcher handle\r\n * @returns Number of events processed before stopping\r\n *\r\n * @example\r\n * ```ts\r\n * const eventsProcessed = stopWatch(handle)\r\n * console.log(`Watcher processed ${eventsProcessed} events`)\r\n * ```\r\n */\r\nexport function stopWatch(handle: number): number {\r\n const native = getNativeBridge()\r\n if (!native?.stop_watch) throw new Error(\"stop_watch not available\")\r\n return native.stop_watch(handle)\r\n}\r\n\r\n/**\r\n * Add pattern to active watcher\r\n *\r\n * @param handle - Watcher handle\r\n * @param pattern - Glob pattern to add (e.g., \"*.md\")\r\n * @returns \"OK\" on success\r\n *\r\n * @example\r\n * ```ts\r\n * watchAddPattern(handle, '*.md')\r\n * // Now watching markdown files too\r\n * ```\r\n */\r\nexport function watchAddPattern(handle: number, pattern: string): string {\r\n const native = getNativeBridge()\r\n if (!native?.watch_add_pattern) throw new Error(\"watch_add_pattern not available\")\r\n return native.watch_add_pattern(handle, pattern)\r\n}\r\n\r\n/**\r\n * Remove pattern from watcher\r\n *\r\n * @param handle - Watcher handle\r\n * @param pattern - Pattern to remove\r\n * @returns \"OK\" on success\r\n *\r\n * @example\r\n * ```ts\r\n * watchRemovePattern(handle, '*.md')\r\n * ```\r\n */\r\nexport function watchRemovePattern(handle: number, pattern: string): string {\r\n const native = getNativeBridge()\r\n if (!native?.watch_remove_pattern) throw new Error(\"watch_remove_pattern not available\")\r\n return native.watch_remove_pattern(handle, pattern)\r\n}\r\n\r\n/**\r\n * Get all active watcher handles\r\n *\r\n * @returns Array of active watch handles\r\n *\r\n * @example\r\n * ```ts\r\n * const handles = watchGetActiveHandles()\r\n * console.log(`${handles.length} active watchers`)\r\n * ```\r\n */\r\nexport function watchGetActiveHandles(): WatchHandle[] {\r\n const native = getNativeBridge()\r\n if (!native?.watch_get_active_handles) throw new Error(\"watch_get_active_handles not available\")\r\n const result = native.watch_get_active_handles()\r\n try {\r\n return JSON.parse(result)\r\n } catch {\r\n return []\r\n }\r\n}\r\n\r\n/**\r\n * Clear all active watchers\r\n *\r\n * @returns Number of watchers cleared\r\n *\r\n * @example\r\n * ```ts\r\n * const cleared = watchClearAll()\r\n * console.log(`Cleared ${cleared} watchers`)\r\n * ```\r\n */\r\nexport function watchClearAll(): number {\r\n const native = getNativeBridge()\r\n if (!native?.watch_clear_all) throw new Error(\"watch_clear_all not available\")\r\n return native.watch_clear_all()\r\n}\r\n\r\n/**\r\n * Convert watch event type to string\r\n *\r\n * @param event_type_code - Event type code (0-3)\r\n * @returns Event type as string\r\n *\r\n * @example\r\n * ```ts\r\n * const typeStr = watchEventTypeToString(0)\r\n * console.log(typeStr) // \"create\"\r\n * ```\r\n */\r\nexport function watchEventTypeToString(event_type_code: number): string {\r\n const native = getNativeBridge()\r\n if (!native?.watch_event_type_to_string) throw new Error(\"watch_event_type_to_string not available\")\r\n return native.watch_event_type_to_string(event_type_code)\r\n}\r\n\r\n/**\r\n * Check if watcher is running\r\n *\r\n * @param handle - Watcher handle\r\n * @returns True if running\r\n *\r\n * @example\r\n * ```ts\r\n * if (isWatchRunning(handle)) {\r\n * console.log(\"Watcher is active\")\r\n * }\r\n * ```\r\n */\r\nexport function isWatchRunning(handle: number): boolean {\r\n const native = getNativeBridge()\r\n if (!native?.is_watch_running) throw new Error(\"is_watch_running not available\")\r\n return native.is_watch_running(handle)\r\n}\r\n\r\n/**\r\n * Get watch system statistics\r\n *\r\n * @returns Watch statistics\r\n *\r\n * @example\r\n * ```ts\r\n * const stats = getWatchStats()\r\n * console.log(`Active: ${stats.active_watchers}, Events: ${stats.total_events}`)\r\n * ```\r\n */\r\nexport function getWatchStats(): WatchStats {\r\n const native = getNativeBridge()\r\n if (!native?.get_watch_stats) throw new Error(\"get_watch_stats not available\")\r\n const result = native.get_watch_stats()\r\n try {\r\n return JSON.parse(result)\r\n } catch {\r\n return {\r\n active_watchers: 0,\r\n total_events: 0,\r\n events_this_second: 0,\r\n average_latency_ms: 0,\r\n largest_batch_size: 0,\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Pause watching (pause event delivery without stopping watcher)\r\n *\r\n * @param handle - Watcher handle\r\n * @returns \"OK\" on success\r\n *\r\n * @example\r\n * ```ts\r\n * watchPause(handle)\r\n * // Events still detected but not delivered\r\n * ```\r\n */\r\nexport function watchPause(handle: number): string {\r\n const native = getNativeBridge()\r\n if (!native?.watch_pause) throw new Error(\"watch_pause not available\")\r\n return native.watch_pause(handle)\r\n}\r\n\r\n/**\r\n * Resume watching after pause\r\n *\r\n * @param handle - Watcher handle\r\n * @returns \"OK\" on success\r\n *\r\n * @example\r\n * ```ts\r\n * watchResume(handle)\r\n * // Event delivery resumes\r\n * ```\r\n */\r\nexport function watchResume(handle: number): string {\r\n const native = getNativeBridge()\r\n if (!native?.watch_resume) throw new Error(\"watch_resume not available\")\r\n return native.watch_resume(handle)\r\n}\r\n\r\n/**\r\n * Scan cache and get optimization recommendations\r\n *\r\n * @returns Optimization hints JSON\r\n *\r\n * @example\r\n * ```ts\r\n * const hints = scanCacheOptimizations()\r\n * console.log(hints)\r\n * ```\r\n */\r\nexport function scanCacheOptimizations(): string {\r\n const native = getNativeBridge()\r\n if (!native?.scan_cache_optimizations) throw new Error(\"scan_cache_optimizations not available\")\r\n return native.scan_cache_optimizations()\r\n}\r\n\r\n/**\r\n * Get plugin hook list\r\n *\r\n * @returns Available plugin hooks\r\n *\r\n * @example\r\n * ```ts\r\n * const hooks = getPluginHooks()\r\n * console.log(hooks)\r\n * ```\r\n */\r\nexport function getPluginHooks(): string[] {\r\n const native = getNativeBridge()\r\n if (!native?.get_plugin_hooks) throw new Error(\"get_plugin_hooks not available\")\r\n const result = native.get_plugin_hooks()\r\n try {\r\n return JSON.parse(result)\r\n } catch {\r\n return []\r\n }\r\n}\r\n\r\n/**\r\n * Register plugin hook handler\r\n *\r\n * @param hook_name - Hook name\r\n * @param handler_id - Handler identifier\r\n * @returns \"OK\" on success\r\n *\r\n * @example\r\n * ```ts\r\n * registerPluginHook('compile:before', 'my-handler-1')\r\n * ```\r\n */\r\nexport function registerPluginHook(hook_name: string, handler_id: string): string {\r\n const native = getNativeBridge()\r\n if (!native?.register_plugin_hook) throw new Error(\"register_plugin_hook not available\")\r\n return native.register_plugin_hook(hook_name, handler_id)\r\n}\r\n\r\n/**\r\n * Unregister plugin hook handler\r\n *\r\n * @param hook_name - Hook name\r\n * @param handler_id - Handler identifier\r\n * @returns \"OK\" on success\r\n *\r\n * @example\r\n * ```ts\r\n * unregisterPluginHook('compile:before', 'my-handler-1')\r\n * ```\r\n */\r\nexport function unregisterPluginHook(hook_name: string, handler_id: string): string {\r\n const native = getNativeBridge()\r\n if (!native?.unregister_plugin_hook) throw new Error(\"unregister_plugin_hook not available\")\r\n return native.unregister_plugin_hook(hook_name, handler_id)\r\n}\r\n\r\n/**\r\n * Emit plugin hook event\r\n *\r\n * @param hook_name - Hook name\r\n * @param data_json - Event data as JSON\r\n * @returns Modified data\r\n *\r\n * @example\r\n * ```ts\r\n * const result = emitPluginHook('compile:before', JSON.stringify({css: '...'}))\r\n * ```\r\n */\r\nexport function emitPluginHook(hook_name: string, data_json: string): string {\r\n const native = getNativeBridge()\r\n if (!native?.emit_plugin_hook) throw new Error(\"emit_plugin_hook not available\")\r\n return native.emit_plugin_hook(hook_name, data_json)\r\n}\r\n\r\n/**\r\n * Get compilation performance metrics\r\n *\r\n * @returns Performance metrics\r\n *\r\n * @example\r\n * ```ts\r\n * const metrics = getCompilationMetrics()\r\n * console.log(metrics)\r\n * ```\r\n */\r\nexport function getCompilationMetrics(): string {\r\n const native = getNativeBridge()\r\n if (!native?.get_compilation_metrics) throw new Error(\"get_compilation_metrics not available\")\r\n return native.get_compilation_metrics()\r\n}\r\n\r\n/**\r\n * Reset compilation performance counters\r\n *\r\n * @returns \"OK\" on success\r\n *\r\n * @example\r\n * ```ts\r\n * resetCompilationMetrics()\r\n * ```\r\n */\r\nexport function resetCompilationMetrics(): string {\r\n const native = getNativeBridge()\r\n if (!native?.reset_compilation_metrics) throw new Error(\"reset_compilation_metrics not available\")\r\n return native.reset_compilation_metrics()\r\n}\r\n\r\n/**\r\n * Validate CSS output for errors\r\n *\r\n * @param css - CSS to validate\r\n * @returns Validation result as JSON\r\n *\r\n * @example\r\n * ```ts\r\n * const result = validateCssOutput('.test { color: red; }')\r\n * ```\r\n */\r\nexport function validateCssOutput(css: string): string {\r\n const native = getNativeBridge()\r\n if (!native?.validate_css_output) throw new Error(\"validate_css_output not available\")\r\n return native.validate_css_output(css)\r\n}\r\n\r\n/**\r\n * Get compiler diagnostics\r\n *\r\n * @returns Diagnostic information\r\n *\r\n * @example\r\n * ```ts\r\n * const diagnostics = getCompilerDiagnostics()\r\n * console.log(diagnostics)\r\n * ```\r\n */\r\nexport function getCompilerDiagnostics(): string {\r\n const native = getNativeBridge()\r\n if (!native?.get_compiler_diagnostics) throw new Error(\"get_compiler_diagnostics not available\")\r\n return native.get_compiler_diagnostics()\r\n}\r\n","/**\r\n * Watch Sub-entry Point\r\n * \r\n * Exports file watching and compilation monitoring functionality.\r\n * - File system watching\r\n * - Watch event polling and management\r\n * - Watch statistics\r\n * - Plugin hooks\r\n * - Compilation metrics\r\n */\r\n\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\n * tailwind-styled-v5 — Compiler Main Entry Point\r\n * \r\n * Re-exports all sub-entry points for backward compatibility.\r\n * For better tree-shaking, import from specific sub-entries:\r\n * - '@tailwind-styled/compiler/compiler' - CSS generation and compilation\r\n * - '@tailwind-styled/compiler/parser' - Class parsing and extraction\r\n * - '@tailwind-styled/compiler/analyzer' - Analysis and optimization\r\n * - '@tailwind-styled/compiler/cache' - Cache management\r\n * - '@tailwind-styled/compiler/redis' - Redis and distributed cache\r\n * - '@tailwind-styled/compiler/watch' - File watching and monitoring\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// RE-EXPORT ALL SUB-ENTRIES FOR BACKWARD COMPATIBILITY\r\n// ═══════════════════════════════════════════════════════════════════════════\r\n\r\n// Compiler sub-entry - CSS generation, compilation, ID registry, streaming\r\nexport * from './compiler'\r\n\r\n// Parser sub-entry - Class parsing and extraction\r\nexport * from './parser'\r\n\r\n// Analyzer sub-entry - Analysis, optimization, theme resolution\r\nexport * from './analyzer'\r\n\r\n// Cache sub-entry - Cache management\r\nexport * from './cache'\r\n\r\n// Redis sub-entry - Redis and distributed cache\r\nexport * from './redis'\r\n\r\n// Watch sub-entry - File watching and monitoring\r\nexport * from './watch'\r\n\r\n// ═══════════════════════════════════════════════════════════════════════════\r\n// TRANSFORM & CORE 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// ADDITIONAL UTILITIES\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 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 try {\r\n const { runCssPipeline } = await import(\"./compiler/tailwindEngine\")\r\n const result = await runCssPipeline(classes, cssEntryContent, root, minify)\r\n return result.css\r\n } catch {\r\n // Fallback if import fails\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(\" \"), {})\r\n return result?.code || \"\"\r\n }\r\n}\r\n\r\n// ═══════════════════════════════════════════════════════════════════════════\r\n// DEAD STYLE ELIMINATION\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 scanProjectUsage = (dirs: string[], cwd: string) => {\r\n // Import locally to avoid circular dependency\r\n const { batchExtractClasses } = require('./parser')\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// CONFIG & UTILITIES\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\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 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 EXTRACTION\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\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 INTERFACE\r\n// ═══════════════════════════════════════════════════════════════════════════\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\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 (err) {\r\n // Non-fatal — static CSS extraction failure should not break transform pipeline.\r\n console.debug(\"Static CSS extraction warning:\", err)\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 MANAGEMENT\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 class IncrementalEngine {\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 class BucketEngine {\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 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 const sorted = native.classifyAndSortClasses(classes)\r\n return sorted.map((c) => (c as { raw?: string }).raw ?? (c as unknown as string))\r\n}\r\n\r\n// ═══════════════════════════════════════════════════════════════════════════\r\n// RSC & FILE ANALYSIS CONTINUED\r\n// ═══════════════════════════════════════════════════════════════════════════\r\n\r\nexport const analyzeFile = (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 const rsc = native.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// 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 entries: TwStateConfigEntry[],\r\n _themeConfig?: Record<string, unknown>\r\n): GeneratedStateRule[] => {\r\n const rules: GeneratedStateRule[] = []\r\n for (const entry of entries) {\r\n const stateConfig = JSON.parse(entry.statesJson) as Record<string, string>\r\n for (const [stateName, classes] of Object.entries(stateConfig)) {\r\n rules.push({\r\n selector: `.${entry.componentName}[data-state=\"${stateName}\"]`,\r\n declarations: classes,\r\n cssRule: `.${entry.componentName}[data-state=\"${stateName}\"]{${classes}}`,\r\n componentName: entry.componentName,\r\n stateName,\r\n })\r\n }\r\n }\r\n return rules\r\n}\r\n\r\nexport const extractAndGenerateStateCss = (source: string, filename: string): GeneratedStateRule[] => {\r\n const entries = extractTwStateConfigs(source, filename)\r\n return generateStaticStateCss(entries)\r\n}\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 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 scanProjectUsage,\r\n extractComponentUsage,\r\n diffClassLists,\r\n batchExtractClasses,\r\n checkAgainstSafelist,\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 analyzeFile,\r\n analyzeVariantUsage,\r\n injectClientDirective,\r\n injectServerOnlyComment,\r\n analyzeClasses,\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 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 scanProjectUsage,\r\n extractComponentUsage,\r\n diffClassLists,\r\n batchExtractClasses,\r\n checkAgainstSafelist,\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 analyzeFile,\r\n analyzeVariantUsage,\r\n injectClientDirective,\r\n injectServerOnlyComment,\r\n analyzeClasses,\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, getCacheStats, clearCache, type CssPipelineResult } from \"./compiler/tailwindEngine\"\r\n\r\n// Re-export all sub-entries directly for convenience\r\nexport * from \"./compiler\"\r\nexport * from \"./parser\"\r\nexport * from \"./analyzer\"\r\nexport * from \"./cache\"\r\nexport * from \"./redis\"\r\nexport * from \"./watch\"\r\n\r\n","/**\r\n * staticStateExtractor.ts — Build-time State CSS Pre-generator\r\n *\r\n * Mengkoordinasi pipeline untuk mengeliminasi runtime CSS injection untuk `states` config.\r\n *\r\n * Flow:\r\n * 1. Walk semua source files (.ts/.tsx/.js/.jsx)\r\n * 2. Per file: panggil `extractTwStateConfigs()` (Rust NAPI)\r\n * → temukan semua `tw.tag({ states: {...} })` calls\r\n * 3. Kumpulkan semua configs, panggil `generateStaticStateCss()` (Rust NAPI)\r\n * → compute hash identik dengan runtime stateEngine.ts\r\n * → generate CSS rules dengan selector `.tw-s-[hash][data-stateName=\"true\"]`\r\n * 4. Append hasilnya ke safelist CSS file\r\n *\r\n * Hasilnya: browser load state CSS dari static file — ZERO runtime injection,\r\n * ZERO flicker saat component dengan states di-render.\r\n *\r\n * Dipanggil dari withTailwindStyled.ts setelah initial Tailwind CSS scan.\r\n *\r\n * @module staticStateExtractor\r\n */\r\n\r\nimport fs from \"node:fs\"\r\nimport path from \"node:path\"\r\n\r\n// ── Types (mirror dari native/src/application/state_css.rs) ────────────────\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 interface StaticStateExtractionResult {\r\n /** Total source files di-scan */\r\n filesScanned: number\r\n /** Files yang punya tw() state configs */\r\n filesWithStates: number\r\n /** Total komponen dengan states ditemukan */\r\n componentsFound: number\r\n /** Total CSS rules yang di-generate */\r\n rulesGenerated: number\r\n /** Rules yang tidak bisa di-resolve (butuh Tailwind full pipeline) */\r\n rulesSkipped: number\r\n /** CSS yang siap di-append ke safelist file */\r\n generatedCss: string\r\n /** Debug: semua rules yang di-generate */\r\n rules: GeneratedStateRule[]\r\n}\r\n\r\n// ── Source file extensions yang di-scan ────────────────────────────────────\r\n\r\nconst SOURCE_EXTENSIONS = new Set([\".ts\", \".tsx\", \".js\", \".jsx\", \".mts\", \".mjs\"])\r\nconst IGNORE_PATTERNS = [\"node_modules\", \".next\", \"dist\", \"build\", \".git\", \"coverage\", \"__tests__\"]\r\n\r\n// ── Native bridge lazy loader ───────────────────────────────────────────────\r\n\r\ninterface PrefilterFileResult {\r\n path: string\r\n content: string\r\n}\r\n\r\nlet _native: {\r\n extractTwStateConfigs: (source: string, filename: string) => TwStateConfigEntry[]\r\n generateStaticStateCss: (inputs: StaticStateCssInput[], resolvedCss?: string | null) => GeneratedStateRule[]\r\n extractAndGenerateStateCss: (source: string, filename: string) => GeneratedStateRule[]\r\n walkAndPrefilterSourceFiles?: (\r\n root: string,\r\n extensions?: string[] | null,\r\n ignoreDirs?: string[] | null,\r\n requiredSubstrings?: string[] | null,\r\n maxFiles?: number | null,\r\n parallel?: boolean | null,\r\n ) => PrefilterFileResult[]\r\n} | null = null\r\n\r\nfunction getNative() {\r\n if (_native) return _native\r\n try {\r\n // Pakai require dinamis — sama dengan pattern di file lain\r\n const mod = require(\"@tailwind-styled/compiler/internal\") as {\r\n extractTwStateConfigs?: (source: string, filename: string) => TwStateConfigEntry[]\r\n generateStaticStateCss?: (inputs: StaticStateCssInput[]) => GeneratedStateRule[]\r\n extractAndGenerateStateCss?: (source: string, filename: string) => GeneratedStateRule[]\r\n }\r\n if (\r\n typeof mod?.extractTwStateConfigs !== \"function\" ||\r\n typeof mod?.generateStaticStateCss !== \"function\"\r\n ) {\r\n return null\r\n }\r\n _native = {\r\n extractTwStateConfigs: mod.extractTwStateConfigs,\r\n generateStaticStateCss: mod.generateStaticStateCss,\r\n extractAndGenerateStateCss: mod.extractAndGenerateStateCss ?? (\r\n // Fallback jika extractAndGenerateStateCss belum di-export\r\n (source: string, filename: string) => {\r\n const configs = mod.extractTwStateConfigs!(source, filename)\r\n if (configs.length === 0) return []\r\n return mod.generateStaticStateCss!(configs.map((c) => ({\r\n tag: c.tag,\r\n componentName: c.componentName,\r\n statesJson: c.statesJson,\r\n })))\r\n }\r\n ),\r\n }\r\n return _native\r\n } catch {\r\n return null\r\n }\r\n}\r\n\r\n// ── File walker ──────────────────────────────────────────────────────────────\r\n\r\nfunction* walkSourceFiles(dir: string): Generator<string> {\r\n let entries: fs.Dirent[]\r\n try {\r\n entries = fs.readdirSync(dir, { withFileTypes: true })\r\n } catch {\r\n return\r\n }\r\n\r\n for (const entry of entries) {\r\n const fullPath = path.join(dir, entry.name)\r\n\r\n if (entry.isDirectory()) {\r\n if (IGNORE_PATTERNS.some((p) => entry.name === p || entry.name.startsWith(p))) continue\r\n yield* walkSourceFiles(fullPath)\r\n } else if (entry.isFile()) {\r\n const ext = path.extname(entry.name)\r\n if (SOURCE_EXTENSIONS.has(ext)) yield fullPath\r\n }\r\n }\r\n}\r\n\r\n// ── CSS generation header ────────────────────────────────────────────────────\r\n\r\nfunction buildCssHeader(result: StaticStateExtractionResult): string {\r\n return [\r\n \"/* ─────────────────────────────────────────────────────────────────────\",\r\n \" * tw-state-static.css — Auto-generated by staticStateExtractor.ts\",\r\n \" * DO NOT EDIT. Re-generated on each build.\",\r\n \" *\",\r\n ` * Files scanned: ${result.filesScanned}`,\r\n ` * Files with states: ${result.filesWithStates}`,\r\n ` * Components found: ${result.componentsFound}`,\r\n ` * Rules generated: ${result.rulesGenerated}`,\r\n ` * Rules skipped: ${result.rulesSkipped} (akan di-inject runtime sebagai fallback)`,\r\n \" *\",\r\n \" * Selector format: .tw-s-[hash][data-stateName=\\\"true\\\"] { ... }\",\r\n \" * Hash identik dengan yang dibuat oleh stateEngine.ts di runtime.\",\r\n \" * ─────────────────────────────────────────────────────────────────── */\",\r\n \"\",\r\n ].join(\"\\n\")\r\n}\r\n\r\n// ── Main API ─────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Scan semua source files di `srcDir`, extract tw() state configs,\r\n * generate static CSS, dan return hasilnya.\r\n *\r\n * @param srcDir Root directory untuk scan (biasanya `process.cwd()/src`)\r\n * @param options Optional configuration\r\n */\r\nexport function extractStaticStateCss(\r\n srcDir: string,\r\n options: {\r\n /** Emit debug logging */\r\n verbose?: boolean\r\n /** Max files untuk di-scan (default: unlimited) */\r\n maxFiles?: number\r\n /**\r\n * CSS output dari Tailwind pipeline (isi `_initial-scan.css`).\r\n *\r\n * Kalau di-provide, dipakai untuk resolve class names via `parseTailwindCssToClassMap`\r\n * → semua Tailwind class (termasuk `w-full`, `ring-2`, dll) bisa di-resolve dengan benar.\r\n *\r\n * Kalau tidak di-provide, fallback ke Rust resolver (hanya class sederhana yang ter-resolve).\r\n */\r\n resolvedCss?: string\r\n } = {}\r\n): StaticStateExtractionResult {\r\n const { verbose = false, maxFiles = Infinity } = options\r\n\r\n const native = getNative()\r\n if (!native) {\r\n if (verbose) {\r\n process.stderr.write(\r\n \"[tw:static-state] native module tidak tersedia — skip static CSS pre-generation\\n\"\r\n )\r\n }\r\n return {\r\n filesScanned: 0,\r\n filesWithStates: 0,\r\n componentsFound: 0,\r\n rulesGenerated: 0,\r\n rulesSkipped: 0,\r\n generatedCss: \"\",\r\n rules: [],\r\n }\r\n }\r\n\r\n // ── Step 1: Collect all configs dari semua source files ──────────────────\r\n\r\n const allConfigs: TwStateConfigEntry[] = []\r\n let filesScanned = 0\r\n let filesWithStates = 0\r\n\r\n // ── Fast path: walkAndPrefilterSourceFiles — walk + read + pre-filter di Rust ──\r\n // Eliminasi: JS fs.readdirSync recursive + fs.readFileSync per file +\r\n // JS String.includes() pre-filter. Rust fs::read_dir + contains() ~5-10x lebih cepat.\r\n if (native.walkAndPrefilterSourceFiles) {\r\n const prefiltered = native.walkAndPrefilterSourceFiles(\r\n srcDir,\r\n [\".ts\", \".tsx\", \".js\", \".jsx\", \".mts\", \".mjs\"],\r\n [\"node_modules\", \".next\", \"dist\", \"build\", \".git\", \"coverage\", \"__tests__\"],\r\n // Required substrings — AND logic, identik dengan JS pre-filter di bawah\r\n [\"states:\", \"tw.\"],\r\n maxFiles === Infinity ? null : maxFiles,\r\n null // sequential — parallel mode opsional untuk large monorepo\r\n )\r\n\r\n for (const { path: filePath, content: source } of prefiltered) {\r\n filesScanned++\r\n const configs = native.extractTwStateConfigs(source, filePath)\r\n if (configs.length > 0) {\r\n filesWithStates++\r\n allConfigs.push(...configs)\r\n if (verbose) {\r\n process.stderr.write(\r\n `[tw:static-state] ${path.relative(srcDir, filePath)}: ${configs.length} komponen\\n`\r\n )\r\n }\r\n }\r\n }\r\n } else {\r\n // ── Fallback: JS generator + readFileSync + JS pre-filter ────────────────\r\n for (const filePath of walkSourceFiles(srcDir)) {\r\n if (filesScanned >= maxFiles) break\r\n\r\n let source: string\r\n try {\r\n source = fs.readFileSync(filePath, \"utf-8\")\r\n } catch {\r\n continue\r\n }\r\n\r\n filesScanned++\r\n\r\n // Quick pre-filter — skip files tanpa states config\r\n if (!source.includes(\"states:\") && !source.includes(\"states :\")) continue\r\n if (!source.includes(\"tw.\") && !source.includes(\"tailwind-styled\")) continue\r\n\r\n const configs = native.extractTwStateConfigs(source, filePath)\r\n if (configs.length > 0) {\r\n filesWithStates++\r\n allConfigs.push(...configs)\r\n if (verbose) {\r\n process.stderr.write(\r\n `[tw:static-state] ${path.relative(srcDir, filePath)}: ${configs.length} komponen\\n`\r\n )\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (allConfigs.length === 0) {\r\n return {\r\n filesScanned,\r\n filesWithStates: 0,\r\n componentsFound: 0,\r\n rulesGenerated: 0,\r\n rulesSkipped: 0,\r\n generatedCss: \"\",\r\n rules: [],\r\n }\r\n }\r\n\r\n // ── Step 2: Deduplicate configs (sama statesJson dari files berbeda) ─────\r\n\r\n const seen = new Set<string>()\r\n const uniqueConfigs: StaticStateCssInput[] = []\r\n\r\n for (const config of allConfigs) {\r\n const key = `${config.tag}::${config.statesJson}`\r\n if (!seen.has(key)) {\r\n seen.add(key)\r\n uniqueConfigs.push({\r\n tag: config.tag,\r\n componentName: config.componentName,\r\n statesJson: config.statesJson,\r\n })\r\n }\r\n }\r\n\r\n // ── Step 3: Generate CSS rules ─────────────────────────────────────────────\r\n // Rust handles everything: parse resolvedCss → class map → build rules.\r\n // Pass resolvedCss (Tailwind pipeline output) agar Rust bisa resolve semua\r\n // Tailwind class termasuk `w-full`, `ring-2`, dll yang tidak ada di TW_MAP statis.\r\n\r\n const allRules = native.generateStaticStateCss(uniqueConfigs, options.resolvedCss ?? null)\r\n // Count skipped: state entries yang tidak ter-resolve\r\n // (rules yang declarations-nya kosong sudah di-filter oleh Rust)\r\n const rulesSkipped = uniqueConfigs.reduce((total, cfg) => {\r\n try {\r\n const stateMap = JSON.parse(cfg.statesJson) as Record<string, string>\r\n return total + Object.keys(stateMap).length\r\n } catch { return total }\r\n }, 0) - allRules.length\r\n\r\n // ── Step 4: Build CSS output ───────────────────────────────────────────────\r\n\r\n // Group rules per component untuk komentar yang informatif\r\n const byComponent = new Map<string, GeneratedStateRule[]>()\r\n for (const rule of allRules) {\r\n const existing = byComponent.get(rule.componentName) ?? []\r\n existing.push(rule)\r\n byComponent.set(rule.componentName, existing)\r\n }\r\n\r\n const cssBlocks: string[] = []\r\n for (const [componentName, rules] of byComponent) {\r\n cssBlocks.push(`/* ${componentName} */`)\r\n for (const rule of rules) {\r\n cssBlocks.push(`/* state: ${rule.stateName} */`)\r\n cssBlocks.push(rule.cssRule)\r\n }\r\n cssBlocks.push(\"\")\r\n }\r\n\r\n const result: StaticStateExtractionResult = {\r\n filesScanned,\r\n filesWithStates,\r\n componentsFound: allConfigs.length,\r\n rulesGenerated: allRules.length,\r\n rulesSkipped: Math.max(0, rulesSkipped),\r\n generatedCss: cssBlocks.join(\"\\n\"),\r\n rules: allRules,\r\n }\r\n\r\n result.generatedCss = buildCssHeader(result) + result.generatedCss\r\n return result\r\n}\r\n\r\n/** Nama file output untuk static state CSS — di-import langsung dari globals.css */\r\nexport const TW_STATE_STATIC_FILENAME = \"_tw-state-static.css\"\r\n\r\n/**\r\n * Extract static state CSS dan tulis ke file terpisah `_tw-state-static.css`\r\n * di `.next/tw-classes/_tw-state-static.css` — grouped bersama `_initial-scan.css`.\r\n *\r\n * File ini harus di-`@import` langsung dari globals.css karena berisi raw CSS\r\n * (bukan Tailwind class names), sehingga tidak bisa di-pickup oleh `@source`.\r\n *\r\n * Dipanggil dari `withTailwindStyled.ts` setelah initial Tailwind scan.\r\n *\r\n * @param srcDir Source directory untuk scan\r\n * @param safelistPath Path ke safelist CSS file — dipakai untuk derive direktori output\r\n * @param options Optional config\r\n * @returns Summary string untuk logging\r\n */\r\nexport function appendStaticStateCssToSafelist(\r\n srcDir: string,\r\n safelistPath: string,\r\n options: {\r\n verbose?: boolean\r\n /**\r\n * CSS output dari Tailwind pipeline — isi dari `_initial-scan.css`.\r\n *\r\n * Wajib di-provide untuk resolve semua Tailwind class dengan benar.\r\n * Kalau tidak di-provide, fallback ke Rust resolver (class sederhana saja).\r\n */\r\n resolvedCss?: string\r\n } = {}\r\n): string {\r\n const result = extractStaticStateCss(srcDir, options)\r\n\r\n // Selalu tulis file (kosong jika tidak ada rules) supaya @import di globals.css\r\n // tidak error saat cold start sebelum ada komponen dengan states.\r\n const twClassesDir = path.join(path.dirname(safelistPath), \"tw-classes\")\r\n fs.mkdirSync(twClassesDir, { recursive: true })\r\n const stateFilePath = path.join(twClassesDir, TW_STATE_STATIC_FILENAME)\r\n\r\n if (result.rulesGenerated === 0) {\r\n try {\r\n // Tulis file kosong agar @import globals.css tidak error\r\n fs.writeFileSync(\r\n stateFilePath,\r\n \"/* tw-state-static.css — tidak ada state rules yang di-generate */\\n\",\r\n \"utf-8\"\r\n )\r\n } catch { /* non-fatal */ }\r\n return `[tw:static-state] tidak ada state rules yang di-generate (${result.filesScanned} files di-scan)`\r\n }\r\n\r\n try {\r\n // Tulis ke file terpisah — REPLACE setiap build supaya selalu fresh.\r\n // File ini di-@import langsung dari globals.css (bukan @source),\r\n // karena berisi raw CSS selector (.tw-s-[hash][data-state=\"true\"]),\r\n // bukan Tailwind class names yang bisa di-scan oleh @source.\r\n fs.writeFileSync(stateFilePath, result.generatedCss, \"utf-8\")\r\n\r\n return [\r\n `[tw:static-state] ${result.rulesGenerated} static state rules di-generate`,\r\n ` → ${result.filesScanned} files scanned, ${result.filesWithStates} dengan states`,\r\n ` → ${result.componentsFound} components, ${result.rulesSkipped} rules skipped (fallback ke runtime)`,\r\n ` → ditulis ke tw-classes/${TW_STATE_STATIC_FILENAME}`,\r\n ].join(\"\\n\")\r\n } catch (writeErr) {\r\n const msg = writeErr instanceof Error ? writeErr.message : String(writeErr)\r\n return `[tw:static-state] gagal tulis state CSS: ${msg}`\r\n }\r\n}","/**\r\n * Centralized logger — replaces scattered console.log/warn/error calls\r\n * across packages.\r\n *\r\n * Mendukung file output ke `.next/tw-classes/_tw-build.log` via `setLogFile()`.\r\n */\r\nimport fs from \"node:fs\"\r\nimport path from \"node:path\"\r\n\r\nexport type LogLevel = \"silent\" | \"error\" | \"warn\" | \"info\" | \"debug\"\r\n\r\nconst LEVELS: Record<LogLevel, number> = { silent: 0, error: 1, warn: 2, info: 3, debug: 4 }\r\n\r\nfunction getEnvLevel(): LogLevel {\r\n const env = process.env.TWS_LOG_LEVEL?.toLowerCase()\r\n if (env && env in LEVELS) return env as LogLevel\r\n return process.env.TWS_DEBUG_SCANNER === \"1\" ? \"debug\" : \"info\"\r\n}\r\n\r\nexport interface Logger {\r\n error(...args: unknown[]): void\r\n warn(...args: unknown[]): void\r\n info(...args: unknown[]): void\r\n debug(...args: unknown[]): void\r\n setLevel(level: LogLevel): void\r\n setLogFile(filePath: string): void\r\n}\r\n\r\n// Global log file path — diset dari withTailwindStyled.ts saat startup\r\nlet _globalLogFile: string | null = null\r\nlet _logFileInitialized = false\r\n\r\nexport function setGlobalLogFile(filePath: string): void {\r\n _globalLogFile = filePath\r\n _logFileInitialized = false\r\n // Buat/reset file saat pertama kali di-set (tiap dev server start)\r\n try {\r\n fs.mkdirSync(path.dirname(filePath), { recursive: true })\r\n fs.writeFileSync(\r\n filePath,\r\n `# tailwind-styled build log — ${new Date().toISOString()}\\n`,\r\n \"utf-8\"\r\n )\r\n _logFileInitialized = true\r\n } catch { /* non-fatal */ }\r\n}\r\n\r\nfunction writeToFile(line: string): void {\r\n if (!_globalLogFile || !_logFileInitialized) return\r\n try {\r\n fs.appendFileSync(_globalLogFile, line)\r\n } catch { /* non-fatal */ }\r\n}\r\n\r\nexport function createLogger(prefix: string, level?: LogLevel): Logger {\r\n const loggerState = {\r\n currentLevel: level ?? getEnvLevel(),\r\n setLevel(l: LogLevel) {\r\n this.currentLevel = l\r\n },\r\n }\r\n\r\n const log = (msgLevel: LogLevel, stream: \"stdout\" | \"stderr\", args: unknown[]) => {\r\n if (LEVELS[msgLevel] > LEVELS[loggerState.currentLevel]) return\r\n const line = `[${prefix}] ${args.map(String).join(\" \")}\\n`\r\n process[stream].write(line)\r\n writeToFile(line)\r\n }\r\n\r\n return {\r\n error: (...a) => log(\"error\", \"stderr\", a),\r\n warn: (...a) => log(\"warn\", \"stderr\", a),\r\n info: (...a) => log(\"info\", \"stdout\", a),\r\n debug: (...a) => log(\"debug\", \"stderr\", a),\r\n setLevel: loggerState.setLevel,\r\n setLogFile: (filePath: string) => setGlobalLogFile(filePath),\r\n }\r\n}\r\n\r\nexport const logger = createLogger(\"tailwind-styled\")","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 * Scanner — Rust native bridge\r\n *\r\n * Wraps the Rust scan_workspace and extract_classes_from_source functions.\r\n * Uses @tailwind-styled/shared for native binding resolution.\r\n */\r\nimport path from \"node:path\"\r\nimport { fileURLToPath } from \"node:url\"\r\nimport {\r\n createDebugLogger,\r\n loadNativeBinding,\r\n resolveNativeBindingCandidates,\r\n TwError,\r\n} from \"@tailwind-styled/shared\"\r\n\r\nconst log = createDebugLogger(\"scanner:native\")\r\n\r\n// ESM-compatible __dirname equivalent\r\nfunction getDirname(): string {\r\n if (typeof __dirname !== \"undefined\") {\r\n return __dirname\r\n }\r\n if (typeof import.meta !== \"undefined\" && import.meta.url) {\r\n return path.dirname(fileURLToPath(import.meta.url))\r\n }\r\n return process.cwd()\r\n}\r\n\r\ninterface NativeScannerBinding {\r\n scanWorkspace?: (\r\n root: string,\r\n extensions: string[] | null\r\n ) => {\r\n files: Array<{ file: string; classes: string[]; hash: string }>\r\n totalFiles: number\r\n uniqueClasses: string[] | null\r\n } | null\r\n extractClassesFromSource?: (source: string) => string[] | null\r\n hashFileContent?: (content: string) => string | null\r\n cacheRead?: (cachePath: string) => {\r\n entries: Array<{\r\n file: string\r\n classes: string[]\r\n hash: string\r\n mtimeMs: number\r\n size: number\r\n hitCount: number\r\n lastSeenMs?: number\r\n }>\r\n version: number\r\n } | null\r\n cacheWrite?: (\r\n cachePath: string,\r\n entries: Array<{\r\n file: string\r\n classes: string[]\r\n hash: string\r\n mtimeMs: number\r\n size: number\r\n hitCount: number\r\n lastSeenMs?: number\r\n }>\r\n ) => boolean\r\n cachePriority?: (\r\n mtimeMs: number,\r\n size: number,\r\n cachedMtimeMs: number,\r\n cachedSize: number,\r\n cachedHitCount: number,\r\n cachedLastSeenMs: number,\r\n nowMs: number\r\n ) => number\r\n batchExtractClasses?: (filePaths: string[]) => Array<{\r\n file: string\r\n classes: string[]\r\n content_hash: string\r\n ok: boolean\r\n error?: string | null\r\n }>\r\n scanCacheGet?: (filePath: string, contentHash: string) => string[] | null\r\n scanCachePut?: (filePath: string, contentHash: string, classes: string[], mtimeMs: number, size: number) => void\r\n scanCacheInvalidate?: (filePath: string) => void\r\n scanCacheStats?: () => { size: number }\r\n scanFile?: (filePath: string) => {\r\n file: string\r\n classes: string[]\r\n hash: string\r\n ok: boolean\r\n error?: string | null\r\n }\r\n collectFiles?: (root: string, extensions: string[] | null, ignoreDirs: string[] | null) => string[]\r\n scanFilesBatch?: (filePaths: string[]) => Array<{\r\n file: string\r\n classes: string[]\r\n hash: string\r\n }>\r\n generateSubComponentTypes?: (\r\n root: string,\r\n outputPath: string | null\r\n ) => {\r\n components: Array<{ name: string; classes: string[] }>\r\n outputPath: string | null\r\n totalFiles: number\r\n }\r\n /** Batch-check file existence + stale age. Menggantikan pruneStaleEntries() */\r\n pruneStaleEntries?: (\r\n entries: Array<{ file: string; lastSeenMs: number }>,\r\n maxAgeMs: number | null,\r\n checkExists: boolean | null\r\n ) => { keptIndices: number[]; removed: number }\r\n /** Hitung class frequency stats dari disk cache. Menggantikan computeCacheStats() */\r\n computeCacheStats?: (\r\n filesClasses: string[][],\r\n sizes: number[],\r\n top: number | null\r\n ) => {\r\n totalEntries: number\r\n totalClasses: number\r\n totalSizeBytes: number\r\n avgClassesPerEntryX100: number\r\n mostUsedClasses: Array<{ class: string; count: number }>\r\n }\r\n /** Rebuild workspace result — Rust HashSet dedup + sort. Menggantikan JS fallback di mergeResults() */\r\n rebuildWorkspaceResult?: (\r\n files: Array<{ file: string; classes: readonly string[] }>\r\n ) => { files: Array<{ file: string; classes: string[] }>; totalFiles: number; uniqueClasses: string[] }\r\n\r\n // ── Watch API (QA #12) ──────────────────────────────────────────────────\r\n /** Mulai native file watcher via `notify` crate. Returns handleId. */\r\n startWatch?: (rootDir: string) => { status: string; handleId: number }\r\n /** Poll events yang terkumpul sejak poll terakhir. Queue dikosongkan setelah dipoll. */\r\n pollWatchEvents?: (handleId: number) => Array<{ kind: string; path: string }>\r\n /** Hentikan watcher dengan handleId. */\r\n stopWatch?: (handleId: number) => boolean\r\n}\r\n\r\nconst isValidScannerBinding = (module: unknown): module is NativeScannerBinding => {\r\n const candidate = module as Partial<NativeScannerBinding> | null | undefined\r\n return !!(\r\n candidate &&\r\n (candidate.scanWorkspace ||\r\n candidate.extractClassesFromSource ||\r\n candidate.hashFileContent ||\r\n candidate.cacheRead ||\r\n candidate.cacheWrite)\r\n )\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────\r\n// Native Bridge - Factory Pattern\r\n// ─────────────────────────────────────────────────────────────────────────\r\n\r\nconst createScannerBridgeLoader = () => {\r\n const _state = {\r\n binding: undefined as NativeScannerBinding | null | undefined,\r\n loadError: null as string | null,\r\n candidatePaths: [] as string[],\r\n }\r\n\r\n const throwNativeBindingError = (): never => {\r\n const lines = [\r\n \"FATAL: Native scanner binding not found.\",\r\n \"\",\r\n \"This package requires the Rust native binding 'tailwind_styled_parser.node'.\",\r\n \"The binding was not found in any of these paths:\",\r\n ..._state.candidatePaths.map((p) => ` - ${p}`),\r\n \"\",\r\n ]\r\n\r\n if (_state.loadError) {\r\n lines.push(\"Load error:\", ` ${_state.loadError}`, \"\")\r\n }\r\n\r\n lines.push(\r\n \"To fix this, run:\",\r\n \" npm run build:rust\",\r\n \"\",\r\n \"This will build the native Rust module from the 'native/' directory.\",\r\n \"If you're using this package in a CI/CD environment, ensure Rust toolchain is installed\",\r\n \"and 'npm run build:rust' is executed before running tests or building.\"\r\n )\r\n\r\n throw new TwError(\"rust\", \"SCANNER_NATIVE_BINDING_NOT_FOUND\", lines.join(\"\\n\"))\r\n }\r\n\r\n const scannerGetBinding = (): NativeScannerBinding => {\r\n const cachedBinding = _state.binding\r\n if (cachedBinding !== undefined) {\r\n if (cachedBinding !== null) {\r\n return cachedBinding\r\n }\r\n return throwNativeBindingError()\r\n }\r\n\r\n const runtimeDir = getDirname()\r\n const candidates = resolveNativeBindingCandidates({\r\n runtimeDir,\r\n includeDefaultCandidates: true,\r\n })\r\n\r\n _state.candidatePaths = candidates\r\n\r\n const { binding, loadErrors } = loadNativeBinding<NativeScannerBinding>({\r\n runtimeDir,\r\n candidates,\r\n isValid: isValidScannerBinding,\r\n invalidExportMessage: \"Module loaded but missing expected scanner binding functions\",\r\n })\r\n\r\n if (binding) {\r\n log(`scanner native binding loaded successfully`)\r\n _state.binding = binding\r\n return _state.binding\r\n }\r\n\r\n if (loadErrors.length > 0) {\r\n _state.loadError = loadErrors.map((e) => `${e.path}: ${e.message}`).join(\"; \")\r\n }\r\n\r\n _state.binding = null\r\n return throwNativeBindingError()\r\n }\r\n\r\n return {\r\n get: scannerGetBinding,\r\n scannerGetBinding,\r\n reset: (): void => {\r\n _state.binding = undefined\r\n _state.loadError = null\r\n _state.candidatePaths = []\r\n },\r\n }\r\n}\r\n\r\nconst scannerBridgeLoader = createScannerBridgeLoader()\r\nconst scannerGetBinding = scannerBridgeLoader.get\r\n\r\nexport const resetScannerBridgeCache = scannerBridgeLoader.reset\r\n\r\nexport function scanWorkspaceNative(\r\n root: string,\r\n extensions?: string[]\r\n): ReturnType<NonNullable<NativeScannerBinding[\"scanWorkspace\"]>> {\r\n return scannerGetBinding().scanWorkspace!(root, extensions ?? null)\r\n}\r\n\r\nexport function extractClassesNative(source: string): string[] {\r\n const result = scannerGetBinding().extractClassesFromSource?.(source)\r\n if (result === null || result === undefined) {\r\n throw new TwError(\r\n \"rust\",\r\n \"SCANNER_EXTRACT_FAILED\",\r\n \"Native extractClassesFromSource returned null/undefined\"\r\n )\r\n }\r\n return result\r\n}\r\n\r\nexport function hashContentNative(content: string): string {\r\n const result = scannerGetBinding().hashFileContent?.(content)\r\n if (result === null || result === undefined) {\r\n throw new TwError(\r\n \"rust\",\r\n \"SCANNER_HASH_FAILED\",\r\n \"Native hashFileContent returned null/undefined\"\r\n )\r\n }\r\n return result\r\n}\r\n\r\nexport function isRustCacheAvailable(): boolean {\r\n return true\r\n}\r\n\r\nexport function hasNativeScannerBinding(): boolean {\r\n try {\r\n scannerBridgeLoader.get()\r\n return true\r\n } catch {\r\n return false\r\n }\r\n}\r\n\r\nexport function cacheReadNative(\r\n cachePath: string\r\n): ReturnType<NonNullable<NativeScannerBinding[\"cacheRead\"]>> {\r\n const result = scannerGetBinding().cacheRead?.(cachePath)\r\n if (result === null || result === undefined) {\r\n throw new TwError(\r\n \"rust\",\r\n \"SCANNER_CACHE_READ_FAILED\",\r\n \"Native cacheRead returned null/undefined\"\r\n )\r\n }\r\n return result\r\n}\r\n\r\nexport function cacheWriteNative(\r\n cachePath: string,\r\n entries: Parameters<NonNullable<NativeScannerBinding[\"cacheWrite\"]>>[1]\r\n): boolean {\r\n const result = scannerGetBinding().cacheWrite?.(cachePath, entries)\r\n if (result === null || result === undefined) {\r\n throw new TwError(\r\n \"rust\",\r\n \"SCANNER_CACHE_WRITE_FAILED\",\r\n \"Native cacheWrite returned null/undefined\"\r\n )\r\n }\r\n return result\r\n}\r\n\r\nexport function cachePriorityNative(\r\n mtimeMs: number,\r\n size: number,\r\n cachedMtimeMs: number,\r\n cachedSize: number,\r\n cachedHitCount: number,\r\n cachedLastSeenMs: number,\r\n nowMs = Date.now()\r\n): number {\r\n const result = scannerGetBinding().cachePriority?.(\r\n mtimeMs,\r\n size,\r\n cachedMtimeMs,\r\n cachedSize,\r\n cachedHitCount,\r\n cachedLastSeenMs,\r\n nowMs\r\n )\r\n if (result === null || result === undefined) {\r\n throw new TwError(\r\n \"rust\",\r\n \"SCANNER_CACHE_PRIORITY_FAILED\",\r\n \"Native cachePriority returned null/undefined\"\r\n )\r\n }\r\n return result\r\n}\r\n\r\nexport function batchExtractClassesNative(filePaths: string[]): Array<{\r\n file: string\r\n classes: string[]\r\n content_hash: string\r\n ok: boolean\r\n error?: string | null\r\n}> {\r\n const binding = scannerGetBinding()\r\n if (!binding.batchExtractClasses) {\r\n throw new Error(\"FATAL: Native binding 'batchExtractClasses' is required but not available.\")\r\n }\r\n return binding.batchExtractClasses(filePaths) ?? []\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// In-memory scan cache (Rust DashMap — zero disk I/O)\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport function scanCacheGet(filePath: string, contentHash: string): string[] | null {\r\n const binding = scannerGetBinding()\r\n if (!binding.scanCacheGet) {\r\n throw new Error(\"FATAL: Native binding 'scanCacheGet' is required but not available.\")\r\n }\r\n return binding.scanCacheGet(filePath, contentHash) ?? null\r\n}\r\n\r\nexport function scanCachePut(\r\n filePath: string,\r\n contentHash: string,\r\n classes: string[],\r\n mtimeMs: number,\r\n size: number\r\n): void {\r\n const binding = scannerGetBinding()\r\n if (!binding.scanCachePut) {\r\n throw new Error(\"FATAL: Native binding 'scanCachePut' is required but not available.\")\r\n }\r\n binding.scanCachePut(filePath, contentHash, classes, mtimeMs, size)\r\n}\r\n\r\nexport function scanCacheInvalidate(filePath: string): void {\r\n const binding = scannerGetBinding()\r\n if (!binding.scanCacheInvalidate) {\r\n throw new Error(\"FATAL: Native binding 'scanCacheInvalidate' is required but not available.\")\r\n }\r\n binding.scanCacheInvalidate(filePath)\r\n}\r\n\r\nexport function scanCacheStats(): { size: number } {\r\n const binding = scannerGetBinding()\r\n if (!binding.scanCacheStats) {\r\n throw new Error(\"FATAL: Native binding 'scanCacheStats' is required but not available.\")\r\n }\r\n return binding.scanCacheStats() as { size: number }\r\n}\r\nexport function scanFileNative(filePath: string): {\r\n file: string\r\n classes: string[]\r\n hash: string\r\n ok: boolean\r\n error?: string | null\r\n} {\r\n const binding = scannerGetBinding()\r\n if (!binding.scanFile) {\r\n throw new Error(\"FATAL: Native binding 'scanFile' is required but not available.\")\r\n }\r\n return binding.scanFile(filePath)\r\n}\r\n/**\r\n * Native file walker — kumpulkan file paths rekursif tanpa baca konten.\r\n *\r\n * Menggantikan `collectFiles()` di `parallel-scanner.ts`.\r\n * Returns null jika binding tidak tersedia (fallback ke JS).\r\n */\r\nexport function collectFilesNative(\r\n root: string,\r\n extensions: string[] | null,\r\n ignoreDirs: string[] | null\r\n): string[] | null {\r\n const binding = scannerGetBinding()\r\n if (!binding.collectFiles) return null\r\n return binding.collectFiles(root, extensions, ignoreDirs)\r\n}\r\n/**\r\n * Batch scan + hash banyak file sekaligus dalam satu NAPI call.\r\n *\r\n * Menggantikan loop `scanFileNative()` per file di worker thread.\r\n * Rust: `par_iter()` via rayon — semua file diproses paralel di thread pool Rust,\r\n * tanpa overhead spawn JS worker untuk setiap chunk.\r\n *\r\n * Kapan pakai ini vs `batchExtractClassesNative`:\r\n * - `scanFilesBatch` → butuh {file, classes, hash} — scan + hash sekaligus\r\n * - `batchExtractClasses` → hanya butuh {file, classes, content_hash, ok, error}\r\n *\r\n * Returns: array dengan panjang sama dengan input. File yang gagal dibaca\r\n * dikembalikan dengan classes:[] dan hash:\"\".\r\n */\r\nexport function scanFilesBatchNative(filePaths: string[]): Array<{\r\n file: string\r\n classes: string[]\r\n hash: string\r\n}> {\r\n const binding = scannerGetBinding()\r\n if (!binding.scanFilesBatch) {\r\n // Fallback: panggil scanFile satu per satu\r\n return filePaths.map((fp) => {\r\n try {\r\n const r = binding.scanFile?.(fp)\r\n return r\r\n ? { file: r.file, classes: r.classes, hash: r.hash ?? \"\" }\r\n : { file: fp, classes: [], hash: \"\" }\r\n } catch {\r\n return { file: fp, classes: [], hash: \"\" }\r\n }\r\n })\r\n }\r\n return binding.scanFilesBatch(filePaths)\r\n}\r\n \r\n/**\r\n * Scan workspace rekursif dan generate TypeScript type declarations\r\n * untuk setiap sub-component yang ditemukan.\r\n *\r\n * Menggantikan operasi scan manual + string codegen di JS.\r\n * Rust: walkdir + regex class extraction + type codegen dalam satu pass.\r\n *\r\n * @param root Direktori root workspace\r\n * @param outputPath Path output file .d.ts (opsional — kalau null, hanya return result)\r\n */\r\nexport function generateSubComponentTypesNative(\r\n root: string,\r\n outputPath?: string\r\n): {\r\n components: Array<{ name: string; classes: string[] }>\r\n outputPath: string | null\r\n totalFiles: number\r\n} | null {\r\n const binding = scannerGetBinding()\r\n if (!binding.generateSubComponentTypes) return null\r\n return binding.generateSubComponentTypes(root, outputPath ?? null) as {\r\n components: Array<{ name: string; classes: string[] }>\r\n outputPath: string | null\r\n totalFiles: number\r\n }\r\n}\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// pruneStaleEntries + computeCacheStats — native wrappers\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Batch-check file existence + stale age menggunakan Rust syscalls.\r\n * Returns `null` jika native tidak tersedia (JS fallback di caller).\r\n *\r\n * Menggantikan loop `existsSync()` di `pruneStaleEntries()` (cache-native.ts).\r\n */\r\nexport function pruneStaleEntriesNative(\r\n entries: Array<{ file: string; lastSeenMs?: number }>,\r\n maxAgeMs?: number,\r\n checkExists?: boolean\r\n): { keptIndices: number[]; removed: number } | null {\r\n const binding = scannerGetBinding()\r\n if (!binding.pruneStaleEntries) return null\r\n return binding.pruneStaleEntries(\r\n entries.map((e) => ({ file: e.file, lastSeenMs: e.lastSeenMs ?? 0 })),\r\n maxAgeMs ?? null,\r\n checkExists ?? null\r\n )\r\n}\r\n\r\n/**\r\n * Hitung class frequency + stats dari disk cache entries menggunakan Rust.\r\n * Returns `null` jika native tidak tersedia (JS fallback di caller).\r\n *\r\n * Menggantikan `computeCacheStats()` di `cache-native.ts`.\r\n */\r\nexport function rebuildWorkspaceResultNative(\r\n files: Array<{ file: string; classes: readonly string[] }>\r\n): { files: typeof files; totalFiles: number; uniqueClasses: string[] } | null {\r\n const binding = scannerBridgeLoader.get()\r\n if (!binding?.rebuildWorkspaceResult) return null\r\n try {\r\n return binding.rebuildWorkspaceResult(files)\r\n } catch {\r\n return null\r\n }\r\n}\r\n\r\nexport function computeCacheStatsNative(\r\n filesClasses: string[][],\r\n sizes: number[],\r\n top?: number\r\n): {\r\n totalEntries: number\r\n totalClasses: number\r\n totalSizeBytes: number\r\n avgClassesPerEntryX100: number\r\n mostUsedClasses: Array<{ class: string; count: number }>\r\n} | null {\r\n const binding = scannerGetBinding()\r\n if (!binding.computeCacheStats) return null\r\n return binding.computeCacheStats(filesClasses, sizes, top ?? null)\r\n}\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Watch API — native wrappers (QA #12)\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Mulai native file watcher menggunakan `notify` crate (Rust).\r\n * Returns `null` jika binding tidak tersedia — fallback ke fs.watch JS.\r\n */\r\nexport function startWatchNative(rootDir: string): { status: string; handleId: number } | null {\r\n try {\r\n const binding = scannerGetBinding()\r\n if (!binding.startWatch) return null\r\n return binding.startWatch(rootDir)\r\n } catch {\r\n return null\r\n }\r\n}\r\n\r\n/**\r\n * Poll events dari native watcher queue. Queue dikosongkan setelah dipoll.\r\n * Returns array kosong jika tidak ada events atau binding tidak tersedia.\r\n */\r\nexport function pollWatchEventsNative(handleId: number): Array<{ kind: string; path: string }> {\r\n try {\r\n const binding = scannerGetBinding()\r\n if (!binding.pollWatchEvents) return []\r\n return binding.pollWatchEvents(handleId)\r\n } catch {\r\n return []\r\n }\r\n}\r\n\r\n/**\r\n * Hentikan native watcher dengan handleId.\r\n */\r\nexport function stopWatchNative(handleId: number): boolean {\r\n try {\r\n const binding = scannerGetBinding()\r\n if (!binding.stopWatch) return false\r\n return binding.stopWatch(handleId)\r\n } catch {\r\n return false\r\n }\r\n}\r\n\r\n/**\r\n * Cek apakah native watch API tersedia.\r\n */\r\nexport function hasNativeWatchBinding(): boolean {\r\n try {\r\n const binding = scannerGetBinding()\r\n return !!(binding.startWatch && binding.pollWatchEvents && binding.stopWatch)\r\n } catch {\r\n return false\r\n }\r\n}","/**\r\n * tailwind-styled-v4 — Scanner Cache (Rust-backed)\r\n *\r\n * This module REQUIRES native Rust bindings and will FAIL LOUDLY if they are not available.\r\n * NO JavaScript fallback is provided.\r\n */\r\n\r\nimport fs from \"node:fs\"\r\nimport path from \"node:path\"\r\nimport {\r\n cachePriorityNative,\r\n cacheReadNative,\r\n cacheWriteNative,\r\n scanCacheGet,\r\n scanCachePut,\r\n scanCacheInvalidate,\r\n scanCacheStats,\r\n pruneStaleEntriesNative,\r\n computeCacheStatsNative,\r\n} from \"./native-bridge\"\r\n\r\nfunction defaultCachePath(rootDir: string, cacheDir?: string): string {\r\n const dir = cacheDir\r\n ? path.resolve(rootDir, cacheDir)\r\n : path.join(process.cwd(), \".cache\", \"tailwind-styled\")\r\n return path.join(dir, \"scanner-cache.json\")\r\n}\r\n\r\n// ── Public API ────────────────────────────────────────────────────────────────\r\n\r\nexport interface NativeCacheEntry {\r\n file: string\r\n classes: string[]\r\n hash: string\r\n mtimeMs: number\r\n size: number\r\n hitCount: number\r\n /** Terakhir file ditemukan di filesystem (ms epoch). Digunakan untuk stale cleanup. */\r\n lastSeenMs?: number\r\n}\r\n\r\n/** Default stale threshold — 7 hari */\r\nconst STALE_THRESHOLD_MS = 7 * 24 * 60 * 60 * 1000\r\n\r\n/**\r\n * Hapus entri cache yang sudah stale (file sudah tidak ada atau lastSeenMs terlalu lama).\r\n *\r\n * Native-first: Rust batch-check semua file dalam satu pass tanpa\r\n * event loop overhead. JS fallback: existsSync loop per file.\r\n */\r\nexport function pruneStaleEntries(\r\n entries: NativeCacheEntry[],\r\n opts: { maxAgeMs?: number; rootDir?: string } = {}\r\n): { pruned: NativeCacheEntry[]; removed: number } {\r\n const nativeResult = pruneStaleEntriesNative(\r\n entries.map((e) => ({ file: e.file, lastSeenMs: e.lastSeenMs })),\r\n opts.maxAgeMs,\r\n !!opts.rootDir\r\n )\r\n\r\n if (nativeResult !== null) {\r\n const pruned = nativeResult.keptIndices.map((i) => entries[i])\r\n return { pruned, removed: nativeResult.removed }\r\n }\r\n\r\n throw new Error(\"FATAL: Native binding 'pruneStaleEntries' is required but not available.\")\r\n}\r\n\r\n/**\r\n * Read scanner cache from disk using Rust parser.\r\n * REQUIRES native binding - throws if unavailable.\r\n *\r\n * FIX: Pastikan folder cache ada sebelum Rust coba baca file,\r\n * supaya tidak error \"os error 3 (path not found)\" pada first run.\r\n */\r\nexport function readCache(rootDir: string, cacheDir?: string): NativeCacheEntry[] {\r\n const cachePath = defaultCachePath(rootDir, cacheDir)\r\n\r\n // Buat folder cache jika belum ada — cegah \"os error 3\" pada first run\r\n fs.mkdirSync(path.dirname(cachePath), { recursive: true })\r\n\r\n const result = cacheReadNative(cachePath)\r\n if (!result) return []\r\n\r\n return result.entries.map((e) => ({\r\n file: e.file,\r\n classes: e.classes,\r\n hash: e.hash,\r\n mtimeMs: e.mtimeMs,\r\n size: e.size,\r\n hitCount: e.hitCount,\r\n lastSeenMs: e.lastSeenMs,\r\n }))\r\n}\r\n\r\n/**\r\n * Write scanner cache to disk using Rust serialiser.\r\n * REQUIRES native binding - throws if unavailable.\r\n *\r\n * FIX: Pastikan folder cache ada sebelum Rust coba tulis file.\r\n */\r\nexport function writeCache(rootDir: string, entries: NativeCacheEntry[], cacheDir?: string): void {\r\n const cachePath = defaultCachePath(rootDir, cacheDir)\r\n\r\n // Buat folder cache jika belum ada — cegah write gagal pada first run\r\n fs.mkdirSync(path.dirname(cachePath), { recursive: true })\r\n\r\n const success = cacheWriteNative(cachePath, entries)\r\n if (!success) {\r\n throw new Error(\r\n \"Native cacheWrite failed. Run 'npm run build:rust' to rebuild native bindings.\"\r\n )\r\n }\r\n}\r\n\r\n/**\r\n * Compute priority score for a file using the Rust SmartCache algorithm.\r\n * Higher = process first.\r\n * REQUIRES native binding - throws if unavailable.\r\n */\r\nexport function filePriority(\r\n mtimeMs: number,\r\n size: number,\r\n cached: { mtimeMs: number; size: number; hitCount: number; lastSeenMs?: number } | undefined,\r\n nowMs = Date.now()\r\n): number {\r\n return cachePriorityNative(\r\n mtimeMs,\r\n size,\r\n cached?.mtimeMs ?? 0,\r\n cached?.size ?? 0,\r\n cached?.hitCount ?? 0,\r\n cached?.lastSeenMs ?? 0,\r\n nowMs\r\n )\r\n}\r\n\r\nexport interface CacheStats {\r\n totalEntries: number\r\n totalClasses: number\r\n totalSizeBytes: number\r\n avgClassesPerEntry: number\r\n mostUsedClasses: Array<{ class: string; count: number }>\r\n}\r\n\r\n/**\r\n * Rust in-memory cache — hot path untuk per-file lookup saat scan.\r\n * Jauh lebih cepat dari disk JSON cache untuk file yang baru saja di-scan.\r\n */\r\nexport const hotCache = {\r\n get: scanCacheGet,\r\n put: scanCachePut,\r\n invalidate: scanCacheInvalidate,\r\n} as const\r\n\r\n/**\r\n * Stats dari Rust in-memory cache (DashMap).\r\n * `size` = jumlah entry saat ini di cache.\r\n */\r\nexport function getHotCacheStats(): { size: number } {\r\n return scanCacheStats()\r\n}\r\n\r\n/**\r\n * Compute disk cache stats dari entries (diperlukan untuk mostUsedClasses).\r\n *\r\n * Native-first: Rust HashMap count + partial sort — ~3× lebih cepat\r\n * dari JS Map untuk workspace besar (5000+ entries).\r\n * JS fallback: manual Map count + .sort().\r\n */\r\nexport function computeCacheStats(entries: NativeCacheEntry[]): CacheStats {\r\n if (entries.length === 0) {\r\n return { totalEntries: 0, totalClasses: 0, totalSizeBytes: 0, avgClassesPerEntry: 0, mostUsedClasses: [] }\r\n }\r\n\r\n // Native-first\r\n const nativeResult = computeCacheStatsNative(\r\n entries.map((e) => e.classes),\r\n entries.map((e) => e.size),\r\n 10\r\n )\r\n\r\n if (nativeResult !== null) {\r\n return {\r\n totalEntries: nativeResult.totalEntries,\r\n totalClasses: nativeResult.totalClasses,\r\n totalSizeBytes: nativeResult.totalSizeBytes,\r\n avgClassesPerEntry: nativeResult.avgClassesPerEntryX100 / 100,\r\n mostUsedClasses: nativeResult.mostUsedClasses,\r\n }\r\n }\r\n\r\n throw new Error(\"FATAL: Native binding 'computeCacheStats' is required but not available.\")\r\n}","/**\r\n * Native parallel scanner menggunakan worker threads + Rust batchExtractClasses.\r\n *\r\n * Untuk workspaces besar (200+ files), file-list dibagi ke beberapa worker.\r\n * Setiap worker memanggil native `batchExtractClasses` yang sudah memakai\r\n * rayon par_iter di sisi Rust — sehingga parallelism terjadi di dua level:\r\n * 1. Multiple worker threads (TS/Node level)\r\n * 2. rayon par_iter di dalam setiap worker (Rust level)\r\n *\r\n * Untuk workspace kecil (< PARALLEL_THRESHOLD), langsung panggil batchExtractClasses\r\n * di main thread — overhead spawn worker tidak worth it.\r\n */\r\n\r\nimport { Worker, isMainThread, parentPort, workerData } from \"node:worker_threads\"\r\nimport path from \"node:path\"\r\nimport { availableParallelism } from \"node:os\"\r\nimport { fileURLToPath } from \"node:url\"\r\n\r\nimport { isScannableFile, DEFAULT_EXTENSIONS, DEFAULT_IGNORES } from \"./index\"\r\nimport { batchExtractClassesNative, collectFilesNative, rebuildWorkspaceResultNative } from \"./native-bridge\"\r\nimport type { ScanWorkspaceResult, ScanFileResult } from \"./types\"\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Constants\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nconst PARALLEL_THRESHOLD = 50\r\nconst DEFAULT_CHUNK_SIZE = 150\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Types\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface ParallelScanOptions {\r\n extensions?: string[]\r\n ignoreDirs?: string[]\r\n maxWorkers?: number\r\n chunkSize?: number\r\n}\r\n\r\ninterface NativeBatchResult {\r\n file: string\r\n classes: string[]\r\n content_hash: string\r\n ok: boolean\r\n error?: string | null\r\n}\r\n\r\ninterface WorkerInput {\r\n filePaths: string[]\r\n}\r\n\r\ntype WorkerOutput =\r\n | { ok: true; results: NativeBatchResult[] }\r\n | { ok: false; error: string }\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// File collection\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// File collection — native-first, JS fallback\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Kumpulkan semua file yang cocok secara rekursif dari rootDir.\r\n *\r\n * Native: satu Rust walk tanpa JS event loop overhead — 2–5× lebih cepat\r\n * untuk workspace besar. Tidak membaca konten file, hanya paths.\r\n *\r\n * JS fallback: dipakai jika native binding tidak tersedia (mis. test env).\r\n */\r\nfunction collectFiles(rootDir: string, extensions: string[], ignoreDirs: string[]): string[] {\r\n const native = collectFilesNative(rootDir, extensions, ignoreDirs)\r\n if (native !== null) return native\r\n throw new Error(\"FATAL: Native binding 'collectFiles' is required but not available.\")\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Merge results\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction mergeResults(batchResults: NativeBatchResult[]): ScanWorkspaceResult {\r\n const files: ScanFileResult[] = batchResults.map((r) => ({\r\n file: r.file,\r\n classes: r.classes,\r\n hash: r.content_hash,\r\n }))\r\n const native = rebuildWorkspaceResultNative(files)\r\n if (native) return native\r\n throw new Error(\"FATAL: Native binding 'rebuildWorkspaceResult' is required but not available.\")\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Worker thread entry point\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nif (!isMainThread && parentPort) {\r\n const { filePaths } = workerData as WorkerInput\r\n try {\r\n const results = batchExtractClassesNative(filePaths)\r\n const msg: WorkerOutput = { ok: true, results }\r\n parentPort.postMessage(msg)\r\n } catch (error) {\r\n const msg: WorkerOutput = {\r\n ok: false,\r\n error: error instanceof Error ? error.message : String(error),\r\n }\r\n parentPort.postMessage(msg)\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// __filename compat CJS + ESM\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\ndeclare const __filename: string | undefined\r\nconst _workerFilename =\r\n typeof __filename !== \"undefined\" ? __filename : fileURLToPath(import.meta.url)\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Spawn worker for one chunk\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction runChunkInWorker(filePaths: string[]): Promise<NativeBatchResult[]> {\r\n return new Promise((resolve, reject) => {\r\n const worker = new Worker(_workerFilename, {\r\n workerData: { filePaths } satisfies WorkerInput,\r\n })\r\n worker.once(\"message\", (payload: WorkerOutput) => {\r\n if (payload.ok) {\r\n resolve(payload.results)\r\n } else {\r\n reject(new Error(payload.error ?? \"parallel-scanner worker failed\"))\r\n }\r\n })\r\n worker.once(\"error\", reject)\r\n worker.once(\"exit\", (code) => {\r\n if (code !== 0) reject(new Error(`parallel-scanner worker exited with code ${code}`))\r\n })\r\n })\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Public API\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport async function scanWorkspaceParallel(\r\n rootDir: string,\r\n options: ParallelScanOptions = {}\r\n): Promise<ScanWorkspaceResult> {\r\n const {\r\n extensions = DEFAULT_EXTENSIONS,\r\n ignoreDirs = DEFAULT_IGNORES,\r\n maxWorkers = Math.max(1, availableParallelism() - 1),\r\n chunkSize = DEFAULT_CHUNK_SIZE,\r\n } = options\r\n\r\n const files = collectFiles(path.resolve(rootDir), extensions, ignoreDirs)\r\n\r\n if (files.length < PARALLEL_THRESHOLD) {\r\n return mergeResults(batchExtractClassesNative(files))\r\n }\r\n\r\n const chunks: string[][] = []\r\n for (let i = 0; i < files.length; i += chunkSize) {\r\n chunks.push(files.slice(i, i + chunkSize))\r\n }\r\n\r\n const allResults: NativeBatchResult[] = []\r\n for (let i = 0; i < chunks.length; i += maxWorkers) {\r\n const batch = chunks.slice(i, i + maxWorkers)\r\n const batchResults = await Promise.all(batch.map(runChunkInWorker))\r\n allResults.push(...batchResults.flat())\r\n }\r\n\r\n return mergeResults(allResults)\r\n}","import { z } from \"zod\"\r\nimport { TwError } from \"@tailwind-styled/shared\"\r\n\r\nconst formatIssuePath = (path: readonly PropertyKey[]): string =>\r\n path.length > 0\r\n ? path\r\n .map((segment) =>\r\n typeof segment === \"symbol\" ? segment.description ?? segment.toString() : String(segment)\r\n )\r\n .join(\".\")\r\n : \"<root>\"\r\n\r\nconst formatIssues = (error: z.ZodError): string =>\r\n error.issues\r\n .map((issue) => {\r\n const path = formatIssuePath(issue.path)\r\n return `${path}: ${issue.message}`\r\n })\r\n .join(\"; \")\r\n\r\nconst parseWithSchema = <T>(schema: z.ZodType<T>, data: unknown, label: string): T => {\r\n const parsed = schema.safeParse(data)\r\n if (parsed.success) return parsed.data\r\n const details = formatIssues(parsed.error)\r\n throw new TwError(\r\n \"validation\",\r\n \"SCHEMA_VALIDATION_FAILED\",\r\n details ? `${label}: ${details}` : label,\r\n parsed.error\r\n )\r\n}\r\n\r\nconst NonNegativeIntegerSchema = z.number().int().min(0)\r\n\r\nexport const ScanWorkspaceOptionsSchema = z.object({\r\n includeExtensions: z.array(z.string()).optional(),\r\n ignoreDirectories: z.array(z.string()).optional(),\r\n useCache: z.boolean().optional(),\r\n cacheDir: z.string().min(1).optional(),\r\n smartInvalidation: z.boolean().optional(),\r\n})\r\n\r\nexport type ScanWorkspaceOptions = z.infer<typeof ScanWorkspaceOptionsSchema>\r\n\r\nexport const ScanFileResultSchema = z.object({\r\n file: z.string(),\r\n classes: z.array(z.string()),\r\n hash: z.string().optional(),\r\n})\r\n\r\nexport type ScanFileResult = z.infer<typeof ScanFileResultSchema>\r\n\r\nexport const ScanWorkspaceResultSchema = z\r\n .object({\r\n files: z.array(ScanFileResultSchema),\r\n totalFiles: NonNegativeIntegerSchema,\r\n uniqueClasses: z.array(z.string()),\r\n })\r\n .refine((value) => value.totalFiles === value.files.length, {\r\n message: \"scan result totalFiles must match files.length\",\r\n path: [\"totalFiles\"],\r\n })\r\n\r\nexport type ScanWorkspaceResult = z.infer<typeof ScanWorkspaceResultSchema>\r\n\r\nexport const ScannerWorkerRequestSchema = z.object({\r\n rootDir: z.string().min(1),\r\n options: ScanWorkspaceOptionsSchema.optional(),\r\n})\r\n\r\nexport type ScannerWorkerRequest = z.infer<typeof ScannerWorkerRequestSchema>\r\n\r\nexport const ScannerWorkerSuccessMessageSchema = z.object({\r\n ok: z.literal(true),\r\n result: ScanWorkspaceResultSchema,\r\n})\r\n\r\nexport const ScannerWorkerErrorMessageSchema = z.object({\r\n ok: z.literal(false),\r\n error: z.string().optional(),\r\n})\r\n\r\nexport const ScannerWorkerMessageSchema = z.union([\r\n ScannerWorkerSuccessMessageSchema,\r\n ScannerWorkerErrorMessageSchema,\r\n])\r\n\r\nexport type ScannerWorkerMessage = z.infer<typeof ScannerWorkerMessageSchema>\r\n\r\nexport const parseScanWorkspaceOptions = (options: unknown) =>\r\n parseWithSchema(ScanWorkspaceOptionsSchema, options ?? {}, \"scanner options are invalid\")\r\n\r\nexport const parseScanFileResult = (result: unknown) =>\r\n parseWithSchema(ScanFileResultSchema, result, \"scanner file result is invalid\")\r\n\r\nexport const parseScanWorkspaceResult = (result: unknown) =>\r\n parseWithSchema(ScanWorkspaceResultSchema, result, \"scanner workspace result is invalid\")\r\n\r\nexport const parseScannerWorkerRequest = (request: unknown) =>\r\n parseWithSchema(ScannerWorkerRequestSchema, request, \"scanner worker request is invalid\")\r\n\r\nexport const parseScannerWorkerMessage = (message: unknown) =>\r\n parseWithSchema(ScannerWorkerMessageSchema, message, \"scanner worker message is invalid\")\r\n","import fs from \"node:fs\"\r\nimport { createRequire } from \"node:module\"\r\nimport path from \"node:path\"\r\nimport { fileURLToPath } from \"node:url\"\r\nimport { Worker } from \"node:worker_threads\"\r\nimport { createLogger } from \"@tailwind-styled/shared\"\r\nimport { filePriority, type NativeCacheEntry, readCache, writeCache } from \"./cache-native\"\r\nimport { hashContentNative, isRustCacheAvailable } from \"./native-bridge\"\r\nimport { scanWorkspaceParallel } from \"./parallel-scanner\"\r\nimport {\r\n parseScannerWorkerMessage,\r\n parseScanWorkspaceOptions,\r\n parseScanWorkspaceResult,\r\n type ScanFileResult,\r\n type ScanWorkspaceOptions,\r\n type ScanWorkspaceResult,\r\n} from \"./schemas\"\r\n\r\nconst log = createLogger(\"scanner\")\r\n\r\nconst SCAN_WORKER_TIMEOUT_MS = 120_000\r\n\r\ntype NativeParsedClass = { raw?: string }\r\n// ClassExtractResult shape dari Rust (napi-rs export)\r\ntype NativeClassExtractResult = {\r\n classes: string[]\r\n componentNames: string[]\r\n hasTwUsage: boolean\r\n hasUseClient: boolean\r\n imports: string[]\r\n}\r\ntype NativeParserBinding = {\r\n parse_classes?: (input: string) => NativeParsedClass[]\r\n parseClasses?: (input: string) => NativeParsedClass[]\r\n // Rust returns ClassExtractResult object, bukan plain string[]\r\n extractClassesFromSource?: (source: string) => NativeClassExtractResult | string[] | null\r\n batchExtractClassesNative?: (filePaths: string[]) => Array<{\r\n file: string; classes: string[]; contentHash: string; ok: boolean; error?: string\r\n }>\r\n}\r\n\r\nfunction getRuntimeDir(): string {\r\n if (typeof __dirname !== \"undefined\" && __dirname.length > 0) {\r\n return __dirname\r\n }\r\n if (typeof import.meta !== \"undefined\" && import.meta.url) {\r\n return path.dirname(fileURLToPath(import.meta.url))\r\n }\r\n return process.cwd()\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────\r\n// Native Parser Binding - Factory Pattern (no let!)\r\n// ─────────────────────────────────────────────────────────────────────────\r\n\r\nconst createNativeParserLoader = () => {\r\n const _state = {\r\n binding: undefined as NativeParserBinding | null | undefined,\r\n initError: null as string | null,\r\n }\r\n\r\n const debugNative = (message: string): void => {\r\n log.debug(`[native] ${message}`)\r\n }\r\n\r\n const loadNativeParserBinding = (): NativeParserBinding | null => {\r\n if (_state.binding !== undefined) return _state.binding\r\n\r\n const runtimeDir = getRuntimeDir()\r\n const req = createRequire(path.join(runtimeDir, \"noop.cjs\"))\r\n\r\n const _platform = process.platform\r\n const _arch = process.arch\r\n const _platformArch = `${_platform}-${_arch}`\r\n const _platformArchGnu = _platformArch === \"linux-x64\" ? \"linux-x64-gnu\"\r\n : _platformArch === \"linux-arm64\" ? \"linux-arm64-gnu\"\r\n : _platformArch\r\n\r\n const candidates = [\r\n // ── binaryName baru: tailwind-styled-native (napi-rs naming) ──\r\n // cwd = repo root saat run dari root, atau package dir saat workspaces\r\n path.resolve(process.cwd(), \"native\", \"tailwind-styled-native.node\"),\r\n path.resolve(process.cwd(), \"native\", `tailwind-styled-native.${_platformArch}.node`),\r\n path.resolve(process.cwd(), \"native\", `tailwind-styled-native.${_platformArchGnu}.node`),\r\n // runtimeDir = dist/ → naik 1 level ke package root (npm install case)\r\n // e.g. node_modules/tailwind-styled-v4/dist/ → node_modules/tailwind-styled-v4/native/\r\n path.resolve(runtimeDir, \"..\", \"native\", \"tailwind-styled-native.node\"),\r\n path.resolve(runtimeDir, \"..\", \"native\", `tailwind-styled-native.${_platformArch}.node`),\r\n path.resolve(runtimeDir, \"..\", \"native\", `tailwind-styled-native.${_platformArchGnu}.node`),\r\n // runtimeDir = dist/ → naik 4 level ke repo root (monorepo dev case)\r\n path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", \"tailwind-styled-native.node\"),\r\n path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", `tailwind-styled-native.${_platformArchGnu}.node`),\r\n // 3 level fallback (jika package di-nest lebih dangkal)\r\n path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"native\", \"tailwind-styled-native.node\"),\r\n path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"native\", `tailwind-styled-native.${_platformArchGnu}.node`),\r\n // ── binaryName lama: tailwind_styled_parser (backward compat) ──\r\n path.resolve(process.cwd(), \"native/tailwind_styled_parser.node\"),\r\n path.resolve(process.cwd(), \"native/build/Release/tailwind_styled_parser.node\"),\r\n path.resolve(runtimeDir, \"..\", \"native\", \"tailwind_styled_parser.node\"),\r\n path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", \"tailwind_styled_parser.node\"),\r\n path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"native\", \"tailwind_styled_parser.node\"),\r\n path.resolve(\r\n runtimeDir,\r\n \"..\",\r\n \"..\",\r\n \"..\",\r\n \"native\",\r\n \"build\",\r\n \"Release\",\r\n \"tailwind_styled_parser.node\"\r\n ),\r\n ]\r\n\r\n for (const fullPath of candidates) {\r\n if (!fs.existsSync(fullPath)) continue\r\n try {\r\n const required = req(fullPath) as NativeParserBinding\r\n if (\r\n required &&\r\n (typeof required.extractClassesFromSource === \"function\" ||\r\n typeof required.parseClasses === \"function\" ||\r\n typeof required.parse_classes === \"function\")\r\n ) {\r\n _state.binding = required\r\n debugNative(`using native parser from ${fullPath}`)\r\n return _state.binding\r\n }\r\n } catch (error) {\r\n _state.initError = error instanceof Error ? error.message : String(error)\r\n }\r\n }\r\n\r\n _state.binding = null\r\n if (!_state.initError) {\r\n _state.initError = \"native .node binding not found\"\r\n }\r\n debugNative(`native binding not available: ${_state.initError}`)\r\n return _state.binding\r\n }\r\n\r\n return {\r\n get: loadNativeParserBinding,\r\n reset: (): void => {\r\n _state.binding = undefined\r\n _state.initError = null\r\n },\r\n }\r\n}\r\n\r\nconst nativeParserLoader = createNativeParserLoader()\r\n\r\nfunction normalizeWithNativeParser(tokens: string[]): string[] {\r\n const binding = nativeParserLoader.get()\r\n const parseClasses = binding?.parseClasses ?? binding?.parse_classes\r\n if (!binding || typeof parseClasses !== \"function\") {\r\n throw new Error(\r\n \"Native parser binding is required but not available. Run 'npm run build:rust' to build it.\"\r\n )\r\n }\r\n\r\n try {\r\n const parsed = parseClasses(tokens.join(\" \"))\r\n const normalized = parsed.map((item) => item.raw?.trim() ?? \"\").filter(Boolean)\r\n return Array.from(new Set(normalized))\r\n } catch (error) {\r\n const errorMessage = error instanceof Error ? error.message : String(error)\r\n throw new Error(`Native parser failed: ${errorMessage}. Run 'npm run build:rust' to rebuild.`)\r\n }\r\n}\r\n\r\nexport type { ScanFileResult, ScanWorkspaceOptions, ScanWorkspaceResult } from \"./schemas\"\r\nexport {\r\n parseScannerWorkerMessage,\r\n parseScanWorkspaceOptions,\r\n parseScanWorkspaceResult,\r\n} from \"./schemas\"\r\n\r\nexport const DEFAULT_EXTENSIONS = [\".js\", \".jsx\", \".ts\", \".tsx\", \".mjs\", \".cjs\"]\r\nexport const DEFAULT_IGNORES = [\"node_modules\", \".git\", \".next\", \"dist\", \"out\", \".turbo\", \".cache\"]\r\n\r\nfunction resolveScannerWorkerModulePath(): string | null {\r\n const runtimeDir = (() => {\r\n if (typeof __dirname !== \"undefined\" && __dirname.length > 0) {\r\n return __dirname\r\n }\r\n // ESM fallback\r\n if (typeof import.meta !== \"undefined\" && import.meta.url) {\r\n return path.dirname(fileURLToPath(import.meta.url))\r\n }\r\n // Final fallback\r\n return process.cwd()\r\n })()\r\n\r\n const candidates = [\r\n path.resolve(runtimeDir, \"worker.cjs\"),\r\n path.resolve(runtimeDir, \"worker.js\"),\r\n path.resolve(runtimeDir, \"worker.ts\"),\r\n ]\r\n\r\n for (const candidate of candidates) {\r\n if (fs.existsSync(candidate)) return candidate\r\n }\r\n\r\n return null\r\n}\r\n\r\nfunction scanWorkspaceInWorker(\r\n rootDir: string,\r\n options: ScanWorkspaceOptions\r\n): Promise<ScanWorkspaceResult> {\r\n const normalizedOptions = parseScanWorkspaceOptions(options)\r\n const modulePath = resolveScannerWorkerModulePath()\r\n if (!modulePath) {\r\n return Promise.reject(new Error(\"scanner worker module path could not be resolved\"))\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n const settleState = { settled: false }\r\n\r\n const worker = new Worker(modulePath, { workerData: { rootDir, options: normalizedOptions } })\r\n\r\n const timeout = setTimeout(() => {\r\n if (!settleState.settled) {\r\n settleState.settled = true\r\n void worker.terminate()\r\n reject(new Error(`scanner worker timed out after ${SCAN_WORKER_TIMEOUT_MS}ms`))\r\n }\r\n }, SCAN_WORKER_TIMEOUT_MS)\r\n\r\n const finish = (callback: () => void) => {\r\n if (settleState.settled) return\r\n settleState.settled = true\r\n clearTimeout(timeout)\r\n callback()\r\n }\r\n\r\n worker.once(\"message\", (payload: unknown) => {\r\n const message = parseScannerWorkerMessage(payload)\r\n finish(() => {\r\n if (message?.ok) {\r\n resolve(parseScanWorkspaceResult(message.result))\r\n return\r\n }\r\n reject(new Error(message?.error ?? \"scanner worker failed without an error message\"))\r\n })\r\n })\r\n\r\n worker.once(\"error\", (error: Error) => {\r\n finish(() => reject(error))\r\n })\r\n\r\n worker.once(\"exit\", (code: number) => {\r\n if (code !== 0) {\r\n finish(() => reject(new Error(`scanner worker exited with code ${code}`)))\r\n }\r\n })\r\n })\r\n}\r\n\r\nfunction buildExtensionSet(includeExtensions: string[]): Set<string> {\r\n return new Set(includeExtensions)\r\n}\r\n\r\nfunction collectCandidates(\r\n rootDir: string,\r\n ignoreDirectories: Set<string>,\r\n extensionSet: Set<string>\r\n): string[] {\r\n const candidates: string[] = []\r\n const directories = [rootDir]\r\n\r\n while (directories.length > 0) {\r\n const currentDir = directories.pop()\r\n if (!currentDir) continue\r\n\r\n const entries = (() => {\r\n try {\r\n return fs.readdirSync(currentDir, { withFileTypes: true })\r\n } catch {\r\n return [] as fs.Dirent[]\r\n }\r\n })()\r\n\r\n for (const entry of entries) {\r\n const fullPath = path.join(currentDir, entry.name)\r\n\r\n if (entry.isDirectory()) {\r\n if (!ignoreDirectories.has(entry.name)) directories.push(fullPath)\r\n continue\r\n }\r\n\r\n if (!entry.isFile()) continue\r\n if (!extensionSet.has(path.extname(entry.name))) continue\r\n candidates.push(fullPath)\r\n }\r\n }\r\n\r\n return candidates\r\n}\r\n\r\nfunction toCacheSize(size: number): number {\r\n if (!Number.isFinite(size)) return 0\r\n const normalized = Math.max(0, Math.trunc(size))\r\n return Math.min(normalized, 0xffffffff)\r\n}\r\n\r\nexport function scanSource(source: string): string[] {\r\n const nativeBinding = nativeParserLoader.get()\r\n if (nativeBinding?.extractClassesFromSource) {\r\n const result = nativeBinding.extractClassesFromSource(source)\r\n // Rust mengembalikan ClassExtractResult { classes: string[], ... }\r\n // bukan plain string[] — handle kedua kemungkinan untuk backward compat\r\n if (Array.isArray(result)) {\r\n return Array.from(new Set(result.filter(Boolean)))\r\n }\r\n if (result !== null && result !== undefined && Array.isArray((result as NativeClassExtractResult).classes)) {\r\n return Array.from(new Set((result as NativeClassExtractResult).classes.filter(Boolean)))\r\n }\r\n }\r\n\r\n throw new Error(\r\n \"FATAL: Native parser binding is required but not available.\\n\" +\r\n \"This package requires native Rust bindings.\\n\\n\" +\r\n \"Resolution steps:\\n\" +\r\n \"1. Build the native Rust module: npm run build:rust\"\r\n )\r\n}\r\n\r\nexport function isScannableFile(filePath: string, includeExtensions = DEFAULT_EXTENSIONS): boolean {\r\n return includeExtensions.includes(path.extname(filePath))\r\n}\r\n\r\nexport function scanFile(filePath: string): ScanFileResult {\r\n const { scanFileNative } = require(\"./native-bridge\")\r\n const result = scanFileNative(filePath) as {\r\n file: string; classes: string[]; hash: string; ok: boolean; error?: string | null\r\n }\r\n if (!result.ok) {\r\n throw new Error(`scanFile failed for ${filePath}: ${result.error ?? \"unknown error\"}`)\r\n }\r\n return {\r\n file: result.file,\r\n classes: result.classes,\r\n ...(result.hash ? { hash: result.hash } : {}),\r\n }\r\n}\r\n\r\nexport function scanWorkspace(\r\n rootDir: string,\r\n options: ScanWorkspaceOptions = {}\r\n): ScanWorkspaceResult {\r\n const normalizedOptions = parseScanWorkspaceOptions(options)\r\n const includeExtensions = normalizedOptions.includeExtensions ?? DEFAULT_EXTENSIONS\r\n const extensionSet = buildExtensionSet(includeExtensions)\r\n const ignoreDirectories = new Set(normalizedOptions.ignoreDirectories ?? DEFAULT_IGNORES)\r\n const useCache = normalizedOptions.useCache ?? true\r\n const _smartInvalidation = normalizedOptions.smartInvalidation ?? true\r\n\r\n const files: ScanFileResult[] = []\r\n const unique = new Set<string>()\r\n const candidates = collectCandidates(rootDir, ignoreDirectories, extensionSet)\r\n\r\n const processResult = (result: ScanFileResult) => {\r\n files.push(result)\r\n for (const cls of result.classes) unique.add(cls)\r\n }\r\n\r\n \r\n const { scanWorkspaceNative } = require(\"./native-bridge\")\r\n\r\n if (!normalizedOptions.cacheDir && !useCache) {\r\n const nativeResult = scanWorkspaceNative(rootDir, includeExtensions)\r\n if (nativeResult) {\r\n return parseScanWorkspaceResult({\r\n files: nativeResult.files.map((f: { file: string; classes: string[]; hash?: string }) => ({\r\n file: f.file,\r\n classes: f.classes,\r\n ...(f.hash ? { hash: f.hash } : {}),\r\n })),\r\n totalFiles: nativeResult.totalFiles,\r\n uniqueClasses: nativeResult.uniqueClasses,\r\n })\r\n }\r\n }\r\n\r\n if (useCache && isRustCacheAvailable()) {\r\n const cacheEntries: NativeCacheEntry[] = (() => {\r\n try {\r\n return readCache(rootDir, normalizedOptions.cacheDir)\r\n } catch (error) {\r\n log.debug(\r\n `cache read failed, continuing without persisted cache: ${\r\n error instanceof Error ? error.message : String(error)\r\n }`\r\n )\r\n return []\r\n }\r\n })()\r\n\r\n const cacheMap = new Map(cacheEntries.map((entry) => [entry.file, entry]))\r\n const nowMs = Date.now()\r\n const ranked: Array<{\r\n filePath: string\r\n stat: fs.Stats\r\n size: number\r\n cached?: NativeCacheEntry\r\n priority: number\r\n }> = []\r\n\r\n for (const filePath of candidates) {\r\n const stat = (() => {\r\n try {\r\n return fs.statSync(filePath)\r\n } catch {\r\n return null\r\n }\r\n })()\r\n if (!stat) continue\r\n\r\n const size = toCacheSize(stat.size)\r\n const cached = cacheMap.get(filePath)\r\n const priority = filePriority(\r\n stat.mtimeMs,\r\n size,\r\n cached\r\n ? {\r\n mtimeMs: cached.mtimeMs,\r\n size: cached.size,\r\n hitCount: cached.hitCount,\r\n lastSeenMs: 0,\r\n }\r\n : undefined,\r\n nowMs\r\n )\r\n\r\n ranked.push({ filePath, stat, size, cached, priority })\r\n }\r\n\r\n ranked.sort((a, b) => b.priority - a.priority)\r\n\r\n const updatedEntries: NativeCacheEntry[] = []\r\n\r\n for (const { filePath, stat, size, cached } of ranked) {\r\n const content = (() => {\r\n try {\r\n return fs.readFileSync(filePath, \"utf8\")\r\n } catch {\r\n return null\r\n }\r\n })()\r\n if (!content) continue\r\n\r\n const hash = hashContentNative(content)\r\n if (\r\n cached &&\r\n cached.hash === hash &&\r\n cached.mtimeMs === stat.mtimeMs &&\r\n cached.size === size\r\n ) {\r\n log.debug(`cache HIT ${filePath}`)\r\n processResult({ file: filePath, classes: cached.classes })\r\n updatedEntries.push({\r\n file: filePath,\r\n classes: cached.classes,\r\n hash: cached.hash,\r\n mtimeMs: stat.mtimeMs,\r\n size,\r\n hitCount: (cached.hitCount ?? 0) + 1,\r\n })\r\n continue\r\n }\r\n\r\n log.debug(`cache MISS ${filePath}`)\r\n const classes = scanSource(content)\r\n processResult({ file: filePath, classes })\r\n updatedEntries.push({\r\n file: filePath,\r\n classes,\r\n hash,\r\n mtimeMs: stat.mtimeMs,\r\n size,\r\n hitCount: 1,\r\n })\r\n }\r\n\r\n try {\r\n writeCache(rootDir, updatedEntries, normalizedOptions.cacheDir)\r\n } catch (error) {\r\n log.debug(`cache write failed: ${error instanceof Error ? error.message : String(error)}`)\r\n }\r\n\r\n return parseScanWorkspaceResult({\r\n files,\r\n totalFiles: files.length,\r\n uniqueClasses: Array.from(unique).sort(),\r\n })\r\n }\r\n\r\n // Fast path: gunakan Rust batch extraction jika tersedia (parallel, tanpa GC)\r\n const batchNative = nativeParserLoader.get()?.batchExtractClassesNative\r\n if (batchNative) {\r\n const batchResults = batchNative(candidates)\r\n for (const r of batchResults ?? []) {\r\n if (r.ok) processResult({ file: r.file, classes: r.classes })\r\n }\r\n } else {\r\n for (const filePath of candidates) {\r\n processResult(scanFile(filePath))\r\n }\r\n }\r\n\r\n return parseScanWorkspaceResult({\r\n files,\r\n totalFiles: files.length,\r\n uniqueClasses: Array.from(unique).sort(),\r\n })\r\n}\r\n\r\nexport async function scanWorkspaceAsync(\r\n rootDir: string,\r\n options: ScanWorkspaceOptions = {}\r\n): Promise<ScanWorkspaceResult> {\r\n const normalizedOptions = parseScanWorkspaceOptions(options)\r\n\r\n // Large workspaces: use native parallel scanner (multiple workers + Rust rayon)\r\n try {\r\n return await scanWorkspaceParallel(rootDir, {\r\n extensions: normalizedOptions.includeExtensions,\r\n ignoreDirs: normalizedOptions.ignoreDirectories,\r\n }) as ScanWorkspaceResult\r\n } catch (parallelError) {\r\n log.debug(\r\n `parallel scan failed, retrying with single worker: ${\r\n parallelError instanceof Error ? parallelError.message : String(parallelError)\r\n }`\r\n )\r\n }\r\n\r\n // Fallback: single worker thread (still native)\r\n try {\r\n return await scanWorkspaceInWorker(rootDir, normalizedOptions)\r\n } catch (error) {\r\n log.debug(\r\n `worker scan failed, retrying with sync native scanner: ${\r\n error instanceof Error ? error.message : String(error)\r\n }`\r\n )\r\n return scanWorkspace(rootDir, normalizedOptions)\r\n }\r\n}\r\nexport { extractClassesNative, batchExtractClassesNative } from \"./native-bridge\"","/**\r\n * Engine — Rust native bridge\r\n *\r\n * Uses @tailwind-styled/shared for native binding resolution.\r\n */\r\nimport path from \"node:path\"\r\nimport {\r\n createDebugLogger,\r\n getDirname as getEsmDirname,\r\n loadNativeBinding,\r\n resolveNativeBindingCandidates,\r\n TwError,\r\n} from \"@tailwind-styled/shared\"\r\n\r\nconst log = createDebugLogger(\"engine:native\")\r\n\r\nfunction getDirname(): string {\r\n if (typeof __dirname !== \"undefined\") return __dirname\r\n if (typeof import.meta !== \"undefined\" && import.meta.url) {\r\n return getEsmDirname(import.meta.url)\r\n }\r\n return process.cwd()\r\n}\r\n\r\ninterface NativeEngineBinding {\r\n computeIncrementalDiff?: (\r\n previousJson: string,\r\n currentJson: string\r\n ) => {\r\n addedClasses: string[]\r\n removedClasses: string[]\r\n changedFiles: string[]\r\n unchangedFiles: number\r\n } | null\r\n hashFileContent?: (content: string) => string | null\r\n processFileChange?: (\r\n filepath: string,\r\n newClasses: string[],\r\n content: string | null\r\n ) => { added: string[]; removed: string[] } | null\r\n // Batch 3 additions\r\n parseCssRules?: (css: string) => Array<{\r\n className: string; property: string; value: string\r\n isImportant: boolean; variants: string[]; specificity: number\r\n }>\r\n batchSplitClasses?: (classes: string[]) => Array<{\r\n variantKey: string; base: string; variants: string[]\r\n isArbitrary: boolean; hasModifier: boolean; modifier?: string\r\n }>\r\n detectClassConflicts?: (usagesJson: string) => {\r\n conflicts: Array<{ group: string; variantKey: string; classes: string[]; message: string }>\r\n conflictedClassNames: string[]\r\n }\r\n classifyKnownClasses?: (classes: string[], safelist: string[], customUtilities: string[]) => Array<{\r\n className: string; isKnown: boolean; variantKey: string; baseClass: string\r\n utilityPrefix: string; isArbitrary: boolean\r\n }>\r\n diffClassLists?: (previous: string[], current: string[]) => {\r\n added: string[]; removed: string[]; unchanged: string[]; hasChanges: boolean\r\n }\r\n // Incremental helpers (incremental.rs)\r\n applyClassDiff?: (existing: string[], added: string[], removed: string[]) => string[]\r\n areClassSetsEqual?: (a: string[], b: string[]) => boolean\r\n rebuildWorkspaceResult?: (files: Array<{ file: string; classes: string[] }>) => {\r\n files: Array<{ file: string; classes: string[] }>\r\n totalFiles: number\r\n uniqueClasses: string[]\r\n }\r\n // Batch 4\r\n parseCssToRules?: (css: string, prefix?: string | null) => Array<{\r\n className: string; property: string; value: string; important: boolean\r\n variants: string[]; pseudoClasses: string[]; mediaQuery: string | null\r\n specificity: number; layer: string | null\r\n }>\r\n calculateBundleContributions?: (classes: string[], css: string) => Array<{\r\n className: string; sizeBytes: number; variantChains: string[]\r\n dependencies: string[]; inCss: boolean\r\n }>\r\n detectDeadCode?: (scanResultJson: string, css: string) => {\r\n deadInCss: string[]; deadInSource: string[]; liveClasses: string[]\r\n totalCssClasses: number; totalSourceClasses: number\r\n }\r\n calculateImpactScores?: (\r\n classes: string[], scanResultJson: string, css: string,\r\n usageWeight: number, sizeWeight: number\r\n ) => Array<{\r\n className: string; usageScore: number; sizeScore: number\r\n impactScore: number; usageCount: number; sizeBytes: number\r\n }>\r\n analyzeClassUsage?: (\r\n classes: string[], scanResultJson: string, css: string\r\n ) => Array<{\r\n className: string; usageCount: number; filesJson: string\r\n bundleSizeBytes: number; isDeadCode: boolean\r\n }>\r\n extractAllClasses?: (css: string) => string[]\r\n /** Build variant prefix dependency chain. e.g. \"md:hover:bg-red\" → [\"md:\", \"md:hover:\"] */\r\n buildDependencyChain: (className: string) => string[]\r\n analyzeRouteClassDistribution?: (routeFilesJson: string, scanResultJson: string) => Array<{\r\n route: string; classes: string[]; exclusiveClasses: string[]; classCount: number\r\n }>\r\n /**\r\n * Resolve CSS cascade for a set of rules — pure Rust computation.\r\n *\r\n * Rust #[napi] signature:\r\n * pub fn resolve_cascade(rules_json: String) -> String\r\n *\r\n * Input JSON: Array<{ id: number, property: number, origin: number,\r\n * importance: number, layerOrder: number, specificity: number,\r\n * conditionResult: number, insertionOrder: number }>\r\n *\r\n * Output JSON: { resolutions: Array<{ id: number, propertyId: number,\r\n * winnerId: number, loserIds: number[], stage: number,\r\n * finalDecision: string, causes: Array<{ type: string, [key: string]: unknown }> }> }\r\n */\r\n resolveCascade?: (rulesJson: string) => string\r\n /** FNV-1a fingerprint over ordered string parts — replaces createFingerprint() in ir.ts */\r\n createFingerprint?: (parts: string[]) => string\r\n /**\r\n * Parse CSS + assign semua IDs + fingerprint + assemble RuleIR — satu pass di Rust.\r\n *\r\n * Menggantikan JS loop di parseCssToIr() yang memanggil createFingerprint(),\r\n * registerPropertyName(), registerValueName() per-rule (N × NAPI calls → 1 call).\r\n *\r\n * Return AssembledIrResult: { rules, classToRuleIds, layers }\r\n * JS hanya wrap numerik IDs ke typed RuleId/PropertyId/dll objects.\r\n */\r\n assembleCssIr?: (css: string, prefix?: string | null) => {\r\n rules: Array<{\r\n ruleId: number; selectorId: number; propertyId: number; valueId: number\r\n layerId: number; conditionId: number\r\n propertyName: string; valueName: string; layerName: string\r\n origin: number; importance: number; layerOrder: number; specificity: number\r\n conditionResult: number; insertionOrder: number; fingerprint: string; className: string\r\n }>\r\n classToRuleIds: Array<{ className: string; ruleIds: number[] }>\r\n layers: Array<{ name: string; layerId: number; order: number }>\r\n }\r\n /** DashMap-backed CSS reverse lookup — replaces ReverseLookup class */\r\n reverseLookupFromCss?: (css: string, property: string, value: string) => Array<{\r\n property: string; value: string\r\n usedInClasses: Array<{ className: string; specificity: number; isOverride: boolean; variants: string[] }>\r\n }>\r\n reverseLookupByProperty?: (css: string, property: string) => Array<{\r\n property: string; value: string\r\n usedInClasses: Array<{ className: string; specificity: number; isOverride: boolean; variants: string[] }>\r\n }>\r\n reverseLookupFindDependents?: (css: string, className: string) => string[]\r\n reverseLookupClearCache?: () => void\r\n reverseLookupCacheSize?: () => number\r\n // Impact analysis (impact_analysis.rs)\r\n calculateImpact?: (impactJson: string) => string\r\n\r\n isCriticalClass?: (className: string) => boolean\r\n generateSuggestions?: (className: string, impactJson: string) => string[]\r\n computeImpactMetadata?: (className: string, impactJson: string) => string\r\n idRegistryActiveCount?: () => number\r\n\r\n/*\r\n // Impact scorer granular (impact_scorer.rs)\r\n // Dipakai oleh ImpactTracker sebagai alternatif calculateImpact yang lebih granular.\r\n isCriticalClass?: (className: string) => boolean\r\n generateSuggestions?: (className: string, impactJson: string) => string[]\r\n /**\r\n * Compute risk + savings + suggestions dalam satu call.\r\n * Menggantikan 3 call terpisah: calculateRisk + calculateSavings + generateSuggestions.\r\n * Input: {className, totalComponents, indirectUsage, bundleSizeBytes}\r\n * Output JSON: {riskLevel, estimatedSavings, suggestions}\r\n *\\/\r\n computeImpactMetadata?: (className: string, impactJson: string) => string\r\n \r\n // ID Registry diagnostics (id_registry.rs)\r\n idRegistryActiveCount?: () => number\r\n*/\r\n\r\n calculateRisk?: (className: string, totalComponents: number) => string\r\n calculateSavings?: (bundleSizeBytes: number, componentCount: number) => number\r\n // Class utilities (class_utils.rs) — menggantikan cn() di cx.ts\r\n resolveClassNames?: (inputs: string[]) => string\r\n // Property/Value name registry (domain/model.rs) — menggantikan in-memory Maps di ir.ts\r\n registerPropertyName?: (id: number, name: string) => void\r\n registerValueName?: (id: number, name: string) => void\r\n propertyIdToString?: (id: number) => string\r\n valueIdToString?: (id: number) => string\r\n clearNameRegistries?: () => void\r\n}\r\n\r\nconst isValidEngineBinding = (module: unknown): module is NativeEngineBinding => {\r\n const candidate = module as Partial<NativeEngineBinding> | null | undefined\r\n return !!(\r\n candidate &&\r\n (candidate.computeIncrementalDiff || candidate.processFileChange || candidate.hashFileContent)\r\n )\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────\r\n// Native Bridge - Factory Pattern\r\n// ─────────────────────────────────────────────────────────────────────────\r\n\r\nconst createEngineBindingLoader = () => {\r\n const _state = {\r\n binding: undefined as NativeEngineBinding | null | undefined,\r\n loadError: null as string | null,\r\n candidatePaths: [] as string[],\r\n }\r\n\r\n const throwNativeBindingError = (): never => {\r\n const lines = [\r\n \"FATAL: Native engine binding not found.\",\r\n \"\",\r\n \"This package requires the Rust native binding 'tailwind_styled_parser.node'.\",\r\n \"The binding was not found in any of these paths:\",\r\n ..._state.candidatePaths.map((p) => ` - ${p}`),\r\n \"\",\r\n ]\r\n\r\n if (_state.loadError) {\r\n lines.push(\"Load error:\", ` ${_state.loadError}`, \"\")\r\n }\r\n\r\n lines.push(\r\n \"To fix this, run:\",\r\n \" npm run build:rust\",\r\n \"\",\r\n \"This will build the native Rust module from the 'native/' directory.\",\r\n \"If you're using this package in a CI/CD environment, ensure Rust toolchain is installed\",\r\n \"and 'npm run build:rust' is executed before running tests or building.\"\r\n )\r\n\r\n throw new TwError(\"rust\", \"ENGINE_NATIVE_BINDING_NOT_FOUND\", lines.join(\"\\n\"))\r\n }\r\n\r\n const getBinding = (): NativeEngineBinding => {\r\n const cached = _state.binding\r\n if (cached !== undefined) {\r\n if (cached === null) {\r\n return throwNativeBindingError()\r\n }\r\n return cached\r\n }\r\n\r\n const runtimeDir = getDirname()\r\n const candidates = resolveNativeBindingCandidates({\r\n runtimeDir,\r\n includeDefaultCandidates: true,\r\n })\r\n\r\n _state.candidatePaths = candidates\r\n\r\n const { binding, loadErrors } = loadNativeBinding<NativeEngineBinding>({\r\n runtimeDir,\r\n candidates,\r\n isValid: isValidEngineBinding,\r\n invalidExportMessage: \"Module loaded but missing expected engine binding functions\",\r\n })\r\n\r\n if (binding) {\r\n log(`engine native binding loaded successfully`)\r\n _state.binding = binding\r\n return binding\r\n }\r\n\r\n if (loadErrors.length > 0) {\r\n _state.loadError = loadErrors.map((e) => `${e.path}: ${e.message}`).join(\"; \")\r\n }\r\n\r\n _state.binding = null\r\n return throwNativeBindingError()\r\n }\r\n\r\n return {\r\n get: getBinding,\r\n reset: (): void => {\r\n _state.binding = undefined\r\n _state.loadError = null\r\n _state.candidatePaths = []\r\n },\r\n }\r\n}\r\n\r\nconst engineBindingLoader = createEngineBindingLoader()\r\n\r\nexport function getNativeEngineBinding(): NativeEngineBinding {\r\n return engineBindingLoader.get()\r\n}\r\n\r\nexport function computeIncrementalDiff(\r\n previousJson: string,\r\n currentJson: string\r\n): {\r\n addedClasses: string[]\r\n removedClasses: string[]\r\n changedFiles: string[]\r\n unchangedFiles: number\r\n} {\r\n const result = getNativeEngineBinding().computeIncrementalDiff?.(previousJson, currentJson)\r\n if (result === null || result === undefined) {\r\n throw new TwError(\r\n \"rust\",\r\n \"ENGINE_DIFF_FAILED\",\r\n \"Native computeIncrementalDiff returned null/undefined\"\r\n )\r\n }\r\n return result\r\n}\r\n\r\nexport function hashFileContent(content: string): string {\r\n const result = getNativeEngineBinding().hashFileContent?.(content)\r\n if (result === null || result === undefined) {\r\n throw new TwError(\r\n \"rust\",\r\n \"ENGINE_HASH_FAILED\",\r\n \"Native hashFileContent returned null/undefined\"\r\n )\r\n }\r\n return result\r\n}\r\n\r\nexport function processFileChange(\r\n filepath: string,\r\n newClasses: string[],\r\n content: string | null\r\n): { added: string[]; removed: string[] } {\r\n const result = getNativeEngineBinding().processFileChange?.(filepath, newClasses, content)\r\n if (result === null || result === undefined) {\r\n throw new TwError(\r\n \"rust\",\r\n \"ENGINE_PROCESS_FAILED\",\r\n \"Native processFileChange returned null/undefined\"\r\n )\r\n }\r\n return result\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Route-level CSS analysis\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface RouteClassMap {\r\n route: string\r\n classes: string[]\r\n exclusiveClasses: string[]\r\n classCount: number\r\n}\r\n\r\n/**\r\n * Analisis distribusi classes per route — untuk CSS code splitting.\r\n *\r\n * @param routeFiles - map { route: filePath[] } menentukan file mana ke route mana\r\n * @param scanResult - hasil scan workspace\r\n *\r\n * @example\r\n * const routes = analyzeRouteClassDistribution(\r\n * { \"/\": [\"src/app/page.tsx\"], \"/about\": [\"src/app/about/page.tsx\"] },\r\n * scanResult\r\n * )\r\n */\r\nexport function analyzeRouteClassDistribution(\r\n routeFiles: Record<string, string[]>,\r\n scanResult: { files: Array<{ file: string; classes: string[] }> }\r\n): RouteClassMap[] {\r\n const native = getNativeEngineBinding()\r\n if (!native?.analyzeRouteClassDistribution) {\r\n throw new Error(\"FATAL: Native binding 'analyzeRouteClassDistribution' is required but not available.\")\r\n }\r\n return native.analyzeRouteClassDistribution(\r\n JSON.stringify(routeFiles),\r\n JSON.stringify(scanResult)\r\n ) as RouteClassMap[]\r\n}\r\n\r\n// ═══════════════════════════════════════════════════════════════════════════\r\n \r\n/*\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// ID Registry diagnostics\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n \r\n/**\r\n * Jumlah ID registry yang aktif saat ini.\r\n * Berguna untuk diagnostics dan memory leak detection di development.\r\n *\r\n * @example\r\n * console.log(`Active registries: ${getIdRegistryActiveCount()}`)\r\n *\\/\r\nexport function getIdRegistryActiveCount(): number {\r\n return getNativeEngineBinding().idRegistryActiveCount?.() ?? 0\r\n}\r\n*/\r\n\r\nexport function getIdRegistryActiveCount(): number {\r\n return getNativeEngineBinding().idRegistryActiveCount?.() ?? 0\r\n}","/**\r\n * tailwind-styled-v5 — Native Rust Bindings\r\n *\r\n * All functions require native Rust bindings.\r\n * Uses @tailwind-styled/shared for native resolution.\r\n */\r\n\r\nimport { createRequire } from \"node:module\"\r\nimport { dirname } from \"node:path\"\r\nimport { fileURLToPath } from \"node:url\"\r\nimport { resolveNativeBinary } from \"@tailwind-styled/shared\"\r\n\r\nconst isBrowser = typeof window !== \"undefined\" && typeof document !== \"undefined\"\r\nconst NATIVE_UNAVAILABLE_MESSAGE =\r\n \"[tailwind-styled/core] Native binding is required but not available.\\n\" +\r\n \"Make sure:\\n\" +\r\n \" 1. .node files were copied to dist/ during build\\n\" +\r\n \" 2. You installed the correct native package for your platform\\n\" +\r\n \" 3. npm run build:rust was executed successfully\"\r\n\r\nconst _nodeRequire = createRequire(import.meta.url)\r\nconst _loadNative = (path: string): unknown => _nodeRequire(path)\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Type Definitions\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface ParsedClassModifier {\r\n type: \"opacity\" | \"arbitrary\"\r\n value: string\r\n}\r\n\r\nexport interface ParsedClass {\r\n raw: string\r\n base: string\r\n variants: string[]\r\n modifier?: ParsedClassModifier\r\n}\r\n\r\nexport interface ThemeConfig {\r\n colors: Record<string, string>\r\n spacing: Record<string, string>\r\n fonts: Record<string, string>\r\n breakpoints: Record<string, string>\r\n animations: Record<string, string>\r\n raw: Record<string, string>\r\n}\r\n\r\ninterface NativeBinding {\r\n batchSplitClasses?: (input: string[]) => Array<{\r\n variantKey: string\r\n base: string\r\n variants: string[]\r\n isArbitrary: boolean\r\n hasModifier: boolean\r\n }>\r\n \r\n twMergeRaw?: (classLists: string[]) => string\r\n flattenAndResolve?: (nestedJson: string) => string\r\n resolveConflictGroup?: (base: string) => string\r\n\r\n compileTheme?: (themeConfig: string) => { css: string; variables: Record<string, string> }\r\n extractCssVars?: (css: string) => Record<string, string>\r\n extractThemeFromCss?: (css: string) => Array<{ key: string; value: string }>\r\n parseCssRules?: (css: string) => Array<{\r\n className: string\r\n property: string\r\n value: string\r\n isImportant: boolean\r\n variants: string[]\r\n specificity: number\r\n }>\r\n parseCssToRules?: (css: string) => string\r\n detectDeadCode?: (css: string, usedClasses: string[]) => string[]\r\n classifyKnownClasses?: (classes: string[]) => Array<{ className: string; category: string }>\r\n detectClassConflicts?: (classes: string) => { conflicts: Array<{ class1: string; class2: string; reason: string }>; conflictedClassNames: string[] }\r\n resolveVariants?: (configJson: string, propsJson: string) => { classes: string; resolvedCount: number }\r\n resolveSimpleVariants?: (base: string | null, variants: Record<string, Record<string, string>>, defaults: Record<string, string>, props: Record<string, string>) => string\r\n /** Parse template literal yang sudah di-join. Menggantikan parseTemplate() di twProxy.ts */\r\n parseTemplate?: (raw: string) => {\r\n base: string\r\n subsJson: string\r\n hasSubs: boolean\r\n }\r\n /** Validate ComponentConfig — menggantikan validateVariantConfig() di cv.ts */\r\n validateVariantConfig?: (configJson: string) => {\r\n valid: boolean\r\n errors: Array<{ errorType: string; key: string; value?: string; message: string }>\r\n warnings: string[]\r\n }\r\n /** Build lookup key untuk generated registry — menggantikan key builder di lookupGenerated() */\r\n buildVariantLookupKey?: (defaultVariantsJson: string, propsJson: string) => string\r\n /** Menggantikan cn() — filter+join class names dalam satu Rust pass. (class_utils.rs) */\r\n resolveClassNames?: (inputs: string[]) => string\r\n /** tw_merge dengan custom separator dan optional debug */\r\n twMergeWithSeparator?: (classString: string, opts: { separator?: string; debug?: boolean }) => string\r\n /** tw_merge_many dengan custom separator */\r\n twMergeManyWithSeparator?: (classStrings: string[], opts: { separator?: string; debug?: boolean }) => string\r\n /** conflict-aware Tailwind class merger — port of tailwind-merge. (tw_merge.rs) */\r\n twMerge?: (classString: string) => string\r\n /** variadic convenience wrapper untuk twMerge. (tw_merge.rs) */\r\n twMergeMany?: (classStrings: string[]) => string\r\n /** Tailwind classes → semicolon-separated inline CSS declarations. (state_css.rs) */\r\n twClassesToCss?: (classes: string) => string\r\n /**\r\n * Generate semua CSS rules untuk satu component dari state config — satu Rust call.\r\n *\r\n * Menggantikan JS loop di `injectStateStyles()` dan `generateStateCss()` yang\r\n * memanggil `twClassesToCss()` per state entry (N × NAPI calls → 1 call).\r\n *\r\n * @param id Component state class, e.g. `\"tw-s-abc123\"`\r\n * @param stateMapJson JSON object `{\"loading\":\"opacity-60 cursor-wait\",\"selected\":\"ring-2\"}`\r\n * @param resolvedCss Opsional Tailwind pipeline CSS untuk resolve named classes\r\n * @returns Array of `{ cssRule, stateName, declarations }` — satu per state entry\r\n */\r\n generateRuntimeStateCss?: (\r\n id: string,\r\n stateMapJson: string,\r\n resolvedCss: string | null\r\n ) => Array<{ cssRule: string; stateName: string; declarations: string }>\r\n /**\r\n * Hash a content string — menggantikan JS djb2 loop di hashState() dan hashContainer().\r\n * algorithm: \"md5\" | \"sha256\" | \"fnv\" | \"ahash\" (default: \"md5\")\r\n * length: potong output hex ke N karakter (mis. 6 untuk short ID)\r\n */\r\n hashContent?: (content: string, algorithm?: \"md5\" | \"sha256\" | \"fnv\" | \"ahash\", length?: number) => string\r\n /** Iterative CSS var() chain resolver. (theme.rs) */\r\n resolveThemeValue?: (key: string, rawMapJson: string) => string\r\n /**\r\n * Parse @theme CSS blocks, classify tokens ke buckets, resolve semua var() —\r\n * satu Rust call menggantikan extractThemeFromCss() + N × resolveThemeValue().\r\n * Return ClassifiedThemeConfig: { colors, spacing, fonts, breakpoints, animations, raw }\r\n */\r\n extractThemeFromCssClassified?: (css: string) => {\r\n colors: Record<string, string>\r\n spacing: Record<string, string>\r\n fonts: Record<string, string>\r\n breakpoints: Record<string, string>\r\n animations: Record<string, string>\r\n raw: Record<string, string>\r\n }\r\n /**\r\n * Generate TypeScript interface TailwindStyledThemeTokens dari theme JSON.\r\n * Build-time CLI only (tw generate-types). Menggantikan generateTypeDefinitions() JS.\r\n */\r\n generateTypeDefinitions?: (themeJson: string) => string\r\n /**\r\n * Generate `:root { --prefix-group-name: value; ... }` CSS block dari SystemTokenMap.\r\n *\r\n * Menggantikan nested JS loop di `injectTokensToRoot()` dan `setTokens()` di `styledSystem.ts`.\r\n *\r\n * `tokensJson`: JSON dari `SystemTokenMap` — `{\"colors\":{\"primary\":\"#6366f1\"},\"radius\":{\"base\":\"0.5rem\"}}`\r\n * `prefix`: CSS variable prefix, e.g. `\"sys\"` → `--sys-colors-primary`\r\n */\r\n generateSystemTokenCss?: (tokensJson: string, prefix: string) => string\r\n /** Parse sub-component block syntax from tw`` template. (tw_merge.rs) */\r\n parseSubcomponentBlocksNapi?: (template: string, componentName: string) => {\r\n baseClasses: string\r\n subMapJson: string\r\n }\r\n /** Menggantikan layoutClassesToCss() — static lookup + split dalam satu Rust pass. (container_query.rs) */\r\n layoutClassesToCss?: (classes: string) => string\r\n /** Menggantikan buildContainerRules() — generate @container CSS rules. (container_query.rs) */\r\n buildContainerRules?: (\r\n id: string,\r\n breakpoints: Array<{ key: string; classes: string }>,\r\n containerName: string | null\r\n ) => string\r\n /** Pre-generate semua kombinasi boolean states via bitmask (tw_merge.rs) */\r\n pregenerateStatesNapi?: (states: Record<string, string>) => {\r\n lookupJson: string\r\n stateKeys: string[]\r\n combinations: number\r\n }\r\n\r\n // ── Theme Parsing (napi_bridge_theme_parsing.rs) ───────────────────────────\r\n parseColorsNapi?: (colorsJson: string) => string | Record<string, string>\r\n parseSpacingNapi?: (spacingJson: string) => string | Record<string, string>\r\n parseTransformNapi?: (transformJson: string) => string | Record<string, string>\r\n normalizeColorNapi?: (color: string, opacity: string) => string\r\n sanitizeColorNapi?: (color: string) => string\r\n splitRgbaNapi?: (color: string) => string | { r: number; g: number; b: number; a: number }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Binding Loader\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nlet nativeBinding: NativeBinding | null = null\r\nlet bindingLoadAttempted = false\r\nlet bindingError: Error | null = null\r\n\r\nconst getBinding = (): NativeBinding => {\r\n // If already loaded, return\r\n if (nativeBinding) return nativeBinding\r\n \r\n // If attempted and failed, re-throw cached error\r\n if (bindingError) {\r\n throw bindingError\r\n }\r\n \r\n // If already attempted without error and still no binding, throw\r\n if (bindingLoadAttempted) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n\r\n bindingLoadAttempted = true\r\n\r\n try {\r\n // Browser environment — template literals not supported at all\r\n if (isBrowser) {\r\n bindingError = new Error(\r\n \"[tailwind-styled/core] Cannot use template literals (tw`...`) in browser environment.\\n\\n\" +\r\n \"Template literal parsing requires native Rust bindings compiled to WebAssembly,\\n\" +\r\n \"which is not currently supported.\\n\\n\" +\r\n \"Solutions:\\n\" +\r\n \"1. Use object config only: tw.button({ base: '...', variants: {...} })\\n\" +\r\n \"2. Pre-compile components on the server (Next.js Server Components)\\n\" +\r\n \"3. Use @tailwind-styled browser-safe packages if available\\n\\n\" +\r\n \"For more info: https://github.com/Dictionar32/css-in-rust/discussions\"\r\n )\r\n throw bindingError\r\n }\r\n\r\n const runtimeDir = dirname(fileURLToPath(import.meta.url))\r\n const result = resolveNativeBinary(runtimeDir)\r\n\r\n if (result.path && result.path.endsWith(\".node\")) {\r\n const mod = _loadNative(result.path) as NativeBinding\r\n if (mod?.batchSplitClasses) {\r\n nativeBinding = mod\r\n return nativeBinding\r\n }\r\n }\r\n\r\n bindingError = new Error(\r\n `${NATIVE_UNAVAILABLE_MESSAGE}\\n\\n` +\r\n `Resolution Attempts:\\n${result.tried.map(t => ` - ${t}`).join(\"\\n\")}\\n\\n` +\r\n \"Quick fixes:\\n\" +\r\n \" 1. npm run build:rust # Build native binaries\\n\" +\r\n \" 2. npm install # Reinstall with pre-built binaries\\n\" +\r\n \" 3. TW_NATIVE_PATH=/path/to/index.node npm run dev # Specify binary path\"\r\n )\r\n throw bindingError\r\n } catch (err) {\r\n const error = err instanceof Error ? err : new Error(String(err))\r\n bindingError = error\r\n throw error\r\n }\r\n}\r\n\r\nexport const resetNativeBinding = (): void => {\r\n nativeBinding = null\r\n bindingLoadAttempted = false\r\n}\r\n\r\nexport const getNativeBinding = getBinding\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Parser Functions\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction splitClassListNative(input: string): string[] {\r\n const binding = getBinding()\r\n if (!binding?.batchSplitClasses) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n const result = binding.batchSplitClasses([input])\r\n if (result.length === 0) return []\r\n return result[0].base.split(\" \").filter(Boolean)\r\n}\r\n\r\nfunction parseClassTokenNative(rawToken: string): ParsedClass {\r\n const binding = getBinding()\r\n if (!binding?.batchSplitClasses) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n const result = binding.batchSplitClasses([rawToken])\r\n if (result.length === 0) {\r\n return { raw: rawToken, base: rawToken, variants: [] }\r\n }\r\n const r = result[0]\r\n const parsed: ParsedClass = {\r\n raw: r.base,\r\n base: r.base,\r\n variants: r.variants,\r\n }\r\n if (r.hasModifier) {\r\n const opacityMatch = r.base.match(/^(.*)\\/(\\d{1,3})$/)\r\n if (opacityMatch && opacityMatch[1].length > 0) {\r\n parsed.base = opacityMatch[1]\r\n parsed.modifier = { type: \"opacity\", value: opacityMatch[2] }\r\n } else {\r\n const arbitraryMatch = r.base.match(/\\((--[a-zA-Z0-9_-]+)\\)/)\r\n if (arbitraryMatch) {\r\n parsed.modifier = { type: \"arbitrary\", value: arbitraryMatch[1] }\r\n }\r\n }\r\n }\r\n return parsed\r\n}\r\n\r\nexport function splitClassList(input: string): string[] {\r\n return splitClassListNative(input)\r\n}\r\n\r\nexport function parseClassToken(rawToken: string): ParsedClass {\r\n return parseClassTokenNative(rawToken)\r\n}\r\n\r\nexport function parseTailwindClasses(input: string): ParsedClass[] {\r\n const classes = splitClassListNative(input)\r\n return classes.map((c) => parseClassTokenNative(c))\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// CSS/Theme Functions\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport function compileTheme(themeConfig: Record<string, unknown>) {\r\n const binding = getBinding()\r\n if (!binding?.compileTheme) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n return binding.compileTheme(JSON.stringify(themeConfig))\r\n}\r\n\r\nexport function extractCssVars(css: string): Record<string, string> {\r\n const binding = getBinding()\r\n if (!binding?.extractCssVars) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n return binding.extractCssVars(css)\r\n}\r\n\r\nexport function parseCssRules(css: string) {\r\n const binding = getBinding()\r\n if (!binding?.parseCssRules) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n return binding.parseCssRules(css)\r\n}\r\n\r\nexport function parseCssToRules(css: string): string {\r\n const binding = getBinding()\r\n if (!binding?.parseCssToRules) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n return binding.parseCssToRules(css)\r\n}\r\n\r\nexport function detectDeadCode(css: string, usedClasses: string[]): string[] {\r\n const binding = getBinding()\r\n if (!binding?.detectDeadCode) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n return binding.detectDeadCode(css, usedClasses)\r\n}\r\n\r\nexport function classifyKnownClasses(classes: string[]) {\r\n const binding = getBinding()\r\n if (!binding?.classifyKnownClasses) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n return binding.classifyKnownClasses(classes)\r\n}\r\n\r\nexport function detectClassConflicts(classes: string[]) {\r\n const binding = getBinding()\r\n if (!binding?.detectClassConflicts) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n return binding.detectClassConflicts(classes.join(\" \"))\r\n}\r\n\r\nexport function extractThemeFromCSS(cssContent: string): ThemeConfig {\r\n const binding = getBinding()\r\n if (!binding?.parseCssRules) {\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n \r\n const properties = binding.parseCssRules(cssContent)\r\n const theme: ThemeConfig = {\r\n colors: {},\r\n spacing: {},\r\n fonts: {},\r\n breakpoints: {},\r\n animations: {},\r\n raw: {},\r\n }\r\n \r\n const prefixMap: Record<string, keyof ThemeConfig> = {\r\n \"color-\": \"colors\",\r\n \"spacing-\": \"spacing\",\r\n \"font-\": \"fonts\",\r\n \"breakpoint-\": \"breakpoints\",\r\n \"animate-\": \"animations\",\r\n }\r\n \r\n for (const prop of properties) {\r\n const cssVar = prop.property.replace(/^--/, \"\")\r\n theme.raw[cssVar] = prop.value\r\n \r\n for (const [prefix, category] of Object.entries(prefixMap)) {\r\n if (cssVar.startsWith(prefix)) {\r\n const name = cssVar.slice(prefix.length)\r\n if (name) theme[category][name] = prop.value\r\n break\r\n }\r\n }\r\n }\r\n \r\n return theme\r\n}","/**\r\n * tailwind-styled-v4 — Container Query Engine\r\n *\r\n * Generates @container rules from a simple breakpoint config.\r\n *\r\n * Usage:\r\n * const Card = tw.div({\r\n * base: \"p-4\",\r\n * container: {\r\n * sm: \"flex-col\", // @container (min-width: 320px)\r\n * md: \"flex-row\", // @container (min-width: 640px)\r\n * lg: \"grid-cols-3\", // @container (min-width: 1024px)\r\n * },\r\n * containerName: \"card\",\r\n * })\r\n *\r\n * // Wrap with container context:\r\n * const CardWrapper = tw.div`@container`\r\n *\r\n * Named containers:\r\n * const SidebarCard = tw.div({\r\n * base: \"p-2\",\r\n * container: { lg: \"text-sm\" },\r\n * containerName: \"sidebar\",\r\n * })\r\n * // Generates: @container sidebar (min-width: 1024px) { ... }\r\n */\r\n\r\nimport type { ContainerConfig } from \"./types\"\r\nimport { getNativeBinding } from \"./native\"\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Breakpoint map — matches Tailwind defaults\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// Registry\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface ContainerEntry {\r\n id: string\r\n tag: string\r\n containerName?: string\r\n breakpoints: Array<{ minWidth: string; classes: string }>\r\n cssInjected: boolean\r\n}\r\n\r\nconst containerRegistry = new Map<string, ContainerEntry>()\r\n\r\ndeclare global {\r\n interface Window {\r\n __TW_CONTAINER_REGISTRY__?: typeof containerRegistry\r\n }\r\n}\r\n\r\nif (typeof window !== \"undefined\") {\r\n window.__TW_CONTAINER_REGISTRY__ = containerRegistry\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Hash\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n// Cache untuk hashContainer — container config tidak berubah antar render.\r\n// Sama dengan _hashStateCache di stateEngine.ts.\r\nconst _hashContainerCache = new Map<string, string>()\r\n\r\nfunction hashContainer(tag: string, container: ContainerConfig, name?: string): string {\r\n const sortedKey = tag + (name ?? \"\") + JSON.stringify(Object.entries(container).sort())\r\n const cached = _hashContainerCache.get(sortedKey)\r\n if (cached) return cached\r\n\r\n const native = getNativeBinding()\r\n if (!native?.hashContent) {\r\n throw new Error(\"FATAL: Native binding 'hashContent' is required but not available.\")\r\n }\r\n const id = `tw-cq-${native.hashContent(sortedKey, \"fnv\", 6)}`\r\n\r\n _hashContainerCache.set(sortedKey, id)\r\n return id\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// CSS generator\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Konversi layout class string → inline CSS declarations.\r\n * Native-only: Rust static lookup table (zero alloc) + split_whitespace.\r\n */\r\nfunction layoutClassesToCss(classes: string): string {\r\n const native = getNativeBinding()\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 buildContainerRules(\r\n id: string,\r\n container: ContainerConfig,\r\n containerName?: string\r\n): string {\r\n const rules = Object.entries(container)\r\n .map(([key, value]) => {\r\n const minWidth =\r\n typeof value === \"string\"\r\n ? (CONTAINER_BREAKPOINTS[key] ?? key)\r\n : (value.minWidth ?? CONTAINER_BREAKPOINTS[key] ?? key)\r\n const classes = typeof value === \"string\" ? value : value.classes\r\n\r\n const css = layoutClassesToCss(classes)\r\n if (!css) return null\r\n\r\n const query = containerName\r\n ? `@container ${containerName} (min-width: ${minWidth})`\r\n : `@container (min-width: ${minWidth})`\r\n\r\n return `${query}{.${id}{${css}}}`\r\n })\r\n .filter(Boolean) as string[]\r\n\r\n return rules.join(\"\\n\")\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Batched injector — resolve sekali di module load\r\nlet _cqBatchedInjectFn: ((css: string) => void) | null = null\r\ntry {\r\n // eslint-disable-next-line @typescript-eslint/no-var-requires\r\n const mod = require(\"@tailwind-styled/runtime-css/batched\") as { batchedInject: (css: string) => void }\r\n if (typeof mod?.batchedInject === \"function\") _cqBatchedInjectFn = mod.batchedInject\r\n} catch { /* runtime-css tidak terinstall */ }\r\n\r\n// Static CSS detection cache — skip injection kalau @container rule sudah ada di stylesheet\r\nconst _cqStaticDetected = new Set<string>()\r\n\r\n// Style injection\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction injectContainerStyles(\r\n id: string,\r\n container: ContainerConfig,\r\n containerName?: string\r\n): void {\r\n if (typeof document === \"undefined\") return\r\n const styleId = `tw-cq-${id}`\r\n if (document.getElementById(styleId)) return\r\n\r\n // ── Static CSS guard ─────────────────────────────────────────────────────\r\n // Skip injection kalau @container rule untuk ID ini sudah ada di stylesheet statis.\r\n if (_cqStaticDetected.has(id)) return\r\n if (typeof document.styleSheets !== \"undefined\") {\r\n // Cari @container rule yang mengandung selector `.{id}` di dalamnya\r\n const selectorTarget = `.${id}`\r\n for (let i = 0; i < document.styleSheets.length; i++) {\r\n try {\r\n const rules = document.styleSheets[i].cssRules\r\n for (let j = 0; j < rules.length; j++) {\r\n const rule = rules[j]\r\n // CSSContainerRule (instanceof CSSRule type 12) atau CSSMediaRule\r\n if (rule.cssText.includes(selectorTarget)) {\r\n _cqStaticDetected.add(id)\r\n return\r\n }\r\n }\r\n } catch { continue }\r\n }\r\n }\r\n\r\n const css = buildContainerRules(id, container, containerName)\r\n if (!css) return\r\n\r\n // _batchedInjectFn di-resolve sekali di module level (lihat deklarasi di atas)\r\n if (_cqBatchedInjectFn) {\r\n for (const rule of css.split(\"\\n\").filter(Boolean)) _cqBatchedInjectFn(rule)\r\n return\r\n }\r\n\r\n const style = document.createElement(\"style\")\r\n style.id = styleId\r\n style.setAttribute(\"data-tw-container\", id)\r\n style.textContent = css\r\n document.head.appendChild(style)\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Public API\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface ContainerQueryResult {\r\n containerClass: string\r\n hasContainer: true\r\n}\r\n\r\nexport function processContainer(\r\n tag: string,\r\n container: ContainerConfig,\r\n containerName?: string\r\n): ContainerQueryResult {\r\n const id = hashContainer(tag, container, containerName)\r\n\r\n if (!containerRegistry.has(id)) {\r\n const breakpoints = Object.entries(container).map(([key, value]) => ({\r\n minWidth: CONTAINER_BREAKPOINTS[key] ?? key,\r\n classes: typeof value === \"string\" ? value : value.classes,\r\n }))\r\n containerRegistry.set(id, {\r\n id,\r\n tag,\r\n containerName,\r\n breakpoints,\r\n cssInjected: false,\r\n })\r\n }\r\n\r\n injectContainerStyles(id, container, containerName)\r\n containerRegistry.get(id)!.cssInjected = true\r\n\r\n return { containerClass: id, hasContainer: true }\r\n}\r\n\r\n/**\r\n * Generate @container CSS rules dari breakpoint config.\r\n *\r\n * Native-only: Rust string building tanpa intermediate allocations.\r\n */\r\nexport function generateContainerCss(\r\n tag: string,\r\n container: ContainerConfig,\r\n containerName?: string\r\n): string {\r\n const id = hashContainer(tag, container, containerName)\r\n\r\n const native = getNativeBinding()\r\n if (!native?.buildContainerRules) {\r\n throw new Error(\"FATAL: Native binding 'buildContainerRules' is required but not available.\")\r\n }\r\n const breakpoints = Object.entries(container).map(([key, value]) => ({\r\n key,\r\n classes: typeof value === \"string\" ? value : value.classes,\r\n }))\r\n return native.buildContainerRules(id, breakpoints, containerName ?? null)\r\n}\r\n\r\nexport function getContainerRegistry(): Map<string, ContainerEntry> {\r\n return containerRegistry\r\n}","/**\r\n * tailwind-styled-v4 — createTwMerge()\r\n * Pure Node.js — requires native Rust binding.\r\n */\r\n\r\nimport { getNativeBinding } from \"./native\"\r\nimport type { ThemeConfig } from \"./themeReader\"\r\n\r\nexport interface MergeOptions {\r\n prefix?: string\r\n separator?: string\r\n theme?: ThemeConfig\r\n}\r\n\r\nexport function createTwMerge(_options: MergeOptions = {}) {\r\n return function twMerge(...classLists: Array<string | undefined | null | false>): string {\r\n const inputs: string[] = []\r\n for (let i = 0; i < classLists.length; i++) {\r\n const v = classLists[i]\r\n if (v) inputs.push(String(v))\r\n }\r\n if (inputs.length === 0) return \"\"\r\n\r\n const native = getNativeBinding()\r\n if (!native?.twMergeRaw) {\r\n throw new Error(\"Native binding 'twMergeRaw' is required but not available.\")\r\n }\r\n return native.twMergeRaw(inputs)\r\n }\r\n}\r\n\r\nexport const twMerge = createTwMerge()\r\n\r\nexport function mergeWithRules(\r\n rules: Record<string, (classes: string[]) => string>,\r\n ...classLists: string[]\r\n): string {\r\n const base = twMerge(...classLists)\r\n const classes = Object.values(rules).reduce(\r\n (acc, rule) => twMerge(rule(acc)).split(/\\s+/).filter(Boolean),\r\n base.split(/\\s+/).filter(Boolean)\r\n )\r\n return classes.join(\" \")\r\n}","/**\r\n * tailwind-styled-v4 — Reactive State Engine\r\n *\r\n * Zero-JS CSS state management via data attributes.\r\n * No React re-render needed for style changes.\r\n *\r\n * How it works:\r\n * 1. tw.button({ state: { active: \"bg-blue-500\", loading: \"opacity-70\" } })\r\n * 2. State engine generates a unique class + injects CSS:\r\n * .tw-s-abc123[data-active=\"true\"] { @apply bg-blue-500; }\r\n * .tw-s-abc123[data-loading=\"true\"] { @apply opacity-70; }\r\n * 3. Component renders with the state class\r\n * 4. User sets data-active=\"true\" directly — no state needed\r\n *\r\n * Devtools integration:\r\n * All components register to __TW_STATE_REGISTRY__ for devtools inspection.\r\n */\r\n\r\nimport type { StateConfig } from \"./types\"\r\nimport { getNativeBinding } from \"./native\"\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Registry — tracks all state-enabled components\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface StateComponentEntry {\r\n id: string\r\n tag: string\r\n states: string[]\r\n cssInjected: boolean\r\n}\r\n\r\nconst stateRegistry = new Map<string, StateComponentEntry>()\r\n\r\ndeclare global {\r\n interface Window {\r\n __TW_STATE_REGISTRY__?: typeof stateRegistry\r\n }\r\n}\r\n\r\nif (typeof window !== \"undefined\") {\r\n window.__TW_STATE_REGISTRY__ = stateRegistry\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Deterministic hash — same config → same class (no re-injection on HMR)\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n// Cache untuk hashState — state config tidak berubah antar render,\r\n// hash hanya perlu dihitung sekali per (tag, state) kombinasi.\r\nconst _hashStateCache = new Map<string, string>()\r\n\r\nfunction hashState(tag: string, state: StateConfig): string {\r\n // Key untuk cache: sort untuk determinism (Object.entries order tidak guaranteed)\r\n const sortedKey = tag + JSON.stringify(Object.entries(state).sort())\r\n const cached = _hashStateCache.get(sortedKey)\r\n if (cached) return cached\r\n\r\n const native = getNativeBinding()\r\n if (!native?.hashContent) {\r\n throw new Error(\"FATAL: Native binding 'hashContent' is required but not available.\")\r\n }\r\n const id = `tw-s-${native.hashContent(sortedKey, \"fnv\", 6)}`\r\n\r\n _hashStateCache.set(sortedKey, id)\r\n return id\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// CSS generator — Tailwind class → plain CSS via Rust (required)\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Convert Tailwind utility classes → semicolon-separated inline CSS declarations.\r\n * Native-only: delegates ke Rust `tw_classes_to_css` (state_css.rs).\r\n *\r\n * @internal — called by injectStateStyles()\r\n */\r\n// Cache untuk twClassesToCss — classes string dari state config tidak berubah.\r\n// Ini hot path: dipanggil untuk setiap state entry setiap kali injectStateStyles\r\n// dipanggil. Dengan cache, Rust hanya dipanggil sekali per unique class string.\r\nconst _twClassesToCssCache = new Map<string, string>()\r\n\r\nfunction twClassesToCss(classes: string): string {\r\n const cached = _twClassesToCssCache.get(classes)\r\n if (cached !== undefined) return cached\r\n\r\n const native = getNativeBinding()\r\n if (!native?.twClassesToCss) {\r\n throw new Error(\"FATAL: Native binding 'twClassesToCss' is required but not available.\")\r\n }\r\n const result = native.twClassesToCss(classes)\r\n _twClassesToCssCache.set(classes, result)\r\n return result\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Static CSS detection cache — per component ID\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Kalau ID sudah ketemu di stylesheet statis, simpan ke Set ini supaya\r\n// iterasi `document.styleSheets` hanya terjadi SEKALI per component ID,\r\n// bukan setiap kali komponen mount.\r\nconst _staticCssDetected = new Set<string>()\r\n// require() di-cache hasilnya di sini supaya tidak ada module resolution overhead\r\n// setiap kali ada state change di browser.\r\nlet _batchedInjectFn: ((css: string) => void) | null = null\r\ntry {\r\n // eslint-disable-next-line @typescript-eslint/no-var-requires\r\n const mod = require(\"@tailwind-styled/runtime-css/batched\") as { batchedInject: (css: string) => void }\r\n if (typeof mod?.batchedInject === \"function\") _batchedInjectFn = mod.batchedInject\r\n} catch {\r\n // runtime-css tidak terinstall — fallback ke per-element style tag\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Style injection — batched for performance (FIX CSS Rule Batching)\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction injectStateStyles(id: string, state: StateConfig): void {\r\n if (typeof document === \"undefined\") return\r\n\r\n const styleId = `tw-state-${id}`\r\n if (document.getElementById(styleId)) return // already injected\r\n\r\n // ── Static CSS check ──────────────────────────────────────────────────────\r\n // Cek apakah CSS untuk component ini sudah ada dari static file\r\n // (di-generate oleh staticStateExtractor.ts saat build time).\r\n //\r\n // Cara detect: cari selector `.{id}[data-` di semua stylesheets yang ada.\r\n // Kalau ketemu, berarti static pre-generation sudah cover component ini\r\n // → skip runtime injection sepenuhnya (zero batchedInject call).\r\n //\r\n // `_staticCssDetected` cache: iterasi styleSheets hanya sekali per ID.\r\n if (_staticCssDetected.has(id)) return\r\n\r\n if (typeof document.styleSheets !== \"undefined\") {\r\n const selectorPrefix = `.${id}[data-`\r\n for (let i = 0; i < document.styleSheets.length; i++) {\r\n try {\r\n const sheet = document.styleSheets[i]\r\n // sheet.cssRules bisa throw SecurityError untuk cross-origin sheets\r\n const rules = sheet.cssRules\r\n for (let j = 0; j < rules.length; j++) {\r\n const rule = rules[j]\r\n if (rule instanceof CSSStyleRule && rule.selectorText.startsWith(selectorPrefix)) {\r\n // Static CSS sudah mencakup component ini — tidak perlu inject\r\n _staticCssDetected.add(id)\r\n return\r\n }\r\n }\r\n } catch {\r\n // Cross-origin atau CSSOM tidak accessible — skip sheet ini\r\n continue\r\n }\r\n }\r\n }\r\n\r\n const rules = Object.entries(state)\r\n .map(([stateName, classes]) => {\r\n const css = twClassesToCss(classes)\r\n return css ? `.${id}[data-${stateName}=\"true\"]{${css}}` : null\r\n })\r\n .filter(Boolean) as string[]\r\n\r\n if (rules.length === 0) return\r\n\r\n // Try batched injector first (available when runtime-css is installed).\r\n // _batchedInjectFn di-resolve sekali di module level — hindari require() dinamis\r\n // (dynamic require = module resolution + file I/O) setiap kali ada state change.\r\n if (_batchedInjectFn) {\r\n for (const rule of rules) _batchedInjectFn(rule)\r\n return\r\n }\r\n\r\n const style = document.createElement(\"style\")\r\n style.id = styleId\r\n style.setAttribute(\"data-tw-state\", id)\r\n style.textContent = rules.join(\"\\n\")\r\n document.head.appendChild(style)\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Public API\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface StateEngineResult {\r\n /** CSS class to add to the component */\r\n stateClass: string\r\n /** Whether this component uses state (for SSR data attributes) */\r\n hasState: true\r\n /** List of state names (for devtools) */\r\n stateNames: string[]\r\n}\r\n\r\n/**\r\n * Process a StateConfig for a component.\r\n * Returns the state class and injects CSS (client-side only).\r\n *\r\n * @param tag HTML tag name\r\n * @param state State config object\r\n * @param precomputedHash Optional pre-computed hash dari `inject_state_hash()` Rust transform.\r\n * Kalau ada, skip runtime `hashState()` sepenuhnya → zero hashing overhead.\r\n */\r\nexport function processState(\r\n tag: string,\r\n state: StateConfig,\r\n precomputedHash?: string\r\n): StateEngineResult {\r\n // Pakai pre-computed hash kalau tersedia (di-inject oleh turbopackLoader via Rust)\r\n // Format: 6-char FNV-1a hex — identik dengan output hashState()\r\n const id = precomputedHash\r\n ? `tw-s-${precomputedHash}`\r\n : hashState(tag, state)\r\n const stateNames = Object.keys(state)\r\n\r\n // Register for devtools\r\n if (!stateRegistry.has(id)) {\r\n stateRegistry.set(id, {\r\n id,\r\n tag,\r\n states: stateNames,\r\n cssInjected: false,\r\n })\r\n }\r\n\r\n // Inject CSS (client only)\r\n injectStateStyles(id, state)\r\n\r\n // Mark as injected\r\n const entry = stateRegistry.get(id)!\r\n entry.cssInjected = true\r\n\r\n return { stateClass: id, hasState: true, stateNames }\r\n}\r\n\r\n/**\r\n * Generate SSR-safe CSS string for a state config.\r\n * Used by SSR to inject styles into <head>.\r\n */\r\nexport function generateStateCss(tag: string, state: StateConfig): string {\r\n const id = hashState(tag, state)\r\n\r\n const rules = Object.entries(state)\r\n .map(([stateName, classes]) => {\r\n const css = twClassesToCss(classes)\r\n return css ? `.${id}[data-${stateName}=\"true\"]{${css}}` : null\r\n })\r\n .filter(Boolean) as string[]\r\n\r\n return rules.join(\"\\n\")\r\n}\r\n\r\n/**\r\n * Get the state registry (for devtools).\r\n */\r\nexport function getStateRegistry(): Map<string, StateComponentEntry> {\r\n return stateRegistry\r\n}","// AnimateOptions loaded dynamically to avoid bundling @tailwind-styled/animate\r\ntype AnimateOptions = { from: string; to: string; duration?: number; easing?: string; delay?: number; fill?: string; iterations?: number | \"infinite\"; direction?: string; name?: string }\r\nimport React from \"react\"\r\n\r\nimport { processContainer } from \"./containerQuery\"\r\nimport { twMerge } from \"./merge\"\r\nimport { getNativeBinding } from \"./native\"\r\nimport { processState } from \"./stateEngine\"\r\nimport type { ComponentConfig, InferSubFromConfig, SubValue, TwStyledComponent } from \"./types\"\r\n\r\nconst ALWAYS_BLOCKED = new Set([\"base\", \"_ref\", \"state\", \"container\", \"containerName\"])\r\n\r\n// ── Template parse cache ──────────────────────────────────────────────────────\r\n// parseSubcomponentBlocksNapi + JSON.parse sebelumnya dipanggil ulang setiap\r\n// render (extractBaseClasses + parseSubComponentBlocks dipanggil dari render path).\r\n// Cache ini memastikan Rust hanya dipanggil SEKALI per unique template string.\r\n// Template string dari tw.div({ base: \"...\" }) tidak berubah antar render,\r\n// jadi cache ini practically never evicted selama app berjalan.\r\ninterface _ParsedTemplate {\r\n baseClasses: string\r\n subMap: Map<string, string>\r\n}\r\nconst _templateParseCache = new Map<string, _ParsedTemplate>()\r\n\r\n// Cache untuk statesLookup — key: JSON.stringify(statesConfig sorted)\r\n// Menghindari Rust pregenerateStatesNapi + JSON.parse ulang untuk config identik\r\ninterface _StatesLookupEntry { lookup: Record<number, string>; keys: string[] }\r\nconst _statesLookupCache = new Map<string, _StatesLookupEntry>()\r\n\r\nfunction _getParsedTemplate(template: string): _ParsedTemplate {\r\n const cached = _templateParseCache.get(template)\r\n if (cached) return cached\r\n\r\n let result: _ParsedTemplate\r\n\r\n try {\r\n const native = getNativeBinding()\r\n if (native?.parseSubcomponentBlocksNapi) {\r\n const r = native.parseSubcomponentBlocksNapi(template, \"tw\")\r\n const raw = JSON.parse(r.subMapJson) as Record<string, string>\r\n result = {\r\n baseClasses: r.baseClasses.trim().replace(/\\s+/g, \" \"),\r\n subMap: new Map(Object.entries(raw)),\r\n }\r\n _templateParseCache.set(template, result)\r\n return result\r\n }\r\n } catch {\r\n // fall through\r\n }\r\n\r\n throw new Error(\"FATAL: Native binding 'parseSubcomponentBlocksNapi' is required but not available.\")\r\n}\r\n\r\n/**\r\n * Extract sub-component blocks dari template → Map<name, classes>\r\n * Cache-first: Rust + JSON.parse hanya dipanggil SEKALI per template string.\r\n */\r\nfunction parseSubComponentBlocks(template: string): Map<string, string> {\r\n return _getParsedTemplate(template).subMap\r\n}\r\n\r\n/**\r\n * Strip semua sub-component blocks dari template string → base class string.\r\n * Cache-first: Rust hanya dipanggil SEKALI per template string.\r\n */\r\nfunction extractBaseClasses(template: string): string {\r\n return _getParsedTemplate(template).baseClasses\r\n}\r\n\r\n// Valid HTML semantic tags yang otomatis di-detect dari key name\r\nconst SEMANTIC_HTML_TAGS = new Set([\r\n \"article\", \"aside\", \"details\", \"figcaption\", \"figure\",\r\n \"footer\", \"header\", \"main\", \"mark\", \"nav\", \"section\", \"summary\", \"time\",\r\n \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\",\r\n \"p\", \"ul\", \"ol\", \"li\", \"dl\", \"dt\", \"dd\",\r\n \"table\", \"thead\", \"tbody\", \"tfoot\", \"tr\", \"th\", \"td\",\r\n \"form\", \"fieldset\", \"legend\", \"label\",\r\n \"a\", \"button\", \"img\", \"span\", \"div\",\r\n \"blockquote\", \"pre\", \"code\", \"em\", \"strong\", \"small\",\r\n])\r\n\r\n/**\r\n * Parse sub-component key — support dua format:\r\n *\r\n * 1. \"tag:name\" → tag HTML explicit, nama component = name\r\n * contoh: \"header:topBar\" → tag=header, componentName=topBar\r\n *\r\n * 2. \"name\" → cek apakah nama adalah valid HTML tag\r\n * contoh: \"header\" → tag=header, componentName=header\r\n * contoh: \"icon\" → tag=span (fallback), componentName=icon\r\n */\r\nfunction parseSubKey(key: string): { tag: string; componentName: string } {\r\n const colonIdx = key.indexOf(\":\")\r\n if (colonIdx !== -1) {\r\n const tag = key.slice(0, colonIdx).trim()\r\n const componentName = key.slice(colonIdx + 1).trim()\r\n return { tag: tag || \"span\", componentName: componentName || tag }\r\n }\r\n const isSemanticTag = SEMANTIC_HTML_TAGS.has(key)\r\n return { tag: isSemanticTag ? key : \"span\", componentName: key }\r\n}\r\n\r\n/**\r\n * Buat sub-component React FC dengan classes-nya sendiri.\r\n * Support tag override dan asChild pattern.\r\n *\r\n * @param tag - HTML tag yang dirender, default \"span\"\r\n * @param asChild - jika true, merge className ke direct child element\r\n */\r\nfunction createSubComponentAccessor(\r\n parentDisplayName: string,\r\n name: string,\r\n classes: string,\r\n tag: string = \"span\",\r\n asChild: boolean = false\r\n): React.FC<{ children?: React.ReactNode; className?: string }> {\r\n const SubComponent: React.FC<{ children?: React.ReactNode; className?: string }> = ({\r\n children,\r\n className,\r\n }) => {\r\n const mergedClass = className ? `${classes} ${className}` : classes\r\n\r\n // asChild: clone direct child element dan merge className ke dalamnya\r\n if (asChild && React.isValidElement(children)) {\r\n const child = React.Children.only(children) as React.ReactElement<{ className?: string }>\r\n return React.cloneElement(child, {\r\n className: child.props.className\r\n ? `${mergedClass} ${child.props.className}`\r\n : mergedClass,\r\n })\r\n }\r\n\r\n return React.createElement(tag, { className: mergedClass }, children)\r\n }\r\n SubComponent.displayName = `${parentDisplayName}[${name}]`\r\n return SubComponent\r\n}\r\n\r\n/** Register semua sub-components ke component object.\r\n * Sumber: (1) config.sub object — prioritas utama, TypeScript infer keys-nya.\r\n * (2) parseSubComponentBlocks dari template string — fallback untuk template literal syntax.\r\n *\r\n * config.sub value bisa berupa:\r\n * - string: \"font-bold text-lg\" → render sebagai <span>\r\n * - SubComponentConfig: { classes: \"...\", tag: \"header\", asChild: false }\r\n */\r\nfunction registerSubComponents<P extends object>(\r\n component: TwStyledComponent<P>,\r\n template: string,\r\n configSub?: Record<string, SubValue>\r\n): void {\r\n const displayName = component.displayName ?? \"tw\"\r\n const map = component as unknown as Record<string, unknown>\r\n\r\n // Priority 1: config.sub object — explicit, fully typed\r\n if (configSub) {\r\n for (const [key, value] of Object.entries(configSub)) {\r\n if (typeof value === \"string\") {\r\n // String value — pakai parseSubKey untuk detect semantic tag dari key\r\n const { tag, componentName } = parseSubKey(key)\r\n map[componentName] = createSubComponentAccessor(\r\n displayName, componentName, value.trim().replace(/\\s+/g, \" \"), tag\r\n )\r\n } else {\r\n // Nested object — key adalah HTML tag, nested keys adalah component names\r\n // contoh: h2: { title: \"text-xl\", subtitle: \"text-lg\" }\r\n // → Card.title renders <h2>, Card.subtitle renders <h2>\r\n const tag = key\r\n for (const [componentName, classes] of Object.entries(value)) {\r\n map[componentName] = createSubComponentAccessor(\r\n displayName, componentName, classes.trim().replace(/\\s+/g, \" \"), tag\r\n )\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Priority 2: template block parsing — untuk template literal syntax\r\n const blocks = parseSubComponentBlocks(template)\r\n for (const [name, classes] of blocks) {\r\n if (!(name in map)) {\r\n map[name] = createSubComponentAccessor(displayName, name, classes)\r\n }\r\n }\r\n}\r\n\r\nimport type { InferVariantProps, InferStatesProps } from \"./types\"\r\n\r\n// Props yang diterima component saat render — typed dari config user\r\ntype RuntimeProps<TConfig extends ComponentConfig> =\r\n InferVariantProps<TConfig> &\r\n InferStatesProps<TConfig> &\r\n { className?: string; children?: React.ReactNode } &\r\n Record<string, unknown> // HTML attrs dan props lainnya tetap diterima\r\n\r\nfunction normalizeClassName(value: unknown): string | undefined {\r\n return typeof value === \"string\" ? value : undefined\r\n}\r\n\r\nfunction makeFilterProps(variantKeys: Set<string>, stateKeys: Set<string> = new Set()) {\r\n return function filterProps(props: Record<string, unknown>): Record<string, unknown> {\r\n const out: Record<string, unknown> = {}\r\n for (const key in props) {\r\n if (variantKeys.has(key)) continue\r\n if (stateKeys.has(key)) continue // states dari config user — tidak diteruskan ke DOM\r\n if (key.startsWith(\"$\")) continue\r\n if (ALWAYS_BLOCKED.has(key)) continue\r\n out[key] = props[key]\r\n }\r\n return out\r\n }\r\n}\r\n\r\nfunction resolveVariants(\r\n variants: Record<string, Record<string, string>>,\r\n props: Record<string, unknown>,\r\n defaults: Record<string, string>\r\n): string {\r\n // Only include declared variant keys — prevents non-variant props (e.g. `selected`, `disabled`)\r\n // from leaking into the resolver and causing SSR/client hydration mismatches.\r\n // The Rust binding and JS fallback must receive identical, variant-scoped props.\r\n const variantKeys = Object.keys(variants)\r\n const cleanProps: Record<string, string> = {}\r\n for (const k of variantKeys) {\r\n const v = props[k]\r\n if (v !== undefined && v !== null) cleanProps[k] = String(v)\r\n }\r\n\r\n try {\r\n const binding = getNativeBinding()\r\n if (binding?.resolveSimpleVariants) {\r\n const result = binding.resolveSimpleVariants(null, variants, defaults, cleanProps)\r\n return result.trim().replace(/\\s+/g, \" \")\r\n }\r\n } catch {\r\n // fall through\r\n }\r\n\r\n throw new Error(\"FATAL: Native binding 'resolveSimpleVariants' is required but not available.\")\r\n}\r\n\r\n/**\r\n * Resolve states bitmask dari props → lookup class string.\r\n * O(1) — hitung bitmask dari boolean props, lookup di pre-generated table.\r\n *\r\n * Fallback: kalau lookup tidak tersedia, cx() runtime.\r\n */\r\nfunction resolveStates(\r\n statesConfig: Record<string, string>,\r\n stateKeys: string[],\r\n statesLookup: Record<number, string> | null,\r\n props: Record<string, unknown>\r\n): string {\r\n // Fast path: pre-generated bitmask lookup (Rust) — O(1)\r\n // Rust binary v5.0.6-canary.0.0.51+ uses join (not twMerge) so ring-2 + ring-blue-500\r\n // are both preserved correctly.\r\n if (statesLookup && stateKeys.length > 0) {\r\n let mask = 0\r\n for (let i = 0; i < stateKeys.length; i++) {\r\n if (props[stateKeys[i]]) mask |= (1 << i)\r\n }\r\n return statesLookup[mask] ?? \"\"\r\n }\r\n\r\n // Fallback: runtime join — additive, no conflict resolution\r\n const activeClasses = stateKeys\r\n .filter(k => props[k])\r\n .map(k => statesConfig[k])\r\n .filter(Boolean)\r\n\r\n return activeClasses.join(\" \")\r\n}\r\n\r\nfunction resolveCompound(\r\n compounds: ReadonlyArray<{ readonly class: string; readonly [key: string]: unknown }>,\r\n props: Record<string, unknown>\r\n): string {\r\n const classes: string[] = []\r\n for (const compound of compounds) {\r\n const { class: compoundClass, ...conditions } = compound as {\r\n class: string\r\n [key: string]: unknown\r\n }\r\n const matches = Object.entries(conditions).every(([key, value]) => props[key] === value)\r\n if (matches) {\r\n classes.push(compoundClass)\r\n }\r\n }\r\n return classes.join(\" \")\r\n}\r\n\r\n/** Carry over subcomponent keys from source to target (exclude internal methods) */\r\nfunction carryOverSubComponents<P extends object>(\r\n target: TwStyledComponent<P>,\r\n source: TwStyledComponent<P>\r\n): void {\r\n const INTERNAL_KEYS = new Set([\"extend\", \"withVariants\", \"animate\", \"withSub\", \"displayName\"])\r\n for (const key of Object.keys(source)) {\r\n if (!INTERNAL_KEYS.has(key)) {\r\n ;(target as unknown as Record<string, unknown>)[key] = (source as unknown as Record<string, unknown>)[key]\r\n }\r\n }\r\n}\r\n\r\nfunction attachExtend<TConfig extends ComponentConfig>(\r\n component: TwStyledComponent<TConfig, string>,\r\n originalTag: React.ElementType,\r\n base: string,\r\n config: ComponentConfig\r\n): TwStyledComponent<TConfig, string> {\r\n /**\r\n * Extend component dengan extra classes (template literal).\r\n *\r\n * @example\r\n * const PrimaryBtn = Button.extend`bg-blue-500 text-white`\r\n */\r\n function extendWithClasses(strings: TemplateStringsArray): TwStyledComponent<TConfig, string>\r\n /**\r\n * Extend component dengan extra classes + variant overrides (object).\r\n * Ini menyelesaikan gap desain yang disebutkan di CRITIQUE-20 #2.\r\n *\r\n * @example\r\n * // Extend classes DAN tambah variant sekaligus\r\n * const BigDangerBtn = Button.extend({\r\n * classes: \"text-lg px-8\",\r\n * variants: { loading: { true: \"opacity-50\" } },\r\n * defaultVariants: { loading: \"false\" }\r\n * })\r\n */\r\n function extendWithClasses(extendConfig: {\r\n classes?: string\r\n variants?: ComponentConfig[\"variants\"]\r\n defaultVariants?: ComponentConfig[\"defaultVariants\"]\r\n compoundVariants?: ComponentConfig[\"compoundVariants\"]\r\n }): TwStyledComponent<TConfig, string>\r\n function extendWithClasses(\r\n stringsOrConfig: TemplateStringsArray | {\r\n classes?: string\r\n variants?: ComponentConfig[\"variants\"]\r\n defaultVariants?: ComponentConfig[\"defaultVariants\"]\r\n compoundVariants?: ComponentConfig[\"compoundVariants\"]\r\n }\r\n ): TwStyledComponent<TConfig, string> {\r\n // Template literal path\r\n if (Array.isArray(stringsOrConfig) && \"raw\" in stringsOrConfig) {\r\n const rawExtra = (stringsOrConfig as TemplateStringsArray).raw.join(\"\").trim().replace(/\\s+/g, \" \")\r\n // Strip sub-blocks from both sides before merging base classes\r\n const merged = twMerge(extractBaseClasses(base), extractBaseClasses(rawExtra))\r\n const extended = createComponent(\r\n originalTag,\r\n typeof config === \"string\" ? merged : { ...config, base: merged }\r\n )\r\n // Carry over parent sub-components first, then apply overrides from extend template\r\n carryOverSubComponents(extended as unknown as TwStyledComponent<ComponentConfig, string>, component as unknown as TwStyledComponent<ComponentConfig, string>)\r\n const extendSubBlocks = parseSubComponentBlocks(rawExtra)\r\n if (extendSubBlocks.size > 0) {\r\n const extComp = extended as unknown as Record<string, unknown>\r\n const displayName = extended.displayName ?? \"tw\"\r\n for (const [subName, subClasses] of extendSubBlocks) {\r\n extComp[subName] = createSubComponentAccessor(displayName, subName, subClasses)\r\n }\r\n }\r\n return extended as unknown as TwStyledComponent<TConfig, string>\r\n }\r\n\r\n // Object config path — support extend + withVariants in one call\r\n const extCfg = stringsOrConfig as {\r\n classes?: string\r\n variants?: ComponentConfig[\"variants\"]\r\n defaultVariants?: ComponentConfig[\"defaultVariants\"]\r\n compoundVariants?: ComponentConfig[\"compoundVariants\"]\r\n }\r\n const extraClasses = extCfg.classes ?? \"\"\r\n const merged = twMerge(extractBaseClasses(base), extraClasses)\r\n const existing = typeof config === \"object\" ? config : {}\r\n const extended = createComponent(originalTag, {\r\n ...existing,\r\n base: merged,\r\n variants: { ...(existing.variants ?? {}), ...(extCfg.variants ?? {}) },\r\n compoundVariants: [\r\n ...(existing.compoundVariants ?? []),\r\n ...(extCfg.compoundVariants ?? []),\r\n ],\r\n defaultVariants: {\r\n ...(existing.defaultVariants ?? {}),\r\n ...(extCfg.defaultVariants ?? {}),\r\n },\r\n })\r\n carryOverSubComponents(extended as unknown as TwStyledComponent<ComponentConfig, string>, component as unknown as TwStyledComponent<ComponentConfig, string>)\r\n return extended as unknown as TwStyledComponent<TConfig, string>\r\n }\r\n\r\n component.extend = extendWithClasses as TwStyledComponent<TConfig, string>[\"extend\"]\r\n\r\n component.withVariants = (newConfig: Partial<ComponentConfig>) => {\r\n const existing = typeof config === \"object\" ? config : {}\r\n return createComponent(originalTag, {\r\n ...existing,\r\n base,\r\n variants: { ...(existing.variants ?? {}), ...(newConfig.variants ?? {}) },\r\n compoundVariants: [\r\n ...(existing.compoundVariants ?? []),\r\n ...(newConfig.compoundVariants ?? []),\r\n ],\r\n defaultVariants: {\r\n ...(existing.defaultVariants ?? {}),\r\n ...(newConfig.defaultVariants ?? {}),\r\n },\r\n }) as unknown as TwStyledComponent<TConfig, string>\r\n }\r\n\r\n // .animate() dipindah ke tailwind-styled-v4/animate agar tidak bundle @tailwind-styled/animate\r\n // ke dalam main browser bundle (animate butuh Rust native binding → Node.js only)\r\n component.animate = async (_opts: AnimateOptions) => {\r\n console.warn(\r\n \"[tailwind-styled-v4] .animate() tidak tersedia di main bundle.\\n\" +\r\n \"Gunakan: import { animate } from \\\"tailwind-styled-v4/animate\\\"\"\r\n )\r\n return component\r\n }\r\n\r\n // .withSub<\"icon\" | \"badge\">() — declare sub-component names untuk TypeScript\r\n // Runtime: no-op, hanya untuk type inference\r\n component.withSub = (() => component) as TwStyledComponent<TConfig, string>[\"withSub\"]\r\n\r\n return component\r\n}\r\n\r\nexport function createComponent<TConfig extends ComponentConfig>(\r\n tag: React.ElementType,\r\n config: TConfig | string\r\n): TwStyledComponent<TConfig, InferSubFromConfig<TConfig>> {\r\n const isStatic = typeof config === \"string\"\r\n const base = typeof config === \"string\" ? config : (config.base ?? \"\")\r\n const variants = typeof config === \"string\" ? {} : (config.variants ?? {}) as Record<string, Record<string, string>>\r\n const compoundVariants = typeof config === \"string\" ? [] : (config.compoundVariants ?? [])\r\n const defaultVariants = typeof config === \"string\" ? {} : (config.defaultVariants ?? {})\r\n const stateConfig = typeof config === \"string\" ? undefined : config.state\r\n const containerConfig = typeof config === \"string\" ? undefined : config.container\r\n const containerName = typeof config === \"string\" ? undefined : config.containerName\r\n const configSub = typeof config === \"string\" ? undefined : config.sub\r\n const statesConfig = typeof config === \"string\" ? undefined : config.states\r\n\r\n // Pre-generate states bitmask lookup via Rust (build time).\r\n // Cache key: sorted JSON dari statesConfig — statesConfig tidak berubah antar\r\n // createComponent calls dengan config yang sama (mis. HMR), jadi cache ini\r\n // menghindari JSON.parse + Rust call ulang untuk config identik.\r\n let statesLookup: Record<number, string> | null = null\r\n let stateKeys: string[] = []\r\n if (statesConfig && Object.keys(statesConfig).length > 0) {\r\n stateKeys = Object.keys(statesConfig)\r\n const statesCacheKey = JSON.stringify(statesConfig, Object.keys(statesConfig).sort())\r\n const cachedStates = _statesLookupCache.get(statesCacheKey)\r\n if (cachedStates) {\r\n statesLookup = cachedStates.lookup\r\n stateKeys = cachedStates.keys\r\n } else {\r\n try {\r\n const native = getNativeBinding()\r\n if (native?.pregenerateStatesNapi) {\r\n const result = native.pregenerateStatesNapi(statesConfig)\r\n // JSON.parse sekali — disimpan di cache, tidak pernah di-parse ulang\r\n statesLookup = JSON.parse(result.lookupJson) as Record<number, string>\r\n stateKeys = result.stateKeys\r\n _statesLookupCache.set(statesCacheKey, { lookup: statesLookup, keys: stateKeys })\r\n }\r\n } catch (e) {\r\n console.warn(\"[tailwind-styled-v4] states pre-generation failed, falling back to runtime cx()\", e)\r\n }\r\n }\r\n }\r\n\r\n const stateResult = stateConfig\r\n ? processState(\r\n typeof tag === \"string\" ? tag : \"component\",\r\n stateConfig,\r\n // Pakai pre-computed hash dari turbopackLoader (Rust inject_state_hash)\r\n // kalau tersedia — skip runtime hashState() computation sepenuhnya\r\n (config as { __hash?: string }).__hash\r\n )\r\n : null\r\n const containerResult = containerConfig\r\n ? processContainer(typeof tag === \"string\" ? tag : \"component\", containerConfig, containerName)\r\n : null\r\n\r\n const engineClasses = [stateResult?.stateClass, containerResult?.containerClass]\r\n .filter(Boolean)\r\n .join(\" \")\r\n\r\n const filterProps = makeFilterProps(new Set(Object.keys(variants)), new Set(stateKeys))\r\n const tagLabel =\r\n typeof tag === \"string\" ? tag : ((tag as { displayName?: string }).displayName ?? \"Component\")\r\n\r\n if (isStatic || Object.keys(variants).length === 0) {\r\n const baseComponent = React.forwardRef<unknown, RuntimeProps<TConfig>>((props, ref) => {\r\n const { className, ...rest } = props\r\n const runtimeClassName = normalizeClassName(className)\r\n const statesClasses = statesConfig\r\n ? resolveStates(statesConfig, stateKeys, statesLookup, props)\r\n : \"\"\r\n // statesClasses appended AFTER twMerge to prevent conflict resolution\r\n // from removing valid class combinations like ring-2 + ring-blue-500\r\n const mergedBase = twMerge(extractBaseClasses(base), engineClasses, runtimeClassName)\r\n const className2 = statesClasses ? `${mergedBase} ${statesClasses}`.trim() : mergedBase\r\n return React.createElement(tag, {\r\n ref,\r\n ...filterProps(rest),\r\n className: className2,\r\n })\r\n })\r\n\r\n const component = baseComponent as unknown as TwStyledComponent<TConfig, InferSubFromConfig<TConfig>>\r\n component.displayName = `tw.${tagLabel}`\r\n const result = attachExtend<TConfig>(component, tag, base, config as ComponentConfig)\r\n registerSubComponents(result, base, configSub)\r\n return wrapWithSubProxy(result, tagLabel)\r\n }\r\n\r\n const baseComponent = React.forwardRef<unknown, RuntimeProps<TConfig>>((props, ref) => {\r\n const { className, ...rest } = props\r\n const runtimeClassName = normalizeClassName(className)\r\n const variantClasses = resolveVariants(variants, props, defaultVariants)\r\n const compoundClasses = resolveCompound(compoundVariants, props)\r\n const statesClasses = statesConfig\r\n ? resolveStates(statesConfig, stateKeys, statesLookup, props)\r\n : \"\"\r\n\r\n // statesClasses appended AFTER twMerge — prevents conflict resolution\r\n // from removing valid combinations like ring-2 + ring-blue-500\r\n const mergedBase = twMerge(extractBaseClasses(base), variantClasses, compoundClasses, engineClasses, runtimeClassName)\r\n const className2 = statesClasses ? `${mergedBase} ${statesClasses}`.trim() : mergedBase\r\n\r\n return React.createElement(tag, {\r\n ref,\r\n ...filterProps(rest),\r\n className: className2,\r\n })\r\n })\r\n\r\n const component = baseComponent as unknown as TwStyledComponent<TConfig, InferSubFromConfig<TConfig>>\r\n component.displayName = `tw.${tagLabel}`\r\n const result = attachExtend<TConfig>(component, tag, base, config as ComponentConfig)\r\n registerSubComponents(result, base, configSub)\r\n return wrapWithSubProxy(result, tagLabel)\r\n}\r\n\r\n// ── Sub-component fallback proxy ──────────────────────────────────────────────\r\n/**\r\n * Wrap component dengan Proxy sehingga akses ke sub-component yang tidak\r\n * terdefinisi (misal Button.footer) tidak mengembalikan undefined dan crash,\r\n * tapi fallback ke <span> passthrough yang render children-nya saja.\r\n */\r\nconst SKIP_PROXY_KEYS = new Set([\r\n \"extend\", \"withVariants\", \"animate\", \"withSub\",\r\n \"displayName\", \"$$typeof\", \"render\", \"prototype\",\r\n \"__esModule\", \"then\",\r\n])\r\n\r\nfunction wrapWithSubProxy<P extends object>(\r\n component: TwStyledComponent<P>,\r\n tagLabel: string\r\n): TwStyledComponent<P> {\r\n return new Proxy(component, {\r\n get(target, prop: string | symbol) {\r\n const value = (target as unknown as Record<string | symbol, unknown>)[prop]\r\n // Jika sudah ada (sub-component terdefinisi, method, dll) → pakai langsung\r\n if (value !== undefined) return value\r\n // Skip known internal / React symbols\r\n if (typeof prop === \"symbol\") return value\r\n if (SKIP_PROXY_KEYS.has(prop as string)) return value\r\n // Fallback: buat passthrough <span> untuk sub-component yang tidak terdefinisi\r\n const Fallback: React.FC<{ children?: React.ReactNode; className?: string }> = ({\r\n children,\r\n className,\r\n }) => React.createElement(\"span\", { className }, children)\r\n Fallback.displayName = `tw.${tagLabel}.${prop as string}(fallback)`\r\n return Fallback\r\n },\r\n })\r\n}","/**\r\n * tailwind-styled-v4 — cv()\r\n *\r\n * Runtime: native-first with fallback to generated variant tables.\r\n *\r\n * Dua mode:\r\n * 1. GENERATED (optimal) — import dari variants.generated.ts hasil `npx tw compile-variants`\r\n * → O(1) lookup, static, zero runtime computation\r\n * 2. RUNTIME (fallback) — compute on-the-fly via native binding\r\n * → Requires native Rust binding for variant resolution\r\n */\r\n\r\nimport { twMerge } from \"./merge\"\r\nimport type { ComponentConfig, CvFn, InferVariantProps } from \"./types\"\r\nimport { getNativeBinding } from \"./native\"\r\n\r\n// Registry untuk generated lookup tables\r\n// Diisi oleh cv.register() dari generated file\r\nconst __generatedRegistry: Record<string, Record<string, string>> = {}\r\n\r\n/**\r\n * Register pre-computed variant table dari generated file.\r\n * Dipanggil otomatis saat import variants.generated.ts\r\n */\r\nexport function registerVariantTable(\r\n componentId: string,\r\n table: Record<string, string>\r\n): void {\r\n __generatedRegistry[componentId] = table\r\n}\r\n\r\n// Cache untuk sorted variant keys per componentId — sort() hanya dilakukan sekali\r\n// per componentId karena variantKeys tidak berubah selama runtime\r\nconst _sortedVariantKeysCache = new Map<string, string[]>()\r\n\r\nfunction lookupGenerated(\r\n componentId: string,\r\n props: Record<string, unknown>,\r\n defaultVariants?: Record<string, string>,\r\n variantKeys?: string[]\r\n): string | undefined {\r\n const table = __generatedRegistry[componentId]\r\n if (!table) return undefined\r\n\r\n const merged = { ...defaultVariants, ...props }\r\n\r\n // Cached sorted keys — sort() hanya dilakukan sekali per componentId\r\n let sortedKeys = _sortedVariantKeysCache.get(componentId)\r\n if (!sortedKeys) {\r\n const keysToUse = variantKeys\r\n ? variantKeys\r\n : Object.keys(merged).filter((k) => k !== \"className\")\r\n sortedKeys = [...keysToUse].sort()\r\n _sortedVariantKeysCache.set(componentId, sortedKeys)\r\n }\r\n\r\n // buildVariantLookupKey di Rust — satu NAPI call, eliminasi JS string concat loop\r\n const binding = getNativeBinding()\r\n if (!binding?.buildVariantLookupKey) {\r\n throw new Error(\"FATAL: Native binding 'buildVariantLookupKey' is required but not available.\")\r\n }\r\n const relevantDefaults: Record<string, string> = {}\r\n const relevantProps: Record<string, string> = {}\r\n for (const k of sortedKeys) {\r\n const dv = defaultVariants?.[k]\r\n if (dv !== undefined) relevantDefaults[k] = String(dv)\r\n const pv = (props as Record<string, unknown>)[k]\r\n if (pv !== undefined && pv !== null) relevantProps[k] = String(pv)\r\n }\r\n const key = binding.buildVariantLookupKey(\r\n JSON.stringify(relevantDefaults),\r\n JSON.stringify(relevantProps)\r\n )\r\n return table[key]\r\n}\r\n\r\n// Cache config JSON per config object reference — menghindari JSON.stringify ulang\r\n// untuk config yang sama. WeakMap dipakai agar GC bisa collect config jika\r\n// komponen di-unmount (tidak ada strong reference leak).\r\nconst _configJsonCache = new WeakMap<object, string>()\r\n\r\nfunction _getConfigJson(config: object): string {\r\n let json = _configJsonCache.get(config)\r\n if (!json) {\r\n json = JSON.stringify(config)\r\n _configJsonCache.set(config, json)\r\n }\r\n return json\r\n}\r\n\r\n// Native Rust variant resolution\r\nfunction resolveVariantsNative<C extends ComponentConfig>(\r\n config: C,\r\n props: InferVariantProps<C> & { className?: string } & Readonly<Record<string, unknown>>\r\n): string {\r\n const { variants = {}, defaultVariants = {} } = config\r\n\r\n try {\r\n const binding = getNativeBinding()\r\n if (!binding?.resolveVariants) {\r\n throw new Error(\"resolveVariants not available\")\r\n }\r\n\r\n const variantKeys = Object.keys(variants as Record<string, Record<string, string>>)\r\n const configJson = (() => {\r\n // Convert TypeScript camelCase field names to Rust snake_case\r\n const cfgObj = (config as unknown as Record<string, unknown>)\r\n const cfgStr = JSON.stringify(cfgObj)\r\n const parsed = JSON.parse(cfgStr) as Record<string, unknown>\r\n\r\n // Rename defaultVariants to default_variants for Rust compatibility\r\n if ('defaultVariants' in parsed && !('default_variants' in parsed)) {\r\n parsed.default_variants = parsed.defaultVariants\r\n delete parsed.defaultVariants\r\n }\r\n\r\n // Rename compoundVariants to compound_variants. The Rust VariantConfig has\r\n // no serde alias for this field (unlike default_variants), so without the\r\n // rename Rust silently falls back to an empty vec and drops every compound.\r\n if ('compoundVariants' in parsed && !('compound_variants' in parsed)) {\r\n parsed.compound_variants = parsed.compoundVariants\r\n delete parsed.compoundVariants\r\n }\r\n\r\n // Rust requires a `variants` field (it is not #[serde(default)]); a base-only\r\n // or compound-only config omits it, which makes deserialization fail.\r\n if (!('variants' in parsed) || parsed.variants == null) {\r\n parsed.variants = {}\r\n }\r\n\r\n return JSON.stringify(parsed)\r\n })()\r\n const cleanProps: Record<string, string> = {}\r\n for (const k of variantKeys) {\r\n const dv = (defaultVariants as Record<string, string>)[k]\r\n if (dv !== undefined && dv !== null) cleanProps[k] = String(dv)\r\n }\r\n for (const k of variantKeys) {\r\n const v = (props as Record<string, unknown>)[k]\r\n if (v !== undefined && v !== null) cleanProps[k] = String(v)\r\n }\r\n const propsJson = JSON.stringify(cleanProps)\r\n const result = binding.resolveVariants(configJson, propsJson)\r\n // NAPI returns VariantResult object with .classes property\r\n return (result as unknown as { classes: string })?.classes ?? ''\r\n } catch (_err) {\r\n // Fallback: manually resolve if native not available or throws error\r\n if (process.env.NODE_ENV !== \"production\") {\r\n console.warn(\"[cv() fallback] getNativeBinding threw error, using JS fallback\")\r\n }\r\n const result: string[] = []\r\n const { base = \"\", compoundVariants = [] } = config\r\n if (base) result.push(base)\r\n\r\n const merged: Record<string, unknown> = { ...defaultVariants }\r\n for (const [key, values] of Object.entries(variants || {})) {\r\n const selected = (props as Record<string, unknown>)[key] ?? defaultVariants?.[key]\r\n if (selected !== undefined && selected !== null) merged[key] = selected\r\n if (selected && typeof values === 'object' && values !== null) {\r\n const variantValues = values as Record<string, string>\r\n if (variantValues[String(selected)]) {\r\n result.push(variantValues[String(selected)])\r\n }\r\n }\r\n }\r\n\r\n // Compound variants — parity with the native path, which resolves these in Rust.\r\n // Without this, compoundVariants are silently dropped whenever the binding is absent.\r\n for (const compound of compoundVariants) {\r\n const { class: compoundClass, ...conditions } = compound as {\r\n class: string\r\n } & Record<string, unknown>\r\n const matches = Object.entries(conditions).every(\r\n ([k, v]) => String(merged[k]) === String(v)\r\n )\r\n if (matches && compoundClass) result.push(compoundClass)\r\n }\r\n\r\n return result.join(\" \")\r\n }\r\n}\r\n\r\nexport function cv<C extends ComponentConfig>(config: C, componentId?: string): CvFn<C> {\r\n if (process.env.NODE_ENV !== \"production\") {\r\n const { variants = {}, defaultVariants = {} } = config\r\n for (const dk of Object.keys(defaultVariants)) {\r\n if (!(dk in variants)) {\r\n console.warn(`[tailwind-styled] defaultVariants[\"${dk}\"] not in variants`)\r\n }\r\n }\r\n }\r\n\r\n return (\r\n props: InferVariantProps<C> & { className?: string } & Readonly<Record<string, unknown>> = {} as never\r\n ): string => {\r\n let result: string\r\n const variantKeys = Object.keys(config.variants ?? {})\r\n\r\n // Mode 1: generated lookup table (O(1), hasil compile-variants)\r\n if (componentId) {\r\n const generated = lookupGenerated(\r\n componentId,\r\n props as Record<string, unknown>,\r\n config.defaultVariants as Record<string, string>,\r\n variantKeys\r\n )\r\n result = generated ?? resolveVariantsNative(config, props)\r\n } else {\r\n // Mode 2: runtime resolution via native binding\r\n result = resolveVariantsNative(config, props)\r\n }\r\n\r\n return props.className ? twMerge(result, props.className) : result\r\n }\r\n}\r\n\r\nexport interface VariantValidationError {\r\n type: \"unknown_key\" | \"unknown_value\" | \"missing_default\" | \"compound_condition_missing\"\r\n key: string\r\n value?: string\r\n message: string\r\n}\r\n\r\nexport interface VariantValidationResult {\r\n valid: boolean\r\n errors: VariantValidationError[]\r\n warnings: string[]\r\n}\r\n\r\nexport function validateVariantConfig(config: ComponentConfig): VariantValidationResult {\r\n const errors: VariantValidationError[] = []\r\n const warnings: string[] = []\r\n const { variants = {}, defaultVariants = {}, compoundVariants = [] } = config\r\n\r\n for (const [key, val] of Object.entries(defaultVariants)) {\r\n if (!(key in variants)) {\r\n errors.push({ type: \"unknown_key\", key, message: `defaultVariants[\"${key}\"] not in variants` })\r\n } else if (val && !((variants[key] ?? {})[val])) {\r\n errors.push({ type: \"unknown_value\", key, value: val, message: `invalid value \"${val}\"` })\r\n }\r\n }\r\n\r\n for (const [i, compound] of compoundVariants.entries()) {\r\n const { class: _cls, ...conditions } = compound\r\n for (const [key] of Object.entries(conditions)) {\r\n if (!(key in variants)) {\r\n errors.push({\r\n type: \"unknown_key\",\r\n key,\r\n message: `compoundVariants[${i}]: \"${key}\" not in variants`,\r\n })\r\n }\r\n }\r\n }\r\n\r\n return { valid: errors.length === 0, errors, warnings }\r\n}","/**\r\n * tailwind-styled-v4 v2 — cx / cn\r\n * Pure Node.js — requires native Rust binding.\r\n */\r\n\r\nimport { getNativeBinding } from \"./native\"\r\n\r\ntype ClassValue = string | undefined | null | false | 0\r\n\r\n/**\r\n * cn — simple class name joiner (no conflict resolution).\r\n * Delegates ke Rust `resolve_class_names`.\r\n *\r\n * @example cn(\"p-4\", isActive && \"opacity-100\") → \"p-4 opacity-100\"\r\n */\r\nexport function cn(...inputs: (ClassValue | ClassValue[])[]): string {\r\n const strings: string[] = []\r\n for (const item of inputs) {\r\n if (Array.isArray(item)) {\r\n for (const v of item) { if (v) strings.push(String(v)) }\r\n } else if (item) {\r\n strings.push(String(item))\r\n }\r\n }\r\n if (strings.length === 0) return \"\"\r\n\r\n const native = getNativeBinding()\r\n if (!native?.resolveClassNames) {\r\n throw new Error(\"Native binding 'resolveClassNames' is required but not available.\")\r\n }\r\n return native.resolveClassNames(strings)\r\n}\r\n\r\n/**\r\n * cx — conflict-aware class merger.\r\n * Delegates ke Rust `tw_merge_many`.\r\n *\r\n * @example cx(\"p-4 p-8\") → \"p-8\"\r\n * @example cx(\"bg-red-500\", \"bg-blue-500\") → \"bg-blue-500\"\r\n * @example cx([\"flex\", \"items-center\"], \"px-4\") → \"flex items-center px-4\"\r\n */\r\nexport function cx(...inputs: (ClassValue | ClassValue[])[]): string {\r\n const filtered = (inputs as unknown[]).flat().filter(Boolean) as string[]\r\n if (filtered.length === 0) return \"\"\r\n\r\n const native = getNativeBinding()\r\n if (!native?.twMergeMany) {\r\n throw new Error(\"Native binding 'twMergeMany' is required but not available.\")\r\n }\r\n return native.twMergeMany(filtered)\r\n}\r\n\r\n/** @deprecated Use cx() instead. */\r\nexport const cxm = cx\r\n\r\n/**\r\n * cxn — cx() dengan nested array support.\r\n * Delegates ke Rust `flatten_and_resolve`.\r\n *\r\n * @example cxn([\"p-4\", [\"flex\", isActive && \"gap-2\"], null]) → \"p-4 flex gap-2\"\r\n */\r\nexport function cxn(inputs: unknown[]): string {\r\n if (inputs.length === 0) return \"\"\r\n\r\n const native = getNativeBinding()\r\n if (!native?.flattenAndResolve) {\r\n throw new Error(\"Native binding 'flattenAndResolve' is required but not available.\")\r\n }\r\n return native.flattenAndResolve(JSON.stringify(inputs))\r\n}","import React from \"react\"\r\n\r\nimport type { TokenMap } from '@tailwind-styled/shared'\r\nexport type { TokenMap }\r\n\r\nexport type TokenSubscriber = (tokens: TokenMap) => void\r\n\r\nexport interface LiveTokenSet {\r\n vars: Record<string, string>\r\n get(name: string): string | undefined\r\n set(name: string, value: string): void\r\n setAll(tokens: TokenMap): void\r\n snapshot(): TokenMap\r\n}\r\n\r\nexport interface LiveTokenEngineBridge {\r\n getToken(name: string): string | undefined\r\n getTokens(): TokenMap\r\n setToken(name: string, value: string): void\r\n setTokens(tokens: TokenMap): void\r\n applyTokenSet(tokens: TokenMap): void\r\n subscribeTokens(fn: TokenSubscriber): () => void\r\n subscribe?(fn: TokenSubscriber): () => void\r\n}\r\n\r\ninterface LiveTokenEngineRuntime {\r\n liveToken(tokens: TokenMap): LiveTokenSet\r\n getToken(name: string): string | undefined\r\n getTokens(): TokenMap\r\n setToken(name: string, value: string): void\r\n setTokens(tokens: TokenMap): void\r\n applyTokenSet(tokens: TokenMap): void\r\n generateTokenCssString(): string\r\n subscribe(fn: TokenSubscriber): () => void\r\n}\r\n\r\nconst TOKEN_ENGINE_KEY = \"__TW_TOKEN_ENGINE__\"\r\n\r\nexport function tokenVar(name: string): string {\r\n const normalized = name.replace(/[^a-zA-Z0-9-]/g, \"-\").toLowerCase()\r\n return `--tw-token-${normalized}`\r\n}\r\n\r\nexport function tokenRef(name: string): string {\r\n return `var(${tokenVar(name)})`\r\n}\r\n\r\nconst buildRootCss = (tokens: TokenMap): string => {\r\n const vars = Object.entries(tokens)\r\n .map(([name, value]) => ` ${tokenVar(name)}: ${value};`)\r\n .join(\"\\n\")\r\n return `:root {\\n${vars}\\n}`\r\n}\r\n\r\nconst createLiveTokenEngine = (): LiveTokenEngineRuntime => {\r\n const state = {\r\n currentTokens: {} as TokenMap,\r\n styleEl: null as HTMLStyleElement | null,\r\n }\r\n const subscribers = new Set<TokenSubscriber>()\r\n\r\n const syncStyleEl = (): void => {\r\n if (typeof document === \"undefined\") return\r\n\r\n if (!state.styleEl) {\r\n const styleEl = document.createElement(\"style\")\r\n styleEl.id = \"tw-live-tokens\"\r\n styleEl.setAttribute(\"data-tw-tokens\", \"true\")\r\n document.head.appendChild(styleEl)\r\n state.styleEl = styleEl\r\n }\r\n\r\n state.styleEl.textContent = buildRootCss(state.currentTokens)\r\n }\r\n\r\n const notifySubscribers = (): void => {\r\n const snapshot = { ...state.currentTokens }\r\n for (const subscriber of subscribers) {\r\n try {\r\n subscriber(snapshot)\r\n } catch {\r\n // Intentionally ignore subscriber errors.\r\n }\r\n }\r\n }\r\n\r\n const setToken = (name: string, value: string): void => {\r\n state.currentTokens = { ...state.currentTokens, [name]: value }\r\n if (typeof document !== \"undefined\") {\r\n document.documentElement.style.setProperty(tokenVar(name), value)\r\n }\r\n syncStyleEl()\r\n notifySubscribers()\r\n }\r\n\r\n const setTokens = (tokens: TokenMap): void => {\r\n state.currentTokens = { ...state.currentTokens, ...tokens }\r\n if (typeof document !== \"undefined\") {\r\n const root = document.documentElement\r\n for (const [name, value] of Object.entries(tokens)) {\r\n root.style.setProperty(tokenVar(name), value)\r\n }\r\n }\r\n syncStyleEl()\r\n notifySubscribers()\r\n }\r\n\r\n const applyTokenSet = (tokens: TokenMap): void => {\r\n if (typeof document !== \"undefined\") {\r\n const root = document.documentElement\r\n for (const name of Object.keys(state.currentTokens)) {\r\n if (!(name in tokens)) {\r\n root.style.removeProperty(tokenVar(name))\r\n }\r\n }\r\n for (const [name, value] of Object.entries(tokens)) {\r\n root.style.setProperty(tokenVar(name), value)\r\n }\r\n }\r\n\r\n state.currentTokens = { ...tokens }\r\n syncStyleEl()\r\n notifySubscribers()\r\n }\r\n\r\n return {\r\n liveToken(tokens: TokenMap): LiveTokenSet {\r\n setTokens(tokens)\r\n\r\n const vars: Record<string, string> = {}\r\n for (const name of Object.keys(tokens)) {\r\n vars[name] = tokenRef(name)\r\n }\r\n\r\n return {\r\n vars,\r\n get(name: string) {\r\n return state.currentTokens[name]\r\n },\r\n set(name: string, value: string) {\r\n setToken(name, value)\r\n },\r\n setAll(nextTokens: TokenMap) {\r\n setTokens(nextTokens)\r\n },\r\n snapshot() {\r\n return { ...state.currentTokens }\r\n },\r\n }\r\n },\r\n getToken(name: string): string | undefined {\r\n return state.currentTokens[name]\r\n },\r\n getTokens(): TokenMap {\r\n return { ...state.currentTokens }\r\n },\r\n setToken,\r\n setTokens,\r\n applyTokenSet,\r\n generateTokenCssString(): string {\r\n return buildRootCss(state.currentTokens)\r\n },\r\n subscribe(fn: TokenSubscriber): () => void {\r\n subscribers.add(fn)\r\n return () => {\r\n subscribers.delete(fn)\r\n }\r\n },\r\n }\r\n}\r\n\r\nconst engine = createLiveTokenEngine()\r\n\r\nexport function liveToken(tokens: TokenMap): LiveTokenSet {\r\n return engine.liveToken(tokens)\r\n}\r\n\r\nexport function setToken(name: string, value: string): void {\r\n engine.setToken(name, value)\r\n}\r\n\r\nexport function setTokens(tokens: TokenMap): void {\r\n engine.setTokens(tokens)\r\n}\r\n\r\nexport function applyTokenSet(tokens: TokenMap): void {\r\n engine.applyTokenSet(tokens)\r\n}\r\n\r\nexport function getToken(name: string): string | undefined {\r\n return engine.getToken(name)\r\n}\r\n\r\nexport function getTokens(): TokenMap {\r\n return engine.getTokens()\r\n}\r\n\r\nexport function subscribeTokens(fn: TokenSubscriber): () => void {\r\n return engine.subscribe(fn)\r\n}\r\n\r\nexport function generateTokenCssString(): string {\r\n return engine.generateTokenCssString()\r\n}\r\n\r\nexport function createUseTokens() {\r\n return function useTokens(): TokenMap {\r\n const [tokens, setTokensState] = React.useState<TokenMap>(engine.getTokens())\r\n\r\n React.useEffect(() => {\r\n setTokensState(engine.getTokens())\r\n return engine.subscribe((nextTokens) => setTokensState(nextTokens))\r\n }, [])\r\n\r\n return tokens\r\n }\r\n}\r\n\r\nexport const liveTokenEngine: LiveTokenEngineBridge = {\r\n getToken: engine.getToken,\r\n getTokens: engine.getTokens,\r\n setToken: engine.setToken,\r\n setTokens: engine.setTokens,\r\n applyTokenSet: engine.applyTokenSet,\r\n subscribeTokens: engine.subscribe,\r\n subscribe: engine.subscribe,\r\n}\r\n\r\ndeclare global {\r\n interface Window {\r\n __TW_TOKEN_ENGINE__?: LiveTokenEngineBridge\r\n }\r\n}\r\n\r\nconst globalTokenEngine = globalThis as typeof globalThis & {\r\n [TOKEN_ENGINE_KEY]?: LiveTokenEngineBridge\r\n}\r\n\r\nglobalTokenEngine[TOKEN_ENGINE_KEY] = liveTokenEngine\r\nif (typeof window !== \"undefined\") {\r\n window.__TW_TOKEN_ENGINE__ = liveTokenEngine\r\n}\r\n","import React from \"react\"\r\n\r\nexport interface SubComponentProps {\r\n children?: React.ReactNode\r\n className?: string\r\n}\r\n\r\nexport interface SubComponentEntry {\r\n name: string\r\n component: React.FC<SubComponentProps>\r\n defaultClasses?: string\r\n}\r\n\r\nconst subComponentRegistry = new Map<string, SubComponentEntry>()\r\n\r\nexport function registerSubComponent(entry: SubComponentEntry): void {\r\n subComponentRegistry.set(entry.name, entry)\r\n}\r\n\r\nexport function getSubComponent(name: string): SubComponentEntry | undefined {\r\n return subComponentRegistry.get(name)\r\n}\r\n\r\nexport function getAllSubComponents(): SubComponentEntry[] {\r\n return Array.from(subComponentRegistry.values())\r\n}\r\n\r\nexport function withSubComponents<T extends object>(\r\n Component: T,\r\n subComponentNames: string[]\r\n): T & Record<string, React.FC<SubComponentProps>> {\r\n const result = { ...Component } as Record<string, unknown>\r\n for (const name of subComponentNames) {\r\n const entry = getSubComponent(name)\r\n if (entry) result[name] = entry.component\r\n }\r\n return result as T & Record<string, React.FC<SubComponentProps>>\r\n}\r\n\r\nregisterSubComponent({\r\n name: \"icon\",\r\n component: ({ children, className }) => React.createElement(\"span\", { className }, children),\r\n defaultClasses: \"\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"text\",\r\n component: ({ children, className }) => React.createElement(\"span\", { className }, children),\r\n defaultClasses: \"\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"badge\",\r\n component: ({ children, className }) =>\r\n React.createElement(\r\n \"span\",\r\n {\r\n className: `ml-2 px-2 py-0.5 text-xs rounded-full bg-red-500 text-white ${className || \"\"}`,\r\n },\r\n children\r\n ),\r\n defaultClasses: \"ml-2 px-2 py-0.5 text-xs rounded-full bg-red-500 text-white\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"header\",\r\n component: ({ children, className }) =>\r\n React.createElement(\"header\", { className: `font-bold text-lg ${className || \"\"}` }, children),\r\n defaultClasses: \"font-bold text-lg\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"body\",\r\n component: ({ children, className }) =>\r\n React.createElement(\"div\", { className: `flex-1 ${className || \"\"}` }, children),\r\n defaultClasses: \"flex-1\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"footer\",\r\n component: ({ children, className }) =>\r\n React.createElement(\"footer\", { className: `border-t pt-4 ${className || \"\"}` }, children),\r\n defaultClasses: \"border-t pt-4\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"content\",\r\n component: ({ children, className }) => React.createElement(\"div\", { className }, children),\r\n defaultClasses: \"\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"title\",\r\n component: ({ children, className }) =>\r\n React.createElement(\"div\", { className: `font-semibold ${className || \"\"}` }, children),\r\n defaultClasses: \"font-semibold\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"message\",\r\n component: ({ children, className }) =>\r\n React.createElement(\"div\", { className: `text-sm ${className || \"\"}` }, children),\r\n defaultClasses: \"text-sm\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"close\",\r\n component: ({ children, className }) =>\r\n React.createElement(\"span\", { className: `cursor-pointer ${className || \"\"}` }, children),\r\n defaultClasses: \"cursor-pointer\",\r\n})\r\n\r\nregisterSubComponent({\r\n name: \"image\",\r\n component: ({ className }) => React.createElement(\"img\", { className }),\r\n defaultClasses: \"\",\r\n})\r\n","import { twMerge } from \"./merge\"\r\n\r\nexport interface StyledOptions {\r\n base?: string\r\n variants?: Record<string, Record<string, string>>\r\n defaultVariants?: Record<string, string>\r\n compoundVariants?: Array<{\r\n variants: Record<string, string>\r\n className: string\r\n }>\r\n}\r\n\r\nexport type StyledProps = {\r\n className?: string\r\n} & Record<string, string | number | boolean | undefined>\r\n\r\nfunction resolveVariantClass(options: StyledOptions, props: StyledProps): string[] {\r\n const out: string[] = []\r\n const variants = options.variants ?? {}\r\n const defaults = options.defaultVariants ?? {}\r\n\r\n for (const [variantName, valueMap] of Object.entries(variants)) {\r\n const value = props[variantName] ?? defaults[variantName]\r\n if (value === undefined) continue\r\n\r\n const key = String(value)\r\n const cls = valueMap[key]\r\n if (cls) out.push(cls)\r\n }\r\n\r\n for (const compound of options.compoundVariants ?? []) {\r\n const matches = Object.entries(compound.variants).every(([k, expected]) => {\r\n const current = props[k] ?? defaults[k]\r\n return String(current) === expected\r\n })\r\n\r\n if (matches) out.push(compound.className)\r\n }\r\n\r\n return out\r\n}\r\n\r\nexport function resolveStyledClassName(options: StyledOptions, props: StyledProps = {}): string {\r\n const parts = [options.base ?? \"\", ...resolveVariantClass(options, props), props.className ?? \"\"]\r\n return twMerge(...parts)\r\n}\r\n\r\nexport function styled(options: StyledOptions) {\r\n return function getClassName(props: StyledProps = {}): string {\r\n return resolveStyledClassName(options, props)\r\n }\r\n}\r\n","/**\r\n * tailwind-styled-v4 — createStyledSystem()\r\n *\r\n * Design System Factory — Mode 3 API.\r\n *\r\n * Level 1 — utility: tw.div`p-4`\r\n * Level 2 — styled: tw(Button)`px-4`\r\n * Level 3 — design system: ui.button({ variant: \"primary\" })\r\n *\r\n * Usage:\r\n * const ui = createStyledSystem({\r\n * tokens: {\r\n * colors: { primary: \"#6366f1\", muted: \"#71717a\" },\r\n * radius: { base: \"0.5rem\", full: \"9999px\" },\r\n * },\r\n * components: {\r\n * button: {\r\n * base: \"inline-flex items-center font-medium transition-colors\",\r\n * variants: {\r\n * variant: {\r\n * primary: \"bg-[var(--sys-color-primary)] text-white\",\r\n * ghost: \"bg-transparent border border-current\",\r\n * danger: \"bg-red-500 text-white\",\r\n * },\r\n * size: {\r\n * sm: \"h-8 px-3 text-sm\",\r\n * md: \"h-10 px-4 text-base\",\r\n * lg: \"h-12 px-6 text-lg\",\r\n * },\r\n * },\r\n * defaultVariants: { variant: \"primary\", size: \"md\" },\r\n * },\r\n * },\r\n * })\r\n *\r\n * const Button = ui.button()\r\n * // → <Button variant=\"primary\" size=\"lg\" />\r\n *\r\n * // Token access\r\n * ui.token(\"colors.primary\") // → \"var(--sys-color-primary)\"\r\n * ui.cssVar(\"colors.primary\") // → \"#6366f1\"\r\n */\r\n\r\nimport type React from \"react\"\r\n\r\nimport { createComponent } from \"./createComponent\"\r\nimport { getNativeBinding } from \"./native\"\r\nimport type { ComponentConfig, TwStyledComponent } from \"./types\"\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// System token types\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type SystemTokenMap = Record<string, Record<string, string>>\r\n\r\nexport interface SystemComponentConfig extends ComponentConfig {\r\n /** Extra class applied only when used from the system (e.g. system-level resets) */\r\n systemBase?: string\r\n /** HTML tag for the component */\r\n tag?: string\r\n}\r\n\r\nexport interface StyledSystemConfig<\r\n T extends SystemTokenMap = SystemTokenMap,\r\n C extends Record<string, SystemComponentConfig> = Record<string, SystemComponentConfig>,\r\n> {\r\n /** Design tokens — injected as CSS custom properties under --sys-{group}-{name} */\r\n tokens?: T\r\n /** Component presets */\r\n components?: C\r\n /** CSS variable prefix. Default: \"sys\" → --sys-color-primary */\r\n prefix?: string\r\n /** If true, auto-inject token CSS vars into :root on init. Default: true */\r\n injectTokens?: boolean\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Token → CSS var helpers\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction tokenVarName(prefix: string, group: string, name: string): string {\r\n return `--${prefix}-${group}-${name}`\r\n}\r\n\r\nfunction tokenVarRef(prefix: string, group: string, name: string): string {\r\n return `var(${tokenVarName(prefix, group, name)})`\r\n}\r\n\r\nfunction resolveTokenRef(tokens: SystemTokenMap, prefix: string, value: string): string {\r\n // If value is \"token:colors.primary\" → resolve to var(--sys-colors-primary)\r\n if (value.startsWith(\"token:\")) {\r\n const path = value.slice(6)\r\n const [group, name] = path.split(\".\")\r\n if (group && name && tokens[group]?.[name] !== undefined) {\r\n return tokenVarRef(prefix, group, name)\r\n }\r\n }\r\n return value\r\n}\r\n\r\nfunction injectTokensToRoot(tokens: SystemTokenMap, prefix: string): void {\r\n if (typeof document === \"undefined\") return\r\n\r\n const styleId = `__tw-sys-tokens-${prefix}`\r\n if (document.getElementById(styleId)) return\r\n\r\n const style = document.createElement(\"style\")\r\n style.id = styleId\r\n style.textContent = _buildTokenCss(tokens, prefix)\r\n document.head.appendChild(style)\r\n}\r\n\r\n/**\r\n * Build `:root { --prefix-group-name: value; ... }` CSS string.\r\n *\r\n * Fast path: generateSystemTokenCss() di Rust — eliminasi nested JS loop.\r\n * Fallback: JS string building (identik dengan implementasi sebelumnya).\r\n *\r\n * Dipakai oleh `injectTokensToRoot()` (init) dan `setTokens()` (runtime update).\r\n */\r\nfunction _buildTokenCss(tokens: SystemTokenMap, prefix: string): string {\r\n const binding = getNativeBinding()\r\n if (!binding?.generateSystemTokenCss) {\r\n throw new Error(\"FATAL: Native binding 'generateSystemTokenCss' is required but not available.\")\r\n }\r\n return binding.generateSystemTokenCss(JSON.stringify(tokens), prefix)\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Variant class resolver — replaces \"token:*\" references inside variant values\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction resolveComponentConfig(\r\n config: SystemComponentConfig,\r\n tokens: SystemTokenMap,\r\n prefix: string\r\n): ComponentConfig {\r\n const resolveStr = (s: string) => resolveTokenRef(tokens, prefix, s)\r\n\r\n const base = resolveStr(config.base ?? \"\")\r\n const systemBase = resolveStr(config.systemBase ?? \"\")\r\n const mergedBase = [systemBase, base].filter(Boolean).join(\" \")\r\n\r\n const variants: Record<string, Record<string, string>> = {}\r\n for (const [variantKey, variantMap] of Object.entries(config.variants ?? {})) {\r\n variants[variantKey] = {}\r\n for (const [optKey, classes] of Object.entries(variantMap)) {\r\n variants[variantKey][optKey] = classes.split(\" \").map(resolveStr).join(\" \")\r\n }\r\n }\r\n\r\n const compoundVariants = (config.compoundVariants ?? []).map((cv) => {\r\n const { class: cls, ...rest } = cv\r\n return { class: resolveStr(cls), ...rest }\r\n })\r\n\r\n return {\r\n base: mergedBase,\r\n variants,\r\n compoundVariants,\r\n defaultVariants: config.defaultVariants ?? {},\r\n state: config.state,\r\n container: config.container,\r\n containerName: config.containerName,\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// StyledSystem instance type\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type SystemComponentFactory<C extends SystemComponentConfig> = (\r\n overrides?: Partial<C>\r\n) => TwStyledComponent<ComponentConfig, string>\r\n\r\nexport type StyledSystemInstance<\r\n T extends SystemTokenMap,\r\n C extends Record<string, SystemComponentConfig>,\r\n> = {\r\n [K in keyof C]: SystemComponentFactory<C[K]>\r\n} & {\r\n /**\r\n * Get the CSS variable reference for a token.\r\n * @example ui.token(\"colors.primary\") → \"var(--sys-colors-primary)\"\r\n */\r\n token(path: string): string\r\n /**\r\n * Get the raw value of a token.\r\n * @example ui.rawToken(\"colors.primary\") → \"#6366f1\"\r\n */\r\n rawToken(path: string): string | undefined\r\n /**\r\n * Update token values at runtime (re-injects into :root).\r\n */\r\n setTokens(updates: Partial<{ [G in keyof T]: Partial<T[G]> }>): void\r\n /**\r\n * Access the resolved component config for a registered component.\r\n */\r\n getConfig(name: keyof C): ComponentConfig | undefined\r\n /**\r\n * The tokens object (for reference).\r\n */\r\n tokens: T\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// createStyledSystem\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport function createStyledSystem<\r\n T extends SystemTokenMap = SystemTokenMap,\r\n C extends Record<string, SystemComponentConfig> = Record<string, SystemComponentConfig>,\r\n>(config: StyledSystemConfig<T, C>): StyledSystemInstance<T, C> {\r\n const prefix = config.prefix ?? \"sys\"\r\n const tokens = (config.tokens ?? {}) as T\r\n const componentDefs = config.components ?? ({} as C)\r\n const shouldInject = config.injectTokens !== false\r\n\r\n // Inject tokens into :root on first call (client only)\r\n if (shouldInject && typeof window !== \"undefined\") {\r\n injectTokensToRoot(tokens as SystemTokenMap, prefix)\r\n }\r\n\r\n // Cache resolved component configs\r\n const resolvedConfigs = new Map<string, ComponentConfig>()\r\n\r\n for (const [name, compCfg] of Object.entries(componentDefs)) {\r\n resolvedConfigs.set(\r\n name,\r\n resolveComponentConfig(compCfg, tokens as SystemTokenMap, prefix)\r\n )\r\n }\r\n\r\n // Build component factories\r\n const factories: Record<string, SystemComponentFactory<SystemComponentConfig>> = {}\r\n\r\n for (const [name, compCfg] of Object.entries(componentDefs)) {\r\n const tag = compCfg.tag ?? \"div\"\r\n\r\n factories[name] = (overrides?: Partial<SystemComponentConfig>) => {\r\n const baseResolved = resolvedConfigs.get(name)!\r\n const runtimeTag = tag as React.ElementType\r\n\r\n if (!overrides || Object.keys(overrides).length === 0) {\r\n return createComponent(runtimeTag, baseResolved) as unknown as TwStyledComponent<ComponentConfig, string>\r\n }\r\n\r\n // Merge overrides into resolved config\r\n const overrideResolved = resolveComponentConfig(\r\n overrides as SystemComponentConfig,\r\n tokens as SystemTokenMap,\r\n prefix\r\n )\r\n\r\n const merged: ComponentConfig = {\r\n base: [baseResolved.base, overrideResolved.base].filter(Boolean).join(\" \"),\r\n variants: {\r\n ...(baseResolved.variants ?? undefined),\r\n ...(overrideResolved.variants ?? undefined),\r\n },\r\n compoundVariants: [\r\n ...(baseResolved.compoundVariants ?? []),\r\n ...(overrideResolved.compoundVariants ?? []),\r\n ],\r\n defaultVariants: {\r\n ...(baseResolved.defaultVariants ?? undefined),\r\n ...(overrideResolved.defaultVariants ?? undefined),\r\n },\r\n state: overrideResolved.state ?? baseResolved.state,\r\n container: overrideResolved.container ?? baseResolved.container,\r\n containerName: overrideResolved.containerName ?? baseResolved.containerName,\r\n }\r\n\r\n return createComponent(runtimeTag, merged) as unknown as TwStyledComponent<ComponentConfig, string>\r\n }\r\n }\r\n\r\n // Token utilities\r\n function token(path: string): string {\r\n const [group, name] = path.split(\".\")\r\n if (!group || !name) return path\r\n return tokenVarRef(prefix, group, name)\r\n }\r\n\r\n function rawToken(path: string): string | undefined {\r\n const [group, name] = path.split(\".\")\r\n if (!group || !name) return undefined\r\n return (tokens as SystemTokenMap)[group]?.[name]\r\n }\r\n\r\n function setTokens(updates: Partial<{ [G in keyof T]: Partial<T[G]> }>): void {\r\n if (typeof document === \"undefined\") return\r\n\r\n // Find or create the :root style element\r\n const styleId = `__tw-sys-tokens-${prefix}`\r\n const style =\r\n (document.getElementById(styleId) as HTMLStyleElement | null) ??\r\n (() => {\r\n const el = document.createElement(\"style\")\r\n el.id = styleId\r\n document.head.appendChild(el)\r\n return el\r\n })()\r\n\r\n // Merge updates into tokens and re-generate\r\n for (const [group, map] of Object.entries(updates)) {\r\n if (!tokens[group as keyof T]) continue\r\n for (const [name, value] of Object.entries(map as Record<string, string>)) {\r\n ;(tokens as SystemTokenMap)[group][name] = value\r\n }\r\n }\r\n\r\n style.textContent = _buildTokenCss(tokens as SystemTokenMap, prefix)\r\n }\r\n\r\n function getConfig(name: keyof C): ComponentConfig | undefined {\r\n return resolvedConfigs.get(name as string)\r\n }\r\n\r\n return Object.assign(factories, {\r\n token,\r\n rawToken,\r\n setTokens,\r\n getConfig,\r\n tokens,\r\n }) as StyledSystemInstance<T, C>\r\n}","/**\r\n * tailwind-styled-v4 v2 — tw\r\n *\r\n * API:\r\n * tw.div`p-4 bg-zinc-900`\r\n * tw.button`px-4 [icon] { h-4 w-4 }` ← sub-components inline\r\n * tw.button({ base: \"px-4\", variants: { size: { sm: \"text-sm\" } } })\r\n * tw(Link)`underline text-blue-400`\r\n * tw.server.div`p-4` ← server-only, compiler enforced + runtime dev warning\r\n */\r\n\r\nimport React from \"react\"\r\nimport { createComponent } from \"./createComponent\"\r\nimport { getNativeBinding } from \"./native\"\r\nimport type {\r\n ComponentConfig,\r\n TwComponentFactory,\r\n TwObject,\r\n TwServerObject,\r\n TwStyledComponent,\r\n TwTagFactory,\r\n TwTagFactoryAny,\r\n} from \"./types\"\r\n\r\n// types.ts is single source of truth — re-export for consumers\r\nexport type { TwComponentFactory, TwObject, TwServerObject, TwTagFactory }\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Template parser\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\ninterface ParsedTemplate {\r\n /** Base classes — tanpa sub-component blocks */\r\n base: string\r\n /** Sub-component map: { icon: \"h-4 w-4 ...\", badge: \"px-2 ...\" } */\r\n subs: Record<string, string>\r\n /** Ada sub-component atau tidak */\r\n hasSubs: boolean\r\n}\r\n\r\n// Cache untuk parseTemplate — raw template string tidak berubah antar hot reloads\r\nconst _parsedTemplateCache = new Map<string, ParsedTemplate>()\r\n\r\n/**\r\n * parseTemplate — native-only, no fallback.\r\n * \r\n * Template literal parsing REQUIRES native Rust bindings.\r\n * This is strictly a Node.js/server-side operation.\r\n */\r\nfunction parseTemplate(strings: TemplateStringsArray, exprs: unknown[]): ParsedTemplate {\r\n const raw = strings.raw.reduce((acc, str, i) => {\r\n const expr = exprs[i]\r\n const exprStr = typeof expr === \"function\" ? \"\" : (expr ?? \"\")\r\n return acc + str + String(exprStr)\r\n }, \"\")\r\n\r\n const cached = _parsedTemplateCache.get(raw)\r\n if (cached) return cached\r\n\r\n const binding = getNativeBinding()\r\n if (!binding?.parseTemplate) {\r\n throw new Error(\r\n \"FATAL: Native binding 'parseTemplate' is required but not available in this environment.\\n\\n\" +\r\n \"This function is only available on Node.js with native bindings loaded.\\n\" +\r\n \"For browser environments, use object config instead:\\n\" +\r\n \" tw.button({ base: '...', variants: {...} })\"\r\n )\r\n }\r\n\r\n const r = binding.parseTemplate(raw)\r\n const subs: Record<string, string> = r.hasSubs ? JSON.parse(r.subsJson) : {}\r\n const result: ParsedTemplate = { base: r.base, subs, hasSubs: r.hasSubs }\r\n _parsedTemplateCache.set(raw, result)\r\n return result\r\n}\r\n\r\ntype RuntimeTagFactory = ((\r\n stringsOrConfig: TemplateStringsArray | ComponentConfig,\r\n ...exprs: unknown[]\r\n) => TwStyledComponent<ComponentConfig, string>) &\r\n TwTagFactoryAny\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// makeTag\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction makeTag(tag: React.ElementType): RuntimeTagFactory {\r\n return ((\r\n stringsOrConfig: TemplateStringsArray | ComponentConfig,\r\n ...exprs: unknown[]\r\n ): TwStyledComponent<ComponentConfig, string> => {\r\n // Object config path\r\n if (\r\n !Array.isArray(stringsOrConfig) &&\r\n typeof stringsOrConfig === \"object\" &&\r\n stringsOrConfig !== null &&\r\n !(\"raw\" in stringsOrConfig)\r\n ) {\r\n return createComponent(tag, stringsOrConfig as ComponentConfig) as unknown as TwStyledComponent<ComponentConfig, string>\r\n }\r\n\r\n // Template literal path\r\n const parsed = parseTemplate(stringsOrConfig as TemplateStringsArray, exprs)\r\n\r\n // Buat component dari base classes\r\n const component = createComponent(tag, parsed.base)\r\n\r\n // Attach sub-components sebagai React.FC dari classes yang di-extract\r\n if (parsed.hasSubs) {\r\n for (const [name, classes] of Object.entries(parsed.subs)) {\r\n // Setiap sub-component adalah styled span/div dengan classesnya\r\n const SubComp = React.forwardRef<\r\n HTMLSpanElement,\r\n { children?: React.ReactNode; className?: string }\r\n >(({ children, className }, ref) =>\r\n React.createElement(\"span\", {\r\n ref,\r\n className: className ? `${classes} ${className}` : classes,\r\n }, children)\r\n )\r\n SubComp.displayName = `tw.${typeof tag === \"string\" ? tag : \"component\"}.${name}`;\r\n ;(component as unknown as Record<string, unknown>)[name] = SubComp\r\n }\r\n }\r\n\r\n return component as unknown as TwStyledComponent<ComponentConfig, string>\r\n }) as RuntimeTagFactory\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// HTML tag list\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nconst HTML_TAGS = [\r\n \"div\", \"section\", \"article\", \"aside\", \"header\", \"footer\", \"main\", \"nav\",\r\n \"figure\", \"figcaption\", \"details\", \"summary\",\r\n \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\",\r\n \"p\", \"span\", \"strong\", \"em\", \"b\", \"i\", \"s\", \"u\", \"small\", \"mark\",\r\n \"abbr\", \"cite\", \"code\", \"kbd\", \"samp\", \"var\", \"time\", \"address\",\r\n \"blockquote\", \"q\", \"del\", \"ins\", \"sub\", \"sup\",\r\n \"ul\", \"ol\", \"li\", \"dl\", \"dt\", \"dd\",\r\n \"table\", \"thead\", \"tbody\", \"tfoot\", \"tr\", \"th\", \"td\", \"caption\",\r\n \"colgroup\", \"col\",\r\n \"img\", \"picture\", \"video\", \"audio\", \"source\", \"track\",\r\n \"canvas\", \"svg\", \"path\", \"circle\", \"rect\", \"line\",\r\n \"polyline\", \"polygon\", \"g\", \"defs\", \"use\", \"symbol\",\r\n \"form\", \"input\", \"textarea\", \"select\", \"option\", \"optgroup\",\r\n \"button\", \"label\", \"fieldset\", \"legend\", \"output\",\r\n \"progress\", \"meter\", \"datalist\",\r\n \"a\", \"area\", \"map\", \"iframe\", \"embed\", \"object\",\r\n \"pre\", \"hr\", \"br\", \"wbr\", \"dialog\", \"menu\", \"template\", \"slot\",\r\n] as const\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// tw.server — server-only namespace with dev warning\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction makeServerTag(tag: React.ElementType): RuntimeTagFactory {\r\n const baseFactory = makeTag(tag)\r\n if (typeof window !== \"undefined\" && process.env.NODE_ENV !== \"production\") {\r\n return ((\r\n stringsOrConfig: TemplateStringsArray | ComponentConfig,\r\n ...exprs: unknown[]\r\n ): TwStyledComponent<ComponentConfig, string> => {\r\n const tagName =\r\n typeof tag === \"string\"\r\n ? tag\r\n : ((tag as { displayName?: string }).displayName ?? \"Component\")\r\n console.warn(\r\n `[tailwind-styled-v4] tw.server.${tagName} rendered in browser. ` +\r\n `Ensure withTailwindStyled or Vite plugin is configured.`\r\n )\r\n return baseFactory(stringsOrConfig, ...exprs)\r\n }) as RuntimeTagFactory\r\n }\r\n return baseFactory\r\n}\r\n\r\nconst serverFactories: Record<string, RuntimeTagFactory> = {}\r\nfor (const tag of HTML_TAGS) {\r\n serverFactories[tag] = makeServerTag(tag as React.ElementType)\r\n}\r\n\r\nexport const server: TwServerObject = serverFactories as unknown as TwServerObject\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// tw — main export\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nconst tagFactories: Record<string, RuntimeTagFactory> = {}\r\nfor (const tag of HTML_TAGS) {\r\n tagFactories[tag] = makeTag(tag as React.ElementType)\r\n}\r\n\r\nfunction twCallable(component: React.ComponentType<unknown>) {\r\n return makeTag(component)\r\n}\r\n\r\nexport const tw: TwObject = Object.assign(twCallable, tagFactories, {\r\n server,\r\n}) as unknown as TwObject","/**\r\n * tailwind-styled-v4 v2 — twTheme\r\n *\r\n * UPGRADE #1: Tailwind v4 CSS Variables integration.\r\n *\r\n * Tailwind v4 uses @theme inline to expose design tokens as CSS custom properties:\r\n * @theme inline {\r\n * --color-background: var(--background);\r\n * --color-foreground: var(--foreground);\r\n * --font-sans: var(--font-geist-sans);\r\n * }\r\n *\r\n * This module bridges tw() syntax with those CSS variables — zero config,\r\n * full IDE support, type-safe design tokens.\r\n *\r\n * @example\r\n * // Without twTheme (verbose, error-prone)\r\n * const Box = tw.div`bg-[var(--color-background)] text-[var(--color-foreground)]`\r\n *\r\n * // With twTheme (clean, type-safe)\r\n * const Box = tw.div`${t.bg(\"color-background\")} ${t.text(\"color-foreground\")}`\r\n *\r\n * // Or with createTheme for full project-level token map\r\n * const theme = createTheme({\r\n * colors: { bg: \"color-background\", fg: \"color-foreground\", primary: \"color-primary\" },\r\n * fonts: { sans: \"font-sans\", mono: \"font-mono\" },\r\n * })\r\n * const Box = tw.div`bg-${theme.colors.bg} text-${theme.colors.fg}`\r\n */\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Core helper — CSS variable reference\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Reference a CSS custom property in Tailwind v4 arbitrary value syntax.\r\n *\r\n * @example\r\n * cssVar(\"color-background\") → \"var(--color-background)\"\r\n * cssVar(\"color-primary\", \"#3b82f6\") → \"var(--color-primary, #3b82f6)\"\r\n */\r\nexport function cssVar(varName: string, fallback?: string): string {\r\n const name = varName.startsWith(\"--\") ? varName : `--${varName}`\r\n return fallback ? `var(${name}, ${fallback})` : `var(${name})`\r\n}\r\n\r\n/**\r\n * Generate a Tailwind v4 arbitrary value that references a CSS variable.\r\n *\r\n * @example\r\n * twVar(\"bg\", \"color-background\") → \"bg-[var(--color-background)]\"\r\n * twVar(\"text\", \"color-foreground\") → \"text-[var(--color-foreground)]\"\r\n * twVar(\"border\", \"color-border\", \"#e5e7eb\") → \"border-[var(--color-border,#e5e7eb)]\"\r\n */\r\nexport function twVar(property: string, varName: string, fallback?: string): string {\r\n const ref = fallback ? `var(--${varName},${fallback})` : `var(--${varName})`\r\n return `${property}-[${ref}]`\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Convenience shorthand builders\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport const t = {\r\n /** Background color from CSS variable: t.bg(\"color-primary\") → \"bg-[var(--color-primary)]\" */\r\n bg: (v: string, fb?: string) => twVar(\"bg\", v, fb),\r\n /** Text color from CSS variable */\r\n text: (v: string, fb?: string) => twVar(\"text\", v, fb),\r\n /** Border color from CSS variable */\r\n border: (v: string, fb?: string) => twVar(\"border\", v, fb),\r\n /** Ring color from CSS variable */\r\n ring: (v: string, fb?: string) => twVar(\"ring\", v, fb),\r\n /** Outline color from CSS variable */\r\n outline: (v: string, fb?: string) => twVar(\"outline\", v, fb),\r\n /** Fill color from CSS variable (SVG) */\r\n fill: (v: string, fb?: string) => twVar(\"fill\", v, fb),\r\n /** Stroke color from CSS variable (SVG) */\r\n stroke: (v: string, fb?: string) => twVar(\"stroke\", v, fb),\r\n /** Font family from CSS variable */\r\n font: (v: string, fb?: string) => twVar(\"font\", v, fb),\r\n /** Shadow from CSS variable */\r\n shadow: (v: string, fb?: string) => twVar(\"shadow\", v, fb),\r\n /** Any arbitrary property from CSS variable */\r\n var: (property: string, v: string, fb?: string) => twVar(property, v, fb),\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// createTheme — project-level design token map\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface ThemeTokenMap {\r\n colors?: Record<string, string>\r\n fonts?: Record<string, string>\r\n spacing?: Record<string, string>\r\n [key: string]: Record<string, string> | undefined\r\n}\r\n\r\nexport type ResolvedThemeTokens<T extends ThemeTokenMap> = {\r\n [Group in keyof T]: T[Group] extends Record<string, string>\r\n ? {\r\n [Token in keyof T[Group]]: string\r\n }\r\n : never\r\n}\r\n\r\n/**\r\n * Create a typed theme token map from your CSS variable names.\r\n * Returns helper functions that generate Tailwind v4 arbitrary values.\r\n *\r\n * @example\r\n * // Define your tokens (match your globals.css @theme block)\r\n * const theme = createTheme({\r\n * colors: {\r\n * bg: \"color-background\",\r\n * fg: \"color-foreground\",\r\n * primary: \"color-primary\",\r\n * muted: \"color-muted\",\r\n * },\r\n * fonts: {\r\n * sans: \"font-sans\",\r\n * mono: \"font-mono\",\r\n * },\r\n * })\r\n *\r\n * // Use in tw components\r\n * const Card = tw.div`\r\n * bg-${theme.colors.bg}\r\n * text-${theme.colors.fg}\r\n * font-${theme.fonts.sans}\r\n * `\r\n * // → tw.div`bg-[var(--color-background)] text-[var(--color-foreground)] font-[var(--font-sans)]`\r\n *\r\n * // Use in cv()\r\n * const button = cv({\r\n * base: `px-4 py-2 ${theme.colors.bg} ${theme.colors.fg}`,\r\n * variants: { ... }\r\n * })\r\n */\r\nexport function createTheme<T extends ThemeTokenMap>(tokenMap: T): ResolvedThemeTokens<T> {\r\n const resolved: Record<string, Record<string, string>> = {}\r\n\r\n for (const group in tokenMap) {\r\n resolved[group] = {}\r\n const tokens = tokenMap[group]!\r\n for (const name in tokens) {\r\n const varName = tokens[name]\r\n const prefix = getGroupPrefix(group)\r\n resolved[group][name] = prefix ? twVar(prefix, varName) : cssVar(varName)\r\n }\r\n }\r\n\r\n return resolved as ResolvedThemeTokens<T>\r\n}\r\n\r\nfunction getGroupPrefix(group: string): string {\r\n const map: Record<string, string> = {\r\n colors: \"bg\", // default to bg; user can use t.text() for text colors\r\n fonts: \"font\",\r\n spacing: \"p\",\r\n shadows: \"shadow\",\r\n }\r\n return map[group] ?? \"\"\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Standard Tailwind v4 tokens\r\n//\r\n// Pre-built token references for the default next-app globals.css setup.\r\n// These match what Tailwind v4's @theme inline generates.\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Pre-built references for standard Tailwind v4 CSS variable tokens.\r\n * Works out of the box with next-app-standar-config globals.css.\r\n *\r\n * @example\r\n * import { v4Tokens } from \"tailwind-styled-v4\"\r\n *\r\n * const Page = tw.div`${v4Tokens.bg} ${v4Tokens.text}`\r\n * // → tw.div`bg-[var(--color-background)] text-[var(--color-foreground)]`\r\n */\r\nexport const v4Tokens = {\r\n /** bg-[var(--color-background)] */\r\n bg: twVar(\"bg\", \"color-background\"),\r\n /** text-[var(--color-foreground)] */\r\n text: twVar(\"text\", \"color-foreground\"),\r\n /** font-[var(--font-sans)] */\r\n fontSans: twVar(\"font\", \"font-sans\"),\r\n /** font-[var(--font-mono)] */\r\n fontMono: twVar(\"font\", \"font-mono\"),\r\n} as const\r\n","import path from \"node:path\"\r\n\r\nimport type { ScanWorkspaceResult } from \"@tailwind-styled/scanner\"\r\nimport { scanWorkspaceAsync } from \"@tailwind-styled/scanner\"\r\n\r\nimport { requireNativeBinding } from \"./binding\"\r\nimport { parseAnalyzerOptions, parseNativeReport } from \"./schemas\"\r\nimport { buildSemanticReport } from \"./semantic\"\r\nimport type { AnalyzerOptions, AnalyzerReport, ClassUsage } from \"./types\"\r\nimport { debugLog, formatErrorMessage, sanitizeFrequentThreshold, sanitizeTopLimit } from \"./utils\"\r\n\r\nfunction normalizeScan(\r\n scan: ScanWorkspaceResult,\r\n includeClass?: (className: string) => boolean\r\n): ScanWorkspaceResult {\r\n if (!includeClass) return scan\r\n\r\n const filteredFiles = scan.files.map((file) => ({\r\n file: file.file,\r\n classes: file.classes.filter((className) => includeClass(className)),\r\n }))\r\n\r\n const unique = new Set<string>()\r\n for (const file of filteredFiles) {\r\n for (const className of file.classes) {\r\n unique.add(className)\r\n }\r\n }\r\n\r\n return {\r\n files: filteredFiles,\r\n totalFiles: scan.totalFiles,\r\n uniqueClasses: Array.from(unique).sort(),\r\n }\r\n}\r\n\r\nexport async function collectClassCounts(scan: ScanWorkspaceResult): Promise<Map<string, number>> {\r\n const native = await requireNativeBinding()\r\n if (!native?.collectClassCounts) {\r\n throw new Error(\"FATAL: Native binding 'collectClassCounts' is required but not available.\")\r\n }\r\n const filesJson = JSON.stringify(\r\n scan.files.map((f) => ({ file: f.file ?? \"\", classes: f.classes }))\r\n )\r\n const result = native.collectClassCounts(filesJson) as Array<{ name: string; count: number }>\r\n const counts = new Map<string, number>()\r\n for (const entry of result) counts.set(entry.name, entry.count)\r\n return counts\r\n}\r\n\r\nfunction buildClassUsage(counts: Map<string, number>): ClassUsage[] {\r\n return Array.from(counts.entries())\r\n .map(([name, count]) => ({ name, count }))\r\n .sort((left, right) => {\r\n if (right.count !== left.count) return right.count - left.count\r\n return left.name.localeCompare(right.name)\r\n })\r\n}\r\n\r\nexport async function buildDistribution(\r\n usages: ClassUsage[],\r\n native?: Awaited<ReturnType<typeof requireNativeBinding>>\r\n): Promise<Record<string, number>> {\r\n const binding = native ?? (await requireNativeBinding())\r\n if (!binding?.buildDistribution) {\r\n throw new Error(\"FATAL: Native binding 'buildDistribution' is required but not available.\")\r\n }\r\n const result = binding.buildDistribution(\r\n JSON.stringify(usages.map((u) => ({ name: u.name, count: u.count })))\r\n ) as { once: number; few: number; moderate: number; frequent: number }\r\n return {\r\n \"1\": result.once,\r\n \"2-3\": result.few,\r\n \"4-7\": result.moderate,\r\n \"8+\": result.frequent,\r\n }\r\n}\r\n\r\n/**\r\n * Analyze Tailwind class usage in a workspace and return usage statistics.\r\n * Set `semantic.tailwindConfigPath` to override Tailwind config lookup.\r\n * @example\r\n * const report = await analyzeWorkspace(\"./src\", {\r\n * classStats: { top: 20, frequentThreshold: 2 },\r\n * semantic: { tailwindConfigPath: \"tailwind.config.js\" },\r\n * })\r\n */\r\nexport async function analyzeWorkspace(\r\n root: string,\r\n options: AnalyzerOptions = {}\r\n): Promise<AnalyzerReport> {\r\n const startedAtMs = Date.now()\r\n const resolvedRoot = path.resolve(root)\r\n const normalizedOptions = parseAnalyzerOptions(options)\r\n\r\n // 1. Scan workspace - const dengan IIFE async\r\n const scan = await (async () => {\r\n const scanStartedAtMs = Date.now()\r\n try {\r\n const result = await scanWorkspaceAsync(resolvedRoot, normalizedOptions.scanner)\r\n debugLog(\r\n `scanWorkspaceAsync processed ${result.totalFiles} files in ${Date.now() - scanStartedAtMs}ms`\r\n )\r\n return result\r\n } catch (error) {\r\n throw new Error(\r\n `Failed to scan workspace at \"${resolvedRoot}\": ${formatErrorMessage(error)}`,\r\n {\r\n cause: error,\r\n }\r\n )\r\n }\r\n })()\r\n\r\n const normalizedScan = normalizeScan(scan, normalizedOptions.includeClass)\r\n const topLimit = sanitizeTopLimit(normalizedOptions.classStats?.top)\r\n const frequentThreshold = sanitizeFrequentThreshold(\r\n normalizedOptions.classStats?.frequentThreshold\r\n )\r\n\r\n const binding = await requireNativeBinding()\r\n const filesJson = JSON.stringify(\r\n normalizedScan.files.map((file) => ({ file: file.file, classes: file.classes }))\r\n )\r\n\r\n // 2. Native report - const dengan IIFE\r\n const nativeReport = (() => {\r\n try {\r\n const report = binding.analyzeClasses(filesJson, resolvedRoot, topLimit)\r\n if (!report) {\r\n throw new Error(`Native analyzer returned no report for \"${resolvedRoot}\".`)\r\n }\r\n return parseNativeReport(report)\r\n } catch (error) {\r\n throw new Error(\r\n `Native analyzer failed for \"${resolvedRoot}\": ${formatErrorMessage(error)}`,\r\n {\r\n cause: error,\r\n }\r\n )\r\n }\r\n })()\r\n\r\n const counts = await collectClassCounts(normalizedScan)\r\n const baseAll = buildClassUsage(counts)\r\n\r\n // 3. Semantic report - const dengan IIFE async\r\n const { all, semanticReport } = await (async () => {\r\n if (!normalizedOptions.semantic) {\r\n return { all: baseAll, semanticReport: undefined }\r\n }\r\n\r\n const semanticOption =\r\n typeof normalizedOptions.semantic === \"object\" ? normalizedOptions.semantic : undefined\r\n const semanticStartedAtMs = Date.now()\r\n\r\n try {\r\n const report = await buildSemanticReport(baseAll, resolvedRoot, semanticOption)\r\n debugLog(`semantic report built in ${Date.now() - semanticStartedAtMs}ms`)\r\n\r\n if (report.conflicts.length === 0) {\r\n return { all: baseAll, semanticReport: report }\r\n }\r\n\r\n const conflicted = new Set(report.conflicts.flatMap((conflict) => conflict.classes))\r\n const updatedAll = baseAll.map((usage) =>\r\n conflicted.has(usage.name) ? { ...usage, isConflict: true } : usage\r\n )\r\n return { all: updatedAll, semanticReport: report }\r\n } catch (error) {\r\n throw new Error(\r\n `Failed to build semantic report for \"${resolvedRoot}\": ${formatErrorMessage(error)}`,\r\n { cause: error }\r\n )\r\n }\r\n })()\r\n\r\n // 4. Statistics — native-first: satu pass Rust vs 4× JS iterations\r\n const classStatsNative = binding?.computeClassStats?.(\r\n JSON.stringify(all),\r\n topLimit,\r\n frequentThreshold\r\n )\r\n const top: typeof all = classStatsNative ? JSON.parse(classStatsNative.topJson) : all.slice(0, topLimit)\r\n const frequent: typeof all = classStatsNative ? JSON.parse(classStatsNative.frequentJson) : all.filter((usage) => usage.count >= frequentThreshold).slice(0, topLimit)\r\n const unique: typeof all = classStatsNative ? JSON.parse(classStatsNative.uniqueJson) : all.filter((usage) => usage.count === 1)\r\n const totalClassOccurrences: number = classStatsNative\r\n ? classStatsNative.totalClassOccurrences\r\n : all.reduce((sum, usage) => sum + usage.count, 0)\r\n\r\n debugLog(\r\n `analyzeWorkspace completed in ${Date.now() - startedAtMs}ms ` +\r\n `(files=${normalizedScan.totalFiles}, uniqueClasses=${all.length})`\r\n )\r\n\r\n const distribution = await buildDistribution(all, binding)\r\n\r\n return {\r\n root: nativeReport.root || resolvedRoot,\r\n totalFiles: nativeReport.totalFiles,\r\n uniqueClassCount: all.length,\r\n totalClassOccurrences,\r\n classStats: {\r\n all,\r\n top,\r\n frequent,\r\n unique,\r\n distribution,\r\n },\r\n // topClasses — alias for classStats.top (test contract & backward compat)\r\n topClasses: top,\r\n safelist: all.map((usage) => usage.name),\r\n ...(semanticReport ? { semantic: semanticReport } : {}),\r\n }\r\n}","import {\r\n loadNativeBinding,\r\n resolveNativeBindingCandidates,\r\n resolveRuntimeDir,\r\n} from \"@tailwind-styled/shared\"\r\n\r\nimport type { NativeAnalyzerBinding, NativeCssCompilerBinding } from \"./types\"\r\nimport { debugLog } from \"./utils\"\r\n\r\nconst isAnalyzerModule = (module: unknown): module is NativeAnalyzerBinding => {\r\n const candidate = module as Partial<NativeAnalyzerBinding> | null | undefined\r\n return typeof candidate?.analyzeClasses === \"function\"\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────\r\n// Native Analyzer Binding - Factory Pattern (no let!)\r\n// ─────────────────────────────────────────────────────────────────────────\r\n\r\nconst createAnalyzerBindingLoader = () => {\r\n const _state = { bindingPromise: null as Promise<NativeAnalyzerBinding | null> | null }\r\n\r\n const getBindingPromise = (): Promise<NativeAnalyzerBinding | null> => {\r\n if (_state.bindingPromise) return _state.bindingPromise\r\n\r\n _state.bindingPromise = (async (): Promise<NativeAnalyzerBinding | null> => {\r\n const runtimeDir = resolveRuntimeDir(\r\n typeof __dirname === \"string\" ? __dirname : undefined,\r\n import.meta.url\r\n )\r\n const candidates = resolveNativeBindingCandidates({\r\n runtimeDir,\r\n envVarNames: [\"TWS_NATIVE_PATH\"],\r\n })\r\n\r\n const { binding, loadErrors, loadedPath } = await loadNativeBinding<NativeAnalyzerBinding>({\r\n runtimeDir,\r\n candidates,\r\n isValid: isAnalyzerModule,\r\n invalidExportMessage: \"Module loaded but missing `analyzeClasses` export.\",\r\n })\r\n\r\n if (binding) {\r\n debugLog(`native binding loaded from: ${loadedPath}`)\r\n return binding\r\n }\r\n\r\n if (loadErrors.length > 0) {\r\n debugLog(\r\n `native binding load failed for ${loadErrors.length} candidate(s): ${loadErrors\r\n .map((entry) => `${entry.path} (${entry.message})`)\r\n .join(\"; \")}`\r\n )\r\n } else {\r\n debugLog(\"native binding not found in any candidate path\")\r\n }\r\n\r\n return null\r\n })()\r\n\r\n return _state.bindingPromise\r\n }\r\n\r\n return {\r\n get: getBindingPromise,\r\n reset: (): void => {\r\n _state.bindingPromise = null\r\n },\r\n }\r\n}\r\n\r\nconst analyzerBindingLoader = createAnalyzerBindingLoader()\r\n\r\nexport async function getNativeBinding(): Promise<NativeAnalyzerBinding | null> {\r\n return analyzerBindingLoader.get()\r\n}\r\n\r\nexport async function requireNativeBinding(): Promise<NativeAnalyzerBinding> {\r\n const binding = await analyzerBindingLoader.get()\r\n if (binding?.analyzeClasses) return binding\r\n\r\n // Untuk error reporting, kita perlu akses ke candidates dan loadErrors\r\n // Tapi karena async, kita perlu load ulang atau simpan state\r\n const runtimeDir = resolveRuntimeDir(\r\n typeof __dirname === \"string\" ? __dirname : undefined,\r\n import.meta.url\r\n )\r\n const candidates = resolveNativeBindingCandidates({\r\n runtimeDir,\r\n envVarNames: [\"TWS_NATIVE_PATH\"],\r\n })\r\n\r\n const { loadErrors } = await loadNativeBinding<NativeAnalyzerBinding>({\r\n runtimeDir,\r\n candidates,\r\n isValid: isAnalyzerModule,\r\n invalidExportMessage: \"Module loaded but missing `analyzeClasses` export.\",\r\n })\r\n\r\n const lines = [\r\n \"Native analyzer binding not found. Ensure `tailwind_styled_parser.node` is built.\",\r\n ]\r\n\r\n lines.push(\"Checked paths:\")\r\n for (const candidate of candidates) lines.push(`- ${candidate}`)\r\n if (loadErrors.length > 0) {\r\n lines.push(\"Load errors:\")\r\n for (const failure of loadErrors) {\r\n lines.push(`- ${failure.path}: ${failure.message}`)\r\n }\r\n }\r\n\r\n throw new Error(lines.join(\"\\n\"))\r\n}\r\n\r\nexport async function requireNativeCssCompiler(): Promise<NativeCssCompilerBinding> {\r\n const binding = await requireNativeBinding()\r\n if (typeof binding.compileCss === \"function\") return binding as NativeCssCompilerBinding\r\n\r\n throw new Error(`Native analyzer compileCss binding is missing.`)\r\n}\r\n","import fs from \"node:fs\"\r\nimport { createDebugLogger } from \"@tailwind-styled/shared\"\r\n\r\nexport const DEFAULT_TOP_LIMIT = 10\r\nexport const DEFAULT_FREQUENT_THRESHOLD = 2\r\nexport const DEBUG_NAMESPACE = \"tailwind-styled:analyzer\"\r\n\r\nexport function formatErrorMessage(error: unknown): string {\r\n return error instanceof Error ? error.message : String(error)\r\n}\r\n\r\nexport function isRecord(value: unknown): value is Record<string, unknown> {\r\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false\r\n const proto = Object.getPrototypeOf(value)\r\n return proto === Object.prototype || proto === null\r\n}\r\n\r\nexport async function pathExists(filePath: string): Promise<boolean> {\r\n try {\r\n await fs.promises.access(filePath, fs.constants.F_OK)\r\n return true\r\n } catch {\r\n return false\r\n }\r\n}\r\n\r\nexport const debugLog = createDebugLogger(DEBUG_NAMESPACE, \"tailwind-styled/analyzer\")\r\n\r\nexport function sanitizeTopLimit(value: number | undefined): number {\r\n if (!Number.isFinite(value)) return DEFAULT_TOP_LIMIT\r\n return Math.max(1, Math.trunc(value as number))\r\n}\r\n\r\nexport function sanitizeFrequentThreshold(value: number | undefined): number {\r\n if (!Number.isFinite(value)) return DEFAULT_FREQUENT_THRESHOLD\r\n return Math.max(1, Math.trunc(value as number))\r\n}\r\n","import { TwError } from \"@tailwind-styled/shared\"\r\nimport type { ScanWorkspaceOptions } from \"@tailwind-styled/scanner\"\r\nimport { z } from \"zod\"\r\n\r\nconst formatIssuePath = (path: readonly PropertyKey[]): string =>\r\n path.length > 0\r\n ? path\r\n .map((segment) =>\r\n typeof segment === \"symbol\" ? segment.description ?? segment.toString() : String(segment)\r\n )\r\n .join(\".\")\r\n : \"<root>\"\r\n\r\nconst isPlainObject = (value: unknown): value is Record<string, unknown> => {\r\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false\r\n const proto = Object.getPrototypeOf(value)\r\n return proto === Object.prototype || proto === null\r\n}\r\n\r\nconst formatIssues = (error: z.ZodError): string =>\r\n error.issues\r\n .map((issue) => {\r\n const path = formatIssuePath(issue.path)\r\n return `${path}: ${issue.message}`\r\n })\r\n .join(\"; \")\r\n\r\nconst parseWithSchema = <T>(schema: z.ZodType<T>, data: unknown, label: string): T => {\r\n const parsed = schema.safeParse(data)\r\n if (parsed.success) return parsed.data\r\n const details = formatIssues(parsed.error)\r\n throw new TwError(\r\n \"validation\",\r\n \"SCHEMA_VALIDATION_FAILED\",\r\n details ? `${label}: ${details}` : label,\r\n parsed.error\r\n )\r\n}\r\n\r\nconst CountSchema = z.number().int().min(0)\r\n\r\nexport const ClassUsageSchema = z.object({\r\n name: z.string(),\r\n count: CountSchema,\r\n isUnused: z.boolean().optional(),\r\n isConflict: z.boolean().optional(),\r\n})\r\n\r\nexport const ClassConflictSchema = z.object({\r\n className: z.string(),\r\n variants: z.array(z.string()),\r\n classes: z.array(z.string()),\r\n message: z.string(),\r\n})\r\n\r\nconst ClassCountSchema = z.object({\r\n name: z.string(),\r\n count: CountSchema,\r\n})\r\n\r\nexport const NativeReportSchema = z.object({\r\n root: z.string(),\r\n totalFiles: CountSchema,\r\n uniqueClassCount: CountSchema,\r\n totalClassOccurrences: CountSchema,\r\n topClasses: z.array(ClassCountSchema),\r\n duplicateCandidates: z.array(ClassCountSchema),\r\n safelist: z.array(z.string()),\r\n})\r\n\r\nexport const NativeCssCompileResultSchema = z.object({\r\n css: z.string(),\r\n resolvedClasses: z.array(z.string()),\r\n unknownClasses: z.array(z.string()),\r\n sizeBytes: CountSchema,\r\n})\r\n\r\nconst AnalyzerClassStatsSchema = z.object({\r\n top: z\r\n .number({\r\n error: \"analyzeWorkspace options.classStats.top must be a number when provided.\",\r\n })\r\n .finite()\r\n .optional(),\r\n frequentThreshold: z\r\n .number({\r\n error:\r\n \"analyzeWorkspace options.classStats.frequentThreshold must be a number when provided.\",\r\n })\r\n .finite()\r\n .optional(),\r\n})\r\n\r\nconst AnalyzerSemanticOptionsSchema = z.object({\r\n tailwindConfigPath: z\r\n .string({\r\n error:\r\n \"analyzeWorkspace options.semantic.tailwindConfigPath must be a non-empty string when provided.\",\r\n })\r\n .min(\r\n 1,\r\n \"analyzeWorkspace options.semantic.tailwindConfigPath must be a non-empty string when provided.\"\r\n )\r\n .optional(),\r\n})\r\n\r\nexport const AnalyzerOptionsSchema = z.object({\r\n scanner: z\r\n .custom<ScanWorkspaceOptions>(\r\n (value) => isPlainObject(value),\r\n \"analyzeWorkspace options.scanner must be an object when provided.\"\r\n )\r\n .optional(),\r\n classStats: AnalyzerClassStatsSchema.optional(),\r\n semantic: z\r\n .union([\r\n z.boolean({\r\n error: \"analyzeWorkspace options.semantic must be a boolean or an object when provided.\",\r\n }),\r\n AnalyzerSemanticOptionsSchema,\r\n ])\r\n .optional(),\r\n includeClass: z\r\n .custom<(className: string) => boolean>(\r\n (value) => typeof value === \"function\",\r\n \"analyzeWorkspace options.includeClass must be a function when provided.\"\r\n )\r\n .optional(),\r\n})\r\n\r\nexport const ClassToCssOptionsSchema = z.object({\r\n prefix: z\r\n .union([z.string(), z.null()], {\r\n error: \"classToCss options.prefix must be a string or null when provided.\",\r\n })\r\n .optional(),\r\n strict: z\r\n .boolean({\r\n error: \"classToCss options.strict must be a boolean when provided.\",\r\n })\r\n .optional(),\r\n})\r\n\r\nexport const parseAnalyzerOptions = (options: unknown) =>\r\n parseWithSchema(AnalyzerOptionsSchema, options ?? {}, \"analyzeWorkspace options are invalid\")\r\n\r\nexport const parseNativeReport = (report: unknown) =>\r\n parseWithSchema(NativeReportSchema, report, \"Native analyzer report is invalid\")\r\n\r\nexport const parseNativeCssCompileResult = (result: unknown, className?: string) =>\r\n parseWithSchema(\r\n NativeCssCompileResultSchema,\r\n result,\r\n className\r\n ? `Native CSS compile result is invalid for class \"${className}\"`\r\n : \"Native CSS compile result is invalid\"\r\n )\r\n\r\nexport const parseClassToCssOptions = (options: unknown) =>\r\n parseWithSchema(ClassToCssOptionsSchema, options ?? {}, \"classToCss options are invalid\")\r\n","import fs from \"node:fs\"\r\nimport path from \"node:path\"\r\nimport { pathToFileURL } from \"node:url\"\r\n\r\nimport type {\r\n AnalyzerSemanticReport,\r\n ClassConflict,\r\n ClassUsage,\r\n LoadedTailwindConfig,\r\n TailwindConfigCacheEntry,\r\n} from \"./types\"\r\nimport { getNativeBinding } from \"./binding\"\r\nimport { debugLog, formatErrorMessage, isRecord, pathExists } from \"./utils\"\r\n\r\n\r\nconst SUPPORTED_TAILWIND_CONFIG_EXTENSIONS = new Set([\".ts\", \".js\", \".cjs\", \".mjs\"])\r\n\r\nconst tailwindConfigCache = new Map<string, TailwindConfigCacheEntry>()\r\n\r\nexport const splitVariantAndBase = (className: string): { variantKey: string; base: string } => {\r\n const parts = className.split(\":\")\r\n if (parts.length <= 1) return { variantKey: \"\", base: className }\r\n const base = parts.pop() ?? className\r\n return { variantKey: parts.join(\":\"), base }\r\n}\r\n\r\n/**\r\n * resolveConflictGroup — delegates ke Rust `resolve_conflict_group`.\r\n * Return: string | null — null jika tidak ada conflict group.\r\n */\r\nexport const resolveConflictGroup = async (base: string): Promise<string | null> => {\r\n const native = await getNativeBinding()\r\n if (!native?.resolveConflictGroup) {\r\n throw new Error(\"Native binding 'resolveConflictGroup' is required but not available.\")\r\n }\r\n const result = native.resolveConflictGroup(base) as string\r\n return result.length > 0 ? result : null\r\n}\r\n\r\nconst detectConflicts = async (\r\n usages: ClassUsage[]\r\n): Promise<{\r\n conflicts: ClassConflict[]\r\n conflictedClassNames: Set<string>\r\n}> => {\r\n // Native-first: Rust HashSet conflict detection (required)\r\n const native = await getNativeBinding()\r\n if (!native?.detectClassConflicts) {\r\n throw new Error(\"FATAL: Native binding 'detectClassConflicts' is required but not available.\")\r\n }\r\n const result = native.detectClassConflicts(JSON.stringify(usages.map((u) => ({ name: u.name, count: u.count }))))\r\n return {\r\n conflicts: result.conflicts.map((c) => ({\r\n className: c.group,\r\n variants: c.variantKey.length > 0 ? c.variantKey.split(\":\") : [],\r\n classes: c.classes,\r\n message: c.message,\r\n })),\r\n conflictedClassNames: new Set(result.conflictedClassNames),\r\n }\r\n}\r\n\r\nconst isSupportedTailwindConfigPath = (configPath: string): boolean => {\r\n return SUPPORTED_TAILWIND_CONFIG_EXTENSIONS.has(path.extname(configPath).toLowerCase())\r\n}\r\n\r\nconst resolveTailwindConfigPath = async (\r\n root: string,\r\n explicitPath?: string\r\n): Promise<string | null> => {\r\n if (explicitPath) {\r\n const resolved = path.resolve(root, explicitPath)\r\n if (!(await pathExists(resolved))) return null\r\n return resolved\r\n }\r\n\r\n const candidates = [\r\n \"tailwind.config.ts\",\r\n \"tailwind.config.js\",\r\n \"tailwind.config.cjs\",\r\n \"tailwind.config.mjs\",\r\n ]\r\n\r\n for (const candidate of candidates) {\r\n const fullPath = path.resolve(root, candidate)\r\n if (await pathExists(fullPath)) return fullPath\r\n }\r\n\r\n return null\r\n}\r\n\r\nconst collectSafelistFromConfig = (config: Record<string, unknown>): string[] => {\r\n const raw = config.safelist\r\n if (!Array.isArray(raw)) return []\r\n\r\n const out = new Set<string>()\r\n for (const entry of raw) {\r\n if (typeof entry === \"string\" && entry.length > 0) {\r\n out.add(entry)\r\n continue\r\n }\r\n if (!entry || typeof entry !== \"object\") continue\r\n const pattern = (entry as Record<string, unknown>).pattern\r\n if (typeof pattern === \"string\" && pattern.length > 0) {\r\n out.add(pattern)\r\n }\r\n }\r\n\r\n return Array.from(out)\r\n}\r\n\r\nconst collectCustomUtilities = (config: Record<string, unknown>): Set<string> => {\r\n const out = new Set<string>()\r\n const theme = config.theme\r\n if (!theme || typeof theme !== \"object\") return out\r\n\r\n const extend = (theme as Record<string, unknown>).extend\r\n if (!extend || typeof extend !== \"object\") return out\r\n\r\n for (const [section, value] of Object.entries(extend as Record<string, unknown>)) {\r\n if (!value || typeof value !== \"object\" || Array.isArray(value)) continue\r\n for (const key of Object.keys(value as Record<string, unknown>)) {\r\n out.add(`${section}-${key}`)\r\n if (section === \"colors\") {\r\n out.add(`bg-${key}`)\r\n out.add(`text-${key}`)\r\n out.add(`border-${key}`)\r\n } else if (section === \"spacing\") {\r\n out.add(`p-${key}`)\r\n out.add(`m-${key}`)\r\n out.add(`gap-${key}`)\r\n out.add(`w-${key}`)\r\n out.add(`h-${key}`)\r\n } else if (section === \"fontSize\") {\r\n out.add(`text-${key}`)\r\n } else if (section === \"borderRadius\") {\r\n out.add(`rounded-${key}`)\r\n } else if (section === \"boxShadow\") {\r\n out.add(`shadow-${key}`)\r\n }\r\n }\r\n }\r\n\r\n return out\r\n}\r\n\r\nconst collectSafelistFromSource = async (configPath: string): Promise<string[]> => {\r\n const source = await fs.promises.readFile(configPath, \"utf8\")\r\n\r\n // Gunakan native AST parser untuk ekstrak string literals dari config\r\n // Lebih akurat dari regex — handle template literals, multiline, nested quotes\r\n const { extractClassesNative } = await import(\"@tailwind-styled/scanner\")\r\n const allTokens = extractClassesNative(source)\r\n\r\n // Filter hanya token yang berasal dari safelist block\r\n // Native parse sudah return semua string value — kita cek apakah safelist array ada di source\r\n const hasSafelist = source.includes(\"safelist\")\r\n if (!hasSafelist) return []\r\n\r\n // Ambil baris-baris safelist dari source untuk batasi scope\r\n const safelistMatch = source.match(/safelist\\s*:\\s*\\[([\\s\\S]*?)\\]/m)?.[1]\r\n if (!safelistMatch) return []\r\n\r\n // Cross-reference: hanya return token yang muncul di dalam safelist block\r\n const safelistSet = new Set<string>()\r\n for (const token of safelistMatch.matchAll(/[\"'`]([^\"'`]+)[\"'`]/g)) {\r\n const value = token[1].trim()\r\n if (value.length > 0) safelistSet.add(value)\r\n }\r\n\r\n // Intersect dengan native extracted tokens untuk validasi\r\n return allTokens.filter((t: string) => safelistSet.has(t))\r\n}\r\n\r\nconst loadTailwindConfig = async (\r\n root: string,\r\n semanticOption?: { tailwindConfigPath?: string }\r\n): Promise<LoadedTailwindConfig | null> => {\r\n const startMs = Date.now()\r\n const configPath = await resolveTailwindConfigPath(root, semanticOption?.tailwindConfigPath)\r\n if (!configPath) return null\r\n\r\n if (!isSupportedTailwindConfigPath(configPath)) {\r\n return {\r\n path: configPath,\r\n loaded: false,\r\n warning: `Unsupported Tailwind config extension at \"${configPath}\". Supported extensions: .ts, .js, .cjs, .mjs.`,\r\n safelist: new Set<string>(),\r\n customUtilities: new Set<string>(),\r\n }\r\n }\r\n\r\n const configStat = await fs.promises.stat(configPath).catch(() => null)\r\n if (configStat) {\r\n const cached = tailwindConfigCache.get(configPath)\r\n if (cached && cached.mtimeMs === configStat.mtimeMs && cached.size === configStat.size) {\r\n debugLog(\r\n `tailwind config cache hit: ${configPath} (${cached.config.safelist.size} safelist entries)`\r\n )\r\n return cached.config\r\n }\r\n }\r\n\r\n const result = await (async (): Promise<{\r\n config: Record<string, unknown> | null\r\n warning: string | undefined\r\n }> => {\r\n try {\r\n const cacheBustToken = Math.trunc(configStat?.mtimeMs ?? Date.now())\r\n const imported = await import(`${pathToFileURL(configPath).href}?tws_mtime=${cacheBustToken}`)\r\n const candidate = (imported.default ?? imported) as unknown\r\n if (isRecord(candidate)) {\r\n return { config: candidate, warning: undefined }\r\n } else if (typeof candidate === \"function\") {\r\n const evaluated = candidate()\r\n if (isRecord(evaluated)) {\r\n return { config: evaluated, warning: undefined }\r\n }\r\n return { config: null, warning: \"Tailwind config export function must return an object.\" }\r\n }\r\n return {\r\n config: null,\r\n warning: \"Tailwind config export must be an object or a function returning an object.\",\r\n }\r\n } catch (error) {\r\n return { config: null, warning: formatErrorMessage(error) }\r\n }\r\n })()\r\n\r\n const { config, warning } = result\r\n\r\n const safelist = new Set<string>()\r\n const customUtilities = new Set<string>()\r\n\r\n if (config) {\r\n for (const item of collectSafelistFromConfig(config)) safelist.add(item)\r\n for (const item of collectCustomUtilities(config)) customUtilities.add(item)\r\n }\r\n\r\n if (safelist.size === 0) {\r\n try {\r\n for (const item of await collectSafelistFromSource(configPath)) safelist.add(item)\r\n } catch (error) {\r\n debugLog(\r\n `failed to parse safelist from source at \"${configPath}\": ${formatErrorMessage(error)}`\r\n )\r\n // keep empty if source parsing fails\r\n }\r\n }\r\n\r\n const loaded = {\r\n path: configPath,\r\n loaded: config !== null,\r\n warning,\r\n safelist,\r\n customUtilities,\r\n }\r\n\r\n if (configStat) {\r\n tailwindConfigCache.set(configPath, {\r\n mtimeMs: configStat.mtimeMs,\r\n size: configStat.size,\r\n config: loaded,\r\n })\r\n }\r\n\r\n debugLog(\r\n `tailwind config loaded from \"${configPath}\" in ${Date.now() - startMs}ms ` +\r\n `(loaded=${loaded.loaded}, safelist=${loaded.safelist.size}, custom=${loaded.customUtilities.size})`\r\n )\r\n\r\n return loaded\r\n }\r\n\r\nexport const utilityPrefix = (baseClass: string): string => {\r\n const normalized = baseClass.startsWith(\"-\") ? baseClass.slice(1) : baseClass\r\n if (normalized.includes(\"[\") && normalized.includes(\"]\")) return \"arbitrary\"\r\n if (normalized.startsWith(\"min-w-\")) return \"min-w\"\r\n if (normalized.startsWith(\"max-w-\")) return \"max-w\"\r\n if (normalized.startsWith(\"min-h-\")) return \"min-h\"\r\n if (normalized.startsWith(\"max-h-\")) return \"max-h\"\r\n if (normalized.startsWith(\"space-x-\")) return \"space-x\"\r\n if (normalized.startsWith(\"space-y-\")) return \"space-y\"\r\n if (normalized.startsWith(\"inline-\")) return \"inline\"\r\n if (normalized.startsWith(\"border-\")) return \"border\"\r\n if (normalized.startsWith(\"text-\")) return \"text\"\r\n if (normalized.startsWith(\"bg-\")) return \"bg\"\r\n if (normalized.startsWith(\"rounded\")) return \"rounded\"\r\n if (normalized.startsWith(\"shadow\")) return \"shadow\"\r\n const hyphen = normalized.indexOf(\"-\")\r\n if (hyphen < 0) return normalized\r\n return normalized.slice(0, hyphen)\r\n}\r\n\r\nexport const buildSemanticReport = async (\r\n usages: ClassUsage[],\r\n root: string,\r\n semanticOption?: { tailwindConfigPath?: string }\r\n): Promise<AnalyzerSemanticReport> => {\r\n const loadedConfig = await loadTailwindConfig(root, semanticOption)\r\n const safelist = loadedConfig?.safelist ?? new Set<string>()\r\n const customUtilities = loadedConfig?.customUtilities ?? new Set<string>()\r\n const usageNames = new Set(usages.map((usage) => usage.name))\r\n\r\n const unusedClasses: ClassUsage[] = Array.from(safelist)\r\n .filter((className) => !usageNames.has(className))\r\n .sort()\r\n .map((className) => ({ name: className, count: 0, isUnused: true }))\r\n\r\n // ── Unknown classes — native-first (required) ─────────────────────────────\r\n const native = await getNativeBinding()\r\n if (!native?.classifyKnownClasses) {\r\n throw new Error(\"FATAL: Native binding 'classifyKnownClasses' is required but not available.\")\r\n }\r\n const classNames = usages.map((u) => u.name)\r\n const results = native.classifyKnownClasses(\r\n classNames,\r\n Array.from(safelist),\r\n Array.from(customUtilities)\r\n )\r\n const unknownSet = new Set(\r\n results\r\n .filter((r: { className: string; isKnown: boolean }) => !r.isKnown)\r\n .map((r: { className: string; isKnown: boolean }) => r.className)\r\n )\r\n const unknownClasses = usages\r\n .filter((usage) => unknownSet.has(usage.name))\r\n .map((usage) => ({ ...usage, isUnused: true }))\r\n\r\n const { conflicts } = await detectConflicts(usages)\r\n\r\n return {\r\n unusedClasses,\r\n unknownClasses,\r\n conflicts,\r\n ...(loadedConfig\r\n ? {\r\n tailwindConfig: {\r\n path: loadedConfig.path,\r\n loaded: loadedConfig.loaded,\r\n safelistCount: loadedConfig.safelist.size,\r\n customUtilityCount: loadedConfig.customUtilities.size,\r\n ...(loadedConfig.warning ? { warning: loadedConfig.warning } : {}),\r\n },\r\n }\r\n : {}),\r\n }\r\n}","import fs from \"node:fs\"\r\nimport path from \"node:path\"\r\nimport { pathToFileURL } from \"node:url\"\r\nimport {\r\n type AnalyzerReport,\r\n type AnalyzerSemanticReport,\r\n analyzeWorkspace as runWorkspaceAnalysis,\r\n} from \"@tailwind-styled/analyzer\"\r\nimport { generateCssForClasses, mergeClassesStatic } from \"@tailwind-styled/compiler/internal\"\r\nimport {\r\n type ScanWorkspaceOptions,\r\n type ScanWorkspaceResult,\r\n scanWorkspaceAsync,\r\n} from \"@tailwind-styled/scanner\"\r\nimport { createLogger, TwError, wrapUnknownError } from \"@tailwind-styled/shared\"\r\n\r\nimport { applyIncrementalChange } from \"./incremental\"\r\nimport { ImpactTracker } from \"./impactTracker\"\r\nimport { EngineMetricsCollector, type EngineMetricsSnapshot } from \"./metrics\"\r\nimport { writeMetrics } from \"./metricsWriter\"\r\nimport {\r\n type EnginePlugin,\r\n runAfterBuild,\r\n runAfterScan,\r\n runAfterWatch,\r\n runBeforeBuild,\r\n runBeforeScan,\r\n runBeforeWatch,\r\n runOnError,\r\n runTransformClasses,\r\n} from \"./plugin-api\"\r\nimport { parseEngineOptions, parseEngineWatchOptions } from \"./schemas\"\r\nimport { type WorkspaceWatcher, watchWorkspace } from \"./watch\"\r\n\r\nconst DEFAULT_LARGE_FILE_THRESHOLD_BYTES = 10 * 1024 * 1024\r\nconst DEFAULT_FLUSH_DEBOUNCE_MS = 100\r\nconst DEFAULT_MAX_EVENTS_PER_FLUSH = 100\r\nconst _DEFAULT_WATCH_EVENT_TYPE: EngineBuildWatchEventType = \"change\"\r\n\r\nconst configState = {\r\n cachedTailwindConfig: undefined as Record<string, unknown> | undefined,\r\n tailwindConfigLoaded: false,\r\n setLoaded(config: Record<string, unknown> | undefined) {\r\n this.cachedTailwindConfig = config\r\n this.tailwindConfigLoaded = true\r\n },\r\n getConfig() {\r\n return this.cachedTailwindConfig\r\n },\r\n isLoaded() {\r\n return this.tailwindConfigLoaded\r\n },\r\n}\r\nconst log = createLogger(\"engine\")\r\n\r\nexport interface EngineOptions {\r\n root?: string\r\n scanner?: ScanWorkspaceOptions\r\n compileCss?: boolean\r\n tailwindConfigPath?: string\r\n plugins?: EnginePlugin[]\r\n /** Enable analyzer integration - provides semantic report (unused classes, conflicts). Default: false */\r\n analyze?: boolean\r\n}\r\n\r\nexport interface EngineWatchOptions {\r\n debounceMs?: number\r\n maxEventsPerFlush?: number\r\n largeFileThreshold?: number\r\n}\r\n\r\nexport interface BuildResult {\r\n scan: ScanWorkspaceResult\r\n mergedClassList: string\r\n css: string\r\n /** Analyzer semantic report - present when analyze: true in options */\r\n analysis?: {\r\n unusedClasses: string[]\r\n classConflicts: Array<{\r\n className: string\r\n files: string[]\r\n classes?: string[]\r\n message?: string\r\n }>\r\n classUsage: Record<string, number>\r\n semantic?: AnalyzerSemanticReport\r\n report: AnalyzerReport\r\n }\r\n}\r\n\r\ninterface BuildExecutionMetrics {\r\n analyzeMs: number\r\n compileMs: number\r\n}\r\n\r\ninterface BuildExecution {\r\n result: BuildResult\r\n metrics: BuildExecutionMetrics\r\n}\r\n\r\ntype EngineBuildWatchEventType = \"initial\" | \"change\" | \"unlink\" | \"full-rescan\"\r\n\r\nexport type EngineWatchEvent =\r\n | {\r\n type: EngineBuildWatchEventType\r\n filePath?: string\r\n result: BuildResult\r\n metrics?: EngineMetricsSnapshot\r\n }\r\n | {\r\n type: \"error\"\r\n filePath?: string\r\n error: string\r\n metrics?: EngineMetricsSnapshot\r\n }\r\n\r\nexport interface TailwindStyledEngine {\r\n scan(): Promise<ScanWorkspaceResult>\r\n scanWorkspace(): Promise<ScanWorkspaceResult>\r\n analyzeWorkspace(): Promise<Awaited<ReturnType<typeof runWorkspaceAnalysis>>>\r\n generateSafelist(): Promise<string[]>\r\n build(): Promise<BuildResult>\r\n watch(\r\n onEvent: (event: EngineWatchEvent) => void,\r\n options?: EngineWatchOptions\r\n ): Promise<{ close(): void }>\r\n}\r\n\r\nasync function loadTailwindConfigFromPath(\r\n root: string,\r\n tailwindConfigPath?: string\r\n): Promise<Record<string, unknown> | undefined> {\r\n if (!tailwindConfigPath) return undefined\r\n\r\n const configPath = path.resolve(root, tailwindConfigPath)\r\n if (!fs.existsSync(configPath)) {\r\n throw TwError.fromIo(\"CONFIG_NOT_FOUND\", `tailwindConfigPath not found: ${configPath}`)\r\n }\r\n\r\n const imported = await import(pathToFileURL(configPath).href)\r\n const config = (imported.default ?? imported) as Record<string, unknown>\r\n return config\r\n}\r\n\r\nasync function tryRunAnalyzer(root: string, options: EngineOptions) {\r\n try {\r\n const report = await runWorkspaceAnalysis(root, {\r\n scanner: options.scanner,\r\n semantic: true,\r\n })\r\n\r\n const classUsage: Record<string, number> = {}\r\n for (const usage of report.classStats.all) {\r\n classUsage[usage.name] = usage.count\r\n }\r\n\r\n const semantic = report.semantic\r\n return {\r\n unusedClasses: semantic?.unusedClasses.map((usage) => usage.name) ?? [],\r\n classConflicts:\r\n semantic?.conflicts.map((conflict) => ({\r\n className: conflict.className,\r\n files: [],\r\n classes: [...conflict.classes],\r\n message: conflict.message,\r\n })) ?? [],\r\n classUsage,\r\n semantic,\r\n report,\r\n }\r\n } catch (e) {\r\n log.warn(\"Analyzer not available:\", String(e))\r\n return undefined\r\n }\r\n}\r\n\r\nasync function buildFromScan(\r\n scan: ScanWorkspaceResult,\r\n root: string,\r\n options: EngineOptions,\r\n tailwindConfig?: Record<string, unknown>\r\n): Promise<BuildExecution> {\r\n const plugins = options.plugins ?? []\r\n const context = { root, timestamp: Date.now() }\r\n\r\n await runBeforeBuild(plugins, scan, context)\r\n const compileStartedAt = Date.now()\r\n const transformedClasses = await runTransformClasses(plugins, scan.uniqueClasses, context)\r\n const mergedClassList = mergeClassesStatic(transformedClasses.join(\" \"))\r\n\r\n const css =\r\n options.compileCss !== false && mergedClassList.length > 0\r\n ? await generateCssForClasses(\r\n mergedClassList.split(/\\s+/).filter(Boolean),\r\n tailwindConfig,\r\n root\r\n )\r\n : \"\"\r\n\r\n const compileMs = Date.now() - compileStartedAt\r\n const analyzeStartedAt = Date.now()\r\n const analysis = options.analyze ? await tryRunAnalyzer(root, options) : undefined\r\n const analyzeMs = options.analyze ? Date.now() - analyzeStartedAt : 0\r\n\r\n const result: BuildResult = {\r\n scan,\r\n mergedClassList,\r\n css,\r\n analysis,\r\n }\r\n\r\n return {\r\n result: await runAfterBuild(plugins, result, context),\r\n metrics: {\r\n analyzeMs,\r\n compileMs,\r\n },\r\n }\r\n}\r\n\r\nfunction countWorkspacePackages(root: string): number {\r\n const packagesDir = path.join(root, \"packages\")\r\n if (!fs.existsSync(packagesDir)) return 0\r\n\r\n try {\r\n return fs\r\n .readdirSync(packagesDir, { withFileTypes: true })\r\n .filter(\r\n (entry) =>\r\n entry.isDirectory() && fs.existsSync(path.join(packagesDir, entry.name, \"package.json\"))\r\n ).length\r\n } catch (err) {\r\n log.debug(`countWorkspacePackages: ${err instanceof Error ? err.message : String(err)}`)\r\n return 0\r\n }\r\n}\r\n\r\nfunction writeDashboardMetrics(\r\n root: string,\r\n mode: \"build\" | \"watch\" | \"error\",\r\n result: BuildResult | null,\r\n metrics: Partial<{\r\n buildMs: number\r\n scanMs: number\r\n analyzeMs: number\r\n compileMs: number\r\n lastEventType: string\r\n error: string\r\n }> &\r\n Partial<EngineMetricsSnapshot>\r\n): void {\r\n writeMetrics(\r\n {\r\n mode,\r\n buildMs: metrics.buildMs,\r\n scanMs: metrics.scanMs,\r\n analyzeMs: metrics.analyzeMs,\r\n compileMs: metrics.compileMs,\r\n classCount: result?.scan.uniqueClasses.length ?? 0,\r\n fileCount: result?.scan.totalFiles ?? 0,\r\n cssBytes: result ? Buffer.byteLength(result.css, \"utf8\") : 0,\r\n packageCount: countWorkspacePackages(root),\r\n error: metrics.error,\r\n lastEventType: metrics.lastEventType,\r\n eventsReceived: metrics.eventsReceived,\r\n eventsProcessed: metrics.eventsProcessed,\r\n batchesProcessed: metrics.batchesProcessed,\r\n incrementalUpdates: metrics.incrementalUpdates,\r\n fullRescans: metrics.fullRescans,\r\n skippedLargeFiles: metrics.skippedLargeFiles,\r\n queueMaxSize: metrics.queueMaxSize,\r\n lastBuildMs: metrics.lastBuildMs,\r\n avgBuildMs: metrics.avgBuildMs,\r\n },\r\n root\r\n )\r\n}\r\n\r\nexport async function createEngine(rawOptions: EngineOptions = {}): Promise<TailwindStyledEngine> {\r\n // ── Boundary validation: validate options with Zod before entering domain logic ──\r\n const options = parseEngineOptions(rawOptions)\r\n\r\n const root = options.root ?? process.cwd()\r\n const resolvedRoot = path.resolve(root)\r\n\r\n const plugins = (rawOptions as EngineOptions).plugins ?? []\r\n\r\n const getTailwindConfig = async (): Promise<Record<string, unknown> | undefined> => {\r\n if (configState.isLoaded()) return configState.getConfig()\r\n const config = await loadTailwindConfigFromPath(resolvedRoot, options.tailwindConfigPath)\r\n configState.setLoaded(config)\r\n return config\r\n }\r\n\r\n const reportEngineError = async (error: unknown): Promise<Error> => {\r\n const normalized = error instanceof TwError\r\n ? error\r\n : wrapUnknownError(\"compile\", \"ENGINE_ERROR\", error)\r\n const context = { root: resolvedRoot, timestamp: Date.now() }\r\n try {\r\n await runOnError(plugins, normalized, context)\r\n } catch (pluginError) {\r\n log.error(\r\n \"plugin onError hook failed:\",\r\n pluginError instanceof Error ? pluginError.message : String(pluginError)\r\n )\r\n }\r\n log.error(normalized.message)\r\n return normalized\r\n }\r\n\r\n const doScan = async (): Promise<ScanWorkspaceResult> => {\r\n try {\r\n const context = { root: resolvedRoot, timestamp: Date.now() }\r\n await runBeforeScan(plugins, context)\r\n const scan = await scanWorkspaceAsync(resolvedRoot, options.scanner)\r\n return await runAfterScan(plugins, scan, context)\r\n } catch (error) {\r\n throw await reportEngineError(error)\r\n }\r\n }\r\n\r\n const doAnalyze = async (): Promise<Awaited<ReturnType<typeof runWorkspaceAnalysis>>> => {\r\n try {\r\n return await runWorkspaceAnalysis(resolvedRoot, {\r\n scanner: options.scanner,\r\n })\r\n } catch (error) {\r\n throw await reportEngineError(error)\r\n }\r\n }\r\n\r\n const doGenerateSafelist = async (): Promise<string[]> => {\r\n const scan = await doScan()\r\n return [...scan.uniqueClasses]\r\n }\r\n\r\n return {\r\n scan: doScan,\r\n scanWorkspace: doScan,\r\n analyzeWorkspace: doAnalyze,\r\n generateSafelist: doGenerateSafelist,\r\n async build(): Promise<BuildResult> {\r\n const scanStartedAt = Date.now()\r\n const scan = await doScan()\r\n const scanMs = Date.now() - scanStartedAt\r\n try {\r\n const buildStartedAt = Date.now()\r\n const execution = await buildFromScan(\r\n scan,\r\n resolvedRoot,\r\n options,\r\n await getTailwindConfig()\r\n )\r\n const buildMs = Date.now() - buildStartedAt\r\n writeDashboardMetrics(resolvedRoot, \"build\", execution.result, {\r\n buildMs,\r\n scanMs,\r\n analyzeMs: execution.metrics.analyzeMs,\r\n compileMs: execution.metrics.compileMs,\r\n })\r\n return execution.result\r\n } catch (error) {\r\n const normalized = await reportEngineError(error)\r\n writeDashboardMetrics(resolvedRoot, \"error\", null, {\r\n scanMs,\r\n error: normalized.message,\r\n })\r\n throw normalized\r\n }\r\n },\r\n async watch(\r\n onEvent: (event: EngineWatchEvent) => void,\r\n rawWatchOptions: EngineWatchOptions = {}\r\n ): Promise<{ close(): void }> {\r\n // ── Boundary validation: validate watch options with Zod ──\r\n const watchOptions = parseEngineWatchOptions(rawWatchOptions)\r\n\r\n const flushDebounceMs = watchOptions.debounceMs ?? DEFAULT_FLUSH_DEBOUNCE_MS\r\n const maxEventsPerFlush = watchOptions.maxEventsPerFlush ?? DEFAULT_MAX_EVENTS_PER_FLUSH\r\n const largeFileThreshold =\r\n watchOptions.largeFileThreshold ?? DEFAULT_LARGE_FILE_THRESHOLD_BYTES\r\n\r\n const tailwindConfig = await getTailwindConfig()\r\n const watchContext = { root: resolvedRoot, timestamp: Date.now() }\r\n await runBeforeWatch(plugins, watchContext)\r\n\r\n const initialScanStartedAt = Date.now()\r\n const initialScan = await doScan()\r\n const initialScanMs = Date.now() - initialScanStartedAt\r\n\r\n const watchState = {\r\n currentScan: initialScan,\r\n timer: null as NodeJS.Timeout | null,\r\n setTimer(t: NodeJS.Timeout | null) {\r\n this.timer = t\r\n },\r\n clearTimer() {\r\n if (this.timer) {\r\n clearTimeout(this.timer)\r\n this.timer = null\r\n }\r\n },\r\n }\r\n\r\n try {\r\n const initialBuildStartedAt = Date.now()\r\n const execution = await buildFromScan(\r\n watchState.currentScan,\r\n resolvedRoot,\r\n options,\r\n tailwindConfig\r\n )\r\n const initialBuildMs = Date.now() - initialBuildStartedAt\r\n writeDashboardMetrics(resolvedRoot, \"watch\", execution.result, {\r\n buildMs: initialBuildMs,\r\n scanMs: initialScanMs,\r\n analyzeMs: execution.metrics.analyzeMs,\r\n compileMs: execution.metrics.compileMs,\r\n lastEventType: \"initial\",\r\n })\r\n onEvent({\r\n type: \"initial\",\r\n result: execution.result,\r\n })\r\n } catch (error) {\r\n const normalized = await reportEngineError(error)\r\n writeDashboardMetrics(resolvedRoot, \"error\", null, {\r\n scanMs: initialScanMs,\r\n error: normalized.message,\r\n lastEventType: \"initial\",\r\n })\r\n onEvent({ type: \"error\", error: normalized.message })\r\n throw normalized\r\n }\r\n\r\n const queue: Array<{ type: \"change\" | \"unlink\"; filePath: string }> = []\r\n const metrics = new EngineMetricsCollector()\r\n\r\n const scheduleFlush = (): void => {\r\n if (watchState.timer) return\r\n watchState.setTimer(\r\n setTimeout(() => {\r\n watchState.clearTimer()\r\n void flushBatch()\r\n }, flushDebounceMs)\r\n )\r\n }\r\n\r\n const shouldForceFullRescan = (event: {\r\n type: \"change\" | \"unlink\"\r\n filePath: string\r\n }): boolean => {\r\n if (event.type === \"unlink\") return false\r\n try {\r\n const stat = fs.statSync(event.filePath)\r\n if (stat.size > largeFileThreshold) {\r\n metrics.markSkippedLargeFile()\r\n return true\r\n }\r\n } catch (statErr) {\r\n // File mungkin sudah dihapus antara event dan stat — non-fatal\r\n log.debug(`stat failed for ${event.filePath}: ${statErr instanceof Error ? statErr.message : String(statErr)}`)\r\n return false\r\n }\r\n return false\r\n }\r\n\r\n const flushBatch = async (): Promise<void> => {\r\n if (queue.length === 0) return\r\n\r\n const batch = queue.splice(0, maxEventsPerFlush)\r\n metrics.markBatchProcessed(batch.length)\r\n\r\n const forceRescan = batch.some((event) => shouldForceFullRescan(event))\r\n const lastEvent = batch[batch.length - 1]\r\n\r\n const eventTypeState = { emittedType: lastEvent.type as EngineBuildWatchEventType }\r\n const scanStartedAt = Date.now()\r\n\r\n try {\r\n if (forceRescan) {\r\n watchState.currentScan = await doScan()\r\n metrics.markFullRescan()\r\n eventTypeState.emittedType = \"full-rescan\"\r\n } else {\r\n for (const event of batch) {\r\n watchState.currentScan = applyIncrementalChange(\r\n watchState.currentScan,\r\n event.filePath,\r\n event.type,\r\n options.scanner\r\n )\r\n metrics.markIncremental()\r\n }\r\n }\r\n } catch (error) {\r\n const normalized = await reportEngineError(error)\r\n log.warn(\"incremental path failed, forcing full rescan:\", normalized.message)\r\n watchState.currentScan = await doScan()\r\n metrics.markFullRescan()\r\n eventTypeState.emittedType = \"full-rescan\"\r\n }\r\n\r\n const scanMs = Date.now() - scanStartedAt\r\n\r\n try {\r\n const started = Date.now()\r\n const execution = await buildFromScan(\r\n watchState.currentScan,\r\n resolvedRoot,\r\n options,\r\n tailwindConfig\r\n )\r\n const buildMs = Date.now() - started\r\n metrics.markBuildDuration(buildMs)\r\n const snapshot = metrics.snapshot()\r\n writeDashboardMetrics(resolvedRoot, \"watch\", execution.result, {\r\n scanMs,\r\n buildMs,\r\n analyzeMs: execution.metrics.analyzeMs,\r\n compileMs: execution.metrics.compileMs,\r\n lastEventType: eventTypeState.emittedType,\r\n ...snapshot,\r\n })\r\n\r\n onEvent({\r\n type: eventTypeState.emittedType,\r\n filePath: lastEvent.filePath,\r\n result: execution.result,\r\n metrics: snapshot,\r\n })\r\n } catch (error) {\r\n const normalized = await reportEngineError(error)\r\n const snapshot = metrics.snapshot()\r\n writeDashboardMetrics(resolvedRoot, \"error\", null, {\r\n scanMs,\r\n error: normalized.message,\r\n lastEventType: eventTypeState.emittedType,\r\n ...snapshot,\r\n })\r\n onEvent({\r\n type: \"error\",\r\n filePath: lastEvent.filePath,\r\n error: normalized.message,\r\n metrics: snapshot,\r\n })\r\n }\r\n\r\n if (queue.length > 0) scheduleFlush()\r\n }\r\n\r\n const watcher: WorkspaceWatcher = watchWorkspace(\r\n resolvedRoot,\r\n (event) => {\r\n queue.push(event)\r\n metrics.markEventReceived(queue.length)\r\n scheduleFlush()\r\n },\r\n {\r\n ignoreDirectories: options.scanner?.ignoreDirectories,\r\n debounceMs: flushDebounceMs,\r\n onError: (error, directory) => {\r\n void reportEngineError(error)\r\n onEvent({\r\n type: \"error\",\r\n filePath: directory,\r\n error: error.message,\r\n metrics: metrics.snapshot(),\r\n })\r\n },\r\n }\r\n )\r\n\r\n return {\r\n async close() {\r\n watchState.clearTimer()\r\n watcher.close()\r\n await runAfterWatch(plugins, watchContext)\r\n },\r\n }\r\n },\r\n }\r\n}\r\n\r\n// Re-export internal API (including IR types)\r\nexport * from \"./internal\"\r\n// Re-export schemas\r\nexport {\r\n type BuildResultInput,\r\n BuildResultSchema,\r\n type EngineOptionsInput,\r\n EngineOptionsSchema,\r\n type EngineWatchOptionsInput,\r\n EngineWatchOptionsSchema,\r\n parseEngineOptions,\r\n parseEngineWatchOptions,\r\n} from \"./schemas\"\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Standalone facade functions — tidak perlu createEngine()\r\n// Berguna untuk CLI, adapter, dan tooling yang tidak butuh watch/lifecycle penuh\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Scan workspace dan return hasil scan.\r\n * Facade tipis di atas scanWorkspaceAsync dari @tailwind-styled/scanner.\r\n *\r\n * @example\r\n * const result = await scanWorkspace({ root: \"./src\" })\r\n * console.log(result.uniqueClasses)\r\n */\r\nexport async function scanWorkspace(\r\n opts: { root?: string; extensions?: string[]; ignoreDirectories?: string[] } = {}\r\n): Promise<ScanWorkspaceResult> {\r\n const root = path.resolve(opts.root ?? process.cwd())\r\n return scanWorkspaceAsync(root, {\r\n includeExtensions: opts.extensions,\r\n ignoreDirectories: opts.ignoreDirectories,\r\n })\r\n}\r\n\r\n/**\r\n * Analyze workspace — scan + analyze classes.\r\n * Facade di atas runWorkspaceAnalysis.\r\n *\r\n * @example\r\n * const report = await analyzeWorkspace({ root: \"./src\" })\r\n * console.log(report.topClasses)\r\n */\r\nexport async function analyzeWorkspace(\r\n opts: { root?: string; top?: number } = {}\r\n): Promise<Awaited<ReturnType<typeof runWorkspaceAnalysis>>> {\r\n const root = path.resolve(opts.root ?? process.cwd())\r\n return runWorkspaceAnalysis(root, {\r\n classStats: { top: opts.top ?? 20 },\r\n })\r\n}\r\n\r\n/**\r\n * Generate safelist dari scan result.\r\n * Berguna untuk Tailwind config safelist generation.\r\n *\r\n * @example\r\n * const safelist = await generateSafelist({ root: \"./src\" })\r\n * // Pakai di tailwind.config.ts: { safelist }\r\n */\r\nexport async function generateSafelist(\r\n opts: { root?: string } = {}\r\n): Promise<string[]> {\r\n const scan = await scanWorkspace(opts)\r\n return scan.uniqueClasses\r\n}\r\n\r\n/**\r\n * Build CSS dari scan result.\r\n * One-shot build tanpa watch mode.\r\n *\r\n * @example\r\n * const result = await build({ root: \"./src\" })\r\n * fs.writeFileSync(\"dist/tailwind.css\", result.css)\r\n */\r\nexport async function build(\r\n opts: EngineOptions = {}\r\n): Promise<{ css: string; classes: string[]; totalFiles: number }> {\r\n const engine = await createEngine(opts)\r\n const result = await engine.build()\r\n return {\r\n css: result.css,\r\n classes: result.mergedClassList.split(/\\s+/).filter(Boolean),\r\n totalFiles: result.scan.totalFiles,\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Shared trace/inspection surface — reusable across CLI, devtools, dashboard\r\n// (dari monorepo checklist: \"Tambahkan mode trace yang reusable\")\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type { TraceResult, RuleTrace, ConflictTrace, VariantTrace, FinalStyleProperty } from \"./trace\"\r\nexport { trace, buildProvenanceChain } from \"./trace\"\r\n\r\n/**\r\n * High-level trace API — satu entry point untuk semua tooling.\r\n *\r\n * Dipakai oleh:\r\n * - CLI: `tw trace <class>`\r\n * - DevTools: TracePanel fetch\r\n * - Dashboard: trace endpoint\r\n *\r\n * @example\r\n * const result = await traceClass(\"flex\", scanResult, cssString)\r\n * console.log(result.finalStyle) // [{ property: \"display\", value: \"flex\" }]\r\n */\r\nexport async function traceClass(\r\n className: string,\r\n scanResult: ScanWorkspaceResult,\r\n css: string\r\n): Promise<import(\"./trace\").TraceResult | null> {\r\n if (!className || !css) return null\r\n\r\n try {\r\n const { parseCssToIr } = await import(\"./cssToIr\")\r\n const { CascadeResolver } = await import(\"./resolver\")\r\n const { trace } = await import(\"./trace\")\r\n\r\n const { rules, classToRuleIds } = parseCssToIr(css)\r\n const resolver = new CascadeResolver()\r\n resolver.addRules(rules)\r\n for (const [registeredClassName, ruleIds] of classToRuleIds) {\r\n resolver.registerClass(registeredClassName, ruleIds)\r\n }\r\n\r\n return trace(className, resolver)\r\n } catch (traceErr) {\r\n log.debug(`traceClass(\"${className}\"): ${traceErr instanceof Error ? traceErr.message : String(traceErr)}`)\r\n return null\r\n }\r\n}\r\n\r\n/**\r\n * Trace multiple classes at once — for batch inspection.\r\n */\r\nexport async function traceClasses(\r\n classNames: string[],\r\n scanResult: ScanWorkspaceResult,\r\n css: string\r\n): Promise<Map<string, import(\"./trace\").TraceResult>> {\r\n const results = new Map<string, import(\"./trace\").TraceResult>()\r\n\r\n for (const cls of classNames) {\r\n const result = await traceClass(cls, scanResult, css)\r\n if (result) results.set(cls, result)\r\n }\r\n\r\n return results\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Surface Inspection — consistent API untuk CLI, devtools, dashboard\r\n// (dari monorepo checklist: \"Tambahkan surface inspection yang konsisten\")\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface InspectionReport {\r\n className: string\r\n /** CSS rules yang dihasilkan */\r\n css: string\r\n /** Properties yang di-set */\r\n properties: Array<{ property: string; value: string }>\r\n /** Classes yang berkonflik dengan ini */\r\n conflicts: string[]\r\n /** Files yang menggunakan class ini */\r\n usedIn: string[]\r\n /** Risk level untuk removal */\r\n risk: \"low\" | \"medium\" | \"high\"\r\n /** Estimated bundle contribution */\r\n bundleBytes: number\r\n}\r\n\r\n/**\r\n * Inspect a single class — gabungan trace + impact + usage.\r\n * Reusable surface untuk CLI (`tw why`), DevTools panel, dashboard endpoint.\r\n *\r\n * @example\r\n * const report = await inspectClass(\"flex\", scanResult, cssString)\r\n * console.log(report.properties) // [{ property: \"display\", value: \"flex\" }]\r\n * console.log(report.usedIn) // [\"src/Button.tsx\", \"src/Card.tsx\"]\r\n * console.log(report.risk) // \"low\"\r\n */\r\nexport async function inspectClass(\r\n className: string,\r\n scanResult: ScanWorkspaceResult,\r\n css = \"\"\r\n): Promise<InspectionReport> {\r\n const normalizedClass = className.startsWith(\".\") ? className.slice(1) : className\r\n\r\n // Usage: files yang menggunakan class ini\r\n const usedIn = (scanResult.files ?? [])\r\n .filter(f => f.classes?.includes(normalizedClass))\r\n .map(f => f.file)\r\n const usedInLocations = usedIn.map((file) => ({ file, line: 1, column: 1 }))\r\n\r\n // Trace: get CSS properties\r\n const traceResult = await traceClass(normalizedClass, scanResult, css)\r\n const properties = traceResult?.finalStyle ?? []\r\n\r\n // Impact: risk level\r\n const tracker = new ImpactTracker()\r\n const dummyBundle = {\r\n className: normalizedClass,\r\n totalUsage: usedIn.length,\r\n files: usedInLocations,\r\n bundleSizeBytes: 0,\r\n variantChains: [],\r\n isDeadCode: usedIn.length === 0,\r\n dependencies: [],\r\n }\r\n const impact = tracker.calculateImpact(normalizedClass, dummyBundle, scanResult)\r\n\r\n return {\r\n className: normalizedClass,\r\n css,\r\n properties: properties.map(p => ({ property: p.property, value: p.value })),\r\n conflicts: [], // populated by trace conflicts if available\r\n usedIn,\r\n risk: impact.riskLevel,\r\n bundleBytes: impact.bundleSizeBytes,\r\n }\r\n}\r\n","import fs from \"node:fs\"\r\nimport path from \"node:path\"\r\n\r\nimport {\r\n isScannableFile,\r\n type ScanWorkspaceOptions,\r\n type ScanWorkspaceResult,\r\n scanFile,\r\n} from \"@tailwind-styled/scanner\"\r\nimport { createLogger } from \"@tailwind-styled/shared\"\r\n\r\nimport { getNativeEngineBinding } from \"./native-bridge\"\r\n\r\nconst DEFAULT_EXTENSIONS = [\".js\", \".jsx\", \".ts\", \".tsx\", \".mjs\", \".cjs\"]\r\nconst log = createLogger(\"engine:incremental\")\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Internal helpers — native-first, JS fallback\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Rebuild ScanWorkspaceResult dari Map file → entry.\r\n *\r\n * Native: satu pass Rust HashSet dedup + sort_unstable.\r\n * JS fallback: Array.from(new Set(...)) dengan multiple allocations.\r\n */\r\nfunction rebuildWorkspaceResult(\r\n byFile: Map<string, ScanWorkspaceResult[\"files\"][number]>\r\n): ScanWorkspaceResult {\r\n const files = Array.from(byFile.values())\r\n const native = getNativeEngineBinding()\r\n\r\n if (native?.rebuildWorkspaceResult) {\r\n const result = native.rebuildWorkspaceResult(files)\r\n return {\r\n files: result.files,\r\n totalFiles: result.totalFiles,\r\n uniqueClasses: result.uniqueClasses,\r\n }\r\n }\r\n\r\n throw new Error(\"FATAL: Native binding 'rebuildWorkspaceResult' is required but not available.\")\r\n}\r\n\r\n/**\r\n * Apply incremental class diff: (existing ∪ added) ∖ removed.\r\n *\r\n * Native: Rust HashSet O(n+m) tanpa GC pause.\r\n * JS fallback: JS Set dengan intermediate allocations.\r\n */\r\nfunction applyClassDiff(existing: string[], added: string[], removed: string[]): string[] {\r\n const native = getNativeEngineBinding()\r\n\r\n if (native?.applyClassDiff) {\r\n return native.applyClassDiff(existing, added, removed)\r\n }\r\n\r\n throw new Error(\"FATAL: Native binding 'applyClassDiff' is required but not available.\")\r\n}\r\n\r\n/**\r\n * Cek apakah dua class array berisi elemen identik (order-independent).\r\n *\r\n * Native: single-pass HashSet lookup O(n+m).\r\n * JS fallback: buat Set(b) lalu iterate a.\r\n */\r\nfunction areClassSetsEqual(a: string[], b: string[]): boolean {\r\n const native = getNativeEngineBinding()\r\n\r\n if (native?.areClassSetsEqual) {\r\n return native.areClassSetsEqual(a, b)\r\n }\r\n\r\n throw new Error(\"FATAL: Native binding 'areClassSetsEqual' is required but not available.\")\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Public API (tidak berubah dari sebelumnya)\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface WorkspaceDiff {\r\n addedClasses: string[]\r\n removedClasses: string[]\r\n changedFiles: string[]\r\n unchangedFiles: number\r\n}\r\n\r\n/**\r\n * Diff dua ScanWorkspaceResult menggunakan Rust computeIncrementalDiff.\r\n */\r\nexport function diffWorkspaceResults(\r\n previous: ScanWorkspaceResult,\r\n current: ScanWorkspaceResult\r\n): WorkspaceDiff {\r\n const native = getNativeEngineBinding()\r\n if (!native?.computeIncrementalDiff) {\r\n throw new Error(\"FATAL: Native binding 'computeIncrementalDiff' is required but not available.\")\r\n }\r\n\r\n const result = native.computeIncrementalDiff(\r\n JSON.stringify(previous.files),\r\n JSON.stringify(current.files)\r\n ) as WorkspaceDiff | null\r\n\r\n if (!result) {\r\n return { addedClasses: [], removedClasses: [], changedFiles: [], unchangedFiles: 0 }\r\n }\r\n\r\n log.debug(\r\n `native diff workspace: +${result.addedClasses.length} classes, -${result.removedClasses.length} classes, ${result.changedFiles.length} files changed`\r\n )\r\n\r\n return result\r\n}\r\n\r\n/**\r\n * Apply an incremental file-change event to an existing scan result.\r\n *\r\n * Semua tiga helper internal sekarang native-first:\r\n * rebuildWorkspaceResult → Rust rebuild_workspace_result\r\n * applyClassDiff → Rust apply_class_diff\r\n * areClassSetsEqual → Rust are_class_sets_equal\r\n */\r\nexport function applyIncrementalChange(\r\n previous: ScanWorkspaceResult,\r\n filePath: string,\r\n type: \"change\" | \"unlink\",\r\n scanner?: ScanWorkspaceOptions\r\n): ScanWorkspaceResult {\r\n const includeExtensions = scanner?.includeExtensions ?? DEFAULT_EXTENSIONS\r\n if (!isScannableFile(filePath, includeExtensions)) return previous\r\n\r\n const byFile = new Map(previous.files.map((f) => [path.resolve(f.file), f]))\r\n const normalizedPath = path.resolve(filePath)\r\n\r\n const native = getNativeEngineBinding()\r\n if (!native?.processFileChange) {\r\n throw new Error(\r\n \"FATAL: Native binding 'processFileChange' is required but not available.\\n\" +\r\n \"This package requires native Rust bindings.\\n\\n\" +\r\n \"Resolution steps:\\n\" +\r\n \"1. Build the native Rust module: npm run build:rust\"\r\n )\r\n }\r\n\r\n if (type === \"unlink\") {\r\n const existing = byFile.get(normalizedPath)\r\n log.debug(`native unlink ${normalizedPath}`)\r\n native.processFileChange(normalizedPath, existing?.classes ?? [], null)\r\n byFile.delete(normalizedPath)\r\n return rebuildWorkspaceResult(byFile)\r\n }\r\n\r\n log.debug(`native change ${normalizedPath}`)\r\n const scanned = scanFile(normalizedPath)\r\n const content = fs.readFileSync(normalizedPath, \"utf8\")\r\n const diff = native.processFileChange(normalizedPath, scanned.classes, content)\r\n const existing = byFile.get(normalizedPath)\r\n\r\n if (diff && existing) {\r\n log.debug(`native diff ${normalizedPath} +${diff.added.length} -${diff.removed.length}`)\r\n const diffApplied = applyClassDiff(existing.classes, diff.added, diff.removed)\r\n const classes = areClassSetsEqual(diffApplied, scanned.classes)\r\n ? diffApplied\r\n : scanned.classes\r\n byFile.set(normalizedPath, { file: normalizedPath, classes })\r\n } else {\r\n log.debug(`native diff cold-sync ${normalizedPath}`)\r\n byFile.set(normalizedPath, { file: normalizedPath, classes: scanned.classes })\r\n }\r\n\r\n return rebuildWorkspaceResult(byFile)\r\n}","export interface EngineMetricsSnapshot {\r\n eventsReceived: number\r\n eventsProcessed: number\r\n batchesProcessed: number\r\n incrementalUpdates: number\r\n fullRescans: number\r\n skippedLargeFiles: number\r\n queueMaxSize: number\r\n lastBuildMs: number\r\n avgBuildMs: number\r\n}\r\n\r\nexport class EngineMetricsCollector {\r\n private eventsReceived = 0\r\n private eventsProcessed = 0\r\n private batchesProcessed = 0\r\n private incrementalUpdates = 0\r\n private fullRescans = 0\r\n private skippedLargeFiles = 0\r\n private queueMaxSize = 0\r\n private lastBuildMs = 0\r\n private totalBuildMs = 0\r\n\r\n markEventReceived(queueSize: number): void {\r\n this.eventsReceived += 1\r\n if (queueSize > this.queueMaxSize) this.queueMaxSize = queueSize\r\n }\r\n\r\n markBatchProcessed(batchSize: number): void {\r\n this.batchesProcessed += 1\r\n this.eventsProcessed += batchSize\r\n }\r\n\r\n markIncremental(): void {\r\n this.incrementalUpdates += 1\r\n }\r\n\r\n markFullRescan(): void {\r\n this.fullRescans += 1\r\n }\r\n\r\n markSkippedLargeFile(): void {\r\n this.skippedLargeFiles += 1\r\n }\r\n\r\n markBuildDuration(ms: number): void {\r\n this.lastBuildMs = ms\r\n this.totalBuildMs += ms\r\n }\r\n\r\n snapshot(): EngineMetricsSnapshot {\r\n const avgBuildMs = this.batchesProcessed > 0 ? this.totalBuildMs / this.batchesProcessed : 0\r\n return {\r\n eventsReceived: this.eventsReceived,\r\n eventsProcessed: this.eventsProcessed,\r\n batchesProcessed: this.batchesProcessed,\r\n incrementalUpdates: this.incrementalUpdates,\r\n fullRescans: this.fullRescans,\r\n skippedLargeFiles: this.skippedLargeFiles,\r\n queueMaxSize: this.queueMaxSize,\r\n lastBuildMs: this.lastBuildMs,\r\n avgBuildMs,\r\n }\r\n }\r\n}\r\n","/**\r\n * tailwind-styled-v4 — Metrics Writer\r\n *\r\n * Menulis metrics dari engine ke file `.tw-cache/metrics.json`\r\n * sehingga dashboard server bisa membaca secara real-time.\r\n *\r\n * Dipanggil dari engine setelah setiap build selesai.\r\n */\r\n\r\nimport fs from \"node:fs\"\r\nimport path from \"node:path\"\r\nimport { performance } from \"node:perf_hooks\"\r\nimport { createLogger } from \"@tailwind-styled/shared\"\r\n\r\nconst _log = createLogger(\"tw:metrics\")\r\n\r\nexport interface BuildMetrics {\r\n buildMs?: number\r\n scanMs?: number\r\n analyzeMs?: number\r\n compileMs?: number\r\n classCount?: number\r\n fileCount?: number\r\n cssBytes?: number\r\n packageCount?: number\r\n memoryMb?: { rss: number; heapUsed: number; heapTotal: number }\r\n mode?: \"jit\" | \"build\" | \"watch\" | \"idle\" | \"error\"\r\n route?: string\r\n error?: string\r\n lastEventType?: string\r\n eventsReceived?: number\r\n eventsProcessed?: number\r\n batchesProcessed?: number\r\n incrementalUpdates?: number\r\n fullRescans?: number\r\n skippedLargeFiles?: number\r\n queueMaxSize?: number\r\n lastBuildMs?: number\r\n avgBuildMs?: number\r\n generatedAt?: string\r\n}\r\n\r\nconst METRICS_FILE_NAME = \"metrics.json\"\r\nconst CACHE_DIR = \".tw-cache\"\r\n\r\n/**\r\n * Tulis metrics ke file untuk dibaca oleh dashboard server.\r\n * Non-blocking — error diabaikan.\r\n */\r\nexport function writeMetrics(metrics: BuildMetrics, cwd = process.cwd()): void {\r\n try {\r\n const cacheDir = path.join(cwd, CACHE_DIR)\r\n fs.mkdirSync(cacheDir, { recursive: true })\r\n\r\n const mem = process.memoryUsage()\r\n const data: BuildMetrics = {\r\n ...metrics,\r\n memoryMb: {\r\n rss: Math.round(mem.rss / 1024 / 1024),\r\n heapUsed: Math.round(mem.heapUsed / 1024 / 1024),\r\n heapTotal: Math.round(mem.heapTotal / 1024 / 1024),\r\n },\r\n generatedAt: new Date().toISOString(),\r\n }\r\n\r\n fs.writeFileSync(path.join(cacheDir, METRICS_FILE_NAME), JSON.stringify(data, null, 2))\r\n } catch {\r\n // Non-critical — dashboard adalah opsional\r\n }\r\n}\r\n\r\n/**\r\n * Higher-order wrapper — ukur durasi fungsi dan tulis metrics.\r\n *\r\n * @example\r\n * const result = await withMetrics('build', async () => {\r\n * return await engine.build()\r\n * }, { classCount: result.scan.uniqueClasses.length })\r\n */\r\nexport async function withMetrics<T>(\r\n mode: BuildMetrics[\"mode\"],\r\n fn: () => Promise<T>,\r\n extraMetrics: Partial<BuildMetrics> = {},\r\n cwd = process.cwd()\r\n): Promise<T> {\r\n const start = performance.now()\r\n const result = await fn()\r\n const elapsed = Math.round(performance.now() - start)\r\n\r\n writeMetrics({ mode, buildMs: elapsed, ...extraMetrics }, cwd)\r\n\r\n return result\r\n}\r\n\r\n/**\r\n * Buat timer untuk mengukur scan time.\r\n *\r\n * @example\r\n * const timer = startScanTimer()\r\n * const scan = scanWorkspace(root)\r\n * writeMetrics({ scanMs: timer.elapsed(), classCount: scan.uniqueClasses.length })\r\n */\r\nexport function startTimer() {\r\n const start = performance.now()\r\n return {\r\n elapsed: () => Math.round(performance.now() - start),\r\n }\r\n}\r\n\r\nexport default { writeMetrics, withMetrics, startTimer }\r\n","import type { ScanWorkspaceResult } from \"@tailwind-styled/scanner\"\r\nimport type { BuildResult } from \"./index\"\r\n\r\nexport interface EnginePluginContext {\r\n root: string\r\n timestamp: number\r\n}\r\n\r\nexport interface EngineWatchContext {\r\n root: string\r\n timestamp: number\r\n}\r\n\r\nexport interface EnginePlugin {\r\n name: string\r\n beforeScan?(context: EnginePluginContext): void | Promise<void>\r\n afterScan?(\r\n scan: ScanWorkspaceResult,\r\n context: EnginePluginContext\r\n ): ScanWorkspaceResult | undefined | Promise<ScanWorkspaceResult | undefined>\r\n transformClasses?(\r\n classes: string[],\r\n context: EnginePluginContext\r\n ): string[] | undefined | Promise<string[] | undefined>\r\n beforeBuild?(scan: ScanWorkspaceResult, context: EnginePluginContext): void | Promise<void>\r\n afterBuild?(\r\n result: BuildResult,\r\n context: EnginePluginContext\r\n ): BuildResult | undefined | Promise<BuildResult | undefined>\r\n onError?(error: Error, context: EnginePluginContext): void | Promise<void>\r\n beforeWatch?(context: EngineWatchContext): void | Promise<void>\r\n afterWatch?(context: EngineWatchContext): void | Promise<void>\r\n}\r\n\r\nexport async function runBeforeScan(\r\n plugins: EnginePlugin[],\r\n context: EnginePluginContext\r\n): Promise<void> {\r\n for (const plugin of plugins) {\r\n await plugin.beforeScan?.(context)\r\n }\r\n}\r\n\r\nexport async function runAfterScan(\r\n plugins: EnginePlugin[],\r\n scan: ScanWorkspaceResult,\r\n context: EnginePluginContext\r\n): Promise<ScanWorkspaceResult> {\r\n return await plugins.reduce(async (currentPromise, plugin) => {\r\n const current = await currentPromise\r\n const next = await plugin.afterScan?.(current, context)\r\n return next ?? current\r\n }, Promise.resolve(scan))\r\n}\r\n\r\nexport async function runTransformClasses(\r\n plugins: EnginePlugin[],\r\n classes: string[],\r\n context: EnginePluginContext\r\n): Promise<string[]> {\r\n return await plugins.reduce(async (currentPromise, plugin) => {\r\n const current = await currentPromise\r\n const next = await plugin.transformClasses?.(current, context)\r\n return next ?? current\r\n }, Promise.resolve(classes))\r\n}\r\n\r\nexport async function runBeforeBuild(\r\n plugins: EnginePlugin[],\r\n scan: ScanWorkspaceResult,\r\n context: EnginePluginContext\r\n): Promise<void> {\r\n for (const plugin of plugins) {\r\n await plugin.beforeBuild?.(scan, context)\r\n }\r\n}\r\n\r\nexport async function runAfterBuild(\r\n plugins: EnginePlugin[],\r\n result: BuildResult,\r\n context: EnginePluginContext\r\n): Promise<BuildResult> {\r\n return plugins.reduce(async (acc, plugin) => {\r\n const current = await acc\r\n const next = await plugin.afterBuild?.(current, context)\r\n return next !== undefined ? next : current\r\n }, Promise.resolve(result))\r\n}\r\n\r\nexport async function runOnError(\r\n plugins: EnginePlugin[],\r\n error: Error,\r\n context: EnginePluginContext\r\n): Promise<void> {\r\n for (const plugin of plugins) {\r\n await plugin.onError?.(error, context)\r\n }\r\n}\r\n\r\nexport async function runBeforeWatch(\r\n plugins: EnginePlugin[],\r\n context: EngineWatchContext\r\n): Promise<void> {\r\n for (const plugin of plugins) {\r\n await plugin.beforeWatch?.(context)\r\n }\r\n}\r\n\r\nexport async function runAfterWatch(\r\n plugins: EnginePlugin[],\r\n context: EngineWatchContext\r\n): Promise<void> {\r\n for (const plugin of plugins) {\r\n await plugin.afterWatch?.(context)\r\n }\r\n}\r\n","import { z } from \"zod\"\r\nimport type { EnginePlugin } from \"./plugin-api\"\r\n\r\nconst formatIssues = (error: z.ZodError): string =>\r\n error.issues\r\n .map((issue) => {\r\n const p = issue.path.length > 0 ? issue.path.join(\".\") : \"<root>\"\r\n return `${p}: ${issue.message}`\r\n })\r\n .join(\"; \")\r\n\r\nconst parseWithSchema = <T>(schema: z.ZodType<T>, data: unknown, label: string): T => {\r\n const parsed = schema.safeParse(data)\r\n if (parsed.success) return parsed.data\r\n throw new TypeError(`${label}: ${formatIssues(parsed.error)}`)\r\n}\r\n\r\nexport const EngineOptionsSchema = z.object({\r\n root: z.string().optional(),\r\n scanner: z\r\n .object({\r\n includeExtensions: z.array(z.string()).optional(),\r\n ignoreDirectories: z.array(z.string()).optional(),\r\n useCache: z.boolean().optional(),\r\n cacheDir: z.string().min(1).optional(),\r\n smartInvalidation: z.boolean().optional(),\r\n })\r\n .optional(),\r\n compileCss: z.boolean().optional(),\r\n tailwindConfigPath: z.string().optional(),\r\n analyze: z.boolean().optional(),\r\n plugins: z.array(z.custom<EnginePlugin>()).optional(),\r\n})\r\n\r\nexport type EngineOptionsInput = z.infer<typeof EngineOptionsSchema>\r\n\r\nexport const EngineWatchOptionsSchema = z.object({\r\n debounceMs: z.number().int().min(0).optional(),\r\n maxEventsPerFlush: z.number().int().min(1).optional(),\r\n largeFileThreshold: z.number().int().min(0).optional(),\r\n})\r\n\r\nexport type EngineWatchOptionsInput = z.infer<typeof EngineWatchOptionsSchema>\r\n\r\nexport const BuildResultSchema = z.object({\r\n scan: z.object({\r\n files: z.array(\r\n z.object({ file: z.string(), classes: z.array(z.string()), hash: z.string().optional() })\r\n ),\r\n totalFiles: z.number().int().min(0),\r\n uniqueClasses: z.array(z.string()),\r\n }),\r\n mergedClassList: z.string(),\r\n css: z.string(),\r\n analysis: z\r\n .object({\r\n unusedClasses: z.array(z.string()),\r\n classConflicts: z.array(\r\n z.object({\r\n className: z.string(),\r\n files: z.array(z.string()),\r\n classes: z.array(z.string()).optional(),\r\n message: z.string().optional(),\r\n })\r\n ),\r\n classUsage: z.record(z.string(), z.number()),\r\n })\r\n .optional(),\r\n})\r\n\r\nexport type BuildResultInput = z.infer<typeof BuildResultSchema>\r\n\r\nexport const parseEngineOptions = (options: unknown) =>\r\n parseWithSchema(EngineOptionsSchema, options ?? {}, \"engine options are invalid\")\r\n\r\nexport const parseEngineWatchOptions = (options: unknown) =>\r\n parseWithSchema(EngineWatchOptionsSchema, options ?? {}, \"engine watch options are invalid\")\r\n","/**\r\n * watch.ts — File system watcher for tailwind-styled-v4.\r\n *\r\n * Native-only: uses Rust `notify`-based watcher via NAPI\r\n * (`start_watch` / `poll_watch_events` / `stop_watch` from watch_api.rs).\r\n *\r\n * Polling interval: 200ms (configurable via `pollIntervalMs`).\r\n */\r\n\r\n// Lazy-load native binding\r\nlet _native: {\r\n startWatch?: (rootDir: string) => { status: string; handleId: number }\r\n pollWatchEvents?: (handleId: number) => Array<{ kind: string; path: string }>\r\n stopWatch?: (handleId: number) => boolean\r\n} | null = null\r\n\r\nfunction getNativeWatcher() {\r\n if (_native !== null) return _native\r\n try {\r\n const { resolveNativeBinary } = require(\"@tailwind-styled/shared\")\r\n const { path: binPath } = resolveNativeBinary(__dirname)\r\n if (binPath) {\r\n _native = require(binPath)\r\n }\r\n } catch {\r\n _native = {}\r\n }\r\n return _native\r\n}\r\n\r\nexport interface WatcherOptions {\r\n /** Directories to ignore (currently not enforced by native watcher, kept for API compatibility). */\r\n ignoreDirectories?: string[]\r\n /** Delay before emitting change event to reduce noisy bursts (applied in Rust layer). */\r\n debounceMs?: number\r\n /** Polling interval in ms for the Rust native watcher (default: 200). */\r\n pollIntervalMs?: number\r\n onError?: (error: Error, directory: string) => void\r\n}\r\n\r\nexport interface WatcherEvent {\r\n type: \"change\" | \"unlink\"\r\n filePath: string\r\n}\r\n\r\nexport interface WorkspaceWatcher {\r\n close(): void\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Native Rust watcher (notify v6)\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction watchWorkspaceNative(\r\n rootDir: string,\r\n onEvent: (event: WatcherEvent) => void,\r\n options: WatcherOptions\r\n): WorkspaceWatcher | null {\r\n const native = getNativeWatcher()\r\n if (!native?.startWatch || !native?.pollWatchEvents || !native?.stopWatch) {\r\n return null\r\n }\r\n\r\n const result = native.startWatch(rootDir)\r\n if (!result || result.status !== \"ok\") {\r\n return null\r\n }\r\n\r\n const { handleId } = result\r\n const pollMs = options.pollIntervalMs ?? 200\r\n const pending = new Map<string, { event: WatcherEvent; timer: NodeJS.Timeout }>()\r\n const debounceMs = options.debounceMs ?? 100\r\n\r\n function enqueue(event: WatcherEvent) {\r\n const key = `${event.type}:${event.filePath}`\r\n const existing = pending.get(key)\r\n if (existing) clearTimeout(existing.timer)\r\n const timer = setTimeout(() => {\r\n pending.delete(key)\r\n onEvent(event)\r\n }, debounceMs)\r\n pending.set(key, { event, timer })\r\n }\r\n\r\n const intervalId = setInterval(() => {\r\n try {\r\n const events = native.pollWatchEvents!(handleId)\r\n for (const ev of events) {\r\n const type: WatcherEvent[\"type\"] = ev.kind === \"unlink\" ? \"unlink\" : \"change\"\r\n enqueue({ type, filePath: ev.path })\r\n }\r\n } catch (err) {\r\n options.onError?.(\r\n err instanceof Error ? err : new Error(String(err)),\r\n rootDir\r\n )\r\n }\r\n }, pollMs)\r\n\r\n return {\r\n close() {\r\n clearInterval(intervalId)\r\n for (const { timer } of pending.values()) clearTimeout(timer)\r\n pending.clear()\r\n try {\r\n native.stopWatch!(handleId)\r\n } catch {\r\n // ignore\r\n }\r\n },\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Public API — native-only\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * watchWorkspace — watches `rootDir` recursively for file changes.\r\n *\r\n * Requires native Rust watcher. Throws if native binding unavailable.\r\n */\r\nexport function watchWorkspace(\r\n rootDir: string,\r\n onEvent: (event: WatcherEvent) => void,\r\n options: WatcherOptions = {}\r\n): WorkspaceWatcher {\r\n const nativeWatcher = watchWorkspaceNative(rootDir, onEvent, options)\r\n if (!nativeWatcher) {\r\n throw new Error(\"FATAL: Native watcher is required but not available. Build the native module: npm run build:rust\")\r\n }\r\n return nativeWatcher\r\n}"]}
|