'use strict'; const defaultValue = require("default-value"); const validateSync = require("./validate-sync"); let originAliases = { top: 0, left: 0, center: "50%", bottom: "100%", right: "100%" } function tryAlias(value) { if (originAliases[value] != null) { return originAliases[value]; } else { return value; } } function calculateOffset(value, origin) { if (typeof origin === "number") { return -origin; } else { let match = /^(-?[0-9]+(?:\.[0-9]+)?)%$/.exec(origin); if (match == null) { throw new Error(`Encountered invalid origin value: ${origin}`); } else { let percentage = match[1]; return -(value * (parseFloat(percentage) / 100)); } } } module.exports = function calculateOriginOffsets(options) { validateSync(options, { width: "required", height: "required", originX: "required", originY: "required" }); let originX = tryAlias(options.originX); let originY = tryAlias(options.originY); return { x: calculateOffset(options.width, originX), y: calculateOffset(options.height, originY) } }