@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
JavaScript
;
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;
}