tailwind-styled-v4 5.0.8 → 5.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +204 -416
- package/README.md +45 -15
- package/dist/{analyzeWorkspace-DuJKh7Ty.d.mts → analyzeWorkspace-BS5O4rhC.d.mts} +47 -2
- package/dist/{analyzeWorkspace-Ct_NTAWt.d.ts → analyzeWorkspace-DDOQdzzI.d.ts} +47 -2
- package/dist/analyzer.d.mts +5 -3
- package/dist/analyzer.d.ts +5 -3
- package/dist/analyzer.js +563 -468
- package/dist/analyzer.js.map +1 -1
- package/dist/analyzer.mjs +562 -467
- package/dist/analyzer.mjs.map +1 -1
- package/dist/animate.d.mts +4 -7
- package/dist/animate.d.ts +4 -7
- package/dist/animate.js +171 -265
- package/dist/animate.js.map +1 -1
- package/dist/animate.mjs +165 -264
- package/dist/animate.mjs.map +1 -1
- package/dist/atomic.d.mts +22 -1
- package/dist/atomic.d.ts +22 -1
- package/dist/atomic.js +221 -165
- package/dist/atomic.js.map +1 -1
- package/dist/atomic.mjs +200 -165
- package/dist/atomic.mjs.map +1 -1
- package/dist/cli.d.mts +60 -1
- package/dist/cli.d.ts +60 -1
- package/dist/cli.js +1261 -1517
- package/dist/cli.js.map +1 -1
- package/dist/cli.mjs +1238 -1513
- package/dist/cli.mjs.map +1 -1
- package/dist/compiler.d.mts +38 -7
- package/dist/compiler.d.ts +38 -7
- package/dist/compiler.js +174 -197
- package/dist/compiler.js.map +1 -1
- package/dist/compiler.mjs +151 -194
- package/dist/compiler.mjs.map +1 -1
- package/dist/devtools.js +7 -31
- package/dist/devtools.js.map +1 -1
- package/dist/devtools.mjs +7 -31
- package/dist/devtools.mjs.map +1 -1
- package/dist/engine.d.mts +134 -63
- package/dist/engine.d.ts +134 -63
- package/dist/engine.js +2863 -2482
- package/dist/engine.js.map +1 -1
- package/dist/engine.mjs +2852 -2485
- package/dist/engine.mjs.map +1 -1
- package/dist/{index-eWAocnD2.d.mts → index-NDINUhLN.d.mts} +3 -1
- package/dist/{index-eWAocnD2.d.ts → index-NDINUhLN.d.ts} +3 -1
- package/dist/index.d.mts +63 -32
- package/dist/index.d.ts +63 -32
- package/dist/index.js +335 -169
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +315 -169
- package/dist/index.mjs.map +1 -1
- package/dist/{liveTokenEngine-DSUk88P6.d.ts → liveTokenEngine-CN9ian1R.d.ts} +1 -1
- package/dist/{liveTokenEngine-CX5_0c4q.d.mts → liveTokenEngine-DKoWRtqH.d.mts} +1 -1
- package/dist/next.d.mts +10 -4
- package/dist/next.d.ts +10 -4
- package/dist/next.js +32 -45
- package/dist/next.js.map +1 -1
- package/dist/next.mjs +30 -43
- package/dist/next.mjs.map +1 -1
- package/dist/plugin-api.d.mts +8 -2
- package/dist/plugin-api.d.ts +8 -2
- package/dist/plugin-api.js +14 -2
- package/dist/plugin-api.js.map +1 -1
- package/dist/plugin-api.mjs +14 -3
- package/dist/plugin-api.mjs.map +1 -1
- package/dist/plugin-registry.js +51 -11
- package/dist/plugin-registry.js.map +1 -1
- package/dist/plugin-registry.mjs +51 -11
- package/dist/plugin-registry.mjs.map +1 -1
- package/dist/plugin.d.mts +5 -7
- package/dist/plugin.d.ts +5 -7
- package/dist/plugin.js +16 -15
- package/dist/plugin.js.map +1 -1
- package/dist/plugin.mjs +16 -16
- package/dist/plugin.mjs.map +1 -1
- package/dist/rspack.js +17 -38
- package/dist/rspack.js.map +1 -1
- package/dist/rspack.mjs +15 -36
- package/dist/rspack.mjs.map +1 -1
- package/dist/runtime.d.mts +2 -2
- package/dist/runtime.d.ts +2 -2
- package/dist/scanner.d.mts +10 -1
- package/dist/scanner.d.ts +10 -1
- package/dist/scanner.js +298 -124
- package/dist/scanner.js.map +1 -1
- package/dist/scanner.mjs +296 -124
- package/dist/scanner.mjs.map +1 -1
- package/dist/shared.d.mts +1 -1
- package/dist/shared.d.ts +1 -1
- package/dist/shared.js +104 -176
- package/dist/shared.js.map +1 -1
- package/dist/shared.mjs +85 -176
- package/dist/shared.mjs.map +1 -1
- package/dist/storybook-addon.d.mts +1 -1
- package/dist/storybook-addon.d.ts +1 -1
- package/dist/svelte.d.mts +1 -1
- package/dist/svelte.d.ts +1 -1
- package/dist/svelte.js +166 -3
- package/dist/svelte.js.map +1 -1
- package/dist/svelte.mjs +143 -1
- package/dist/svelte.mjs.map +1 -1
- package/dist/syntax.js +21 -21
- package/dist/syntax.js.map +1 -1
- package/dist/syntax.mjs +21 -21
- package/dist/syntax.mjs.map +1 -1
- package/dist/testing.js +9 -1
- package/dist/testing.js.map +1 -1
- package/dist/testing.mjs +9 -1
- package/dist/testing.mjs.map +1 -1
- package/dist/theme.d.mts +2 -2
- package/dist/theme.d.ts +2 -2
- package/dist/theme.js +40 -112
- package/dist/theme.js.map +1 -1
- package/dist/theme.mjs +37 -110
- package/dist/theme.mjs.map +1 -1
- package/dist/turbopackLoader.js +84 -126
- package/dist/turbopackLoader.js.map +1 -1
- package/dist/turbopackLoader.mjs +68 -124
- package/dist/turbopackLoader.mjs.map +1 -1
- package/dist/tw.js +1256 -1517
- package/dist/tw.js.map +1 -1
- package/dist/tw.mjs +1236 -1513
- package/dist/tw.mjs.map +1 -1
- package/dist/vite.js +1783 -823
- package/dist/vite.js.map +1 -1
- package/dist/vite.mjs +1767 -821
- package/dist/vite.mjs.map +1 -1
- package/dist/vue.d.mts +1 -1
- package/dist/vue.d.ts +1 -1
- package/dist/vue.js +165 -4
- package/dist/vue.js.map +1 -1
- package/dist/vue.mjs +141 -1
- package/dist/vue.mjs.map +1 -1
- package/dist/webpackLoader.js +69 -108
- package/dist/webpackLoader.js.map +1 -1
- package/dist/webpackLoader.mjs +49 -104
- package/dist/webpackLoader.mjs.map +1 -1
- package/native/tailwind-styled-native.node +0 -0
- package/package.json +22 -24
package/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","isBrowser","getDirnameFromUrl","lastSlash","require","resolveLoaderPath"],"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 return nodeUrl.fileURLToPath(importMetaUrl)\r\n } catch {\r\n if (importMetaUrl.startsWith(\"file://\")) {\r\n return importMetaUrl.slice(7)\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}","const isBrowser = typeof window !== \"undefined\" || typeof document !== \"undefined\"\r\n\r\n// ESM-safe require detection\r\nlet nodeModuleRef: any = null\r\nfunction getNodeModuleRef() {\r\n if (isBrowser) return null\r\n if (nodeModuleRef !== null) return nodeModuleRef\r\n try {\r\n const test = typeof require === 'function' ? require('node:module') : null\r\n nodeModuleRef = test\r\n return test\r\n } catch {\r\n nodeModuleRef = null\r\n return null\r\n }\r\n}\r\n\r\nlet _nodeCrypto: any = null\r\nlet _nodeFs: any = null\r\nlet _nodeModule: any = null\r\nlet _nodePath: any = null\r\nlet _nodeUrl: any = null\r\n\r\nfunction getNodeCrypto() {\r\n if (isBrowser) throw new Error(\"node:crypto not available in browser\")\r\n const nodeRequire = getNodeModuleRef()\r\n if (!nodeRequire) throw new Error(\"require not available\")\r\n if (!_nodeCrypto) _nodeCrypto = nodeRequire.createRequire(import.meta.url)(\"node:crypto\")\r\n return _nodeCrypto!\r\n}\r\nfunction getNodeFs() {\r\n if (isBrowser) throw new Error(\"node:fs not available in browser\")\r\n const nodeRequire = getNodeModuleRef()\r\n if (!nodeRequire) throw new Error(\"require not available\")\r\n if (!_nodeFs) _nodeFs = nodeRequire.createRequire(import.meta.url)(\"node:fs\")\r\n return _nodeFs!\r\n}\r\nfunction getNodeModule() {\r\n if (isBrowser) throw new Error(\"node:module not available in browser\")\r\n const nodeRequire = getNodeModuleRef()\r\n if (!nodeRequire) throw new Error(\"require not available\")\r\n if (!_nodeModule) _nodeModule = nodeRequire\r\n return _nodeModule!\r\n}\r\nfunction getNodePath() {\r\n if (isBrowser) throw new Error(\"node:path not available in browser\")\r\n const nodeRequire = getNodeModuleRef()\r\n if (!nodeRequire) throw new Error(\"require not available\")\r\n if (!_nodePath) _nodePath = nodeRequire.createRequire(import.meta.url)(\"node:path\")\r\n return _nodePath!\r\n}\r\nfunction getNodeUrl() {\r\n if (isBrowser) throw new Error(\"node:url not available in browser\")\r\n const nodeRequire = getNodeModuleRef()\r\n if (!nodeRequire) throw new Error(\"require not available\")\r\n if (!_nodeUrl) _nodeUrl = nodeRequire.createRequire(import.meta.url)(\"node:url\")\r\n return _nodeUrl!\r\n}\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 if (isBrowser) {\r\n return { binding: null, loadErrors: [{ path: \"\", message: \"Native bindings not available in browser\" }] }\r\n }\r\n \r\n const { runtimeDir, candidates, isValid } = options\r\n const loadErrors: Array<{ path: string; message: string }> = []\r\n const path = getNodePath()\r\n const fs = getNodeFs()\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\nfunction getRequire(): NodeRequire {\r\n if (isBrowser) return (() => { throw new Error(\"require not available in browser\") }) as unknown as NodeRequire\r\n const nodeRequire = getNodeModuleRef()\r\n if (!nodeRequire) return (() => { throw new Error(\"require not available\") }) as unknown as NodeRequire\r\n return nodeRequire.createRequire(import.meta.url)\r\n}\r\n\r\nconst _require = getRequire()\r\n\r\nfunction requireNativeModule(path: string): unknown {\r\n return _require(path)\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}\r\n\r\nexport function resolveNativeBindingCandidates(options: ResolveCandidatesOptions): string[] {\r\n if (isBrowser) return []\r\n \r\n const { runtimeDir, envVarNames = [], includeDefaultCandidates = true, enforceNodeExtensionForEnvPath = false } = options\r\n const candidates: string[] = []\r\n const path = getNodePath()\r\n const fs = getNodeFs()\r\n\r\n for (const envVar of envVarNames) {\r\n const envPath = process.env[envVar]\r\n if (envPath) {\r\n if (enforceNodeExtensionForEnvPath && !envPath.endsWith(\".node\")) {\r\n candidates.push(envPath + \".node\")\r\n } else {\r\n candidates.push(envPath)\r\n }\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 const entries = fs.readdirSync(runtimeDir)\r\n for (const entry of entries) {\r\n if (entry.endsWith(\".node\")) {\r\n candidates.push(entry)\r\n }\r\n }\r\n } catch {\r\n // ignore read errors\r\n }\r\n }\r\n\r\n const platform = typeof process !== \"undefined\" ? process.platform : \"\"\r\n const ext = platform === \"win32\" ? \".dll\" : platform === \"darwin\" ? \".dylib\" : \".so\"\r\n const defaultBindingName = `tailwind_styled_parser${ext}`\r\n candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"native\", defaultBindingName))\r\n candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", defaultBindingName))\r\n candidates.push(path.resolve(process.cwd(), \"native\", defaultBindingName))\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 (isBrowser) return \"\"\r\n \r\n if (dir) return getNodePath().resolve(dir)\r\n try {\r\n return getNodeUrl().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 if (isBrowser) {\r\n // Simple hash fallback for browser\r\n let hash = 0\r\n for (let i = 0; i < content.length; i++) {\r\n const char = content.charCodeAt(i)\r\n hash = ((hash << 5) - hash) + char\r\n hash = hash & hash\r\n }\r\n return Math.abs(hash).toString(16).slice(0, length ?? 8)\r\n }\r\n const hash = getNodeCrypto().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","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 mode?: \"zero-runtime\"\r\n autoClientBoundary?: boolean\r\n addDataAttr?: boolean\r\n hoist?: boolean\r\n routeCss?: boolean\r\n incremental?: boolean\r\n verbose?: boolean\r\n preserveImports?: boolean\r\n}\r\n\r\nexport interface TailwindStyledNextOptions\r\n extends Pick<\r\n TailwindStyledLoaderOptions,\r\n \"mode\" | \"autoClientBoundary\" | \"addDataAttr\" | \"hoist\" | \"routeCss\" | \"incremental\" | \"verbose\"\r\n > {\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\nconst createLoaderOptions = (options: TailwindStyledNextOptions): Readonly<TailwindStyledLoaderOptions> => {\r\n const opts: TailwindStyledLoaderOptions = {\r\n mode: options.mode ?? \"zero-runtime\",\r\n autoClientBoundary: options.autoClientBoundary ?? true,\r\n preserveImports: true,\r\n }\r\n if (options.addDataAttr !== undefined) opts.addDataAttr = options.addDataAttr\r\n if (options.hoist !== undefined) opts.hoist = options.hoist\r\n if (options.routeCss !== undefined) opts.routeCss = options.routeCss\r\n if (options.incremental !== undefined) opts.incremental = options.incremental\r\n if (options.verbose !== undefined) opts.verbose = options.verbose\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 exclude: options.exclude ?? DEFAULT_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/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}"]}
|
package/dist/plugin-api.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as CompoundCondition, T as TokenMap } from './index-
|
|
1
|
+
import { C as CompoundCondition, T as TokenMap } from './index-NDINUhLN.mjs';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
|
|
4
4
|
declare const TwPluginOptionsSchema: z.ZodObject<{
|
|
@@ -112,6 +112,7 @@ interface TransformContext {
|
|
|
112
112
|
interface TwGlobalRegistry {
|
|
113
113
|
transforms: Array<(config: ComponentConfig, ctx: TransformContext) => ComponentConfig>;
|
|
114
114
|
tokens: Record<string, string>;
|
|
115
|
+
variants: Map<string, VariantResolver>;
|
|
115
116
|
}
|
|
116
117
|
declare function getGlobalRegistry(): TwGlobalRegistry;
|
|
117
118
|
declare function registerTransform(transform: (config: ComponentConfig, ctx: TransformContext) => ComponentConfig): void;
|
|
@@ -128,9 +129,14 @@ declare function createTw(config?: Record<string, unknown>): TwContext & {
|
|
|
128
129
|
};
|
|
129
130
|
use: (plugin: TwPlugin) => void;
|
|
130
131
|
};
|
|
132
|
+
/**
|
|
133
|
+
* Creates a TwContext that writes through to the global (legacy) registry.
|
|
134
|
+
* Used by createTwPlugin() in the plugin package.
|
|
135
|
+
*/
|
|
136
|
+
declare function createGlobalPluginContext(config?: Record<string, unknown>): TwContext;
|
|
131
137
|
declare function use(plugin: TwPlugin): void;
|
|
132
138
|
declare function presetTokens(tokens: Record<string, string>): TwPlugin;
|
|
133
139
|
declare function presetVariants(variants: Record<string, VariantResolver>): TwPlugin;
|
|
134
140
|
declare function presetScrollbar(): TwPlugin;
|
|
135
141
|
|
|
136
|
-
export { type ComponentConfig, CompoundCondition, type CssHook, type DesignTokens, type PluginManifestInput, PluginManifestSchema, type PluginRegistry, type TokenEngineAPI, TokenMap, type TokenRegistrationInput, TokenRegistrationSchema, type TransformContext, type TransformFn, type TransformMeta, TransformRegistrationSchema, type TwClassResult, type TwContext, type TwGlobalRegistry, type TwPlugin, type TwPluginOptions, type TwPluginOptionsInput, TwPluginOptionsSchema, type UtilityDefinition, type VariantResolver, createPluginContext, createPluginRegistry, createTw, getGlobalRegistry, parsePluginManifest, parseTokenRegistration, parseTwPluginOptions, presetScrollbar, presetTokens, presetVariants, readToken, registerToken, registerTransform, resetGlobalRegistry, resolveTokenEngine, use };
|
|
142
|
+
export { type ComponentConfig, CompoundCondition, type CssHook, type DesignTokens, type PluginManifestInput, PluginManifestSchema, type PluginRegistry, type TokenEngineAPI, TokenMap, type TokenRegistrationInput, TokenRegistrationSchema, type TransformContext, type TransformFn, type TransformMeta, TransformRegistrationSchema, type TwClassResult, type TwContext, type TwGlobalRegistry, type TwPlugin, type TwPluginOptions, type TwPluginOptionsInput, TwPluginOptionsSchema, type UtilityDefinition, type VariantResolver, createGlobalPluginContext, createPluginContext, createPluginRegistry, createTw, getGlobalRegistry, parsePluginManifest, parseTokenRegistration, parseTwPluginOptions, presetScrollbar, presetTokens, presetVariants, readToken, registerToken, registerTransform, resetGlobalRegistry, resolveTokenEngine, use };
|
package/dist/plugin-api.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as CompoundCondition, T as TokenMap } from './index-
|
|
1
|
+
import { C as CompoundCondition, T as TokenMap } from './index-NDINUhLN.js';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
|
|
4
4
|
declare const TwPluginOptionsSchema: z.ZodObject<{
|
|
@@ -112,6 +112,7 @@ interface TransformContext {
|
|
|
112
112
|
interface TwGlobalRegistry {
|
|
113
113
|
transforms: Array<(config: ComponentConfig, ctx: TransformContext) => ComponentConfig>;
|
|
114
114
|
tokens: Record<string, string>;
|
|
115
|
+
variants: Map<string, VariantResolver>;
|
|
115
116
|
}
|
|
116
117
|
declare function getGlobalRegistry(): TwGlobalRegistry;
|
|
117
118
|
declare function registerTransform(transform: (config: ComponentConfig, ctx: TransformContext) => ComponentConfig): void;
|
|
@@ -128,9 +129,14 @@ declare function createTw(config?: Record<string, unknown>): TwContext & {
|
|
|
128
129
|
};
|
|
129
130
|
use: (plugin: TwPlugin) => void;
|
|
130
131
|
};
|
|
132
|
+
/**
|
|
133
|
+
* Creates a TwContext that writes through to the global (legacy) registry.
|
|
134
|
+
* Used by createTwPlugin() in the plugin package.
|
|
135
|
+
*/
|
|
136
|
+
declare function createGlobalPluginContext(config?: Record<string, unknown>): TwContext;
|
|
131
137
|
declare function use(plugin: TwPlugin): void;
|
|
132
138
|
declare function presetTokens(tokens: Record<string, string>): TwPlugin;
|
|
133
139
|
declare function presetVariants(variants: Record<string, VariantResolver>): TwPlugin;
|
|
134
140
|
declare function presetScrollbar(): TwPlugin;
|
|
135
141
|
|
|
136
|
-
export { type ComponentConfig, CompoundCondition, type CssHook, type DesignTokens, type PluginManifestInput, PluginManifestSchema, type PluginRegistry, type TokenEngineAPI, TokenMap, type TokenRegistrationInput, TokenRegistrationSchema, type TransformContext, type TransformFn, type TransformMeta, TransformRegistrationSchema, type TwClassResult, type TwContext, type TwGlobalRegistry, type TwPlugin, type TwPluginOptions, type TwPluginOptionsInput, TwPluginOptionsSchema, type UtilityDefinition, type VariantResolver, createPluginContext, createPluginRegistry, createTw, getGlobalRegistry, parsePluginManifest, parseTokenRegistration, parseTwPluginOptions, presetScrollbar, presetTokens, presetVariants, readToken, registerToken, registerTransform, resetGlobalRegistry, resolveTokenEngine, use };
|
|
142
|
+
export { type ComponentConfig, CompoundCondition, type CssHook, type DesignTokens, type PluginManifestInput, PluginManifestSchema, type PluginRegistry, type TokenEngineAPI, TokenMap, type TokenRegistrationInput, TokenRegistrationSchema, type TransformContext, type TransformFn, type TransformMeta, TransformRegistrationSchema, type TwClassResult, type TwContext, type TwGlobalRegistry, type TwPlugin, type TwPluginOptions, type TwPluginOptionsInput, TwPluginOptionsSchema, type UtilityDefinition, type VariantResolver, createGlobalPluginContext, createPluginContext, createPluginRegistry, createTw, getGlobalRegistry, parsePluginManifest, parseTokenRegistration, parseTwPluginOptions, presetScrollbar, presetTokens, presetVariants, readToken, registerToken, registerTransform, resetGlobalRegistry, resolveTokenEngine, use };
|
package/dist/plugin-api.js
CHANGED
|
@@ -73,7 +73,8 @@ function readToken(engine, name) {
|
|
|
73
73
|
}
|
|
74
74
|
var transformRegistry = {
|
|
75
75
|
transforms: [],
|
|
76
|
-
tokens: {}
|
|
76
|
+
tokens: {},
|
|
77
|
+
variants: /* @__PURE__ */ new Map()
|
|
77
78
|
};
|
|
78
79
|
var normalizeTokenName = (name) => name.replace(/[^a-zA-Z0-9-]/g, "-").toLowerCase();
|
|
79
80
|
function getGlobalRegistry() {
|
|
@@ -101,6 +102,7 @@ function createPluginRegistry() {
|
|
|
101
102
|
var legacyState = { globalRegistry: createPluginRegistry() };
|
|
102
103
|
function resetGlobalRegistry() {
|
|
103
104
|
transformRegistry.transforms.length = 0;
|
|
105
|
+
transformRegistry.variants.clear();
|
|
104
106
|
for (const key of Object.keys(transformRegistry.tokens)) {
|
|
105
107
|
delete transformRegistry.tokens[key];
|
|
106
108
|
}
|
|
@@ -112,6 +114,9 @@ function createPluginContext(registry, config = {}) {
|
|
|
112
114
|
config,
|
|
113
115
|
addVariant(name, resolver) {
|
|
114
116
|
registry.variants.set(name, resolver);
|
|
117
|
+
if (isLegacyRegistry) {
|
|
118
|
+
transformRegistry.variants.set(name, resolver);
|
|
119
|
+
}
|
|
115
120
|
},
|
|
116
121
|
addUtility(name, styles) {
|
|
117
122
|
registry.utilities.set(name, styles);
|
|
@@ -143,7 +148,10 @@ function createPluginContext(registry, config = {}) {
|
|
|
143
148
|
registry.buildHooks.push(hook);
|
|
144
149
|
},
|
|
145
150
|
getToken(name) {
|
|
146
|
-
|
|
151
|
+
const normalized = normalizeTokenName(name);
|
|
152
|
+
const local = registry.tokens.get(normalized);
|
|
153
|
+
if (local !== void 0) return local;
|
|
154
|
+
return readToken(resolveTokenEngine(), normalized);
|
|
147
155
|
},
|
|
148
156
|
subscribeTokens(callback) {
|
|
149
157
|
const engine = resolveTokenEngine();
|
|
@@ -178,6 +186,9 @@ function createTw(config = {}) {
|
|
|
178
186
|
}
|
|
179
187
|
return result;
|
|
180
188
|
}
|
|
189
|
+
function createGlobalPluginContext(config = {}) {
|
|
190
|
+
return createPluginContext(legacyState.globalRegistry, config);
|
|
191
|
+
}
|
|
181
192
|
function use(plugin) {
|
|
182
193
|
const ctx = createPluginContext(legacyState.globalRegistry);
|
|
183
194
|
parsePluginManifest(plugin).setup(ctx);
|
|
@@ -217,6 +228,7 @@ exports.PluginManifestSchema = PluginManifestSchema;
|
|
|
217
228
|
exports.TokenRegistrationSchema = TokenRegistrationSchema;
|
|
218
229
|
exports.TransformRegistrationSchema = TransformRegistrationSchema;
|
|
219
230
|
exports.TwPluginOptionsSchema = TwPluginOptionsSchema;
|
|
231
|
+
exports.createGlobalPluginContext = createGlobalPluginContext;
|
|
220
232
|
exports.createPluginContext = createPluginContext;
|
|
221
233
|
exports.createPluginRegistry = createPluginRegistry;
|
|
222
234
|
exports.createTw = createTw;
|
package/dist/plugin-api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../packages/domain/plugin-api/src/schemas.ts","../packages/domain/plugin-api/src/index.ts"],"names":["z","config"],"mappings":"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","file":"plugin-api.js","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 DesignTokensSchema: z.ZodType<\r\n Record<string, string | number | Record<string, unknown>>\r\n> = z.record(z.string(), z.union([z.string(), z.number(), z.lazy(() => DesignTokensSchema)]))\r\n\r\nexport const TwClassResultSchema = z.object({\r\n css: z.string(),\r\n classes: z.array(z.string()),\r\n})\r\n\r\nexport const TwPluginOptionsSchema = z.object({\r\n classProcessor: z\r\n .function({ input: [z.array(z.string())], output: TwClassResultSchema })\r\n .optional(),\r\n tokens: DesignTokensSchema.optional(),\r\n debug: z.boolean().optional(),\r\n minify: z.boolean().optional(),\r\n})\r\n\r\nexport type TwPluginOptionsInput = z.infer<typeof TwPluginOptionsSchema>\r\n\r\nexport const PluginManifestSchema = z.object({\r\n name: z.string().min(1),\r\n setup: z.function({ input: [z.unknown()], output: z.unknown() }),\r\n})\r\n\r\nexport type PluginManifestInput = z.infer<typeof PluginManifestSchema>\r\n\r\nexport const TransformRegistrationSchema = z.function({ input: [z.unknown()], output: z.unknown() })\r\n\r\nexport const TokenRegistrationSchema = z.object({\r\n name: z.string().min(1),\r\n value: z.string(),\r\n})\r\n\r\nexport type TokenRegistrationInput = z.infer<typeof TokenRegistrationSchema>\r\n\r\nexport const parseTwPluginOptions = (options: unknown) =>\r\n parseWithSchema(TwPluginOptionsSchema, options ?? {}, \"plugin options are invalid\")\r\n\r\nexport const parsePluginManifest = (plugin: unknown) =>\r\n parseWithSchema(PluginManifestSchema, plugin, \"plugin manifest is invalid\")\r\n\r\nexport const parseTokenRegistration = (data: unknown) =>\r\n parseWithSchema(TokenRegistrationSchema, data, \"token registration is invalid\")\r\n\r\n// ── Enhanced plugin validation (dari monorepo checklist) ────────────────────\r\n\r\n/** Nama plugin harus mengikuti format npm package */\r\nexport const PluginNameSchema = z.string()\r\n .min(1, \"Plugin name cannot be empty\")\r\n .regex(\r\n /^(@[a-z0-9-]+\\/)?[a-z0-9][a-z0-9-]*[a-z0-9]$/,\r\n \"Plugin name must follow npm naming: lowercase, hyphens allowed, no leading/trailing hyphens\"\r\n )\r\n\r\n/** Versi semantic versioning */\r\nexport const SemverSchema = z.string()\r\n .regex(/^\\d+\\.\\d+\\.\\d+(-[a-z0-9.]+)?$/, \"Version must follow semver: x.y.z or x.y.z-prerelease\")\r\n\r\n/** Full plugin manifest dengan validasi nama dan versi */\r\nexport const FullPluginManifestSchema = PluginManifestSchema.extend({\r\n name: PluginNameSchema,\r\n version: SemverSchema.optional(),\r\n description: z.string().max(200).optional(),\r\n keywords: z.array(z.string()).max(10).optional(),\r\n})\r\n\r\nexport type FullPluginManifest = z.infer<typeof FullPluginManifestSchema>\r\n\r\n/** Validate full plugin manifest */\r\nexport const parseFullPluginManifest = (plugin: unknown): FullPluginManifest =>\r\n parseWithSchema(FullPluginManifestSchema, plugin, \"plugin manifest is invalid\")\r\n\r\n/** Validate plugin name only */\r\nexport const validatePluginName = (name: unknown): string =>\r\n parseWithSchema(PluginNameSchema, name, \"plugin name is invalid\")\r\n\r\n/** Zod validation for plugin registration payload */\r\nexport const PluginRegistrationPayloadSchema = z.object({\r\n plugin: FullPluginManifestSchema,\r\n config: z.record(z.string(), z.unknown()).optional(),\r\n priority: z.number().int().min(0).max(100).optional(),\r\n})\r\n\r\nexport type PluginRegistrationPayload = z.infer<typeof PluginRegistrationPayloadSchema>\r\n\r\nexport const parsePluginRegistrationPayload = (payload: unknown): PluginRegistrationPayload =>\r\n parseWithSchema(PluginRegistrationPayloadSchema, payload, \"plugin registration payload is invalid\")\r\n","import { parsePluginManifest, parseTokenRegistration, TransformRegistrationSchema } from \"./schemas\"\r\nimport type { CompoundCondition, TokenMap } from \"@tailwind-styled/shared\"\r\n\r\nexport interface TwClassResult {\r\n css: string\r\n classes: string[]\r\n}\r\n\r\nexport interface DesignTokens {\r\n [key: string]: string | number | DesignTokens\r\n}\r\n\r\nexport interface TwPluginOptions {\r\n classProcessor?: (classes: string[]) => TwClassResult\r\n tokens?: DesignTokens\r\n debug?: boolean\r\n minify?: boolean\r\n}\r\n\r\nexport type VariantResolver = (selector: string) => string\r\n\r\nexport interface UtilityDefinition {\r\n [property: string]: string\r\n}\r\n\r\nexport type { CompoundCondition, TokenMap }\r\n\r\nexport interface ComponentConfig {\r\n base: string\r\n variants: Record<string, Record<string, string>>\r\n compoundVariants: Array<{ class: string } & CompoundCondition>\r\n defaultVariants: Record<string, string>\r\n}\r\n\r\nexport interface TransformMeta {\r\n componentName: string\r\n tag: string\r\n}\r\n\r\nexport type TransformFn = (config: ComponentConfig, meta: TransformMeta) => ComponentConfig\r\n\r\nexport type CssHook = (css: string) => string\r\n\r\nexport interface TwContext {\r\n addVariant(name: string, resolver: VariantResolver): void\r\n addUtility(name: string, styles: UtilityDefinition): void\r\n addToken(name: string, value: string): void\r\n addTransform(fn: TransformFn): void\r\n onGenerateCSS(hook: CssHook): void\r\n onBuildEnd(hook: () => void | Promise<void>): void\r\n getToken(name: string): string | undefined\r\n subscribeTokens(callback: (tokens: TokenMap) => void): () => void\r\n readonly config: Record<string, unknown>\r\n}\r\n\r\nexport interface TwPlugin {\r\n name: string\r\n setup(ctx: TwContext): void\r\n}\r\n\r\nexport interface PluginRegistry {\r\n variants: Map<string, VariantResolver>\r\n utilities: Map<string, UtilityDefinition>\r\n tokens: Map<string, string>\r\n transforms: TransformFn[]\r\n cssHooks: CssHook[]\r\n buildHooks: Array<() => void | Promise<void>>\r\n plugins: Set<string>\r\n}\r\n\r\nexport interface TokenEngineAPI {\r\n getToken?: (name: string) => string | undefined\r\n getTokens?: () => Record<string, string> | undefined\r\n subscribeTokens?: (callback: (tokens: Record<string, string>) => void) => () => void\r\n subscribe?: (callback: (tokens: Record<string, string>) => void) => () => void\r\n}\r\n\r\nconst TOKEN_ENGINE_KEY = \"__TW_TOKEN_ENGINE__\"\r\n\r\nexport function resolveTokenEngine(): TokenEngineAPI | undefined {\r\n const engine = (globalThis as Record<string, unknown>)[TOKEN_ENGINE_KEY]\r\n if (engine && typeof engine === \"object\") {\r\n return engine as TokenEngineAPI\r\n }\r\n return undefined\r\n}\r\n\r\nexport function readToken(engine: TokenEngineAPI | undefined, name: string): string | undefined {\r\n if (!engine) return undefined\r\n if (typeof engine.getToken === \"function\") return engine.getToken(name)\r\n if (typeof engine.getTokens === \"function\") {\r\n const tokens = engine.getTokens()\r\n return tokens?.[name]\r\n }\r\n return undefined\r\n}\r\n\r\nexport interface TransformContext {\r\n filename?: string\r\n componentName?: string\r\n tag?: string\r\n}\r\n\r\nexport interface TwGlobalRegistry {\r\n transforms: Array<(config: ComponentConfig, ctx: TransformContext) => ComponentConfig>\r\n tokens: Record<string, string>\r\n}\r\n\r\nconst transformRegistry: TwGlobalRegistry = {\r\n transforms: [],\r\n tokens: {},\r\n}\r\n\r\nconst normalizeTokenName = (name: string): string =>\r\n name.replace(/[^a-zA-Z0-9-]/g, \"-\").toLowerCase()\r\n\r\nexport function getGlobalRegistry(): TwGlobalRegistry {\r\n return transformRegistry\r\n}\r\n\r\nexport function registerTransform(\r\n transform: (config: ComponentConfig, ctx: TransformContext) => ComponentConfig\r\n): void {\r\n TransformRegistrationSchema.parse(transform)\r\n transformRegistry.transforms.push(transform)\r\n}\r\n\r\nexport function registerToken(name: string, value: string): void {\r\n const parsed = parseTokenRegistration({ name, value })\r\n transformRegistry.tokens[parsed.name] = parsed.value\r\n}\r\n\r\nexport function createPluginRegistry(): PluginRegistry {\r\n return {\r\n variants: new Map(),\r\n utilities: new Map(),\r\n tokens: new Map(),\r\n transforms: [],\r\n cssHooks: [],\r\n buildHooks: [],\r\n plugins: new Set(),\r\n }\r\n}\r\n\r\nconst legacyState = { globalRegistry: createPluginRegistry() }\r\n\r\nexport function resetGlobalRegistry(): void {\r\n transformRegistry.transforms.length = 0\r\n for (const key of Object.keys(transformRegistry.tokens)) {\r\n delete transformRegistry.tokens[key]\r\n }\r\n legacyState.globalRegistry = createPluginRegistry()\r\n}\r\n\r\nexport function createPluginContext(\r\n registry: PluginRegistry,\r\n config: Record<string, unknown> = {}\r\n): TwContext {\r\n const isLegacyRegistry = registry === legacyState.globalRegistry\r\n\r\n return {\r\n config,\r\n addVariant(name, resolver) {\r\n registry.variants.set(name, resolver)\r\n },\r\n addUtility(name, styles) {\r\n registry.utilities.set(name, styles)\r\n },\r\n addToken(name, value) {\r\n const parsed = parseTokenRegistration({ name, value })\r\n const normalized = normalizeTokenName(parsed.name)\r\n registry.tokens.set(normalized, parsed.value)\r\n if (isLegacyRegistry) {\r\n transformRegistry.tokens[normalized] = parsed.value\r\n }\r\n },\r\n addTransform(fn) {\r\n TransformRegistrationSchema.parse(fn)\r\n registry.transforms.push(fn)\r\n if (isLegacyRegistry) {\r\n transformRegistry.transforms.push((config, ctx) =>\r\n fn(config, {\r\n componentName: ctx.componentName ?? \"\",\r\n tag: ctx.tag ?? \"\",\r\n })\r\n )\r\n }\r\n },\r\n onGenerateCSS(hook) {\r\n registry.cssHooks.push(hook)\r\n },\r\n onBuildEnd(hook) {\r\n registry.buildHooks.push(hook)\r\n },\r\n getToken(name) {\r\n return readToken(resolveTokenEngine(), name)\r\n },\r\n subscribeTokens(callback) {\r\n const engine = resolveTokenEngine()\r\n if (!engine) return () => {}\r\n if (typeof engine.subscribeTokens === \"function\") return engine.subscribeTokens(callback)\r\n if (typeof engine.subscribe === \"function\") return engine.subscribe(callback)\r\n return () => {}\r\n },\r\n }\r\n}\r\n\r\nexport function createTw(config: Record<string, unknown> = {}): TwContext & {\r\n registry: {\r\n plugins: Set<string>\r\n variants: Map<string, VariantResolver>\r\n utilities: Map<string, UtilityDefinition>\r\n tokens: Map<string, string>\r\n }\r\n use: (plugin: TwPlugin) => void\r\n} {\r\n const registry = createPluginRegistry()\r\n const ctx = createPluginContext(registry, config)\r\n\r\n const result = ctx as TwContext & {\r\n registry: {\r\n plugins: Set<string>\r\n variants: Map<string, VariantResolver>\r\n utilities: Map<string, UtilityDefinition>\r\n tokens: Map<string, string>\r\n }\r\n use: (plugin: TwPlugin) => void\r\n }\r\n\r\n result.registry = {\r\n plugins: registry.plugins,\r\n variants: registry.variants,\r\n utilities: registry.utilities,\r\n tokens: registry.tokens,\r\n }\r\n\r\n result.use = (plugin: TwPlugin) => {\r\n const manifest = parsePluginManifest(plugin)\r\n manifest.setup(ctx)\r\n registry.plugins.add(manifest.name)\r\n }\r\n\r\n if (config.plugins && Array.isArray(config.plugins)) {\r\n for (const plugin of config.plugins) {\r\n result.use(parsePluginManifest(plugin))\r\n }\r\n }\r\n\r\n return result\r\n}\r\n\r\nexport function use(plugin: TwPlugin): void {\r\n const ctx = createPluginContext(legacyState.globalRegistry)\r\n parsePluginManifest(plugin).setup(ctx)\r\n}\r\n\r\nexport function presetTokens(tokens: Record<string, string>): TwPlugin {\r\n return {\r\n name: \"preset-tokens\",\r\n setup(ctx) {\r\n for (const [name, value] of Object.entries(tokens)) {\r\n ctx.addToken(name, value)\r\n }\r\n },\r\n }\r\n}\r\n\r\nexport function presetVariants(variants: Record<string, VariantResolver>): TwPlugin {\r\n return {\r\n name: \"preset-variants\",\r\n setup(ctx) {\r\n for (const [name, resolver] of Object.entries(variants)) {\r\n ctx.addVariant(name, resolver)\r\n }\r\n },\r\n }\r\n}\r\n\r\nexport function presetScrollbar(): TwPlugin {\r\n return {\r\n name: \"preset-scrollbar\",\r\n setup(ctx) {\r\n ctx.addVariant(\"scrollbar-thin\", () => \"::-webkit-scrollbar{width:8px;height:8px}\")\r\n ctx.addVariant(\"scrollbar-none\", () => \"::-webkit-scrollbar{display:none}\")\r\n ctx.addUtility(\"scrollbar-hide\", { \"-ms-overflow-style\": \"none\", \"scrollbar-width\": \"none\" })\r\n },\r\n }\r\n}\r\n\r\n// Re-export schemas\r\nexport {\r\n type PluginManifestInput,\r\n PluginManifestSchema,\r\n parsePluginManifest,\r\n parseTokenRegistration,\r\n parseTwPluginOptions,\r\n type TokenRegistrationInput,\r\n TokenRegistrationSchema,\r\n TransformRegistrationSchema,\r\n type TwPluginOptionsInput,\r\n TwPluginOptionsSchema,\r\n} from \"./schemas\"\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../packages/domain/plugin-api/src/schemas.ts","../packages/domain/plugin-api/src/index.ts"],"names":["z","config"],"mappings":"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","file":"plugin-api.js","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 DesignTokensSchema: z.ZodType<\r\n Record<string, string | number | Record<string, unknown>>\r\n> = z.record(z.string(), z.union([z.string(), z.number(), z.lazy(() => DesignTokensSchema)]))\r\n\r\nexport const TwClassResultSchema = z.object({\r\n css: z.string(),\r\n classes: z.array(z.string()),\r\n})\r\n\r\nexport const TwPluginOptionsSchema = z.object({\r\n classProcessor: z\r\n .function({ input: [z.array(z.string())], output: TwClassResultSchema })\r\n .optional(),\r\n tokens: DesignTokensSchema.optional(),\r\n debug: z.boolean().optional(),\r\n minify: z.boolean().optional(),\r\n})\r\n\r\nexport type TwPluginOptionsInput = z.infer<typeof TwPluginOptionsSchema>\r\n\r\nexport const PluginManifestSchema = z.object({\r\n name: z.string().min(1),\r\n setup: z.function({ input: [z.unknown()], output: z.unknown() }),\r\n})\r\n\r\nexport type PluginManifestInput = z.infer<typeof PluginManifestSchema>\r\n\r\nexport const TransformRegistrationSchema = z.function({ input: [z.unknown()], output: z.unknown() })\r\n\r\nexport const TokenRegistrationSchema = z.object({\r\n name: z.string().min(1),\r\n value: z.string(),\r\n})\r\n\r\nexport type TokenRegistrationInput = z.infer<typeof TokenRegistrationSchema>\r\n\r\nexport const parseTwPluginOptions = (options: unknown) =>\r\n parseWithSchema(TwPluginOptionsSchema, options ?? {}, \"plugin options are invalid\")\r\n\r\nexport const parsePluginManifest = (plugin: unknown) =>\r\n parseWithSchema(PluginManifestSchema, plugin, \"plugin manifest is invalid\")\r\n\r\nexport const parseTokenRegistration = (data: unknown) =>\r\n parseWithSchema(TokenRegistrationSchema, data, \"token registration is invalid\")\r\n\r\n// ── Enhanced plugin validation (dari monorepo checklist) ────────────────────\r\n\r\n/** Nama plugin harus mengikuti format npm package */\r\nexport const PluginNameSchema = z.string()\r\n .min(1, \"Plugin name cannot be empty\")\r\n .regex(\r\n /^(@[a-z0-9-]+\\/)?[a-z0-9][a-z0-9-]*[a-z0-9]$/,\r\n \"Plugin name must follow npm naming: lowercase, hyphens allowed, no leading/trailing hyphens\"\r\n )\r\n\r\n/** Versi semantic versioning */\r\nexport const SemverSchema = z.string()\r\n .regex(/^\\d+\\.\\d+\\.\\d+(-[a-z0-9.]+)?$/, \"Version must follow semver: x.y.z or x.y.z-prerelease\")\r\n\r\n/** Full plugin manifest dengan validasi nama dan versi */\r\nexport const FullPluginManifestSchema = PluginManifestSchema.extend({\r\n name: PluginNameSchema,\r\n version: SemverSchema.optional(),\r\n description: z.string().max(200).optional(),\r\n keywords: z.array(z.string()).max(10).optional(),\r\n})\r\n\r\nexport type FullPluginManifest = z.infer<typeof FullPluginManifestSchema>\r\n\r\n/** Validate full plugin manifest */\r\nexport const parseFullPluginManifest = (plugin: unknown): FullPluginManifest =>\r\n parseWithSchema(FullPluginManifestSchema, plugin, \"plugin manifest is invalid\")\r\n\r\n/** Validate plugin name only */\r\nexport const validatePluginName = (name: unknown): string =>\r\n parseWithSchema(PluginNameSchema, name, \"plugin name is invalid\")\r\n\r\n/** Zod validation for plugin registration payload */\r\nexport const PluginRegistrationPayloadSchema = z.object({\r\n plugin: FullPluginManifestSchema,\r\n config: z.record(z.string(), z.unknown()).optional(),\r\n priority: z.number().int().min(0).max(100).optional(),\r\n})\r\n\r\nexport type PluginRegistrationPayload = z.infer<typeof PluginRegistrationPayloadSchema>\r\n\r\nexport const parsePluginRegistrationPayload = (payload: unknown): PluginRegistrationPayload =>\r\n parseWithSchema(PluginRegistrationPayloadSchema, payload, \"plugin registration payload is invalid\")\r\n","import { parsePluginManifest, parseTokenRegistration, TransformRegistrationSchema } from \"./schemas\"\nimport type { CompoundCondition, TokenMap } from \"@tailwind-styled/shared\"\n\nexport interface TwClassResult {\n css: string\n classes: string[]\n}\n\nexport interface DesignTokens {\n [key: string]: string | number | DesignTokens\n}\n\nexport interface TwPluginOptions {\n classProcessor?: (classes: string[]) => TwClassResult\n tokens?: DesignTokens\n debug?: boolean\n minify?: boolean\n}\n\nexport type VariantResolver = (selector: string) => string\n\nexport interface UtilityDefinition {\n [property: string]: string\n}\n\nexport type { CompoundCondition, TokenMap }\n\nexport interface ComponentConfig {\n base: string\n variants: Record<string, Record<string, string>>\n compoundVariants: Array<{ class: string } & CompoundCondition>\n defaultVariants: Record<string, string>\n}\n\nexport interface TransformMeta {\n componentName: string\n tag: string\n}\n\nexport type TransformFn = (config: ComponentConfig, meta: TransformMeta) => ComponentConfig\n\nexport type CssHook = (css: string) => string\n\nexport interface TwContext {\n addVariant(name: string, resolver: VariantResolver): void\n addUtility(name: string, styles: UtilityDefinition): void\n addToken(name: string, value: string): void\n addTransform(fn: TransformFn): void\n onGenerateCSS(hook: CssHook): void\n onBuildEnd(hook: () => void | Promise<void>): void\n getToken(name: string): string | undefined\n subscribeTokens(callback: (tokens: TokenMap) => void): () => void\n readonly config: Record<string, unknown>\n}\n\nexport interface TwPlugin {\n name: string\n setup(ctx: TwContext): void\n}\n\nexport interface PluginRegistry {\n variants: Map<string, VariantResolver>\n utilities: Map<string, UtilityDefinition>\n tokens: Map<string, string>\n transforms: TransformFn[]\n cssHooks: CssHook[]\n buildHooks: Array<() => void | Promise<void>>\n plugins: Set<string>\n}\n\nexport interface TokenEngineAPI {\n getToken?: (name: string) => string | undefined\n getTokens?: () => Record<string, string> | undefined\n subscribeTokens?: (callback: (tokens: Record<string, string>) => void) => () => void\n subscribe?: (callback: (tokens: Record<string, string>) => void) => () => void\n}\n\nconst TOKEN_ENGINE_KEY = \"__TW_TOKEN_ENGINE__\"\n\nexport function resolveTokenEngine(): TokenEngineAPI | undefined {\n const engine = (globalThis as Record<string, unknown>)[TOKEN_ENGINE_KEY]\n if (engine && typeof engine === \"object\") {\n return engine as TokenEngineAPI\n }\n return undefined\n}\n\nexport function readToken(engine: TokenEngineAPI | undefined, name: string): string | undefined {\n if (!engine) return undefined\n if (typeof engine.getToken === \"function\") return engine.getToken(name)\n if (typeof engine.getTokens === \"function\") {\n const tokens = engine.getTokens()\n return tokens?.[name]\n }\n return undefined\n}\n\nexport interface TransformContext {\n filename?: string\n componentName?: string\n tag?: string\n}\n\nexport interface TwGlobalRegistry {\n transforms: Array<(config: ComponentConfig, ctx: TransformContext) => ComponentConfig>\n tokens: Record<string, string>\n variants: Map<string, VariantResolver>\n}\n\nconst transformRegistry: TwGlobalRegistry = {\n transforms: [],\n tokens: {},\n variants: new Map(),\n}\n\nconst normalizeTokenName = (name: string): string =>\n name.replace(/[^a-zA-Z0-9-]/g, \"-\").toLowerCase()\n\nexport function getGlobalRegistry(): TwGlobalRegistry {\n return transformRegistry\n}\n\nexport function registerTransform(\n transform: (config: ComponentConfig, ctx: TransformContext) => ComponentConfig\n): void {\n TransformRegistrationSchema.parse(transform)\n transformRegistry.transforms.push(transform)\n}\n\nexport function registerToken(name: string, value: string): void {\n const parsed = parseTokenRegistration({ name, value })\n transformRegistry.tokens[parsed.name] = parsed.value\n}\n\nexport function createPluginRegistry(): PluginRegistry {\n return {\n variants: new Map(),\n utilities: new Map(),\n tokens: new Map(),\n transforms: [],\n cssHooks: [],\n buildHooks: [],\n plugins: new Set(),\n }\n}\n\nconst legacyState = { globalRegistry: createPluginRegistry() }\n\nexport function resetGlobalRegistry(): void {\n transformRegistry.transforms.length = 0\n transformRegistry.variants.clear()\n for (const key of Object.keys(transformRegistry.tokens)) {\n delete transformRegistry.tokens[key]\n }\n legacyState.globalRegistry = createPluginRegistry()\n}\n\nexport function createPluginContext(\n registry: PluginRegistry,\n config: Record<string, unknown> = {}\n): TwContext {\n const isLegacyRegistry = registry === legacyState.globalRegistry\n\n return {\n config,\n addVariant(name, resolver) {\n registry.variants.set(name, resolver)\n if (isLegacyRegistry) {\n transformRegistry.variants.set(name, resolver)\n }\n },\n addUtility(name, styles) {\n registry.utilities.set(name, styles)\n },\n addToken(name, value) {\n const parsed = parseTokenRegistration({ name, value })\n const normalized = normalizeTokenName(parsed.name)\n registry.tokens.set(normalized, parsed.value)\n if (isLegacyRegistry) {\n transformRegistry.tokens[normalized] = parsed.value\n }\n },\n addTransform(fn) {\n TransformRegistrationSchema.parse(fn)\n registry.transforms.push(fn)\n if (isLegacyRegistry) {\n transformRegistry.transforms.push((config, ctx) =>\n fn(config, {\n componentName: ctx.componentName ?? \"\",\n tag: ctx.tag ?? \"\",\n })\n )\n }\n },\n onGenerateCSS(hook) {\n registry.cssHooks.push(hook)\n },\n onBuildEnd(hook) {\n registry.buildHooks.push(hook)\n },\n getToken(name) {\n const normalized = normalizeTokenName(name)\n // Check local registry first (populated by addToken), then fallback to token engine\n const local = registry.tokens.get(normalized)\n if (local !== undefined) return local\n return readToken(resolveTokenEngine(), normalized)\n },\n subscribeTokens(callback) {\n const engine = resolveTokenEngine()\n if (!engine) return () => {}\n if (typeof engine.subscribeTokens === \"function\") return engine.subscribeTokens(callback)\n if (typeof engine.subscribe === \"function\") return engine.subscribe(callback)\n return () => {}\n },\n }\n}\n\nexport function createTw(config: Record<string, unknown> = {}): TwContext & {\n registry: {\n plugins: Set<string>\n variants: Map<string, VariantResolver>\n utilities: Map<string, UtilityDefinition>\n tokens: Map<string, string>\n }\n use: (plugin: TwPlugin) => void\n} {\n const registry = createPluginRegistry()\n const ctx = createPluginContext(registry, config)\n\n const result = ctx as TwContext & {\n registry: {\n plugins: Set<string>\n variants: Map<string, VariantResolver>\n utilities: Map<string, UtilityDefinition>\n tokens: Map<string, string>\n }\n use: (plugin: TwPlugin) => void\n }\n\n result.registry = {\n plugins: registry.plugins,\n variants: registry.variants,\n utilities: registry.utilities,\n tokens: registry.tokens,\n }\n\n result.use = (plugin: TwPlugin) => {\n const manifest = parsePluginManifest(plugin)\n manifest.setup(ctx)\n registry.plugins.add(manifest.name)\n }\n\n if (config.plugins && Array.isArray(config.plugins)) {\n for (const plugin of config.plugins) {\n result.use(parsePluginManifest(plugin))\n }\n }\n\n return result\n}\n\n/**\n * Creates a TwContext that writes through to the global (legacy) registry.\n * Used by createTwPlugin() in the plugin package.\n */\nexport function createGlobalPluginContext(config: Record<string, unknown> = {}): TwContext {\n return createPluginContext(legacyState.globalRegistry, config)\n}\n\nexport function use(plugin: TwPlugin): void {\n const ctx = createPluginContext(legacyState.globalRegistry)\n parsePluginManifest(plugin).setup(ctx)\n}\n\nexport function presetTokens(tokens: Record<string, string>): TwPlugin {\n return {\n name: \"preset-tokens\",\n setup(ctx) {\n for (const [name, value] of Object.entries(tokens)) {\n ctx.addToken(name, value)\n }\n },\n }\n}\n\nexport function presetVariants(variants: Record<string, VariantResolver>): TwPlugin {\n return {\n name: \"preset-variants\",\n setup(ctx) {\n for (const [name, resolver] of Object.entries(variants)) {\n ctx.addVariant(name, resolver)\n }\n },\n }\n}\n\nexport function presetScrollbar(): TwPlugin {\n return {\n name: \"preset-scrollbar\",\n setup(ctx) {\n ctx.addVariant(\"scrollbar-thin\", () => \"::-webkit-scrollbar{width:8px;height:8px}\")\n ctx.addVariant(\"scrollbar-none\", () => \"::-webkit-scrollbar{display:none}\")\n ctx.addUtility(\"scrollbar-hide\", { \"-ms-overflow-style\": \"none\", \"scrollbar-width\": \"none\" })\n },\n }\n}\n\n// Re-export schemas\nexport {\n type PluginManifestInput,\n PluginManifestSchema,\n parsePluginManifest,\n parseTokenRegistration,\n parseTwPluginOptions,\n type TokenRegistrationInput,\n TokenRegistrationSchema,\n TransformRegistrationSchema,\n type TwPluginOptionsInput,\n TwPluginOptionsSchema,\n} from \"./schemas\""]}
|
package/dist/plugin-api.mjs
CHANGED
|
@@ -71,7 +71,8 @@ function readToken(engine, name) {
|
|
|
71
71
|
}
|
|
72
72
|
var transformRegistry = {
|
|
73
73
|
transforms: [],
|
|
74
|
-
tokens: {}
|
|
74
|
+
tokens: {},
|
|
75
|
+
variants: /* @__PURE__ */ new Map()
|
|
75
76
|
};
|
|
76
77
|
var normalizeTokenName = (name) => name.replace(/[^a-zA-Z0-9-]/g, "-").toLowerCase();
|
|
77
78
|
function getGlobalRegistry() {
|
|
@@ -99,6 +100,7 @@ function createPluginRegistry() {
|
|
|
99
100
|
var legacyState = { globalRegistry: createPluginRegistry() };
|
|
100
101
|
function resetGlobalRegistry() {
|
|
101
102
|
transformRegistry.transforms.length = 0;
|
|
103
|
+
transformRegistry.variants.clear();
|
|
102
104
|
for (const key of Object.keys(transformRegistry.tokens)) {
|
|
103
105
|
delete transformRegistry.tokens[key];
|
|
104
106
|
}
|
|
@@ -110,6 +112,9 @@ function createPluginContext(registry, config = {}) {
|
|
|
110
112
|
config,
|
|
111
113
|
addVariant(name, resolver) {
|
|
112
114
|
registry.variants.set(name, resolver);
|
|
115
|
+
if (isLegacyRegistry) {
|
|
116
|
+
transformRegistry.variants.set(name, resolver);
|
|
117
|
+
}
|
|
113
118
|
},
|
|
114
119
|
addUtility(name, styles) {
|
|
115
120
|
registry.utilities.set(name, styles);
|
|
@@ -141,7 +146,10 @@ function createPluginContext(registry, config = {}) {
|
|
|
141
146
|
registry.buildHooks.push(hook);
|
|
142
147
|
},
|
|
143
148
|
getToken(name) {
|
|
144
|
-
|
|
149
|
+
const normalized = normalizeTokenName(name);
|
|
150
|
+
const local = registry.tokens.get(normalized);
|
|
151
|
+
if (local !== void 0) return local;
|
|
152
|
+
return readToken(resolveTokenEngine(), normalized);
|
|
145
153
|
},
|
|
146
154
|
subscribeTokens(callback) {
|
|
147
155
|
const engine = resolveTokenEngine();
|
|
@@ -176,6 +184,9 @@ function createTw(config = {}) {
|
|
|
176
184
|
}
|
|
177
185
|
return result;
|
|
178
186
|
}
|
|
187
|
+
function createGlobalPluginContext(config = {}) {
|
|
188
|
+
return createPluginContext(legacyState.globalRegistry, config);
|
|
189
|
+
}
|
|
179
190
|
function use(plugin) {
|
|
180
191
|
const ctx = createPluginContext(legacyState.globalRegistry);
|
|
181
192
|
parsePluginManifest(plugin).setup(ctx);
|
|
@@ -211,6 +222,6 @@ function presetScrollbar() {
|
|
|
211
222
|
};
|
|
212
223
|
}
|
|
213
224
|
|
|
214
|
-
export { PluginManifestSchema, TokenRegistrationSchema, TransformRegistrationSchema, TwPluginOptionsSchema, createPluginContext, createPluginRegistry, createTw, getGlobalRegistry, parsePluginManifest, parseTokenRegistration, parseTwPluginOptions, presetScrollbar, presetTokens, presetVariants, readToken, registerToken, registerTransform, resetGlobalRegistry, resolveTokenEngine, use };
|
|
225
|
+
export { PluginManifestSchema, TokenRegistrationSchema, TransformRegistrationSchema, TwPluginOptionsSchema, createGlobalPluginContext, createPluginContext, createPluginRegistry, createTw, getGlobalRegistry, parsePluginManifest, parseTokenRegistration, parseTwPluginOptions, presetScrollbar, presetTokens, presetVariants, readToken, registerToken, registerTransform, resetGlobalRegistry, resolveTokenEngine, use };
|
|
215
226
|
//# sourceMappingURL=plugin-api.mjs.map
|
|
216
227
|
//# sourceMappingURL=plugin-api.mjs.map
|