UNPKG

@shufo/tailwindcss-class-sorter

Version:

A tailwindcss class sorter that respects tailwind config file

8 lines (7 loc) 7.64 kB
{ "version": 3, "sources": ["../src/main.ts", "../build/import-meta-url.js"], "sourcesContent": ["import setupContextUtil from \"tailwindcss/lib/lib/setupContextUtils.js\";\nimport generateRules from \"tailwindcss/lib/lib/generateRules.js\";\nimport resolveConfig from \"tailwindcss/resolveConfig.js\";\nimport loadConfig from \"tailwindcss/loadConfig.js\";\nimport type { Config } from \"tailwindcss/types/config\";\nimport escalade from \"escalade/sync\";\nimport { IOption } from \"./options\";\nimport objectHash from \"object-hash\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport { fileURLToPath } from \"url\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nlet tailwindConfig: Config = {\n content: [],\n theme: {},\n};\n\nconst contextMap = new Map();\nconst __defaultConfig__ = \"tailwind.config.js\";\n\nfunction bigSign(bigIntValue: number) {\n const left: any = bigIntValue > 0n;\n const right: any = bigIntValue < 0n;\n\n return left - right;\n}\n\nfunction prefixCandidate(context, selector) {\n const prefix = context.tailwindConfig.prefix;\n\n return typeof prefix === \"function\" ? prefix(selector) : prefix + selector;\n}\n\nfunction getClassOrderPolyfill(classes, context) {\n const parasiteUtilities = new Set([\n prefixCandidate(context, \"group\"),\n\n prefixCandidate(context, \"peer\"),\n ]);\n\n const classNamesWithOrder: Array<Array<string>> = [];\n\n for (const className of classes) {\n let order =\n generateRules(new Set([className]), context).sort(([a], [z]) =>\n bigSign(z - a)\n )[0]?.[0] ?? null;\n\n if (order === null && parasiteUtilities.has(className)) {\n order = context.layerOrder.components;\n }\n\n classNamesWithOrder.push([className, order]);\n }\n\n return classNamesWithOrder;\n}\n\nexport function sortClasses(classStr: string, options: IOption = {}): string {\n const tailwindConfigPath = escalade(__dirname, (dir, names) => {\n if (names.includes(__defaultConfig__)) {\n return __defaultConfig__;\n }\n });\n\n tailwindConfig.content = [\"no-op\"];\n\n if (tailwindConfigPath) {\n tailwindConfig = requireConfig(tailwindConfigPath);\n }\n\n if (options.tailwindConfig && options.tailwindConfigPath) {\n throw new Error(\n \"You can not specify tailwinfConfig or tailwinfConfigPath. Please specify either one.\"\n );\n }\n\n if (options.tailwindConfigPath) {\n tailwindConfig = requireConfig(options.tailwindConfigPath);\n }\n\n if (options.tailwindConfig) {\n tailwindConfig = options.tailwindConfig;\n }\n\n const hash = objectHash(tailwindConfig, { ignoreUnknown: true });\n\n let context;\n\n const existing = contextMap.get(hash);\n\n if (existing && existing.hash === hash) {\n context = existing.context;\n } else {\n context = setupContextUtil.createContext(resolveConfig(tailwindConfig));\n\n contextMap.set(hash, { context, hash });\n }\n\n const parts: string[] = classStr\n\n .split(/\\s+/)\n\n .filter((x) => x !== \"\" && x !== \"|\");\n\n const unknownClassNames: string[] = [];\n\n const knownClassNamesWithOrder = context.getClassOrder\n ? context.getClassOrder(parts)\n : getClassOrderPolyfill(parts, context);\n\n const knownClassNames = knownClassNamesWithOrder\n\n .sort(([, a]: any, [, z]: any) => {\n if (a === z) return 0;\n\n if (a === null) return -1;\n\n if (z === null) return 1;\n\n return bigSign(a - z);\n })\n\n .map(([className]) => className);\n\n return [...unknownClassNames, ...knownClassNames].join(\" \");\n}\n\nfunction requireConfig(configPath: string) {\n if (!fs.existsSync(configPath)) {\n throw new Error(\"tailwind config could not be found at: \" + path);\n }\n\n try {\n return loadConfig(configPath);\n } catch (err: any) {\n if (\n err.code === \"MODULE_NOT_FOUND\" &&\n err.moduleName === path.resolve(configPath)\n ) {\n throw new Error(\n \"tailwind config could not be found at: \" + configPath\n );\n }\n\n throw err;\n }\n}\n", "export var import_meta_url = require(\"url\").pathToFileURL(__filename);\n"], "mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,iBAAAE,IAAA,eAAAC,EAAAH,GCAO,IAAII,EAAkB,QAAQ,KAAK,EAAE,cAAc,UAAU,EDApE,IAAAC,EAA6B,yDAC7BC,EAA0B,qDAC1BC,EAA0B,6CAC1BC,EAAuB,0CAEvBC,EAAqB,8BAErBC,EAAuB,4BACvBC,EAAiB,qBACjBC,EAAe,mBACfC,EAA8B,eAExBC,KAAa,iBAAcC,CAAe,EAC1CC,EAAY,EAAAC,QAAK,QAAQH,CAAU,EAErCI,EAAyB,CACzB,QAAS,CAAC,EACV,MAAO,CAAC,CACZ,EAEMC,EAAa,IAAI,IACjBC,EAAoB,qBAE1B,SAASC,EAAQC,EAAqB,CAClC,IAAMC,EAAYD,EAAc,GAC1BE,EAAaF,EAAc,GAEjC,OAAOC,EAAOC,CAClB,CAEA,SAASC,EAAgBC,EAASC,EAAU,CACxC,IAAMC,EAASF,EAAQ,eAAe,OAEtC,OAAO,OAAOE,GAAW,WAAaA,EAAOD,CAAQ,EAAIC,EAASD,CACtE,CAEA,SAASE,EAAsBC,EAASJ,EAAS,CAC7C,IAAMK,EAAoB,IAAI,IAAI,CAC9BN,EAAgBC,EAAS,OAAO,EAEhCD,EAAgBC,EAAS,MAAM,CACnC,CAAC,EAEKM,EAA4C,CAAC,EAEnD,QAAWC,KAAaH,EAAS,CAC7B,IAAII,KACA,EAAAC,SAAc,IAAI,IAAI,CAACF,CAAS,CAAC,EAAGP,CAAO,EAAE,KAAK,CAAC,CAACU,CAAC,EAAG,CAACC,CAAC,IACtDhB,EAAQgB,EAAID,CAAC,CACjB,EAAE,CAAC,IAAI,CAAC,GAAK,KAEbF,IAAU,MAAQH,EAAkB,IAAIE,CAAS,IACjDC,EAAQR,EAAQ,WAAW,YAG/BM,EAAoB,KAAK,CAACC,EAAWC,CAAK,CAAC,CAC/C,CAEA,OAAOF,CACX,CAEO,SAASM,EAAYC,EAAkBC,EAAmB,CAAC,EAAW,CACzE,IAAMC,KAAqB,EAAAC,SAAS1B,EAAW,CAAC2B,EAAKC,IAAU,CAC3D,GAAIA,EAAM,SAASxB,CAAiB,EAChC,OAAOA,CAEf,CAAC,EAQD,GANAF,EAAe,QAAU,CAAC,OAAO,EAE7BuB,IACAvB,EAAiB2B,EAAcJ,CAAkB,GAGjDD,EAAQ,gBAAkBA,EAAQ,mBAClC,MAAM,IAAI,MACN,sFACJ,EAGAA,EAAQ,qBACRtB,EAAiB2B,EAAcL,EAAQ,kBAAkB,GAGzDA,EAAQ,iBACRtB,EAAiBsB,EAAQ,gBAG7B,IAAMM,KAAO,EAAAC,SAAW7B,EAAgB,CAAE,cAAe,EAAK,CAAC,EAE3DQ,EAEEsB,EAAW7B,EAAW,IAAI2B,CAAI,EAEhCE,GAAYA,EAAS,OAASF,EAC9BpB,EAAUsB,EAAS,SAEnBtB,EAAU,EAAAuB,QAAiB,iBAAc,EAAAC,SAAchC,CAAc,CAAC,EAEtEC,EAAW,IAAI2B,EAAM,CAAE,QAAApB,EAAS,KAAAoB,CAAK,CAAC,GAG1C,IAAMK,EAAkBZ,EAEnB,MAAM,KAAK,EAEX,OAAQa,GAAMA,IAAM,IAAMA,IAAM,GAAG,EAElCC,EAA8B,CAAC,EAM/BC,GAJ2B5B,EAAQ,cACnCA,EAAQ,cAAcyB,CAAK,EAC3BtB,EAAsBsB,EAAOzB,CAAO,GAIrC,KAAK,CAAC,CAAC,CAAEU,CAAC,EAAQ,CAAC,CAAEC,CAAC,IACfD,IAAMC,EAAU,EAEhBD,IAAM,KAAa,GAEnBC,IAAM,KAAa,EAEhBhB,EAAQe,EAAIC,CAAC,CACvB,EAEA,IAAI,CAAC,CAACJ,CAAS,IAAMA,CAAS,EAEnC,MAAO,CAAC,GAAGoB,EAAmB,GAAGC,CAAe,EAAE,KAAK,GAAG,CAC9D,CAEA,SAAST,EAAcU,EAAoB,CACvC,GAAI,CAAC,EAAAC,QAAG,WAAWD,CAAU,EACzB,MAAM,IAAI,MAAM,0CAA4C,EAAAtC,OAAI,EAGpE,GAAI,CACA,SAAO,EAAAwC,SAAWF,CAAU,CAChC,OAASG,EAAP,CACE,MACIA,EAAI,OAAS,oBACbA,EAAI,aAAe,EAAAzC,QAAK,QAAQsC,CAAU,EAEpC,IAAI,MACN,0CAA4CA,CAChD,EAGEG,CACV,CACJ", "names": ["main_exports", "__export", "sortClasses", "__toCommonJS", "import_meta_url", "import_setupContextUtils", "import_generateRules", "import_resolveConfig", "import_loadConfig", "import_sync", "import_object_hash", "import_path", "import_fs", "import_url", "__filename", "import_meta_url", "__dirname", "path", "tailwindConfig", "contextMap", "__defaultConfig__", "bigSign", "bigIntValue", "left", "right", "prefixCandidate", "context", "selector", "prefix", "getClassOrderPolyfill", "classes", "parasiteUtilities", "classNamesWithOrder", "className", "order", "generateRules", "a", "z", "sortClasses", "classStr", "options", "tailwindConfigPath", "escalade", "dir", "names", "requireConfig", "hash", "objectHash", "existing", "setupContextUtil", "resolveConfig", "parts", "x", "unknownClassNames", "knownClassNames", "configPath", "fs", "loadConfig", "err"] }