catom 3.0.0 → 3.5.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.
- package/dist/vite/index.d.ts +2 -2
- package/dist/vite/index.js +27 -12
- package/dist/vite/index.js.map +1 -1
- package/package.json +1 -1
package/dist/vite/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { PluginOption } from 'vite';
|
|
2
2
|
import { Properties } from 'csstype';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -48,6 +48,6 @@ interface CatomPluginOptions {
|
|
|
48
48
|
functionName?: string;
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
declare function catomPlugin(options?: CatomPluginOptions):
|
|
51
|
+
declare function catomPlugin(options?: CatomPluginOptions): PluginOption;
|
|
52
52
|
|
|
53
53
|
export { type CSSInput, type CSSRule, type CatomPluginOptions, catomPlugin, catomPlugin as default };
|
package/dist/vite/index.js
CHANGED
|
@@ -284,7 +284,7 @@ function isTargetImport(spec, functionName) {
|
|
|
284
284
|
}
|
|
285
285
|
return false;
|
|
286
286
|
}
|
|
287
|
-
function findCatomImports(ast, functionName) {
|
|
287
|
+
function findCatomImports(ast, functionName, baseOffset) {
|
|
288
288
|
const importsToRemove = [];
|
|
289
289
|
for (const node of ast.body) {
|
|
290
290
|
if (node.type !== "ImportDeclaration") continue;
|
|
@@ -295,9 +295,8 @@ function findCatomImports(ast, functionName) {
|
|
|
295
295
|
if (!hasCssImport) continue;
|
|
296
296
|
if (specifiers.length === 1) {
|
|
297
297
|
importsToRemove.push({
|
|
298
|
-
start: node.span.start - 1,
|
|
299
|
-
|
|
300
|
-
end: node.span.end - 1,
|
|
298
|
+
start: node.span.start - 1 - baseOffset,
|
|
299
|
+
end: node.span.end - 1 - baseOffset,
|
|
301
300
|
isFullImport: true
|
|
302
301
|
});
|
|
303
302
|
} else {
|
|
@@ -305,8 +304,8 @@ function findCatomImports(ast, functionName) {
|
|
|
305
304
|
if (isTargetImport(spec, functionName)) {
|
|
306
305
|
const s = spec;
|
|
307
306
|
importsToRemove.push({
|
|
308
|
-
start: s.span.start - 1,
|
|
309
|
-
end: s.span.end - 1,
|
|
307
|
+
start: s.span.start - 1 - baseOffset,
|
|
308
|
+
end: s.span.end - 1 - baseOffset,
|
|
310
309
|
isFullImport: false
|
|
311
310
|
});
|
|
312
311
|
}
|
|
@@ -355,12 +354,13 @@ function transformCode(code, id, functionName = "css") {
|
|
|
355
354
|
if (replacements.size === 0) {
|
|
356
355
|
return { code, cssRules: [], transformed: false };
|
|
357
356
|
}
|
|
358
|
-
const
|
|
357
|
+
const baseOffset = ast.span.start - 1;
|
|
358
|
+
const importsToRemove = findCatomImports(ast, functionName, baseOffset);
|
|
359
359
|
let result = code;
|
|
360
360
|
const modifications = [];
|
|
361
361
|
for (const [start, classNames] of replacements) {
|
|
362
|
-
const
|
|
363
|
-
const cssCallMatch = findCSSCallBounds(result,
|
|
362
|
+
const adjustedStart = start - 1 - baseOffset;
|
|
363
|
+
const cssCallMatch = findCSSCallBounds(result, adjustedStart, functionName);
|
|
364
364
|
if (cssCallMatch) {
|
|
365
365
|
modifications.push({
|
|
366
366
|
start: cssCallMatch.start,
|
|
@@ -427,9 +427,13 @@ function catomPlugin(options = {}) {
|
|
|
427
427
|
} = options;
|
|
428
428
|
const moduleCSS = /* @__PURE__ */ new Map();
|
|
429
429
|
let filter;
|
|
430
|
+
let server = null;
|
|
430
431
|
return {
|
|
431
432
|
name: "vite-plugin-catom",
|
|
432
433
|
enforce: "pre",
|
|
434
|
+
configureServer(devServer) {
|
|
435
|
+
server = devServer;
|
|
436
|
+
},
|
|
433
437
|
configResolved() {
|
|
434
438
|
filter = createFilter(include, exclude);
|
|
435
439
|
},
|
|
@@ -466,9 +470,20 @@ function catomPlugin(options = {}) {
|
|
|
466
470
|
map: null
|
|
467
471
|
};
|
|
468
472
|
},
|
|
469
|
-
|
|
470
|
-
if (
|
|
471
|
-
|
|
473
|
+
handleHotUpdate(ctx) {
|
|
474
|
+
if (!filter(ctx.file)) return;
|
|
475
|
+
const hasOrHadCSS = moduleCSS.has(ctx.file) || ctx.modules.some((m) => moduleCSS.has(m.id || ""));
|
|
476
|
+
if (hasOrHadCSS) {
|
|
477
|
+
ctx.modules.forEach((mod) => {
|
|
478
|
+
server?.moduleGraph.invalidateModule(mod);
|
|
479
|
+
});
|
|
480
|
+
const virtualMod = server?.moduleGraph.getModuleById(RESOLVED_VIRTUAL_MODULE_ID);
|
|
481
|
+
if (virtualMod) {
|
|
482
|
+
server?.moduleGraph.invalidateModule(virtualMod);
|
|
483
|
+
}
|
|
484
|
+
moduleCSS.delete(ctx.file);
|
|
485
|
+
server?.ws.send({ type: "full-reload" });
|
|
486
|
+
return [];
|
|
472
487
|
}
|
|
473
488
|
}
|
|
474
489
|
};
|
package/dist/vite/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/hash.ts","../../src/core/css-generator.ts","../../src/vite/transform.ts","../../src/vite/index.ts"],"names":["rules"],"mappings":"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","file":"index.js","sourcesContent":["// Murmur2 hash (from emotion-js)\n// https://github.com/emotion-js/emotion/blob/master/packages/hash/src/index.js\nexport function murmur2(str: string): string {\n let h = 0\n let k: number\n let i = 0\n let len = str.length\n\n for (; len >= 4; ++i, len -= 4) {\n k =\n (str.charCodeAt(i) & 0xff) |\n ((str.charCodeAt(++i) & 0xff) << 8) |\n ((str.charCodeAt(++i) & 0xff) << 16) |\n ((str.charCodeAt(++i) & 0xff) << 24)\n\n k =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + (((k >>> 16) * 0xe995) << 16)\n k ^= /* k >>> r: */ k >>> 24\n\n h =\n /* Math.imul(k, m): */\n ((k & 0xffff) * 0x5bd1e995 + (((k >>> 16) * 0xe995) << 16)) ^\n /* Math.imul(h, m): */\n ((h & 0xffff) * 0x5bd1e995 + (((h >>> 16) * 0xe995) << 16))\n }\n\n if (len >= 3) h ^= (str.charCodeAt(i + 2) & 0xff) << 16\n if (len >= 2) h ^= (str.charCodeAt(i + 1) & 0xff) << 8\n if (len >= 1) {\n h ^= str.charCodeAt(i) & 0xff\n h = (h & 0xffff) * 0x5bd1e995 + (((h >>> 16) * 0xe995) << 16)\n }\n\n h ^= h >>> 13\n h = (h & 0xffff) * 0x5bd1e995 + (((h >>> 16) * 0xe995) << 16)\n\n return ((h ^ (h >>> 15)) >>> 0).toString(36)\n}\n\nconst PREFIX_CHARS = new Set('0123456789-'.split(''))\n\nexport function makeCSSCompatible(hash: string): string {\n if (PREFIX_CHARS.has(hash[0])) {\n return `_${hash}`\n }\n return hash\n}\n\nexport function generateHash(identity: string): string {\n return makeCSSCompatible(murmur2(identity))\n}\n","import { generateHash } from './hash.js'\nimport type { CSSRule } from './types.js'\n\nconst KEBAB_CASE_REGEX = /([a-z0-9]|(?=[A-Z]))([A-Z])/g\n\nexport function toKebabCase(property: string): string {\n return property.replace(KEBAB_CASE_REGEX, '$1-$2').toLowerCase()\n}\n\nexport function createRuleIdentity(\n property: string,\n value: string,\n media?: string,\n pseudo?: string\n): string {\n const mediaPrefix = media ? `@${media.trim()}` : ''\n const pseudoPrefix = pseudo ? pseudo.trim() : ''\n const kebabProp = toKebabCase(property)\n return `${mediaPrefix}${pseudoPrefix}${kebabProp}:${value};`\n}\n\nexport function createCSSRule(\n property: string,\n value: string | number,\n media?: string,\n pseudo?: string\n): CSSRule {\n const stringValue = String(value).trim()\n const kebabProperty = toKebabCase(property.trim())\n const identity = createRuleIdentity(property, stringValue, media, pseudo)\n const hash = generateHash(identity)\n\n return {\n hash,\n property: kebabProperty,\n value: stringValue,\n media: media?.trim(),\n pseudo: pseudo?.trim(),\n }\n}\n\nexport function deduplicateRules(rules: CSSRule[]): CSSRule[] {\n const seen = new Map<string, CSSRule>()\n\n for (const rule of rules) {\n const identity = createRuleIdentity(rule.property, rule.value, rule.media, rule.pseudo)\n if (!seen.has(identity)) {\n seen.set(identity, rule)\n }\n }\n\n return Array.from(seen.values())\n}\n\ninterface GroupedRule {\n declaration: string\n hashes: Set<string>\n media?: string\n pseudo?: string\n}\n\nfunction groupRulesByDeclaration(rules: CSSRule[]): GroupedRule[] {\n const groups = new Map<string, GroupedRule>()\n\n for (const rule of rules) {\n const declaration = `${rule.property}:${rule.value};`\n const groupKey = `${rule.media || ''}|${rule.pseudo || ''}|${declaration}`\n\n if (!groups.has(groupKey)) {\n groups.set(groupKey, {\n declaration,\n hashes: new Set(),\n media: rule.media,\n pseudo: rule.pseudo,\n })\n }\n groups.get(groupKey)!.hashes.add(rule.hash)\n }\n\n return Array.from(groups.values())\n}\n\nexport function generateCSS(rules: CSSRule[]): string {\n const dedupedRules = deduplicateRules(rules)\n\n const regularRules: CSSRule[] = []\n const pseudoRules: CSSRule[] = []\n const mediaRules = new Map<string, CSSRule[]>()\n\n for (const rule of dedupedRules) {\n if (rule.media) {\n const existing = mediaRules.get(rule.media) || []\n existing.push(rule)\n mediaRules.set(rule.media, existing)\n } else if (rule.pseudo) {\n pseudoRules.push(rule)\n } else {\n regularRules.push(rule)\n }\n }\n\n const cssLines: string[] = []\n\n const regularGroups = groupRulesByDeclaration(regularRules)\n for (const group of regularGroups.sort((a, b) => a.declaration.localeCompare(b.declaration))) {\n const selectors = Array.from(group.hashes)\n .sort()\n .map((h) => `.${h}`)\n .join(',\\n')\n cssLines.push(`${selectors} { ${group.declaration} }`)\n }\n\n const pseudoGroups = groupRulesByDeclaration(pseudoRules)\n for (const group of pseudoGroups.sort((a, b) => a.declaration.localeCompare(b.declaration))) {\n const selectors = Array.from(group.hashes)\n .sort()\n .map((h) => `.${h}${group.pseudo}`)\n .join(',\\n')\n cssLines.push(`${selectors} { ${group.declaration} }`)\n }\n\n const sortedMediaQueries = Array.from(mediaRules.entries()).sort(([a], [b]) =>\n a.localeCompare(b)\n )\n\n for (const [query, rules] of sortedMediaQueries) {\n const mediaGroups = groupRulesByDeclaration(rules)\n const mediaLines: string[] = []\n\n for (const group of mediaGroups.sort((a, b) => a.declaration.localeCompare(b.declaration))) {\n const suffix = group.pseudo || ''\n const selectors = Array.from(group.hashes)\n .sort()\n .map((h) => `.${h}${suffix}`)\n .join(',\\n')\n mediaLines.push(` ${selectors} { ${group.declaration} }`)\n }\n\n cssLines.push(`@media ${query} {\\n${mediaLines.join('\\n')}\\n}`)\n }\n\n return cssLines.join('\\n')\n}\n","import { parseSync } from '@swc/core'\nimport type {\n CallExpression,\n Expression,\n KeyValueProperty,\n ObjectExpression,\n Program,\n StringLiteral,\n NumericLiteral,\n} from '@swc/core'\nimport { createCSSRule } from '../core/css-generator.js'\nimport type { CSSRule, TransformResult } from '../core/types.js'\n\nfunction isLiteral(expr: Expression): expr is StringLiteral | NumericLiteral {\n return expr.type === 'StringLiteral' || expr.type === 'NumericLiteral'\n}\n\nfunction getLiteralValue(expr: StringLiteral | NumericLiteral): string | number {\n if (expr.type === 'StringLiteral') {\n return expr.value\n }\n return expr.value\n}\n\nfunction getPropertyKey(prop: KeyValueProperty): string | null {\n if (prop.key.type === 'Identifier') {\n return prop.key.value\n }\n if (prop.key.type === 'StringLiteral') {\n return prop.key.value\n }\n return null\n}\n\nfunction processPropertiesObject(\n obj: ObjectExpression,\n rules: CSSRule[],\n media?: string,\n pseudo?: string\n): void {\n for (const prop of obj.properties) {\n if (prop.type === 'SpreadElement') {\n if (prop.arguments.type === 'ObjectExpression') {\n processPropertiesObject(prop.arguments, rules, media, pseudo)\n } else {\n throw new Error(\n `[catom] Spread elements must be object literals. ` +\n `Dynamic spreads are not supported at compile time.`\n )\n }\n continue\n }\n\n if (prop.type !== 'KeyValueProperty') {\n continue\n }\n\n const keyName = getPropertyKey(prop)\n if (!keyName) {\n throw new Error(`[catom] Could not determine property key. Only identifiers and string literals are supported.`)\n }\n\n const value = prop.value\n\n if (keyName === 'media') {\n if (value.type !== 'ObjectExpression') {\n throw new Error(`[catom] 'media' property must be an object literal.`)\n }\n for (const mediaProp of value.properties) {\n if (mediaProp.type !== 'KeyValueProperty') continue\n const mediaQuery = getPropertyKey(mediaProp)\n if (!mediaQuery) continue\n if (mediaProp.value.type !== 'ObjectExpression') {\n throw new Error(`[catom] Media query '${mediaQuery}' must contain an object literal.`)\n }\n processPropertiesObject(mediaProp.value, rules, mediaQuery, pseudo)\n }\n continue\n }\n\n if (keyName === 'pseudo') {\n if (value.type !== 'ObjectExpression') {\n throw new Error(`[catom] 'pseudo' property must be an object literal.`)\n }\n for (const pseudoProp of value.properties) {\n if (pseudoProp.type !== 'KeyValueProperty') continue\n const pseudoSelector = getPropertyKey(pseudoProp)\n if (!pseudoSelector) continue\n if (pseudoProp.value.type !== 'ObjectExpression') {\n throw new Error(`[catom] Pseudo selector '${pseudoSelector}' must contain an object literal.`)\n }\n processPropertiesObject(pseudoProp.value, rules, media, pseudoSelector)\n }\n continue\n }\n\n let actualValue = value\n if (actualValue.type === 'TsAsExpression') {\n actualValue = actualValue.expression\n }\n\n if (!isLiteral(actualValue)) {\n throw new Error(\n `[catom] Property '${keyName}' has a non-literal value. ` +\n `Only string and number literals are supported at compile time. ` +\n `Got: ${actualValue.type}`\n )\n }\n\n const rule = createCSSRule(keyName, getLiteralValue(actualValue), media, pseudo)\n rules.push(rule)\n }\n}\n\nfunction processCSSCall(callExpr: CallExpression): { rules: CSSRule[]; classNames: string } {\n const rules: CSSRule[] = []\n\n if (callExpr.arguments.length === 0) {\n return { rules: [], classNames: '' }\n }\n\n const arg = callExpr.arguments[0]\n if (arg.expression.type !== 'ObjectExpression') {\n throw new Error(\n `[catom] css() must be called with an object literal. ` +\n `Got: ${arg.expression.type}`\n )\n }\n\n processPropertiesObject(arg.expression, rules)\n\n const classNames = rules.map((r) => r.hash).join(' ')\n return { rules, classNames }\n}\n\nconst METADATA_KEYS = new Set(['span', 'ctxt'])\n\nfunction isASTNode(value: unknown): value is { type: string } {\n return (\n typeof value === 'object' &&\n value !== null &&\n typeof (value as Record<string, unknown>).type === 'string'\n )\n}\n\nfunction walkAndTransform(\n node: unknown,\n functionName: string,\n allRules: CSSRule[],\n replacements: Map<number, string>,\n visited = new WeakSet<object>()\n): void {\n if (!node || typeof node !== 'object') return\n \n // Prevent cycles\n if (visited.has(node as object)) return\n visited.add(node as object)\n\n if (isCallExpression(node)) {\n const callee = node.callee\n if (\n callee.type === 'Identifier' &&\n callee.value === functionName\n ) {\n try {\n const { rules, classNames } = processCSSCall(node)\n allRules.push(...rules)\n replacements.set(node.span.start, classNames)\n } catch (error) {\n const loc = node.span\n const prefix = loc ? `[${loc.start}:${loc.end}]` : ''\n throw new Error(`${prefix} ${(error as Error).message}`)\n }\n }\n }\n\n for (const key of Object.keys(node as Record<string, unknown>)) {\n if (METADATA_KEYS.has(key)) continue\n \n const value = (node as Record<string, unknown>)[key]\n if (Array.isArray(value)) {\n for (const item of value) {\n if (isASTNode(item)) {\n walkAndTransform(item, functionName, allRules, replacements, visited)\n }\n }\n } else if (isASTNode(value)) {\n walkAndTransform(value, functionName, allRules, replacements, visited)\n }\n }\n}\n\nfunction isCallExpression(node: unknown): node is CallExpression {\n return (\n typeof node === 'object' &&\n node !== null &&\n (node as { type?: string }).type === 'CallExpression'\n )\n}\n\nfunction isTargetImport(spec: unknown, functionName: string): boolean {\n if (typeof spec !== 'object' || spec === null) return false\n const s = spec as Record<string, unknown>\n if (s.type !== 'ImportSpecifier') return false\n\n const imported = s.imported as Record<string, unknown> | null\n if (imported?.type === 'Identifier' && imported.value === functionName) {\n return true\n }\n\n const local = s.local as Record<string, unknown> | null\n if (!imported && local?.type === 'Identifier' && local.value === functionName) {\n return true\n }\n\n return false\n}\n\nfunction findCatomImports(\n ast: Program,\n functionName: string\n): Array<{ start: number; end: number; isFullImport: boolean }> {\n const importsToRemove: Array<{ start: number; end: number; isFullImport: boolean }> = []\n\n for (const node of ast.body) {\n if (node.type !== 'ImportDeclaration') continue\n\n const source = node.source.value\n if (source !== 'catom') continue\n\n const specifiers = node.specifiers || []\n const hasCssImport = specifiers.some((spec) => isTargetImport(spec, functionName))\n\n if (!hasCssImport) continue\n\n if (specifiers.length === 1) {\n importsToRemove.push({\n start: node.span.start - 1, // SWC is 1-indexed\n end: node.span.end - 1,\n isFullImport: true,\n })\n } else {\n for (const spec of specifiers) {\n if (isTargetImport(spec, functionName)) {\n const s = spec as { span: { start: number; end: number } }\n importsToRemove.push({\n start: s.span.start - 1,\n end: s.span.end - 1,\n isFullImport: false,\n })\n }\n }\n }\n }\n\n return importsToRemove\n}\n\nfunction removeImportFromCode(\n code: string,\n start: number,\n end: number,\n isFullImport: boolean\n): string {\n if (isFullImport) {\n let lineStart = start\n while (lineStart > 0 && code[lineStart - 1] !== '\\n') {\n lineStart--\n }\n let lineEnd = end\n while (lineEnd < code.length && code[lineEnd] !== '\\n') {\n lineEnd++\n }\n if (code[lineEnd] === '\\n') lineEnd++\n return code.slice(0, lineStart) + code.slice(lineEnd)\n } else {\n let removeEnd = end\n while (removeEnd < code.length && /[\\s,]/.test(code[removeEnd])) {\n removeEnd++\n }\n return code.slice(0, start) + code.slice(removeEnd)\n }\n}\n\nexport function transformCode(\n code: string,\n id: string,\n functionName: string = 'css'\n): TransformResult {\n const isTypeScript = /\\.tsx?$/.test(id)\n const isJSX = /\\.[jt]sx$/.test(id)\n\n let ast: Program\n try {\n ast = parseSync(code, {\n syntax: isTypeScript ? 'typescript' : 'ecmascript',\n tsx: isJSX && isTypeScript,\n jsx: isJSX && !isTypeScript,\n comments: true,\n })\n } catch {\n return { code, cssRules: [], transformed: false }\n }\n\n const allRules: CSSRule[] = []\n const replacements = new Map<number, string>()\n\n walkAndTransform(ast, functionName, allRules, replacements)\n\n if (replacements.size === 0) {\n return { code, cssRules: [], transformed: false }\n }\n\n const importsToRemove = findCatomImports(ast, functionName)\n let result = code\n\n interface Modification {\n start: number\n end: number\n replacement: string\n type: 'css-call' | 'full-import' | 'import-specifier'\n }\n\n const modifications: Modification[] = []\n\n for (const [start, classNames] of replacements) {\n const searchStart = start - 1 // SWC positions seem to be 1-indexed\n const cssCallMatch = findCSSCallBounds(result, searchStart, functionName)\n if (cssCallMatch) {\n modifications.push({\n start: cssCallMatch.start,\n end: cssCallMatch.end,\n replacement: JSON.stringify(classNames),\n type: 'css-call',\n })\n }\n }\n\n for (const imp of importsToRemove) {\n modifications.push({\n start: imp.start,\n end: imp.end,\n replacement: '',\n type: imp.isFullImport ? 'full-import' : 'import-specifier',\n })\n }\n\n modifications.sort((a, b) => b.start - a.start)\n for (const mod of modifications) {\n if (mod.type === 'full-import') {\n result = removeImportFromCode(result, mod.start, mod.end, true)\n } else if (mod.type === 'import-specifier') {\n result = removeImportFromCode(result, mod.start, mod.end, false)\n } else {\n result = result.slice(0, mod.start) + mod.replacement + result.slice(mod.end)\n }\n }\n\n return {\n code: result,\n cssRules: allRules,\n transformed: true,\n }\n}\n\nfunction findCSSCallBounds(\n code: string,\n startPos: number,\n functionName: string\n): { start: number; end: number } | null {\n const searchWindow = 50\n const searchStart = Math.max(0, startPos - searchWindow)\n const searchEnd = Math.min(code.length, startPos + searchWindow)\n const searchRegion = code.slice(searchStart, searchEnd)\n\n const funcPattern = new RegExp(`\\\\b${functionName}\\\\s*\\\\(`)\n const match = funcPattern.exec(searchRegion)\n if (!match) return null\n\n const callStart = searchStart + match.index\n const parenStart = callStart + match[0].length - 1\n\n let depth = 1\n let i = parenStart + 1\n while (i < code.length && depth > 0) {\n const char = code[i]\n if (char === '(') depth++\n else if (char === ')') depth--\n i++\n }\n\n if (depth !== 0) return null\n\n return { start: callStart, end: i }\n}\n","import {createFilter, type Plugin} from \"vite\";\n\nimport {generateCSS} from \"../core/css-generator.js\";\nimport {transformCode} from \"./transform.js\";\nimport type {\n CSSRule,\n CatomPluginOptions,\n ModuleCSSState,\n} from \"../core/types.js\";\n\nexport type {CatomPluginOptions, CSSRule, CSSInput} from \"../core/types.js\";\n\nconst VIRTUAL_MODULE_ID = \"virtual:catom.css\";\nconst RESOLVED_VIRTUAL_MODULE_ID = \"\\0\" + VIRTUAL_MODULE_ID;\n\nexport default function catomPlugin(options: CatomPluginOptions = {}): Plugin {\n const {\n include = /\\.[jt]sx?$/,\n exclude = /node_modules/,\n functionName = \"css\",\n } = options;\n\n const moduleCSS = new Map<string, ModuleCSSState>();\n\n let filter: (id: string) => boolean;\n\n return {\n name: \"vite-plugin-catom\",\n\n enforce: \"pre\" as const,\n\n configResolved() {\n filter = createFilter(include, exclude);\n },\n\n buildStart() {\n moduleCSS.clear();\n },\n\n resolveId(id: string) {\n if (id === VIRTUAL_MODULE_ID) {\n return RESOLVED_VIRTUAL_MODULE_ID;\n }\n return null;\n },\n\n load(id: string) {\n if (id === RESOLVED_VIRTUAL_MODULE_ID) {\n const allRules: CSSRule[] = [];\n for (const state of moduleCSS.values()) {\n allRules.push(...state.rules);\n }\n return generateCSS(allRules);\n }\n return null;\n },\n\n transform(code: string, id: string) {\n if (!filter(id)) return null;\n if (!code.includes(functionName + \"(\")) return null;\n\n const result = transformCode(code, id, functionName);\n if (!result.transformed) return null;\n\n moduleCSS.set(id, {\n rules: result.cssRules,\n timestamp: Date.now(),\n });\n\n return {\n code: result.code,\n map: null,\n };\n },\n\n watchChange(id: string) {\n if (moduleCSS.has(id)) {\n moduleCSS.delete(id);\n }\n },\n };\n}\n\n// Also export as named export for flexibility\nexport {catomPlugin};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/core/hash.ts","../../src/core/css-generator.ts","../../src/vite/transform.ts","../../src/vite/index.ts"],"names":["rules"],"mappings":";;;;;;AAEO,SAAS,QAAQ,GAAA,EAAqB;AAC3C,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,IAAI,CAAA;AACJ,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,IAAI,MAAM,GAAA,CAAI,MAAA;AAEd,EAAA,OAAO,GAAA,IAAO,CAAA,EAAG,EAAE,CAAA,EAAG,OAAO,CAAA,EAAG;AAC9B,IAAA,CAAA,GACG,GAAA,CAAI,UAAA,CAAW,CAAC,CAAA,GAAI,GAAA,GAAA,CACnB,IAAI,UAAA,CAAW,EAAE,CAAC,CAAA,GAAI,GAAA,KAAS,CAAA,GAAA,CAC/B,IAAI,UAAA,CAAW,EAAE,CAAC,CAAA,GAAI,GAAA,KAAS,EAAA,GAAA,CAC/B,IAAI,UAAA,CAAW,EAAE,CAAC,CAAA,GAAI,GAAA,KAAS,EAAA;AAEnC,IAAA,CAAA;AAAA,IAAA,CAEG,CAAA,GAAI,KAAA,IAAU,UAAA,IAAA,CAAgB,CAAA,KAAM,MAAM,KAAA,IAAW,EAAA,CAAA;AACxD,IAAA,CAAA;AAAA,IAAoB,CAAA,KAAM,EAAA;AAE1B,IAAA,CAAA;AAAA,IAAA,CAEI,CAAA,GAAI,KAAA,IAAU,UAAA,IAAA,CAAgB,CAAA,KAAM,MAAM,KAAA,IAAW,EAAA,CAAA;AAAA,IAAA,CAErD,CAAA,GAAI,KAAA,IAAU,UAAA,IAAA,CAAgB,CAAA,KAAM,MAAM,KAAA,IAAW,EAAA,CAAA;AAAA,EAC3D;AAEA,EAAA,IAAI,GAAA,IAAO,GAAG,CAAA,IAAA,CAAM,GAAA,CAAI,WAAW,CAAA,GAAI,CAAC,IAAI,GAAA,KAAS,EAAA;AACrD,EAAA,IAAI,GAAA,IAAO,GAAG,CAAA,IAAA,CAAM,GAAA,CAAI,WAAW,CAAA,GAAI,CAAC,IAAI,GAAA,KAAS,CAAA;AACrD,EAAA,IAAI,OAAO,CAAA,EAAG;AACZ,IAAA,CAAA,IAAK,GAAA,CAAI,UAAA,CAAW,CAAC,CAAA,GAAI,GAAA;AACzB,IAAA,CAAA,GAAA,CAAK,CAAA,GAAI,KAAA,IAAU,UAAA,IAAA,CAAgB,CAAA,KAAM,MAAM,KAAA,IAAW,EAAA,CAAA;AAAA,EAC5D;AAEA,EAAA,CAAA,IAAK,CAAA,KAAM,EAAA;AACX,EAAA,CAAA,GAAA,CAAK,CAAA,GAAI,KAAA,IAAU,UAAA,IAAA,CAAgB,CAAA,KAAM,MAAM,KAAA,IAAW,EAAA,CAAA;AAE1D,EAAA,OAAA,CAAA,CAAS,CAAA,GAAK,CAAA,KAAM,EAAA,MAAS,CAAA,EAAG,SAAS,EAAE,CAAA;AAC7C;AAEA,IAAM,eAAe,IAAI,GAAA,CAAI,aAAA,CAAc,KAAA,CAAM,EAAE,CAAC,CAAA;AAE7C,SAAS,kBAAkB,IAAA,EAAsB;AACtD,EAAA,IAAI,YAAA,CAAa,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,CAAA,EAAG;AAC7B,IAAA,OAAO,IAAI,IAAI,CAAA,CAAA;AAAA,EACjB;AACA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,aAAa,QAAA,EAA0B;AACrD,EAAA,OAAO,iBAAA,CAAkB,OAAA,CAAQ,QAAQ,CAAC,CAAA;AAC5C;;;AChDA,IAAM,gBAAA,GAAmB,8BAAA;AAElB,SAAS,YAAY,QAAA,EAA0B;AACpD,EAAA,OAAO,QAAA,CAAS,OAAA,CAAQ,gBAAA,EAAkB,OAAO,EAAE,WAAA,EAAY;AACjE;AAEO,SAAS,kBAAA,CACd,QAAA,EACA,KAAA,EACA,KAAA,EACA,MAAA,EACQ;AACR,EAAA,MAAM,cAAc,KAAA,GAAQ,CAAA,CAAA,EAAI,KAAA,CAAM,IAAA,EAAM,CAAA,CAAA,GAAK,EAAA;AACjD,EAAA,MAAM,YAAA,GAAe,MAAA,GAAS,MAAA,CAAO,IAAA,EAAK,GAAI,EAAA;AAC9C,EAAA,MAAM,SAAA,GAAY,YAAY,QAAQ,CAAA;AACtC,EAAA,OAAO,GAAG,WAAW,CAAA,EAAG,YAAY,CAAA,EAAG,SAAS,IAAI,KAAK,CAAA,CAAA,CAAA;AAC3D;AAEO,SAAS,aAAA,CACd,QAAA,EACA,KAAA,EACA,KAAA,EACA,MAAA,EACS;AACT,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,KAAK,CAAA,CAAE,IAAA,EAAK;AACvC,EAAA,MAAM,aAAA,GAAgB,WAAA,CAAY,QAAA,CAAS,IAAA,EAAM,CAAA;AACjD,EAAA,MAAM,QAAA,GAAW,kBAAA,CAAmB,QAAA,EAAU,WAAA,EAAa,OAAO,MAAM,CAAA;AACxE,EAAA,MAAM,IAAA,GAAO,aAAa,QAAQ,CAAA;AAElC,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,QAAA,EAAU,aAAA;AAAA,IACV,KAAA,EAAO,WAAA;AAAA,IACP,KAAA,EAAO,OAAO,IAAA,EAAK;AAAA,IACnB,MAAA,EAAQ,QAAQ,IAAA;AAAK,GACvB;AACF;AAEO,SAAS,iBAAiB,KAAA,EAA6B;AAC5D,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAqB;AAEtC,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,QAAA,GAAW,mBAAmB,IAAA,CAAK,QAAA,EAAU,KAAK,KAAA,EAAO,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,MAAM,CAAA;AACtF,IAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,QAAQ,CAAA,EAAG;AACvB,MAAA,IAAA,CAAK,GAAA,CAAI,UAAU,IAAI,CAAA;AAAA,IACzB;AAAA,EACF;AAEA,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,MAAA,EAAQ,CAAA;AACjC;AASA,SAAS,wBAAwB,KAAA,EAAiC;AAChE,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAyB;AAE5C,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,cAAc,CAAA,EAAG,IAAA,CAAK,QAAQ,CAAA,CAAA,EAAI,KAAK,KAAK,CAAA,CAAA,CAAA;AAClD,IAAA,MAAM,QAAA,GAAW,CAAA,EAAG,IAAA,CAAK,KAAA,IAAS,EAAE,IAAI,IAAA,CAAK,MAAA,IAAU,EAAE,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA;AAExE,IAAA,IAAI,CAAC,MAAA,CAAO,GAAA,CAAI,QAAQ,CAAA,EAAG;AACzB,MAAA,MAAA,CAAO,IAAI,QAAA,EAAU;AAAA,QACnB,WAAA;AAAA,QACA,MAAA,sBAAY,GAAA,EAAI;AAAA,QAChB,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,QAAQ,IAAA,CAAK;AAAA,OACd,CAAA;AAAA,IACH;AACA,IAAA,MAAA,CAAO,IAAI,QAAQ,CAAA,CAAG,MAAA,CAAO,GAAA,CAAI,KAAK,IAAI,CAAA;AAAA,EAC5C;AAEA,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,MAAA,EAAQ,CAAA;AACnC;AAEO,SAAS,YAAY,KAAA,EAA0B;AACpD,EAAA,MAAM,YAAA,GAAe,iBAAiB,KAAK,CAAA;AAE3C,EAAA,MAAM,eAA0B,EAAC;AACjC,EAAA,MAAM,cAAyB,EAAC;AAChC,EAAA,MAAM,UAAA,uBAAiB,GAAA,EAAuB;AAE9C,EAAA,KAAA,MAAW,QAAQ,YAAA,EAAc;AAC/B,IAAA,IAAI,KAAK,KAAA,EAAO;AACd,MAAA,MAAM,WAAW,UAAA,CAAW,GAAA,CAAI,IAAA,CAAK,KAAK,KAAK,EAAC;AAChD,MAAA,QAAA,CAAS,KAAK,IAAI,CAAA;AAClB,MAAA,UAAA,CAAW,GAAA,CAAI,IAAA,CAAK,KAAA,EAAO,QAAQ,CAAA;AAAA,IACrC,CAAA,MAAA,IAAW,KAAK,MAAA,EAAQ;AACtB,MAAA,WAAA,CAAY,KAAK,IAAI,CAAA;AAAA,IACvB,CAAA,MAAO;AACL,MAAA,YAAA,CAAa,KAAK,IAAI,CAAA;AAAA,IACxB;AAAA,EACF;AAEA,EAAA,MAAM,WAAqB,EAAC;AAE5B,EAAA,MAAM,aAAA,GAAgB,wBAAwB,YAAY,CAAA;AAC1D,EAAA,KAAA,MAAW,KAAA,IAAS,aAAA,CAAc,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,WAAA,CAAY,aAAA,CAAc,CAAA,CAAE,WAAW,CAAC,CAAA,EAAG;AAC5F,IAAA,MAAM,YAAY,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,MAAM,EACtC,IAAA,EAAK,CACL,GAAA,CAAI,CAAC,MAAM,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,CAAA,CAClB,KAAK,KAAK,CAAA;AACb,IAAA,QAAA,CAAS,KAAK,CAAA,EAAG,SAAS,CAAA,GAAA,EAAM,KAAA,CAAM,WAAW,CAAA,EAAA,CAAI,CAAA;AAAA,EACvD;AAEA,EAAA,MAAM,YAAA,GAAe,wBAAwB,WAAW,CAAA;AACxD,EAAA,KAAA,MAAW,KAAA,IAAS,YAAA,CAAa,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,WAAA,CAAY,aAAA,CAAc,CAAA,CAAE,WAAW,CAAC,CAAA,EAAG;AAC3F,IAAA,MAAM,YAAY,KAAA,CAAM,IAAA,CAAK,MAAM,MAAM,CAAA,CACtC,MAAK,CACL,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAA,EAAI,CAAC,CAAA,EAAG,KAAA,CAAM,MAAM,CAAA,CAAE,CAAA,CACjC,KAAK,KAAK,CAAA;AACb,IAAA,QAAA,CAAS,KAAK,CAAA,EAAG,SAAS,CAAA,GAAA,EAAM,KAAA,CAAM,WAAW,CAAA,EAAA,CAAI,CAAA;AAAA,EACvD;AAEA,EAAA,MAAM,qBAAqB,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,OAAA,EAAS,CAAA,CAAE,IAAA;AAAA,IAAK,CAAC,CAAC,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA,KACvE,CAAA,CAAE,aAAA,CAAc,CAAC;AAAA,GACnB;AAEA,EAAA,KAAA,MAAW,CAAC,KAAA,EAAOA,MAAK,CAAA,IAAK,kBAAA,EAAoB;AAC/C,IAAA,MAAM,WAAA,GAAc,wBAAwBA,MAAK,CAAA;AACjD,IAAA,MAAM,aAAuB,EAAC;AAE9B,IAAA,KAAA,MAAW,KAAA,IAAS,WAAA,CAAY,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,WAAA,CAAY,aAAA,CAAc,CAAA,CAAE,WAAW,CAAC,CAAA,EAAG;AAC1F,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,IAAU,EAAA;AAC/B,MAAA,MAAM,YAAY,KAAA,CAAM,IAAA,CAAK,MAAM,MAAM,CAAA,CACtC,MAAK,CACL,GAAA,CAAI,CAAC,CAAA,KAAM,IAAI,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,CAAA,CAC3B,KAAK,KAAK,CAAA;AACb,MAAA,UAAA,CAAW,KAAK,CAAA,EAAA,EAAK,SAAS,CAAA,GAAA,EAAM,KAAA,CAAM,WAAW,CAAA,EAAA,CAAI,CAAA;AAAA,IAC3D;AAEA,IAAA,QAAA,CAAS,IAAA,CAAK,UAAU,KAAK,CAAA;AAAA,EAAO,UAAA,CAAW,IAAA,CAAK,IAAI,CAAC;AAAA,CAAA,CAAK,CAAA;AAAA,EAChE;AAEA,EAAA,OAAO,QAAA,CAAS,KAAK,IAAI,CAAA;AAC3B;ACjIA,SAAS,UAAU,IAAA,EAA0D;AAC3E,EAAA,OAAO,IAAA,CAAK,IAAA,KAAS,eAAA,IAAmB,IAAA,CAAK,IAAA,KAAS,gBAAA;AACxD;AAEA,SAAS,gBAAgB,IAAA,EAAuD;AAC9E,EAAA,IAAI,IAAA,CAAK,SAAS,eAAA,EAAiB;AACjC,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AACA,EAAA,OAAO,IAAA,CAAK,KAAA;AACd;AAEA,SAAS,eAAe,IAAA,EAAuC;AAC7D,EAAA,IAAI,IAAA,CAAK,GAAA,CAAI,IAAA,KAAS,YAAA,EAAc;AAClC,IAAA,OAAO,KAAK,GAAA,CAAI,KAAA;AAAA,EAClB;AACA,EAAA,IAAI,IAAA,CAAK,GAAA,CAAI,IAAA,KAAS,eAAA,EAAiB;AACrC,IAAA,OAAO,KAAK,GAAA,CAAI,KAAA;AAAA,EAClB;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,uBAAA,CACP,GAAA,EACA,KAAA,EACA,KAAA,EACA,MAAA,EACM;AACN,EAAA,KAAA,MAAW,IAAA,IAAQ,IAAI,UAAA,EAAY;AACjC,IAAA,IAAI,IAAA,CAAK,SAAS,eAAA,EAAiB;AACjC,MAAA,IAAI,IAAA,CAAK,SAAA,CAAU,IAAA,KAAS,kBAAA,EAAoB;AAC9C,QAAA,uBAAA,CAAwB,IAAA,CAAK,SAAA,EAAW,KAAA,EAAO,KAAA,EAAO,MAAM,CAAA;AAAA,MAC9D,CAAA,MAAO;AACL,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,CAAA,mGAAA;AAAA,SAEF;AAAA,MACF;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,CAAK,SAAS,kBAAA,EAAoB;AACpC,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU,eAAe,IAAI,CAAA;AACnC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,IAAI,MAAM,CAAA,6FAAA,CAA+F,CAAA;AAAA,IACjH;AAEA,IAAA,MAAM,QAAQ,IAAA,CAAK,KAAA;AAEnB,IAAA,IAAI,YAAY,OAAA,EAAS;AACvB,MAAA,IAAI,KAAA,CAAM,SAAS,kBAAA,EAAoB;AACrC,QAAA,MAAM,IAAI,MAAM,CAAA,mDAAA,CAAqD,CAAA;AAAA,MACvE;AACA,MAAA,KAAA,MAAW,SAAA,IAAa,MAAM,UAAA,EAAY;AACxC,QAAA,IAAI,SAAA,CAAU,SAAS,kBAAA,EAAoB;AAC3C,QAAA,MAAM,UAAA,GAAa,eAAe,SAAS,CAAA;AAC3C,QAAA,IAAI,CAAC,UAAA,EAAY;AACjB,QAAA,IAAI,SAAA,CAAU,KAAA,CAAM,IAAA,KAAS,kBAAA,EAAoB;AAC/C,UAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qBAAA,EAAwB,UAAU,CAAA,iCAAA,CAAmC,CAAA;AAAA,QACvF;AACA,QAAA,uBAAA,CAAwB,SAAA,CAAU,KAAA,EAAO,KAAA,EAAO,UAAA,EAAY,MAAM,CAAA;AAAA,MACpE;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,YAAY,QAAA,EAAU;AACxB,MAAA,IAAI,KAAA,CAAM,SAAS,kBAAA,EAAoB;AACrC,QAAA,MAAM,IAAI,MAAM,CAAA,oDAAA,CAAsD,CAAA;AAAA,MACxE;AACA,MAAA,KAAA,MAAW,UAAA,IAAc,MAAM,UAAA,EAAY;AACzC,QAAA,IAAI,UAAA,CAAW,SAAS,kBAAA,EAAoB;AAC5C,QAAA,MAAM,cAAA,GAAiB,eAAe,UAAU,CAAA;AAChD,QAAA,IAAI,CAAC,cAAA,EAAgB;AACrB,QAAA,IAAI,UAAA,CAAW,KAAA,CAAM,IAAA,KAAS,kBAAA,EAAoB;AAChD,UAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA4B,cAAc,CAAA,iCAAA,CAAmC,CAAA;AAAA,QAC/F;AACA,QAAA,uBAAA,CAAwB,UAAA,CAAW,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,cAAc,CAAA;AAAA,MACxE;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,WAAA,GAAc,KAAA;AAClB,IAAA,IAAI,WAAA,CAAY,SAAS,gBAAA,EAAkB;AACzC,MAAA,WAAA,GAAc,WAAA,CAAY,UAAA;AAAA,IAC5B;AAEA,IAAA,IAAI,CAAC,SAAA,CAAU,WAAW,CAAA,EAAG;AAC3B,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,kBAAA,EAAqB,OAAO,CAAA,+FAAA,EAElB,WAAA,CAAY,IAAI,CAAA;AAAA,OAC5B;AAAA,IACF;AAEA,IAAA,MAAM,OAAO,aAAA,CAAc,OAAA,EAAS,gBAAgB,WAAW,CAAA,EAAG,OAAO,MAAM,CAAA;AAC/E,IAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACjB;AACF;AAEA,SAAS,eAAe,QAAA,EAAoE;AAC1F,EAAA,MAAM,QAAmB,EAAC;AAE1B,EAAA,IAAI,QAAA,CAAS,SAAA,CAAU,MAAA,KAAW,CAAA,EAAG;AACnC,IAAA,OAAO,EAAE,KAAA,EAAO,EAAC,EAAG,YAAY,EAAA,EAAG;AAAA,EACrC;AAEA,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,SAAA,CAAU,CAAC,CAAA;AAChC,EAAA,IAAI,GAAA,CAAI,UAAA,CAAW,IAAA,KAAS,kBAAA,EAAoB;AAC9C,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,0DAAA,EACU,GAAA,CAAI,UAAA,CAAW,IAAI,CAAA;AAAA,KAC/B;AAAA,EACF;AAEA,EAAA,uBAAA,CAAwB,GAAA,CAAI,YAAY,KAAK,CAAA;AAE7C,EAAA,MAAM,UAAA,GAAa,MAAM,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,IAAI,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AACpD,EAAA,OAAO,EAAE,OAAO,UAAA,EAAW;AAC7B;AAEA,IAAM,gCAAgB,IAAI,GAAA,CAAI,CAAC,MAAA,EAAQ,MAAM,CAAC,CAAA;AAE9C,SAAS,UAAU,KAAA,EAA2C;AAC5D,EAAA,OACE,OAAO,KAAA,KAAU,QAAA,IACjB,UAAU,IAAA,IACV,OAAQ,MAAkC,IAAA,KAAS,QAAA;AAEvD;AAEA,SAAS,gBAAA,CACP,MACA,YAAA,EACA,QAAA,EACA,cACA,OAAA,mBAAU,IAAI,SAAgB,EACxB;AACN,EAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AAGvC,EAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,IAAc,CAAA,EAAG;AACjC,EAAA,OAAA,CAAQ,IAAI,IAAc,CAAA;AAE1B,EAAA,IAAI,gBAAA,CAAiB,IAAI,CAAA,EAAG;AAC1B,IAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AACpB,IAAA,IACE,MAAA,CAAO,IAAA,KAAS,YAAA,IAChB,MAAA,CAAO,UAAU,YAAA,EACjB;AACA,MAAA,IAAI;AACF,QAAA,MAAM,EAAE,KAAA,EAAO,UAAA,EAAW,GAAI,eAAe,IAAI,CAAA;AACjD,QAAA,QAAA,CAAS,IAAA,CAAK,GAAG,KAAK,CAAA;AACtB,QAAA,YAAA,CAAa,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,KAAA,EAAO,UAAU,CAAA;AAAA,MAC9C,SAAS,KAAA,EAAO;AACd,QAAA,MAAM,MAAM,IAAA,CAAK,IAAA;AACjB,QAAA,MAAM,MAAA,GAAS,MAAM,CAAA,CAAA,EAAI,GAAA,CAAI,KAAK,CAAA,CAAA,EAAI,GAAA,CAAI,GAAG,CAAA,CAAA,CAAA,GAAM,EAAA;AACnD,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,MAAM,CAAA,CAAA,EAAK,KAAA,CAAgB,OAAO,CAAA,CAAE,CAAA;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,IAA+B,CAAA,EAAG;AAC9D,IAAA,IAAI,aAAA,CAAc,GAAA,CAAI,GAAG,CAAA,EAAG;AAE5B,IAAA,MAAM,KAAA,GAAS,KAAiC,GAAG,CAAA;AACnD,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,IAAI,SAAA,CAAU,IAAI,CAAA,EAAG;AACnB,UAAA,gBAAA,CAAiB,IAAA,EAAM,YAAA,EAAc,QAAA,EAAU,YAAA,EAAc,OAAO,CAAA;AAAA,QACtE;AAAA,MACF;AAAA,IACF,CAAA,MAAA,IAAW,SAAA,CAAU,KAAK,CAAA,EAAG;AAC3B,MAAA,gBAAA,CAAiB,KAAA,EAAO,YAAA,EAAc,QAAA,EAAU,YAAA,EAAc,OAAO,CAAA;AAAA,IACvE;AAAA,EACF;AACF;AAEA,SAAS,iBAAiB,IAAA,EAAuC;AAC/D,EAAA,OACE,OAAO,IAAA,KAAS,QAAA,IAChB,IAAA,KAAS,IAAA,IACR,KAA2B,IAAA,KAAS,gBAAA;AAEzC;AAEA,SAAS,cAAA,CAAe,MAAe,YAAA,EAA+B;AACpE,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,MAAM,OAAO,KAAA;AACtD,EAAA,MAAM,CAAA,GAAI,IAAA;AACV,EAAA,IAAI,CAAA,CAAE,IAAA,KAAS,iBAAA,EAAmB,OAAO,KAAA;AAEzC,EAAA,MAAM,WAAW,CAAA,CAAE,QAAA;AACnB,EAAA,IAAI,QAAA,EAAU,IAAA,KAAS,YAAA,IAAgB,QAAA,CAAS,UAAU,YAAA,EAAc;AACtE,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,QAAQ,CAAA,CAAE,KAAA;AAChB,EAAA,IAAI,CAAC,QAAA,IAAY,KAAA,EAAO,SAAS,YAAA,IAAgB,KAAA,CAAM,UAAU,YAAA,EAAc;AAC7E,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,gBAAA,CACP,GAAA,EACA,YAAA,EACA,UAAA,EAC8D;AAC9D,EAAA,MAAM,kBAAgF,EAAC;AAEvF,EAAA,KAAA,MAAW,IAAA,IAAQ,IAAI,IAAA,EAAM;AAC3B,IAAA,IAAI,IAAA,CAAK,SAAS,mBAAA,EAAqB;AAEvC,IAAA,MAAM,MAAA,GAAS,KAAK,MAAA,CAAO,KAAA;AAC3B,IAAA,IAAI,WAAW,OAAA,EAAS;AAExB,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,UAAA,IAAc,EAAC;AACvC,IAAA,MAAM,YAAA,GAAe,WAAW,IAAA,CAAK,CAAC,SAAS,cAAA,CAAe,IAAA,EAAM,YAAY,CAAC,CAAA;AAEjF,IAAA,IAAI,CAAC,YAAA,EAAc;AAEnB,IAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,MAAA,eAAA,CAAgB,IAAA,CAAK;AAAA,QACnB,KAAA,EAAO,IAAA,CAAK,IAAA,CAAK,KAAA,GAAQ,CAAA,GAAI,UAAA;AAAA,QAC7B,GAAA,EAAK,IAAA,CAAK,IAAA,CAAK,GAAA,GAAM,CAAA,GAAI,UAAA;AAAA,QACzB,YAAA,EAAc;AAAA,OACf,CAAA;AAAA,IACH,CAAA,MAAO;AACL,MAAA,KAAA,MAAW,QAAQ,UAAA,EAAY;AAC7B,QAAA,IAAI,cAAA,CAAe,IAAA,EAAM,YAAY,CAAA,EAAG;AACtC,UAAA,MAAM,CAAA,GAAI,IAAA;AACV,UAAA,eAAA,CAAgB,IAAA,CAAK;AAAA,YACnB,KAAA,EAAO,CAAA,CAAE,IAAA,CAAK,KAAA,GAAQ,CAAA,GAAI,UAAA;AAAA,YAC1B,GAAA,EAAK,CAAA,CAAE,IAAA,CAAK,GAAA,GAAM,CAAA,GAAI,UAAA;AAAA,YACtB,YAAA,EAAc;AAAA,WACf,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,eAAA;AACT;AAEA,SAAS,oBAAA,CACP,IAAA,EACA,KAAA,EACA,GAAA,EACA,YAAA,EACQ;AACR,EAAA,IAAI,YAAA,EAAc;AAChB,IAAA,IAAI,SAAA,GAAY,KAAA;AAChB,IAAA,OAAO,YAAY,CAAA,IAAK,IAAA,CAAK,SAAA,GAAY,CAAC,MAAM,IAAA,EAAM;AACpD,MAAA,SAAA,EAAA;AAAA,IACF;AACA,IAAA,IAAI,OAAA,GAAU,GAAA;AACd,IAAA,OAAO,UAAU,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,OAAO,MAAM,IAAA,EAAM;AACtD,MAAA,OAAA,EAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,OAAO,CAAA,KAAM,IAAA,EAAM,OAAA,EAAA;AAC5B,IAAA,OAAO,KAAK,KAAA,CAAM,CAAA,EAAG,SAAS,CAAA,GAAI,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,EACtD,CAAA,MAAO;AACL,IAAA,IAAI,SAAA,GAAY,GAAA;AAChB,IAAA,OAAO,SAAA,GAAY,KAAK,MAAA,IAAU,OAAA,CAAQ,KAAK,IAAA,CAAK,SAAS,CAAC,CAAA,EAAG;AAC/D,MAAA,SAAA,EAAA;AAAA,IACF;AACA,IAAA,OAAO,KAAK,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,GAAI,IAAA,CAAK,MAAM,SAAS,CAAA;AAAA,EACpD;AACF;AAEO,SAAS,aAAA,CACd,IAAA,EACA,EAAA,EACA,YAAA,GAAuB,KAAA,EACN;AACjB,EAAA,MAAM,YAAA,GAAe,SAAA,CAAU,IAAA,CAAK,EAAE,CAAA;AACtC,EAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,IAAA,CAAK,EAAE,CAAA;AAEjC,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI;AACF,IAAA,GAAA,GAAM,UAAU,IAAA,EAAM;AAAA,MACpB,MAAA,EAAQ,eAAe,YAAA,GAAe,YAAA;AAAA,MACtC,KAAK,KAAA,IAAS,YAAA;AAAA,MACd,GAAA,EAAK,SAAS,CAAC,YAAA;AAAA,MACf,QAAA,EAAU;AAAA,KACX,CAAA;AAAA,EACH,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,EAAC,EAAG,aAAa,KAAA,EAAM;AAAA,EAClD;AAEA,EAAA,MAAM,WAAsB,EAAC;AAC7B,EAAA,MAAM,YAAA,uBAAmB,GAAA,EAAoB;AAE7C,EAAA,gBAAA,CAAiB,GAAA,EAAK,YAAA,EAAc,QAAA,EAAU,YAAY,CAAA;AAE1D,EAAA,IAAI,YAAA,CAAa,SAAS,CAAA,EAAG;AAC3B,IAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,EAAC,EAAG,aAAa,KAAA,EAAM;AAAA,EAClD;AAIA,EAAA,MAAM,UAAA,GAAa,GAAA,CAAI,IAAA,CAAK,KAAA,GAAQ,CAAA;AAEpC,EAAA,MAAM,eAAA,GAAkB,gBAAA,CAAiB,GAAA,EAAK,YAAA,EAAc,UAAU,CAAA;AACtE,EAAA,IAAI,MAAA,GAAS,IAAA;AASb,EAAA,MAAM,gBAAgC,EAAC;AAEvC,EAAA,KAAA,MAAW,CAAC,KAAA,EAAO,UAAU,CAAA,IAAK,YAAA,EAAc;AAE9C,IAAA,MAAM,aAAA,GAAgB,QAAQ,CAAA,GAAI,UAAA;AAClC,IAAA,MAAM,YAAA,GAAe,iBAAA,CAAkB,MAAA,EAAQ,aAAA,EAAe,YAAY,CAAA;AAC1E,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,aAAA,CAAc,IAAA,CAAK;AAAA,QACjB,OAAO,YAAA,CAAa,KAAA;AAAA,QACpB,KAAK,YAAA,CAAa,GAAA;AAAA,QAClB,WAAA,EAAa,IAAA,CAAK,SAAA,CAAU,UAAU,CAAA;AAAA,QACtC,IAAA,EAAM;AAAA,OACP,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,OAAO,eAAA,EAAiB;AACjC,IAAA,aAAA,CAAc,IAAA,CAAK;AAAA,MACjB,OAAO,GAAA,CAAI,KAAA;AAAA,MACX,KAAK,GAAA,CAAI,GAAA;AAAA,MACT,WAAA,EAAa,EAAA;AAAA,MACb,IAAA,EAAM,GAAA,CAAI,YAAA,GAAe,aAAA,GAAgB;AAAA,KAC1C,CAAA;AAAA,EACH;AAEA,EAAA,aAAA,CAAc,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,KAAA,GAAQ,EAAE,KAAK,CAAA;AAC9C,EAAA,KAAA,MAAW,OAAO,aAAA,EAAe;AAC/B,IAAA,IAAI,GAAA,CAAI,SAAS,aAAA,EAAe;AAC9B,MAAA,MAAA,GAAS,qBAAqB,MAAA,EAAQ,GAAA,CAAI,KAAA,EAAO,GAAA,CAAI,KAAK,IAAI,CAAA;AAAA,IAChE,CAAA,MAAA,IAAW,GAAA,CAAI,IAAA,KAAS,kBAAA,EAAoB;AAC1C,MAAA,MAAA,GAAS,qBAAqB,MAAA,EAAQ,GAAA,CAAI,KAAA,EAAO,GAAA,CAAI,KAAK,KAAK,CAAA;AAAA,IACjE,CAAA,MAAO;AACL,MAAA,MAAA,GAAS,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,GAAA,CAAI,KAAK,CAAA,GAAI,GAAA,CAAI,WAAA,GAAc,MAAA,CAAO,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA;AAAA,IAC9E;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,QAAA,EAAU,QAAA;AAAA,IACV,WAAA,EAAa;AAAA,GACf;AACF;AAEA,SAAS,iBAAA,CACP,IAAA,EACA,QAAA,EACA,YAAA,EACuC;AACvC,EAAA,MAAM,YAAA,GAAe,EAAA;AACrB,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,WAAW,YAAY,CAAA;AACvD,EAAA,MAAM,YAAY,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,MAAA,EAAQ,WAAW,YAAY,CAAA;AAC/D,EAAA,MAAM,YAAA,GAAe,IAAA,CAAK,KAAA,CAAM,WAAA,EAAa,SAAS,CAAA;AAEtD,EAAA,MAAM,WAAA,GAAc,IAAI,MAAA,CAAO,CAAA,GAAA,EAAM,YAAY,CAAA,OAAA,CAAS,CAAA;AAC1D,EAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,IAAA,CAAK,YAAY,CAAA;AAC3C,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AAEnB,EAAA,MAAM,SAAA,GAAY,cAAc,KAAA,CAAM,KAAA;AACtC,EAAA,MAAM,UAAA,GAAa,SAAA,GAAY,KAAA,CAAM,CAAC,EAAE,MAAA,GAAS,CAAA;AAEjD,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,IAAI,UAAA,GAAa,CAAA;AACrB,EAAA,OAAO,CAAA,GAAI,IAAA,CAAK,MAAA,IAAU,KAAA,GAAQ,CAAA,EAAG;AACnC,IAAA,MAAM,IAAA,GAAO,KAAK,CAAC,CAAA;AACnB,IAAA,IAAI,SAAS,GAAA,EAAK,KAAA,EAAA;AAAA,SAAA,IACT,SAAS,GAAA,EAAK,KAAA,EAAA;AACvB,IAAA,CAAA,EAAA;AAAA,EACF;AAEA,EAAA,IAAI,KAAA,KAAU,GAAG,OAAO,IAAA;AAExB,EAAA,OAAO,EAAE,KAAA,EAAO,SAAA,EAAW,GAAA,EAAK,CAAA,EAAE;AACpC;;;ACpYA,IAAM,iBAAA,GAAoB,mBAAA;AAC1B,IAAM,6BAA6B,IAAA,GAAO,iBAAA;AAE3B,SAAR,WAAA,CAA6B,OAAA,GAA8B,EAAC,EAAiB;AAClF,EAAA,MAAM;AAAA,IACJ,OAAA,GAAU,YAAA;AAAA,IACV,OAAA,GAAU,cAAA;AAAA,IACV,YAAA,GAAe;AAAA,GACjB,GAAI,OAAA;AAEJ,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAA4B;AAClD,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI,MAAA,GAA+B,IAAA;AAEnC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,mBAAA;AAAA,IAEN,OAAA,EAAS,KAAA;AAAA,IAET,gBAAgB,SAAA,EAAW;AACzB,MAAA,MAAA,GAAS,SAAA;AAAA,IACX,CAAA;AAAA,IAEA,cAAA,GAAiB;AACf,MAAA,MAAA,GAAS,YAAA,CAAa,SAAS,OAAO,CAAA;AAAA,IACxC,CAAA;AAAA,IAEA,UAAA,GAAa;AACX,MAAA,SAAA,CAAU,KAAA,EAAM;AAAA,IAClB,CAAA;AAAA,IAEA,UAAU,EAAA,EAAY;AACpB,MAAA,IAAI,OAAO,iBAAA,EAAmB;AAC5B,QAAA,OAAO,0BAAA;AAAA,MACT;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IAEA,KAAK,EAAA,EAAY;AACf,MAAA,IAAI,OAAO,0BAAA,EAA4B;AACrC,QAAA,MAAM,WAAsB,EAAC;AAC7B,QAAA,KAAA,MAAW,KAAA,IAAS,SAAA,CAAU,MAAA,EAAO,EAAG;AACtC,UAAA,QAAA,CAAS,IAAA,CAAK,GAAG,KAAA,CAAM,KAAK,CAAA;AAAA,QAC9B;AACA,QAAA,OAAO,YAAY,QAAQ,CAAA;AAAA,MAC7B;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IAEA,SAAA,CAAU,MAAc,EAAA,EAAY;AAClC,MAAA,IAAI,CAAC,MAAA,CAAO,EAAE,CAAA,EAAG,OAAO,IAAA;AACxB,MAAA,IAAI,CAAC,IAAA,CAAK,QAAA,CAAS,YAAA,GAAe,GAAG,GAAG,OAAO,IAAA;AAE/C,MAAA,MAAM,MAAA,GAAS,aAAA,CAAc,IAAA,EAAM,EAAA,EAAI,YAAY,CAAA;AACnD,MAAA,IAAI,CAAC,MAAA,CAAO,WAAA,EAAa,OAAO,IAAA;AAEhC,MAAA,SAAA,CAAU,IAAI,EAAA,EAAI;AAAA,QAChB,OAAO,MAAA,CAAO,QAAA;AAAA,QACd,SAAA,EAAW,KAAK,GAAA;AAAI,OACrB,CAAA;AAED,MAAA,OAAO;AAAA,QACL,MAAM,MAAA,CAAO,IAAA;AAAA,QACb,GAAA,EAAK;AAAA,OACP;AAAA,IACF,CAAA;AAAA,IAEA,gBAAgB,GAAA,EAAK;AACnB,MAAA,IAAI,CAAC,MAAA,CAAO,GAAA,CAAI,IAAI,CAAA,EAAG;AAEvB,MAAA,MAAM,cACJ,SAAA,CAAU,GAAA,CAAI,GAAA,CAAI,IAAI,KAAK,GAAA,CAAI,OAAA,CAAQ,IAAA,CAAK,CAAC,MAAM,SAAA,CAAU,GAAA,CAAI,CAAA,CAAE,EAAA,IAAM,EAAE,CAAC,CAAA;AAE9E,MAAA,IAAI,WAAA,EAAa;AAEf,QAAA,GAAA,CAAI,OAAA,CAAQ,OAAA,CAAQ,CAAC,GAAA,KAAQ;AAC3B,UAAA,MAAA,EAAQ,WAAA,CAAY,iBAAiB,GAAG,CAAA;AAAA,QAC1C,CAAC,CAAA;AAGD,QAAA,MAAM,UAAA,GAAa,MAAA,EAAQ,WAAA,CAAY,aAAA,CAAc,0BAA0B,CAAA;AAC/E,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,MAAA,EAAQ,WAAA,CAAY,iBAAiB,UAAU,CAAA;AAAA,QACjD;AAEA,QAAA,SAAA,CAAU,MAAA,CAAO,IAAI,IAAI,CAAA;AAEzB,QAAA,MAAA,EAAQ,EAAA,CAAG,IAAA,CAAK,EAAC,IAAA,EAAM,eAAc,CAAA;AACrC,QAAA,OAAO,EAAC;AAAA,MACV;AAAA,IACF;AAAA,GACF;AACF","file":"index.js","sourcesContent":["// Murmur2 hash (from emotion-js)\n// https://github.com/emotion-js/emotion/blob/master/packages/hash/src/index.js\nexport function murmur2(str: string): string {\n let h = 0\n let k: number\n let i = 0\n let len = str.length\n\n for (; len >= 4; ++i, len -= 4) {\n k =\n (str.charCodeAt(i) & 0xff) |\n ((str.charCodeAt(++i) & 0xff) << 8) |\n ((str.charCodeAt(++i) & 0xff) << 16) |\n ((str.charCodeAt(++i) & 0xff) << 24)\n\n k =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + (((k >>> 16) * 0xe995) << 16)\n k ^= /* k >>> r: */ k >>> 24\n\n h =\n /* Math.imul(k, m): */\n ((k & 0xffff) * 0x5bd1e995 + (((k >>> 16) * 0xe995) << 16)) ^\n /* Math.imul(h, m): */\n ((h & 0xffff) * 0x5bd1e995 + (((h >>> 16) * 0xe995) << 16))\n }\n\n if (len >= 3) h ^= (str.charCodeAt(i + 2) & 0xff) << 16\n if (len >= 2) h ^= (str.charCodeAt(i + 1) & 0xff) << 8\n if (len >= 1) {\n h ^= str.charCodeAt(i) & 0xff\n h = (h & 0xffff) * 0x5bd1e995 + (((h >>> 16) * 0xe995) << 16)\n }\n\n h ^= h >>> 13\n h = (h & 0xffff) * 0x5bd1e995 + (((h >>> 16) * 0xe995) << 16)\n\n return ((h ^ (h >>> 15)) >>> 0).toString(36)\n}\n\nconst PREFIX_CHARS = new Set('0123456789-'.split(''))\n\nexport function makeCSSCompatible(hash: string): string {\n if (PREFIX_CHARS.has(hash[0])) {\n return `_${hash}`\n }\n return hash\n}\n\nexport function generateHash(identity: string): string {\n return makeCSSCompatible(murmur2(identity))\n}\n","import { generateHash } from './hash.js'\nimport type { CSSRule } from './types.js'\n\nconst KEBAB_CASE_REGEX = /([a-z0-9]|(?=[A-Z]))([A-Z])/g\n\nexport function toKebabCase(property: string): string {\n return property.replace(KEBAB_CASE_REGEX, '$1-$2').toLowerCase()\n}\n\nexport function createRuleIdentity(\n property: string,\n value: string,\n media?: string,\n pseudo?: string\n): string {\n const mediaPrefix = media ? `@${media.trim()}` : ''\n const pseudoPrefix = pseudo ? pseudo.trim() : ''\n const kebabProp = toKebabCase(property)\n return `${mediaPrefix}${pseudoPrefix}${kebabProp}:${value};`\n}\n\nexport function createCSSRule(\n property: string,\n value: string | number,\n media?: string,\n pseudo?: string\n): CSSRule {\n const stringValue = String(value).trim()\n const kebabProperty = toKebabCase(property.trim())\n const identity = createRuleIdentity(property, stringValue, media, pseudo)\n const hash = generateHash(identity)\n\n return {\n hash,\n property: kebabProperty,\n value: stringValue,\n media: media?.trim(),\n pseudo: pseudo?.trim(),\n }\n}\n\nexport function deduplicateRules(rules: CSSRule[]): CSSRule[] {\n const seen = new Map<string, CSSRule>()\n\n for (const rule of rules) {\n const identity = createRuleIdentity(rule.property, rule.value, rule.media, rule.pseudo)\n if (!seen.has(identity)) {\n seen.set(identity, rule)\n }\n }\n\n return Array.from(seen.values())\n}\n\ninterface GroupedRule {\n declaration: string\n hashes: Set<string>\n media?: string\n pseudo?: string\n}\n\nfunction groupRulesByDeclaration(rules: CSSRule[]): GroupedRule[] {\n const groups = new Map<string, GroupedRule>()\n\n for (const rule of rules) {\n const declaration = `${rule.property}:${rule.value};`\n const groupKey = `${rule.media || ''}|${rule.pseudo || ''}|${declaration}`\n\n if (!groups.has(groupKey)) {\n groups.set(groupKey, {\n declaration,\n hashes: new Set(),\n media: rule.media,\n pseudo: rule.pseudo,\n })\n }\n groups.get(groupKey)!.hashes.add(rule.hash)\n }\n\n return Array.from(groups.values())\n}\n\nexport function generateCSS(rules: CSSRule[]): string {\n const dedupedRules = deduplicateRules(rules)\n\n const regularRules: CSSRule[] = []\n const pseudoRules: CSSRule[] = []\n const mediaRules = new Map<string, CSSRule[]>()\n\n for (const rule of dedupedRules) {\n if (rule.media) {\n const existing = mediaRules.get(rule.media) || []\n existing.push(rule)\n mediaRules.set(rule.media, existing)\n } else if (rule.pseudo) {\n pseudoRules.push(rule)\n } else {\n regularRules.push(rule)\n }\n }\n\n const cssLines: string[] = []\n\n const regularGroups = groupRulesByDeclaration(regularRules)\n for (const group of regularGroups.sort((a, b) => a.declaration.localeCompare(b.declaration))) {\n const selectors = Array.from(group.hashes)\n .sort()\n .map((h) => `.${h}`)\n .join(',\\n')\n cssLines.push(`${selectors} { ${group.declaration} }`)\n }\n\n const pseudoGroups = groupRulesByDeclaration(pseudoRules)\n for (const group of pseudoGroups.sort((a, b) => a.declaration.localeCompare(b.declaration))) {\n const selectors = Array.from(group.hashes)\n .sort()\n .map((h) => `.${h}${group.pseudo}`)\n .join(',\\n')\n cssLines.push(`${selectors} { ${group.declaration} }`)\n }\n\n const sortedMediaQueries = Array.from(mediaRules.entries()).sort(([a], [b]) =>\n a.localeCompare(b)\n )\n\n for (const [query, rules] of sortedMediaQueries) {\n const mediaGroups = groupRulesByDeclaration(rules)\n const mediaLines: string[] = []\n\n for (const group of mediaGroups.sort((a, b) => a.declaration.localeCompare(b.declaration))) {\n const suffix = group.pseudo || ''\n const selectors = Array.from(group.hashes)\n .sort()\n .map((h) => `.${h}${suffix}`)\n .join(',\\n')\n mediaLines.push(` ${selectors} { ${group.declaration} }`)\n }\n\n cssLines.push(`@media ${query} {\\n${mediaLines.join('\\n')}\\n}`)\n }\n\n return cssLines.join('\\n')\n}\n","import { parseSync } from '@swc/core'\nimport type {\n CallExpression,\n Expression,\n KeyValueProperty,\n ObjectExpression,\n Program,\n StringLiteral,\n NumericLiteral,\n} from '@swc/core'\nimport { createCSSRule } from '../core/css-generator.js'\nimport type { CSSRule, TransformResult } from '../core/types.js'\n\nfunction isLiteral(expr: Expression): expr is StringLiteral | NumericLiteral {\n return expr.type === 'StringLiteral' || expr.type === 'NumericLiteral'\n}\n\nfunction getLiteralValue(expr: StringLiteral | NumericLiteral): string | number {\n if (expr.type === 'StringLiteral') {\n return expr.value\n }\n return expr.value\n}\n\nfunction getPropertyKey(prop: KeyValueProperty): string | null {\n if (prop.key.type === 'Identifier') {\n return prop.key.value\n }\n if (prop.key.type === 'StringLiteral') {\n return prop.key.value\n }\n return null\n}\n\nfunction processPropertiesObject(\n obj: ObjectExpression,\n rules: CSSRule[],\n media?: string,\n pseudo?: string\n): void {\n for (const prop of obj.properties) {\n if (prop.type === 'SpreadElement') {\n if (prop.arguments.type === 'ObjectExpression') {\n processPropertiesObject(prop.arguments, rules, media, pseudo)\n } else {\n throw new Error(\n `[catom] Spread elements must be object literals. ` +\n `Dynamic spreads are not supported at compile time.`\n )\n }\n continue\n }\n\n if (prop.type !== 'KeyValueProperty') {\n continue\n }\n\n const keyName = getPropertyKey(prop)\n if (!keyName) {\n throw new Error(`[catom] Could not determine property key. Only identifiers and string literals are supported.`)\n }\n\n const value = prop.value\n\n if (keyName === 'media') {\n if (value.type !== 'ObjectExpression') {\n throw new Error(`[catom] 'media' property must be an object literal.`)\n }\n for (const mediaProp of value.properties) {\n if (mediaProp.type !== 'KeyValueProperty') continue\n const mediaQuery = getPropertyKey(mediaProp)\n if (!mediaQuery) continue\n if (mediaProp.value.type !== 'ObjectExpression') {\n throw new Error(`[catom] Media query '${mediaQuery}' must contain an object literal.`)\n }\n processPropertiesObject(mediaProp.value, rules, mediaQuery, pseudo)\n }\n continue\n }\n\n if (keyName === 'pseudo') {\n if (value.type !== 'ObjectExpression') {\n throw new Error(`[catom] 'pseudo' property must be an object literal.`)\n }\n for (const pseudoProp of value.properties) {\n if (pseudoProp.type !== 'KeyValueProperty') continue\n const pseudoSelector = getPropertyKey(pseudoProp)\n if (!pseudoSelector) continue\n if (pseudoProp.value.type !== 'ObjectExpression') {\n throw new Error(`[catom] Pseudo selector '${pseudoSelector}' must contain an object literal.`)\n }\n processPropertiesObject(pseudoProp.value, rules, media, pseudoSelector)\n }\n continue\n }\n\n let actualValue = value\n if (actualValue.type === 'TsAsExpression') {\n actualValue = actualValue.expression\n }\n\n if (!isLiteral(actualValue)) {\n throw new Error(\n `[catom] Property '${keyName}' has a non-literal value. ` +\n `Only string and number literals are supported at compile time. ` +\n `Got: ${actualValue.type}`\n )\n }\n\n const rule = createCSSRule(keyName, getLiteralValue(actualValue), media, pseudo)\n rules.push(rule)\n }\n}\n\nfunction processCSSCall(callExpr: CallExpression): { rules: CSSRule[]; classNames: string } {\n const rules: CSSRule[] = []\n\n if (callExpr.arguments.length === 0) {\n return { rules: [], classNames: '' }\n }\n\n const arg = callExpr.arguments[0]\n if (arg.expression.type !== 'ObjectExpression') {\n throw new Error(\n `[catom] css() must be called with an object literal. ` +\n `Got: ${arg.expression.type}`\n )\n }\n\n processPropertiesObject(arg.expression, rules)\n\n const classNames = rules.map((r) => r.hash).join(' ')\n return { rules, classNames }\n}\n\nconst METADATA_KEYS = new Set(['span', 'ctxt'])\n\nfunction isASTNode(value: unknown): value is { type: string } {\n return (\n typeof value === 'object' &&\n value !== null &&\n typeof (value as Record<string, unknown>).type === 'string'\n )\n}\n\nfunction walkAndTransform(\n node: unknown,\n functionName: string,\n allRules: CSSRule[],\n replacements: Map<number, string>,\n visited = new WeakSet<object>()\n): void {\n if (!node || typeof node !== 'object') return\n \n // Prevent cycles\n if (visited.has(node as object)) return\n visited.add(node as object)\n\n if (isCallExpression(node)) {\n const callee = node.callee\n if (\n callee.type === 'Identifier' &&\n callee.value === functionName\n ) {\n try {\n const { rules, classNames } = processCSSCall(node)\n allRules.push(...rules)\n replacements.set(node.span.start, classNames)\n } catch (error) {\n const loc = node.span\n const prefix = loc ? `[${loc.start}:${loc.end}]` : ''\n throw new Error(`${prefix} ${(error as Error).message}`)\n }\n }\n }\n\n for (const key of Object.keys(node as Record<string, unknown>)) {\n if (METADATA_KEYS.has(key)) continue\n \n const value = (node as Record<string, unknown>)[key]\n if (Array.isArray(value)) {\n for (const item of value) {\n if (isASTNode(item)) {\n walkAndTransform(item, functionName, allRules, replacements, visited)\n }\n }\n } else if (isASTNode(value)) {\n walkAndTransform(value, functionName, allRules, replacements, visited)\n }\n }\n}\n\nfunction isCallExpression(node: unknown): node is CallExpression {\n return (\n typeof node === 'object' &&\n node !== null &&\n (node as { type?: string }).type === 'CallExpression'\n )\n}\n\nfunction isTargetImport(spec: unknown, functionName: string): boolean {\n if (typeof spec !== 'object' || spec === null) return false\n const s = spec as Record<string, unknown>\n if (s.type !== 'ImportSpecifier') return false\n\n const imported = s.imported as Record<string, unknown> | null\n if (imported?.type === 'Identifier' && imported.value === functionName) {\n return true\n }\n\n const local = s.local as Record<string, unknown> | null\n if (!imported && local?.type === 'Identifier' && local.value === functionName) {\n return true\n }\n\n return false\n}\n\nfunction findCatomImports(\n ast: Program,\n functionName: string,\n baseOffset: number\n): Array<{ start: number; end: number; isFullImport: boolean }> {\n const importsToRemove: Array<{ start: number; end: number; isFullImport: boolean }> = []\n\n for (const node of ast.body) {\n if (node.type !== 'ImportDeclaration') continue\n\n const source = node.source.value\n if (source !== 'catom') continue\n\n const specifiers = node.specifiers || []\n const hasCssImport = specifiers.some((spec) => isTargetImport(spec, functionName))\n\n if (!hasCssImport) continue\n\n if (specifiers.length === 1) {\n importsToRemove.push({\n start: node.span.start - 1 - baseOffset,\n end: node.span.end - 1 - baseOffset,\n isFullImport: true,\n })\n } else {\n for (const spec of specifiers) {\n if (isTargetImport(spec, functionName)) {\n const s = spec as { span: { start: number; end: number } }\n importsToRemove.push({\n start: s.span.start - 1 - baseOffset,\n end: s.span.end - 1 - baseOffset,\n isFullImport: false,\n })\n }\n }\n }\n }\n\n return importsToRemove\n}\n\nfunction removeImportFromCode(\n code: string,\n start: number,\n end: number,\n isFullImport: boolean\n): string {\n if (isFullImport) {\n let lineStart = start\n while (lineStart > 0 && code[lineStart - 1] !== '\\n') {\n lineStart--\n }\n let lineEnd = end\n while (lineEnd < code.length && code[lineEnd] !== '\\n') {\n lineEnd++\n }\n if (code[lineEnd] === '\\n') lineEnd++\n return code.slice(0, lineStart) + code.slice(lineEnd)\n } else {\n let removeEnd = end\n while (removeEnd < code.length && /[\\s,]/.test(code[removeEnd])) {\n removeEnd++\n }\n return code.slice(0, start) + code.slice(removeEnd)\n }\n}\n\nexport function transformCode(\n code: string,\n id: string,\n functionName: string = 'css'\n): TransformResult {\n const isTypeScript = /\\.tsx?$/.test(id)\n const isJSX = /\\.[jt]sx$/.test(id)\n\n let ast: Program\n try {\n ast = parseSync(code, {\n syntax: isTypeScript ? 'typescript' : 'ecmascript',\n tsx: isJSX && isTypeScript,\n jsx: isJSX && !isTypeScript,\n comments: true,\n })\n } catch {\n return { code, cssRules: [], transformed: false }\n }\n\n const allRules: CSSRule[] = []\n const replacements = new Map<number, string>()\n\n walkAndTransform(ast, functionName, allRules, replacements)\n\n if (replacements.size === 0) {\n return { code, cssRules: [], transformed: false }\n }\n\n // SWC accumulates byte offsets across parseSync calls\n // ast.span.start gives us the base offset we need to subtract\n const baseOffset = ast.span.start - 1 // -1 because spans are 1-indexed\n\n const importsToRemove = findCatomImports(ast, functionName, baseOffset)\n let result = code\n\n interface Modification {\n start: number\n end: number\n replacement: string\n type: 'css-call' | 'full-import' | 'import-specifier'\n }\n\n const modifications: Modification[] = []\n\n for (const [start, classNames] of replacements) {\n // Adjust span by subtracting base offset (spans are 1-indexed, so -1 then subtract base)\n const adjustedStart = start - 1 - baseOffset\n const cssCallMatch = findCSSCallBounds(result, adjustedStart, functionName)\n if (cssCallMatch) {\n modifications.push({\n start: cssCallMatch.start,\n end: cssCallMatch.end,\n replacement: JSON.stringify(classNames),\n type: 'css-call',\n })\n }\n }\n\n for (const imp of importsToRemove) {\n modifications.push({\n start: imp.start,\n end: imp.end,\n replacement: '',\n type: imp.isFullImport ? 'full-import' : 'import-specifier',\n })\n }\n\n modifications.sort((a, b) => b.start - a.start)\n for (const mod of modifications) {\n if (mod.type === 'full-import') {\n result = removeImportFromCode(result, mod.start, mod.end, true)\n } else if (mod.type === 'import-specifier') {\n result = removeImportFromCode(result, mod.start, mod.end, false)\n } else {\n result = result.slice(0, mod.start) + mod.replacement + result.slice(mod.end)\n }\n }\n\n return {\n code: result,\n cssRules: allRules,\n transformed: true,\n }\n}\n\nfunction findCSSCallBounds(\n code: string,\n startPos: number,\n functionName: string\n): { start: number; end: number } | null {\n const searchWindow = 50\n const searchStart = Math.max(0, startPos - searchWindow)\n const searchEnd = Math.min(code.length, startPos + searchWindow)\n const searchRegion = code.slice(searchStart, searchEnd)\n\n const funcPattern = new RegExp(`\\\\b${functionName}\\\\s*\\\\(`)\n const match = funcPattern.exec(searchRegion)\n if (!match) return null\n\n const callStart = searchStart + match.index\n const parenStart = callStart + match[0].length - 1\n\n let depth = 1\n let i = parenStart + 1\n while (i < code.length && depth > 0) {\n const char = code[i]\n if (char === '(') depth++\n else if (char === ')') depth--\n i++\n }\n\n if (depth !== 0) return null\n\n return { start: callStart, end: i }\n}\n","import {createFilter, PluginOption, type ViteDevServer} from \"vite\";\n\nimport {generateCSS} from \"../core/css-generator.js\";\nimport {transformCode} from \"./transform.js\";\nimport type {\n CSSRule,\n CatomPluginOptions,\n ModuleCSSState,\n} from \"../core/types.js\";\n\nexport type {CatomPluginOptions, CSSRule, CSSInput} from \"../core/types.js\";\n\nconst VIRTUAL_MODULE_ID = \"virtual:catom.css\";\nconst RESOLVED_VIRTUAL_MODULE_ID = \"\\0\" + VIRTUAL_MODULE_ID;\n\nexport default function catomPlugin(options: CatomPluginOptions = {}): PluginOption {\n const {\n include = /\\.[jt]sx?$/,\n exclude = /node_modules/,\n functionName = \"css\",\n } = options;\n\n const moduleCSS = new Map<string, ModuleCSSState>();\n let filter: (id: string) => boolean;\n let server: ViteDevServer | null = null;\n\n return {\n name: \"vite-plugin-catom\",\n\n enforce: \"pre\" as const,\n\n configureServer(devServer) {\n server = devServer;\n },\n\n configResolved() {\n filter = createFilter(include, exclude);\n },\n\n buildStart() {\n moduleCSS.clear();\n },\n\n resolveId(id: string) {\n if (id === VIRTUAL_MODULE_ID) {\n return RESOLVED_VIRTUAL_MODULE_ID;\n }\n return null;\n },\n\n load(id: string) {\n if (id === RESOLVED_VIRTUAL_MODULE_ID) {\n const allRules: CSSRule[] = [];\n for (const state of moduleCSS.values()) {\n allRules.push(...state.rules);\n }\n return generateCSS(allRules);\n }\n return null;\n },\n\n transform(code: string, id: string) {\n if (!filter(id)) return null;\n if (!code.includes(functionName + \"(\")) return null;\n\n const result = transformCode(code, id, functionName);\n if (!result.transformed) return null;\n\n moduleCSS.set(id, {\n rules: result.cssRules,\n timestamp: Date.now(),\n });\n\n return {\n code: result.code,\n map: null,\n };\n },\n\n handleHotUpdate(ctx) {\n if (!filter(ctx.file)) return;\n\n const hasOrHadCSS =\n moduleCSS.has(ctx.file) || ctx.modules.some((m) => moduleCSS.has(m.id || \"\"));\n\n if (hasOrHadCSS) {\n // Invalidate modules so they get re-transformed\n ctx.modules.forEach((mod) => {\n server?.moduleGraph.invalidateModule(mod);\n });\n\n // Invalidate the virtual CSS module so it gets regenerated\n const virtualMod = server?.moduleGraph.getModuleById(RESOLVED_VIRTUAL_MODULE_ID);\n if (virtualMod) {\n server?.moduleGraph.invalidateModule(virtualMod);\n }\n \n moduleCSS.delete(ctx.file);\n \n server?.ws.send({type: \"full-reload\"});\n return [];\n }\n },\n };\n}\n\n// Also export as named export for flexibility\nexport {catomPlugin};\n"]}
|