{"version":3,"file":"index.cjs","sources":["../../src/stylesTransformer.ts","../../src/jsxTransformer.ts","../../src/helpers.ts","../../src/index.ts"],"sourcesContent":["import type { CSSModulesOptions } from \"vite\";\nimport postcss from \"postcss\";\nimport postcssModules from \"postcss-modules\";\n\nimport sassPostCssPlugin from \"@csstools/postcss-sass\";\nimport sassSyntax from \"postcss-scss\";\nimport lessSyntax from \"postcss-less\";\n\nexport async function transformStyles(\n  from: string,\n  code: string,\n  options: CSSModulesOptions = {}\n) {\n  let manifest: Record<string, string> = {};\n  const extensions = getSyntaxExtensions(from);\n  const plugins = [];\n  if (extensions?.plugin) {\n    plugins.push(extensions.plugin);\n  }\n\n  const result = await postcss([\n    ...plugins,\n    postcssModules({\n      ...options,\n      getJSON(\n        fileName: string,\n        json: Record<string, string>,\n        outputFileName: string\n      ) {\n        manifest = json;\n        if (options.getJSON && typeof options.getJSON === \"function\") {\n          options.getJSON(fileName, json, outputFileName);\n        }\n      },\n    }),\n  ]).process(code, {\n    from,\n    syntax: extensions?.syntax,\n  });\n  return {\n    manifest,\n    css: result.css,\n  };\n}\n\nfunction getSyntaxExtensions(fileUrl: string) {\n  if (fileUrl.endsWith(\".scss\") || fileUrl.endsWith(\".sass\")) {\n    return {\n      plugin: sassPostCssPlugin,\n      syntax: sassSyntax,\n    };\n  }\n\n  if (fileUrl.endsWith(\".less\")) {\n    return {\n      plugin: undefined,\n      syntax: lessSyntax,\n    };\n  }\n\n  return null;\n}\n","import MagicString from \"magic-string\";\nimport { parse } from \"@babel/parser\";\nimport _traverse, { NodePath } from \"@babel/traverse\";\nimport {\n  JSXAttribute,\n  StringLiteral,\n  isCallExpression,\n  isIdentifier,\n  isJSXExpressionContainer,\n  isObjectExpression,\n  isStringLiteral,\n} from \"@babel/types\";\n\n// https://github.com/babel/babel/issues/13855\n// @ts-ignore\nconst traverse = _traverse.default as typeof _traverse;\n\nexport async function transformJSX({\n  moduleId,\n  styleModuleId,\n  originalCode,\n  manifest,\n}: {\n  moduleId: string;\n  styleModuleId: string;\n  originalCode: string;\n  manifest: Record<string, string>;\n}) {\n  const source = new MagicString(originalCode);\n  const ast = parse(originalCode, {\n    plugins: [\"typescript\", \"jsx\"],\n    sourceType: \"module\",\n  });\n\n  source.prepend(`import \"${styleModuleId}\";\\n`);\n\n  /**\n   * No need to walk through JSX if manifest is empty.\n   */\n  if (Object.keys(manifest).length === 0) {\n    return generateRollupTransformResult(source, moduleId);\n  }\n\n  traverse(ast, {\n    JSXAttribute(path) {\n      const { value } = path.node;\n\n      if (isClassAttributePath(path)) {\n        /**\n         * Handle the simplest case: <div class=\"foobar\" />\n         */\n        if (isStringLiteral(value)) {\n          transformClassStringLiteral(value);\n        }\n\n        /**\n         * Handle className helper functions, e.g:\n         * <div class={ classNames({ foo: true }, [\"bar\", \"baz\"]) }/>\n         */\n        if (\n          isJSXExpressionContainer(value) &&\n          isCallExpression(value.expression)\n        ) {\n          transformClassNamesObject(path);\n          transformArrayMemberClassName(path);\n          return;\n        }\n\n        return;\n      }\n\n      if (\n        isClassListAttributePath(path) &&\n        isJSXExpressionContainer(value) &&\n        isObjectExpression(value.expression)\n      ) {\n        transformClassNamesObject(path);\n      }\n    },\n  });\n\n  function transformClassStringLiteral(value: StringLiteral) {\n    const { start, end } = value;\n    const classSegments = value.value.split(\" \").filter((s) => !!s);\n    const resolvedClassSegments = classSegments.map((className) => {\n      return manifest[className] || className;\n    });\n    const finalClassName = resolvedClassSegments.join(\" \");\n    source.overwrite(start!, end!, `\"${finalClassName}\"`);\n  }\n\n  function transformClassNamesObject(path: NodePath) {\n    const node = path.node;\n    traverse(node, {\n      noScope: true,\n      ObjectProperty(prop) {\n        if (isIdentifier(prop.node.key)) {\n          const { start, end } = prop.node.key;\n          const { name } = prop.node.key;\n          source.overwrite(start!, end!, `\"${manifest[name] || name}\"`);\n          return;\n        }\n\n        if (isStringLiteral(prop.node.key)) {\n          transformClassStringLiteral(prop.node.key);\n        }\n      },\n    });\n  }\n\n  function transformArrayMemberClassName(path: NodePath) {\n    const node = path.node;\n    traverse(node, {\n      noScope: true,\n      ArrayExpression(prop) {\n        prop.node.elements.forEach((element) => {\n          if (isStringLiteral(element)) {\n            transformClassStringLiteral(element);\n          }\n        });\n      },\n    });\n  }\n\n  return generateRollupTransformResult(source, moduleId);\n}\n\nfunction generateRollupTransformResult(source: MagicString, moduleId: string) {\n  return {\n    code: source.toString(),\n    map: source.generateMap({\n      source: moduleId,\n    }),\n  };\n}\n\nfunction isClassAttributePath(path: NodePath<JSXAttribute>) {\n  return path.node.name.name === \"class\" || path.node.name.name === \"className\";\n}\n\nfunction isClassListAttributePath(path: NodePath<JSXAttribute>) {\n  return path.node.name.name === \"classList\";\n}\n","import { scandir } from \"@nodelib/fs.scandir\";\nimport { parse } from \"path\";\nimport micromatch from \"micromatch\";\nimport { PluginOptions, ResolvedStyleResult } from \"./types\";\n\nexport async function resolveStylesFromDirectory({\n  componentFilePath,\n  directory,\n  options,\n}: {\n  componentFilePath: string;\n  directory: string[];\n  options: Partial<PluginOptions>;\n}): Promise<ResolvedStyleResult[]> {\n  const parsedPath = parse(componentFilePath);\n  const componentName = parsedPath.name;\n  const directoryName = parsedPath.dir;\n\n  if (typeof options.resolveStyleForComponent === \"function\") {\n    const result = await options.resolveStyleForComponent(\n      componentName,\n      directoryName,\n      componentFilePath\n    );\n\n    return result ? [result] : [];\n  }\n\n  if (typeof options.styleGlob === \"string\") {\n    const matches = micromatch(directory, options.styleGlob, {\n      basename: true,\n    });\n\n    return handleGlobMatches(matches, options.resolveAllStylesAsModules);\n  }\n\n  if (!options.styleExtensions) {\n    throw new Error(\n      \"One of 'resolveStyleForComponent', 'styleGlob' or 'styleExtensions' is required\"\n    );\n  }\n\n  const globs = options.styleExtensions.map((ext) => {\n    /**\n     * If `matchComponentName` is enabled then the result glob\n     * would look like this: `component*.{css|scss|less}`.\n     * Otherwise: `*.{css|scss|less}` (matches any style file)\n     */\n    const prefix = options.matchComponentName ? componentName : \"\";\n    return `${prefix}*${ext}`;\n  });\n\n  const matches = micromatch(directory, globs, {\n    basename: true,\n  });\n\n  return handleGlobMatches(matches, options.resolveAllStylesAsModules);\n}\n\nfunction handleGlobMatches(\n  matches: string[],\n  resolveAllStylesAsModules = false\n): ResolvedStyleResult[] {\n  return matches.map((filePath) => {\n    const parsedStylePath = parse(filePath);\n    let isModule: boolean;\n    if (resolveAllStylesAsModules) {\n      isModule = true;\n    } else {\n      isModule = parsedStylePath.name.endsWith(\".module\");\n    }\n\n    return {\n      filePath,\n      isModule,\n    };\n  });\n}\n\nexport async function getAllFilesInDirectory(dir: string) {\n  return new Promise<string[]>((resolve, reject) => {\n    scandir(dir, (err, result) => {\n      if (err) {\n        return reject(err);\n      }\n\n      const paths = result\n        .filter((entry) => !entry.stats?.isDirectory())\n        .map((entry) => entry.path);\n\n      resolve(paths);\n    });\n  });\n}\n","import { parse as parsePath } from \"path\";\nimport { readFile } from \"fs/promises\";\nimport type { Plugin, CSSModulesOptions } from \"vite\";\nimport { transformStyles } from \"./stylesTransformer\";\nimport { transformJSX } from \"./jsxTransformer\";\nimport { PluginOptions } from \"./types\";\nimport { getAllFilesInDirectory, resolveStylesFromDirectory } from \"./helpers\";\n\nconst defaultOptions: Partial<PluginOptions> = {\n  componentExtensions: [\".tsx\", \".jsx\"],\n  styleExtensions: [\".css\", \".scss\", \".less\"],\n  matchComponentName: true,\n};\n\nconst virtualModuleIdPrefix = \"virtual:css-auto-import\";\nconst resolvedVirtualModuleIdPrefix = `\\0${virtualModuleIdPrefix}`;\nconst virtualModuleUrlSeparator = \"originalModuleId=\";\n\nexport default function cssAutoImport(\n  userOptions: Partial<PluginOptions> = {}\n) {\n  const options = {\n    ...defaultOptions,\n    ...userOptions,\n  };\n  const componentToCssMap = new Map<string, string>();\n  const styleModuleIdToCssMap = new Map<string, string>();\n\n  /**\n   * Used in development mode for watching\n   */\n  const directoryComponentsMap = new Map<string, Set<string>>();\n  const styleModuleIdToComponentIdsMap = new Map<string, Set<string>>();\n\n  let modulesOptions: CSSModulesOptions | undefined;\n\n  async function shouldTransformModule(id: string) {\n    const path = parsePath(id);\n    const fileName = path.base;\n    if (typeof options.shouldTransformComponent === \"function\") {\n      return await options.shouldTransformComponent(fileName, id);\n    }\n\n    if (!options.componentExtensions) {\n      throw new Error(\n        \"Either 'shouldTransformComponent' or 'componentExtensions' is required\"\n      );\n    }\n\n    /**\n     * TODO: add pragma to disable transform inside component file\n     */\n    return options.componentExtensions.includes(path.ext);\n  }\n\n  /**\n   * Generates a URL that looks like the following:\n   * virtual:css-auto-import/e2fdd67cf4194/originalModuleId=<path> \n   */\n  function generateVirtualStyleModuleId(moduleId: string) {\n    const uniqueId = Math.random().toString(16).slice(2);\n    return `${virtualModuleIdPrefix}/${uniqueId}/${virtualModuleUrlSeparator}${moduleId}`;\n  }\n\n  function addReferenceRecord(\n    map: Map<string, Set<string>>,\n    key: string,\n    moduleId: string\n  ) {\n    let dependentModules = map.get(key);\n    if (!dependentModules) {\n      dependentModules = new Set();\n      map.set(key, dependentModules);\n    }\n\n    dependentModules.add(moduleId);\n  }\n\n  return {\n    enforce: \"pre\",\n    name: \"css-auto-import\",\n\n    configResolved(config) {\n      if (config.css?.modules && typeof config.css.modules === \"object\") {\n        modulesOptions = config.css.modules;\n      }\n    },\n\n    configureServer(server) {\n      const reloadModuleById = (id: string) => {\n        const module = server?.moduleGraph.getModuleById(id);\n        if (module) {\n          server?.reloadModule(module);\n        }\n      };\n\n      server.watcher.on(\"add\", (fileId) => {\n        const path = parsePath(fileId);\n        const dir = path.dir;\n        const dependentModules = directoryComponentsMap.get(dir);\n        /**\n         * TODO: check if fileId is a style module\n         */\n        dependentModules?.forEach(reloadModuleById);\n      });\n\n      server.watcher.on(\"unlink\", (fileId) => {\n        if (styleModuleIdToComponentIdsMap.has(fileId)) {\n          const dependentModules = styleModuleIdToComponentIdsMap.get(fileId);\n          dependentModules?.forEach(reloadModuleById);\n          styleModuleIdToComponentIdsMap.delete(fileId);\n        }\n      });\n\n      server.watcher.on(\"unlinkDir\", (dir) => {\n        if (directoryComponentsMap.has(dir)) {\n          /**\n           * TODO: check whether need to clean other maps\n           */\n          directoryComponentsMap.delete(dir);\n        }\n      });\n\n      server.watcher.on(\"change\", (fileId) => {\n        if (!styleModuleIdToComponentIdsMap.has(fileId)) {\n          return;\n        }\n\n        const dependentModules = styleModuleIdToComponentIdsMap.get(fileId);\n        dependentModules?.forEach(reloadModuleById);\n      });\n    },\n\n    resolveId(id) {\n      if (!id.startsWith(virtualModuleIdPrefix)) {\n        return undefined;\n      }\n      return \"\\0\" + id;\n    },\n\n    load(id) {\n      if (!id.startsWith(resolvedVirtualModuleIdPrefix)) {\n        return undefined;\n      }\n\n      const separatorIdx = id.indexOf(virtualModuleUrlSeparator);\n      /**\n       * Extract the part that goes after the `originalModuleId=`\n       */\n      const referencedModuleId = id.substring(separatorIdx + virtualModuleUrlSeparator.length);\n\n      if (!styleModuleIdToCssMap.has(referencedModuleId)) {\n        throw new Error(`Failed to resolve CSS module ${referencedModuleId}`);\n      }\n\n      return styleModuleIdToCssMap.get(referencedModuleId);\n    },\n\n    async transform(code, id) {\n      if (!(await shouldTransformModule(id))) {\n        return null;\n      }\n\n      const parsedModuleId = parsePath(id);\n      const componentDirectory = parsedModuleId.dir;\n      const directory = await getAllFilesInDirectory(componentDirectory);\n      const styleModules = await resolveStylesFromDirectory({\n        componentFilePath: id,\n        directory,\n        options,\n      });\n\n      if (!styleModules || !styleModules.length) {\n        return null;\n      }\n\n      /**\n       * TODO: consider multiple style modules support\n       */\n      if (styleModules.length > 1) {\n        this.warn(\n          `Found multiple style module matches for ${id}. Using the first match: ${styleModules[0].filePath}`\n        );\n      }\n\n      const [styleModule] = styleModules;\n      const { filePath: styleModuleId, isModule } = styleModule;\n\n      const styleModuleCode = (await readFile(styleModuleId)).toString();\n      let css: string | undefined;\n      let manifest: Record<string, string> = {};\n\n      if (isModule) {\n        try {\n          const result = await transformStyles(\n            styleModuleId,\n            styleModuleCode,\n            modulesOptions\n          );\n          css = result.css;\n          manifest = result.manifest;\n        } catch (err: any) {\n          this.error({\n            message: err.reason,\n            loc: {\n              column: err.column,\n              line: err.line,\n              file: err.file,\n            },\n          });\n        }\n      } else {\n        /**\n         * No need to transform non-module styles. Just use original CSS as is.\n         */\n        css = styleModuleCode;\n      }\n\n      if (css === undefined) {\n        return null;\n      }\n\n      const normalizedStyleModuleId = styleModuleId.replace(\".module\", \"\");\n      const styleVirtualModuleId = generateVirtualStyleModuleId(\n        normalizedStyleModuleId\n      );\n\n      componentToCssMap.set(id, css);\n      styleModuleIdToCssMap.set(normalizedStyleModuleId, css);\n\n      addReferenceRecord(styleModuleIdToComponentIdsMap, styleModuleId, id);\n      addReferenceRecord(directoryComponentsMap, componentDirectory, id);\n\n      return transformJSX({\n        moduleId: id,\n        styleModuleId: styleVirtualModuleId,\n        originalCode: code,\n        manifest,\n      });\n    },\n  } as Plugin;\n}\n"],"names":["transformStyles","from","code","options","manifest","extensions","getSyntaxExtensions","plugins","plugin","push","result","postcss","postcssModules","getJSON","fileName","json","outputFileName","process","syntax","css","fileUrl","endsWith","sassPostCssPlugin","sassSyntax","undefined","lessSyntax","traverse","_traverse","default","transformJSX","moduleId","styleModuleId","originalCode","source","MagicString","ast","parse","sourceType","prepend","Object","keys","length","generateRollupTransformResult","JSXAttribute","path","value","node","isClassAttributePath","isStringLiteral","transformClassStringLiteral","isJSXExpressionContainer","isCallExpression","expression","transformClassNamesObject","transformArrayMemberClassName","isClassListAttributePath","isObjectExpression","start","end","classSegments","split","filter","s","resolvedClassSegments","map","className","finalClassName","join","overwrite","noScope","ObjectProperty","prop","isIdentifier","key","name","ArrayExpression","elements","forEach","element","toString","generateMap","resolveStylesFromDirectory","componentFilePath","directory","parsedPath","componentName","directoryName","dir","resolveStyleForComponent","styleGlob","matches","micromatch","basename","handleGlobMatches","resolveAllStylesAsModules","styleExtensions","Error","globs","ext","prefix","matchComponentName","filePath","parsedStylePath","isModule","getAllFilesInDirectory","Promise","resolve","reject","scandir","err","paths","entry","stats","isDirectory","defaultOptions","componentExtensions","virtualModuleIdPrefix","resolvedVirtualModuleIdPrefix","virtualModuleUrlSeparator","cssAutoImport","userOptions","componentToCssMap","Map","styleModuleIdToCssMap","directoryComponentsMap","styleModuleIdToComponentIdsMap","modulesOptions","shouldTransformModule","id","parsePath","base","shouldTransformComponent","includes","generateVirtualStyleModuleId","uniqueId","Math","random","slice","addReferenceRecord","dependentModules","get","Set","set","add","enforce","configResolved","config","modules","configureServer","server","reloadModuleById","module","moduleGraph","getModuleById","reloadModule","watcher","on","fileId","has","delete","resolveId","startsWith","load","separatorIdx","indexOf","referencedModuleId","substring","transform","parsedModuleId","componentDirectory","styleModules","warn","styleModule","styleModuleCode","readFile","error","message","reason","loc","column","line","file","normalizedStyleModuleId","replace","styleVirtualModuleId"],"mappings":"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"}