thai-astrology 0.1.6 → 0.1.8

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/README-th.md ADDED
@@ -0,0 +1,91 @@
1
+ # Thai Astrology — โหราศาสตร์ไทย
2
+
3
+ [English](README.md) | [ภาษาไทย](README-th.md)
4
+
5
+ Thai Astrology เป็นไลบรารี TypeScript สำหรับคำนวณดวงตามหลักโหราศาสตร์ไทย โดยใช้ข้อมูลวัน เวลา และจังหวัดเกิดเพื่อหาตำแหน่งดาว จัดวางดวงใน 12 ช่อง คำนวณลัคนาและตนุเศษ ไม่มีแพ็กเกจอื่นที่จำเป็นขณะใช้งาน รองรับ Node.js ตั้งแต่รุ่น 16 และมีไฟล์ประกาศชนิดข้อมูลสำหรับ TypeScript
6
+
7
+ ## การติดตั้ง
8
+
9
+ ```bash
10
+ npm install thai-astrology
11
+ ```
12
+
13
+ ## การใช้งาน
14
+
15
+ ```ts
16
+ import {
17
+ formatChannelOutputs,
18
+ generateThaiAstrologyChart,
19
+ } from "thai-astrology"
20
+
21
+ const chart = generateThaiAstrologyChart({
22
+ day: 15,
23
+ monthTh: 9,
24
+ yearBe: 2566, // พ.ศ. 2566 ตรงกับ ค.ศ. 2023
25
+ hour: 14,
26
+ minute: 45,
27
+ province: "กรุงเทพมหานคร",
28
+ })
29
+
30
+ console.log(formatChannelOutputs(chart))
31
+ console.log(formatChannelOutputs(chart, "thai"))
32
+ console.log(formatChannelOutputs(chart, "arabic"))
33
+ console.log(chart.sunPosition)
34
+ ```
35
+
36
+ ใช้ `yearBe` สำหรับปีพุทธศักราช หรือใช้ฟิลด์เดิม `yearBc` สำหรับปีคริสต์ศักราช เช่น `yearBc: 2023` ให้ผลเท่ากับ `yearBe: 2566` โดยระบุปีเพียงฟิลด์เดียว ชื่อ `yearBc` เป็นชื่อเดิมของ API และไม่ได้หมายถึงปีก่อนคริสต์ศักราช
37
+
38
+ สำหรับ CommonJS สามารถเรียกใช้ API เดียวกันได้ด้วย `require`:
39
+
40
+ ```js
41
+ const { generateThaiAstrologyChart, formatChannelOutputs } = require("thai-astrology")
42
+ ```
43
+
44
+ ตัวอย่างผลลัพธ์ตามลำดับคำสั่งด้านบน:
45
+
46
+ ```text
47
+ [ '58', '0', '9', '6', '14', '23', '', '', 'ลั', '', '7*', '' ]
48
+
49
+ [ '๕๘', '๐', '๙', '๖', '๑๔', '๒๓', '', '', 'ลั', '', '๗*', '' ]
50
+
51
+ [ '58', '0', '9', '6', '14', '23', '', '', 'ลั', '', '7*', '' ]
52
+
53
+ [ 27, 29 ]
54
+ ```
55
+
56
+ ## API หลัก
57
+
58
+ - `generateThaiAstrologyChart(input: CalculationInput): ThaiAstrologyChart` — คืนค่าตำแหน่งดาว ตนุเศษ ข้อมูลดวง 12 ช่อง และข้อมูลดาวที่อยู่ร่วมกับลัคนาเมื่อระบุได้ หากไม่สามารถระบุข้อมูลดาวร่วมลัคนาได้ ผลลัพธ์จะมีฟิลด์ `rulingPlanetsError`
59
+ - `formatChannelOutputs(chart, options?: { numerals?: "arabic" | "thai" } | "arabic" | "thai")` — ลบป้ายชื่อช่องและแสดงตัวเลขเป็นเลขอารบิกหรือเลขไทย โดยค่าเริ่มต้นเป็นเลขอารบิก
60
+
61
+ ## การพัฒนา
62
+
63
+ ```bash
64
+ nvm use
65
+ npm ci
66
+ npm run check
67
+ ```
68
+
69
+ ใช้ Node.js 24 เป็นรุ่นหลักสำหรับการพัฒนา แพ็กเกจยังรองรับ Node.js ตั้งแต่รุ่น 16 และกำหนดให้ CI ตรวจสอบกับ Node.js รุ่น 16, 22 และ 24
70
+
71
+ ```text
72
+ src/
73
+ index.ts จุดรวม API ที่เปิดให้ใช้งาน
74
+ engine/
75
+ astro-calculation.ts การคำนวณทางโหราศาสตร์
76
+ astro/ruling-planets.ts ฟังก์ชันเกี่ยวกับดาวร่วมลัคนา
77
+ test/
78
+ run.cjs ทดสอบความเข้ากันได้กับรุ่นที่เผยแพร่
79
+ fixtures/ ผลลัพธ์อ้างอิงจาก npm รุ่น 0.1.7
80
+ scripts/ ล้างไฟล์ build และตรวจสอบแพ็กเกจ
81
+ .github/workflows/ การตรวจสอบด้วย CI
82
+ dist/ JavaScript และไฟล์ประกาศชนิดข้อมูลที่สร้างขึ้น
83
+ ```
84
+
85
+ แก้ไขโค้ดใน `src/` ส่วน `dist/` สร้างขึ้นใหม่อัตโนมัติและไม่ติดตามด้วย Git การตั้งค่า VS Code ซ่อน `dist/` และ `node_modules/` ใน Explorer เพื่อให้ค้นหาไฟล์ต้นฉบับได้ง่าย แพ็กเกจ npm ประกอบด้วย `dist/` ซอร์ส TypeScript สำหรับการอ้างอิงจาก declaration maps เอกสาร README สัญญาอนุญาต และข้อมูลแพ็กเกจ
86
+
87
+ คำสั่ง `npm run check` ตรวจสอบชนิดข้อมูล ทดสอบความเข้ากันได้กับรุ่นที่เผยแพร่ สร้างไฟล์แพ็กเกจ และทดสอบการติดตั้งแพ็กเกจจริงผ่าน CommonJS, ESM imports และ TypeScript ดูคำสั่งและขั้นตอนการเผยแพร่เพิ่มเติมได้ใน [CONTRIBUTING.md](CONTRIBUTING.md) ซึ่งเป็นเอกสารภาษาอังกฤษ
88
+
89
+ ## สัญญาอนุญาต
90
+
91
+ MIT © ผู้ร่วมพัฒนา
package/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # Thai Astrology
2
2
 
3
- Thai Astrology (โหราศาสตร์ไทย) is a TypeScript library that recreates classical Thai astrological calculations. It converts birth details into the 12-channel chart lakna, Tanuseth, planetary positions without relying on runtime dependencies.
3
+ [English](README.md) | [ภาษาไทย](README-th.md)
4
+
5
+ Thai Astrology (โหราศาสตร์ไทย) is a TypeScript library for classical Thai astrological calculations. It converts birth details into planetary positions, a 12-channel chart, lakna, and Tanuseth without runtime dependencies. Node.js 16 or later is supported, with TypeScript declarations included.
4
6
 
5
7
  ## Install
6
8
 
@@ -19,7 +21,7 @@ import {
19
21
  const chart = generateThaiAstrologyChart({
20
22
  day: 15,
21
23
  monthTh: 9,
22
- yearBe: 2566, // 2023 in BCE
24
+ yearBe: 2566, // Buddhist Era; equivalent to 2023 CE
23
25
  hour: 14,
24
26
  minute: 45,
25
27
  province: "กรุงเทพมหานคร", // Bangkok
@@ -28,10 +30,16 @@ const chart = generateThaiAstrologyChart({
28
30
  console.log(formatChannelOutputs(chart))
29
31
  console.log(formatChannelOutputs(chart, "thai"))
30
32
  console.log(formatChannelOutputs(chart, "arabic"))
31
- console.log(chart.sunPosition)
33
+ console.log(chart.sunPosition)
32
34
  ```
33
35
 
34
- For BCE dates, supply `yearBc` instead of `yearBe`.
36
+ Use `yearBe` for the Buddhist Era year. The legacy field `yearBc` accepts a Gregorian year: `yearBc: 2023` is equivalent to `yearBe: 2566`. Supply one year field.
37
+
38
+ CommonJS consumers can use the same API:
39
+
40
+ ```js
41
+ const { generateThaiAstrologyChart, formatChannelOutputs } = require("thai-astrology")
42
+ ```
35
43
 
36
44
  Example output:
37
45
 
@@ -47,9 +55,37 @@ Example output:
47
55
 
48
56
  ## Key API
49
57
 
50
- - `generateThaiAstrologyChart(input: CalculationInput): ThaiAstrologyChart` – runs the core calculations and returns planets, tanuseth,12 channel outputs, and ruling planets metadata when available.
58
+ - `generateThaiAstrologyChart(input: CalculationInput): ThaiAstrologyChart` – returns planetary positions, Tanuseth, 12 channel outputs, and ruling planets metadata when available. When ruling planets cannot be determined, the chart includes `rulingPlanetsError`.
51
59
  - `formatChannelOutputs(chart, options?: { numerals?: "arabic" | "thai" } | "arabic" | "thai")` – strips channel labels and renders numbers in Arabic or Thai numerals.
52
60
 
61
+ ## Development
62
+
63
+ ```bash
64
+ nvm use
65
+ npm ci
66
+ npm run check
67
+ ```
68
+
69
+ Node.js 24 is the development default. The package retains its Node.js 16 minimum, and CI checks Node.js 16, 22, and 24.
70
+
71
+ ```text
72
+ src/
73
+ index.ts Public API
74
+ engine/
75
+ astro-calculation.ts Calculation engine
76
+ astro/ruling-planets.ts Ruling planet helpers
77
+ test/
78
+ run.cjs Compatibility tests
79
+ fixtures/ Expected npm 0.1.7 chart results
80
+ scripts/ Build cleanup and package verification
81
+ .github/workflows/ CI checks
82
+ dist/ Generated JavaScript and declarations
83
+ ```
84
+
85
+ Edit `src/`; `dist/` is rebuilt automatically and ignored by Git. VS Code hides `dist/` and `node_modules/` in the Explorer to keep source files easy to find. The npm archive includes `dist/`, TypeScript source for declaration maps, README, license, and package metadata.
86
+
87
+ `npm run check` typechecks the source, tests release compatibility, packs the library, and verifies an installed archive with CommonJS, ESM imports, and TypeScript consumers. See [CONTRIBUTING.md](CONTRIBUTING.md) for commands and release steps.
88
+
53
89
  ## License
54
90
 
55
91
  MIT © Contributors
@@ -1 +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"}
1
+ {"version":3,"file":"ruling-planets.d.ts","sourceRoot":"","sources":["../../../src/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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ruling-planets.js","sourceRoot":"","sources":["../../../engine/astro/ruling-planets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ruling-planets.js","sourceRoot":"","sources":["../../../src/engine/astro/ruling-planets.ts"],"names":[],"mappings":"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","sourcesContent":["export const PLANET_NAME_MAP: Record<string, string> = {\n \"1\": \"ดาวอาทิตย์\",\n \"2\": \"ดาวจันทร์\",\n \"3\": \"ดาวอังคาร\",\n \"4\": \"ดาวพุธ\",\n \"5\": \"ดาวพฤหัสบดี\",\n \"6\": \"ดาวศุกร์\",\n \"7\": \"ดาวเสาร์\",\n \"8\": \"ดาวราหู\",\n \"9\": \"ดาวเกตุ\",\n \"0\": \"ดาวมฤตยู\",\n};\n\nexport type RulingPlanetInfo = {\n numbers: string[];\n names: string[];\n};\n\nconst ASCENDANT_PATTERN = /ลั/;\n\nconst isAscendantToken = (value: unknown): value is string =>\n typeof value === \"string\" && ASCENDANT_PATTERN.test(value);\n\nconst THAI_TO_ARABIC_DIGIT_MAP: Record<string, string> = {\n \"๐\": \"0\",\n \"๑\": \"1\",\n \"๒\": \"2\",\n \"๓\": \"3\",\n \"๔\": \"4\",\n \"๕\": \"5\",\n \"๖\": \"6\",\n \"๗\": \"7\",\n \"๘\": \"8\",\n \"๙\": \"9\",\n};\n\nconst normalizeDigits = (value: string): string =>\n value.replace(/[๐-๙]/g, (digit) => THAI_TO_ARABIC_DIGIT_MAP[digit] ?? digit);\n\nconst extractAscendantEntry = (chart: unknown[]): { token: string; index: number } => {\n const index = chart.findIndex(isAscendantToken);\n\n if (index === -1) {\n throw new Error(\"Unable to locate ascendant information in chart\");\n }\n\n const token = chart[index];\n\n if (typeof token !== \"string\") {\n throw new Error(\"Ascendant token is not a string\");\n }\n\n return { token, index };\n};\n\nconst extractRulingNumbers = (token: string): string[] => {\n const normalized = normalizeDigits(token);\n const matches = normalized.match(/\\d/g) ?? [];\n const uniqueNumbers = Array.from(new Set(matches));\n\n if (uniqueNumbers.length === 0) {\n throw new Error(\"No ruling planets found in ascendant token\");\n }\n\n return uniqueNumbers;\n};\n\nexport const findRulingPlanets = (chart: unknown): RulingPlanetInfo => {\n if (!Array.isArray(chart)) {\n throw new Error(\"Chart must be an array\");\n }\n\n const { token: ascendantToken } = extractAscendantEntry(chart);\n\n const numbers = extractRulingNumbers(ascendantToken);\n const names = numbers\n .map((digit) => PLANET_NAME_MAP[digit])\n .filter((name): name is string => Boolean(name));\n\n if (names.length === 0) {\n throw new Error(\"Unable to map ruling planet numbers to names\");\n }\n\n return { numbers, names };\n};\n\nexport const formatRulingPlanets = ({ names, numbers }: RulingPlanetInfo) =>\n names.map((name, index) => `${name} (${numbers[index] ?? \"?\"})`).join(\" และ \");\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"astro-calculation.d.ts","sourceRoot":"","sources":["../../engine/astro-calculation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"astro-calculation.d.ts","sourceRoot":"","sources":["../../src/engine/astro-calculation.ts"],"names":[],"mappings":"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"}