geomancy
Version:
Geomantic utilities
974 lines (816 loc) • 83.8 kB
JavaScript
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.addUnique = addUnique;
exports.addWeights = addWeights;
exports.getAttributeArray = getAttributeArray;
exports.ChartSequence = exports.Chart = exports.INDICATION_WEIGHTING = exports.SHIELD_KEYS = exports.HOUSE_MAPS = void 0;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _construct2 = _interopRequireDefault(require("@babel/runtime/helpers/construct"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
require("source-map-support/register");
var _models = require("./models");
var R = _interopRequireWildcard(require("ramda"));
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
var populus = _models.Figure.byName('populus');
/**
* Different house systems. Each array is the ordered list of sequence indices for the houses.
* For example, in the Esoteric system, the second house contains the figure fifth in the sequence.
* So ESOTERIC[1] = 4;
* @type {Array}
*/
var HOUSE_MAPS = {
ORDINARY: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
ESOTERIC: [0, 4, 8, 1, 7, 11, 2, 6, 10, 3, 5, 9],
'GOLDEN DAWN': [1, 5, 9, 2, 6, 10, 3, 7, 11, 0, 4, 8]
};
exports.HOUSE_MAPS = HOUSE_MAPS;
var SHIELD_KEYS = ['Mother 1', 'Mother 2', 'Mother 3', 'Mother 4', 'Daughter 1', 'Daughter 2', 'Daughter 3', 'Daughter 4', 'Niece 1', 'Niece 2', 'Niece 3', 'Niece 4', 'Left Witness', 'Right Witness', 'Judge'];
exports.SHIELD_KEYS = SHIELD_KEYS;
var INDICATION_WEIGHTING = {
occupations: 5,
conjunctions: 5,
mutations: 4,
translations: 4,
inCompany: -1,
impedition: -5,
trines: 3,
sextiles: 3,
oppositions: -4,
squares: -3
};
exports.INDICATION_WEIGHTING = INDICATION_WEIGHTING;
var JUDGE = 14;
var hit = function hit(querent, quesited) {
return {
querent: querent.index,
quesited: quesited.index
};
};
/**
* Base Geomancy Chart Model
* @param {ChartSequence|array} [sequence=null] The starting set of mothers
* @param {number} [querent=0] The 0-indexed house of the querent
* @param {number} [quesited=-1] The 0-indexed house of the quesited
* @param {string} [houseType='ordinary'] the type of house projection to use.
*/
var Chart =
/*#__PURE__*/
function () {
function Chart() {
var sequence = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
var querent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
var quesited = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 3;
var houseType = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'ordinary';
(0, _classCallCheck2["default"])(this, Chart);
if (R.is(Array, sequence)) {
try {
sequence = (0, _construct2["default"])(ChartSequence, (0, _toConsumableArray2["default"])(sequence));
} catch (e) {
console.log(e);
}
}
this.seq = sequence || new ChartSequence();
this.querentIx = querent;
this.quesitedIx = quesited;
this.setHouseType(houseType);
}
/**
* Makes a copy of this chart.
* @returns {Chart} clone of this chart
*/
(0, _createClass2["default"])(Chart, [{
key: "clone",
value: function clone() {
var seeds = this.getSeeds(false);
var seq = (0, _construct2["default"])(ChartSequence, (0, _toConsumableArray2["default"])(seeds));
return new Chart(seq, this.querent, this.quesited);
}
/**
* Get the house and type of company, if it exists.
* @param {House|number} house to check for company
* @returns {Object|null} if in company, then returns an object:
* {house: index, company: companyType}
*/
}, {
key: "getCompany",
value: function getCompany(house) {
if (!(house instanceof _models.House)) {
house = this.getHouse(house);
}
var companion = this.getHouse(house.companion); // console.log('companion', companion);
var company = house.getCompanyType(companion); // console.log(house.figure.name + ' + ' + companion.figure.name + ' = ' + company);
if (!company) {
return null;
}
return {
house: companion.index,
company: company
};
}
/**
* Get the specified house by index.
* @param {number} index position
* @returns {House} at position
*/
}, {
key: "getHouse",
value: function getHouse(index) {
if (index instanceof _models.House) {
return index;
}
if (!R.is(Number, index)) {
index = SHIELD_KEYS.indexOf(index);
if (index === -1) {
throw new TypeError('Invalid Index');
}
}
var seqIndex = index > 11 ? index : this.houseMap[index];
return new _models.House(index, this.seq.get(seqIndex), this.querent === index, this.quesited === index);
}
/**
* Get an array of all the houses from this chart.
* @returns {array} all 12 houses, note that the array is 0-indexed
*/
}, {
key: "getHouses",
value: function getHouses() {
var total = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 12;
var houses = [];
for (var i = 0; i < total; i++) {
houses.push(this.getHouse(i));
}
return houses;
}
/**
* Find the Geomantic "index" of a chart.
* @returns {House} at index
*/
}, {
key: "getIndex",
value: function getIndex() {
var count = 0;
for (var i = 0; i < 12; i++) {
var figure = this.seq.get(i);
count += figure.getActivePoints();
}
return this.getHouse((0, _models.houseRange)(count));
}
/**
* Calculate and return the total "indication" weight for this chart.
* @returns {number} weighted total with positive numbers indicating success/true.
*/
}, {
key: "getIndicationWeight",
value: function getIndicationWeight() {
var indications = this.getIndications();
return getAttributeArray(indications, 'weight').reduce(function (prev, curr) {
return prev + curr;
});
}
/**
* Gets the chart indications for the specified querest and quesited houses.
* @param {number} [querent=this.querent] querent to use for this call
* @param {number} [quesited=this.quesited] quesited to use for this call
* @param {boolean} [inCompany=false] flag to prevent endless recursion on companies
* @returns {Object} a dictionary of Indications
* @example
*{
* "springs": {
* "querent": [
* {
* "from": 1,
* "to": 4
* }
* ],
* "quesited": []
* },
* "occupations": [],
* "conjunctions": {
* "querent": [],
* "quesited": []
* },
* "mutations": [],
* "translations": [
* {
* "querent": 11,
* "quesited": 8,
* "weight": 3
* }
* ],
* "trines": [],
* "squares": [
* {
* "direction": "sinister",
* "querent": 4,
* "quesited": 7,
* "weight": -4
* }
* ],
* "oppositions": [],
* "sextiles": [
* {
* "direction": "sinister",
* "querent": 4,
* "quesited": 6,
* "weight": 2
* }
* ]
*}
*/
}, {
key: "getIndications",
value: function getIndications() {
var querent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.querent;
var quesited = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.quesited;
var inCompany = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
querent = this.getHouse(querent);
quesited = this.getHouse(quesited);
if (querent.index === quesited.index) {
return {};
}
var subQuerent = this.querent.index !== querent.index;
var subQuesited = this.quesited.index !== quesited.index;
var houses = this.getHouses();
var occupations = getOccupation(querent, quesited);
var conjunctions = getConjunctions(querent, quesited, houses);
var springs = getSprings(querent, quesited, houses);
var qIndex;
if (subQuerent) {
// strip any springs to the original
qIndex = this.querent.index;
springs.querent = springs.querent.filter(function (q) {
return q.to != qIndex;
});
}
if (subQuesited) {
// strip any springs to the original
qIndex = this.quesited.index;
springs.quesited = springs.quesited.filter(function (q) {
return q.to != qIndex;
});
}
var mutations = getMutations(springs, houses);
var translations = getTranslations(querent, quesited, houses);
var aspects = getAspects(querent, quesited, springs, houses);
var indications = addWeights(_objectSpread({
springs: springs,
occupations: occupations,
conjunctions: conjunctions,
mutations: mutations,
translations: translations
}, aspects), inCompany);
if (!inCompany) {
// if we're not already in Company, check to see if companies exist
// and if so, use them to add more indications
var querentCo = this.getCompany(querent);
var quesitedCo = this.getCompany(quesited);
var additional = [];
if (querentCo) {
additional.push(this.getIndications(querentCo.house, quesited, true));
if (quesitedCo) {
additional.push(this.getIndications(querentCo.house, quesitedCo.house, true));
}
}
if (quesitedCo) {
additional.push(this.getIndications(querent, quesitedCo.house, true));
}
additional.forEach(function (added) {
addUnique(indications, added);
}); // OK, we've added all perfections possible for this chart.
// If there aren't any, then we have an "impedition", so add it.
// to do that, just find all weights, and look for positives
var positives = getAttributeArray(indications, 'weight').filter(function (x) {
return x > 0;
});
if (positives.length === 0) {
indications.impedition = {
weight: INDICATION_WEIGHTING.impedition
};
}
}
return indications;
}
}, {
key: "getMeanings",
value: function getMeanings() {
var meanings = [];
for (var i = 0; i < 12; i++) {
var house = this.getHouse(i);
meanings.push(house.getMeaning());
}
return meanings;
}
/**
* Find and return the house for the part of fortune.
* @return {House} Part of Fortune
*/
}, {
key: "getPartOfFortune",
value: function getPartOfFortune() {
var count = 0;
for (var i = 0; i < 12; i++) {
var figure = this.seq.get(i);
count += figure.getPoints();
}
return this.getHouse((0, _models.houseRange)(count));
}
/**
* Get the mothers as an array.
* @param {Boolean} [slugify=false] convert to slugs
* @return {array<House>} four mother houses
*/
}, {
key: "getSeeds",
value: function getSeeds() {
var slugify = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
var seeds = [];
for (var ix = 0; ix < 4; ix++) {
var _this$getHouse = this.getHouse(ix),
figure = _this$getHouse.figure;
var seed = slugify ? figure.slug : figure.name;
seeds.push(seed);
}
return seeds;
}
/**
* Get the chart houses as a map
* @return {Map<String, House>} Shield houses keyed by name in the shield
*/
}, {
key: "getShield",
value: function getShield() {
var _this = this;
var shield = new Map();
SHIELD_KEYS.forEach(function (name, ix) {
shield.set(name, _this.seq.get(ix));
});
return shield;
}
/**
* Return the way of the point as an array, if it exists.
* @return {Array<Number>} Array of indexes of points in the way
*/
}, {
key: "getWayOfThePoint",
value: function getWayOfThePoint() {
var _this2 = this;
var followFire = function followFire(house) {
return house.parents.filter(function (parentIx) {
return _this2.getHouse(parentIx).figure.fire === house.figure.fire;
});
};
var followThePath = function followThePath(house, points) {
house = _this2.getHouse(house);
if (house.index < 8) {
return house;
}
followFire(house).forEach(function (parent) {
var point = followThePath(parent, points);
if (point) {
points.push(point);
}
});
};
var points = [];
followThePath('Judge', points);
return points.map(function (point) {
return point.index;
});
}
/**
* Sets the house type to any legal name in HOUSE_MAPS
* @param {string} houseType name of system
* @return {`Chart`} self
*/
}, {
key: "setHouseType",
value: function setHouseType(houseType) {
var key = houseType.toUpperCase();
var houseMap = HOUSE_MAPS[key];
if (!houseMap) {
throw new TypeError('Invalid House Type');
}
this.houseMap = houseMap;
this.querent = this.getHouse(this.querentIx);
this.quesited = this.getHouse(this.quesitedIx);
return this;
}
}]);
return Chart;
}();
/**
* A sequence of geomantic figures, which is seeded by the first four houses,
* and projects all the rest from them.
* @type {Array<Figure|String>} four figure names or Figures
*/
exports.Chart = Chart;
var ChartSequence =
/*#__PURE__*/
function () {
function ChartSequence() {
var _this3 = this;
(0, _classCallCheck2["default"])(this, ChartSequence);
this.slots = [populus, populus, populus, populus];
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
args.forEach(function (arg, ix) {
_this3.set(ix, arg);
});
}
/**
* Set the `Figure` at slot `ix`
* @param {number} ix position
* @param {Figure|string} figure to set
* @return {null} nothing
*/
(0, _createClass2["default"])(ChartSequence, [{
key: "set",
value: function set(ix, figure) {
if (!R.is(Number, ix)) {
throw new TypeError('Invalid Index');
}
if (ix >= 5) {
throw new Error('Invalid setting, can only set the Mothers (0-3)');
}
if (typeof figure === 'string') {
figure = _models.Figure.byName(figure);
}
this.slots[ix] = figure;
}
/**
* Get the figure at or projected to that index
* @param {number} ix position
* @return {Figure} figure at position
*/
}, {
key: "get",
value: function get(ix) {
if (!R.is(Number, ix)) {
throw new TypeError('Invalid Index', ix);
}
if (ix <= 3) {
return this.slots[ix];
}
if (ix <= 7) {
return this.getDaughter(ix - 4);
}
return this.getProjected(ix);
}
/**
* Project the Daughter figures
* @param {Number} ix position
* @return {Figure} daughter
*/
}, {
key: "getDaughter",
value: function getDaughter(ix) {
if (!R.is(Number, ix)) {
throw new TypeError('Invalid Index');
}
var elements = {
fire: this.slots[0].getLine(ix),
air: this.slots[1].getLine(ix),
water: this.slots[2].getLine(ix),
earth: this.slots[3].getLine(ix)
};
return _models.Figure.byElements(elements);
}
/**
* Project any arbitrary higher position
* @param {Number} ix position
* @return {Figure} at position
*/
}, {
key: "getProjected",
value: function getProjected(ix) {
if (!R.is(Number, ix)) {
throw new TypeError('Invalid Index');
}
var p1 = (ix - 8) * 2;
var p2 = (ix - 8) * 2 + 1;
var f1 = this.get(p1);
var f2 = this.get(p2);
return f1.add(f2);
}
}]);
return ChartSequence;
}(); // -------------
/**
* Adds unique values of one dictionary to another, appending to arrays, and walking sub-objects.
* @param {Object} dict target object
* @param {Object} added merge object
* @returns {Object} merged dict
*/
exports.ChartSequence = ChartSequence;
function addUnique(dict, added) {
Object.keys(added).forEach(function (key) {
if (!R.has(key, dict)) {
dict[key] = added[key];
} else if (R.is(Array, dict[key])) {
dict[key] = R.unionWith(R.equals, dict[key], added[key]);
} else {
addUnique(dict[key], added[key]);
}
});
return dict;
}
/**
* Adds up indication weights for a set of indications.
* @param {Object} dict Indications
* @param {Boolean} inCompany true if indication is due to a company
* @returns {Object} indications with weights
*/
function addWeights(dict, inCompany) {
var indications = _objectSpread({}, dict); // add the weights to each item in the indications
for (var _i = 0, _Object$entries = Object.entries(dict); _i < _Object$entries.length; _i++) {
var _ref3 = _Object$entries[_i];
var _ref2 = (0, _slicedToArray2["default"])(_ref3, 2);
var indicationType = _ref2[0];
var values = _ref2[1];
if (R.has(indicationType, INDICATION_WEIGHTING)) {
(function () {
var weight = INDICATION_WEIGHTING[indicationType];
if (inCompany) {
weight = weight + INDICATION_WEIGHTING.inCompany;
}
var addWeight = function addWeight(indication) {
return _objectSpread({}, indication, {
weight: weight
});
};
if (R.is(Array, values)) {
indications[indicationType] = values.map(addWeight);
} else {
indications[indicationType] = {
querent: values.querent.map(addWeight),
quesited: values.quesited.map(addWeight)
};
}
})();
}
}
return indications;
}
/**
* Get all trines, squares, oppositions, and sextiles from a set of houses,
* including those caused by springs.
*
* @param {House} initialQuerent base querent
* @param {House} initialQuesited base quesited
* @param {Array<Object>} springs list of springs
* @param {Array<House>} houses list of chart houses
* @return {Object} Aspect set
*/
function getAspects(initialQuerent, initialQuesited, springs, houses) {
var aspects = {
trines: [],
squares: [],
oppositions: [],
sextiles: []
};
if (springs.quesited) {
springs.quesited.forEach(function (quesited) {
makeAspectsFor(aspects, initialQuerent, houses[quesited.to]);
});
}
if (springs.querent) {
springs.querent.forEach(function (querent) {
makeAspectsFor(aspects, houses[querent.to], initialQuesited);
});
}
if (springs.querent && springs.quesited) {
springs.querent.forEach(function (querent) {
springs.quesited.forEach(function (quesited) {
makeAspectsFor(aspects, houses[querent.to], houses[quesited.to]);
});
});
}
return aspects;
}
/**
* Find conjunctions for a given set of houses.
*
* @param {House} querent chart querent
* @param {House} quesited chart quesited
* @param {Array<House>} houses List of chart houses
* @return {Object<String, Array>} Conjunctions
*/
function getConjunctions(querent, quesited, houses) {
var conjunction = {
querent: [],
quesited: []
};
for (var i = 0; i < 12; i++) {
var house = houses[i];
if (querent.isNextTo(house) && house.hasFigure(quesited)) {
conjunction.querent.push(hit(querent, house));
}
if (quesited.isNextTo(house) && house.hasFigure(querent)) {
conjunction.quesited.push(hit(house, quesited));
}
}
return conjunction;
}
/**
* Find mutations for a given set of houses
* @param {Array<Object>} springs list of springs
* @param {Array<House>} houses List of chart houses
* @return {Array<Object>} list of mutations
*/
function getMutations(springs, houses) {
// go through the springs, looking for neighbor conjunctions so that we
// can find any mutations
var mutation = [];
if (springs.querent && springs.quesited) {
springs.querent.forEach(function (querentSpring) {
var querent = houses[querentSpring.to];
var hits = springs.quesited.filter(function (quesitedSpring) {
var quesited = houses[quesitedSpring.to];
return querent.isNextTo(quesited);
});
hits.forEach(function (quesitedSpring) {
mutation.push({
querent: querentSpring.to,
quesited: quesitedSpring.to
});
});
});
}
return mutation;
}
/**
* [getOccupation description]
* @param {[type]} querent [description]
* @param {[type]} quesited [description]
* @return {[type]} [description]
*/
function getOccupation(querent, quesited) {
var occupation = [];
if (querent.hasFigure(quesited)) {
occupation.push(hit(querent, quesited));
}
return occupation;
}
/**
* [getSprings description]
* @param {[type]} querent [description]
* @param {[type]} quesited [description]
* @param {[type]} houses [description]
* @return {[type]} [description]
*/
function getSprings(querent, quesited, houses) {
var springs = {
querent: [],
quesited: []
};
for (var i = 0; i < 12; i++) {
var house = houses[i];
if (!house.querent && house.hasFigure(querent) && querent.index !== i) {
springs.querent.push({
from: querent.index,
to: i
});
}
if (!house.quesited && house.hasFigure(quesited) && quesited.index !== i) {
springs.quesited.push({
from: quesited.index,
to: i
});
}
}
return springs;
}
/**
* [getTranslations description]
* @param {[type]} querent [description]
* @param {[type]} quesited [description]
* @param {[type]} houses [description]
* @return {[type]} [description]
*/
function getTranslations(querent, quesited, houses) {
var translation = []; // translations
var querentNeighbors = querent.getNeighbors(houses);
var quesitedNeighbors = quesited.getNeighbors(houses); // remove same indexes
var eqIndex = R.eqProps('index');
querentNeighbors = R.differenceWith(eqIndex, querentNeighbors, quesitedNeighbors);
quesitedNeighbors = R.differenceWith(eqIndex, quesitedNeighbors, querentNeighbors); // remove direct figure matches;
var exclusions = function exclusions(neighbor) {
return !(neighbor.equals(quesited) || neighbor.equals(querent) || neighbor.hasFigure(quesited) || neighbor.hasFigure(querent));
};
querentNeighbors = querentNeighbors.filter(exclusions);
quesitedNeighbors = quesitedNeighbors.filter(exclusions); // for the remaining, go through neighbors and see if there are any figure matches
// which are next to both Q and q.
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = querentNeighbors[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var querentN = _step.value;
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = undefined;
try {
for (var _iterator2 = quesitedNeighbors[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var quesitedN = _step2.value;
if (querentN.hasFigure(quesitedN)) {
translation.push(hit(querentN, quesitedN));
}
}
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2["return"] != null) {
_iterator2["return"]();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator["return"] != null) {
_iterator["return"]();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
return translation;
}
/**
* walks an indications structure, returning an array of keyed values
* @param {[type]} dict [description]
* @param {[type]} member [description]
* @return {[type]} [description]
*/
function getAttributeArray(dict, member) {
var found = [];
for (var _i2 = 0, _Object$entries2 = Object.entries(dict); _i2 < _Object$entries2.length; _i2++) {
var _ref6 = _Object$entries2[_i2];
var _ref5 = (0, _slicedToArray2["default"])(_ref6, 2);
var key = _ref5[0];
var values = _ref5[1];
if (R.is(Array, values)) {
var work = values.map(function (x) {
return x[member];
});
found = R.concat(found, work);
} else if (R.is(Object, values)) {
if (R.has(member, values)) {
found.push(values[member]);
} else {
found = R.concat(found, getAttributeArray(values, member));
}
}
}
return R.reject(R.isNil, found);
}
/**
* [makeAspectsFor description]
* @param {[type]} aspects [description]
* @param {[type]} querent [description]
* @param {[type]} quesited [description]
* @return {[type]} [description]
*/
function makeAspectsFor(aspects, querent, quesited) {
var direction = '';
if (querent.isSinisterOf(quesited)) {
direction = 'sinister';
} else if (querent.isDexterOf(quesited)) {
direction = 'dexter';
}
var aspect = {
direction: direction,
querent: querent.index,
quesited: quesited.index
};
if (querent.isTrineTo(quesited)) {
aspects.trines.push(aspect);
} else if (querent.isSquareTo(quesited)) {
aspects.squares.push(aspect);
} else if (querent.isSextileTo(quesited)) {
aspects.sextiles.push(aspect);
} else if (querent.isOpposedTo(quesited)) {
aspects.oppositions.push(aspect);
}
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9jaGFydHMuanMiXSwibmFtZXMiOlsicG9wdWx1cyIsIkZpZ3VyZSIsImJ5TmFtZSIsIkhPVVNFX01BUFMiLCJPUkRJTkFSWSIsIkVTT1RFUklDIiwiU0hJRUxEX0tFWVMiLCJJTkRJQ0FUSU9OX1dFSUdIVElORyIsIm9jY3VwYXRpb25zIiwiY29uanVuY3Rpb25zIiwibXV0YXRpb25zIiwidHJhbnNsYXRpb25zIiwiaW5Db21wYW55IiwiaW1wZWRpdGlvbiIsInRyaW5lcyIsInNleHRpbGVzIiwib3Bwb3NpdGlvbnMiLCJzcXVhcmVzIiwiSlVER0UiLCJoaXQiLCJxdWVyZW50IiwicXVlc2l0ZWQiLCJpbmRleCIsIkNoYXJ0Iiwic2VxdWVuY2UiLCJob3VzZVR5cGUiLCJSIiwiaXMiLCJBcnJheSIsIkNoYXJ0U2VxdWVuY2UiLCJlIiwiY29uc29sZSIsImxvZyIsInNlcSIsInF1ZXJlbnRJeCIsInF1ZXNpdGVkSXgiLCJzZXRIb3VzZVR5cGUiLCJzZWVkcyIsImdldFNlZWRzIiwiaG91c2UiLCJIb3VzZSIsImdldEhvdXNlIiwiY29tcGFuaW9uIiwiY29tcGFueSIsImdldENvbXBhbnlUeXBlIiwiTnVtYmVyIiwiaW5kZXhPZiIsIlR5cGVFcnJvciIsInNlcUluZGV4IiwiaG91c2VNYXAiLCJnZXQiLCJ0b3RhbCIsImhvdXNlcyIsImkiLCJwdXNoIiwiY291bnQiLCJmaWd1cmUiLCJnZXRBY3RpdmVQb2ludHMiLCJpbmRpY2F0aW9ucyIsImdldEluZGljYXRpb25zIiwiZ2V0QXR0cmlidXRlQXJyYXkiLCJyZWR1Y2UiLCJwcmV2IiwiY3VyciIsInN1YlF1ZXJlbnQiLCJzdWJRdWVzaXRlZCIsImdldEhvdXNlcyIsImdldE9jY3VwYXRpb24iLCJnZXRDb25qdW5jdGlvbnMiLCJzcHJpbmdzIiwiZ2V0U3ByaW5ncyIsInFJbmRleCIsImZpbHRlciIsInEiLCJ0byIsImdldE11dGF0aW9ucyIsImdldFRyYW5zbGF0aW9ucyIsImFzcGVjdHMiLCJnZXRBc3BlY3RzIiwiYWRkV2VpZ2h0cyIsInF1ZXJlbnRDbyIsImdldENvbXBhbnkiLCJxdWVzaXRlZENvIiwiYWRkaXRpb25hbCIsImZvckVhY2giLCJhZGRlZCIsImFkZFVuaXF1ZSIsInBvc2l0aXZlcyIsIngiLCJsZW5ndGgiLCJ3ZWlnaHQiLCJtZWFuaW5ncyIsImdldE1lYW5pbmciLCJnZXRQb2ludHMiLCJzbHVnaWZ5IiwiaXgiLCJzZWVkIiwic2x1ZyIsIm5hbWUiLCJzaGllbGQiLCJNYXAiLCJzZXQiLCJmb2xsb3dGaXJlIiwicGFyZW50cyIsInBhcmVudEl4IiwiZmlyZSIsImZvbGxvd1RoZVBhdGgiLCJwb2ludHMiLCJwYXJlbnQiLCJwb2ludCIsIm1hcCIsImtleSIsInRvVXBwZXJDYXNlIiwic2xvdHMiLCJhcmdzIiwiYXJnIiwiRXJyb3IiLCJnZXREYXVnaHRlciIsImdldFByb2plY3RlZCIsImVsZW1lbnRzIiwiZ2V0TGluZSIsImFpciIsIndhdGVyIiwiZWFydGgiLCJieUVsZW1lbnRzIiwicDEiLCJwMiIsImYxIiwiZjIiLCJhZGQiLCJkaWN0IiwiT2JqZWN0Iiwia2V5cyIsImhhcyIsInVuaW9uV2l0aCIsImVxdWFscyIsImVudHJpZXMiLCJpbmRpY2F0aW9uVHlwZSIsInZhbHVlcyIsImFkZFdlaWdodCIsImluZGljYXRpb24iLCJpbml0aWFsUXVlcmVudCIsImluaXRpYWxRdWVzaXRlZCIsIm1ha2VBc3BlY3RzRm9yIiwiY29uanVuY3Rpb24iLCJpc05leHRUbyIsImhhc0ZpZ3VyZSIsIm11dGF0aW9uIiwicXVlcmVudFNwcmluZyIsImhpdHMiLCJxdWVzaXRlZFNwcmluZyIsIm9jY3VwYXRpb24iLCJmcm9tIiwidHJhbnNsYXRpb24iLCJxdWVyZW50TmVpZ2hib3JzIiwiZ2V0TmVpZ2hib3JzIiwicXVlc2l0ZWROZWlnaGJvcnMiLCJlcUluZGV4IiwiZXFQcm9wcyIsImRpZmZlcmVuY2VXaXRoIiwiZXhjbHVzaW9ucyIsIm5laWdoYm9yIiwicXVlcmVudE4iLCJxdWVzaXRlZE4iLCJtZW1iZXIiLCJmb3VuZCIsIndvcmsiLCJjb25jYXQiLCJyZWplY3QiLCJpc05pbCIsImRpcmVjdGlvbiIsImlzU2luaXN0ZXJPZiIsImlzRGV4dGVyT2YiLCJhc3BlY3QiLCJpc1RyaW5lVG8iLCJpc1NxdWFyZVRvIiwiaXNTZXh0aWxlVG8iLCJpc09wcG9zZWRUbyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOzs7Ozs7QUFFQSxJQUFNQSxPQUFPLEdBQUdDLGVBQU9DLE1BQVAsQ0FBYyxTQUFkLENBQWhCO0FBRUE7Ozs7Ozs7O0FBTU8sSUFBTUMsVUFBVSxHQUFHO0FBQ3hCQyxFQUFBQSxRQUFRLEVBQUUsQ0FBQyxDQUFELEVBQUcsQ0FBSCxFQUFLLENBQUwsRUFBTyxDQUFQLEVBQVMsQ0FBVCxFQUFXLENBQVgsRUFBYSxDQUFiLEVBQWUsQ0FBZixFQUFpQixDQUFqQixFQUFtQixDQUFuQixFQUFxQixFQUFyQixFQUF3QixFQUF4QixFQUEyQixFQUEzQixDQURjO0FBRXhCQyxFQUFBQSxRQUFRLEVBQUUsQ0FBQyxDQUFELEVBQUcsQ0FBSCxFQUFLLENBQUwsRUFBTyxDQUFQLEVBQVMsQ0FBVCxFQUFXLEVBQVgsRUFBYyxDQUFkLEVBQWdCLENBQWhCLEVBQWtCLEVBQWxCLEVBQXFCLENBQXJCLEVBQXVCLENBQXZCLEVBQXlCLENBQXpCLENBRmM7QUFHeEIsaUJBQWUsQ0FBQyxDQUFELEVBQUcsQ0FBSCxFQUFLLENBQUwsRUFBTyxDQUFQLEVBQVMsQ0FBVCxFQUFXLEVBQVgsRUFBYyxDQUFkLEVBQWdCLENBQWhCLEVBQWtCLEVBQWxCLEVBQXFCLENBQXJCLEVBQXVCLENBQXZCLEVBQXlCLENBQXpCO0FBSFMsQ0FBbkI7O0FBTUEsSUFBTUMsV0FBVyxHQUFHLENBQUMsVUFBRCxFQUFhLFVBQWIsRUFBeUIsVUFBekIsRUFBcUMsVUFBckMsRUFDekIsWUFEeUIsRUFDWCxZQURXLEVBQ0csWUFESCxFQUNpQixZQURqQixFQUV6QixTQUZ5QixFQUVk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