astro-ascendant 0.1.0
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 +661 -0
- package/README.md +185 -0
- package/dist/astro-params/index.d.ts +3 -0
- package/dist/astro-params/index.d.ts.map +1 -0
- package/dist/astro-params/index.js +3 -0
- package/dist/astro-params/index.js.map +1 -0
- package/dist/astro-params/model.d.ts +11 -0
- package/dist/astro-params/model.d.ts.map +1 -0
- package/dist/astro-params/model.js +63 -0
- package/dist/astro-params/model.js.map +1 -0
- package/dist/astro-params/service.d.ts +12 -0
- package/dist/astro-params/service.d.ts.map +1 -0
- package/dist/astro-params/service.js +13 -0
- package/dist/astro-params/service.js.map +1 -0
- package/dist/chart/bhava/calculate.d.ts +6 -0
- package/dist/chart/bhava/calculate.d.ts.map +1 -0
- package/dist/chart/bhava/calculate.js +89 -0
- package/dist/chart/bhava/calculate.js.map +1 -0
- package/dist/chart/bhava/helper.d.ts +6 -0
- package/dist/chart/bhava/helper.d.ts.map +1 -0
- package/dist/chart/bhava/helper.js +22 -0
- package/dist/chart/bhava/helper.js.map +1 -0
- package/dist/chart/bhava/index.d.ts +2 -0
- package/dist/chart/bhava/index.d.ts.map +1 -0
- package/dist/chart/bhava/index.js +2 -0
- package/dist/chart/bhava/index.js.map +1 -0
- package/dist/chart/charts.d.ts +5 -0
- package/dist/chart/charts.d.ts.map +1 -0
- package/dist/chart/charts.js +74 -0
- package/dist/chart/charts.js.map +1 -0
- package/dist/chart/divisional-mapping/calculate.d.ts +6 -0
- package/dist/chart/divisional-mapping/calculate.d.ts.map +1 -0
- package/dist/chart/divisional-mapping/calculate.js +24 -0
- package/dist/chart/divisional-mapping/calculate.js.map +1 -0
- package/dist/chart/divisional-mapping/error.d.ts +9 -0
- package/dist/chart/divisional-mapping/error.d.ts.map +1 -0
- package/dist/chart/divisional-mapping/error.js +7 -0
- package/dist/chart/divisional-mapping/error.js.map +1 -0
- package/dist/chart/divisional-mapping/helper.d.ts +11 -0
- package/dist/chart/divisional-mapping/helper.d.ts.map +1 -0
- package/dist/chart/divisional-mapping/helper.js +92 -0
- package/dist/chart/divisional-mapping/helper.js.map +1 -0
- package/dist/chart/divisional-mapping/index.d.ts +4 -0
- package/dist/chart/divisional-mapping/index.d.ts.map +1 -0
- package/dist/chart/divisional-mapping/index.js +4 -0
- package/dist/chart/divisional-mapping/index.js.map +1 -0
- package/dist/chart/divisional-mapping/model.d.ts +16 -0
- package/dist/chart/divisional-mapping/model.d.ts.map +1 -0
- package/dist/chart/divisional-mapping/model.js +2 -0
- package/dist/chart/divisional-mapping/model.js.map +1 -0
- package/dist/chart/error.d.ts +21 -0
- package/dist/chart/error.d.ts.map +1 -0
- package/dist/chart/error.js +18 -0
- package/dist/chart/error.js.map +1 -0
- package/dist/chart/generate.d.ts +7 -0
- package/dist/chart/generate.d.ts.map +1 -0
- package/dist/chart/generate.js +62 -0
- package/dist/chart/generate.js.map +1 -0
- package/dist/chart/helper.d.ts +4 -0
- package/dist/chart/helper.d.ts.map +1 -0
- package/dist/chart/helper.js +21 -0
- package/dist/chart/helper.js.map +1 -0
- package/dist/chart/index.d.ts +5 -0
- package/dist/chart/index.d.ts.map +1 -0
- package/dist/chart/index.js +5 -0
- package/dist/chart/index.js.map +1 -0
- package/dist/chart/internal/constants.d.ts +210 -0
- package/dist/chart/internal/constants.d.ts.map +1 -0
- package/dist/chart/internal/constants.js +461 -0
- package/dist/chart/internal/constants.js.map +1 -0
- package/dist/chart/internal/position.d.ts +5 -0
- package/dist/chart/internal/position.d.ts.map +1 -0
- package/dist/chart/internal/position.js +14 -0
- package/dist/chart/internal/position.js.map +1 -0
- package/dist/chart/model.d.ts +153 -0
- package/dist/chart/model.d.ts.map +1 -0
- package/dist/chart/model.js +124 -0
- package/dist/chart/model.js.map +1 -0
- package/dist/chart/placements.d.ts +10 -0
- package/dist/chart/placements.d.ts.map +1 -0
- package/dist/chart/placements.js +41 -0
- package/dist/chart/placements.js.map +1 -0
- package/dist/dasha/calculate.d.ts +15 -0
- package/dist/dasha/calculate.d.ts.map +1 -0
- package/dist/dasha/calculate.js +106 -0
- package/dist/dasha/calculate.js.map +1 -0
- package/dist/dasha/error.d.ts +9 -0
- package/dist/dasha/error.d.ts.map +1 -0
- package/dist/dasha/error.js +7 -0
- package/dist/dasha/error.js.map +1 -0
- package/dist/dasha/index.d.ts +5 -0
- package/dist/dasha/index.d.ts.map +1 -0
- package/dist/dasha/index.js +5 -0
- package/dist/dasha/index.js.map +1 -0
- package/dist/dasha/model.d.ts +56 -0
- package/dist/dasha/model.d.ts.map +1 -0
- package/dist/dasha/model.js +20 -0
- package/dist/dasha/model.js.map +1 -0
- package/dist/dasha/query.d.ts +31 -0
- package/dist/dasha/query.d.ts.map +1 -0
- package/dist/dasha/query.js +19 -0
- package/dist/dasha/query.js.map +1 -0
- package/dist/ephemeris/error.d.ts +9 -0
- package/dist/ephemeris/error.d.ts.map +1 -0
- package/dist/ephemeris/error.js +7 -0
- package/dist/ephemeris/error.js.map +1 -0
- package/dist/ephemeris/index.d.ts +4 -0
- package/dist/ephemeris/index.d.ts.map +1 -0
- package/dist/ephemeris/index.js +4 -0
- package/dist/ephemeris/index.js.map +1 -0
- package/dist/ephemeris/model.d.ts +28 -0
- package/dist/ephemeris/model.d.ts.map +1 -0
- package/dist/ephemeris/model.js +14 -0
- package/dist/ephemeris/model.js.map +1 -0
- package/dist/ephemeris/service.d.ts +14 -0
- package/dist/ephemeris/service.d.ts.map +1 -0
- package/dist/ephemeris/service.js +8 -0
- package/dist/ephemeris/service.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/jaimini/argala/calculate.d.ts +28 -0
- package/dist/jaimini/argala/calculate.d.ts.map +1 -0
- package/dist/jaimini/argala/calculate.js +56 -0
- package/dist/jaimini/argala/calculate.js.map +1 -0
- package/dist/jaimini/argala/helper.d.ts +8 -0
- package/dist/jaimini/argala/helper.d.ts.map +1 -0
- package/dist/jaimini/argala/helper.js +12 -0
- package/dist/jaimini/argala/helper.js.map +1 -0
- package/dist/jaimini/argala/index.d.ts +3 -0
- package/dist/jaimini/argala/index.d.ts.map +1 -0
- package/dist/jaimini/argala/index.js +3 -0
- package/dist/jaimini/argala/index.js.map +1 -0
- package/dist/jaimini/argala/model.d.ts +96 -0
- package/dist/jaimini/argala/model.d.ts.map +1 -0
- package/dist/jaimini/argala/model.js +38 -0
- package/dist/jaimini/argala/model.js.map +1 -0
- package/dist/jaimini/arudha-pada/calculate.d.ts +16 -0
- package/dist/jaimini/arudha-pada/calculate.d.ts.map +1 -0
- package/dist/jaimini/arudha-pada/calculate.js +36 -0
- package/dist/jaimini/arudha-pada/calculate.js.map +1 -0
- package/dist/jaimini/arudha-pada/helper.d.ts +6 -0
- package/dist/jaimini/arudha-pada/helper.d.ts.map +1 -0
- package/dist/jaimini/arudha-pada/helper.js +8 -0
- package/dist/jaimini/arudha-pada/helper.js.map +1 -0
- package/dist/jaimini/arudha-pada/index.d.ts +3 -0
- package/dist/jaimini/arudha-pada/index.d.ts.map +1 -0
- package/dist/jaimini/arudha-pada/index.js +3 -0
- package/dist/jaimini/arudha-pada/index.js.map +1 -0
- package/dist/jaimini/arudha-pada/model.d.ts +31 -0
- package/dist/jaimini/arudha-pada/model.d.ts.map +1 -0
- package/dist/jaimini/arudha-pada/model.js +22 -0
- package/dist/jaimini/arudha-pada/model.js.map +1 -0
- package/dist/jaimini/chara-karakas/calculate.d.ts +21 -0
- package/dist/jaimini/chara-karakas/calculate.d.ts.map +1 -0
- package/dist/jaimini/chara-karakas/calculate.js +85 -0
- package/dist/jaimini/chara-karakas/calculate.js.map +1 -0
- package/dist/jaimini/chara-karakas/helper.d.ts +15 -0
- package/dist/jaimini/chara-karakas/helper.d.ts.map +1 -0
- package/dist/jaimini/chara-karakas/helper.js +50 -0
- package/dist/jaimini/chara-karakas/helper.js.map +1 -0
- package/dist/jaimini/chara-karakas/index.d.ts +3 -0
- package/dist/jaimini/chara-karakas/index.d.ts.map +1 -0
- package/dist/jaimini/chara-karakas/index.js +3 -0
- package/dist/jaimini/chara-karakas/index.js.map +1 -0
- package/dist/jaimini/chara-karakas/model.d.ts +60 -0
- package/dist/jaimini/chara-karakas/model.d.ts.map +1 -0
- package/dist/jaimini/chara-karakas/model.js +45 -0
- package/dist/jaimini/chara-karakas/model.js.map +1 -0
- package/dist/jaimini/karakamsha/calculate.d.ts +18 -0
- package/dist/jaimini/karakamsha/calculate.d.ts.map +1 -0
- package/dist/jaimini/karakamsha/calculate.js +46 -0
- package/dist/jaimini/karakamsha/calculate.js.map +1 -0
- package/dist/jaimini/karakamsha/helper.d.ts +3 -0
- package/dist/jaimini/karakamsha/helper.d.ts.map +1 -0
- package/dist/jaimini/karakamsha/helper.js +8 -0
- package/dist/jaimini/karakamsha/helper.js.map +1 -0
- package/dist/jaimini/karakamsha/index.d.ts +3 -0
- package/dist/jaimini/karakamsha/index.d.ts.map +1 -0
- package/dist/jaimini/karakamsha/index.js +3 -0
- package/dist/jaimini/karakamsha/index.js.map +1 -0
- package/dist/jaimini/karakamsha/model.d.ts +42 -0
- package/dist/jaimini/karakamsha/model.d.ts.map +1 -0
- package/dist/jaimini/karakamsha/model.js +28 -0
- package/dist/jaimini/karakamsha/model.js.map +1 -0
- package/dist/jaimini/rashi-drishti/calculate.d.ts +11 -0
- package/dist/jaimini/rashi-drishti/calculate.d.ts.map +1 -0
- package/dist/jaimini/rashi-drishti/calculate.js +16 -0
- package/dist/jaimini/rashi-drishti/calculate.js.map +1 -0
- package/dist/jaimini/rashi-drishti/helper.d.ts +3 -0
- package/dist/jaimini/rashi-drishti/helper.d.ts.map +1 -0
- package/dist/jaimini/rashi-drishti/helper.js +41 -0
- package/dist/jaimini/rashi-drishti/helper.js.map +1 -0
- package/dist/jaimini/rashi-drishti/index.d.ts +3 -0
- package/dist/jaimini/rashi-drishti/index.d.ts.map +1 -0
- package/dist/jaimini/rashi-drishti/index.js +3 -0
- package/dist/jaimini/rashi-drishti/index.js.map +1 -0
- package/dist/jaimini/rashi-drishti/model.d.ts +20 -0
- package/dist/jaimini/rashi-drishti/model.d.ts.map +1 -0
- package/dist/jaimini/rashi-drishti/model.js +13 -0
- package/dist/jaimini/rashi-drishti/model.js.map +1 -0
- package/dist/jaimini/upapada/calculate.d.ts +15 -0
- package/dist/jaimini/upapada/calculate.d.ts.map +1 -0
- package/dist/jaimini/upapada/calculate.js +19 -0
- package/dist/jaimini/upapada/calculate.js.map +1 -0
- package/dist/jaimini/upapada/helper.d.ts +18 -0
- package/dist/jaimini/upapada/helper.d.ts.map +1 -0
- package/dist/jaimini/upapada/helper.js +10 -0
- package/dist/jaimini/upapada/helper.js.map +1 -0
- package/dist/jaimini/upapada/index.d.ts +3 -0
- package/dist/jaimini/upapada/index.d.ts.map +1 -0
- package/dist/jaimini/upapada/index.js +3 -0
- package/dist/jaimini/upapada/index.js.map +1 -0
- package/dist/jaimini/upapada/model.d.ts +31 -0
- package/dist/jaimini/upapada/model.d.ts.map +1 -0
- package/dist/jaimini/upapada/model.js +22 -0
- package/dist/jaimini/upapada/model.js.map +1 -0
- package/dist/sav/calculate.d.ts +282 -0
- package/dist/sav/calculate.d.ts.map +1 -0
- package/dist/sav/calculate.js +128 -0
- package/dist/sav/calculate.js.map +1 -0
- package/dist/sav/constants.d.ts +108 -0
- package/dist/sav/constants.d.ts.map +1 -0
- package/dist/sav/constants.js +131 -0
- package/dist/sav/constants.js.map +1 -0
- package/dist/sav/error.d.ts +9 -0
- package/dist/sav/error.d.ts.map +1 -0
- package/dist/sav/error.js +7 -0
- package/dist/sav/error.js.map +1 -0
- package/dist/sav/index.d.ts +4 -0
- package/dist/sav/index.d.ts.map +1 -0
- package/dist/sav/index.js +4 -0
- package/dist/sav/index.js.map +1 -0
- package/dist/sav/model.d.ts +58 -0
- package/dist/sav/model.d.ts.map +1 -0
- package/dist/sav/model.js +40 -0
- package/dist/sav/model.js.map +1 -0
- package/dist/swisseph/calculate.d.ts +19 -0
- package/dist/swisseph/calculate.d.ts.map +1 -0
- package/dist/swisseph/calculate.js +54 -0
- package/dist/swisseph/calculate.js.map +1 -0
- package/dist/swisseph/helper.d.ts +14 -0
- package/dist/swisseph/helper.d.ts.map +1 -0
- package/dist/swisseph/helper.js +43 -0
- package/dist/swisseph/helper.js.map +1 -0
- package/dist/swisseph/index.d.ts +2 -0
- package/dist/swisseph/index.d.ts.map +1 -0
- package/dist/swisseph/index.js +2 -0
- package/dist/swisseph/index.js.map +1 -0
- package/dist/swisseph/model.d.ts +7 -0
- package/dist/swisseph/model.d.ts.map +1 -0
- package/dist/swisseph/model.js +70 -0
- package/dist/swisseph/model.js.map +1 -0
- package/dist/swisseph/service.d.ts +5 -0
- package/dist/swisseph/service.d.ts.map +1 -0
- package/dist/swisseph/service.js +10 -0
- package/dist/swisseph/service.js.map +1 -0
- package/dist/yoga/calculate.d.ts +9 -0
- package/dist/yoga/calculate.d.ts.map +1 -0
- package/dist/yoga/calculate.js +48 -0
- package/dist/yoga/calculate.js.map +1 -0
- package/dist/yoga/catalog.d.ts +7 -0
- package/dist/yoga/catalog.d.ts.map +1 -0
- package/dist/yoga/catalog.js +129 -0
- package/dist/yoga/catalog.js.map +1 -0
- package/dist/yoga/definitions/house-patterns.d.ts +42 -0
- package/dist/yoga/definitions/house-patterns.d.ts.map +1 -0
- package/dist/yoga/definitions/house-patterns.js +73 -0
- package/dist/yoga/definitions/house-patterns.js.map +1 -0
- package/dist/yoga/definitions/moon-relative.d.ts +94 -0
- package/dist/yoga/definitions/moon-relative.d.ts.map +1 -0
- package/dist/yoga/definitions/moon-relative.js +123 -0
- package/dist/yoga/definitions/moon-relative.js.map +1 -0
- package/dist/yoga/error.d.ts +38 -0
- package/dist/yoga/error.d.ts.map +1 -0
- package/dist/yoga/error.js +37 -0
- package/dist/yoga/error.js.map +1 -0
- package/dist/yoga/evaluate.d.ts +36 -0
- package/dist/yoga/evaluate.d.ts.map +1 -0
- package/dist/yoga/evaluate.js +173 -0
- package/dist/yoga/evaluate.js.map +1 -0
- package/dist/yoga/format.d.ts +3 -0
- package/dist/yoga/format.d.ts.map +1 -0
- package/dist/yoga/format.js +5 -0
- package/dist/yoga/format.js.map +1 -0
- package/dist/yoga/index.d.ts +6 -0
- package/dist/yoga/index.d.ts.map +1 -0
- package/dist/yoga/index.js +6 -0
- package/dist/yoga/index.js.map +1 -0
- package/dist/yoga/internal.d.ts +274 -0
- package/dist/yoga/internal.d.ts.map +1 -0
- package/dist/yoga/internal.js +4 -0
- package/dist/yoga/internal.js.map +1 -0
- package/dist/yoga/model.d.ts +107 -0
- package/dist/yoga/model.d.ts.map +1 -0
- package/dist/yoga/model.js +66 -0
- package/dist/yoga/model.js.map +1 -0
- package/dist/yoga/provenance.d.ts +3 -0
- package/dist/yoga/provenance.d.ts.map +1 -0
- package/dist/yoga/provenance.js +5 -0
- package/dist/yoga/provenance.js.map +1 -0
- package/package.json +122 -0
package/README.md
ADDED
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
# astro-ascendant
|
|
2
|
+
|
|
3
|
+
`astro-ascendant` is an Effect-first TypeScript library for Vedic astrology calculations. It calculates sidereal Placements, D1 and divisional Charts, Vimshottari Dasha timelines, and classical Parashari Ashtakavarga.
|
|
4
|
+
|
|
5
|
+
The library calculates planetary positions once for a Located Moment. Chart, Dasha, and SAV modules then share those Placements without repeating ephemeris work.
|
|
6
|
+
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
- **Shared Placements**: sidereal longitudes, motion states, nakshatras, and pada
|
|
10
|
+
- **Charts**: D1, 15 divisional Charts, and a configured Bhava chart from one calculation
|
|
11
|
+
- **Methodologies**: 39 predefined ayanamsas and 13 house systems
|
|
12
|
+
- **Vimshottari Dasha**: Mahadasha and Antardasha timelines with date queries
|
|
13
|
+
- **Ashtakavarga**: BAV, SAV, reduced BAV, and Shodhya Pinda
|
|
14
|
+
- **Yogas**: classical Yoga catalog with structured evidence and bounded concurrency
|
|
15
|
+
- **Effect integration**: named effects, typed context, layers, schemas, and domain errors
|
|
16
|
+
- **Runtime-neutral core**: use the bundled Node/Bun adapter or provide another Ephemeris adapter
|
|
17
|
+
|
|
18
|
+
## Installation
|
|
19
|
+
|
|
20
|
+
Install the library with its Effect peer dependency. Add the Swiss Ephemeris adapter when you run calculations in Node.js or Bun.
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
npm install astro-ascendant effect @swisseph/node
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
The package uses ES modules and ships TypeScript declarations.
|
|
27
|
+
|
|
28
|
+
## Calculate a chart
|
|
29
|
+
|
|
30
|
+
Create a Located Moment, provide the runtime layers once, and request the divisions you need. D1 is always included as the first Chart.
|
|
31
|
+
|
|
32
|
+
```typescript
|
|
33
|
+
import { BunRuntime } from "@effect/platform-bun";
|
|
34
|
+
import { AstroParams, Chart } from "astro-ascendant";
|
|
35
|
+
import * as Swisseph from "astro-ascendant/swisseph";
|
|
36
|
+
import { Console, DateTime, Effect, Layer } from "effect";
|
|
37
|
+
|
|
38
|
+
const moment = Chart.Moment.make({
|
|
39
|
+
date: DateTime.makeUnsafe("2000-01-01T12:00:00.000Z"),
|
|
40
|
+
});
|
|
41
|
+
const input = Chart.LocatedMoment.make({
|
|
42
|
+
moment,
|
|
43
|
+
latitude: 12.9716,
|
|
44
|
+
longitude: 77.5946,
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
const program = Chart.generate(input, [9, 10]);
|
|
48
|
+
const runtimeLayer = Layer.merge(AstroParams.DefaultAstroParams, Swisseph.SwissephLayer);
|
|
49
|
+
|
|
50
|
+
BunRuntime.runMain(program.pipe(Effect.provide(runtimeLayer)));
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
`calculation.placements` contains the shared source longitudes. `calculation.charts` contains D1, D9, and D10 in deterministic order. `calculation.bhava` contains the twelve cusp-defined houses and all eight house angles. `calculation.astroParams` records the resolved methodology used for the result.
|
|
54
|
+
|
|
55
|
+
## Derive Dasha and Ashtakavarga
|
|
56
|
+
|
|
57
|
+
Pass the shared Placements to the Dasha and SAV modules. Both calculations stay in process and do not call the Ephemeris adapter again.
|
|
58
|
+
|
|
59
|
+
```typescript
|
|
60
|
+
import { Dasha, SAV } from "astro-ascendant";
|
|
61
|
+
|
|
62
|
+
const derivedProgram = Effect.gen(function* () {
|
|
63
|
+
const timeline = yield* Dasha.calculate(moment, calculation.placements);
|
|
64
|
+
const current = yield* Dasha.at(timeline);
|
|
65
|
+
const ashtakavarga = yield* SAV.calculate(calculation.placements);
|
|
66
|
+
|
|
67
|
+
return { timeline, current, ashtakavarga };
|
|
68
|
+
});
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
`Dasha.at` queries the active Mahadasha and Antardasha with half-open UTC intervals. The SAV result contains these fields:
|
|
72
|
+
|
|
73
|
+
- `bhinna`: BAV tables for the 7 classical planets and Lagna
|
|
74
|
+
- `sarva`: the 12 SAV scores, excluding Lagna BAV
|
|
75
|
+
- `reduced`: Trikona and Ekadhipatya reduced planetary BAV tables
|
|
76
|
+
- `shodhya_pinda`: Rashi, Graha, and total Shodhya Pinda by planet
|
|
77
|
+
- `totals`: classical BAV checksums and the SAV total of 337
|
|
78
|
+
|
|
79
|
+
## Evaluate Yogas
|
|
80
|
+
|
|
81
|
+
Evaluate the built-in Yoga rule set against an existing Chart calculation. The module preflights the required divisions, then runs the definitions with bounded concurrency and returns structured evidence per definition.
|
|
82
|
+
|
|
83
|
+
```typescript
|
|
84
|
+
import { Yoga } from "astro-ascendant";
|
|
85
|
+
|
|
86
|
+
const yogaProgram = Effect.gen(function* () {
|
|
87
|
+
const evaluation = yield* Yoga.evaluateAll(calculation);
|
|
88
|
+
|
|
89
|
+
for (const { yoga: descriptor, present } of evaluation.results) {
|
|
90
|
+
if (present) yield* Console.log(descriptor.name);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return yield* Yoga.evaluateSelected(calculation, [
|
|
94
|
+
Yoga.YogaId.make("gajakesari"),
|
|
95
|
+
Yoga.YogaId.make("sunapha"),
|
|
96
|
+
]);
|
|
97
|
+
});
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
`Yoga.catalog` lists every definition's descriptor without running any calculation. Unknown, duplicate, or empty selections and missing Chart divisions fail through the typed error channel before definitions start. Each result carries a `YogaEvidence` tree that `Yoga.formatEvidence` renders as text.
|
|
101
|
+
|
|
102
|
+
## Configure calculation parameters
|
|
103
|
+
|
|
104
|
+
`AstroParams.DefaultAstroParams` uses Lahiri ayanamsa and Whole Sign houses. Provide another layer for a different supported methodology.
|
|
105
|
+
|
|
106
|
+
```typescript
|
|
107
|
+
const paramsLayer = AstroParams.layer({
|
|
108
|
+
ayanamsa: "Raman",
|
|
109
|
+
houseSystem: "Placidus",
|
|
110
|
+
});
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
The Chart module produces sign-based D1 and divisional Charts, so their houses remain Whole Sign. The configured `houseSystem` changes only `calculation.bhava`; the shared Placements and sign-based Charts retain their own semantics.
|
|
114
|
+
|
|
115
|
+
### Supported ayanamsas
|
|
116
|
+
|
|
117
|
+
The stable public ayanamsa set follows the predefined Swiss Ephemeris identifiers:
|
|
118
|
+
|
|
119
|
+
`FaganBradley`, `Lahiri`, `DeLuce`, `Raman`, `Ushashashi`, `Krishnamurti`, `DjwhalKhul`, `Yukteshwar`, `JNBhasin`, `BabylKugler1`, `BabylKugler2`, `BabylKugler3`, `BabylHuber`, `BabylEtPSC`, `Aldebaran15Tau`, `Hipparchos`, `Sassanian`, `GalacticCenter0Sag`, `J2000`, `J1900`, `B1950`, `SuryaSiddhanta`, `SuryaSiddhantaMeanSun`, `Aryabhata`, `AryabhataMeanSun`, `SSRevati`, `SSCitra`, `TrueCitra`, `TrueRevati`, `TruePushya`, `GalacticCenterGilBrand`, `GalacticEquatorIAU1958`, `GalacticEquator`, `GalacticEquatorMidMula`, `Skydram`, `TrueMula`, `DhruvaGalCenterMulaWilhelm`, `Aryabhata522`, and `BabylBritton`.
|
|
120
|
+
|
|
121
|
+
`UserDefined` is not supported because it requires custom epoch and offset parameters that are outside the public AstroParams contract.
|
|
122
|
+
|
|
123
|
+
### Supported house systems
|
|
124
|
+
|
|
125
|
+
The supported house systems are `Placidus`, `Koch`, `Porphyrius`, `Regiomontanus`, `Campanus`, `Equal`, `VehlowEqual`, `WholeSign`, `Meridian`, `Azimuthal`, `PolichPage`, `Alcabitus`, and `Morinus`.
|
|
126
|
+
|
|
127
|
+
Some systems, including Placidus and Koch, cannot be calculated at certain polar latitudes. These cases fail through the typed Effect error channel; the adapter does not silently return a different house system.
|
|
128
|
+
|
|
129
|
+
## Supported divisions
|
|
130
|
+
|
|
131
|
+
The Chart module supports these divisions:
|
|
132
|
+
|
|
133
|
+
`D1`, `D2`, `D3`, `D4`, `D7`, `D9`, `D10`, `D12`, `D16`, `D20`, `D24`, `D27`, `D30`, `D40`, `D45`, and `D60`.
|
|
134
|
+
|
|
135
|
+
Duplicate requests are calculated once. The returned collection always begins with D1 and orders the remaining divisions numerically.
|
|
136
|
+
|
|
137
|
+
## Package exports
|
|
138
|
+
|
|
139
|
+
Import namespaces from the package root or use focused entry points:
|
|
140
|
+
|
|
141
|
+
| Import | Purpose |
|
|
142
|
+
| ------------------------------------------ | ------------------------------------------------------------------ |
|
|
143
|
+
| `astro-ascendant` | `AstroParams`, `Chart`, `Dasha`, `Ephemeris`, and `SAV` namespaces |
|
|
144
|
+
| `astro-ascendant/chart` | Chart models, schemas, errors, generation, and projection |
|
|
145
|
+
| `astro-ascendant/dasha` | Vimshottari Dasha models, calculation, and UTC lookup |
|
|
146
|
+
| `astro-ascendant/sav` | Ashtakavarga models, errors, and calculation |
|
|
147
|
+
| `astro-ascendant/yoga` | Yoga models, rule set, errors, evaluation, and evidence formatting |
|
|
148
|
+
| `astro-ascendant/astro-params` | Calculation parameter models and layers |
|
|
149
|
+
| `astro-ascendant/ephemeris` | Runtime-neutral ephemeris contract and models |
|
|
150
|
+
| `astro-ascendant/swisseph` | Swiss Ephemeris adapter for Node.js and Bun |
|
|
151
|
+
| `astro-ascendant/chart/divisional-mapping` | Focused divisional mapping functions |
|
|
152
|
+
|
|
153
|
+
## Examples
|
|
154
|
+
|
|
155
|
+
The executable examples read `MOMENT_DATE`, `LATITUDE`, and `LONGITUDE` from the environment:
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
MOMENT_DATE=2000-01-01T12:00:00.000Z \
|
|
159
|
+
LATITUDE=12.9716 \
|
|
160
|
+
LONGITUDE=77.5946 \
|
|
161
|
+
bun run examples/chart.ts
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
Replace `chart.ts` with `dasha.ts`, `sav.ts`, `yoga.ts`, or `jaimini.ts` to print the
|
|
165
|
+
corresponding tables.
|
|
166
|
+
The Jaimini example composes Chara Karakas, Rashi Drishti, Karakamsha, Arudha Pada,
|
|
167
|
+
Upapada, and Argala through their separately named operations.
|
|
168
|
+
|
|
169
|
+
## Development
|
|
170
|
+
|
|
171
|
+
Install dependencies and run the complete verification suite:
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
bun install
|
|
175
|
+
make check
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
Use `make help` to list the available development commands.
|
|
179
|
+
|
|
180
|
+
Run the non-gating Yoga benchmark with `bun run benchmark:yoga`; see
|
|
181
|
+
[benchmarks/README.md](benchmarks/README.md) for methodology and recent numbers.
|
|
182
|
+
|
|
183
|
+
## License
|
|
184
|
+
|
|
185
|
+
`astro-ascendant` is available under the [GNU Affero General Public License v3.0 or later](LICENSE).
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/astro-params/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/astro-params/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
export declare const Ayanamsa: Schema.Literals<readonly ["FaganBradley", "Lahiri", "DeLuce", "Raman", "Ushashashi", "Krishnamurti", "DjwhalKhul", "Yukteshwar", "JNBhasin", "BabylKugler1", "BabylKugler2", "BabylKugler3", "BabylHuber", "BabylEtPSC", "Aldebaran15Tau", "Hipparchos", "Sassanian", "GalacticCenter0Sag", "J2000", "J1900", "B1950", "SuryaSiddhanta", "SuryaSiddhantaMeanSun", "Aryabhata", "AryabhataMeanSun", "SSRevati", "SSCitra", "TrueCitra", "TrueRevati", "TruePushya", "GalacticCenterGilBrand", "GalacticEquatorIAU1958", "GalacticEquator", "GalacticEquatorMidMula", "Skydram", "TrueMula", "DhruvaGalCenterMulaWilhelm", "Aryabhata522", "BabylBritton"]>;
|
|
3
|
+
export declare const HouseSystem: Schema.Literals<readonly ["Placidus", "Koch", "Porphyrius", "Regiomontanus", "Campanus", "Equal", "VehlowEqual", "WholeSign", "Meridian", "Azimuthal", "PolichPage", "Alcabitus", "Morinus"]>;
|
|
4
|
+
declare const Options_base: Schema.Class<Options, Schema.Struct<{
|
|
5
|
+
readonly ayanamsa: Schema.Literals<readonly ["FaganBradley", "Lahiri", "DeLuce", "Raman", "Ushashashi", "Krishnamurti", "DjwhalKhul", "Yukteshwar", "JNBhasin", "BabylKugler1", "BabylKugler2", "BabylKugler3", "BabylHuber", "BabylEtPSC", "Aldebaran15Tau", "Hipparchos", "Sassanian", "GalacticCenter0Sag", "J2000", "J1900", "B1950", "SuryaSiddhanta", "SuryaSiddhantaMeanSun", "Aryabhata", "AryabhataMeanSun", "SSRevati", "SSCitra", "TrueCitra", "TrueRevati", "TruePushya", "GalacticCenterGilBrand", "GalacticEquatorIAU1958", "GalacticEquator", "GalacticEquatorMidMula", "Skydram", "TrueMula", "DhruvaGalCenterMulaWilhelm", "Aryabhata522", "BabylBritton"]>;
|
|
6
|
+
readonly houseSystem: Schema.Literals<readonly ["Placidus", "Koch", "Porphyrius", "Regiomontanus", "Campanus", "Equal", "VehlowEqual", "WholeSign", "Meridian", "Azimuthal", "PolichPage", "Alcabitus", "Morinus"]>;
|
|
7
|
+
}>, {}>;
|
|
8
|
+
export declare class Options extends Options_base {
|
|
9
|
+
}
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/astro-params/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,eAAO,MAAM,QAAQ,2nBAwCnB,CAAC;AAEH,eAAO,MAAM,WAAW,+LActB,CAAC;;;;;AAEH,qBAAa,OAAQ,SAAQ,YAG3B;CAAG"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
export const Ayanamsa = Schema.Literals([
|
|
3
|
+
"FaganBradley",
|
|
4
|
+
"Lahiri",
|
|
5
|
+
"DeLuce",
|
|
6
|
+
"Raman",
|
|
7
|
+
"Ushashashi",
|
|
8
|
+
"Krishnamurti",
|
|
9
|
+
"DjwhalKhul",
|
|
10
|
+
"Yukteshwar",
|
|
11
|
+
"JNBhasin",
|
|
12
|
+
"BabylKugler1",
|
|
13
|
+
"BabylKugler2",
|
|
14
|
+
"BabylKugler3",
|
|
15
|
+
"BabylHuber",
|
|
16
|
+
"BabylEtPSC",
|
|
17
|
+
"Aldebaran15Tau",
|
|
18
|
+
"Hipparchos",
|
|
19
|
+
"Sassanian",
|
|
20
|
+
"GalacticCenter0Sag",
|
|
21
|
+
"J2000",
|
|
22
|
+
"J1900",
|
|
23
|
+
"B1950",
|
|
24
|
+
"SuryaSiddhanta",
|
|
25
|
+
"SuryaSiddhantaMeanSun",
|
|
26
|
+
"Aryabhata",
|
|
27
|
+
"AryabhataMeanSun",
|
|
28
|
+
"SSRevati",
|
|
29
|
+
"SSCitra",
|
|
30
|
+
"TrueCitra",
|
|
31
|
+
"TrueRevati",
|
|
32
|
+
"TruePushya",
|
|
33
|
+
"GalacticCenterGilBrand",
|
|
34
|
+
"GalacticEquatorIAU1958",
|
|
35
|
+
"GalacticEquator",
|
|
36
|
+
"GalacticEquatorMidMula",
|
|
37
|
+
"Skydram",
|
|
38
|
+
"TrueMula",
|
|
39
|
+
"DhruvaGalCenterMulaWilhelm",
|
|
40
|
+
"Aryabhata522",
|
|
41
|
+
"BabylBritton",
|
|
42
|
+
]);
|
|
43
|
+
export const HouseSystem = Schema.Literals([
|
|
44
|
+
"Placidus",
|
|
45
|
+
"Koch",
|
|
46
|
+
"Porphyrius",
|
|
47
|
+
"Regiomontanus",
|
|
48
|
+
"Campanus",
|
|
49
|
+
"Equal",
|
|
50
|
+
"VehlowEqual",
|
|
51
|
+
"WholeSign",
|
|
52
|
+
"Meridian",
|
|
53
|
+
"Azimuthal",
|
|
54
|
+
"PolichPage",
|
|
55
|
+
"Alcabitus",
|
|
56
|
+
"Morinus",
|
|
57
|
+
]);
|
|
58
|
+
export class Options extends Schema.Class("AstroParams")({
|
|
59
|
+
ayanamsa: Ayanamsa,
|
|
60
|
+
houseSystem: HouseSystem,
|
|
61
|
+
}) {
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/astro-params/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACtC,cAAc;IACd,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,YAAY;IACZ,cAAc;IACd,YAAY;IACZ,YAAY;IACZ,UAAU;IACV,cAAc;IACd,cAAc;IACd,cAAc;IACd,YAAY;IACZ,YAAY;IACZ,gBAAgB;IAChB,YAAY;IACZ,WAAW;IACX,oBAAoB;IACpB,OAAO;IACP,OAAO;IACP,OAAO;IACP,gBAAgB;IAChB,uBAAuB;IACvB,WAAW;IACX,kBAAkB;IAClB,UAAU;IACV,SAAS;IACT,WAAW;IACX,YAAY;IACZ,YAAY;IACZ,wBAAwB;IACxB,wBAAwB;IACxB,iBAAiB;IACjB,wBAAwB;IACxB,SAAS;IACT,UAAU;IACV,4BAA4B;IAC5B,cAAc;IACd,cAAc;CACf,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC;IACzC,UAAU;IACV,MAAM;IACN,YAAY;IACZ,eAAe;IACf,UAAU;IACV,OAAO;IACP,aAAa;IACb,WAAW;IACX,UAAU;IACV,WAAW;IACX,YAAY;IACZ,WAAW;IACX,SAAS;CACV,CAAC,CAAC;AAEH,MAAM,OAAO,OAAQ,SAAQ,MAAM,CAAC,KAAK,CAAU,aAAa,CAAC,CAAC;IAChE,QAAQ,EAAE,QAAQ;IAClB,WAAW,EAAE,WAAW;CACzB,CAAC;CAAG"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Context, Layer } from "effect";
|
|
2
|
+
import { Ayanamsa, HouseSystem, type Options } from "./model.js";
|
|
3
|
+
declare const Service_base: Context.ServiceClass<Service, "astro-ascendant/astro-params/service", {
|
|
4
|
+
readonly ayanamsa: typeof Ayanamsa.Type;
|
|
5
|
+
readonly houseSystem: typeof HouseSystem.Type;
|
|
6
|
+
}>;
|
|
7
|
+
declare class Service extends Service_base {
|
|
8
|
+
}
|
|
9
|
+
export declare function layer(options: Options): Layer.Layer<Service, never, never>;
|
|
10
|
+
declare const defaultLayer: Layer.Layer<Service, never, never>;
|
|
11
|
+
export { Service as AstroParams, defaultLayer as DefaultAstroParams };
|
|
12
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/astro-params/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;;uBAK1C,OAAO,QAAQ,CAAC,IAAI;0BACjB,OAAO,WAAW,CAAC,IAAI;;AAJjD,cAAM,OAAQ,SAAQ,YAMqB;CAAG;AAE9C,wBAAgB,KAAK,CAAC,OAAO,EAAE,OAAO,sCAErC;AAED,QAAA,MAAM,YAAY,oCAGhB,CAAC;AAEH,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,YAAY,IAAI,kBAAkB,EAAE,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Context, Layer } from "effect";
|
|
2
|
+
import { Ayanamsa, HouseSystem } from "./model.js";
|
|
3
|
+
class Service extends Context.Service()("astro-ascendant/astro-params/service") {
|
|
4
|
+
}
|
|
5
|
+
export function layer(options) {
|
|
6
|
+
return Layer.succeed(Service, Service.of(options));
|
|
7
|
+
}
|
|
8
|
+
const defaultLayer = layer({
|
|
9
|
+
ayanamsa: "Lahiri",
|
|
10
|
+
houseSystem: "WholeSign",
|
|
11
|
+
});
|
|
12
|
+
export { Service as AstroParams, defaultLayer as DefaultAstroParams };
|
|
13
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/astro-params/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAgB,MAAM,YAAY,CAAC;AAEjE,MAAM,OAAQ,SAAQ,OAAO,CAAC,OAAO,EAMlC,CAAC,sCAAsC,CAAC;CAAG;AAE9C,MAAM,UAAU,KAAK,CAAC,OAAgB;IACpC,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,YAAY,GAAG,KAAK,CAAC;IACzB,QAAQ,EAAE,QAAQ;IAClB,WAAW,EAAE,WAAW;CACzB,CAAC,CAAC;AAEH,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,YAAY,IAAI,kBAAkB,EAAE,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import type { HouseData } from "../../ephemeris/model.js";
|
|
3
|
+
import { ChartCalculationError } from "../error.js";
|
|
4
|
+
import { BhavaChart, type Chart } from "../model.js";
|
|
5
|
+
export declare const bhavaFromHouseData: (houses: HouseData, d1: Chart) => Effect.Effect<BhavaChart, ChartCalculationError, never>;
|
|
6
|
+
//# sourceMappingURL=calculate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calculate.d.ts","sourceRoot":"","sources":["../../../src/chart/bhava/calculate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAkB,MAAM,QAAQ,CAAC;AAEhD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAEL,UAAU,EAIV,KAAK,KAAK,EAEX,MAAM,aAAa,CAAC;AAKrB,eAAO,MAAM,kBAAkB,2FAoG7B,CAAC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { Effect, Record, Schema } from "effect";
|
|
2
|
+
import { ChartCalculationError } from "../error.js";
|
|
3
|
+
import { BhavaAngles, BhavaChart, BhavaHouse, BhavaHouses, CircleAngle, Longitude, } from "../model.js";
|
|
4
|
+
import { distributePlanets, forwardDistance, normalizeAngle } from "./helper.js";
|
|
5
|
+
const HOUSE_NUMBERS = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
|
|
6
|
+
export const bhavaFromHouseData = Effect.fn("Chart.Bhava.fromHouseData")(function* (houses, d1) {
|
|
7
|
+
const rawCusps = houses.cusps.slice(1, 13);
|
|
8
|
+
const rawAngles = [
|
|
9
|
+
houses.ascendant,
|
|
10
|
+
houses.mc,
|
|
11
|
+
houses.armc,
|
|
12
|
+
houses.vertex,
|
|
13
|
+
houses.equatorialAscendant,
|
|
14
|
+
houses.coAscendant1,
|
|
15
|
+
houses.coAscendant2,
|
|
16
|
+
houses.polarAscendant,
|
|
17
|
+
];
|
|
18
|
+
if (rawCusps.length !== HOUSE_NUMBERS.length ||
|
|
19
|
+
rawCusps.some((cusp) => !Number.isFinite(cusp)) ||
|
|
20
|
+
rawAngles.some((angle) => !Number.isFinite(angle))) {
|
|
21
|
+
return yield* ChartCalculationError.make({
|
|
22
|
+
stage: "mapping",
|
|
23
|
+
message: "Could not calculate Bhava chart",
|
|
24
|
+
cause: houses,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
const cusps = rawCusps.map((cusp) => normalizeAngle(cusp));
|
|
28
|
+
const spans = cusps.map((cusp, index) => {
|
|
29
|
+
const nextCusp = cusps[(index + 1) % cusps.length];
|
|
30
|
+
return nextCusp === undefined ? Number.NaN : forwardDistance(cusp, nextCusp);
|
|
31
|
+
});
|
|
32
|
+
const fullCircle = spans.reduce((total, span) => total + span, 0);
|
|
33
|
+
if (spans.some((span) => span === 0) || Math.abs(fullCircle - 360) > 1e-7) {
|
|
34
|
+
return yield* ChartCalculationError.make({
|
|
35
|
+
stage: "mapping",
|
|
36
|
+
message: "Could not calculate Bhava chart",
|
|
37
|
+
cause: houses.cusps,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
const planets = Record.values(d1.houses).flatMap((house) => house.planets);
|
|
41
|
+
const lagna = d1.houses[1].lagna;
|
|
42
|
+
if (lagna === null) {
|
|
43
|
+
return yield* ChartCalculationError.make({
|
|
44
|
+
stage: "mapping",
|
|
45
|
+
message: "Could not calculate Bhava chart",
|
|
46
|
+
cause: d1,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
const planetsByHouse = distributePlanets(planets, cusps, spans);
|
|
50
|
+
const bhavaHouseEntries = [];
|
|
51
|
+
for (const [index, houseNumber] of HOUSE_NUMBERS.entries()) {
|
|
52
|
+
const cusp = cusps[index];
|
|
53
|
+
const housePlanets = planetsByHouse[index];
|
|
54
|
+
if (cusp === undefined || housePlanets === undefined) {
|
|
55
|
+
return yield* ChartCalculationError.make({
|
|
56
|
+
stage: "mapping",
|
|
57
|
+
message: "Could not calculate Bhava chart",
|
|
58
|
+
cause: houses.cusps,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
bhavaHouseEntries.push([
|
|
62
|
+
String(houseNumber),
|
|
63
|
+
BhavaHouse.make({
|
|
64
|
+
cusp: Longitude.make(cusp),
|
|
65
|
+
planets: housePlanets,
|
|
66
|
+
lagna: index === 0 ? lagna : null,
|
|
67
|
+
}),
|
|
68
|
+
]);
|
|
69
|
+
}
|
|
70
|
+
const bhavaHouses = yield* Schema.decodeUnknownEffect(BhavaHouses)(Record.fromEntries(bhavaHouseEntries)).pipe(Effect.mapError((cause) => ChartCalculationError.make({
|
|
71
|
+
stage: "mapping",
|
|
72
|
+
message: "Could not calculate Bhava chart",
|
|
73
|
+
cause,
|
|
74
|
+
})));
|
|
75
|
+
return BhavaChart.make({
|
|
76
|
+
houses: bhavaHouses,
|
|
77
|
+
angles: BhavaAngles.make({
|
|
78
|
+
ascendant: CircleAngle.make(normalizeAngle(houses.ascendant)),
|
|
79
|
+
mc: CircleAngle.make(normalizeAngle(houses.mc)),
|
|
80
|
+
armc: CircleAngle.make(normalizeAngle(houses.armc)),
|
|
81
|
+
vertex: CircleAngle.make(normalizeAngle(houses.vertex)),
|
|
82
|
+
equatorialAscendant: CircleAngle.make(normalizeAngle(houses.equatorialAscendant)),
|
|
83
|
+
coAscendant1: CircleAngle.make(normalizeAngle(houses.coAscendant1)),
|
|
84
|
+
coAscendant2: CircleAngle.make(normalizeAngle(houses.coAscendant2)),
|
|
85
|
+
polarAscendant: CircleAngle.make(normalizeAngle(houses.polarAscendant)),
|
|
86
|
+
}),
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
//# sourceMappingURL=calculate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calculate.js","sourceRoot":"","sources":["../../../src/chart/bhava/calculate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Planet } from "../model.js";
|
|
2
|
+
export declare function normalizeAngle(angle: number): number;
|
|
3
|
+
export declare const forwardDistance: ((to: number) => (from: number) => number) & ((from: number, to: number) => number);
|
|
4
|
+
export declare const houseFor: ((cusps: readonly number[], spans: readonly number[]) => (longitude: number) => number) & ((longitude: number, cusps: readonly number[], spans: readonly number[]) => number);
|
|
5
|
+
export declare const distributePlanets: ((cusps: readonly number[], spans: readonly number[]) => (planets: readonly Planet[]) => readonly (readonly Planet[])[]) & ((planets: readonly Planet[], cusps: readonly number[], spans: readonly number[]) => readonly (readonly Planet[])[]);
|
|
6
|
+
//# sourceMappingURL=helper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helper.d.ts","sourceRoot":"","sources":["../../../src/chart/bhava/helper.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,eAAO,MAAM,eAAe,QACrB,MAAM,KAAK,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,YACjC,MAAM,MAAM,MAAM,KAAK,MAAM,CACO,CAAC;AAE9C,eAAO,MAAM,QAAQ,WACX,SAAS,MAAM,EAAE,SAAS,SAAS,MAAM,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,iBACzE,MAAM,SAAS,SAAS,MAAM,EAAE,SAAS,SAAS,MAAM,EAAE,KAAK,MAAM,CAMlF,CAAC;AAEF,eAAO,MAAM,iBAAiB,WAEnB,SAAS,MAAM,EAAE,SACjB,SAAS,MAAM,EAAE,KACrB,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,KAAK,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,eAExD,SAAS,MAAM,EAAE,SACnB,SAAS,MAAM,EAAE,SACjB,SAAS,MAAM,EAAE,KACrB,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAcnC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Function } from "effect";
|
|
2
|
+
export function normalizeAngle(angle) {
|
|
3
|
+
return ((angle % 360) + 360) % 360;
|
|
4
|
+
}
|
|
5
|
+
export const forwardDistance = Function.dual(2, (from, to) => normalizeAngle(to - from));
|
|
6
|
+
export const houseFor = Function.dual(3, (longitude, cusps, spans) => cusps.findIndex((cusp, index) => {
|
|
7
|
+
const span = spans[index];
|
|
8
|
+
return span !== undefined && forwardDistance(cusp, longitude) < span;
|
|
9
|
+
}));
|
|
10
|
+
export const distributePlanets = Function.dual(3, (planets, cusps, spans) => {
|
|
11
|
+
const planetsByHouse = Array.from({ length: 12 }, () => []);
|
|
12
|
+
for (const planet of planets) {
|
|
13
|
+
const houseIndex = houseFor(planet.longitude, cusps, spans);
|
|
14
|
+
const housePlanets = planetsByHouse[houseIndex];
|
|
15
|
+
if (housePlanets === undefined) {
|
|
16
|
+
throw new Error("Could not calculate Bhava chart");
|
|
17
|
+
}
|
|
18
|
+
housePlanets.push(planet);
|
|
19
|
+
}
|
|
20
|
+
return planetsByHouse;
|
|
21
|
+
});
|
|
22
|
+
//# sourceMappingURL=helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helper.js","sourceRoot":"","sources":["../../../src/chart/bhava/helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAIlC,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,OAAO,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,QAAQ,CAAC,IAAI,CAG1C,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;AAE9C,MAAM,CAAC,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAGnC,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAC/B,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;IAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1B,OAAO,IAAI,KAAK,SAAS,IAAI,eAAe,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC;AACvE,CAAC,CAAC,CACH,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAQ,CAAC,IAAI,CAU5C,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;IAC7B,MAAM,cAAc,GAAe,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IAExE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAC5D,MAAM,YAAY,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrD,CAAC;QACD,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/chart/bhava/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/chart/bhava/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import { ChartCalculationError } from "./error.js";
|
|
3
|
+
import { Chart, type Placements } from "./model.js";
|
|
4
|
+
export declare const project: (placements: Placements, divisions?: readonly (1 | 2 | 3 | 4 | 7 | 9 | 10 | 12 | 16 | 20 | 24 | 27 | 30 | 40 | 45 | 60)[] | undefined) => Effect.Effect<[Chart, ...Chart[]], ChartCalculationError, never>;
|
|
5
|
+
//# sourceMappingURL=charts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"charts.d.ts","sourceRoot":"","sources":["../../src/chart/charts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAiC,MAAM,QAAQ,CAAC;AAGtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAGnD,OAAO,EACL,KAAK,EAKL,KAAK,UAAU,EAIhB,MAAM,YAAY,CAAC;AA4FpB,eAAO,MAAM,OAAO,4MAmBnB,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { Array, Effect, Order, pipe, Record as Struct } from "effect";
|
|
2
|
+
import { getDivisionalTarget } from "./divisional-mapping/calculate.js";
|
|
3
|
+
import { ChartCalculationError } from "./error.js";
|
|
4
|
+
import { inSignStatus } from "./helper.js";
|
|
5
|
+
import { SIGN_LORDS } from "./internal/constants.js";
|
|
6
|
+
import { Chart, House, Houses, Lagna, Planet, Rashis, Sign, } from "./model.js";
|
|
7
|
+
function chartFromMappedPlacements({ division, lagna, planets, }) {
|
|
8
|
+
const lagnaSignIndex = Rashis.literals.indexOf(lagna.sign.name);
|
|
9
|
+
const houses = Struct.fromEntries(Array.range(0, 11).map((index) => {
|
|
10
|
+
const house = (index + 1);
|
|
11
|
+
const houseSign = Array.getUnsafe(Rashis.literals, (lagnaSignIndex + index) % 12);
|
|
12
|
+
return [
|
|
13
|
+
String(house),
|
|
14
|
+
House.make({
|
|
15
|
+
sign: houseSign,
|
|
16
|
+
planets: planets.filter((planet) => planet.sign.name === houseSign),
|
|
17
|
+
lagna: house === 1 ? lagna : null,
|
|
18
|
+
}),
|
|
19
|
+
];
|
|
20
|
+
}));
|
|
21
|
+
return Chart.make({
|
|
22
|
+
provenance: {
|
|
23
|
+
method: "ascendant-divisional-mapping",
|
|
24
|
+
version: "1",
|
|
25
|
+
},
|
|
26
|
+
division,
|
|
27
|
+
houses,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
const chartFromPlacements = Effect.fn("astro-ascendant/chart/chartFromPlacements")(function* (placements, division) {
|
|
31
|
+
const lagna = yield* getDivisionalTarget(placements.lagna.longitude, division).pipe(Effect.map((mapped) => {
|
|
32
|
+
const mappedSign = Array.getUnsafe(Rashis.literals, mapped.signIndex);
|
|
33
|
+
return Lagna.make({
|
|
34
|
+
name: "Lagna",
|
|
35
|
+
longitude: mapped.longitude,
|
|
36
|
+
degree: mapped.degree,
|
|
37
|
+
sign: Sign.make({
|
|
38
|
+
name: mappedSign,
|
|
39
|
+
lord: SIGN_LORDS[mappedSign],
|
|
40
|
+
}),
|
|
41
|
+
});
|
|
42
|
+
}));
|
|
43
|
+
const planets = yield* Effect.all(placements.planets.map((source) => getDivisionalTarget(source.longitude, division).pipe(Effect.map((mapped) => {
|
|
44
|
+
const mappedSign = Array.getUnsafe(Rashis.literals, mapped.signIndex);
|
|
45
|
+
return Planet.make({
|
|
46
|
+
name: source.name,
|
|
47
|
+
longitude: mapped.longitude,
|
|
48
|
+
degree: mapped.degree,
|
|
49
|
+
is_retrograde: source.is_retrograde,
|
|
50
|
+
in_sign: inSignStatus(source.name, source.longitude),
|
|
51
|
+
sign: Sign.make({
|
|
52
|
+
name: mappedSign,
|
|
53
|
+
lord: SIGN_LORDS[mappedSign],
|
|
54
|
+
}),
|
|
55
|
+
});
|
|
56
|
+
}))), { concurrency: "unbounded" });
|
|
57
|
+
return chartFromMappedPlacements({ division, lagna, planets });
|
|
58
|
+
});
|
|
59
|
+
function requestedDivisions(divisions) {
|
|
60
|
+
const requested = pipe(divisions, Array.filter((division) => division !== 1), Array.dedupe, Array.sort(Order.Number));
|
|
61
|
+
return [1, ...requested];
|
|
62
|
+
}
|
|
63
|
+
export const project = Effect.fn("astro-ascendant/chart/project")(function* (placements, divisions = []) {
|
|
64
|
+
const requested = requestedDivisions(divisions);
|
|
65
|
+
const [firstDivision, ...remainingDivisions] = requested;
|
|
66
|
+
const firstChart = yield* chartFromPlacements(placements, firstDivision);
|
|
67
|
+
const remainingCharts = yield* Effect.all(remainingDivisions.map((division) => chartFromPlacements(placements, division)), { concurrency: "unbounded" });
|
|
68
|
+
return [firstChart, ...remainingCharts];
|
|
69
|
+
}, Effect.mapError((cause) => ChartCalculationError.make({
|
|
70
|
+
stage: "mapping",
|
|
71
|
+
message: "Could not map one or more requested Divisions",
|
|
72
|
+
cause,
|
|
73
|
+
})));
|
|
74
|
+
//# sourceMappingURL=charts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"charts.js","sourceRoot":"","sources":["../../src/chart/charts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import { DivisionalMappingError } from "./error.js";
|
|
3
|
+
export declare const DIVISIONAL_MAPPING: "ascendant-divisional-mapping";
|
|
4
|
+
export declare const normalizeLongitude: (longitude: number) => Effect.Effect<number & import("effect/Brand").Brand<"Longitude">, DivisionalMappingError, never>;
|
|
5
|
+
export declare const getDivisionalTarget: (longitude: number, division: 1 | 2 | 3 | 4 | 7 | 9 | 10 | 12 | 16 | 20 | 24 | 27 | 30 | 40 | 45 | 60) => Effect.Effect<import("./model.js").DivisionalTarget, DivisionalMappingError, never>;
|
|
6
|
+
//# sourceMappingURL=calculate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calculate.d.ts","sourceRoot":"","sources":["../../../src/chart/divisional-mapping/calculate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAQ,MAAM,QAAQ,CAAC;AAGtC,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AASpD,eAAO,MAAM,kBAAkB,EAAG,8BAAuC,CAAC;AAE1E,eAAO,MAAM,kBAAkB,yHAe9B,CAAC;AAEF,eAAO,MAAM,mBAAmB,+LAa/B,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Effect, pipe } from "effect";
|
|
2
|
+
import { Longitude } from "../model.js";
|
|
3
|
+
import { DivisionalMappingError } from "./error.js";
|
|
4
|
+
import { divisionalTargetOf, identityTargetOf, sourcePositionOf, subdivisionOf, targetSignOf, } from "./helper.js";
|
|
5
|
+
export const DIVISIONAL_MAPPING = "ascendant-divisional-mapping";
|
|
6
|
+
export const normalizeLongitude = Effect.fn("Chart.DivisionalMapping.normalizeLongitude")(function* (longitude) {
|
|
7
|
+
if (!Number.isFinite(longitude)) {
|
|
8
|
+
return yield* DivisionalMappingError.make({
|
|
9
|
+
message: "Longitude must be finite",
|
|
10
|
+
cause: longitude,
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
return pipe(longitude % 360, (remainder) => (remainder < 0 ? remainder + 360 : remainder), (normalized) => Longitude.make(normalized));
|
|
14
|
+
});
|
|
15
|
+
export const getDivisionalTarget = Effect.fn("Chart.DivisionalMapping.getDivisionalTarget")(function* (longitude, division) {
|
|
16
|
+
const source = yield* normalizeLongitude(longitude).pipe(Effect.map(sourcePositionOf));
|
|
17
|
+
if (division === 1) {
|
|
18
|
+
return pipe(source, identityTargetOf);
|
|
19
|
+
}
|
|
20
|
+
const subdivision = subdivisionOf(source.degree, division);
|
|
21
|
+
const signIndex = targetSignOf(source, subdivision, division);
|
|
22
|
+
return pipe({ signIndex, degree: subdivision.degree }, divisionalTargetOf);
|
|
23
|
+
});
|
|
24
|
+
//# sourceMappingURL=calculate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calculate.js","sourceRoot":"","sources":["../../../src/chart/divisional-mapping/calculate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAAiB,SAAS,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,YAAY,GACb,MAAM,aAAa,CAAC;AAErB,MAAM,CAAC,MAAM,kBAAkB,GAAG,8BAAuC,CAAC;AAE1E,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,EAAE,CAAC,4CAA4C,CAAC,CACvF,QAAQ,CAAC,EAAE,SAAiB;IAC1B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC;YACxC,OAAO,EAAE,0BAA0B;YACnC,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CACT,SAAS,GAAG,GAAG,EACf,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,EAC5D,CAAC,UAAU,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC3C,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,EAAE,CAAC,6CAA6C,CAAC,CACzF,QAAQ,CAAC,EAAE,SAAiB,EAAE,QAAkB;IAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAEvF,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;IAE9D,OAAO,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,EAAE,kBAAkB,CAAC,CAAC;AAC7E,CAAC,CACF,CAAC"}
|