tailwind-styled-v4 5.0.39 → 5.0.411
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/analyzer.js +38 -13
- package/dist/analyzer.js.map +1 -1
- package/dist/analyzer.mjs +104 -72
- package/dist/analyzer.mjs.map +1 -1
- package/dist/animate.js +33 -7
- package/dist/animate.js.map +1 -1
- package/dist/animate.mjs +55 -22
- package/dist/animate.mjs.map +1 -1
- package/dist/atomic.js +39 -10
- package/dist/atomic.js.map +1 -1
- package/dist/atomic.mjs +56 -23
- package/dist/atomic.mjs.map +1 -1
- package/dist/cli.js +151 -39
- package/dist/cli.js.map +1 -1
- package/dist/cli.mjs +321 -203
- package/dist/cli.mjs.map +1 -1
- package/dist/compiler.js +57 -16
- package/dist/compiler.js.map +1 -1
- package/dist/compiler.mjs +71 -28
- package/dist/compiler.mjs.map +1 -1
- package/dist/dashboard.js +0 -1
- package/dist/dashboard.js.map +1 -1
- package/dist/devtools.js +16 -2
- package/dist/devtools.js.map +1 -1
- package/dist/devtools.mjs +21 -2
- package/dist/devtools.mjs.map +1 -1
- package/dist/engine.js +140 -56
- package/dist/engine.js.map +1 -1
- package/dist/engine.mjs +238 -148
- package/dist/engine.mjs.map +1 -1
- package/dist/index.js +50 -9
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +74 -29
- package/dist/index.mjs.map +1 -1
- package/dist/next.js +97 -41
- package/dist/next.js.map +1 -1
- package/dist/next.mjs +177 -115
- package/dist/next.mjs.map +1 -1
- package/dist/plugin-api.js +0 -1
- package/dist/plugin-api.js.map +1 -1
- package/dist/plugin-registry.js +5 -2
- package/dist/plugin-registry.js.map +1 -1
- package/dist/plugin-registry.mjs +9 -2
- package/dist/plugin-registry.mjs.map +1 -1
- package/dist/plugin.js +0 -1
- package/dist/plugin.js.map +1 -1
- package/dist/preset.js +0 -1
- package/dist/preset.js.map +1 -1
- package/dist/rspack.js +22 -8
- package/dist/rspack.js.map +1 -1
- package/dist/rspack.mjs +39 -18
- package/dist/rspack.mjs.map +1 -1
- package/dist/runtime-css.js +0 -1
- package/dist/runtime-css.js.map +1 -1
- package/dist/runtime.js +0 -1
- package/dist/runtime.js.map +1 -1
- package/dist/scanner.js +25 -9
- package/dist/scanner.js.map +1 -1
- package/dist/scanner.mjs +84 -61
- package/dist/scanner.mjs.map +1 -1
- package/dist/shared.js +91 -37
- package/dist/shared.js.map +1 -1
- package/dist/shared.mjs +122 -64
- package/dist/shared.mjs.map +1 -1
- package/dist/storybook-addon.js +0 -1
- package/dist/storybook-addon.js.map +1 -1
- package/dist/svelte.js +40 -9
- package/dist/svelte.js.map +1 -1
- package/dist/svelte.mjs +57 -28
- package/dist/svelte.mjs.map +1 -1
- package/dist/syntax.js +6 -3
- package/dist/syntax.js.map +1 -1
- package/dist/syntax.mjs +30 -23
- package/dist/syntax.mjs.map +1 -1
- package/dist/testing.js +0 -1
- package/dist/testing.js.map +1 -1
- package/dist/theme.js +21 -4
- package/dist/theme.js.map +1 -1
- package/dist/theme.mjs +41 -17
- package/dist/theme.mjs.map +1 -1
- package/dist/turbopackLoader.js +58 -16
- package/dist/turbopackLoader.js.map +1 -1
- package/dist/turbopackLoader.mjs +89 -45
- package/dist/turbopackLoader.mjs.map +1 -1
- package/dist/tw.js +153 -39
- package/dist/tw.js.map +1 -1
- package/dist/tw.mjs +321 -203
- package/dist/tw.mjs.map +1 -1
- package/dist/vite.js +131 -54
- package/dist/vite.js.map +1 -1
- package/dist/vite.mjs +226 -143
- package/dist/vite.mjs.map +1 -1
- package/dist/vue.js +40 -9
- package/dist/vue.js.map +1 -1
- package/dist/vue.mjs +57 -28
- package/dist/vue.mjs.map +1 -1
- package/dist/webpackLoader.js +40 -10
- package/dist/webpackLoader.js.map +1 -1
- package/dist/webpackLoader.mjs +59 -27
- package/dist/webpackLoader.mjs.map +1 -1
- package/package.json +1 -1
package/dist/preset.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/umbrella/preset.ts","../packages/domain/preset/src/defaultPreset.ts","../packages/domain/preset/src/presetExtension.ts"],"sourcesContent":["export * from \"@tailwind-styled/preset\"\n","/**\n * tailwind-styled-v4 — Default Preset\n *\n * Tailwind config built-in yang dipakai ketika developer tidak punya\n * tailwind.config.ts / tailwind.config.js di project mereka.\n *\n * Developer tidak perlu setup apapun:\n * npm install tailwind-styled-v4\n * → langsung bisa tw.div`p-4 bg-blue-500`\n *\n * Preset ini juga menyediakan design tokens yang consistent\n * untuk semua project yang pakai tailwind-styled-v4.\n *\n * Override per-project:\n * // tailwind.config.ts\n * import { defaultPreset } from \"tailwind-styled-v4/preset\"\n * export default { presets: [defaultPreset], theme: { extend: {...} } }\n */\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Content paths — auto-detect berdasarkan project structure\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst STANDARD_CONTENT_PATHS = [\n // Next.js App Router\n \"./src/**/*.{tsx,ts,jsx,js,mdx}\",\n \"./app/**/*.{tsx,ts,jsx,js,mdx}\",\n \"./pages/**/*.{tsx,ts,jsx,js,mdx}\",\n \"./components/**/*.{tsx,ts,jsx,js,mdx}\",\n // Vite / React\n \"./src/**/*.{tsx,ts,jsx,js}\",\n \"./index.html\",\n // Monorepo\n \"../../packages/**/src/**/*.{tsx,ts,jsx,js}\",\n]\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Design tokens — consistent across all tailwind-styled-v4 projects\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const designTokens = {\n colors: {\n primary: { DEFAULT: \"#3b82f6\", hover: \"#2563eb\", active: \"#1d4ed8\", foreground: \"#ffffff\" },\n secondary: { DEFAULT: \"#6366f1\", hover: \"#4f46e5\", active: \"#4338ca\", foreground: \"#ffffff\" },\n accent: { DEFAULT: \"#f59e0b\", hover: \"#d97706\", active: \"#b45309\", foreground: \"#000000\" },\n success: { DEFAULT: \"#10b981\", foreground: \"#ffffff\" },\n warning: { DEFAULT: \"#f59e0b\", foreground: \"#000000\" },\n danger: { DEFAULT: \"#ef4444\", foreground: \"#ffffff\" },\n info: { DEFAULT: \"#3b82f6\", foreground: \"#ffffff\" },\n surface: \"#18181b\",\n border: \"#27272a\",\n muted: \"#71717a\",\n subtle: \"#3f3f46\",\n },\n\n spacing: {\n 1: \"0.25rem\",\n 2: \"0.5rem\",\n 3: \"0.75rem\",\n 4: \"1rem\",\n 5: \"1.25rem\",\n 6: \"1.5rem\",\n 8: \"2rem\",\n 10: \"2.5rem\",\n 12: \"3rem\",\n 16: \"4rem\",\n },\n\n breakpoints: {\n sm: \"40rem\",\n md: \"48rem\",\n lg: \"64rem\",\n xl: \"80rem\",\n \"2xl\": \"96rem\",\n },\n\n fontWeight: {\n normal: \"400\",\n medium: \"500\",\n semibold: \"600\",\n bold: \"700\",\n },\n\n fontFamily: {\n sans: [\"InterVariable\", \"Inter\", \"system-ui\", \"sans-serif\"],\n mono: [\"JetBrains Mono\", \"Fira Code\", \"Consolas\", \"monospace\"],\n },\n\n borderRadius: {\n sm: \"0.25rem\",\n DEFAULT: \"0.5rem\",\n md: \"0.5rem\",\n lg: \"0.75rem\",\n xl: \"1rem\",\n \"2xl\": \"1.5rem\",\n full: \"9999px\",\n },\n\n animation: {\n \"fade-in\": \"fadeIn 0.2s ease-out\",\n \"fade-out\": \"fadeOut 0.2s ease-in\",\n \"slide-up\": \"slideUp 0.3s cubic-bezier(0.16, 1, 0.3, 1)\",\n \"slide-down\": \"slideDown 0.3s cubic-bezier(0.16, 1, 0.3, 1)\",\n \"scale-in\": \"scaleIn 0.2s ease-out\",\n },\n\n keyframes: {\n fadeIn: { from: { opacity: \"0\" }, to: { opacity: \"1\" } },\n fadeOut: { from: { opacity: \"1\" }, to: { opacity: \"0\" } },\n slideUp: {\n from: { transform: \"translateY(8px)\", opacity: \"0\" },\n to: { transform: \"translateY(0)\", opacity: \"1\" },\n },\n slideDown: {\n from: { transform: \"translateY(-8px)\", opacity: \"0\" },\n to: { transform: \"translateY(0)\", opacity: \"1\" },\n },\n scaleIn: {\n from: { transform: \"scale(0.95)\", opacity: \"0\" },\n to: { transform: \"scale(1)\", opacity: \"1\" },\n },\n },\n} as const\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Default Tailwind Config — dipakai sebagai fallback + preset\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const defaultPreset = {\n content: STANDARD_CONTENT_PATHS,\n\n darkMode: \"class\" as const,\n\n theme: {\n extend: {\n colors: designTokens.colors,\n fontFamily: designTokens.fontFamily,\n borderRadius: designTokens.borderRadius,\n animation: designTokens.animation,\n keyframes: designTokens.keyframes,\n },\n },\n\n plugins: [],\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Default Theme CSS — Tailwind v4 @theme block\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const defaultThemeCss = `@import \"tailwindcss\";\n\n@theme {\n /* colors */\n --color-primary: #3b82f6;\n --color-primary-hover: #2563eb;\n --color-primary-active: #1d4ed8;\n --color-primary-foreground: #ffffff;\n --color-secondary: #6366f1;\n --color-secondary-hover: #4f46e5;\n --color-secondary-active: #4338ca;\n --color-secondary-foreground: #ffffff;\n --color-accent: #f59e0b;\n --color-accent-hover: #d97706;\n --color-accent-active: #b45309;\n --color-accent-foreground: #000000;\n --color-success: #10b981;\n --color-success-foreground: #ffffff;\n --color-warning: #f59e0b;\n --color-warning-foreground: #000000;\n --color-danger: #ef4444;\n --color-danger-foreground: #ffffff;\n --color-info: #3b82f6;\n --color-info-foreground: #ffffff;\n --color-surface: #18181b;\n --color-border: #27272a;\n --color-muted: #71717a;\n --color-subtle: #3f3f46;\n\n /* fonts */\n --font-sans: InterVariable, Inter, system-ui, sans-serif;\n --font-mono: JetBrains Mono, Fira Code, Consolas, monospace;\n\n /* spacing */\n --spacing-1: 0.25rem;\n --spacing-2: 0.5rem;\n --spacing-3: 0.75rem;\n --spacing-4: 1rem;\n --spacing-5: 1.25rem;\n --spacing-6: 1.5rem;\n --spacing-8: 2rem;\n --spacing-10: 2.5rem;\n --spacing-12: 3rem;\n --spacing-16: 4rem;\n\n /* breakpoints */\n --breakpoint-sm: 40rem;\n --breakpoint-md: 48rem;\n --breakpoint-lg: 64rem;\n --breakpoint-xl: 80rem;\n --breakpoint-2xl: 96rem;\n\n /* border radius */\n --radius-sm: 0.25rem;\n --radius-md: 0.5rem;\n --radius-lg: 0.75rem;\n --radius-xl: 1rem;\n --radius-2xl: 1.5rem;\n --radius-full: 9999px;\n\n /* animations */\n --animate-fade-in: fadeIn 0.2s ease-out;\n --animate-fade-out: fadeOut 0.2s ease-in;\n --animate-slide-up: slideUp 0.3s cubic-bezier(0.16, 1, 0.3, 1);\n --animate-slide-down: slideDown 0.3s cubic-bezier(0.16, 1, 0.3, 1);\n --animate-scale-in: scaleIn 0.2s ease-out;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n@keyframes fadeOut {\n from { opacity: 1; }\n to { opacity: 0; }\n}\n@keyframes slideUp {\n from { transform: translateY(8px); opacity: 0; }\n to { transform: translateY(0); opacity: 1; }\n}\n@keyframes slideDown {\n from { transform: translateY(-8px); opacity: 0; }\n to { transform: translateY(0); opacity: 1; }\n}\n@keyframes scaleIn {\n from { transform: scale(0.95); opacity: 0; }\n to { transform: scale(1); opacity: 1; }\n}`\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Zero-config globals.css — tidak perlu @tailwind base dll\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const defaultGlobalCss = `@import \"tailwindcss\";\n\n@theme {\n /* colors */\n --color-primary: #3b82f6;\n --color-primary-hover: #2563eb;\n --color-primary-active: #1d4ed8;\n --color-primary-foreground: #ffffff;\n --color-secondary: #6366f1;\n --color-secondary-hover: #4f46e5;\n --color-secondary-active: #4338ca;\n --color-secondary-foreground: #ffffff;\n --color-accent: #f59e0b;\n --color-accent-hover: #d97706;\n --color-accent-active: #b45309;\n --color-accent-foreground: #000000;\n --color-success: #10b981;\n --color-success-foreground: #ffffff;\n --color-warning: #f59e0b;\n --color-warning-foreground: #000000;\n --color-danger: #ef4444;\n --color-danger-foreground: #ffffff;\n --color-info: #3b82f6;\n --color-info-foreground: #ffffff;\n --color-surface: #18181b;\n --color-border: #27272a;\n --color-muted: #71717a;\n --color-subtle: #3f3f46;\n\n /* fonts */\n --font-sans: InterVariable, Inter, system-ui, sans-serif;\n --font-mono: JetBrains Mono, Fira Code, Consolas, monospace;\n\n /* spacing */\n --spacing-1: 0.25rem;\n --spacing-2: 0.5rem;\n --spacing-3: 0.75rem;\n --spacing-4: 1rem;\n --spacing-5: 1.25rem;\n --spacing-6: 1.5rem;\n --spacing-8: 2rem;\n --spacing-10: 2.5rem;\n --spacing-12: 3rem;\n --spacing-16: 4rem;\n\n /* breakpoints */\n --breakpoint-sm: 40rem;\n --breakpoint-md: 48rem;\n --breakpoint-lg: 64rem;\n --breakpoint-xl: 80rem;\n --breakpoint-2xl: 96rem;\n\n /* border radius */\n --radius-sm: 0.25rem;\n --radius-md: 0.5rem;\n --radius-lg: 0.75rem;\n --radius-xl: 1rem;\n --radius-2xl: 1.5rem;\n --radius-full: 9999px;\n\n /* animations */\n --animate-fade-in: fadeIn 0.2s ease-out;\n --animate-fade-out: fadeOut 0.2s ease-in;\n --animate-slide-up: slideUp 0.3s cubic-bezier(0.16, 1, 0.3, 1);\n --animate-slide-down: slideDown 0.3s cubic-bezier(0.16, 1, 0.3, 1);\n --animate-scale-in: scaleIn 0.2s ease-out;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n@keyframes fadeOut {\n from { opacity: 1; }\n to { opacity: 0; }\n}\n@keyframes slideUp {\n from { transform: translateY(8px); opacity: 0; }\n to { transform: translateY(0); opacity: 1; }\n}\n@keyframes slideDown {\n from { transform: translateY(-8px); opacity: 0; }\n to { transform: translateY(0); opacity: 1; }\n}\n@keyframes scaleIn {\n from { transform: scale(0.95); opacity: 0; }\n to { transform: scale(1); opacity: 1; }\n}\n\n/* tailwind-styled-v4 — zero-config base styles */\n*, *::before, *::after {\n box-sizing: border-box;\n}\n\nhtml {\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n text-rendering: optimizeLegibility;\n}\n\nbody {\n margin: 0;\n font-family: var(--font-sans, system-ui, sans-serif);\n background: var(--color-surface, #18181b);\n color: var(--color-foreground, #fafafa);\n}\n`\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Zero-config Tailwind v4 CSS generator\n// Dipakai oleh CLI dan withTailwindStyled saat tidak ada user config\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport function generateTailwindCss(contentPaths = STANDARD_CONTENT_PATHS): string {\n return `@import \"tailwindcss\";\n\n@theme {\n /* colors */\n --color-primary: #3b82f6;\n --color-primary-hover: #2563eb;\n --color-primary-active: #1d4ed8;\n --color-primary-foreground: #ffffff;\n --color-secondary: #6366f1;\n --color-secondary-hover: #4f46e5;\n --color-secondary-active: #4338ca;\n --color-secondary-foreground: #ffffff;\n --color-accent: #f59e0b;\n --color-accent-hover: #d97706;\n --color-accent-active: #b45309;\n --color-accent-foreground: #000000;\n --color-success: #10b981;\n --color-success-foreground: #ffffff;\n --color-warning: #f59e0b;\n --color-warning-foreground: #000000;\n --color-danger: #ef4444;\n --color-danger-foreground: #ffffff;\n --color-info: #3b82f6;\n --color-info-foreground: #ffffff;\n --color-surface: #18181b;\n --color-border: #27272a;\n --color-muted: #71717a;\n --color-subtle: #3f3f46;\n\n /* fonts */\n --font-sans: InterVariable, Inter, system-ui, sans-serif;\n --font-mono: JetBrains Mono, Fira Code, Consolas, monospace;\n\n /* spacing */\n --spacing-1: 0.25rem;\n --spacing-2: 0.5rem;\n --spacing-3: 0.75rem;\n --spacing-4: 1rem;\n --spacing-5: 1.25rem;\n --spacing-6: 1.5rem;\n --spacing-8: 2rem;\n --spacing-10: 2.5rem;\n --spacing-12: 3rem;\n --spacing-16: 4rem;\n\n /* breakpoints */\n --breakpoint-sm: 40rem;\n --breakpoint-md: 48rem;\n --breakpoint-lg: 64rem;\n --breakpoint-xl: 80rem;\n --breakpoint-2xl: 96rem;\n\n /* border radius */\n --radius-sm: 0.25rem;\n --radius-md: 0.5rem;\n --radius-lg: 0.75rem;\n --radius-xl: 1rem;\n --radius-2xl: 1.5rem;\n --radius-full: 9999px;\n\n /* animations */\n --animate-fade-in: fadeIn 0.2s ease-out;\n --animate-fade-out: fadeOut 0.2s ease-in;\n --animate-slide-up: slideUp 0.3s cubic-bezier(0.16, 1, 0.3, 1);\n --animate-slide-down: slideDown 0.3s cubic-bezier(0.16, 1, 0.3, 1);\n --animate-scale-in: scaleIn 0.2s ease-out;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n@keyframes fadeOut {\n from { opacity: 1; }\n to { opacity: 0; }\n}\n@keyframes slideUp {\n from { transform: translateY(8px); opacity: 0; }\n to { transform: translateY(0); opacity: 1; }\n}\n@keyframes slideDown {\n from { transform: translateY(-8px); opacity: 0; }\n to { transform: translateY(0); opacity: 1; }\n}\n@keyframes scaleIn {\n from { transform: scale(0.95); opacity: 0; }\n to { transform: scale(1); opacity: 1; }\n}\n\n@source ${contentPaths.join(\"\\n@source \")}\n`\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Zero-config tailwind.config.ts generator\n// DEPRECATED: Use generateTailwindCss for Tailwind v4 instead\n// Dipakai oleh CLI dan withTailwindStyled saat tidak ada user config\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport function generateTailwindConfig(\n safelistPath = \".tailwind-styled-safelist.json\",\n contentPaths = STANDARD_CONTENT_PATHS\n): string {\n return `import type { Config } from \"tailwindcss\"\nimport { defaultPreset } from \"tailwind-styled-v4/preset\"\n\n// Auto-generated safelist dari tailwind-styled-v4 compiler\nconst safelist = (() => {\n try { return require(${JSON.stringify(safelistPath)}) as string[] }\n catch { return [] }\n})()\n\nexport default {\n presets: [defaultPreset],\n content: ${JSON.stringify(contentPaths, null, 2)},\n safelist,\n} satisfies Config\n`\n}\n","/**\n * Preset extension API — jalur ekspansi untuk custom presets.\n * Dari monorepo checklist: \"Siapkan jalur ekspansi preset tanpa memaksa perubahan compiler besar\"\n *\n * Pattern: buat preset custom dengan extend/merge tanpa menyentuh compiler.\n */\nimport { defaultPreset, designTokens } from \"./defaultPreset\"\n\n// Keep preset typing local so preset does not depend on core-only component contracts.\nexport interface PresetComponentConfig {\n readonly base?: string\n readonly variants?: Record<string, Record<string, string>>\n readonly defaultVariants?: Record<string, string>\n readonly compoundVariants?: Array<{ class: string; [key: string]: string }>\n readonly state?: Record<string, Record<string, string>>\n readonly container?: Record<string, string>\n readonly containerName?: string\n}\n\nexport interface PresetExtension {\n /** Token tambahan (akan di-merge dengan defaultPreset tokens) */\n tokens?: Record<string, string>\n /** Component configs default yang bisa di-override */\n components?: Record<string, PresetComponentConfig>\n /** CSS tambahan yang di-inject setelah @theme default */\n additionalCss?: string\n /** Override dark mode strategy */\n darkMode?: \"class\" | \"media\"\n /** Plugin tambahan untuk Tailwind config */\n plugins?: unknown[]\n /** Extend content paths */\n content?: string[]\n}\n\nexport interface PresetOptions {\n /** Nama preset (untuk debugging) */\n name?: string\n /** Override dark mode dari default */\n darkMode?: \"class\" | \"media\"\n /** Custom content paths (merged dengan default) */\n content?: string[]\n}\n\n/** Buat preset custom dari scratch */\nexport function createPreset(\n extension: PresetExtension,\n opts: PresetOptions = {}\n): typeof defaultPreset {\n const { name = \"custom-preset\", darkMode, content = [] } = opts\n\n const mergedTokens = {\n ...designTokens,\n ...extension.tokens,\n }\n\n const base = defaultPreset as Record<string, unknown>\n const baseTheme = (base.theme as Record<string, unknown>) ?? {}\n const baseExtend = (baseTheme.extend as Record<string, unknown>) ?? {}\n\n return {\n ...defaultPreset,\n darkMode: darkMode ?? defaultPreset.darkMode,\n content: [...(defaultPreset.content as string[]), ...content],\n theme: {\n ...baseTheme,\n extend: {\n ...baseExtend,\n colors: {\n ...(baseExtend.colors as Record<string, unknown>),\n ...(extension.tokens\n ? Object.fromEntries(\n Object.entries(extension.tokens).map(([k, v]) => [k, v])\n )\n : {}),\n },\n },\n },\n plugins: [...((defaultPreset.plugins as unknown[]) ?? []), ...(extension.plugins ?? [])],\n } as typeof defaultPreset\n}\n\n/**\n * Extend existing preset dengan tokens/components tambahan.\n * Tidak memerlukan perubahan compiler — semua di Tailwind config layer.\n *\n * @example\n * const myPreset = extendPreset(defaultPreset, {\n * tokens: { \"brand-blue\": \"#1d4ed8\", \"brand-red\": \"#dc2626\" },\n * additionalCss: \".btn { @apply px-4 py-2 rounded; }\",\n * })\n */\nexport function extendPreset(\n base: typeof defaultPreset,\n extension: PresetExtension\n): typeof defaultPreset {\n const baseObj = base as Record<string, unknown>\n const baseTheme = (baseObj.theme as Record<string, unknown>) ?? {}\n const baseExtend = (baseTheme.extend as Record<string, unknown>) ?? {}\n\n return {\n ...base,\n content: [\n ...((base.content as string[]) ?? []),\n ...(extension.content ?? []),\n ],\n darkMode: extension.darkMode ?? base.darkMode,\n theme: {\n ...baseTheme,\n extend: {\n ...baseExtend,\n colors: {\n ...(baseExtend.colors as Record<string, unknown>),\n ...(extension.tokens ?? {}),\n },\n },\n },\n plugins: [...((base.plugins as unknown[]) ?? []), ...(extension.plugins ?? [])],\n } as typeof defaultPreset\n}\n\n/**\n * Merge dua atau lebih presets — tokens, plugins, dan content di-merge.\n * Preset terakhir menang untuk keys yang konflik.\n */\nexport function mergePresets(...presets: Array<typeof defaultPreset>): typeof defaultPreset {\n return presets.reduce((acc, preset) => extendPreset(acc, {\n content: (preset.content as string[]) ?? [],\n plugins: (preset.plugins as unknown[]) ?? [],\n }))\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/umbrella/preset.ts","../packages/domain/preset/src/defaultPreset.ts","../packages/domain/preset/src/presetExtension.ts"],"sourcesContent":["export * from \"@tailwind-styled/preset\"\n","/**\n * tailwind-styled-v4 — Default Preset\n *\n * Tailwind config built-in yang dipakai ketika developer tidak punya\n * tailwind.config.ts / tailwind.config.js di project mereka.\n *\n * Developer tidak perlu setup apapun:\n * npm install tailwind-styled-v4\n * → langsung bisa tw.div`p-4 bg-blue-500`\n *\n * Preset ini juga menyediakan design tokens yang consistent\n * untuk semua project yang pakai tailwind-styled-v4.\n *\n * Override per-project:\n * // tailwind.config.ts\n * import { defaultPreset } from \"tailwind-styled-v4/preset\"\n * export default { presets: [defaultPreset], theme: { extend: {...} } }\n */\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Content paths — auto-detect berdasarkan project structure\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst STANDARD_CONTENT_PATHS = [\n // Next.js App Router\n \"./src/**/*.{tsx,ts,jsx,js,mdx}\",\n \"./app/**/*.{tsx,ts,jsx,js,mdx}\",\n \"./pages/**/*.{tsx,ts,jsx,js,mdx}\",\n \"./components/**/*.{tsx,ts,jsx,js,mdx}\",\n // Vite / React\n \"./src/**/*.{tsx,ts,jsx,js}\",\n \"./index.html\",\n // Monorepo\n \"../../packages/**/src/**/*.{tsx,ts,jsx,js}\",\n]\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Design tokens — consistent across all tailwind-styled-v4 projects\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const designTokens = {\n colors: {\n primary: { DEFAULT: \"#3b82f6\", hover: \"#2563eb\", active: \"#1d4ed8\", foreground: \"#ffffff\" },\n secondary: { DEFAULT: \"#6366f1\", hover: \"#4f46e5\", active: \"#4338ca\", foreground: \"#ffffff\" },\n accent: { DEFAULT: \"#f59e0b\", hover: \"#d97706\", active: \"#b45309\", foreground: \"#000000\" },\n success: { DEFAULT: \"#10b981\", foreground: \"#ffffff\" },\n warning: { DEFAULT: \"#f59e0b\", foreground: \"#000000\" },\n danger: { DEFAULT: \"#ef4444\", foreground: \"#ffffff\" },\n info: { DEFAULT: \"#3b82f6\", foreground: \"#ffffff\" },\n surface: \"#18181b\",\n border: \"#27272a\",\n muted: \"#71717a\",\n subtle: \"#3f3f46\",\n },\n\n spacing: {\n 1: \"0.25rem\",\n 2: \"0.5rem\",\n 3: \"0.75rem\",\n 4: \"1rem\",\n 5: \"1.25rem\",\n 6: \"1.5rem\",\n 8: \"2rem\",\n 10: \"2.5rem\",\n 12: \"3rem\",\n 16: \"4rem\",\n },\n\n breakpoints: {\n sm: \"40rem\",\n md: \"48rem\",\n lg: \"64rem\",\n xl: \"80rem\",\n \"2xl\": \"96rem\",\n },\n\n fontWeight: {\n normal: \"400\",\n medium: \"500\",\n semibold: \"600\",\n bold: \"700\",\n },\n\n fontFamily: {\n sans: [\"InterVariable\", \"Inter\", \"system-ui\", \"sans-serif\"],\n mono: [\"JetBrains Mono\", \"Fira Code\", \"Consolas\", \"monospace\"],\n },\n\n borderRadius: {\n sm: \"0.25rem\",\n DEFAULT: \"0.5rem\",\n md: \"0.5rem\",\n lg: \"0.75rem\",\n xl: \"1rem\",\n \"2xl\": \"1.5rem\",\n full: \"9999px\",\n },\n\n animation: {\n \"fade-in\": \"fadeIn 0.2s ease-out\",\n \"fade-out\": \"fadeOut 0.2s ease-in\",\n \"slide-up\": \"slideUp 0.3s cubic-bezier(0.16, 1, 0.3, 1)\",\n \"slide-down\": \"slideDown 0.3s cubic-bezier(0.16, 1, 0.3, 1)\",\n \"scale-in\": \"scaleIn 0.2s ease-out\",\n },\n\n keyframes: {\n fadeIn: { from: { opacity: \"0\" }, to: { opacity: \"1\" } },\n fadeOut: { from: { opacity: \"1\" }, to: { opacity: \"0\" } },\n slideUp: {\n from: { transform: \"translateY(8px)\", opacity: \"0\" },\n to: { transform: \"translateY(0)\", opacity: \"1\" },\n },\n slideDown: {\n from: { transform: \"translateY(-8px)\", opacity: \"0\" },\n to: { transform: \"translateY(0)\", opacity: \"1\" },\n },\n scaleIn: {\n from: { transform: \"scale(0.95)\", opacity: \"0\" },\n to: { transform: \"scale(1)\", opacity: \"1\" },\n },\n },\n} as const\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Default Tailwind Config — dipakai sebagai fallback + preset\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const defaultPreset = {\n content: STANDARD_CONTENT_PATHS,\n\n darkMode: \"class\" as const,\n\n theme: {\n extend: {\n colors: designTokens.colors,\n fontFamily: designTokens.fontFamily,\n borderRadius: designTokens.borderRadius,\n animation: designTokens.animation,\n keyframes: designTokens.keyframes,\n },\n },\n\n plugins: [],\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Default Theme CSS — Tailwind v4 @theme block\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const defaultThemeCss = `@import \"tailwindcss\";\n\n@theme {\n /* colors */\n --color-primary: #3b82f6;\n --color-primary-hover: #2563eb;\n --color-primary-active: #1d4ed8;\n --color-primary-foreground: #ffffff;\n --color-secondary: #6366f1;\n --color-secondary-hover: #4f46e5;\n --color-secondary-active: #4338ca;\n --color-secondary-foreground: #ffffff;\n --color-accent: #f59e0b;\n --color-accent-hover: #d97706;\n --color-accent-active: #b45309;\n --color-accent-foreground: #000000;\n --color-success: #10b981;\n --color-success-foreground: #ffffff;\n --color-warning: #f59e0b;\n --color-warning-foreground: #000000;\n --color-danger: #ef4444;\n --color-danger-foreground: #ffffff;\n --color-info: #3b82f6;\n --color-info-foreground: #ffffff;\n --color-surface: #18181b;\n --color-border: #27272a;\n --color-muted: #71717a;\n --color-subtle: #3f3f46;\n\n /* fonts */\n --font-sans: InterVariable, Inter, system-ui, sans-serif;\n --font-mono: JetBrains Mono, Fira Code, Consolas, monospace;\n\n /* spacing */\n --spacing-1: 0.25rem;\n --spacing-2: 0.5rem;\n --spacing-3: 0.75rem;\n --spacing-4: 1rem;\n --spacing-5: 1.25rem;\n --spacing-6: 1.5rem;\n --spacing-8: 2rem;\n --spacing-10: 2.5rem;\n --spacing-12: 3rem;\n --spacing-16: 4rem;\n\n /* breakpoints */\n --breakpoint-sm: 40rem;\n --breakpoint-md: 48rem;\n --breakpoint-lg: 64rem;\n --breakpoint-xl: 80rem;\n --breakpoint-2xl: 96rem;\n\n /* border radius */\n --radius-sm: 0.25rem;\n --radius-md: 0.5rem;\n --radius-lg: 0.75rem;\n --radius-xl: 1rem;\n --radius-2xl: 1.5rem;\n --radius-full: 9999px;\n\n /* animations */\n --animate-fade-in: fadeIn 0.2s ease-out;\n --animate-fade-out: fadeOut 0.2s ease-in;\n --animate-slide-up: slideUp 0.3s cubic-bezier(0.16, 1, 0.3, 1);\n --animate-slide-down: slideDown 0.3s cubic-bezier(0.16, 1, 0.3, 1);\n --animate-scale-in: scaleIn 0.2s ease-out;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n@keyframes fadeOut {\n from { opacity: 1; }\n to { opacity: 0; }\n}\n@keyframes slideUp {\n from { transform: translateY(8px); opacity: 0; }\n to { transform: translateY(0); opacity: 1; }\n}\n@keyframes slideDown {\n from { transform: translateY(-8px); opacity: 0; }\n to { transform: translateY(0); opacity: 1; }\n}\n@keyframes scaleIn {\n from { transform: scale(0.95); opacity: 0; }\n to { transform: scale(1); opacity: 1; }\n}`\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Zero-config globals.css — tidak perlu @tailwind base dll\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const defaultGlobalCss = `@import \"tailwindcss\";\n\n@theme {\n /* colors */\n --color-primary: #3b82f6;\n --color-primary-hover: #2563eb;\n --color-primary-active: #1d4ed8;\n --color-primary-foreground: #ffffff;\n --color-secondary: #6366f1;\n --color-secondary-hover: #4f46e5;\n --color-secondary-active: #4338ca;\n --color-secondary-foreground: #ffffff;\n --color-accent: #f59e0b;\n --color-accent-hover: #d97706;\n --color-accent-active: #b45309;\n --color-accent-foreground: #000000;\n --color-success: #10b981;\n --color-success-foreground: #ffffff;\n --color-warning: #f59e0b;\n --color-warning-foreground: #000000;\n --color-danger: #ef4444;\n --color-danger-foreground: #ffffff;\n --color-info: #3b82f6;\n --color-info-foreground: #ffffff;\n --color-surface: #18181b;\n --color-border: #27272a;\n --color-muted: #71717a;\n --color-subtle: #3f3f46;\n\n /* fonts */\n --font-sans: InterVariable, Inter, system-ui, sans-serif;\n --font-mono: JetBrains Mono, Fira Code, Consolas, monospace;\n\n /* spacing */\n --spacing-1: 0.25rem;\n --spacing-2: 0.5rem;\n --spacing-3: 0.75rem;\n --spacing-4: 1rem;\n --spacing-5: 1.25rem;\n --spacing-6: 1.5rem;\n --spacing-8: 2rem;\n --spacing-10: 2.5rem;\n --spacing-12: 3rem;\n --spacing-16: 4rem;\n\n /* breakpoints */\n --breakpoint-sm: 40rem;\n --breakpoint-md: 48rem;\n --breakpoint-lg: 64rem;\n --breakpoint-xl: 80rem;\n --breakpoint-2xl: 96rem;\n\n /* border radius */\n --radius-sm: 0.25rem;\n --radius-md: 0.5rem;\n --radius-lg: 0.75rem;\n --radius-xl: 1rem;\n --radius-2xl: 1.5rem;\n --radius-full: 9999px;\n\n /* animations */\n --animate-fade-in: fadeIn 0.2s ease-out;\n --animate-fade-out: fadeOut 0.2s ease-in;\n --animate-slide-up: slideUp 0.3s cubic-bezier(0.16, 1, 0.3, 1);\n --animate-slide-down: slideDown 0.3s cubic-bezier(0.16, 1, 0.3, 1);\n --animate-scale-in: scaleIn 0.2s ease-out;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n@keyframes fadeOut {\n from { opacity: 1; }\n to { opacity: 0; }\n}\n@keyframes slideUp {\n from { transform: translateY(8px); opacity: 0; }\n to { transform: translateY(0); opacity: 1; }\n}\n@keyframes slideDown {\n from { transform: translateY(-8px); opacity: 0; }\n to { transform: translateY(0); opacity: 1; }\n}\n@keyframes scaleIn {\n from { transform: scale(0.95); opacity: 0; }\n to { transform: scale(1); opacity: 1; }\n}\n\n/* tailwind-styled-v4 — zero-config base styles */\n*, *::before, *::after {\n box-sizing: border-box;\n}\n\nhtml {\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n text-rendering: optimizeLegibility;\n}\n\nbody {\n margin: 0;\n font-family: var(--font-sans, system-ui, sans-serif);\n background: var(--color-surface, #18181b);\n color: var(--color-foreground, #fafafa);\n}\n`\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Zero-config Tailwind v4 CSS generator\n// Dipakai oleh CLI dan withTailwindStyled saat tidak ada user config\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport function generateTailwindCss(contentPaths = STANDARD_CONTENT_PATHS): string {\n return `@import \"tailwindcss\";\n\n@theme {\n /* colors */\n --color-primary: #3b82f6;\n --color-primary-hover: #2563eb;\n --color-primary-active: #1d4ed8;\n --color-primary-foreground: #ffffff;\n --color-secondary: #6366f1;\n --color-secondary-hover: #4f46e5;\n --color-secondary-active: #4338ca;\n --color-secondary-foreground: #ffffff;\n --color-accent: #f59e0b;\n --color-accent-hover: #d97706;\n --color-accent-active: #b45309;\n --color-accent-foreground: #000000;\n --color-success: #10b981;\n --color-success-foreground: #ffffff;\n --color-warning: #f59e0b;\n --color-warning-foreground: #000000;\n --color-danger: #ef4444;\n --color-danger-foreground: #ffffff;\n --color-info: #3b82f6;\n --color-info-foreground: #ffffff;\n --color-surface: #18181b;\n --color-border: #27272a;\n --color-muted: #71717a;\n --color-subtle: #3f3f46;\n\n /* fonts */\n --font-sans: InterVariable, Inter, system-ui, sans-serif;\n --font-mono: JetBrains Mono, Fira Code, Consolas, monospace;\n\n /* spacing */\n --spacing-1: 0.25rem;\n --spacing-2: 0.5rem;\n --spacing-3: 0.75rem;\n --spacing-4: 1rem;\n --spacing-5: 1.25rem;\n --spacing-6: 1.5rem;\n --spacing-8: 2rem;\n --spacing-10: 2.5rem;\n --spacing-12: 3rem;\n --spacing-16: 4rem;\n\n /* breakpoints */\n --breakpoint-sm: 40rem;\n --breakpoint-md: 48rem;\n --breakpoint-lg: 64rem;\n --breakpoint-xl: 80rem;\n --breakpoint-2xl: 96rem;\n\n /* border radius */\n --radius-sm: 0.25rem;\n --radius-md: 0.5rem;\n --radius-lg: 0.75rem;\n --radius-xl: 1rem;\n --radius-2xl: 1.5rem;\n --radius-full: 9999px;\n\n /* animations */\n --animate-fade-in: fadeIn 0.2s ease-out;\n --animate-fade-out: fadeOut 0.2s ease-in;\n --animate-slide-up: slideUp 0.3s cubic-bezier(0.16, 1, 0.3, 1);\n --animate-slide-down: slideDown 0.3s cubic-bezier(0.16, 1, 0.3, 1);\n --animate-scale-in: scaleIn 0.2s ease-out;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n@keyframes fadeOut {\n from { opacity: 1; }\n to { opacity: 0; }\n}\n@keyframes slideUp {\n from { transform: translateY(8px); opacity: 0; }\n to { transform: translateY(0); opacity: 1; }\n}\n@keyframes slideDown {\n from { transform: translateY(-8px); opacity: 0; }\n to { transform: translateY(0); opacity: 1; }\n}\n@keyframes scaleIn {\n from { transform: scale(0.95); opacity: 0; }\n to { transform: scale(1); opacity: 1; }\n}\n\n@source ${contentPaths.join(\"\\n@source \")}\n`\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Zero-config tailwind.config.ts generator\n// DEPRECATED: Use generateTailwindCss for Tailwind v4 instead\n// Dipakai oleh CLI dan withTailwindStyled saat tidak ada user config\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport function generateTailwindConfig(\n safelistPath = \".tailwind-styled-safelist.json\",\n contentPaths = STANDARD_CONTENT_PATHS\n): string {\n return `import type { Config } from \"tailwindcss\"\nimport { defaultPreset } from \"tailwind-styled-v4/preset\"\n\n// Auto-generated safelist dari tailwind-styled-v4 compiler\nconst safelist = (() => {\n try { return require(${JSON.stringify(safelistPath)}) as string[] }\n catch { return [] }\n})()\n\nexport default {\n presets: [defaultPreset],\n content: ${JSON.stringify(contentPaths, null, 2)},\n safelist,\n} satisfies Config\n`\n}\n","/**\n * Preset extension API — jalur ekspansi untuk custom presets.\n * Dari monorepo checklist: \"Siapkan jalur ekspansi preset tanpa memaksa perubahan compiler besar\"\n *\n * Pattern: buat preset custom dengan extend/merge tanpa menyentuh compiler.\n */\nimport { defaultPreset, designTokens } from \"./defaultPreset\"\n\n// Keep preset typing local so preset does not depend on core-only component contracts.\nexport interface PresetComponentConfig {\n readonly base?: string\n readonly variants?: Record<string, Record<string, string>>\n readonly defaultVariants?: Record<string, string>\n readonly compoundVariants?: Array<{ class: string; [key: string]: string }>\n readonly state?: Record<string, Record<string, string>>\n readonly container?: Record<string, string>\n readonly containerName?: string\n}\n\nexport interface PresetExtension {\n /** Token tambahan (akan di-merge dengan defaultPreset tokens) */\n tokens?: Record<string, string>\n /** Component configs default yang bisa di-override */\n components?: Record<string, PresetComponentConfig>\n /** CSS tambahan yang di-inject setelah @theme default */\n additionalCss?: string\n /** Override dark mode strategy */\n darkMode?: \"class\" | \"media\"\n /** Plugin tambahan untuk Tailwind config */\n plugins?: unknown[]\n /** Extend content paths */\n content?: string[]\n}\n\nexport interface PresetOptions {\n /** Nama preset (untuk debugging) */\n name?: string\n /** Override dark mode dari default */\n darkMode?: \"class\" | \"media\"\n /** Custom content paths (merged dengan default) */\n content?: string[]\n}\n\n/** Buat preset custom dari scratch */\nexport function createPreset(\n extension: PresetExtension,\n opts: PresetOptions = {}\n): typeof defaultPreset {\n const { name = \"custom-preset\", darkMode, content = [] } = opts\n\n const mergedTokens = {\n ...designTokens,\n ...extension.tokens,\n }\n\n const base = defaultPreset as Record<string, unknown>\n const baseTheme = (base.theme as Record<string, unknown>) ?? {}\n const baseExtend = (baseTheme.extend as Record<string, unknown>) ?? {}\n\n return {\n ...defaultPreset,\n darkMode: darkMode ?? defaultPreset.darkMode,\n content: [...(defaultPreset.content as string[]), ...content],\n theme: {\n ...baseTheme,\n extend: {\n ...baseExtend,\n colors: {\n ...(baseExtend.colors as Record<string, unknown>),\n ...(extension.tokens\n ? Object.fromEntries(\n Object.entries(extension.tokens).map(([k, v]) => [k, v])\n )\n : {}),\n },\n },\n },\n plugins: [...((defaultPreset.plugins as unknown[]) ?? []), ...(extension.plugins ?? [])],\n } as typeof defaultPreset\n}\n\n/**\n * Extend existing preset dengan tokens/components tambahan.\n * Tidak memerlukan perubahan compiler — semua di Tailwind config layer.\n *\n * @example\n * const myPreset = extendPreset(defaultPreset, {\n * tokens: { \"brand-blue\": \"#1d4ed8\", \"brand-red\": \"#dc2626\" },\n * additionalCss: \".btn { @apply px-4 py-2 rounded; }\",\n * })\n */\nexport function extendPreset(\n base: typeof defaultPreset,\n extension: PresetExtension\n): typeof defaultPreset {\n const baseObj = base as Record<string, unknown>\n const baseTheme = (baseObj.theme as Record<string, unknown>) ?? {}\n const baseExtend = (baseTheme.extend as Record<string, unknown>) ?? {}\n\n return {\n ...base,\n content: [\n ...((base.content as string[]) ?? []),\n ...(extension.content ?? []),\n ],\n darkMode: extension.darkMode ?? base.darkMode,\n theme: {\n ...baseTheme,\n extend: {\n ...baseExtend,\n colors: {\n ...(baseExtend.colors as Record<string, unknown>),\n ...(extension.tokens ?? {}),\n },\n },\n },\n plugins: [...((base.plugins as unknown[]) ?? []), ...(extension.plugins ?? [])],\n } as typeof defaultPreset\n}\n\n/**\n * Merge dua atau lebih presets — tokens, plugins, dan content di-merge.\n * Preset terakhir menang untuk keys yang konflik.\n */\nexport function mergePresets(...presets: Array<typeof defaultPreset>): typeof defaultPreset {\n return presets.reduce((acc, preset) => extendPreset(acc, {\n content: (preset.content as string[]) ?? [],\n plugins: (preset.plugins as unknown[]) ?? [],\n }))\n}\n"],"mappings":"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","names":[]}
|
package/dist/rspack.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
const __importMetaUrl = typeof __filename !== "undefined" ? require("node:url").pathToFileURL(__filename).href : "file://unknown";
|
|
2
1
|
/* tailwind-styled-v4 v5.0.4 | MIT | https://github.com/dictionar32/tailwind-styled-v4 */
|
|
3
2
|
"use strict";
|
|
4
3
|
var __create = Object.create;
|
|
@@ -32,6 +31,16 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
32
31
|
));
|
|
33
32
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
34
33
|
|
|
34
|
+
// node_modules/tsup/assets/cjs_shims.js
|
|
35
|
+
var getImportMetaUrl, importMetaUrl;
|
|
36
|
+
var init_cjs_shims = __esm({
|
|
37
|
+
"node_modules/tsup/assets/cjs_shims.js"() {
|
|
38
|
+
"use strict";
|
|
39
|
+
getImportMetaUrl = () => typeof document === "undefined" ? new URL(`file:${__filename}`).href : document.currentScript && document.currentScript.tagName.toUpperCase() === "SCRIPT" ? document.currentScript.src : new URL("main.js", document.baseURI).href;
|
|
40
|
+
importMetaUrl = /* @__PURE__ */ getImportMetaUrl();
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
|
|
35
44
|
// packages/domain/shared/src/esmHelpers.ts
|
|
36
45
|
function getNodeModuleRef() {
|
|
37
46
|
if (isBrowser) return null;
|
|
@@ -46,8 +55,8 @@ function getNodeModuleRef() {
|
|
|
46
55
|
}
|
|
47
56
|
}
|
|
48
57
|
function getCurrentFileUrl() {
|
|
49
|
-
if (
|
|
50
|
-
return
|
|
58
|
+
if (importMetaUrl) {
|
|
59
|
+
return importMetaUrl;
|
|
51
60
|
}
|
|
52
61
|
if (typeof __filename !== "undefined") {
|
|
53
62
|
return `file://${__filename.replace(/\\/g, "/")}`;
|
|
@@ -80,17 +89,18 @@ function getNodeUrl() {
|
|
|
80
89
|
}
|
|
81
90
|
return _nodeUrl;
|
|
82
91
|
}
|
|
83
|
-
function getDirname(
|
|
92
|
+
function getDirname(importMetaUrl2) {
|
|
84
93
|
if (isBrowser) return "";
|
|
85
94
|
if (typeof __dirname !== "undefined") return __dirname;
|
|
86
95
|
const nodePath = getNodePath();
|
|
87
96
|
const nodeUrl = getNodeUrl();
|
|
88
|
-
return nodePath.dirname(nodeUrl.fileURLToPath(
|
|
97
|
+
return nodePath.dirname(nodeUrl.fileURLToPath(importMetaUrl2));
|
|
89
98
|
}
|
|
90
99
|
var isBrowser, nodeModuleRef, _nodePath, _nodeUrl;
|
|
91
100
|
var init_esmHelpers = __esm({
|
|
92
101
|
"packages/domain/shared/src/esmHelpers.ts"() {
|
|
93
102
|
"use strict";
|
|
103
|
+
init_cjs_shims();
|
|
94
104
|
isBrowser = typeof window !== "undefined" || typeof document !== "undefined";
|
|
95
105
|
nodeModuleRef = null;
|
|
96
106
|
_nodePath = null;
|
|
@@ -109,6 +119,7 @@ var import_node_crypto, import_node_fs, import_node_path, import_node_url, impor
|
|
|
109
119
|
var init_src = __esm({
|
|
110
120
|
"packages/domain/shared/src/index.ts"() {
|
|
111
121
|
"use strict";
|
|
122
|
+
init_cjs_shims();
|
|
112
123
|
import_node_crypto = require("crypto");
|
|
113
124
|
import_node_fs = __toESM(require("fs"));
|
|
114
125
|
import_node_path = __toESM(require("path"));
|
|
@@ -168,7 +179,7 @@ var init_src = __esm({
|
|
|
168
179
|
}
|
|
169
180
|
};
|
|
170
181
|
_require = (0, import_node_module.createRequire)(
|
|
171
|
-
typeof __filename !== "undefined" ? `file://${__filename}` :
|
|
182
|
+
typeof __filename !== "undefined" ? `file://${__filename}` : importMetaUrl ?? "file://unknown"
|
|
172
183
|
);
|
|
173
184
|
}
|
|
174
185
|
});
|
|
@@ -182,13 +193,16 @@ __export(rspack_exports, {
|
|
|
182
193
|
tailwindStyledRspackPlugin: () => tailwindStyledRspackPlugin
|
|
183
194
|
});
|
|
184
195
|
module.exports = __toCommonJS(rspack_exports);
|
|
196
|
+
init_cjs_shims();
|
|
185
197
|
|
|
186
198
|
// packages/presentation/rspack/src/index.ts
|
|
199
|
+
init_cjs_shims();
|
|
187
200
|
var import_node_fs2 = __toESM(require("fs"), 1);
|
|
188
201
|
var import_node_path2 = __toESM(require("path"), 1);
|
|
189
202
|
init_src();
|
|
190
203
|
|
|
191
204
|
// packages/presentation/rspack/src/schemas.ts
|
|
205
|
+
init_cjs_shims();
|
|
192
206
|
var import_zod = require("zod");
|
|
193
207
|
init_src();
|
|
194
208
|
var formatIssuePath2 = (path3) => path3.length > 0 ? path3.map(
|
|
@@ -226,8 +240,8 @@ function getDirname2() {
|
|
|
226
240
|
if (typeof __dirname !== "undefined") {
|
|
227
241
|
return __dirname;
|
|
228
242
|
}
|
|
229
|
-
if (typeof import_meta !== "undefined" &&
|
|
230
|
-
return getDirname(
|
|
243
|
+
if (typeof import_meta !== "undefined" && importMetaUrl) {
|
|
244
|
+
return getDirname(importMetaUrl);
|
|
231
245
|
}
|
|
232
246
|
return process.cwd();
|
|
233
247
|
}
|
package/dist/rspack.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../packages/domain/shared/src/esmHelpers.ts","../packages/domain/shared/src/index.ts","../src/umbrella/rspack.ts","../packages/presentation/rspack/src/index.ts","../packages/presentation/rspack/src/schemas.ts"],"sourcesContent":["/**\n * ESM-safe runtime helpers untuk monorepo.\n *\n * Menggantikan pola fragile seperti:\n * - `createRequire(import.meta.url)` → gunakan `createEsmRequire()`\n * - `__dirname` → gunakan `getDirname(import.meta.url)`\n * - `__filename` → gunakan `getFilename(import.meta.url)`\n *\n * Semua helper ini bekerja di ESM dan CJS.\n *\n * @module @tailwind-styled/shared/esmHelpers\n */\n\nconst isBrowser = typeof window !== \"undefined\" || typeof document !== \"undefined\"\n\n// Safe check for require availability - works in both CJS and ESM\nlet nodeModuleRef: typeof import(\"node:module\") | null = null\nfunction getNodeModuleRef(): typeof import(\"node:module\") | null {\n if (isBrowser) return null\n if (nodeModuleRef !== null) return nodeModuleRef\n try {\n const test = typeof require === 'function' ? (require('node:module') as typeof import(\"node:module\")) : null\n nodeModuleRef = test\n return test\n } catch {\n nodeModuleRef = null\n return null\n }\n}\n\nlet _nodePath: typeof import(\"node:path\") | null = null\nlet _nodeUrl: typeof import(\"node:url\") | null = null\nlet _nodeFs: typeof import(\"node:fs\") | null = null\nlet _nodeCrypto: typeof import(\"node:crypto\") | null = null\nlet _nodeOs: typeof import(\"node:os\") | null = null\n\n/**\n * Get current file URL in a way that works in both ESM and CJS.\n * In ESM: uses import.meta.url\n * In CJS: uses __filename converted to file URL\n */\nfunction getCurrentFileUrl(): string {\n // In CJS builds, import.meta.url is replaced by esbuild with __importMetaUrl\n // which is set via the banner polyfill. In ESM it's the real URL.\n if (import.meta.url) {\n return import.meta.url\n }\n // Fallback: __filename is available in bare CJS (not bundled)\n if (typeof __filename !== \"undefined\") {\n return `file://${__filename.replace(/\\\\/g, \"/\")}`\n }\n return \"file://unknown\"\n}\n\nfunction getNodePath(): typeof import(\"node:path\") {\n if (isBrowser) throw new Error(\"node:path not available in browser\")\n if (!_nodePath) {\n if (typeof require === \"function\") {\n _nodePath = require(\"node:path\") as typeof import(\"node:path\")\n } else {\n const nodeRequire = getNodeModuleRef()\n if (!nodeRequire) throw new Error(\"require not available\")\n _nodePath = nodeRequire.createRequire(getCurrentFileUrl())(\"node:path\") as typeof import(\"node:path\")\n }\n }\n return _nodePath!\n}\nfunction getNodeUrl(): typeof import(\"node:url\") {\n if (isBrowser) throw new Error(\"node:url not available in browser\")\n if (!_nodeUrl) {\n if (typeof require === \"function\") {\n _nodeUrl = require(\"node:url\") as typeof import(\"node:url\")\n } else {\n const nodeRequire = getNodeModuleRef()\n if (!nodeRequire) throw new Error(\"require not available\")\n _nodeUrl = nodeRequire.createRequire(getCurrentFileUrl())(\"node:url\") as typeof import(\"node:url\")\n }\n }\n return _nodeUrl!\n}\nfunction getNodeFs(): typeof import(\"node:fs\") {\n if (isBrowser) throw new Error(\"node:fs not available in browser\")\n if (!_nodeFs) {\n if (typeof require === \"function\") {\n _nodeFs = require(\"node:fs\") as typeof import(\"node:fs\")\n } else {\n const nodeRequire = getNodeModuleRef()\n if (!nodeRequire) throw new Error(\"require not available\")\n _nodeFs = nodeRequire.createRequire(getCurrentFileUrl())(\"node:fs\") as typeof import(\"node:fs\")\n }\n }\n return _nodeFs!\n}\nfunction getNodeCrypto(): typeof import(\"node:crypto\") {\n if (isBrowser) throw new Error(\"node:crypto not available in browser\")\n if (!_nodeCrypto) {\n if (typeof require === \"function\") {\n _nodeCrypto = require(\"node:crypto\") as typeof import(\"node:crypto\")\n } else {\n const nodeRequire = getNodeModuleRef()\n if (!nodeRequire) throw new Error(\"require not available\")\n _nodeCrypto = nodeRequire.createRequire(getCurrentFileUrl())(\"node:crypto\") as typeof import(\"node:crypto\")\n }\n }\n return _nodeCrypto!\n}\nfunction getNodeOs(): typeof import(\"node:os\") {\n if (isBrowser) throw new Error(\"node:os not available in browser\")\n if (!_nodeOs) {\n if (typeof require === \"function\") {\n _nodeOs = require(\"node:os\") as typeof import(\"node:os\")\n } else {\n const nodeRequire = getNodeModuleRef()\n if (!nodeRequire) throw new Error(\"require not available\")\n _nodeOs = nodeRequire.createRequire(getCurrentFileUrl())(\"node:os\") as typeof import(\"node:os\")\n }\n }\n return _nodeOs!\n}\n\n/**\n * Buat `require()` function yang relative terhadap sebuah ESM module.\n *\n * @example\n * const req = createEsmRequire(import.meta.url)\n * const mod = req(\"some-pkg\")\n */\nexport function createEsmRequire(importMetaUrl: string): NodeRequire {\n if (isBrowser) throw new Error(\"require not available in browser\")\n // CJS: require is already available globally\n if (typeof require === \"function\") return require\n const nodeRequire = getNodeModuleRef()\n if (!nodeRequire) throw new Error(\"require not available\")\n return nodeRequire.createRequire(importMetaUrl)\n}\n\n/**\n * Dapat `__dirname` dari `import.meta.url`.\n *\n * @example\n * const dir = getDirname(import.meta.url)\n */\nexport function getDirname(importMetaUrl: string): string {\n if (isBrowser) return \"\"\n // CJS: __dirname is directly available\n if (typeof __dirname !== \"undefined\") return __dirname\n const nodePath = getNodePath()\n const nodeUrl = getNodeUrl()\n return nodePath.dirname(nodeUrl.fileURLToPath(importMetaUrl))\n}\n\n/**\n * Dapat `__filename` dari `import.meta.url`.\n */\nexport function getFilename(importMetaUrl: string): string {\n if (isBrowser) return \"\"\n // CJS: __filename is directly available\n if (typeof __filename !== \"undefined\") return __filename\n return getNodeUrl().fileURLToPath(importMetaUrl)\n}\n\n/**\n * Resolve path dari root monorepo (bukan CWD).\n */\nexport function resolveFromRoot(...segments: string[]): string {\n if (isBrowser) return segments.join(\"/\")\n\n const nodePath = getNodePath()\n const nodeFs = getNodeFs()\n\n // Use __dirname in CJS, or getDirname with current file URL in ESM\n let dir = typeof __dirname !== \"undefined\"\n ? __dirname\n : getDirname(getCurrentFileUrl())\n\n for (let i = 0; i < 10; i++) {\n const pkgPath = nodePath.join(dir, \"package.json\")\n try {\n const pkg = JSON.parse(nodeFs.readFileSync(pkgPath, \"utf-8\"))\n if (pkg.workspaces) {\n return nodePath.resolve(dir, ...segments)\n }\n } catch { /* intentionally silent */ }\n dir = nodePath.dirname(dir)\n }\n return nodePath.resolve(process.cwd(), ...segments)\n}\n\n/**\n * Require sebuah module dengan fallback ke null jika tidak tersedia.\n */\nexport function tryRequire<T = unknown>(\n moduleName: string,\n importMetaUrl: string\n): T | null {\n if (isBrowser) return null\n try {\n return createEsmRequire(importMetaUrl)(moduleName) as T\n } catch { /* intentionally silent — optional dep */ }\n return null\n}\n\n/**\n * Resolve .node binary path yang cross-platform dan ESM-safe.\n */\nexport function resolveNativeNodePath(\n importMetaUrl: string,\n ...relativeSegments: string[]\n): string {\n if (isBrowser) return relativeSegments.join(\"/\")\n return getNodePath().resolve(getDirname(importMetaUrl), ...relativeSegments)\n}\n","import { createHash } from \"node:crypto\"\nimport fs from \"node:fs\"\nimport path from \"node:path\"\nimport { fileURLToPath } from \"node:url\"\nimport { createRequire } from \"node:module\"\n\n// Native-only: Node.js is always available. No browser fallback.\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type TokenMap = Record<string, string>\n\nexport type VariantValue = string | number | boolean | undefined\n\nexport type VariantProps = Record<string, VariantValue>\n\nexport type HtmlTagName = keyof HTMLElementTagNameMap\n\nexport type CompoundCondition = Record<string, string | number | boolean>\n\nexport type VariantMatrix = Record<string, Array<string | number | boolean>>\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Logging\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface Logger {\n warn(...args: unknown[]): void\n debug(...args: unknown[]): void\n error(...args: unknown[]): void\n log(...args: unknown[]): void\n}\n\nexport function createLogger(namespace: string): Logger {\n const prefix = `[${namespace}]`\n return {\n warn(...args: unknown[]) {\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\n },\n debug(...args: unknown[]) {\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\n },\n error(...args: unknown[]) {\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\n },\n log(...args: unknown[]) {\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\n },\n }\n}\n\nexport function createDebugLogger(namespace: string, label?: string): (msg: string) => void {\n const prefix = label ? `[${namespace}:${label}]` : `[${namespace}]`\n return (msg: string) => {\n if (process.env.DEBUG?.includes(namespace) || process.env.TW_DEBUG) {\n console.debug(prefix, msg)\n }\n }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Error handling\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type ErrorSource = \"rust\" | \"validation\" | \"compile\" | \"io\" | \"config\" | \"unknown\"\n\ntype ZodLikeIssue = {\n path?: readonly PropertyKey[]\n message?: string\n}\n\nfunction formatIssuePath(path?: readonly PropertyKey[]): string {\n if (!path || path.length === 0) return \"(root)\"\n return path\n .map((segment) =>\n typeof segment === \"symbol\" ? segment.description ?? segment.toString() : String(segment)\n )\n .join(\".\")\n}\n\nexport class TwError extends Error {\n /** @deprecated Gunakan source */\n public readonly domain: string\n public readonly source: ErrorSource\n public readonly code: string\n public readonly originalCause?: unknown\n\n constructor(domainOrSource: string, code: string, message: string, cause?: unknown) {\n super(message)\n this.name = \"TwError\"\n this.domain = domainOrSource\n this.source = domainOrSource as ErrorSource\n this.code = code\n this.originalCause = cause\n if (Error.captureStackTrace) Error.captureStackTrace(this, TwError)\n }\n\n static fromIo(code: string, message: string): TwError {\n return new TwError(\"io\", code, message)\n }\n\n static fromCompile(code: string, message: string): TwError {\n return new TwError(\"compile\", code, message)\n }\n\n static fromRust(err: { code?: string; message?: string } | Error | unknown): TwError {\n if (err instanceof TwError) return err\n if (err instanceof Error) return new TwError(\"rust\", \"RUST_ERROR\", err.message, err)\n if (err && typeof err === \"object\") {\n const e = err as { code?: string; message?: string }\n return new TwError(\"rust\", e.code ?? \"RUST_ERROR\", e.message ?? String(err), err)\n }\n return new TwError(\"rust\", \"RUST_ERROR\", String(err), err)\n }\n\n /** Buat TwError dari ZodError — dukung shape Zod v3 (`errors`) dan v4 (`issues`). */\n static fromZod(err: { issues?: ZodLikeIssue[]; errors?: ZodLikeIssue[] }): TwError {\n const first = err.issues?.[0] ?? err.errors?.[0]\n const path = formatIssuePath(first?.path)\n const message = first ? `${path}: ${first.message}` : \"Schema validation failed\"\n return new TwError(\"validation\", \"SCHEMA_VALIDATION_FAILED\", message, err)\n }\n\n static wrap(source: string, code: string, err: unknown): TwError {\n if (err instanceof TwError) return err\n if (err instanceof Error) return new TwError(source, code, err.message, err)\n return new TwError(source, code, String(err), err)\n }\n\n override toString(): string {\n return `TwError [${this.source}:${this.code}] ${this.message}`\n }\n\n toJSON(): { name: string; source: string; code: string; message: string } {\n return { name: this.name, source: this.source, code: this.code, message: this.message }\n }\n\n toCliMessage(): string {\n return `[${this.source.toUpperCase()}:${this.code}] ${this.message}`\n }\n}\n\nexport function wrapUnknownError(domain: string, code: string, error: unknown): TwError {\n return TwError.wrap(domain, code, error)\n}\n\nexport function isTwError(err: unknown): err is TwError {\n return err instanceof TwError\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Native binding resolution\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface LoadNativeBindingOptions<T> {\n runtimeDir: string\n candidates: string[]\n isValid: (module: unknown) => module is T\n invalidExportMessage: string\n}\n\nexport interface LoadNativeBindingResult<T> {\n binding: T | null\n loadErrors: Array<{ path: string; message: string }>\n loadedPath?: string\n}\n\nexport function loadNativeBinding<T>(options: LoadNativeBindingOptions<T>): LoadNativeBindingResult<T> {\n const { runtimeDir, candidates, isValid } = options\n const loadErrors: Array<{ path: string; message: string }> = []\n\n for (const candidate of candidates) {\n const candidatePath = path.resolve(runtimeDir, candidate)\n try {\n if (!fs.existsSync(candidatePath) && !fs.existsSync(candidatePath + \".node\")) {\n continue\n }\n const mod = requireNativeModule(candidatePath)\n if (mod && isValid(mod)) {\n return { binding: mod, loadErrors, loadedPath: candidatePath }\n }\n loadErrors.push({ path: candidatePath, message: options.invalidExportMessage })\n } catch (e) {\n loadErrors.push({ path: candidatePath, message: e instanceof Error ? e.message : String(e) })\n }\n }\n\n return { binding: null, loadErrors }\n}\n\nconst _require = createRequire(\n typeof __filename !== \"undefined\"\n ? `file://${__filename}`\n : (import.meta.url ?? \"file://unknown\")\n)\n\nfunction requireNativeModule(p: string): unknown {\n return _require(p)\n}\n\nexport interface ResolveCandidatesOptions {\n runtimeDir?: string\n envVarNames?: string[]\n includeDefaultCandidates?: boolean\n enforceNodeExtensionForEnvPath?: boolean\n /** @deprecated — ignored, kept for backward compat */\n packageName?: string\n}\n\nexport function resolveNativeBindingCandidates(options: ResolveCandidatesOptions): string[] {\n const {\n envVarNames = [\"TW_NATIVE_PATH\", \"TWS_NATIVE_PATH\"],\n includeDefaultCandidates = true,\n enforceNodeExtensionForEnvPath = false,\n } = options\n // Default ke cwd kalau runtimeDir tidak disediakan\n const runtimeDir = options.runtimeDir || process.cwd()\n const candidates: string[] = []\n\n for (const envVar of envVarNames) {\n const envPath = process.env[envVar]\n if (envPath) {\n candidates.push(enforceNodeExtensionForEnvPath && !envPath.endsWith(\".node\") ? envPath + \".node\" : envPath)\n }\n }\n\n if (!includeDefaultCandidates) return candidates\n\n if (fs.existsSync(runtimeDir)) {\n try {\n for (const entry of fs.readdirSync(runtimeDir)) {\n if (entry.endsWith(\".node\")) candidates.push(entry)\n }\n } catch { /* ignore read errors */ }\n }\n\n const BINARY_NAMES = [\"tailwind-styled-native\", \"tailwind_styled_parser\"]\n const napiPlatform = process.platform === \"linux\" && process.arch === \"x64\" ? \"linux-x64-gnu\"\n : process.platform === \"linux\" && process.arch === \"arm64\" ? \"linux-arm64-gnu\"\n : `${process.platform}-${process.arch}`\n\n for (const bin of BINARY_NAMES) {\n candidates.push(path.resolve(runtimeDir, `${bin}.node`))\n candidates.push(path.resolve(runtimeDir, `${bin}.${napiPlatform}.node`))\n // 1 level: dist/ → package-root/native/ (published npm package)\n candidates.push(path.resolve(runtimeDir, \"..\", \"native\", `${bin}.node`))\n candidates.push(path.resolve(runtimeDir, \"..\", \"native\", `${bin}.${napiPlatform}.node`))\n // cwd fallback (user project root)\n candidates.push(path.resolve(process.cwd(), \"native\", `${bin}.node`))\n candidates.push(path.resolve(process.cwd(), \"native\", `${bin}.${napiPlatform}.node`))\n // 4 level: dist/ → package/ → domain/ → packages/ → repo-root/ (monorepo dev)\n candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", `${bin}.node`))\n candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", `${bin}.${napiPlatform}.node`))\n // 3 level fallback\n candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"native\", `${bin}.node`))\n }\n\n return Array.from(new Set(candidates))\n}\n\nexport function resolveRuntimeDir(dir: string | undefined, importMetaUrl: string): string {\n if (dir) return path.resolve(dir)\n try {\n return path.dirname(fileURLToPath(importMetaUrl))\n } catch {\n return process.cwd()\n }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Hashing\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport function hashContent(content: string, algorithm: string = \"md5\", length?: number): string {\n const hash = createHash(algorithm).update(content).digest(\"hex\")\n return length ? hash.slice(0, length) : hash\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Error formatting\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport function formatErrorMessage(error: unknown): string {\n if (error instanceof TwError) return error.toString()\n if (error instanceof Error) return error.message\n return String(error)\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// LRU Cache\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport class LRUCache<K, V> {\n private capacity: number\n private cache: Map<K, V>\n\n constructor(capacity: number) {\n this.capacity = capacity\n this.cache = new Map()\n }\n\n get(key: K): V | undefined {\n if (!this.cache.has(key)) return undefined\n const value = this.cache.get(key)!\n this.cache.delete(key)\n this.cache.set(key, value)\n return value\n }\n\n set(key: K, value: V): void {\n if (this.cache.has(key)) {\n this.cache.delete(key)\n } else if (this.cache.size >= this.capacity) {\n const firstKey = this.cache.keys().next().value\n if (firstKey !== undefined) {\n this.cache.delete(firstKey)\n }\n }\n this.cache.set(key, value)\n }\n\n delete(key: K): boolean {\n return this.cache.delete(key)\n }\n\n has(key: K): boolean {\n return this.cache.has(key)\n }\n\n clear(): void {\n this.cache.clear()\n }\n\n entries(): IterableIterator<[K, V]> {\n return this.cache.entries()\n }\n\n get size(): number {\n return this.cache.size\n }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Trace Utilities\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type { TraceSnapshot, TraceSummary } from \"./trace\"\nexport {\n getHealthColor,\n getModeColor,\n formatMemory,\n formatDuration,\n calculateHealth,\n getBuildTimeColor,\n getMemoryColor,\n createTraceSnapshot,\n getPipelinePercentages,\n} from \"./trace\"\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Performance Telemetry\n// ─────────────────────────────────────────────────────────────────────────────\n\n\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Error Codes\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type { ErrorCode } from \"./error-codes\"\nexport { ERROR_CODES, getSuggestion, formatErrorCode } from \"./error-codes\"\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Tailwind Compatibility\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type { TailwindInfo } from \"./compatibility\"\nexport { detectTailwind, assertTailwindV4, getTailwindVersion, isTailwindV4 } from \"./compatibility\"\n\n// ── Native binding schemas (Zod boundary validation)\nexport {\n NativeScanFileSchema, NativeScanResultSchema,\n NativeAnalyzerReportSchema, NativeTransformResultSchema,\n NativeCssCompileResultSchema, NativeWatchResultSchema,\n NativeCacheEntrySchema, NativeCacheReadResultSchema,\n safeParseNative, parseNative,\n} from './native-schemas'\n\n// ── ESM-safe runtime helpers ──────────────────────────────────────────────\nexport {\n createEsmRequire,\n getDirname,\n getFilename,\n resolveFromRoot,\n tryRequire,\n resolveNativeNodePath,\n} from \"./esmHelpers\"\n\n// ── Performance telemetry ────────────────────────────────────────────────────\nexport {\n TelemetryCollector,\n getGlobalTelemetry,\n resetGlobalTelemetry,\n createBuildTimer,\n type BuildTelemetry,\n type TelemetrySummary,\n type BuildPhases,\n} from \"./telemetry\"\n\n// ── Config/JSON schema validation ─────────────────────────────────────────────\nexport {\n ScanCacheSchema,\n ScanCacheClassEntrySchema,\n TailwindConfigSchema,\n RegistryPluginEntrySchema,\n RegistryFileSchema,\n PackageJsonSchema,\n parseJsonWithSchema,\n parseJsonFileWithSchema,\n type ScanCache,\n type ScanCacheClassEntry,\n type TailwindConfig,\n type RegistryPluginEntry,\n type RegistryFile,\n type PackageJson,\n} from \"./configSchemas\"\n\n// ── Worker/bootstrap path resolution ─────────────────────────────────────────\nexport {\n resolveWorkerPath,\n resolveLoaderPath,\n type WorkerPathOptions,\n type WorkerPathResult,\n} from \"./workerResolver\"\n\n// ── Codegen helpers ───────────────────────────────────────────────────────────\nexport {\n generateComponentCode,\n generateStorybookStory,\n generateClassRenameCodemod,\n generateBarrelFile,\n type ComponentCodegenOptions,\n} from \"./codegen\"\n\n// ── Native binary resolution (QA #1) ─────────────────────────────────────────\nexport {\n resolveNativeBinary,\n formatNativeNotFoundError,\n type NativeResolutionResult,\n} from \"./native-resolution\"\n\n// ── Shared observability contract ────────────────────────────────────────────\nexport {\n createObservabilityClient,\n type ClassInspection,\n type ClassProperty,\n type ClassUsageLocation,\n type BuildTrace,\n type BuildPhaseTrace,\n type DashboardMetrics,\n type DashboardSummary,\n type ObservabilityClient,\n} from \"./observability\"\n\nexport {\n TW_STATE_STATIC_FILENAME,\n extractStaticStateCss,\n appendStaticStateCssToSafelist,\n type TwStateConfigEntry,\n type StaticStateCssInput,\n type GeneratedStateRule,\n type StaticStateExtractionResult,\n} from \"./staticStateExtractor\"\nexport { setGlobalLogFile } from \"./logger\"","export * from \"@tailwind-styled/rspack\"\n","/**\n * tailwind-styled-v4 - Rspack Plugin v5 (stable)\n *\n * Usage:\n * import { tailwindStyledRspackPlugin } from \"@tailwind-styled/rspack\"\n *\n * export default defineConfig({\n * plugins: [tailwindStyledRspackPlugin()],\n * })\n *\n * v5:\n * - Simplified API\n * - Mode always zero-runtime\n */\n\nimport fs from \"node:fs\"\nimport path from \"node:path\"\nimport { getDirname as getEsmDirname } from \"@tailwind-styled/shared\"\n\nimport { parseRspackPluginOptions } from \"./schemas\"\n\nfunction getDirname(): string {\n if (typeof __dirname !== \"undefined\") {\n return __dirname\n }\n if (typeof import.meta !== \"undefined\" && import.meta.url) {\n return getEsmDirname(import.meta.url)\n }\n return process.cwd()\n}\n\nfunction resolveLoaderPath(basename: string): string {\n const runtimeDir = getDirname()\n const preferredExtensions =\n typeof __dirname !== \"undefined\" && __dirname.length > 0 ? [\".cjs\", \".js\"] : [\".js\", \".cjs\"]\n\n for (const ext of preferredExtensions) {\n const candidate = path.resolve(runtimeDir, `${basename}${ext}`)\n if (fs.existsSync(candidate)) return candidate\n }\n\n return path.resolve(runtimeDir, `${basename}.js`)\n}\n\ninterface RspackRule {\n _tailwindStyledRspackMarker?: boolean\n test?: RegExp\n exclude?: RegExp\n use?: Array<{\n loader: string\n options: {\n mode: \"zero-runtime\"\n addDataAttr: boolean\n preserveImports: boolean\n safelistPath?: string\n }\n }>\n}\n\ninterface RspackCompiler {\n options: {\n mode?: string\n module?: {\n rules?: RspackRule[]\n }\n }\n}\n\nexport interface RspackPluginOptions {\n /** File patterns to include. Default: /\\.[jt]sx?$/ */\n include?: RegExp\n /** File patterns to exclude. Default: /node_modules/ */\n exclude?: RegExp\n /** Add data-tw debug attributes in dev. Default: true in dev */\n addDataAttr?: boolean\n /** Enable analyzer. Default: false */\n analyze?: boolean\n /**\n * Path ke safelist CSS file.\n * `_tw-state-static.css` ditulis di direktori yang sama.\n * Default: `<cwd>/__tw_safelist.css`\n */\n safelistPath?: string\n}\n\nexport class TailwindStyledRspackPlugin {\n private opts: RspackPluginOptions\n\n constructor(opts: RspackPluginOptions = {}) {\n this.opts = parseRspackPluginOptions(opts)\n }\n\n apply(compiler: RspackCompiler): void {\n const isDev = compiler.options.mode !== \"production\"\n const loaderPath = resolveLoaderPath(\"loader\")\n const existing = compiler.options.module?.rules ?? []\n const alreadyRegistered = existing.some(\n (rule) =>\n typeof rule === \"object\" && rule !== null && rule._tailwindStyledRspackMarker === true\n )\n\n if (alreadyRegistered) return\n\n const safelistPath =\n this.opts.safelistPath ?? path.join(process.cwd(), \"__tw_safelist.css\")\n\n // Tulis placeholder agar @import di CSS entry tidak error saat cold start\n const stateStaticPath = path.join(path.dirname(safelistPath), \"_tw-state-static.css\")\n if (!fs.existsSync(stateStaticPath)) {\n try {\n fs.mkdirSync(path.dirname(stateStaticPath), { recursive: true })\n fs.writeFileSync(\n stateStaticPath,\n `/* _tw-state-static.css — Auto-generated by tailwind-styled-v4. DO NOT EDIT.\\n` +\n ` * Import di CSS entry: @import \"./_tw-state-static.css\";\\n` +\n ` */\\n`,\n \"utf-8\"\n )\n } catch { /* non-fatal */ }\n }\n\n const rule: RspackRule = {\n _tailwindStyledRspackMarker: true,\n test: this.opts.include ?? /\\.[jt]sx?$/,\n exclude: this.opts.exclude ?? /node_modules/,\n use: [\n {\n loader: loaderPath,\n options: {\n mode: \"zero-runtime\",\n addDataAttr: this.opts.addDataAttr ?? isDev,\n preserveImports: true,\n safelistPath,\n },\n },\n ],\n }\n\n compiler.options.module = {\n ...(compiler.options.module ?? {}),\n rules: [rule, ...existing],\n }\n }\n}\n\nexport function tailwindStyledRspackPlugin(\n opts: RspackPluginOptions = {}\n): TailwindStyledRspackPlugin {\n return new TailwindStyledRspackPlugin(opts)\n}\n\nexport default tailwindStyledRspackPlugin\n\nexport {\n parseRspackPluginOptions,\n type RspackPluginOptionsInput,\n RspackPluginOptionsSchema,\n} from \"./schemas\"\n","import { z } from \"zod\"\nimport { TwError } from \"@tailwind-styled/shared\"\n\nconst formatIssuePath = (path: readonly PropertyKey[]): string =>\n path.length > 0\n ? path\n .map((segment) =>\n typeof segment === \"symbol\" ? segment.description ?? segment.toString() : String(segment)\n )\n .join(\".\")\n : \"<root>\"\n\nconst formatIssues = (error: z.ZodError): string =>\n error.issues\n .map((issue) => {\n const p = formatIssuePath(issue.path)\n return `${p}: ${issue.message}`\n })\n .join(\"; \")\n\nconst parseWithSchema = <T>(schema: z.ZodType<T>, data: unknown, label: string): T => {\n const parsed = schema.safeParse(data)\n if (parsed.success) return parsed.data\n const details = formatIssues(parsed.error)\n throw new TwError(\n \"validation\",\n \"SCHEMA_VALIDATION_FAILED\",\n details ? `${label}: ${details}` : label,\n parsed.error\n )\n}\n\nexport const RspackPluginOptionsSchema = z.object({\n include: z.instanceof(RegExp).optional(),\n exclude: z.instanceof(RegExp).optional(),\n addDataAttr: z.boolean().optional(),\n analyze: z.boolean().optional(),\n cssEntry: z.string().optional(),\n /** Path ke safelist CSS file. Default: <cwd>/__tw_safelist.css */\n safelistPath: z.string().optional(),\n})\n\nexport type RspackPluginOptionsInput = z.infer<typeof RspackPluginOptionsSchema>\n\nexport const parseRspackPluginOptions = (options: unknown) =>\n parseWithSchema(RspackPluginOptionsSchema, options ?? {}, \"rspack plugin options are invalid\")\n"],"mappings":"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","names":["path","import_node_fs","import_node_path","formatIssuePath","path","getDirname","path","fs","rule"]}
|
|
1
|
+
{"version":3,"sources":["../node_modules/tsup/assets/cjs_shims.js","../packages/domain/shared/src/esmHelpers.ts","../packages/domain/shared/src/index.ts","../src/umbrella/rspack.ts","../packages/presentation/rspack/src/index.ts","../packages/presentation/rspack/src/schemas.ts"],"sourcesContent":["// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () => \n typeof document === \"undefined\" \n ? new URL(`file:${__filename}`).href \n : (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT') \n ? document.currentScript.src \n : new URL(\"main.js\", document.baseURI).href;\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n","/**\n * ESM-safe runtime helpers untuk monorepo.\n *\n * Menggantikan pola fragile seperti:\n * - `createRequire(import.meta.url)` → gunakan `createEsmRequire()`\n * - `__dirname` → gunakan `getDirname(import.meta.url)`\n * - `__filename` → gunakan `getFilename(import.meta.url)`\n *\n * Semua helper ini bekerja di ESM dan CJS.\n *\n * @module @tailwind-styled/shared/esmHelpers\n */\n\nconst isBrowser = typeof window !== \"undefined\" || typeof document !== \"undefined\"\n\n// Safe check for require availability - works in both CJS and ESM\nlet nodeModuleRef: typeof import(\"node:module\") | null = null\nfunction getNodeModuleRef(): typeof import(\"node:module\") | null {\n if (isBrowser) return null\n if (nodeModuleRef !== null) return nodeModuleRef\n try {\n const test = typeof require === 'function' ? (require('node:module') as typeof import(\"node:module\")) : null\n nodeModuleRef = test\n return test\n } catch {\n nodeModuleRef = null\n return null\n }\n}\n\nlet _nodePath: typeof import(\"node:path\") | null = null\nlet _nodeUrl: typeof import(\"node:url\") | null = null\nlet _nodeFs: typeof import(\"node:fs\") | null = null\nlet _nodeCrypto: typeof import(\"node:crypto\") | null = null\nlet _nodeOs: typeof import(\"node:os\") | null = null\n\n/**\n * Get current file URL in a way that works in both ESM and CJS.\n * In ESM: uses import.meta.url\n * In CJS: uses __filename converted to file URL\n */\nfunction getCurrentFileUrl(): string {\n // In CJS builds, import.meta.url is replaced by esbuild with __importMetaUrl\n // which is set via the banner polyfill. In ESM it's the real URL.\n if (import.meta.url) {\n return import.meta.url\n }\n // Fallback: __filename is available in bare CJS (not bundled)\n if (typeof __filename !== \"undefined\") {\n return `file://${__filename.replace(/\\\\/g, \"/\")}`\n }\n return \"file://unknown\"\n}\n\nfunction getNodePath(): typeof import(\"node:path\") {\n if (isBrowser) throw new Error(\"node:path not available in browser\")\n if (!_nodePath) {\n if (typeof require === \"function\") {\n _nodePath = require(\"node:path\") as typeof import(\"node:path\")\n } else {\n const nodeRequire = getNodeModuleRef()\n if (!nodeRequire) throw new Error(\"require not available\")\n _nodePath = nodeRequire.createRequire(getCurrentFileUrl())(\"node:path\") as typeof import(\"node:path\")\n }\n }\n return _nodePath!\n}\nfunction getNodeUrl(): typeof import(\"node:url\") {\n if (isBrowser) throw new Error(\"node:url not available in browser\")\n if (!_nodeUrl) {\n if (typeof require === \"function\") {\n _nodeUrl = require(\"node:url\") as typeof import(\"node:url\")\n } else {\n const nodeRequire = getNodeModuleRef()\n if (!nodeRequire) throw new Error(\"require not available\")\n _nodeUrl = nodeRequire.createRequire(getCurrentFileUrl())(\"node:url\") as typeof import(\"node:url\")\n }\n }\n return _nodeUrl!\n}\nfunction getNodeFs(): typeof import(\"node:fs\") {\n if (isBrowser) throw new Error(\"node:fs not available in browser\")\n if (!_nodeFs) {\n if (typeof require === \"function\") {\n _nodeFs = require(\"node:fs\") as typeof import(\"node:fs\")\n } else {\n const nodeRequire = getNodeModuleRef()\n if (!nodeRequire) throw new Error(\"require not available\")\n _nodeFs = nodeRequire.createRequire(getCurrentFileUrl())(\"node:fs\") as typeof import(\"node:fs\")\n }\n }\n return _nodeFs!\n}\nfunction getNodeCrypto(): typeof import(\"node:crypto\") {\n if (isBrowser) throw new Error(\"node:crypto not available in browser\")\n if (!_nodeCrypto) {\n if (typeof require === \"function\") {\n _nodeCrypto = require(\"node:crypto\") as typeof import(\"node:crypto\")\n } else {\n const nodeRequire = getNodeModuleRef()\n if (!nodeRequire) throw new Error(\"require not available\")\n _nodeCrypto = nodeRequire.createRequire(getCurrentFileUrl())(\"node:crypto\") as typeof import(\"node:crypto\")\n }\n }\n return _nodeCrypto!\n}\nfunction getNodeOs(): typeof import(\"node:os\") {\n if (isBrowser) throw new Error(\"node:os not available in browser\")\n if (!_nodeOs) {\n if (typeof require === \"function\") {\n _nodeOs = require(\"node:os\") as typeof import(\"node:os\")\n } else {\n const nodeRequire = getNodeModuleRef()\n if (!nodeRequire) throw new Error(\"require not available\")\n _nodeOs = nodeRequire.createRequire(getCurrentFileUrl())(\"node:os\") as typeof import(\"node:os\")\n }\n }\n return _nodeOs!\n}\n\n/**\n * Buat `require()` function yang relative terhadap sebuah ESM module.\n *\n * @example\n * const req = createEsmRequire(import.meta.url)\n * const mod = req(\"some-pkg\")\n */\nexport function createEsmRequire(importMetaUrl: string): NodeRequire {\n if (isBrowser) throw new Error(\"require not available in browser\")\n // CJS: require is already available globally\n if (typeof require === \"function\") return require\n const nodeRequire = getNodeModuleRef()\n if (!nodeRequire) throw new Error(\"require not available\")\n return nodeRequire.createRequire(importMetaUrl)\n}\n\n/**\n * Dapat `__dirname` dari `import.meta.url`.\n *\n * @example\n * const dir = getDirname(import.meta.url)\n */\nexport function getDirname(importMetaUrl: string): string {\n if (isBrowser) return \"\"\n // CJS: __dirname is directly available\n if (typeof __dirname !== \"undefined\") return __dirname\n const nodePath = getNodePath()\n const nodeUrl = getNodeUrl()\n return nodePath.dirname(nodeUrl.fileURLToPath(importMetaUrl))\n}\n\n/**\n * Dapat `__filename` dari `import.meta.url`.\n */\nexport function getFilename(importMetaUrl: string): string {\n if (isBrowser) return \"\"\n // CJS: __filename is directly available\n if (typeof __filename !== \"undefined\") return __filename\n return getNodeUrl().fileURLToPath(importMetaUrl)\n}\n\n/**\n * Resolve path dari root monorepo (bukan CWD).\n */\nexport function resolveFromRoot(...segments: string[]): string {\n if (isBrowser) return segments.join(\"/\")\n\n const nodePath = getNodePath()\n const nodeFs = getNodeFs()\n\n // Use __dirname in CJS, or getDirname with current file URL in ESM\n let dir = typeof __dirname !== \"undefined\"\n ? __dirname\n : getDirname(getCurrentFileUrl())\n\n for (let i = 0; i < 10; i++) {\n const pkgPath = nodePath.join(dir, \"package.json\")\n try {\n const pkg = JSON.parse(nodeFs.readFileSync(pkgPath, \"utf-8\"))\n if (pkg.workspaces) {\n return nodePath.resolve(dir, ...segments)\n }\n } catch { /* intentionally silent */ }\n dir = nodePath.dirname(dir)\n }\n return nodePath.resolve(process.cwd(), ...segments)\n}\n\n/**\n * Require sebuah module dengan fallback ke null jika tidak tersedia.\n */\nexport function tryRequire<T = unknown>(\n moduleName: string,\n importMetaUrl: string\n): T | null {\n if (isBrowser) return null\n try {\n return createEsmRequire(importMetaUrl)(moduleName) as T\n } catch { /* intentionally silent — optional dep */ }\n return null\n}\n\n/**\n * Resolve .node binary path yang cross-platform dan ESM-safe.\n */\nexport function resolveNativeNodePath(\n importMetaUrl: string,\n ...relativeSegments: string[]\n): string {\n if (isBrowser) return relativeSegments.join(\"/\")\n return getNodePath().resolve(getDirname(importMetaUrl), ...relativeSegments)\n}\n","import { createHash } from \"node:crypto\"\nimport fs from \"node:fs\"\nimport path from \"node:path\"\nimport { fileURLToPath } from \"node:url\"\nimport { createRequire } from \"node:module\"\n\n// Native-only: Node.js is always available. No browser fallback.\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type TokenMap = Record<string, string>\n\nexport type VariantValue = string | number | boolean | undefined\n\nexport type VariantProps = Record<string, VariantValue>\n\nexport type HtmlTagName = keyof HTMLElementTagNameMap\n\nexport type CompoundCondition = Record<string, string | number | boolean>\n\nexport type VariantMatrix = Record<string, Array<string | number | boolean>>\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Logging\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface Logger {\n warn(...args: unknown[]): void\n debug(...args: unknown[]): void\n error(...args: unknown[]): void\n log(...args: unknown[]): void\n}\n\nexport function createLogger(namespace: string): Logger {\n const prefix = `[${namespace}]`\n return {\n warn(...args: unknown[]) {\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\n },\n debug(...args: unknown[]) {\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\n },\n error(...args: unknown[]) {\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\n },\n log(...args: unknown[]) {\n process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\n },\n }\n}\n\nexport function createDebugLogger(namespace: string, label?: string): (msg: string) => void {\n const prefix = label ? `[${namespace}:${label}]` : `[${namespace}]`\n return (msg: string) => {\n if (process.env.DEBUG?.includes(namespace) || process.env.TW_DEBUG) {\n console.debug(prefix, msg)\n }\n }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Error handling\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type ErrorSource = \"rust\" | \"validation\" | \"compile\" | \"io\" | \"config\" | \"unknown\"\n\ntype ZodLikeIssue = {\n path?: readonly PropertyKey[]\n message?: string\n}\n\nfunction formatIssuePath(path?: readonly PropertyKey[]): string {\n if (!path || path.length === 0) return \"(root)\"\n return path\n .map((segment) =>\n typeof segment === \"symbol\" ? segment.description ?? segment.toString() : String(segment)\n )\n .join(\".\")\n}\n\nexport class TwError extends Error {\n /** @deprecated Gunakan source */\n public readonly domain: string\n public readonly source: ErrorSource\n public readonly code: string\n public readonly originalCause?: unknown\n\n constructor(domainOrSource: string, code: string, message: string, cause?: unknown) {\n super(message)\n this.name = \"TwError\"\n this.domain = domainOrSource\n this.source = domainOrSource as ErrorSource\n this.code = code\n this.originalCause = cause\n if (Error.captureStackTrace) Error.captureStackTrace(this, TwError)\n }\n\n static fromIo(code: string, message: string): TwError {\n return new TwError(\"io\", code, message)\n }\n\n static fromCompile(code: string, message: string): TwError {\n return new TwError(\"compile\", code, message)\n }\n\n static fromRust(err: { code?: string; message?: string } | Error | unknown): TwError {\n if (err instanceof TwError) return err\n if (err instanceof Error) return new TwError(\"rust\", \"RUST_ERROR\", err.message, err)\n if (err && typeof err === \"object\") {\n const e = err as { code?: string; message?: string }\n return new TwError(\"rust\", e.code ?? \"RUST_ERROR\", e.message ?? String(err), err)\n }\n return new TwError(\"rust\", \"RUST_ERROR\", String(err), err)\n }\n\n /** Buat TwError dari ZodError — dukung shape Zod v3 (`errors`) dan v4 (`issues`). */\n static fromZod(err: { issues?: ZodLikeIssue[]; errors?: ZodLikeIssue[] }): TwError {\n const first = err.issues?.[0] ?? err.errors?.[0]\n const path = formatIssuePath(first?.path)\n const message = first ? `${path}: ${first.message}` : \"Schema validation failed\"\n return new TwError(\"validation\", \"SCHEMA_VALIDATION_FAILED\", message, err)\n }\n\n static wrap(source: string, code: string, err: unknown): TwError {\n if (err instanceof TwError) return err\n if (err instanceof Error) return new TwError(source, code, err.message, err)\n return new TwError(source, code, String(err), err)\n }\n\n override toString(): string {\n return `TwError [${this.source}:${this.code}] ${this.message}`\n }\n\n toJSON(): { name: string; source: string; code: string; message: string } {\n return { name: this.name, source: this.source, code: this.code, message: this.message }\n }\n\n toCliMessage(): string {\n return `[${this.source.toUpperCase()}:${this.code}] ${this.message}`\n }\n}\n\nexport function wrapUnknownError(domain: string, code: string, error: unknown): TwError {\n return TwError.wrap(domain, code, error)\n}\n\nexport function isTwError(err: unknown): err is TwError {\n return err instanceof TwError\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Native binding resolution\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface LoadNativeBindingOptions<T> {\n runtimeDir: string\n candidates: string[]\n isValid: (module: unknown) => module is T\n invalidExportMessage: string\n}\n\nexport interface LoadNativeBindingResult<T> {\n binding: T | null\n loadErrors: Array<{ path: string; message: string }>\n loadedPath?: string\n}\n\nexport function loadNativeBinding<T>(options: LoadNativeBindingOptions<T>): LoadNativeBindingResult<T> {\n const { runtimeDir, candidates, isValid } = options\n const loadErrors: Array<{ path: string; message: string }> = []\n\n for (const candidate of candidates) {\n const candidatePath = path.resolve(runtimeDir, candidate)\n try {\n if (!fs.existsSync(candidatePath) && !fs.existsSync(candidatePath + \".node\")) {\n continue\n }\n const mod = requireNativeModule(candidatePath)\n if (mod && isValid(mod)) {\n return { binding: mod, loadErrors, loadedPath: candidatePath }\n }\n loadErrors.push({ path: candidatePath, message: options.invalidExportMessage })\n } catch (e) {\n loadErrors.push({ path: candidatePath, message: e instanceof Error ? e.message : String(e) })\n }\n }\n\n return { binding: null, loadErrors }\n}\n\nconst _require = createRequire(\n typeof __filename !== \"undefined\"\n ? `file://${__filename}`\n : (import.meta.url ?? \"file://unknown\")\n)\n\nfunction requireNativeModule(p: string): unknown {\n return _require(p)\n}\n\nexport interface ResolveCandidatesOptions {\n runtimeDir?: string\n envVarNames?: string[]\n includeDefaultCandidates?: boolean\n enforceNodeExtensionForEnvPath?: boolean\n /** @deprecated — ignored, kept for backward compat */\n packageName?: string\n}\n\nexport function resolveNativeBindingCandidates(options: ResolveCandidatesOptions): string[] {\n const {\n envVarNames = [\"TW_NATIVE_PATH\", \"TWS_NATIVE_PATH\"],\n includeDefaultCandidates = true,\n enforceNodeExtensionForEnvPath = false,\n } = options\n // Default ke cwd kalau runtimeDir tidak disediakan\n const runtimeDir = options.runtimeDir || process.cwd()\n const candidates: string[] = []\n\n for (const envVar of envVarNames) {\n const envPath = process.env[envVar]\n if (envPath) {\n candidates.push(enforceNodeExtensionForEnvPath && !envPath.endsWith(\".node\") ? envPath + \".node\" : envPath)\n }\n }\n\n if (!includeDefaultCandidates) return candidates\n\n if (fs.existsSync(runtimeDir)) {\n try {\n for (const entry of fs.readdirSync(runtimeDir)) {\n if (entry.endsWith(\".node\")) candidates.push(entry)\n }\n } catch { /* ignore read errors */ }\n }\n\n const BINARY_NAMES = [\"tailwind-styled-native\", \"tailwind_styled_parser\"]\n const napiPlatform = process.platform === \"linux\" && process.arch === \"x64\" ? \"linux-x64-gnu\"\n : process.platform === \"linux\" && process.arch === \"arm64\" ? \"linux-arm64-gnu\"\n : `${process.platform}-${process.arch}`\n\n for (const bin of BINARY_NAMES) {\n candidates.push(path.resolve(runtimeDir, `${bin}.node`))\n candidates.push(path.resolve(runtimeDir, `${bin}.${napiPlatform}.node`))\n // 1 level: dist/ → package-root/native/ (published npm package)\n candidates.push(path.resolve(runtimeDir, \"..\", \"native\", `${bin}.node`))\n candidates.push(path.resolve(runtimeDir, \"..\", \"native\", `${bin}.${napiPlatform}.node`))\n // cwd fallback (user project root)\n candidates.push(path.resolve(process.cwd(), \"native\", `${bin}.node`))\n candidates.push(path.resolve(process.cwd(), \"native\", `${bin}.${napiPlatform}.node`))\n // 4 level: dist/ → package/ → domain/ → packages/ → repo-root/ (monorepo dev)\n candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", `${bin}.node`))\n candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", `${bin}.${napiPlatform}.node`))\n // 3 level fallback\n candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"native\", `${bin}.node`))\n }\n\n return Array.from(new Set(candidates))\n}\n\nexport function resolveRuntimeDir(dir: string | undefined, importMetaUrl: string): string {\n if (dir) return path.resolve(dir)\n try {\n return path.dirname(fileURLToPath(importMetaUrl))\n } catch {\n return process.cwd()\n }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Hashing\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport function hashContent(content: string, algorithm: string = \"md5\", length?: number): string {\n const hash = createHash(algorithm).update(content).digest(\"hex\")\n return length ? hash.slice(0, length) : hash\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Error formatting\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport function formatErrorMessage(error: unknown): string {\n if (error instanceof TwError) return error.toString()\n if (error instanceof Error) return error.message\n return String(error)\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// LRU Cache\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport class LRUCache<K, V> {\n private capacity: number\n private cache: Map<K, V>\n\n constructor(capacity: number) {\n this.capacity = capacity\n this.cache = new Map()\n }\n\n get(key: K): V | undefined {\n if (!this.cache.has(key)) return undefined\n const value = this.cache.get(key)!\n this.cache.delete(key)\n this.cache.set(key, value)\n return value\n }\n\n set(key: K, value: V): void {\n if (this.cache.has(key)) {\n this.cache.delete(key)\n } else if (this.cache.size >= this.capacity) {\n const firstKey = this.cache.keys().next().value\n if (firstKey !== undefined) {\n this.cache.delete(firstKey)\n }\n }\n this.cache.set(key, value)\n }\n\n delete(key: K): boolean {\n return this.cache.delete(key)\n }\n\n has(key: K): boolean {\n return this.cache.has(key)\n }\n\n clear(): void {\n this.cache.clear()\n }\n\n entries(): IterableIterator<[K, V]> {\n return this.cache.entries()\n }\n\n get size(): number {\n return this.cache.size\n }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Trace Utilities\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type { TraceSnapshot, TraceSummary } from \"./trace\"\nexport {\n getHealthColor,\n getModeColor,\n formatMemory,\n formatDuration,\n calculateHealth,\n getBuildTimeColor,\n getMemoryColor,\n createTraceSnapshot,\n getPipelinePercentages,\n} from \"./trace\"\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Performance Telemetry\n// ─────────────────────────────────────────────────────────────────────────────\n\n\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Error Codes\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type { ErrorCode } from \"./error-codes\"\nexport { ERROR_CODES, getSuggestion, formatErrorCode } from \"./error-codes\"\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Tailwind Compatibility\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type { TailwindInfo } from \"./compatibility\"\nexport { detectTailwind, assertTailwindV4, getTailwindVersion, isTailwindV4 } from \"./compatibility\"\n\n// ── Native binding schemas (Zod boundary validation)\nexport {\n NativeScanFileSchema, NativeScanResultSchema,\n NativeAnalyzerReportSchema, NativeTransformResultSchema,\n NativeCssCompileResultSchema, NativeWatchResultSchema,\n NativeCacheEntrySchema, NativeCacheReadResultSchema,\n safeParseNative, parseNative,\n} from './native-schemas'\n\n// ── ESM-safe runtime helpers ──────────────────────────────────────────────\nexport {\n createEsmRequire,\n getDirname,\n getFilename,\n resolveFromRoot,\n tryRequire,\n resolveNativeNodePath,\n} from \"./esmHelpers\"\n\n// ── Performance telemetry ────────────────────────────────────────────────────\nexport {\n TelemetryCollector,\n getGlobalTelemetry,\n resetGlobalTelemetry,\n createBuildTimer,\n type BuildTelemetry,\n type TelemetrySummary,\n type BuildPhases,\n} from \"./telemetry\"\n\n// ── Config/JSON schema validation ─────────────────────────────────────────────\nexport {\n ScanCacheSchema,\n ScanCacheClassEntrySchema,\n TailwindConfigSchema,\n RegistryPluginEntrySchema,\n RegistryFileSchema,\n PackageJsonSchema,\n parseJsonWithSchema,\n parseJsonFileWithSchema,\n type ScanCache,\n type ScanCacheClassEntry,\n type TailwindConfig,\n type RegistryPluginEntry,\n type RegistryFile,\n type PackageJson,\n} from \"./configSchemas\"\n\n// ── Worker/bootstrap path resolution ─────────────────────────────────────────\nexport {\n resolveWorkerPath,\n resolveLoaderPath,\n type WorkerPathOptions,\n type WorkerPathResult,\n} from \"./workerResolver\"\n\n// ── Codegen helpers ───────────────────────────────────────────────────────────\nexport {\n generateComponentCode,\n generateStorybookStory,\n generateClassRenameCodemod,\n generateBarrelFile,\n type ComponentCodegenOptions,\n} from \"./codegen\"\n\n// ── Native binary resolution (QA #1) ─────────────────────────────────────────\nexport {\n resolveNativeBinary,\n formatNativeNotFoundError,\n type NativeResolutionResult,\n} from \"./native-resolution\"\n\n// ── Shared observability contract ────────────────────────────────────────────\nexport {\n createObservabilityClient,\n type ClassInspection,\n type ClassProperty,\n type ClassUsageLocation,\n type BuildTrace,\n type BuildPhaseTrace,\n type DashboardMetrics,\n type DashboardSummary,\n type ObservabilityClient,\n} from \"./observability\"\n\nexport {\n TW_STATE_STATIC_FILENAME,\n extractStaticStateCss,\n appendStaticStateCssToSafelist,\n type TwStateConfigEntry,\n type StaticStateCssInput,\n type GeneratedStateRule,\n type StaticStateExtractionResult,\n} from \"./staticStateExtractor\"\nexport { setGlobalLogFile } from \"./logger\"","export * from \"@tailwind-styled/rspack\"\n","/**\n * tailwind-styled-v4 - Rspack Plugin v5 (stable)\n *\n * Usage:\n * import { tailwindStyledRspackPlugin } from \"@tailwind-styled/rspack\"\n *\n * export default defineConfig({\n * plugins: [tailwindStyledRspackPlugin()],\n * })\n *\n * v5:\n * - Simplified API\n * - Mode always zero-runtime\n */\n\nimport fs from \"node:fs\"\nimport path from \"node:path\"\nimport { getDirname as getEsmDirname } from \"@tailwind-styled/shared\"\n\nimport { parseRspackPluginOptions } from \"./schemas\"\n\nfunction getDirname(): string {\n if (typeof __dirname !== \"undefined\") {\n return __dirname\n }\n if (typeof import.meta !== \"undefined\" && import.meta.url) {\n return getEsmDirname(import.meta.url)\n }\n return process.cwd()\n}\n\nfunction resolveLoaderPath(basename: string): string {\n const runtimeDir = getDirname()\n const preferredExtensions =\n typeof __dirname !== \"undefined\" && __dirname.length > 0 ? [\".cjs\", \".js\"] : [\".js\", \".cjs\"]\n\n for (const ext of preferredExtensions) {\n const candidate = path.resolve(runtimeDir, `${basename}${ext}`)\n if (fs.existsSync(candidate)) return candidate\n }\n\n return path.resolve(runtimeDir, `${basename}.js`)\n}\n\ninterface RspackRule {\n _tailwindStyledRspackMarker?: boolean\n test?: RegExp\n exclude?: RegExp\n use?: Array<{\n loader: string\n options: {\n mode: \"zero-runtime\"\n addDataAttr: boolean\n preserveImports: boolean\n safelistPath?: string\n }\n }>\n}\n\ninterface RspackCompiler {\n options: {\n mode?: string\n module?: {\n rules?: RspackRule[]\n }\n }\n}\n\nexport interface RspackPluginOptions {\n /** File patterns to include. Default: /\\.[jt]sx?$/ */\n include?: RegExp\n /** File patterns to exclude. Default: /node_modules/ */\n exclude?: RegExp\n /** Add data-tw debug attributes in dev. Default: true in dev */\n addDataAttr?: boolean\n /** Enable analyzer. Default: false */\n analyze?: boolean\n /**\n * Path ke safelist CSS file.\n * `_tw-state-static.css` ditulis di direktori yang sama.\n * Default: `<cwd>/__tw_safelist.css`\n */\n safelistPath?: string\n}\n\nexport class TailwindStyledRspackPlugin {\n private opts: RspackPluginOptions\n\n constructor(opts: RspackPluginOptions = {}) {\n this.opts = parseRspackPluginOptions(opts)\n }\n\n apply(compiler: RspackCompiler): void {\n const isDev = compiler.options.mode !== \"production\"\n const loaderPath = resolveLoaderPath(\"loader\")\n const existing = compiler.options.module?.rules ?? []\n const alreadyRegistered = existing.some(\n (rule) =>\n typeof rule === \"object\" && rule !== null && rule._tailwindStyledRspackMarker === true\n )\n\n if (alreadyRegistered) return\n\n const safelistPath =\n this.opts.safelistPath ?? path.join(process.cwd(), \"__tw_safelist.css\")\n\n // Tulis placeholder agar @import di CSS entry tidak error saat cold start\n const stateStaticPath = path.join(path.dirname(safelistPath), \"_tw-state-static.css\")\n if (!fs.existsSync(stateStaticPath)) {\n try {\n fs.mkdirSync(path.dirname(stateStaticPath), { recursive: true })\n fs.writeFileSync(\n stateStaticPath,\n `/* _tw-state-static.css — Auto-generated by tailwind-styled-v4. DO NOT EDIT.\\n` +\n ` * Import di CSS entry: @import \"./_tw-state-static.css\";\\n` +\n ` */\\n`,\n \"utf-8\"\n )\n } catch { /* non-fatal */ }\n }\n\n const rule: RspackRule = {\n _tailwindStyledRspackMarker: true,\n test: this.opts.include ?? /\\.[jt]sx?$/,\n exclude: this.opts.exclude ?? /node_modules/,\n use: [\n {\n loader: loaderPath,\n options: {\n mode: \"zero-runtime\",\n addDataAttr: this.opts.addDataAttr ?? isDev,\n preserveImports: true,\n safelistPath,\n },\n },\n ],\n }\n\n compiler.options.module = {\n ...(compiler.options.module ?? {}),\n rules: [rule, ...existing],\n }\n }\n}\n\nexport function tailwindStyledRspackPlugin(\n opts: RspackPluginOptions = {}\n): TailwindStyledRspackPlugin {\n return new TailwindStyledRspackPlugin(opts)\n}\n\nexport default tailwindStyledRspackPlugin\n\nexport {\n parseRspackPluginOptions,\n type RspackPluginOptionsInput,\n RspackPluginOptionsSchema,\n} from \"./schemas\"\n","import { z } from \"zod\"\nimport { TwError } from \"@tailwind-styled/shared\"\n\nconst formatIssuePath = (path: readonly PropertyKey[]): string =>\n path.length > 0\n ? path\n .map((segment) =>\n typeof segment === \"symbol\" ? segment.description ?? segment.toString() : String(segment)\n )\n .join(\".\")\n : \"<root>\"\n\nconst formatIssues = (error: z.ZodError): string =>\n error.issues\n .map((issue) => {\n const p = formatIssuePath(issue.path)\n return `${p}: ${issue.message}`\n })\n .join(\"; \")\n\nconst parseWithSchema = <T>(schema: z.ZodType<T>, data: unknown, label: string): T => {\n const parsed = schema.safeParse(data)\n if (parsed.success) return parsed.data\n const details = formatIssues(parsed.error)\n throw new TwError(\n \"validation\",\n \"SCHEMA_VALIDATION_FAILED\",\n details ? `${label}: ${details}` : label,\n parsed.error\n )\n}\n\nexport const RspackPluginOptionsSchema = z.object({\n include: z.instanceof(RegExp).optional(),\n exclude: z.instanceof(RegExp).optional(),\n addDataAttr: z.boolean().optional(),\n analyze: z.boolean().optional(),\n cssEntry: z.string().optional(),\n /** Path ke safelist CSS file. Default: <cwd>/__tw_safelist.css */\n safelistPath: z.string().optional(),\n})\n\nexport type RspackPluginOptionsInput = z.infer<typeof RspackPluginOptionsSchema>\n\nexport const parseRspackPluginOptions = (options: unknown) =>\n parseWithSchema(RspackPluginOptionsSchema, options ?? {}, \"rspack plugin options are invalid\")\n"],"mappings":"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","names":["importMetaUrl","path","import_node_fs","import_node_path","formatIssuePath","path","getDirname","path","fs","rule"]}
|
package/dist/rspack.mjs
CHANGED
|
@@ -10,6 +10,20 @@ var __esm = (fn, res) => function __init() {
|
|
|
10
10
|
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
11
11
|
};
|
|
12
12
|
|
|
13
|
+
// node_modules/tsup/assets/esm_shims.js
|
|
14
|
+
import path from "path";
|
|
15
|
+
import { fileURLToPath } from "url";
|
|
16
|
+
var getFilename, getDirname, __dirname, __filename;
|
|
17
|
+
var init_esm_shims = __esm({
|
|
18
|
+
"node_modules/tsup/assets/esm_shims.js"() {
|
|
19
|
+
"use strict";
|
|
20
|
+
getFilename = () => fileURLToPath(import.meta.url);
|
|
21
|
+
getDirname = () => path.dirname(getFilename());
|
|
22
|
+
__dirname = /* @__PURE__ */ getDirname();
|
|
23
|
+
__filename = /* @__PURE__ */ getFilename();
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
|
|
13
27
|
// packages/domain/shared/src/esmHelpers.ts
|
|
14
28
|
function getNodeModuleRef() {
|
|
15
29
|
if (isBrowser) return null;
|
|
@@ -58,7 +72,7 @@ function getNodeUrl() {
|
|
|
58
72
|
}
|
|
59
73
|
return _nodeUrl;
|
|
60
74
|
}
|
|
61
|
-
function
|
|
75
|
+
function getDirname2(importMetaUrl) {
|
|
62
76
|
if (isBrowser) return "";
|
|
63
77
|
if (typeof __dirname !== "undefined") return __dirname;
|
|
64
78
|
const nodePath = getNodePath();
|
|
@@ -69,6 +83,7 @@ var isBrowser, nodeModuleRef, _nodePath, _nodeUrl;
|
|
|
69
83
|
var init_esmHelpers = __esm({
|
|
70
84
|
"packages/domain/shared/src/esmHelpers.ts"() {
|
|
71
85
|
"use strict";
|
|
86
|
+
init_esm_shims();
|
|
72
87
|
isBrowser = typeof window !== "undefined" || typeof document !== "undefined";
|
|
73
88
|
nodeModuleRef = null;
|
|
74
89
|
_nodePath = null;
|
|
@@ -79,12 +94,12 @@ var init_esmHelpers = __esm({
|
|
|
79
94
|
// packages/domain/shared/src/index.ts
|
|
80
95
|
import { createHash } from "crypto";
|
|
81
96
|
import fs from "fs";
|
|
82
|
-
import
|
|
83
|
-
import { fileURLToPath } from "url";
|
|
97
|
+
import path2 from "path";
|
|
98
|
+
import { fileURLToPath as fileURLToPath2 } from "url";
|
|
84
99
|
import { createRequire } from "module";
|
|
85
|
-
function formatIssuePath(
|
|
86
|
-
if (!
|
|
87
|
-
return
|
|
100
|
+
function formatIssuePath(path4) {
|
|
101
|
+
if (!path4 || path4.length === 0) return "(root)";
|
|
102
|
+
return path4.map(
|
|
88
103
|
(segment) => typeof segment === "symbol" ? segment.description ?? segment.toString() : String(segment)
|
|
89
104
|
).join(".");
|
|
90
105
|
}
|
|
@@ -92,6 +107,7 @@ var TwError, _require;
|
|
|
92
107
|
var init_src = __esm({
|
|
93
108
|
"packages/domain/shared/src/index.ts"() {
|
|
94
109
|
"use strict";
|
|
110
|
+
init_esm_shims();
|
|
95
111
|
init_esmHelpers();
|
|
96
112
|
TwError = class _TwError extends Error {
|
|
97
113
|
/** @deprecated Gunakan source */
|
|
@@ -126,8 +142,8 @@ var init_src = __esm({
|
|
|
126
142
|
/** Buat TwError dari ZodError — dukung shape Zod v3 (`errors`) dan v4 (`issues`). */
|
|
127
143
|
static fromZod(err) {
|
|
128
144
|
const first = err.issues?.[0] ?? err.errors?.[0];
|
|
129
|
-
const
|
|
130
|
-
const message = first ? `${
|
|
145
|
+
const path4 = formatIssuePath(first?.path);
|
|
146
|
+
const message = first ? `${path4}: ${first.message}` : "Schema validation failed";
|
|
131
147
|
return new _TwError("validation", "SCHEMA_VALIDATION_FAILED", message, err);
|
|
132
148
|
}
|
|
133
149
|
static wrap(source, code, err) {
|
|
@@ -151,15 +167,20 @@ var init_src = __esm({
|
|
|
151
167
|
}
|
|
152
168
|
});
|
|
153
169
|
|
|
170
|
+
// src/umbrella/rspack.ts
|
|
171
|
+
init_esm_shims();
|
|
172
|
+
|
|
154
173
|
// packages/presentation/rspack/src/index.ts
|
|
174
|
+
init_esm_shims();
|
|
155
175
|
init_src();
|
|
156
176
|
import fs2 from "fs";
|
|
157
|
-
import
|
|
177
|
+
import path3 from "path";
|
|
158
178
|
|
|
159
179
|
// packages/presentation/rspack/src/schemas.ts
|
|
180
|
+
init_esm_shims();
|
|
160
181
|
init_src();
|
|
161
182
|
import { z } from "zod";
|
|
162
|
-
var formatIssuePath2 = (
|
|
183
|
+
var formatIssuePath2 = (path4) => path4.length > 0 ? path4.map(
|
|
163
184
|
(segment) => typeof segment === "symbol" ? segment.description ?? segment.toString() : String(segment)
|
|
164
185
|
).join(".") : "<root>";
|
|
165
186
|
var formatIssues = (error) => error.issues.map((issue) => {
|
|
@@ -189,23 +210,23 @@ var RspackPluginOptionsSchema = z.object({
|
|
|
189
210
|
var parseRspackPluginOptions = (options) => parseWithSchema(RspackPluginOptionsSchema, options ?? {}, "rspack plugin options are invalid");
|
|
190
211
|
|
|
191
212
|
// packages/presentation/rspack/src/index.ts
|
|
192
|
-
function
|
|
213
|
+
function getDirname3() {
|
|
193
214
|
if (typeof __dirname !== "undefined") {
|
|
194
215
|
return __dirname;
|
|
195
216
|
}
|
|
196
217
|
if (typeof import.meta !== "undefined" && import.meta.url) {
|
|
197
|
-
return
|
|
218
|
+
return getDirname2(import.meta.url);
|
|
198
219
|
}
|
|
199
220
|
return process.cwd();
|
|
200
221
|
}
|
|
201
222
|
function resolveLoaderPath(basename) {
|
|
202
|
-
const runtimeDir =
|
|
223
|
+
const runtimeDir = getDirname3();
|
|
203
224
|
const preferredExtensions = typeof __dirname !== "undefined" && __dirname.length > 0 ? [".cjs", ".js"] : [".js", ".cjs"];
|
|
204
225
|
for (const ext of preferredExtensions) {
|
|
205
|
-
const candidate =
|
|
226
|
+
const candidate = path3.resolve(runtimeDir, `${basename}${ext}`);
|
|
206
227
|
if (fs2.existsSync(candidate)) return candidate;
|
|
207
228
|
}
|
|
208
|
-
return
|
|
229
|
+
return path3.resolve(runtimeDir, `${basename}.js`);
|
|
209
230
|
}
|
|
210
231
|
var TailwindStyledRspackPlugin = class {
|
|
211
232
|
opts;
|
|
@@ -220,11 +241,11 @@ var TailwindStyledRspackPlugin = class {
|
|
|
220
241
|
(rule2) => typeof rule2 === "object" && rule2 !== null && rule2._tailwindStyledRspackMarker === true
|
|
221
242
|
);
|
|
222
243
|
if (alreadyRegistered) return;
|
|
223
|
-
const safelistPath = this.opts.safelistPath ??
|
|
224
|
-
const stateStaticPath =
|
|
244
|
+
const safelistPath = this.opts.safelistPath ?? path3.join(process.cwd(), "__tw_safelist.css");
|
|
245
|
+
const stateStaticPath = path3.join(path3.dirname(safelistPath), "_tw-state-static.css");
|
|
225
246
|
if (!fs2.existsSync(stateStaticPath)) {
|
|
226
247
|
try {
|
|
227
|
-
fs2.mkdirSync(
|
|
248
|
+
fs2.mkdirSync(path3.dirname(stateStaticPath), { recursive: true });
|
|
228
249
|
fs2.writeFileSync(
|
|
229
250
|
stateStaticPath,
|
|
230
251
|
`/* _tw-state-static.css \u2014 Auto-generated by tailwind-styled-v4. DO NOT EDIT.
|