vedic-calc 1.0.3
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.md +283 -0
- package/dist/astrology/charts.d.ts +104 -0
- package/dist/astrology/charts.d.ts.map +1 -0
- package/dist/astrology/charts.js +172 -0
- package/dist/astrology/constants.d.ts +142 -0
- package/dist/astrology/constants.d.ts.map +1 -0
- package/dist/astrology/constants.js +88 -0
- package/dist/astrology/planetaryPosition.d.ts +49 -0
- package/dist/astrology/planetaryPosition.d.ts.map +1 -0
- package/dist/astrology/planetaryPosition.js +69 -0
- package/dist/astrology/svgRenderer.d.ts +9 -0
- package/dist/astrology/svgRenderer.d.ts.map +1 -0
- package/dist/astrology/svgRenderer.js +232 -0
- package/dist/core/ayanamsa.d.ts +36 -0
- package/dist/core/ayanamsa.d.ts.map +1 -0
- package/dist/core/ayanamsa.js +66 -0
- package/dist/core/houses.d.ts +72 -0
- package/dist/core/houses.d.ts.map +1 -0
- package/dist/core/houses.js +153 -0
- package/dist/core/swisseph.d.ts +44 -0
- package/dist/core/swisseph.d.ts.map +1 -0
- package/dist/core/swisseph.js +126 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/utils/math.d.ts +21 -0
- package/dist/utils/math.d.ts.map +1 -0
- package/dist/utils/math.js +36 -0
- package/docs/api-reference.md +411 -0
- package/docs/charts.md +237 -0
- package/docs/examples.md +275 -0
- package/docs/getting-started.md +200 -0
- package/docs/index.md +137 -0
- package/ephe/README.md +26 -0
- package/ephe/seas_18.se1 +0 -0
- package/ephe/semo_18.se1 +0 -0
- package/ephe/sepl_18.se1 +0 -0
- package/package.json +56 -0
package/README.md
ADDED
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
# Vedic Calc - Vedic Astrology Chart SDK
|
|
2
|
+
|
|
3
|
+
<p align="center">
|
|
4
|
+
<a href="https://www.npmjs.com/package/kundali-charts"><img src="https://img.shields.io/npm/v/kundali-charts.svg" alt="npm version"></a>
|
|
5
|
+
<a href="https://www.npmjs.com/package/kundali-charts"><img src="https://img.shields.io/npm/dm/kundali-charts.svg" alt="npm downloads"></a>
|
|
6
|
+
<a href="https://github.com/jatingodnani/kundali-charts/blob/main/LICENSE"><img src="https://img.shields.io/npm/l/kundali-charts.svg" alt="MIT License"></a>
|
|
7
|
+
<a href="https://www.typescriptlang.org/"><img src="https://img.shields.io/badge/TypeScript-5.x-blue.svg" alt="TypeScript"></a>
|
|
8
|
+
</p>
|
|
9
|
+
|
|
10
|
+
> High-precision Vedic Astrology (Jyotish) chart generation library using Swiss Ephemeris. Generate Rasi (D-1), Navamsa (D-9) charts and beautiful SVG visualizations.
|
|
11
|
+
|
|
12
|
+
## Features
|
|
13
|
+
|
|
14
|
+
- **Rasi Chart (D-1)** - Complete birth chart with planetary positions
|
|
15
|
+
- **Navamsa Chart (D-9)** - Divisional chart for marriage & spiritual analysis
|
|
16
|
+
- **SVG Chart Rendering** - Beautiful North Indian chart style
|
|
17
|
+
- **High Precision** - Swiss Ephemeris for accurate astronomical calculations
|
|
18
|
+
- **Vedic Astrology** - Whole Sign houses, Lahiri Ayanamsa
|
|
19
|
+
- **Customizable** - Colors, symbols, layouts
|
|
20
|
+
- **TypeScript** - Full type definitions included
|
|
21
|
+
|
|
22
|
+
## Installation
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
npm install vedic-calc
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Quick Start
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
import { generateRasiChart, generateNorthIndianChartSVG } from 'kundali-charts';
|
|
32
|
+
|
|
33
|
+
// Generate birth chart
|
|
34
|
+
const chart = generateRasiChart(
|
|
35
|
+
new Date('1990-04-29T21:15:00+05:30'), // Date of birth
|
|
36
|
+
16.544893, // Latitude
|
|
37
|
+
81.521240, // Longitude
|
|
38
|
+
'Asia/Kolkata' // Timezone
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
// Generate SVG chart
|
|
42
|
+
const svg = generateNorthIndianChartSVG(chart, { showTable: true });
|
|
43
|
+
|
|
44
|
+
// Save to file or display
|
|
45
|
+
console.log(svg);
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## API Reference
|
|
49
|
+
|
|
50
|
+
### Chart Generation
|
|
51
|
+
|
|
52
|
+
#### `generateRasiChart(date, latitude, longitude, timezone?, nodeType?)`
|
|
53
|
+
|
|
54
|
+
Generates a complete Rasi (D-1) birth chart.
|
|
55
|
+
|
|
56
|
+
```typescript
|
|
57
|
+
const chart = generateRasiChart(
|
|
58
|
+
new Date('1990-04-29T21:15:00+05:30'), // Date
|
|
59
|
+
16.544893, // Latitude
|
|
60
|
+
81.521240, // Longitude
|
|
61
|
+
'Asia/Kolkata' // Timezone (optional, default: 'UTC')
|
|
62
|
+
);
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**Returns:**
|
|
66
|
+
```typescript
|
|
67
|
+
{
|
|
68
|
+
birthData: { date, latitude, longitude, timezone },
|
|
69
|
+
ascendant: { degree, sign, signName, nakshatra, nakshatraPada },
|
|
70
|
+
planets: [
|
|
71
|
+
{
|
|
72
|
+
planet: Planet, // 0=Sun, 1=Moon, 2=Mars, etc.
|
|
73
|
+
longitude: number,
|
|
74
|
+
sign: Sign, // 0-11
|
|
75
|
+
signName: string,
|
|
76
|
+
degreeInSign: number,
|
|
77
|
+
nakshatra: string,
|
|
78
|
+
nakshatraPada: number,
|
|
79
|
+
nakshatraLord: string,
|
|
80
|
+
house: number, // 1-12
|
|
81
|
+
isRetrograde: boolean
|
|
82
|
+
}
|
|
83
|
+
],
|
|
84
|
+
houses: [
|
|
85
|
+
{
|
|
86
|
+
number: number,
|
|
87
|
+
sign: Sign,
|
|
88
|
+
signName: string,
|
|
89
|
+
lord: string,
|
|
90
|
+
planets: Planet[],
|
|
91
|
+
cuspStart: number,
|
|
92
|
+
cuspEnd: number
|
|
93
|
+
}
|
|
94
|
+
],
|
|
95
|
+
ayanamsa: number
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
#### `generateNavamsaChart(rasiChart)`
|
|
100
|
+
|
|
101
|
+
Generates Navamsa (D-9) chart from Rasi chart.
|
|
102
|
+
|
|
103
|
+
```typescript
|
|
104
|
+
const navamsa = generateNavamsaChart(rasiChart);
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### SVG Chart Rendering
|
|
108
|
+
|
|
109
|
+
#### `generateNorthIndianChartSVG(chart, options?)`
|
|
110
|
+
|
|
111
|
+
Generates North Indian style chart (diamond grid layout).
|
|
112
|
+
|
|
113
|
+
```typescript
|
|
114
|
+
const svg = generateNorthIndianChartSVG(chart, {
|
|
115
|
+
showTable: true, // Show planet details table
|
|
116
|
+
layout: 'row', // 'row' or 'column'
|
|
117
|
+
title: 'My Kundali', // Chart title
|
|
118
|
+
width: 400, // Chart width
|
|
119
|
+
height: 300, // Chart height
|
|
120
|
+
showSignGlyphs: true, // Show zodiac symbols (♈♉♊) or numbers (1,2,3)
|
|
121
|
+
showSignNumbers: true, // Show sign numbers
|
|
122
|
+
showDegrees: true, // Show planet degrees
|
|
123
|
+
customConfig: {
|
|
124
|
+
colors: {
|
|
125
|
+
background: '#FFFFFF',
|
|
126
|
+
border: '#422762',
|
|
127
|
+
innerLines: '#422762',
|
|
128
|
+
signNumber: '#422762',
|
|
129
|
+
text: '#1A1A2E',
|
|
130
|
+
retrograde: '#D63031',
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
#### `generateSouthIndianChartSVG(chart, options?)`
|
|
137
|
+
|
|
138
|
+
Generates South Indian style chart (3x4 grid layout).
|
|
139
|
+
|
|
140
|
+
```typescript
|
|
141
|
+
const svg = generateSouthIndianChartSVG(chart, {
|
|
142
|
+
showTable: true,
|
|
143
|
+
showSignGlyphs: true,
|
|
144
|
+
cellWidth: 150,
|
|
145
|
+
cellHeight: 100,
|
|
146
|
+
// ... other options
|
|
147
|
+
});
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Available Themes
|
|
151
|
+
|
|
152
|
+
```typescript
|
|
153
|
+
import { PREBUILT_THEMES } from 'kundali-charts';
|
|
154
|
+
|
|
155
|
+
// Use predefined themes
|
|
156
|
+
const svg = generateNorthIndianChartSVG(chart, {
|
|
157
|
+
customConfig: {
|
|
158
|
+
colors: PREBUILT_THEMES.dark.colors,
|
|
159
|
+
// or
|
|
160
|
+
colors: PREBUILT_THEMES.ocean.colors,
|
|
161
|
+
// or
|
|
162
|
+
colors: PREBUILT_THEMES.forest.colors,
|
|
163
|
+
// or
|
|
164
|
+
colors: PREBUILT_THEMES.golden.colors,
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Constants
|
|
170
|
+
|
|
171
|
+
```typescript
|
|
172
|
+
import { Planet, Sign, Nakshatras } from 'kundali-charts';
|
|
173
|
+
|
|
174
|
+
// Planets
|
|
175
|
+
Planet.SUN // 0
|
|
176
|
+
Planet.MOON // 1
|
|
177
|
+
Planet.MARS // 2
|
|
178
|
+
Planet.MERCURY // 3
|
|
179
|
+
Planet.JUPITER // 4
|
|
180
|
+
Planet.VENUS // 5
|
|
181
|
+
Planet.SATURN // 6
|
|
182
|
+
Planet.RAHU // 7
|
|
183
|
+
Planet.KETU // 8
|
|
184
|
+
|
|
185
|
+
// Signs (0-11)
|
|
186
|
+
Sign.ARIES // 0
|
|
187
|
+
Sign.TAURUS // 1
|
|
188
|
+
Sign.GEMINI // 2
|
|
189
|
+
// ... etc
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
## Example: Complete Kundali with Chart
|
|
193
|
+
|
|
194
|
+
```typescript
|
|
195
|
+
import { generateRasiChart, generateNavamsaChart, generateNorthIndianChartSVG } from 'kundali-charts';
|
|
196
|
+
|
|
197
|
+
// Birth details
|
|
198
|
+
const date = new Date('1990-04-29T21:15:00+05:30');
|
|
199
|
+
const latitude = 16.544893;
|
|
200
|
+
const longitude = 81.521240;
|
|
201
|
+
const timezone = 'Asia/Kolkata';
|
|
202
|
+
|
|
203
|
+
// Generate charts
|
|
204
|
+
const rasi = generateRasiChart(date, latitude, longitude, timezone);
|
|
205
|
+
const navamsa = generateNavamsaChart(rasi);
|
|
206
|
+
|
|
207
|
+
// Get ascendant
|
|
208
|
+
console.log('Ascendant:', rasi.ascendant.signName);
|
|
209
|
+
|
|
210
|
+
// Get planets in each house
|
|
211
|
+
rasi.houses.forEach(house => {
|
|
212
|
+
console.log(`House ${house.number} (${house.signName}):`, house.planets);
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
// Generate SVG
|
|
216
|
+
const chartSVG = generateNorthIndianChartSVG(rasi, {
|
|
217
|
+
showTable: true,
|
|
218
|
+
title: 'My Birth Chart',
|
|
219
|
+
showSignGlyphs: false // Show numbers instead of symbols
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
// Use the SVG in your HTML
|
|
223
|
+
document.getElementById('chart')!.innerHTML = chartSVG;
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
## HTML Output Example
|
|
227
|
+
|
|
228
|
+
```html
|
|
229
|
+
<!DOCTYPE html>
|
|
230
|
+
<html>
|
|
231
|
+
<head>
|
|
232
|
+
<title>Kundali Chart</title>
|
|
233
|
+
<style>
|
|
234
|
+
body { display: flex; justify-content: center; padding: 20px; }
|
|
235
|
+
.chart { background: white; border-radius: 12px; box-shadow: 0 4px 20px rgba(0,0,0,0.15); }
|
|
236
|
+
</style>
|
|
237
|
+
</head>
|
|
238
|
+
<body>
|
|
239
|
+
<div class="chart">
|
|
240
|
+
<!-- SVG will be inserted here -->
|
|
241
|
+
<div id="chart"></div>
|
|
242
|
+
</div>
|
|
243
|
+
<script>
|
|
244
|
+
// Generate and insert chart
|
|
245
|
+
</script>
|
|
246
|
+
</body>
|
|
247
|
+
</html>
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
## API Summary
|
|
251
|
+
|
|
252
|
+
| Function | Description |
|
|
253
|
+
|----------|-------------|
|
|
254
|
+
| `generateRasiChart(date, lat, lon, tz)` | Generate Rasi (D-1) birth chart |
|
|
255
|
+
| `generateNavamsaChart(rasiChart)` | Generate Navamsa (D-9) chart |
|
|
256
|
+
| `generateNorthIndianChartSVG(chart, options)` | North Indian style SVG |
|
|
257
|
+
| `generateSouthIndianChartSVG(chart, options)` | South Indian style SVG |
|
|
258
|
+
| `calculateNavamsaSign(longitude)` | Calculate Navamsa sign for longitude |
|
|
259
|
+
| `getAyanamsa(jd, system)` | Get ayanamsa value |
|
|
260
|
+
| `calculateHouseCusps(jd, lat, lon, system)` | Calculate house cusps |
|
|
261
|
+
|
|
262
|
+
## Requirements
|
|
263
|
+
|
|
264
|
+
- Node.js >= 16.0.0
|
|
265
|
+
- npm or yarn
|
|
266
|
+
|
|
267
|
+
## Swiss Ephemeris
|
|
268
|
+
|
|
269
|
+
This library uses [Swiss Ephemeris](https://www.astro.com/swisseph/) for high-precision planetary calculations. The `ephe/` folder contains necessary ephemeris data files.
|
|
270
|
+
|
|
271
|
+
## License
|
|
272
|
+
|
|
273
|
+
MIT License - see [LICENSE](LICENSE) for details.
|
|
274
|
+
|
|
275
|
+
## Keywords
|
|
276
|
+
|
|
277
|
+
vedic astrology, jyotish, kundali, horoscope, rasi chart, navamsa, birth chart, swisseph, hindu astrology, indian astrology, planetary positions, houses, nakshatra, rashis
|
|
278
|
+
|
|
279
|
+
## Related
|
|
280
|
+
|
|
281
|
+
- [Swiss Ephemeris](https://www.astro.com/swisseph/) - Astronomical calculations
|
|
282
|
+
- [AstroSage](https://www.astro.com/) - Online astrology calculations reference
|
|
283
|
+
- [Vedic Rishi](https://www.vedicrishi.com/) - Vedic astrology reference
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { Planet, Sign } from './constants';
|
|
2
|
+
import { NodeType } from '../core/swisseph';
|
|
3
|
+
/**
|
|
4
|
+
* Complete data for a single planet in a chart
|
|
5
|
+
*/
|
|
6
|
+
export interface PlanetData {
|
|
7
|
+
planet: Planet;
|
|
8
|
+
longitude: number;
|
|
9
|
+
sign: Sign;
|
|
10
|
+
signName: string;
|
|
11
|
+
degreeInSign: number;
|
|
12
|
+
nakshatra: string;
|
|
13
|
+
nakshatraPada: number;
|
|
14
|
+
nakshatraLord: string;
|
|
15
|
+
house: number;
|
|
16
|
+
isRetrograde: boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Complete Rasi (D-1) Chart
|
|
20
|
+
*/
|
|
21
|
+
export interface RasiChart {
|
|
22
|
+
birthData: {
|
|
23
|
+
date: Date;
|
|
24
|
+
latitude: number;
|
|
25
|
+
longitude: number;
|
|
26
|
+
timezone: string;
|
|
27
|
+
};
|
|
28
|
+
ascendant: {
|
|
29
|
+
degree: number;
|
|
30
|
+
sign: Sign;
|
|
31
|
+
signName: string;
|
|
32
|
+
nakshatra: string;
|
|
33
|
+
nakshatraPada: number;
|
|
34
|
+
};
|
|
35
|
+
planets: PlanetData[];
|
|
36
|
+
houses: {
|
|
37
|
+
number: number;
|
|
38
|
+
sign: Sign;
|
|
39
|
+
signName: string;
|
|
40
|
+
lord: string;
|
|
41
|
+
planets: Planet[];
|
|
42
|
+
cuspStart: number;
|
|
43
|
+
cuspEnd: number;
|
|
44
|
+
}[];
|
|
45
|
+
ayanamsa: number;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Navamsa (D-9) Chart Data
|
|
49
|
+
*/
|
|
50
|
+
export interface NavamsaChart {
|
|
51
|
+
planets: {
|
|
52
|
+
planet: Planet;
|
|
53
|
+
navamsaSign: Sign;
|
|
54
|
+
navamsaSignName: string;
|
|
55
|
+
navamsaHouse: number;
|
|
56
|
+
longitude: number;
|
|
57
|
+
}[];
|
|
58
|
+
ascendantNavamsa: {
|
|
59
|
+
sign: Sign;
|
|
60
|
+
signName: string;
|
|
61
|
+
longitude: number;
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Calculates the Navamsa sign for a given longitude
|
|
66
|
+
* Navamsa divides each sign into 9 parts (3°20' each)
|
|
67
|
+
*
|
|
68
|
+
* @param longitude Sidereal longitude (0-360)
|
|
69
|
+
* @returns Navamsa sign (0-11)
|
|
70
|
+
*/
|
|
71
|
+
export declare function calculateNavamsaSign(longitude: number): Sign;
|
|
72
|
+
/**
|
|
73
|
+
* Generates a complete Rasi (D-1) Chart
|
|
74
|
+
*
|
|
75
|
+
* @param date Birth date and time
|
|
76
|
+
* @param latitude Birth latitude
|
|
77
|
+
* @param longitude Birth longitude
|
|
78
|
+
* @param timezone Timezone string (e.g., 'Asia/Kolkata')
|
|
79
|
+
* @returns Complete Rasi Chart
|
|
80
|
+
*/
|
|
81
|
+
export declare function generateRasiChart(date: Date, latitude: number, longitude: number, timezone?: string, nodeType?: NodeType): RasiChart;
|
|
82
|
+
/**
|
|
83
|
+
* Generates Navamsa (D-9) Chart from a Rasi Chart
|
|
84
|
+
*
|
|
85
|
+
* @param rasiChart The Rasi chart to derive Navamsa from
|
|
86
|
+
* @returns Navamsa Chart
|
|
87
|
+
*/
|
|
88
|
+
export declare function generateNavamsaChart(rasiChart: RasiChart): NavamsaChart;
|
|
89
|
+
/**
|
|
90
|
+
* Generates both Rasi and Navamsa charts
|
|
91
|
+
*
|
|
92
|
+
* @param date Birth date and time
|
|
93
|
+
* @param latitude Birth latitude
|
|
94
|
+
* @param longitude Birth longitude
|
|
95
|
+
* @param timezone Timezone string
|
|
96
|
+
* @returns Object containing both charts
|
|
97
|
+
*/
|
|
98
|
+
export declare function generateKundali(date: Date, latitude: number, longitude: number, timezone?: string, options?: {
|
|
99
|
+
nodeType?: NodeType;
|
|
100
|
+
}): {
|
|
101
|
+
rasi: RasiChart;
|
|
102
|
+
navamsa: NavamsaChart;
|
|
103
|
+
};
|
|
104
|
+
//# sourceMappingURL=charts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"charts.d.ts","sourceRoot":"","sources":["../../src/astrology/charts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAc,MAAM,aAAa,CAAC;AAGvD,OAAO,EAAuD,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAIjG;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACtB,SAAS,EAAE;QACP,IAAI,EAAE,IAAI,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,SAAS,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,IAAI,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,aAAa,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,MAAM,EAAE;QACJ,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,IAAI,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACnB,EAAE,CAAC;IACJ,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE;QACL,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,IAAI,CAAC;QAClB,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;KACrB,EAAE,CAAC;IACJ,gBAAgB,EAAE;QACd,IAAI,EAAE,IAAI,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;KACrB,CAAC;CACL;AAmBD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAoB5D;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC7B,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,QAAQ,GAAE,MAAc,EACxB,QAAQ,GAAE,QAA6B,GACxC,SAAS,CA+EX;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,SAAS,GAAG,YAAY,CAyBvE;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC3B,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,QAAQ,GAAE,MAAc,EACxB,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,QAAQ,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,CAK5C"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.calculateNavamsaSign = calculateNavamsaSign;
|
|
4
|
+
exports.generateRasiChart = generateRasiChart;
|
|
5
|
+
exports.generateNavamsaChart = generateNavamsaChart;
|
|
6
|
+
exports.generateKundali = generateKundali;
|
|
7
|
+
const planetaryPosition_1 = require("./planetaryPosition");
|
|
8
|
+
const houses_1 = require("../core/houses");
|
|
9
|
+
const swisseph_1 = require("../core/swisseph");
|
|
10
|
+
const ayanamsa_1 = require("../core/ayanamsa");
|
|
11
|
+
const math_1 = require("../utils/math");
|
|
12
|
+
/**
|
|
13
|
+
* Sign names for display
|
|
14
|
+
*/
|
|
15
|
+
const SIGN_NAMES = [
|
|
16
|
+
'Aries', 'Taurus', 'Gemini', 'Cancer', 'Leo', 'Virgo',
|
|
17
|
+
'Libra', 'Scorpio', 'Sagittarius', 'Capricorn', 'Aquarius', 'Pisces'
|
|
18
|
+
];
|
|
19
|
+
/**
|
|
20
|
+
* Nakshatra lords for Vimshottari Dasha
|
|
21
|
+
*/
|
|
22
|
+
const NAKSHATRA_LORDS = [
|
|
23
|
+
'Ketu', 'Venus', 'Sun', 'Moon', 'Mars', 'Rahu', 'Jupiter', 'Saturn', 'Mercury',
|
|
24
|
+
'Ketu', 'Venus', 'Sun', 'Moon', 'Mars', 'Rahu', 'Jupiter', 'Saturn', 'Mercury',
|
|
25
|
+
'Ketu', 'Venus', 'Sun', 'Moon', 'Mars', 'Rahu', 'Jupiter', 'Saturn', 'Mercury'
|
|
26
|
+
];
|
|
27
|
+
/**
|
|
28
|
+
* Calculates the Navamsa sign for a given longitude
|
|
29
|
+
* Navamsa divides each sign into 9 parts (3°20' each)
|
|
30
|
+
*
|
|
31
|
+
* @param longitude Sidereal longitude (0-360)
|
|
32
|
+
* @returns Navamsa sign (0-11)
|
|
33
|
+
*/
|
|
34
|
+
function calculateNavamsaSign(longitude) {
|
|
35
|
+
const normalized = (0, math_1.normalizeAngle)(longitude);
|
|
36
|
+
// Each sign has 9 navamsas of 3.333... degrees each
|
|
37
|
+
const navamsaSize = 30 / 9; // 3.333...
|
|
38
|
+
const sign = Math.floor(normalized / 30);
|
|
39
|
+
const degreeInSign = normalized % 30;
|
|
40
|
+
const navamsaInSign = Math.floor(degreeInSign / navamsaSize);
|
|
41
|
+
// Calculate starting navamsa based on sign element
|
|
42
|
+
// Fire signs (0,4,8) start from Aries (0)
|
|
43
|
+
// Earth signs (1,5,9) start from Capricorn (9)
|
|
44
|
+
// Air signs (2,6,10) start from Libra (6)
|
|
45
|
+
// Water signs (3,7,11) start from Cancer (3)
|
|
46
|
+
const element = sign % 4;
|
|
47
|
+
const startingNavamsa = [0, 9, 6, 3][element];
|
|
48
|
+
const navamsaSign = (startingNavamsa + navamsaInSign) % 12;
|
|
49
|
+
return navamsaSign;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Generates a complete Rasi (D-1) Chart
|
|
53
|
+
*
|
|
54
|
+
* @param date Birth date and time
|
|
55
|
+
* @param latitude Birth latitude
|
|
56
|
+
* @param longitude Birth longitude
|
|
57
|
+
* @param timezone Timezone string (e.g., 'Asia/Kolkata')
|
|
58
|
+
* @returns Complete Rasi Chart
|
|
59
|
+
*/
|
|
60
|
+
function generateRasiChart(date, latitude, longitude, timezone = 'UTC', nodeType = swisseph_1.NodeType.TRUE_NODE) {
|
|
61
|
+
// Step 1: Calculate Julian Day
|
|
62
|
+
const jd = (0, swisseph_1.getJulianDay)(date);
|
|
63
|
+
// Step 2: Get Ayanamsa for this date
|
|
64
|
+
const ayanamsa = (0, ayanamsa_1.getAyanamsa)(jd, ayanamsa_1.AyanamsaSystem.LAHIRI);
|
|
65
|
+
// Step 3: Get planetary positions (tropical)
|
|
66
|
+
const tropicalPositions = (0, swisseph_1.getPlanetaryPositions)(jd, nodeType);
|
|
67
|
+
// Step 4: Calculate house cusps (tropical) - only for Ascendant
|
|
68
|
+
const tropicalHouseCusps = (0, houses_1.calculateHouseCusps)(jd, latitude, longitude, houses_1.HouseSystem.WHOLE_SIGN);
|
|
69
|
+
// Step 5: Convert Ascendant to Sidereal
|
|
70
|
+
const siderealAscendant = (0, ayanamsa_1.tropicalToSidereal)(tropicalHouseCusps.ascendant, ayanamsa);
|
|
71
|
+
const ascendantSign = (0, planetaryPosition_1.getSign)(siderealAscendant);
|
|
72
|
+
const ascendantNakshatra = (0, planetaryPosition_1.getNakshatra)(siderealAscendant);
|
|
73
|
+
// Step 5b: Calculate SIDEREAL Whole Sign house cusps
|
|
74
|
+
// Astrosage and most Vedic software use Whole Sign houses
|
|
75
|
+
// Each house = one complete zodiac sign
|
|
76
|
+
const siderealHouseCusps = (0, houses_1.calculateWholeSignHouses)(siderealAscendant);
|
|
77
|
+
// Step 6: Convert each planet to Sidereal and build planet data
|
|
78
|
+
const planets = tropicalPositions.map((pos) => {
|
|
79
|
+
const siderealLongitude = (0, ayanamsa_1.tropicalToSidereal)(pos.longitude, ayanamsa);
|
|
80
|
+
const sign = (0, planetaryPosition_1.getSign)(siderealLongitude);
|
|
81
|
+
const nakshatra = (0, planetaryPosition_1.getNakshatra)(siderealLongitude);
|
|
82
|
+
const nakshatraIndex = Math.floor(siderealLongitude / (360 / 27));
|
|
83
|
+
return {
|
|
84
|
+
planet: pos.planet,
|
|
85
|
+
longitude: siderealLongitude,
|
|
86
|
+
sign: sign,
|
|
87
|
+
signName: SIGN_NAMES[sign],
|
|
88
|
+
degreeInSign: (0, planetaryPosition_1.getDegreeInSign)(siderealLongitude),
|
|
89
|
+
nakshatra: nakshatra,
|
|
90
|
+
nakshatraPada: (0, planetaryPosition_1.getNakshatraPada)(siderealLongitude),
|
|
91
|
+
nakshatraLord: NAKSHATRA_LORDS[nakshatraIndex],
|
|
92
|
+
house: (0, houses_1.getPlanetHouseWholeSign)(siderealLongitude, siderealAscendant),
|
|
93
|
+
isRetrograde: pos.isRetrograde,
|
|
94
|
+
};
|
|
95
|
+
});
|
|
96
|
+
// Step 7: Build houses data
|
|
97
|
+
const houses = Array.from({ length: 12 }, (_, i) => {
|
|
98
|
+
const houseNumber = i + 1;
|
|
99
|
+
const signIndex = (ascendantSign + i) % 12;
|
|
100
|
+
const planetsInHouse = planets.filter(p => p.house === houseNumber).map(p => p.planet);
|
|
101
|
+
return {
|
|
102
|
+
number: houseNumber,
|
|
103
|
+
sign: signIndex,
|
|
104
|
+
signName: SIGN_NAMES[signIndex],
|
|
105
|
+
lord: (0, houses_1.getHouseLord)(signIndex * 30),
|
|
106
|
+
planets: planetsInHouse,
|
|
107
|
+
cuspStart: siderealHouseCusps[i],
|
|
108
|
+
cuspEnd: siderealHouseCusps[(i + 1) % 12],
|
|
109
|
+
};
|
|
110
|
+
});
|
|
111
|
+
return {
|
|
112
|
+
birthData: {
|
|
113
|
+
date,
|
|
114
|
+
latitude,
|
|
115
|
+
longitude,
|
|
116
|
+
timezone,
|
|
117
|
+
},
|
|
118
|
+
ascendant: {
|
|
119
|
+
degree: siderealAscendant,
|
|
120
|
+
sign: ascendantSign,
|
|
121
|
+
signName: SIGN_NAMES[ascendantSign],
|
|
122
|
+
nakshatra: ascendantNakshatra,
|
|
123
|
+
nakshatraPada: (0, planetaryPosition_1.getNakshatraPada)(siderealAscendant),
|
|
124
|
+
},
|
|
125
|
+
planets,
|
|
126
|
+
houses,
|
|
127
|
+
ayanamsa,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Generates Navamsa (D-9) Chart from a Rasi Chart
|
|
132
|
+
*
|
|
133
|
+
* @param rasiChart The Rasi chart to derive Navamsa from
|
|
134
|
+
* @returns Navamsa Chart
|
|
135
|
+
*/
|
|
136
|
+
function generateNavamsaChart(rasiChart) {
|
|
137
|
+
const ascendantNavamsaSign = calculateNavamsaSign(rasiChart.ascendant.degree);
|
|
138
|
+
const planets = rasiChart.planets.map(p => {
|
|
139
|
+
const navamsaSign = calculateNavamsaSign(p.longitude);
|
|
140
|
+
// Calculate house in navamsa (1-12) from navamsa ascendant
|
|
141
|
+
const navamsaHouse = ((navamsaSign - ascendantNavamsaSign + 12) % 12) + 1;
|
|
142
|
+
return {
|
|
143
|
+
planet: p.planet,
|
|
144
|
+
navamsaSign,
|
|
145
|
+
navamsaSignName: SIGN_NAMES[navamsaSign],
|
|
146
|
+
navamsaHouse,
|
|
147
|
+
longitude: p.longitude,
|
|
148
|
+
};
|
|
149
|
+
});
|
|
150
|
+
return {
|
|
151
|
+
planets,
|
|
152
|
+
ascendantNavamsa: {
|
|
153
|
+
sign: ascendantNavamsaSign,
|
|
154
|
+
signName: SIGN_NAMES[ascendantNavamsaSign],
|
|
155
|
+
longitude: rasiChart.ascendant.degree,
|
|
156
|
+
},
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Generates both Rasi and Navamsa charts
|
|
161
|
+
*
|
|
162
|
+
* @param date Birth date and time
|
|
163
|
+
* @param latitude Birth latitude
|
|
164
|
+
* @param longitude Birth longitude
|
|
165
|
+
* @param timezone Timezone string
|
|
166
|
+
* @returns Object containing both charts
|
|
167
|
+
*/
|
|
168
|
+
function generateKundali(date, latitude, longitude, timezone = 'UTC', options) {
|
|
169
|
+
const rasi = generateRasiChart(date, latitude, longitude, timezone, options?.nodeType);
|
|
170
|
+
const navamsa = generateNavamsaChart(rasi);
|
|
171
|
+
return { rasi, navamsa };
|
|
172
|
+
}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zodiac Signs (Rashis) in Vedic Astrology
|
|
3
|
+
* Each sign occupies 30 degrees of the 360-degree zodiac
|
|
4
|
+
*/
|
|
5
|
+
export declare enum Sign {
|
|
6
|
+
ARIES = 0,// Mesha
|
|
7
|
+
TAURUS = 1,// Vrishabha
|
|
8
|
+
GEMINI = 2,// Mithuna
|
|
9
|
+
CANCER = 3,// Karka
|
|
10
|
+
LEO = 4,// Simha
|
|
11
|
+
VIRGO = 5,// Kanya
|
|
12
|
+
LIBRA = 6,// Tula
|
|
13
|
+
SCORPIO = 7,// Vrishchika
|
|
14
|
+
SAGITTARIUS = 8,// Dhanu
|
|
15
|
+
CAPRICORN = 9,// Makara
|
|
16
|
+
AQUARIUS = 10,// Kumbha
|
|
17
|
+
PISCES = 11
|
|
18
|
+
}
|
|
19
|
+
export declare const SignNames: {
|
|
20
|
+
0: {
|
|
21
|
+
en: string;
|
|
22
|
+
sa: string;
|
|
23
|
+
};
|
|
24
|
+
1: {
|
|
25
|
+
en: string;
|
|
26
|
+
sa: string;
|
|
27
|
+
};
|
|
28
|
+
2: {
|
|
29
|
+
en: string;
|
|
30
|
+
sa: string;
|
|
31
|
+
};
|
|
32
|
+
3: {
|
|
33
|
+
en: string;
|
|
34
|
+
sa: string;
|
|
35
|
+
};
|
|
36
|
+
4: {
|
|
37
|
+
en: string;
|
|
38
|
+
sa: string;
|
|
39
|
+
};
|
|
40
|
+
5: {
|
|
41
|
+
en: string;
|
|
42
|
+
sa: string;
|
|
43
|
+
};
|
|
44
|
+
6: {
|
|
45
|
+
en: string;
|
|
46
|
+
sa: string;
|
|
47
|
+
};
|
|
48
|
+
7: {
|
|
49
|
+
en: string;
|
|
50
|
+
sa: string;
|
|
51
|
+
};
|
|
52
|
+
8: {
|
|
53
|
+
en: string;
|
|
54
|
+
sa: string;
|
|
55
|
+
};
|
|
56
|
+
9: {
|
|
57
|
+
en: string;
|
|
58
|
+
sa: string;
|
|
59
|
+
};
|
|
60
|
+
10: {
|
|
61
|
+
en: string;
|
|
62
|
+
sa: string;
|
|
63
|
+
};
|
|
64
|
+
11: {
|
|
65
|
+
en: string;
|
|
66
|
+
sa: string;
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Nakshatras (Lunar Mansions)
|
|
71
|
+
* 27 divisions of the zodiac, each 13°20' (13.333...)
|
|
72
|
+
*/
|
|
73
|
+
export declare const Nakshatras: readonly ["Ashwini", "Bharani", "Krittika", "Rohini", "Mrigashira", "Ardra", "Punarvasu", "Pushya", "Ashlesha", "Magha", "Purva Phalguni", "Uttara Phalguni", "Hasta", "Chitra", "Swati", "Vishakha", "Anuradha", "Jyeshtha", "Mula", "Purva Ashadha", "Uttara Ashadha", "Shravana", "Dhanishta", "Shatabhisha", "Purva Bhadrapada", "Uttara Bhadrapada", "Revati"];
|
|
74
|
+
export type NakshatraName = typeof Nakshatras[number];
|
|
75
|
+
/**
|
|
76
|
+
* Planets in Vedic Astrology
|
|
77
|
+
* Sun to Ketu (9 grahas)
|
|
78
|
+
*/
|
|
79
|
+
export declare enum Planet {
|
|
80
|
+
SUN = 0,// Surya
|
|
81
|
+
MOON = 1,// Chandra
|
|
82
|
+
MARS = 2,// Mangal
|
|
83
|
+
MERCURY = 3,// Budh
|
|
84
|
+
JUPITER = 4,// Guru
|
|
85
|
+
VENUS = 5,// Shukra
|
|
86
|
+
SATURN = 6,// Shani
|
|
87
|
+
RAHU = 7,// North Node
|
|
88
|
+
KETU = 8
|
|
89
|
+
}
|
|
90
|
+
export declare const PlanetNames: {
|
|
91
|
+
0: {
|
|
92
|
+
en: string;
|
|
93
|
+
sa: string;
|
|
94
|
+
};
|
|
95
|
+
1: {
|
|
96
|
+
en: string;
|
|
97
|
+
sa: string;
|
|
98
|
+
};
|
|
99
|
+
2: {
|
|
100
|
+
en: string;
|
|
101
|
+
sa: string;
|
|
102
|
+
};
|
|
103
|
+
3: {
|
|
104
|
+
en: string;
|
|
105
|
+
sa: string;
|
|
106
|
+
};
|
|
107
|
+
4: {
|
|
108
|
+
en: string;
|
|
109
|
+
sa: string;
|
|
110
|
+
};
|
|
111
|
+
5: {
|
|
112
|
+
en: string;
|
|
113
|
+
sa: string;
|
|
114
|
+
};
|
|
115
|
+
6: {
|
|
116
|
+
en: string;
|
|
117
|
+
sa: string;
|
|
118
|
+
};
|
|
119
|
+
7: {
|
|
120
|
+
en: string;
|
|
121
|
+
sa: string;
|
|
122
|
+
};
|
|
123
|
+
8: {
|
|
124
|
+
en: string;
|
|
125
|
+
sa: string;
|
|
126
|
+
};
|
|
127
|
+
};
|
|
128
|
+
/**
|
|
129
|
+
* Swiss Ephemeris Planet IDs mapping to our Planet enum
|
|
130
|
+
*/
|
|
131
|
+
export declare const SwissEphPlanetIds: {
|
|
132
|
+
0: number;
|
|
133
|
+
1: number;
|
|
134
|
+
3: number;
|
|
135
|
+
5: number;
|
|
136
|
+
2: number;
|
|
137
|
+
4: number;
|
|
138
|
+
6: number;
|
|
139
|
+
7: number;
|
|
140
|
+
8: number;
|
|
141
|
+
};
|
|
142
|
+
//# sourceMappingURL=constants.d.ts.map
|