tailwind-styled-v4 5.0.10 → 5.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +245 -373
- package/dist/analyzer.js +75 -22
- package/dist/analyzer.js.map +1 -1
- package/dist/analyzer.mjs +74 -21
- package/dist/analyzer.mjs.map +1 -1
- package/dist/animate.js +4 -2
- package/dist/animate.js.map +1 -1
- package/dist/animate.mjs +4 -2
- package/dist/animate.mjs.map +1 -1
- package/dist/atomic.js +20 -5
- package/dist/atomic.js.map +1 -1
- package/dist/atomic.mjs +20 -5
- package/dist/atomic.mjs.map +1 -1
- package/dist/cli.js +174 -67
- package/dist/cli.js.map +1 -1
- package/dist/cli.mjs +171 -64
- package/dist/cli.mjs.map +1 -1
- package/dist/compiler.d.mts +7 -1
- package/dist/compiler.d.ts +7 -1
- package/dist/compiler.js +53 -27
- package/dist/compiler.js.map +1 -1
- package/dist/compiler.mjs +53 -27
- package/dist/compiler.mjs.map +1 -1
- package/dist/devtools.js.map +1 -1
- package/dist/devtools.mjs.map +1 -1
- package/dist/engine.js +159 -61
- package/dist/engine.js.map +1 -1
- package/dist/engine.mjs +159 -61
- package/dist/engine.mjs.map +1 -1
- package/dist/index.browser.mjs +1512 -0
- package/dist/index.browser.mjs.map +1 -0
- package/dist/index.d.mts +94 -12
- package/dist/index.d.ts +94 -12
- package/dist/index.js +436 -106
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +436 -106
- package/dist/index.mjs.map +1 -1
- package/dist/next.js +1946 -47
- package/dist/next.js.map +1 -1
- package/dist/next.mjs +1929 -44
- package/dist/next.mjs.map +1 -1
- package/dist/plugin-api.js.map +1 -1
- package/dist/plugin-api.mjs.map +1 -1
- package/dist/plugin-registry.js +23 -10
- package/dist/plugin-registry.js.map +1 -1
- package/dist/plugin-registry.mjs +23 -11
- package/dist/plugin-registry.mjs.map +1 -1
- package/dist/plugin.js.map +1 -1
- package/dist/plugin.mjs.map +1 -1
- package/dist/rspack.js.map +1 -1
- package/dist/rspack.mjs.map +1 -1
- package/dist/scanner.js +72 -19
- package/dist/scanner.js.map +1 -1
- package/dist/scanner.mjs +71 -18
- package/dist/scanner.mjs.map +1 -1
- package/dist/shared.js +32 -15
- package/dist/shared.js.map +1 -1
- package/dist/shared.mjs +32 -15
- package/dist/shared.mjs.map +1 -1
- package/dist/svelte.js +38 -12
- package/dist/svelte.js.map +1 -1
- package/dist/svelte.mjs +38 -12
- package/dist/svelte.mjs.map +1 -1
- package/dist/syntax.js +17 -5
- package/dist/syntax.js.map +1 -1
- package/dist/syntax.mjs +17 -5
- package/dist/syntax.mjs.map +1 -1
- package/dist/theme.js +4 -2
- package/dist/theme.js.map +1 -1
- package/dist/theme.mjs +4 -2
- package/dist/theme.mjs.map +1 -1
- package/dist/turbopackLoader.js +87 -33
- package/dist/turbopackLoader.js.map +1 -1
- package/dist/turbopackLoader.mjs +87 -33
- package/dist/turbopackLoader.mjs.map +1 -1
- package/dist/tw.js +174 -67
- package/dist/tw.js.map +1 -1
- package/dist/tw.mjs +171 -64
- package/dist/tw.mjs.map +1 -1
- package/dist/vite.js +145 -63
- package/dist/vite.js.map +1 -1
- package/dist/vite.mjs +145 -63
- package/dist/vite.mjs.map +1 -1
- package/dist/vue.js +38 -12
- package/dist/vue.js.map +1 -1
- package/dist/vue.mjs +38 -12
- package/dist/vue.mjs.map +1 -1
- package/dist/webpackLoader.js +20 -5
- package/dist/webpackLoader.js.map +1 -1
- package/dist/webpackLoader.mjs +20 -5
- package/dist/webpackLoader.mjs.map +1 -1
- package/native/tailwind-styled-native.node +0 -0
- package/package.json +29 -24
package/dist/next.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../packages/presentation/next/src/schemas.ts","../packages/domain/shared/src/workerResolver.ts","../packages/domain/shared/src/index.ts","../packages/presentation/next/src/withTailwindStyled.ts"],"names":["path","getDirnameFromUrl","lastSlash","require","createRequire","resolveLoaderPath","fs"],"mappings":"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","file":"next.mjs","sourcesContent":["import { z } from \"zod\"\r\n\r\nconst formatIssues = (error: z.ZodError): string =>\r\n error.issues\r\n .map((issue) => {\r\n const p = issue.path.length > 0 ? issue.path.join(\".\") : \"<root>\"\r\n return `${p}: ${issue.message}`\r\n })\r\n .join(\"; \")\r\n\r\nconst parseWithSchema = <T>(schema: z.ZodType<T>, data: unknown, label: string): T => {\r\n const parsed = schema.safeParse(data)\r\n if (parsed.success) return parsed.data\r\n throw new TypeError(`${label}: ${formatIssues(parsed.error)}`)\r\n}\r\n\r\nexport const NextAdapterOptionsSchema = z.object({\r\n mode: z.literal(\"zero-runtime\").optional(),\r\n autoClientBoundary: z.boolean().optional(),\r\n addDataAttr: z.boolean().optional(),\r\n hoist: z.boolean().optional(),\r\n routeCss: z.boolean().optional(),\r\n incremental: z.boolean().optional(),\r\n verbose: z.boolean().optional(),\r\n include: z.instanceof(RegExp).optional(),\r\n exclude: z.instanceof(RegExp).optional(),\r\n})\r\n\r\nexport type NextAdapterOptionsInput = z.infer<typeof NextAdapterOptionsSchema>\r\n\r\nexport const parseNextAdapterOptions = (options: unknown) =>\r\n parseWithSchema(NextAdapterOptionsSchema, options ?? {}, \"next adapter options are invalid\")\r\n","/**\r\n * Worker/bootstrap path resolution untuk artifact release safety.\r\n * Dari monorepo checklist: \"Perkuat worker/bootstrap path agar artifact release aman\"\r\n *\r\n * Masalah: path ke worker/loader script bisa berbeda antara:\r\n * - Development (src/*.ts)\r\n * - Built dist (dist/*.js / dist/*.cjs)\r\n * - Packed npm artifact (dist/ saja, tanpa src/)\r\n *\r\n * Solusi: resolve path secara hierarchical dengan fallback yang eksplisit.\r\n */\r\n\r\nconst isBrowser = typeof window !== \"undefined\" || typeof document !== \"undefined\"\r\n\r\nconst NODE_URL = typeof window === \"undefined\" || typeof document === \"undefined\" ? \"node:url\" : null\r\nconst NODE_FS = typeof window === \"undefined\" || typeof document === \"undefined\" ? \"node:fs\" : null\r\nconst NODE_PATH = typeof window === \"undefined\" || typeof document === \"undefined\" ? \"node:path\" : null\r\n\r\nfunction getDirnameFromUrl(importMetaUrl: string): string {\r\n if (!importMetaUrl) return \"\"\r\n if (isBrowser) return \"\"\r\n\r\n try {\r\n const nodeUrl = require(NODE_URL!)\r\n const nodePath = require(NODE_PATH!)\r\n // fileURLToPath returns the file path — we need the directory\r\n return nodePath.dirname(nodeUrl.fileURLToPath(importMetaUrl))\r\n } catch {\r\n if (importMetaUrl.startsWith(\"file://\")) {\r\n const filePath = importMetaUrl.slice(7)\r\n // strip the filename to get the directory\r\n const lastSlash = filePath.lastIndexOf(\"/\")\r\n return lastSlash >= 0 ? filePath.slice(0, lastSlash) : filePath\r\n }\r\n return \"\"\r\n }\r\n}\r\n\r\nfunction resolvePath(...segments: string[]): string {\r\n if (isBrowser) return segments.join(\"/\").replace(/\\/+/g, \"/\")\r\n try {\r\n const nodePath = require(NODE_PATH!)\r\n return nodePath.resolve(...segments)\r\n } catch {\r\n return segments.join(\"/\").replace(/\\/+/g, \"/\")\r\n }\r\n}\r\n\r\nfunction existsSync(path: string): boolean {\r\n if (isBrowser) return false\r\n try {\r\n const nodeFs = require(NODE_FS!)\r\n return nodeFs.existsSync(path)\r\n } catch {\r\n return false\r\n }\r\n}\r\n\r\nexport interface WorkerPathOptions {\r\n /** Nama file worker tanpa extension */\r\n basename: string\r\n /** Import meta URL dari caller module */\r\n importMetaUrl: string\r\n /** Extensions yang dicoba secara urutan (default: [\".cjs\", \".js\", \".mjs\"]) */\r\n extensions?: string[]\r\n /** Sub-directories relatif dari runtimeDir yang dicoba */\r\n subdirs?: string[]\r\n /** Throw jika tidak ditemukan (default: true) */\r\n required?: boolean\r\n}\r\n\r\nexport interface WorkerPathResult {\r\n /** Absolute path ke worker file */\r\n path: string\r\n /** Extension yang ditemukan */\r\n extension: string\r\n /** Apakah ini dari CJS atau ESM artifact */\r\n format: \"cjs\" | \"esm\"\r\n}\r\n\r\n/**\r\n * Resolve worker/loader script path yang aman untuk release artifacts.\r\n *\r\n * Prioritas:\r\n * 1. CJS (.cjs) — untuk Node.js workers yang butuh require()\r\n * 2. JS (.js) — bundled output\r\n * 3. MJS (.mjs) — explicit ESM\r\n *\r\n * @example\r\n * const workerPath = resolveWorkerPath({\r\n * basename: \"scanner-worker\",\r\n * importMetaUrl: import.meta.url,\r\n * })\r\n * // → \"/path/to/dist/scanner-worker.cjs\"\r\n */\r\nexport function resolveWorkerPath(opts: WorkerPathOptions): WorkerPathResult {\r\n if (isBrowser) {\r\n throw new Error(\"Worker resolution not available in browser\")\r\n }\r\n\r\n const {\r\n basename,\r\n importMetaUrl,\r\n extensions = [\".cjs\", \".js\", \".mjs\"],\r\n subdirs = [\".\", \"workers\", \"lib\"],\r\n required = true,\r\n } = opts\r\n\r\n const runtimeDir = getDirnameFromUrl(importMetaUrl)\r\n\r\n // Try each subdir + extension combination\r\n for (const subdir of subdirs) {\r\n for (const ext of extensions) {\r\n const candidate = resolvePath(runtimeDir, subdir, `${basename}${ext}`)\r\n if (existsSync(candidate)) {\r\n return {\r\n path: candidate,\r\n extension: ext,\r\n format: ext === \".cjs\" ? \"cjs\" : \"esm\",\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (required) {\r\n const tried = subdirs.flatMap(d =>\r\n extensions.map(e => resolvePath(runtimeDir, d, `${basename}${e}`))\r\n )\r\n throw new Error(\r\n `[worker-resolver] Could not find worker script \"${basename}\".\\n` +\r\n `Tried:\\n${tried.map(p => ` - ${p}`).join(\"\\n\")}\\n` +\r\n `Ensure the package is built: npm run build`\r\n )\r\n }\r\n\r\n return { path: \"\", extension: \"\", format: \"cjs\" }\r\n}\r\n\r\n/**\r\n * Resolve loader path (untuk webpack/rspack/vite loaders).\r\n * Same as resolveWorkerPath but dengan nama yang lebih eksplisit.\r\n */\r\nexport function resolveLoaderPath(\r\n loaderBasename: string,\r\n importMetaUrl: string\r\n): string {\r\n return resolveWorkerPath({\r\n basename: loaderBasename,\r\n importMetaUrl,\r\n extensions: [\".cjs\", \".js\", \".mjs\"],\r\n subdirs: [\".\", \"loaders\", \"lib\"],\r\n }).path\r\n}","import { createHash } from \"node:crypto\"\r\nimport fs from \"node:fs\"\r\nimport path from \"node:path\"\r\nimport { fileURLToPath } from \"node:url\"\r\nimport { createRequire } from \"node:module\"\r\n\r\n// Native-only: Node.js is always available. No browser fallback.\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Types\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type TokenMap = Record<string, string>\r\n\r\nexport type VariantValue = string | number | boolean | undefined\r\n\r\nexport type VariantProps = Record<string, VariantValue>\r\n\r\nexport type HtmlTagName = keyof HTMLElementTagNameMap\r\n\r\nexport type CompoundCondition = Record<string, string | number | boolean>\r\n\r\nexport type VariantMatrix = Record<string, Array<string | number | boolean>>\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Logging\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface Logger {\r\n warn(...args: unknown[]): void\r\n debug(...args: unknown[]): void\r\n error(...args: unknown[]): void\r\n log(...args: unknown[]): void\r\n}\r\n\r\nexport function createLogger(namespace: string): Logger {\r\n const prefix = `[${namespace}]`\r\n return {\r\n warn(...args: unknown[]) {\r\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\r\n },\r\n debug(...args: unknown[]) {\r\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\r\n },\r\n error(...args: unknown[]) {\r\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\r\n },\r\n log(...args: unknown[]) {\r\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\r\n },\r\n }\r\n}\r\n\r\nexport function createDebugLogger(namespace: string, label?: string): (msg: string) => void {\r\n const prefix = label ? `[${namespace}:${label}]` : `[${namespace}]`\r\n return (msg: string) => {\r\n if (process.env.DEBUG?.includes(namespace) || process.env.TW_DEBUG) {\r\n console.debug(prefix, msg)\r\n }\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Error handling\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type ErrorSource = \"rust\" | \"validation\" | \"compile\" | \"io\" | \"config\" | \"unknown\"\r\n\r\ntype ZodLikeIssue = {\r\n path?: readonly PropertyKey[]\r\n message?: string\r\n}\r\n\r\nfunction formatIssuePath(path?: readonly PropertyKey[]): string {\r\n if (!path || path.length === 0) return \"(root)\"\r\n return path\r\n .map((segment) =>\r\n typeof segment === \"symbol\" ? segment.description ?? segment.toString() : String(segment)\r\n )\r\n .join(\".\")\r\n}\r\n\r\nexport class TwError extends Error {\r\n /** @deprecated Gunakan source */\r\n public readonly domain: string\r\n public readonly source: ErrorSource\r\n public readonly code: string\r\n public readonly originalCause?: unknown\r\n\r\n constructor(domainOrSource: string, code: string, message: string, cause?: unknown) {\r\n super(message)\r\n this.name = \"TwError\"\r\n this.domain = domainOrSource\r\n this.source = domainOrSource as ErrorSource\r\n this.code = code\r\n this.originalCause = cause\r\n if (Error.captureStackTrace) Error.captureStackTrace(this, TwError)\r\n }\r\n\r\n static fromIo(code: string, message: string): TwError {\r\n return new TwError(\"io\", code, message)\r\n }\r\n\r\n static fromCompile(code: string, message: string): TwError {\r\n return new TwError(\"compile\", code, message)\r\n }\r\n\r\n static fromRust(err: { code?: string; message?: string } | Error | unknown): TwError {\r\n if (err instanceof TwError) return err\r\n if (err instanceof Error) return new TwError(\"rust\", \"RUST_ERROR\", err.message, err)\r\n if (err && typeof err === \"object\") {\r\n const e = err as { code?: string; message?: string }\r\n return new TwError(\"rust\", e.code ?? \"RUST_ERROR\", e.message ?? String(err), err)\r\n }\r\n return new TwError(\"rust\", \"RUST_ERROR\", String(err), err)\r\n }\r\n\r\n /** Buat TwError dari ZodError — dukung shape Zod v3 (`errors`) dan v4 (`issues`). */\r\n static fromZod(err: { issues?: ZodLikeIssue[]; errors?: ZodLikeIssue[] }): TwError {\r\n const first = err.issues?.[0] ?? err.errors?.[0]\r\n const path = formatIssuePath(first?.path)\r\n const message = first ? `${path}: ${first.message}` : \"Schema validation failed\"\r\n return new TwError(\"validation\", \"SCHEMA_VALIDATION_FAILED\", message, err)\r\n }\r\n\r\n static wrap(source: string, code: string, err: unknown): TwError {\r\n if (err instanceof TwError) return err\r\n if (err instanceof Error) return new TwError(source, code, err.message, err)\r\n return new TwError(source, code, String(err), err)\r\n }\r\n\r\n override toString(): string {\r\n return `TwError [${this.source}:${this.code}] ${this.message}`\r\n }\r\n\r\n toJSON(): { name: string; source: string; code: string; message: string } {\r\n return { name: this.name, source: this.source, code: this.code, message: this.message }\r\n }\r\n\r\n toCliMessage(): string {\r\n return `[${this.source.toUpperCase()}:${this.code}] ${this.message}`\r\n }\r\n}\r\n\r\nexport function wrapUnknownError(domain: string, code: string, error: unknown): TwError {\r\n return TwError.wrap(domain, code, error)\r\n}\r\n\r\nexport function isTwError(err: unknown): err is TwError {\r\n return err instanceof TwError\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Native binding resolution\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface LoadNativeBindingOptions<T> {\r\n runtimeDir: string\r\n candidates: string[]\r\n isValid: (module: unknown) => module is T\r\n invalidExportMessage: string\r\n}\r\n\r\nexport interface LoadNativeBindingResult<T> {\r\n binding: T | null\r\n loadErrors: Array<{ path: string; message: string }>\r\n loadedPath?: string\r\n}\r\n\r\nexport function loadNativeBinding<T>(options: LoadNativeBindingOptions<T>): LoadNativeBindingResult<T> {\r\n const { runtimeDir, candidates, isValid } = options\r\n const loadErrors: Array<{ path: string; message: string }> = []\r\n\r\n for (const candidate of candidates) {\r\n const candidatePath = path.resolve(runtimeDir, candidate)\r\n try {\r\n if (!fs.existsSync(candidatePath) && !fs.existsSync(candidatePath + \".node\")) {\r\n continue\r\n }\r\n const mod = requireNativeModule(candidatePath)\r\n if (mod && isValid(mod)) {\r\n return { binding: mod, loadErrors, loadedPath: candidatePath }\r\n }\r\n loadErrors.push({ path: candidatePath, message: options.invalidExportMessage })\r\n } catch (e) {\r\n loadErrors.push({ path: candidatePath, message: e instanceof Error ? e.message : String(e) })\r\n }\r\n }\r\n\r\n return { binding: null, loadErrors }\r\n}\r\n\r\nconst _require = createRequire(import.meta.url)\r\n\r\nfunction requireNativeModule(p: string): unknown {\r\n return _require(p)\r\n}\r\n\r\nexport interface ResolveCandidatesOptions {\r\n runtimeDir?: string\r\n envVarNames?: string[]\r\n includeDefaultCandidates?: boolean\r\n enforceNodeExtensionForEnvPath?: boolean\r\n /** @deprecated — ignored, kept for backward compat */\r\n packageName?: string\r\n}\r\n\r\nexport function resolveNativeBindingCandidates(options: ResolveCandidatesOptions): string[] {\r\n const {\r\n envVarNames = [\"TW_NATIVE_PATH\", \"TWS_NATIVE_PATH\"],\r\n includeDefaultCandidates = true,\r\n enforceNodeExtensionForEnvPath = false,\r\n } = options\r\n // Default ke cwd kalau runtimeDir tidak disediakan\r\n const runtimeDir = options.runtimeDir || process.cwd()\r\n const candidates: string[] = []\r\n\r\n for (const envVar of envVarNames) {\r\n const envPath = process.env[envVar]\r\n if (envPath) {\r\n candidates.push(enforceNodeExtensionForEnvPath && !envPath.endsWith(\".node\") ? envPath + \".node\" : envPath)\r\n }\r\n }\r\n\r\n if (!includeDefaultCandidates) return candidates\r\n\r\n if (fs.existsSync(runtimeDir)) {\r\n try {\r\n for (const entry of fs.readdirSync(runtimeDir)) {\r\n if (entry.endsWith(\".node\")) candidates.push(entry)\r\n }\r\n } catch { /* ignore read errors */ }\r\n }\r\n\r\n const BINARY_NAMES = [\"tailwind-styled-native\", \"tailwind_styled_parser\"]\r\n const napiPlatform = process.platform === \"linux\" && process.arch === \"x64\" ? \"linux-x64-gnu\"\r\n : process.platform === \"linux\" && process.arch === \"arm64\" ? \"linux-arm64-gnu\"\r\n : `${process.platform}-${process.arch}`\r\n\r\n for (const bin of BINARY_NAMES) {\r\n candidates.push(path.resolve(runtimeDir, `${bin}.node`))\r\n candidates.push(path.resolve(runtimeDir, `${bin}.${napiPlatform}.node`))\r\n // 4 level: dist/ → package/ → domain/ → packages/ → repo-root/\r\n candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", `${bin}.node`))\r\n candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", `${bin}.${napiPlatform}.node`))\r\n // 3 level fallback\r\n candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"native\", `${bin}.node`))\r\n candidates.push(path.resolve(process.cwd(), \"native\", `${bin}.node`))\r\n candidates.push(path.resolve(process.cwd(), \"native\", `${bin}.${napiPlatform}.node`))\r\n }\r\n\r\n return Array.from(new Set(candidates))\r\n}\r\n\r\nexport function resolveRuntimeDir(dir: string | undefined, importMetaUrl: string): string {\r\n if (dir) return path.resolve(dir)\r\n try {\r\n return path.dirname(fileURLToPath(importMetaUrl))\r\n } catch {\r\n return process.cwd()\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Hashing\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport function hashContent(content: string, algorithm: string = \"md5\", length?: number): string {\r\n const hash = createHash(algorithm).update(content).digest(\"hex\")\r\n return length ? hash.slice(0, length) : hash\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Error formatting\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport function formatErrorMessage(error: unknown): string {\r\n if (error instanceof TwError) return error.toString()\r\n if (error instanceof Error) return error.message\r\n return String(error)\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// LRU Cache\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport class LRUCache<K, V> {\r\n private capacity: number\r\n private cache: Map<K, V>\r\n\r\n constructor(capacity: number) {\r\n this.capacity = capacity\r\n this.cache = new Map()\r\n }\r\n\r\n get(key: K): V | undefined {\r\n if (!this.cache.has(key)) return undefined\r\n const value = this.cache.get(key)!\r\n this.cache.delete(key)\r\n this.cache.set(key, value)\r\n return value\r\n }\r\n\r\n set(key: K, value: V): void {\r\n if (this.cache.has(key)) {\r\n this.cache.delete(key)\r\n } else if (this.cache.size >= this.capacity) {\r\n const firstKey = this.cache.keys().next().value\r\n if (firstKey !== undefined) {\r\n this.cache.delete(firstKey)\r\n }\r\n }\r\n this.cache.set(key, value)\r\n }\r\n\r\n delete(key: K): boolean {\r\n return this.cache.delete(key)\r\n }\r\n\r\n has(key: K): boolean {\r\n return this.cache.has(key)\r\n }\r\n\r\n clear(): void {\r\n this.cache.clear()\r\n }\r\n\r\n entries(): IterableIterator<[K, V]> {\r\n return this.cache.entries()\r\n }\r\n\r\n get size(): number {\r\n return this.cache.size\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Trace Utilities\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type { TraceSnapshot, TraceSummary } from \"./trace\"\r\nexport {\r\n getHealthColor,\r\n getModeColor,\r\n formatMemory,\r\n formatDuration,\r\n calculateHealth,\r\n getBuildTimeColor,\r\n getMemoryColor,\r\n createTraceSnapshot,\r\n getPipelinePercentages,\r\n} from \"./trace\"\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Performance Telemetry\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Error Codes\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type { ErrorCode } from \"./error-codes\"\r\nexport { ERROR_CODES, getSuggestion, formatErrorCode } from \"./error-codes\"\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Tailwind Compatibility\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type { TailwindInfo } from \"./compatibility\"\r\nexport { detectTailwind, assertTailwindV4, getTailwindVersion, isTailwindV4 } from \"./compatibility\"\r\n\r\n// ── Native binding schemas (Zod boundary validation)\r\nexport {\r\n NativeScanFileSchema, NativeScanResultSchema,\r\n NativeAnalyzerReportSchema, NativeTransformResultSchema,\r\n NativeCssCompileResultSchema, NativeWatchResultSchema,\r\n NativeCacheEntrySchema, NativeCacheReadResultSchema,\r\n safeParseNative, parseNative,\r\n} from './native-schemas'\r\n\r\n// ── ESM-safe runtime helpers ──────────────────────────────────────────────\r\nexport {\r\n createEsmRequire,\r\n getDirname,\r\n getFilename,\r\n resolveFromRoot,\r\n tryRequire,\r\n resolveNativeNodePath,\r\n} from \"./esmHelpers\"\r\n\r\n// ── Performance telemetry ────────────────────────────────────────────────────\r\nexport {\r\n TelemetryCollector,\r\n getGlobalTelemetry,\r\n resetGlobalTelemetry,\r\n createBuildTimer,\r\n type BuildTelemetry,\r\n type TelemetrySummary,\r\n type BuildPhases,\r\n} from \"./telemetry\"\r\n\r\n// ── Config/JSON schema validation ─────────────────────────────────────────────\r\nexport {\r\n ScanCacheSchema,\r\n ScanCacheClassEntrySchema,\r\n TailwindConfigSchema,\r\n RegistryPluginEntrySchema,\r\n RegistryFileSchema,\r\n PackageJsonSchema,\r\n parseJsonWithSchema,\r\n parseJsonFileWithSchema,\r\n type ScanCache,\r\n type ScanCacheClassEntry,\r\n type TailwindConfig,\r\n type RegistryPluginEntry,\r\n type RegistryFile,\r\n type PackageJson,\r\n} from \"./configSchemas\"\r\n\r\n// ── Worker/bootstrap path resolution ─────────────────────────────────────────\r\nexport {\r\n resolveWorkerPath,\r\n resolveLoaderPath,\r\n type WorkerPathOptions,\r\n type WorkerPathResult,\r\n} from \"./workerResolver\"\r\n\r\n// ── Codegen helpers ───────────────────────────────────────────────────────────\r\nexport {\r\n generateComponentCode,\r\n generateStorybookStory,\r\n generateClassRenameCodemod,\r\n generateBarrelFile,\r\n type ComponentCodegenOptions,\r\n} from \"./codegen\"\r\n\r\n// ── Native binary resolution (QA #1) ─────────────────────────────────────────\r\nexport {\r\n resolveNativeBinary,\r\n formatNativeNotFoundError,\r\n type NativeResolutionResult,\r\n} from \"./native-resolution\"\r\n\r\n// ── Shared observability contract ────────────────────────────────────────────\r\nexport {\r\n createObservabilityClient,\r\n type ClassInspection,\r\n type ClassProperty,\r\n type ClassUsageLocation,\r\n type BuildTrace,\r\n type BuildPhaseTrace,\r\n type DashboardMetrics,\r\n type DashboardSummary,\r\n type ObservabilityClient,\r\n} from \"./observability\"","import fs from \"node:fs\"\r\nimport { createRequire } from \"node:module\"\r\nimport path from \"node:path\"\r\n\r\nfunction getDirnameFromUrl(importMetaUrl: string): string {\r\n if (typeof importMetaUrl !== 'string') return ''\r\n // Simple URL parsing without Node.js modules\r\n if (importMetaUrl.startsWith('file://')) {\r\n let withoutFile = importMetaUrl.slice(7)\r\n // On Windows, file URLs can be like file:///C:/path\r\n if (withoutFile[0] === '/' && withoutFile[2] === ':') {\r\n withoutFile = withoutFile.slice(1) // Remove leading / from C:/\r\n }\r\n const lastSlash = Math.max(withoutFile.lastIndexOf('/'), withoutFile.lastIndexOf('\\\\'))\r\n return lastSlash > 0 ? withoutFile.slice(0, lastSlash) : '/'\r\n }\r\n // Fallback for other URL types\r\n const lastSlash = Math.max(importMetaUrl.lastIndexOf('/'), importMetaUrl.lastIndexOf('\\\\'))\r\n return lastSlash > 0 ? importMetaUrl.slice(0, lastSlash) : ''\r\n}\r\n\r\nimport { resolveLoaderPath as sharedResolveLoaderPath } from \"@tailwind-styled/shared\"\r\n\r\nimport { parseNextAdapterOptions } from \"./schemas\"\r\n\r\nconst require = createRequire(import.meta.url)\r\n\r\ninterface TailwindStyledLoaderOptions {\r\n /** @deprecated — handled by engine internally */\r\n mode?: \"zero-runtime\"\r\n /** @deprecated — handled by engine internally */\r\n autoClientBoundary?: boolean\r\n /** @deprecated — handled by engine internally */\r\n addDataAttr?: boolean\r\n /** @deprecated — handled by engine internally */\r\n hoist?: boolean\r\n /** @deprecated — handled by engine internally */\r\n routeCss?: boolean\r\n /** @deprecated — handled by engine internally */\r\n incremental?: boolean\r\n verbose?: boolean\r\n preserveImports?: boolean\r\n safelistPath?: string\r\n}\r\n\r\nexport interface TailwindStyledNextOptions {\r\n /** @deprecated — handled by engine internally */\r\n mode?: \"zero-runtime\"\r\n /** @deprecated — handled by engine internally */\r\n autoClientBoundary?: boolean\r\n /** @deprecated — handled by engine internally */\r\n addDataAttr?: boolean\r\n /** @deprecated — handled by engine internally */\r\n hoist?: boolean\r\n /** @deprecated — handled by engine internally */\r\n routeCss?: boolean\r\n /** @deprecated — handled by engine internally */\r\n incremental?: boolean\r\n /** Show detailed loader output */\r\n verbose?: boolean\r\n /** Path to generated safelist CSS file. Default: <cwd>/__tw_safelist.css */\r\n safelistPath?: string\r\n include?: RegExp\r\n exclude?: RegExp\r\n}\r\n\r\nimport type { NextConfig } from \"next\"\r\n\r\n// Derive webpack types directly from Next.js — always in sync with installed version\r\ntype NextWebpackFn = NonNullable<NextConfig[\"webpack\"]>\r\ntype NextWebpackConfig = Parameters<NextWebpackFn>[0]\r\ntype NextWebpackOptions = Parameters<NextWebpackFn>[1]\r\n\r\n// Derive turbopack rule types from NextConfig\r\ntype TurboRules = NonNullable<NonNullable<NextConfig[\"turbopack\"]>[\"rules\"]>\r\ntype TurbopackLoaderRule = TurboRules[string]\r\n\r\n// Derive webpack module rule type for safe iteration\r\ntype ModuleRule = NonNullable<NonNullable<NextWebpackConfig[\"module\"]>[\"rules\"]>[number]\r\ntype RuleUseEntry = { loader?: string; options?: unknown }\r\n\r\ninterface NextWebpackUseEntry {\r\n loader: string\r\n options?: TailwindStyledLoaderOptions\r\n}\r\n\r\ninterface NextWebpackRule {\r\n test?: RegExp\r\n exclude?: RegExp\r\n enforce?: \"pre\" | \"post\"\r\n use?: NextWebpackUseEntry[]\r\n}\r\n\r\n\r\nconst resolveRuntimeDir = (): string => getDirnameFromUrl(import.meta.url)\r\n\r\nconst resolveLoaderPath = (basename: string): string => {\r\n try {\r\n return sharedResolveLoaderPath(basename, import.meta.url)\r\n } catch {\r\n const runtimeDir = resolveRuntimeDir()\r\n const candidates = [\r\n path.resolve(runtimeDir, `${basename}.mjs`),\r\n path.resolve(runtimeDir, `${basename}.js`),\r\n path.resolve(runtimeDir, `${basename}.cjs`),\r\n ]\r\n\r\n for (const candidate of candidates) {\r\n if (fs.existsSync(candidate)) {\r\n return candidate\r\n }\r\n }\r\n\r\n throw new Error(\r\n `[tailwind-styled] Loader not found for '${basename}'. Checked: ${candidates.join(\", \")}`\r\n )\r\n }\r\n}\r\n\r\nfunction checkNextVersion(): void {\r\n try {\r\n const pkgPath = require.resolve(\"next/package.json\")\r\n const { version } = require(pkgPath)\r\n const major = Number.parseInt(version.split(\".\")[0], 10)\r\n if (major < 15) {\r\n console.warn(\r\n `[tailwind-styled] Next.js ${version} detected. Recommended: 15+ for full Turbopack support.`\r\n )\r\n }\r\n } catch {\r\n // next not resolvable — skip check\r\n }\r\n}\r\n\r\nconst DEFAULT_INCLUDE = /\\.[jt]sx?$/\r\nconst DEFAULT_EXCLUDE = /node_modules/\r\n\r\n/**\r\n * Next.js App Router entry-point files yang TIDAK boleh diproses oleh TW loader.\r\n *\r\n * Mengapa: file-file ini adalah RSC boundary points yang dikelola Next.js secara khusus.\r\n * Jika loader menginjeksi TRANSFORM_MARKER atau memodifikasi source-nya—bahkan ketika\r\n * `changed: false`—Next.js/React Compiler kehilangan sinyal bahwa file adalah pure RSC,\r\n * sehingga locale injection dari Accept-Language header (Next.js 16+) tidak konsisten\r\n * antara SSR pass (server: lang=\"id\") dan hydration pass (client: lang=\"en\").\r\n *\r\n * File yang dikecualikan: layout, page, loading, error, not-found, template, default\r\n * semuanya adalah Next.js segment conventions yang tidak boleh disentuh loader pihak ketiga.\r\n */\r\nconst NEXT_RSC_ENTRIES =\r\n /(?:^|[\\\\/])(?:layout|page|loading|error|not-found|template|default)\\.[jt]sx?$/\r\n\r\n/**\r\n * Gabungkan user-supplied exclude dengan NEXT_RSC_ENTRIES.\r\n * Menggunakan non-capturing group agar tidak interferensi dengan capture group lain.\r\n */\r\nconst buildExcludePattern = (userExclude?: RegExp): RegExp => {\r\n if (!userExclude) return new RegExp(`(?:${DEFAULT_EXCLUDE.source})|(?:${NEXT_RSC_ENTRIES.source})`)\r\n return new RegExp(`(?:${userExclude.source})|(?:${NEXT_RSC_ENTRIES.source})`)\r\n}\r\n\r\nconst createLoaderOptions = (options: TailwindStyledNextOptions): Readonly<TailwindStyledLoaderOptions> => {\r\n // Deprecated options — still passed for loader backward compat but engine ignores them\r\n const opts: TailwindStyledLoaderOptions = {\r\n mode: \"zero-runtime\", // only supported mode\r\n autoClientBoundary: true, // always on (engine handles it)\r\n preserveImports: true,\r\n }\r\n if (options.verbose !== undefined) opts.verbose = options.verbose\r\n opts.safelistPath = options.safelistPath ?? path.join(process.cwd(), \"__tw_safelist.css\")\r\n return Object.freeze(opts)\r\n}\r\n\r\nconst buildTurbopackRules = (\r\n loaderPath: string,\r\n loaderOptions: TailwindStyledLoaderOptions\r\n): TurboRules => {\r\n const extensions = [\"js\", \"jsx\", \"ts\", \"tsx\", \"mjs\", \"cjs\"]\r\n return Object.fromEntries(\r\n extensions.map((ext) => [\r\n `*.${ext}`,\r\n { loaders: [{ loader: loaderPath, options: loaderOptions }] },\r\n ])\r\n ) as TurboRules\r\n}\r\n\r\nconst normalizeLoaderPath = (loaderPath: string): string => path.resolve(loaderPath)\r\n\r\nconst applyWebpackRule = (\r\n config: NextWebpackConfig,\r\n options: TailwindStyledNextOptions,\r\n loaderPath: string\r\n): NextWebpackConfig => {\r\n const loaderOptions = createLoaderOptions(options)\r\n const rules = config.module?.rules ?? []\r\n const normalizedLoaderPath = normalizeLoaderPath(loaderPath)\r\n\r\n const alreadyRegistered = rules.some(\r\n (rule: ModuleRule) =>\r\n Array.isArray(rule?.use) &&\r\n (rule.use as RuleUseEntry[]).some(\r\n (entry: RuleUseEntry) =>\r\n typeof entry.loader === \"string\" &&\r\n normalizeLoaderPath(entry.loader) === normalizedLoaderPath\r\n )\r\n )\r\n\r\n if (alreadyRegistered) return config\r\n\r\n const tailwindStyledRule: NextWebpackRule = {\r\n test: options.include ?? DEFAULT_INCLUDE,\r\n // Selalu kecualikan Next.js RSC entry files (layout, page, dll) bahkan jika\r\n // user menyuplai exclude pattern sendiri — lihat buildExcludePattern.\r\n exclude: buildExcludePattern(options.exclude),\r\n enforce: \"pre\",\r\n use: [{ loader: loaderPath, options: loaderOptions }],\r\n }\r\n\r\n config.module = {\r\n ...(config.module ?? {}),\r\n rules: [...rules, tailwindStyledRule],\r\n }\r\n\r\n const externalPackages = [\r\n \"@tailwind-styled/shared\",\r\n \"@tailwind-styled/compiler\", \r\n \"@tailwind-styled/engine\",\r\n \"@tailwind-styled/plugin\",\r\n \"@tailwind-styled/core\",\r\n \"@tailwind-styled/runtime-css\",\r\n \"@tailwind-styled/runtime\",\r\n \"@tailwind-styled/scanner\",\r\n \"@tailwind-styled/analyzer\",\r\n \"@tailwind-styled/theme\",\r\n \"@tailwind-styled/preset\",\r\n ]\r\n\r\n type ExternalsArray = Extract<NonNullable<NextWebpackConfig[\"externals\"]>, readonly unknown[]>\r\n type ExternalItem = ExternalsArray[number]\r\n\r\n if (!config.externals) {\r\n config.externals = []\r\n }\r\n\r\n const ext = config.externals\r\n if (Array.isArray(ext)) {\r\n externalPackages.forEach((pkg) => {\r\n const found = (ext as ExternalItem[]).find((e: ExternalItem) =>\r\n (typeof e === \"string\" && e.includes(pkg)) ||\r\n (typeof e === \"object\" && e !== null && !Array.isArray(e) &&\r\n Object.keys(e as object).some((k) => k.includes(pkg)))\r\n )\r\n if (!found) {\r\n (ext as string[]).push(pkg)\r\n }\r\n })\r\n }\r\n\r\n return config\r\n}\r\n\r\nconst mergeTurbopackRules = (\r\n existingRules: TurboRules,\r\n nextRules: TurboRules\r\n): TurboRules => {\r\n const merged: TurboRules = { ...existingRules }\r\n\r\n for (const [pattern, incomingRule] of Object.entries(nextRules)) {\r\n const current = merged[pattern]\r\n if (current == null) {\r\n merged[pattern] = incomingRule\r\n continue\r\n }\r\n\r\n if (typeof current === \"object\" && current !== null && \"loaders\" in current) {\r\n const typedCurrent = current as { loaders?: unknown }\r\n if (Array.isArray(typedCurrent.loaders)) {\r\n const incomingLoaders = (incomingRule as { loaders?: unknown[] }).loaders ?? []\r\n merged[pattern] = {\r\n ...(current as TurbopackLoaderRule),\r\n loaders: [...typedCurrent.loaders, ...incomingLoaders],\r\n } as TurbopackLoaderRule\r\n console.warn(\r\n `[tailwind-styled] Turbopack rule '${pattern}' already exists. Appending tailwind-styled loader.`\r\n )\r\n continue\r\n }\r\n }\r\n\r\n merged[pattern] = incomingRule\r\n console.warn(\r\n `[tailwind-styled] Turbopack rule '${pattern}' has incompatible shape. Replacing with tailwind-styled rule.`\r\n )\r\n }\r\n\r\n return merged\r\n}\r\n\r\nexport function withTailwindStyled(options: TailwindStyledNextOptions = {}) {\r\n checkNextVersion()\r\n const normalizedOptions = parseNextAdapterOptions(options)\r\n const webpackLoaderPath = resolveLoaderPath(\"webpackLoader\")\r\n const turbopackLoaderPath = resolveLoaderPath(\"turbopackLoader\")\r\n\r\nreturn function wrap(nextConfig: NextConfig = {}): NextConfig {\r\n const previousWebpack = nextConfig.webpack\r\n const loaderOptions = createLoaderOptions(normalizedOptions)\r\n\r\n return {\r\n ...nextConfig,\r\n webpack(\r\n config: NextWebpackConfig,\r\n webpackOptions: NextWebpackOptions\r\n ): ReturnType<NextWebpackFn> {\r\n const apply = (resolvedConfig: NextWebpackConfig) => {\r\n const finalConfig = applyWebpackRule(resolvedConfig, normalizedOptions, webpackLoaderPath)\r\n if (!finalConfig.externals) {\r\n finalConfig.externals = []\r\n }\r\n const externals = finalConfig.externals\r\n if (Array.isArray(externals)) {\r\n externals.push({\r\n \"@tailwind-styled/shared\": \"commonjs2 @tailwind-styled/shared\",\r\n \"@tailwind-styled/compiler\": \"commonjs2 @tailwind-styled/compiler\",\r\n \"@tailwind-styled/engine\": \"commonjs2 @tailwind-styled/engine\",\r\n \"@tailwind-styled/plugin\": \"commonjs2 @tailwind-styled/plugin\",\r\n })\r\n }\r\n return finalConfig\r\n }\r\n\r\n if (typeof previousWebpack !== \"function\") {\r\n return apply(config)\r\n }\r\n\r\n try {\r\n const result = previousWebpack(config, webpackOptions)\r\n return result instanceof Promise ? result.then(apply) : apply(result)\r\n } catch (error) {\r\n throw new Error(\"[tailwind-styled] Failed while executing existing Next webpack config.\", {\r\n cause: error,\r\n })\r\n }\r\n },\r\n turbopack: {\r\n ...(nextConfig.turbopack ?? {}),\r\n rules: mergeTurbopackRules(\r\n (nextConfig.turbopack?.rules ?? {}) as TurboRules,\r\n buildTurbopackRules(turbopackLoaderPath, loaderOptions)\r\n ),\r\n },\r\n }\r\n }\r\n}"]}
|
|
1
|
+
{"version":3,"sources":["../packages/domain/shared/src/workerResolver.ts","../packages/domain/shared/src/native-resolution.ts","../packages/domain/shared/src/index.ts","../packages/domain/scanner/src/native-bridge.ts","../packages/domain/compiler/src/nativeBridge.ts","../packages/domain/compiler/src/tailwindEngine.ts","../packages/domain/compiler/src/index.ts","../packages/presentation/next/src/schemas.ts","../packages/presentation/next/src/withTailwindStyled.ts","../packages/domain/scanner/src/index.ts","../packages/domain/scanner/src/cache-native.ts","../packages/domain/scanner/src/schemas.ts"],"names":["path","isBrowser","fs","_require","createRequire","fileURLToPath","scannerGetBinding","log","require","existsSync","resolve","init_src","runCssPipeline","formatIssuePath","formatIssues","parseWithSchema","z","scanFileNative","scanWorkspaceNative","getDirnameFromUrl","lastSlash","resolveRuntimeDir","resolveLoaderPath","extractUtilitiesLayer","atomicWriteFile","generateCssForClasses"],"mappings":"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","file":"next.mjs","sourcesContent":["/**\r\n * Worker/bootstrap path resolution untuk artifact release safety.\r\n * Dari monorepo checklist: \"Perkuat worker/bootstrap path agar artifact release aman\"\r\n *\r\n * Masalah: path ke worker/loader script bisa berbeda antara:\r\n * - Development (src/*.ts)\r\n * - Built dist (dist/*.js / dist/*.cjs)\r\n * - Packed npm artifact (dist/ saja, tanpa src/)\r\n *\r\n * Solusi: resolve path secara hierarchical dengan fallback yang eksplisit.\r\n */\r\n\r\nconst isBrowser = typeof window !== \"undefined\" || typeof document !== \"undefined\"\r\n\r\nconst NODE_URL = typeof window === \"undefined\" || typeof document === \"undefined\" ? \"node:url\" : null\r\nconst NODE_FS = typeof window === \"undefined\" || typeof document === \"undefined\" ? \"node:fs\" : null\r\nconst NODE_PATH = typeof window === \"undefined\" || typeof document === \"undefined\" ? \"node:path\" : null\r\n\r\nfunction getDirnameFromUrl(importMetaUrl: string): string {\r\n if (!importMetaUrl) return \"\"\r\n if (isBrowser) return \"\"\r\n\r\n try {\r\n const nodeUrl = require(NODE_URL!)\r\n const nodePath = require(NODE_PATH!)\r\n // fileURLToPath returns the file path — we need the directory\r\n return nodePath.dirname(nodeUrl.fileURLToPath(importMetaUrl))\r\n } catch {\r\n if (importMetaUrl.startsWith(\"file://\")) {\r\n const filePath = importMetaUrl.slice(7)\r\n // strip the filename to get the directory\r\n const lastSlash = filePath.lastIndexOf(\"/\")\r\n return lastSlash >= 0 ? filePath.slice(0, lastSlash) : filePath\r\n }\r\n return \"\"\r\n }\r\n}\r\n\r\nfunction resolvePath(...segments: string[]): string {\r\n if (isBrowser) return segments.join(\"/\").replace(/\\/+/g, \"/\")\r\n try {\r\n const nodePath = require(NODE_PATH!)\r\n return nodePath.resolve(...segments)\r\n } catch {\r\n return segments.join(\"/\").replace(/\\/+/g, \"/\")\r\n }\r\n}\r\n\r\nfunction existsSync(path: string): boolean {\r\n if (isBrowser) return false\r\n try {\r\n const nodeFs = require(NODE_FS!)\r\n return nodeFs.existsSync(path)\r\n } catch {\r\n return false\r\n }\r\n}\r\n\r\nexport interface WorkerPathOptions {\r\n /** Nama file worker tanpa extension */\r\n basename: string\r\n /** Import meta URL dari caller module */\r\n importMetaUrl: string\r\n /** Extensions yang dicoba secara urutan (default: [\".cjs\", \".js\", \".mjs\"]) */\r\n extensions?: string[]\r\n /** Sub-directories relatif dari runtimeDir yang dicoba */\r\n subdirs?: string[]\r\n /** Throw jika tidak ditemukan (default: true) */\r\n required?: boolean\r\n}\r\n\r\nexport interface WorkerPathResult {\r\n /** Absolute path ke worker file */\r\n path: string\r\n /** Extension yang ditemukan */\r\n extension: string\r\n /** Apakah ini dari CJS atau ESM artifact */\r\n format: \"cjs\" | \"esm\"\r\n}\r\n\r\n/**\r\n * Resolve worker/loader script path yang aman untuk release artifacts.\r\n *\r\n * Prioritas:\r\n * 1. CJS (.cjs) — untuk Node.js workers yang butuh require()\r\n * 2. JS (.js) — bundled output\r\n * 3. MJS (.mjs) — explicit ESM\r\n *\r\n * @example\r\n * const workerPath = resolveWorkerPath({\r\n * basename: \"scanner-worker\",\r\n * importMetaUrl: import.meta.url,\r\n * })\r\n * // → \"/path/to/dist/scanner-worker.cjs\"\r\n */\r\nexport function resolveWorkerPath(opts: WorkerPathOptions): WorkerPathResult {\r\n if (isBrowser) {\r\n throw new Error(\"Worker resolution not available in browser\")\r\n }\r\n\r\n const {\r\n basename,\r\n importMetaUrl,\r\n extensions = [\".cjs\", \".js\", \".mjs\"],\r\n subdirs = [\".\", \"workers\", \"lib\"],\r\n required = true,\r\n } = opts\r\n\r\n const runtimeDir = getDirnameFromUrl(importMetaUrl)\r\n\r\n // Try each subdir + extension combination\r\n for (const subdir of subdirs) {\r\n for (const ext of extensions) {\r\n const candidate = resolvePath(runtimeDir, subdir, `${basename}${ext}`)\r\n if (existsSync(candidate)) {\r\n return {\r\n path: candidate,\r\n extension: ext,\r\n format: ext === \".cjs\" ? \"cjs\" : \"esm\",\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (required) {\r\n const tried = subdirs.flatMap(d =>\r\n extensions.map(e => resolvePath(runtimeDir, d, `${basename}${e}`))\r\n )\r\n throw new Error(\r\n `[worker-resolver] Could not find worker script \"${basename}\".\\n` +\r\n `Tried:\\n${tried.map(p => ` - ${p}`).join(\"\\n\")}\\n` +\r\n `Ensure the package is built: npm run build`\r\n )\r\n }\r\n\r\n return { path: \"\", extension: \"\", format: \"cjs\" }\r\n}\r\n\r\n/**\r\n * Resolve loader path (untuk webpack/rspack/vite loaders).\r\n * Same as resolveWorkerPath but dengan nama yang lebih eksplisit.\r\n */\r\nexport function resolveLoaderPath(\r\n loaderBasename: string,\r\n importMetaUrl: string\r\n): string {\r\n return resolveWorkerPath({\r\n basename: loaderBasename,\r\n importMetaUrl,\r\n extensions: [\".cjs\", \".js\", \".mjs\"],\r\n subdirs: [\".\", \"loaders\", \"lib\"],\r\n }).path\r\n}","/**\r\n * Prebuilt binary resolution untuk native NAPI bindings.\r\n * QA #1: Resolve native binary dari prebuilt packages atau local build.\r\n *\r\n * Prioritas:\r\n * 1. TW_NATIVE_PATH env var (explicit override)\r\n * 2. Prebuilt binary dari platform-specific npm package\r\n * 3. Local build dari source (developer mode)\r\n */\r\n\r\nimport { createRequire } from \"node:module\"\r\nimport * as fs from \"node:fs\"\r\nimport * as path from \"node:path\"\r\n\r\nconst isBrowser = typeof window !== \"undefined\" || typeof document !== \"undefined\"\r\n\r\n// ESM-safe require — works in both ESM and CJS contexts\r\nconst _require = typeof require !== \"undefined\" ? require : createRequire(import.meta.url)\r\n\r\nexport interface NativeResolutionResult {\r\n path: string | null\r\n source: \"env\" | \"prebuilt\" | \"local\" | \"not-found\"\r\n platform: string\r\n tried: string[]\r\n}\r\n\r\n/** Platform key → prebuilt npm package name */\r\nconst PLATFORM_MAP: Record<string, string[]> = {\r\n \"linux-x64\": [\"@tailwind-styled/native-linux-x64-gnu\", \"@tailwind-styled/native-linux-x64\"],\r\n \"linux-arm64\": [\"@tailwind-styled/native-linux-arm64-gnu\", \"@tailwind-styled/native-linux-arm64\"],\r\n \"darwin-x64\": [\"@tailwind-styled/native-darwin-x64\"],\r\n \"darwin-arm64\": [\"@tailwind-styled/native-darwin-arm64\"],\r\n \"win32-x64\": [\"@tailwind-styled/native-win32-x64-msvc\", \"@tailwind-styled/native-win32-x64\"],\r\n \"win32-arm64\": [\"@tailwind-styled/native-win32-arm64-msvc\", \"@tailwind-styled/native-win32-arm64\"],\r\n}\r\n\r\nfunction platformKey(): string {\r\n if (isBrowser) return \"browser\"\r\n return `${process.platform}-${process.arch}`\r\n}\r\n\r\n/**\r\n * Resolve native binary path dari semua sumber yang tersedia.\r\n *\r\n * @example\r\n * const result = resolveNativeBinary()\r\n * if (result.path) {\r\n * const binding = require(result.path)\r\n * } else {\r\n * throw new Error(\"Native binding not found — run npm run build:rust\")\r\n * }\r\n */\r\nexport function resolveNativeBinary(runtimeDir?: string): NativeResolutionResult {\r\n const platform = platformKey()\r\n const tried: string[] = []\r\n\r\n if (isBrowser) {\r\n return { path: null, source: \"not-found\", platform, tried: [\"not available in browser\"] }\r\n }\r\n\r\n // 0. Disabled flag — always short-circuit before any I/O\r\n if (process.env.TWS_DISABLE_NATIVE === \"1\") {\r\n return { path: null, source: \"not-found\", platform, tried: [] }\r\n }\r\n\r\n // 1. Env var override\r\n const envPath = process.env.TW_NATIVE_PATH?.trim()\r\n if (envPath) {\r\n if (fs.existsSync(envPath)) {\r\n return { path: envPath, source: \"env\", platform, tried }\r\n }\r\n tried.push(`env:${envPath} (not found)`)\r\n }\r\n\r\n // 2. Prebuilt binary dari platform-specific npm package\r\n const prebuiltPkgs = PLATFORM_MAP[platform] ?? []\r\n for (const pkg of prebuiltPkgs) {\r\n try {\r\n const candidate = _require.resolve(`${pkg}/tailwind_styled_parser.node`)\r\n if (fs.existsSync(candidate)) {\r\n return { path: candidate, source: \"prebuilt\", platform, tried }\r\n }\r\n tried.push(`prebuilt:${pkg} (resolved but missing)`)\r\n } catch {\r\n tried.push(`prebuilt:${pkg} (not installed)`)\r\n }\r\n }\r\n\r\n // 2b. .node file bundled inside this package itself (via \"files\": [\"native/*.node\"])\r\n // Covers the case where user installs tailwind-styled-v4 directly from npm\r\n // and the .node file lands at node_modules/tailwind-styled-v4/native/*.node\r\n const napiPlatform = platform === \"linux-x64\" ? \"linux-x64-gnu\"\r\n : platform === \"linux-arm64\" ? \"linux-arm64-gnu\"\r\n : platform\r\n const BINARY_NAMES_SELF = [\"tailwind-styled-native\", \"tailwind_styled_parser\"]\r\n if (runtimeDir) {\r\n // runtimeDir is typically dist/ — go up to package root, then into native/\r\n for (const depth of [\"..\", path.join(\"..\", \"..\"), path.join(\"..\", \"..\", \"..\")]) {\r\n const pkgRoot = path.resolve(runtimeDir, depth)\r\n for (const bin of BINARY_NAMES_SELF) {\r\n for (const suffix of [\"\", `.${platform}`, `.${napiPlatform}`]) {\r\n const candidate = path.resolve(pkgRoot, \"native\", `${bin}${suffix}.node`)\r\n tried.push(`self-bundled:${candidate}`)\r\n if (fs.existsSync(candidate)) {\r\n return { path: candidate, source: \"prebuilt\", platform, tried }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // 3. Local build candidates\r\n const cwd = process.cwd()\r\n const base = runtimeDir ?? cwd\r\n // napi-rs naming: platform key may have -gnu suffix on Linux (already computed above)\r\n\r\n // Both possible binary names:\r\n // - \"tailwind_styled_parser\" (old hardcoded name in resolvers)\r\n // - \"tailwind-styled-native\" (actual binaryName in native/package.json)\r\n const BINARY_NAMES = [\"tailwind-styled-native\", \"tailwind_styled_parser\"]\r\n\r\n const localCandidates: string[] = []\r\n\r\n for (const bin of BINARY_NAMES) {\r\n localCandidates.push(path.resolve(base, `${bin}.node`))\r\n localCandidates.push(path.resolve(base, \"..\", `${bin}.node`))\r\n localCandidates.push(path.resolve(base, `${bin}.${platform}.node`))\r\n localCandidates.push(path.resolve(base, `${bin}.${napiPlatform}.node`))\r\n }\r\n\r\n // Walk up from cwd AND base to find repo root native/ dir\r\n // Needed when npm workspaces sets cwd to the package subdir\r\n for (const startDir of [cwd, base]) {\r\n let dir = startDir\r\n for (let i = 0; i < 6; i++) {\r\n const nativeDir = path.resolve(dir, \"native\")\r\n for (const bin of BINARY_NAMES) {\r\n localCandidates.push(path.resolve(nativeDir, `${bin}.node`))\r\n localCandidates.push(path.resolve(nativeDir, `${bin}.${platform}.node`))\r\n localCandidates.push(path.resolve(nativeDir, `${bin}.${napiPlatform}.node`))\r\n localCandidates.push(path.resolve(nativeDir, \"target\", \"release\", `${bin}.node`))\r\n }\r\n const parent = path.resolve(dir, \"..\")\r\n if (parent === dir) break\r\n dir = parent\r\n }\r\n }\r\n\r\n for (const candidate of localCandidates) {\r\n tried.push(`local:${candidate}`)\r\n if (fs.existsSync(candidate)) {\r\n return { path: candidate, source: \"local\", platform, tried }\r\n }\r\n }\r\n\r\n return { path: null, source: \"not-found\", platform, tried }\r\n}\r\n\r\n/**\r\n * Format human-readable error untuk \"binary not found\".\r\n */\r\nexport function formatNativeNotFoundError(result: NativeResolutionResult): string {\r\n const lines = [\r\n `[tailwind-styled] Native binding not found for ${result.platform}`,\r\n ``,\r\n `Tried:`,\r\n ...result.tried.map(t => ` - ${t}`),\r\n ``,\r\n `Solutions:`,\r\n ` 1. Build locally: npm run build:rust`,\r\n ` 2. Install prebuilt: npm install @tailwind-styled/native-${result.platform}`,\r\n ` 3. Override path: TW_NATIVE_PATH=/path/to/parser.node`,\r\n ]\r\n return lines.join(\"\\n\")\r\n}","import { createHash } from \"node:crypto\"\r\nimport fs from \"node:fs\"\r\nimport path from \"node:path\"\r\nimport { fileURLToPath } from \"node:url\"\r\nimport { createRequire } from \"node:module\"\r\n\r\n// Native-only: Node.js is always available. No browser fallback.\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Types\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type TokenMap = Record<string, string>\r\n\r\nexport type VariantValue = string | number | boolean | undefined\r\n\r\nexport type VariantProps = Record<string, VariantValue>\r\n\r\nexport type HtmlTagName = keyof HTMLElementTagNameMap\r\n\r\nexport type CompoundCondition = Record<string, string | number | boolean>\r\n\r\nexport type VariantMatrix = Record<string, Array<string | number | boolean>>\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Logging\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface Logger {\r\n warn(...args: unknown[]): void\r\n debug(...args: unknown[]): void\r\n error(...args: unknown[]): void\r\n log(...args: unknown[]): void\r\n}\r\n\r\nexport function createLogger(namespace: string): Logger {\r\n const prefix = `[${namespace}]`\r\n return {\r\n warn(...args: unknown[]) {\r\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\r\n },\r\n debug(...args: unknown[]) {\r\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\r\n },\r\n error(...args: unknown[]) {\r\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\r\n },\r\n log(...args: unknown[]) {\r\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\r\n },\r\n }\r\n}\r\n\r\nexport function createDebugLogger(namespace: string, label?: string): (msg: string) => void {\r\n const prefix = label ? `[${namespace}:${label}]` : `[${namespace}]`\r\n return (msg: string) => {\r\n if (process.env.DEBUG?.includes(namespace) || process.env.TW_DEBUG) {\r\n console.debug(prefix, msg)\r\n }\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Error handling\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type ErrorSource = \"rust\" | \"validation\" | \"compile\" | \"io\" | \"config\" | \"unknown\"\r\n\r\ntype ZodLikeIssue = {\r\n path?: readonly PropertyKey[]\r\n message?: string\r\n}\r\n\r\nfunction formatIssuePath(path?: readonly PropertyKey[]): string {\r\n if (!path || path.length === 0) return \"(root)\"\r\n return path\r\n .map((segment) =>\r\n typeof segment === \"symbol\" ? segment.description ?? segment.toString() : String(segment)\r\n )\r\n .join(\".\")\r\n}\r\n\r\nexport class TwError extends Error {\r\n /** @deprecated Gunakan source */\r\n public readonly domain: string\r\n public readonly source: ErrorSource\r\n public readonly code: string\r\n public readonly originalCause?: unknown\r\n\r\n constructor(domainOrSource: string, code: string, message: string, cause?: unknown) {\r\n super(message)\r\n this.name = \"TwError\"\r\n this.domain = domainOrSource\r\n this.source = domainOrSource as ErrorSource\r\n this.code = code\r\n this.originalCause = cause\r\n if (Error.captureStackTrace) Error.captureStackTrace(this, TwError)\r\n }\r\n\r\n static fromIo(code: string, message: string): TwError {\r\n return new TwError(\"io\", code, message)\r\n }\r\n\r\n static fromCompile(code: string, message: string): TwError {\r\n return new TwError(\"compile\", code, message)\r\n }\r\n\r\n static fromRust(err: { code?: string; message?: string } | Error | unknown): TwError {\r\n if (err instanceof TwError) return err\r\n if (err instanceof Error) return new TwError(\"rust\", \"RUST_ERROR\", err.message, err)\r\n if (err && typeof err === \"object\") {\r\n const e = err as { code?: string; message?: string }\r\n return new TwError(\"rust\", e.code ?? \"RUST_ERROR\", e.message ?? String(err), err)\r\n }\r\n return new TwError(\"rust\", \"RUST_ERROR\", String(err), err)\r\n }\r\n\r\n /** Buat TwError dari ZodError — dukung shape Zod v3 (`errors`) dan v4 (`issues`). */\r\n static fromZod(err: { issues?: ZodLikeIssue[]; errors?: ZodLikeIssue[] }): TwError {\r\n const first = err.issues?.[0] ?? err.errors?.[0]\r\n const path = formatIssuePath(first?.path)\r\n const message = first ? `${path}: ${first.message}` : \"Schema validation failed\"\r\n return new TwError(\"validation\", \"SCHEMA_VALIDATION_FAILED\", message, err)\r\n }\r\n\r\n static wrap(source: string, code: string, err: unknown): TwError {\r\n if (err instanceof TwError) return err\r\n if (err instanceof Error) return new TwError(source, code, err.message, err)\r\n return new TwError(source, code, String(err), err)\r\n }\r\n\r\n override toString(): string {\r\n return `TwError [${this.source}:${this.code}] ${this.message}`\r\n }\r\n\r\n toJSON(): { name: string; source: string; code: string; message: string } {\r\n return { name: this.name, source: this.source, code: this.code, message: this.message }\r\n }\r\n\r\n toCliMessage(): string {\r\n return `[${this.source.toUpperCase()}:${this.code}] ${this.message}`\r\n }\r\n}\r\n\r\nexport function wrapUnknownError(domain: string, code: string, error: unknown): TwError {\r\n return TwError.wrap(domain, code, error)\r\n}\r\n\r\nexport function isTwError(err: unknown): err is TwError {\r\n return err instanceof TwError\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Native binding resolution\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface LoadNativeBindingOptions<T> {\r\n runtimeDir: string\r\n candidates: string[]\r\n isValid: (module: unknown) => module is T\r\n invalidExportMessage: string\r\n}\r\n\r\nexport interface LoadNativeBindingResult<T> {\r\n binding: T | null\r\n loadErrors: Array<{ path: string; message: string }>\r\n loadedPath?: string\r\n}\r\n\r\nexport function loadNativeBinding<T>(options: LoadNativeBindingOptions<T>): LoadNativeBindingResult<T> {\r\n const { runtimeDir, candidates, isValid } = options\r\n const loadErrors: Array<{ path: string; message: string }> = []\r\n\r\n for (const candidate of candidates) {\r\n const candidatePath = path.resolve(runtimeDir, candidate)\r\n try {\r\n if (!fs.existsSync(candidatePath) && !fs.existsSync(candidatePath + \".node\")) {\r\n continue\r\n }\r\n const mod = requireNativeModule(candidatePath)\r\n if (mod && isValid(mod)) {\r\n return { binding: mod, loadErrors, loadedPath: candidatePath }\r\n }\r\n loadErrors.push({ path: candidatePath, message: options.invalidExportMessage })\r\n } catch (e) {\r\n loadErrors.push({ path: candidatePath, message: e instanceof Error ? e.message : String(e) })\r\n }\r\n }\r\n\r\n return { binding: null, loadErrors }\r\n}\r\n\r\nconst _require = createRequire(import.meta.url)\r\n\r\nfunction requireNativeModule(p: string): unknown {\r\n return _require(p)\r\n}\r\n\r\nexport interface ResolveCandidatesOptions {\r\n runtimeDir?: string\r\n envVarNames?: string[]\r\n includeDefaultCandidates?: boolean\r\n enforceNodeExtensionForEnvPath?: boolean\r\n /** @deprecated — ignored, kept for backward compat */\r\n packageName?: string\r\n}\r\n\r\nexport function resolveNativeBindingCandidates(options: ResolveCandidatesOptions): string[] {\r\n const {\r\n envVarNames = [\"TW_NATIVE_PATH\", \"TWS_NATIVE_PATH\"],\r\n includeDefaultCandidates = true,\r\n enforceNodeExtensionForEnvPath = false,\r\n } = options\r\n // Default ke cwd kalau runtimeDir tidak disediakan\r\n const runtimeDir = options.runtimeDir || process.cwd()\r\n const candidates: string[] = []\r\n\r\n for (const envVar of envVarNames) {\r\n const envPath = process.env[envVar]\r\n if (envPath) {\r\n candidates.push(enforceNodeExtensionForEnvPath && !envPath.endsWith(\".node\") ? envPath + \".node\" : envPath)\r\n }\r\n }\r\n\r\n if (!includeDefaultCandidates) return candidates\r\n\r\n if (fs.existsSync(runtimeDir)) {\r\n try {\r\n for (const entry of fs.readdirSync(runtimeDir)) {\r\n if (entry.endsWith(\".node\")) candidates.push(entry)\r\n }\r\n } catch { /* ignore read errors */ }\r\n }\r\n\r\n const BINARY_NAMES = [\"tailwind-styled-native\", \"tailwind_styled_parser\"]\r\n const napiPlatform = process.platform === \"linux\" && process.arch === \"x64\" ? \"linux-x64-gnu\"\r\n : process.platform === \"linux\" && process.arch === \"arm64\" ? \"linux-arm64-gnu\"\r\n : `${process.platform}-${process.arch}`\r\n\r\n for (const bin of BINARY_NAMES) {\r\n candidates.push(path.resolve(runtimeDir, `${bin}.node`))\r\n candidates.push(path.resolve(runtimeDir, `${bin}.${napiPlatform}.node`))\r\n // 1 level: dist/ → package-root/native/ (published npm package)\r\n candidates.push(path.resolve(runtimeDir, \"..\", \"native\", `${bin}.node`))\r\n candidates.push(path.resolve(runtimeDir, \"..\", \"native\", `${bin}.${napiPlatform}.node`))\r\n // cwd fallback (user project root)\r\n candidates.push(path.resolve(process.cwd(), \"native\", `${bin}.node`))\r\n candidates.push(path.resolve(process.cwd(), \"native\", `${bin}.${napiPlatform}.node`))\r\n // 4 level: dist/ → package/ → domain/ → packages/ → repo-root/ (monorepo dev)\r\n candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", `${bin}.node`))\r\n candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", `${bin}.${napiPlatform}.node`))\r\n // 3 level fallback\r\n candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"native\", `${bin}.node`))\r\n }\r\n\r\n return Array.from(new Set(candidates))\r\n}\r\n\r\nexport function resolveRuntimeDir(dir: string | undefined, importMetaUrl: string): string {\r\n if (dir) return path.resolve(dir)\r\n try {\r\n return path.dirname(fileURLToPath(importMetaUrl))\r\n } catch {\r\n return process.cwd()\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Hashing\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport function hashContent(content: string, algorithm: string = \"md5\", length?: number): string {\r\n const hash = createHash(algorithm).update(content).digest(\"hex\")\r\n return length ? hash.slice(0, length) : hash\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Error formatting\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport function formatErrorMessage(error: unknown): string {\r\n if (error instanceof TwError) return error.toString()\r\n if (error instanceof Error) return error.message\r\n return String(error)\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// LRU Cache\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport class LRUCache<K, V> {\r\n private capacity: number\r\n private cache: Map<K, V>\r\n\r\n constructor(capacity: number) {\r\n this.capacity = capacity\r\n this.cache = new Map()\r\n }\r\n\r\n get(key: K): V | undefined {\r\n if (!this.cache.has(key)) return undefined\r\n const value = this.cache.get(key)!\r\n this.cache.delete(key)\r\n this.cache.set(key, value)\r\n return value\r\n }\r\n\r\n set(key: K, value: V): void {\r\n if (this.cache.has(key)) {\r\n this.cache.delete(key)\r\n } else if (this.cache.size >= this.capacity) {\r\n const firstKey = this.cache.keys().next().value\r\n if (firstKey !== undefined) {\r\n this.cache.delete(firstKey)\r\n }\r\n }\r\n this.cache.set(key, value)\r\n }\r\n\r\n delete(key: K): boolean {\r\n return this.cache.delete(key)\r\n }\r\n\r\n has(key: K): boolean {\r\n return this.cache.has(key)\r\n }\r\n\r\n clear(): void {\r\n this.cache.clear()\r\n }\r\n\r\n entries(): IterableIterator<[K, V]> {\r\n return this.cache.entries()\r\n }\r\n\r\n get size(): number {\r\n return this.cache.size\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Trace Utilities\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type { TraceSnapshot, TraceSummary } from \"./trace\"\r\nexport {\r\n getHealthColor,\r\n getModeColor,\r\n formatMemory,\r\n formatDuration,\r\n calculateHealth,\r\n getBuildTimeColor,\r\n getMemoryColor,\r\n createTraceSnapshot,\r\n getPipelinePercentages,\r\n} from \"./trace\"\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Performance Telemetry\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Error Codes\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type { ErrorCode } from \"./error-codes\"\r\nexport { ERROR_CODES, getSuggestion, formatErrorCode } from \"./error-codes\"\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Tailwind Compatibility\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type { TailwindInfo } from \"./compatibility\"\r\nexport { detectTailwind, assertTailwindV4, getTailwindVersion, isTailwindV4 } from \"./compatibility\"\r\n\r\n// ── Native binding schemas (Zod boundary validation)\r\nexport {\r\n NativeScanFileSchema, NativeScanResultSchema,\r\n NativeAnalyzerReportSchema, NativeTransformResultSchema,\r\n NativeCssCompileResultSchema, NativeWatchResultSchema,\r\n NativeCacheEntrySchema, NativeCacheReadResultSchema,\r\n safeParseNative, parseNative,\r\n} from './native-schemas'\r\n\r\n// ── ESM-safe runtime helpers ──────────────────────────────────────────────\r\nexport {\r\n createEsmRequire,\r\n getDirname,\r\n getFilename,\r\n resolveFromRoot,\r\n tryRequire,\r\n resolveNativeNodePath,\r\n} from \"./esmHelpers\"\r\n\r\n// ── Performance telemetry ────────────────────────────────────────────────────\r\nexport {\r\n TelemetryCollector,\r\n getGlobalTelemetry,\r\n resetGlobalTelemetry,\r\n createBuildTimer,\r\n type BuildTelemetry,\r\n type TelemetrySummary,\r\n type BuildPhases,\r\n} from \"./telemetry\"\r\n\r\n// ── Config/JSON schema validation ─────────────────────────────────────────────\r\nexport {\r\n ScanCacheSchema,\r\n ScanCacheClassEntrySchema,\r\n TailwindConfigSchema,\r\n RegistryPluginEntrySchema,\r\n RegistryFileSchema,\r\n PackageJsonSchema,\r\n parseJsonWithSchema,\r\n parseJsonFileWithSchema,\r\n type ScanCache,\r\n type ScanCacheClassEntry,\r\n type TailwindConfig,\r\n type RegistryPluginEntry,\r\n type RegistryFile,\r\n type PackageJson,\r\n} from \"./configSchemas\"\r\n\r\n// ── Worker/bootstrap path resolution ─────────────────────────────────────────\r\nexport {\r\n resolveWorkerPath,\r\n resolveLoaderPath,\r\n type WorkerPathOptions,\r\n type WorkerPathResult,\r\n} from \"./workerResolver\"\r\n\r\n// ── Codegen helpers ───────────────────────────────────────────────────────────\r\nexport {\r\n generateComponentCode,\r\n generateStorybookStory,\r\n generateClassRenameCodemod,\r\n generateBarrelFile,\r\n type ComponentCodegenOptions,\r\n} from \"./codegen\"\r\n\r\n// ── Native binary resolution (QA #1) ─────────────────────────────────────────\r\nexport {\r\n resolveNativeBinary,\r\n formatNativeNotFoundError,\r\n type NativeResolutionResult,\r\n} from \"./native-resolution\"\r\n\r\n// ── Shared observability contract ────────────────────────────────────────────\r\nexport {\r\n createObservabilityClient,\r\n type ClassInspection,\r\n type ClassProperty,\r\n type ClassUsageLocation,\r\n type BuildTrace,\r\n type BuildPhaseTrace,\r\n type DashboardMetrics,\r\n type DashboardSummary,\r\n type ObservabilityClient,\r\n} from \"./observability\"","/**\r\n * Scanner — Rust native bridge\r\n *\r\n * Wraps the Rust scan_workspace and extract_classes_from_source functions.\r\n * Uses @tailwind-styled/shared for native binding resolution.\r\n */\r\nimport path from \"node:path\"\r\nimport { fileURLToPath } from \"node:url\"\r\nimport {\r\n createDebugLogger,\r\n loadNativeBinding,\r\n resolveNativeBindingCandidates,\r\n TwError,\r\n} from \"@tailwind-styled/shared\"\r\n\r\nconst log = createDebugLogger(\"scanner:native\")\r\n\r\n// ESM-compatible __dirname equivalent\r\nfunction getDirname(): string {\r\n if (typeof __dirname !== \"undefined\") {\r\n return __dirname\r\n }\r\n if (typeof import.meta !== \"undefined\" && import.meta.url) {\r\n return path.dirname(fileURLToPath(import.meta.url))\r\n }\r\n return process.cwd()\r\n}\r\n\r\ninterface NativeScannerBinding {\r\n scanWorkspace?: (\r\n root: string,\r\n extensions: string[] | null\r\n ) => {\r\n files: Array<{ file: string; classes: string[]; hash: string }>\r\n totalFiles: number\r\n uniqueClasses: string[] | null\r\n } | null\r\n extractClassesFromSource?: (source: string) => string[] | null\r\n hashFileContent?: (content: string) => string | null\r\n cacheRead?: (cachePath: string) => {\r\n entries: Array<{\r\n file: string\r\n classes: string[]\r\n hash: string\r\n mtimeMs: number\r\n size: number\r\n hitCount: number\r\n lastSeenMs?: number\r\n }>\r\n version: number\r\n } | null\r\n cacheWrite?: (\r\n cachePath: string,\r\n entries: Array<{\r\n file: string\r\n classes: string[]\r\n hash: string\r\n mtimeMs: number\r\n size: number\r\n hitCount: number\r\n lastSeenMs?: number\r\n }>\r\n ) => boolean\r\n cachePriority?: (\r\n mtimeMs: number,\r\n size: number,\r\n cachedMtimeMs: number,\r\n cachedSize: number,\r\n cachedHitCount: number,\r\n cachedLastSeenMs: number,\r\n nowMs: number\r\n ) => number\r\n batchExtractClasses?: (filePaths: string[]) => Array<{\r\n file: string\r\n classes: string[]\r\n content_hash: string\r\n ok: boolean\r\n error?: string | null\r\n }>\r\n scanCacheGet?: (filePath: string, contentHash: string) => string[] | null\r\n scanCachePut?: (filePath: string, contentHash: string, classes: string[], mtimeMs: number, size: number) => void\r\n scanCacheInvalidate?: (filePath: string) => void\r\n scanCacheStats?: () => { size: number }\r\n scanFile?: (filePath: string) => {\r\n file: string\r\n classes: string[]\r\n hash: string\r\n ok: boolean\r\n error?: string | null\r\n }\r\n collectFiles?: (root: string, extensions: string[] | null, ignoreDirs: string[] | null) => string[]\r\n scanFilesBatch?: (filePaths: string[]) => Array<{\r\n file: string\r\n classes: string[]\r\n hash: string\r\n }>\r\n generateSubComponentTypes?: (\r\n root: string,\r\n outputPath: string | null\r\n ) => {\r\n components: Array<{ name: string; classes: string[] }>\r\n outputPath: string | null\r\n totalFiles: number\r\n }\r\n /** Batch-check file existence + stale age. Menggantikan pruneStaleEntries() */\r\n pruneStaleEntries?: (\r\n entries: Array<{ file: string; lastSeenMs: number }>,\r\n maxAgeMs: number | null,\r\n checkExists: boolean | null\r\n ) => { keptIndices: number[]; removed: number }\r\n /** Hitung class frequency stats dari disk cache. Menggantikan computeCacheStats() */\r\n computeCacheStats?: (\r\n filesClasses: string[][],\r\n sizes: number[],\r\n top: number | null\r\n ) => {\r\n totalEntries: number\r\n totalClasses: number\r\n totalSizeBytes: number\r\n avgClassesPerEntryX100: number\r\n mostUsedClasses: Array<{ class: string; count: number }>\r\n }\r\n /** Rebuild workspace result — Rust HashSet dedup + sort. Menggantikan JS fallback di mergeResults() */\r\n rebuildWorkspaceResult?: (\r\n files: Array<{ file: string; classes: readonly string[] }>\r\n ) => { files: Array<{ file: string; classes: string[] }>; totalFiles: number; uniqueClasses: string[] }\r\n\r\n // ── Watch API (QA #12) ──────────────────────────────────────────────────\r\n /** Mulai native file watcher via `notify` crate. Returns handleId. */\r\n startWatch?: (rootDir: string) => { status: string; handleId: number }\r\n /** Poll events yang terkumpul sejak poll terakhir. Queue dikosongkan setelah dipoll. */\r\n pollWatchEvents?: (handleId: number) => Array<{ kind: string; path: string }>\r\n /** Hentikan watcher dengan handleId. */\r\n stopWatch?: (handleId: number) => boolean\r\n}\r\n\r\nconst isValidScannerBinding = (module: unknown): module is NativeScannerBinding => {\r\n const candidate = module as Partial<NativeScannerBinding> | null | undefined\r\n return !!(\r\n candidate &&\r\n (candidate.scanWorkspace ||\r\n candidate.extractClassesFromSource ||\r\n candidate.hashFileContent ||\r\n candidate.cacheRead ||\r\n candidate.cacheWrite)\r\n )\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────\r\n// Native Bridge - Factory Pattern\r\n// ─────────────────────────────────────────────────────────────────────────\r\n\r\nconst createScannerBridgeLoader = () => {\r\n const _state = {\r\n binding: undefined as NativeScannerBinding | null | undefined,\r\n loadError: null as string | null,\r\n candidatePaths: [] as string[],\r\n }\r\n\r\n const throwNativeBindingError = (): never => {\r\n const lines = [\r\n \"FATAL: Native scanner binding not found.\",\r\n \"\",\r\n \"This package requires the Rust native binding 'tailwind_styled_parser.node'.\",\r\n \"The binding was not found in any of these paths:\",\r\n ..._state.candidatePaths.map((p) => ` - ${p}`),\r\n \"\",\r\n ]\r\n\r\n if (_state.loadError) {\r\n lines.push(\"Load error:\", ` ${_state.loadError}`, \"\")\r\n }\r\n\r\n lines.push(\r\n \"To fix this, run:\",\r\n \" npm run build:rust\",\r\n \"\",\r\n \"This will build the native Rust module from the 'native/' directory.\",\r\n \"If you're using this package in a CI/CD environment, ensure Rust toolchain is installed\",\r\n \"and 'npm run build:rust' is executed before running tests or building.\"\r\n )\r\n\r\n throw new TwError(\"rust\", \"SCANNER_NATIVE_BINDING_NOT_FOUND\", lines.join(\"\\n\"))\r\n }\r\n\r\n const scannerGetBinding = (): NativeScannerBinding => {\r\n const cachedBinding = _state.binding\r\n if (cachedBinding !== undefined) {\r\n if (cachedBinding !== null) {\r\n return cachedBinding\r\n }\r\n return throwNativeBindingError()\r\n }\r\n\r\n const runtimeDir = getDirname()\r\n const candidates = resolveNativeBindingCandidates({\r\n runtimeDir,\r\n includeDefaultCandidates: true,\r\n })\r\n\r\n _state.candidatePaths = candidates\r\n\r\n const { binding, loadErrors } = loadNativeBinding<NativeScannerBinding>({\r\n runtimeDir,\r\n candidates,\r\n isValid: isValidScannerBinding,\r\n invalidExportMessage: \"Module loaded but missing expected scanner binding functions\",\r\n })\r\n\r\n if (binding) {\r\n log(`scanner native binding loaded successfully`)\r\n _state.binding = binding\r\n return _state.binding\r\n }\r\n\r\n if (loadErrors.length > 0) {\r\n _state.loadError = loadErrors.map((e) => `${e.path}: ${e.message}`).join(\"; \")\r\n }\r\n\r\n _state.binding = null\r\n return throwNativeBindingError()\r\n }\r\n\r\n return {\r\n get: scannerGetBinding,\r\n scannerGetBinding,\r\n reset: (): void => {\r\n _state.binding = undefined\r\n _state.loadError = null\r\n _state.candidatePaths = []\r\n },\r\n }\r\n}\r\n\r\nconst scannerBridgeLoader = createScannerBridgeLoader()\r\nconst scannerGetBinding = scannerBridgeLoader.get\r\n\r\nexport const resetScannerBridgeCache = scannerBridgeLoader.reset\r\n\r\nexport function scanWorkspaceNative(\r\n root: string,\r\n extensions?: string[]\r\n): ReturnType<NonNullable<NativeScannerBinding[\"scanWorkspace\"]>> {\r\n return scannerGetBinding().scanWorkspace!(root, extensions ?? null)\r\n}\r\n\r\nexport function extractClassesNative(source: string): string[] {\r\n const result = scannerGetBinding().extractClassesFromSource?.(source)\r\n if (result === null || result === undefined) {\r\n throw new TwError(\r\n \"rust\",\r\n \"SCANNER_EXTRACT_FAILED\",\r\n \"Native extractClassesFromSource returned null/undefined\"\r\n )\r\n }\r\n return result\r\n}\r\n\r\nexport function hashContentNative(content: string): string {\r\n const result = scannerGetBinding().hashFileContent?.(content)\r\n if (result === null || result === undefined) {\r\n throw new TwError(\r\n \"rust\",\r\n \"SCANNER_HASH_FAILED\",\r\n \"Native hashFileContent returned null/undefined\"\r\n )\r\n }\r\n return result\r\n}\r\n\r\nexport function isRustCacheAvailable(): boolean {\r\n return true\r\n}\r\n\r\nexport function hasNativeScannerBinding(): boolean {\r\n try {\r\n scannerBridgeLoader.get()\r\n return true\r\n } catch {\r\n return false\r\n }\r\n}\r\n\r\nexport function cacheReadNative(\r\n cachePath: string\r\n): ReturnType<NonNullable<NativeScannerBinding[\"cacheRead\"]>> {\r\n const result = scannerGetBinding().cacheRead?.(cachePath)\r\n if (result === null || result === undefined) {\r\n throw new TwError(\r\n \"rust\",\r\n \"SCANNER_CACHE_READ_FAILED\",\r\n \"Native cacheRead returned null/undefined\"\r\n )\r\n }\r\n return result\r\n}\r\n\r\nexport function cacheWriteNative(\r\n cachePath: string,\r\n entries: Parameters<NonNullable<NativeScannerBinding[\"cacheWrite\"]>>[1]\r\n): boolean {\r\n const result = scannerGetBinding().cacheWrite?.(cachePath, entries)\r\n if (result === null || result === undefined) {\r\n throw new TwError(\r\n \"rust\",\r\n \"SCANNER_CACHE_WRITE_FAILED\",\r\n \"Native cacheWrite returned null/undefined\"\r\n )\r\n }\r\n return result\r\n}\r\n\r\nexport function cachePriorityNative(\r\n mtimeMs: number,\r\n size: number,\r\n cachedMtimeMs: number,\r\n cachedSize: number,\r\n cachedHitCount: number,\r\n cachedLastSeenMs: number,\r\n nowMs = Date.now()\r\n): number {\r\n const result = scannerGetBinding().cachePriority?.(\r\n mtimeMs,\r\n size,\r\n cachedMtimeMs,\r\n cachedSize,\r\n cachedHitCount,\r\n cachedLastSeenMs,\r\n nowMs\r\n )\r\n if (result === null || result === undefined) {\r\n throw new TwError(\r\n \"rust\",\r\n \"SCANNER_CACHE_PRIORITY_FAILED\",\r\n \"Native cachePriority returned null/undefined\"\r\n )\r\n }\r\n return result\r\n}\r\n\r\nexport function batchExtractClassesNative(filePaths: string[]): Array<{\r\n file: string\r\n classes: string[]\r\n content_hash: string\r\n ok: boolean\r\n error?: string | null\r\n}> {\r\n const binding = scannerGetBinding()\r\n if (!binding.batchExtractClasses) {\r\n throw new Error(\"FATAL: Native binding 'batchExtractClasses' is required but not available.\")\r\n }\r\n return binding.batchExtractClasses(filePaths) ?? []\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// In-memory scan cache (Rust DashMap — zero disk I/O)\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport function scanCacheGet(filePath: string, contentHash: string): string[] | null {\r\n const binding = scannerGetBinding()\r\n if (!binding.scanCacheGet) {\r\n throw new Error(\"FATAL: Native binding 'scanCacheGet' is required but not available.\")\r\n }\r\n return binding.scanCacheGet(filePath, contentHash) ?? null\r\n}\r\n\r\nexport function scanCachePut(\r\n filePath: string,\r\n contentHash: string,\r\n classes: string[],\r\n mtimeMs: number,\r\n size: number\r\n): void {\r\n const binding = scannerGetBinding()\r\n if (!binding.scanCachePut) {\r\n throw new Error(\"FATAL: Native binding 'scanCachePut' is required but not available.\")\r\n }\r\n binding.scanCachePut(filePath, contentHash, classes, mtimeMs, size)\r\n}\r\n\r\nexport function scanCacheInvalidate(filePath: string): void {\r\n const binding = scannerGetBinding()\r\n if (!binding.scanCacheInvalidate) {\r\n throw new Error(\"FATAL: Native binding 'scanCacheInvalidate' is required but not available.\")\r\n }\r\n binding.scanCacheInvalidate(filePath)\r\n}\r\n\r\nexport function scanCacheStats(): { size: number } {\r\n const binding = scannerGetBinding()\r\n if (!binding.scanCacheStats) {\r\n throw new Error(\"FATAL: Native binding 'scanCacheStats' is required but not available.\")\r\n }\r\n return binding.scanCacheStats() as { size: number }\r\n}\r\nexport function scanFileNative(filePath: string): {\r\n file: string\r\n classes: string[]\r\n hash: string\r\n ok: boolean\r\n error?: string | null\r\n} {\r\n const binding = scannerGetBinding()\r\n if (!binding.scanFile) {\r\n throw new Error(\"FATAL: Native binding 'scanFile' is required but not available.\")\r\n }\r\n return binding.scanFile(filePath)\r\n}\r\n/**\r\n * Native file walker — kumpulkan file paths rekursif tanpa baca konten.\r\n *\r\n * Menggantikan `collectFiles()` di `parallel-scanner.ts`.\r\n * Returns null jika binding tidak tersedia (fallback ke JS).\r\n */\r\nexport function collectFilesNative(\r\n root: string,\r\n extensions: string[] | null,\r\n ignoreDirs: string[] | null\r\n): string[] | null {\r\n const binding = scannerGetBinding()\r\n if (!binding.collectFiles) return null\r\n return binding.collectFiles(root, extensions, ignoreDirs)\r\n}\r\n/**\r\n * Batch scan + hash banyak file sekaligus dalam satu NAPI call.\r\n *\r\n * Menggantikan loop `scanFileNative()` per file di worker thread.\r\n * Rust: `par_iter()` via rayon — semua file diproses paralel di thread pool Rust,\r\n * tanpa overhead spawn JS worker untuk setiap chunk.\r\n *\r\n * Kapan pakai ini vs `batchExtractClassesNative`:\r\n * - `scanFilesBatch` → butuh {file, classes, hash} — scan + hash sekaligus\r\n * - `batchExtractClasses` → hanya butuh {file, classes, content_hash, ok, error}\r\n *\r\n * Returns: array dengan panjang sama dengan input. File yang gagal dibaca\r\n * dikembalikan dengan classes:[] dan hash:\"\".\r\n */\r\nexport function scanFilesBatchNative(filePaths: string[]): Array<{\r\n file: string\r\n classes: string[]\r\n hash: string\r\n}> {\r\n const binding = scannerGetBinding()\r\n if (!binding.scanFilesBatch) {\r\n // Fallback: panggil scanFile satu per satu\r\n return filePaths.map((fp) => {\r\n try {\r\n const r = binding.scanFile?.(fp)\r\n return r\r\n ? { file: r.file, classes: r.classes, hash: r.hash ?? \"\" }\r\n : { file: fp, classes: [], hash: \"\" }\r\n } catch {\r\n return { file: fp, classes: [], hash: \"\" }\r\n }\r\n })\r\n }\r\n return binding.scanFilesBatch(filePaths)\r\n}\r\n \r\n/**\r\n * Scan workspace rekursif dan generate TypeScript type declarations\r\n * untuk setiap sub-component yang ditemukan.\r\n *\r\n * Menggantikan operasi scan manual + string codegen di JS.\r\n * Rust: walkdir + regex class extraction + type codegen dalam satu pass.\r\n *\r\n * @param root Direktori root workspace\r\n * @param outputPath Path output file .d.ts (opsional — kalau null, hanya return result)\r\n */\r\nexport function generateSubComponentTypesNative(\r\n root: string,\r\n outputPath?: string\r\n): {\r\n components: Array<{ name: string; classes: string[] }>\r\n outputPath: string | null\r\n totalFiles: number\r\n} | null {\r\n const binding = scannerGetBinding()\r\n if (!binding.generateSubComponentTypes) return null\r\n return binding.generateSubComponentTypes(root, outputPath ?? null) as {\r\n components: Array<{ name: string; classes: string[] }>\r\n outputPath: string | null\r\n totalFiles: number\r\n }\r\n}\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// pruneStaleEntries + computeCacheStats — native wrappers\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Batch-check file existence + stale age menggunakan Rust syscalls.\r\n * Returns `null` jika native tidak tersedia (JS fallback di caller).\r\n *\r\n * Menggantikan loop `existsSync()` di `pruneStaleEntries()` (cache-native.ts).\r\n */\r\nexport function pruneStaleEntriesNative(\r\n entries: Array<{ file: string; lastSeenMs?: number }>,\r\n maxAgeMs?: number,\r\n checkExists?: boolean\r\n): { keptIndices: number[]; removed: number } | null {\r\n const binding = scannerGetBinding()\r\n if (!binding.pruneStaleEntries) return null\r\n return binding.pruneStaleEntries(\r\n entries.map((e) => ({ file: e.file, lastSeenMs: e.lastSeenMs ?? 0 })),\r\n maxAgeMs ?? null,\r\n checkExists ?? null\r\n )\r\n}\r\n\r\n/**\r\n * Hitung class frequency + stats dari disk cache entries menggunakan Rust.\r\n * Returns `null` jika native tidak tersedia (JS fallback di caller).\r\n *\r\n * Menggantikan `computeCacheStats()` di `cache-native.ts`.\r\n */\r\nexport function rebuildWorkspaceResultNative(\r\n files: Array<{ file: string; classes: readonly string[] }>\r\n): { files: typeof files; totalFiles: number; uniqueClasses: string[] } | null {\r\n const binding = scannerBridgeLoader.get()\r\n if (!binding?.rebuildWorkspaceResult) return null\r\n try {\r\n return binding.rebuildWorkspaceResult(files)\r\n } catch {\r\n return null\r\n }\r\n}\r\n\r\nexport function computeCacheStatsNative(\r\n filesClasses: string[][],\r\n sizes: number[],\r\n top?: number\r\n): {\r\n totalEntries: number\r\n totalClasses: number\r\n totalSizeBytes: number\r\n avgClassesPerEntryX100: number\r\n mostUsedClasses: Array<{ class: string; count: number }>\r\n} | null {\r\n const binding = scannerGetBinding()\r\n if (!binding.computeCacheStats) return null\r\n return binding.computeCacheStats(filesClasses, sizes, top ?? null)\r\n}\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Watch API — native wrappers (QA #12)\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Mulai native file watcher menggunakan `notify` crate (Rust).\r\n * Returns `null` jika binding tidak tersedia — fallback ke fs.watch JS.\r\n */\r\nexport function startWatchNative(rootDir: string): { status: string; handleId: number } | null {\r\n try {\r\n const binding = scannerGetBinding()\r\n if (!binding.startWatch) return null\r\n return binding.startWatch(rootDir)\r\n } catch {\r\n return null\r\n }\r\n}\r\n\r\n/**\r\n * Poll events dari native watcher queue. Queue dikosongkan setelah dipoll.\r\n * Returns array kosong jika tidak ada events atau binding tidak tersedia.\r\n */\r\nexport function pollWatchEventsNative(handleId: number): Array<{ kind: string; path: string }> {\r\n try {\r\n const binding = scannerGetBinding()\r\n if (!binding.pollWatchEvents) return []\r\n return binding.pollWatchEvents(handleId)\r\n } catch {\r\n return []\r\n }\r\n}\r\n\r\n/**\r\n * Hentikan native watcher dengan handleId.\r\n */\r\nexport function stopWatchNative(handleId: number): boolean {\r\n try {\r\n const binding = scannerGetBinding()\r\n if (!binding.stopWatch) return false\r\n return binding.stopWatch(handleId)\r\n } catch {\r\n return false\r\n }\r\n}\r\n\r\n/**\r\n * Cek apakah native watch API tersedia.\r\n */\r\nexport function hasNativeWatchBinding(): boolean {\r\n try {\r\n const binding = scannerGetBinding()\r\n return !!(binding.startWatch && binding.pollWatchEvents && binding.stopWatch)\r\n } catch {\r\n return false\r\n }\r\n}","/**\r\n * tailwind-styled-v5 — Native Bridge Loader\r\n *\r\n * Uses @tailwind-styled/shared for native binding resolution.\r\n * All functions require native Rust binding - no JS fallback.\r\n */\r\n\r\nimport { resolveNativeBinary, resolveRuntimeDir } from \"@tailwind-styled/shared\"\r\n\r\n// require() is safe here — tsup banner injects CJS-compatible require into ESM output.\r\n// See tsup.config.ts esbuildOptions banner for how this is set up.\r\nconst _loadNative = (path: string): unknown => require(path)\r\n\r\nexport interface ComponentMetadata {\r\n component: string\r\n tag: string\r\n baseClass: string\r\n subComponents: Record<string, { tag?: string; class: string }>\r\n}\r\n\r\nexport interface NativeRscResult {\r\n isServer: boolean\r\n needsClientDirective: boolean\r\n clientReasons: string[]\r\n}\r\n\r\nconst log = (...args: unknown[]) => {\r\n if (process.env.DEBUG?.includes(\"compiler:native\")) {\r\n console.log(\"[compiler:native]\", ...args)\r\n }\r\n}\r\n\r\n// ── Type Exports ────────────────────────────────────────────────────────────────\r\n\r\nexport interface NativeBridge {\r\n // Core transform\r\n transformSource?: (source: string, opts?: Record<string, string>) => NativeTransformResult | null\r\n extractClassesFromSource?: (source: string) => string[]\r\n hasTwUsage?: (source: string) => boolean\r\n isAlreadyTransformed?: (source: string) => boolean\r\n // Class Extractor\r\n extractAllClasses?: (source: string) => string[]\r\n parseClasses?: (raw: string) => Array<{ raw: string; type: string }>\r\n // Application functions\r\n extractComponentUsage?: (source: string) => Array<{ component: string; propsJson: string }>\r\n normalizeAndDedupClasses?: (raw: string) => { normalized: string; duplicatesRemoved: number; uniqueCount: number }\r\n diffClassLists?: (previous: string[], current: string[]) => { added: string[]; removed: string[]; unchanged: string[]; hasChanges: boolean }\r\n batchExtractClasses?: (filePaths: string[]) => Array<{ file: string; classes: string[]; contentHash: string; ok: boolean; error?: string }>\r\n checkAgainstSafelist?: (classes: string[], safelist: string[]) => { matched: string[]; unmatched: string[]; safelistSize: number }\r\n // Batch 2\r\n hoistComponents?: (source: string) => { code: string; hoisted: string[]; warnings: string[] }\r\n compileVariantTable?: (configJson: string) => { id: string; tableJson: string; keys: string[]; defaultKey: string; combinations: number }\r\n classifyAndSortClasses?: (classes: string[]) => Array<{ className: string; bucket: string; sortOrder: number }>\r\n mergeCssDeclarations?: (cssChunks: string[]) => { declarationsJson: string; declarationString: string; count: number }\r\n analyzeClassUsage?: (classes: string[], scanResultJson: string, css: string) => Array<{ className: string; usageCount: number; filesJson: string; bundleSizeBytes: number; isDeadCode: boolean }>\r\n analyzeRsc?: (source: string, filename: string) => {\r\n isServer: boolean\r\n needsClientDirective: boolean\r\n clientReasons: string[]\r\n }\r\n analyzeClasses?: (\r\n filesJson: string,\r\n cwd: string,\r\n flags: number\r\n ) => {\r\n css?: string\r\n code: string\r\n classes: string[]\r\n changed: boolean\r\n rscJson?: string\r\n metadataJson?: string\r\n safelist?: string[]\r\n } | null\r\n // CSS compilation\r\n compileCss?: (classes: string[], prefix?: string | null) => { css: string; classes: string[] }\r\n compileCssLightning?: (classes: string[]) => string\r\n /** Post-process raw Tailwind-generated CSS dengan LightningCSS di Rust */\r\n detectDeadCode?: (scanResultJson: string, css: string) => {\r\n deadInCss: string[]\r\n deadInSource: string[]\r\n liveClasses: string[]\r\n totalCssClasses: number\r\n totalSourceClasses: number\r\n }\r\n processTailwindCssLightning?: (css: string) => { css: string; size_bytes: number; resolved_classes: string[]; unknown_classes: string[] }\r\n processTailwindCssWithTargets?: (css: string, targets: string | null) => { css: string; size_bytes: number }\r\n // Atomic CSS (atomic.rs)\r\n parseAtomicClass?: (twClass: string) => string | null\r\n generateAtomicCss?: (rulesJson: string) => string\r\n toAtomicClasses?: (twClasses: string) => string\r\n clearAtomicRegistry?: () => void\r\n atomicRegistrySize?: () => number\r\n // Impact analysis (impact_analysis.rs)\r\n calculateImpact?: (impactJson: string) => string\r\n calculateRisk?: (className: string, totalComponents: number) => string\r\n calculateSavings?: (bundleSizeBytes: number, componentCount: number) => number\r\n}\r\n\r\nexport interface NativeTransformResult {\r\n code: string\r\n classes: string[]\r\n changed: boolean\r\n rscJson?: string\r\n metadataJson?: string\r\n}\r\n\r\nexport interface ClassExtractResult {\r\n classes: string[]\r\n component_names: string[]\r\n has_tw_usage: boolean\r\n has_use_client: boolean\r\n imports: string[]\r\n}\r\n\r\nconst NATIVE_UNAVAILABLE_MESSAGE =\r\n \"[tailwind-styled/compiler v5] Native binding is required but not available.\\n\" +\r\n \"This package requires native Rust bindings. There is no JavaScript fallback.\\n\" +\r\n \"Please ensure:\\n\" +\r\n \" 1. The native module is properly installed\\n\" +\r\n \" 2. You have run: npm run build:rust (or use prebuilt binary)\\n\" +\r\n \"\\n\" +\r\n \"For help, see: https://tailwind-styled.dev/docs/install\"\r\n\r\n// ── Native Bridge - Factory Pattern\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nlet nativeBridge: NativeBridge | null = null\r\nlet bridgeLoadAttempted = false\r\nlet bridgeLoadError: Error | null = null\r\n\r\nconst isValidNativeBridge = (mod: unknown): mod is NativeBridge => {\r\n const m = mod as Partial<NativeBridge>\r\n return !!(\r\n typeof m.transformSource === \"function\" ||\r\n typeof m.extractAllClasses === \"function\" ||\r\n typeof m.hasTwUsage === \"function\"\r\n )\r\n}\r\n\r\nexport const getNativeBridge = (): NativeBridge => {\r\n if (nativeBridge) {\r\n return nativeBridge\r\n }\r\n\r\n if (bridgeLoadAttempted) {\r\n if (bridgeLoadError) {\r\n throw bridgeLoadError\r\n }\r\n throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\r\n }\r\n\r\n bridgeLoadAttempted = true\r\n\r\n try {\r\n const runtimeDir = resolveRuntimeDir(undefined, import.meta.url)\r\n \r\n // Use shared's native resolution\r\n const result = resolveNativeBinary(runtimeDir)\r\n\r\n if (result.path && result.path.endsWith(\".node\")) {\r\n try {\r\n const binding = _loadNative(result.path) as NativeBridge\r\n if (isValidNativeBridge(binding)) {\r\n nativeBridge = binding\r\n log(\"Native bridge loaded successfully from:\", result.path)\r\n return nativeBridge\r\n }\r\n } catch (e) {\r\n log(\"Failed to require native binding:\", e)\r\n }\r\n }\r\n\r\n throw new Error(`${NATIVE_UNAVAILABLE_MESSAGE}\\n\\nTried paths: ${result.tried.join(\"\\n\")}`)\r\n } catch (err) {\r\n bridgeLoadError = err instanceof Error ? err : new Error(String(err))\r\n log(\"Failed to load native bridge:\", bridgeLoadError.message)\r\n throw bridgeLoadError\r\n }\r\n}\r\n\r\nexport const resetNativeBridgeCache = (): void => {\r\n nativeBridge = null\r\n bridgeLoadAttempted = false\r\n bridgeLoadError = null\r\n log(\"Native bridge cache reset\")\r\n}\r\n\r\n// ── Adaptor for native results\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport const adaptNativeResult = (\r\n raw: NativeTransformResult\r\n): {\r\n code: string\r\n classes: string[]\r\n changed: boolean\r\n rsc?: NativeRscResult\r\n metadata?: ComponentMetadata[]\r\n} => {\r\n return {\r\n code: raw.code ?? \"\",\r\n classes: raw.classes ?? [],\r\n changed: raw.changed ?? false,\r\n rsc: raw.rscJson ? JSON.parse(raw.rscJson) : undefined,\r\n metadata: raw.metadataJson ? JSON.parse(raw.metadataJson) : undefined,\r\n }\r\n}\r\n\r\n// ── Eager init — load native bridge saat module dimuat, bukan saat request pertama\r\n// Mencegah crash di Turbopack dev mode karena lazy init mid-request\r\n// ─────────────────────────────────────────────────────────────────────────────\r\nif (typeof process !== \"undefined\" && !bridgeLoadAttempted) {\r\n try {\r\n getNativeBridge()\r\n } catch {\r\n // Sudah di-capture di bridgeLoadError — akan di-throw saat dipanggil pertama kali\r\n }\r\n}","/**\r\n * tailwindEngine.ts\r\n *\r\n * Pipeline: classes[] → Tailwind JS (expand) → Rust LightningCSS (post-process)\r\n *\r\n * Tailwind adalah sumber kebenaran untuk semua CSS declarations.\r\n * Rust/LightningCSS handle: vendor prefix, minify, dead-code strip.\r\n *\r\n * Tidak ada hardcoded CSS di sini — semuanya dari Tailwind engine.\r\n */\r\n\r\nimport { createRequire } from \"node:module\"\r\nimport { getNativeBridge } from \"./nativeBridge\"\r\n\r\nconst require = createRequire(import.meta.url)\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Tailwind CSS v4 engine loader\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\ninterface TailwindV4Engine {\r\n compile: (\r\n input: string,\r\n options?: {\r\n loadPlugin?: () => unknown\r\n loadStylesheet?: (id: string, base: string) => Promise<{ content: string; base: string }>\r\n loadModule?: (id: string, base: string) => Promise<{ module: unknown; base: string }>\r\n }\r\n ) => Promise<{ build: (candidates: string[]) => string }> | { build: (candidates: string[]) => string }\r\n}\r\n\r\nlet _twEngine: TailwindV4Engine | null = null\r\nlet _twEngineError: Error | null = null\r\n\r\nfunction loadTailwindEngine(): TailwindV4Engine {\r\n if (_twEngine) return _twEngine\r\n if (_twEngineError) throw _twEngineError\r\n\r\n try {\r\n // Tailwind CSS v4 exposes a compile() API\r\n const tw = require(\"tailwindcss\") as TailwindV4Engine\r\n if (typeof tw.compile !== \"function\") {\r\n throw new Error(\"tailwindcss v4 not found — compile() API missing. Check tailwindcss version >= 4.\")\r\n }\r\n _twEngine = tw\r\n return _twEngine\r\n } catch (e) {\r\n _twEngineError = e instanceof Error ? e : new Error(String(e))\r\n throw _twEngineError\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Tailwind → raw CSS\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Generate raw CSS dari Tailwind engine.\r\n * Input: array of Tailwind class names.\r\n * Output: expanded CSS string (belum diminify).\r\n *\r\n * @example\r\n * generateRawCss([\"flex\", \"items-center\", \"hover:bg-blue-500\"])\r\n * // → \".flex{display:flex}.items-center{align-items:center}...\"\r\n */\r\nexport async function generateRawCss(classes: string[], cssEntryContent?: string, root?: string): Promise<string> {\r\n if (classes.length === 0) return \"\"\r\n\r\n const tw = loadTailwindEngine()\r\n const input = cssEntryContent ?? \"@import 'tailwindcss';\"\r\n\r\n const { readFileSync, existsSync } = await import(\"node:fs\")\r\n const { dirname, resolve } = await import(\"node:path\")\r\n\r\n // Resolve dari project root user (process.cwd()) bukan dari lokasi library\r\n // Lebih robust di monorepo — tailwindcss mungkin di-hoist ke root monorepo\r\n const projectRoot = root ?? process.cwd()\r\n const req = createRequire(resolve(projectRoot, \"package.json\"))\r\n\r\n const loadStylesheet = async (id: string, base: string) => {\r\n try {\r\n // Tailwind v4: @import \"tailwindcss\" harus resolve ke CSS entry, bukan JS entry\r\n // req.resolve(\"tailwindcss\") → JS main (\"use strict\") → invalid sebagai CSS\r\n const cssId = id === \"tailwindcss\" ? \"tailwindcss/index.css\"\r\n : id === \"tailwindcss/preflight\" ? \"tailwindcss/preflight.css\"\r\n : id === \"tailwindcss/utilities\" ? \"tailwindcss/utilities.css\"\r\n : id === \"tailwindcss/theme\" ? \"tailwindcss/theme.css\"\r\n : id\r\n\r\n const pkgPath = req.resolve(cssId)\r\n return {\r\n content: readFileSync(pkgPath, \"utf-8\"),\r\n base: dirname(pkgPath),\r\n }\r\n } catch {\r\n try {\r\n const absPath = resolve(base, id)\r\n if (existsSync(absPath)) {\r\n return { content: readFileSync(absPath, \"utf-8\"), base: dirname(absPath) }\r\n }\r\n } catch { /* ignore */ }\r\n return { content: \"\", base }\r\n }\r\n }\r\n\r\n const compiler = await Promise.resolve(tw.compile(input, { loadStylesheet }))\r\n return compiler.build(classes)\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// LightningCSS post-process via Rust\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Kirim raw CSS ke Rust untuk diproses LightningCSS.\r\n * - Vendor prefix otomatis\r\n * - Minify\r\n * - Canonical output\r\n */\r\nfunction postProcessWithLightning(rawCss: string): string {\r\n if (!rawCss) return \"\"\r\n\r\n const native = getNativeBridge()\r\n\r\n // process_tailwind_css_lightning sudah ada di css_compiler.rs\r\n if (typeof native.processTailwindCssLightning !== \"function\") {\r\n throw new Error(\"FATAL: Native binding 'processTailwindCssLightning' is required but not available.\")\r\n }\r\n const result = native.processTailwindCssLightning(rawCss)\r\n return result?.css ?? rawCss\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Main pipeline\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface CssPipelineResult {\r\n css: string\r\n classes: string[]\r\n sizeBytes: number\r\n /** true jika LightningCSS berhasil dijalankan */\r\n optimized: boolean\r\n}\r\n\r\n/**\r\n * Full pipeline: classes[] → Tailwind → LightningCSS → final CSS\r\n *\r\n * @example\r\n * const result = await runCssPipeline([\"flex\", \"p-4\", \"hover:bg-blue-500\"])\r\n * // inject result.css ke <head>\r\n */\r\nexport async function runCssPipeline(\r\n classes: string[],\r\n cssEntryContent?: string,\r\n root?: string,\r\n minify = true\r\n): Promise<CssPipelineResult> {\r\n const unique = [...new Set(classes.filter(Boolean))]\r\n\r\n if (unique.length === 0) {\r\n return { css: \"\", classes: [], sizeBytes: 0, optimized: false }\r\n }\r\n\r\n // Step 1: Tailwind JS → raw CSS (resolve dari project root untuk monorepo support)\r\n const rawCss = await generateRawCss(unique, cssEntryContent, root)\r\n\r\n // Step 2: Rust LightningCSS → optimized CSS (hanya kalau minify=true)\r\n const native = getNativeBridge()\r\n const hasLightning = minify && typeof native.processTailwindCssLightning === \"function\"\r\n const finalCss = hasLightning ? postProcessWithLightning(rawCss) : rawCss\r\n\r\n return {\r\n css: finalCss,\r\n classes: unique,\r\n sizeBytes: finalCss.length,\r\n optimized: hasLightning,\r\n }\r\n}\r\n\r\n/**\r\n * @deprecated Tidak dipakai di Tailwind v4.\r\n * Webpack loader di-skip di dev mode (Turbopack), dan semua CSS generation\r\n * sudah via runCssPipeline() yang async dengan full loadStylesheet support.\r\n * Ditinggal untuk backward compatibility — akan dihapus di major version berikutnya.\r\n */\r\nexport function runCssPipelineSync(_classes: string[]): CssPipelineResult {\r\n return { css: \"\", classes: [], sizeBytes: 0, optimized: false }\r\n}\r\n/**\r\n * Minify dan vendor-prefix CSS dengan explicit browser targets.\r\n *\r\n * Gunakan ini untuk output yang perlu support browser spesifik\r\n * (misal: Chrome 80+, Firefox 80+, Safari 14.1+).\r\n * Default: gunakan `processTailwindCssLightning` tanpa explicit targets.\r\n *\r\n * @example\r\n * const css = processTailwindCssWithTargets(rawCss, \"chrome80,firefox80,safari14.1\")\r\n */\r\nexport function processTailwindCssWithTargets(css: string, targets?: string): string {\r\n const native = getNativeBridge()\r\n if (!native?.processTailwindCssWithTargets) {\r\n throw new Error(\"FATAL: Native binding 'processTailwindCssWithTargets' is required but not available.\")\r\n }\r\n const result = native.processTailwindCssWithTargets(css, targets ?? null) as { css: string } | null\r\n return (result?.css ?? css).trim()\r\n}","/**\r\n * tailwind-styled-v5 — Compiler Index\r\n * \r\n * All functions are backed by native Rust bindings.\r\n * No JavaScript fallback - native is required.\r\n */\r\n\r\nimport { getNativeBridge, resetNativeBridgeCache, adaptNativeResult, type NativeBridge, type NativeTransformResult, type ClassExtractResult, type ComponentMetadata, type NativeRscResult } from \"./nativeBridge\"\r\n\r\nexport { getNativeBridge, resetNativeBridgeCache, adaptNativeResult }\r\nexport type { NativeBridge, NativeTransformResult, ClassExtractResult, ComponentMetadata, NativeRscResult }\r\n\r\nexport type LoaderOutput = {\r\n code: string\r\n changed: boolean\r\n classes: string[]\r\n rsc?: { isServer?: boolean; needsClientDirective?: boolean; clientReasons?: string[] }\r\n engine?: string\r\n}\r\n\r\n// =============================================================================\r\n// CORE TRANSFORM FUNCTIONS\r\n// =============================================================================\r\n\r\nexport const transformSource = (source: string, opts?: Record<string, unknown>) => {\r\n const native = getNativeBridge()\r\n if (!native?.transformSource) {\r\n throw new Error(\"FATAL: Native binding 'transformSource' is required but not available.\")\r\n }\r\n const result = native.transformSource(source, opts as Record<string, string>)\r\n if (!result) {\r\n throw new Error(\"FATAL: transformSource returned null\")\r\n }\r\n return result\r\n}\r\n\r\nexport const hasTwUsage = (source: string): boolean => {\r\n const native = getNativeBridge()\r\n if (!native?.hasTwUsage) {\r\n throw new Error(\"FATAL: Native binding 'hasTwUsage' is required but not available.\")\r\n }\r\n return native.hasTwUsage(source)\r\n}\r\n\r\nexport const isAlreadyTransformed = (source: string): boolean => {\r\n const native = getNativeBridge()\r\n if (!native?.isAlreadyTransformed) {\r\n throw new Error(\"FATAL: Native binding 'isAlreadyTransformed' is required but not available.\")\r\n }\r\n return native.isAlreadyTransformed(source)\r\n}\r\n\r\nexport const shouldProcess = (source: string): boolean => {\r\n return hasTwUsage(source) && !isAlreadyTransformed(source)\r\n}\r\n\r\n// =============================================================================\r\n// CSS COMPILATION\r\n// =============================================================================\r\n\r\nexport const compileCssFromClasses = (classes: string[], prefix?: string | null) => {\r\n const native = getNativeBridge()\r\n if (!native?.transformSource) {\r\n throw new Error(\"FATAL: Native binding 'transformSource' is required but not available.\")\r\n }\r\n const result = native.transformSource(classes.join(\" \"), { prefix: prefix ?? \"\" })\r\n if (!result) {\r\n throw new Error(\"FATAL: transformSource returned null\")\r\n }\r\n return result\r\n}\r\n\r\nexport const buildStyleTag = (classes: string[]): string => {\r\n const result = compileCssFromClasses(classes)\r\n return result?.code ? `<style data-tailwind-styled>${result.code}</style>` : \"\"\r\n}\r\n\r\nexport const compileCssNative = (classes: string[], prefix: string | null = null) => {\r\n return compileCssFromClasses(classes, prefix)\r\n}\r\n\r\nexport const generateCssForClasses = async (\r\n classes: string[],\r\n _tailwindConfig?: Record<string, unknown>,\r\n root?: string,\r\n cssEntryContent?: string,\r\n minify = false\r\n): Promise<string> => {\r\n const { runCssPipeline } = await import(\"./tailwindEngine\")\r\n const result = await runCssPipeline(classes, cssEntryContent, root, minify)\r\n return result.css\r\n}\r\n\r\n// =============================================================================\r\n// CLASS EXTRACTION\r\n// =============================================================================\r\n\r\nexport const extractAllClasses = (source: string): string[] => {\r\n const native = getNativeBridge()\r\n if (!native?.extractAllClasses) {\r\n throw new Error(\"FATAL: Native binding 'extractAllClasses' is required but not available.\")\r\n }\r\n return native.extractAllClasses(source) || []\r\n}\r\n\r\nexport const extractClassesFromSource = (source: string): string => {\r\n const native = getNativeBridge()\r\n if (!native?.extractClassesFromSource) {\r\n throw new Error(\"FATAL: Native binding 'extractClassesFromSource' is required but not available.\")\r\n }\r\n const result = native.extractClassesFromSource(source)\r\n return Array.isArray(result) ? result.join(\" \") : String(result || \"\")\r\n}\r\n\r\nexport const astExtractClasses = (source: string, filename: string) => {\r\n const native = getNativeBridge()\r\n if (!native?.extractClassesFromSource) {\r\n throw new Error(\"FATAL: Native binding 'extractClassesFromSource' is required but not available.\")\r\n }\r\n return native.extractClassesFromSource(source) || []\r\n}\r\n\r\nexport const parseClasses = (raw: string): Array<{ raw: string; type: string }> => {\r\n const native = getNativeBridge()\r\n if (!native?.parseClasses) {\r\n throw new Error(\"FATAL: Native binding 'parseClasses' is required but not available.\")\r\n }\r\n return native.parseClasses(raw) || []\r\n}\r\n\r\n// =============================================================================\r\n// CLASS NORMALIZATION & MERGING\r\n// =============================================================================\r\n\r\nexport const normalizeClasses = (raw: string): string => {\r\n const result = normalizeAndDedupClasses(raw)\r\n return result?.normalized || \"\"\r\n}\r\n\r\nexport const mergeClassesStatic = (classes: string): string => {\r\n const result = normalizeAndDedupClasses(classes)\r\n return result?.normalized || \"\"\r\n}\r\n\r\nexport const normalizeAndDedupClasses = (raw: string) => {\r\n const native = getNativeBridge()\r\n if (!native?.normalizeAndDedupClasses) {\r\n throw new Error(\"FATAL: Native binding 'normalizeAndDedupClasses' is required but not available.\")\r\n }\r\n const result = native.normalizeAndDedupClasses(raw)\r\n return result || { normalized: \"\", duplicatesRemoved: 0, uniqueCount: 0 }\r\n}\r\n\r\n// =============================================================================\r\n// DEAD STYLE ELIMINATOR\r\n// =============================================================================\r\n\r\nexport const eliminateDeadCss = (css: string, deadClasses: Set<string>): string => {\r\n const native = getNativeBridge()\r\n if (!native?.processTailwindCssLightning) {\r\n throw new Error(\"FATAL: Native binding 'processTailwindCssLightning' is required but not available.\")\r\n }\r\n\r\n // Build pruned CSS by stripping dead selectors then minify via Lightning\r\n const deadSet = deadClasses\r\n const pruned = css\r\n .split(/(?<=\\})\\s*/)\r\n .filter((rule) => {\r\n const m = rule.match(/\\.([a-zA-Z0-9_-]+)/)\r\n return !m || !deadSet.has(m[1])\r\n })\r\n .join(\"\\n\")\r\n\r\n const compiled = native.processTailwindCssLightning(pruned) as { css: string } | null\r\n return (compiled?.css ?? pruned).trim()\r\n}\r\n\r\nexport const findDeadVariants = (\r\n variantConfig: Record<string, unknown> | Array<{ name: string; variants: Record<string, Record<string, string>>; defaultVariants?: Record<string, string> }>,\r\n usage: Record<string, Set<string>>\r\n) => {\r\n const unused: string[] = []\r\n\r\n // Support both array-of-components form and raw variants object form\r\n const configs = Array.isArray(variantConfig)\r\n ? variantConfig\r\n : [{ name: \"__root__\", variants: variantConfig as Record<string, Record<string, string>> }]\r\n\r\n for (const component of configs) {\r\n const componentUsage = usage[component.name] ?? new Set<string>()\r\n const variants = component.variants as Record<string, Record<string, string>>\r\n for (const [key, values] of Object.entries(variants)) {\r\n for (const [value] of Object.entries(values)) {\r\n if (!componentUsage.has(`${key}:${value}`)) {\r\n unused.push(`${component.name !== \"__root__\" ? `${component.name}/` : \"\"}${key}:${value}`)\r\n }\r\n }\r\n }\r\n }\r\n\r\n return {\r\n unusedCount: unused.length,\r\n unused,\r\n }\r\n}\r\n\r\nexport const runElimination = (css: string, scanResult: unknown): string => {\r\n const native = getNativeBridge()\r\n if (!native?.detectDeadCode) {\r\n throw new Error(\"FATAL: Native binding 'detectDeadCode' is required but not available.\")\r\n }\r\n\r\n const dead = native.detectDeadCode(\r\n JSON.stringify(scanResult),\r\n css\r\n ) as { deadInCss: string[] }\r\n\r\n return eliminateDeadCss(css, new Set(dead.deadInCss ?? []))\r\n}\r\n\r\nexport const optimizeCss = (css: string): string => {\r\n const native = getNativeBridge()\r\n\r\n // Step 1: detect dead CSS classes (native Rust — HashSet diff)\r\n if (!native?.detectDeadCode) {\r\n throw new Error(\"FATAL: Native binding 'detectDeadCode' is required but not available.\")\r\n }\r\n const deadResult = native.detectDeadCode(\r\n JSON.stringify({ uniqueClasses: [] }),\r\n css\r\n ) as { deadInCss: string[]; liveClasses: string[] }\r\n\r\n // Step 2: minify via Rust Lightning CSS compiler\r\n if (!native?.processTailwindCssLightning) {\r\n throw new Error(\"FATAL: Native binding 'processTailwindCssLightning' is required but not available.\")\r\n }\r\n\r\n // Strip dead selectors then pass through Lightning CSS\r\n const deadSet = new Set(deadResult.deadInCss ?? [])\r\n const pruned = css\r\n .split(/(?<=\\})\\s*/)\r\n .filter((rule) => {\r\n const selectorMatch = rule.match(/\\.([a-zA-Z0-9_-]+)/)\r\n if (!selectorMatch) return true\r\n return !deadSet.has(selectorMatch[1])\r\n })\r\n .join(\"\\n\")\r\n\r\n const compiled = native.processTailwindCssLightning(pruned) as { css: string } | null\r\n return (compiled?.css ?? pruned).trim()\r\n}\r\n\r\nexport const scanProjectUsage = (dirs: string[], cwd: string) => {\r\n const path = require('node:path')\r\n const files = dirs.map(dir => path.resolve(cwd, dir))\r\n const results = batchExtractClasses(files) || []\r\n \r\n const combined: Record<string, Record<string, Set<string>>> = {}\r\n for (const result of results) {\r\n if (result.ok && result.classes) {\r\n for (const cls of result.classes) {\r\n if (!combined[cls]) combined[cls] = {}\r\n combined[cls][result.file] = new Set([cls])\r\n }\r\n }\r\n }\r\n return combined\r\n}\r\n\r\n// =============================================================================\r\n// COMPONENT ANALYSIS\r\n// =============================================================================\r\n\r\nexport const extractComponentUsage = (source: string): Array<{ component: string; propsJson: string }> => {\r\n const native = getNativeBridge()\r\n if (!native?.extractComponentUsage) {\r\n throw new Error(\"FATAL: Native binding 'extractComponentUsage' is required but not available.\")\r\n }\r\n return native.extractComponentUsage(source) || []\r\n}\r\n\r\n// =============================================================================\r\n// DIFF & BATCH OPERATIONS\r\n// =============================================================================\r\n\r\nexport const diffClassLists = (previous: string[], current: string[]) => {\r\n const native = getNativeBridge()\r\n if (!native?.diffClassLists) {\r\n throw new Error(\"FATAL: Native binding 'diffClassLists' is required but not available.\")\r\n }\r\n return native.diffClassLists(previous, current) || { added: [], removed: [], unchanged: [], hasChanges: false }\r\n}\r\n\r\nexport const batchExtractClasses = (filePaths: string[]) => {\r\n const native = getNativeBridge()\r\n if (!native?.batchExtractClasses) {\r\n throw new Error(\"FATAL: Native binding 'batchExtractClasses' is required but not available.\")\r\n }\r\n return native.batchExtractClasses(filePaths) || []\r\n}\r\n\r\nexport const checkAgainstSafelist = (classes: string[], safelist: string[]) => {\r\n const native = getNativeBridge()\r\n if (!native?.checkAgainstSafelist) {\r\n throw new Error(\"FATAL: Native binding 'checkAgainstSafelist' is required but not available.\")\r\n }\r\n return native.checkAgainstSafelist(classes, safelist) || { matched: [], unmatched: [], safelistSize: 0 }\r\n}\r\n\r\n// =============================================================================\r\n// HOISTING\r\n// =============================================================================\r\n\r\nexport const hoistComponents = (source: string) => {\r\n const native = getNativeBridge()\r\n if (!native?.hoistComponents) {\r\n throw new Error(\"FATAL: Native binding 'hoistComponents' is required but not available.\")\r\n }\r\n return native.hoistComponents(source) || { code: source, hoisted: [], warnings: [] }\r\n}\r\n\r\n// =============================================================================\r\n// VARIANT COMPILATION\r\n// =============================================================================\r\n\r\nexport const compileVariantTable = (configJson: string) => {\r\n const native = getNativeBridge()\r\n if (!native?.compileVariantTable) {\r\n throw new Error(\"FATAL: Native binding 'compileVariantTable' is required but not available.\")\r\n }\r\n return native.compileVariantTable(configJson) || { id: \"\", tableJson: \"{}\", keys: [], defaultKey: \"\", combinations: 0 }\r\n}\r\n\r\nexport const compileVariants = (componentId: string, config: Record<string, unknown>) => {\r\n return compileVariantTable(JSON.stringify({ componentId, ...config }))\r\n}\r\n\r\n// =============================================================================\r\n// CSS ANALYSIS\r\n// =============================================================================\r\n\r\nexport const classifyAndSortClasses = (classes: string[]) => {\r\n const native = getNativeBridge()\r\n if (!native?.classifyAndSortClasses) {\r\n throw new Error(\"FATAL: Native binding 'classifyAndSortClasses' is required but not available.\")\r\n }\r\n return native.classifyAndSortClasses(classes) || []\r\n}\r\n\r\nexport const mergeCssDeclarations = (cssChunks: string[]) => {\r\n const native = getNativeBridge()\r\n if (!native?.mergeCssDeclarations) {\r\n throw new Error(\"FATAL: Native binding 'mergeCssDeclarations' is required but not available.\")\r\n }\r\n return native.mergeCssDeclarations(cssChunks) || { declarationsJson: \"{}\", declarationString: \"\", count: 0 }\r\n}\r\n\r\nexport const analyzeClassUsage = (classes: string[], scanResultJson: string, css: string) => {\r\n const native = getNativeBridge()\r\n if (!native?.analyzeClassUsage) {\r\n throw new Error(\"FATAL: Native binding 'analyzeClassUsage' is required but not available.\")\r\n }\r\n return native.analyzeClassUsage(classes, scanResultJson, css) || []\r\n}\r\n\r\n// =============================================================================\r\n// RSC ANALYSIS\r\n// =============================================================================\r\n\r\nexport const analyzeRsc = (source: string, filename: string) => {\r\n const native = getNativeBridge()\r\n if (!native?.analyzeRsc) {\r\n throw new Error(\"FATAL: Native binding 'analyzeRsc' is required but not available.\")\r\n }\r\n return native.analyzeRsc(source, filename) || { isServer: true, needsClientDirective: false, clientReasons: [] }\r\n}\r\n\r\nexport const analyzeFile = (source: string, filename: string) => {\r\n const rsc = analyzeRsc(source, filename)\r\n return {\r\n isServer: rsc?.isServer ?? true,\r\n needsClientDirective: rsc?.needsClientDirective ?? false,\r\n clientReasons: rsc?.clientReasons ?? [],\r\n interactiveClasses: [],\r\n canStaticResolveVariants: true,\r\n }\r\n}\r\n\r\nexport const analyzeVariantUsage = (source: string, componentName: string, variantKeys: string[]) => {\r\n const rsc = analyzeRsc(source, componentName)\r\n return { \r\n resolved: {} as Record<string, string>, \r\n dynamic: [] as string[] \r\n }\r\n}\r\n\r\nexport const injectClientDirective = (source: string): string => {\r\n if (!source.includes('\"use client\"') && !source.includes(\"'use client'\")) {\r\n return '\"use client\";\\n' + source\r\n }\r\n return source\r\n}\r\n\r\nexport const injectServerOnlyComment = (source: string): string => {\r\n return `/* @server-only */\\n${source}`\r\n}\r\n\r\n// =============================================================================\r\n// FULL ANALYSIS\r\n// =============================================================================\r\n\r\nexport const analyzeClasses = (filesJson: string, cwd: string, flags: number) => {\r\n const native = getNativeBridge()\r\n if (!native?.analyzeClasses) {\r\n throw new Error(\"FATAL: Native binding 'analyzeClasses' is required but not available.\")\r\n }\r\n return native.analyzeClasses(filesJson, cwd, flags)\r\n}\r\n\r\n// =============================================================================\r\n// SAFELIST\r\n// =============================================================================\r\n\r\nexport const generateSafelist = (scanDirs: string[], outputPath?: string, cwd?: string) => {\r\n const classes = scanProjectUsage(scanDirs, cwd || process.cwd())\r\n const allClasses = Object.keys(classes).sort()\r\n \r\n if (outputPath) {\r\n const fs = require('node:fs')\r\n fs.writeFileSync(outputPath, JSON.stringify(allClasses, null, 2))\r\n }\r\n \r\n return allClasses\r\n}\r\n\r\nexport const loadSafelist = (safelistPath: string): string[] => {\r\n const fs = require('node:fs')\r\n try {\r\n const content = fs.readFileSync(safelistPath, 'utf-8')\r\n return JSON.parse(content)\r\n } catch {\r\n return []\r\n }\r\n}\r\n\r\n// =============================================================================\r\n// CONFIG LOADING\r\n// =============================================================================\r\n\r\nexport const loadTailwindConfig = (cwd: string = process.cwd()) => {\r\n const fs = require('node:fs')\r\n const path = require('node:path')\r\n \r\n const configFiles = [\r\n 'tailwind.config.ts',\r\n 'tailwind.config.js',\r\n 'tailwind.config.mjs',\r\n 'tailwind.config.cjs',\r\n ]\r\n \r\n for (const file of configFiles) {\r\n const fullPath = path.join(cwd, file)\r\n if (fs.existsSync(fullPath)) {\r\n const mod = require(fullPath)\r\n return mod.default || mod\r\n }\r\n }\r\n \r\n return {}\r\n}\r\n\r\nexport const getContentPaths = (cwd: string = process.cwd()) => {\r\n const path = require('node:path')\r\n return {\r\n content: [\r\n path.join(cwd, 'src/**/*.{js,ts,jsx,tsx}'),\r\n path.join(cwd, 'app/**/*.{js,ts,jsx,tsx}'),\r\n path.join(cwd, 'pages/**/*.{js,ts,jsx,tsx}'),\r\n ],\r\n }\r\n}\r\n\r\n// =============================================================================\r\n// LOADER\r\n// =============================================================================\r\n\r\nexport const runLoaderTransform = (ctx: { filepath: string; source: string; options?: Record<string, unknown> }) => {\r\n const { filepath, source, options } = ctx\r\n const result = transformSource(source, { filename: filepath, ...options })\r\n return {\r\n code: result?.code || \"\",\r\n changed: result?.changed || false,\r\n classes: result?.classes || [],\r\n } as LoaderOutput\r\n}\r\n\r\nexport const shouldSkipFile = (filepath: string): boolean => {\r\n const SKIP_PATHS = ['node_modules', '.next', '.rspack-dist', '.turbo', 'dist/', 'out/']\r\n const skipExtensions = ['.css', '.json', '.md', '.txt', '.yaml', '.yml']\r\n \r\n for (const p of SKIP_PATHS) {\r\n if (filepath.includes(p)) return true\r\n }\r\n for (const ext of skipExtensions) {\r\n if (filepath.endsWith(ext)) return true\r\n }\r\n return false\r\n}\r\n\r\n// =============================================================================\r\n// ROUTE CSS COLLECTOR\r\n// =============================================================================\r\n\r\nexport const fileToRoute = (filepath: string): string | null => {\r\n const normalized = filepath.replace(/\\\\/g, '/')\r\n \r\n if (normalized.includes('/layout.') || normalized.includes('/loading.') || normalized.includes('/error.')) {\r\n return '__global'\r\n }\r\n \r\n const pageMatch = normalized.match(/\\/app\\/(.+?)\\/page\\.[tj]sx?$/)\r\n if (pageMatch) return `/${pageMatch[1]}`\r\n \r\n const rootPage = normalized.match(/\\/app\\/page\\.[tj]sx?$/)\r\n if (rootPage) return '/'\r\n \r\n return null\r\n}\r\n\r\nexport const getAllRoutes = (): string[] => {\r\n const native = getNativeBridge()\r\n if (!native?.analyzeClasses) {\r\n throw new Error(\"FATAL: Native binding 'analyzeClasses' is required but not available.\")\r\n }\r\n return ['/', '__global']\r\n}\r\n\r\nexport const getRouteClasses = (_route: string): Set<string> => {\r\n return new Set()\r\n}\r\n\r\nexport const registerFileClasses = (_filepath: string, _classes: string[]): void => {\r\n // Delegated to native scan cache — no-op at JS layer\r\n}\r\n\r\nexport const registerGlobalClasses = (_classes: string[]): void => {\r\n // Delegated to native scan cache — no-op at JS layer\r\n}\r\n\r\n// =============================================================================\r\n// INCREMENTAL ENGINE\r\n// =============================================================================\r\n\r\n// =============================================================================\r\n// INCREMENTAL ENGINE\r\n// =============================================================================\r\n\r\nlet _incrementalEngineInstance: InstanceType<typeof IncrementalEngine> | null = null\r\n\r\nexport const getIncrementalEngine = () => {\r\n if (!_incrementalEngineInstance) {\r\n _incrementalEngineInstance = new IncrementalEngine()\r\n }\r\n return _incrementalEngineInstance\r\n}\r\n\r\nexport const resetIncrementalEngine = (): void => {\r\n _incrementalEngineInstance = null\r\n}\r\n\r\nexport const IncrementalEngine = class {\r\n compile(source: string) {\r\n return transformSource(source)\r\n }\r\n}\r\n\r\n// =============================================================================\r\n// STYLE BUCKET SYSTEM\r\n// =============================================================================\r\n\r\nexport const getBucketEngine = () => {\r\n const native = getNativeBridge()\r\n if (!native?.classifyAndSortClasses) {\r\n throw new Error(\"FATAL: Native binding 'classifyAndSortClasses' is required but not available.\")\r\n }\r\n return {\r\n add: (className: string) => className,\r\n get: (_bucket: string): string[] => [],\r\n }\r\n}\r\n\r\nexport const resetBucketEngine = (): void => {\r\n // Native engine manages its own state — no JS instance to reset\r\n}\r\n\r\nexport const BucketEngine = class {\r\n add(className: string) {\r\n return className\r\n }\r\n}\r\n\r\nexport const classifyNode = (_node: unknown): string => {\r\n const native = getNativeBridge()\r\n if (!native?.classifyAndSortClasses) {\r\n throw new Error(\"FATAL: Native binding 'classifyAndSortClasses' is required but not available.\")\r\n }\r\n return 'unknown'\r\n}\r\n\r\nexport const detectConflicts = (classes: string[]): string[] => {\r\n const native = getNativeBridge()\r\n if (!native?.analyzeClassUsage) {\r\n throw new Error(\"FATAL: Native binding 'analyzeClassUsage' is required but not available.\")\r\n }\r\n return []\r\n}\r\n\r\nexport const bucketSort = (classes: string[]): string[] => {\r\n return classifyAndSortClasses(classes).map((c) => (c as { raw?: string; class?: string }).raw ?? (c as unknown as string))\r\n}","import { z } from \"zod\"\r\n\r\nconst formatIssues = (error: z.ZodError): string =>\r\n error.issues\r\n .map((issue) => {\r\n const p = issue.path.length > 0 ? issue.path.join(\".\") : \"<root>\"\r\n return `${p}: ${issue.message}`\r\n })\r\n .join(\"; \")\r\n\r\nconst parseWithSchema = <T>(schema: z.ZodType<T>, data: unknown, label: string): T => {\r\n const parsed = schema.safeParse(data)\r\n if (parsed.success) return parsed.data\r\n throw new TypeError(`${label}: ${formatIssues(parsed.error)}`)\r\n}\r\n\r\nexport const NextAdapterOptionsSchema = z.object({\r\n mode: z.literal(\"zero-runtime\").optional(),\r\n autoClientBoundary: z.boolean().optional(),\r\n addDataAttr: z.boolean().optional(),\r\n hoist: z.boolean().optional(),\r\n routeCss: z.boolean().optional(),\r\n incremental: z.boolean().optional(),\r\n verbose: z.boolean().optional(),\r\n include: z.instanceof(RegExp).optional(),\r\n exclude: z.instanceof(RegExp).optional(),\r\n})\r\n\r\nexport type NextAdapterOptionsInput = z.infer<typeof NextAdapterOptionsSchema>\r\n\r\nexport const parseNextAdapterOptions = (options: unknown) =>\r\n parseWithSchema(NextAdapterOptionsSchema, options ?? {}, \"next adapter options are invalid\")\r\n","import fs from \"node:fs\"\r\nimport { createRequire } from \"node:module\"\r\nimport path from \"node:path\"\r\n\r\nfunction getDirnameFromUrl(importMetaUrl: string): string {\r\n if (typeof importMetaUrl !== 'string') return ''\r\n // Simple URL parsing without Node.js modules\r\n if (importMetaUrl.startsWith('file://')) {\r\n let withoutFile = importMetaUrl.slice(7)\r\n // On Windows, file URLs can be like file:///C:/path\r\n if (withoutFile[0] === '/' && withoutFile[2] === ':') {\r\n withoutFile = withoutFile.slice(1) // Remove leading / from C:/\r\n }\r\n const lastSlash = Math.max(withoutFile.lastIndexOf('/'), withoutFile.lastIndexOf('\\\\'))\r\n return lastSlash > 0 ? withoutFile.slice(0, lastSlash) : '/'\r\n }\r\n // Fallback for other URL types\r\n const lastSlash = Math.max(importMetaUrl.lastIndexOf('/'), importMetaUrl.lastIndexOf('\\\\'))\r\n return lastSlash > 0 ? importMetaUrl.slice(0, lastSlash) : ''\r\n}\r\n\r\nimport { resolveLoaderPath as sharedResolveLoaderPath } from \"@tailwind-styled/shared\"\r\nimport { scanWorkspace } from \"@tailwind-styled/scanner\"\r\n\r\nimport { parseNextAdapterOptions } from \"./schemas\"\r\n\r\nconst require = createRequire(import.meta.url)\r\n\r\ninterface TailwindStyledLoaderOptions {\r\n /** @deprecated — handled by engine internally */\r\n mode?: \"zero-runtime\"\r\n /** @deprecated — handled by engine internally */\r\n autoClientBoundary?: boolean\r\n /** @deprecated — handled by engine internally */\r\n addDataAttr?: boolean\r\n /** @deprecated — handled by engine internally */\r\n hoist?: boolean\r\n /** @deprecated — handled by engine internally */\r\n routeCss?: boolean\r\n /** @deprecated — handled by engine internally */\r\n incremental?: boolean\r\n verbose?: boolean\r\n preserveImports?: boolean\r\n safelistPath?: string\r\n}\r\n\r\nexport interface TailwindStyledNextOptions {\r\n /** @deprecated — handled by engine internally */\r\n mode?: \"zero-runtime\"\r\n /** @deprecated — handled by engine internally */\r\n autoClientBoundary?: boolean\r\n /** @deprecated — handled by engine internally */\r\n addDataAttr?: boolean\r\n /** @deprecated — handled by engine internally */\r\n hoist?: boolean\r\n /** @deprecated — handled by engine internally */\r\n routeCss?: boolean\r\n /** @deprecated — handled by engine internally */\r\n incremental?: boolean\r\n /** Show detailed loader output */\r\n verbose?: boolean\r\n /** Path to generated safelist CSS file. Default: <cwd>/__tw_safelist.css */\r\n safelistPath?: string\r\n include?: RegExp\r\n exclude?: RegExp\r\n}\r\n\r\nimport type { NextConfig } from \"next\"\r\n\r\n// Derive webpack types directly from Next.js — always in sync with installed version\r\ntype NextWebpackFn = NonNullable<NextConfig[\"webpack\"]>\r\ntype NextWebpackConfig = Parameters<NextWebpackFn>[0]\r\ntype NextWebpackOptions = Parameters<NextWebpackFn>[1]\r\n\r\n// Derive turbopack rule types from NextConfig\r\ntype TurboRules = NonNullable<NonNullable<NextConfig[\"turbopack\"]>[\"rules\"]>\r\ntype TurbopackLoaderRule = TurboRules[string]\r\n\r\n// Derive webpack module rule type for safe iteration\r\ntype ModuleRule = NonNullable<NonNullable<NextWebpackConfig[\"module\"]>[\"rules\"]>[number]\r\ntype RuleUseEntry = { loader?: string; options?: unknown }\r\n\r\ninterface NextWebpackUseEntry {\r\n loader: string\r\n options?: TailwindStyledLoaderOptions\r\n}\r\n\r\ninterface NextWebpackRule {\r\n test?: RegExp\r\n exclude?: RegExp\r\n enforce?: \"pre\" | \"post\"\r\n use?: NextWebpackUseEntry[]\r\n}\r\n\r\n\r\nconst resolveRuntimeDir = (): string => getDirnameFromUrl(import.meta.url)\r\n\r\nconst resolveLoaderPath = (basename: string): string => {\r\n try {\r\n return sharedResolveLoaderPath(basename, import.meta.url)\r\n } catch {\r\n const runtimeDir = resolveRuntimeDir()\r\n const candidates = [\r\n path.resolve(runtimeDir, `${basename}.mjs`),\r\n path.resolve(runtimeDir, `${basename}.js`),\r\n path.resolve(runtimeDir, `${basename}.cjs`),\r\n ]\r\n\r\n for (const candidate of candidates) {\r\n if (fs.existsSync(candidate)) {\r\n return candidate\r\n }\r\n }\r\n\r\n throw new Error(\r\n `[tailwind-styled] Loader not found for '${basename}'. Checked: ${candidates.join(\", \")}`\r\n )\r\n }\r\n}\r\n\r\nfunction checkNextVersion(): void {\r\n try {\r\n const pkgPath = require.resolve(\"next/package.json\")\r\n const { version } = require(pkgPath)\r\n const major = Number.parseInt(version.split(\".\")[0], 10)\r\n if (major < 15) {\r\n console.warn(\r\n `[tailwind-styled] Next.js ${version} detected. Recommended: 15+ for full Turbopack support.`\r\n )\r\n }\r\n } catch {\r\n // next not resolvable — skip check\r\n }\r\n}\r\n\r\nconst DEFAULT_INCLUDE = /\\.[jt]sx?$/\r\nconst DEFAULT_EXCLUDE = /node_modules/\r\n\r\n/**\r\n * Next.js App Router entry-point files yang TIDAK boleh diproses oleh TW loader.\r\n *\r\n * Mengapa: file-file ini adalah RSC boundary points yang dikelola Next.js secara khusus.\r\n * Jika loader menginjeksi TRANSFORM_MARKER atau memodifikasi source-nya—bahkan ketika\r\n * `changed: false`—Next.js/React Compiler kehilangan sinyal bahwa file adalah pure RSC,\r\n * sehingga locale injection dari Accept-Language header (Next.js 16+) tidak konsisten\r\n * antara SSR pass (server: lang=\"id\") dan hydration pass (client: lang=\"en\").\r\n *\r\n * File yang dikecualikan: layout, page, loading, error, not-found, template, default\r\n * semuanya adalah Next.js segment conventions yang tidak boleh disentuh loader pihak ketiga.\r\n */\r\nconst NEXT_RSC_ENTRIES =\r\n /(?:^|[\\\\/])(?:layout|page|loading|error|not-found|template|default)\\.[jt]sx?$/\r\n\r\n/**\r\n * Gabungkan user-supplied exclude dengan NEXT_RSC_ENTRIES.\r\n * Menggunakan non-capturing group agar tidak interferensi dengan capture group lain.\r\n */\r\nconst buildExcludePattern = (userExclude?: RegExp): RegExp => {\r\n if (!userExclude) return new RegExp(`(?:${DEFAULT_EXCLUDE.source})|(?:${NEXT_RSC_ENTRIES.source})`)\r\n return new RegExp(`(?:${userExclude.source})|(?:${NEXT_RSC_ENTRIES.source})`)\r\n}\r\n\r\nconst createLoaderOptions = (options: TailwindStyledNextOptions): Readonly<TailwindStyledLoaderOptions> => {\r\n // Deprecated options — still passed for loader backward compat but engine ignores them\r\n const opts: TailwindStyledLoaderOptions = {\r\n mode: \"zero-runtime\", // only supported mode\r\n autoClientBoundary: true, // always on (engine handles it)\r\n preserveImports: true,\r\n }\r\n if (options.verbose !== undefined) opts.verbose = options.verbose\r\n opts.safelistPath = options.safelistPath ?? path.join(process.cwd(), \".next\", \"tailwind-styled-safelist.css\")\r\n return Object.freeze(opts)\r\n}\r\n\r\nconst buildTurbopackRules = (\r\n loaderPath: string,\r\n loaderOptions: TailwindStyledLoaderOptions\r\n): TurboRules => {\r\n const extensions = [\"js\", \"jsx\", \"ts\", \"tsx\", \"mjs\", \"cjs\"]\r\n return Object.fromEntries(\r\n extensions.map((ext) => [\r\n `**/*.${ext}`, // ← recursive glob: match semua subdirectory, bukan hanya root\r\n { loaders: [{ loader: loaderPath, options: loaderOptions }] },\r\n ])\r\n ) as TurboRules\r\n}\r\n\r\nconst normalizeLoaderPath = (loaderPath: string): string => path.resolve(loaderPath)\r\n\r\nconst applyWebpackRule = (\r\n config: NextWebpackConfig,\r\n options: TailwindStyledNextOptions,\r\n loaderPath: string\r\n): NextWebpackConfig => {\r\n const loaderOptions = createLoaderOptions(options)\r\n const rules = config.module?.rules ?? []\r\n const normalizedLoaderPath = normalizeLoaderPath(loaderPath)\r\n\r\n const alreadyRegistered = rules.some(\r\n (rule: ModuleRule) =>\r\n Array.isArray(rule?.use) &&\r\n (rule.use as RuleUseEntry[]).some(\r\n (entry: RuleUseEntry) =>\r\n typeof entry.loader === \"string\" &&\r\n normalizeLoaderPath(entry.loader) === normalizedLoaderPath\r\n )\r\n )\r\n\r\n if (alreadyRegistered) return config\r\n\r\n const tailwindStyledRule: NextWebpackRule = {\r\n test: options.include ?? DEFAULT_INCLUDE,\r\n // Selalu kecualikan Next.js RSC entry files (layout, page, dll) bahkan jika\r\n // user menyuplai exclude pattern sendiri — lihat buildExcludePattern.\r\n exclude: buildExcludePattern(options.exclude),\r\n enforce: \"pre\",\r\n use: [{ loader: loaderPath, options: loaderOptions }],\r\n }\r\n\r\n config.module = {\r\n ...(config.module ?? {}),\r\n rules: [...rules, tailwindStyledRule],\r\n }\r\n\r\n const externalPackages = [\r\n \"tailwind-styled-v4\",\r\n \"@tailwind-styled/shared\",\r\n \"@tailwind-styled/compiler\", \r\n \"@tailwind-styled/engine\",\r\n \"@tailwind-styled/plugin\",\r\n \"@tailwind-styled/core\",\r\n \"@tailwind-styled/runtime-css\",\r\n \"@tailwind-styled/runtime\",\r\n \"@tailwind-styled/scanner\",\r\n \"@tailwind-styled/analyzer\",\r\n \"@tailwind-styled/theme\",\r\n \"@tailwind-styled/preset\",\r\n ]\r\n\r\n type ExternalsArray = Extract<NonNullable<NextWebpackConfig[\"externals\"]>, readonly unknown[]>\r\n type ExternalItem = ExternalsArray[number]\r\n\r\n if (!config.externals) {\r\n config.externals = []\r\n }\r\n\r\n const ext = config.externals\r\n if (Array.isArray(ext)) {\r\n externalPackages.forEach((pkg) => {\r\n const found = (ext as ExternalItem[]).find((e: ExternalItem) =>\r\n (typeof e === \"string\" && e.includes(pkg)) ||\r\n (typeof e === \"object\" && e !== null && !Array.isArray(e) &&\r\n Object.keys(e as object).some((k) => k.includes(pkg)))\r\n )\r\n if (!found) {\r\n (ext as string[]).push(pkg)\r\n }\r\n })\r\n }\r\n\r\n return config\r\n}\r\n\r\nconst mergeTurbopackRules = (\r\n existingRules: TurboRules,\r\n nextRules: TurboRules\r\n): TurboRules => {\r\n const merged: TurboRules = { ...existingRules }\r\n\r\n for (const [pattern, incomingRule] of Object.entries(nextRules)) {\r\n const current = merged[pattern]\r\n if (current == null) {\r\n merged[pattern] = incomingRule\r\n continue\r\n }\r\n\r\n if (typeof current === \"object\" && current !== null && \"loaders\" in current) {\r\n const typedCurrent = current as { loaders?: unknown }\r\n if (Array.isArray(typedCurrent.loaders)) {\r\n const incomingLoaders = (incomingRule as { loaders?: unknown[] }).loaders ?? []\r\n merged[pattern] = {\r\n ...(current as TurbopackLoaderRule),\r\n loaders: [...typedCurrent.loaders, ...incomingLoaders],\r\n } as TurbopackLoaderRule\r\n console.warn(\r\n `[tailwind-styled] Turbopack rule '${pattern}' already exists. Appending tailwind-styled loader.`\r\n )\r\n continue\r\n }\r\n }\r\n\r\n merged[pattern] = incomingRule\r\n console.warn(\r\n `[tailwind-styled] Turbopack rule '${pattern}' has incompatible shape. Replacing with tailwind-styled rule.`\r\n )\r\n }\r\n\r\n return merged\r\n}\r\n\r\nexport function withTailwindStyled(options: TailwindStyledNextOptions = {}) {\r\n checkNextVersion()\r\n const normalizedOptions = parseNextAdapterOptions(options)\r\n const webpackLoaderPath = resolveLoaderPath(\"webpackLoader\")\r\n const turbopackLoaderPath = resolveLoaderPath(\"turbopackLoader\")\r\n\r\nreturn function wrap(nextConfig: NextConfig = {}): NextConfig {\r\n const previousWebpack = nextConfig.webpack\r\n const loaderOptions = createLoaderOptions(normalizedOptions)\r\n\r\n // Write _start.txt sentinel so turbopackLoader can detect new dev server starts\r\n // and clear stale tw-classes/ files from previous sessions.\r\n // Also perform initial scan of source files to generate safelist immediately —\r\n // Turbopack custom loaders are unreliable for .tsx files in Next.js 16+.\r\n try {\r\n const safelistPath = loaderOptions.safelistPath\r\n if (safelistPath) {\r\n const twClassesDir = path.join(path.dirname(safelistPath), \"tw-classes\")\r\n fs.mkdirSync(twClassesDir, { recursive: true })\r\n fs.writeFileSync(\r\n path.join(twClassesDir, \"_start.txt\"),\r\n String(Date.now()),\r\n \"utf-8\"\r\n )\r\n\r\n // Pastikan scanner bisa menemukan native binary — set TW_NATIVE_PATH\r\n // dari runtimeDir withTailwindStyled (tailwind-styled-v4/dist/) sebelum\r\n // scanWorkspace dipanggil, karena scanner memakai getDirname() sendiri\r\n // yang mungkin resolve berbeda.\r\n if (!process.env.TW_NATIVE_PATH) {\r\n const runtimeDir = resolveRuntimeDir()\r\n const nativePath = path.resolve(runtimeDir, \"..\", \"native\", \"tailwind-styled-native.node\")\r\n if (fs.existsSync(nativePath)) {\r\n process.env.TW_NATIVE_PATH = nativePath\r\n }\r\n }\r\n\r\n // Helper: ambil hanya @layer utilities dari full Tailwind CSS output\r\n // Base, properties, theme sudah ada di globals.css via @import \"tailwindcss\"\r\n function extractUtilitiesLayer(fullCss: string): string {\r\n // Support both minified \"@layer utilities{\" dan unminified \"@layer utilities {\"\r\n const minified = fullCss.indexOf(\"@layer utilities{\")\r\n const spaced = fullCss.indexOf(\"@layer utilities {\")\r\n const startIdx = minified !== -1 ? minified\r\n : spaced !== -1 ? spaced\r\n : -1\r\n\r\n if (startIdx === -1) return \"\"\r\n\r\n // Track brace depth untuk cari closing } yang benar\r\n let depth = 0\r\n let endIdx = startIdx\r\n for (let i = startIdx; i < fullCss.length; i++) {\r\n if (fullCss[i] === \"{\") depth++\r\n else if (fullCss[i] === \"}\") {\r\n depth--\r\n if (depth === 0) { endIdx = i; break }\r\n }\r\n }\r\n\r\n return fullCss.slice(startIdx, endIdx + 1)\r\n }\r\n\r\n // Initial scan using Rust scanner — walk src/ and extract tw classes\r\n const srcDir = path.join(process.cwd(), \"src\")\r\n if (fs.existsSync(srcDir)) {\r\n try {\r\n const result = scanWorkspace(srcDir)\r\n if (result.uniqueClasses.length > 0) {\r\n // Filter false positives yang lolos dari scanner (sebelum ast_extract.rs fix di-build)\r\n // \"div:action\", \"header:topBar\" dll — sub-component keys bukan Tailwind class\r\n const VALID_VARIANT_PREFIXES = new Set([\r\n \"hover\",\"focus\",\"active\",\"disabled\",\"visited\",\"checked\",\"first\",\"last\",\r\n \"odd\",\"even\",\"focus-within\",\"focus-visible\",\"placeholder\",\"before\",\"after\",\r\n \"dark\",\"sm\",\"md\",\"lg\",\"xl\",\"2xl\",\"motion-reduce\",\"motion-safe\",\r\n \"group\",\"peer\",\"aria\",\"data\",\"supports\",\"not\",\"has\",\"is\",\"where\",\r\n \"rtl\",\"ltr\",\"open\",\"print\",\"portrait\",\"landscape\",\r\n ])\r\n const filteredClasses = result.uniqueClasses.filter((cls: string) => {\r\n // Filter variant prefix yang tidak valid\r\n if (cls.includes(\":\")) {\r\n const prefix = cls.split(\":\")[0]\r\n if (!VALID_VARIANT_PREFIXES.has(prefix ?? \"\")) return false\r\n }\r\n\r\n // Filter arbitrary values dengan float precision tinggi — ini computed values\r\n // dari binary/build artifacts yang ter-scan oleh mistake, bukan class yang\r\n // ditulis tangan. Float dengan 2+ desimal tidak mungkin ditulis manual.\r\n // Contoh: top-[205.64px], w-[1075.7px], left-[328.36px]\r\n // Pattern ini menyebabkan _initial-scan.css membengkak dan sering berubah\r\n // → Tailwind re-scan lebih sering → dev server lambat + flicker\r\n if (/\\[[\\d]+\\.[\\d]{2,}(?:px|rem|em|vh|vw|%)\\]/.test(cls)) return false\r\n\r\n // Filter classes dengan nilai sangat besar (> 9999px) — pasti computed, bukan manual\r\n if (/\\[[\\d]{5,}(?:px|rem|em)?\\]/.test(cls)) return false\r\n\r\n return true\r\n })\r\n // Baca globals.css user — auto-detect tanpa bergantung tailwind-styled.config.json\r\n // supaya custom @theme (warna, font, dll) ikut di-generate oleh Tailwind\r\n let cssEntryContent: string | null = null\r\n const CSS_CANDIDATES = [\r\n \"src/app/globals.css\",\r\n \"src/globals.css\",\r\n \"src/styles/globals.css\",\r\n \"src/tailwind.css\",\r\n \"src/index.css\",\r\n \"styles/globals.css\",\r\n ]\r\n // Prioritas 1: baca dari tailwind-styled.config.json\r\n try {\r\n const twConfigPath = path.join(process.cwd(), \"tailwind-styled.config.json\")\r\n if (fs.existsSync(twConfigPath)) {\r\n const twConfig = JSON.parse(fs.readFileSync(twConfigPath, \"utf-8\")) as {\r\n css?: { entry?: string }\r\n }\r\n const cssEntry = twConfig.css?.entry\r\n if (cssEntry) {\r\n const cssEntryPath = path.join(process.cwd(), cssEntry)\r\n if (fs.existsSync(cssEntryPath)) {\r\n cssEntryContent = fs.readFileSync(cssEntryPath, \"utf-8\")\r\n }\r\n }\r\n }\r\n } catch { /* ignore */ }\r\n // Prioritas 2: auto-detect dari kandidat umum\r\n if (!cssEntryContent) {\r\n for (const candidate of CSS_CANDIDATES) {\r\n const candidatePath = path.join(process.cwd(), candidate)\r\n if (fs.existsSync(candidatePath)) {\r\n cssEntryContent = fs.readFileSync(candidatePath, \"utf-8\")\r\n break\r\n }\r\n }\r\n }\r\n // Strip @source directive dan teks non-CSS dari globals.css\r\n // sebelum pass ke Tailwind compile()\r\n if (cssEntryContent) {\r\n cssEntryContent = cssEntryContent\r\n .replace(/@source\\s+[\"'][^\"']+[\"']\\s*;?\\s*/g, \"\")\r\n .replace(/←[^\\n]*/g, \"\") // strip inline comments seperti \"← ini yang benar\"\r\n .trim()\r\n }\r\n\r\n // Helper: atomic write — tulis ke .tmp dulu, baru rename ke path final.\r\n // Ini mencegah Tailwind scanner membaca file yang sedang ditulis (partial read)\r\n // yang akan menghasilkan CSS incomplete → FLICKER di browser.\r\n function atomicWriteFile(filePath: string, content: string): void {\r\n const tmpPath = `${filePath}.tmp`\r\n try {\r\n fs.writeFileSync(tmpPath, content, \"utf-8\")\r\n fs.renameSync(tmpPath, filePath)\r\n } catch {\r\n try { fs.unlinkSync(tmpPath) } catch { /* ignore */ }\r\n fs.writeFileSync(filePath, content, \"utf-8\")\r\n }\r\n }\r\n\r\n // Tulis placeholder SEBELUM generate dimulai agar Tailwind tidak scan\r\n // file lama yang stale atau mendapat \"file not found\"\r\n const initialScanPath = path.join(twClassesDir, \"_initial-scan.css\")\r\n if (!fs.existsSync(initialScanPath)) {\r\n atomicWriteFile(\r\n initialScanPath,\r\n \"/* tw-classes: initial scan — generating... */\\n@layer utilities {}\\n\"\r\n )\r\n }\r\n\r\n // Generate real CSS via Tailwind JS API + LightningCSS\r\n // Fire-and-forget — wrap() tidak bisa async (return NextConfig bukan Promise)\r\n // CSS ditulis sebelum first request karena startup Next.js butuh ~1-2s\r\n void (async () => {\r\n try {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const compiler = await import(\"@tailwind-styled/compiler\") as { generateCssForClasses?: (...args: unknown[]) => unknown; [key: string]: unknown }\r\n const generateCssForClasses = compiler.generateCssForClasses as (\r\n classes: string[],\r\n config?: Record<string, unknown>,\r\n root?: string,\r\n cssEntryContent?: string,\r\n minify?: boolean\r\n ) => Promise<string>\r\n const css = await generateCssForClasses(\r\n filteredClasses,\r\n {},\r\n process.cwd(),\r\n cssEntryContent ?? undefined,\r\n process.env.NODE_ENV === \"production\" // minify hanya di production\r\n )\r\n if (css) {\r\n // Strip @layer base, @layer properties, @layer theme — sudah ada di globals.css\r\n // via @import \"tailwindcss\". Hanya @layer utilities yang diperlukan di sini\r\n // supaya tidak ada duplikasi yang merusak layout.\r\n const utilitiesOnly = extractUtilitiesLayer(css)\r\n atomicWriteFile(\r\n initialScanPath,\r\n `/* tw-classes: initial scan — auto-generated by withTailwindStyled */\\n${utilitiesOnly}`\r\n )\r\n }\r\n } catch (err) {\r\n // Fallback ke empty rules kalau Tailwind JS API tidak tersedia\r\n console.warn(\"[tailwind-styled] generateCssForClasses gagal, fallback ke empty rules:\", (err as Error).message?.split(\"\\n\")[0])\r\n const css = [\r\n \"/* tw-safelist: initial scan — auto-generated by withTailwindStyled (fallback) */\",\r\n \"@layer utilities {\",\r\n filteredClasses.map((cls: string) => `.${cls.replace(/([^a-zA-Z0-9_-])/g, \"\\\\$1\")} {}`).join(\"\\n\"),\r\n \"}\",\r\n ].join(\"\\n\")\r\n atomicWriteFile(initialScanPath, css)\r\n }\r\n })()\r\n }\r\n } catch (e) {\r\n // Scanner unavailable on this platform — styles will be generated at build time\r\n console.warn(\"[tailwind-styled] Initial scan skipped:\", (e as Error).message?.split(\"\\n\")[0])\r\n }\r\n }\r\n }\r\n } catch { /* non-fatal */ }\r\n\r\n return {\r\n ...nextConfig,\r\n webpack(\r\n config: NextWebpackConfig,\r\n webpackOptions: NextWebpackOptions\r\n ): ReturnType<NextWebpackFn> {\r\n // ── Dev mode guard ──────────────────────────────────────────────────────\r\n // Next.js 15+ default: Turbopack bundling client, webpack hanya SSR.\r\n // Custom loaders Turbopack tidak support .tsx → transform hanya jalan di SSR.\r\n // Hasil: className static di server, raw proxy di client → hydration mismatch.\r\n //\r\n // Fix: skip webpack transform di dev mode sepenuhnya.\r\n // Proxy runtime handle SSR + client secara seragam → identical output → no mismatch.\r\n // Production (next build): webpack handle keduanya → transform aman, optimal.\r\n if (webpackOptions.dev) {\r\n if (typeof previousWebpack !== \"function\") return config\r\n try {\r\n const r = previousWebpack(config, webpackOptions)\r\n return r instanceof Promise ? r : r\r\n } catch { return config }\r\n }\r\n\r\n const apply = (resolvedConfig: NextWebpackConfig) => {\r\n const finalConfig = applyWebpackRule(resolvedConfig, normalizedOptions, webpackLoaderPath)\r\n if (!finalConfig.externals) {\r\n finalConfig.externals = []\r\n }\r\n const externals = finalConfig.externals\r\n if (Array.isArray(externals)) {\r\n externals.push({\r\n \"@tailwind-styled/shared\": \"commonjs2 @tailwind-styled/shared\",\r\n \"@tailwind-styled/compiler\": \"commonjs2 @tailwind-styled/compiler\",\r\n \"@tailwind-styled/engine\": \"commonjs2 @tailwind-styled/engine\",\r\n \"@tailwind-styled/plugin\": \"commonjs2 @tailwind-styled/plugin\",\r\n })\r\n }\r\n return finalConfig\r\n }\r\n\r\n if (typeof previousWebpack !== \"function\") {\r\n return apply(config)\r\n }\r\n\r\n try {\r\n const result = previousWebpack(config, webpackOptions)\r\n return result instanceof Promise ? result.then(apply) : apply(result)\r\n } catch (error) {\r\n throw new Error(\"[tailwind-styled] Failed while executing existing Next webpack config.\", {\r\n cause: error,\r\n })\r\n }\r\n },\r\n serverExternalPackages: [\r\n ...new Set([\r\n ...(nextConfig.serverExternalPackages ?? []),\r\n \"tailwind-styled-v4\",\r\n \"@tailwind-styled/core\",\r\n \"@tailwind-styled/shared\",\r\n \"@tailwind-styled/compiler\",\r\n \"@tailwind-styled/engine\",\r\n \"@tailwind-styled/analyzer\",\r\n \"@tailwind-styled/scanner\",\r\n \"@tailwind-styled/plugin\",\r\n \"@tailwind-styled/runtime-css\",\r\n ]),\r\n ],\r\n turbopack: {\r\n ...(nextConfig.turbopack ?? {}),\r\n rules: mergeTurbopackRules(\r\n (nextConfig.turbopack?.rules ?? {}) as TurboRules,\r\n buildTurbopackRules(turbopackLoaderPath, loaderOptions)\r\n ),\r\n },\r\n }\r\n }\r\n}","import fs from \"node:fs\"\r\nimport { createRequire } from \"node:module\"\r\nimport path from \"node:path\"\r\nimport { fileURLToPath } from \"node:url\"\r\nimport { Worker } from \"node:worker_threads\"\r\nimport { createLogger } from \"@tailwind-styled/shared\"\r\nimport { filePriority, type NativeCacheEntry, readCache, writeCache } from \"./cache-native\"\r\nimport { hashContentNative, isRustCacheAvailable } from \"./native-bridge\"\r\nimport { scanWorkspaceParallel } from \"./parallel-scanner\"\r\nimport {\r\n parseScannerWorkerMessage,\r\n parseScanWorkspaceOptions,\r\n parseScanWorkspaceResult,\r\n type ScanFileResult,\r\n type ScanWorkspaceOptions,\r\n type ScanWorkspaceResult,\r\n} from \"./schemas\"\r\n\r\nconst log = createLogger(\"scanner\")\r\n\r\nconst SCAN_WORKER_TIMEOUT_MS = 120_000\r\n\r\ntype NativeParsedClass = { raw?: string }\r\n// ClassExtractResult shape dari Rust (napi-rs export)\r\ntype NativeClassExtractResult = {\r\n classes: string[]\r\n componentNames: string[]\r\n hasTwUsage: boolean\r\n hasUseClient: boolean\r\n imports: string[]\r\n}\r\ntype NativeParserBinding = {\r\n parse_classes?: (input: string) => NativeParsedClass[]\r\n parseClasses?: (input: string) => NativeParsedClass[]\r\n // Rust returns ClassExtractResult object, bukan plain string[]\r\n extractClassesFromSource?: (source: string) => NativeClassExtractResult | string[] | null\r\n batchExtractClassesNative?: (filePaths: string[]) => Array<{\r\n file: string; classes: string[]; contentHash: string; ok: boolean; error?: string\r\n }>\r\n}\r\n\r\nfunction getRuntimeDir(): string {\r\n if (typeof __dirname !== \"undefined\" && __dirname.length > 0) {\r\n return __dirname\r\n }\r\n if (typeof import.meta !== \"undefined\" && import.meta.url) {\r\n return path.dirname(fileURLToPath(import.meta.url))\r\n }\r\n return process.cwd()\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────\r\n// Native Parser Binding - Factory Pattern (no let!)\r\n// ─────────────────────────────────────────────────────────────────────────\r\n\r\nconst createNativeParserLoader = () => {\r\n const _state = {\r\n binding: undefined as NativeParserBinding | null | undefined,\r\n initError: null as string | null,\r\n }\r\n\r\n const debugNative = (message: string): void => {\r\n log.debug(`[native] ${message}`)\r\n }\r\n\r\n const loadNativeParserBinding = (): NativeParserBinding | null => {\r\n if (_state.binding !== undefined) return _state.binding\r\n\r\n const runtimeDir = getRuntimeDir()\r\n const req = createRequire(path.join(runtimeDir, \"noop.cjs\"))\r\n\r\n const _platform = process.platform\r\n const _arch = process.arch\r\n const _platformArch = `${_platform}-${_arch}`\r\n const _platformArchGnu = _platformArch === \"linux-x64\" ? \"linux-x64-gnu\"\r\n : _platformArch === \"linux-arm64\" ? \"linux-arm64-gnu\"\r\n : _platformArch\r\n\r\n const candidates = [\r\n // ── binaryName baru: tailwind-styled-native (napi-rs naming) ──\r\n // cwd = repo root saat run dari root, atau package dir saat workspaces\r\n path.resolve(process.cwd(), \"native\", \"tailwind-styled-native.node\"),\r\n path.resolve(process.cwd(), \"native\", `tailwind-styled-native.${_platformArch}.node`),\r\n path.resolve(process.cwd(), \"native\", `tailwind-styled-native.${_platformArchGnu}.node`),\r\n // runtimeDir = dist/ → naik 1 level ke package root (npm install case)\r\n // e.g. node_modules/tailwind-styled-v4/dist/ → node_modules/tailwind-styled-v4/native/\r\n path.resolve(runtimeDir, \"..\", \"native\", \"tailwind-styled-native.node\"),\r\n path.resolve(runtimeDir, \"..\", \"native\", `tailwind-styled-native.${_platformArch}.node`),\r\n path.resolve(runtimeDir, \"..\", \"native\", `tailwind-styled-native.${_platformArchGnu}.node`),\r\n // runtimeDir = dist/ → naik 4 level ke repo root (monorepo dev case)\r\n path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", \"tailwind-styled-native.node\"),\r\n path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", `tailwind-styled-native.${_platformArchGnu}.node`),\r\n // 3 level fallback (jika package di-nest lebih dangkal)\r\n path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"native\", \"tailwind-styled-native.node\"),\r\n path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"native\", `tailwind-styled-native.${_platformArchGnu}.node`),\r\n // ── binaryName lama: tailwind_styled_parser (backward compat) ──\r\n path.resolve(process.cwd(), \"native/tailwind_styled_parser.node\"),\r\n path.resolve(process.cwd(), \"native/build/Release/tailwind_styled_parser.node\"),\r\n path.resolve(runtimeDir, \"..\", \"native\", \"tailwind_styled_parser.node\"),\r\n path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", \"tailwind_styled_parser.node\"),\r\n path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"native\", \"tailwind_styled_parser.node\"),\r\n path.resolve(\r\n runtimeDir,\r\n \"..\",\r\n \"..\",\r\n \"..\",\r\n \"native\",\r\n \"build\",\r\n \"Release\",\r\n \"tailwind_styled_parser.node\"\r\n ),\r\n ]\r\n\r\n for (const fullPath of candidates) {\r\n if (!fs.existsSync(fullPath)) continue\r\n try {\r\n const required = req(fullPath) as NativeParserBinding\r\n if (\r\n required &&\r\n (typeof required.extractClassesFromSource === \"function\" ||\r\n typeof required.parseClasses === \"function\" ||\r\n typeof required.parse_classes === \"function\")\r\n ) {\r\n _state.binding = required\r\n debugNative(`using native parser from ${fullPath}`)\r\n return _state.binding\r\n }\r\n } catch (error) {\r\n _state.initError = error instanceof Error ? error.message : String(error)\r\n }\r\n }\r\n\r\n _state.binding = null\r\n if (!_state.initError) {\r\n _state.initError = \"native .node binding not found\"\r\n }\r\n debugNative(`native binding not available: ${_state.initError}`)\r\n return _state.binding\r\n }\r\n\r\n return {\r\n get: loadNativeParserBinding,\r\n reset: (): void => {\r\n _state.binding = undefined\r\n _state.initError = null\r\n },\r\n }\r\n}\r\n\r\nconst nativeParserLoader = createNativeParserLoader()\r\n\r\nfunction normalizeWithNativeParser(tokens: string[]): string[] {\r\n const binding = nativeParserLoader.get()\r\n const parseClasses = binding?.parseClasses ?? binding?.parse_classes\r\n if (!binding || typeof parseClasses !== \"function\") {\r\n throw new Error(\r\n \"Native parser binding is required but not available. Run 'npm run build:rust' to build it.\"\r\n )\r\n }\r\n\r\n try {\r\n const parsed = parseClasses(tokens.join(\" \"))\r\n const normalized = parsed.map((item) => item.raw?.trim() ?? \"\").filter(Boolean)\r\n return Array.from(new Set(normalized))\r\n } catch (error) {\r\n const errorMessage = error instanceof Error ? error.message : String(error)\r\n throw new Error(`Native parser failed: ${errorMessage}. Run 'npm run build:rust' to rebuild.`)\r\n }\r\n}\r\n\r\nexport type { ScanFileResult, ScanWorkspaceOptions, ScanWorkspaceResult } from \"./schemas\"\r\nexport {\r\n parseScannerWorkerMessage,\r\n parseScanWorkspaceOptions,\r\n parseScanWorkspaceResult,\r\n} from \"./schemas\"\r\n\r\nexport const DEFAULT_EXTENSIONS = [\".js\", \".jsx\", \".ts\", \".tsx\", \".mjs\", \".cjs\"]\r\nexport const DEFAULT_IGNORES = [\"node_modules\", \".git\", \".next\", \"dist\", \"out\", \".turbo\", \".cache\"]\r\n\r\nfunction resolveScannerWorkerModulePath(): string | null {\r\n const runtimeDir = (() => {\r\n if (typeof __dirname !== \"undefined\" && __dirname.length > 0) {\r\n return __dirname\r\n }\r\n // ESM fallback\r\n if (typeof import.meta !== \"undefined\" && import.meta.url) {\r\n return path.dirname(fileURLToPath(import.meta.url))\r\n }\r\n // Final fallback\r\n return process.cwd()\r\n })()\r\n\r\n const candidates = [\r\n path.resolve(runtimeDir, \"worker.cjs\"),\r\n path.resolve(runtimeDir, \"worker.js\"),\r\n path.resolve(runtimeDir, \"worker.ts\"),\r\n ]\r\n\r\n for (const candidate of candidates) {\r\n if (fs.existsSync(candidate)) return candidate\r\n }\r\n\r\n return null\r\n}\r\n\r\nfunction scanWorkspaceInWorker(\r\n rootDir: string,\r\n options: ScanWorkspaceOptions\r\n): Promise<ScanWorkspaceResult> {\r\n const normalizedOptions = parseScanWorkspaceOptions(options)\r\n const modulePath = resolveScannerWorkerModulePath()\r\n if (!modulePath) {\r\n return Promise.reject(new Error(\"scanner worker module path could not be resolved\"))\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n const settleState = { settled: false }\r\n\r\n const worker = new Worker(modulePath, { workerData: { rootDir, options: normalizedOptions } })\r\n\r\n const timeout = setTimeout(() => {\r\n if (!settleState.settled) {\r\n settleState.settled = true\r\n void worker.terminate()\r\n reject(new Error(`scanner worker timed out after ${SCAN_WORKER_TIMEOUT_MS}ms`))\r\n }\r\n }, SCAN_WORKER_TIMEOUT_MS)\r\n\r\n const finish = (callback: () => void) => {\r\n if (settleState.settled) return\r\n settleState.settled = true\r\n clearTimeout(timeout)\r\n callback()\r\n }\r\n\r\n worker.once(\"message\", (payload: unknown) => {\r\n const message = parseScannerWorkerMessage(payload)\r\n finish(() => {\r\n if (message?.ok) {\r\n resolve(parseScanWorkspaceResult(message.result))\r\n return\r\n }\r\n reject(new Error(message?.error ?? \"scanner worker failed without an error message\"))\r\n })\r\n })\r\n\r\n worker.once(\"error\", (error: Error) => {\r\n finish(() => reject(error))\r\n })\r\n\r\n worker.once(\"exit\", (code: number) => {\r\n if (code !== 0) {\r\n finish(() => reject(new Error(`scanner worker exited with code ${code}`)))\r\n }\r\n })\r\n })\r\n}\r\n\r\nfunction buildExtensionSet(includeExtensions: string[]): Set<string> {\r\n return new Set(includeExtensions)\r\n}\r\n\r\nfunction collectCandidates(\r\n rootDir: string,\r\n ignoreDirectories: Set<string>,\r\n extensionSet: Set<string>\r\n): string[] {\r\n const candidates: string[] = []\r\n const directories = [rootDir]\r\n\r\n while (directories.length > 0) {\r\n const currentDir = directories.pop()\r\n if (!currentDir) continue\r\n\r\n const entries = (() => {\r\n try {\r\n return fs.readdirSync(currentDir, { withFileTypes: true })\r\n } catch {\r\n return [] as fs.Dirent[]\r\n }\r\n })()\r\n\r\n for (const entry of entries) {\r\n const fullPath = path.join(currentDir, entry.name)\r\n\r\n if (entry.isDirectory()) {\r\n if (!ignoreDirectories.has(entry.name)) directories.push(fullPath)\r\n continue\r\n }\r\n\r\n if (!entry.isFile()) continue\r\n if (!extensionSet.has(path.extname(entry.name))) continue\r\n candidates.push(fullPath)\r\n }\r\n }\r\n\r\n return candidates\r\n}\r\n\r\nfunction toCacheSize(size: number): number {\r\n if (!Number.isFinite(size)) return 0\r\n const normalized = Math.max(0, Math.trunc(size))\r\n return Math.min(normalized, 0xffffffff)\r\n}\r\n\r\nexport function scanSource(source: string): string[] {\r\n const nativeBinding = nativeParserLoader.get()\r\n if (nativeBinding?.extractClassesFromSource) {\r\n const result = nativeBinding.extractClassesFromSource(source)\r\n // Rust mengembalikan ClassExtractResult { classes: string[], ... }\r\n // bukan plain string[] — handle kedua kemungkinan untuk backward compat\r\n if (Array.isArray(result)) {\r\n return Array.from(new Set(result.filter(Boolean)))\r\n }\r\n if (result !== null && result !== undefined && Array.isArray((result as NativeClassExtractResult).classes)) {\r\n return Array.from(new Set((result as NativeClassExtractResult).classes.filter(Boolean)))\r\n }\r\n }\r\n\r\n throw new Error(\r\n \"FATAL: Native parser binding is required but not available.\\n\" +\r\n \"This package requires native Rust bindings.\\n\\n\" +\r\n \"Resolution steps:\\n\" +\r\n \"1. Build the native Rust module: npm run build:rust\"\r\n )\r\n}\r\n\r\nexport function isScannableFile(filePath: string, includeExtensions = DEFAULT_EXTENSIONS): boolean {\r\n return includeExtensions.includes(path.extname(filePath))\r\n}\r\n\r\nexport function scanFile(filePath: string): ScanFileResult {\r\n const { scanFileNative } = require(\"./native-bridge\")\r\n const result = scanFileNative(filePath) as {\r\n file: string; classes: string[]; hash: string; ok: boolean; error?: string | null\r\n }\r\n if (!result.ok) {\r\n throw new Error(`scanFile failed for ${filePath}: ${result.error ?? \"unknown error\"}`)\r\n }\r\n return {\r\n file: result.file,\r\n classes: result.classes,\r\n ...(result.hash ? { hash: result.hash } : {}),\r\n }\r\n}\r\n\r\nexport function scanWorkspace(\r\n rootDir: string,\r\n options: ScanWorkspaceOptions = {}\r\n): ScanWorkspaceResult {\r\n const normalizedOptions = parseScanWorkspaceOptions(options)\r\n const includeExtensions = normalizedOptions.includeExtensions ?? DEFAULT_EXTENSIONS\r\n const extensionSet = buildExtensionSet(includeExtensions)\r\n const ignoreDirectories = new Set(normalizedOptions.ignoreDirectories ?? DEFAULT_IGNORES)\r\n const useCache = normalizedOptions.useCache ?? true\r\n const _smartInvalidation = normalizedOptions.smartInvalidation ?? true\r\n\r\n const files: ScanFileResult[] = []\r\n const unique = new Set<string>()\r\n const candidates = collectCandidates(rootDir, ignoreDirectories, extensionSet)\r\n\r\n const processResult = (result: ScanFileResult) => {\r\n files.push(result)\r\n for (const cls of result.classes) unique.add(cls)\r\n }\r\n\r\n \r\n const { scanWorkspaceNative } = require(\"./native-bridge\")\r\n\r\n if (!normalizedOptions.cacheDir && !useCache) {\r\n const nativeResult = scanWorkspaceNative(rootDir, includeExtensions)\r\n if (nativeResult) {\r\n return parseScanWorkspaceResult({\r\n files: nativeResult.files.map((f: { file: string; classes: string[]; hash?: string }) => ({\r\n file: f.file,\r\n classes: f.classes,\r\n ...(f.hash ? { hash: f.hash } : {}),\r\n })),\r\n totalFiles: nativeResult.totalFiles,\r\n uniqueClasses: nativeResult.uniqueClasses,\r\n })\r\n }\r\n }\r\n\r\n if (useCache && isRustCacheAvailable()) {\r\n const cacheEntries: NativeCacheEntry[] = (() => {\r\n try {\r\n return readCache(rootDir, normalizedOptions.cacheDir)\r\n } catch (error) {\r\n log.debug(\r\n `cache read failed, continuing without persisted cache: ${\r\n error instanceof Error ? error.message : String(error)\r\n }`\r\n )\r\n return []\r\n }\r\n })()\r\n\r\n const cacheMap = new Map(cacheEntries.map((entry) => [entry.file, entry]))\r\n const nowMs = Date.now()\r\n const ranked: Array<{\r\n filePath: string\r\n stat: fs.Stats\r\n size: number\r\n cached?: NativeCacheEntry\r\n priority: number\r\n }> = []\r\n\r\n for (const filePath of candidates) {\r\n const stat = (() => {\r\n try {\r\n return fs.statSync(filePath)\r\n } catch {\r\n return null\r\n }\r\n })()\r\n if (!stat) continue\r\n\r\n const size = toCacheSize(stat.size)\r\n const cached = cacheMap.get(filePath)\r\n const priority = filePriority(\r\n stat.mtimeMs,\r\n size,\r\n cached\r\n ? {\r\n mtimeMs: cached.mtimeMs,\r\n size: cached.size,\r\n hitCount: cached.hitCount,\r\n lastSeenMs: 0,\r\n }\r\n : undefined,\r\n nowMs\r\n )\r\n\r\n ranked.push({ filePath, stat, size, cached, priority })\r\n }\r\n\r\n ranked.sort((a, b) => b.priority - a.priority)\r\n\r\n const updatedEntries: NativeCacheEntry[] = []\r\n\r\n for (const { filePath, stat, size, cached } of ranked) {\r\n const content = (() => {\r\n try {\r\n return fs.readFileSync(filePath, \"utf8\")\r\n } catch {\r\n return null\r\n }\r\n })()\r\n if (!content) continue\r\n\r\n const hash = hashContentNative(content)\r\n if (\r\n cached &&\r\n cached.hash === hash &&\r\n cached.mtimeMs === stat.mtimeMs &&\r\n cached.size === size\r\n ) {\r\n log.debug(`cache HIT ${filePath}`)\r\n processResult({ file: filePath, classes: cached.classes })\r\n updatedEntries.push({\r\n file: filePath,\r\n classes: cached.classes,\r\n hash: cached.hash,\r\n mtimeMs: stat.mtimeMs,\r\n size,\r\n hitCount: (cached.hitCount ?? 0) + 1,\r\n })\r\n continue\r\n }\r\n\r\n log.debug(`cache MISS ${filePath}`)\r\n const classes = scanSource(content)\r\n processResult({ file: filePath, classes })\r\n updatedEntries.push({\r\n file: filePath,\r\n classes,\r\n hash,\r\n mtimeMs: stat.mtimeMs,\r\n size,\r\n hitCount: 1,\r\n })\r\n }\r\n\r\n try {\r\n writeCache(rootDir, updatedEntries, normalizedOptions.cacheDir)\r\n } catch (error) {\r\n log.debug(`cache write failed: ${error instanceof Error ? error.message : String(error)}`)\r\n }\r\n\r\n return parseScanWorkspaceResult({\r\n files,\r\n totalFiles: files.length,\r\n uniqueClasses: Array.from(unique).sort(),\r\n })\r\n }\r\n\r\n // Fast path: gunakan Rust batch extraction jika tersedia (parallel, tanpa GC)\r\n const batchNative = nativeParserLoader.get()?.batchExtractClassesNative\r\n if (batchNative) {\r\n const batchResults = batchNative(candidates)\r\n for (const r of batchResults ?? []) {\r\n if (r.ok) processResult({ file: r.file, classes: r.classes })\r\n }\r\n } else {\r\n for (const filePath of candidates) {\r\n processResult(scanFile(filePath))\r\n }\r\n }\r\n\r\n return parseScanWorkspaceResult({\r\n files,\r\n totalFiles: files.length,\r\n uniqueClasses: Array.from(unique).sort(),\r\n })\r\n}\r\n\r\nexport async function scanWorkspaceAsync(\r\n rootDir: string,\r\n options: ScanWorkspaceOptions = {}\r\n): Promise<ScanWorkspaceResult> {\r\n const normalizedOptions = parseScanWorkspaceOptions(options)\r\n\r\n // Large workspaces: use native parallel scanner (multiple workers + Rust rayon)\r\n try {\r\n return await scanWorkspaceParallel(rootDir, {\r\n extensions: normalizedOptions.includeExtensions,\r\n ignoreDirs: normalizedOptions.ignoreDirectories,\r\n }) as ScanWorkspaceResult\r\n } catch (parallelError) {\r\n log.debug(\r\n `parallel scan failed, retrying with single worker: ${\r\n parallelError instanceof Error ? parallelError.message : String(parallelError)\r\n }`\r\n )\r\n }\r\n\r\n // Fallback: single worker thread (still native)\r\n try {\r\n return await scanWorkspaceInWorker(rootDir, normalizedOptions)\r\n } catch (error) {\r\n log.debug(\r\n `worker scan failed, retrying with sync native scanner: ${\r\n error instanceof Error ? error.message : String(error)\r\n }`\r\n )\r\n return scanWorkspace(rootDir, normalizedOptions)\r\n }\r\n}\r\nexport { extractClassesNative, batchExtractClassesNative } from \"./native-bridge\"","/**\r\n * tailwind-styled-v4 — Scanner Cache (Rust-backed)\r\n *\r\n * This module REQUIRES native Rust bindings and will FAIL LOUDLY if they are not available.\r\n * NO JavaScript fallback is provided.\r\n */\r\n\r\nimport fs from \"node:fs\"\r\nimport path from \"node:path\"\r\nimport {\r\n cachePriorityNative,\r\n cacheReadNative,\r\n cacheWriteNative,\r\n scanCacheGet,\r\n scanCachePut,\r\n scanCacheInvalidate,\r\n scanCacheStats,\r\n pruneStaleEntriesNative,\r\n computeCacheStatsNative,\r\n} from \"./native-bridge\"\r\n\r\nfunction defaultCachePath(rootDir: string, cacheDir?: string): string {\r\n const dir = cacheDir\r\n ? path.resolve(rootDir, cacheDir)\r\n : path.join(process.cwd(), \".cache\", \"tailwind-styled\")\r\n return path.join(dir, \"scanner-cache.json\")\r\n}\r\n\r\n// ── Public API ────────────────────────────────────────────────────────────────\r\n\r\nexport interface NativeCacheEntry {\r\n file: string\r\n classes: string[]\r\n hash: string\r\n mtimeMs: number\r\n size: number\r\n hitCount: number\r\n /** Terakhir file ditemukan di filesystem (ms epoch). Digunakan untuk stale cleanup. */\r\n lastSeenMs?: number\r\n}\r\n\r\n/** Default stale threshold — 7 hari */\r\nconst STALE_THRESHOLD_MS = 7 * 24 * 60 * 60 * 1000\r\n\r\n/**\r\n * Hapus entri cache yang sudah stale (file sudah tidak ada atau lastSeenMs terlalu lama).\r\n *\r\n * Native-first: Rust batch-check semua file dalam satu pass tanpa\r\n * event loop overhead. JS fallback: existsSync loop per file.\r\n */\r\nexport function pruneStaleEntries(\r\n entries: NativeCacheEntry[],\r\n opts: { maxAgeMs?: number; rootDir?: string } = {}\r\n): { pruned: NativeCacheEntry[]; removed: number } {\r\n // Native-first: satu NAPI call — Rust check semua files sekaligus\r\n const nativeResult = pruneStaleEntriesNative(\r\n entries.map((e) => ({ file: e.file, lastSeenMs: e.lastSeenMs })),\r\n opts.maxAgeMs,\r\n !!opts.rootDir // hanya check existence jika rootDir disediakan\r\n )\r\n\r\n if (nativeResult !== null) {\r\n const pruned = nativeResult.keptIndices.map((i) => entries[i])\r\n return { pruned, removed: nativeResult.removed }\r\n }\r\n\r\n // JS fallback\r\n const maxAge = opts.maxAgeMs ?? STALE_THRESHOLD_MS\r\n const now = Date.now()\r\n const { existsSync } = require(\"node:fs\") as typeof import(\"node:fs\")\r\n\r\n const pruned = entries.filter((entry) => {\r\n if (opts.rootDir && !existsSync(entry.file)) return false\r\n if (entry.lastSeenMs && now - entry.lastSeenMs > maxAge) return false\r\n return true\r\n })\r\n\r\n return { pruned, removed: entries.length - pruned.length }\r\n}\r\n\r\n/**\r\n * Read scanner cache from disk using Rust parser.\r\n * REQUIRES native binding - throws if unavailable.\r\n *\r\n * FIX: Pastikan folder cache ada sebelum Rust coba baca file,\r\n * supaya tidak error \"os error 3 (path not found)\" pada first run.\r\n */\r\nexport function readCache(rootDir: string, cacheDir?: string): NativeCacheEntry[] {\r\n const cachePath = defaultCachePath(rootDir, cacheDir)\r\n\r\n // Buat folder cache jika belum ada — cegah \"os error 3\" pada first run\r\n fs.mkdirSync(path.dirname(cachePath), { recursive: true })\r\n\r\n const result = cacheReadNative(cachePath)\r\n if (!result) return []\r\n\r\n return result.entries.map((e) => ({\r\n file: e.file,\r\n classes: e.classes,\r\n hash: e.hash,\r\n mtimeMs: e.mtimeMs,\r\n size: e.size,\r\n hitCount: e.hitCount,\r\n lastSeenMs: e.lastSeenMs,\r\n }))\r\n}\r\n\r\n/**\r\n * Write scanner cache to disk using Rust serialiser.\r\n * REQUIRES native binding - throws if unavailable.\r\n *\r\n * FIX: Pastikan folder cache ada sebelum Rust coba tulis file.\r\n */\r\nexport function writeCache(rootDir: string, entries: NativeCacheEntry[], cacheDir?: string): void {\r\n const cachePath = defaultCachePath(rootDir, cacheDir)\r\n\r\n // Buat folder cache jika belum ada — cegah write gagal pada first run\r\n fs.mkdirSync(path.dirname(cachePath), { recursive: true })\r\n\r\n const success = cacheWriteNative(cachePath, entries)\r\n if (!success) {\r\n throw new Error(\r\n \"Native cacheWrite failed. Run 'npm run build:rust' to rebuild native bindings.\"\r\n )\r\n }\r\n}\r\n\r\n/**\r\n * Compute priority score for a file using the Rust SmartCache algorithm.\r\n * Higher = process first.\r\n * REQUIRES native binding - throws if unavailable.\r\n */\r\nexport function filePriority(\r\n mtimeMs: number,\r\n size: number,\r\n cached: { mtimeMs: number; size: number; hitCount: number; lastSeenMs?: number } | undefined,\r\n nowMs = Date.now()\r\n): number {\r\n return cachePriorityNative(\r\n mtimeMs,\r\n size,\r\n cached?.mtimeMs ?? 0,\r\n cached?.size ?? 0,\r\n cached?.hitCount ?? 0,\r\n cached?.lastSeenMs ?? 0,\r\n nowMs\r\n )\r\n}\r\n\r\nexport interface CacheStats {\r\n totalEntries: number\r\n totalClasses: number\r\n totalSizeBytes: number\r\n avgClassesPerEntry: number\r\n mostUsedClasses: Array<{ class: string; count: number }>\r\n}\r\n\r\n/**\r\n * Rust in-memory cache — hot path untuk per-file lookup saat scan.\r\n * Jauh lebih cepat dari disk JSON cache untuk file yang baru saja di-scan.\r\n */\r\nexport const hotCache = {\r\n get: scanCacheGet,\r\n put: scanCachePut,\r\n invalidate: scanCacheInvalidate,\r\n} as const\r\n\r\n/**\r\n * Stats dari Rust in-memory cache (DashMap).\r\n * `size` = jumlah entry saat ini di cache.\r\n */\r\nexport function getHotCacheStats(): { size: number } {\r\n return scanCacheStats()\r\n}\r\n\r\n/**\r\n * Compute disk cache stats dari entries (diperlukan untuk mostUsedClasses).\r\n *\r\n * Native-first: Rust HashMap count + partial sort — ~3× lebih cepat\r\n * dari JS Map untuk workspace besar (5000+ entries).\r\n * JS fallback: manual Map count + .sort().\r\n */\r\nexport function computeCacheStats(entries: NativeCacheEntry[]): CacheStats {\r\n if (entries.length === 0) {\r\n return { totalEntries: 0, totalClasses: 0, totalSizeBytes: 0, avgClassesPerEntry: 0, mostUsedClasses: [] }\r\n }\r\n\r\n // Native-first\r\n const nativeResult = computeCacheStatsNative(\r\n entries.map((e) => e.classes),\r\n entries.map((e) => e.size),\r\n 10\r\n )\r\n\r\n if (nativeResult !== null) {\r\n return {\r\n totalEntries: nativeResult.totalEntries,\r\n totalClasses: nativeResult.totalClasses,\r\n totalSizeBytes: nativeResult.totalSizeBytes,\r\n avgClassesPerEntry: nativeResult.avgClassesPerEntryX100 / 100,\r\n mostUsedClasses: nativeResult.mostUsedClasses,\r\n }\r\n }\r\n\r\n throw new Error(\"FATAL: Native binding 'computeCacheStats' is required but not available.\")\r\n}","import { z } from \"zod\"\r\nimport { TwError } from \"@tailwind-styled/shared\"\r\n\r\nconst formatIssuePath = (path: readonly PropertyKey[]): string =>\r\n path.length > 0\r\n ? path\r\n .map((segment) =>\r\n typeof segment === \"symbol\" ? segment.description ?? segment.toString() : String(segment)\r\n )\r\n .join(\".\")\r\n : \"<root>\"\r\n\r\nconst formatIssues = (error: z.ZodError): string =>\r\n error.issues\r\n .map((issue) => {\r\n const path = formatIssuePath(issue.path)\r\n return `${path}: ${issue.message}`\r\n })\r\n .join(\"; \")\r\n\r\nconst parseWithSchema = <T>(schema: z.ZodType<T>, data: unknown, label: string): T => {\r\n const parsed = schema.safeParse(data)\r\n if (parsed.success) return parsed.data\r\n const details = formatIssues(parsed.error)\r\n throw new TwError(\r\n \"validation\",\r\n \"SCHEMA_VALIDATION_FAILED\",\r\n details ? `${label}: ${details}` : label,\r\n parsed.error\r\n )\r\n}\r\n\r\nconst NonNegativeIntegerSchema = z.number().int().min(0)\r\n\r\nexport const ScanWorkspaceOptionsSchema = z.object({\r\n includeExtensions: z.array(z.string()).optional(),\r\n ignoreDirectories: z.array(z.string()).optional(),\r\n useCache: z.boolean().optional(),\r\n cacheDir: z.string().min(1).optional(),\r\n smartInvalidation: z.boolean().optional(),\r\n})\r\n\r\nexport type ScanWorkspaceOptions = z.infer<typeof ScanWorkspaceOptionsSchema>\r\n\r\nexport const ScanFileResultSchema = z.object({\r\n file: z.string(),\r\n classes: z.array(z.string()),\r\n hash: z.string().optional(),\r\n})\r\n\r\nexport type ScanFileResult = z.infer<typeof ScanFileResultSchema>\r\n\r\nexport const ScanWorkspaceResultSchema = z\r\n .object({\r\n files: z.array(ScanFileResultSchema),\r\n totalFiles: NonNegativeIntegerSchema,\r\n uniqueClasses: z.array(z.string()),\r\n })\r\n .refine((value) => value.totalFiles === value.files.length, {\r\n message: \"scan result totalFiles must match files.length\",\r\n path: [\"totalFiles\"],\r\n })\r\n\r\nexport type ScanWorkspaceResult = z.infer<typeof ScanWorkspaceResultSchema>\r\n\r\nexport const ScannerWorkerRequestSchema = z.object({\r\n rootDir: z.string().min(1),\r\n options: ScanWorkspaceOptionsSchema.optional(),\r\n})\r\n\r\nexport type ScannerWorkerRequest = z.infer<typeof ScannerWorkerRequestSchema>\r\n\r\nexport const ScannerWorkerSuccessMessageSchema = z.object({\r\n ok: z.literal(true),\r\n result: ScanWorkspaceResultSchema,\r\n})\r\n\r\nexport const ScannerWorkerErrorMessageSchema = z.object({\r\n ok: z.literal(false),\r\n error: z.string().optional(),\r\n})\r\n\r\nexport const ScannerWorkerMessageSchema = z.union([\r\n ScannerWorkerSuccessMessageSchema,\r\n ScannerWorkerErrorMessageSchema,\r\n])\r\n\r\nexport type ScannerWorkerMessage = z.infer<typeof ScannerWorkerMessageSchema>\r\n\r\nexport const parseScanWorkspaceOptions = (options: unknown) =>\r\n parseWithSchema(ScanWorkspaceOptionsSchema, options ?? {}, \"scanner options are invalid\")\r\n\r\nexport const parseScanFileResult = (result: unknown) =>\r\n parseWithSchema(ScanFileResultSchema, result, \"scanner file result is invalid\")\r\n\r\nexport const parseScanWorkspaceResult = (result: unknown) =>\r\n parseWithSchema(ScanWorkspaceResultSchema, result, \"scanner workspace result is invalid\")\r\n\r\nexport const parseScannerWorkerRequest = (request: unknown) =>\r\n parseWithSchema(ScannerWorkerRequestSchema, request, \"scanner worker request is invalid\")\r\n\r\nexport const parseScannerWorkerMessage = (message: unknown) =>\r\n parseWithSchema(ScannerWorkerMessageSchema, message, \"scanner worker message is invalid\")\r\n"]}
|