outlinecss
Version:
A headless, responsive, and composable CSS framework designed for easy customization.
58 lines (57 loc) • 1.97 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.sassify = exports.create = exports.load = void 0;
const path = require("path");
const fs = require("fs");
const constants_1 = require("./constants");
const load = (directory) => {
const accumulator = {};
if (directory && fs.existsSync(directory)) {
for (const tokens of fs.readdirSync(directory, { encoding: "utf-8" })) {
accumulator[path.basename(tokens, path.extname(tokens))] = require(path.join(directory, tokens));
}
}
return accumulator;
};
exports.load = load;
const create = (tokens) => {
const defaults = fs.readdirSync(constants_1.directories.tokens)
.filter(file => path.extname(file) === ".js")
.map(file => [path.basename(file, path.extname(file)), require(path.join(constants_1.directories.tokens, file))]);
const merged = defaults
.map(([name, value]) => [name, { ...value, ...tokens?.[name] }]);
return Object.fromEntries(merged);
};
exports.create = create;
const sassify = (data) => {
const variables = Object.entries(data)
.map(([name, token]) => variable(name, value(token)));
return variables.join("\n");
};
exports.sassify = sassify;
const variable = (name, token) => {
return `$${name}: ${token};`;
};
const value = (token) => {
if (typeof token === "number") {
return token;
}
if (typeof token === "string") {
if (token.length === 0) {
return "\"\"";
}
return `${token}`;
}
if (token === null || token === undefined) {
return "null";
}
if (Array.isArray(token)) {
return `(${token.map(value).join(", ")})`;
}
if (typeof token === "object") {
const entries = Object.entries(token)
.map(([name, token]) => `"${name}": ${value(token)}`);
return `(${entries.join(", ")})`;
}
throw new Error(`Unexpected token value: "${token}".`);
};
;