UNPKG

outlinecss

Version:

A headless, responsive, and composable CSS framework designed for easy customization.

58 lines (57 loc) 1.97 kB
"use strict"; 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}".`); };