UNPKG

eyeglass

Version:
194 lines 6.19 kB
"use strict"; 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