1{"version":3,"file":"postcss.js","names":["_jsonFile","data","_interopRequireDefault","require","_fs","_path","_resolveFrom","_require","obj","__esModule","default","CONFIG_FILE_NAME","debug","transformPostCssModule","projectRoot","src","filename","inputConfig","resolvePostcssConfig","processWithPostcssInputConfigAsync","plugins","processOptions","parsePostcssConfigAsync","config","resourcePath","postcss","processor","content","process","file","inputPlugins","map","parser","stringifier","syntax","factory","pluginFactory","item","plugin","options","loadPlugin","from","path","resolve","to","_resolveFrom$silent","tryRequireThenImport","resolveFrom","silent","error","Error","message","_resolveFrom$silent2","_resolveFrom$silent3","inline","loadedPlugin","Object","keys","length","listOfPlugins","Map","Array","isArray","name","set","undefined","delete","objectPlugins","entries","jsConfigPath","join","fs","existsSync","requireUncachedFile","jsonConfigPath","JsonFile","read","json5","getPostcssConfigHash","stableHash","readFileSync","toString"],"sources":["../../src/transform-worker/postcss.ts"],"sourcesContent":["/**\n * Copyright © 2023 650 Industries.\n * Copyright JS Foundation and other contributors\n *\n * https://github.com/webpack-contrib/postcss-loader/\n */\nimport JsonFile from '@expo/json-file';\nimport fs from 'fs';\nimport path from 'path';\nimport type { AcceptedPlugin, ProcessOptions } from 'postcss';\nimport resolveFrom from 'resolve-from';\n\nimport { requireUncachedFile, tryRequireThenImport } from './utils/require';\n\ntype PostCSSInputConfig = {\n  plugins?: any[];\n  from?: string;\n  to?: string;\n  syntax?: string;\n  map?: boolean;\n  parser?: string;\n  stringifier?: string;\n};\n\nconst CONFIG_FILE_NAME = 'postcss.config';\n\nconst debug = require('debug')('expo:metro:transformer:postcss');\n\nexport async function transformPostCssModule(\n  projectRoot: string,\n  { src, filename }: { src: string; filename: string }\n): Promise<string> {\n  const inputConfig = resolvePostcssConfig(projectRoot);\n\n  if (!inputConfig) {\n    return src;\n  }\n\n  return await processWithPostcssInputConfigAsync(projectRoot, {\n    inputConfig,\n    src,\n    filename,\n  });\n}\n\nasync function processWithPostcssInputConfigAsync(\n  projectRoot: string,\n  { src, filename, inputConfig }: { src: string; filename: string; inputConfig: PostCSSInputConfig }\n) {\n  const { plugins, processOptions } = await parsePostcssConfigAsync(projectRoot, {\n    config: inputConfig,\n    resourcePath: filename,\n  });\n\n  debug('options:', processOptions);\n  debug('plugins:', plugins);\n\n  // TODO: Surely this can be cached...\n  const postcss = require('postcss') as typeof import('postcss');\n\n  const processor = postcss.default(plugins);\n  const { content } = await processor.process(src, processOptions);\n\n  return content;\n}\n\nasync function parsePostcssConfigAsync(\n  projectRoot: string,\n  {\n    resourcePath: file,\n    config: { plugins: inputPlugins, map, parser, stringifier, syntax, ...config } = {},\n  }: {\n    resourcePath: string;\n    config: PostCSSInputConfig;\n  }\n): Promise<{ plugins: AcceptedPlugin[]; processOptions: ProcessOptions }> {\n  const factory = pluginFactory();\n\n  factory(inputPlugins);\n  // delete config.plugins;\n\n  const plugins = [...factory()].map((item) => {\n    const [plugin, options] = item;\n\n    if (typeof plugin === 'string') {\n      return loadPlugin(projectRoot, plugin, options, file);\n    }\n\n    return plugin;\n  });\n\n  if (config.from) {\n    config.from = path.resolve(projectRoot, config.from);\n  }\n\n  if (config.to) {\n    config.to = path.resolve(projectRoot, config.to);\n  }\n\n  const processOptions: Partial<ProcessOptions> = {\n    from: file,\n    to: file,\n    map: false,\n  };\n\n  if (typeof parser === 'string') {\n    try {\n      processOptions.parser = await tryRequireThenImport(\n        resolveFrom.silent(projectRoot, parser) ?? parser\n      );\n    } catch (error: unknown) {\n      if (error instanceof Error) {\n        throw new Error(\n          `Loading PostCSS \"${parser}\" parser failed: ${error.message}\\n\\n(@${file})`\n        );\n      }\n      throw error;\n    }\n  }\n\n  if (typeof stringifier === 'string') {\n    try {\n      processOptions.stringifier = await tryRequireThenImport(\n        resolveFrom.silent(projectRoot, stringifier) ?? stringifier\n      );\n    } catch (error: unknown) {\n      if (error instanceof Error) {\n        throw new Error(\n          `Loading PostCSS \"${stringifier}\" stringifier failed: ${error.message}\\n\\n(@${file})`\n        );\n      }\n      throw error;\n    }\n  }\n\n  if (typeof syntax === 'string') {\n    try {\n      processOptions.syntax = await tryRequireThenImport(\n        resolveFrom.silent(projectRoot, syntax) ?? syntax\n      );\n    } catch (error: any) {\n      throw new Error(`Loading PostCSS \"${syntax}\" syntax failed: ${error.message}\\n\\n(@${file})`);\n    }\n  }\n\n  if (map === true) {\n    // https://github.com/postcss/postcss/blob/master/docs/source-maps.md\n    processOptions.map = { inline: true };\n  }\n\n  return { plugins, processOptions };\n}\n\nfunction loadPlugin(projectRoot: string, plugin: string, options: unknown, file: string) {\n  try {\n    debug('load plugin:', plugin);\n\n    // e.g. `tailwindcss`\n    let loadedPlugin = require(resolveFrom(projectRoot, plugin));\n\n    if (loadedPlugin.default) {\n      loadedPlugin = loadedPlugin.default;\n    }\n\n    if (!options || !Object.keys(options).length) {\n      return loadedPlugin;\n    }\n\n    return loadedPlugin(options);\n  } catch (error: unknown) {\n    if (error instanceof Error) {\n      throw new Error(`Loading PostCSS \"${plugin}\" plugin failed: ${error.message}\\n\\n(@${file})`);\n    }\n    throw error;\n  }\n}\n\nexport function pluginFactory() {\n  const listOfPlugins = new Map<string, any>();\n\n  return (plugins?: any) => {\n    if (typeof plugins === 'undefined') {\n      return listOfPlugins;\n    }\n\n    if (Array.isArray(plugins)) {\n      for (const plugin of plugins) {\n        if (Array.isArray(plugin)) {\n          const [name, options] = plugin;\n\n          if (typeof name !== 'string') {\n            throw new Error(\n              `PostCSS plugin must be a string, but \"${name}\" was found. Please check your configuration.`\n            );\n          }\n\n          listOfPlugins.set(name, options);\n        } else if (plugin && typeof plugin === 'function') {\n          listOfPlugins.set(plugin, undefined);\n        } else if (\n          plugin &&\n          Object.keys(plugin).length === 1 &&\n          (typeof plugin[Object.keys(plugin)[0]] === 'object' ||\n            typeof plugin[Object.keys(plugin)[0]] === 'boolean') &&\n          plugin[Object.keys(plugin)[0]] !== null\n        ) {\n          const [name] = Object.keys(plugin);\n          const options = plugin[name];\n\n          if (options === false) {\n            listOfPlugins.delete(name);\n          } else {\n            listOfPlugins.set(name, options);\n          }\n        } else if (plugin) {\n          listOfPlugins.set(plugin, undefined);\n        }\n      }\n    } else {\n      const objectPlugins = Object.entries(plugins);\n\n      for (const [name, options] of objectPlugins) {\n        if (options === false) {\n          listOfPlugins.delete(name);\n        } else {\n          listOfPlugins.set(name, options);\n        }\n      }\n    }\n\n    return listOfPlugins;\n  };\n}\n\nexport function resolvePostcssConfig(projectRoot: string): PostCSSInputConfig | null {\n  // TODO: Maybe support platform-specific postcss config files in the future.\n  const jsConfigPath = path.join(projectRoot, CONFIG_FILE_NAME + '.js');\n\n  if (fs.existsSync(jsConfigPath)) {\n    debug('load file:', jsConfigPath);\n    return requireUncachedFile(jsConfigPath);\n  }\n\n  const jsonConfigPath = path.join(projectRoot, CONFIG_FILE_NAME + '.json');\n\n  if (fs.existsSync(jsonConfigPath)) {\n    debug('load file:', jsonConfigPath);\n    return JsonFile.read(jsonConfigPath, { json5: true });\n  }\n\n  return null;\n}\n\nexport function getPostcssConfigHash(projectRoot: string): string | null {\n  // TODO: Maybe recurse plugins and add versions to the hash in the future.\n  const { stableHash } = require('metro-cache');\n\n  const jsConfigPath = path.join(projectRoot, CONFIG_FILE_NAME + '.js');\n  if (fs.existsSync(jsConfigPath)) {\n    return stableHash(fs.readFileSync(jsConfigPath, 'utf8')).toString('hex');\n  }\n\n  const jsonConfigPath = path.join(projectRoot, CONFIG_FILE_NAME + '.json');\n  if (fs.existsSync(jsonConfigPath)) {\n    return stableHash(fs.readFileSync(jsonConfigPath, 'utf8')).toString('hex');\n  }\n  return null;\n}\n"],"mappings":"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"}