UNPKG

kaabalah

Version:

The de-facto library for any esoteric calculations and tooling

1 lines 4.84 kB
{"version":3,"sources":["../src/ifa/index.ts"],"names":[],"mappings":";AAWA,SAAS,WAAW,MAAY,MAAgC;AAC9D,MAAI,SAAS,OAAO;AAClB,WACE,KAAK,YAAY,MAAM,KACvB,KAAK,cAAc,MAAM,KACzB,KAAK,cAAc,MAAM,KACzB,KAAK,mBAAmB,MAAM;AAAA,EAElC;AAEA,SACE,KAAK,SAAS,MAAM,KACpB,KAAK,WAAW,MAAM,KACtB,KAAK,WAAW,MAAM,KACtB,KAAK,gBAAgB,MAAM;AAE/B;AAEA,SAAS,iBAAiB,MAA0D;AAClF,MAAI,EAAE,gBAAgB,SAAS,OAAO,MAAM,KAAK,QAAQ,CAAC,GAAG;AAC3D,UAAM,IAAI,MAAM,kCAAkC;AAAA,EACpD;AAEA,QAAM,eAAe,WAAW,MAAM,OAAO,KAAK,CAAC,WAAW,MAAM,KAAK;AAEzE,MAAI,cAAc;AAChB,WAAO;AAAA,MACL,KAAK,KAAK,QAAQ,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG;AAAA,MAC9C,QAAQ,KAAK,SAAS,IAAI,GAAG,SAAS,EAAE,SAAS,GAAG,GAAG;AAAA,MACvD,MAAM,KAAK,YAAY,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG;AAAA,IACrD;AAAA,EACF;AAEA,QAAM,gBAAgB,KAAK,YAAY,EAAE,MAAM,GAAG,EAAE,CAAC;AACrD,QAAM,CAAC,MAAM,OAAO,GAAG,IAAI,cAAc,MAAM,GAAG;AAElD,SAAO,EAAE,KAAK,OAAO,KAAK;AAC5B;AAEA,SAAS,aAAa,KAAqB;AACzC,MAAI,OAAO,IAAI;AACb,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,IACG,SAAS,EACT,MAAM,EAAE,EACR,OAAO,CAAC,KAAK,UAAU,MAAM,OAAO,SAAS,OAAO,EAAE,GAAG,CAAC;AAAA,EAC/D;AACF;AAOO,SAAS,aAAa,MAAwB;AACnD,QAAM,EAAE,KAAK,OAAO,KAAK,IAAI,iBAAiB,IAAI;AAGlD,QAAM,cAAc;AAAA,IAClB,OAAO,SAAS,IAAI,CAAC,GAAG,EAAE;AAAA;AAAA,IAC1B,OAAO,SAAS,MAAM,CAAC,GAAG,EAAE;AAAA;AAAA,IAC5B,OAAO,SAAS,KAAK,CAAC,GAAG,EAAE;AAAA;AAAA,IAC3B,OAAO,SAAS,KAAK,CAAC,GAAG,EAAE;AAAA;AAAA,EAC7B;AAEA,QAAM,eAAe;AAAA,IACnB,OAAO,SAAS,IAAI,CAAC,GAAG,EAAE;AAAA;AAAA,IAC1B,OAAO,SAAS,MAAM,CAAC,GAAG,EAAE;AAAA;AAAA,IAC5B,OAAO,SAAS,KAAK,CAAC,GAAG,EAAE;AAAA;AAAA,IAC3B,OAAO,SAAS,KAAK,CAAC,GAAG,EAAE;AAAA;AAAA,EAC7B;AAGA,QAAM,aAAa,YAAY,OAAO,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC;AACxD,QAAM,cAAc,aAAa,OAAO,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC;AAG1D,QAAM,QAAQ,aAAa,UAAU;AACrC,QAAM,QAAQ,aAAa,WAAW;AACtC,QAAM,OAAO,aAAa,QAAQ,KAAK;AACvC,QAAM,OAAO,aAAa,QAAQ,QAAQ,IAAI;AAC9C,QAAM,SAAS,aAAa,QAAQ,QAAQ,OAAO,IAAI;AAEvD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF","sourcesContent":["\nexport type OduNumbers = {\n leftNumbers: number[],\n rightNumbers: number[],\n north: number,\n south: number,\n east: number,\n west: number,\n center: number\n}\n\nfunction isMidnight(date: Date, mode: \"local\" | \"utc\"): boolean {\n if (mode === \"utc\") {\n return (\n date.getUTCHours() === 0 &&\n date.getUTCMinutes() === 0 &&\n date.getUTCSeconds() === 0 &&\n date.getUTCMilliseconds() === 0\n );\n }\n\n return (\n date.getHours() === 0 &&\n date.getMinutes() === 0 &&\n date.getSeconds() === 0 &&\n date.getMilliseconds() === 0\n );\n}\n\nfunction extractDateParts(date: Date): { day: string; month: string; year: string } {\n if (!(date instanceof Date) || Number.isNaN(date.getTime())) {\n throw new Error(\"Date must be a valid Date object\");\n }\n\n const useLocalDate = isMidnight(date, \"local\") && !isMidnight(date, \"utc\");\n\n if (useLocalDate) {\n return {\n day: date.getDate().toString().padStart(2, \"0\"),\n month: (date.getMonth() + 1).toString().padStart(2, \"0\"),\n year: date.getFullYear().toString().padStart(4, \"0\"),\n };\n }\n\n const formattedDate = date.toISOString().split(\"T\")[0];\n const [year, month, day] = formattedDate.split(\"-\");\n\n return { day, month, year };\n}\n\nfunction reduceNumber(num: number): number {\n if (num <= 16) {\n return num;\n }\n\n return reduceNumber(\n num\n .toString()\n .split(\"\")\n .reduce((sum, digit) => sum + Number.parseInt(digit, 10), 0)\n );\n}\n\n/**\n * Calculate the Odu numbers based on a date\n * @param date - Date object\n * @returns Odu numbers\n */\nexport function calculateOdu(date: Date): OduNumbers {\n const { day, month, year } = extractDateParts(date);\n\n // Split into left and right columns\n const leftNumbers = [\n Number.parseInt(day[0], 10), // First digit of day\n Number.parseInt(month[0], 10), // First digit of month\n Number.parseInt(year[0], 10), // First digit of year\n Number.parseInt(year[2], 10) // Third digit of year\n ];\n\n const rightNumbers = [\n Number.parseInt(day[1], 10), // Second digit of day\n Number.parseInt(month[1], 10), // Second digit of month\n Number.parseInt(year[1], 10), // Second digit of year\n Number.parseInt(year[3], 10) // Fourth digit of year\n ];\n\n // Calculate initial sums\n const rawLeftSum = leftNumbers.reduce((a, b) => a + b, 0);\n const rawRightSum = rightNumbers.reduce((a, b) => a + b, 0);\n\n // Calculate and reduce each direction\n const north = reduceNumber(rawLeftSum);\n const south = reduceNumber(rawRightSum);\n const east = reduceNumber(north + south);\n const west = reduceNumber(north + south + east);\n const center = reduceNumber(north + south + east + west);\n\n return {\n leftNumbers,\n rightNumbers,\n north,\n south,\n east,\n west,\n center\n };\n}\n"]}