thai-astrology 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Thai Astrology Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,60 @@
1
+ # Thai Astrology
2
+
3
+ Thai Astrology is a TypeScript-first library that implements traditional Thai astrological calculations. It exposes precise planetary position helpers and rulership utilities derived from the historic algorithms contained in `engine/astro-calculation`.
4
+
5
+ ## Features
6
+
7
+ - Compute ascendant, planetary positions, and Tanuseth value from Thai-style inputs.
8
+ - Derive formatted channel outputs that mimic classical Thai charts.
9
+ - Identify ruling planets directly from channel outputs.
10
+ - Zero runtime dependencies and full TypeScript declarations.
11
+
12
+ ## Installation
13
+
14
+ ```bash
15
+ npm install thai-astrology
16
+ ```
17
+
18
+ ## Quick start
19
+
20
+ ```ts
21
+ import { generateThaiAstrologyChart } from "thai-astrology"
22
+
23
+ const chart = generateThaiAstrologyChart({
24
+ day: 15,
25
+ monthTh: "กันยายน",
26
+ yearBe: 2566,
27
+ hour: 14,
28
+ minute: 45,
29
+ province: "กรุงเทพมหานคร",
30
+ })
31
+
32
+ console.log(chart.positions.sun) // 5 => สิงห์
33
+ console.log(chart.sunPosition) // [29, 12]
34
+ console.log(chart.rulingPlanetsText)
35
+ ```
36
+
37
+ ## API surface
38
+
39
+ The library re-exports the detailed helpers located in `engine/astro-calculation` as first-class public functions. Key types include:
40
+
41
+ - `calculateAllPositions(input)` → returns `CalculationResult` with all planetary placements and channel outputs.
42
+ - `calculateAscendant(...)`, `calculateSun(...)`, etc. → granular planet calculators.
43
+ - `calculateTanuseth(positions, ascSign)` → compute Tanuseth from placements.
44
+ - `findRulingPlanets(chart)` and `formatRulingPlanets(info)` → inspect channel strings for rulership insights.
45
+ - `generateThaiAstrologyChart(input)` → convenience wrapper that augments `CalculationResult` with optional rulership details.
46
+
47
+ Refer to the declaration files in `dist/` after building for the complete TypeScript surface.
48
+
49
+ ## Building locally
50
+
51
+ ```bash
52
+ npm install
53
+ npm run build
54
+ ```
55
+
56
+ A successful build emits compiled JavaScript and declarations into `dist/`.
57
+
58
+ ## License
59
+
60
+ MIT © Contributors
@@ -0,0 +1,8 @@
1
+ export declare const PLANET_NAME_MAP: Record<string, string>;
2
+ export type RulingPlanetInfo = {
3
+ numbers: string[];
4
+ names: string[];
5
+ };
6
+ export declare const findRulingPlanets: (chart: unknown) => RulingPlanetInfo;
7
+ export declare const formatRulingPlanets: ({ names, numbers }: RulingPlanetInfo) => string;
8
+ //# sourceMappingURL=ruling-planets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ruling-planets.d.ts","sourceRoot":"","sources":["../../../engine/astro/ruling-planets.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAWlD,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAmDF,eAAO,MAAM,iBAAiB,GAAI,OAAO,OAAO,KAAG,gBAiBlD,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,oBAAoB,gBAAgB,WACQ,CAAC"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatRulingPlanets = exports.findRulingPlanets = exports.PLANET_NAME_MAP = void 0;
4
+ exports.PLANET_NAME_MAP = {
5
+ "1": "ดาวอาทิตย์",
6
+ "2": "ดาวจันทร์",
7
+ "3": "ดาวอังคาร",
8
+ "4": "ดาวพุธ",
9
+ "5": "ดาวพฤหัสบดี",
10
+ "6": "ดาวศุกร์",
11
+ "7": "ดาวเสาร์",
12
+ "8": "ดาวราหู",
13
+ "9": "ดาวเกตุ",
14
+ "0": "ดาวมฤตยู",
15
+ };
16
+ const ASCENDANT_PATTERN = /ลั/;
17
+ const isAscendantToken = (value) => typeof value === "string" && ASCENDANT_PATTERN.test(value);
18
+ const THAI_TO_ARABIC_DIGIT_MAP = {
19
+ "๐": "0",
20
+ "๑": "1",
21
+ "๒": "2",
22
+ "๓": "3",
23
+ "๔": "4",
24
+ "๕": "5",
25
+ "๖": "6",
26
+ "๗": "7",
27
+ "๘": "8",
28
+ "๙": "9",
29
+ };
30
+ const normalizeDigits = (value) => value.replace(/[๐-๙]/g, (digit) => { var _a; return (_a = THAI_TO_ARABIC_DIGIT_MAP[digit]) !== null && _a !== void 0 ? _a : digit; });
31
+ const extractAscendantEntry = (chart) => {
32
+ const index = chart.findIndex(isAscendantToken);
33
+ if (index === -1) {
34
+ throw new Error("Unable to locate ascendant information in chart");
35
+ }
36
+ const token = chart[index];
37
+ if (typeof token !== "string") {
38
+ throw new Error("Ascendant token is not a string");
39
+ }
40
+ return { token, index };
41
+ };
42
+ const extractRulingNumbers = (token) => {
43
+ var _a;
44
+ const normalized = normalizeDigits(token);
45
+ const matches = (_a = normalized.match(/\d/g)) !== null && _a !== void 0 ? _a : [];
46
+ const uniqueNumbers = Array.from(new Set(matches));
47
+ if (uniqueNumbers.length === 0) {
48
+ throw new Error("No ruling planets found in ascendant token");
49
+ }
50
+ return uniqueNumbers;
51
+ };
52
+ const findRulingPlanets = (chart) => {
53
+ if (!Array.isArray(chart)) {
54
+ throw new Error("Chart must be an array");
55
+ }
56
+ const { token: ascendantToken } = extractAscendantEntry(chart);
57
+ const numbers = extractRulingNumbers(ascendantToken);
58
+ const names = numbers
59
+ .map((digit) => exports.PLANET_NAME_MAP[digit])
60
+ .filter((name) => Boolean(name));
61
+ if (names.length === 0) {
62
+ throw new Error("Unable to map ruling planet numbers to names");
63
+ }
64
+ return { numbers, names };
65
+ };
66
+ exports.findRulingPlanets = findRulingPlanets;
67
+ const formatRulingPlanets = ({ names, numbers }) => names.map((name, index) => { var _a; return `${name} (${(_a = numbers[index]) !== null && _a !== void 0 ? _a : "?"})`; }).join(" และ ");
68
+ exports.formatRulingPlanets = formatRulingPlanets;
69
+ //# sourceMappingURL=ruling-planets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ruling-planets.js","sourceRoot":"","sources":["../../../engine/astro/ruling-planets.ts"],"names":[],"mappings":";;;AAAa,QAAA,eAAe,GAA2B;IACrD,GAAG,EAAE,YAAY;IACjB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,aAAa;IAClB,GAAG,EAAE,UAAU;IACf,GAAG,EAAE,UAAU;IACf,GAAG,EAAE,SAAS;IACd,GAAG,EAAE,SAAS;IACd,GAAG,EAAE,UAAU;CAChB,CAAC;AAOF,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAE/B,MAAM,gBAAgB,GAAG,CAAC,KAAc,EAAmB,EAAE,CAC3D,OAAO,KAAK,KAAK,QAAQ,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAE7D,MAAM,wBAAwB,GAA2B;IACvD,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;CACT,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,KAAa,EAAU,EAAE,CAChD,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,WAAC,OAAA,MAAA,wBAAwB,CAAC,KAAK,CAAC,mCAAI,KAAK,CAAA,EAAA,CAAC,CAAC;AAE/E,MAAM,qBAAqB,GAAG,CAAC,KAAgB,EAAoC,EAAE;IACnF,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAEhD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IAE3B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC1B,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,KAAa,EAAY,EAAE;;IACvD,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,MAAA,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,mCAAI,EAAE,CAAC;IAC9C,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAEnD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC,CAAC;AAEK,MAAM,iBAAiB,GAAG,CAAC,KAAc,EAAoB,EAAE;IACpE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAE/D,MAAM,OAAO,GAAG,oBAAoB,CAAC,cAAc,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,OAAO;SAClB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,uBAAe,CAAC,KAAK,CAAC,CAAC;SACtC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAEnD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC5B,CAAC,CAAC;AAjBW,QAAA,iBAAiB,qBAiB5B;AAEK,MAAM,mBAAmB,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,EAAoB,EAAE,EAAE,CAC1E,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,WAAC,OAAA,GAAG,IAAI,KAAK,MAAA,OAAO,CAAC,KAAK,CAAC,mCAAI,GAAG,GAAG,CAAA,EAAA,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AADpE,QAAA,mBAAmB,uBACiD"}
@@ -0,0 +1,43 @@
1
+ export interface PlanetPositions {
2
+ ascendant: number;
3
+ sun: number;
4
+ moon: number;
5
+ mars: number;
6
+ mercury: number;
7
+ jupiter: number;
8
+ venus: number;
9
+ saturn: number;
10
+ rahu: number;
11
+ ketu: number;
12
+ uranus: number;
13
+ }
14
+ export interface CalculationInput {
15
+ day: number;
16
+ monthTh: string;
17
+ yearBe: number;
18
+ hour: number;
19
+ minute: number;
20
+ province: string;
21
+ }
22
+ export interface CalculationResult {
23
+ positions: PlanetPositions;
24
+ tanuseth: number;
25
+ channelOutputs: string[];
26
+ sunPosition: [number, number];
27
+ }
28
+ export declare function calculateUranus(monthTh: string, yearBe: number, day: number, hour: number, minute: number): number;
29
+ export declare function calculateKetu(monthTh: string, yearBe: number, day: number, hour: number, minute: number): number;
30
+ export declare function calculateRahu(monthTh: string, yearBe: number, day: number, hour: number, minute: number): number;
31
+ export declare function calculateSaturn(monthTh: string, yearBe: number, day: number, hour: number, minute: number): number;
32
+ export declare function calculateVenus(monthTh: string, yearBe: number, day: number, hour: number, minute: number): number;
33
+ export declare function calculateJupiter(monthTh: string, yearBe: number, day: number, hour: number, minute: number): number;
34
+ export declare function calculateMercury(monthTh: string, yearBe: number, day: number, hour: number, minute: number): number;
35
+ export declare function calculateMars(monthTh: string, yearBe: number, day: number, hour: number, minute: number): number;
36
+ export declare function calculateMoon(monthTh: string, yearBe: number, day: number, hour: number, minute: number): number;
37
+ export declare function calculateSun(monthTh: string, yearBe: number, day: number, hour: number, minute: number): number;
38
+ export declare function calculateSunDegrees(monthTh: string, yearBe: number, day: number, hour: number, minute: number): number;
39
+ export declare function calculateSunMinutes(monthTh: string, yearBe: number, day: number, hour: number, minute: number): number;
40
+ export declare function calculateAscendant(day: number, monthTh: string, yearBe: number, hour: number, minute: number, province: string): number;
41
+ export declare function calculateTanuseth(positions: Record<string, number>, ascSign: number): number;
42
+ export declare function calculateAllPositions(input: CalculationInput): CalculationResult;
43
+ //# sourceMappingURL=astro-calculation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"astro-calculation.d.ts","sourceRoot":"","sources":["../../engine/astro-calculation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,609 @@
1
+ "use strict";
2
+ // Thai Astrological Calculations - TypeScript Version
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.calculateUranus = calculateUranus;
5
+ exports.calculateKetu = calculateKetu;
6
+ exports.calculateRahu = calculateRahu;
7
+ exports.calculateSaturn = calculateSaturn;
8
+ exports.calculateVenus = calculateVenus;
9
+ exports.calculateJupiter = calculateJupiter;
10
+ exports.calculateMercury = calculateMercury;
11
+ exports.calculateMars = calculateMars;
12
+ exports.calculateMoon = calculateMoon;
13
+ exports.calculateSun = calculateSun;
14
+ exports.calculateSunDegrees = calculateSunDegrees;
15
+ exports.calculateSunMinutes = calculateSunMinutes;
16
+ exports.calculateAscendant = calculateAscendant;
17
+ exports.calculateTanuseth = calculateTanuseth;
18
+ exports.calculateAllPositions = calculateAllPositions;
19
+ const MONTH_MAP = {
20
+ มกราคม: 1,
21
+ กุมภาพันธ์: 2,
22
+ มีนาคม: 3,
23
+ เมษายน: 4,
24
+ พฤษภาคม: 5,
25
+ มิถุนายน: 6,
26
+ กรกฎาคม: 7,
27
+ สิงหาคม: 8,
28
+ กันยายน: 9,
29
+ ตุลาคม: 10,
30
+ พฤศจิกายน: 11,
31
+ ธันวาคม: 12,
32
+ };
33
+ const QUADRANT_ADJUST_TABLE = { 0: 0, 1: 244, 2: 427, 3: 488 };
34
+ const PROVINCE_TIME_OFFSETS = {
35
+ กระบี่: 24,
36
+ กรุงเทพมหานคร: 18,
37
+ กาญจนบุรี: 22,
38
+ กาฬสินธุ์: 6,
39
+ กำแพงเพชร: 22,
40
+ ขอนแก่น: 9,
41
+ จันทบุรี: 12,
42
+ ฉะเชิงเทรา: 16,
43
+ ชลบุรี: 16,
44
+ ชัยนาท: 19,
45
+ ชัยภูมิ: 12,
46
+ ชุมพร: 23,
47
+ เชียงราย: 21,
48
+ เชียงใหม่: 24,
49
+ ตรัง: 22,
50
+ ตราด: 10,
51
+ ตาก: 23,
52
+ นครนายก: 15,
53
+ นครปฐม: 20,
54
+ นครพนม: 1,
55
+ นครราชสีมา: 12,
56
+ นครศรีธรรมราช: 20,
57
+ นครสวรรค์: 20,
58
+ นนทบุรี: 18,
59
+ นราธิวาส: 13,
60
+ น่าน: 17,
61
+ บึงกาฬ: 5,
62
+ บุรีรัมย์: 8,
63
+ ปทุมธานี: 18,
64
+ ประจวบคีรีขันธ์: 21,
65
+ ปราจีนบุรี: 15,
66
+ ปัตตานี: 15,
67
+ พระนครศรีอยุธยา: 18,
68
+ พะเยา: 20,
69
+ พังงา: 26,
70
+ พัทลุง: 20,
71
+ พิจิตร: 19,
72
+ พิษณุโลก: 19,
73
+ เพชรบุรี: 20,
74
+ เพชรบูรณ์: 15,
75
+ แพร่: 19,
76
+ ภูเก็ต: 27,
77
+ มหาสารคาม: 7,
78
+ มุกดาหาร: 1,
79
+ แม่ฮ่องสอน: 28,
80
+ ยโสธร: 3,
81
+ ยะลา: 15,
82
+ ร้อยเอ็ด: 5,
83
+ ระนอง: 26,
84
+ ระยอง: 15,
85
+ ราชบุรี: 21,
86
+ ลพบุรี: 17,
87
+ ลำปาง: 22,
88
+ ลำพูน: 24,
89
+ เลย: 13,
90
+ ศรีสะเกษ: 3,
91
+ สกลนคร: 3,
92
+ สงขลา: 18,
93
+ สตูล: 20,
94
+ สมุทรปราการ: 18,
95
+ สมุทรสงคราม: 20,
96
+ สมุทรสาคร: 19,
97
+ สระแก้ว: 12,
98
+ สระบุรี: 16,
99
+ สิงห์บุรี: 18,
100
+ สุโขทัย: 21,
101
+ สุพรรณบุรี: 20,
102
+ สุราษฎร์ธานี: 23,
103
+ สุรินทร์: 6,
104
+ หนองคาย: 9,
105
+ หนองบัวลำภู: 10,
106
+ อ่างทอง: 18,
107
+ อำนาจเจริญ: 1,
108
+ อุดรธานี: 9,
109
+ อุตรดิตถ์: 20,
110
+ อุทัยธานี: 20,
111
+ อุบลราชธานี: 1,
112
+ };
113
+ const SIGN_DURATIONS_MINUTES = [120.0, 96.0, 72.0, 120.0, 144.0, 168.0, 168.0, 144.0, 120.0, 72.0, 96.0, 120.0];
114
+ const SIGN_PLANETS = {
115
+ 1: "อาทิตย์",
116
+ 2: "จันทร์",
117
+ 3: "อังคาร",
118
+ 4: "พุธ",
119
+ 5: "พฤหัสบดี",
120
+ 6: "ศุกร์",
121
+ 7: "เสาร์",
122
+ 8: "ราหู",
123
+ 9: "เกตุ",
124
+ 0: "มฤตยู",
125
+ };
126
+ const MAP_PLANETS = {
127
+ 0: 3,
128
+ 1: 6,
129
+ 2: 4,
130
+ 3: 2,
131
+ 4: 1,
132
+ 5: 4,
133
+ 6: 6,
134
+ 7: 3,
135
+ 8: 5,
136
+ 9: 7,
137
+ 10: 8,
138
+ 11: 5,
139
+ };
140
+ const PLANET_SYMBOLS = {
141
+ ascendant: ["ลั", null],
142
+ sun: ["๑", 1],
143
+ moon: ["๒", 2],
144
+ mars: ["๓", 3],
145
+ mercury: ["๔", 4],
146
+ jupiter: ["๕", 5],
147
+ venus: ["๖", 6],
148
+ saturn: ["๗", 7],
149
+ rahu: ["๘", null],
150
+ ketu: ["๙", null],
151
+ uranus: ["๐", null],
152
+ };
153
+ // Helper Functions
154
+ function wrap21600(value) {
155
+ const modValue = value % 21600;
156
+ return modValue >= 0 ? modValue : modValue + 21600;
157
+ }
158
+ function calculateBaseValues(monthTh, yearBe, day, hour, minute) {
159
+ const monthNum = MONTH_MAP[monthTh];
160
+ const yearAd = yearBe - 543;
161
+ const jy = monthNum > 2 ? yearAd : yearAd - 1;
162
+ const jm = monthNum > 2 ? monthNum + 1 : monthNum + 13;
163
+ const jc = Math.floor(jy * 0.01);
164
+ const jdBase = Math.floor(jy * 365.25) + Math.floor(jm * 30.6) + day + 1720997 - jc + Math.floor(jc * 0.25);
165
+ let D14, E11;
166
+ if (hour < 12) {
167
+ D14 = jdBase - 1;
168
+ E11 = hour / 24 - 0.5 + 1.5;
169
+ }
170
+ else {
171
+ D14 = jdBase;
172
+ E11 = hour / 24 - 0.5;
173
+ }
174
+ const additionalTime = (hour / 60 + minute) / 60 / 60 / 24;
175
+ const E14 = E11 + additionalTime;
176
+ const julianDay = D14 + E14;
177
+ const relativeJulianDay = Math.round(julianDay - 1954167.5);
178
+ const timeFraction = hour + minute / 60;
179
+ const yearRelative1181 = yearBe - 1181;
180
+ const solarCeiling = Math.ceil((292207 * yearRelative1181 + 373) / 800);
181
+ const solarAdjF6 = yearRelative1181 * 0.25875 +
182
+ Math.trunc(yearRelative1181 / 100 + 0.38) -
183
+ Math.trunc(yearRelative1181 / 4 + 0.5) -
184
+ Math.trunc(yearRelative1181 / 400 + 0.595) -
185
+ 5.53375;
186
+ const solarAdjDays = Math.trunc(solarAdjF6);
187
+ const solarAdjHours = Math.trunc((solarAdjF6 - solarAdjDays) * 24);
188
+ const solarAdjMinutes = Math.trunc(((solarAdjF6 - solarAdjDays) * 24 - solarAdjHours) * 60);
189
+ const currentTimeF8 = hour * 60 + minute / 60;
190
+ const solarAdjTimeF9 = solarAdjHours * 60 + solarAdjMinutes / 60;
191
+ const timeComparisonIndicator = currentTimeF8 > solarAdjTimeF9 ? 1 : 2;
192
+ let solarCalcYear;
193
+ if (relativeJulianDay < solarCeiling || (relativeJulianDay === solarCeiling && timeComparisonIndicator === 2)) {
194
+ solarCalcYear = yearRelative1181 - 1;
195
+ }
196
+ else {
197
+ solarCalcYear = yearRelative1181;
198
+ }
199
+ const intermediateSolarDate = Math.trunc((solarCalcYear * 292207) / 800 + 373 / 800) + 1;
200
+ const B21Val = ((relativeJulianDay - 1) * 800 + Math.trunc((timeFraction * 800) / 24) - 373) % 292207;
201
+ const C22Val = B21Val % 24350;
202
+ const B22Val = Math.floor(B21Val / 24350);
203
+ const B23Val = Math.floor(C22Val / 811);
204
+ const C23Val = C22Val % 811;
205
+ const B24Val = Math.floor(C23Val / 14) - 3;
206
+ const D25Val = B22Val * 1800 + B23Val * 60 + B24Val;
207
+ const solarPositionMean = wrap21600(D25Val);
208
+ const solarPositionRaw = wrap21600(solarPositionMean - 23);
209
+ const E18Val = B21Val >= 364 ? solarCalcYear - 610 : solarCalcYear - 611;
210
+ const solarCalcBase = E18Val * 21600 + solarPositionRaw;
211
+ return [relativeJulianDay, timeFraction, solarCalcBase, solarPositionRaw, solarPositionMean];
212
+ }
213
+ function getQuadrantVals(value) {
214
+ const wrappedInput = wrap21600(value);
215
+ const quadrant = Math.floor(wrappedInput / 5400) + 1;
216
+ const signMultiplier = [1, 2].includes(quadrant) ? -1 : 1;
217
+ let quadrantVal;
218
+ if (quadrant === 1)
219
+ quadrantVal = wrappedInput;
220
+ else if (quadrant === 2)
221
+ quadrantVal = 10800 - wrappedInput;
222
+ else if (quadrant === 3)
223
+ quadrantVal = wrappedInput - 10800;
224
+ else
225
+ quadrantVal = 21600 - wrappedInput;
226
+ return [quadrant, quadrantVal, signMultiplier];
227
+ }
228
+ function getTableAdj(quadrantVal) {
229
+ const baseIndex = Math.floor(quadrantVal / 1800);
230
+ const val1 = QUADRANT_ADJUST_TABLE[baseIndex % 4];
231
+ const val2 = QUADRANT_ADJUST_TABLE[(baseIndex + 1) % 4];
232
+ const interpFactor = quadrantVal / 1800 - baseIndex;
233
+ const adj = Math.round((interpFactor * (val2 - val1) + val1) * 60);
234
+ return adj;
235
+ }
236
+ function getSecondaryAdjParams(value) {
237
+ const wrappedInput = wrap21600(value);
238
+ const quadrant = Math.floor(wrappedInput / 5400) + 1;
239
+ let secondaryVal;
240
+ if (quadrant === 1)
241
+ secondaryVal = 5400 - wrappedInput;
242
+ else if (quadrant === 2)
243
+ secondaryVal = wrappedInput - 5400;
244
+ else if (quadrant === 3)
245
+ secondaryVal = 16200 - wrappedInput;
246
+ else
247
+ secondaryVal = wrappedInput - 16200;
248
+ const baseIndex = Math.floor(secondaryVal / 1800);
249
+ const val1 = QUADRANT_ADJUST_TABLE[baseIndex % 4];
250
+ const val2 = QUADRANT_ADJUST_TABLE[(baseIndex + 1) % 4];
251
+ const interpFactor = secondaryVal / 1800 - baseIndex;
252
+ const interpAdj = Math.round(interpFactor * (val2 - val1) + val1 + 0.5);
253
+ const g66Val = Math.floor(interpAdj / 2);
254
+ const signMultSecondary = [1, 4].includes(quadrant) ? 1 : -1;
255
+ return [g66Val, signMultSecondary, interpAdj];
256
+ }
257
+ function applyPlanetaryAdjustments(initialPos, baseCalcVal, constants) {
258
+ // First Adjustment Cycle
259
+ const val51 = initialPos - constants.k51;
260
+ const [, quadVal1, signMult1] = getQuadrantVals(val51);
261
+ const adj1 = getTableAdj(quadVal1);
262
+ const [g66Val1, signMultSec1] = getSecondaryAdjParams(wrap21600(val51));
263
+ const denom1 = constants.k67Base + g66Val1 * signMultSec1;
264
+ const appliedAdj1 = denom1 !== 0 ? Math.round((adj1 * 60) / denom1) : 0;
265
+ const posAfterAdj1 = initialPos + appliedAdj1 * signMult1;
266
+ // Second Adjustment Cycle
267
+ const val71 = wrap21600(posAfterAdj1) - baseCalcVal;
268
+ const [, quadVal2, signMult2] = getQuadrantVals(val71);
269
+ const adj2 = getTableAdj(quadVal2);
270
+ const f86Val = Math.round(Math.round(adj2 / 60) / 3);
271
+ const f87Val = Math.round(denom1 * constants.k87Mult);
272
+ const f88Val = f86Val + f87Val;
273
+ const [, signMultSec2, f85Val] = getSecondaryAdjParams(wrap21600(val71));
274
+ const denom2 = f88Val + f85Val * signMultSec2;
275
+ const appliedAdj2 = denom2 !== 0 ? Math.round((adj2 * 60) / denom2) : 0;
276
+ const finalPos = wrap21600(posAfterAdj1) + appliedAdj2 * signMult2;
277
+ return wrap21600(finalPos);
278
+ }
279
+ function getSignIndex(finalPos) {
280
+ const signIndex = Math.floor(Math.trunc(finalPos / 1800));
281
+ return signIndex === 12 ? 0 : signIndex;
282
+ }
283
+ function calculateSunPrecisePosition(monthTh, yearBe, day, hour, minute) {
284
+ var _a, _b;
285
+ const G_VALS_SUN = { 0: 0.0, 1: 35.0, 2: 67.0, 3: 94.0, 4: 116.0, 5: 129.0, 6: 134.0 };
286
+ const [, , , , solarPositionMean] = calculateBaseValues(monthTh, yearBe, day, hour, minute);
287
+ const d26Raw = solarPositionMean - 4800;
288
+ const anomalyBaseB26 = wrap21600(d26Raw);
289
+ const quadrant = Math.floor(Math.trunc(anomalyBaseB26 / 5400)) + 1;
290
+ const signMult = [1, 2].includes(quadrant) ? -1 : 1;
291
+ let quadrantValB28;
292
+ if (quadrant === 1)
293
+ quadrantValB28 = anomalyBaseB26;
294
+ else if (quadrant === 2)
295
+ quadrantValB28 = 10800 - anomalyBaseB26;
296
+ else if (quadrant === 3)
297
+ quadrantValB28 = anomalyBaseB26 - 10800;
298
+ else
299
+ quadrantValB28 = 21600 - anomalyBaseB26;
300
+ const e27Val = Math.floor(Math.trunc(quadrantValB28 / 900));
301
+ const e28Val = e27Val + 1;
302
+ const gE27 = (_a = G_VALS_SUN[e27Val]) !== null && _a !== void 0 ? _a : G_VALS_SUN[6];
303
+ const gE28 = (_b = G_VALS_SUN[e28Val]) !== null && _b !== void 0 ? _b : G_VALS_SUN[6];
304
+ const interpFactor = quadrantValB28 / 900 - e27Val;
305
+ const sunAdjE29 = Math.floor(Math.trunc(interpFactor * (gE28 - gE27) + gE27));
306
+ const d30Val = solarPositionMean + sunAdjE29 * signMult;
307
+ const finalPosB30 = wrap21600(d30Val);
308
+ return finalPosB30;
309
+ }
310
+ // Planet calculation functions
311
+ function calculateUranus(monthTh, yearBe, day, hour, minute) {
312
+ const [, , solarCalcBase, solarPositionRaw] = calculateBaseValues(monthTh, yearBe, day, hour, minute);
313
+ const g45 = Math.floor(Math.trunc(solarCalcBase / 84));
314
+ const g47 = Math.floor(solarCalcBase / 7224);
315
+ const initialPos = (g45 + g47 + 16277) % 21600;
316
+ const val51 = initialPos - 7440;
317
+ const [, quadVal1, signMult1] = getQuadrantVals(val51);
318
+ const adj1 = getTableAdj(quadVal1);
319
+ const [g66Val1, signMultSec1] = getSecondaryAdjParams(wrap21600(val51));
320
+ const denom1 = 38640 + g66Val1 * signMultSec1;
321
+ const appliedAdj1 = denom1 !== 0 ? Math.round((adj1 * 60) / denom1) : 0;
322
+ const posAfterAdj1 = initialPos + appliedAdj1 * signMult1;
323
+ const val71 = wrap21600(posAfterAdj1) - solarPositionRaw;
324
+ const [, quadVal2, signMult2] = getQuadrantVals(val71);
325
+ const adj2 = getTableAdj(quadVal2);
326
+ const g86Val = Math.round(Math.round(adj2 / 60) / 3);
327
+ const g87Val = Math.round((denom1 * 3) / 7);
328
+ const g88Val = g86Val + g87Val;
329
+ const [, signMultSec2, g85Val] = getSecondaryAdjParams(wrap21600(val71));
330
+ const denom2 = g88Val + g85Val * signMultSec2;
331
+ const appliedAdj2 = denom2 !== 0 ? Math.round((adj2 * 60) / denom2) : 0;
332
+ const finalPos = wrap21600(posAfterAdj1) + appliedAdj2 * signMult2;
333
+ const finalWrappedPos = wrap21600(finalPos);
334
+ return getSignIndex(finalWrappedPos);
335
+ }
336
+ function calculateKetu(monthTh, yearBe, day, hour, minute) {
337
+ const [relativeJulianDay, timeFraction] = calculateBaseValues(monthTh, yearBe, day, hour, minute);
338
+ const i46Val = (relativeJulianDay - 1 - 344) % 679;
339
+ const i49Val = Math.trunc(((i46Val + timeFraction / 24) * 21600) / 679);
340
+ const i50Val = i49Val % 21600;
341
+ const finalPos = wrap21600(21600 - i50Val);
342
+ return getSignIndex(finalPos);
343
+ }
344
+ function calculateRahu(monthTh, yearBe, day, hour, minute) {
345
+ const [, , solarCalcBase] = calculateBaseValues(monthTh, yearBe, day, hour, minute);
346
+ const h45Val = Math.floor(solarCalcBase / 20);
347
+ const h47Val = Math.floor(solarCalcBase / 265);
348
+ const h49Val = h45Val + h47Val;
349
+ const h50Val = h49Val % 21600;
350
+ const finalPos = wrap21600(15150 - h50Val);
351
+ return getSignIndex(finalPos);
352
+ }
353
+ function calculateSaturn(monthTh, yearBe, day, hour, minute) {
354
+ const [, , solarCalcBase, solarPositionRaw] = calculateBaseValues(monthTh, yearBe, day, hour, minute);
355
+ const f45 = Math.floor(Math.trunc(solarCalcBase / 30));
356
+ const f47 = Math.floor((solarCalcBase * 6) / 10000);
357
+ const initialPos = (f45 + f47 + 11944) % 21600;
358
+ const constants = { k51: 14820, k67Base: 3780, k87Mult: 7 / 6 };
359
+ const finalPos = applyPlanetaryAdjustments(initialPos, solarPositionRaw, constants);
360
+ return getSignIndex(finalPos);
361
+ }
362
+ function calculateVenus(monthTh, yearBe, day, hour, minute) {
363
+ const [, , solarCalcBase, solarPositionRaw] = calculateBaseValues(monthTh, yearBe, day, hour, minute);
364
+ const e45 = Math.floor(Math.trunc((solarCalcBase * 5) / 3));
365
+ const e47 = Math.floor((solarCalcBase * 10) / 243);
366
+ const venusMeanPos = (e45 - e47 + 10944) % 21600;
367
+ const val51 = solarPositionRaw - 4800;
368
+ const [, quadVal1, signMult1] = getQuadrantVals(val51);
369
+ const adj1 = getTableAdj(quadVal1);
370
+ const [g66Val1, signMultSec1] = getSecondaryAdjParams(wrap21600(val51));
371
+ const denom1 = 19200 + g66Val1 * signMultSec1;
372
+ const appliedAdj1 = denom1 !== 0 ? Math.round((adj1 * 60) / denom1) : 0;
373
+ const posAfterAdj1 = solarPositionRaw + appliedAdj1 * signMult1;
374
+ const val71 = wrap21600(posAfterAdj1) - venusMeanPos;
375
+ const [, quadVal2, signMult2] = getQuadrantVals(val71);
376
+ const adj2 = getTableAdj(quadVal2);
377
+ const e86Val = Math.round(Math.round(adj2 / 60) / 3);
378
+ const e87Val = 60 * 11;
379
+ const e88Val = e86Val + e87Val;
380
+ const [, signMultSec2, e85Val] = getSecondaryAdjParams(wrap21600(val71));
381
+ const denom2 = e88Val + e85Val * signMultSec2;
382
+ const appliedAdj2 = denom2 !== 0 ? Math.round((adj2 * 60) / denom2) : 0;
383
+ const finalPos = wrap21600(posAfterAdj1) + appliedAdj2 * signMult2;
384
+ return getSignIndex(wrap21600(finalPos));
385
+ }
386
+ function calculateJupiter(monthTh, yearBe, day, hour, minute) {
387
+ const [, , solarCalcBase, solarPositionRaw] = calculateBaseValues(monthTh, yearBe, day, hour, minute);
388
+ const d45 = Math.floor(Math.trunc(solarCalcBase / 12));
389
+ const d47 = Math.floor(solarCalcBase / 1032);
390
+ const initialPos = (d45 + d47 + 14297) % 21600;
391
+ const constants = { k51: 10320, k67Base: 5520, k87Mult: 3 / 7 };
392
+ const finalPos = applyPlanetaryAdjustments(initialPos, solarPositionRaw, constants);
393
+ return getSignIndex(finalPos);
394
+ }
395
+ function calculateMercury(monthTh, yearBe, day, hour, minute) {
396
+ const [, , solarCalcBase, solarPositionRaw] = calculateBaseValues(monthTh, yearBe, day, hour, minute);
397
+ const c45 = Math.floor(Math.trunc((solarCalcBase * 7) / 46));
398
+ const c47 = Math.floor(solarCalcBase * 4);
399
+ const mercuryMeanPos = (c45 + c47 + 10642) % 21600;
400
+ const val51 = solarPositionRaw - 13200;
401
+ const [, quadVal1, signMult1] = getQuadrantVals(val51);
402
+ const adj1 = getTableAdj(quadVal1);
403
+ const [g66Val1, signMultSec1] = getSecondaryAdjParams(wrap21600(val51));
404
+ const denom1 = 6000 + g66Val1 * signMultSec1;
405
+ const appliedAdj1 = denom1 !== 0 ? Math.round((adj1 * 60) / denom1) : 0;
406
+ const posAfterAdj1 = solarPositionRaw + appliedAdj1 * signMult1;
407
+ const val71 = wrap21600(posAfterAdj1) - mercuryMeanPos;
408
+ const [, quadVal2, signMult2] = getQuadrantVals(val71);
409
+ const adj2 = getTableAdj(quadVal2);
410
+ const c86Val = Math.round(Math.round(adj2 / 60) / 3);
411
+ const c87Val = 60 * 21;
412
+ const c88Val = c86Val + c87Val;
413
+ const [, signMultSec2, c85Val] = getSecondaryAdjParams(wrap21600(val71));
414
+ const denom2 = c88Val + c85Val * signMultSec2;
415
+ const appliedAdj2 = denom2 !== 0 ? Math.round((adj2 * 60) / denom2) : 0;
416
+ const finalPos = wrap21600(posAfterAdj1) + appliedAdj2 * signMult2;
417
+ return getSignIndex(wrap21600(finalPos));
418
+ }
419
+ function calculateMars(monthTh, yearBe, day, hour, minute) {
420
+ const [, , solarCalcBase, solarPositionRaw] = calculateBaseValues(monthTh, yearBe, day, hour, minute);
421
+ const b45 = Math.floor(Math.trunc(solarCalcBase / 2));
422
+ const b47 = Math.floor((solarCalcBase * 16) / 505);
423
+ const initialPos = (b45 + b47 + 5420) % 21600;
424
+ const constants = { k51: 7620, k67Base: 2700, k87Mult: 4 / 15 };
425
+ const finalPos = applyPlanetaryAdjustments(initialPos, solarPositionRaw, constants);
426
+ return getSignIndex(finalPos);
427
+ }
428
+ function calculateMoon(monthTh, yearBe, day, hour, minute) {
429
+ var _a, _b;
430
+ const G_VALS_MOON = { 0: 0.0, 1: 77.0, 2: 148.0, 3: 209.0, 4: 256.0, 5: 286.0, 6: 296.0 };
431
+ const [relativeJulianDay, timeFraction, , , solarPositionMean] = calculateBaseValues(monthTh, yearBe, day, hour, minute);
432
+ const b34Val = ((relativeJulianDay - 1) * 703 + 650 + Math.trunc((timeFraction * 703) / 24)) % 20760;
433
+ const b35Val = Math.floor(b34Val / 692);
434
+ const b36Val = b34Val % 692;
435
+ const d33Val = b35Val * 720 + Math.trunc(1.04 * b36Val) - 40 + solarPositionMean;
436
+ const d34Val = wrap21600(d33Val);
437
+ const d35Val = (relativeJulianDay - 1 - 621) % 3232;
438
+ const e36Val = Math.trunc(((d35Val + timeFraction / 24) / 3232) * 21600) + 2;
439
+ const d36Val = wrap21600(e36Val);
440
+ const d37ValRaw = d34Val - d36Val;
441
+ const b37Val = wrap21600(d37ValRaw);
442
+ const b38Val = Math.floor(Math.trunc(b37Val / 5400)) + 1;
443
+ const b40Val = [1, 2].includes(b38Val) ? -1 : 1;
444
+ let quadrantValB39;
445
+ if (b38Val === 1)
446
+ quadrantValB39 = b37Val;
447
+ else if (b38Val === 2)
448
+ quadrantValB39 = 10800 - b37Val;
449
+ else if (b38Val === 3)
450
+ quadrantValB39 = b37Val - 10800;
451
+ else
452
+ quadrantValB39 = 21600 - b37Val;
453
+ const e38Val = Math.floor(Math.trunc(quadrantValB39 / 900));
454
+ const e39Val = e38Val + 1;
455
+ const gE38 = (_a = G_VALS_MOON[e38Val]) !== null && _a !== void 0 ? _a : G_VALS_MOON[6];
456
+ const gE39 = (_b = G_VALS_MOON[e39Val]) !== null && _b !== void 0 ? _b : G_VALS_MOON[6];
457
+ const interpFactorE40 = quadrantValB39 / 900 - e38Val;
458
+ const e40Val = Math.floor(Math.trunc(interpFactorE40 * (gE39 - gE38) + gE38));
459
+ const d42Val = d34Val + e40Val * b40Val;
460
+ const b42Val = wrap21600(d42Val);
461
+ const b43Val = Math.floor(b42Val / 1800);
462
+ const finalSignIndex = b43Val < 12 ? b43Val : 0;
463
+ return finalSignIndex;
464
+ }
465
+ function calculateSun(monthTh, yearBe, day, hour, minute) {
466
+ const finalPosB30 = calculateSunPrecisePosition(monthTh, yearBe, day, hour, minute);
467
+ return getSignIndex(finalPosB30);
468
+ }
469
+ function calculateSunDegrees(monthTh, yearBe, day, hour, minute) {
470
+ const finalPosB30 = calculateSunPrecisePosition(monthTh, yearBe, day, hour, minute);
471
+ const f30Val = finalPosB30 % 1800;
472
+ const d31Val = Math.trunc(f30Val / 60);
473
+ return d31Val;
474
+ }
475
+ function calculateSunMinutes(monthTh, yearBe, day, hour, minute) {
476
+ const finalPosB30 = calculateSunPrecisePosition(monthTh, yearBe, day, hour, minute);
477
+ const f30Val = finalPosB30 % 1800;
478
+ const f31Val = Math.trunc(f30Val % 60);
479
+ return f31Val;
480
+ }
481
+ function calculateAscendant(day, monthTh, yearBe, hour, minute, province) {
482
+ var _a;
483
+ const sunPrecisePosB30 = calculateSunPrecisePosition(monthTh, yearBe, day, hour, minute);
484
+ const sunSignIndex = Math.floor(Math.trunc(sunPrecisePosB30 / 1800));
485
+ const sunPosInSignMinutesArc = sunPrecisePosB30 % 1800;
486
+ const sunDegreesInSign = Math.trunc(sunPosInSignMinutesArc / 60);
487
+ const sunMinutesInDegree = Math.trunc(sunPosInSignMinutesArc % 60);
488
+ const provinceOffsetMin = (_a = PROVINCE_TIME_OFFSETS[province]) !== null && _a !== void 0 ? _a : 18;
489
+ const localTimeMin = hour * 60 + minute;
490
+ const cumulativeDurationAtSunSignStart = SIGN_DURATIONS_MINUTES.slice(0, sunSignIndex).reduce((sum, duration) => sum + duration, 0);
491
+ const sunProgressTotalDegrees = sunDegreesInSign + sunMinutesInDegree / 60;
492
+ const sunSignDuration = SIGN_DURATIONS_MINUTES[sunSignIndex];
493
+ const sunDurationInCurrentSign = sunSignDuration > 0 ? sunSignDuration * (sunProgressTotalDegrees / 30) : 0;
494
+ const sunTotalProgressionMin = cumulativeDurationAtSunSignStart + sunDurationInCurrentSign;
495
+ const sunriseTimeMinutes = 360 + provinceOffsetMin;
496
+ let j19Val = (localTimeMin - sunriseTimeMinutes) % 1440;
497
+ if (j19Val < 0)
498
+ j19Val += 1440;
499
+ let ascendantTimeMin = (sunTotalProgressionMin + j19Val) % 1440;
500
+ if (ascendantTimeMin < 0)
501
+ ascendantTimeMin += 1440;
502
+ let ascendantSignIndex = 0;
503
+ let cumulativeTime = 0.0;
504
+ let degreesInAscendantSign = 0.0;
505
+ for (let i = 0; i < SIGN_DURATIONS_MINUTES.length; i++) {
506
+ const signDuration = SIGN_DURATIONS_MINUTES[i];
507
+ if (signDuration <= 0)
508
+ continue;
509
+ const startOfSign = cumulativeTime;
510
+ const endOfSign = cumulativeTime + signDuration;
511
+ let fallsInSign = false;
512
+ if (startOfSign < endOfSign) {
513
+ if (ascendantTimeMin >= startOfSign && ascendantTimeMin < endOfSign) {
514
+ fallsInSign = true;
515
+ }
516
+ }
517
+ else {
518
+ if (ascendantTimeMin >= startOfSign || ascendantTimeMin < endOfSign) {
519
+ fallsInSign = true;
520
+ }
521
+ }
522
+ if (fallsInSign) {
523
+ ascendantSignIndex = i;
524
+ let timeIntoAscendantSign = (ascendantTimeMin - startOfSign) % 1440;
525
+ if (timeIntoAscendantSign < 0)
526
+ timeIntoAscendantSign += 1440;
527
+ degreesInAscendantSign = (timeIntoAscendantSign * 30) / signDuration;
528
+ break;
529
+ }
530
+ cumulativeTime = endOfSign % 1440;
531
+ }
532
+ const k35Val = (ascendantSignIndex * 30 + degreesInAscendantSign) * 60;
533
+ const k36Val = Math.trunc(k35Val / 1800);
534
+ return k36Val;
535
+ }
536
+ function calculateTanuseth(positions, ascSign) {
537
+ try {
538
+ const lord1Idx = MAP_PLANETS[ascSign];
539
+ const lord1Name = SIGN_PLANETS[lord1Idx];
540
+ const sign1 = positions[lord1Name];
541
+ const lord2Idx = MAP_PLANETS[sign1];
542
+ const lord2Name = SIGN_PLANETS[lord2Idx];
543
+ const sign2 = positions[lord2Name];
544
+ const m36 = ((sign1 - ascSign) % 12) + 1;
545
+ const m38 = ((sign2 - sign1) % 12) + 1;
546
+ const result = (m36 * m38) % 7 || 7;
547
+ return result;
548
+ }
549
+ catch {
550
+ return -1;
551
+ }
552
+ }
553
+ function calculateAllPositions(input) {
554
+ const { day, monthTh, yearBe, hour, minute, province } = input;
555
+ const positions = {
556
+ ascendant: calculateAscendant(day, monthTh, yearBe, hour, minute, province),
557
+ sun: calculateSun(monthTh, yearBe, day, hour, minute),
558
+ moon: calculateMoon(monthTh, yearBe, day, hour, minute),
559
+ mars: calculateMars(monthTh, yearBe, day, hour, minute),
560
+ mercury: calculateMercury(monthTh, yearBe, day, hour, minute),
561
+ jupiter: calculateJupiter(monthTh, yearBe, day, hour, minute),
562
+ venus: calculateVenus(monthTh, yearBe, day, hour, minute),
563
+ saturn: calculateSaturn(monthTh, yearBe, day, hour, minute),
564
+ rahu: calculateRahu(monthTh, yearBe, day, hour, minute),
565
+ ketu: calculateKetu(monthTh, yearBe, day, hour, minute),
566
+ uranus: calculateUranus(monthTh, yearBe, day, hour, minute),
567
+ };
568
+ const planetPositionsForTanuseth = {
569
+ ลัคนา: positions.ascendant,
570
+ อาทิตย์: positions.sun,
571
+ จันทร์: positions.moon,
572
+ อังคาร: positions.mars,
573
+ พุธ: positions.mercury,
574
+ พฤหัสบดี: positions.jupiter,
575
+ ศุกร์: positions.venus,
576
+ เสาร์: positions.saturn,
577
+ ราหู: positions.rahu,
578
+ เกตุ: positions.ketu,
579
+ มฤตยู: positions.uranus,
580
+ };
581
+ const tanuseth = calculateTanuseth(planetPositionsForTanuseth, positions.ascendant);
582
+ const sunDeg = calculateSunDegrees(monthTh, yearBe, day, hour, minute);
583
+ const sunMin = calculateSunMinutes(monthTh, yearBe, day, hour, minute);
584
+ // Generate channel outputs
585
+ const outputArray = new Array(13).fill("");
586
+ if (tanuseth !== -1) {
587
+ for (let ch = 0; ch < 12; ch++) {
588
+ let channelOutput = "";
589
+ // Check each planet for this channel
590
+ Object.entries(positions).forEach(([planetKey, position]) => {
591
+ if (position === ch) {
592
+ const [symbol, tanusethNum] = PLANET_SYMBOLS[planetKey];
593
+ channelOutput += symbol;
594
+ if (tanusethNum !== null && tanuseth === tanusethNum) {
595
+ channelOutput += "*";
596
+ }
597
+ }
598
+ });
599
+ outputArray[ch] = channelOutput;
600
+ }
601
+ }
602
+ return {
603
+ positions,
604
+ tanuseth,
605
+ channelOutputs: outputArray.slice(0, 12),
606
+ sunPosition: [sunDeg, sunMin],
607
+ };
608
+ }
609
+ //# sourceMappingURL=astro-calculation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"astro-calculation.js","sourceRoot":"","sources":["../../engine/astro-calculation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { CalculationInput, CalculationResult } from "./engine/astro-calculation";
2
+ import { type RulingPlanetInfo } from "./engine/astro/ruling-planets";
3
+ export * from "./engine/astro-calculation";
4
+ export * from "./engine/astro/ruling-planets";
5
+ export interface ThaiAstrologyChart extends CalculationResult {
6
+ rulingPlanets?: RulingPlanetInfo;
7
+ rulingPlanetsText?: string;
8
+ rulingPlanetsError?: string;
9
+ }
10
+ export declare const generateThaiAstrologyChart: (input: CalculationInput) => ThaiAstrologyChart;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAErF,OAAO,EAA0C,KAAK,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAE7G,cAAc,4BAA4B,CAAA;AAC1C,cAAc,+BAA+B,CAAA;AAE7C,MAAM,WAAW,kBAAmB,SAAQ,iBAAiB;IAC3D,aAAa,CAAC,EAAE,gBAAgB,CAAA;IAChC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED,eAAO,MAAM,0BAA0B,GAAI,OAAO,gBAAgB,KAAG,kBAmBpE,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.generateThaiAstrologyChart = void 0;
18
+ const astro_calculation_1 = require("./engine/astro-calculation");
19
+ const ruling_planets_1 = require("./engine/astro/ruling-planets");
20
+ __exportStar(require("./engine/astro-calculation"), exports);
21
+ __exportStar(require("./engine/astro/ruling-planets"), exports);
22
+ const generateThaiAstrologyChart = (input) => {
23
+ const result = (0, astro_calculation_1.calculateAllPositions)(input);
24
+ try {
25
+ const rulingPlanets = (0, ruling_planets_1.findRulingPlanets)(result.channelOutputs);
26
+ return {
27
+ ...result,
28
+ rulingPlanets,
29
+ rulingPlanetsText: (0, ruling_planets_1.formatRulingPlanets)(rulingPlanets),
30
+ };
31
+ }
32
+ catch (error) {
33
+ const message = error instanceof Error ? error.message : "Unable to determine ruling planets";
34
+ return {
35
+ ...result,
36
+ rulingPlanetsError: message,
37
+ };
38
+ }
39
+ };
40
+ exports.generateThaiAstrologyChart = generateThaiAstrologyChart;
41
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACA,kEAAkE;AAClE,kEAA6G;AAE7G,6DAA0C;AAC1C,gEAA6C;AAQtC,MAAM,0BAA0B,GAAG,CAAC,KAAuB,EAAsB,EAAE;IACxF,MAAM,MAAM,GAAG,IAAA,yCAAqB,EAAC,KAAK,CAAC,CAAA;IAE3C,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,IAAA,kCAAiB,EAAC,MAAM,CAAC,cAAc,CAAC,CAAA;QAE9D,OAAO;YACL,GAAG,MAAM;YACT,aAAa;YACb,iBAAiB,EAAE,IAAA,oCAAmB,EAAC,aAAa,CAAC;SACtD,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,oCAAoC,CAAA;QAE7F,OAAO;YACL,GAAG,MAAM;YACT,kBAAkB,EAAE,OAAO;SAC5B,CAAA;IACH,CAAC;AACH,CAAC,CAAA;AAnBY,QAAA,0BAA0B,8BAmBtC"}
@@ -0,0 +1 @@
1
+ {"fileNames":["../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2016.intl.d.ts","../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../node_modules/typescript/lib/lib.es2017.date.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../engine/astro-calculation.ts","../engine/astro/ruling-planets.ts","../index.ts"],"fileIdsList":[[37,38]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"caf62c9d68409525c2360828d037a30f0c6330097f9cbf9147b28dd86fd27e38","signature":"002e8b8bbc240a9f38e6bf7b8b285b57a54922e437c667eca228a74214e2e9c7"},{"version":"07b7bb793c403d9eab91b7907ae5dcc465dd7a2e8fbac1abb70d6143c162c417","signature":"59c322ba4ef43b522995220daafc294d13de77c2d19db3490b96c7d4c7b2091d"},{"version":"1d7b3606c62296957f693cad51096b2bfb92fc630b0e607733a65c4b821a4f0e","signature":"6c723de8302432c07a7b20b2d37059758b30b4641c1de7afd1726587ba1fe9a7"}],"root":[[37,39]],"options":{"composite":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"module":1,"outDir":"./","rootDir":"..","skipLibCheck":true,"sourceMap":true,"strict":true,"target":6},"referencedMap":[[39,1]],"latestChangedDtsFile":"./index.d.ts","version":"5.9.2"}
package/package.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "thai-astrology",
3
+ "version": "0.1.1",
4
+ "description": "Thai astrology ephemeris calculations and utilities for Node.js and TypeScript projects.",
5
+ "license": "MIT",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "require": "./dist/index.js",
11
+ "import": "./dist/index.js",
12
+ "types": "./dist/index.d.ts"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist"
17
+ ],
18
+ "scripts": {
19
+ "clean": "tsc --build --clean",
20
+ "build": "tsc --build",
21
+ "prepublishOnly": "npm run build",
22
+ "test": "echo \"No tests specified\" && exit 0"
23
+ },
24
+ "keywords": [
25
+ "thai",
26
+ "astrology",
27
+ "horoscope",
28
+ "ephemeris",
29
+ "lunar"
30
+ ],
31
+ "devDependencies": {
32
+ "typescript": "^5.4.0"
33
+ },
34
+ "engines": {
35
+ "node": ">=16"
36
+ }
37
+ }