eyeglass
Version:
Sass modules for npm.
194 lines • 6.19 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const assertions_1 = require("./assertions");
function isSassValue(sass, value) {
if (value && typeof value === "object") {
return isSassNumber(sass, value)
|| isSassString(sass, value)
|| isSassColor(sass, value)
|| isSassBoolean(sass, value)
|| isSassList(sass, value)
|| isSassMap(sass, value)
|| isSassNull(sass, value);
}
else {
return false;
}
}
exports.isSassValue = isSassValue;
function inspect(sass, value) {
if (isSassNumber(sass, value)) {
return `${value.getValue()}${value.getUnit()}`;
}
else if (isSassString(sass, value)) {
return value.getValue();
}
else if (isSassColor(sass, value)) {
return `rgba(${value.getR()}, ${value.getG()}, ${value.getB()}, ${value.getA()})`;
}
else if (isSassBoolean(sass, value)) {
if (value === sass.types.Boolean.TRUE) {
return `true`;
}
else {
return `false`;
}
}
else if (isSassList(sass, value)) {
let s = "(";
for (let i = 0; i < value.getLength(); i++) {
if (i > 0) {
if (value.getSeparator()) {
s += ", ";
}
else {
s += " ";
}
}
s += inspect(sass, value.getValue(i));
}
s += ")";
return s;
}
else if (isSassMap(sass, value)) {
let s = "(";
for (let i = 0; i < value.getLength(); i++) {
if (i > 0) {
s += ", ";
}
s += value.getKey(i);
s += ": ";
s += inspect(sass, value.getValue(i));
}
s += ")";
return s;
}
else if (isSassNull(sass, value)) {
return "null";
}
else {
return assertions_1.unreachable();
}
}
exports.inspect = inspect;
function isSassNumber(sass, value) {
return value instanceof sass.types.Number;
}
exports.isSassNumber = isSassNumber;
function isSassString(sass, value) {
return value instanceof sass.types.String;
}
exports.isSassString = isSassString;
function isSassColor(sass, value) {
return value instanceof sass.types.Color;
}
exports.isSassColor = isSassColor;
function isSassBoolean(sass, value) {
return value instanceof sass.types.Boolean;
}
exports.isSassBoolean = isSassBoolean;
function isSassNull(sass, value) {
return value === sass.types.Null.NULL;
}
exports.isSassNull = isSassNull;
function isSassList(sass, value) {
return value instanceof sass.types.List;
}
exports.isSassList = isSassList;
function isSassMap(sass, value) {
return value instanceof sass.types.Map;
}
exports.isSassMap = isSassMap;
function isSassMapOrEmptyList(sass, value) {
return isSassMap(sass, value) || (isSassList(sass, value) && value.getLength() === 0);
}
exports.isSassMapOrEmptyList = isSassMapOrEmptyList;
function isSassError(sass, value) {
return value instanceof sass.types.Error;
}
exports.isSassError = isSassError;
function isSassImplementation(impl) {
return (impl && typeof impl === "object"
&& impl !== null
&& typeof impl.render === "function"
&& typeof impl.renderSync === "function"
&& typeof impl.types === "object"
&& typeof impl.info === "string");
}
exports.isSassImplementation = isSassImplementation;
const typeGuards = {
null: isSassNull,
string: isSassString,
number: isSassNumber,
map: isSassMapOrEmptyList,
list: isSassList,
color: isSassColor,
boolean: isSassBoolean,
error: isSassError,
};
function typeName(sass, value) {
if (isSassNull(sass, value))
return "null";
if (isSassString(sass, value))
return "string";
if (isSassNumber(sass, value))
return "number";
if (isSassMap(sass, value))
return "map";
if (isSassList(sass, value))
return "list";
if (isSassColor(sass, value))
return "color";
if (isSassBoolean(sass, value))
return "boolean";
if (isSassError(sass, value))
return "error";
return assertions_1.unreachable(value);
}
function isType(sass, value, name) {
let guard = typeGuards[name];
if (guard(sass, value)) {
return true;
}
else {
return false;
}
}
exports.isType = isType;
function typeError(sass, expected, actual) {
return new sass.types.Error(`Expected ${expected}, got ${typeof actual === "string" ? actual : typeName(sass, actual)}${typeof actual === "string" ? "" : `: ${inspect(sass, actual)}`}`);
}
exports.typeError = typeError;
class SassTypeError extends Error {
constructor(sass, expected, actual) {
super(`Expected ${expected}, got ${typeof actual === "string" ? actual : typeName(sass, actual)}${typeof actual === "string" ? "" : `: ${inspect(sass, actual)}`}`);
}
}
exports.SassTypeError = SassTypeError;
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
function helpers(sass) {
return {
isSass: (value) => isSassImplementation(value),
isNull: (value) => isSassNull(sass, value),
isString: (value) => isSassString(sass, value),
isNumber: (value) => isSassNumber(sass, value),
isMap: (value) => isSassMap(sass, value),
isList: (value) => isSassList(sass, value),
isColor: (value) => isSassColor(sass, value),
isBoolean: (value) => isSassBoolean(sass, value),
isError: (value) => isSassError(sass, value),
isValue: (value) => isSassValue(sass, value),
isMapOrEmptyList: (value) => isSassMapOrEmptyList(sass, value),
typeError: typeError.bind(null, sass),
isType: isType.bind(null, sass),
typeName: typeName.bind(null, sass),
inspect: inspect.bind(null, sass),
TypeError: class extends SassTypeError {
constructor(expected, actual) {
super(sass, expected, actual);
}
}
};
}
exports.helpers = helpers;
//# sourceMappingURL=SassImplementation.js.map