{"version":3,"sources":["../node_modules/tsup/assets/esm_shims.js","../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","../src/umbrella/analyzer.ts","../packages/domain/analyzer/src/index.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/analyzer/src/classToCss.ts"],"sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","import { createHash } from \"node:crypto\"\nimport fs from \"node:fs\"\nimport path from \"node:path\"\nimport { fileURLToPath } from \"node:url\"\nimport { createRequire } from \"node:module\"\n\n// Native-only: Node.js is always available. No browser fallback.\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type TokenMap = Record<string, string>\n\nexport type VariantValue = string | number | boolean | undefined\n\nexport type VariantProps = Record<string, VariantValue>\n\nexport type HtmlTagName = keyof HTMLElementTagNameMap\n\nexport type CompoundCondition = Record<string, string | number | boolean>\n\nexport type VariantMatrix = Record<string, Array<string | number | boolean>>\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Logging\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface Logger {\n  warn(...args: unknown[]): void\n  debug(...args: unknown[]): void\n  error(...args: unknown[]): void\n  log(...args: unknown[]): void\n}\n\nexport function createLogger(namespace: string): Logger {\n  const prefix = `[${namespace}]`\n  return {\n    warn(...args: unknown[]) {\n      process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\n    },\n    debug(...args: unknown[]) {\n      process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\n    },\n    error(...args: unknown[]) {\n      process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\n    },\n    log(...args: unknown[]) {\n      process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\n    },\n  }\n}\n\nexport function createDebugLogger(namespace: string, label?: string): (msg: string) => void {\n  const prefix = label ? `[${namespace}:${label}]` : `[${namespace}]`\n  return (msg: string) => {\n    if (process.env.DEBUG?.includes(namespace) || process.env.TW_DEBUG) {\n      console.debug(prefix, msg)\n    }\n  }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Error handling\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type ErrorSource = \"rust\" | \"validation\" | \"compile\" | \"io\" | \"config\" | \"unknown\"\n\ntype ZodLikeIssue = {\n  path?: readonly PropertyKey[]\n  message?: string\n}\n\nfunction formatIssuePath(path?: readonly PropertyKey[]): string {\n  if (!path || path.length === 0) return \"(root)\"\n  return path\n    .map((segment) =>\n      typeof segment === \"symbol\" ? segment.description ?? segment.toString() : String(segment)\n    )\n    .join(\".\")\n}\n\nexport class TwError extends Error {\n  /** @deprecated Gunakan source */\n  public readonly domain: string\n  public readonly source: ErrorSource\n  public readonly code: string\n  public readonly originalCause?: unknown\n\n  constructor(domainOrSource: string, code: string, message: string, cause?: unknown) {\n    super(message)\n    this.name = \"TwError\"\n    this.domain = domainOrSource\n    this.source = domainOrSource as ErrorSource\n    this.code = code\n    this.originalCause = cause\n    if (Error.captureStackTrace) Error.captureStackTrace(this, TwError)\n  }\n\n  static fromIo(code: string, message: string): TwError {\n    return new TwError(\"io\", code, message)\n  }\n\n  static fromCompile(code: string, message: string): TwError {\n    return new TwError(\"compile\", code, message)\n  }\n\n  static fromRust(err: { code?: string; message?: string } | Error | unknown): TwError {\n    if (err instanceof TwError) return err\n    if (err instanceof Error) return new TwError(\"rust\", \"RUST_ERROR\", err.message, err)\n    if (err && typeof err === \"object\") {\n      const e = err as { code?: string; message?: string }\n      return new TwError(\"rust\", e.code ?? \"RUST_ERROR\", e.message ?? String(err), err)\n    }\n    return new TwError(\"rust\", \"RUST_ERROR\", String(err), err)\n  }\n\n  /** Buat TwError dari ZodError — dukung shape Zod v3 (`errors`) dan v4 (`issues`). */\n  static fromZod(err: { issues?: ZodLikeIssue[]; errors?: ZodLikeIssue[] }): TwError {\n    const first = err.issues?.[0] ?? err.errors?.[0]\n    const path = formatIssuePath(first?.path)\n    const message = first ? `${path}: ${first.message}` : \"Schema validation failed\"\n    return new TwError(\"validation\", \"SCHEMA_VALIDATION_FAILED\", message, err)\n  }\n\n  static wrap(source: string, code: string, err: unknown): TwError {\n    if (err instanceof TwError) return err\n    if (err instanceof Error) return new TwError(source, code, err.message, err)\n    return new TwError(source, code, String(err), err)\n  }\n\n  override toString(): string {\n    return `TwError [${this.source}:${this.code}] ${this.message}`\n  }\n\n  toJSON(): { name: string; source: string; code: string; message: string } {\n    return { name: this.name, source: this.source, code: this.code, message: this.message }\n  }\n\n  toCliMessage(): string {\n    return `[${this.source.toUpperCase()}:${this.code}] ${this.message}`\n  }\n}\n\nexport function wrapUnknownError(domain: string, code: string, error: unknown): TwError {\n  return TwError.wrap(domain, code, error)\n}\n\nexport function isTwError(err: unknown): err is TwError {\n  return err instanceof TwError\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Native binding resolution\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface LoadNativeBindingOptions<T> {\n  runtimeDir: string\n  candidates: string[]\n  isValid: (module: unknown) => module is T\n  invalidExportMessage: string\n}\n\nexport interface LoadNativeBindingResult<T> {\n  binding: T | null\n  loadErrors: Array<{ path: string; message: string }>\n  loadedPath?: string\n}\n\nexport function loadNativeBinding<T>(options: LoadNativeBindingOptions<T>): LoadNativeBindingResult<T> {\n  const { runtimeDir, candidates, isValid } = options\n  const loadErrors: Array<{ path: string; message: string }> = []\n\n  for (const candidate of candidates) {\n    const candidatePath = path.resolve(runtimeDir, candidate)\n    try {\n      if (!fs.existsSync(candidatePath) && !fs.existsSync(candidatePath + \".node\")) {\n        continue\n      }\n      const mod = requireNativeModule(candidatePath)\n      if (mod && isValid(mod)) {\n        return { binding: mod, loadErrors, loadedPath: candidatePath }\n      }\n      loadErrors.push({ path: candidatePath, message: options.invalidExportMessage })\n    } catch (e) {\n      loadErrors.push({ path: candidatePath, message: e instanceof Error ? e.message : String(e) })\n    }\n  }\n\n  return { binding: null, loadErrors }\n}\n\nconst _require = createRequire(\n  typeof __filename !== \"undefined\"\n    ? `file://${__filename}`\n    : (import.meta.url ?? \"file://unknown\")\n)\n\nfunction requireNativeModule(p: string): unknown {\n  return _require(p)\n}\n\nexport interface ResolveCandidatesOptions {\n  runtimeDir?: string\n  envVarNames?: string[]\n  includeDefaultCandidates?: boolean\n  enforceNodeExtensionForEnvPath?: boolean\n  /** @deprecated — ignored, kept for backward compat */\n  packageName?: string\n}\n\nexport function resolveNativeBindingCandidates(options: ResolveCandidatesOptions): string[] {\n  const {\n    envVarNames = [\"TW_NATIVE_PATH\", \"TWS_NATIVE_PATH\"],\n    includeDefaultCandidates = true,\n    enforceNodeExtensionForEnvPath = false,\n  } = options\n  // Default ke cwd kalau runtimeDir tidak disediakan\n  const runtimeDir = options.runtimeDir || process.cwd()\n  const candidates: string[] = []\n\n  for (const envVar of envVarNames) {\n    const envPath = process.env[envVar]\n    if (envPath) {\n      candidates.push(enforceNodeExtensionForEnvPath && !envPath.endsWith(\".node\") ? envPath + \".node\" : envPath)\n    }\n  }\n\n  if (!includeDefaultCandidates) return candidates\n\n  if (fs.existsSync(runtimeDir)) {\n    try {\n      for (const entry of fs.readdirSync(runtimeDir)) {\n        if (entry.endsWith(\".node\")) candidates.push(entry)\n      }\n    } catch { /* ignore read errors */ }\n  }\n\n  const BINARY_NAMES = [\"tailwind-styled-native\", \"tailwind_styled_parser\"]\n  const napiPlatform = process.platform === \"linux\" && process.arch === \"x64\" ? \"linux-x64-gnu\"\n    : process.platform === \"linux\" && process.arch === \"arm64\" ? \"linux-arm64-gnu\"\n      : `${process.platform}-${process.arch}`\n\n  for (const bin of BINARY_NAMES) {\n    candidates.push(path.resolve(runtimeDir, `${bin}.node`))\n    candidates.push(path.resolve(runtimeDir, `${bin}.${napiPlatform}.node`))\n    // 1 level: dist/ → package-root/native/ (published npm package)\n    candidates.push(path.resolve(runtimeDir, \"..\", \"native\", `${bin}.node`))\n    candidates.push(path.resolve(runtimeDir, \"..\", \"native\", `${bin}.${napiPlatform}.node`))\n    // cwd fallback (user project root)\n    candidates.push(path.resolve(process.cwd(), \"native\", `${bin}.node`))\n    candidates.push(path.resolve(process.cwd(), \"native\", `${bin}.${napiPlatform}.node`))\n    // 4 level: dist/ → package/ → domain/ → packages/ → repo-root/ (monorepo dev)\n    candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", `${bin}.node`))\n    candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", `${bin}.${napiPlatform}.node`))\n    // 3 level fallback\n    candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"native\", `${bin}.node`))\n  }\n\n  return Array.from(new Set(candidates))\n}\n\nexport function resolveRuntimeDir(dir: string | undefined, importMetaUrl: string): string {\n  if (dir) return path.resolve(dir)\n  try {\n    return path.dirname(fileURLToPath(importMetaUrl))\n  } catch {\n    return process.cwd()\n  }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Hashing\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport function hashContent(content: string, algorithm: string = \"md5\", length?: number): string {\n  const hash = createHash(algorithm).update(content).digest(\"hex\")\n  return length ? hash.slice(0, length) : hash\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Error formatting\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport function formatErrorMessage(error: unknown): string {\n  if (error instanceof TwError) return error.toString()\n  if (error instanceof Error) return error.message\n  return String(error)\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// LRU Cache\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport class LRUCache<K, V> {\n  private capacity: number\n  private cache: Map<K, V>\n\n  constructor(capacity: number) {\n    this.capacity = capacity\n    this.cache = new Map()\n  }\n\n  get(key: K): V | undefined {\n    if (!this.cache.has(key)) return undefined\n    const value = this.cache.get(key)!\n    this.cache.delete(key)\n    this.cache.set(key, value)\n    return value\n  }\n\n  set(key: K, value: V): void {\n    if (this.cache.has(key)) {\n      this.cache.delete(key)\n    } else if (this.cache.size >= this.capacity) {\n      const firstKey = this.cache.keys().next().value\n      if (firstKey !== undefined) {\n        this.cache.delete(firstKey)\n      }\n    }\n    this.cache.set(key, value)\n  }\n\n  delete(key: K): boolean {\n    return this.cache.delete(key)\n  }\n\n  has(key: K): boolean {\n    return this.cache.has(key)\n  }\n\n  clear(): void {\n    this.cache.clear()\n  }\n\n  entries(): IterableIterator<[K, V]> {\n    return this.cache.entries()\n  }\n\n  get size(): number {\n    return this.cache.size\n  }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Trace Utilities\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type { TraceSnapshot, TraceSummary } from \"./trace\"\nexport {\n  getHealthColor,\n  getModeColor,\n  formatMemory,\n  formatDuration,\n  calculateHealth,\n  getBuildTimeColor,\n  getMemoryColor,\n  createTraceSnapshot,\n  getPipelinePercentages,\n} from \"./trace\"\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Performance Telemetry\n// ─────────────────────────────────────────────────────────────────────────────\n\n\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Error Codes\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type { ErrorCode } from \"./error-codes\"\nexport { ERROR_CODES, getSuggestion, formatErrorCode } from \"./error-codes\"\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Tailwind Compatibility\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type { TailwindInfo } from \"./compatibility\"\nexport { detectTailwind, assertTailwindV4, getTailwindVersion, isTailwindV4 } from \"./compatibility\"\n\n// ── Native binding schemas (Zod boundary validation)\nexport {\n  NativeScanFileSchema, NativeScanResultSchema,\n  NativeAnalyzerReportSchema, NativeTransformResultSchema,\n  NativeCssCompileResultSchema, NativeWatchResultSchema,\n  NativeCacheEntrySchema, NativeCacheReadResultSchema,\n  safeParseNative, parseNative,\n} from './native-schemas'\n\n// ── ESM-safe runtime helpers ──────────────────────────────────────────────\nexport {\n  createEsmRequire,\n  getDirname,\n  getFilename,\n  resolveFromRoot,\n  tryRequire,\n  resolveNativeNodePath,\n} from \"./esmHelpers\"\n\n// ── Performance telemetry ────────────────────────────────────────────────────\nexport {\n  TelemetryCollector,\n  getGlobalTelemetry,\n  resetGlobalTelemetry,\n  createBuildTimer,\n  type BuildTelemetry,\n  type TelemetrySummary,\n  type BuildPhases,\n} from \"./telemetry\"\n\n// ── Config/JSON schema validation ─────────────────────────────────────────────\nexport {\n  ScanCacheSchema,\n  ScanCacheClassEntrySchema,\n  TailwindConfigSchema,\n  RegistryPluginEntrySchema,\n  RegistryFileSchema,\n  PackageJsonSchema,\n  parseJsonWithSchema,\n  parseJsonFileWithSchema,\n  type ScanCache,\n  type ScanCacheClassEntry,\n  type TailwindConfig,\n  type RegistryPluginEntry,\n  type RegistryFile,\n  type PackageJson,\n} from \"./configSchemas\"\n\n// ── Worker/bootstrap path resolution ─────────────────────────────────────────\nexport {\n  resolveWorkerPath,\n  resolveLoaderPath,\n  type WorkerPathOptions,\n  type WorkerPathResult,\n} from \"./workerResolver\"\n\n// ── Codegen helpers ───────────────────────────────────────────────────────────\nexport {\n  generateComponentCode,\n  generateStorybookStory,\n  generateClassRenameCodemod,\n  generateBarrelFile,\n  type ComponentCodegenOptions,\n} from \"./codegen\"\n\n// ── Native binary resolution (QA #1) ─────────────────────────────────────────\nexport {\n  resolveNativeBinary,\n  formatNativeNotFoundError,\n  type NativeResolutionResult,\n} from \"./native-resolution\"\n\n// ── Shared observability contract ────────────────────────────────────────────\nexport {\n  createObservabilityClient,\n  type ClassInspection,\n  type ClassProperty,\n  type ClassUsageLocation,\n  type BuildTrace,\n  type BuildPhaseTrace,\n  type DashboardMetrics,\n  type DashboardSummary,\n  type ObservabilityClient,\n} from \"./observability\"\n\nexport {\n  TW_STATE_STATIC_FILENAME,\n  extractStaticStateCss,\n  appendStaticStateCssToSafelist,\n  type TwStateConfigEntry,\n  type StaticStateCssInput,\n  type GeneratedStateRule,\n  type StaticStateExtractionResult,\n} from \"./staticStateExtractor\"\nexport { setGlobalLogFile } from \"./logger\"","/**\n * Scanner — Rust native bridge\n *\n * Wraps the Rust scan_workspace and extract_classes_from_source functions.\n * Uses @tailwind-styled/shared for native binding resolution.\n */\nimport path from \"node:path\"\nimport { fileURLToPath } from \"node:url\"\nimport {\n  createDebugLogger,\n  loadNativeBinding,\n  resolveNativeBindingCandidates,\n  TwError,\n} from \"@tailwind-styled/shared\"\n\nconst log = createDebugLogger(\"scanner:native\")\n\n// ESM-compatible __dirname equivalent\nfunction getDirname(): string {\n  if (typeof __dirname !== \"undefined\") {\n    return __dirname\n  }\n  if (typeof import.meta !== \"undefined\" && import.meta.url) {\n    return path.dirname(fileURLToPath(import.meta.url))\n  }\n  return process.cwd()\n}\n\ninterface NativeScannerBinding {\n  scanWorkspace?: (\n    root: string,\n    extensions: string[] | null\n  ) => {\n    files: Array<{ file: string; classes: string[]; hash: string }>\n    totalFiles: number\n    uniqueClasses: string[] | null\n  } | null\n  extractClassesFromSource?: (source: string) => string[] | null\n  hashFileContent?: (content: string) => string | null\n  cacheRead?: (cachePath: string) => {\n    entries: Array<{\n      file: string\n      classes: string[]\n      hash: string\n      mtimeMs: number\n      size: number\n      hitCount: number\n      lastSeenMs?: number\n    }>\n    version: number\n  } | null\n  cacheWrite?: (\n    cachePath: string,\n    entries: Array<{\n      file: string\n      classes: string[]\n      hash: string\n      mtimeMs: number\n      size: number\n      hitCount: number\n      lastSeenMs?: number\n    }>\n  ) => boolean\n  cachePriority?: (\n    mtimeMs: number,\n    size: number,\n    cachedMtimeMs: number,\n    cachedSize: number,\n    cachedHitCount: number,\n    cachedLastSeenMs: number,\n    nowMs: number\n  ) => number\n  batchExtractClasses?: (filePaths: string[]) => Array<{\n    file: string\n    classes: string[]\n    content_hash: string\n    ok: boolean\n    error?: string | null\n  }>\n  scanCacheGet?: (filePath: string, contentHash: string) => string[] | null\n  scanCachePut?: (filePath: string, contentHash: string, classes: string[], mtimeMs: number, size: number) => void\n  scanCacheInvalidate?: (filePath: string) => void\n  scanCacheStats?: () => { size: number }\n  scanFile?: (filePath: string) => {\n    file: string\n    classes: string[]\n    hash: string\n    ok: boolean\n    error?: string | null\n  }\n  collectFiles?: (root: string, extensions: string[] | null, ignoreDirs: string[] | null) => string[]\n  scanFilesBatch?: (filePaths: string[]) => Array<{\n    file: string\n    classes: string[]\n    hash: string\n  }>\n  generateSubComponentTypes?: (\n    root: string,\n    outputPath: string | null\n  ) => {\n    components: Array<{ name: string; classes: string[] }>\n    outputPath: string | null\n    totalFiles: number\n  }\n  /** Batch-check file existence + stale age. Menggantikan pruneStaleEntries() */\n  pruneStaleEntries?: (\n    entries: Array<{ file: string; lastSeenMs: number }>,\n    maxAgeMs: number | null,\n    checkExists: boolean | null\n  ) => { keptIndices: number[]; removed: number }\n  /** Hitung class frequency stats dari disk cache. Menggantikan computeCacheStats() */\n  computeCacheStats?: (\n    filesClasses: string[][],\n    sizes: number[],\n    top: number | null\n  ) => {\n    totalEntries: number\n    totalClasses: number\n    totalSizeBytes: number\n    avgClassesPerEntryX100: number\n    mostUsedClasses: Array<{ class: string; count: number }>\n  }\n   /** Rebuild workspace result — Rust HashSet dedup + sort. Menggantikan JS fallback di mergeResults() */\n   rebuildWorkspaceResult?: (\n     files: Array<{ file: string; classes: readonly string[] }>\n   ) => { files: Array<{ file: string; classes: string[] }>; totalFiles: number; uniqueClasses: string[] }\n\n  // ── Watch API (QA #12) ──────────────────────────────────────────────────\n  /** Mulai native file watcher via `notify` crate. Returns handleId. */\n  startWatch?: (rootDir: string) => { status: string; handleId: number }\n  /** Poll events yang terkumpul sejak poll terakhir. Queue dikosongkan setelah dipoll. */\n  pollWatchEvents?: (handleId: number) => Array<{ kind: string; path: string }>\n  /** Hentikan watcher dengan handleId. */\n  stopWatch?: (handleId: number) => boolean\n}\n\nconst isValidScannerBinding = (module: unknown): module is NativeScannerBinding => {\n  const candidate = module as Partial<NativeScannerBinding> | null | undefined\n  return !!(\n    candidate &&\n    (candidate.scanWorkspace ||\n      candidate.extractClassesFromSource ||\n      candidate.hashFileContent ||\n      candidate.cacheRead ||\n      candidate.cacheWrite)\n  )\n}\n\n// ─────────────────────────────────────────────────────────────────────────\n// Native Bridge - Factory Pattern\n// ─────────────────────────────────────────────────────────────────────────\n\nconst createScannerBridgeLoader = () => {\n  const _state = {\n    binding: undefined as NativeScannerBinding | null | undefined,\n    loadError: null as string | null,\n    candidatePaths: [] as string[],\n    loadedPath: null as string | null,\n  }\n\n  const throwNativeBindingError = (): never => {\n    const lines = [\n      \"FATAL: Native scanner binding not found.\",\n      \"\",\n      \"This package requires the Rust native binding 'tailwind_styled_parser.node'.\",\n      \"The binding was not found in any of these paths:\",\n      ..._state.candidatePaths.map((p) => `  - ${p}`),\n      \"\",\n    ]\n\n    if (_state.loadError) {\n      lines.push(\"Load error:\", `  ${_state.loadError}`, \"\")\n    }\n\n    lines.push(\n      \"To fix this, run:\",\n      \"  npm run build:rust\",\n      \"\",\n      \"This will build the native Rust module from the 'native/' directory.\",\n      \"If you're using this package in a CI/CD environment, ensure Rust toolchain is installed\",\n      \"and 'npm run build:rust' is executed before running tests or building.\"\n    )\n\n    throw new TwError(\"rust\", \"SCANNER_NATIVE_BINDING_NOT_FOUND\", lines.join(\"\\n\"))\n  }\n\n  const scannerGetBinding = (): NativeScannerBinding => {\n    const cachedBinding = _state.binding\n    if (cachedBinding !== undefined) {\n      if (cachedBinding !== null) {\n        return cachedBinding\n      }\n      return throwNativeBindingError()\n    }\n\n    const runtimeDir = getDirname()\n    const candidates = resolveNativeBindingCandidates({\n      runtimeDir,\n      includeDefaultCandidates: true,\n    })\n\n    _state.candidatePaths = candidates\n\n    const { binding, loadedPath, loadErrors } = loadNativeBinding<NativeScannerBinding>({\n      runtimeDir,\n      candidates,\n      isValid: isValidScannerBinding,\n      invalidExportMessage: \"Module loaded but missing expected scanner binding functions\",\n    })\n\n    if (binding) {\n      log(`scanner native binding loaded successfully`)\n      _state.binding = binding\n      _state.loadedPath = loadedPath ?? null\n      return _state.binding\n    }\n\n    if (loadErrors.length > 0) {\n      _state.loadError = loadErrors.map((e) => `${e.path}: ${e.message}`).join(\"; \")\n    }\n\n    _state.binding = null\n    return throwNativeBindingError()\n  }\n\n  return {\n    get: scannerGetBinding,\n    scannerGetBinding,\n    getLoadedPath: (): string | null => _state.loadedPath,\n    reset: (): void => {\n      _state.binding = undefined\n      _state.loadError = null\n      _state.candidatePaths = []\n      _state.loadedPath = null\n    },\n  }\n}\n\nconst scannerBridgeLoader = createScannerBridgeLoader()\nconst scannerGetBinding = scannerBridgeLoader.get\n\nexport const resetScannerBridgeCache = scannerBridgeLoader.reset\n\n/**\n * Path .node binary native yang lagi dipakai sekarang (kalau ada).\n * Dipakai buat fingerprint cache invalidation — lihat cache-native.ts.\n * Memanggil scannerGetBinding() dulu supaya binding ke-load (loadedPath\n * cuma keisi setelah binding berhasil di-resolve sekali).\n */\nexport function getLoadedScannerBindingPath(): string | null {\n  try {\n    scannerGetBinding()\n  } catch {\n    // Binding gagal load — loadedPath tetap null, biar caller decide fallback-nya\n  }\n  return scannerBridgeLoader.getLoadedPath()\n}\n\nexport function scanWorkspaceNative(\n  root: string,\n  extensions?: string[]\n): ReturnType<NonNullable<NativeScannerBinding[\"scanWorkspace\"]>> {\n  return scannerGetBinding().scanWorkspace!(root, extensions ?? null)\n}\n\nexport function extractClassesNative(source: string): string[] {\n  const result = scannerGetBinding().extractClassesFromSource?.(source)\n  if (result === null || result === undefined) {\n    throw new TwError(\n      \"rust\",\n      \"SCANNER_EXTRACT_FAILED\",\n      \"Native extractClassesFromSource returned null/undefined\"\n    )\n  }\n  return result\n}\n\nexport function hashContentNative(content: string): string {\n  const result = scannerGetBinding().hashFileContent?.(content)\n  if (result === null || result === undefined) {\n    throw new TwError(\n      \"rust\",\n      \"SCANNER_HASH_FAILED\",\n      \"Native hashFileContent returned null/undefined\"\n    )\n  }\n  return result\n}\n\nexport function isRustCacheAvailable(): boolean {\n  return true\n}\n\nexport function hasNativeScannerBinding(): boolean {\n  try {\n    scannerBridgeLoader.get()\n    return true\n  } catch {\n    return false\n  }\n}\n\nexport function cacheReadNative(\n  cachePath: string\n): ReturnType<NonNullable<NativeScannerBinding[\"cacheRead\"]>> {\n  const result = scannerGetBinding().cacheRead?.(cachePath)\n  if (result === null || result === undefined) {\n    throw new TwError(\n      \"rust\",\n      \"SCANNER_CACHE_READ_FAILED\",\n      \"Native cacheRead returned null/undefined\"\n    )\n  }\n  return result\n}\n\nexport function cacheWriteNative(\n  cachePath: string,\n  entries: Parameters<NonNullable<NativeScannerBinding[\"cacheWrite\"]>>[1]\n): boolean {\n  const result = scannerGetBinding().cacheWrite?.(cachePath, entries)\n  if (result === null || result === undefined) {\n    throw new TwError(\n      \"rust\",\n      \"SCANNER_CACHE_WRITE_FAILED\",\n      \"Native cacheWrite returned null/undefined\"\n    )\n  }\n  return result\n}\n\nexport function cachePriorityNative(\n  mtimeMs: number,\n  size: number,\n  cachedMtimeMs: number,\n  cachedSize: number,\n  cachedHitCount: number,\n  cachedLastSeenMs: number,\n  nowMs = Date.now()\n): number {\n  const result = scannerGetBinding().cachePriority?.(\n    mtimeMs,\n    size,\n    cachedMtimeMs,\n    cachedSize,\n    cachedHitCount,\n    cachedLastSeenMs,\n    nowMs\n  )\n  if (result === null || result === undefined) {\n    throw new TwError(\n      \"rust\",\n      \"SCANNER_CACHE_PRIORITY_FAILED\",\n      \"Native cachePriority returned null/undefined\"\n    )\n  }\n  return result\n}\n\nexport function batchExtractClassesNative(filePaths: string[]): Array<{\n  file: string\n  classes: string[]\n  content_hash: string\n  ok: boolean\n  error?: string | null\n}> {\n  const binding = scannerGetBinding()\n  if (!binding.batchExtractClasses) {\n    throw new Error(\"FATAL: Native binding 'batchExtractClasses' is required but not available.\")\n  }\n  return binding.batchExtractClasses(filePaths) ?? []\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// In-memory scan cache (Rust DashMap — zero disk I/O)\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport function scanCacheGet(filePath: string, contentHash: string): string[] | null {\n  const binding = scannerGetBinding()\n  if (!binding.scanCacheGet) {\n    throw new Error(\"FATAL: Native binding 'scanCacheGet' is required but not available.\")\n  }\n  return binding.scanCacheGet(filePath, contentHash) ?? null\n}\n\nexport function scanCachePut(\n  filePath: string,\n  contentHash: string,\n  classes: string[],\n  mtimeMs: number,\n  size: number\n): void {\n  const binding = scannerGetBinding()\n  if (!binding.scanCachePut) {\n    throw new Error(\"FATAL: Native binding 'scanCachePut' is required but not available.\")\n  }\n  binding.scanCachePut(filePath, contentHash, classes, mtimeMs, size)\n}\n\nexport function scanCacheInvalidate(filePath: string): void {\n  const binding = scannerGetBinding()\n  if (!binding.scanCacheInvalidate) {\n    throw new Error(\"FATAL: Native binding 'scanCacheInvalidate' is required but not available.\")\n  }\n  binding.scanCacheInvalidate(filePath)\n}\n\nexport function scanCacheStats(): { size: number } {\n  const binding = scannerGetBinding()\n  if (!binding.scanCacheStats) {\n    throw new Error(\"FATAL: Native binding 'scanCacheStats' is required but not available.\")\n  }\n  return binding.scanCacheStats() as { size: number }\n}\nexport function scanFileNative(filePath: string): {\n  file: string\n  classes: string[]\n  hash: string\n  ok: boolean\n  error?: string | null\n} {\n  const binding = scannerGetBinding()\n  if (!binding.scanFile) {\n    throw new Error(\"FATAL: Native binding 'scanFile' is required but not available.\")\n  }\n  return binding.scanFile(filePath)\n}\n/**\n * Native file walker — kumpulkan file paths rekursif tanpa baca konten.\n *\n * Menggantikan `collectFiles()` di `parallel-scanner.ts`.\n * Returns null jika binding tidak tersedia (fallback ke JS).\n */\nexport function collectFilesNative(\n  root: string,\n  extensions: string[] | null,\n  ignoreDirs: string[] | null\n): string[] | null {\n  const binding = scannerGetBinding()\n  if (!binding.collectFiles) return null\n  return binding.collectFiles(root, extensions, ignoreDirs)\n}\n/**\n * Batch scan + hash banyak file sekaligus dalam satu NAPI call.\n *\n * Menggantikan loop `scanFileNative()` per file di worker thread.\n * Rust: `par_iter()` via rayon — semua file diproses paralel di thread pool Rust,\n * tanpa overhead spawn JS worker untuk setiap chunk.\n *\n * Kapan pakai ini vs `batchExtractClassesNative`:\n * - `scanFilesBatch`       → butuh {file, classes, hash} — scan + hash sekaligus\n * - `batchExtractClasses`  → hanya butuh {file, classes, content_hash, ok, error}\n *\n * Returns: array dengan panjang sama dengan input. File yang gagal dibaca\n * dikembalikan dengan classes:[] dan hash:\"\".\n */\nexport function scanFilesBatchNative(filePaths: string[]): Array<{\n  file: string\n  classes: string[]\n  hash: string\n}> {\n  const binding = scannerGetBinding()\n  if (!binding.scanFilesBatch) {\n    // Fallback: panggil scanFile satu per satu\n    return filePaths.map((fp) => {\n      try {\n        const r = binding.scanFile?.(fp)\n        return r\n          ? { file: r.file, classes: r.classes, hash: r.hash ?? \"\" }\n          : { file: fp, classes: [], hash: \"\" }\n      } catch {\n        return { file: fp, classes: [], hash: \"\" }\n      }\n    })\n  }\n  return binding.scanFilesBatch(filePaths)\n}\n \n/**\n * Scan workspace rekursif dan generate TypeScript type declarations\n * untuk setiap sub-component yang ditemukan.\n *\n * Menggantikan operasi scan manual + string codegen di JS.\n * Rust: walkdir + regex class extraction + type codegen dalam satu pass.\n *\n * @param root       Direktori root workspace\n * @param outputPath Path output file .d.ts (opsional — kalau null, hanya return result)\n */\nexport function generateSubComponentTypesNative(\n  root: string,\n  outputPath?: string\n): {\n  components: Array<{ name: string; classes: string[] }>\n  outputPath: string | null\n  totalFiles: number\n} | null {\n  const binding = scannerGetBinding()\n  if (!binding.generateSubComponentTypes) return null\n  return binding.generateSubComponentTypes(root, outputPath ?? null) as {\n    components: Array<{ name: string; classes: string[] }>\n    outputPath: string | null\n    totalFiles: number\n  }\n}\n// ─────────────────────────────────────────────────────────────────────────────\n// pruneStaleEntries + computeCacheStats — native wrappers\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Batch-check file existence + stale age menggunakan Rust syscalls.\n * Returns `null` jika native tidak tersedia (JS fallback di caller).\n *\n * Menggantikan loop `existsSync()` di `pruneStaleEntries()` (cache-native.ts).\n */\nexport function pruneStaleEntriesNative(\n  entries: Array<{ file: string; lastSeenMs?: number }>,\n  maxAgeMs?: number,\n  checkExists?: boolean\n): { keptIndices: number[]; removed: number } | null {\n  const binding = scannerGetBinding()\n  if (!binding.pruneStaleEntries) return null\n  return binding.pruneStaleEntries(\n    entries.map((e) => ({ file: e.file, lastSeenMs: e.lastSeenMs ?? 0 })),\n    maxAgeMs ?? null,\n    checkExists ?? null\n  )\n}\n\n/**\n * Hitung class frequency + stats dari disk cache entries menggunakan Rust.\n * Returns `null` jika native tidak tersedia (JS fallback di caller).\n *\n * Menggantikan `computeCacheStats()` di `cache-native.ts`.\n */\nexport function rebuildWorkspaceResultNative(\n  files: Array<{ file: string; classes: readonly string[] }>\n): { files: typeof files; totalFiles: number; uniqueClasses: string[] } | null {\n  const binding = scannerBridgeLoader.get()\n  if (!binding?.rebuildWorkspaceResult) return null\n  try {\n    return binding.rebuildWorkspaceResult(files)\n  } catch {\n    return null\n  }\n}\n\nexport function computeCacheStatsNative(\n  filesClasses: string[][],\n  sizes: number[],\n  top?: number\n): {\n  totalEntries: number\n  totalClasses: number\n  totalSizeBytes: number\n  avgClassesPerEntryX100: number\n  mostUsedClasses: Array<{ class: string; count: number }>\n} | null {\n  const binding = scannerGetBinding()\n  if (!binding.computeCacheStats) return null\n  return binding.computeCacheStats(filesClasses, sizes, top ?? null)\n}\n// ─────────────────────────────────────────────────────────────────────────────\n// Watch API — native wrappers (QA #12)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Mulai native file watcher menggunakan `notify` crate (Rust).\n * Returns `null` jika binding tidak tersedia — fallback ke fs.watch JS.\n */\nexport function startWatchNative(rootDir: string): { status: string; handleId: number } | null {\n  try {\n    const binding = scannerGetBinding()\n    if (!binding.startWatch) return null\n    return binding.startWatch(rootDir)\n  } catch {\n    return null\n  }\n}\n\n/**\n * Poll events dari native watcher queue. Queue dikosongkan setelah dipoll.\n * Returns array kosong jika tidak ada events atau binding tidak tersedia.\n */\nexport function pollWatchEventsNative(handleId: number): Array<{ kind: string; path: string }> {\n  try {\n    const binding = scannerGetBinding()\n    if (!binding.pollWatchEvents) return []\n    return binding.pollWatchEvents(handleId)\n  } catch {\n    return []\n  }\n}\n\n/**\n * Hentikan native watcher dengan handleId.\n */\nexport function stopWatchNative(handleId: number): boolean {\n  try {\n    const binding = scannerGetBinding()\n    if (!binding.stopWatch) return false\n    return binding.stopWatch(handleId)\n  } catch {\n    return false\n  }\n}\n\n/**\n * Cek apakah native watch API tersedia.\n */\nexport function hasNativeWatchBinding(): boolean {\n  try {\n    const binding = scannerGetBinding()\n    return !!(binding.startWatch && binding.pollWatchEvents && binding.stopWatch)\n  } catch {\n    return false\n  }\n}","/**\n * tailwind-styled-v4 — Scanner Cache (Rust-backed)\n *\n * This module REQUIRES native Rust bindings and will FAIL LOUDLY if they are not available.\n * NO JavaScript fallback is provided.\n */\n\nimport fs from \"node:fs\"\nimport path from \"node:path\"\nimport {\n  cachePriorityNative,\n  cacheReadNative,\n  cacheWriteNative,\n  scanCacheGet,\n  scanCachePut,\n  scanCacheInvalidate,\n  scanCacheStats,\n  pruneStaleEntriesNative,\n  computeCacheStatsNative,\n  getLoadedScannerBindingPath,\n} from \"./native-bridge\"\n\nfunction defaultCachePath(rootDir: string, cacheDir?: string): string {\n  const dir = cacheDir\n    ? path.resolve(rootDir, cacheDir)\n    : path.join(process.cwd(), \".cache\", \"tailwind-styled\")\n  return path.join(dir, \"scanner-cache.json\")\n}\n\nfunction metaPathFor(cachePath: string): string {\n  return cachePath.replace(/\\.json$/, \".meta.json\")\n}\n\n/**\n * Fingerprint binary native yang lagi dipakai (mtime + size dari file .node).\n *\n * Root cause fix: cache_read() Rust selama ini hardcode `version: 2` tanpa\n * pernah benar-benar baca field version dari file (lihat cache_store.rs).\n * Jadi cache lama (hasil compiler/transform versi sebelumnya, misal sebelum\n * is_chained guard ditambahkan) gak pernah ke-invalidate otomatis walau\n * binary native-nya udah di-rebuild — selama isi file SOURCE-nya gak berubah.\n *\n * Fix ini independen dari versioning di Rust (yang masih non-functional\n * sampai di-rebuild) — fingerprint dihitung di sisi TS dari mtime+size file\n * .node itu sendiri, jadi setiap kali binary native di-rebuild ulang,\n * fingerprint otomatis berubah dan cache lama langsung dianggap stale,\n * TANPA perlu compiler/binary mana pun \"mengingat\" versi berapa dia.\n *\n * Kalau path binary gak diketahui (binding belum/gagal load), return null —\n * caller harus treat ini sebagai \"gak bisa diverifikasi\" dan skip optimisasi\n * cache (aman, cuma ngurangin cache-hit rate, gak bikin behavior salah).\n */\nlet _cachedFingerprint: string | null | undefined\nfunction getBinaryFingerprint(): string | null {\n  if (_cachedFingerprint !== undefined) return _cachedFingerprint\n  try {\n    const loadedPath = getLoadedScannerBindingPath()\n    if (!loadedPath) {\n      _cachedFingerprint = null\n      return null\n    }\n    const stat = fs.statSync(loadedPath)\n    _cachedFingerprint = `${stat.mtimeMs}:${stat.size}`\n  } catch {\n    _cachedFingerprint = null\n  }\n  return _cachedFingerprint\n}\n\n// ── Public API ────────────────────────────────────────────────────────────────\n\nexport interface NativeCacheEntry {\n  file: string\n  classes: string[]\n  hash: string\n  mtimeMs: number\n  size: number\n  hitCount: number\n  /** Terakhir file ditemukan di filesystem (ms epoch). Digunakan untuk stale cleanup. */\n  lastSeenMs?: number\n}\n\n/** Default stale threshold — 7 hari */\nconst STALE_THRESHOLD_MS = 7 * 24 * 60 * 60 * 1000\n\n/**\n * Hapus entri cache yang sudah stale (file sudah tidak ada atau lastSeenMs terlalu lama).\n *\n * Native-first: Rust batch-check semua file dalam satu pass tanpa\n * event loop overhead. JS fallback: existsSync loop per file.\n */\nexport function pruneStaleEntries(\n  entries: NativeCacheEntry[],\n  opts: { maxAgeMs?: number; rootDir?: string } = {}\n): { pruned: NativeCacheEntry[]; removed: number } {\n  const nativeResult = pruneStaleEntriesNative(\n    entries.map((e) => ({ file: e.file, lastSeenMs: e.lastSeenMs })),\n    opts.maxAgeMs,\n    !!opts.rootDir\n  )\n\n  if (nativeResult !== null) {\n    const pruned = nativeResult.keptIndices.map((i) => entries[i])\n    return { pruned, removed: nativeResult.removed }\n  }\n\n  throw new Error(\"FATAL: Native binding 'pruneStaleEntries' is required but not available.\")\n}\n\n/**\n * Read scanner cache from disk using Rust parser.\n * REQUIRES native binding - throws if unavailable.\n *\n * FIX: Pastikan folder cache ada sebelum Rust coba baca file,\n * supaya tidak error \"os error 3 (path not found)\" pada first run.\n */\nexport function readCache(rootDir: string, cacheDir?: string): NativeCacheEntry[] {\n  const cachePath = defaultCachePath(rootDir, cacheDir)\n\n  // Buat folder cache jika belum ada — cegah \"os error 3\" pada first run\n  fs.mkdirSync(path.dirname(cachePath), { recursive: true })\n\n  // Cek fingerprint binary native dulu. Kalau beda dari pas cache ini ditulis\n  // (atau meta belum ada sama sekali) → binary udah di-rebuild sejak itu,\n  // seluruh cache gak bisa dipercaya lagi. Lihat getBinaryFingerprint() di atas.\n  const currentFingerprint = getBinaryFingerprint()\n  if (currentFingerprint !== null) {\n    const metaPath = metaPathFor(cachePath)\n    let storedFingerprint: string | null = null\n    try {\n      storedFingerprint = JSON.parse(fs.readFileSync(metaPath, \"utf8\")).binaryFingerprint ?? null\n    } catch {\n      // Meta belum ada (first run) atau corrupt — treat sebagai mismatch\n    }\n    if (storedFingerprint !== currentFingerprint) {\n      console.warn(\n        \"[scanner] cache invalidated: native binary berubah sejak cache terakhir ditulis\"\n      )\n      return []\n    }\n  }\n\n  const result = cacheReadNative(cachePath)\n  if (!result) return []\n\n  return result.entries.map((e) => ({\n    file: e.file,\n    classes: e.classes,\n    hash: e.hash,\n    mtimeMs: e.mtimeMs,\n    size: e.size,\n    hitCount: e.hitCount,\n    lastSeenMs: e.lastSeenMs,\n  }))\n}\n\n/**\n * Write scanner cache to disk using Rust serialiser.\n * REQUIRES native binding - throws if unavailable.\n *\n * FIX: Pastikan folder cache ada sebelum Rust coba tulis file.\n */\nexport function writeCache(rootDir: string, entries: NativeCacheEntry[], cacheDir?: string): void {\n  const cachePath = defaultCachePath(rootDir, cacheDir)\n\n  // Buat folder cache jika belum ada — cegah write gagal pada first run\n  fs.mkdirSync(path.dirname(cachePath), { recursive: true })\n\n  const success = cacheWriteNative(cachePath, entries)\n  if (!success) {\n    throw new Error(\n      \"Native cacheWrite failed. Run 'npm run build:rust' to rebuild native bindings.\"\n    )\n  }\n\n  // Catat fingerprint binary native saat ini, biar readCache() berikutnya\n  // bisa deteksi kalau binary udah di-rebuild sejak cache ini ditulis.\n  const currentFingerprint = getBinaryFingerprint()\n  if (currentFingerprint !== null) {\n    try {\n      fs.writeFileSync(\n        metaPathFor(cachePath),\n        JSON.stringify({ binaryFingerprint: currentFingerprint }),\n        \"utf8\"\n      )\n    } catch {\n      // Gagal nulis meta gak fatal — efeknya cuma cache di-treat stale di run berikutnya\n    }\n  }\n}\n\n/**\n * Compute priority score for a file using the Rust SmartCache algorithm.\n * Higher = process first.\n * REQUIRES native binding - throws if unavailable.\n */\nexport function filePriority(\n  mtimeMs: number,\n  size: number,\n  cached: { mtimeMs: number; size: number; hitCount: number; lastSeenMs?: number } | undefined,\n  nowMs = Date.now()\n): number {\n  return cachePriorityNative(\n    mtimeMs,\n    size,\n    cached?.mtimeMs ?? 0,\n    cached?.size ?? 0,\n    cached?.hitCount ?? 0,\n    cached?.lastSeenMs ?? 0,\n    nowMs\n  )\n}\n\nexport interface CacheStats {\n  totalEntries: number\n  totalClasses: number\n  totalSizeBytes: number\n  avgClassesPerEntry: number\n  mostUsedClasses: Array<{ class: string; count: number }>\n}\n\n/**\n * Rust in-memory cache — hot path untuk per-file lookup saat scan.\n * Jauh lebih cepat dari disk JSON cache untuk file yang baru saja di-scan.\n */\nexport const hotCache = {\n  get: scanCacheGet,\n  put: scanCachePut,\n  invalidate: scanCacheInvalidate,\n} as const\n\n/**\n * Stats dari Rust in-memory cache (DashMap).\n * `size` = jumlah entry saat ini di cache.\n */\nexport function getHotCacheStats(): { size: number } {\n  return scanCacheStats()\n}\n\n/**\n * Compute disk cache stats dari entries (diperlukan untuk mostUsedClasses).\n *\n * Native-first: Rust HashMap count + partial sort — ~3× lebih cepat\n * dari JS Map untuk workspace besar (5000+ entries).\n * JS fallback: manual Map count + .sort().\n */\nexport function computeCacheStats(entries: NativeCacheEntry[]): CacheStats {\n  if (entries.length === 0) {\n    return { totalEntries: 0, totalClasses: 0, totalSizeBytes: 0, avgClassesPerEntry: 0, mostUsedClasses: [] }\n  }\n\n  // Native-first\n  const nativeResult = computeCacheStatsNative(\n    entries.map((e) => e.classes),\n    entries.map((e) => e.size),\n    10\n  )\n\n  if (nativeResult !== null) {\n    return {\n      totalEntries: nativeResult.totalEntries,\n      totalClasses: nativeResult.totalClasses,\n      totalSizeBytes: nativeResult.totalSizeBytes,\n      avgClassesPerEntry: nativeResult.avgClassesPerEntryX100 / 100,\n      mostUsedClasses: nativeResult.mostUsedClasses,\n    }\n  }\n\n  throw new Error(\"FATAL: Native binding 'computeCacheStats' is required but not available.\")\n}","/**\n * Native parallel scanner menggunakan worker threads + Rust batchExtractClasses.\n *\n * Untuk workspaces besar (200+ files), file-list dibagi ke beberapa worker.\n * Setiap worker memanggil native `batchExtractClasses` yang sudah memakai\n * rayon par_iter di sisi Rust — sehingga parallelism terjadi di dua level:\n *   1. Multiple worker threads (TS/Node level)\n *   2. rayon par_iter di dalam setiap worker (Rust level)\n *\n * Untuk workspace kecil (< PARALLEL_THRESHOLD), langsung panggil batchExtractClasses\n * di main thread — overhead spawn worker tidak worth it.\n */\n\nimport { Worker, isMainThread, parentPort, workerData } from \"node:worker_threads\"\nimport path from \"node:path\"\nimport { availableParallelism } from \"node:os\"\nimport { fileURLToPath } from \"node:url\"\n\nimport { isScannableFile, DEFAULT_EXTENSIONS, DEFAULT_IGNORES } from \"./index\"\nimport { batchExtractClassesNative, collectFilesNative, rebuildWorkspaceResultNative } from \"./native-bridge\"\nimport type { ScanWorkspaceResult, ScanFileResult } from \"./types\"\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Constants\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst PARALLEL_THRESHOLD = 50\nconst DEFAULT_CHUNK_SIZE = 150\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface ParallelScanOptions {\n  extensions?: string[]\n  ignoreDirs?: string[]\n  maxWorkers?: number\n  chunkSize?: number\n}\n\ninterface NativeBatchResult {\n  file: string\n  classes: string[]\n  content_hash: string\n  ok: boolean\n  error?: string | null\n}\n\ninterface WorkerInput {\n  filePaths: string[]\n}\n\ntype WorkerOutput =\n  | { ok: true; results: NativeBatchResult[] }\n  | { ok: false; error: string }\n\n// ─────────────────────────────────────────────────────────────────────────────\n// File collection\n// ─────────────────────────────────────────────────────────────────────────────\n\n// ─────────────────────────────────────────────────────────────────────────────\n// File collection — native-first, JS fallback\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Kumpulkan semua file yang cocok secara rekursif dari rootDir.\n *\n * Native: satu Rust walk tanpa JS event loop overhead — 2–5× lebih cepat\n * untuk workspace besar. Tidak membaca konten file, hanya paths.\n *\n * JS fallback: dipakai jika native binding tidak tersedia (mis. test env).\n */\nfunction collectFiles(rootDir: string, extensions: string[], ignoreDirs: string[]): string[] {\n  const native = collectFilesNative(rootDir, extensions, ignoreDirs)\n  if (native !== null) return native\n  throw new Error(\"FATAL: Native binding 'collectFiles' is required but not available.\")\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Merge results\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction mergeResults(batchResults: NativeBatchResult[]): ScanWorkspaceResult {\n  const files: ScanFileResult[] = batchResults.map((r) => ({\n    file: r.file,\n    classes: r.classes,\n    hash: r.content_hash,\n  }))\n  const native = rebuildWorkspaceResultNative(files)\n  if (native) return native\n  throw new Error(\"FATAL: Native binding 'rebuildWorkspaceResult' is required but not available.\")\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Worker thread entry point\n// ─────────────────────────────────────────────────────────────────────────────\n\nif (!isMainThread && parentPort) {\n  const { filePaths } = workerData as WorkerInput\n  try {\n    const results = batchExtractClassesNative(filePaths)\n    const msg: WorkerOutput = { ok: true, results }\n    parentPort.postMessage(msg)\n  } catch (error) {\n    const msg: WorkerOutput = {\n      ok: false,\n      error: error instanceof Error ? error.message : String(error),\n    }\n    parentPort.postMessage(msg)\n  }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// __filename compat CJS + ESM\n// ─────────────────────────────────────────────────────────────────────────────\n\ndeclare const __filename: string | undefined\nconst _workerFilename =\n  typeof __filename !== \"undefined\" ? __filename : fileURLToPath(import.meta.url)\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Spawn worker for one chunk\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction runChunkInWorker(filePaths: string[]): Promise<NativeBatchResult[]> {\n  return new Promise((resolve, reject) => {\n    const worker = new Worker(_workerFilename, {\n      workerData: { filePaths } satisfies WorkerInput,\n    })\n    worker.once(\"message\", (payload: WorkerOutput) => {\n      if (payload.ok) {\n        resolve(payload.results)\n      } else {\n        reject(new Error(payload.error ?? \"parallel-scanner worker failed\"))\n      }\n    })\n    worker.once(\"error\", reject)\n    worker.once(\"exit\", (code) => {\n      if (code !== 0) reject(new Error(`parallel-scanner worker exited with code ${code}`))\n    })\n  })\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Public API\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport async function scanWorkspaceParallel(\n  rootDir: string,\n  options: ParallelScanOptions = {}\n): Promise<ScanWorkspaceResult> {\n  const {\n    extensions = DEFAULT_EXTENSIONS,\n    ignoreDirs = DEFAULT_IGNORES,\n    maxWorkers = Math.max(1, availableParallelism() - 1),\n    chunkSize = DEFAULT_CHUNK_SIZE,\n  } = options\n\n  const files = collectFiles(path.resolve(rootDir), extensions, ignoreDirs)\n\n  if (files.length < PARALLEL_THRESHOLD) {\n    return mergeResults(batchExtractClassesNative(files))\n  }\n\n  const chunks: string[][] = []\n  for (let i = 0; i < files.length; i += chunkSize) {\n    chunks.push(files.slice(i, i + chunkSize))\n  }\n\n  const allResults: NativeBatchResult[] = []\n  for (let i = 0; i < chunks.length; i += maxWorkers) {\n    const batch = chunks.slice(i, i + maxWorkers)\n    const batchResults = await Promise.all(batch.map(runChunkInWorker))\n    allResults.push(...batchResults.flat())\n  }\n\n  return mergeResults(allResults)\n}","import { z } from \"zod\"\nimport { TwError } from \"@tailwind-styled/shared\"\n\nconst formatIssuePath = (path: readonly PropertyKey[]): string =>\n  path.length > 0\n    ? path\n        .map((segment) =>\n          typeof segment === \"symbol\" ? segment.description ?? segment.toString() : String(segment)\n        )\n        .join(\".\")\n    : \"<root>\"\n\nconst formatIssues = (error: z.ZodError): string =>\n  error.issues\n    .map((issue) => {\n      const path = formatIssuePath(issue.path)\n      return `${path}: ${issue.message}`\n    })\n    .join(\"; \")\n\nconst parseWithSchema = <T>(schema: z.ZodType<T>, data: unknown, label: string): T => {\n  const parsed = schema.safeParse(data)\n  if (parsed.success) return parsed.data\n  const details = formatIssues(parsed.error)\n  throw new TwError(\n    \"validation\",\n    \"SCHEMA_VALIDATION_FAILED\",\n    details ? `${label}: ${details}` : label,\n    parsed.error\n  )\n}\n\nconst NonNegativeIntegerSchema = z.number().int().min(0)\n\nexport const ScanWorkspaceOptionsSchema = z.object({\n  includeExtensions: z.array(z.string()).optional(),\n  ignoreDirectories: z.array(z.string()).optional(),\n  useCache: z.boolean().optional(),\n  cacheDir: z.string().min(1).optional(),\n  smartInvalidation: z.boolean().optional(),\n})\n\nexport type ScanWorkspaceOptions = z.infer<typeof ScanWorkspaceOptionsSchema>\n\nexport const ScanFileResultSchema = z.object({\n  file: z.string(),\n  classes: z.array(z.string()),\n  hash: z.string().optional(),\n})\n\nexport type ScanFileResult = z.infer<typeof ScanFileResultSchema>\n\nexport const ScanWorkspaceResultSchema = z\n  .object({\n    files: z.array(ScanFileResultSchema),\n    totalFiles: NonNegativeIntegerSchema,\n    uniqueClasses: z.array(z.string()),\n  })\n  .refine((value) => value.totalFiles === value.files.length, {\n    message: \"scan result totalFiles must match files.length\",\n    path: [\"totalFiles\"],\n  })\n\nexport type ScanWorkspaceResult = z.infer<typeof ScanWorkspaceResultSchema>\n\nexport const ScannerWorkerRequestSchema = z.object({\n  rootDir: z.string().min(1),\n  options: ScanWorkspaceOptionsSchema.optional(),\n})\n\nexport type ScannerWorkerRequest = z.infer<typeof ScannerWorkerRequestSchema>\n\nexport const ScannerWorkerSuccessMessageSchema = z.object({\n  ok: z.literal(true),\n  result: ScanWorkspaceResultSchema,\n})\n\nexport const ScannerWorkerErrorMessageSchema = z.object({\n  ok: z.literal(false),\n  error: z.string().optional(),\n})\n\nexport const ScannerWorkerMessageSchema = z.union([\n  ScannerWorkerSuccessMessageSchema,\n  ScannerWorkerErrorMessageSchema,\n])\n\nexport type ScannerWorkerMessage = z.infer<typeof ScannerWorkerMessageSchema>\n\nexport const parseScanWorkspaceOptions = (options: unknown) =>\n  parseWithSchema(ScanWorkspaceOptionsSchema, options ?? {}, \"scanner options are invalid\")\n\nexport const parseScanFileResult = (result: unknown) =>\n  parseWithSchema(ScanFileResultSchema, result, \"scanner file result is invalid\")\n\nexport const parseScanWorkspaceResult = (result: unknown) =>\n  parseWithSchema(ScanWorkspaceResultSchema, result, \"scanner workspace result is invalid\")\n\nexport const parseScannerWorkerRequest = (request: unknown) =>\n  parseWithSchema(ScannerWorkerRequestSchema, request, \"scanner worker request is invalid\")\n\nexport const parseScannerWorkerMessage = (message: unknown) =>\n  parseWithSchema(ScannerWorkerMessageSchema, message, \"scanner worker message is invalid\")\n","import fs from \"node:fs\"\nimport { createRequire } from \"node:module\"\nimport path from \"node:path\"\nimport { fileURLToPath } from \"node:url\"\nimport { Worker } from \"node:worker_threads\"\nimport { createLogger } from \"@tailwind-styled/shared\"\nimport { filePriority, type NativeCacheEntry, readCache, writeCache } from \"./cache-native\"\nimport { hashContentNative, isRustCacheAvailable } from \"./native-bridge\"\nimport { scanWorkspaceParallel } from \"./parallel-scanner\"\nimport {\n  parseScannerWorkerMessage,\n  parseScanWorkspaceOptions,\n  parseScanWorkspaceResult,\n  type ScanFileResult,\n  type ScanWorkspaceOptions,\n  type ScanWorkspaceResult,\n} from \"./schemas\"\n\nconst log = createLogger(\"scanner\")\n\nconst SCAN_WORKER_TIMEOUT_MS = 120_000\n\ntype NativeParsedClass = { raw?: string }\n// ClassExtractResult shape dari Rust (napi-rs export)\ntype NativeClassExtractResult = {\n  classes: string[]\n  componentNames: string[]\n  hasTwUsage: boolean\n  hasUseClient: boolean\n  imports: string[]\n}\ntype NativeParserBinding = {\n  parse_classes?: (input: string) => NativeParsedClass[]\n  parseClasses?: (input: string) => NativeParsedClass[]\n  // Rust returns ClassExtractResult object, bukan plain string[]\n  extractClassesFromSource?: (source: string) => NativeClassExtractResult | string[] | null\n  batchExtractClassesNative?: (filePaths: string[]) => Array<{\n    file: string; classes: string[]; contentHash: string; ok: boolean; error?: string\n  }>\n}\n\nfunction getRuntimeDir(): string {\n  if (typeof __dirname !== \"undefined\" && __dirname.length > 0) {\n    return __dirname\n  }\n  if (typeof import.meta !== \"undefined\" && import.meta.url) {\n    return path.dirname(fileURLToPath(import.meta.url))\n  }\n  return process.cwd()\n}\n\n// ─────────────────────────────────────────────────────────────────────────\n// Native Parser Binding - Factory Pattern (no let!)\n// ─────────────────────────────────────────────────────────────────────────\n\nconst createNativeParserLoader = () => {\n  const _state = {\n    binding: undefined as NativeParserBinding | null | undefined,\n    initError: null as string | null,\n  }\n\n  const debugNative = (message: string): void => {\n    log.debug(`[native] ${message}`)\n  }\n\n  const loadNativeParserBinding = (): NativeParserBinding | null => {\n    if (_state.binding !== undefined) return _state.binding\n\n    const runtimeDir = getRuntimeDir()\n    const req = createRequire(path.join(runtimeDir, \"noop.cjs\"))\n\n    const _platform = process.platform\n    const _arch = process.arch\n    const _platformArch = `${_platform}-${_arch}`\n    const _platformArchGnu = _platformArch === \"linux-x64\" ? \"linux-x64-gnu\"\n      : _platformArch === \"linux-arm64\" ? \"linux-arm64-gnu\"\n      : _platformArch\n\n    const candidates = [\n      // ── binaryName baru: tailwind-styled-native (napi-rs naming) ──\n      // cwd = repo root saat run dari root, atau package dir saat workspaces\n      path.resolve(process.cwd(), \"native\", \"tailwind-styled-native.node\"),\n      path.resolve(process.cwd(), \"native\", `tailwind-styled-native.${_platformArch}.node`),\n      path.resolve(process.cwd(), \"native\", `tailwind-styled-native.${_platformArchGnu}.node`),\n      // runtimeDir = dist/ → naik 1 level ke package root (npm install case)\n      // e.g. node_modules/tailwind-styled-v4/dist/ → node_modules/tailwind-styled-v4/native/\n      path.resolve(runtimeDir, \"..\", \"native\", \"tailwind-styled-native.node\"),\n      path.resolve(runtimeDir, \"..\", \"native\", `tailwind-styled-native.${_platformArch}.node`),\n      path.resolve(runtimeDir, \"..\", \"native\", `tailwind-styled-native.${_platformArchGnu}.node`),\n      // runtimeDir = dist/ → naik 4 level ke repo root (monorepo dev case)\n      path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", \"tailwind-styled-native.node\"),\n      path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", `tailwind-styled-native.${_platformArchGnu}.node`),\n      // 3 level fallback (jika package di-nest lebih dangkal)\n      path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"native\", \"tailwind-styled-native.node\"),\n      path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"native\", `tailwind-styled-native.${_platformArchGnu}.node`),\n      // ── binaryName lama: tailwind_styled_parser (backward compat) ──\n      path.resolve(process.cwd(), \"native/tailwind_styled_parser.node\"),\n      path.resolve(process.cwd(), \"native/build/Release/tailwind_styled_parser.node\"),\n      path.resolve(runtimeDir, \"..\", \"native\", \"tailwind_styled_parser.node\"),\n      path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", \"tailwind_styled_parser.node\"),\n      path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"native\", \"tailwind_styled_parser.node\"),\n      path.resolve(\n        runtimeDir,\n        \"..\",\n        \"..\",\n        \"..\",\n        \"native\",\n        \"build\",\n        \"Release\",\n        \"tailwind_styled_parser.node\"\n      ),\n    ]\n\n    for (const fullPath of candidates) {\n      if (!fs.existsSync(fullPath)) continue\n      try {\n        const required = req(fullPath) as NativeParserBinding\n        if (\n          required &&\n          (typeof required.extractClassesFromSource === \"function\" ||\n            typeof required.parseClasses === \"function\" ||\n            typeof required.parse_classes === \"function\")\n        ) {\n          _state.binding = required\n          debugNative(`using native parser from ${fullPath}`)\n          return _state.binding\n        }\n      } catch (error) {\n        _state.initError = error instanceof Error ? error.message : String(error)\n      }\n    }\n\n    _state.binding = null\n    if (!_state.initError) {\n      _state.initError = \"native .node binding not found\"\n    }\n    debugNative(`native binding not available: ${_state.initError}`)\n    return _state.binding\n  }\n\n  return {\n    get: loadNativeParserBinding,\n    reset: (): void => {\n      _state.binding = undefined\n      _state.initError = null\n    },\n  }\n}\n\nconst nativeParserLoader = createNativeParserLoader()\n\nfunction normalizeWithNativeParser(tokens: string[]): string[] {\n  const binding = nativeParserLoader.get()\n  const parseClasses = binding?.parseClasses ?? binding?.parse_classes\n  if (!binding || typeof parseClasses !== \"function\") {\n    throw new Error(\n      \"Native parser binding is required but not available. Run 'npm run build:rust' to build it.\"\n    )\n  }\n\n  try {\n    const parsed = parseClasses(tokens.join(\" \"))\n    const normalized = parsed.map((item) => item.raw?.trim() ?? \"\").filter(Boolean)\n    return Array.from(new Set(normalized))\n  } catch (error) {\n    const errorMessage = error instanceof Error ? error.message : String(error)\n    throw new Error(`Native parser failed: ${errorMessage}. Run 'npm run build:rust' to rebuild.`)\n  }\n}\n\nexport type { ScanFileResult, ScanWorkspaceOptions, ScanWorkspaceResult } from \"./schemas\"\nexport {\n  parseScannerWorkerMessage,\n  parseScanWorkspaceOptions,\n  parseScanWorkspaceResult,\n} from \"./schemas\"\n\nexport const DEFAULT_EXTENSIONS = [\".js\", \".jsx\", \".ts\", \".tsx\", \".mjs\", \".cjs\"]\nexport const DEFAULT_IGNORES = [\"node_modules\", \".git\", \".next\", \"dist\", \"out\", \".turbo\", \".cache\"]\n\nfunction resolveScannerWorkerModulePath(): string | null {\n  const runtimeDir = (() => {\n    if (typeof __dirname !== \"undefined\" && __dirname.length > 0) {\n      return __dirname\n    }\n    // ESM fallback\n    if (typeof import.meta !== \"undefined\" && import.meta.url) {\n      return path.dirname(fileURLToPath(import.meta.url))\n    }\n    // Final fallback\n    return process.cwd()\n  })()\n\n  const candidates = [\n    path.resolve(runtimeDir, \"worker.cjs\"),\n    path.resolve(runtimeDir, \"worker.js\"),\n    path.resolve(runtimeDir, \"worker.ts\"),\n  ]\n\n  for (const candidate of candidates) {\n    if (fs.existsSync(candidate)) return candidate\n  }\n\n  return null\n}\n\nfunction scanWorkspaceInWorker(\n  rootDir: string,\n  options: ScanWorkspaceOptions\n): Promise<ScanWorkspaceResult> {\n  const normalizedOptions = parseScanWorkspaceOptions(options)\n  const modulePath = resolveScannerWorkerModulePath()\n  if (!modulePath) {\n    return Promise.reject(new Error(\"scanner worker module path could not be resolved\"))\n  }\n\n  return new Promise((resolve, reject) => {\n    const settleState = { settled: false }\n\n    const worker = new Worker(modulePath, { workerData: { rootDir, options: normalizedOptions } })\n\n    const timeout = setTimeout(() => {\n      if (!settleState.settled) {\n        settleState.settled = true\n        void worker.terminate()\n        reject(new Error(`scanner worker timed out after ${SCAN_WORKER_TIMEOUT_MS}ms`))\n      }\n    }, SCAN_WORKER_TIMEOUT_MS)\n\n    const finish = (callback: () => void) => {\n      if (settleState.settled) return\n      settleState.settled = true\n      clearTimeout(timeout)\n      callback()\n    }\n\n    worker.once(\"message\", (payload: unknown) => {\n      const message = parseScannerWorkerMessage(payload)\n      finish(() => {\n        if (message?.ok) {\n          resolve(parseScanWorkspaceResult(message.result))\n          return\n        }\n        reject(new Error(message?.error ?? \"scanner worker failed without an error message\"))\n      })\n    })\n\n    worker.once(\"error\", (error: Error) => {\n      finish(() => reject(error))\n    })\n\n    worker.once(\"exit\", (code: number) => {\n      if (code !== 0) {\n        finish(() => reject(new Error(`scanner worker exited with code ${code}`)))\n      }\n    })\n  })\n}\n\nfunction buildExtensionSet(includeExtensions: string[]): Set<string> {\n  return new Set(includeExtensions)\n}\n\nfunction collectCandidates(\n  rootDir: string,\n  ignoreDirectories: Set<string>,\n  extensionSet: Set<string>\n): string[] {\n  const candidates: string[] = []\n  const directories = [rootDir]\n\n  while (directories.length > 0) {\n    const currentDir = directories.pop()\n    if (!currentDir) continue\n\n    const entries = (() => {\n      try {\n        return fs.readdirSync(currentDir, { withFileTypes: true })\n      } catch {\n        return [] as fs.Dirent[]\n      }\n    })()\n\n    for (const entry of entries) {\n      const fullPath = path.join(currentDir, entry.name)\n\n      if (entry.isDirectory()) {\n        if (!ignoreDirectories.has(entry.name)) directories.push(fullPath)\n        continue\n      }\n\n      if (!entry.isFile()) continue\n      if (!extensionSet.has(path.extname(entry.name))) continue\n      candidates.push(fullPath)\n    }\n  }\n\n  return candidates\n}\n\nfunction toCacheSize(size: number): number {\n  if (!Number.isFinite(size)) return 0\n  const normalized = Math.max(0, Math.trunc(size))\n  return Math.min(normalized, 0xffffffff)\n}\n\nexport function scanSource(source: string): string[] {\n  const nativeBinding = nativeParserLoader.get()\n  if (nativeBinding?.extractClassesFromSource) {\n    const result = nativeBinding.extractClassesFromSource(source)\n    // Rust mengembalikan ClassExtractResult { classes: string[], ... }\n    // bukan plain string[] — handle kedua kemungkinan untuk backward compat\n    if (Array.isArray(result)) {\n      return Array.from(new Set(result.filter(Boolean)))\n    }\n    if (result !== null && result !== undefined && Array.isArray((result as NativeClassExtractResult).classes)) {\n      return Array.from(new Set((result as NativeClassExtractResult).classes.filter(Boolean)))\n    }\n  }\n\n  throw new Error(\n    \"FATAL: Native parser binding is required but not available.\\n\" +\n    \"This package requires native Rust bindings.\\n\\n\" +\n    \"Resolution steps:\\n\" +\n    \"1. Build the native Rust module: npm run build:rust\"\n  )\n}\n\nexport function isScannableFile(filePath: string, includeExtensions = DEFAULT_EXTENSIONS): boolean {\n  return includeExtensions.includes(path.extname(filePath))\n}\n\nexport function scanFile(filePath: string): ScanFileResult {\n  const { scanFileNative } = require(\"./native-bridge\")\n  const result = scanFileNative(filePath) as {\n    file: string; classes: string[]; hash: string; ok: boolean; error?: string | null\n  }\n  if (!result.ok) {\n    throw new Error(`scanFile failed for ${filePath}: ${result.error ?? \"unknown error\"}`)\n  }\n  return {\n    file: result.file,\n    classes: result.classes,\n    ...(result.hash ? { hash: result.hash } : {}),\n  }\n}\n\nexport function scanWorkspace(\n  rootDir: string,\n  options: ScanWorkspaceOptions = {}\n): ScanWorkspaceResult {\n  const normalizedOptions = parseScanWorkspaceOptions(options)\n  const includeExtensions = normalizedOptions.includeExtensions ?? DEFAULT_EXTENSIONS\n  const extensionSet = buildExtensionSet(includeExtensions)\n  const ignoreDirectories = new Set(normalizedOptions.ignoreDirectories ?? DEFAULT_IGNORES)\n  const useCache = normalizedOptions.useCache ?? true\n  const _smartInvalidation = normalizedOptions.smartInvalidation ?? true\n\n  const files: ScanFileResult[] = []\n  const unique = new Set<string>()\n  const candidates = collectCandidates(rootDir, ignoreDirectories, extensionSet)\n\n  const processResult = (result: ScanFileResult) => {\n    files.push(result)\n    for (const cls of result.classes) unique.add(cls)\n  }\n\n  \n  const { scanWorkspaceNative } = require(\"./native-bridge\")\n\n  if (!normalizedOptions.cacheDir && !useCache) {\n    const nativeResult = scanWorkspaceNative(rootDir, includeExtensions)\n    if (nativeResult) {\n      return parseScanWorkspaceResult({\n        files: nativeResult.files.map((f: { file: string; classes: string[]; hash?: string }) => ({\n          file: f.file,\n          classes: f.classes,\n          ...(f.hash ? { hash: f.hash } : {}),\n        })),\n        totalFiles: nativeResult.totalFiles,\n        uniqueClasses: nativeResult.uniqueClasses,\n      })\n    }\n  }\n\n  if (useCache && isRustCacheAvailable()) {\n    const cacheEntries: NativeCacheEntry[] = (() => {\n      try {\n        return readCache(rootDir, normalizedOptions.cacheDir)\n      } catch (error) {\n        log.debug(\n          `cache read failed, continuing without persisted cache: ${\n            error instanceof Error ? error.message : String(error)\n          }`\n        )\n        return []\n      }\n    })()\n\n    const cacheMap = new Map(cacheEntries.map((entry) => [entry.file, entry]))\n    const nowMs = Date.now()\n    const ranked: Array<{\n      filePath: string\n      stat: fs.Stats\n      size: number\n      cached?: NativeCacheEntry\n      priority: number\n    }> = []\n\n    for (const filePath of candidates) {\n      const stat = (() => {\n        try {\n          return fs.statSync(filePath)\n        } catch {\n          return null\n        }\n      })()\n      if (!stat) continue\n\n      const size = toCacheSize(stat.size)\n      const cached = cacheMap.get(filePath)\n      const priority = filePriority(\n        stat.mtimeMs,\n        size,\n        cached\n          ? {\n              mtimeMs: cached.mtimeMs,\n              size: cached.size,\n              hitCount: cached.hitCount,\n              lastSeenMs: 0,\n            }\n          : undefined,\n        nowMs\n      )\n\n      ranked.push({ filePath, stat, size, cached, priority })\n    }\n\n    ranked.sort((a, b) => b.priority - a.priority)\n\n    const updatedEntries: NativeCacheEntry[] = []\n\n    for (const { filePath, stat, size, cached } of ranked) {\n      const content = (() => {\n        try {\n          return fs.readFileSync(filePath, \"utf8\")\n        } catch {\n          return null\n        }\n      })()\n      if (!content) continue\n\n      const hash = hashContentNative(content)\n      if (\n        cached &&\n        cached.hash === hash &&\n        cached.mtimeMs === stat.mtimeMs &&\n        cached.size === size\n      ) {\n        log.debug(`cache HIT ${filePath}`)\n        processResult({ file: filePath, classes: cached.classes })\n        updatedEntries.push({\n          file: filePath,\n          classes: cached.classes,\n          hash: cached.hash,\n          mtimeMs: stat.mtimeMs,\n          size,\n          hitCount: (cached.hitCount ?? 0) + 1,\n        })\n        continue\n      }\n\n      log.debug(`cache MISS ${filePath}`)\n      const classes = scanSource(content)\n      processResult({ file: filePath, classes })\n      updatedEntries.push({\n        file: filePath,\n        classes,\n        hash,\n        mtimeMs: stat.mtimeMs,\n        size,\n        hitCount: 1,\n      })\n    }\n\n    try {\n      writeCache(rootDir, updatedEntries, normalizedOptions.cacheDir)\n    } catch (error) {\n      log.debug(`cache write failed: ${error instanceof Error ? error.message : String(error)}`)\n    }\n\n    return parseScanWorkspaceResult({\n      files,\n      totalFiles: files.length,\n      uniqueClasses: Array.from(unique).sort(),\n    })\n  }\n\n  // Fast path: gunakan Rust batch extraction jika tersedia (parallel, tanpa GC)\n  const batchNative = nativeParserLoader.get()?.batchExtractClassesNative\n  if (batchNative) {\n    const batchResults = batchNative(candidates)\n    for (const r of batchResults ?? []) {\n      if (r.ok) processResult({ file: r.file, classes: r.classes })\n    }\n  } else {\n    for (const filePath of candidates) {\n      processResult(scanFile(filePath))\n    }\n  }\n\n  return parseScanWorkspaceResult({\n    files,\n    totalFiles: files.length,\n    uniqueClasses: Array.from(unique).sort(),\n  })\n}\n\nexport async function scanWorkspaceAsync(\n  rootDir: string,\n  options: ScanWorkspaceOptions = {}\n): Promise<ScanWorkspaceResult> {\n  const normalizedOptions = parseScanWorkspaceOptions(options)\n\n  // Large workspaces: use native parallel scanner (multiple workers + Rust rayon)\n  try {\n    return await scanWorkspaceParallel(rootDir, {\n      extensions: normalizedOptions.includeExtensions,\n      ignoreDirs: normalizedOptions.ignoreDirectories,\n    }) as ScanWorkspaceResult\n  } catch (parallelError) {\n    log.debug(\n      `parallel scan failed, retrying with single worker: ${\n        parallelError instanceof Error ? parallelError.message : String(parallelError)\n      }`\n    )\n  }\n\n  // Fallback: single worker thread (still native)\n  try {\n    return await scanWorkspaceInWorker(rootDir, normalizedOptions)\n  } catch (error) {\n    log.debug(\n      `worker scan failed, retrying with sync native scanner: ${\n        error instanceof Error ? error.message : String(error)\n      }`\n    )\n    return scanWorkspace(rootDir, normalizedOptions)\n  }\n}\nexport { extractClassesNative, batchExtractClassesNative } from \"./native-bridge\"","export * from \"@tailwind-styled/analyzer\"\n","/**\n * @tailwind-styled/analyzer v5\n *\n * Native-first async analyzer with semantic reporting.\n */\n\nimport { analyzeWorkspace, buildDistribution, collectClassCounts } from \"./analyzeWorkspace\"\nimport { classToCss, normalizeClassInput } from \"./classToCss\"\nimport {\n  parseAnalyzerOptions,\n  parseClassToCssOptions,\n  parseNativeCssCompileResult,\n  parseNativeReport,\n} from \"./schemas\"\nimport { resolveConflictGroup, splitVariantAndBase, utilityPrefix } from \"./semantic\"\n\nexport type {\n  AnalyzerOptions,\n  AnalyzerReport,\n  AnalyzerSemanticReport,\n  ClassConflict,\n  ClassToCssOptions,\n  ClassToCssResult,\n  ClassUsage,\n} from \"./types\"\n\nexport { analyzeWorkspace, classToCss }\n\n export const __internal = {\n   normalizeClassInput,\n   splitVariantAndBase,\n   resolveConflictGroup,\n   collectClassCounts,\n   buildDistribution,\n   utilityPrefix,\n   parseAnalyzerOptions,\n   parseClassToCssOptions,\n   parseNativeReport,\n   parseNativeCssCompileResult,\n }\n","import path from \"node:path\"\n\nimport type { ScanWorkspaceResult } from \"@tailwind-styled/scanner\"\nimport { scanWorkspaceAsync } from \"@tailwind-styled/scanner\"\n\nimport { requireNativeBinding } from \"./binding\"\nimport { parseAnalyzerOptions, parseNativeReport } from \"./schemas\"\nimport { buildSemanticReport } from \"./semantic\"\nimport type { AnalyzerOptions, AnalyzerReport, ClassUsage } from \"./types\"\nimport { debugLog, formatErrorMessage, sanitizeFrequentThreshold, sanitizeTopLimit } from \"./utils\"\n\nfunction normalizeScan(\n  scan: ScanWorkspaceResult,\n  includeClass?: (className: string) => boolean\n): ScanWorkspaceResult {\n  if (!includeClass) return scan\n\n  const filteredFiles = scan.files.map((file) => ({\n    file: file.file,\n    classes: file.classes.filter((className) => includeClass(className)),\n  }))\n\n  const unique = new Set<string>()\n  for (const file of filteredFiles) {\n    for (const className of file.classes) {\n      unique.add(className)\n    }\n  }\n\n  return {\n    files: filteredFiles,\n    totalFiles: scan.totalFiles,\n    uniqueClasses: Array.from(unique).sort(),\n  }\n}\n\nexport async function collectClassCounts(scan: ScanWorkspaceResult): Promise<Map<string, number>> {\n  const native = await requireNativeBinding()\n  if (!native?.collectClassCounts) {\n    throw new Error(\"FATAL: Native binding 'collectClassCounts' is required but not available.\")\n  }\n  const filesJson = JSON.stringify(\n    scan.files.map((f) => ({ file: f.file ?? \"\", classes: f.classes }))\n  )\n  const result = native.collectClassCounts(filesJson) as Array<{ name: string; count: number }>\n  const counts = new Map<string, number>()\n  for (const entry of result) counts.set(entry.name, entry.count)\n  return counts\n}\n\nfunction buildClassUsage(counts: Map<string, number>): ClassUsage[] {\n  return Array.from(counts.entries())\n    .map(([name, count]) => ({ name, count }))\n    .sort((left, right) => {\n      if (right.count !== left.count) return right.count - left.count\n      return left.name.localeCompare(right.name)\n    })\n}\n\nexport async function buildDistribution(\n  usages: ClassUsage[],\n  native?: Awaited<ReturnType<typeof requireNativeBinding>>\n): Promise<Record<string, number>> {\n  const binding = native ?? (await requireNativeBinding())\n  if (!binding?.buildDistribution) {\n    throw new Error(\"FATAL: Native binding 'buildDistribution' is required but not available.\")\n  }\n  const result = binding.buildDistribution(\n    JSON.stringify(usages.map((u) => ({ name: u.name, count: u.count })))\n  ) as { once: number; few: number; moderate: number; frequent: number }\n  return {\n    \"1\": result.once,\n    \"2-3\": result.few,\n    \"4-7\": result.moderate,\n    \"8+\": result.frequent,\n  }\n}\n\n/**\n * Analyze Tailwind class usage in a workspace and return usage statistics.\n * Set `semantic.tailwindConfigPath` to override Tailwind config lookup.\n * @example\n * const report = await analyzeWorkspace(\"./src\", {\n *   classStats: { top: 20, frequentThreshold: 2 },\n *   semantic: { tailwindConfigPath: \"tailwind.config.js\" },\n * })\n */\nexport async function analyzeWorkspace(\n  root: string,\n  options: AnalyzerOptions = {}\n): Promise<AnalyzerReport> {\n  const startedAtMs = Date.now()\n  const resolvedRoot = path.resolve(root)\n  const normalizedOptions = parseAnalyzerOptions(options)\n\n  // 1. Scan workspace - const dengan IIFE async\n  const scan = await (async () => {\n    const scanStartedAtMs = Date.now()\n    try {\n      const result = await scanWorkspaceAsync(resolvedRoot, normalizedOptions.scanner)\n      debugLog(\n        `scanWorkspaceAsync processed ${result.totalFiles} files in ${Date.now() - scanStartedAtMs}ms`\n      )\n      return result\n    } catch (error) {\n      throw new Error(\n        `Failed to scan workspace at \"${resolvedRoot}\": ${formatErrorMessage(error)}`,\n        {\n          cause: error,\n        }\n      )\n    }\n  })()\n\n  const normalizedScan = normalizeScan(scan, normalizedOptions.includeClass)\n  const topLimit = sanitizeTopLimit(normalizedOptions.classStats?.top)\n  const frequentThreshold = sanitizeFrequentThreshold(\n    normalizedOptions.classStats?.frequentThreshold\n  )\n\n  const binding = await requireNativeBinding()\n  const filesJson = JSON.stringify(\n    normalizedScan.files.map((file) => ({ file: file.file, classes: file.classes }))\n  )\n\n  // 2. Native report - const dengan IIFE\n  const nativeReport = (() => {\n    try {\n      const fn = binding.analyzeClassesWorkspace || binding.analyzeClasses\n      const report = fn(filesJson, resolvedRoot, topLimit)\n      if (!report) {\n        throw new Error(`Native analyzer returned no report for \"${resolvedRoot}\".`)\n      }\n      return parseNativeReport(report)\n    } catch (error) {\n      throw new Error(\n        `Native analyzer failed for \"${resolvedRoot}\": ${formatErrorMessage(error)}`,\n        {\n          cause: error,\n        }\n      )\n    }\n  })()\n\n  const counts = await collectClassCounts(normalizedScan)\n  const baseAll = buildClassUsage(counts)\n\n  // 3. Semantic report - const dengan IIFE async\n  const { all, semanticReport } = await (async () => {\n    if (!normalizedOptions.semantic) {\n      return { all: baseAll, semanticReport: undefined }\n    }\n\n    const semanticOption =\n      typeof normalizedOptions.semantic === \"object\" ? normalizedOptions.semantic : undefined\n    const semanticStartedAtMs = Date.now()\n\n    try {\n      const report = await buildSemanticReport(baseAll, resolvedRoot, semanticOption)\n      debugLog(`semantic report built in ${Date.now() - semanticStartedAtMs}ms`)\n\n      if (report.conflicts.length === 0) {\n        return { all: baseAll, semanticReport: report }\n      }\n\n      const conflicted = new Set(report.conflicts.flatMap((conflict) => conflict.classes))\n      const updatedAll = baseAll.map((usage) =>\n        conflicted.has(usage.name) ? { ...usage, isConflict: true } : usage\n      )\n      return { all: updatedAll, semanticReport: report }\n    } catch (error) {\n      throw new Error(\n        `Failed to build semantic report for \"${resolvedRoot}\": ${formatErrorMessage(error)}`,\n        { cause: error }\n      )\n    }\n  })()\n\n  // 4. Statistics — native-first: satu pass Rust vs 4× JS iterations\n  const classStatsNative = binding?.computeClassStats?.(\n    JSON.stringify(all),\n    topLimit,\n    frequentThreshold\n  )\n  const top: typeof all = classStatsNative ? JSON.parse(classStatsNative.topJson) : all.slice(0, topLimit)\n  const frequent: typeof all = classStatsNative ? JSON.parse(classStatsNative.frequentJson) : all.filter((usage) => usage.count >= frequentThreshold).slice(0, topLimit)\n  const unique: typeof all = classStatsNative ? JSON.parse(classStatsNative.uniqueJson) : all.filter((usage) => usage.count === 1)\n  const totalClassOccurrences: number = classStatsNative\n    ? classStatsNative.totalClassOccurrences\n    : all.reduce((sum, usage) => sum + usage.count, 0)\n\n  debugLog(\n    `analyzeWorkspace completed in ${Date.now() - startedAtMs}ms ` +\n      `(files=${normalizedScan.totalFiles}, uniqueClasses=${all.length})`\n  )\n\n  const distribution = await buildDistribution(all, binding)\n\n  return {\n    root: nativeReport.root || resolvedRoot,\n    totalFiles: nativeReport.totalFiles,\n    uniqueClassCount: all.length,\n    totalClassOccurrences,\n    classStats: {\n      all,\n      top,\n      frequent,\n      unique,\n      distribution,\n    },\n    // topClasses — alias for classStats.top (test contract & backward compat)\n    topClasses: top,\n    safelist: all.map((usage) => usage.name),\n    ...(semanticReport ? { semantic: semanticReport } : {}),\n  }\n}","import {\n  loadNativeBinding,\n  resolveNativeBindingCandidates,\n  resolveRuntimeDir,\n} from \"@tailwind-styled/shared\"\n\nimport type { NativeAnalyzerBinding, NativeCssCompilerBinding } from \"./types\"\nimport { debugLog } from \"./utils\"\n\nconst isAnalyzerModule = (module: unknown): module is NativeAnalyzerBinding => {\n  const candidate = module as Partial<NativeAnalyzerBinding> | null | undefined\n  return typeof candidate?.analyzeClasses === \"function\" || typeof candidate?.analyzeClassesWorkspace === \"function\"\n}\n\n// ─────────────────────────────────────────────────────────────────────────\n// Native Analyzer Binding - Factory Pattern (no let!)\n// ─────────────────────────────────────────────────────────────────────────\n\nconst createAnalyzerBindingLoader = () => {\n  const _state = { bindingPromise: null as Promise<NativeAnalyzerBinding | null> | null }\n\n  const getBindingPromise = (): Promise<NativeAnalyzerBinding | null> => {\n    if (_state.bindingPromise) return _state.bindingPromise\n\n    _state.bindingPromise = (async (): Promise<NativeAnalyzerBinding | null> => {\n      const runtimeDir = resolveRuntimeDir(\n        typeof __dirname === \"string\" ? __dirname : undefined,\n        import.meta.url\n      )\n      const candidates = resolveNativeBindingCandidates({\n        runtimeDir,\n        envVarNames: [\"TWS_NATIVE_PATH\"],\n      })\n\n      const { binding, loadErrors, loadedPath } = await loadNativeBinding<NativeAnalyzerBinding>({\n        runtimeDir,\n        candidates,\n        isValid: isAnalyzerModule,\n        invalidExportMessage: \"Module loaded but missing `analyzeClasses` or `analyzeClassesWorkspace` export.\",\n      })\n\n      if (binding) {\n        debugLog(`native binding loaded from: ${loadedPath}`)\n        return binding\n      }\n\n      if (loadErrors.length > 0) {\n        debugLog(\n          `native binding load failed for ${loadErrors.length} candidate(s): ${loadErrors\n            .map((entry) => `${entry.path} (${entry.message})`)\n            .join(\"; \")}`\n        )\n      } else {\n        debugLog(\"native binding not found in any candidate path\")\n      }\n\n      return null\n    })()\n\n    return _state.bindingPromise\n  }\n\n  return {\n    get: getBindingPromise,\n    reset: (): void => {\n      _state.bindingPromise = null\n    },\n  }\n}\n\nconst analyzerBindingLoader = createAnalyzerBindingLoader()\n\nexport async function getNativeBinding(): Promise<NativeAnalyzerBinding | null> {\n  return analyzerBindingLoader.get()\n}\n\nexport async function requireNativeBinding(): Promise<NativeAnalyzerBinding> {\n  const binding = await analyzerBindingLoader.get()\n  if (binding?.analyzeClasses) return binding\n\n  // Untuk error reporting, kita perlu akses ke candidates dan loadErrors\n  // Tapi karena async, kita perlu load ulang atau simpan state\n  const runtimeDir = resolveRuntimeDir(\n    typeof __dirname === \"string\" ? __dirname : undefined,\n    import.meta.url\n  )\n  const candidates = resolveNativeBindingCandidates({\n    runtimeDir,\n    envVarNames: [\"TWS_NATIVE_PATH\"],\n  })\n\n  const { loadErrors } = await loadNativeBinding<NativeAnalyzerBinding>({\n    runtimeDir,\n    candidates,\n    isValid: isAnalyzerModule,\n    invalidExportMessage: \"Module loaded but missing `analyzeClasses` or `analyzeClassesWorkspace` export.\",\n  })\n\n  const lines = [\n    \"Native analyzer binding not found. Ensure `tailwind_styled_parser.node` is built.\",\n  ]\n\n  lines.push(\"Checked paths:\")\n  for (const candidate of candidates) lines.push(`- ${candidate}`)\n  if (loadErrors.length > 0) {\n    lines.push(\"Load errors:\")\n    for (const failure of loadErrors) {\n      lines.push(`- ${failure.path}: ${failure.message}`)\n    }\n  }\n\n  throw new Error(lines.join(\"\\n\"))\n}\n\nexport async function requireNativeCssCompiler(): Promise<NativeCssCompilerBinding> {\n  const binding = await requireNativeBinding()\n  if (typeof binding.compileCss === \"function\") return binding as NativeCssCompilerBinding\n\n  throw new Error(`Native analyzer compileCss binding is missing.`)\n}\n","import fs from \"node:fs\"\nimport { createDebugLogger } from \"@tailwind-styled/shared\"\n\nexport const DEFAULT_TOP_LIMIT = 10\nexport const DEFAULT_FREQUENT_THRESHOLD = 2\nexport const DEBUG_NAMESPACE = \"tailwind-styled:analyzer\"\n\nexport function formatErrorMessage(error: unknown): string {\n  return error instanceof Error ? error.message : String(error)\n}\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n  if (!value || typeof value !== \"object\" || Array.isArray(value)) return false\n  const proto = Object.getPrototypeOf(value)\n  return proto === Object.prototype || proto === null\n}\n\nexport async function pathExists(filePath: string): Promise<boolean> {\n  try {\n    await fs.promises.access(filePath, fs.constants.F_OK)\n    return true\n  } catch {\n    return false\n  }\n}\n\nexport const debugLog = createDebugLogger(DEBUG_NAMESPACE, \"tailwind-styled/analyzer\")\n\nexport function sanitizeTopLimit(value: number | undefined): number {\n  if (!Number.isFinite(value)) return DEFAULT_TOP_LIMIT\n  return Math.max(1, Math.trunc(value as number))\n}\n\nexport function sanitizeFrequentThreshold(value: number | undefined): number {\n  if (!Number.isFinite(value)) return DEFAULT_FREQUENT_THRESHOLD\n  return Math.max(1, Math.trunc(value as number))\n}\n","import { TwError } from \"@tailwind-styled/shared\"\nimport type { ScanWorkspaceOptions } from \"@tailwind-styled/scanner\"\nimport { z } from \"zod\"\n\nconst formatIssuePath = (path: readonly PropertyKey[]): string =>\n  path.length > 0\n    ? path\n        .map((segment) =>\n          typeof segment === \"symbol\" ? segment.description ?? segment.toString() : String(segment)\n        )\n        .join(\".\")\n    : \"<root>\"\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> => {\n  if (!value || typeof value !== \"object\" || Array.isArray(value)) return false\n  const proto = Object.getPrototypeOf(value)\n  return proto === Object.prototype || proto === null\n}\n\nconst formatIssues = (error: z.ZodError): string =>\n  error.issues\n    .map((issue) => {\n      const path = formatIssuePath(issue.path)\n      return `${path}: ${issue.message}`\n    })\n    .join(\"; \")\n\nconst parseWithSchema = <T>(schema: z.ZodType<T>, data: unknown, label: string): T => {\n  const parsed = schema.safeParse(data)\n  if (parsed.success) return parsed.data\n  const details = formatIssues(parsed.error)\n  throw new TwError(\n    \"validation\",\n    \"SCHEMA_VALIDATION_FAILED\",\n    details ? `${label}: ${details}` : label,\n    parsed.error\n  )\n}\n\nconst CountSchema = z.number().int().min(0)\n\nexport const ClassUsageSchema = z.object({\n  name: z.string(),\n  count: CountSchema,\n  isUnused: z.boolean().optional(),\n  isConflict: z.boolean().optional(),\n})\n\nexport const ClassConflictSchema = z.object({\n  className: z.string(),\n  variants: z.array(z.string()),\n  classes: z.array(z.string()),\n  message: z.string(),\n})\n\nconst ClassCountSchema = z.object({\n  name: z.string(),\n  count: CountSchema,\n})\n\nexport const NativeReportSchema = z.object({\n  root: z.string(),\n  totalFiles: CountSchema,\n  uniqueClassCount: CountSchema,\n  totalClassOccurrences: CountSchema,\n  topClasses: z.array(ClassCountSchema),\n  duplicateCandidates: z.array(ClassCountSchema),\n  safelist: z.array(z.string()),\n})\n\nexport const NativeCssCompileResultSchema = z.object({\n  css: z.string(),\n  resolvedClasses: z.array(z.string()),\n  unknownClasses: z.array(z.string()),\n  sizeBytes: CountSchema,\n})\n\nconst AnalyzerClassStatsSchema = z.object({\n  top: z\n    .number({\n      error: \"analyzeWorkspace options.classStats.top must be a number when provided.\",\n    })\n    .finite()\n    .optional(),\n  frequentThreshold: z\n    .number({\n      error:\n        \"analyzeWorkspace options.classStats.frequentThreshold must be a number when provided.\",\n    })\n    .finite()\n    .optional(),\n})\n\nconst AnalyzerSemanticOptionsSchema = z.object({\n  tailwindConfigPath: z\n    .string({\n      error:\n        \"analyzeWorkspace options.semantic.tailwindConfigPath must be a non-empty string when provided.\",\n    })\n    .min(\n      1,\n      \"analyzeWorkspace options.semantic.tailwindConfigPath must be a non-empty string when provided.\"\n    )\n    .optional(),\n})\n\nexport const AnalyzerOptionsSchema = z.object({\n  scanner: z\n    .custom<ScanWorkspaceOptions>(\n      (value) => isPlainObject(value),\n      \"analyzeWorkspace options.scanner must be an object when provided.\"\n    )\n    .optional(),\n  classStats: AnalyzerClassStatsSchema.optional(),\n  semantic: z\n    .union([\n      z.boolean({\n        error: \"analyzeWorkspace options.semantic must be a boolean or an object when provided.\",\n      }),\n      AnalyzerSemanticOptionsSchema,\n    ])\n    .optional(),\n  includeClass: z\n    .custom<(className: string) => boolean>(\n      (value) => typeof value === \"function\",\n      \"analyzeWorkspace options.includeClass must be a function when provided.\"\n    )\n    .optional(),\n})\n\nexport const ClassToCssOptionsSchema = z.object({\n  prefix: z\n    .union([z.string(), z.null()], {\n      error: \"classToCss options.prefix must be a string or null when provided.\",\n    })\n    .optional(),\n  strict: z\n    .boolean({\n      error: \"classToCss options.strict must be a boolean when provided.\",\n    })\n    .optional(),\n})\n\nexport const parseAnalyzerOptions = (options: unknown) =>\n  parseWithSchema(AnalyzerOptionsSchema, options ?? {}, \"analyzeWorkspace options are invalid\")\n\nexport const parseNativeReport = (report: unknown) =>\n  parseWithSchema(NativeReportSchema, report, \"Native analyzer report is invalid\")\n\nexport const parseNativeCssCompileResult = (result: unknown, className?: string) =>\n  parseWithSchema(\n    NativeCssCompileResultSchema,\n    result,\n    className\n      ? `Native CSS compile result is invalid for class \"${className}\"`\n      : \"Native CSS compile result is invalid\"\n  )\n\nexport const parseClassToCssOptions = (options: unknown) =>\n  parseWithSchema(ClassToCssOptionsSchema, options ?? {}, \"classToCss options are invalid\")\n","import fs from \"node:fs\"\nimport path from \"node:path\"\nimport { pathToFileURL } from \"node:url\"\n\nimport type {\n  AnalyzerSemanticReport,\n  ClassConflict,\n  ClassUsage,\n  LoadedTailwindConfig,\n  TailwindConfigCacheEntry,\n} from \"./types\"\nimport { getNativeBinding } from \"./binding\"\nimport { debugLog, formatErrorMessage, isRecord, pathExists } from \"./utils\"\n\n\nconst SUPPORTED_TAILWIND_CONFIG_EXTENSIONS = new Set([\".ts\", \".js\", \".cjs\", \".mjs\"])\n\nconst tailwindConfigCache = new Map<string, TailwindConfigCacheEntry>()\n\nexport const splitVariantAndBase = (className: string): { variantKey: string; base: string } => {\n  const parts = className.split(\":\")\n  if (parts.length <= 1) return { variantKey: \"\", base: className }\n  const base = parts.pop() ?? className\n  return { variantKey: parts.join(\":\"), base }\n}\n\n/**\n * resolveConflictGroup — delegates ke Rust `resolve_conflict_group`.\n * Return: string | null — null jika tidak ada conflict group.\n */\nexport const resolveConflictGroup = async (base: string): Promise<string | null> => {\n  const native = await getNativeBinding()\n  if (!native?.resolveConflictGroup) {\n    throw new Error(\"Native binding 'resolveConflictGroup' is required but not available.\")\n  }\n  const result = native.resolveConflictGroup(base) as string\n  return result.length > 0 ? result : null\n}\n\nconst detectConflicts = async (\n  usages: ClassUsage[]\n): Promise<{\n  conflicts: ClassConflict[]\n  conflictedClassNames: Set<string>\n}> => {\n  // Native-first: Rust HashSet conflict detection (required)\n  const native = await getNativeBinding()\n  if (!native?.detectClassConflicts) {\n    throw new Error(\"FATAL: Native binding 'detectClassConflicts' is required but not available.\")\n  }\n  const result = native.detectClassConflicts(JSON.stringify(usages.map((u) => ({ name: u.name, count: u.count }))))\n  return {\n    conflicts: result.conflicts.map((c) => ({\n      className: c.group,\n      variants: c.variantKey.length > 0 ? c.variantKey.split(\":\") : [],\n      classes: c.classes,\n      message: c.message,\n    })),\n    conflictedClassNames: new Set(result.conflictedClassNames),\n  }\n}\n\nconst isSupportedTailwindConfigPath = (configPath: string): boolean => {\n  return SUPPORTED_TAILWIND_CONFIG_EXTENSIONS.has(path.extname(configPath).toLowerCase())\n}\n\nconst resolveTailwindConfigPath = async (\n  root: string,\n  explicitPath?: string\n): Promise<string | null> => {\n  if (explicitPath) {\n    const resolved = path.resolve(root, explicitPath)\n    if (!(await pathExists(resolved))) return null\n    return resolved\n  }\n\n  const candidates = [\n    \"tailwind.config.ts\",\n    \"tailwind.config.js\",\n    \"tailwind.config.cjs\",\n    \"tailwind.config.mjs\",\n  ]\n\n  for (const candidate of candidates) {\n    const fullPath = path.resolve(root, candidate)\n    if (await pathExists(fullPath)) return fullPath\n  }\n\n  return null\n}\n\nconst collectSafelistFromConfig = (config: Record<string, unknown>): string[] => {\n  const raw = config.safelist\n  if (!Array.isArray(raw)) return []\n\n  const out = new Set<string>()\n  for (const entry of raw) {\n    if (typeof entry === \"string\" && entry.length > 0) {\n      out.add(entry)\n      continue\n    }\n    if (!entry || typeof entry !== \"object\") continue\n    const pattern = (entry as Record<string, unknown>).pattern\n    if (typeof pattern === \"string\" && pattern.length > 0) {\n      out.add(pattern)\n    }\n  }\n\n  return Array.from(out)\n}\n\nconst collectCustomUtilities = (config: Record<string, unknown>): Set<string> => {\n  const out = new Set<string>()\n  const theme = config.theme\n  if (!theme || typeof theme !== \"object\") return out\n\n  const extend = (theme as Record<string, unknown>).extend\n  if (!extend || typeof extend !== \"object\") return out\n\n  for (const [section, value] of Object.entries(extend as Record<string, unknown>)) {\n    if (!value || typeof value !== \"object\" || Array.isArray(value)) continue\n    for (const key of Object.keys(value as Record<string, unknown>)) {\n      out.add(`${section}-${key}`)\n      if (section === \"colors\") {\n        out.add(`bg-${key}`)\n        out.add(`text-${key}`)\n        out.add(`border-${key}`)\n      } else if (section === \"spacing\") {\n        out.add(`p-${key}`)\n        out.add(`m-${key}`)\n        out.add(`gap-${key}`)\n        out.add(`w-${key}`)\n        out.add(`h-${key}`)\n      } else if (section === \"fontSize\") {\n        out.add(`text-${key}`)\n      } else if (section === \"borderRadius\") {\n        out.add(`rounded-${key}`)\n      } else if (section === \"boxShadow\") {\n        out.add(`shadow-${key}`)\n      }\n    }\n  }\n\n  return out\n}\n\nconst collectSafelistFromSource = async (configPath: string): Promise<string[]> => {\n  const source = await fs.promises.readFile(configPath, \"utf8\")\n\n  // Gunakan native AST parser untuk ekstrak string literals dari config\n  // Lebih akurat dari regex — handle template literals, multiline, nested quotes\n  const { extractClassesNative } = await import(\"@tailwind-styled/scanner\")\n  const allTokens = extractClassesNative(source)\n\n  // Filter hanya token yang berasal dari safelist block\n  // Native parse sudah return semua string value — kita cek apakah safelist array ada di source\n  const hasSafelist = source.includes(\"safelist\")\n  if (!hasSafelist) return []\n\n  // Ambil baris-baris safelist dari source untuk batasi scope\n  const safelistMatch = source.match(/safelist\\s*:\\s*\\[([\\s\\S]*?)\\]/m)?.[1]\n  if (!safelistMatch) return []\n\n  // Cross-reference: hanya return token yang muncul di dalam safelist block\n  const safelistSet = new Set<string>()\n  for (const token of safelistMatch.matchAll(/[\"'`]([^\"'`]+)[\"'`]/g)) {\n    const value = token[1].trim()\n    if (value.length > 0) safelistSet.add(value)\n  }\n\n  // Intersect dengan native extracted tokens untuk validasi\n  return allTokens.filter((t: string) => safelistSet.has(t))\n}\n\nconst loadTailwindConfig = async (\n  root: string,\n  semanticOption?: { tailwindConfigPath?: string }\n): Promise<LoadedTailwindConfig | null> => {\n  const startMs = Date.now()\n  const configPath = await resolveTailwindConfigPath(root, semanticOption?.tailwindConfigPath)\n  if (!configPath) return null\n\n  if (!isSupportedTailwindConfigPath(configPath)) {\n    return {\n      path: configPath,\n      loaded: false,\n      warning: `Unsupported Tailwind config extension at \"${configPath}\". Supported extensions: .ts, .js, .cjs, .mjs.`,\n      safelist: new Set<string>(),\n      customUtilities: new Set<string>(),\n    }\n  }\n\n  const configStat = await fs.promises.stat(configPath).catch(() => null)\n  if (configStat) {\n    const cached = tailwindConfigCache.get(configPath)\n    if (cached && cached.mtimeMs === configStat.mtimeMs && cached.size === configStat.size) {\n      debugLog(\n        `tailwind config cache hit: ${configPath} (${cached.config.safelist.size} safelist entries)`\n      )\n      return cached.config\n    }\n  }\n\n  const result = await (async (): Promise<{\n    config: Record<string, unknown> | null\n    warning: string | undefined\n  }> => {\n    try {\n      const cacheBustToken = Math.trunc(configStat?.mtimeMs ?? Date.now())\n      const imported = await import(`${pathToFileURL(configPath).href}?tws_mtime=${cacheBustToken}`)\n      const candidate = (imported.default ?? imported) as unknown\n      if (isRecord(candidate)) {\n        return { config: candidate, warning: undefined }\n      } else if (typeof candidate === \"function\") {\n        const evaluated = candidate()\n        if (isRecord(evaluated)) {\n          return { config: evaluated, warning: undefined }\n        }\n        return { config: null, warning: \"Tailwind config export function must return an object.\" }\n      }\n      return {\n        config: null,\n        warning: \"Tailwind config export must be an object or a function returning an object.\",\n      }\n    } catch (error) {\n      return { config: null, warning: formatErrorMessage(error) }\n    }\n  })()\n\n  const { config, warning } = result\n\n  const safelist = new Set<string>()\n  const customUtilities = new Set<string>()\n\n  if (config) {\n    for (const item of collectSafelistFromConfig(config)) safelist.add(item)\n    for (const item of collectCustomUtilities(config)) customUtilities.add(item)\n  }\n\n  if (safelist.size === 0) {\n    try {\n      for (const item of await collectSafelistFromSource(configPath)) safelist.add(item)\n    } catch (error) {\n      debugLog(\n        `failed to parse safelist from source at \"${configPath}\": ${formatErrorMessage(error)}`\n      )\n      // keep empty if source parsing fails\n    }\n  }\n\n  const loaded = {\n    path: configPath,\n    loaded: config !== null,\n    warning,\n    safelist,\n    customUtilities,\n  }\n\n  if (configStat) {\n    tailwindConfigCache.set(configPath, {\n      mtimeMs: configStat.mtimeMs,\n      size: configStat.size,\n      config: loaded,\n    })\n  }\n\n  debugLog(\n    `tailwind config loaded from \"${configPath}\" in ${Date.now() - startMs}ms ` +\n      `(loaded=${loaded.loaded}, safelist=${loaded.safelist.size}, custom=${loaded.customUtilities.size})`\n  )\n\n    return loaded\n  }\n\nexport const utilityPrefix = (baseClass: string): string => {\n  const normalized = baseClass.startsWith(\"-\") ? baseClass.slice(1) : baseClass\n  if (normalized.includes(\"[\") && normalized.includes(\"]\")) return \"arbitrary\"\n  if (normalized.startsWith(\"min-w-\")) return \"min-w\"\n  if (normalized.startsWith(\"max-w-\")) return \"max-w\"\n  if (normalized.startsWith(\"min-h-\")) return \"min-h\"\n  if (normalized.startsWith(\"max-h-\")) return \"max-h\"\n  if (normalized.startsWith(\"space-x-\")) return \"space-x\"\n  if (normalized.startsWith(\"space-y-\")) return \"space-y\"\n  if (normalized.startsWith(\"inline-\")) return \"inline\"\n  if (normalized.startsWith(\"border-\")) return \"border\"\n  if (normalized.startsWith(\"text-\")) return \"text\"\n  if (normalized.startsWith(\"bg-\")) return \"bg\"\n  if (normalized.startsWith(\"rounded\")) return \"rounded\"\n  if (normalized.startsWith(\"shadow\")) return \"shadow\"\n  const hyphen = normalized.indexOf(\"-\")\n  if (hyphen < 0) return normalized\n  return normalized.slice(0, hyphen)\n}\n\nexport const buildSemanticReport = async (\n  usages: ClassUsage[],\n  root: string,\n  semanticOption?: { tailwindConfigPath?: string }\n): Promise<AnalyzerSemanticReport> => {\n  const loadedConfig = await loadTailwindConfig(root, semanticOption)\n  const safelist = loadedConfig?.safelist ?? new Set<string>()\n  const customUtilities = loadedConfig?.customUtilities ?? new Set<string>()\n  const usageNames = new Set(usages.map((usage) => usage.name))\n\n  const unusedClasses: ClassUsage[] = Array.from(safelist)\n    .filter((className) => !usageNames.has(className))\n    .sort()\n    .map((className) => ({ name: className, count: 0, isUnused: true }))\n\n   // ── Unknown classes — native-first (required) ─────────────────────────────\n   const native = await getNativeBinding()\n   if (!native?.classifyKnownClasses) {\n     throw new Error(\"FATAL: Native binding 'classifyKnownClasses' is required but not available.\")\n   }\n   const classNames = usages.map((u) => u.name)\n   const results = native.classifyKnownClasses(\n     classNames,\n     Array.from(safelist),\n     Array.from(customUtilities)\n   )\n    const unknownSet = new Set(\n      results\n        .filter((r: { className: string; isKnown: boolean }) => !r.isKnown)\n        .map((r: { className: string; isKnown: boolean }) => r.className)\n    )\n    const unknownClasses = usages\n      .filter((usage) => unknownSet.has(usage.name))\n      .map((usage) => ({ ...usage, isUnused: true }))\n\n  const { conflicts } = await detectConflicts(usages)\n\n  return {\n    unusedClasses,\n    unknownClasses,\n    conflicts,\n    ...(loadedConfig\n      ? {\n          tailwindConfig: {\n            path: loadedConfig.path,\n            loaded: loadedConfig.loaded,\n            safelistCount: loadedConfig.safelist.size,\n            customUtilityCount: loadedConfig.customUtilities.size,\n            ...(loadedConfig.warning ? { warning: loadedConfig.warning } : {}),\n          },\n        }\n      : {}),\n  }\n}","import { requireNativeCssCompiler } from \"./binding\"\nimport { parseClassToCssOptions, parseNativeCssCompileResult } from \"./schemas\"\nimport type { ClassToCssOptions, ClassToCssResult } from \"./types\"\nimport { formatErrorMessage } from \"./utils\"\n\nexport const normalizeClassInput = (input: string | string[], binding: { normalizeClassInput?: (s: string) => string[] }): string[] => {\n  if (typeof input === \"string\") {\n    if (!binding.normalizeClassInput) {\n      throw new Error(\"FATAL: Native binding 'normalizeClassInput' is required but not available.\")\n    }\n    return binding.normalizeClassInput(input)\n  }\n\n  if (!Array.isArray(input)) {\n    throw new TypeError(\"classToCss input must be a string or an array of strings.\")\n  }\n\n  const out: string[] = []\n  for (const item of input) {\n    if (typeof item !== \"string\") {\n      throw new TypeError(\"classToCss input array must contain only strings.\")\n    }\n    const value = item.trim()\n    if (value.length > 0) out.push(value)\n  }\n  return out\n}\n\nconst normalizeClassToCssOptions = (\n  options: ClassToCssOptions\n): {\n  prefix: string | null\n  strict: boolean\n} => {\n  const parsed = parseClassToCssOptions(options)\n  const strict = parsed.strict ?? false\n  const prefix = parsed.prefix ?? null\n\n  return { prefix, strict }\n}\n\nconst mergeDeclarationMap = (\n  target: Map<string, string>,\n  css: string,\n  binding: { parseCssRules?: (css: string) => Array<{ property: string; value: string; isImportant: boolean }> }\n): void => {\n  if (!binding.parseCssRules) {\n    throw new Error(\"FATAL: Native binding 'parseCssRules' is required but not available.\")\n  }\n  const rules = binding.parseCssRules(css)\n  for (const rule of rules) {\n    if (target.has(rule.property)) target.delete(rule.property)\n    target.set(rule.property, rule.isImportant ? `${rule.value} !important` : rule.value)\n  }\n}\n\nconst declarationMapToString = (\n  declarationMap: Map<string, string>,\n  binding: { declarationMapToString?: (entries: Array<{ property: string; value: string }>) => string }\n): string => {\n  if (!binding.declarationMapToString) {\n    throw new Error(\"FATAL: Native binding 'declarationMapToString' is required but not available.\")\n  }\n  const entries = Array.from(declarationMap.entries()).map(([property, value]) => ({ property, value }))\n  return binding.declarationMapToString(entries)\n}\n\n/**\n * Convert Tailwind class input into atomic CSS output via native binding.\n * @example\n * const css = await classToCss(\"opacity-0 translate-y-2\", { strict: true })\n */\nexport const classToCss = async (\n  input: string | string[],\n  options: ClassToCssOptions = {}\n): Promise<ClassToCssResult> => {\n  const binding = await requireNativeCssCompiler()\n  const inputClasses = normalizeClassInput(input, binding)\n  const normalizedOptions = normalizeClassToCssOptions(options)\n\n  if (inputClasses.length === 0) {\n    return {\n      inputClasses: [],\n      css: \"\",\n      declarations: \"\",\n      resolvedClasses: [],\n      unknownClasses: [],\n      sizeBytes: 0,\n    }\n  }\n\n  const prefix = normalizedOptions.prefix\n\n  const results = await Promise.all(\n    inputClasses.map(async (className) => {\n      const compiled = (() => {\n        try {\n          return binding.compileCss([className], prefix)\n        } catch (error) {\n          throw new Error(\n            `Native analyzer failed while compiling class \"${className}\": ${formatErrorMessage(error)}`,\n            { cause: error }\n          )\n        }\n      })()\n\n      if (!compiled) {\n        throw new Error(`Native analyzer returned no result for class \"${className}\".`)\n      }\n\n      const validated = parseNativeCssCompileResult(compiled, className)\n\n      return {\n        className,\n        css: validated.css,\n        resolvedClasses: validated.resolvedClasses,\n        unknownClasses: validated.unknownClasses,\n        sizeBytes: validated.sizeBytes,\n      }\n    })\n  )\n\n  const cssChunks = results.map((r) => r.css)\n  const resolvedClasses = results.flatMap((r) => r.resolvedClasses)\n  const unknownClasses = results.flatMap((r) => r.unknownClasses)\n  const sizeBytes = results.reduce((sum, r) => sum + r.sizeBytes, 0)\n\n  const declarationMap = new Map<string, string>()\n  for (const result of results) {\n    mergeDeclarationMap(declarationMap, result.css, binding)\n  }\n\n  const uniqueUnknown = Array.from(new Set(unknownClasses))\n  if (normalizedOptions.strict && uniqueUnknown.length > 0) {\n    throw new Error(`Unknown Tailwind classes: ${uniqueUnknown.join(\", \")}`)\n  }\n\n  return {\n    inputClasses,\n    css: cssChunks.filter((chunk) => chunk.length > 0).join(\"\\n\"),\n    declarations: declarationMapToString(declarationMap, binding),\n    resolvedClasses: Array.from(new Set(resolvedClasses)),\n    unknownClasses: uniqueUnknown,\n    sizeBytes,\n  }\n}"],"mappings":"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","names":["path","fileURLToPath","path","fileURLToPath","getDirname","scannerGetBinding","fs","path","path","fileURLToPath","init_src","formatIssuePath","path","isScannableFile","fs","createRequire","path","fileURLToPath","Worker","scanFileNative","scanWorkspaceNative","log","init_src","init_src","path","fs","z","formatIssuePath","path","formatIssues","parseWithSchema","fs","path","path","fs","extractClassesNative","path"]}