@vueland/utils-jit 0.2.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":["normalizePath","matchesPattern"],"sources":["../src/core.ts","../src/validators.ts","../src/rules.ts","../src/plugin.ts"],"sourcesContent":["import type {\n CssBody,\n DeclarationMap,\n DeclarationValue,\n ParsedToken,\n Pattern,\n RuleMatch,\n RuleOptions,\n UtilityRule,\n VariantDefinition,\n VariantMap,\n} from './types'\n\nexport const DEFAULT_INCLUDE: Pattern[] = [\n /\\.(vue|js|ts|jsx|tsx|html)$/,\n]\n\nexport const DEFAULT_EXCLUDE: Pattern[] = [\n /(^|[/\\\\])node_modules([/\\\\]|$)/,\n /(^|[/\\\\])\\.git([/\\\\]|$)/,\n /(^|[/\\\\])dist([/\\\\]|$)/,\n /(^|[/\\\\])build([/\\\\]|$)/,\n /(^|[/\\\\])coverage([/\\\\]|$)/,\n /(^|[/\\\\])\\.output([/\\\\]|$)/,\n /(^|[/\\\\])\\.nuxt([/\\\\]|$)/,\n /(^|[/\\\\])\\.turbo([/\\\\]|$)/,\n /(^|[/\\\\])\\.generated([/\\\\]|$)/,\n /(^|[/\\\\])storybook-static([/\\\\]|$)/,\n /(^|[/\\\\])playwright-report([/\\\\]|$)/,\n]\n\nexport const DEFAULT_BREAKPOINTS: Record<string, number> = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n '2xl': 1536,\n}\n\nexport const DEFAULT_VARIANTS: VariantMap = {\n hover: { kind: 'pseudo', value: 'hover' },\n focus: { kind: 'pseudo', value: 'focus' },\n 'focus-visible': { kind: 'pseudo', value: 'focus-visible' },\n 'focus-within': { kind: 'pseudo', value: 'focus-within' },\n active: { kind: 'pseudo', value: 'active' },\n disabled: { kind: 'pseudo', value: 'disabled' },\n checked: { kind: 'pseudo', value: 'checked' },\n visited: { kind: 'pseudo', value: 'visited' },\n first: { kind: 'pseudo', value: 'first-child' },\n last: { kind: 'pseudo', value: 'last-child' },\n odd: { kind: 'pseudo', value: 'nth-child(odd)' },\n even: { kind: 'pseudo', value: 'nth-child(even)' }\n}\n\nconst MIN_TOKEN_LENGTH = 5\nconst MAX_TOKEN_LENGTH = 180\nconst MAX_VALUE_LENGTH = 160\n\nfunction normalizePath(value: string): string {\n return value.replace(/\\\\/g, '/')\n}\n\nfunction matchesPattern(value: string, pattern: Pattern): boolean {\n const normalized = normalizePath(value)\n\n if (typeof pattern === 'string') {\n return normalized.includes(normalizePath(pattern))\n }\n\n pattern.lastIndex = 0\n\n return pattern.test(normalized)\n}\n\nexport function shouldProcess(\n id: string,\n include: Pattern[] = DEFAULT_INCLUDE,\n exclude: Pattern[] = []\n): boolean {\n const cleanId = id.split('?')[0]\n\n if (!cleanId) {\n return false\n }\n\n if (exclude.some((pattern) => matchesPattern(cleanId, pattern))) {\n return false\n }\n\n return include.some((pattern) => matchesPattern(cleanId, pattern))\n}\n\nexport function escapeCssSelector(value: string): string {\n return value.replace(/[^a-zA-Z0-9_-]/g, (char) => `\\\\${char}`)\n}\n\nexport function normalizeValue(value: string): string {\n return value.trim().replace(/\\s+/g, ' ')\n}\n\nexport function isSafeCssValue(value: string): boolean {\n const normalized = normalizeValue(value)\n\n if (!normalized) {\n return false\n }\n\n if (normalized.length > MAX_VALUE_LENGTH) {\n return false\n }\n\n if (/[;{}<>]/.test(normalized)) {\n return false\n }\n\n if (/\\/\\*/.test(normalized) || /\\*\\//.test(normalized)) {\n return false\n }\n\n if (!/[a-zA-Z0-9]/.test(normalized)) {\n return false\n }\n\n return /^[-a-zA-Z0-9.%_(),+/*\\s[\\]#]+$/.test(normalized)\n}\n\nfunction stripEdgeGarbage(token: string): string {\n return token.replace(/^['\"`{(]+|['\"`})>,;]+$/g, '')\n}\n\nfunction looksLikeArbitraryUtility(token: string): boolean {\n if (!token) {\n return false\n }\n\n if (token.length < MIN_TOKEN_LENGTH || token.length > MAX_TOKEN_LENGTH) {\n return false\n }\n\n if (!token.includes('-[') || !token.endsWith(']')) {\n return false\n }\n\n if (token.startsWith('<') || token.startsWith('>')) {\n return false\n }\n\n const arbitraryIndex = token.indexOf('-[')\n\n return arbitraryIndex > 0\n}\n\nexport function stripComments(code: string): string {\n return code\n .replace(/<!--[\\s\\S]*?-->/g, ' ')\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, ' ')\n .replace(/(^|[^:])\\/\\/.*$/gm, '$1 ')\n}\n\nexport function extractClassCandidates(code: string): string[] {\n const candidates: string[] = []\n\n const patterns = [\n /(?:^|[\\s<]):class\\s*=\\s*\"([^\"]*)\"/g,\n /(?:^|[\\s<]):class\\s*=\\s*'([^']*)'/g,\n /(?:^|[\\s<])class\\s*=\\s*\"([^\"]*)\"/g,\n /(?:^|[\\s<])class\\s*=\\s*'([^']*)'/g,\n ]\n\n for (const pattern of patterns) {\n for (const match of code.matchAll(pattern)) {\n const value = match[1]\n\n if (value) {\n candidates.push(value)\n }\n }\n }\n\n return candidates\n}\n\nfunction tokenizeChunk(code: string): Set<string> {\n const result = new Set<string>()\n\n const pattern =\n /(?:[a-zA-Z0-9_-]+:)*[a-zA-Z][a-zA-Z0-9_-]*-\\[[^\\]\\s]+(?:\\s+[^\\]\\s]+)*\\]/g\n\n for (const match of code.matchAll(pattern)) {\n const raw = match[0]\n const token = stripEdgeGarbage(raw)\n\n if (looksLikeArbitraryUtility(token)) {\n result.add(token)\n }\n }\n\n return result\n}\n\nexport function tokenize(code: string): Set<string> {\n const cleanCode = stripComments(code)\n const classCandidates = extractClassCandidates(cleanCode)\n\n if (classCandidates.length > 0) {\n const result = new Set<string>()\n\n for (const candidate of classCandidates) {\n for (const token of tokenizeChunk(candidate)) {\n result.add(token)\n }\n }\n\n if (result.size > 0) {\n return result\n }\n }\n\n return tokenizeChunk(cleanCode)\n}\n\nexport function parseToken(token: string): ParsedToken | null {\n const parts = token.split(':').filter(Boolean)\n\n if (!parts.length) {\n return null\n }\n\n const utility = parts[parts.length - 1]\n const variants = parts.slice(0, -1)\n\n if (!utility.includes('-[') || !utility.endsWith(']')) {\n return null\n }\n\n return {\n raw: token,\n variants,\n utility,\n }\n}\n\nexport function camelToKebab(value: string): string {\n if (value.startsWith('--')) {\n return value\n }\n\n return value.replace(/[A-Z]/g, (char) => `-${char.toLowerCase()}`)\n}\n\nfunction withImportant(value: DeclarationValue, important: boolean): string {\n const normalized = String(value)\n\n if (!important) {\n return normalized\n }\n\n if (/\\s!important\\s*$/i.test(normalized)) {\n return normalized\n }\n\n return `${normalized} !important`\n}\n\nfunction objectToDeclarations(\n declaration: DeclarationMap,\n important: boolean\n): string[] {\n return Object.entries(declaration).map(([prop, value]) => {\n return `${camelToKebab(prop)}: ${withImportant(value, important)};`\n })\n}\n\nfunction normalizeDeclarations(\n declaration: DeclarationMap | string[],\n important: boolean\n): string[] {\n if (Array.isArray(declaration)) {\n return declaration\n }\n\n return objectToDeclarations(declaration, important)\n}\n\nexport function defineRule(options: RuleOptions): UtilityRule {\n const important = options.important ?? true\n\n return {\n name: options.name,\n\n match(utility: string): RuleMatch | null {\n options.matcher.lastIndex = 0\n\n const match = utility.match(options.matcher)\n\n if (!match) {\n return null\n }\n\n const rawValue = match[1]\n\n if (!rawValue) {\n return null\n }\n\n const value = normalizeValue(rawValue)\n\n if (!value || !isSafeCssValue(value)) {\n return null\n }\n\n if (options.validate && !options.validate(value)) {\n return null\n }\n\n return {\n declarations: normalizeDeclarations(\n options.declaration(value),\n important\n ),\n }\n },\n }\n}\n\nexport const createArbitraryRule = defineRule\n\nexport function resolveRule(\n utility: string,\n rules: UtilityRule[]\n): CssBody | null {\n for (const rule of rules) {\n const match = rule.match(utility)\n\n if (match) {\n return {\n declarations: match.declarations,\n }\n }\n }\n\n return null\n}\n\nfunction formatMathFunctions(value: string): string {\n return value.replace(\n /\\b(calc|min|max|clamp)\\(([^()]+)\\)/g,\n (_match, fn: string, expr: string) => {\n const formatted = expr\n .replace(/\\s*([+\\-*/])\\s*/g, ' $1 ')\n .replace(/\\s+/g, ' ')\n .trim()\n\n return `${fn}(${formatted})`\n }\n )\n}\n\nfunction applySelectorVariant(\n selector: string,\n variant: VariantDefinition\n): string | null {\n if (variant.kind === 'pseudo') {\n return `${selector}:${variant.value}`\n }\n\n if (variant.kind === 'selector') {\n const template = String(variant.value)\n\n return template.includes('&')\n ? template.replace(/&/g, selector)\n : `${template} ${selector}`\n }\n\n if (variant.kind === 'attribute') {\n return `${selector}${variant.value}`\n }\n\n return null\n}\n\nexport function buildCssRule(\n parsed: ParsedToken,\n cssBody: CssBody,\n breakpoints: Record<string, number> = DEFAULT_BREAKPOINTS,\n variants: VariantMap = DEFAULT_VARIANTS\n): string | null {\n let selector = `.${escapeCssSelector(parsed.raw)}`\n const mediaVariants: string[] = []\n\n for (const variantName of parsed.variants) {\n if (variantName in breakpoints) {\n mediaVariants.push(variantName)\n continue\n }\n\n const variant = variants[variantName]\n\n if (!variant) {\n return null\n }\n\n if (variant.kind === 'media') {\n mediaVariants.push(variantName)\n continue\n }\n\n const nextSelector = applySelectorVariant(selector, variant)\n\n if (!nextSelector) {\n return null\n }\n\n selector = nextSelector\n }\n\n const body = cssBody.declarations\n .map((decl) => {\n return decl.replace(\n /:\\s*([^;]+)(;?)$/,\n (_match, value: string, semicolon: string) => {\n return `: ${formatMathFunctions(value.trim())}${semicolon}`\n }\n )\n })\n .join('')\n\n let result = `${selector}{${body}}`\n\n for (const variantName of mediaVariants.reverse()) {\n const customVariant = variants[variantName]\n const minWidth =\n typeof customVariant?.value === 'number'\n ? customVariant.value\n : breakpoints[variantName]\n\n if (typeof minWidth !== 'number') {\n return null\n }\n\n result = `@media (min-width: ${minWidth}px) { ${result} }`\n }\n\n return result\n}\n","const CSS_NUMBER_RE = /^-?(?:\\d+|\\d*\\.\\d+)$/\n\nconst CSS_LENGTH_UNIT_RE =\n /(?:px|r?em|%|vw|vh|svw|svh|lvw|lvh|dvw|dvh|vmin|vmax|ch|ex|cm|mm|in|pt|pc)/\n\nconst CSS_LENGTH_RE = new RegExp(\n `^-?(?:\\\\d+|\\\\d*\\\\.\\\\d+)${CSS_LENGTH_UNIT_RE.source}$`\n)\n\nconst CSS_COLOR_KEYWORDS = new Set([\n 'transparent',\n 'currentColor',\n 'inherit',\n 'initial',\n 'unset',\n 'revert',\n])\n\nconst CSS_GLOBAL_VALUES = new Set([\n 'inherit',\n 'initial',\n 'unset',\n 'revert',\n 'revert-layer',\n])\n\nexport function isNumberValue(value: string): boolean {\n return CSS_NUMBER_RE.test(value)\n}\n\nexport function isZeroValue(value: string): boolean {\n return value === '0' || value === '-0'\n}\n\nexport function isCssGlobalValue(value: string): boolean {\n return CSS_GLOBAL_VALUES.has(value)\n}\n\nexport function isFunctionalCssValue(value: string): boolean {\n return /^(?:calc|min|max|clamp|var)\\(.+\\)$/.test(value)\n}\n\nexport function isLengthLikeValue(value: string): boolean {\n return isZeroValue(value) || CSS_LENGTH_RE.test(value) || isFunctionalCssValue(value)\n}\n\nexport function isLengthListValue(value: string, maxItems = 4): boolean {\n const items = value.trim().split(/\\s+/)\n\n if (items.length === 0 || items.length > maxItems) {\n return false\n }\n\n return items.every((item) => isLengthLikeValue(item))\n}\n\nexport function isSizeValue(value: string): boolean {\n return isCssGlobalValue(value) || value === 'auto' || isLengthLikeValue(value)\n}\n\nexport function isPaddingValue(value: string): boolean {\n return isCssGlobalValue(value) || isLengthListValue(value, 4)\n}\n\nexport function isMarginValue(value: string): boolean {\n if (isCssGlobalValue(value)) {\n return true\n }\n\n const items = value.trim().split(/\\s+/)\n\n if (items.length === 0 || items.length > 4) {\n return false\n }\n\n return items.every((item) => item === 'auto' || isLengthLikeValue(item))\n}\n\nexport function isRadiusValue(value: string): boolean {\n return isCssGlobalValue(value) || isLengthListValue(value, 4)\n}\n\nexport function isPositionValue(value: string): boolean {\n return isCssGlobalValue(value) || value === 'auto' || isLengthLikeValue(value)\n}\n\nexport function isZIndexValue(value: string): boolean {\n return (\n isCssGlobalValue(value) ||\n value === 'auto' ||\n CSS_NUMBER_RE.test(value) ||\n /^var\\(.+\\)$/.test(value)\n )\n}\n\nexport function isOpacityValue(value: string): boolean {\n if (isCssGlobalValue(value)) {\n return true\n }\n\n if (!CSS_NUMBER_RE.test(value)) {\n return /^var\\(.+\\)$/.test(value)\n }\n\n const numeric = Number(value)\n\n return numeric >= 0 && numeric <= 1\n}\n\nexport function isColorValue(value: string): boolean {\n return (\n isCssGlobalValue(value) ||\n CSS_COLOR_KEYWORDS.has(value) ||\n /^#[0-9a-fA-F]{3,8}$/.test(value) ||\n /^(?:rgb|rgba|hsl|hsla|oklch|oklab|color)\\(.+\\)$/.test(value) ||\n /^var\\(.+\\)$/.test(value)\n )\n}\n","import { defineRule } from './core'\nimport {\n isColorValue,\n isMarginValue,\n isOpacityValue,\n isPaddingValue,\n isPositionValue,\n isRadiusValue,\n isSizeValue,\n isZIndexValue,\n} from './validators'\n\nexport const defaultRules = [\n defineRule({\n name: 'width',\n matcher: /^w-\\[(.+)\\]$/,\n validate: isSizeValue,\n declaration: (value) => ({\n width: value,\n }),\n }),\n\n defineRule({\n name: 'height',\n matcher: /^h-\\[(.+)\\]$/,\n validate: isSizeValue,\n declaration: (value) => ({\n height: value,\n }),\n }),\n\n defineRule({\n name: 'min-width',\n matcher: /^min-w-\\[(.+)\\]$/,\n validate: isSizeValue,\n declaration: (value) => ({\n minWidth: value,\n }),\n }),\n\n defineRule({\n name: 'max-width',\n matcher: /^max-w-\\[(.+)\\]$/,\n validate: isSizeValue,\n declaration: (value) => ({\n maxWidth: value,\n }),\n }),\n\n defineRule({\n name: 'min-height',\n matcher: /^min-h-\\[(.+)\\]$/,\n validate: isSizeValue,\n declaration: (value) => ({\n minHeight: value,\n }),\n }),\n\n defineRule({\n name: 'max-height',\n matcher: /^max-h-\\[(.+)\\]$/,\n validate: isSizeValue,\n declaration: (value) => ({\n maxHeight: value,\n }),\n }),\n\n defineRule({\n name: 'z-index',\n matcher: /^z-\\[(.+)\\]$/,\n validate: isZIndexValue,\n declaration: (value) => ({\n zIndex: value,\n }),\n }),\n\n defineRule({\n name: 'margin',\n matcher: /^ma-\\[(.+)\\]$/,\n validate: isMarginValue,\n declaration: (value) => ({\n margin: value,\n }),\n }),\n\n defineRule({\n name: 'margin-x',\n matcher: /^mx-\\[(.+)\\]$/,\n validate: isMarginValue,\n declaration: (value) => ({\n marginLeft: value,\n marginRight: value,\n }),\n }),\n\n defineRule({\n name: 'margin-y',\n matcher: /^my-\\[(.+)\\]$/,\n validate: isMarginValue,\n declaration: (value) => ({\n marginTop: value,\n marginBottom: value,\n }),\n }),\n\n defineRule({\n name: 'margin-bottom',\n matcher: /^mb-\\[(.+)\\]$/,\n validate: isMarginValue,\n declaration: (value) => ({\n marginBottom: value,\n }),\n }),\n\n defineRule({\n name: 'margin-top',\n matcher: /^mt-\\[(.+)\\]$/,\n validate: isMarginValue,\n declaration: (value) => ({\n marginTop: value,\n }),\n }),\n\n defineRule({\n name: 'margin-left',\n matcher: /^ml-\\[(.+)\\]$/,\n validate: isMarginValue,\n declaration: (value) => ({\n marginLeft: value,\n }),\n }),\n\n defineRule({\n name: 'margin-right',\n matcher: /^mr-\\[(.+)\\]$/,\n validate: isMarginValue,\n declaration: (value) => ({\n marginRight: value,\n }),\n }),\n\n defineRule({\n name: 'padding',\n matcher: /^pa-\\[(.+)\\]$/,\n validate: isPaddingValue,\n declaration: (value) => ({\n padding: value,\n }),\n }),\n\n defineRule({\n name: 'padding-x',\n matcher: /^px-\\[(.+)\\]$/,\n validate: isPaddingValue,\n declaration: (value) => ({\n paddingLeft: value,\n paddingRight: value,\n }),\n }),\n\n defineRule({\n name: 'padding-y',\n matcher: /^py-\\[(.+)\\]$/,\n validate: isPaddingValue,\n declaration: (value) => ({\n paddingTop: value,\n paddingBottom: value,\n }),\n }),\n\n defineRule({\n name: 'padding-bottom',\n matcher: /^pb-\\[(.+)\\]$/,\n validate: isPaddingValue,\n declaration: (value) => ({\n paddingBottom: value,\n }),\n }),\n\n defineRule({\n name: 'padding-top',\n matcher: /^pt-\\[(.+)\\]$/,\n validate: isPaddingValue,\n declaration: (value) => ({\n paddingTop: value,\n }),\n }),\n\n defineRule({\n name: 'padding-left',\n matcher: /^pl-\\[(.+)\\]$/,\n validate: isPaddingValue,\n declaration: (value) => ({\n paddingLeft: value,\n }),\n }),\n\n defineRule({\n name: 'padding-right',\n matcher: /^pr-\\[(.+)\\]$/,\n validate: isPaddingValue,\n declaration: (value) => ({\n paddingRight: value,\n }),\n }),\n\n defineRule({\n name: 'left',\n matcher: /^left-\\[(.+)\\]$/,\n validate: isPositionValue,\n declaration: (value) => ({\n left: value,\n }),\n }),\n\n defineRule({\n name: 'right',\n matcher: /^right-\\[(.+)\\]$/,\n validate: isPositionValue,\n declaration: (value) => ({\n right: value,\n }),\n }),\n\n defineRule({\n name: 'top',\n matcher: /^top-\\[(.+)\\]$/,\n validate: isPositionValue,\n declaration: (value) => ({\n top: value,\n }),\n }),\n\n defineRule({\n name: 'bottom',\n matcher: /^bottom-\\[(.+)\\]$/,\n validate: isPositionValue,\n declaration: (value) => ({\n bottom: value,\n }),\n }),\n\n defineRule({\n name: 'inset',\n matcher: /^inset-\\[(.+)\\]$/,\n validate: isPositionValue,\n declaration: (value) => ({\n inset: value,\n }),\n }),\n\n defineRule({\n name: 'radius',\n matcher: /^radius-\\[(.+)\\]$/,\n validate: isRadiusValue,\n declaration: (value) => ({\n borderRadius: value,\n }),\n }),\n\n defineRule({\n name: 'radius-top-left',\n matcher: /^radius-tl-\\[(.+)\\]$/,\n validate: isRadiusValue,\n declaration: (value) => ({\n borderTopLeftRadius: value,\n }),\n }),\n\n defineRule({\n name: 'radius-top-right',\n matcher: /^radius-tr-\\[(.+)\\]$/,\n validate: isRadiusValue,\n declaration: (value) => ({\n borderTopRightRadius: value,\n }),\n }),\n\n defineRule({\n name: 'radius-bottom-left',\n matcher: /^radius-bl-\\[(.+)\\]$/,\n validate: isRadiusValue,\n declaration: (value) => ({\n borderBottomLeftRadius: value,\n }),\n }),\n\n defineRule({\n name: 'radius-bottom-right',\n matcher: /^radius-br-\\[(.+)\\]$/,\n validate: isRadiusValue,\n declaration: (value) => ({\n borderBottomRightRadius: value,\n }),\n }),\n\n defineRule({\n name: 'opacity',\n matcher: /^opacity-\\[(.+)\\]$/,\n validate: isOpacityValue,\n declaration: (value) => ({\n opacity: value,\n }),\n }),\n\n defineRule({\n name: 'color',\n matcher: /^color-\\[(.+)\\]$/,\n validate: isColorValue,\n declaration: (value) => ({\n color: value,\n }),\n }),\n\n defineRule({\n name: 'background-color',\n matcher: /^bg-\\[(.+)\\]$/,\n validate: isColorValue,\n declaration: (value) => ({\n backgroundColor: value,\n }),\n }),\n]\n","import * as fs from 'node:fs'\nimport * as path from 'node:path'\nimport type { Plugin, ViteDevServer } from 'vite'\nimport type { JitOptions, ParsedToken, Pattern, ResolvedJitOptions, UtilityRule } from './types'\nimport { defaultRules } from './rules'\nimport {\n buildCssRule,\n DEFAULT_BREAKPOINTS,\n DEFAULT_EXCLUDE,\n DEFAULT_INCLUDE,\n DEFAULT_VARIANTS,\n parseToken,\n resolveRule,\n shouldProcess,\n tokenize,\n} from './core'\n\nfunction resolveOptions(options: JitOptions = {}): ResolvedJitOptions {\n return {\n include: options.include ?? DEFAULT_INCLUDE,\n exclude: [\n ...DEFAULT_EXCLUDE,\n ...(options.exclude ?? []),\n ],\n outFile: options.outFile ?? 'src/.generated/utils-jit.css',\n breakpoints: {\n ...DEFAULT_BREAKPOINTS,\n ...(options.breakpoints ?? {}),\n },\n rules: options.rules ?? [],\n variants: {\n ...DEFAULT_VARIANTS,\n ...(options.variants ?? {}),\n },\n banner: options.banner ?? '/* @vueland/utils-jit: generated utilities */',\n emitEmptyFile: options.emitEmptyFile ?? true,\n debug: options.debug ?? false,\n }\n}\n\nfunction normalizePath(value: string): string {\n return value.replace(/\\\\/g, '/')\n}\n\nfunction isSameFile(a: string, b: string): boolean {\n return normalizePath(path.resolve(a)) === normalizePath(path.resolve(b))\n}\n\nfunction matchesPattern(value: string, pattern: Pattern): boolean {\n const normalized = normalizePath(value)\n\n if (typeof pattern === 'string') {\n return normalized.includes(normalizePath(pattern))\n }\n\n pattern.lastIndex = 0\n\n return pattern.test(normalized)\n}\n\nfunction isExcluded(file: string, exclude: Pattern[]): boolean {\n return exclude.some((pattern) => matchesPattern(file, pattern))\n}\n\nfunction collectProjectFiles(\n root: string,\n options: ResolvedJitOptions,\n outFile: string\n): string[] {\n const files: string[] = []\n\n function walk(dir: string): void {\n if (isExcluded(dir, options.exclude)) {\n return\n }\n\n let entries: fs.Dirent[]\n\n try {\n entries = fs.readdirSync(dir, { withFileTypes: true })\n } catch {\n return\n }\n\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name)\n\n if (entry.isDirectory()) {\n walk(fullPath)\n continue\n }\n\n if (!entry.isFile()) {\n continue\n }\n\n if (isSameFile(fullPath, outFile)) {\n continue\n }\n\n if (shouldProcess(fullPath, options.include, options.exclude)) {\n files.push(fullPath)\n }\n }\n }\n\n walk(root)\n\n return files\n}\n\nfunction readFileSafe(file: string): string | null {\n try {\n return fs.readFileSync(file, 'utf8')\n } catch {\n return null\n }\n}\n\nexport function utilsJIT(options?: JitOptions): Plugin {\n const resolvedOptions = resolveOptions(options)\n\n let root = process.cwd()\n let outFile = ''\n let devServer: ViteDevServer | null = null\n let currentCss = ''\n\n const allRules: UtilityRule[] = [\n ...defaultRules,\n ...resolvedOptions.rules,\n ]\n\n const fileToTokens = new Map<string, Set<string>>()\n const tokenRefCount = new Map<string, number>()\n const tokenParseCache = new Map<string, ParsedToken | null>()\n const tokenCssCache = new Map<string, string | null>()\n const activeCssRules = new Map<string, string>()\n\n function debug(message: string): void {\n if (resolvedOptions.debug) {\n console.info(`[utils-jit] ${message}`)\n }\n }\n\n function notifyCssChanged(): void {\n if (!devServer || !outFile) {\n return\n }\n\n devServer.watcher.emit('change', outFile)\n }\n\n function getParsedToken(token: string): ParsedToken | null {\n if (tokenParseCache.has(token)) {\n return tokenParseCache.get(token) ?? null\n }\n\n const parsed = parseToken(token)\n\n tokenParseCache.set(token, parsed)\n\n return parsed\n }\n\n function getCssRuleForToken(token: string): string | null {\n if (tokenCssCache.has(token)) {\n return tokenCssCache.get(token) ?? null\n }\n\n const parsed = getParsedToken(token)\n\n if (!parsed) {\n tokenCssCache.set(token, null)\n return null\n }\n\n const cssBody = resolveRule(parsed.utility, allRules)\n\n if (!cssBody) {\n tokenCssCache.set(token, null)\n return null\n }\n\n const cssRule = buildCssRule(\n parsed,\n cssBody,\n resolvedOptions.breakpoints,\n resolvedOptions.variants\n )\n\n tokenCssCache.set(token, cssRule)\n\n return cssRule\n }\n\n function buildFinalCss(): string {\n if (!activeCssRules.size) {\n return resolvedOptions.emitEmptyFile\n ? '/* @vueland/utils-jit: no utilities found */\\n'\n : ''\n }\n\n const sortedRules = Array.from(activeCssRules.entries())\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([, cssRule]) => cssRule)\n\n return [\n resolvedOptions.banner,\n ...sortedRules,\n '',\n ].join('\\n')\n }\n\n function writeCssFile(notify = false): void {\n if (!outFile) {\n return\n }\n\n const nextCss = buildFinalCss()\n\n if (nextCss === currentCss) {\n return\n }\n\n currentCss = nextCss\n\n fs.mkdirSync(path.dirname(outFile), { recursive: true })\n fs.writeFileSync(outFile, currentCss, 'utf8')\n\n if (devServer) {\n devServer.watcher.add(outFile)\n }\n\n if (notify) {\n notifyCssChanged()\n }\n\n debug(`wrote ${normalizePath(path.relative(root, outFile))}`)\n }\n\n function activateToken(token: string): void {\n const prevCount = tokenRefCount.get(token) ?? 0\n const nextCount = prevCount + 1\n\n tokenRefCount.set(token, nextCount)\n\n if (prevCount === 0) {\n const cssRule = getCssRuleForToken(token)\n\n if (cssRule) {\n activeCssRules.set(token, cssRule)\n }\n }\n }\n\n function deactivateToken(token: string): void {\n const prevCount = tokenRefCount.get(token) ?? 0\n\n if (prevCount <= 0) {\n return\n }\n\n const nextCount = prevCount - 1\n\n if (nextCount === 0) {\n tokenRefCount.delete(token)\n activeCssRules.delete(token)\n return\n }\n\n tokenRefCount.set(token, nextCount)\n }\n\n function applyFileTokens(file: string, nextTokens: Set<string>): void {\n const normalizedFile = normalizePath(file)\n const prevTokens = fileToTokens.get(normalizedFile) ?? new Set<string>()\n\n for (const token of prevTokens) {\n if (!nextTokens.has(token)) {\n deactivateToken(token)\n }\n }\n\n for (const token of nextTokens) {\n if (!prevTokens.has(token)) {\n activateToken(token)\n }\n }\n\n if (nextTokens.size > 0) {\n fileToTokens.set(normalizedFile, nextTokens)\n } else {\n fileToTokens.delete(normalizedFile)\n }\n }\n\n function rebuildAll(notify = false): void {\n fileToTokens.clear()\n tokenRefCount.clear()\n activeCssRules.clear()\n\n const files = collectProjectFiles(root, resolvedOptions, outFile)\n\n for (const file of files) {\n const code = readFileSafe(file)\n\n if (code === null) {\n continue\n }\n\n const tokens = tokenize(code)\n\n if (tokens.size > 0) {\n fileToTokens.set(normalizePath(file), tokens)\n\n for (const token of tokens) {\n const count = tokenRefCount.get(token) ?? 0\n\n tokenRefCount.set(token, count + 1)\n }\n }\n }\n\n for (const [token, count] of tokenRefCount) {\n if (count <= 0) {\n continue\n }\n\n const cssRule = getCssRuleForToken(token)\n\n if (cssRule) {\n activeCssRules.set(token, cssRule)\n }\n }\n\n writeCssFile(notify)\n\n debug(`scanned ${files.length} files, found ${activeCssRules.size} utilities`)\n }\n\n function rebuildOne(file: string, code: string, notify = false): void {\n if (isSameFile(file, outFile)) {\n return\n }\n\n if (!shouldProcess(file, resolvedOptions.include, resolvedOptions.exclude)) {\n return\n }\n\n const nextTokens = tokenize(code)\n\n applyFileTokens(file, nextTokens)\n writeCssFile(notify)\n }\n\n function removeOne(file: string, notify = false): void {\n if (isSameFile(file, outFile)) {\n return\n }\n\n const normalizedFile = normalizePath(file)\n const prevTokens = fileToTokens.get(normalizedFile)\n\n if (!prevTokens) {\n return\n }\n\n for (const token of prevTokens) {\n deactivateToken(token)\n }\n\n fileToTokens.delete(normalizedFile)\n writeCssFile(notify)\n }\n\n return {\n name: 'utils-jit',\n enforce: 'pre',\n\n configResolved(config) {\n root = config.root\n outFile = path.resolve(root, resolvedOptions.outFile)\n rebuildAll(false)\n },\n\n configureServer(server) {\n devServer = server\n\n if (outFile) {\n server.watcher.add(outFile)\n }\n },\n\n buildStart() {\n rebuildAll(false)\n },\n\n transform(code, id) {\n const file = id.split('?')[0]\n\n if (!file || isSameFile(file, outFile)) {\n return null\n }\n\n rebuildOne(file, code, false)\n\n return null\n },\n\n async handleHotUpdate(ctx) {\n const { file } = ctx\n\n if (isSameFile(file, outFile)) {\n return\n }\n\n if (!shouldProcess(file, resolvedOptions.include, resolvedOptions.exclude)) {\n return\n }\n\n const code = await ctx.read()\n\n rebuildOne(file, code, true)\n },\n\n watchChange(id, change) {\n const file = id.split('?')[0]\n\n if (!file || isSameFile(file, outFile)) {\n return\n }\n\n if (change.event === 'delete') {\n removeOne(file, true)\n return\n }\n\n if (!shouldProcess(file, resolvedOptions.include, resolvedOptions.exclude)) {\n return\n }\n\n const code = readFileSafe(file)\n\n if (code !== null) {\n rebuildOne(file, code, true)\n }\n },\n }\n}\n"],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "@vueland/utils-jit",
3
+ "description": "Vite JIT utility engine for Vueland",
4
+ "version": "0.2.0",
5
+ "type": "module",
6
+ "private": false,
7
+ "main": "./dist/index.cjs",
8
+ "module": "./dist/index.mjs",
9
+ "types": "./dist/index.d.cts",
10
+ "exports": {
11
+ ".": {
12
+ "types": "./dist/index.d.cts",
13
+ "import": "./dist/index.mjs",
14
+ "require": "./dist/index.cjs"
15
+ }
16
+ },
17
+ "files": [
18
+ "dist"
19
+ ],
20
+ "sideEffects": false,
21
+ "peerDependencies": {
22
+ "vite": "^7.0.0"
23
+ },
24
+ "devDependencies": {
25
+ "@types/node": "^25.4.0",
26
+ "tsdown": "^0.21.2",
27
+ "typescript": "^5.7.3",
28
+ "vitest": "^3.2.4"
29
+ },
30
+ "scripts": {
31
+ "build-jit": "tsdown",
32
+ "dev": "tsdown --watch",
33
+ "clean": "rm -rf dist",
34
+ "test:deploy": "vitest run -c vitest.config.ts",
35
+ "test:jit": "vitest run -c vitest.config.ts",
36
+ "lint:jit": "eslint ."
37
+ }
38
+ }