chart2txt 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +101 -34
- package/dist/chart2txt.d.ts +9 -0
- package/dist/chart2txt.js +30 -0
- package/dist/chart2txt.min.js +1 -1
- package/dist/config/ChartSettings.d.ts +12 -6
- package/dist/config/ChartSettings.js +36 -11
- package/dist/constants.d.ts +17 -2
- package/dist/constants.js +301 -34
- package/dist/core/analysis.d.ts +6 -0
- package/dist/core/analysis.js +235 -0
- package/dist/core/aspectPatterns.d.ts +8 -3
- package/dist/core/aspectPatterns.js +234 -218
- package/dist/core/aspects.d.ts +14 -11
- package/dist/core/aspects.js +49 -32
- package/dist/core/dignities.d.ts +2 -27
- package/dist/core/dignities.js +56 -121
- package/dist/core/dispositors.d.ts +6 -19
- package/dist/core/dispositors.js +45 -131
- package/dist/core/grouping.d.ts +9 -0
- package/dist/core/grouping.js +45 -0
- package/dist/core/signDistributions.d.ts +20 -30
- package/dist/core/signDistributions.js +22 -122
- package/dist/core/stelliums.d.ts +10 -0
- package/dist/core/stelliums.js +108 -0
- package/dist/formatters/text/sections/aspectPatterns.d.ts +3 -1
- package/dist/formatters/text/sections/aspectPatterns.js +118 -94
- package/dist/formatters/text/sections/aspects.d.ts +3 -6
- package/dist/formatters/text/sections/aspects.js +35 -52
- package/dist/formatters/text/sections/dispositors.d.ts +4 -3
- package/dist/formatters/text/sections/dispositors.js +7 -8
- package/dist/formatters/text/sections/houseOverlays.d.ts +11 -6
- package/dist/formatters/text/sections/houseOverlays.js +37 -44
- package/dist/formatters/text/sections/metadata.d.ts +2 -0
- package/dist/formatters/text/sections/metadata.js +54 -0
- package/dist/formatters/text/sections/planets.d.ts +3 -5
- package/dist/formatters/text/sections/planets.js +11 -22
- package/dist/formatters/text/sections/signDistributions.d.ts +9 -25
- package/dist/formatters/text/sections/signDistributions.js +9 -55
- package/dist/formatters/text/textFormatter.d.ts +4 -5
- package/dist/formatters/text/textFormatter.js +81 -141
- package/dist/index.d.ts +7 -4
- package/dist/index.js +11 -6
- package/dist/types.d.ts +100 -15
- package/dist/types.js +15 -0
- package/dist/utils/formatting.d.ts +4 -0
- package/dist/utils/formatting.js +43 -0
- package/dist/utils/houseCalculations.d.ts +10 -13
- package/dist/utils/houseCalculations.js +15 -57
- package/package.json +1 -1
|
@@ -1,37 +1,26 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.generatePlanetsOutput = generatePlanetsOutput;
|
|
4
|
-
const astrology_1 = require("../../../core/astrology");
|
|
5
|
-
const dignities_1 = require("../../../core/dignities");
|
|
6
4
|
const formatting_1 = require("../../../utils/formatting");
|
|
7
|
-
const
|
|
5
|
+
const dignities_1 = require("../../../core/dignities");
|
|
8
6
|
/**
|
|
9
7
|
* Generates the [PLANETS] section of the chart output.
|
|
10
|
-
* @param
|
|
11
|
-
* @param houseCusps Array of 12 house cusp degrees, or undefined if not available.
|
|
8
|
+
* @param placements Array of planet positions.
|
|
12
9
|
* @param settings The chart settings.
|
|
13
10
|
* @returns An array of strings for the output.
|
|
14
11
|
*/
|
|
15
|
-
function generatePlanetsOutput(
|
|
12
|
+
function generatePlanetsOutput(placements) {
|
|
16
13
|
const output = ['[PLANETS]'];
|
|
17
|
-
|
|
18
|
-
const
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
if (dignities) {
|
|
24
|
-
line += ` ${dignities}`;
|
|
25
|
-
}
|
|
26
|
-
if (houseCusps && houseCusps.length === 12) {
|
|
27
|
-
const houseNumber = (0, houseCalculations_1.getHouseForPoint)(planet.degree, houseCusps);
|
|
28
|
-
if (houseNumber) {
|
|
29
|
-
line += `, ${(0, formatting_1.getOrdinal)(houseNumber)} house`;
|
|
30
|
-
}
|
|
14
|
+
placements.forEach((planet) => {
|
|
15
|
+
const dignities = (0, dignities_1.formatPlanetWithDignities)(planet);
|
|
16
|
+
const retrograde = planet.speed && planet.speed < 0 ? ' Retrograde' : '';
|
|
17
|
+
let line = `${planet.name}: ${Math.floor(planet.degree % 30)}° ${planet.sign}${retrograde} ${dignities}`;
|
|
18
|
+
if (planet.house) {
|
|
19
|
+
line += `, ${(0, formatting_1.getOrdinal)(planet.house)} house`;
|
|
31
20
|
}
|
|
32
|
-
output.push(line);
|
|
21
|
+
output.push(line.replace(/\s+/g, ' ').trim());
|
|
33
22
|
});
|
|
34
|
-
if (
|
|
23
|
+
if (placements.length === 0) {
|
|
35
24
|
output.push('No planets listed.');
|
|
36
25
|
}
|
|
37
26
|
return output;
|
|
@@ -1,25 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Generates the [MODALITY DISTRIBUTION] section of the chart output.
|
|
12
|
-
* @param planets Array of planet points.
|
|
13
|
-
* @param chartName Optional chart name for the header.
|
|
14
|
-
* @param ascendant Optional ascendant degree to include in analysis.
|
|
15
|
-
* @returns An array of strings for the output.
|
|
16
|
-
*/
|
|
17
|
-
export declare function generateModalityDistributionOutput(planets: Point[], chartName?: string, ascendant?: number): string[];
|
|
18
|
-
/**
|
|
19
|
-
* Generates the [POLARITY] section of the chart output.
|
|
20
|
-
* @param planets Array of planet points.
|
|
21
|
-
* @param chartName Optional chart name for the header.
|
|
22
|
-
* @param ascendant Optional ascendant degree to include in analysis.
|
|
23
|
-
* @returns An array of strings for the output.
|
|
24
|
-
*/
|
|
25
|
-
export declare function generatePolarityOutput(planets: Point[], chartName?: string, ascendant?: number): string[];
|
|
1
|
+
export declare function generateElementDistributionOutput(elements: {
|
|
2
|
+
[key: string]: string[];
|
|
3
|
+
}): string[];
|
|
4
|
+
export declare function generateModalityDistributionOutput(modalities: {
|
|
5
|
+
[key: string]: number;
|
|
6
|
+
}): string[];
|
|
7
|
+
export declare function generatePolarityOutput(polarities: {
|
|
8
|
+
[key: string]: number;
|
|
9
|
+
}): string[];
|
|
@@ -4,64 +4,18 @@ exports.generateElementDistributionOutput = generateElementDistributionOutput;
|
|
|
4
4
|
exports.generateModalityDistributionOutput = generateModalityDistributionOutput;
|
|
5
5
|
exports.generatePolarityOutput = generatePolarityOutput;
|
|
6
6
|
const signDistributions_1 = require("../../../core/signDistributions");
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
* @param chartName Optional chart name for the header.
|
|
11
|
-
* @param ascendant Optional ascendant degree to include in analysis.
|
|
12
|
-
* @returns An array of strings for the output.
|
|
13
|
-
*/
|
|
14
|
-
function generateElementDistributionOutput(planets, chartName, ascendant) {
|
|
15
|
-
const header = chartName
|
|
16
|
-
? `[ELEMENT DISTRIBUTION: ${chartName}]`
|
|
17
|
-
: '[ELEMENT DISTRIBUTION]';
|
|
18
|
-
const output = [header];
|
|
19
|
-
if (planets.length === 0) {
|
|
20
|
-
output.push('No planets available for element analysis.');
|
|
21
|
-
return output;
|
|
22
|
-
}
|
|
23
|
-
const distributions = (0, signDistributions_1.analyzeSignDistributions)(planets, ascendant);
|
|
24
|
-
const formattedElements = (0, signDistributions_1.formatElementDistribution)(distributions.elements);
|
|
25
|
-
output.push(...formattedElements);
|
|
7
|
+
function generateElementDistributionOutput(elements) {
|
|
8
|
+
const output = ['[ELEMENT DISTRIBUTION]'];
|
|
9
|
+
output.push(...(0, signDistributions_1.formatElementDistribution)(elements));
|
|
26
10
|
return output;
|
|
27
11
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
* @param chartName Optional chart name for the header.
|
|
32
|
-
* @param ascendant Optional ascendant degree to include in analysis.
|
|
33
|
-
* @returns An array of strings for the output.
|
|
34
|
-
*/
|
|
35
|
-
function generateModalityDistributionOutput(planets, chartName, ascendant) {
|
|
36
|
-
const header = chartName
|
|
37
|
-
? `[MODALITY DISTRIBUTION: ${chartName}]`
|
|
38
|
-
: '[MODALITY DISTRIBUTION]';
|
|
39
|
-
const output = [header];
|
|
40
|
-
if (planets.length === 0) {
|
|
41
|
-
output.push('No planets available for modality analysis.');
|
|
42
|
-
return output;
|
|
43
|
-
}
|
|
44
|
-
const distributions = (0, signDistributions_1.analyzeSignDistributions)(planets, ascendant);
|
|
45
|
-
const formattedModalities = (0, signDistributions_1.formatModalityDistribution)(distributions.modalities);
|
|
46
|
-
output.push(...formattedModalities);
|
|
12
|
+
function generateModalityDistributionOutput(modalities) {
|
|
13
|
+
const output = ['[MODALITY DISTRIBUTION]'];
|
|
14
|
+
output.push(...(0, signDistributions_1.formatModalityDistribution)(modalities));
|
|
47
15
|
return output;
|
|
48
16
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
* @param chartName Optional chart name for the header.
|
|
53
|
-
* @param ascendant Optional ascendant degree to include in analysis.
|
|
54
|
-
* @returns An array of strings for the output.
|
|
55
|
-
*/
|
|
56
|
-
function generatePolarityOutput(planets, chartName, ascendant) {
|
|
57
|
-
const header = chartName ? `[POLARITY: ${chartName}]` : '[POLARITY]';
|
|
58
|
-
const output = [header];
|
|
59
|
-
if (planets.length === 0) {
|
|
60
|
-
output.push('No planets available for polarity analysis.');
|
|
61
|
-
return output;
|
|
62
|
-
}
|
|
63
|
-
const distributions = (0, signDistributions_1.analyzeSignDistributions)(planets, ascendant);
|
|
64
|
-
const formattedPolarities = (0, signDistributions_1.formatPolarityDistribution)(distributions.polarities);
|
|
65
|
-
output.push(...formattedPolarities);
|
|
17
|
+
function generatePolarityOutput(polarities) {
|
|
18
|
+
const output = ['[POLARITY]'];
|
|
19
|
+
output.push(...(0, signDistributions_1.formatPolarityDistribution)(polarities));
|
|
66
20
|
return output;
|
|
67
21
|
}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AstrologicalReport } from '../../types';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
* @param
|
|
5
|
-
* @param partialSettings Optional: Custom settings to override defaults.
|
|
3
|
+
* Formats a pre-computed and pre-grouped AstrologicalReport into a human-readable text string.
|
|
4
|
+
* @param report The AstrologicalReport object, with aspects already grouped.
|
|
6
5
|
* @returns A string representing the full chart report.
|
|
7
6
|
*/
|
|
8
|
-
export declare function
|
|
7
|
+
export declare function formatReportToText(report: AstrologicalReport): string;
|
|
@@ -1,24 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
const types_1 = require("../../types");
|
|
5
|
-
const ChartSettings_1 = require("../../config/ChartSettings");
|
|
6
|
-
const validation_1 = require("../../utils/validation");
|
|
7
|
-
const aspects_1 = require("../../core/aspects");
|
|
8
|
-
const aspectPatterns_1 = require("../../core/aspectPatterns");
|
|
9
|
-
/**
|
|
10
|
-
* Helper function to get all points (planets + angles) from a chart for aspect calculation
|
|
11
|
-
*/
|
|
12
|
-
function getAllPointsFromChart(chartData) {
|
|
13
|
-
const allPoints = [...chartData.planets];
|
|
14
|
-
if (chartData.ascendant !== undefined) {
|
|
15
|
-
allPoints.push({ name: 'Ascendant', degree: chartData.ascendant });
|
|
16
|
-
}
|
|
17
|
-
if (chartData.midheaven !== undefined) {
|
|
18
|
-
allPoints.push({ name: 'Midheaven', degree: chartData.midheaven });
|
|
19
|
-
}
|
|
20
|
-
return allPoints;
|
|
21
|
-
}
|
|
3
|
+
exports.formatReportToText = formatReportToText;
|
|
22
4
|
const metadata_1 = require("./sections/metadata");
|
|
23
5
|
const chartHeader_1 = require("./sections/chartHeader");
|
|
24
6
|
const birthdata_1 = require("./sections/birthdata");
|
|
@@ -26,160 +8,118 @@ const angles_1 = require("./sections/angles");
|
|
|
26
8
|
const houses_1 = require("./sections/houses");
|
|
27
9
|
const planets_1 = require("./sections/planets");
|
|
28
10
|
const dispositors_1 = require("./sections/dispositors");
|
|
29
|
-
const
|
|
30
|
-
const
|
|
11
|
+
const aspects_1 = require("./sections/aspects");
|
|
12
|
+
const aspectPatterns_1 = require("./sections/aspectPatterns");
|
|
31
13
|
const houseOverlays_1 = require("./sections/houseOverlays");
|
|
32
14
|
const signDistributions_1 = require("./sections/signDistributions");
|
|
33
|
-
const
|
|
15
|
+
const stelliums_1 = require("../../core/stelliums");
|
|
16
|
+
const processSingleChartOutput = (analysis, settings, chartTitlePrefix) => {
|
|
34
17
|
const outputLines = [];
|
|
35
|
-
|
|
36
|
-
outputLines.push(...(0,
|
|
37
|
-
outputLines.push(...(0,
|
|
38
|
-
outputLines.push(...(0,
|
|
39
|
-
outputLines.push(...(0,
|
|
40
|
-
outputLines.push(...(0,
|
|
41
|
-
outputLines.push(...(0,
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
18
|
+
const { chart, groupedAspects, patterns, stelliums, signDistributions, dispositors, placements, } = analysis;
|
|
19
|
+
outputLines.push(...(0, chartHeader_1.generateChartHeaderOutput)(chart.name, chartTitlePrefix));
|
|
20
|
+
outputLines.push(...(0, birthdata_1.generateBirthdataOutput)(chart.location, chart.timestamp, settings));
|
|
21
|
+
outputLines.push(...(0, angles_1.generateAnglesOutput)(chart.ascendant, chart.midheaven));
|
|
22
|
+
outputLines.push(...(0, houses_1.generateHousesOutput)(chart.houseCusps));
|
|
23
|
+
outputLines.push(...(0, planets_1.generatePlanetsOutput)(placements.planets));
|
|
24
|
+
outputLines.push(...(0, dispositors_1.generateDispositorsOutput)(dispositors));
|
|
25
|
+
if (settings.includeSignDistributions) {
|
|
26
|
+
outputLines.push(...(0, signDistributions_1.generateElementDistributionOutput)(signDistributions.elements));
|
|
27
|
+
outputLines.push(...(0, signDistributions_1.generateModalityDistributionOutput)(signDistributions.modalities));
|
|
28
|
+
outputLines.push(...(0, signDistributions_1.generatePolarityOutput)(signDistributions.polarities));
|
|
29
|
+
}
|
|
30
|
+
outputLines.push(...(0, aspects_1.generateAspectsOutput)('[ASPECTS]', groupedAspects));
|
|
48
31
|
if (settings.includeAspectPatterns) {
|
|
49
|
-
|
|
50
|
-
|
|
32
|
+
outputLines.push(...(0, aspectPatterns_1.generateAspectPatternsOutput)(patterns, undefined, false));
|
|
33
|
+
if (stelliums.length > 0) {
|
|
34
|
+
stelliums.forEach((stellium) => {
|
|
35
|
+
outputLines.push(...(0, stelliums_1.formatStellium)(stellium));
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
outputLines.push('No Stelliums detected.');
|
|
40
|
+
}
|
|
51
41
|
}
|
|
52
42
|
outputLines.push('');
|
|
53
43
|
return outputLines;
|
|
54
44
|
};
|
|
55
|
-
const processChartPairOutput = (
|
|
45
|
+
const processChartPairOutput = (analysis, settings) => {
|
|
56
46
|
const outputLines = [];
|
|
47
|
+
const { chart1, chart2, groupedSynastryAspects, compositePatterns, houseOverlays, } = analysis;
|
|
57
48
|
const header = chart1.chartType === 'event' && chart2.chartType === 'event'
|
|
58
49
|
? 'EVENT_RELATIONSHIP'
|
|
59
50
|
: chart1.chartType === 'event' || chart2.chartType === 'event'
|
|
60
51
|
? 'NATAL_EVENT'
|
|
61
52
|
: 'SYNASTRY';
|
|
62
53
|
outputLines.push(...(0, chartHeader_1.generateChartHeaderOutput)(`${chart1.name}-${chart2.name}`, header));
|
|
63
|
-
|
|
64
|
-
|
|
54
|
+
outputLines.push(...(0, aspects_1.generateAspectsOutput)('[PLANET-PLANET ASPECTS]', groupedSynastryAspects, chart1.name, chart2.name));
|
|
55
|
+
if (settings.includeAspectPatterns && compositePatterns.length > 0) {
|
|
56
|
+
outputLines.push(...(0, aspectPatterns_1.generateAspectPatternsOutput)(compositePatterns, `${chart1.name}-${chart2.name} Composite`, true));
|
|
57
|
+
}
|
|
65
58
|
outputLines.push('');
|
|
66
|
-
outputLines.push(...(0, houseOverlays_1.generateHouseOverlaysOutput)(chart1, chart2
|
|
59
|
+
outputLines.push(...(0, houseOverlays_1.generateHouseOverlaysOutput)(houseOverlays, chart1.name, chart2.name));
|
|
67
60
|
outputLines.push('');
|
|
68
61
|
return outputLines;
|
|
69
62
|
};
|
|
70
|
-
const
|
|
63
|
+
const processGlobalPatternsOutput = (analysis, isTransit = false) => {
|
|
71
64
|
const outputLines = [];
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
};
|
|
79
|
-
const determineChartType = (data) => {
|
|
80
|
-
let baseChartString = 'natal';
|
|
81
|
-
let suffixString = '';
|
|
82
|
-
const natalCharts = data.filter(({ chartType }) => chartType !== 'transit' && chartType !== 'event');
|
|
83
|
-
const eventCharts = data.filter(({ chartType }) => chartType === 'event');
|
|
84
|
-
const transitCharts = data.filter(({ chartType }) => chartType === 'transit');
|
|
85
|
-
if (transitCharts.length > 1) {
|
|
86
|
-
throw new Error('Must provide at most one transit chart');
|
|
87
|
-
}
|
|
88
|
-
const hasTransit = transitCharts.length > 0;
|
|
89
|
-
// first determine suffix
|
|
90
|
-
if (natalCharts.length > 0) {
|
|
91
|
-
if (eventCharts.length === 0) {
|
|
92
|
-
if (hasTransit) {
|
|
93
|
-
suffixString = '_with_transit';
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
else if (eventCharts.length === 1) {
|
|
97
|
-
suffixString = hasTransit ? '_with_event_and_transit' : '_with_event';
|
|
98
|
-
}
|
|
99
|
-
else {
|
|
100
|
-
suffixString = hasTransit ? '_with_events_and_transit' : '_with_events';
|
|
65
|
+
const { charts, patterns } = analysis;
|
|
66
|
+
if (patterns.length > 0) {
|
|
67
|
+
const chartNames = charts.map((c) => c.name).join('-');
|
|
68
|
+
let title = `${chartNames} Global Composite`;
|
|
69
|
+
if (isTransit) {
|
|
70
|
+
title = `${chartNames} Global Transit Composite`;
|
|
101
71
|
}
|
|
72
|
+
outputLines.push(...(0, aspectPatterns_1.generateAspectPatternsOutput)(patterns, title, true));
|
|
73
|
+
outputLines.push('');
|
|
102
74
|
}
|
|
103
|
-
|
|
104
|
-
// base event charts can have transits
|
|
105
|
-
if (hasTransit) {
|
|
106
|
-
suffixString = '_with_transit';
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
// then determine base string
|
|
110
|
-
if (natalCharts.length === 0) {
|
|
111
|
-
if (eventCharts.length === 0) {
|
|
112
|
-
throw new Error('Must provide at least one non-transit chart');
|
|
113
|
-
}
|
|
114
|
-
else if (eventCharts.length === 1) {
|
|
115
|
-
baseChartString = 'event';
|
|
116
|
-
}
|
|
117
|
-
else {
|
|
118
|
-
baseChartString = 'multi_event';
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
else if (natalCharts.length === 1) {
|
|
122
|
-
baseChartString = 'natal';
|
|
123
|
-
}
|
|
124
|
-
else if (natalCharts.length === 2) {
|
|
125
|
-
baseChartString = 'synastry';
|
|
126
|
-
}
|
|
127
|
-
else {
|
|
128
|
-
baseChartString = 'group_synastry';
|
|
129
|
-
}
|
|
130
|
-
return baseChartString + suffixString;
|
|
75
|
+
return outputLines;
|
|
131
76
|
};
|
|
132
77
|
/**
|
|
133
|
-
*
|
|
134
|
-
* @param
|
|
135
|
-
* @param partialSettings Optional: Custom settings to override defaults.
|
|
78
|
+
* Formats a pre-computed and pre-grouped AstrologicalReport into a human-readable text string.
|
|
79
|
+
* @param report The AstrologicalReport object, with aspects already grouped.
|
|
136
80
|
* @returns A string representing the full chart report.
|
|
137
81
|
*/
|
|
138
|
-
function
|
|
139
|
-
|
|
140
|
-
const
|
|
141
|
-
if (validationError) {
|
|
142
|
-
throw new Error(`Invalid chart data: ${validationError}`);
|
|
143
|
-
}
|
|
144
|
-
const settings = new ChartSettings_1.ChartSettings(partialSettings);
|
|
145
|
-
const houseSystemName = settings.houseSystemName;
|
|
82
|
+
function formatReportToText(report) {
|
|
83
|
+
const { chartAnalyses, pairwiseAnalyses, globalAnalysis, transitAnalyses, globalTransitAnalysis, } = report;
|
|
84
|
+
const settings = report.settings;
|
|
146
85
|
const outputLines = [];
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
outputLines.push(...processSingleChartOutput(
|
|
155
|
-
return outputLines.join('\n').trimEnd();
|
|
86
|
+
const originalCharts = chartAnalyses.map((ca) => ca.chart);
|
|
87
|
+
const chartType = (0, metadata_1.determineChartType)(originalCharts);
|
|
88
|
+
outputLines.push(...(0, metadata_1.generateMetadataOutput)(settings, chartType, settings.houseSystemName));
|
|
89
|
+
outputLines.push('');
|
|
90
|
+
// 1. Process individual non-transit charts
|
|
91
|
+
const nonTransitAnalyses = chartAnalyses.filter((a) => a.chart.chartType !== 'transit');
|
|
92
|
+
for (const analysis of nonTransitAnalyses) {
|
|
93
|
+
outputLines.push(...processSingleChartOutput(analysis, settings));
|
|
156
94
|
}
|
|
157
|
-
//
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
outputLines.push(...(0, metadata_1.generateMetadataOutput)(settings, chartType, houseSystemName));
|
|
161
|
-
outputLines.push(''); // Blank line after metadata
|
|
162
|
-
const nonTransitCharts = data.filter(({ chartType }) => chartType !== 'transit');
|
|
163
|
-
const transitChart = data.find(({ chartType }) => chartType === 'transit');
|
|
164
|
-
// first, process each chart individually
|
|
165
|
-
for (const chart of nonTransitCharts) {
|
|
166
|
-
outputLines.push(...processSingleChartOutput(settings, chart));
|
|
95
|
+
// 2. Process pairwise analyses
|
|
96
|
+
for (const analysis of pairwiseAnalyses) {
|
|
97
|
+
outputLines.push(...processChartPairOutput(analysis, settings));
|
|
167
98
|
}
|
|
168
|
-
//
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
outputLines.push(...processChartPairOutput(settings, nonTransitCharts[i], nonTransitCharts[j]));
|
|
172
|
-
}
|
|
99
|
+
// 3. Process global patterns (non-transit)
|
|
100
|
+
if (globalAnalysis) {
|
|
101
|
+
outputLines.push(...processGlobalPatternsOutput(globalAnalysis, false));
|
|
173
102
|
}
|
|
174
|
-
//
|
|
175
|
-
if (
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
outputLines.push(...(0,
|
|
103
|
+
// 4. Process transit analyses
|
|
104
|
+
if (transitAnalyses.length > 0) {
|
|
105
|
+
const transitChartAnalysis = chartAnalyses.find((a) => a.chart.chartType === 'transit');
|
|
106
|
+
if (transitChartAnalysis) {
|
|
107
|
+
outputLines.push(...(0, chartHeader_1.generateChartHeaderOutput)(transitChartAnalysis.chart.name, 'TRANSIT'));
|
|
108
|
+
outputLines.push(...(0, birthdata_1.generateBirthdataOutput)(transitChartAnalysis.chart.location, transitChartAnalysis.chart.timestamp, settings, '[DATETIME]'));
|
|
109
|
+
outputLines.push(...(0, planets_1.generatePlanetsOutput)(transitChartAnalysis.placements.planets));
|
|
181
110
|
outputLines.push('');
|
|
182
111
|
}
|
|
112
|
+
for (const analysis of transitAnalyses) {
|
|
113
|
+
outputLines.push(...(0, aspects_1.generateAspectsOutput)(`[TRANSIT ASPECTS: ${analysis.natalChart.name}]`, analysis.groupedAspects, analysis.natalChart.name, analysis.transitChart.name, true));
|
|
114
|
+
if (settings.includeAspectPatterns) {
|
|
115
|
+
outputLines.push(...(0, aspectPatterns_1.generateAspectPatternsOutput)(analysis.patterns, `Transit to ${analysis.natalChart.name}`, true));
|
|
116
|
+
}
|
|
117
|
+
outputLines.push('');
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// 5. Process global transit patterns
|
|
121
|
+
if (globalTransitAnalysis) {
|
|
122
|
+
outputLines.push(...processGlobalPatternsOutput(globalTransitAnalysis, true));
|
|
183
123
|
}
|
|
184
124
|
return outputLines.join('\n').trimEnd();
|
|
185
125
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,9 +4,12 @@
|
|
|
4
4
|
*
|
|
5
5
|
* This is the main entry point for the library.
|
|
6
6
|
*/
|
|
7
|
-
export {
|
|
7
|
+
export { chart2txt } from './chart2txt';
|
|
8
|
+
export { analyzeCharts } from './core/analysis';
|
|
9
|
+
export { groupAspects } from './core/grouping';
|
|
10
|
+
export { formatReportToText } from './formatters/text/textFormatter';
|
|
8
11
|
export * from './types';
|
|
9
|
-
export { DEFAULT_SETTINGS, DEFAULT_ASPECTS,
|
|
12
|
+
export { DEFAULT_SETTINGS, DEFAULT_ASPECTS, ZODIAC_SIGNS } from './constants';
|
|
10
13
|
export { ChartSettings } from './config/ChartSettings';
|
|
11
|
-
import {
|
|
12
|
-
export default
|
|
14
|
+
import { chart2txt } from './chart2txt';
|
|
15
|
+
export default chart2txt;
|
package/dist/index.js
CHANGED
|
@@ -20,21 +20,26 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
20
20
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
21
21
|
};
|
|
22
22
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
-
exports.ChartSettings = exports.ZODIAC_SIGNS = exports.
|
|
24
|
-
// Core
|
|
23
|
+
exports.ChartSettings = exports.ZODIAC_SIGNS = exports.DEFAULT_ASPECTS = exports.DEFAULT_SETTINGS = exports.formatReportToText = exports.groupAspects = exports.analyzeCharts = exports.chart2txt = void 0;
|
|
24
|
+
// Core functions
|
|
25
|
+
var chart2txt_1 = require("./chart2txt");
|
|
26
|
+
Object.defineProperty(exports, "chart2txt", { enumerable: true, get: function () { return chart2txt_1.chart2txt; } });
|
|
27
|
+
var analysis_1 = require("./core/analysis");
|
|
28
|
+
Object.defineProperty(exports, "analyzeCharts", { enumerable: true, get: function () { return analysis_1.analyzeCharts; } });
|
|
29
|
+
var grouping_1 = require("./core/grouping");
|
|
30
|
+
Object.defineProperty(exports, "groupAspects", { enumerable: true, get: function () { return grouping_1.groupAspects; } });
|
|
25
31
|
var textFormatter_1 = require("./formatters/text/textFormatter");
|
|
26
|
-
Object.defineProperty(exports, "
|
|
32
|
+
Object.defineProperty(exports, "formatReportToText", { enumerable: true, get: function () { return textFormatter_1.formatReportToText; } });
|
|
27
33
|
// Export all types for library users
|
|
28
34
|
__exportStar(require("./types"), exports);
|
|
29
35
|
// Export constants that might be useful for users (e.g., for custom settings)
|
|
30
36
|
var constants_1 = require("./constants");
|
|
31
37
|
Object.defineProperty(exports, "DEFAULT_SETTINGS", { enumerable: true, get: function () { return constants_1.DEFAULT_SETTINGS; } });
|
|
32
38
|
Object.defineProperty(exports, "DEFAULT_ASPECTS", { enumerable: true, get: function () { return constants_1.DEFAULT_ASPECTS; } });
|
|
33
|
-
Object.defineProperty(exports, "DEFAULT_ASPECT_CATEGORIES", { enumerable: true, get: function () { return constants_1.DEFAULT_ASPECT_CATEGORIES; } });
|
|
34
39
|
Object.defineProperty(exports, "ZODIAC_SIGNS", { enumerable: true, get: function () { return constants_1.ZODIAC_SIGNS; } });
|
|
35
40
|
// Export ChartSettings class for advanced configuration
|
|
36
41
|
var ChartSettings_1 = require("./config/ChartSettings");
|
|
37
42
|
Object.defineProperty(exports, "ChartSettings", { enumerable: true, get: function () { return ChartSettings_1.ChartSettings; } });
|
|
38
43
|
// Default export for convenience (e.g. UMD builds or simple script tags)
|
|
39
|
-
const
|
|
40
|
-
exports.default =
|
|
44
|
+
const chart2txt_2 = require("./chart2txt");
|
|
45
|
+
exports.default = chart2txt_2.chart2txt;
|
package/dist/types.d.ts
CHANGED
|
@@ -17,28 +17,46 @@ export interface ChartData {
|
|
|
17
17
|
}
|
|
18
18
|
export type MultiChartData = ChartData[];
|
|
19
19
|
export declare function isMultiChartData(obj: ChartData | MultiChartData): obj is MultiChartData;
|
|
20
|
+
export type UnionedPoint = [Point, string];
|
|
21
|
+
export declare enum AspectClassification {
|
|
22
|
+
Major = "major",
|
|
23
|
+
Minor = "minor",
|
|
24
|
+
Esoteric = "esoteric"
|
|
25
|
+
}
|
|
26
|
+
export declare enum PlanetCategory {
|
|
27
|
+
Luminaries = "luminaries",
|
|
28
|
+
Personal = "personal",
|
|
29
|
+
Social = "social",
|
|
30
|
+
Outer = "outer",
|
|
31
|
+
Angles = "angles"
|
|
32
|
+
}
|
|
20
33
|
export interface Aspect {
|
|
21
34
|
name: string;
|
|
22
35
|
angle: number;
|
|
23
36
|
orb: number;
|
|
37
|
+
classification?: AspectClassification;
|
|
38
|
+
}
|
|
39
|
+
export type AspectStrength = 'tight' | 'moderate' | 'wide';
|
|
40
|
+
export interface AspectStrengthThresholds {
|
|
41
|
+
tight: number;
|
|
42
|
+
moderate: number;
|
|
24
43
|
}
|
|
25
44
|
export interface AspectData {
|
|
26
45
|
planetA: string;
|
|
27
46
|
planetB: string;
|
|
47
|
+
p1ChartName?: string;
|
|
48
|
+
p2ChartName?: string;
|
|
28
49
|
aspectType: string;
|
|
29
50
|
orb: number;
|
|
30
51
|
application?: 'applying' | 'separating' | 'exact';
|
|
31
52
|
}
|
|
32
|
-
export interface AspectCategory {
|
|
33
|
-
name: string;
|
|
34
|
-
minOrb?: number;
|
|
35
|
-
maxOrb: number;
|
|
36
|
-
}
|
|
37
53
|
export interface PlanetPosition {
|
|
38
54
|
name: string;
|
|
39
55
|
degree: number;
|
|
40
56
|
sign: string;
|
|
57
|
+
speed?: number;
|
|
41
58
|
house?: number;
|
|
59
|
+
chartName?: string;
|
|
42
60
|
}
|
|
43
61
|
export interface TSquare {
|
|
44
62
|
type: 'T-Square';
|
|
@@ -93,15 +111,82 @@ export interface Kite {
|
|
|
93
111
|
averageOrb: number;
|
|
94
112
|
}
|
|
95
113
|
export type AspectPattern = TSquare | GrandTrine | Stellium | GrandCross | Yod | MysticRectangle | Kite;
|
|
96
|
-
export interface
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
114
|
+
export interface ChartAnalysis {
|
|
115
|
+
chart: ChartData;
|
|
116
|
+
placements: {
|
|
117
|
+
planets: PlanetPosition[];
|
|
118
|
+
[key: string]: any;
|
|
119
|
+
};
|
|
120
|
+
aspects: AspectData[];
|
|
121
|
+
groupedAspects?: Map<string, AspectData[]>;
|
|
122
|
+
patterns: AspectPattern[];
|
|
123
|
+
stelliums: Stellium[];
|
|
124
|
+
signDistributions: {
|
|
125
|
+
elements: {
|
|
126
|
+
[key: string]: string[];
|
|
127
|
+
};
|
|
128
|
+
modalities: {
|
|
129
|
+
[key: string]: number;
|
|
130
|
+
};
|
|
131
|
+
polarities: {
|
|
132
|
+
[key: string]: number;
|
|
133
|
+
};
|
|
134
|
+
};
|
|
135
|
+
dispositors: {
|
|
136
|
+
[key: string]: string;
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
export interface PairwiseAnalysis {
|
|
140
|
+
chart1: ChartData;
|
|
141
|
+
chart2: ChartData;
|
|
142
|
+
synastryAspects: AspectData[];
|
|
143
|
+
groupedSynastryAspects?: Map<string, AspectData[]>;
|
|
144
|
+
compositePatterns: AspectPattern[];
|
|
145
|
+
houseOverlays: {
|
|
146
|
+
chart1InChart2Houses: {
|
|
147
|
+
[key: string]: number;
|
|
148
|
+
};
|
|
149
|
+
chart2InChart1Houses: {
|
|
150
|
+
[key: string]: number;
|
|
151
|
+
};
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
export interface GlobalAnalysis {
|
|
155
|
+
charts: ChartData[];
|
|
156
|
+
patterns: AspectPattern[];
|
|
157
|
+
}
|
|
158
|
+
export interface TransitAnalysis {
|
|
159
|
+
natalChart: ChartData;
|
|
160
|
+
transitChart: ChartData;
|
|
161
|
+
aspects: AspectData[];
|
|
162
|
+
groupedAspects?: Map<string, AspectData[]>;
|
|
163
|
+
patterns: AspectPattern[];
|
|
164
|
+
}
|
|
165
|
+
export interface AstrologicalReport {
|
|
166
|
+
settings: Settings;
|
|
167
|
+
chartAnalyses: ChartAnalysis[];
|
|
168
|
+
pairwiseAnalyses: PairwiseAnalysis[];
|
|
169
|
+
globalAnalysis?: GlobalAnalysis;
|
|
170
|
+
transitAnalyses: TransitAnalysis[];
|
|
171
|
+
globalTransitAnalysis?: GlobalAnalysis;
|
|
172
|
+
}
|
|
173
|
+
export interface AnalysisSettings {
|
|
174
|
+
aspectDefinitions?: Aspect[] | 'traditional' | 'modern' | 'tight' | 'wide';
|
|
175
|
+
skipOutOfSignAspects?: boolean;
|
|
176
|
+
includeAspectPatterns?: boolean;
|
|
177
|
+
includeSignDistributions?: boolean;
|
|
178
|
+
}
|
|
179
|
+
export interface GroupingSettings {
|
|
180
|
+
aspectStrengthThresholds?: AspectStrengthThresholds;
|
|
181
|
+
}
|
|
182
|
+
export interface FormattingSettings {
|
|
183
|
+
dateFormat?: string;
|
|
184
|
+
houseSystemName?: string;
|
|
185
|
+
}
|
|
186
|
+
export interface Settings extends AnalysisSettings, GroupingSettings, FormattingSettings {
|
|
106
187
|
}
|
|
107
188
|
export type PartialSettings = Partial<Settings>;
|
|
189
|
+
export type ChartDataWithInfo = {
|
|
190
|
+
data: ChartData;
|
|
191
|
+
index: number;
|
|
192
|
+
};
|