UNPKG

stylup

Version:

Write utility classes conveniently while optimising your CSS

1 lines 19.9 kB
{"version":3,"file":"index.mjs","sources":["src/util/generate-regex.js","src/util/get-utility.js","src/index.js"],"sourcesContent":["import _ from 'lodash';\n\n// This function generates new regexes in an object by replacing token identifiers with their regex counterparts\n\nexport default function genRegex(opts) {\n\tlet tokens = {};\n\n\tif (Object(opts).regex) {\n\t\ttokens = opts.regex;\n\t} else {\n\t\ttokens = {\n\t\t\tproperty: /[^-\\s]+/,\n\t\t\tnumber: /[0-9]*\\.?[0-9]+|\\*/,\n\t\t\tunit: /px|cm|mm|in|pt|pc|em|ex|ch|rem|vw|vh|vmin|vmax/,\n\t\t\tseperator: /,/,\n\t\t\targ: /0*({{number}})({{unit}})?|(\\w+)/,\n\t\t\targs: /(?:({{arg}}){{seperator}}?)+/,\n\t\t\tdecl: /({{property}})(?:-({{args}}))?/\n\t\t};\n\t}\n\n\t// Define what a token identifier looks like <word> or {{word}}\n\tlet token = /{{(\\w+)}}/gim;\n\n\t// Takes regex like /\\d\\w[0-9]<word>/ and replaces token identifier with matching token name\n\tfunction replaceTokenIdent(value, tokens) {\n\t\treturn value.toString().replace(token, function (match, name) {\n\t\t\tif (tokens[name]) {\n\t\t\t\tif (tokens[name].toString().match(token)) {\n\t\t\t\t\treturn replaceTokenIdent(tokens[name], tokens);\n\t\t\t\t}\n\t\t\t\treturn tokens[name].source;\n\t\t\t} else {\n\t\t\t\treturn match;\n\t\t\t}\n\t\t});\n\t}\n\n\t// Go through each token in object and replace tokens identifier with value\n\ttokens = _.reduce(\n\t\ttokens,\n\t\tfunction (result, value, key) {\n\t\t\treturn {\n\t\t\t\t...result,\n\t\t\t\t[key]: replaceTokenIdent(value, tokens)\n\t\t\t};\n\t\t},\n\t\t{}\n\t);\n\n\t// Create new regex for each token\n\treturn _.reduce(\n\t\ttokens,\n\t\tfunction (result, value, key) {\n\t\t\treturn {\n\t\t\t\t...result,\n\t\t\t\t[key]: new RegExp(value.replace(/\\//g, ''), 'gmi')\n\t\t\t};\n\t\t},\n\t\t{}\n\t);\n}\n","import _ from 'lodash';\n\nexport default function getUtilities(str, re) {\n\n\tfunction findMatches(regex, str, matches = []) {\n\t\tconst res = regex.exec(str)\n\t\tres && matches.push(res) && findMatches(regex, str, matches)\n\t\treturn matches\n\t}\n\n\t// var declRe = new RegExp(/\\b([^-\\s]+)(?:-((?:(0*([0-9]*\\.?[0-9]+|\\*)(px|cm|mm|in|pt|pc|em|ex|ch|rem|vw|vh|vmin|vmax)?|(\\w+)),?)+))?\\b/, 'gi')\n\n\t// let match = str.match(/\\b([^-\\s]+)(?:-((?:(0*([0-9]*\\.?[0-9]+|\\*)(px|cm|mm|in|pt|pc|em|ex|ch|rem|vw|vh|vmin|vmax)?|(\\w+)),?)+))?\\b/g);\n\n\tconst matches = findMatches(re.decl, str)\n\t// console.log(match)\n\n\tlet utilities = []\n\n\n\tfor (let i = 0; i < matches.length; i++) {\n\t\tlet match = matches[i]\n\n\n\t\tlet utility = {};\n\n\t\tif (match !== null) {\n\t\t\tutility.class = match[1];\n\n\t\t\t// console.log(re.decl)\n\t\t\tutility.args = [];\n\t\t\tutility.decl = match[0];\n\n\t\t\tif (match[2]) {\n\t\t\t\t/* Temporary fix for multiple arguments */\n\t\t\t\tmatch[2].replace(new RegExp(re.arg, 'gmi'), function (arg) {\n\n\t\t\t\t\tif (arg === '*') arg = null\n\t\t\t\t\tutility.args.push(arg);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (utility.args.length === 0) {\n\t\t\t\tutility.args = null;\n\t\t\t}\n\n\t\t\tutilities.push(utility);\n\t\t}\n\t}\n\n\treturn utilities\n\n}\n","import phtml from 'phtml';\nimport { Element } from 'phtml';\nimport _ from 'lodash';\nimport genRegex from './util/generate-regex.js';\nimport getUtilities from './util/get-utility.js';\nimport { stripIndent } from 'common-tags'\nimport fs from 'fs-extra'\nvar uniqid = require('uniqid');\nconst postcss = require('postcss');\nconst postcssrc = require('postcss-load-config');\nconst postcssNested = require('postcss-nested')\nconst autoprefixer = require('autoprefixer')\n\n// Get rules definitions\n\nfunction getConfig(path) {\n\tvar config;\n\n\tif (fs.existsSync(process.cwd() + '/' + path)) {\n\t\tconfig = require(process.cwd() + '/' + path).classes\n\t}\n\n\treturn config\n}\n\n// var rules;\n\n// if (fs.existsSync(process.cwd() + '/' + 'stylup.config.js')) {\n\n// \trules = require(process.cwd() + '/' + 'stylup.config.js').classes\n// \t// console.log(rules)\n\n// }\n// else {\n// \trules = undefined\n// }\n\nfunction putValuesIntoArray(value) {\n\treturn Array.isArray(value) ? value : [value]\n}\n\nfunction genStyles(utility, acc) {\n\tvar styles = ''\n\tif (utility.style({ rule: utility, args: utility.args, str: acc }) === undefined) {\n\t\tstyles = ''\n\t} else {\n\t\tstyles = utility.style({ rule: utility, args: utility.args, str: acc })\n\t}\n\n\treturn `${styles}`\n}\n\nasync function processPostCSS(src = '') {\n\tconst ctx = { parser: true, map: 'inline' };\n\n\t// FIXME: Can't change this to await because it breaks the function\n\tlet plugins;\n\ttry {\n\t\tplugins = postcssrc.sync(ctx).plugins\n\t}\n\tcatch (error) {\n\t\tplugins = []\n\t}\n\n\n\tconst { css } = await postcss([postcssNested(), autoprefixer(), ...plugins]).process(src, { from: undefined })\n\n\n\treturn css\n\n\t// postcssrc(ctx).then((({ plugins, options }) => {\n\t// \tpostcss([postcssNested(), autoprefixer(), ...plugins])\n\t// \t\t.process(src, { from: undefined })\n\t// \t\t.then((css) => {\n\t// \t\t\tcallback(css)\n\t// \t\t})\n\t// }))\n}\n\nfunction processInlineStyles(node, classNameID) {\n\n\tconst inlineStyles = node.attrs.get('style');\n\n\tif (inlineStyles) {\n\t\tstyles = `\n.${classNameID}.${classNameID} {${inlineStyles}}`\n\n\t\tprocessPostCSS(styles).then((css) => {\n\t\t\t// console.log(\"css --->\", css)\n\n\t\t\t// Add new array back to element\n\t\t\tvar styleTag = new Element({\n\t\t\t\tname: 'style'\n\t\t\t}, null, css)\n\n\t\t\t// Add new array back to element\n\t\t\tvar spanTag = new Element({\n\t\t\t\tname: 'span'\n\t\t\t}, null, styleTag)\n\n\t\t\tspanTag.attrs.add({ style: 'display: none' })\n\t\t\tspanTag.attrs.add({ class: 'stylup-sb' })\n\n\t\t\tnode.before(spanTag)\n\t\t\tnode.attrs.remove('style')\n\n\t\t\tvar classNames = node.attrs.get('class') ? node.attrs.get('class').split(' ') : undefined || [];\n\n\t\t\tclassNames.push(classNameID)\n\t\t\tnode.attrs.add({ class: classNames.join(' ') });\n\t\t}).catch((error) => {\n\t\t\tconsole.log(\"error\", error)\n\t\t})\n\n\n\t}\n}\n\n// async function getPostConfig() {\n// \tconst ctx = { parser: true, map: 'inline' };\n// \treturn await postcssrc(ctx)\n// }\n\nasync function main(callback) {\n\treturn await postcssrc(ctx)\n\n\tcallback()\n}\n\n\nexport default new phtml.Plugin('phtml-utility-class', opts => {\n\topts = opts || {}\n\n\treturn {\n\t\tElement(node) {\n\n\t\t\tif (opts.processBlockStyles === true) {\n\t\t\t\tif (node.name === \"style\") {\n\t\t\t\t\tconst target = node.nodes[0];\n\t\t\t\t\tconst source = target.data;\n\t\t\t\t\tprocessPostCSS(source).then((css) => {\n\n\t\t\t\t\t\tnode.innerHTML = css\n\t\t\t\t\t}).catch((error) => {\n\t\t\t\t\t\tconsole.log(error)\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\tvar classNameID = uniqid();\n\n\t\t\tif (process.env.NODE_ENV === \"test\") {\n\t\t\t\tclassNameID = 'uniqid'\n\t\t\t}\n\n\t\t\t// Get styles from style attr\n\t\t\tprocessInlineStyles(node, classNameID)\n\n\t\t\tconst hasClass = node.attrs.get('class');\n\t\t\tif (hasClass) {\n\t\t\t\tconst classNames = hasClass ? node.attrs.get('class').split(' ') : null;\n\t\t\t\tvar re = genRegex(opts)\n\n\t\t\t\tvar utilities = getUtilities(hasClass, re);\n\n\n\t\t\t\tlet newClassNames = [...classNames]\n\t\t\t\tlet styles = [];\n\n\n\t\t\t\tlet hasUtilities = false;\n\n\n\t\t\t\tfor (let utility of utilities) {\n\n\n\t\t\t\t\t// if (utilityClass) {\n\t\t\t\t\t// \tconsole.log('utility class')\n\t\t\t\t\t// }\n\t\t\t\t\t// else {\n\t\t\t\t\t// \tconsole.log('not utilit class')\n\t\t\t\t\t// }\n\t\t\t\t\tlet rules = getConfig('stylup.config.js')\n\n\t\t\t\t\tif (rules) {\n\t\t\t\t\t\tfor (let rule of rules) {\n\t\t\t\t\t\t\trule.class = putValuesIntoArray(rule.class);\n\n\t\t\t\t\t\t\tfor (let property of rule.class) {\n\n\t\t\t\t\t\t\t\tvar tempRule = Object.assign({}, rule)\n\n\t\t\t\t\t\t\t\ttempRule.class = property\n\n\n\n\t\t\t\t\t\t\t\tif (utility.class === tempRule.class) {\n\n\n\t\t\t\t\t\t\t\t\ttempRule = Object.assign(tempRule, utility)\n\n\n\t\t\t\t\t\t\t\t\thasUtilities = true\n\n\t\t\t\t\t\t\t\t\tvar output = \"\";\n\n\t\t\t\t\t\t\t\t\tfunction acc(strings, ...values) {\n\n\n\t\t\t\t\t\t\t\t\t\tif (!strings) {\n\t\t\t\t\t\t\t\t\t\t\tif (typeof output !== \"undefined\") {\n\n\t\t\t\t\t\t\t\t\t\t\t\treturn output = output.replace(/\\n$/, '');;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t\treturn str;\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\n\n\t\t\t\t\t\t\t\t\t\t\tlet str = '';\n\n\t\t\t\t\t\t\t\t\t\t\tstrings.forEach((string, a) => {\n\t\t\t\t\t\t\t\t\t\t\t\tstr += string + (values[a] || '');\n\t\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\t\tstr = stripIndent(str);\n\n\n\t\t\t\t\t\t\t\t\t\t\tif (typeof output !== \"undefined\") {\n\t\t\t\t\t\t\t\t\t\t\t\toutput += `${str}\\n`;\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\n\n\t\t\t\t\t\t\t\t\t\t\treturn str;\n\t\t\t\t\t\t\t\t\t\t}\n\n\n\t\t\t\t\t\t\t\t\t}\n\n\n\n\t\t\t\t\t\t\t\t\tstyles.push(genStyles(tempRule, acc))\n\n\t\t\t\t\t\t\t\t\tnewClassNames.push(utility.class);\n\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (hasUtilities) {\n\t\t\t\t\tstyles = `\n.${classNameID}.${classNameID} {\n${styles.join('')}\n}`\n\n\t\t\t\t\tprocessPostCSS(styles).then((css) => {\n\n\t\t\t\t\t\t// Add new array back to element\n\t\t\t\t\t\tvar styleTag = new Element({\n\t\t\t\t\t\t\tname: 'style'\n\t\t\t\t\t\t}, null, css)\n\n\n\t\t\t\t\t\t// Add new array back to element\n\t\t\t\t\t\tvar spanTag = new Element({\n\t\t\t\t\t\t\tname: 'span'\n\t\t\t\t\t\t}, null, styleTag)\n\n\t\t\t\t\t\tspanTag.attrs.add({ style: 'display: none' })\n\t\t\t\t\t\tspanTag.attrs.add({ class: 'stylup-sb' })\n\n\t\t\t\t\t\tnode.before(spanTag)\n\n\n\t\t\t\t\t\t// Add classNameID\n\t\t\t\t\t\tnewClassNames.push(classNameID)\n\t\t\t\t\t\tnode.attrs.add({ class: newClassNames.join(' ') });\n\t\t\t\t\t}).catch((error) => {\n\t\t\t\t\t\tconsole.log(error)\n\t\t\t\t\t})\n\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t}\n});\n"],"names":["genRegex","opts","tokens","Object","regex","property","number","unit","seperator","arg","args","decl","token","replaceTokenIdent","value","toString","replace","match","name","source","_","reduce","result","key","RegExp","getUtilities","str","re","findMatches","matches","res","exec","push","utilities","i","length","utility","class","uniqid","require","postcss","postcssrc","postcssNested","autoprefixer","getConfig","path","config","fs","existsSync","process","cwd","classes","putValuesIntoArray","Array","isArray","genStyles","acc","styles","style","rule","undefined","processPostCSS","src","ctx","parser","map","plugins","sync","error","css","from","processInlineStyles","node","classNameID","inlineStyles","attrs","get","then","styleTag","Element","spanTag","add","before","remove","classNames","split","join","catch","console","log","phtml","Plugin","processBlockStyles","target","nodes","data","innerHTML","env","NODE_ENV","hasClass","newClassNames","hasUtilities","rules","tempRule","assign","output","strings","values","forEach","string","a","stripIndent"],"mappings":"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"}