chart2txt 0.7.0 → 0.7.1
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 +2 -0
- package/dist/chart2txt.min.js +1 -1
- package/dist/config/ChartSettings.d.ts +2 -4
- package/dist/config/ChartSettings.js +0 -14
- package/dist/constants.js +2 -0
- package/dist/core/analysis.js +4 -2
- package/dist/core/dispositors.d.ts +3 -2
- package/dist/core/dispositors.js +127 -15
- package/dist/core/signDistributions.js +6 -3
- package/dist/formatters/text/sections/dispositors.d.ts +1 -1
- package/dist/formatters/text/sections/dispositors.js +6 -1
- package/dist/formatters/text/textFormatter.js +7 -3
- package/dist/types.d.ts +2 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -121,6 +121,8 @@ The `Settings` object is composed of three parts:
|
|
|
121
121
|
* `skipOutOfSignAspects`: `boolean`
|
|
122
122
|
* `includeAspectPatterns`: `boolean`
|
|
123
123
|
* `includeSignDistributions`: `boolean`
|
|
124
|
+
* `includeDispositors`: `boolean | 'finals'` - Controls dispositor tree output. `true` shows all chains, `false` disables, `'finals'` shows only final dispositors and deduplicated cycles.
|
|
125
|
+
* `includeHouseOverlays`: `boolean` - Controls house overlays section in synastry charts.
|
|
124
126
|
* **`GroupingSettings`**: For `groupAspects()` or the simple `chart2txt()` workflow.
|
|
125
127
|
* `aspectStrengthThresholds`: An object to define orb limits for default grouping, e.g., `{ tight: 2.0, moderate: 4.0 }`.
|
|
126
128
|
* **`FormattingSettings`**: For `formatReportToText()`
|
package/dist/chart2txt.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.chart2txt=t():e.chart2txt=t()}(this,(()=>(()=>{"use strict";var e={6:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.analyzeCharts=function(e,t={}){const n=(0,i.validateInputData)(e);if(n)throw new Error(`Invalid chart data: ${n}`);const b=new a.ChartSettings(t),y=(0,r.isMultiChartData)(e)?e:[e],T=y.filter((e=>"transit"!==e.chartType)),O=y.find((e=>"transit"===e.chartType)),M=[...T,...O?[O]:[]],_=[],D=d(M,!0);for(const e of M){const t=d([e]),n=(0,s.calculateAspects)(b.resolvedAspectDefinitions,t,b.skipOutOfSignAspects);_.push(...n)}for(let e=0;e<M.length;e++)for(let t=e+1;t<M.length;t++){const n=M[t],r=[...d([M[e]]),...d([n])],a=(0,s.calculateMultichartAspects)(b.resolvedAspectDefinitions,r,b.skipOutOfSignAspects);_.push(...a)}const E=b.includeAspectPatterns?(0,o.detectAspectPatterns)(D,_):[],C=[],v=[],$=[];let P,I;for(const e of M){const t=_.filter((t=>t.p1ChartName===e.name&&t.p2ChartName===e.name)),n=S(E,1,1).filter((t=>A(t,e.name))),r=b.includeAspectPatterns?(0,u.detectStelliums)(h(e),e.houseCusps):[];C.push({chart:e,placements:{planets:(0,c.getPlanetPositions)(e.planets,e.houseCusps)},aspects:t,patterns:n,stelliums:r,signDistributions:b.includeSignDistributions?(0,l.calculateSignDistributions)(e.planets,e.ascendant):{elements:{},modalities:{},polarities:{}},dispositors:"transit"!==e.chartType?(0,p.calculateDispositors)(e.planets):{}})}if(T.length>=2)for(let e=0;e<T.length;e++)for(let t=e+1;t<T.length;t++){const n=T[e],r=T[t],a=_.filter((e=>e.p1ChartName===n.name&&e.p2ChartName===r.name||e.p1ChartName===r.name&&e.p2ChartName===n.name)),i=S(E,2,2).filter((e=>A(e,n.name)&&A(e,r.name)));v.push({chart1:n,chart2:r,synastryAspects:a,compositePatterns:i,houseOverlays:(0,f.calculateHouseOverlays)(n,r)})}if(T.length>2){const e=S(E,3).filter((e=>!g(e).has(O?.name||"TRANSIT_PLACEHOLDER")));e.length>0&&(P={charts:T,patterns:e})}if(O){for(const e of T){const t=_.filter((t=>t.p1ChartName===e.name&&t.p2ChartName===O.name||t.p1ChartName===O.name&&t.p2ChartName===e.name)),n=S(E,2,2).filter((t=>A(t,e.name)&&A(t,O.name)));$.push({natalChart:e,transitChart:O,aspects:t,patterns:n})}if(T.length>0){const e=(N=E,j=[O.name],N.filter((e=>j.some((t=>A(e,t)))))).filter((e=>m(e)>=3));e.length>0&&(I={charts:M,patterns:e})}}var N,j;return{settings:b,chartAnalyses:C,pairwiseAnalyses:v,globalAnalysis:P,transitAnalyses:$,globalTransitAnalysis:I}};const r=n(613),a=n(230),i=n(371),s=n(75),o=n(919),u=n(390),c=n(175),l=n(858),p=n(729),f=n(600);function h(e){const t=["Ascendant","Midheaven","North Node","South Node"];return e.planets.filter((e=>!t.includes(e.name)))}function d(e,t=!1){return e.flatMap((e=>(t?h(e):function(e){const t=[...e.planets];return void 0!==e.ascendant&&t.push({name:"Ascendant",degree:e.ascendant}),void 0!==e.midheaven&&t.push({name:"Midheaven",degree:e.midheaven}),t}(e)).map((t=>[t,e.name]))))}function g(e){const t=new Set,n=[],r=e=>{e&&n.push(e)};switch(e.type){case"T-Square":r(e.apex),e.opposition.forEach(r);break;case"Grand Trine":case"Grand Cross":e.planets.forEach(r);break;case"Yod":r(e.apex),e.base.forEach(r);break;case"Mystic Rectangle":e.oppositions.flat().forEach(r);break;case"Kite":e.grandTrine.forEach(r),r(e.opposition)}return n.forEach((e=>{e.chartName&&t.add(e.chartName)})),t}function m(e){return g(e).size}function A(e,t){return g(e).has(t)}function S(e,t,n=1/0){return e.filter((e=>{const r=m(e);return r>=t&&r<=n}))}},75:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.calculateAspects=function(e,t,n=!0){const r=[];if(!t||t.length<2)return r;for(let a=0;a<t.length;a++)for(let i=a+1;i<t.length;i++){const[s,u]=t[a],[c,l]=t[i],p=o(e,s,c,n,u,l);p&&r.push(p)}return r},t.calculateMultichartAspects=function(e,t,n=!0){const r=[];for(let a=0;a<t.length;a++)for(let i=a+1;i<t.length;i++){const[s,u]=t[a],[c,l]=t[i];if(u!==l){const t=o(e,s,c,n,u,l);t&&r.push(t)}}return r};const r=n(904),a=n(318);function i(e){const t=e<=180?e:360-e;switch(t){case 0:return 0;case 30:return 1;case 60:return 2;case 90:return 3;case 120:return 4;case 150:return 5;case 180:return 6;default:return Math.round(t/30)}}function s(e,t,n){if(void 0===e.speed||void 0===t.speed)return"exact";const i=e.speed,s=t.speed,o=(0,r.normalizeDegree)(e.degree),u=(0,r.normalizeDegree)(t.degree);let c=Math.abs(o-u);c>180&&(c=360-c);const l=Math.abs(c-n);if((0,a.isExactAspect)(l))return"exact";if(0===i-s)return"exact";const p=(0,r.normalizeDegree)(o+.1*i),f=(0,r.normalizeDegree)(u+.1*s),h=Math.abs(c-n);let d=Math.abs(p-f);d>180&&(d=360-d);return Math.abs(d-n)<h?"applying":"separating"}function o(e,t,n,o,u,c){const l=(0,a.roundDegrees)((0,r.normalizeDegree)(t.degree)),p=(0,a.roundDegrees)((0,r.normalizeDegree)(n.degree));let f=Math.abs(l-p);f>180&&(f=360-f);let h=null;for(const r of e){const e=(0,a.roundDegrees)(Math.abs(f-r.angle));if(o){const e=Math.floor(l/30),t=Math.floor(p/30),n=i(r.angle);let a=Math.abs(e-t);if(a>6&&(a=12-a),a!==n)continue}if(e<=r.orb&&(!h||e<h.orb)){const a=s(t,n,r.angle);h={planetA:t.name,planetB:n.name,p1ChartName:u,p2ChartName:c,aspectType:r.name,orb:e,application:a}}}return h}},82:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateDispositorsOutput=function(e){const t=["[DISPOSITOR TREE]"];if(0===Object.keys(e).length)return t.push("No dispositor data available."),t;for(const n in e)t.push(e[n]);return t}},109:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateElementDistributionOutput=function(e){const t=["[ELEMENT DISTRIBUTION]"];return t.push(...(0,r.formatElementDistribution)(e)),t},t.generateModalityDistributionOutput=function(e){const t=["[MODALITY DISTRIBUTION]"];return t.push(...(0,r.formatModalityDistribution)(e)),t},t.generatePolarityOutput=function(e){const t=["[POLARITY]"];return t.push(...(0,r.formatPolarityDistribution)(e)),t};const r=n(858)},156:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var a=Object.getOwnPropertyDescriptor(t,n);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,a)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),t.ChartSettings=t.ZODIAC_SIGNS=t.DEFAULT_ASPECTS=t.DEFAULT_SETTINGS=t.formatReportToText=t.groupAspects=t.analyzeCharts=t.chart2txt=void 0;var i=n(666);Object.defineProperty(t,"chart2txt",{enumerable:!0,get:function(){return i.chart2txt}});var s=n(6);Object.defineProperty(t,"analyzeCharts",{enumerable:!0,get:function(){return s.analyzeCharts}});var o=n(865);Object.defineProperty(t,"groupAspects",{enumerable:!0,get:function(){return o.groupAspects}});var u=n(723);Object.defineProperty(t,"formatReportToText",{enumerable:!0,get:function(){return u.formatReportToText}}),a(n(613),t);var c=n(921);Object.defineProperty(t,"DEFAULT_SETTINGS",{enumerable:!0,get:function(){return c.DEFAULT_SETTINGS}}),Object.defineProperty(t,"DEFAULT_ASPECTS",{enumerable:!0,get:function(){return c.DEFAULT_ASPECTS}}),Object.defineProperty(t,"ZODIAC_SIGNS",{enumerable:!0,get:function(){return c.ZODIAC_SIGNS}});var l=n(230);Object.defineProperty(t,"ChartSettings",{enumerable:!0,get:function(){return l.ChartSettings}});const p=n(666);t.default=p.chart2txt},172:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateChartHeaderOutput=function(e,t="CHART"){return[`[${t}: ${e||"Unknown"}]`]}},175:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getOrdinal=function(e){const t=["th","st","nd","rd"],n=e%100;return e+(t[(n-20)%10]||t[n]||t[0])},t.getSign=a,t.getHouse=i,t.getPlanetPositions=function(e,t){return e.map((e=>{const n=(e.degree%360+360)%360;const r={name:e.name,degree:n,sign:a(n),speed:e.speed};return t&&(r.house=i(n,t)),r}))};const r=n(921);function a(e){const t=Math.floor(e/30);return r.ZODIAC_SIGNS[t]}function i(e,t){for(let n=0;n<12;n++){const r=t[n],a=t[(n+1)%12];if(r<a){if(e>=r&&e<a)return n+1}else if(e>=r||e<a)return n+1}return-1}},230:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ChartSettings=void 0;const r=n(921);t.ChartSettings=class{constructor(e={}){const t={...r.DEFAULT_SETTINGS,...e};Object.assign(this,t)}get resolvedAspectDefinitions(){if(Array.isArray(this.aspectDefinitions))return this.aspectDefinitions;switch(this.aspectDefinitions){case"traditional":return r.SIMPLE_TRADITIONAL_ORBS;case"modern":return r.SIMPLE_MODERN_ORBS;case"tight":return r.SIMPLE_TIGHT_ORBS;case"wide":return r.SIMPLE_WIDE_ORBS;default:return r.DEFAULT_SETTINGS.aspectDefinitions}}toJSON(){return{houseSystemName:this.houseSystemName,skipOutOfSignAspects:this.skipOutOfSignAspects,aspectDefinitions:this.aspectDefinitions,aspectStrengthThresholds:this.aspectStrengthThresholds,includeAspectPatterns:this.includeAspectPatterns,includeSignDistributions:this.includeSignDistributions,dateFormat:this.dateFormat}}}},234:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generatePlanetsOutput=function(e){const t=["[PLANETS]"];e.forEach((e=>{const n=(0,a.formatPlanetWithDignities)(e),i=e.speed&&e.speed<0?" Retrograde":"";let s=`${e.name}: ${Math.floor(e.degree%30)}° ${e.sign}${i} ${n}`;e.house&&(s+=`, ${(0,r.getOrdinal)(e.house)} house`),t.push(s.replace(/\s+/g," ").trim())})),0===e.length&&t.push("No planets listed.");return t};const r=n(175),a=n(400)},318:(e,t)=>{function n(e,n,r=t.DEFAULT_EPSILON){return Math.abs(e-n)<r}function r(e,n=t.DEFAULT_EPSILON){return Math.abs(e)<n}function a(e,r,a=t.DEFAULT_EPSILON){return n(e,r,a)}Object.defineProperty(t,"__esModule",{value:!0}),t.DEFAULT_EPSILON=void 0,t.floatEquals=n,t.isNearZero=r,t.roundDegrees=function(e){return Math.round(1e4*e)/1e4},t.degreeEquals=a,t.isOnCusp=function(e,t,n=.001){return a(e,t,n)},t.isExactAspect=function(e,t=.1){return r(e,t)},t.DEFAULT_EPSILON=1e-4},371:(e,t)=>{function n(e){return e&&"object"==typeof e?"string"!=typeof e.name||""===e.name.trim()?"Point name must be a non-empty string":"number"==typeof e.degree&&isFinite(e.degree)?void 0===e.speed||"number"==typeof e.speed&&isFinite(e.speed)?null:`Point ${e.name} has invalid speed value: ${e.speed}`:`Point ${e.name} has invalid degree value: ${e.degree}`:"Point must be an object"}function r(e){if(!Array.isArray(e))return"Points must be an array";for(let t=0;t<e.length;t++){const r=n(e[t]);if(r)return`Point at index ${t}: ${r}`}const t=e.map((e=>e.name)),r=t.filter(((e,n)=>t.indexOf(e)!==n));return r.length>0?`Duplicate point names found: ${r.join(", ")}`:null}function a(e){if(void 0===e)return null;if(!Array.isArray(e))return"House cusps must be an array";if(12!==e.length)return`House cusps must contain exactly 12 values, got ${e.length}`;for(let t=0;t<e.length;t++)if("number"!=typeof e[t]||!isFinite(e[t]))return`House cusp ${t+1} has invalid value: ${e[t]}`;return null}function i(e){if(!e||"object"!=typeof e)return"Chart data must be an object";if("string"!=typeof e.name||""===e.name.trim())return"Chart name must be a non-empty string";const t=r(e.planets);if(t)return`Planets validation failed: ${t}`;if(void 0!==e.ascendant&&("number"!=typeof e.ascendant||!isFinite(e.ascendant)))return`Ascendant has invalid value: ${e.ascendant}`;if(void 0!==e.midheaven&&("number"!=typeof e.midheaven||!isFinite(e.midheaven)))return`Midheaven has invalid value: ${e.midheaven}`;const n=a(e.houseCusps);if(n)return`House cusps validation failed: ${n}`;if(void 0!==e.points){const t=r(e.points);if(t)return`Additional points validation failed: ${t}`}if(void 0!==e.timestamp&&(!(e.timestamp instanceof Date)||isNaN(e.timestamp.getTime())))return"Timestamp must be a valid Date object";if(void 0!==e.location&&"string"!=typeof e.location)return"Location must be a string";if(void 0!==e.chartType){const t=["natal","event","transit"];if(!t.includes(e.chartType))return`Chart type must be one of: ${t.join(", ")}`}return null}function s(e){if(!Array.isArray(e))return"Multi-chart data must be an array";if(0===e.length)return"Multi-chart data must contain at least one chart";if(e.length>10)return"Multi-chart data cannot contain more than 10 charts";for(let t=0;t<e.length;t++){const n=i(e[t]);if(n)return`Chart at index ${t} (${e[t]?.name||"unnamed"}): ${n}`}const t=e.map((e=>e.name)),n=t.filter(((e,n)=>t.indexOf(e)!==n));if(n.length>0)return`Duplicate chart names found: ${n.join(", ")}`;return e.filter((e=>"transit"===e.chartType)).length>1?"Cannot have more than one transit chart":null}Object.defineProperty(t,"__esModule",{value:!0}),t.validatePoint=n,t.validatePoints=r,t.validateHouseCusps=a,t.validateChartData=i,t.validateMultiChartData=s,t.validateInputData=function(e){if(!e)return"Data is required";return Array.isArray(e)?s(e):i(e)}},388:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.determineChartType=function(e){let t="natal",n="";const r=e.filter((({chartType:e})=>"transit"!==e&&"event"!==e)),a=e.filter((({chartType:e})=>"event"===e)),i=e.filter((({chartType:e})=>"transit"===e));if(i.length>1)throw new Error("Must provide at most one transit chart");const s=i.length>0;r.length>0?0===a.length?s&&(n="_with_transit"):n=1===a.length?s?"_with_event_and_transit":"_with_event":s?"_with_events_and_transit":"_with_events":s&&(n="_with_transit");if(0===r.length){if(0===a.length)throw new Error("Must provide at least one non-transit chart");t=1===a.length?"event":"multi_event"}else t=1===r.length?"natal":2===r.length?"synastry":"group_synastry";return t+n},t.generateMetadataOutput=function(e,t,n){const r=["[METADATA]",`chart_type: ${t}`];n&&r.push(`house_system: ${n}`);return r.push(`date_format: ${e.dateFormat}`),r}},390:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.detectStelliums=function(e,t,n=3){const i=[],o=new Map;if(e.forEach((e=>{const t=(0,r.getDegreeSign)(e.degree);o.has(t)||o.set(t,[]),o.get(t).push(e)})),o.forEach(((e,r)=>{if(e.length>=n){const n=e.map((e=>s(e,t))),a=n.map((e=>e.house)).filter((e=>void 0!==e)),o=e.map((e=>e.degree)),u=Math.max(...o)-Math.min(...o);i.push({type:"Stellium",planets:n,sign:r,houses:[...new Set(a)].sort(),span:u})}})),t){const r=new Map;e.forEach((e=>{const n=(0,a.getHouseForPoint)(e.degree,t);n&&(r.has(n)||r.set(n,[]),r.get(n).push(e))})),r.forEach(((e,r)=>{if(e.length>=n){const n=e.map((e=>s(e,t))),a=e.map((e=>e.degree)),o=Math.max(...a)-Math.min(...a);i.find((e=>"Stellium"===e.type&&e.planets.some((e=>n.some((t=>t.name===e.name))))))||i.push({type:"Stellium",planets:n,houses:[r],span:o})}}))}return i},t.formatStellium=function(e){const t=e.planets.map((e=>e.name)).join(", ");let n="";e.sign&&(n=e.sign);if(e.houses&&e.houses.length>0){const t=1===e.houses.length?`${(0,i.getOrdinal)(e.houses[0])} House`:e.houses.map((e=>`${(0,i.getOrdinal)(e)} House`)).join("-");n+=n?` (${t})`:t}const r=n?` in ${n}`:"";return[`Stellium (${e.span.toFixed(1)}°): ${t}${r}`]};const r=n(904),a=n(600),i=n(175);function s(e,t){const n=(0,r.getDegreeSign)(e.degree),i=t&&(0,a.getHouseForPoint)(e.degree,t)||void 0;return{name:e.name,degree:e.degree,sign:n,house:i}}},400:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.formatPlanetWithDignities=function(e){const t=e.sign,n=a[e.name],i=r.ZODIAC_SIGN_DATA.find((e=>e.name===t))?.ruler,s=[];n&&n[t]&&s.push(...n[t]);let o=s.join(", ");i&&e.name!==i&&(o?o+=` | Ruler: ${i}`:o=`Ruler: ${i}`);if(o)return`[${o}]`;return""};const r=n(921),a={Sun:{Leo:["Domicile"],Aries:["Exaltation"],Aquarius:["Detriment"],Libra:["Fall"]},Moon:{Cancer:["Domicile"],Taurus:["Exaltation"],Capricorn:["Detriment"],Scorpio:["Fall"]},Mercury:{Gemini:["Domicile"],Virgo:["Domicile","Exaltation"],Pisces:["Detriment","Fall"],Sagittarius:["Detriment"]},Venus:{Taurus:["Domicile"],Libra:["Domicile"],Scorpio:["Detriment"],Aries:["Fall"],Virgo:["Fall"]},Mars:{Aries:["Domicile"],Scorpio:["Domicile"],Libra:["Detriment"],Cancer:["Fall"]},Jupiter:{Sagittarius:["Domicile"],Pisces:["Domicile"],Gemini:["Detriment"],Virgo:["Fall"]},Saturn:{Capricorn:["Domicile"],Aquarius:["Domicile"],Cancer:["Detriment"],Leo:["Fall"]}}},600:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.calculateHouseOverlays=function(e,t){const n={};if(t.houseCusps)for(const a of e.planets)n[a.name]=(0,r.getHouse)(a.degree,t.houseCusps);const a={};if(e.houseCusps)for(const n of t.planets)a[n.name]=(0,r.getHouse)(n.degree,e.houseCusps);return{chart1InChart2Houses:n,chart2InChart1Houses:a}},t.getHouseForPoint=function(e,t){return(0,r.getHouse)(e,t)};const r=n(175)},613:(e,t)=>{var n,r;Object.defineProperty(t,"__esModule",{value:!0}),t.PlanetCategory=t.AspectClassification=void 0,t.isMultiChartData=function(e){return Array.isArray(e)},function(e){e.Major="major",e.Minor="minor",e.Esoteric="esoteric"}(n||(t.AspectClassification=n={})),function(e){e.Luminaries="luminaries",e.Personal="personal",e.Social="social",e.Outer="outer",e.Angles="angles"}(r||(t.PlanetCategory=r={}))},666:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.chart2txt=function(e,t={}){const n=(0,r.analyzeCharts)(e,t),s=n.settings;return n.chartAnalyses.forEach((e=>{e.groupedAspects=(0,a.groupAspects)(e.aspects,s)})),n.pairwiseAnalyses.forEach((e=>{e.groupedSynastryAspects=(0,a.groupAspects)(e.synastryAspects,s)})),n.transitAnalyses.forEach((e=>{e.groupedAspects=(0,a.groupAspects)(e.aspects,s)})),(0,i.formatReportToText)(n)};const r=n(6),a=n(865),i=n(723)},668:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateHousesOutput=function(e){const t=["[HOUSE CUSPS]"];if(!e||12!==e.length)return t.push("House cusps not available"),t;for(let n=0;n<6;n++){const i=n,s=n+6,o=e[i],u=e[s],c=(0,r.getDegreeSign)(o),l=Math.floor((0,r.getDegreeInSign)(o)),p=(0,a.getOrdinal)(i+1)+" house",f=(0,r.getDegreeSign)(u),h=Math.floor((0,r.getDegreeInSign)(u)),d=(0,a.getOrdinal)(s+1)+" house",g=`${p}: ${l}° ${c}`.padEnd(24),m=`${d}: ${h}° ${f}`;t.push(`${g} ${m}`)}return t};const r=n(904),a=n(175)},723:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.formatReportToText=function(e){const{chartAnalyses:t,pairwiseAnalyses:n,globalAnalysis:s,transitAnalyses:o,globalTransitAnalysis:c}=e,f=e.settings,h=[],d=t.map((e=>e.chart)),S=(0,r.determineChartType)(d);h.push(...(0,r.generateMetadataOutput)(f,S,f.houseSystemName)),h.push("");const b=t.filter((e=>"transit"!==e.chart.chartType));for(const e of b)h.push(...g(e,f));for(const e of n)h.push(...m(e,f));s&&h.push(...A(s,!1));if(o.length>0){const e=t.find((e=>"transit"===e.chart.chartType));e&&(h.push(...(0,a.generateChartHeaderOutput)(e.chart.name,"TRANSIT")),h.push(...(0,i.generateBirthdataOutput)(e.chart.location,e.chart.timestamp,f,"[DATETIME]")),h.push(...(0,u.generatePlanetsOutput)(e.placements.planets)),h.push(""));for(const e of o)h.push(...(0,l.generateAspectsOutput)(`[TRANSIT ASPECTS: ${e.natalChart.name}]`,e.groupedAspects,e.natalChart.name,e.transitChart.name,!0)),f.includeAspectPatterns&&h.push(...(0,p.generateAspectPatternsOutput)(e.patterns,`Transit to ${e.natalChart.name}`,!0)),h.push("")}c&&h.push(...A(c,!0));return h.join("\n").trimEnd()};const r=n(388),a=n(172),i=n(888),s=n(945),o=n(668),u=n(234),c=n(82),l=n(784),p=n(762),f=n(756),h=n(109),d=n(390),g=(e,t,n)=>{const r=[],{chart:f,groupedAspects:g,patterns:m,stelliums:A,signDistributions:S,dispositors:b,placements:y}=e;return r.push(...(0,a.generateChartHeaderOutput)(f.name,n)),r.push(...(0,i.generateBirthdataOutput)(f.location,f.timestamp,t)),r.push(...(0,s.generateAnglesOutput)(f.ascendant,f.midheaven)),r.push(...(0,o.generateHousesOutput)(f.houseCusps)),r.push(...(0,u.generatePlanetsOutput)(y.planets)),r.push(...(0,c.generateDispositorsOutput)(b)),t.includeSignDistributions&&(r.push(...(0,h.generateElementDistributionOutput)(S.elements)),r.push(...(0,h.generateModalityDistributionOutput)(S.modalities)),r.push(...(0,h.generatePolarityOutput)(S.polarities))),r.push(...(0,l.generateAspectsOutput)("[ASPECTS]",g)),t.includeAspectPatterns&&(r.push(...(0,p.generateAspectPatternsOutput)(m,void 0,!1)),A.length>0?A.forEach((e=>{r.push(...(0,d.formatStellium)(e))})):r.push("No Stelliums detected.")),r.push(""),r},m=(e,t)=>{const n=[],{chart1:r,chart2:i,groupedSynastryAspects:s,compositePatterns:o,houseOverlays:u}=e,c="event"===r.chartType&&"event"===i.chartType?"EVENT_RELATIONSHIP":"event"===r.chartType||"event"===i.chartType?"NATAL_EVENT":"SYNASTRY";return n.push(...(0,a.generateChartHeaderOutput)(`${r.name}-${i.name}`,c)),n.push(...(0,l.generateAspectsOutput)("[PLANET-PLANET ASPECTS]",s,r.name,i.name)),t.includeAspectPatterns&&o.length>0&&n.push(...(0,p.generateAspectPatternsOutput)(o,`${r.name}-${i.name} Composite`,!0)),n.push(""),n.push(...(0,f.generateHouseOverlaysOutput)(u,r.name,i.name)),n.push(""),n},A=(e,t=!1)=>{const n=[],{charts:r,patterns:a}=e;if(a.length>0){const e=r.map((e=>e.name)).join("-");let i=`${e} Global Composite`;t&&(i=`${e} Global Transit Composite`),n.push(...(0,p.generateAspectPatternsOutput)(a,i,!0)),n.push("")}return n}},729:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.calculateDispositors=function(e){const t={};e.forEach((e=>{t[e.name]=function(e){const t=(0,a.getSign)(e.degree),n=r.ZODIAC_SIGN_DATA.find((e=>e.name===t));return n?n.ruler:"Unknown"}(e)}));const n={};return e.forEach((e=>{const r=[e.name];let a=e.name,i=`${a}`;for(;;){const e=t[a];if(!e||!t.hasOwnProperty(e)){i+=` → ${e} (not in chart)`;break}if(e===a){i+=" → (final)";break}if(r.includes(e)){i+=` → ${e} (cycle)`;break}r.push(e),i+=` → ${e}`,a=e}n[e.name]=i})),n};const r=n(921),a=n(175)},756:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateHouseOverlaysOutput=function(e,t,n){const r=["[HOUSE OVERLAYS]"];r.push(`${t}'s planets in ${n}'s houses:`),Object.keys(e.chart1InChart2Houses).length>0?r.push(a(e.chart1InChart2Houses)):r.push(`(${n} house cusps not available)`);r.push(`${n}'s planets in ${t}'s houses:`),Object.keys(e.chart2InChart1Houses).length>0?r.push(a(e.chart2InChart1Houses)):r.push(`(${t} house cusps not available)`);return r};const r=n(175);function a(e){const t={};for(const n in e){const r=e[n];t[r]||(t[r]=[]),t[r].push(n)}return Object.keys(t).map(Number).sort(((e,t)=>e-t)).map((e=>{const n=t[e].join(", ");return`${(0,r.getOrdinal)(e)}: ${n}`})).join(" | ")}},762:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateAspectPatternsOutput=function(e,t,n=!0){const r=[t?`[ASPECT PATTERNS: ${t}]`:"[ASPECT PATTERNS]"];if(0===e.length)return r.push("No T-Squares detected."),r.push("No Grand Trines detected."),r;const a=e.filter((t=>"Grand Trine"!==t.type||!function(e,t){return"Grand Trine"===e.type&&t.some((t=>{if("Kite"!==t.type)return!1;const n=e=>`${e.chartName||""}-${e.name}-${e.degree}`,r=t.grandTrine.map(n),a=e.planets.map(n);return r.length===a.length&&r.every((e=>a.includes(e)))}))}(t,e))),s=["T-Square","Grand Trine","Grand Cross","Yod","Mystic Rectangle","Kite"];a.sort(((e,t)=>s.indexOf(e.type)-s.indexOf(t.type))).forEach((e=>{switch(e.type){case"T-Square":r.push(...function(e,t=!0){if("T-Square"!==e.type)return[];const n=i(e.apex,!1,t),r=i(e.opposition[0],!1,t),a=i(e.opposition[1],!1,t);return[`T-Square (${e.mode}, ${e.averageOrb.toFixed(1)}°): ${n} ← ${r} ↔ ${a}`]}(e,n));break;case"Grand Trine":r.push(...function(e,t=!0){if("Grand Trine"!==e.type)return[];const n=e.planets.map((e=>i(e,!1,t))).join(" △ ");return[`Grand Trine (${e.element}, ${e.averageOrb.toFixed(1)}°): ${n}`]}(e,n));break;case"Grand Cross":r.push(...function(e,t=!0){if("Grand Cross"!==e.type)return[];const n=e.planets.map((e=>i(e,!1,t))).join(" ⨯ ");return[`Grand Cross (${e.mode}, ${e.averageOrb.toFixed(1)}°): ${n}`]}(e,n));break;case"Yod":r.push(...function(e,t=!0){if("Yod"!==e.type)return[];const n=i(e.apex,!1,t),r=i(e.base[0],!1,t),a=i(e.base[1],!1,t);return[`Yod (${e.averageOrb.toFixed(1)}°): ${n} ← ${r} • ${a}`]}(e,n));break;case"Mystic Rectangle":r.push(...function(e,t=!0){if("Mystic Rectangle"!==e.type)return[];const n=i(e.oppositions[0][0],!1,t),r=i(e.oppositions[0][1],!1,t),a=i(e.oppositions[1][0],!1,t),s=i(e.oppositions[1][1],!1,t);return[`Mystic Rectangle (${e.averageOrb.toFixed(1)}°): ${n} ↔ ${r} | ${a} ↔ ${s}`]}(e,n));break;case"Kite":r.push(...function(e,t=!0){if("Kite"!==e.type)return[];const n=e.grandTrine.map((e=>i(e,!1,t))).join(" △ "),r=i(e.opposition,!1,t),a=e.grandTrine[0].sign?function(e){const t=["Taurus","Virgo","Capricorn"],n=["Gemini","Libra","Aquarius"],r=["Cancer","Scorpio","Pisces"];return["Aries","Leo","Sagittarius"].includes(e)?"Fire":t.includes(e)?"Earth":n.includes(e)?"Air":r.includes(e)?"Water":""}(e.grandTrine[0].sign):"";return[`Kite (${a?`${a}, `:""}${e.averageOrb.toFixed(1)}°): [${n}] ← ${r}`]}(e,n))}})),""===r[r.length-1]&&r.pop();return r};const r=n(904),a=n(175);function i(e,t=!1,n=!0){const i=Math.floor((0,r.getDegreeInSign)(e.degree)),s=t&&e.house?` (${(0,a.getOrdinal)(e.house)} house)`:"";return`${n&&e.chartName?`${e.chartName}'s `:""}${e.name} ${i}° ${e.sign}${s}`}},784:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateAspectsOutput=function(e,t,n,r,a=!1){const i=[e];if(!t||0===t.size)return i.push("None"),i;return t.forEach(((e,t)=>{i.push(t),e.forEach((e=>{i.push(function(e,t,n,r=!1){const a=t?`${t}'s ${e.planetA}`:e.planetA;let i=e.planetB;r?i=`transiting ${e.planetB}`:n&&(i=`${n}'s ${e.planetB}`);const s=e.application&&"exact"!==e.application?` (${e.application})`:"";return`${a} ${e.aspectType} ${i}: ${e.orb.toFixed(1)}°${s}`}(e,n,r,a))}))})),i}},858:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.calculateSignDistributions=function(e,t){const n=[...e];void 0!==t&&n.push({name:"Ascendant",degree:t});const i={Fire:[],Earth:[],Air:[],Water:[]},s={Cardinal:0,Fixed:0,Mutable:0},o={Masculine:0,Feminine:0};for(const e of n){const t=(0,r.getSign)(e.degree),n=a.ZODIAC_SIGN_DATA.find((e=>e.name===t));n&&(i[n.element].push(e.name),s[n.modality]++,o[n.polarity]++)}return{elements:i,modalities:s,polarities:o}},t.formatElementDistribution=function(e){return Object.entries(e).map((([e,t])=>0===t.length?`${e}: 0`:`${e}: ${t.length} (${t.join(", ")})`))},t.formatModalityDistribution=function(e){return Object.entries(e).map((([e,t])=>`${e}: ${t}`))},t.formatPolarityDistribution=function(e){return Object.entries(e).map((([e,t])=>`${e}: ${t}`))};const r=n(175),a=n(921)},865:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.groupAspects=function(e,t){const n=new Map,r=t.aspectStrengthThresholds,a=[],i=[],s=[];if(e.forEach((e=>{e.orb<=r.tight?a.push(e):e.orb<=r.moderate?i.push(e):s.push(e)})),a.sort(((e,t)=>e.orb-t.orb)),i.sort(((e,t)=>e.orb-t.orb)),s.sort(((e,t)=>e.orb-t.orb)),a.length>0){const e=`[TIGHT ASPECTS: orb under ${r.tight.toFixed(1)}°]`;n.set(e,a)}if(i.length>0){const e=`[MODERATE ASPECTS: orb ${r.tight.toFixed(1)}-${r.moderate.toFixed(1)}°]`;n.set(e,i)}if(s.length>0){const e=`[WIDE ASPECTS: orb over ${r.moderate.toFixed(1)}°]`;n.set(e,s)}return n}},888:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateBirthdataOutput=function(e,t,n,a="[BIRTHDATA]"){if(!t)return[`${a} Not available`];const i=(0,r.formatDateCustom)(t,n.dateFormat),s=(0,r.formatTime)(t);return[`${a} ${e||"Unknown Location"} | ${i} | ${s}`]};const r=n(889)},889:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.formatDateCustom=function(e,t){const n=e.getMonth()+1,r=e.getDate(),a=e.getFullYear();switch(t.toUpperCase()){case"MM/DD/YYYY":return`${n.toString().padStart(2,"0")}/${r.toString().padStart(2,"0")}/${a}`;case"DD/MM/YYYY":return`${r.toString().padStart(2,"0")}/${n.toString().padStart(2,"0")}/${a}`;case"YYYY-MM-DD":return`${a}-${n.toString().padStart(2,"0")}-${r.toString().padStart(2,"0")}`;default:return console.warn(`Unrecognized date format: ${t}. Falling back to toLocaleDateString().`),e.toLocaleDateString()}},t.formatTime=function(e){return e.toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!0})}},904:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.normalizeDegree=a,t.getDegreeSign=function(e){const t=a(e),n=Math.floor(t/30);if(n<0||n>=r.ZODIAC_SIGNS.length)return console.error(`Invalid sign index computed: ${n} for normalized degree ${t}`),"Unknown Sign";return r.ZODIAC_SIGNS[n]},t.getDegreeInSign=function(e){return a(e)%30};const r=n(921);function a(e){if(!isFinite(e))throw new Error(`Invalid degree value: ${e}`);let t=e%360;return t<0&&(t+=360),t}},919:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.detectAspectPatterns=function(e,t,n){const r=[],l=function(e){const t=new Map;return e.forEach((e=>{const n=a(e.planetA,e.p1ChartName),r=a(e.planetB,e.p2ChartName);t.has(n)||t.set(n,new Map),t.has(r)||t.set(r,new Map),t.get(n).set(r,e),t.get(r).set(n,e)})),t}(t);return r.push(...function(e,t,n){const r=[];for(let a=0;a<e.length;a++)for(let c=a+1;c<e.length;c++)if(o(e[a],e[c],"opposition",t))for(let l=0;l<e.length;l++)if(l!==a&&l!==c&&o(e[a],e[l],"square",t)&&o(e[c],e[l],"square",t)){const[o,p]=e[l],[f,h]=e[a],[d,g]=e[c],m=i(o,n,p),A=i(f,n,h),S=i(d,n,g),b=u(e[a],e[c],t),y=u(e[a],e[l],t),T=u(e[c],e[l],t),O=(b.orb+y.orb+T.orb)/3,M=s(m.sign);r.push({type:"T-Square",apex:m,opposition:[A,S],mode:M,averageOrb:O})}return r}(e,l,n)),r.push(...c(e,l,n)),r.push(...function(e,t,n){const r=[];for(let a=0;a<e.length;a++)for(let c=a+1;c<e.length;c++)for(let l=c+1;l<e.length;l++)for(let p=l+1;p<e.length;p++){const f=[e[a],e[c],e[l],e[p]],h=[[0,2],[1,3],[0,3],[1,2]];let d=0,g=0;const m=[];if([[0,1],[2,3]].forEach((([e,n])=>{o(f[e],f[n],"opposition",t)&&(d++,m.push(u(f[e],f[n],t)))})),h.forEach((([e,n])=>{o(f[e],f[n],"square",t)&&(g++,m.push(u(f[e],f[n],t)))})),2===d&&4===g){const[e,t]=f[0],[a,o]=f[1],[u,c]=f[2],[l,p]=f[3],h=i(e,n,t),d=i(a,n,o),g=i(u,n,c),A=i(l,n,p),S=m.reduce(((e,t)=>e+t.orb),0)/m.length,b=s(h.sign);r.push({type:"Grand Cross",planets:[h,d,g,A],mode:b,averageOrb:S})}}return r}(e,l,n)),r.push(...function(e,t,n){const r=[];for(let a=0;a<e.length;a++)for(let s=a+1;s<e.length;s++)if(o(e[a],e[s],"sextile",t))for(let c=0;c<e.length;c++)if(c!==a&&c!==s&&o(e[a],e[c],"quincunx",t)&&o(e[s],e[c],"quincunx",t)){const[o,l]=e[c],[p,f]=e[a],[h,d]=e[s],g=i(o,n,l),m=i(p,n,f),A=i(h,n,d),S=u(e[a],e[s],t),b=u(e[a],e[c],t),y=u(e[s],e[c],t),T=(S.orb+b.orb+y.orb)/3;r.push({type:"Yod",apex:g,base:[m,A],averageOrb:T})}return r}(e,l,n)),r.push(...function(e,t,n){const r=[];for(let a=0;a<e.length;a++)for(let s=a+1;s<e.length;s++)for(let c=s+1;c<e.length;c++)for(let l=c+1;l<e.length;l++){const p=[e[a],e[s],e[c],e[l]],f=[{oppositions:[[0,1],[2,3]],sextiles:[[0,2],[0,3],[1,2],[1,3]]},{oppositions:[[0,2],[1,3]],sextiles:[[0,1],[0,3],[2,1],[2,3]]},{oppositions:[[0,3],[1,2]],sextiles:[[0,1],[0,2],[3,1],[3,2]]}];for(const e of f){let a=0,s=0;const c=[];if(e.oppositions.forEach((([e,n])=>{o(p[e],p[n],"opposition",t)&&(a++,c.push(u(p[e],p[n],t)))})),e.sextiles.forEach((([e,n])=>{const r=u(p[e],p[n],t);!r||"sextile"!==r.aspectType&&"trine"!==r.aspectType||(s++,c.push(r))})),2===a&&4===s){const[t,a]=p[e.oppositions[0][0]],[s,o]=p[e.oppositions[0][1]],[u,l]=p[e.oppositions[1][0]],[f,h]=p[e.oppositions[1][1]],d=i(t,n,a),g=i(s,n,o),m=i(u,n,l),A=i(f,n,h),S=c.reduce(((e,t)=>e+t.orb),0)/c.length;r.push({type:"Mystic Rectangle",oppositions:[[d,g],[m,A]],averageOrb:S})}}}return r}(e,l,n)),r.push(...function(e,t,n){const r=[];return c(e,t,n).forEach((a=>{a.planets.forEach((s=>{e.forEach((c=>{const[l,p]=c;if(!a.planets.some((e=>e.name===l.name&&e.chartName===p))){const f=e.find((([e,t])=>e.name===s.name&&t===s.chartName));if(f&&o(f,c,"opposition",t)){const e=i(l,n,p),s=u(f,c,t),o=(a.averageOrb+s.orb)/2;r.push({type:"Kite",grandTrine:a.planets,opposition:e,averageOrb:o})}}}))}))})),r}(e,l,n)),r};const r=n(904);function a(e,t){return t?`${e}-${t}`:e}function i(e,t,n){const a=(0,r.getDegreeSign)(e.degree),i=t&&12===t.length?(()=>{const n=e.degree%360;for(let e=0;e<12;e++){const r=t[e],a=t[(e+1)%12];if(a>r){if(n>=r&&n<a)return e+1}else if(n>=r||n<a)return e+1}})():void 0;return{name:e.name,degree:e.degree,sign:a,house:i,chartName:n}}function s(e){return["Aries","Cancer","Libra","Capricorn"].includes(e)?"Cardinal":["Taurus","Leo","Scorpio","Aquarius"].includes(e)?"Fixed":"Mutable"}function o(e,t,n,r){const i=a(e[0].name,e[1]),s=a(t[0].name,t[1]),o=r.get(i);if(!o)return!1;const u=o.get(s);return void 0!==u&&u.aspectType===n}function u(e,t,n){const r=a(e[0].name,e[1]),i=a(t[0].name,t[1]),s=n.get(r);if(s)return s.get(i)}function c(e,t,n){const r=[];for(let s=0;s<e.length;s++)for(let c=s+1;c<e.length;c++)for(let l=c+1;l<e.length;l++)if(o(e[s],e[c],"trine",t)&&o(e[c],e[l],"trine",t)&&o(e[l],e[s],"trine",t)){const[o,p]=e[s],[f,h]=e[c],[d,g]=e[l],m=i(o,n,p),A=i(f,n,h),S=i(d,n,g),b=u(e[s],e[c],t),y=u(e[c],e[l],t),T=u(e[l],e[s],t),O=(b.orb+y.orb+T.orb)/3,M=(a=m.sign,["Aries","Leo","Sagittarius"].includes(a)?"Fire":["Taurus","Virgo","Capricorn"].includes(a)?"Earth":["Gemini","Libra","Aquarius"].includes(a)?"Air":"Water");r.push({type:"Grand Trine",planets:[m,A,S],element:M,averageOrb:O})}var a;return r}},921:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.DEFAULT_SETTINGS=t.DEFAULT_ASPECT_STRENGTH_THRESHOLDS=t.WIDE_ASPECTS=t.TIGHT_ASPECTS=t.MODERN_ASPECTS=t.TRADITIONAL_ASPECTS=t.SIMPLE_WIDE_ORBS=t.SIMPLE_TIGHT_ORBS=t.SIMPLE_MODERN_ORBS=t.SIMPLE_TRADITIONAL_ORBS=t.DEFAULT_ASPECTS=t.ZODIAC_SIGNS=t.ZODIAC_SIGN_DATA=void 0;const r=n(613);t.ZODIAC_SIGN_DATA=[{name:"Aries",element:"Fire",modality:"Cardinal",polarity:"Masculine",ruler:"Mars"},{name:"Taurus",element:"Earth",modality:"Fixed",polarity:"Feminine",ruler:"Venus"},{name:"Gemini",element:"Air",modality:"Mutable",polarity:"Masculine",ruler:"Mercury"},{name:"Cancer",element:"Water",modality:"Cardinal",polarity:"Feminine",ruler:"Moon"},{name:"Leo",element:"Fire",modality:"Fixed",polarity:"Masculine",ruler:"Sun"},{name:"Virgo",element:"Earth",modality:"Mutable",polarity:"Feminine",ruler:"Mercury"},{name:"Libra",element:"Air",modality:"Fixed",polarity:"Masculine",ruler:"Venus"},{name:"Scorpio",element:"Water",modality:"Fixed",polarity:"Feminine",ruler:"Mars"},{name:"Sagittarius",element:"Fire",modality:"Mutable",polarity:"Masculine",ruler:"Jupiter"},{name:"Capricorn",element:"Earth",modality:"Cardinal",polarity:"Feminine",ruler:"Saturn"},{name:"Aquarius",element:"Air",modality:"Fixed",polarity:"Masculine",ruler:"Saturn"},{name:"Pisces",element:"Water",modality:"Mutable",polarity:"Feminine",ruler:"Jupiter"}],t.ZODIAC_SIGNS=t.ZODIAC_SIGN_DATA.map((e=>e.name)),t.DEFAULT_ASPECTS=[{name:"conjunction",angle:0,orb:5,classification:r.AspectClassification.Major},{name:"opposition",angle:180,orb:5,classification:r.AspectClassification.Major},{name:"trine",angle:120,orb:5,classification:r.AspectClassification.Major},{name:"square",angle:90,orb:5,classification:r.AspectClassification.Major},{name:"sextile",angle:60,orb:3,classification:r.AspectClassification.Minor},{name:"quincunx",angle:150,orb:2,classification:r.AspectClassification.Minor}],t.SIMPLE_TRADITIONAL_ORBS=[{name:"conjunction",angle:0,orb:10,classification:r.AspectClassification.Major},{name:"opposition",angle:180,orb:10,classification:r.AspectClassification.Major},{name:"trine",angle:120,orb:8,classification:r.AspectClassification.Major},{name:"square",angle:90,orb:8,classification:r.AspectClassification.Major},{name:"sextile",angle:60,orb:6,classification:r.AspectClassification.Minor},{name:"quincunx",angle:150,orb:4,classification:r.AspectClassification.Minor}],t.SIMPLE_MODERN_ORBS=[{name:"conjunction",angle:0,orb:8,classification:r.AspectClassification.Major},{name:"opposition",angle:180,orb:8,classification:r.AspectClassification.Major},{name:"trine",angle:120,orb:6,classification:r.AspectClassification.Major},{name:"square",angle:90,orb:6,classification:r.AspectClassification.Major},{name:"sextile",angle:60,orb:4,classification:r.AspectClassification.Minor},{name:"quincunx",angle:150,orb:3,classification:r.AspectClassification.Minor}],t.SIMPLE_TIGHT_ORBS=[{name:"conjunction",angle:0,orb:4,classification:r.AspectClassification.Major},{name:"opposition",angle:180,orb:4,classification:r.AspectClassification.Major},{name:"trine",angle:120,orb:3,classification:r.AspectClassification.Major},{name:"square",angle:90,orb:3,classification:r.AspectClassification.Major},{name:"sextile",angle:60,orb:2,classification:r.AspectClassification.Minor},{name:"quincunx",angle:150,orb:1,classification:r.AspectClassification.Minor}],t.SIMPLE_WIDE_ORBS=[{name:"conjunction",angle:0,orb:12,classification:r.AspectClassification.Major},{name:"opposition",angle:180,orb:12,classification:r.AspectClassification.Major},{name:"trine",angle:120,orb:10,classification:r.AspectClassification.Major},{name:"square",angle:90,orb:10,classification:r.AspectClassification.Major},{name:"sextile",angle:60,orb:8,classification:r.AspectClassification.Minor},{name:"quincunx",angle:150,orb:6,classification:r.AspectClassification.Minor},{name:"semi-sextile",angle:30,orb:4,classification:r.AspectClassification.Minor}],t.TRADITIONAL_ASPECTS=t.SIMPLE_TRADITIONAL_ORBS,t.MODERN_ASPECTS=t.SIMPLE_MODERN_ORBS,t.TIGHT_ASPECTS=t.SIMPLE_TIGHT_ORBS,t.WIDE_ASPECTS=t.SIMPLE_WIDE_ORBS,t.DEFAULT_ASPECT_STRENGTH_THRESHOLDS={tight:2,moderate:4},t.DEFAULT_SETTINGS={aspectDefinitions:t.DEFAULT_ASPECTS,skipOutOfSignAspects:!0,includeAspectPatterns:!1,includeSignDistributions:!0,aspectStrengthThresholds:t.DEFAULT_ASPECT_STRENGTH_THRESHOLDS,houseSystemName:"whole_sign",dateFormat:"MM/DD/YYYY"}},945:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateAnglesOutput=function(e,t){const n=["[ANGLES]"];void 0!==e?n.push(`Ascendant: ${Math.floor((0,r.getDegreeInSign)(e))}° ${(0,r.getDegreeSign)(e)}`):n.push("Ascendant: Not available");void 0!==t?n.push(`Midheaven: ${Math.floor((0,r.getDegreeInSign)(t))}° ${(0,r.getDegreeSign)(t)}`):n.push("Midheaven: Not available");return n};const r=n(904)}},t={};var n=function n(r){var a=t[r];if(void 0!==a)return a.exports;var i=t[r]={exports:{}};return e[r].call(i.exports,i,i.exports,n),i.exports}(156);return n})()));
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.chart2txt=t():e.chart2txt=t()}(this,(()=>(()=>{"use strict";var e={6:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.analyzeCharts=function(e,t={}){const n=(0,i.validateInputData)(e);if(n)throw new Error(`Invalid chart data: ${n}`);const b=new a.ChartSettings(t),y=(0,r.isMultiChartData)(e)?e:[e],T=y.filter((e=>"transit"!==e.chartType)),O=y.find((e=>"transit"===e.chartType)),M=[...T,...O?[O]:[]],_=[],D=d(M,!0);for(const e of M){const t=d([e]),n=(0,s.calculateAspects)(b.resolvedAspectDefinitions,t,b.skipOutOfSignAspects);_.push(...n)}for(let e=0;e<M.length;e++)for(let t=e+1;t<M.length;t++){const n=M[t],r=[...d([M[e]]),...d([n])],a=(0,s.calculateMultichartAspects)(b.resolvedAspectDefinitions,r,b.skipOutOfSignAspects);_.push(...a)}const C=b.includeAspectPatterns?(0,o.detectAspectPatterns)(D,_):[],E=[],v=[],$=[];let P,I;for(const e of M){const t=_.filter((t=>t.p1ChartName===e.name&&t.p2ChartName===e.name)),n=S(C,1,1).filter((t=>A(t,e.name))),r=b.includeAspectPatterns?(0,u.detectStelliums)(h(e),e.houseCusps):[];E.push({chart:e,placements:{planets:(0,c.getPlanetPositions)(e.planets,e.houseCusps)},aspects:t,patterns:n,stelliums:r,signDistributions:b.includeSignDistributions?(0,l.calculateSignDistributions)(e.planets,e.ascendant):{elements:{},modalities:{},polarities:{}},dispositors:"transit"!==e.chartType?(0,p.calculateDispositors)(e.planets,b.includeDispositors):{}})}if(T.length>=2)for(let e=0;e<T.length;e++)for(let t=e+1;t<T.length;t++){const n=T[e],r=T[t],a=_.filter((e=>e.p1ChartName===n.name&&e.p2ChartName===r.name||e.p1ChartName===r.name&&e.p2ChartName===n.name)),i=S(C,2,2).filter((e=>A(e,n.name)&&A(e,r.name)));v.push({chart1:n,chart2:r,synastryAspects:a,compositePatterns:i,houseOverlays:b.includeHouseOverlays?(0,f.calculateHouseOverlays)(n,r):{chart1InChart2Houses:{},chart2InChart1Houses:{}}})}if(T.length>2){const e=S(C,3).filter((e=>!g(e).has(O?.name||"TRANSIT_PLACEHOLDER")));e.length>0&&(P={charts:T,patterns:e})}if(O){for(const e of T){const t=_.filter((t=>t.p1ChartName===e.name&&t.p2ChartName===O.name||t.p1ChartName===O.name&&t.p2ChartName===e.name)),n=S(C,2,2).filter((t=>A(t,e.name)&&A(t,O.name)));$.push({natalChart:e,transitChart:O,aspects:t,patterns:n})}if(T.length>0){const e=(j=C,N=[O.name],j.filter((e=>N.some((t=>A(e,t)))))).filter((e=>m(e)>=3));e.length>0&&(I={charts:M,patterns:e})}}var j,N;return{settings:b,chartAnalyses:E,pairwiseAnalyses:v,globalAnalysis:P,transitAnalyses:$,globalTransitAnalysis:I}};const r=n(613),a=n(230),i=n(371),s=n(75),o=n(919),u=n(390),c=n(175),l=n(858),p=n(729),f=n(600);function h(e){const t=["Ascendant","Midheaven","North Node","South Node"];return e.planets.filter((e=>!t.includes(e.name)))}function d(e,t=!1){return e.flatMap((e=>(t?h(e):function(e){const t=[...e.planets];return void 0!==e.ascendant&&t.push({name:"Ascendant",degree:e.ascendant}),void 0!==e.midheaven&&t.push({name:"Midheaven",degree:e.midheaven}),t}(e)).map((t=>[t,e.name]))))}function g(e){const t=new Set,n=[],r=e=>{e&&n.push(e)};switch(e.type){case"T-Square":r(e.apex),e.opposition.forEach(r);break;case"Grand Trine":case"Grand Cross":e.planets.forEach(r);break;case"Yod":r(e.apex),e.base.forEach(r);break;case"Mystic Rectangle":e.oppositions.flat().forEach(r);break;case"Kite":e.grandTrine.forEach(r),r(e.opposition)}return n.forEach((e=>{e.chartName&&t.add(e.chartName)})),t}function m(e){return g(e).size}function A(e,t){return g(e).has(t)}function S(e,t,n=1/0){return e.filter((e=>{const r=m(e);return r>=t&&r<=n}))}},75:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.calculateAspects=function(e,t,n=!0){const r=[];if(!t||t.length<2)return r;for(let a=0;a<t.length;a++)for(let i=a+1;i<t.length;i++){const[s,u]=t[a],[c,l]=t[i],p=o(e,s,c,n,u,l);p&&r.push(p)}return r},t.calculateMultichartAspects=function(e,t,n=!0){const r=[];for(let a=0;a<t.length;a++)for(let i=a+1;i<t.length;i++){const[s,u]=t[a],[c,l]=t[i];if(u!==l){const t=o(e,s,c,n,u,l);t&&r.push(t)}}return r};const r=n(904),a=n(318);function i(e){const t=e<=180?e:360-e;switch(t){case 0:return 0;case 30:return 1;case 60:return 2;case 90:return 3;case 120:return 4;case 150:return 5;case 180:return 6;default:return Math.round(t/30)}}function s(e,t,n){if(void 0===e.speed||void 0===t.speed)return"exact";const i=e.speed,s=t.speed,o=(0,r.normalizeDegree)(e.degree),u=(0,r.normalizeDegree)(t.degree);let c=Math.abs(o-u);c>180&&(c=360-c);const l=Math.abs(c-n);if((0,a.isExactAspect)(l))return"exact";if(0===i-s)return"exact";const p=(0,r.normalizeDegree)(o+.1*i),f=(0,r.normalizeDegree)(u+.1*s),h=Math.abs(c-n);let d=Math.abs(p-f);d>180&&(d=360-d);return Math.abs(d-n)<h?"applying":"separating"}function o(e,t,n,o,u,c){const l=(0,a.roundDegrees)((0,r.normalizeDegree)(t.degree)),p=(0,a.roundDegrees)((0,r.normalizeDegree)(n.degree));let f=Math.abs(l-p);f>180&&(f=360-f);let h=null;for(const r of e){const e=(0,a.roundDegrees)(Math.abs(f-r.angle));if(o){const e=Math.floor(l/30),t=Math.floor(p/30),n=i(r.angle);let a=Math.abs(e-t);if(a>6&&(a=12-a),a!==n)continue}if(e<=r.orb&&(!h||e<h.orb)){const a=s(t,n,r.angle);h={planetA:t.name,planetB:n.name,p1ChartName:u,p2ChartName:c,aspectType:r.name,orb:e,application:a}}}return h}},82:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateDispositorsOutput=function(e){if(e.summary)return[`[DISPOSITORS] ${e.summary}`];const t=["[DISPOSITOR TREE]"];if(0===Object.keys(e).length)return t.push("No dispositor data available."),t;for(const n in e)t.push(e[n]);return t}},109:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateElementDistributionOutput=function(e){const t=["[ELEMENT DISTRIBUTION]"];return t.push(...(0,r.formatElementDistribution)(e)),t},t.generateModalityDistributionOutput=function(e){const t=["[MODALITY DISTRIBUTION]"];return t.push(...(0,r.formatModalityDistribution)(e)),t},t.generatePolarityOutput=function(e){const t=["[POLARITY]"];return t.push(...(0,r.formatPolarityDistribution)(e)),t};const r=n(858)},156:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var a=Object.getOwnPropertyDescriptor(t,n);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,a)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),t.ChartSettings=t.ZODIAC_SIGNS=t.DEFAULT_ASPECTS=t.DEFAULT_SETTINGS=t.formatReportToText=t.groupAspects=t.analyzeCharts=t.chart2txt=void 0;var i=n(666);Object.defineProperty(t,"chart2txt",{enumerable:!0,get:function(){return i.chart2txt}});var s=n(6);Object.defineProperty(t,"analyzeCharts",{enumerable:!0,get:function(){return s.analyzeCharts}});var o=n(865);Object.defineProperty(t,"groupAspects",{enumerable:!0,get:function(){return o.groupAspects}});var u=n(723);Object.defineProperty(t,"formatReportToText",{enumerable:!0,get:function(){return u.formatReportToText}}),a(n(613),t);var c=n(921);Object.defineProperty(t,"DEFAULT_SETTINGS",{enumerable:!0,get:function(){return c.DEFAULT_SETTINGS}}),Object.defineProperty(t,"DEFAULT_ASPECTS",{enumerable:!0,get:function(){return c.DEFAULT_ASPECTS}}),Object.defineProperty(t,"ZODIAC_SIGNS",{enumerable:!0,get:function(){return c.ZODIAC_SIGNS}});var l=n(230);Object.defineProperty(t,"ChartSettings",{enumerable:!0,get:function(){return l.ChartSettings}});const p=n(666);t.default=p.chart2txt},172:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateChartHeaderOutput=function(e,t="CHART"){return[`[${t}: ${e||"Unknown"}]`]}},175:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getOrdinal=function(e){const t=["th","st","nd","rd"],n=e%100;return e+(t[(n-20)%10]||t[n]||t[0])},t.getSign=a,t.getHouse=i,t.getPlanetPositions=function(e,t){return e.map((e=>{const n=(e.degree%360+360)%360;const r={name:e.name,degree:n,sign:a(n),speed:e.speed};return t&&(r.house=i(n,t)),r}))};const r=n(921);function a(e){const t=Math.floor(e/30);return r.ZODIAC_SIGNS[t]}function i(e,t){for(let n=0;n<12;n++){const r=t[n],a=t[(n+1)%12];if(r<a){if(e>=r&&e<a)return n+1}else if(e>=r||e<a)return n+1}return-1}},230:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ChartSettings=void 0;const r=n(921);t.ChartSettings=class{constructor(e={}){const t={...r.DEFAULT_SETTINGS,...e};Object.assign(this,t)}get resolvedAspectDefinitions(){if(Array.isArray(this.aspectDefinitions))return this.aspectDefinitions;switch(this.aspectDefinitions){case"traditional":return r.SIMPLE_TRADITIONAL_ORBS;case"modern":return r.SIMPLE_MODERN_ORBS;case"tight":return r.SIMPLE_TIGHT_ORBS;case"wide":return r.SIMPLE_WIDE_ORBS;default:return r.DEFAULT_SETTINGS.aspectDefinitions}}}},234:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generatePlanetsOutput=function(e){const t=["[PLANETS]"];e.forEach((e=>{const n=(0,a.formatPlanetWithDignities)(e),i=e.speed&&e.speed<0?" Retrograde":"";let s=`${e.name}: ${Math.floor(e.degree%30)}° ${e.sign}${i} ${n}`;e.house&&(s+=`, ${(0,r.getOrdinal)(e.house)} house`),t.push(s.replace(/\s+/g," ").trim())})),0===e.length&&t.push("No planets listed.");return t};const r=n(175),a=n(400)},318:(e,t)=>{function n(e,n,r=t.DEFAULT_EPSILON){return Math.abs(e-n)<r}function r(e,n=t.DEFAULT_EPSILON){return Math.abs(e)<n}function a(e,r,a=t.DEFAULT_EPSILON){return n(e,r,a)}Object.defineProperty(t,"__esModule",{value:!0}),t.DEFAULT_EPSILON=void 0,t.floatEquals=n,t.isNearZero=r,t.roundDegrees=function(e){return Math.round(1e4*e)/1e4},t.degreeEquals=a,t.isOnCusp=function(e,t,n=.001){return a(e,t,n)},t.isExactAspect=function(e,t=.1){return r(e,t)},t.DEFAULT_EPSILON=1e-4},371:(e,t)=>{function n(e){return e&&"object"==typeof e?"string"!=typeof e.name||""===e.name.trim()?"Point name must be a non-empty string":"number"==typeof e.degree&&isFinite(e.degree)?void 0===e.speed||"number"==typeof e.speed&&isFinite(e.speed)?null:`Point ${e.name} has invalid speed value: ${e.speed}`:`Point ${e.name} has invalid degree value: ${e.degree}`:"Point must be an object"}function r(e){if(!Array.isArray(e))return"Points must be an array";for(let t=0;t<e.length;t++){const r=n(e[t]);if(r)return`Point at index ${t}: ${r}`}const t=e.map((e=>e.name)),r=t.filter(((e,n)=>t.indexOf(e)!==n));return r.length>0?`Duplicate point names found: ${r.join(", ")}`:null}function a(e){if(void 0===e)return null;if(!Array.isArray(e))return"House cusps must be an array";if(12!==e.length)return`House cusps must contain exactly 12 values, got ${e.length}`;for(let t=0;t<e.length;t++)if("number"!=typeof e[t]||!isFinite(e[t]))return`House cusp ${t+1} has invalid value: ${e[t]}`;return null}function i(e){if(!e||"object"!=typeof e)return"Chart data must be an object";if("string"!=typeof e.name||""===e.name.trim())return"Chart name must be a non-empty string";const t=r(e.planets);if(t)return`Planets validation failed: ${t}`;if(void 0!==e.ascendant&&("number"!=typeof e.ascendant||!isFinite(e.ascendant)))return`Ascendant has invalid value: ${e.ascendant}`;if(void 0!==e.midheaven&&("number"!=typeof e.midheaven||!isFinite(e.midheaven)))return`Midheaven has invalid value: ${e.midheaven}`;const n=a(e.houseCusps);if(n)return`House cusps validation failed: ${n}`;if(void 0!==e.points){const t=r(e.points);if(t)return`Additional points validation failed: ${t}`}if(void 0!==e.timestamp&&(!(e.timestamp instanceof Date)||isNaN(e.timestamp.getTime())))return"Timestamp must be a valid Date object";if(void 0!==e.location&&"string"!=typeof e.location)return"Location must be a string";if(void 0!==e.chartType){const t=["natal","event","transit"];if(!t.includes(e.chartType))return`Chart type must be one of: ${t.join(", ")}`}return null}function s(e){if(!Array.isArray(e))return"Multi-chart data must be an array";if(0===e.length)return"Multi-chart data must contain at least one chart";if(e.length>10)return"Multi-chart data cannot contain more than 10 charts";for(let t=0;t<e.length;t++){const n=i(e[t]);if(n)return`Chart at index ${t} (${e[t]?.name||"unnamed"}): ${n}`}const t=e.map((e=>e.name)),n=t.filter(((e,n)=>t.indexOf(e)!==n));if(n.length>0)return`Duplicate chart names found: ${n.join(", ")}`;return e.filter((e=>"transit"===e.chartType)).length>1?"Cannot have more than one transit chart":null}Object.defineProperty(t,"__esModule",{value:!0}),t.validatePoint=n,t.validatePoints=r,t.validateHouseCusps=a,t.validateChartData=i,t.validateMultiChartData=s,t.validateInputData=function(e){if(!e)return"Data is required";return Array.isArray(e)?s(e):i(e)}},388:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.determineChartType=function(e){let t="natal",n="";const r=e.filter((({chartType:e})=>"transit"!==e&&"event"!==e)),a=e.filter((({chartType:e})=>"event"===e)),i=e.filter((({chartType:e})=>"transit"===e));if(i.length>1)throw new Error("Must provide at most one transit chart");const s=i.length>0;r.length>0?0===a.length?s&&(n="_with_transit"):n=1===a.length?s?"_with_event_and_transit":"_with_event":s?"_with_events_and_transit":"_with_events":s&&(n="_with_transit");if(0===r.length){if(0===a.length)throw new Error("Must provide at least one non-transit chart");t=1===a.length?"event":"multi_event"}else t=1===r.length?"natal":2===r.length?"synastry":"group_synastry";return t+n},t.generateMetadataOutput=function(e,t,n){const r=["[METADATA]",`chart_type: ${t}`];n&&r.push(`house_system: ${n}`);return r.push(`date_format: ${e.dateFormat}`),r}},390:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.detectStelliums=function(e,t,n=3){const i=[],o=new Map;if(e.forEach((e=>{const t=(0,r.getDegreeSign)(e.degree);o.has(t)||o.set(t,[]),o.get(t).push(e)})),o.forEach(((e,r)=>{if(e.length>=n){const n=e.map((e=>s(e,t))),a=n.map((e=>e.house)).filter((e=>void 0!==e)),o=e.map((e=>e.degree)),u=Math.max(...o)-Math.min(...o);i.push({type:"Stellium",planets:n,sign:r,houses:[...new Set(a)].sort(),span:u})}})),t){const r=new Map;e.forEach((e=>{const n=(0,a.getHouseForPoint)(e.degree,t);n&&(r.has(n)||r.set(n,[]),r.get(n).push(e))})),r.forEach(((e,r)=>{if(e.length>=n){const n=e.map((e=>s(e,t))),a=e.map((e=>e.degree)),o=Math.max(...a)-Math.min(...a);i.find((e=>"Stellium"===e.type&&e.planets.some((e=>n.some((t=>t.name===e.name))))))||i.push({type:"Stellium",planets:n,houses:[r],span:o})}}))}return i},t.formatStellium=function(e){const t=e.planets.map((e=>e.name)).join(", ");let n="";e.sign&&(n=e.sign);if(e.houses&&e.houses.length>0){const t=1===e.houses.length?`${(0,i.getOrdinal)(e.houses[0])} House`:e.houses.map((e=>`${(0,i.getOrdinal)(e)} House`)).join("-");n+=n?` (${t})`:t}const r=n?` in ${n}`:"";return[`Stellium (${e.span.toFixed(1)}°): ${t}${r}`]};const r=n(904),a=n(600),i=n(175);function s(e,t){const n=(0,r.getDegreeSign)(e.degree),i=t&&(0,a.getHouseForPoint)(e.degree,t)||void 0;return{name:e.name,degree:e.degree,sign:n,house:i}}},400:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.formatPlanetWithDignities=function(e){const t=e.sign,n=a[e.name],i=r.ZODIAC_SIGN_DATA.find((e=>e.name===t))?.ruler,s=[];n&&n[t]&&s.push(...n[t]);let o=s.join(", ");i&&e.name!==i&&(o?o+=` | Ruler: ${i}`:o=`Ruler: ${i}`);if(o)return`[${o}]`;return""};const r=n(921),a={Sun:{Leo:["Domicile"],Aries:["Exaltation"],Aquarius:["Detriment"],Libra:["Fall"]},Moon:{Cancer:["Domicile"],Taurus:["Exaltation"],Capricorn:["Detriment"],Scorpio:["Fall"]},Mercury:{Gemini:["Domicile"],Virgo:["Domicile","Exaltation"],Pisces:["Detriment","Fall"],Sagittarius:["Detriment"]},Venus:{Taurus:["Domicile"],Libra:["Domicile"],Scorpio:["Detriment"],Aries:["Fall"],Virgo:["Fall"]},Mars:{Aries:["Domicile"],Scorpio:["Domicile"],Libra:["Detriment"],Cancer:["Fall"]},Jupiter:{Sagittarius:["Domicile"],Pisces:["Domicile"],Gemini:["Detriment"],Virgo:["Fall"]},Saturn:{Capricorn:["Domicile"],Aquarius:["Domicile"],Cancer:["Detriment"],Leo:["Fall"]}}},600:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.calculateHouseOverlays=function(e,t){const n={};if(t.houseCusps)for(const a of e.planets)n[a.name]=(0,r.getHouse)(a.degree,t.houseCusps);const a={};if(e.houseCusps)for(const n of t.planets)a[n.name]=(0,r.getHouse)(n.degree,e.houseCusps);return{chart1InChart2Houses:n,chart2InChart1Houses:a}},t.getHouseForPoint=function(e,t){return(0,r.getHouse)(e,t)};const r=n(175)},613:(e,t)=>{var n,r;Object.defineProperty(t,"__esModule",{value:!0}),t.PlanetCategory=t.AspectClassification=void 0,t.isMultiChartData=function(e){return Array.isArray(e)},function(e){e.Major="major",e.Minor="minor",e.Esoteric="esoteric"}(n||(t.AspectClassification=n={})),function(e){e.Luminaries="luminaries",e.Personal="personal",e.Social="social",e.Outer="outer",e.Angles="angles"}(r||(t.PlanetCategory=r={}))},666:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.chart2txt=function(e,t={}){const n=(0,r.analyzeCharts)(e,t),s=n.settings;return n.chartAnalyses.forEach((e=>{e.groupedAspects=(0,a.groupAspects)(e.aspects,s)})),n.pairwiseAnalyses.forEach((e=>{e.groupedSynastryAspects=(0,a.groupAspects)(e.synastryAspects,s)})),n.transitAnalyses.forEach((e=>{e.groupedAspects=(0,a.groupAspects)(e.aspects,s)})),(0,i.formatReportToText)(n)};const r=n(6),a=n(865),i=n(723)},668:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateHousesOutput=function(e){const t=["[HOUSE CUSPS]"];if(!e||12!==e.length)return t.push("House cusps not available"),t;for(let n=0;n<6;n++){const i=n,s=n+6,o=e[i],u=e[s],c=(0,r.getDegreeSign)(o),l=Math.floor((0,r.getDegreeInSign)(o)),p=(0,a.getOrdinal)(i+1)+" house",f=(0,r.getDegreeSign)(u),h=Math.floor((0,r.getDegreeInSign)(u)),d=(0,a.getOrdinal)(s+1)+" house",g=`${p}: ${l}° ${c}`.padEnd(24),m=`${d}: ${h}° ${f}`;t.push(`${g} ${m}`)}return t};const r=n(904),a=n(175)},723:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.formatReportToText=function(e){const{chartAnalyses:t,pairwiseAnalyses:n,globalAnalysis:s,transitAnalyses:o,globalTransitAnalysis:c}=e,f=e.settings,h=[],d=t.map((e=>e.chart)),S=(0,r.determineChartType)(d);h.push(...(0,r.generateMetadataOutput)(f,S,f.houseSystemName)),h.push("");const b=t.filter((e=>"transit"!==e.chart.chartType));for(const e of b)h.push(...g(e,f));for(const e of n)h.push(...m(e,f));s&&h.push(...A(s,!1));if(o.length>0){const e=t.find((e=>"transit"===e.chart.chartType));e&&(h.push(...(0,a.generateChartHeaderOutput)(e.chart.name,"TRANSIT")),h.push(...(0,i.generateBirthdataOutput)(e.chart.location,e.chart.timestamp,f,"[DATETIME]")),h.push(...(0,u.generatePlanetsOutput)(e.placements.planets)),h.push(""));for(const e of o)h.push(...(0,l.generateAspectsOutput)(`[TRANSIT ASPECTS: ${e.natalChart.name}]`,e.groupedAspects,e.natalChart.name,e.transitChart.name,!0)),f.includeAspectPatterns&&h.push(...(0,p.generateAspectPatternsOutput)(e.patterns,`Transit to ${e.natalChart.name}`,!0)),h.push("")}c&&h.push(...A(c,!0));return h.join("\n").trimEnd()};const r=n(388),a=n(172),i=n(888),s=n(945),o=n(668),u=n(234),c=n(82),l=n(784),p=n(762),f=n(756),h=n(109),d=n(390),g=(e,t,n)=>{const r=[],{chart:f,groupedAspects:g,patterns:m,stelliums:A,signDistributions:S,dispositors:b,placements:y}=e;return r.push(...(0,a.generateChartHeaderOutput)(f.name,n)),r.push(...(0,i.generateBirthdataOutput)(f.location,f.timestamp,t)),r.push(...(0,s.generateAnglesOutput)(f.ascendant,f.midheaven)),r.push(...(0,o.generateHousesOutput)(f.houseCusps)),r.push(...(0,u.generatePlanetsOutput)(y.planets)),t.includeDispositors&&r.push(...(0,c.generateDispositorsOutput)(b)),t.includeSignDistributions&&(r.push(...(0,h.generateElementDistributionOutput)(S.elements)),r.push(...(0,h.generateModalityDistributionOutput)(S.modalities)),r.push(...(0,h.generatePolarityOutput)(S.polarities))),r.push(...(0,l.generateAspectsOutput)("[ASPECTS]",g)),t.includeAspectPatterns&&(r.push(...(0,p.generateAspectPatternsOutput)(m,void 0,!1)),A.length>0?A.forEach((e=>{r.push(...(0,d.formatStellium)(e))})):r.push("No Stelliums detected.")),r.push(""),r},m=(e,t)=>{const n=[],{chart1:r,chart2:i,groupedSynastryAspects:s,compositePatterns:o,houseOverlays:u}=e,c="event"===r.chartType&&"event"===i.chartType?"EVENT_RELATIONSHIP":"event"===r.chartType||"event"===i.chartType?"NATAL_EVENT":"SYNASTRY";return n.push(...(0,a.generateChartHeaderOutput)(`${r.name}-${i.name}`,c)),n.push(...(0,l.generateAspectsOutput)("[PLANET-PLANET ASPECTS]",s,r.name,i.name)),t.includeAspectPatterns&&o.length>0&&n.push(...(0,p.generateAspectPatternsOutput)(o,`${r.name}-${i.name} Composite`,!0)),n.push(""),t.includeHouseOverlays&&(n.push(...(0,f.generateHouseOverlaysOutput)(u,r.name,i.name)),n.push("")),n},A=(e,t=!1)=>{const n=[],{charts:r,patterns:a}=e;if(a.length>0){const e=r.map((e=>e.name)).join("-");let i=`${e} Global Composite`;t&&(i=`${e} Global Transit Composite`),n.push(...(0,p.generateAspectPatternsOutput)(a,i,!0)),n.push("")}return n}},729:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.calculateDispositors=function(e,t=!0){if(!1===t)return{};const n={};e.forEach((e=>{n[e.name]=function(e){const t=(0,a.getSign)(e.degree),n=r.ZODIAC_SIGN_DATA.find((e=>e.name===t));return n?n.ruler:"Unknown"}(e)}));const i={};if(e.forEach((e=>{i[e.name]||function(e,t,n){if(n[e])return n[e];const r=[e];let a=e;for(;;){const i=t[a];if(!i||!t.hasOwnProperty(i)){const t={path:[...r,i],isCycle:!1,isFinal:!1,isBroken:!0};return n[e]=t}if(i===a){const t={path:r,isCycle:!1,isFinal:!0,isBroken:!1};return n[e]=t}if(r.includes(i)){const e=r.indexOf(i),t=r.slice(e),a={path:[...r,i],isCycle:!0,isFinal:!1,isBroken:!1};return t.forEach((e=>{n[e]=a})),a}if(n[i]){const t=n[i],a=[...r,...t.path],s={...t,path:a};return n[e]=s}r.push(i),a=i}}(e.name,n,i)})),"finals"===t){const t=new Set,r=new Map;e.forEach((e=>{n[e.name]===e.name&&t.add(e.name)}));for(const e in i){const t=i[e];if(t.isCycle){const e=t.path[t.path.length-1],n=t.path.indexOf(e),a=t.path.slice(n,-1),i=[...new Set(a)].sort().join("|");r.has(i)||r.set(i,a)}}const a=[];if(t.size>0&&a.push(`Final dispositors: ${[...t].sort().join(", ")}`),r.size>0){const e=[...r.values()].map((e=>{const t=[...new Set(e)].sort()[0],n=e.indexOf(t);return[...[...e.slice(n),...e.slice(0,n)],t].join(" → ")})).sort();a.push(`Cycles: ${e.join(", ")}`)}return 0===a.length?{summary:"No final dispositors or cycles found"}:{summary:a.join("; ")}}const s={};return e.forEach((e=>{const t=e.name,r=[t];let a=t;for(;;){const e=n[a];if(!e||!n.hasOwnProperty(e)){s[t]=`${r.join(" → ")} → ${e} (not in chart)`;break}if(e===a){s[t]=`${r.join(" → ")} → (final)`;break}if(r.includes(e)){s[t]=`${r.join(" → ")} → ${e} (cycle)`;break}r.push(e),a=e}})),s};const r=n(921),a=n(175)},756:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateHouseOverlaysOutput=function(e,t,n){const r=["[HOUSE OVERLAYS]"];r.push(`${t}'s planets in ${n}'s houses:`),Object.keys(e.chart1InChart2Houses).length>0?r.push(a(e.chart1InChart2Houses)):r.push(`(${n} house cusps not available)`);r.push(`${n}'s planets in ${t}'s houses:`),Object.keys(e.chart2InChart1Houses).length>0?r.push(a(e.chart2InChart1Houses)):r.push(`(${t} house cusps not available)`);return r};const r=n(175);function a(e){const t={};for(const n in e){const r=e[n];t[r]||(t[r]=[]),t[r].push(n)}return Object.keys(t).map(Number).sort(((e,t)=>e-t)).map((e=>{const n=t[e].join(", ");return`${(0,r.getOrdinal)(e)}: ${n}`})).join(" | ")}},762:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateAspectPatternsOutput=function(e,t,n=!0){const r=[t?`[ASPECT PATTERNS: ${t}]`:"[ASPECT PATTERNS]"];if(0===e.length)return r.push("No T-Squares detected."),r.push("No Grand Trines detected."),r;const a=e.filter((t=>"Grand Trine"!==t.type||!function(e,t){return"Grand Trine"===e.type&&t.some((t=>{if("Kite"!==t.type)return!1;const n=e=>`${e.chartName||""}-${e.name}-${e.degree}`,r=t.grandTrine.map(n),a=e.planets.map(n);return r.length===a.length&&r.every((e=>a.includes(e)))}))}(t,e))),s=["T-Square","Grand Trine","Grand Cross","Yod","Mystic Rectangle","Kite"];a.sort(((e,t)=>s.indexOf(e.type)-s.indexOf(t.type))).forEach((e=>{switch(e.type){case"T-Square":r.push(...function(e,t=!0){if("T-Square"!==e.type)return[];const n=i(e.apex,!1,t),r=i(e.opposition[0],!1,t),a=i(e.opposition[1],!1,t);return[`T-Square (${e.mode}, ${e.averageOrb.toFixed(1)}°): ${n} ← ${r} ↔ ${a}`]}(e,n));break;case"Grand Trine":r.push(...function(e,t=!0){if("Grand Trine"!==e.type)return[];const n=e.planets.map((e=>i(e,!1,t))).join(" △ ");return[`Grand Trine (${e.element}, ${e.averageOrb.toFixed(1)}°): ${n}`]}(e,n));break;case"Grand Cross":r.push(...function(e,t=!0){if("Grand Cross"!==e.type)return[];const n=e.planets.map((e=>i(e,!1,t))).join(" ⨯ ");return[`Grand Cross (${e.mode}, ${e.averageOrb.toFixed(1)}°): ${n}`]}(e,n));break;case"Yod":r.push(...function(e,t=!0){if("Yod"!==e.type)return[];const n=i(e.apex,!1,t),r=i(e.base[0],!1,t),a=i(e.base[1],!1,t);return[`Yod (${e.averageOrb.toFixed(1)}°): ${n} ← ${r} • ${a}`]}(e,n));break;case"Mystic Rectangle":r.push(...function(e,t=!0){if("Mystic Rectangle"!==e.type)return[];const n=i(e.oppositions[0][0],!1,t),r=i(e.oppositions[0][1],!1,t),a=i(e.oppositions[1][0],!1,t),s=i(e.oppositions[1][1],!1,t);return[`Mystic Rectangle (${e.averageOrb.toFixed(1)}°): ${n} ↔ ${r} | ${a} ↔ ${s}`]}(e,n));break;case"Kite":r.push(...function(e,t=!0){if("Kite"!==e.type)return[];const n=e.grandTrine.map((e=>i(e,!1,t))).join(" △ "),r=i(e.opposition,!1,t),a=e.grandTrine[0].sign?function(e){const t=["Taurus","Virgo","Capricorn"],n=["Gemini","Libra","Aquarius"],r=["Cancer","Scorpio","Pisces"];return["Aries","Leo","Sagittarius"].includes(e)?"Fire":t.includes(e)?"Earth":n.includes(e)?"Air":r.includes(e)?"Water":""}(e.grandTrine[0].sign):"";return[`Kite (${a?`${a}, `:""}${e.averageOrb.toFixed(1)}°): [${n}] ← ${r}`]}(e,n))}})),""===r[r.length-1]&&r.pop();return r};const r=n(904),a=n(175);function i(e,t=!1,n=!0){const i=Math.floor((0,r.getDegreeInSign)(e.degree)),s=t&&e.house?` (${(0,a.getOrdinal)(e.house)} house)`:"";return`${n&&e.chartName?`${e.chartName}'s `:""}${e.name} ${i}° ${e.sign}${s}`}},784:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateAspectsOutput=function(e,t,n,r,a=!1){const i=[e];if(!t||0===t.size)return i.push("None"),i;return t.forEach(((e,t)=>{i.push(t),e.forEach((e=>{i.push(function(e,t,n,r=!1){const a=t?`${t}'s ${e.planetA}`:e.planetA;let i=e.planetB;r?i=`transiting ${e.planetB}`:n&&(i=`${n}'s ${e.planetB}`);const s=e.application&&"exact"!==e.application?` (${e.application})`:"";return`${a} ${e.aspectType} ${i}: ${e.orb.toFixed(1)}°${s}`}(e,n,r,a))}))})),i}},858:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.calculateSignDistributions=function(e,t){const n=[...e];void 0!==t&&n.push({name:"Ascendant",degree:t});const i={Fire:[],Earth:[],Air:[],Water:[]},s={Cardinal:0,Fixed:0,Mutable:0},o={Masculine:0,Feminine:0};for(const e of n){const t=(0,r.getSign)(e.degree),n=a.ZODIAC_SIGN_DATA.find((e=>e.name===t));n&&(i[n.element].push(e.name),s[n.modality]++,o[n.polarity]++)}return{elements:i,modalities:s,polarities:o}},t.formatElementDistribution=function(e){return[Object.entries(e).map((([e,t])=>0===t.length?`${e}: 0`:`${e}: ${t.length} (${t.join(", ")})`)).join(" | ")]},t.formatModalityDistribution=function(e){return[Object.entries(e).map((([e,t])=>`${e}: ${t}`)).join(" | ")]},t.formatPolarityDistribution=function(e){return[Object.entries(e).map((([e,t])=>`${e}: ${t}`)).join(" | ")]};const r=n(175),a=n(921)},865:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.groupAspects=function(e,t){const n=new Map,r=t.aspectStrengthThresholds,a=[],i=[],s=[];if(e.forEach((e=>{e.orb<=r.tight?a.push(e):e.orb<=r.moderate?i.push(e):s.push(e)})),a.sort(((e,t)=>e.orb-t.orb)),i.sort(((e,t)=>e.orb-t.orb)),s.sort(((e,t)=>e.orb-t.orb)),a.length>0){const e=`[TIGHT ASPECTS: orb under ${r.tight.toFixed(1)}°]`;n.set(e,a)}if(i.length>0){const e=`[MODERATE ASPECTS: orb ${r.tight.toFixed(1)}-${r.moderate.toFixed(1)}°]`;n.set(e,i)}if(s.length>0){const e=`[WIDE ASPECTS: orb over ${r.moderate.toFixed(1)}°]`;n.set(e,s)}return n}},888:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateBirthdataOutput=function(e,t,n,a="[BIRTHDATA]"){if(!t)return[`${a} Not available`];const i=(0,r.formatDateCustom)(t,n.dateFormat),s=(0,r.formatTime)(t);return[`${a} ${e||"Unknown Location"} | ${i} | ${s}`]};const r=n(889)},889:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.formatDateCustom=function(e,t){const n=e.getMonth()+1,r=e.getDate(),a=e.getFullYear();switch(t.toUpperCase()){case"MM/DD/YYYY":return`${n.toString().padStart(2,"0")}/${r.toString().padStart(2,"0")}/${a}`;case"DD/MM/YYYY":return`${r.toString().padStart(2,"0")}/${n.toString().padStart(2,"0")}/${a}`;case"YYYY-MM-DD":return`${a}-${n.toString().padStart(2,"0")}-${r.toString().padStart(2,"0")}`;default:return console.warn(`Unrecognized date format: ${t}. Falling back to toLocaleDateString().`),e.toLocaleDateString()}},t.formatTime=function(e){return e.toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!0})}},904:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.normalizeDegree=a,t.getDegreeSign=function(e){const t=a(e),n=Math.floor(t/30);if(n<0||n>=r.ZODIAC_SIGNS.length)return console.error(`Invalid sign index computed: ${n} for normalized degree ${t}`),"Unknown Sign";return r.ZODIAC_SIGNS[n]},t.getDegreeInSign=function(e){return a(e)%30};const r=n(921);function a(e){if(!isFinite(e))throw new Error(`Invalid degree value: ${e}`);let t=e%360;return t<0&&(t+=360),t}},919:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.detectAspectPatterns=function(e,t,n){const r=[],l=function(e){const t=new Map;return e.forEach((e=>{const n=a(e.planetA,e.p1ChartName),r=a(e.planetB,e.p2ChartName);t.has(n)||t.set(n,new Map),t.has(r)||t.set(r,new Map),t.get(n).set(r,e),t.get(r).set(n,e)})),t}(t);return r.push(...function(e,t,n){const r=[];for(let a=0;a<e.length;a++)for(let c=a+1;c<e.length;c++)if(o(e[a],e[c],"opposition",t))for(let l=0;l<e.length;l++)if(l!==a&&l!==c&&o(e[a],e[l],"square",t)&&o(e[c],e[l],"square",t)){const[o,p]=e[l],[f,h]=e[a],[d,g]=e[c],m=i(o,n,p),A=i(f,n,h),S=i(d,n,g),b=u(e[a],e[c],t),y=u(e[a],e[l],t),T=u(e[c],e[l],t),O=(b.orb+y.orb+T.orb)/3,M=s(m.sign);r.push({type:"T-Square",apex:m,opposition:[A,S],mode:M,averageOrb:O})}return r}(e,l,n)),r.push(...c(e,l,n)),r.push(...function(e,t,n){const r=[];for(let a=0;a<e.length;a++)for(let c=a+1;c<e.length;c++)for(let l=c+1;l<e.length;l++)for(let p=l+1;p<e.length;p++){const f=[e[a],e[c],e[l],e[p]],h=[[0,2],[1,3],[0,3],[1,2]];let d=0,g=0;const m=[];if([[0,1],[2,3]].forEach((([e,n])=>{o(f[e],f[n],"opposition",t)&&(d++,m.push(u(f[e],f[n],t)))})),h.forEach((([e,n])=>{o(f[e],f[n],"square",t)&&(g++,m.push(u(f[e],f[n],t)))})),2===d&&4===g){const[e,t]=f[0],[a,o]=f[1],[u,c]=f[2],[l,p]=f[3],h=i(e,n,t),d=i(a,n,o),g=i(u,n,c),A=i(l,n,p),S=m.reduce(((e,t)=>e+t.orb),0)/m.length,b=s(h.sign);r.push({type:"Grand Cross",planets:[h,d,g,A],mode:b,averageOrb:S})}}return r}(e,l,n)),r.push(...function(e,t,n){const r=[];for(let a=0;a<e.length;a++)for(let s=a+1;s<e.length;s++)if(o(e[a],e[s],"sextile",t))for(let c=0;c<e.length;c++)if(c!==a&&c!==s&&o(e[a],e[c],"quincunx",t)&&o(e[s],e[c],"quincunx",t)){const[o,l]=e[c],[p,f]=e[a],[h,d]=e[s],g=i(o,n,l),m=i(p,n,f),A=i(h,n,d),S=u(e[a],e[s],t),b=u(e[a],e[c],t),y=u(e[s],e[c],t),T=(S.orb+b.orb+y.orb)/3;r.push({type:"Yod",apex:g,base:[m,A],averageOrb:T})}return r}(e,l,n)),r.push(...function(e,t,n){const r=[];for(let a=0;a<e.length;a++)for(let s=a+1;s<e.length;s++)for(let c=s+1;c<e.length;c++)for(let l=c+1;l<e.length;l++){const p=[e[a],e[s],e[c],e[l]],f=[{oppositions:[[0,1],[2,3]],sextiles:[[0,2],[0,3],[1,2],[1,3]]},{oppositions:[[0,2],[1,3]],sextiles:[[0,1],[0,3],[2,1],[2,3]]},{oppositions:[[0,3],[1,2]],sextiles:[[0,1],[0,2],[3,1],[3,2]]}];for(const e of f){let a=0,s=0;const c=[];if(e.oppositions.forEach((([e,n])=>{o(p[e],p[n],"opposition",t)&&(a++,c.push(u(p[e],p[n],t)))})),e.sextiles.forEach((([e,n])=>{const r=u(p[e],p[n],t);!r||"sextile"!==r.aspectType&&"trine"!==r.aspectType||(s++,c.push(r))})),2===a&&4===s){const[t,a]=p[e.oppositions[0][0]],[s,o]=p[e.oppositions[0][1]],[u,l]=p[e.oppositions[1][0]],[f,h]=p[e.oppositions[1][1]],d=i(t,n,a),g=i(s,n,o),m=i(u,n,l),A=i(f,n,h),S=c.reduce(((e,t)=>e+t.orb),0)/c.length;r.push({type:"Mystic Rectangle",oppositions:[[d,g],[m,A]],averageOrb:S})}}}return r}(e,l,n)),r.push(...function(e,t,n){const r=[];return c(e,t,n).forEach((a=>{a.planets.forEach((s=>{e.forEach((c=>{const[l,p]=c;if(!a.planets.some((e=>e.name===l.name&&e.chartName===p))){const f=e.find((([e,t])=>e.name===s.name&&t===s.chartName));if(f&&o(f,c,"opposition",t)){const e=i(l,n,p),s=u(f,c,t),o=(a.averageOrb+s.orb)/2;r.push({type:"Kite",grandTrine:a.planets,opposition:e,averageOrb:o})}}}))}))})),r}(e,l,n)),r};const r=n(904);function a(e,t){return t?`${e}-${t}`:e}function i(e,t,n){const a=(0,r.getDegreeSign)(e.degree),i=t&&12===t.length?(()=>{const n=e.degree%360;for(let e=0;e<12;e++){const r=t[e],a=t[(e+1)%12];if(a>r){if(n>=r&&n<a)return e+1}else if(n>=r||n<a)return e+1}})():void 0;return{name:e.name,degree:e.degree,sign:a,house:i,chartName:n}}function s(e){return["Aries","Cancer","Libra","Capricorn"].includes(e)?"Cardinal":["Taurus","Leo","Scorpio","Aquarius"].includes(e)?"Fixed":"Mutable"}function o(e,t,n,r){const i=a(e[0].name,e[1]),s=a(t[0].name,t[1]),o=r.get(i);if(!o)return!1;const u=o.get(s);return void 0!==u&&u.aspectType===n}function u(e,t,n){const r=a(e[0].name,e[1]),i=a(t[0].name,t[1]),s=n.get(r);if(s)return s.get(i)}function c(e,t,n){const r=[];for(let s=0;s<e.length;s++)for(let c=s+1;c<e.length;c++)for(let l=c+1;l<e.length;l++)if(o(e[s],e[c],"trine",t)&&o(e[c],e[l],"trine",t)&&o(e[l],e[s],"trine",t)){const[o,p]=e[s],[f,h]=e[c],[d,g]=e[l],m=i(o,n,p),A=i(f,n,h),S=i(d,n,g),b=u(e[s],e[c],t),y=u(e[c],e[l],t),T=u(e[l],e[s],t),O=(b.orb+y.orb+T.orb)/3,M=(a=m.sign,["Aries","Leo","Sagittarius"].includes(a)?"Fire":["Taurus","Virgo","Capricorn"].includes(a)?"Earth":["Gemini","Libra","Aquarius"].includes(a)?"Air":"Water");r.push({type:"Grand Trine",planets:[m,A,S],element:M,averageOrb:O})}var a;return r}},921:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.DEFAULT_SETTINGS=t.DEFAULT_ASPECT_STRENGTH_THRESHOLDS=t.WIDE_ASPECTS=t.TIGHT_ASPECTS=t.MODERN_ASPECTS=t.TRADITIONAL_ASPECTS=t.SIMPLE_WIDE_ORBS=t.SIMPLE_TIGHT_ORBS=t.SIMPLE_MODERN_ORBS=t.SIMPLE_TRADITIONAL_ORBS=t.DEFAULT_ASPECTS=t.ZODIAC_SIGNS=t.ZODIAC_SIGN_DATA=void 0;const r=n(613);t.ZODIAC_SIGN_DATA=[{name:"Aries",element:"Fire",modality:"Cardinal",polarity:"Masculine",ruler:"Mars"},{name:"Taurus",element:"Earth",modality:"Fixed",polarity:"Feminine",ruler:"Venus"},{name:"Gemini",element:"Air",modality:"Mutable",polarity:"Masculine",ruler:"Mercury"},{name:"Cancer",element:"Water",modality:"Cardinal",polarity:"Feminine",ruler:"Moon"},{name:"Leo",element:"Fire",modality:"Fixed",polarity:"Masculine",ruler:"Sun"},{name:"Virgo",element:"Earth",modality:"Mutable",polarity:"Feminine",ruler:"Mercury"},{name:"Libra",element:"Air",modality:"Fixed",polarity:"Masculine",ruler:"Venus"},{name:"Scorpio",element:"Water",modality:"Fixed",polarity:"Feminine",ruler:"Mars"},{name:"Sagittarius",element:"Fire",modality:"Mutable",polarity:"Masculine",ruler:"Jupiter"},{name:"Capricorn",element:"Earth",modality:"Cardinal",polarity:"Feminine",ruler:"Saturn"},{name:"Aquarius",element:"Air",modality:"Fixed",polarity:"Masculine",ruler:"Saturn"},{name:"Pisces",element:"Water",modality:"Mutable",polarity:"Feminine",ruler:"Jupiter"}],t.ZODIAC_SIGNS=t.ZODIAC_SIGN_DATA.map((e=>e.name)),t.DEFAULT_ASPECTS=[{name:"conjunction",angle:0,orb:5,classification:r.AspectClassification.Major},{name:"opposition",angle:180,orb:5,classification:r.AspectClassification.Major},{name:"trine",angle:120,orb:5,classification:r.AspectClassification.Major},{name:"square",angle:90,orb:5,classification:r.AspectClassification.Major},{name:"sextile",angle:60,orb:3,classification:r.AspectClassification.Minor},{name:"quincunx",angle:150,orb:2,classification:r.AspectClassification.Minor}],t.SIMPLE_TRADITIONAL_ORBS=[{name:"conjunction",angle:0,orb:10,classification:r.AspectClassification.Major},{name:"opposition",angle:180,orb:10,classification:r.AspectClassification.Major},{name:"trine",angle:120,orb:8,classification:r.AspectClassification.Major},{name:"square",angle:90,orb:8,classification:r.AspectClassification.Major},{name:"sextile",angle:60,orb:6,classification:r.AspectClassification.Minor},{name:"quincunx",angle:150,orb:4,classification:r.AspectClassification.Minor}],t.SIMPLE_MODERN_ORBS=[{name:"conjunction",angle:0,orb:8,classification:r.AspectClassification.Major},{name:"opposition",angle:180,orb:8,classification:r.AspectClassification.Major},{name:"trine",angle:120,orb:6,classification:r.AspectClassification.Major},{name:"square",angle:90,orb:6,classification:r.AspectClassification.Major},{name:"sextile",angle:60,orb:4,classification:r.AspectClassification.Minor},{name:"quincunx",angle:150,orb:3,classification:r.AspectClassification.Minor}],t.SIMPLE_TIGHT_ORBS=[{name:"conjunction",angle:0,orb:4,classification:r.AspectClassification.Major},{name:"opposition",angle:180,orb:4,classification:r.AspectClassification.Major},{name:"trine",angle:120,orb:3,classification:r.AspectClassification.Major},{name:"square",angle:90,orb:3,classification:r.AspectClassification.Major},{name:"sextile",angle:60,orb:2,classification:r.AspectClassification.Minor},{name:"quincunx",angle:150,orb:1,classification:r.AspectClassification.Minor}],t.SIMPLE_WIDE_ORBS=[{name:"conjunction",angle:0,orb:12,classification:r.AspectClassification.Major},{name:"opposition",angle:180,orb:12,classification:r.AspectClassification.Major},{name:"trine",angle:120,orb:10,classification:r.AspectClassification.Major},{name:"square",angle:90,orb:10,classification:r.AspectClassification.Major},{name:"sextile",angle:60,orb:8,classification:r.AspectClassification.Minor},{name:"quincunx",angle:150,orb:6,classification:r.AspectClassification.Minor},{name:"semi-sextile",angle:30,orb:4,classification:r.AspectClassification.Minor}],t.TRADITIONAL_ASPECTS=t.SIMPLE_TRADITIONAL_ORBS,t.MODERN_ASPECTS=t.SIMPLE_MODERN_ORBS,t.TIGHT_ASPECTS=t.SIMPLE_TIGHT_ORBS,t.WIDE_ASPECTS=t.SIMPLE_WIDE_ORBS,t.DEFAULT_ASPECT_STRENGTH_THRESHOLDS={tight:2,moderate:4},t.DEFAULT_SETTINGS={aspectDefinitions:t.DEFAULT_ASPECTS,skipOutOfSignAspects:!0,includeAspectPatterns:!1,includeSignDistributions:!0,includeDispositors:!0,includeHouseOverlays:!0,aspectStrengthThresholds:t.DEFAULT_ASPECT_STRENGTH_THRESHOLDS,houseSystemName:"whole_sign",dateFormat:"MM/DD/YYYY"}},945:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateAnglesOutput=function(e,t){const n=["[ANGLES]"];void 0!==e?n.push(`Ascendant: ${Math.floor((0,r.getDegreeInSign)(e))}° ${(0,r.getDegreeSign)(e)}`):n.push("Ascendant: Not available");void 0!==t?n.push(`Midheaven: ${Math.floor((0,r.getDegreeInSign)(t))}° ${(0,r.getDegreeSign)(t)}`):n.push("Midheaven: Not available");return n};const r=n(904)}},t={};var n=function n(r){var a=t[r];if(void 0!==a)return a.exports;var i=t[r]={exports:{}};return e[r].call(i.exports,i,i.exports,n),i.exports}(156);return n})()));
|
|
@@ -6,14 +6,12 @@ export declare class ChartSettings implements Settings {
|
|
|
6
6
|
aspectStrengthThresholds: AspectStrengthThresholds;
|
|
7
7
|
includeAspectPatterns: boolean;
|
|
8
8
|
includeSignDistributions: boolean;
|
|
9
|
+
includeDispositors: boolean | 'finals';
|
|
10
|
+
includeHouseOverlays: boolean;
|
|
9
11
|
dateFormat: string;
|
|
10
12
|
constructor(customSettings?: PartialSettings);
|
|
11
13
|
/**
|
|
12
14
|
* Gets the resolved aspect definitions (handles preset strings)
|
|
13
15
|
*/
|
|
14
16
|
get resolvedAspectDefinitions(): Aspect[];
|
|
15
|
-
/**
|
|
16
|
-
* Returns a plain JSON object representation of the settings.
|
|
17
|
-
*/
|
|
18
|
-
toJSON(): Settings;
|
|
19
17
|
}
|
|
@@ -28,19 +28,5 @@ class ChartSettings {
|
|
|
28
28
|
return constants_1.DEFAULT_SETTINGS.aspectDefinitions;
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
|
-
/**
|
|
32
|
-
* Returns a plain JSON object representation of the settings.
|
|
33
|
-
*/
|
|
34
|
-
toJSON() {
|
|
35
|
-
return {
|
|
36
|
-
houseSystemName: this.houseSystemName,
|
|
37
|
-
skipOutOfSignAspects: this.skipOutOfSignAspects,
|
|
38
|
-
aspectDefinitions: this.aspectDefinitions,
|
|
39
|
-
aspectStrengthThresholds: this.aspectStrengthThresholds,
|
|
40
|
-
includeAspectPatterns: this.includeAspectPatterns,
|
|
41
|
-
includeSignDistributions: this.includeSignDistributions,
|
|
42
|
-
dateFormat: this.dateFormat,
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
31
|
}
|
|
46
32
|
exports.ChartSettings = ChartSettings;
|
package/dist/constants.js
CHANGED
|
@@ -303,6 +303,8 @@ exports.DEFAULT_SETTINGS = {
|
|
|
303
303
|
skipOutOfSignAspects: true,
|
|
304
304
|
includeAspectPatterns: false,
|
|
305
305
|
includeSignDistributions: true,
|
|
306
|
+
includeDispositors: true,
|
|
307
|
+
includeHouseOverlays: true,
|
|
306
308
|
// Grouping settings
|
|
307
309
|
aspectStrengthThresholds: exports.DEFAULT_ASPECT_STRENGTH_THRESHOLDS,
|
|
308
310
|
// Formatting settings
|
package/dist/core/analysis.js
CHANGED
|
@@ -158,7 +158,7 @@ function analyzeCharts(data, partialSettings = {}) {
|
|
|
158
158
|
? (0, signDistributions_1.calculateSignDistributions)(chart.planets, chart.ascendant)
|
|
159
159
|
: { elements: {}, modalities: {}, polarities: {} },
|
|
160
160
|
dispositors: chart.chartType !== 'transit'
|
|
161
|
-
? (0, dispositors_1.calculateDispositors)(chart.planets)
|
|
161
|
+
? (0, dispositors_1.calculateDispositors)(chart.planets, settings.includeDispositors)
|
|
162
162
|
: {},
|
|
163
163
|
});
|
|
164
164
|
}
|
|
@@ -177,7 +177,9 @@ function analyzeCharts(data, partialSettings = {}) {
|
|
|
177
177
|
chart2: chart2,
|
|
178
178
|
synastryAspects: synastryAspects,
|
|
179
179
|
compositePatterns: compositePatterns,
|
|
180
|
-
houseOverlays:
|
|
180
|
+
houseOverlays: settings.includeHouseOverlays
|
|
181
|
+
? (0, houseCalculations_1.calculateHouseOverlays)(chart1, chart2)
|
|
182
|
+
: { chart1InChart2Houses: {}, chart2InChart1Houses: {} },
|
|
181
183
|
});
|
|
182
184
|
}
|
|
183
185
|
}
|
|
@@ -2,8 +2,9 @@ import { Point } from '../types';
|
|
|
2
2
|
/**
|
|
3
3
|
* Calculates the full dispositor chain for each planet in the chart.
|
|
4
4
|
* @param planets The list of planets in the chart.
|
|
5
|
-
* @
|
|
5
|
+
* @param mode Controls which dispositor chains to include: true (all), false (none), 'finals' (only final dispositors and cycles).
|
|
6
|
+
* @returns A map of each planet to its full dispositor chain string, or a summary in 'finals' mode.
|
|
6
7
|
*/
|
|
7
|
-
export declare function calculateDispositors(planets: Point[]): {
|
|
8
|
+
export declare function calculateDispositors(planets: Point[], mode?: boolean | 'finals'): {
|
|
8
9
|
[key: string]: string;
|
|
9
10
|
};
|
package/dist/core/dispositors.js
CHANGED
|
@@ -13,45 +13,157 @@ function getDispositor(planet) {
|
|
|
13
13
|
const signData = constants_1.ZODIAC_SIGN_DATA.find((s) => s.name === sign);
|
|
14
14
|
return signData ? signData.ruler : 'Unknown';
|
|
15
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* Analyzes the dispositor graph for a single planet, using memoization to avoid re-computation.
|
|
18
|
+
* @param startPlanet - The planet to begin the analysis from.
|
|
19
|
+
* @param dispositorMap - A map of each planet to its direct dispositor.
|
|
20
|
+
* @param cache - A cache of already computed results to avoid redundant work.
|
|
21
|
+
* @returns The analysis result for the starting planet.
|
|
22
|
+
*/
|
|
23
|
+
function analyzePlanetChain(startPlanet, dispositorMap, cache) {
|
|
24
|
+
if (cache[startPlanet]) {
|
|
25
|
+
return cache[startPlanet];
|
|
26
|
+
}
|
|
27
|
+
const path = [startPlanet];
|
|
28
|
+
let current = startPlanet;
|
|
29
|
+
// eslint-disable-next-line no-constant-condition
|
|
30
|
+
while (true) {
|
|
31
|
+
const nextDispositor = dispositorMap[current];
|
|
32
|
+
if (!nextDispositor || !dispositorMap.hasOwnProperty(nextDispositor)) {
|
|
33
|
+
// Chain is broken (dispositor not in the chart)
|
|
34
|
+
const result = {
|
|
35
|
+
path: [...path, nextDispositor],
|
|
36
|
+
isCycle: false,
|
|
37
|
+
isFinal: false,
|
|
38
|
+
isBroken: true,
|
|
39
|
+
};
|
|
40
|
+
return (cache[startPlanet] = result);
|
|
41
|
+
}
|
|
42
|
+
if (nextDispositor === current) {
|
|
43
|
+
// Final dispositor
|
|
44
|
+
const result = {
|
|
45
|
+
path,
|
|
46
|
+
isCycle: false,
|
|
47
|
+
isFinal: true,
|
|
48
|
+
isBroken: false,
|
|
49
|
+
};
|
|
50
|
+
return (cache[startPlanet] = result);
|
|
51
|
+
}
|
|
52
|
+
if (path.includes(nextDispositor)) {
|
|
53
|
+
// Cycle detected
|
|
54
|
+
const cycleStartIndex = path.indexOf(nextDispositor);
|
|
55
|
+
const cyclePath = path.slice(cycleStartIndex);
|
|
56
|
+
const result = {
|
|
57
|
+
path: [...path, nextDispositor],
|
|
58
|
+
isCycle: true,
|
|
59
|
+
isFinal: false,
|
|
60
|
+
isBroken: false,
|
|
61
|
+
};
|
|
62
|
+
// Cache the result for all members of the cycle
|
|
63
|
+
cyclePath.forEach((planet) => {
|
|
64
|
+
cache[planet] = result;
|
|
65
|
+
});
|
|
66
|
+
return result;
|
|
67
|
+
}
|
|
68
|
+
// If we've hit a node that's already been analyzed, we can use its result
|
|
69
|
+
if (cache[nextDispositor]) {
|
|
70
|
+
const nestedResult = cache[nextDispositor];
|
|
71
|
+
const combinedPath = [...path, ...nestedResult.path];
|
|
72
|
+
const result = { ...nestedResult, path: combinedPath };
|
|
73
|
+
return (cache[startPlanet] = result);
|
|
74
|
+
}
|
|
75
|
+
path.push(nextDispositor);
|
|
76
|
+
current = nextDispositor;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
16
79
|
/**
|
|
17
80
|
* Calculates the full dispositor chain for each planet in the chart.
|
|
18
81
|
* @param planets The list of planets in the chart.
|
|
19
|
-
* @
|
|
82
|
+
* @param mode Controls which dispositor chains to include: true (all), false (none), 'finals' (only final dispositors and cycles).
|
|
83
|
+
* @returns A map of each planet to its full dispositor chain string, or a summary in 'finals' mode.
|
|
20
84
|
*/
|
|
21
|
-
function calculateDispositors(planets) {
|
|
85
|
+
function calculateDispositors(planets, mode = true) {
|
|
86
|
+
if (mode === false) {
|
|
87
|
+
return {};
|
|
88
|
+
}
|
|
22
89
|
const dispositorMap = {};
|
|
23
90
|
planets.forEach((p) => {
|
|
24
91
|
dispositorMap[p.name] = getDispositor(p);
|
|
25
92
|
});
|
|
93
|
+
const analysisCache = {};
|
|
94
|
+
planets.forEach((p) => {
|
|
95
|
+
if (!analysisCache[p.name]) {
|
|
96
|
+
analyzePlanetChain(p.name, dispositorMap, analysisCache);
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
if (mode === 'finals') {
|
|
100
|
+
const finalDispositors = new Set();
|
|
101
|
+
const cycles = new Map();
|
|
102
|
+
planets.forEach((p) => {
|
|
103
|
+
if (dispositorMap[p.name] === p.name) {
|
|
104
|
+
finalDispositors.add(p.name);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
for (const planetName in analysisCache) {
|
|
108
|
+
const result = analysisCache[planetName];
|
|
109
|
+
if (result.isCycle) {
|
|
110
|
+
const lastPlanetInPath = result.path[result.path.length - 1];
|
|
111
|
+
const cycleStartIndex = result.path.indexOf(lastPlanetInPath);
|
|
112
|
+
const cyclePlanets = result.path.slice(cycleStartIndex, -1);
|
|
113
|
+
const canonicalKey = [...new Set(cyclePlanets)].sort().join('|');
|
|
114
|
+
if (!cycles.has(canonicalKey)) {
|
|
115
|
+
cycles.set(canonicalKey, cyclePlanets);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
const summaryParts = [];
|
|
120
|
+
if (finalDispositors.size > 0) {
|
|
121
|
+
summaryParts.push(`Final dispositors: ${[...finalDispositors].sort().join(', ')}`);
|
|
122
|
+
}
|
|
123
|
+
if (cycles.size > 0) {
|
|
124
|
+
const formattedCycles = [...cycles.values()]
|
|
125
|
+
.map((cycle) => {
|
|
126
|
+
const uniqueCyclePlanets = [...new Set(cycle)];
|
|
127
|
+
const startNode = uniqueCyclePlanets.sort()[0];
|
|
128
|
+
const startIndex = cycle.indexOf(startNode);
|
|
129
|
+
const reordered = [
|
|
130
|
+
...cycle.slice(startIndex),
|
|
131
|
+
...cycle.slice(0, startIndex),
|
|
132
|
+
];
|
|
133
|
+
return [...reordered, startNode].join(' → ');
|
|
134
|
+
})
|
|
135
|
+
.sort();
|
|
136
|
+
summaryParts.push(`Cycles: ${formattedCycles.join(', ')}`);
|
|
137
|
+
}
|
|
138
|
+
if (summaryParts.length === 0) {
|
|
139
|
+
return { summary: 'No final dispositors or cycles found' };
|
|
140
|
+
}
|
|
141
|
+
return { summary: summaryParts.join('; ') };
|
|
142
|
+
}
|
|
143
|
+
// Default mode: return all chains
|
|
26
144
|
const chains = {};
|
|
27
|
-
planets.forEach((
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
let
|
|
145
|
+
planets.forEach((p) => {
|
|
146
|
+
const planetName = p.name;
|
|
147
|
+
const path = [planetName];
|
|
148
|
+
let current = planetName;
|
|
31
149
|
// eslint-disable-next-line no-constant-condition
|
|
32
150
|
while (true) {
|
|
33
151
|
const nextDispositor = dispositorMap[current];
|
|
34
|
-
// eslint-disable-next-line no-prototype-builtins
|
|
35
152
|
if (!nextDispositor || !dispositorMap.hasOwnProperty(nextDispositor)) {
|
|
36
|
-
|
|
37
|
-
chain += ` → ${nextDispositor} (not in chart)`;
|
|
153
|
+
chains[planetName] = `${path.join(' → ')} → ${nextDispositor} (not in chart)`;
|
|
38
154
|
break;
|
|
39
155
|
}
|
|
40
156
|
if (nextDispositor === current) {
|
|
41
|
-
|
|
42
|
-
chain += ` → (final)`;
|
|
157
|
+
chains[planetName] = `${path.join(' → ')} → (final)`;
|
|
43
158
|
break;
|
|
44
159
|
}
|
|
45
160
|
if (path.includes(nextDispositor)) {
|
|
46
|
-
|
|
47
|
-
chain += ` → ${nextDispositor} (cycle)`;
|
|
161
|
+
chains[planetName] = `${path.join(' → ')} → ${nextDispositor} (cycle)`;
|
|
48
162
|
break;
|
|
49
163
|
}
|
|
50
164
|
path.push(nextDispositor);
|
|
51
|
-
chain += ` → ${nextDispositor}`;
|
|
52
165
|
current = nextDispositor;
|
|
53
166
|
}
|
|
54
|
-
chains[planet.name] = chain;
|
|
55
167
|
});
|
|
56
168
|
return chains;
|
|
57
169
|
}
|
|
@@ -35,16 +35,19 @@ function calculateSignDistributions(planets, ascendant) {
|
|
|
35
35
|
return { elements, modalities, polarities };
|
|
36
36
|
}
|
|
37
37
|
function formatElementDistribution(elements) {
|
|
38
|
-
|
|
38
|
+
const parts = Object.entries(elements).map(([element, planets]) => {
|
|
39
39
|
if (planets.length === 0) {
|
|
40
40
|
return `${element}: 0`;
|
|
41
41
|
}
|
|
42
42
|
return `${element}: ${planets.length} (${planets.join(', ')})`;
|
|
43
43
|
});
|
|
44
|
+
return [parts.join(' | ')];
|
|
44
45
|
}
|
|
45
46
|
function formatModalityDistribution(modalities) {
|
|
46
|
-
|
|
47
|
+
const parts = Object.entries(modalities).map(([modality, count]) => `${modality}: ${count}`);
|
|
48
|
+
return [parts.join(' | ')];
|
|
47
49
|
}
|
|
48
50
|
function formatPolarityDistribution(polarities) {
|
|
49
|
-
|
|
51
|
+
const parts = Object.entries(polarities).map(([polarity, count]) => `${polarity}: ${count}`);
|
|
52
|
+
return [parts.join(' | ')];
|
|
50
53
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Generates the [DISPOSITOR TREE] section of the chart output.
|
|
3
|
-
* @param dispositors A map of planet names to their full dispositor chain string.
|
|
3
|
+
* @param dispositors A map of planet names to their full dispositor chain string, or summary data.
|
|
4
4
|
* @returns An array of strings for the output.
|
|
5
5
|
*/
|
|
6
6
|
export declare function generateDispositorsOutput(dispositors: {
|
|
@@ -3,10 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.generateDispositorsOutput = generateDispositorsOutput;
|
|
4
4
|
/**
|
|
5
5
|
* Generates the [DISPOSITOR TREE] section of the chart output.
|
|
6
|
-
* @param dispositors A map of planet names to their full dispositor chain string.
|
|
6
|
+
* @param dispositors A map of planet names to their full dispositor chain string, or summary data.
|
|
7
7
|
* @returns An array of strings for the output.
|
|
8
8
|
*/
|
|
9
9
|
function generateDispositorsOutput(dispositors) {
|
|
10
|
+
// Check if this is summary format (finals mode)
|
|
11
|
+
if (dispositors['summary']) {
|
|
12
|
+
return [`[DISPOSITORS] ${dispositors['summary']}`];
|
|
13
|
+
}
|
|
14
|
+
// Traditional format
|
|
10
15
|
const output = ['[DISPOSITOR TREE]'];
|
|
11
16
|
if (Object.keys(dispositors).length === 0) {
|
|
12
17
|
output.push('No dispositor data available.');
|
|
@@ -21,7 +21,9 @@ const processSingleChartOutput = (analysis, settings, chartTitlePrefix) => {
|
|
|
21
21
|
outputLines.push(...(0, angles_1.generateAnglesOutput)(chart.ascendant, chart.midheaven));
|
|
22
22
|
outputLines.push(...(0, houses_1.generateHousesOutput)(chart.houseCusps));
|
|
23
23
|
outputLines.push(...(0, planets_1.generatePlanetsOutput)(placements.planets));
|
|
24
|
-
|
|
24
|
+
if (settings.includeDispositors) {
|
|
25
|
+
outputLines.push(...(0, dispositors_1.generateDispositorsOutput)(dispositors));
|
|
26
|
+
}
|
|
25
27
|
if (settings.includeSignDistributions) {
|
|
26
28
|
outputLines.push(...(0, signDistributions_1.generateElementDistributionOutput)(signDistributions.elements));
|
|
27
29
|
outputLines.push(...(0, signDistributions_1.generateModalityDistributionOutput)(signDistributions.modalities));
|
|
@@ -56,8 +58,10 @@ const processChartPairOutput = (analysis, settings) => {
|
|
|
56
58
|
outputLines.push(...(0, aspectPatterns_1.generateAspectPatternsOutput)(compositePatterns, `${chart1.name}-${chart2.name} Composite`, true));
|
|
57
59
|
}
|
|
58
60
|
outputLines.push('');
|
|
59
|
-
|
|
60
|
-
|
|
61
|
+
if (settings.includeHouseOverlays) {
|
|
62
|
+
outputLines.push(...(0, houseOverlays_1.generateHouseOverlaysOutput)(houseOverlays, chart1.name, chart2.name));
|
|
63
|
+
outputLines.push('');
|
|
64
|
+
}
|
|
61
65
|
return outputLines;
|
|
62
66
|
};
|
|
63
67
|
const processGlobalPatternsOutput = (analysis, isTransit = false) => {
|
package/dist/types.d.ts
CHANGED
|
@@ -175,6 +175,8 @@ export interface AnalysisSettings {
|
|
|
175
175
|
skipOutOfSignAspects?: boolean;
|
|
176
176
|
includeAspectPatterns?: boolean;
|
|
177
177
|
includeSignDistributions?: boolean;
|
|
178
|
+
includeDispositors?: boolean | 'finals';
|
|
179
|
+
includeHouseOverlays?: boolean;
|
|
178
180
|
}
|
|
179
181
|
export interface GroupingSettings {
|
|
180
182
|
aspectStrengthThresholds?: AspectStrengthThresholds;
|