UNPKG

@twstyled/core

Version:

twstyled -- the full-featured Tailwind CSS + CSS in JS solution with blazing fast build times and no runtime overhead

226 lines (225 loc) 8.59 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __spreadArray = (this && this.__spreadArray) || function (to, from) { for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i]; return to; }; var _a; Object.defineProperty(exports, "__esModule", { value: true }); var fs = __importStar(require("fs")); var path = __importStar(require("path")); var core_1 = __importStar(require("@xwind/core")); var descriptions_1 = __importStar(require("./descriptions")); var FractionRegExp = /^[0-9]+\/[0-9]+$/; var twConfig = core_1.resolveConfig({}); var _b = core_1.default(twConfig), utilitiesRoot = _b.utilitiesRoot, componentsRoot = _b.componentsRoot, screens = _b.screens, variants = _b.variants; var twObjectMap = core_1.createTwClassDictionary(utilitiesRoot, componentsRoot); var TW_COLORS = /^(divide|bg|from|via|to|border|placeholder|ring-offset|ring|text)\-/; var twClassList = []; var jsx = Object.keys(twObjectMap) .filter(function (key) { return !key.startsWith('XWIND'); }) .sort() .reduce(function (accum, twClass) { var jsxClass = withSuffix(twClass); var baseClass = removePrefix(twClass); twClassList.push(baseClass); var description = descriptions_1.default[baseClass] || descriptions_1.default[Object.keys(descriptions_1.default).find(function (d) { return baseClass.startsWith(d); })]; if (!description) { console.log(baseClass + " MISSING DESCRIPTION"); } var cssCode = "/** \n * Tailwind CSS **`" + baseClass + "`**\n * \n * *" + description + "*\n * ``` css \n * " + twObjectMap[twClass] .toString() .replace(/[^{]*\{/, '{') .trim() .replace(/\\./g, '.') .replace(/\//g, '\\/') .replace(/\n\s*/g, ' ') + "\n * ``` \n * Docs: [tailwindcss](https://tailwindcss.com/docs/container) Source: [twstyled](https://github/twstyled/twstyled)\n **/\r\n"; var twClassPrefix, twClassValue; if (baseClass in descriptions_1.default) { twClassPrefix = baseClass; twClassValue = true; } else if (TW_COLORS.test(baseClass)) { var twClassParts = splitAtLastTwoOccurences(twClass, '-'); if (twClassParts[0]) { twClassPrefix = twClassParts[0]; twClassValue = twClassParts[1] + "-" + twClassParts[2]; } else { twClassPrefix = twClassParts[1]; twClassValue = toNumberOrString(twClassParts[2]); } } else { var twClassParts = splitAtLastOccurence(twClass, '-'); if (twClassParts[0]) { twClassPrefix = twClassParts[0]; twClassValue = toNumberOrString(twClassParts[1]); } else { twClassPrefix = twClassParts[1]; twClassValue = true; } } var jsxClassPrefix = withSuffixPartial(twClassPrefix); var jsxClassValue = twClassPrefix.startsWith('-') ? toNegative(twClassValue) : twClassValue; var categoryCode = "/** \n * Tailwind CSS Prefix **`" + jsxClassPrefix + "`**\n * \n * *" + description + "*\n **/\r\n"; accum[jsxClass] = accum[jsxClass] || { description: cssCode, values: [] }; if (accum[jsxClass].values.indexOf(true) === -1) { accum[jsxClass].values.push(true); } if (jsxClassValue !== null && jsxClassValue !== true) { accum[jsxClassPrefix] = accum[jsxClassPrefix] || { description: categoryCode, values: [] }; accum[jsxClassPrefix].values.push(jsxClassValue); } return accum; }, {}); Object.keys(jsx).forEach(function (jsxClass) { if (jsx[jsxClass].values.length > 1 || jsx[jsxClass].values[0] !== true) { var additionalDescription = jsx[jsxClass].values .sort(sortNumberOrString) .map(function (suffix) { var twClass = toTwclass(jsxClass, suffix); var css = twObjectMap[twClass] .toString() .replace(/[^{]*\{/, '{') .trim() .replace(/\\./g, '.') .replace(/\//g, '\\/') .replace(/\n\s*/g, ' '); return "* " + (suffix !== true ? "" + suffix : jsxClass) + ": " + css; }) .join('\r\n'); jsx[jsxClass].description = jsx[jsxClass].description.replace(/\*\*\/\r\n$/, "\n``` css\n" + additionalDescription + "\n```\n**/\r\n"); } }); var result = "/* eslint-disable max-lines */\n/* eslint-disable prettier/prettier */\n\ntype TailwindClasses = |\n" + twClassList .map(function (twClass) { return "'" + twClass + "'"; }) .join('| \r\n') + ";\n\nexport interface TailwindAttributes {\n " + Object.keys(jsx) .sort() .map(function (jsxClass) { return jsx[jsxClass].description + " " + JSON.stringify(jsxClass) + ": " + jsx[jsxClass].values .sort(sortNumberOrString) .map(function (v) { return (typeof v === 'string' ? "'" + v + "'" : "" + v); }) .join(' | '); }) .join('\r\n') + "\n" + (_a = []) .concat.apply(_a, __spreadArray(__spreadArray(__spreadArray([], screens), variants), ['tw'])).map(function (variant) { return " /** \n * Tailwind " + (variant === 'tw' ? 'Styles' : "Variant **`" + variant + ":`**") + "\n * \n * " + (descriptions_1.VARIANTS[variant] || '') + "\n * \n * Docs: [tailwindcss](https://tailwindcss.com/docs/hover-focus-and-other-states#" + variant + ") Source: [twstyled](https://github/twstyled/twstyled)\n **/\n \"" + variant + "--\": Array<TailwindClasses>"; }) .join('\r\n') + "\n}"; fs.writeFileSync(path.resolve(__dirname, '../../../src/types-tw.ts'), result); /** HELPER FUNCTIONS */ function splitAtLastOccurence(src, char) { var pos = src.lastIndexOf(char); return [src.substring(0, pos), src.substring(pos + 1)]; } function splitAtLastTwoOccurences(src, char) { var pos2 = src.lastIndexOf(char); var pos1 = src.substring(0, pos2 - 1).lastIndexOf(char); return [ src.substring(0, pos1), src.substring(pos1 + 1, pos2), src.substring(pos2 + 1) ]; } function toNumberOrString(src) { if (FractionRegExp.test(src)) { //const split = src.split('/') return "" + src; // `parseInt(split[0], 10) / parseInt(split[1], 10)} | '${src}'` } var asNumber = Number(src); if (Number.isNaN(asNumber)) { return "" + src; } else { return asNumber; } } function sortNumberOrString(a, b) { if (typeof a === 'string') { if (typeof b === 'string') { return b > a ? 1 : b === a ? 0 : -1; } else { return -1; } } else { if (typeof b === 'string') { return 1; } else if (typeof a === 'boolean' || typeof b === 'boolean') { return 0; } else { return a - b; } } } function withSuffix(key) { if (key.startsWith('-')) { return key.substr(1) + "-"; } return key + "-"; } function withSuffixPartial(key) { if (key.startsWith('-')) { return key.substr(1) + "-"; } return key + "-"; } function removeSuffix(key) { return key.substr(0, key.length - 1); } function removePrefix(key) { if (key.startsWith('-')) { return key.substr(1); } return key; } function toTwclass(jsxPrefix, suffix) { var twPrefix = removeSuffix(jsxPrefix); if (suffix === true) { return twPrefix; } else if (typeof suffix === 'string' || suffix >= 0) { return twPrefix + "-" + suffix; } else { return "-" + twPrefix + suffix; } } function toNegative(key) { if (typeof key === 'string' || key === 0) { return null; } return -1 * key; }