UNPKG

@drewsonne/maya-dates

Version:

Typescript package to manipulate dates in the Maya Calendar

228 lines 9.91 kB
"use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var full_date_1 = __importDefault(require("../full-date")); var julian_1 = __importDefault(require("./western/julian")); var distance_number_1 = __importDefault(require("./distance-number")); var lord_of_night_1 = require("./night/lord-of-night"); var wildcard_1 = require("../wildcard"); var correlation_constant_1 = require("./correlation-constant"); var calendar_round_1 = require("../cr/calendar-round"); var longcount_addition_1 = __importDefault(require("../operations/longcount-addition")); var longcount_subtraction_1 = __importDefault(require("../operations/longcount-subtraction")); var gregorian_1 = __importDefault(require("./western/gregorian")); var moonbeams = __importStar(require("moonbeams")); var LongCount = (function (_super) { __extends(LongCount, _super); function LongCount() { var cycles = []; for (var _i = 0; _i < arguments.length; _i++) { cycles[_i] = arguments[_i]; } var _this = _super.apply(this, cycles) || this; _this.correlationConstant = (0, correlation_constant_1.getCorrelationConstant)(584283); return _this; } LongCount.fromDistanceNumber = function (dn) { return new (LongCount.bind.apply(LongCount, __spreadArray([void 0], dn.parts, false)))(); }; LongCount.fromGregorian = function (gregorian, correlation) { if (correlation === void 0) { correlation = (0, correlation_constant_1.getCorrelationConstant)(584283); } var date; if (gregorian instanceof Date) { if (isNaN(gregorian.getTime())) { throw new Error('Invalid Date object'); } date = gregorian; } else if (typeof gregorian === 'string') { if (gregorian.trim().length === 0) { throw new Error('Date string must be a non-empty string'); } date = new Date(gregorian); if (isNaN(date.getTime())) { throw new Error("Invalid date string: \"".concat(gregorian, "\"")); } } else { throw new Error('fromGregorian() accepts only Date objects or ISO 8601 date strings'); } var year = date.getFullYear(); var month = date.getMonth() + 1; var day = date.getDate(); var julianDay = Math.ceil(moonbeams.calendarToJd(year, month, day)); return LongCount.fromJulianDay(julianDay, correlation); }; LongCount.fromJulianDay = function (julianDay, correlation) { if (correlation === void 0) { correlation = (0, correlation_constant_1.getCorrelationConstant)(584283); } var mayanDayNumber = julianDay - correlation.value; if (mayanDayNumber < 0) { throw new Error("Maya Day Number must be non-negative. Got ".concat(mayanDayNumber, " (JDN ").concat(julianDay, " - correlation ").concat(correlation.value, ")")); } return LongCount.fromMayanDayNumber(mayanDayNumber, correlation); }; LongCount.fromMayanDayNumber = function (mayanDayNumber, correlation) { if (mayanDayNumber < 0) { throw new Error("Maya Day Number must be non-negative. Got ".concat(mayanDayNumber)); } var kin = mayanDayNumber % 20; var winal = Math.floor(mayanDayNumber / 20) % 18; var tun = Math.floor(mayanDayNumber / 360) % 20; var katun = Math.floor(mayanDayNumber / 7200) % 20; var baktun = Math.floor(mayanDayNumber / 144000) % 20; var piktun = Math.floor(mayanDayNumber / 2880000) % 20; var kalabtun = Math.floor(mayanDayNumber / 57600000) % 20; var kinchiltun = Math.floor(mayanDayNumber / 1152000000); var parts = [kin, winal, tun, katun, baktun]; if (kinchiltun > 0) { parts.push(piktun, kalabtun, kinchiltun); } else if (kalabtun > 0) { parts.push(piktun, kalabtun); } else if (piktun > 0) { parts.push(piktun); } var lc = new (LongCount.bind.apply(LongCount, __spreadArray([void 0], parts, false)))(); if (correlation) { lc.setCorrelationConstant(correlation); } return lc; }; LongCount.prototype.setCorrelationConstant = function (newConstant) { this.correlationConstant = newConstant; return this; }; Object.defineProperty(LongCount.prototype, "julianDay", { get: function () { return this.correlationConstant.value + this.getPosition(); }, enumerable: false, configurable: true }); Object.defineProperty(LongCount.prototype, "gregorian", { get: function () { return new gregorian_1.default(this.julianDay); }, enumerable: false, configurable: true }); Object.defineProperty(LongCount.prototype, "julian", { get: function () { return new julian_1.default(this.julianDay); }, enumerable: false, configurable: true }); LongCount.prototype.clone = function () { return new (LongCount.bind.apply(LongCount, __spreadArray([void 0], this.parts, false)))(); }; Object.defineProperty(LongCount.prototype, "lordOfNight", { get: function () { return lord_of_night_1.lords.get("G".concat(((this.getPosition() - 1) % 9) + 1)); }, enumerable: false, configurable: true }); LongCount.prototype.buildCalendarRound = function () { return calendar_round_1.origin.shift(this.getPosition()); }; LongCount.prototype.buildFullDate = function () { return new full_date_1.default(this.buildCalendarRound(), this.clone()); }; LongCount.prototype.plus = function (newLc) { return new longcount_addition_1.default(LongCount, this, newLc); }; LongCount.prototype.minus = function (newLc) { return new longcount_subtraction_1.default(LongCount, this, newLc); }; LongCount.prototype.asDistanceNumber = function () { return new (distance_number_1.default.bind.apply(distance_number_1.default, __spreadArray([void 0], this.parts, false)))(); }; LongCount.prototype.equal = function (other) { if (other instanceof LongCount) { var thisParts = this.normalizedParts(); var otherParts_1 = other.normalizedParts(); if (thisParts.length !== otherParts_1.length) { return false; } if (this.sign !== other.sign) { return false; } return thisParts.every(function (part, i) { var otherPart = otherParts_1[i]; return (0, wildcard_1.isWildcard)(part) ? (0, wildcard_1.isWildcard)(otherPart) : part === otherPart; }); } return false; }; LongCount.prototype.normalizedParts = function () { var parts = __spreadArray([], this.parts, true); while (parts.length > 1 && parts[parts.length - 1] === 0) { parts.pop(); } return parts; }; return LongCount; }(distance_number_1.default)); exports.default = LongCount; //# sourceMappingURL=long-count.js.map