astro-ascendant 0.1.2 → 1.0.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/README.md +9 -69
- package/dist/chart/bhava/calculate.d.ts +5 -0
- package/dist/chart/bhava/calculate.d.ts.map +1 -1
- package/dist/chart/bhava/calculate.js +5 -0
- package/dist/chart/bhava/calculate.js.map +1 -1
- package/dist/chart/calculate.d.ts +13 -0
- package/dist/chart/calculate.d.ts.map +1 -0
- package/dist/chart/calculate.js +224 -0
- package/dist/chart/calculate.js.map +1 -0
- package/dist/chart/charts.d.ts +7 -1
- package/dist/chart/charts.d.ts.map +1 -1
- package/dist/chart/charts.js +22 -12
- package/dist/chart/charts.js.map +1 -1
- package/dist/chart/cusp.d.ts +6 -0
- package/dist/chart/cusp.d.ts.map +1 -0
- package/dist/chart/cusp.js +17 -0
- package/dist/chart/cusp.js.map +1 -0
- package/dist/chart/divisional-mapping/calculate.d.ts +6 -1
- package/dist/chart/divisional-mapping/calculate.d.ts.map +1 -1
- package/dist/chart/divisional-mapping/calculate.js +6 -1
- package/dist/chart/divisional-mapping/calculate.js.map +1 -1
- package/dist/chart/divisional-mapping/helper.d.ts +10 -0
- package/dist/chart/divisional-mapping/helper.d.ts.map +1 -1
- package/dist/chart/divisional-mapping/helper.js +10 -0
- package/dist/chart/divisional-mapping/helper.js.map +1 -1
- package/dist/chart/generate.d.ts +8 -2
- package/dist/chart/generate.d.ts.map +1 -1
- package/dist/chart/generate.js +24 -6
- package/dist/chart/generate.js.map +1 -1
- package/dist/chart/helper.d.ts +1 -0
- package/dist/chart/helper.d.ts.map +1 -1
- package/dist/chart/helper.js +20 -2
- package/dist/chart/helper.js.map +1 -1
- package/dist/chart/internal/constants.d.ts +11 -0
- package/dist/chart/internal/constants.d.ts.map +1 -1
- package/dist/chart/internal/constants.js +11 -0
- package/dist/chart/internal/constants.js.map +1 -1
- package/dist/chart/model.d.ts +63 -29
- package/dist/chart/model.d.ts.map +1 -1
- package/dist/chart/model.js +50 -18
- package/dist/chart/model.js.map +1 -1
- package/dist/chart/placements.d.ts +5 -0
- package/dist/chart/placements.d.ts.map +1 -1
- package/dist/chart/placements.js +11 -6
- package/dist/chart/placements.js.map +1 -1
- package/dist/dasha/calculate-chara.d.ts +29 -0
- package/dist/dasha/calculate-chara.d.ts.map +1 -0
- package/dist/dasha/calculate-chara.js +115 -0
- package/dist/dasha/calculate-chara.js.map +1 -0
- package/dist/dasha/calculate-sthira.d.ts +87 -0
- package/dist/dasha/calculate-sthira.d.ts.map +1 -0
- package/dist/dasha/calculate-sthira.js +234 -0
- package/dist/dasha/calculate-sthira.js.map +1 -0
- package/dist/dasha/calculate.d.ts +10 -5
- package/dist/dasha/calculate.d.ts.map +1 -1
- package/dist/dasha/calculate.js +10 -27
- package/dist/dasha/calculate.js.map +1 -1
- package/dist/dasha/calendar.d.ts +12 -0
- package/dist/dasha/calendar.d.ts.map +1 -0
- package/dist/dasha/calendar.js +31 -0
- package/dist/dasha/calendar.js.map +1 -0
- package/dist/dasha/chara/calculate.d.ts +29 -0
- package/dist/dasha/chara/calculate.d.ts.map +1 -0
- package/dist/dasha/chara/calculate.js +115 -0
- package/dist/dasha/chara/calculate.js.map +1 -0
- package/dist/dasha/chara/index.d.ts +4 -0
- package/dist/dasha/chara/index.d.ts.map +1 -0
- package/dist/dasha/chara/index.js +4 -0
- package/dist/dasha/chara/index.js.map +1 -0
- package/dist/dasha/error.d.ts +8 -0
- package/dist/dasha/error.d.ts.map +1 -1
- package/dist/dasha/error.js +8 -0
- package/dist/dasha/error.js.map +1 -1
- package/dist/dasha/evidence.d.ts +5 -0
- package/dist/dasha/evidence.d.ts.map +1 -0
- package/dist/dasha/evidence.js +16 -0
- package/dist/dasha/evidence.js.map +1 -0
- package/dist/dasha/index.d.ts +8 -2
- package/dist/dasha/index.d.ts.map +1 -1
- package/dist/dasha/index.js +8 -2
- package/dist/dasha/index.js.map +1 -1
- package/dist/dasha/model.d.ts +327 -0
- package/dist/dasha/model.d.ts.map +1 -1
- package/dist/dasha/model.js +83 -1
- package/dist/dasha/model.js.map +1 -1
- package/dist/dasha/rashi-internal.d.ts +18 -0
- package/dist/dasha/rashi-internal.d.ts.map +1 -0
- package/dist/dasha/rashi-internal.js +41 -0
- package/dist/dasha/rashi-internal.js.map +1 -0
- package/dist/dasha/rashi-query.d.ts +114 -0
- package/dist/dasha/rashi-query.d.ts.map +1 -0
- package/dist/dasha/rashi-query.js +23 -0
- package/dist/dasha/rashi-query.js.map +1 -0
- package/dist/dasha/sthira/calculate.d.ts +87 -0
- package/dist/dasha/sthira/calculate.d.ts.map +1 -0
- package/dist/dasha/sthira/calculate.js +234 -0
- package/dist/dasha/sthira/calculate.js.map +1 -0
- package/dist/dasha/sthira/index.d.ts +5 -0
- package/dist/dasha/sthira/index.d.ts.map +1 -0
- package/dist/dasha/sthira/index.js +4 -0
- package/dist/dasha/sthira/index.js.map +1 -0
- package/dist/dasha/vimshottari/calculate.d.ts +20 -0
- package/dist/dasha/vimshottari/calculate.d.ts.map +1 -0
- package/dist/dasha/vimshottari/calculate.js +89 -0
- package/dist/dasha/vimshottari/calculate.js.map +1 -0
- package/dist/dasha/vimshottari/index.d.ts +4 -0
- package/dist/dasha/vimshottari/index.d.ts.map +1 -0
- package/dist/dasha/vimshottari/index.js +4 -0
- package/dist/dasha/vimshottari/index.js.map +1 -0
- package/dist/dasha/vimshottari/query.d.ts +31 -0
- package/dist/dasha/vimshottari/query.d.ts.map +1 -0
- package/dist/dasha/vimshottari/query.js +19 -0
- package/dist/dasha/vimshottari/query.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/jaimini/argala/calculate.d.ts +8 -3
- package/dist/jaimini/argala/calculate.d.ts.map +1 -1
- package/dist/jaimini/argala/calculate.js +7 -5
- package/dist/jaimini/argala/calculate.js.map +1 -1
- package/dist/jaimini/argala/model.d.ts +1 -8
- package/dist/jaimini/argala/model.d.ts.map +1 -1
- package/dist/jaimini/argala/model.js +3 -6
- package/dist/jaimini/argala/model.js.map +1 -1
- package/dist/jaimini/arudha-pada/calculate.d.ts +8 -3
- package/dist/jaimini/arudha-pada/calculate.d.ts.map +1 -1
- package/dist/jaimini/arudha-pada/calculate.js +8 -6
- package/dist/jaimini/arudha-pada/calculate.js.map +1 -1
- package/dist/jaimini/arudha-pada/model.d.ts +1 -8
- package/dist/jaimini/arudha-pada/model.d.ts.map +1 -1
- package/dist/jaimini/arudha-pada/model.js +3 -6
- package/dist/jaimini/arudha-pada/model.js.map +1 -1
- package/dist/jaimini/chara-karakas/calculate.d.ts +8 -3
- package/dist/jaimini/chara-karakas/calculate.d.ts.map +1 -1
- package/dist/jaimini/chara-karakas/calculate.js +8 -6
- package/dist/jaimini/chara-karakas/calculate.js.map +1 -1
- package/dist/jaimini/chara-karakas/helper.d.ts +5 -0
- package/dist/jaimini/chara-karakas/helper.d.ts.map +1 -1
- package/dist/jaimini/chara-karakas/helper.js +5 -0
- package/dist/jaimini/chara-karakas/helper.js.map +1 -1
- package/dist/jaimini/chara-karakas/model.d.ts +1 -8
- package/dist/jaimini/chara-karakas/model.d.ts.map +1 -1
- package/dist/jaimini/chara-karakas/model.js +3 -6
- package/dist/jaimini/chara-karakas/model.js.map +1 -1
- package/dist/jaimini/karakamsha/calculate.d.ts +8 -3
- package/dist/jaimini/karakamsha/calculate.d.ts.map +1 -1
- package/dist/jaimini/karakamsha/calculate.js +9 -7
- package/dist/jaimini/karakamsha/calculate.js.map +1 -1
- package/dist/jaimini/karakamsha/model.d.ts +1 -8
- package/dist/jaimini/karakamsha/model.d.ts.map +1 -1
- package/dist/jaimini/karakamsha/model.js +3 -6
- package/dist/jaimini/karakamsha/model.js.map +1 -1
- package/dist/jaimini/rashi-drishti/calculate.d.ts +7 -3
- package/dist/jaimini/rashi-drishti/calculate.d.ts.map +1 -1
- package/dist/jaimini/rashi-drishti/calculate.js +6 -6
- package/dist/jaimini/rashi-drishti/calculate.js.map +1 -1
- package/dist/jaimini/rashi-drishti/helper.d.ts +5 -0
- package/dist/jaimini/rashi-drishti/helper.d.ts.map +1 -1
- package/dist/jaimini/rashi-drishti/helper.js +5 -0
- package/dist/jaimini/rashi-drishti/helper.js.map +1 -1
- package/dist/jaimini/rashi-drishti/model.d.ts +1 -7
- package/dist/jaimini/rashi-drishti/model.d.ts.map +1 -1
- package/dist/jaimini/rashi-drishti/model.js +3 -6
- package/dist/jaimini/rashi-drishti/model.js.map +1 -1
- package/dist/jaimini/upapada/calculate.d.ts +8 -3
- package/dist/jaimini/upapada/calculate.d.ts.map +1 -1
- package/dist/jaimini/upapada/calculate.js +7 -6
- package/dist/jaimini/upapada/calculate.js.map +1 -1
- package/dist/jaimini/upapada/helper.d.ts +3 -3
- package/dist/jaimini/upapada/model.d.ts +1 -8
- package/dist/jaimini/upapada/model.d.ts.map +1 -1
- package/dist/jaimini/upapada/model.js +3 -6
- package/dist/jaimini/upapada/model.js.map +1 -1
- package/dist/provenance.d.ts +241 -0
- package/dist/provenance.d.ts.map +1 -0
- package/dist/provenance.js +172 -0
- package/dist/provenance.js.map +1 -0
- package/dist/sav/calculate.d.ts +5 -0
- package/dist/sav/calculate.d.ts.map +1 -1
- package/dist/sav/calculate.js +19 -0
- package/dist/sav/calculate.js.map +1 -1
- package/package.json +31 -12
- package/dist/yoga/calculate.d.ts +0 -9
- package/dist/yoga/calculate.d.ts.map +0 -1
- package/dist/yoga/calculate.js +0 -48
- package/dist/yoga/calculate.js.map +0 -1
- package/dist/yoga/catalog.d.ts +0 -7
- package/dist/yoga/catalog.d.ts.map +0 -1
- package/dist/yoga/catalog.js +0 -129
- package/dist/yoga/catalog.js.map +0 -1
- package/dist/yoga/definitions/house-patterns.d.ts +0 -42
- package/dist/yoga/definitions/house-patterns.d.ts.map +0 -1
- package/dist/yoga/definitions/house-patterns.js +0 -73
- package/dist/yoga/definitions/house-patterns.js.map +0 -1
- package/dist/yoga/definitions/moon-relative.d.ts +0 -94
- package/dist/yoga/definitions/moon-relative.d.ts.map +0 -1
- package/dist/yoga/definitions/moon-relative.js +0 -123
- package/dist/yoga/definitions/moon-relative.js.map +0 -1
- package/dist/yoga/error.d.ts +0 -38
- package/dist/yoga/error.d.ts.map +0 -1
- package/dist/yoga/error.js +0 -37
- package/dist/yoga/error.js.map +0 -1
- package/dist/yoga/evaluate.d.ts +0 -36
- package/dist/yoga/evaluate.d.ts.map +0 -1
- package/dist/yoga/evaluate.js +0 -173
- package/dist/yoga/evaluate.js.map +0 -1
- package/dist/yoga/format.d.ts +0 -3
- package/dist/yoga/format.d.ts.map +0 -1
- package/dist/yoga/format.js +0 -5
- package/dist/yoga/format.js.map +0 -1
- package/dist/yoga/index.d.ts +0 -6
- package/dist/yoga/index.d.ts.map +0 -1
- package/dist/yoga/index.js +0 -6
- package/dist/yoga/index.js.map +0 -1
- package/dist/yoga/internal.d.ts +0 -274
- package/dist/yoga/internal.d.ts.map +0 -1
- package/dist/yoga/internal.js +0 -4
- package/dist/yoga/internal.js.map +0 -1
- package/dist/yoga/model.d.ts +0 -107
- package/dist/yoga/model.d.ts.map +0 -1
- package/dist/yoga/model.js +0 -66
- package/dist/yoga/model.js.map +0 -1
- package/dist/yoga/provenance.d.ts +0 -3
- package/dist/yoga/provenance.d.ts.map +0 -1
- package/dist/yoga/provenance.js +0 -5
- package/dist/yoga/provenance.js.map +0 -1
package/README.md
CHANGED
|
@@ -5,14 +5,14 @@
|
|
|
5
5
|
|
|
6
6
|
Effect-first TypeScript library for sidereal Vedic astrology calculations.
|
|
7
7
|
|
|
8
|
-
`astro-ascendant` calculates planetary Placements once for a Located Moment, then derives charts, Vimshottari Dasha timelines, Ashtakavarga,
|
|
8
|
+
`astro-ascendant` calculates planetary Placements once for a Located Moment, then derives charts, Vimshottari, Chara, and Sthira Dasha timelines, Ashtakavarga, and Jaimini results from that shared calculation. It includes a Swiss Ephemeris adapter for Node.js and Bun, plus a runtime-neutral ephemeris interface for custom adapters.
|
|
9
9
|
|
|
10
10
|
## Installation
|
|
11
11
|
|
|
12
12
|
Install the package and its Effect peer dependency:
|
|
13
13
|
|
|
14
14
|
```bash
|
|
15
|
-
npm install astro-ascendant effect
|
|
15
|
+
npm install astro-ascendant effect@rc
|
|
16
16
|
```
|
|
17
17
|
|
|
18
18
|
The package includes the Swiss Ephemeris adapter dependency, uses ES modules, and includes TypeScript declarations.
|
|
@@ -26,12 +26,13 @@ import { AstroParams, Chart } from "astro-ascendant";
|
|
|
26
26
|
import * as Swisseph from "astro-ascendant/swisseph";
|
|
27
27
|
import { DateTime, Effect, Layer } from "effect";
|
|
28
28
|
|
|
29
|
-
const input = Chart.
|
|
29
|
+
const input = Chart.ChartParams.make({
|
|
30
30
|
moment: Chart.Moment.make({
|
|
31
31
|
date: DateTime.makeUnsafe("2000-01-01T12:00:00.000Z"),
|
|
32
32
|
}),
|
|
33
33
|
latitude: 12.9716,
|
|
34
34
|
longitude: 77.5946,
|
|
35
|
+
sex: "Male",
|
|
35
36
|
});
|
|
36
37
|
|
|
37
38
|
const program = Chart.generate(input, [9]);
|
|
@@ -42,80 +43,19 @@ console.log(calculation.charts[0]); // D1
|
|
|
42
43
|
console.log(calculation.charts[1]); // D9
|
|
43
44
|
```
|
|
44
45
|
|
|
45
|
-
`calculation.placements` contains the shared sidereal positions. `calculation.charts` contains D1 first, followed by the requested divisions in numeric order. `
|
|
46
|
+
`calculation.placements` contains the shared sidereal positions. `calculation.charts` contains D1 first, followed by the requested divisions in numeric order. Optional birth `sex` is copied into each chart. Every chart uses cusp-defined houses and includes KP house significations, four-level planet significations, four-level house significators, and the five ordered ruling planets.
|
|
46
47
|
|
|
47
48
|
## Calculations
|
|
48
49
|
|
|
49
50
|
The package exposes named operations for each calculation surface:
|
|
50
51
|
|
|
51
|
-
- **Charts**: D1 and 15 divisional charts
|
|
52
|
-
- **
|
|
52
|
+
- **Charts**: D1 and 15 cusp-aware divisional charts
|
|
53
|
+
- **Dasha**: Vimshottari planetary periods plus Jaimini Chara and Sthira sign periods with date queries
|
|
53
54
|
- **Ashtakavarga**: Bhinnashtakavarga, Sarvashtakavarga, reduced BAV, and Shodhya Pinda
|
|
54
|
-
- **Yogas**: versioned classical Yoga catalog with structured evidence
|
|
55
55
|
- **Jaimini**: Chara Karakas, Rashi Drishti, Karakamsha, Arudha Pada, Upapada, and Argala
|
|
56
56
|
- **Methodologies**: 39 predefined ayanamsas and 13 house systems
|
|
57
57
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
```typescript
|
|
61
|
-
import { Dasha, SAV } from "astro-ascendant";
|
|
62
|
-
|
|
63
|
-
const derived = Effect.gen(function* () {
|
|
64
|
-
const timeline = yield* Dasha.calculate(input.moment, calculation.placements);
|
|
65
|
-
const current = yield* Dasha.at(timeline, input.moment.date);
|
|
66
|
-
const ashtakavarga = yield* SAV.calculate(calculation.placements);
|
|
67
|
-
|
|
68
|
-
return { timeline, current, ashtakavarga };
|
|
69
|
-
});
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
## Configuration
|
|
73
|
-
|
|
74
|
-
Pass an `AstroParams` layer to select the ayanamsa and house system:
|
|
75
|
-
|
|
76
|
-
```typescript
|
|
77
|
-
const params = AstroParams.layer({
|
|
78
|
-
ayanamsa: "Raman",
|
|
79
|
-
houseSystem: "Placidus",
|
|
80
|
-
});
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
The configured house system changes `calculation.bhava`. D1 and divisional charts remain sign-based charts with Whole Sign houses.
|
|
84
|
-
|
|
85
|
-
Supported divisions are `D1`, `D2`, `D3`, `D4`, `D7`, `D9`, `D10`, `D12`, `D16`, `D20`, `D24`, `D27`, `D30`, `D40`, `D45`, and `D60`.
|
|
86
|
-
|
|
87
|
-
## Package exports
|
|
88
|
-
|
|
89
|
-
Use the package root for the main namespaces, or import a focused entry point:
|
|
90
|
-
|
|
91
|
-
| Entry point | Contents |
|
|
92
|
-
| ------------------------------- | ----------------------------------------------------------------------------------- |
|
|
93
|
-
| `astro-ascendant` | `AstroParams`, `Chart`, `Dasha`, `Ephemeris`, `SAV`, `Yoga`, and Jaimini namespaces |
|
|
94
|
-
| `astro-ascendant/chart` | Chart models, generation, projection, and errors |
|
|
95
|
-
| `astro-ascendant/dasha` | Vimshottari Dasha calculation and queries |
|
|
96
|
-
| `astro-ascendant/sav` | Ashtakavarga calculation and models |
|
|
97
|
-
| `astro-ascendant/yoga` | Yoga catalog, evaluation, and evidence formatting |
|
|
98
|
-
| `astro-ascendant/swisseph` | Swiss Ephemeris adapter |
|
|
99
|
-
| `astro-ascendant/astro-params` | Calculation parameter models and layers |
|
|
100
|
-
| `astro-ascendant/argala` | Jaimini Argala calculation |
|
|
101
|
-
| `astro-ascendant/arudha-pada` | Jaimini Arudha Pada calculation |
|
|
102
|
-
| `astro-ascendant/chara-karakas` | Jaimini Chara Karaka calculation |
|
|
103
|
-
| `astro-ascendant/karakamsha` | Jaimini Karakamsha calculation |
|
|
104
|
-
| `astro-ascendant/rashi-drishti` | Jaimini Rashi Drishti calculation |
|
|
105
|
-
| `astro-ascendant/upapada` | Jaimini Upapada calculation |
|
|
106
|
-
|
|
107
|
-
See the [API documentation](https://ascendant-docs.vercel.app) for the complete public surface and methodology details.
|
|
108
|
-
|
|
109
|
-
## Run the examples
|
|
110
|
-
|
|
111
|
-
The repository includes interactive examples for charts, Dasha, Jaimini, Ashtakavarga, and Yogas:
|
|
112
|
-
|
|
113
|
-
```bash
|
|
114
|
-
bun install
|
|
115
|
-
make run
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
The runner accepts `MOMENT_DATE`, `LATITUDE`, and `LONGITUDE` from the environment or lets you enter the moment and location interactively.
|
|
58
|
+
See the [calculation and API reference](docs/reference.md) for derivation workflows, provenance, configuration, supported divisions, and focused package exports. The published [API documentation](https://ascendant-docs.vercel.app) has the complete type surface.
|
|
119
59
|
|
|
120
60
|
## Development
|
|
121
61
|
|
|
@@ -126,7 +66,7 @@ bun install
|
|
|
126
66
|
make check
|
|
127
67
|
```
|
|
128
68
|
|
|
129
|
-
Use `make help` to list all available commands.
|
|
69
|
+
Use `make help` to list all available commands.
|
|
130
70
|
|
|
131
71
|
## License
|
|
132
72
|
|
|
@@ -2,5 +2,10 @@ import { Effect } from "effect";
|
|
|
2
2
|
import type { HouseData } from "../../ephemeris/model.js";
|
|
3
3
|
import { ChartCalculationError } from "../error.js";
|
|
4
4
|
import { BhavaChart, type Chart } from "../model.js";
|
|
5
|
+
/**
|
|
6
|
+
* Creates a cusp-based Bhava chart from ephemeris house data and D1 planets.
|
|
7
|
+
* It validates that the twelve normalized cusp intervals cover exactly one
|
|
8
|
+
* circle, then assigns each planet to one half-open interval `[cusp, next cusp)`.
|
|
9
|
+
*/
|
|
5
10
|
export declare const bhavaFromHouseData: (houses: HouseData, d1: Chart) => Effect.Effect<BhavaChart, ChartCalculationError, never>;
|
|
6
11
|
//# sourceMappingURL=calculate.d.ts.map
|
|
@@ -1 +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"}
|
|
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;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,2FAoG7B,CAAC"}
|
|
@@ -3,6 +3,11 @@ import { ChartCalculationError } from "../error.js";
|
|
|
3
3
|
import { BhavaAngles, BhavaChart, BhavaHouse, BhavaHouses, CircleAngle, Longitude, } from "../model.js";
|
|
4
4
|
import { distributePlanets, forwardDistance, normalizeAngle } from "./helper.js";
|
|
5
5
|
const HOUSE_NUMBERS = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
|
|
6
|
+
/**
|
|
7
|
+
* Creates a cusp-based Bhava chart from ephemeris house data and D1 planets.
|
|
8
|
+
* It validates that the twelve normalized cusp intervals cover exactly one
|
|
9
|
+
* circle, then assigns each planet to one half-open interval `[cusp, next cusp)`.
|
|
10
|
+
*/
|
|
6
11
|
export const bhavaFromHouseData = Effect.fn("Chart.Bhava.fromHouseData")(function* (houses, d1) {
|
|
7
12
|
const rawCusps = houses.cusps.slice(1, 13);
|
|
8
13
|
const rawAngles = [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calculate.js","sourceRoot":"","sources":["../../../src/chart/bhava/calculate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"calculate.js","sourceRoot":"","sources":["../../../src/chart/bhava/calculate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import type { DateTime as DateTimeType } from "effect/DateTime";
|
|
3
|
+
import type { HouseData } from "../ephemeris/model.js";
|
|
4
|
+
import { ChartCalculationError } from "./error.js";
|
|
5
|
+
import { Chart } from "./model.js";
|
|
6
|
+
/**
|
|
7
|
+
* Creates a cusp-based chart from ephemeris house data and a division's
|
|
8
|
+
* mapped planets.
|
|
9
|
+
* It validates that the twelve normalized cusp intervals cover exactly one
|
|
10
|
+
* circle, then assigns each planet to one half-open interval `[cusp, next cusp)`.
|
|
11
|
+
*/
|
|
12
|
+
export declare const chartFromHouseData: (houses: HouseData, chart: Chart, date: DateTimeType) => Effect.Effect<Chart, ChartCalculationError | import("./divisional-mapping/error.js").DivisionalMappingError, never>;
|
|
13
|
+
//# sourceMappingURL=calculate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calculate.d.ts","sourceRoot":"","sources":["../../src/chart/calculate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,MAAM,EAAkB,MAAM,QAAQ,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEhE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAGnD,OAAO,EAEL,KAAK,EAaN,MAAM,YAAY,CAAC;AA4IpB;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,8KAiI7B,CAAC"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import { DateTime, Effect, Record, Schema } from "effect";
|
|
2
|
+
import { distributePlanets, forwardDistance, normalizeAngle } from "./cusp.js";
|
|
3
|
+
import { getDivisionalTarget } from "./divisional-mapping/index.js";
|
|
4
|
+
import { ChartCalculationError } from "./error.js";
|
|
5
|
+
import { nakshatraOf, subLordOf } from "./helper.js";
|
|
6
|
+
import { RASHIS, SIGN_LORDS } from "./internal/constants.js";
|
|
7
|
+
import { ChartAngles, Chart, ChartHouses, CircleAngle, HouseSignificators, House, Houses, Longitude, HOUSE_SIGNIFICATIONS, PlanetSignification, Planets, } from "./model.js";
|
|
8
|
+
const HOUSE_NUMBERS = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
|
|
9
|
+
const PLANET_NAMES = Planets.literals;
|
|
10
|
+
function houseOfPlanet(planet, houses) {
|
|
11
|
+
const index = houses.findIndex((house) => house.planets.some((item) => item.name === planet));
|
|
12
|
+
return index === -1 ? undefined : (index + 1);
|
|
13
|
+
}
|
|
14
|
+
function ownedHouses(planet, houses) {
|
|
15
|
+
return houses.flatMap((house, index) => {
|
|
16
|
+
const sign = RASHIS[Math.floor(Number(house.cusp) / 30)];
|
|
17
|
+
return sign !== undefined && SIGN_LORDS[sign] === planet ? [(index + 1)] : [];
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
function starLordOf(planet) {
|
|
21
|
+
return nakshatraOf(planet.longitude).lord;
|
|
22
|
+
}
|
|
23
|
+
function planetsInStarOf(starLord, planets) {
|
|
24
|
+
return planets.flatMap((planet) => (starLordOf(planet) === starLord ? [planet.name] : []));
|
|
25
|
+
}
|
|
26
|
+
function dayLord(date) {
|
|
27
|
+
const weekdays = [
|
|
28
|
+
"Sun",
|
|
29
|
+
"Moon",
|
|
30
|
+
"Mars",
|
|
31
|
+
"Mercury",
|
|
32
|
+
"Jupiter",
|
|
33
|
+
"Venus",
|
|
34
|
+
"Saturn",
|
|
35
|
+
];
|
|
36
|
+
return weekdays[DateTime.toDate(date).getUTCDay()];
|
|
37
|
+
}
|
|
38
|
+
function signLordOf(longitude) {
|
|
39
|
+
const sign = RASHIS[Math.floor(Number(longitude) / 30)];
|
|
40
|
+
return SIGN_LORDS[sign];
|
|
41
|
+
}
|
|
42
|
+
function angularDistance(first, second) {
|
|
43
|
+
const distance = Math.abs(first - second) % 360;
|
|
44
|
+
return Math.min(distance, 360 - distance);
|
|
45
|
+
}
|
|
46
|
+
function agentOf(planet, houses) {
|
|
47
|
+
if (planet.name !== "Rahu" && planet.name !== "Ketu")
|
|
48
|
+
return undefined;
|
|
49
|
+
const house = houses.find((item) => item.planets.some(({ name }) => name === planet.name));
|
|
50
|
+
const conjunction = house?.planets
|
|
51
|
+
.filter((item) => item.name !== planet.name)
|
|
52
|
+
.sort((first, second) => angularDistance(first.longitude, planet.longitude) -
|
|
53
|
+
angularDistance(second.longitude, planet.longitude))[0];
|
|
54
|
+
return conjunction?.name ?? planet.sign.lord;
|
|
55
|
+
}
|
|
56
|
+
function calculateSignifications(houses, lagna, date) {
|
|
57
|
+
const houseEntries = HOUSE_NUMBERS.map((house) => [house, houses[house]]);
|
|
58
|
+
const allHouses = houseEntries.map(([, house]) => house);
|
|
59
|
+
const planets = allHouses.flatMap((house) => house.planets);
|
|
60
|
+
const byName = new Map(planets.map((planet) => [planet.name, planet]));
|
|
61
|
+
const significations = PLANET_NAMES.map((planet) => {
|
|
62
|
+
const item = byName.get(planet);
|
|
63
|
+
const agent = item === undefined ? undefined : agentOf(item, allHouses);
|
|
64
|
+
const effectivePlanet = agent ?? planet;
|
|
65
|
+
const source = agent === undefined ? item : byName.get(agent);
|
|
66
|
+
const starLord = source === undefined ? undefined : starLordOf(source);
|
|
67
|
+
return [
|
|
68
|
+
planet,
|
|
69
|
+
PlanetSignification.make({
|
|
70
|
+
planet,
|
|
71
|
+
...(agent === undefined ? {} : { agent }),
|
|
72
|
+
level1: starLord === undefined
|
|
73
|
+
? []
|
|
74
|
+
: [houseOfPlanet(starLord, allHouses)].filter((house) => house !== undefined),
|
|
75
|
+
level2: [houseOfPlanet(effectivePlanet, allHouses)].filter((house) => house !== undefined),
|
|
76
|
+
level3: starLord === undefined ? [] : ownedHouses(agent ?? starLord, allHouses),
|
|
77
|
+
level4: ownedHouses(effectivePlanet, allHouses),
|
|
78
|
+
}),
|
|
79
|
+
];
|
|
80
|
+
});
|
|
81
|
+
const houseSignificators = houseEntries.map(([house, chartHouse]) => {
|
|
82
|
+
const occupants = chartHouse.planets.map((planet) => planet.name);
|
|
83
|
+
const owner = SIGN_LORDS[RASHIS[Math.floor(Number(chartHouse.cusp) / 30)]];
|
|
84
|
+
const level1 = occupants.flatMap((occupant) => planetsInStarOf(occupant, planets));
|
|
85
|
+
const level3 = planetsInStarOf(owner, planets);
|
|
86
|
+
return [
|
|
87
|
+
String(house),
|
|
88
|
+
HouseSignificators.make({
|
|
89
|
+
house,
|
|
90
|
+
level1,
|
|
91
|
+
level2: occupants,
|
|
92
|
+
level3,
|
|
93
|
+
level4: [owner],
|
|
94
|
+
}),
|
|
95
|
+
];
|
|
96
|
+
});
|
|
97
|
+
const moon = byName.get("Moon");
|
|
98
|
+
const ascendantStarLord = nakshatraOf(lagna.longitude).lord;
|
|
99
|
+
const ascendantSignLord = SIGN_LORDS[lagna.sign.name];
|
|
100
|
+
const moonStarLord = moon === undefined ? ascendantStarLord : starLordOf(moon);
|
|
101
|
+
const moonSignLord = moon?.sign.lord ?? ascendantSignLord;
|
|
102
|
+
return {
|
|
103
|
+
planetSignifications: Record.fromEntries(significations),
|
|
104
|
+
houseSignificators: Record.fromEntries(houseSignificators),
|
|
105
|
+
rulingPlanets: [
|
|
106
|
+
ascendantStarLord,
|
|
107
|
+
ascendantSignLord,
|
|
108
|
+
moonStarLord,
|
|
109
|
+
moonSignLord,
|
|
110
|
+
dayLord(date),
|
|
111
|
+
],
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Creates a cusp-based chart from ephemeris house data and a division's
|
|
116
|
+
* mapped planets.
|
|
117
|
+
* It validates that the twelve normalized cusp intervals cover exactly one
|
|
118
|
+
* circle, then assigns each planet to one half-open interval `[cusp, next cusp)`.
|
|
119
|
+
*/
|
|
120
|
+
export const chartFromHouseData = Effect.fn("Chart.fromHouseData")(function* (houses, chart, date) {
|
|
121
|
+
const rawCusps = houses.cusps.slice(1, 13);
|
|
122
|
+
const rawAngles = [
|
|
123
|
+
houses.ascendant,
|
|
124
|
+
houses.mc,
|
|
125
|
+
houses.armc,
|
|
126
|
+
houses.vertex,
|
|
127
|
+
houses.equatorialAscendant,
|
|
128
|
+
houses.coAscendant1,
|
|
129
|
+
houses.coAscendant2,
|
|
130
|
+
houses.polarAscendant,
|
|
131
|
+
];
|
|
132
|
+
if (rawCusps.length !== HOUSE_NUMBERS.length ||
|
|
133
|
+
rawCusps.some((cusp) => !Number.isFinite(cusp)) ||
|
|
134
|
+
rawAngles.some((angle) => !Number.isFinite(angle))) {
|
|
135
|
+
return yield* ChartCalculationError.make({
|
|
136
|
+
stage: "mapping",
|
|
137
|
+
message: "Could not calculate chart",
|
|
138
|
+
cause: houses,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
const lagna = chart.houses[1].lagna;
|
|
142
|
+
if (lagna === null) {
|
|
143
|
+
return yield* ChartCalculationError.make({
|
|
144
|
+
stage: "mapping",
|
|
145
|
+
message: "Could not calculate chart",
|
|
146
|
+
cause: chart,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
const mappedCusps = yield* Effect.all(rawCusps.map((cusp) => getDivisionalTarget(normalizeAngle(cusp), chart.division)), { concurrency: "unbounded" }).pipe(Effect.map((targets) => targets.map(({ longitude }) => longitude)));
|
|
150
|
+
const equalCusps = HOUSE_NUMBERS.map((_, index) => normalizeAngle(Math.floor(lagna.longitude / 30) * 30 + index * 30));
|
|
151
|
+
const mappedSpans = mappedCusps.map((cusp, index) => {
|
|
152
|
+
const nextCusp = mappedCusps[(index + 1) % mappedCusps.length];
|
|
153
|
+
return nextCusp === undefined ? Number.NaN : forwardDistance(cusp, nextCusp);
|
|
154
|
+
});
|
|
155
|
+
const mappedFullCircle = mappedSpans.reduce((total, span) => total + span, 0);
|
|
156
|
+
const cusps = houses.houseSystem === "WholeSign" ||
|
|
157
|
+
mappedSpans.some((span) => span === 0) ||
|
|
158
|
+
Math.abs(mappedFullCircle - 360) > 1e-7
|
|
159
|
+
? equalCusps
|
|
160
|
+
: mappedCusps;
|
|
161
|
+
const spans = cusps.map((cusp, index) => {
|
|
162
|
+
const nextCusp = cusps[(index + 1) % cusps.length];
|
|
163
|
+
return nextCusp === undefined ? Number.NaN : forwardDistance(cusp, nextCusp);
|
|
164
|
+
});
|
|
165
|
+
const fullCircle = spans.reduce((total, span) => total + span, 0);
|
|
166
|
+
if (spans.some((span) => span === 0) || Math.abs(fullCircle - 360) > 1e-7) {
|
|
167
|
+
return yield* ChartCalculationError.make({
|
|
168
|
+
stage: "mapping",
|
|
169
|
+
message: "Could not calculate chart",
|
|
170
|
+
cause: houses.cusps,
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
const planets = Record.values(chart.houses).flatMap((house) => house.planets);
|
|
174
|
+
const planetsByHouse = distributePlanets(planets, cusps, spans);
|
|
175
|
+
const houseEntries = [];
|
|
176
|
+
for (const [index, houseNumber] of HOUSE_NUMBERS.entries()) {
|
|
177
|
+
const cusp = cusps[index];
|
|
178
|
+
const housePlanets = planetsByHouse[index];
|
|
179
|
+
if (cusp === undefined || housePlanets === undefined) {
|
|
180
|
+
return yield* ChartCalculationError.make({
|
|
181
|
+
stage: "mapping",
|
|
182
|
+
message: "Could not calculate chart",
|
|
183
|
+
cause: houses.cusps,
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
houseEntries.push([
|
|
187
|
+
String(houseNumber),
|
|
188
|
+
House.make({
|
|
189
|
+
sign: RASHIS[Math.floor(cusp / 30)],
|
|
190
|
+
cusp: Longitude.make(cusp),
|
|
191
|
+
signLord: signLordOf(Longitude.make(cusp)),
|
|
192
|
+
starLord: nakshatraOf(Longitude.make(cusp)).lord,
|
|
193
|
+
subLord: subLordOf(Longitude.make(cusp)),
|
|
194
|
+
significations: HOUSE_SIGNIFICATIONS[houseNumber],
|
|
195
|
+
planets: housePlanets,
|
|
196
|
+
lagna: index === 0 ? lagna : null,
|
|
197
|
+
}),
|
|
198
|
+
]);
|
|
199
|
+
}
|
|
200
|
+
const chartHouses = yield* Schema.decodeUnknownEffect(ChartHouses)(Record.fromEntries(houseEntries)).pipe(Effect.mapError((cause) => ChartCalculationError.make({
|
|
201
|
+
stage: "mapping",
|
|
202
|
+
message: "Could not calculate chart",
|
|
203
|
+
cause,
|
|
204
|
+
})));
|
|
205
|
+
const significations = calculateSignifications(chartHouses, lagna, date);
|
|
206
|
+
return Chart.make({
|
|
207
|
+
...(chart.sex === undefined ? {} : { sex: chart.sex }),
|
|
208
|
+
provenance: chart.provenance,
|
|
209
|
+
division: chart.division,
|
|
210
|
+
houses: chartHouses,
|
|
211
|
+
angles: ChartAngles.make({
|
|
212
|
+
ascendant: CircleAngle.make(normalizeAngle(houses.ascendant)),
|
|
213
|
+
mc: CircleAngle.make(normalizeAngle(houses.mc)),
|
|
214
|
+
armc: CircleAngle.make(normalizeAngle(houses.armc)),
|
|
215
|
+
vertex: CircleAngle.make(normalizeAngle(houses.vertex)),
|
|
216
|
+
equatorialAscendant: CircleAngle.make(normalizeAngle(houses.equatorialAscendant)),
|
|
217
|
+
coAscendant1: CircleAngle.make(normalizeAngle(houses.coAscendant1)),
|
|
218
|
+
coAscendant2: CircleAngle.make(normalizeAngle(houses.coAscendant2)),
|
|
219
|
+
polarAscendant: CircleAngle.make(normalizeAngle(houses.polarAscendant)),
|
|
220
|
+
}),
|
|
221
|
+
...significations,
|
|
222
|
+
});
|
|
223
|
+
});
|
|
224
|
+
//# sourceMappingURL=calculate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calculate.js","sourceRoot":"","sources":["../../src/chart/calculate.ts"],"names":[],"mappings":"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"}
|
package/dist/chart/charts.d.ts
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
2
|
import { ChartCalculationError } from "./error.js";
|
|
3
3
|
import { Chart, type Placements } from "./model.js";
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Projects D1 plus requested divisional charts from shared Placements. D1 is
|
|
6
|
+
* always first; duplicate requests are removed and remaining divisions sort in
|
|
7
|
+
* ascending numeric order, preserving a stable calculation result.
|
|
8
|
+
* Optional sex metadata is copied unchanged into every projected chart.
|
|
9
|
+
*/
|
|
10
|
+
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, sex?: "Female" | "Male" | undefined) => Effect.Effect<[Chart, ...Chart[]], ChartCalculationError, never>;
|
|
5
11
|
//# sourceMappingURL=charts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"charts.d.ts","sourceRoot":"","sources":["../../src/chart/charts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAiC,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"charts.d.ts","sourceRoot":"","sources":["../../src/chart/charts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAiC,MAAM,QAAQ,CAAC;AAItE,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAGnD,OAAO,EACL,KAAK,EAKL,KAAK,UAAU,EAKhB,MAAM,YAAY,CAAC;AAkGpB;;;;;GAKG;AACH,eAAO,MAAM,OAAO,iPAmBnB,CAAC"}
|
package/dist/chart/charts.js
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
import { Array, Effect, Order, pipe, Record as Struct } from "effect";
|
|
2
|
-
import {
|
|
2
|
+
import { methods } from "../provenance.js";
|
|
3
|
+
import { getDivisionalTarget } from "./divisional-mapping/index.js";
|
|
3
4
|
import { ChartCalculationError } from "./error.js";
|
|
4
5
|
import { inSignStatus } from "./helper.js";
|
|
5
6
|
import { SIGN_LORDS } from "./internal/constants.js";
|
|
6
7
|
import { Chart, House, Houses, Lagna, Planet, Rashis, Sign, } from "./model.js";
|
|
7
|
-
|
|
8
|
+
/**
|
|
9
|
+
* Assembles a Whole Sign chart from division-mapped Lagna and planet positions.
|
|
10
|
+
* House one is the mapped Lagna sign and every following house advances one sign.
|
|
11
|
+
*/
|
|
12
|
+
function chartFromMappedPlacements({ division, lagna, planets, sex, }) {
|
|
8
13
|
const lagnaSignIndex = Rashis.literals.indexOf(lagna.sign.name);
|
|
9
14
|
const houses = Struct.fromEntries(Array.range(0, 11).map((index) => {
|
|
10
15
|
const house = (index + 1);
|
|
@@ -19,15 +24,14 @@ function chartFromMappedPlacements({ division, lagna, planets, }) {
|
|
|
19
24
|
];
|
|
20
25
|
}));
|
|
21
26
|
return Chart.make({
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
version: "1",
|
|
25
|
-
},
|
|
27
|
+
...(sex === undefined ? {} : { sex }),
|
|
28
|
+
provenance: methods.chartProjection.provenance,
|
|
26
29
|
division,
|
|
27
30
|
houses,
|
|
28
31
|
});
|
|
29
32
|
}
|
|
30
|
-
|
|
33
|
+
/** Maps canonical D1 Placements into one requested division before house assembly. */
|
|
34
|
+
const chartFromPlacements = Effect.fn("astro-ascendant/chart/chartFromPlacements")(function* (placements, division, sex) {
|
|
31
35
|
const lagna = yield* getDivisionalTarget(placements.lagna.longitude, division).pipe(Effect.map((mapped) => {
|
|
32
36
|
const mappedSign = Array.getUnsafe(Rashis.literals, mapped.signIndex);
|
|
33
37
|
return Lagna.make({
|
|
@@ -47,24 +51,30 @@ const chartFromPlacements = Effect.fn("astro-ascendant/chart/chartFromPlacements
|
|
|
47
51
|
longitude: mapped.longitude,
|
|
48
52
|
degree: mapped.degree,
|
|
49
53
|
is_retrograde: source.is_retrograde,
|
|
50
|
-
in_sign: inSignStatus(source.name,
|
|
54
|
+
in_sign: inSignStatus(source.name, mapped.longitude),
|
|
51
55
|
sign: Sign.make({
|
|
52
56
|
name: mappedSign,
|
|
53
57
|
lord: SIGN_LORDS[mappedSign],
|
|
54
58
|
}),
|
|
55
59
|
});
|
|
56
60
|
}))), { concurrency: "unbounded" });
|
|
57
|
-
return chartFromMappedPlacements({ division, lagna, planets });
|
|
61
|
+
return chartFromMappedPlacements({ division, lagna, planets, sex });
|
|
58
62
|
});
|
|
59
63
|
function requestedDivisions(divisions) {
|
|
60
64
|
const requested = pipe(divisions, Array.filter((division) => division !== 1), Array.dedupe, Array.sort(Order.Number));
|
|
61
65
|
return [1, ...requested];
|
|
62
66
|
}
|
|
63
|
-
|
|
67
|
+
/**
|
|
68
|
+
* Projects D1 plus requested divisional charts from shared Placements. D1 is
|
|
69
|
+
* always first; duplicate requests are removed and remaining divisions sort in
|
|
70
|
+
* ascending numeric order, preserving a stable calculation result.
|
|
71
|
+
* Optional sex metadata is copied unchanged into every projected chart.
|
|
72
|
+
*/
|
|
73
|
+
export const project = Effect.fn("astro-ascendant/chart/project")(function* (placements, divisions = [], sex) {
|
|
64
74
|
const requested = requestedDivisions(divisions);
|
|
65
75
|
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" });
|
|
76
|
+
const firstChart = yield* chartFromPlacements(placements, firstDivision, sex);
|
|
77
|
+
const remainingCharts = yield* Effect.all(remainingDivisions.map((division) => chartFromPlacements(placements, division, sex)), { concurrency: "unbounded" });
|
|
68
78
|
return [firstChart, ...remainingCharts];
|
|
69
79
|
}, Effect.mapError((cause) => ChartCalculationError.make({
|
|
70
80
|
stage: "mapping",
|
package/dist/chart/charts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"charts.js","sourceRoot":"","sources":["../../src/chart/charts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEtE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"charts.js","sourceRoot":"","sources":["../../src/chart/charts.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=cusp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cusp.d.ts","sourceRoot":"","sources":["../../src/chart/cusp.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,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,CAgBpC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Array, Function, Option } 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) => planets.reduce((planetsByHouse, planet) => {
|
|
11
|
+
const houseIndex = houseFor(planet.longitude, cusps, spans);
|
|
12
|
+
return Option.match(Array.get(houseIndex)(planetsByHouse), {
|
|
13
|
+
onNone: () => planetsByHouse,
|
|
14
|
+
onSome: (housePlanets) => Option.getOrElse(Array.modify(planetsByHouse, houseIndex, () => [...housePlanets, planet]), () => planetsByHouse),
|
|
15
|
+
});
|
|
16
|
+
}, Array.replicate(12)([])));
|
|
17
|
+
//# sourceMappingURL=cusp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cusp.js","sourceRoot":"","sources":["../../src/chart/cusp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIjD,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,CAC7B,OAAO,CAAC,MAAM,CACZ,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE;IACzB,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAC5D,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,cAAc,CAAC,EAAE;QACzD,MAAM,EAAE,GAAG,EAAE,CAAC,cAAc;QAC5B,MAAM,EAAE,CAAC,YAAY,EAAE,EAAE,CACvB,MAAM,CAAC,SAAS,CACd,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,YAAY,EAAE,MAAM,CAAC,CAAC,EACzE,GAAG,EAAE,CAAC,cAAc,CACrB;KACJ,CAAC,CAAC;AACL,CAAC,EACD,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAuB,CAAC,CAC7C,CACF,CAAC"}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
2
|
import { DivisionalMappingError } from "./error.js";
|
|
3
|
-
|
|
3
|
+
/** Normalizes an arbitrary longitude into the half-open sidereal zodiac. */
|
|
4
4
|
export declare const normalizeLongitude: (longitude: number) => Effect.Effect<number & import("effect/Brand").Brand<"Longitude">, DivisionalMappingError, never>;
|
|
5
|
+
/**
|
|
6
|
+
* Maps a D1 longitude into a supported divisional chart. D1 preserves the
|
|
7
|
+
* normalized source position; other divisions select a source-sign subdivision
|
|
8
|
+
* and apply that division's classical target-sign rule.
|
|
9
|
+
*/
|
|
5
10
|
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
11
|
//# sourceMappingURL=calculate.d.ts.map
|
|
@@ -1 +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,
|
|
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,4EAA4E;AAC5E,eAAO,MAAM,kBAAkB,yHAe9B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,+LAa/B,CAAC"}
|