lib-theme-contructor
Advanced tools
Comparing version 0.0.9 to 0.1.0
141
lib/index.js
const fs = require('fs-extra'); | ||
const postcss = require('postcss'); | ||
const syntax = require('sugarss'); | ||
const traverse = require('traverse'); | ||
const { promisify } = require('util'); | ||
const assert = require('./assert'); | ||
const { palette, variables } = require('./default_theme.js'); | ||
const { palette, variables } = require('./default_theme'); | ||
const { colorToRgb } = require('./color_to_rgb'); | ||
const { traverseObject } = require('./traverse_object'); | ||
function traverseObject(obj, prefix = '') { | ||
const traversedObj = traverse(obj); | ||
const newObj = {}; | ||
const readFileAsync = promisify(fs.readFile); | ||
const outputFileAsync = promisify(fs.outputFile); | ||
traversedObj.paths().forEach((jsonPath) => { | ||
const val = traversedObj.get(jsonPath); | ||
if (typeof val !== 'object') { | ||
newObj[`${prefix}${jsonPath.join('-')}`] = val; | ||
} | ||
}); | ||
return newObj; | ||
} | ||
function createTheme(opts) { | ||
async function createTheme(opts) { | ||
opts.options.palette = Object.assign({}, palette, opts.options.palette); | ||
@@ -54,61 +44,64 @@ opts.options.variables = Object.assign({}, variables, opts.options.variables); | ||
return new Promise((resolve, reject) => { | ||
fs.readFile(opts.entry, (err, data) => { | ||
if (err) { | ||
return reject(err); | ||
} | ||
const paletteRGB = Object.assign( | ||
{}, | ||
opts.options.palette, | ||
); | ||
return postcss([ | ||
// for use `@import 'some.sss'` | ||
require('postcss-import'), // eslint-disable-line | ||
// for use `@each` | ||
require('./postcss-each.js')({ // eslint-disable-line | ||
colors: opts.options.palette, | ||
fonts: opts.options.variables.fonts, | ||
}), | ||
// for use `$var` | ||
require('postcss-simple-vars')({ // eslint-disable-line | ||
variables: Object.assign({}, | ||
opts.options.palette, | ||
traverseObject(opts.options.variables), | ||
), | ||
}), | ||
// for use `--var` | ||
require('postcss-custom-properties')({ // eslint-disable-line | ||
variables: opts.options.palette, | ||
appendVariables: true, | ||
strict: false, | ||
}), | ||
// for use `rgba(#fff, .1)` | ||
require('postcss-hexrgba'), // eslint-disable-line | ||
// for use color functions | ||
require('postcss-color-mod-function'), // eslint-disable-line | ||
// plugin to unwrap nested rules like how Sass does it | ||
require('postcss-nested'), // eslint-disable-line | ||
// autoprefixer | ||
require('autoprefixer'), // eslint-disable-line | ||
// for minification | ||
require('cssnano')({ // eslint-disable-line | ||
preset: 'default', | ||
}), | ||
]) | ||
.process(data, { | ||
from: opts.entry, | ||
parser: syntax, | ||
}) | ||
.then((result) => { | ||
fs.outputFile(`${opts.out}/${opts.name}.css`, result.css, (error) => { | ||
if (error) { | ||
reject(error); | ||
} else { | ||
console.log(`Theme '${opts.name}' created successfully!`); | ||
resolve(); | ||
} | ||
}); | ||
}) | ||
.catch((error) => { | ||
reject(error); | ||
}); | ||
Object.keys(paletteRGB).forEach((keyName) => { | ||
const rgb = colorToRgb(paletteRGB[keyName]); | ||
paletteRGB[keyName] = `${rgb.r}, ${rgb.g}, ${rgb.b}`; | ||
}); | ||
console.log(`Starting to create '${opts.name}' theme`); | ||
const entryFile = await readFileAsync(opts.entry); | ||
const postcssPlugins = [ | ||
// for use `@import 'some.sss'` | ||
require('postcss-import'), // eslint-disable-line | ||
// for use `@each` | ||
require('./postcss-each.js')({ // eslint-disable-line | ||
colors: paletteRGB, | ||
fonts: opts.options.variables.fonts, | ||
}), | ||
// https://github.com/postcss/postcss-simple-vars | ||
require('postcss-simple-vars')({ // eslint-disable-line | ||
variables: Object.assign( | ||
{}, | ||
paletteRGB, | ||
traverseObject(opts.options.variables), | ||
), | ||
}), | ||
// https://github.com/postcss/postcss-custom-properties | ||
require('postcss-custom-properties')({ // eslint-disable-line | ||
variables: opts.options.palette, | ||
appendVariables: true, | ||
strict: false, | ||
}), | ||
// plugin to unwrap nested rules like how Sass does it | ||
require('postcss-nested'), // eslint-disable-line | ||
// autoprefixer | ||
require('autoprefixer'), // eslint-disable-line | ||
]; | ||
if (opts.minify !== false) { | ||
postcssPlugins.push( | ||
// for minification | ||
require('cssnano')({ // eslint-disable-line | ||
preset: 'default', | ||
}), | ||
); | ||
} | ||
const postcssResult = await postcss(postcssPlugins) | ||
.process(entryFile, { | ||
from: opts.entry, | ||
parser: syntax, | ||
}); | ||
}); | ||
await outputFileAsync(`${opts.out}/${opts.name}.css`, postcssResult.css); | ||
console.log(`Theme '${opts.name}' created successfully`); | ||
console.log(); | ||
} | ||
@@ -115,0 +108,0 @@ |
{ | ||
"name": "lib-theme-contructor", | ||
"version": "0.0.9", | ||
"version": "0.1.0", | ||
"description": "Theme constructor", | ||
@@ -42,5 +42,3 @@ "keywords": [ | ||
"postcss": "^7.0.23", | ||
"postcss-color-mod-function": "^3.0.3", | ||
"postcss-custom-properties": "^9.0.2", | ||
"postcss-hexrgba": "^2.0.0", | ||
"postcss-import": "^12.0.1", | ||
@@ -47,0 +45,0 @@ "postcss-nested": "^4.2.1", |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
13232
10
9
306
- Removedpostcss-color-mod-function@^3.0.3
- Removedpostcss-hexrgba@^2.0.0
- Removed@csstools/convert-colors@1.4.0(transitive)
- Removedflatten@1.0.3(transitive)
- Removednanoid@3.3.7(transitive)
- Removedpostcss@8.4.47(transitive)
- Removedpostcss-color-mod-function@3.0.3(transitive)
- Removedpostcss-hexrgba@2.1.0(transitive)
- Removedpostcss-values-parser@2.0.1(transitive)
- Removedsource-map-js@1.2.1(transitive)