123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- const fs = require('fs');
- const path = require('path');
- const base_path = '../_data/variables/';
- const css_keywords = ['null', 'ease-out', 'optimizeLegibility'];
- const regex_unitless = /^([0-9]+\.[0-9]+)$/;
- let utils = {
- getVariableType: (name, value) => {
- if (!value) {
- return 'string';
- }
- if (name == '$sizes') {
- return 'map';
- }
- if (value.startsWith('hsl') || value.startsWith('#') || value.startsWith('rgb')) {
- return 'color';
- } else if (css_keywords.includes(value)) {
- return 'keyword';
- } else if (
- value.startsWith('findColorInvert')
- || value.startsWith('mergeColorMaps')
- ) {
- return 'function';
- } else if (value.startsWith('$')) {
- return 'variable';
- } else if (
- value.startsWith('BlinkMacSystemFont')
- || value == 'monospace'
- ) {
- return 'font-family';
- } else if (value == 'true'
- || value == 'false'
- ) {
- return 'boolean';
- } else if (value.endsWith('ms')) {
- return 'duration';
- } else if (value.includes('+')) {
- return 'computed';
- } else if (
- value.endsWith('00')
- || value == 'normal'
- ) {
- return 'font-weight';
- } else if (
- value.endsWith('px')
- || value.endsWith('em')
- || value.includes('px ')
- || value.includes('em ')
- ) {
- return 'size';
- } else if (value.includes('$')) {
- return 'compound';
- } else if (value.match(regex_unitless)) {
- return 'unitless';
- }
- return 'string';
- },
- parseLine: (line) => {
- if (line.startsWith('$') && line.endsWith('!default')) {
- const colon_index = line.indexOf(':');
- const variable_name = line.substring(0, colon_index).trim();
- const default_index = line.indexOf('!default');
- const variable_value = line.substring(colon_index + 1, default_index).trim();
- return variable = {
- name: variable_name,
- value: variable_value,
- type: utils.getVariableType(variable_name, variable_value),
- };
- }
- return false;
- },
- getLines: (files, file_path) => {
- const file = files[file_path];
- const slash_index = file_path.lastIndexOf('/');
- const dot_index = file_path.lastIndexOf('.');
- const file_name = file_path.substring(slash_index + 1, dot_index);
- return {
- file_name,
- lines: file.contents.toString().split(/(?:\r\n|\r|\n)/g),
- }
- },
- writeFile: (file_path, data) => {
- const json_data = JSON.stringify(data, null, ' ');
- const json_file_path = base_path + file_path.replace('.sass', '.json');
- utils.ensureDirectoryExistence(json_file_path);
- fs.writeFile(json_file_path, json_data, err => {
- if (err) {
- return console.log(err);
- }
- console.log(`The file ${json_file_path} was saved!`);
- });
- },
- getInitialValue: (value, type, initial_variables) => {
- if (value.startsWith('$') && value in initial_variables.by_name) {
- const second_value = initial_variables.by_name[value].value;
- if (second_value.startsWith('$') && second_value in initial_variables.by_name) {
- const third_value = initial_variables.by_name[second_value].value;
- return third_value;
- }
- return second_value;
- }
- return value;
- },
- getComputedData: (name, value, type, initial_variables, derived_variables = {}) => {
- let computed_value = '';
- if (value.startsWith('$')) {
- let second_value;
- if (value in initial_variables.by_name) {
- second_value = initial_variables.by_name[value].value;
- } else if (derived_variables.by_name && value in derived_variables.by_name) {
- second_value = derived_variables.by_name[value].value;
- }
- if (second_value && second_value.startsWith('$')) {
- let third_value;
- if (second_value in initial_variables.by_name) {
- third_value = initial_variables.by_name[second_value].value;
- } else if (derived_variables.by_name && second_value in derived_variables.by_name) {
- third_value = derived_variables.by_name[second_value].value;
- }
- computed_value = third_value;
- } else {
- computed_value = second_value;
- }
- } else if (value.startsWith('findColorInvert')) {
- // e.g. $turquoise-invert -> findColorInvert($turquoise)
- if (value.endsWith('($yellow)')) {
- computed_value = 'rgba(0, 0, 0, 0.7)';
- } else {
- computed_value = '#fff';
- }
- }
- if (computed_value && computed_value != '') {
- // e.g. $primary-invert -> $turquoise-invert -> findColorInvert($turquoise)
- if (computed_value.startsWith('findColorInvert')) {
- if (computed_value.endsWith('($yellow)')) {
- computed_value = 'rgba(0, 0, 0, 0.7)';
- } else {
- computed_value = '#fff';
- }
- }
- const computed_type = utils.getVariableType(name, computed_value);
- return {
- computed_type,
- computed_value,
- }
- }
- return {};
- },
- ensureDirectoryExistence: (file_path) => {
- var dirname = path.dirname(file_path);
- if (fs.existsSync(dirname)) {
- return true;
- }
- utils.ensureDirectoryExistence(dirname);
- fs.mkdirSync(dirname);
- }
- }
- utils.files = {};
- utils.files.initial_variables = `${base_path}utilities/initial-variables.json`;
- utils.files.derived_variables = `${base_path}utilities/derived-variables.json`;
- module.exports = utils;
|