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.
Files changed (227) hide show
  1. package/README.md +9 -69
  2. package/dist/chart/bhava/calculate.d.ts +5 -0
  3. package/dist/chart/bhava/calculate.d.ts.map +1 -1
  4. package/dist/chart/bhava/calculate.js +5 -0
  5. package/dist/chart/bhava/calculate.js.map +1 -1
  6. package/dist/chart/calculate.d.ts +13 -0
  7. package/dist/chart/calculate.d.ts.map +1 -0
  8. package/dist/chart/calculate.js +224 -0
  9. package/dist/chart/calculate.js.map +1 -0
  10. package/dist/chart/charts.d.ts +7 -1
  11. package/dist/chart/charts.d.ts.map +1 -1
  12. package/dist/chart/charts.js +22 -12
  13. package/dist/chart/charts.js.map +1 -1
  14. package/dist/chart/cusp.d.ts +6 -0
  15. package/dist/chart/cusp.d.ts.map +1 -0
  16. package/dist/chart/cusp.js +17 -0
  17. package/dist/chart/cusp.js.map +1 -0
  18. package/dist/chart/divisional-mapping/calculate.d.ts +6 -1
  19. package/dist/chart/divisional-mapping/calculate.d.ts.map +1 -1
  20. package/dist/chart/divisional-mapping/calculate.js +6 -1
  21. package/dist/chart/divisional-mapping/calculate.js.map +1 -1
  22. package/dist/chart/divisional-mapping/helper.d.ts +10 -0
  23. package/dist/chart/divisional-mapping/helper.d.ts.map +1 -1
  24. package/dist/chart/divisional-mapping/helper.js +10 -0
  25. package/dist/chart/divisional-mapping/helper.js.map +1 -1
  26. package/dist/chart/generate.d.ts +8 -2
  27. package/dist/chart/generate.d.ts.map +1 -1
  28. package/dist/chart/generate.js +24 -6
  29. package/dist/chart/generate.js.map +1 -1
  30. package/dist/chart/helper.d.ts +1 -0
  31. package/dist/chart/helper.d.ts.map +1 -1
  32. package/dist/chart/helper.js +20 -2
  33. package/dist/chart/helper.js.map +1 -1
  34. package/dist/chart/internal/constants.d.ts +11 -0
  35. package/dist/chart/internal/constants.d.ts.map +1 -1
  36. package/dist/chart/internal/constants.js +11 -0
  37. package/dist/chart/internal/constants.js.map +1 -1
  38. package/dist/chart/model.d.ts +63 -29
  39. package/dist/chart/model.d.ts.map +1 -1
  40. package/dist/chart/model.js +50 -18
  41. package/dist/chart/model.js.map +1 -1
  42. package/dist/chart/placements.d.ts +5 -0
  43. package/dist/chart/placements.d.ts.map +1 -1
  44. package/dist/chart/placements.js +11 -6
  45. package/dist/chart/placements.js.map +1 -1
  46. package/dist/dasha/calculate-chara.d.ts +29 -0
  47. package/dist/dasha/calculate-chara.d.ts.map +1 -0
  48. package/dist/dasha/calculate-chara.js +115 -0
  49. package/dist/dasha/calculate-chara.js.map +1 -0
  50. package/dist/dasha/calculate-sthira.d.ts +87 -0
  51. package/dist/dasha/calculate-sthira.d.ts.map +1 -0
  52. package/dist/dasha/calculate-sthira.js +234 -0
  53. package/dist/dasha/calculate-sthira.js.map +1 -0
  54. package/dist/dasha/calculate.d.ts +10 -5
  55. package/dist/dasha/calculate.d.ts.map +1 -1
  56. package/dist/dasha/calculate.js +10 -27
  57. package/dist/dasha/calculate.js.map +1 -1
  58. package/dist/dasha/calendar.d.ts +12 -0
  59. package/dist/dasha/calendar.d.ts.map +1 -0
  60. package/dist/dasha/calendar.js +31 -0
  61. package/dist/dasha/calendar.js.map +1 -0
  62. package/dist/dasha/chara/calculate.d.ts +29 -0
  63. package/dist/dasha/chara/calculate.d.ts.map +1 -0
  64. package/dist/dasha/chara/calculate.js +115 -0
  65. package/dist/dasha/chara/calculate.js.map +1 -0
  66. package/dist/dasha/chara/index.d.ts +4 -0
  67. package/dist/dasha/chara/index.d.ts.map +1 -0
  68. package/dist/dasha/chara/index.js +4 -0
  69. package/dist/dasha/chara/index.js.map +1 -0
  70. package/dist/dasha/error.d.ts +8 -0
  71. package/dist/dasha/error.d.ts.map +1 -1
  72. package/dist/dasha/error.js +8 -0
  73. package/dist/dasha/error.js.map +1 -1
  74. package/dist/dasha/evidence.d.ts +5 -0
  75. package/dist/dasha/evidence.d.ts.map +1 -0
  76. package/dist/dasha/evidence.js +16 -0
  77. package/dist/dasha/evidence.js.map +1 -0
  78. package/dist/dasha/index.d.ts +8 -2
  79. package/dist/dasha/index.d.ts.map +1 -1
  80. package/dist/dasha/index.js +8 -2
  81. package/dist/dasha/index.js.map +1 -1
  82. package/dist/dasha/model.d.ts +327 -0
  83. package/dist/dasha/model.d.ts.map +1 -1
  84. package/dist/dasha/model.js +83 -1
  85. package/dist/dasha/model.js.map +1 -1
  86. package/dist/dasha/rashi-internal.d.ts +18 -0
  87. package/dist/dasha/rashi-internal.d.ts.map +1 -0
  88. package/dist/dasha/rashi-internal.js +41 -0
  89. package/dist/dasha/rashi-internal.js.map +1 -0
  90. package/dist/dasha/rashi-query.d.ts +114 -0
  91. package/dist/dasha/rashi-query.d.ts.map +1 -0
  92. package/dist/dasha/rashi-query.js +23 -0
  93. package/dist/dasha/rashi-query.js.map +1 -0
  94. package/dist/dasha/sthira/calculate.d.ts +87 -0
  95. package/dist/dasha/sthira/calculate.d.ts.map +1 -0
  96. package/dist/dasha/sthira/calculate.js +234 -0
  97. package/dist/dasha/sthira/calculate.js.map +1 -0
  98. package/dist/dasha/sthira/index.d.ts +5 -0
  99. package/dist/dasha/sthira/index.d.ts.map +1 -0
  100. package/dist/dasha/sthira/index.js +4 -0
  101. package/dist/dasha/sthira/index.js.map +1 -0
  102. package/dist/dasha/vimshottari/calculate.d.ts +20 -0
  103. package/dist/dasha/vimshottari/calculate.d.ts.map +1 -0
  104. package/dist/dasha/vimshottari/calculate.js +89 -0
  105. package/dist/dasha/vimshottari/calculate.js.map +1 -0
  106. package/dist/dasha/vimshottari/index.d.ts +4 -0
  107. package/dist/dasha/vimshottari/index.d.ts.map +1 -0
  108. package/dist/dasha/vimshottari/index.js +4 -0
  109. package/dist/dasha/vimshottari/index.js.map +1 -0
  110. package/dist/dasha/vimshottari/query.d.ts +31 -0
  111. package/dist/dasha/vimshottari/query.d.ts.map +1 -0
  112. package/dist/dasha/vimshottari/query.js +19 -0
  113. package/dist/dasha/vimshottari/query.js.map +1 -0
  114. package/dist/index.d.ts +1 -1
  115. package/dist/index.d.ts.map +1 -1
  116. package/dist/index.js +1 -1
  117. package/dist/index.js.map +1 -1
  118. package/dist/jaimini/argala/calculate.d.ts +8 -3
  119. package/dist/jaimini/argala/calculate.d.ts.map +1 -1
  120. package/dist/jaimini/argala/calculate.js +7 -5
  121. package/dist/jaimini/argala/calculate.js.map +1 -1
  122. package/dist/jaimini/argala/model.d.ts +1 -8
  123. package/dist/jaimini/argala/model.d.ts.map +1 -1
  124. package/dist/jaimini/argala/model.js +3 -6
  125. package/dist/jaimini/argala/model.js.map +1 -1
  126. package/dist/jaimini/arudha-pada/calculate.d.ts +8 -3
  127. package/dist/jaimini/arudha-pada/calculate.d.ts.map +1 -1
  128. package/dist/jaimini/arudha-pada/calculate.js +8 -6
  129. package/dist/jaimini/arudha-pada/calculate.js.map +1 -1
  130. package/dist/jaimini/arudha-pada/model.d.ts +1 -8
  131. package/dist/jaimini/arudha-pada/model.d.ts.map +1 -1
  132. package/dist/jaimini/arudha-pada/model.js +3 -6
  133. package/dist/jaimini/arudha-pada/model.js.map +1 -1
  134. package/dist/jaimini/chara-karakas/calculate.d.ts +8 -3
  135. package/dist/jaimini/chara-karakas/calculate.d.ts.map +1 -1
  136. package/dist/jaimini/chara-karakas/calculate.js +8 -6
  137. package/dist/jaimini/chara-karakas/calculate.js.map +1 -1
  138. package/dist/jaimini/chara-karakas/helper.d.ts +5 -0
  139. package/dist/jaimini/chara-karakas/helper.d.ts.map +1 -1
  140. package/dist/jaimini/chara-karakas/helper.js +5 -0
  141. package/dist/jaimini/chara-karakas/helper.js.map +1 -1
  142. package/dist/jaimini/chara-karakas/model.d.ts +1 -8
  143. package/dist/jaimini/chara-karakas/model.d.ts.map +1 -1
  144. package/dist/jaimini/chara-karakas/model.js +3 -6
  145. package/dist/jaimini/chara-karakas/model.js.map +1 -1
  146. package/dist/jaimini/karakamsha/calculate.d.ts +8 -3
  147. package/dist/jaimini/karakamsha/calculate.d.ts.map +1 -1
  148. package/dist/jaimini/karakamsha/calculate.js +9 -7
  149. package/dist/jaimini/karakamsha/calculate.js.map +1 -1
  150. package/dist/jaimini/karakamsha/model.d.ts +1 -8
  151. package/dist/jaimini/karakamsha/model.d.ts.map +1 -1
  152. package/dist/jaimini/karakamsha/model.js +3 -6
  153. package/dist/jaimini/karakamsha/model.js.map +1 -1
  154. package/dist/jaimini/rashi-drishti/calculate.d.ts +7 -3
  155. package/dist/jaimini/rashi-drishti/calculate.d.ts.map +1 -1
  156. package/dist/jaimini/rashi-drishti/calculate.js +6 -6
  157. package/dist/jaimini/rashi-drishti/calculate.js.map +1 -1
  158. package/dist/jaimini/rashi-drishti/helper.d.ts +5 -0
  159. package/dist/jaimini/rashi-drishti/helper.d.ts.map +1 -1
  160. package/dist/jaimini/rashi-drishti/helper.js +5 -0
  161. package/dist/jaimini/rashi-drishti/helper.js.map +1 -1
  162. package/dist/jaimini/rashi-drishti/model.d.ts +1 -7
  163. package/dist/jaimini/rashi-drishti/model.d.ts.map +1 -1
  164. package/dist/jaimini/rashi-drishti/model.js +3 -6
  165. package/dist/jaimini/rashi-drishti/model.js.map +1 -1
  166. package/dist/jaimini/upapada/calculate.d.ts +8 -3
  167. package/dist/jaimini/upapada/calculate.d.ts.map +1 -1
  168. package/dist/jaimini/upapada/calculate.js +7 -6
  169. package/dist/jaimini/upapada/calculate.js.map +1 -1
  170. package/dist/jaimini/upapada/helper.d.ts +3 -3
  171. package/dist/jaimini/upapada/model.d.ts +1 -8
  172. package/dist/jaimini/upapada/model.d.ts.map +1 -1
  173. package/dist/jaimini/upapada/model.js +3 -6
  174. package/dist/jaimini/upapada/model.js.map +1 -1
  175. package/dist/provenance.d.ts +241 -0
  176. package/dist/provenance.d.ts.map +1 -0
  177. package/dist/provenance.js +172 -0
  178. package/dist/provenance.js.map +1 -0
  179. package/dist/sav/calculate.d.ts +5 -0
  180. package/dist/sav/calculate.d.ts.map +1 -1
  181. package/dist/sav/calculate.js +19 -0
  182. package/dist/sav/calculate.js.map +1 -1
  183. package/package.json +31 -12
  184. package/dist/yoga/calculate.d.ts +0 -9
  185. package/dist/yoga/calculate.d.ts.map +0 -1
  186. package/dist/yoga/calculate.js +0 -48
  187. package/dist/yoga/calculate.js.map +0 -1
  188. package/dist/yoga/catalog.d.ts +0 -7
  189. package/dist/yoga/catalog.d.ts.map +0 -1
  190. package/dist/yoga/catalog.js +0 -129
  191. package/dist/yoga/catalog.js.map +0 -1
  192. package/dist/yoga/definitions/house-patterns.d.ts +0 -42
  193. package/dist/yoga/definitions/house-patterns.d.ts.map +0 -1
  194. package/dist/yoga/definitions/house-patterns.js +0 -73
  195. package/dist/yoga/definitions/house-patterns.js.map +0 -1
  196. package/dist/yoga/definitions/moon-relative.d.ts +0 -94
  197. package/dist/yoga/definitions/moon-relative.d.ts.map +0 -1
  198. package/dist/yoga/definitions/moon-relative.js +0 -123
  199. package/dist/yoga/definitions/moon-relative.js.map +0 -1
  200. package/dist/yoga/error.d.ts +0 -38
  201. package/dist/yoga/error.d.ts.map +0 -1
  202. package/dist/yoga/error.js +0 -37
  203. package/dist/yoga/error.js.map +0 -1
  204. package/dist/yoga/evaluate.d.ts +0 -36
  205. package/dist/yoga/evaluate.d.ts.map +0 -1
  206. package/dist/yoga/evaluate.js +0 -173
  207. package/dist/yoga/evaluate.js.map +0 -1
  208. package/dist/yoga/format.d.ts +0 -3
  209. package/dist/yoga/format.d.ts.map +0 -1
  210. package/dist/yoga/format.js +0 -5
  211. package/dist/yoga/format.js.map +0 -1
  212. package/dist/yoga/index.d.ts +0 -6
  213. package/dist/yoga/index.d.ts.map +0 -1
  214. package/dist/yoga/index.js +0 -6
  215. package/dist/yoga/index.js.map +0 -1
  216. package/dist/yoga/internal.d.ts +0 -274
  217. package/dist/yoga/internal.d.ts.map +0 -1
  218. package/dist/yoga/internal.js +0 -4
  219. package/dist/yoga/internal.js.map +0 -1
  220. package/dist/yoga/model.d.ts +0 -107
  221. package/dist/yoga/model.d.ts.map +0 -1
  222. package/dist/yoga/model.js +0 -66
  223. package/dist/yoga/model.js.map +0 -1
  224. package/dist/yoga/provenance.d.ts +0 -3
  225. package/dist/yoga/provenance.d.ts.map +0 -1
  226. package/dist/yoga/provenance.js +0 -5
  227. 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, Yogas, 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.
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.LocatedMoment.make({
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. `calculation.bhava` contains the cusp-defined house projection.
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, plus a configured Bhava chart
52
- - **Vimshottari Dasha**: Mahadasha and Antardasha timelines with date queries
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
- For example, derive Dasha and Ashtakavarga from an existing chart without repeating ephemeris work:
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. Run the non-gating Yoga benchmark with `bun run benchmark:yoga`; its methodology is documented in [benchmarks/README.md](benchmarks/README.md).
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":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EACL,WAAW,EACX,UAAU,EACV,UAAU,EACV,WAAW,EACX,WAAW,EAEX,SAAS,GACV,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEjF,MAAM,aAAa,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAU,CAAC;AAEvE,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,EAAE,CAAC,2BAA2B,CAAC,CAAC,QAAQ,CAAC,EAChF,MAAiB,EACjB,EAAS;IAET,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG;QAChB,MAAM,CAAC,SAAS;QAChB,MAAM,CAAC,EAAE;QACT,MAAM,CAAC,IAAI;QACX,MAAM,CAAC,MAAM;QACb,MAAM,CAAC,mBAAmB;QAC1B,MAAM,CAAC,YAAY;QACnB,MAAM,CAAC,YAAY;QACnB,MAAM,CAAC,cAAc;KACtB,CAAC;IAEF,IACE,QAAQ,CAAC,MAAM,KAAK,aAAa,CAAC,MAAM;QACxC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC/C,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAClD,CAAC;QACD,OAAO,KAAK,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC;YACvC,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,iCAAiC;YAC1C,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;IACL,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACtC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QACnD,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;IAClE,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;QAC1E,OAAO,KAAK,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC;YACvC,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,iCAAiC;YAC1C,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3E,MAAM,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACjC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,KAAK,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC;YACvC,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,iCAAiC;YAC1C,KAAK,EAAE,EAAE;SACV,CAAC,CAAC;IACL,CAAC;IAED,MAAM,cAAc,GAAG,iBAAiB,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAEhE,MAAM,iBAAiB,GAAyC,EAAE,CAAC;IACnE,KAAK,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,aAAa,CAAC,OAAO,EAAE,EAAE,CAAC;QAC3D,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,MAAM,YAAY,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,IAAI,KAAK,SAAS,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YACrD,OAAO,KAAK,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC;gBACvC,KAAK,EAAE,SAAS;gBAChB,OAAO,EAAE,iCAAiC;gBAC1C,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,CAAC,CAAC;QACL,CAAC;QACD,iBAAiB,CAAC,IAAI,CAAC;YACrB,MAAM,CAAC,WAAW,CAAC;YACnB,UAAU,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC1B,OAAO,EAAE,YAAY;gBACrB,KAAK,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;aAClC,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAChE,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,CACtC,CAAC,IAAI,CACJ,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,qBAAqB,CAAC,IAAI,CAAC;QACzB,KAAK,EAAE,SAAS;QAChB,OAAO,EAAE,iCAAiC;QAC1C,KAAK;KACN,CAAC,CACH,CACF,CAAC;IAEF,OAAO,UAAU,CAAC,IAAI,CAAC;QACrB,MAAM,EAAE,WAAW;QACnB,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC;YACvB,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC7D,EAAE,EAAE,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC/C,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACnD,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACvD,mBAAmB,EAAE,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;YACjF,YAAY,EAAE,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACnE,YAAY,EAAE,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACnE,cAAc,EAAE,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;SACxE,CAAC;KACH,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
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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"}
@@ -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
- 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>;
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;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"}
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"}
@@ -1,10 +1,15 @@
1
1
  import { Array, Effect, Order, pipe, Record as Struct } from "effect";
2
- import { getDivisionalTarget } from "./divisional-mapping/calculate.js";
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
- function chartFromMappedPlacements({ division, lagna, planets, }) {
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
- provenance: {
23
- method: "ascendant-divisional-mapping",
24
- version: "1",
25
- },
27
+ ...(sex === undefined ? {} : { sex }),
28
+ provenance: methods.chartProjection.provenance,
26
29
  division,
27
30
  houses,
28
31
  });
29
32
  }
30
- const chartFromPlacements = Effect.fn("astro-ascendant/chart/chartFromPlacements")(function* (placements, division) {
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, source.longitude),
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
- export const project = Effect.fn("astro-ascendant/chart/project")(function* (placements, divisions = []) {
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",
@@ -1 +1 @@
1
- {"version":3,"file":"charts.js","sourceRoot":"","sources":["../../src/chart/charts.ts"],"names":[],"mappings":"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"}
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
- export declare const DIVISIONAL_MAPPING: "ascendant-divisional-mapping";
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,eAAO,MAAM,kBAAkB,EAAG,8BAAuC,CAAC;AAE1E,eAAO,MAAM,kBAAkB,yHAe9B,CAAC;AAEF,eAAO,MAAM,mBAAmB,+LAa/B,CAAC"}
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"}