Socket
Socket
Sign inDemoInstall

lib-theme-contructor

Package Overview
Dependencies
Maintainers
1
Versions
21
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

lib-theme-contructor - npm Package Compare versions

Comparing version 0.0.9 to 0.1.0

lib/color_to_rgb.js

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",

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc