summaryrefslogtreecommitdiff
path: root/scripts/frontend/stylelint/stylelint-utility-map.js
blob: 7e012b157b3ff5c64bfd5e0efa450dbd6075eaf8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
const sass = require('node-sass');
const postcss = require('postcss');
const fs = require('fs');
const path = require('path');
const prettier = require('prettier');

const utils = require('./stylelint-utils');
const ROOT_PATH = path.resolve(__dirname, '../../..');
const hashMapPath = path.resolve(__dirname, './utility-classes-map.js');

//
// This creates a JS based hash map (saved in utility-classes-map.js) of the different values in the utility classes
//
sass.render(
  {
    data: `
      @import './functions';
      @import './variables';
      @import './mixins';
      @import './utilities';
    `,
    includePaths: [path.resolve(ROOT_PATH, 'node_modules/bootstrap/scss')],
  },
  (err, result) => {
    if (err) console.error('Error ', err);

    const cssResult = result.css.toString();

    // We just use postcss to create a CSS tree
    postcss([])
      .process(cssResult, {
        // This supresses a postcss warning
        from: undefined,
      })
      .then(result => {
        const selectorGroups = {};
        utils.createPropertiesHashmap(result.root, result, null, null, selectorGroups, true);

        const prettierOptions = prettier.resolveConfig.sync(hashMapPath);
        const prettyHashmap = prettier.format(
          `module.exports = ${JSON.stringify(selectorGroups)};`,
          prettierOptions,
        );

        fs.writeFile(hashMapPath, prettyHashmap, function(err) {
          if (err) {
            return console.log(err);
          }

          console.log('The file was saved!');
        });
      });
  },
);