2018-06-16 17:26:55 +00:00
|
|
|
const fs = require('fs');
|
2018-06-16 18:58:58 +00:00
|
|
|
const path = require('path');
|
2018-06-16 17:26:55 +00:00
|
|
|
|
2018-06-16 19:47:52 +00:00
|
|
|
const base_path = '../_data/variables/';
|
|
|
|
|
2018-06-16 18:01:35 +00:00
|
|
|
let utils = {
|
|
|
|
getVariableType: (value) => {
|
2018-06-16 19:47:52 +00:00
|
|
|
if (!value) {
|
|
|
|
return 'string';
|
|
|
|
}
|
|
|
|
|
2018-06-16 18:01:35 +00:00
|
|
|
if (value.startsWith('hsl')) {
|
|
|
|
return 'color';
|
|
|
|
} 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.includes('+')) {
|
|
|
|
return 'computed';
|
|
|
|
} else if (value.endsWith('00')) {
|
|
|
|
return 'font-weight';
|
2018-06-16 19:47:52 +00:00
|
|
|
} else if (value.endsWith('px') || value.endsWith('em')) {
|
2018-06-16 18:01:35 +00:00
|
|
|
return 'size';
|
2018-06-16 19:47:52 +00:00
|
|
|
} else if (value.includes('$')) {
|
|
|
|
return 'compound';
|
|
|
|
} else if (value.startsWith('findColorInvert')) {
|
|
|
|
return 'function';
|
2018-06-16 18:01:35 +00:00
|
|
|
}
|
2018-06-16 17:26:55 +00:00
|
|
|
|
2018-06-16 18:01:35 +00:00
|
|
|
return 'string';
|
|
|
|
},
|
2018-06-16 17:26:55 +00:00
|
|
|
|
2018-06-16 18:01:35 +00:00
|
|
|
parseLine: (line) => {
|
|
|
|
if (line.startsWith('$') && line.endsWith('!default')) {
|
|
|
|
const colon_index = line.indexOf(':');
|
|
|
|
const variable_name = line.substring(0, colon_index).trim();
|
2018-06-16 17:26:55 +00:00
|
|
|
|
2018-06-16 18:01:35 +00:00
|
|
|
const default_index = line.indexOf('!default');
|
|
|
|
const variable_value = line.substring(colon_index + 1, default_index).trim();
|
2018-06-16 17:26:55 +00:00
|
|
|
|
2018-06-16 18:01:35 +00:00
|
|
|
return variable = {
|
|
|
|
name: variable_name,
|
|
|
|
value: variable_value,
|
|
|
|
type: utils.getVariableType(variable_value),
|
|
|
|
};
|
|
|
|
}
|
2018-06-16 17:26:55 +00:00
|
|
|
|
2018-06-16 18:01:35 +00:00
|
|
|
return false;
|
|
|
|
},
|
2018-06-16 17:26:55 +00:00
|
|
|
|
2018-06-16 18:01:35 +00:00
|
|
|
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);
|
2018-06-16 17:26:55 +00:00
|
|
|
|
2018-06-16 18:01:35 +00:00
|
|
|
return {
|
|
|
|
file_name,
|
|
|
|
lines: file.contents.toString().split(/(?:\r\n|\r|\n)/g),
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
writeFile: (file_path, data) => {
|
|
|
|
const json_data = JSON.stringify(data, null, ' ');
|
2018-06-16 19:47:52 +00:00
|
|
|
const json_file_path = base_path + file_path.replace('.sass', '.json');
|
|
|
|
|
2018-06-16 18:58:58 +00:00
|
|
|
utils.ensureDirectoryExistence(json_file_path);
|
2018-06-16 18:01:35 +00:00
|
|
|
|
2018-06-16 18:58:58 +00:00
|
|
|
fs.writeFile(json_file_path, json_data, err => {
|
2018-06-16 18:01:35 +00:00
|
|
|
if (err) {
|
|
|
|
return console.log(err);
|
|
|
|
}
|
|
|
|
|
2018-06-16 18:58:58 +00:00
|
|
|
console.log(`The file ${json_file_path} was saved!`);
|
2018-06-16 18:01:35 +00:00
|
|
|
});
|
|
|
|
},
|
2018-06-16 17:26:55 +00:00
|
|
|
|
2018-06-16 18:58:58 +00:00
|
|
|
getInitialValue: (value, type, initial_variables) => {
|
2018-06-16 18:01:35 +00:00
|
|
|
if (value.startsWith('$') && value in initial_variables.by_name) {
|
|
|
|
const second_value = initial_variables.by_name[value].value;
|
2018-06-16 17:26:55 +00:00
|
|
|
|
2018-06-16 18:58:58 +00:00
|
|
|
if (second_value.startsWith('$') && second_value in initial_variables.by_name) {
|
2018-06-16 18:01:35 +00:00
|
|
|
const third_value = initial_variables.by_name[second_value].value;
|
|
|
|
console.log('third_value', third_value);
|
|
|
|
|
|
|
|
return third_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
return second_value;
|
2018-06-16 17:26:55 +00:00
|
|
|
}
|
|
|
|
|
2018-06-16 18:01:35 +00:00
|
|
|
return value;
|
2018-06-16 18:58:58 +00:00
|
|
|
},
|
|
|
|
|
2018-06-16 19:47:52 +00:00
|
|
|
getComputedData: (value, type, initial_variables, derived_variables) => {
|
|
|
|
let computed_value = '';
|
|
|
|
|
2018-06-16 18:58:58 +00:00
|
|
|
if (value.startsWith('$')) {
|
|
|
|
let second_value;
|
|
|
|
|
|
|
|
if (value in initial_variables.by_name) {
|
|
|
|
second_value = initial_variables.by_name[value].value;
|
|
|
|
} else if (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 (second_value in derived_variables.by_name) {
|
|
|
|
third_value = derived_variables.by_name[second_value].value;
|
|
|
|
}
|
|
|
|
|
2018-06-16 19:47:52 +00:00
|
|
|
computed_value = third_value;
|
|
|
|
} else {
|
|
|
|
computed_value = second_value;
|
2018-06-16 18:58:58 +00:00
|
|
|
}
|
2018-06-16 19:47:52 +00:00
|
|
|
}
|
2018-06-16 18:58:58 +00:00
|
|
|
|
2018-06-16 19:47:52 +00:00
|
|
|
if (computed_value != '') {
|
|
|
|
const computed_type = utils.getVariableType(computed_value);
|
|
|
|
|
|
|
|
return {
|
|
|
|
computed_type,
|
|
|
|
computed_value,
|
|
|
|
}
|
2018-06-16 18:58:58 +00:00
|
|
|
}
|
|
|
|
|
2018-06-16 19:47:52 +00:00
|
|
|
return {};
|
2018-06-16 18:58:58 +00:00
|
|
|
},
|
|
|
|
|
|
|
|
ensureDirectoryExistence: (file_path) => {
|
|
|
|
var dirname = path.dirname(file_path);
|
|
|
|
|
|
|
|
if (fs.existsSync(dirname)) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
utils.ensureDirectoryExistence(dirname);
|
|
|
|
fs.mkdirSync(dirname);
|
2018-06-16 18:01:35 +00:00
|
|
|
}
|
2018-06-16 17:26:55 +00:00
|
|
|
}
|
|
|
|
|
2018-06-16 18:01:35 +00:00
|
|
|
utils.files = {};
|
2018-06-16 19:47:52 +00:00
|
|
|
utils.files.initial_variables = `${base_path}utilities/initial-variables.json`;
|
|
|
|
utils.files.derived_variables = `${base_path}utilities/derived-variables.json`;
|
2018-06-16 17:26:55 +00:00
|
|
|
|
2018-06-16 18:01:35 +00:00
|
|
|
module.exports = utils;
|