diff --git a/.eslintrc.js b/.eslintrc.js index c57cc2f..c0d9998 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -11,6 +11,7 @@ module.exports = { project: './src/tsconfig.json', }, rules: { + 'linebreak-style': 'off', '@typescript-eslint/indent': ['error', 2, { FunctionExpression: { parameters: 2, diff --git a/.gitignore b/.gitignore index 484cc0b..ba0d6b3 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ webpack webpack.cmd *.tgz dist/ +.prettierrc diff --git a/package-lock.json b/package-lock.json index 674ecde..ba55a25 100644 --- a/package-lock.json +++ b/package-lock.json @@ -607,12 +607,12 @@ "dev": true }, "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { - "fast-deep-equal": "^2.0.1", + "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" @@ -637,9 +637,9 @@ "dev": true }, "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { @@ -2334,9 +2334,9 @@ } }, "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, "fast-glob": { @@ -2372,9 +2372,9 @@ } }, "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { "is-glob": "^4.0.1" @@ -2995,9 +2995,9 @@ } }, "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "https-browserify": { @@ -3326,9 +3326,9 @@ }, "dependencies": { "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", "dev": true } } @@ -3408,9 +3408,9 @@ } }, "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "lodash.clonedeep": { @@ -3572,9 +3572,9 @@ } }, "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", "dev": true }, "mississippi": { @@ -3617,20 +3617,12 @@ } }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } + "minimist": "^1.2.6" } }, "mocha": { @@ -3933,6 +3925,14 @@ "dev": true, "requires": { "path-parse": "^1.0.6" + }, + "dependencies": { + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + } } } } @@ -4184,9 +4184,9 @@ "dev": true }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "path-type": { @@ -4859,9 +4859,9 @@ "dev": true }, "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", "dev": true, "requires": { "figgy-pudding": "^3.5.1" @@ -5044,9 +5044,9 @@ "dev": true }, "terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", "dev": true, "requires": { "commander": "^2.20.0", @@ -5327,16 +5327,10 @@ "worker-farm": "^1.7.0" }, "dependencies": { - "bluebird": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", - "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==", - "dev": true - }, "cacache": { - "version": "12.0.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", - "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", "dev": true, "requires": { "bluebird": "^3.5.5", @@ -5356,29 +5350,39 @@ "y18n": "^4.0.0" }, "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", "dev": true, "requires": { - "glob": "^7.1.3" + "figgy-pudding": "^3.5.1" } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true } } }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "glob": "^7.1.3" } }, "source-map": { @@ -5990,9 +5994,9 @@ }, "dependencies": { "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", "dev": true } } @@ -6316,15 +6320,15 @@ }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "dev": true }, "string-width": { @@ -6340,7 +6344,7 @@ "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", "dev": true, "requires": { "ansi-regex": "^3.0.0" @@ -6393,9 +6397,9 @@ "dev": true }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, "yallist": { @@ -6446,9 +6450,9 @@ }, "dependencies": { "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true }, "decamelize": { diff --git a/src/hebrewcalendar/JewishCalendar.ts b/src/hebrewcalendar/JewishCalendar.ts index 8f4a1f9..7fd82b9 100644 --- a/src/hebrewcalendar/JewishCalendar.ts +++ b/src/hebrewcalendar/JewishCalendar.ts @@ -16,13 +16,59 @@ const { MONDAY, TUESDAY, THURSDAY, FRIDAY, SATURDAY } = Calendar; export enum Parsha { /** NONE - A week without any parsha such as Shabbos Chol Hamoed */ NONE, - BERESHIS, NOACH, LECH_LECHA, VAYERA, CHAYEI_SARA, TOLDOS, VAYETZEI, - VAYISHLACH, VAYESHEV, MIKETZ, VAYIGASH, VAYECHI, SHEMOS, VAERA, BO, - BESHALACH, YISRO, MISHPATIM, TERUMAH, TETZAVEH, KI_SISA, VAYAKHEL, - PEKUDEI, VAYIKRA, TZAV, SHMINI, TAZRIA, METZORA, ACHREI_MOS, KEDOSHIM, - EMOR, BEHAR, BECHUKOSAI, BAMIDBAR, NASSO, BEHAALOSCHA, SHLACH, KORACH, - CHUKAS, BALAK, PINCHAS, MATOS, MASEI, DEVARIM, VAESCHANAN, EIKEV, - REEH, SHOFTIM, KI_SEITZEI, KI_SAVO, NITZAVIM, VAYEILECH, HAAZINU, + BERESHIS, + NOACH, + LECH_LECHA, + VAYERA, + CHAYEI_SARA, + TOLDOS, + VAYETZEI, + VAYISHLACH, + VAYESHEV, + MIKETZ, + VAYIGASH, + VAYECHI, + SHEMOS, + VAERA, + BO, + BESHALACH, + YISRO, + MISHPATIM, + TERUMAH, + TETZAVEH, + KI_SISA, + VAYAKHEL, + PEKUDEI, + VAYIKRA, + TZAV, + SHMINI, + TAZRIA, + METZORA, + ACHREI_MOS, + KEDOSHIM, + EMOR, + BEHAR, + BECHUKOSAI, + BAMIDBAR, + NASSO, + BEHAALOSCHA, + SHLACH, + KORACH, + CHUKAS, + BALAK, + PINCHAS, + MATOS, + MASEI, + DEVARIM, + VAESCHANAN, + EIKEV, + REEH, + SHOFTIM, + KI_SEITZEI, + KI_SAVO, + NITZAVIM, + VAYEILECH, + HAAZINU, VZOS_HABERACHA, /** The double parsha of Vayakhel & Peudei */ VAYAKHEL_PEKUDEI, @@ -187,6 +233,9 @@ export class JewishCalendar extends JewishDate { /** The holiday of Purim Katan on the 15th day of Adar I on a leap year when Purim is on Adar II, a minor holiday. */ public static readonly SHUSHAN_PURIM_KATAN: number = 34; + /** The day following the last day of Pesach, Shavuos and Sukkos. */ + public static readonly ISRU_CHAG: number = 35; + /** * Is the calendar set to Israel, where some holidays have different rules. * @see #getInIsrael() @@ -205,23 +254,955 @@ export class JewishCalendar extends JewishDate { * An array of parshiyos in the 17 possible combinations. */ public static readonly parshalist: Parsha[][] = [ - [Parsha.NONE, Parsha.VAYEILECH, Parsha.HAAZINU, Parsha.NONE, Parsha.BERESHIS, Parsha.NOACH, Parsha.LECH_LECHA, Parsha.VAYERA, Parsha.CHAYEI_SARA, Parsha.TOLDOS, Parsha.VAYETZEI, Parsha.VAYISHLACH, Parsha.VAYESHEV, Parsha.MIKETZ, Parsha.VAYIGASH, Parsha.VAYECHI, Parsha.SHEMOS, Parsha.VAERA, Parsha.BO, Parsha.BESHALACH, Parsha.YISRO, Parsha.MISHPATIM, Parsha.TERUMAH, Parsha.TETZAVEH, Parsha.KI_SISA, Parsha.VAYAKHEL_PEKUDEI, Parsha.VAYIKRA, Parsha.TZAV, Parsha.NONE, Parsha.SHMINI, Parsha.TAZRIA_METZORA, Parsha.ACHREI_MOS_KEDOSHIM, Parsha.EMOR, Parsha.BEHAR_BECHUKOSAI, Parsha.BAMIDBAR, Parsha.NASSO, Parsha.BEHAALOSCHA, Parsha.SHLACH, Parsha.KORACH, Parsha.CHUKAS, Parsha.BALAK, Parsha.PINCHAS, Parsha.MATOS_MASEI, Parsha.DEVARIM, Parsha.VAESCHANAN, Parsha.EIKEV, Parsha.REEH, Parsha.SHOFTIM, Parsha.KI_SEITZEI, Parsha.KI_SAVO, Parsha.NITZAVIM_VAYEILECH], - [Parsha.NONE, Parsha.VAYEILECH, Parsha.HAAZINU, Parsha.NONE, Parsha.BERESHIS, Parsha.NOACH, Parsha.LECH_LECHA, Parsha.VAYERA, Parsha.CHAYEI_SARA, Parsha.TOLDOS, Parsha.VAYETZEI, Parsha.VAYISHLACH, Parsha.VAYESHEV, Parsha.MIKETZ, Parsha.VAYIGASH, Parsha.VAYECHI, Parsha.SHEMOS, Parsha.VAERA, Parsha.BO, Parsha.BESHALACH, Parsha.YISRO, Parsha.MISHPATIM, Parsha.TERUMAH, Parsha.TETZAVEH, Parsha.KI_SISA, Parsha.VAYAKHEL_PEKUDEI, Parsha.VAYIKRA, Parsha.TZAV, Parsha.NONE, Parsha.SHMINI, Parsha.TAZRIA_METZORA, Parsha.ACHREI_MOS_KEDOSHIM, Parsha.EMOR, Parsha.BEHAR_BECHUKOSAI, Parsha.BAMIDBAR, Parsha.NONE, Parsha.NASSO, Parsha.BEHAALOSCHA, Parsha.SHLACH, Parsha.KORACH, Parsha.CHUKAS_BALAK, Parsha.PINCHAS, Parsha.MATOS_MASEI, Parsha.DEVARIM, Parsha.VAESCHANAN, Parsha.EIKEV, Parsha.REEH, Parsha.SHOFTIM, Parsha.KI_SEITZEI, Parsha.KI_SAVO, Parsha.NITZAVIM_VAYEILECH], - [Parsha.NONE, Parsha.HAAZINU, Parsha.NONE, Parsha.NONE, Parsha.BERESHIS, Parsha.NOACH, Parsha.LECH_LECHA, Parsha.VAYERA, Parsha.CHAYEI_SARA, Parsha.TOLDOS, Parsha.VAYETZEI, Parsha.VAYISHLACH, Parsha.VAYESHEV, Parsha.MIKETZ, Parsha.VAYIGASH, Parsha.VAYECHI, Parsha.SHEMOS, Parsha.VAERA, Parsha.BO, Parsha.BESHALACH, Parsha.YISRO, Parsha.MISHPATIM, Parsha.TERUMAH, Parsha.TETZAVEH, Parsha.KI_SISA, Parsha.VAYAKHEL_PEKUDEI, Parsha.VAYIKRA, Parsha.TZAV, Parsha.NONE, Parsha.NONE, Parsha.SHMINI, Parsha.TAZRIA_METZORA, Parsha.ACHREI_MOS_KEDOSHIM, Parsha.EMOR, Parsha.BEHAR_BECHUKOSAI, Parsha.BAMIDBAR, Parsha.NASSO, Parsha.BEHAALOSCHA, Parsha.SHLACH, Parsha.KORACH, Parsha.CHUKAS, Parsha.BALAK, Parsha.PINCHAS, Parsha.MATOS_MASEI, Parsha.DEVARIM, Parsha.VAESCHANAN, Parsha.EIKEV, Parsha.REEH, Parsha.SHOFTIM, Parsha.KI_SEITZEI, Parsha.KI_SAVO, Parsha.NITZAVIM], - [Parsha.NONE, Parsha.HAAZINU, Parsha.NONE, Parsha.NONE, Parsha.BERESHIS, Parsha.NOACH, Parsha.LECH_LECHA, Parsha.VAYERA, Parsha.CHAYEI_SARA, Parsha.TOLDOS, Parsha.VAYETZEI, Parsha.VAYISHLACH, Parsha.VAYESHEV, Parsha.MIKETZ, Parsha.VAYIGASH, Parsha.VAYECHI, Parsha.SHEMOS, Parsha.VAERA, Parsha.BO, Parsha.BESHALACH, Parsha.YISRO, Parsha.MISHPATIM, Parsha.TERUMAH, Parsha.TETZAVEH, Parsha.KI_SISA, Parsha.VAYAKHEL, Parsha.PEKUDEI, Parsha.VAYIKRA, Parsha.TZAV, Parsha.NONE, Parsha.SHMINI, Parsha.TAZRIA_METZORA, Parsha.ACHREI_MOS_KEDOSHIM, Parsha.EMOR, Parsha.BEHAR_BECHUKOSAI, Parsha.BAMIDBAR, Parsha.NASSO, Parsha.BEHAALOSCHA, Parsha.SHLACH, Parsha.KORACH, Parsha.CHUKAS, Parsha.BALAK, Parsha.PINCHAS, Parsha.MATOS_MASEI, Parsha.DEVARIM, Parsha.VAESCHANAN, Parsha.EIKEV, Parsha.REEH, Parsha.SHOFTIM, Parsha.KI_SEITZEI, Parsha.KI_SAVO, Parsha.NITZAVIM], - [Parsha.NONE, Parsha.NONE, Parsha.HAAZINU, Parsha.NONE, Parsha.NONE, Parsha.BERESHIS, Parsha.NOACH, Parsha.LECH_LECHA, Parsha.VAYERA, Parsha.CHAYEI_SARA, Parsha.TOLDOS, Parsha.VAYETZEI, Parsha.VAYISHLACH, Parsha.VAYESHEV, Parsha.MIKETZ, Parsha.VAYIGASH, Parsha.VAYECHI, Parsha.SHEMOS, Parsha.VAERA, Parsha.BO, Parsha.BESHALACH, Parsha.YISRO, Parsha.MISHPATIM, Parsha.TERUMAH, Parsha.TETZAVEH, Parsha.KI_SISA, Parsha.VAYAKHEL_PEKUDEI, Parsha.VAYIKRA, Parsha.TZAV, Parsha.NONE, Parsha.SHMINI, Parsha.TAZRIA_METZORA, Parsha.ACHREI_MOS_KEDOSHIM, Parsha.EMOR, Parsha.BEHAR_BECHUKOSAI, Parsha.BAMIDBAR, Parsha.NASSO, Parsha.BEHAALOSCHA, Parsha.SHLACH, Parsha.KORACH, Parsha.CHUKAS, Parsha.BALAK, Parsha.PINCHAS, Parsha.MATOS_MASEI, Parsha.DEVARIM, Parsha.VAESCHANAN, Parsha.EIKEV, Parsha.REEH, Parsha.SHOFTIM, Parsha.KI_SEITZEI, Parsha.KI_SAVO, Parsha.NITZAVIM], - [Parsha.NONE, Parsha.NONE, Parsha.HAAZINU, Parsha.NONE, Parsha.NONE, Parsha.BERESHIS, Parsha.NOACH, Parsha.LECH_LECHA, Parsha.VAYERA, Parsha.CHAYEI_SARA, Parsha.TOLDOS, Parsha.VAYETZEI, Parsha.VAYISHLACH, Parsha.VAYESHEV, Parsha.MIKETZ, Parsha.VAYIGASH, Parsha.VAYECHI, Parsha.SHEMOS, Parsha.VAERA, Parsha.BO, Parsha.BESHALACH, Parsha.YISRO, Parsha.MISHPATIM, Parsha.TERUMAH, Parsha.TETZAVEH, Parsha.KI_SISA, Parsha.VAYAKHEL_PEKUDEI, Parsha.VAYIKRA, Parsha.TZAV, Parsha.NONE, Parsha.SHMINI, Parsha.TAZRIA_METZORA, Parsha.ACHREI_MOS_KEDOSHIM, Parsha.EMOR, Parsha.BEHAR_BECHUKOSAI, Parsha.BAMIDBAR, Parsha.NASSO, Parsha.BEHAALOSCHA, Parsha.SHLACH, Parsha.KORACH, Parsha.CHUKAS, Parsha.BALAK, Parsha.PINCHAS, Parsha.MATOS_MASEI, Parsha.DEVARIM, Parsha.VAESCHANAN, Parsha.EIKEV, Parsha.REEH, Parsha.SHOFTIM, Parsha.KI_SEITZEI, Parsha.KI_SAVO, Parsha.NITZAVIM_VAYEILECH], - [Parsha.NONE, Parsha.VAYEILECH, Parsha.HAAZINU, Parsha.NONE, Parsha.BERESHIS, Parsha.NOACH, Parsha.LECH_LECHA, Parsha.VAYERA, Parsha.CHAYEI_SARA, Parsha.TOLDOS, Parsha.VAYETZEI, Parsha.VAYISHLACH, Parsha.VAYESHEV, Parsha.MIKETZ, Parsha.VAYIGASH, Parsha.VAYECHI, Parsha.SHEMOS, Parsha.VAERA, Parsha.BO, Parsha.BESHALACH, Parsha.YISRO, Parsha.MISHPATIM, Parsha.TERUMAH, Parsha.TETZAVEH, Parsha.KI_SISA, Parsha.VAYAKHEL, Parsha.PEKUDEI, Parsha.VAYIKRA, Parsha.TZAV, Parsha.SHMINI, Parsha.TAZRIA, Parsha.METZORA, Parsha.NONE, Parsha.ACHREI_MOS, Parsha.KEDOSHIM, Parsha.EMOR, Parsha.BEHAR, Parsha.BECHUKOSAI, Parsha.BAMIDBAR, Parsha.NONE, Parsha.NASSO, Parsha.BEHAALOSCHA, Parsha.SHLACH, Parsha.KORACH, Parsha.CHUKAS_BALAK, Parsha.PINCHAS, Parsha.MATOS_MASEI, Parsha.DEVARIM, Parsha.VAESCHANAN, Parsha.EIKEV, Parsha.REEH, Parsha.SHOFTIM, Parsha.KI_SEITZEI, Parsha.KI_SAVO, Parsha.NITZAVIM_VAYEILECH], - [Parsha.NONE, Parsha.VAYEILECH, Parsha.HAAZINU, Parsha.NONE, Parsha.BERESHIS, Parsha.NOACH, Parsha.LECH_LECHA, Parsha.VAYERA, Parsha.CHAYEI_SARA, Parsha.TOLDOS, Parsha.VAYETZEI, Parsha.VAYISHLACH, Parsha.VAYESHEV, Parsha.MIKETZ, Parsha.VAYIGASH, Parsha.VAYECHI, Parsha.SHEMOS, Parsha.VAERA, Parsha.BO, Parsha.BESHALACH, Parsha.YISRO, Parsha.MISHPATIM, Parsha.TERUMAH, Parsha.TETZAVEH, Parsha.KI_SISA, Parsha.VAYAKHEL, Parsha.PEKUDEI, Parsha.VAYIKRA, Parsha.TZAV, Parsha.SHMINI, Parsha.TAZRIA, Parsha.METZORA, Parsha.NONE, Parsha.NONE, Parsha.ACHREI_MOS, Parsha.KEDOSHIM, Parsha.EMOR, Parsha.BEHAR, Parsha.BECHUKOSAI, Parsha.BAMIDBAR, Parsha.NASSO, Parsha.BEHAALOSCHA, Parsha.SHLACH, Parsha.KORACH, Parsha.CHUKAS, Parsha.BALAK, Parsha.PINCHAS, Parsha.MATOS_MASEI, Parsha.DEVARIM, Parsha.VAESCHANAN, Parsha.EIKEV, Parsha.REEH, Parsha.SHOFTIM, Parsha.KI_SEITZEI, Parsha.KI_SAVO, Parsha.NITZAVIM], - [Parsha.NONE, Parsha.HAAZINU, Parsha.NONE, Parsha.NONE, Parsha.BERESHIS, Parsha.NOACH, Parsha.LECH_LECHA, Parsha.VAYERA, Parsha.CHAYEI_SARA, Parsha.TOLDOS, Parsha.VAYETZEI, Parsha.VAYISHLACH, Parsha.VAYESHEV, Parsha.MIKETZ, Parsha.VAYIGASH, Parsha.VAYECHI, Parsha.SHEMOS, Parsha.VAERA, Parsha.BO, Parsha.BESHALACH, Parsha.YISRO, Parsha.MISHPATIM, Parsha.TERUMAH, Parsha.TETZAVEH, Parsha.KI_SISA, Parsha.VAYAKHEL, Parsha.PEKUDEI, Parsha.VAYIKRA, Parsha.TZAV, Parsha.SHMINI, Parsha.TAZRIA, Parsha.METZORA, Parsha.ACHREI_MOS, Parsha.NONE, Parsha.KEDOSHIM, Parsha.EMOR, Parsha.BEHAR, Parsha.BECHUKOSAI, Parsha.BAMIDBAR, Parsha.NASSO, Parsha.BEHAALOSCHA, Parsha.SHLACH, Parsha.KORACH, Parsha.CHUKAS, Parsha.BALAK, Parsha.PINCHAS, Parsha.MATOS, Parsha.MASEI, Parsha.DEVARIM, Parsha.VAESCHANAN, Parsha.EIKEV, Parsha.REEH, Parsha.SHOFTIM, Parsha.KI_SEITZEI, Parsha.KI_SAVO, Parsha.NITZAVIM], - [Parsha.NONE, Parsha.HAAZINU, Parsha.NONE, Parsha.NONE, Parsha.BERESHIS, Parsha.NOACH, Parsha.LECH_LECHA, Parsha.VAYERA, Parsha.CHAYEI_SARA, Parsha.TOLDOS, Parsha.VAYETZEI, Parsha.VAYISHLACH, Parsha.VAYESHEV, Parsha.MIKETZ, Parsha.VAYIGASH, Parsha.VAYECHI, Parsha.SHEMOS, Parsha.VAERA, Parsha.BO, Parsha.BESHALACH, Parsha.YISRO, Parsha.MISHPATIM, Parsha.TERUMAH, Parsha.TETZAVEH, Parsha.KI_SISA, Parsha.VAYAKHEL, Parsha.PEKUDEI, Parsha.VAYIKRA, Parsha.TZAV, Parsha.SHMINI, Parsha.TAZRIA, Parsha.METZORA, Parsha.ACHREI_MOS, Parsha.NONE, Parsha.KEDOSHIM, Parsha.EMOR, Parsha.BEHAR, Parsha.BECHUKOSAI, Parsha.BAMIDBAR, Parsha.NASSO, Parsha.BEHAALOSCHA, Parsha.SHLACH, Parsha.KORACH, Parsha.CHUKAS, Parsha.BALAK, Parsha.PINCHAS, Parsha.MATOS, Parsha.MASEI, Parsha.DEVARIM, Parsha.VAESCHANAN, Parsha.EIKEV, Parsha.REEH, Parsha.SHOFTIM, Parsha.KI_SEITZEI, Parsha.KI_SAVO, Parsha.NITZAVIM_VAYEILECH], - [Parsha.NONE, Parsha.NONE, Parsha.HAAZINU, Parsha.NONE, Parsha.NONE, Parsha.BERESHIS, Parsha.NOACH, Parsha.LECH_LECHA, Parsha.VAYERA, Parsha.CHAYEI_SARA, Parsha.TOLDOS, Parsha.VAYETZEI, Parsha.VAYISHLACH, Parsha.VAYESHEV, Parsha.MIKETZ, Parsha.VAYIGASH, Parsha.VAYECHI, Parsha.SHEMOS, Parsha.VAERA, Parsha.BO, Parsha.BESHALACH, Parsha.YISRO, Parsha.MISHPATIM, Parsha.TERUMAH, Parsha.TETZAVEH, Parsha.KI_SISA, Parsha.VAYAKHEL, Parsha.PEKUDEI, Parsha.VAYIKRA, Parsha.TZAV, Parsha.SHMINI, Parsha.TAZRIA, Parsha.METZORA, Parsha.NONE, Parsha.ACHREI_MOS, Parsha.KEDOSHIM, Parsha.EMOR, Parsha.BEHAR, Parsha.BECHUKOSAI, Parsha.BAMIDBAR, Parsha.NASSO, Parsha.BEHAALOSCHA, Parsha.SHLACH, Parsha.KORACH, Parsha.CHUKAS, Parsha.BALAK, Parsha.PINCHAS, Parsha.MATOS_MASEI, Parsha.DEVARIM, Parsha.VAESCHANAN, Parsha.EIKEV, Parsha.REEH, Parsha.SHOFTIM, Parsha.KI_SEITZEI, Parsha.KI_SAVO, Parsha.NITZAVIM_VAYEILECH], - [Parsha.NONE, Parsha.NONE, Parsha.HAAZINU, Parsha.NONE, Parsha.NONE, Parsha.BERESHIS, Parsha.NOACH, Parsha.LECH_LECHA, Parsha.VAYERA, Parsha.CHAYEI_SARA, Parsha.TOLDOS, Parsha.VAYETZEI, Parsha.VAYISHLACH, Parsha.VAYESHEV, Parsha.MIKETZ, Parsha.VAYIGASH, Parsha.VAYECHI, Parsha.SHEMOS, Parsha.VAERA, Parsha.BO, Parsha.BESHALACH, Parsha.YISRO, Parsha.MISHPATIM, Parsha.TERUMAH, Parsha.TETZAVEH, Parsha.KI_SISA, Parsha.VAYAKHEL, Parsha.PEKUDEI, Parsha.VAYIKRA, Parsha.TZAV, Parsha.SHMINI, Parsha.TAZRIA, Parsha.METZORA, Parsha.NONE, Parsha.ACHREI_MOS, Parsha.KEDOSHIM, Parsha.EMOR, Parsha.BEHAR, Parsha.BECHUKOSAI, Parsha.BAMIDBAR, Parsha.NONE, Parsha.NASSO, Parsha.BEHAALOSCHA, Parsha.SHLACH, Parsha.KORACH, Parsha.CHUKAS_BALAK, Parsha.PINCHAS, Parsha.MATOS_MASEI, Parsha.DEVARIM, Parsha.VAESCHANAN, Parsha.EIKEV, Parsha.REEH, Parsha.SHOFTIM, Parsha.KI_SEITZEI, Parsha.KI_SAVO, Parsha.NITZAVIM_VAYEILECH], - [Parsha.NONE, Parsha.VAYEILECH, Parsha.HAAZINU, Parsha.NONE, Parsha.BERESHIS, Parsha.NOACH, Parsha.LECH_LECHA, Parsha.VAYERA, Parsha.CHAYEI_SARA, Parsha.TOLDOS, Parsha.VAYETZEI, Parsha.VAYISHLACH, Parsha.VAYESHEV, Parsha.MIKETZ, Parsha.VAYIGASH, Parsha.VAYECHI, Parsha.SHEMOS, Parsha.VAERA, Parsha.BO, Parsha.BESHALACH, Parsha.YISRO, Parsha.MISHPATIM, Parsha.TERUMAH, Parsha.TETZAVEH, Parsha.KI_SISA, Parsha.VAYAKHEL_PEKUDEI, Parsha.VAYIKRA, Parsha.TZAV, Parsha.NONE, Parsha.SHMINI, Parsha.TAZRIA_METZORA, Parsha.ACHREI_MOS_KEDOSHIM, Parsha.EMOR, Parsha.BEHAR_BECHUKOSAI, Parsha.BAMIDBAR, Parsha.NASSO, Parsha.BEHAALOSCHA, Parsha.SHLACH, Parsha.KORACH, Parsha.CHUKAS, Parsha.BALAK, Parsha.PINCHAS, Parsha.MATOS_MASEI, Parsha.DEVARIM, Parsha.VAESCHANAN, Parsha.EIKEV, Parsha.REEH, Parsha.SHOFTIM, Parsha.KI_SEITZEI, Parsha.KI_SAVO, Parsha.NITZAVIM_VAYEILECH], - [Parsha.NONE, Parsha.HAAZINU, Parsha.NONE, Parsha.NONE, Parsha.BERESHIS, Parsha.NOACH, Parsha.LECH_LECHA, Parsha.VAYERA, Parsha.CHAYEI_SARA, Parsha.TOLDOS, Parsha.VAYETZEI, Parsha.VAYISHLACH, Parsha.VAYESHEV, Parsha.MIKETZ, Parsha.VAYIGASH, Parsha.VAYECHI, Parsha.SHEMOS, Parsha.VAERA, Parsha.BO, Parsha.BESHALACH, Parsha.YISRO, Parsha.MISHPATIM, Parsha.TERUMAH, Parsha.TETZAVEH, Parsha.KI_SISA, Parsha.VAYAKHEL_PEKUDEI, Parsha.VAYIKRA, Parsha.TZAV, Parsha.NONE, Parsha.SHMINI, Parsha.TAZRIA_METZORA, Parsha.ACHREI_MOS_KEDOSHIM, Parsha.EMOR, Parsha.BEHAR, Parsha.BECHUKOSAI, Parsha.BAMIDBAR, Parsha.NASSO, Parsha.BEHAALOSCHA, Parsha.SHLACH, Parsha.KORACH, Parsha.CHUKAS, Parsha.BALAK, Parsha.PINCHAS, Parsha.MATOS_MASEI, Parsha.DEVARIM, Parsha.VAESCHANAN, Parsha.EIKEV, Parsha.REEH, Parsha.SHOFTIM, Parsha.KI_SEITZEI, Parsha.KI_SAVO, Parsha.NITZAVIM], - [Parsha.NONE, Parsha.VAYEILECH, Parsha.HAAZINU, Parsha.NONE, Parsha.BERESHIS, Parsha.NOACH, Parsha.LECH_LECHA, Parsha.VAYERA, Parsha.CHAYEI_SARA, Parsha.TOLDOS, Parsha.VAYETZEI, Parsha.VAYISHLACH, Parsha.VAYESHEV, Parsha.MIKETZ, Parsha.VAYIGASH, Parsha.VAYECHI, Parsha.SHEMOS, Parsha.VAERA, Parsha.BO, Parsha.BESHALACH, Parsha.YISRO, Parsha.MISHPATIM, Parsha.TERUMAH, Parsha.TETZAVEH, Parsha.KI_SISA, Parsha.VAYAKHEL, Parsha.PEKUDEI, Parsha.VAYIKRA, Parsha.TZAV, Parsha.SHMINI, Parsha.TAZRIA, Parsha.METZORA, Parsha.NONE, Parsha.ACHREI_MOS, Parsha.KEDOSHIM, Parsha.EMOR, Parsha.BEHAR, Parsha.BECHUKOSAI, Parsha.BAMIDBAR, Parsha.NASSO, Parsha.BEHAALOSCHA, Parsha.SHLACH, Parsha.KORACH, Parsha.CHUKAS, Parsha.BALAK, Parsha.PINCHAS, Parsha.MATOS_MASEI, Parsha.DEVARIM, Parsha.VAESCHANAN, Parsha.EIKEV, Parsha.REEH, Parsha.SHOFTIM, Parsha.KI_SEITZEI, Parsha.KI_SAVO, Parsha.NITZAVIM_VAYEILECH], - [Parsha.NONE, Parsha.VAYEILECH, Parsha.HAAZINU, Parsha.NONE, Parsha.BERESHIS, Parsha.NOACH, Parsha.LECH_LECHA, Parsha.VAYERA, Parsha.CHAYEI_SARA, Parsha.TOLDOS, Parsha.VAYETZEI, Parsha.VAYISHLACH, Parsha.VAYESHEV, Parsha.MIKETZ, Parsha.VAYIGASH, Parsha.VAYECHI, Parsha.SHEMOS, Parsha.VAERA, Parsha.BO, Parsha.BESHALACH, Parsha.YISRO, Parsha.MISHPATIM, Parsha.TERUMAH, Parsha.TETZAVEH, Parsha.KI_SISA, Parsha.VAYAKHEL, Parsha.PEKUDEI, Parsha.VAYIKRA, Parsha.TZAV, Parsha.SHMINI, Parsha.TAZRIA, Parsha.METZORA, Parsha.NONE, Parsha.ACHREI_MOS, Parsha.KEDOSHIM, Parsha.EMOR, Parsha.BEHAR, Parsha.BECHUKOSAI, Parsha.BAMIDBAR, Parsha.NASSO, Parsha.BEHAALOSCHA, Parsha.SHLACH, Parsha.KORACH, Parsha.CHUKAS, Parsha.BALAK, Parsha.PINCHAS, Parsha.MATOS, Parsha.MASEI, Parsha.DEVARIM, Parsha.VAESCHANAN, Parsha.EIKEV, Parsha.REEH, Parsha.SHOFTIM, Parsha.KI_SEITZEI, Parsha.KI_SAVO, Parsha.NITZAVIM], - [Parsha.NONE, Parsha.NONE, Parsha.HAAZINU, Parsha.NONE, Parsha.NONE, Parsha.BERESHIS, Parsha.NOACH, Parsha.LECH_LECHA, Parsha.VAYERA, Parsha.CHAYEI_SARA, Parsha.TOLDOS, Parsha.VAYETZEI, Parsha.VAYISHLACH, Parsha.VAYESHEV, Parsha.MIKETZ, Parsha.VAYIGASH, Parsha.VAYECHI, Parsha.SHEMOS, Parsha.VAERA, Parsha.BO, Parsha.BESHALACH, Parsha.YISRO, Parsha.MISHPATIM, Parsha.TERUMAH, Parsha.TETZAVEH, Parsha.KI_SISA, Parsha.VAYAKHEL, Parsha.PEKUDEI, Parsha.VAYIKRA, Parsha.TZAV, Parsha.SHMINI, Parsha.TAZRIA, Parsha.METZORA, Parsha.NONE, Parsha.ACHREI_MOS, Parsha.KEDOSHIM, Parsha.EMOR, Parsha.BEHAR, Parsha.BECHUKOSAI, Parsha.BAMIDBAR, Parsha.NASSO, Parsha.BEHAALOSCHA, Parsha.SHLACH, Parsha.KORACH, Parsha.CHUKAS, Parsha.BALAK, Parsha.PINCHAS, Parsha.MATOS_MASEI, Parsha.DEVARIM, Parsha.VAESCHANAN, Parsha.EIKEV, Parsha.REEH, Parsha.SHOFTIM, Parsha.KI_SEITZEI, Parsha.KI_SAVO, Parsha.NITZAVIM_VAYEILECH], + [ + Parsha.NONE, + Parsha.VAYEILECH, + Parsha.HAAZINU, + Parsha.NONE, + Parsha.BERESHIS, + Parsha.NOACH, + Parsha.LECH_LECHA, + Parsha.VAYERA, + Parsha.CHAYEI_SARA, + Parsha.TOLDOS, + Parsha.VAYETZEI, + Parsha.VAYISHLACH, + Parsha.VAYESHEV, + Parsha.MIKETZ, + Parsha.VAYIGASH, + Parsha.VAYECHI, + Parsha.SHEMOS, + Parsha.VAERA, + Parsha.BO, + Parsha.BESHALACH, + Parsha.YISRO, + Parsha.MISHPATIM, + Parsha.TERUMAH, + Parsha.TETZAVEH, + Parsha.KI_SISA, + Parsha.VAYAKHEL_PEKUDEI, + Parsha.VAYIKRA, + Parsha.TZAV, + Parsha.NONE, + Parsha.SHMINI, + Parsha.TAZRIA_METZORA, + Parsha.ACHREI_MOS_KEDOSHIM, + Parsha.EMOR, + Parsha.BEHAR_BECHUKOSAI, + Parsha.BAMIDBAR, + Parsha.NASSO, + Parsha.BEHAALOSCHA, + Parsha.SHLACH, + Parsha.KORACH, + Parsha.CHUKAS, + Parsha.BALAK, + Parsha.PINCHAS, + Parsha.MATOS_MASEI, + Parsha.DEVARIM, + Parsha.VAESCHANAN, + Parsha.EIKEV, + Parsha.REEH, + Parsha.SHOFTIM, + Parsha.KI_SEITZEI, + Parsha.KI_SAVO, + Parsha.NITZAVIM_VAYEILECH, + ], + [ + Parsha.NONE, + Parsha.VAYEILECH, + Parsha.HAAZINU, + Parsha.NONE, + Parsha.BERESHIS, + Parsha.NOACH, + Parsha.LECH_LECHA, + Parsha.VAYERA, + Parsha.CHAYEI_SARA, + Parsha.TOLDOS, + Parsha.VAYETZEI, + Parsha.VAYISHLACH, + Parsha.VAYESHEV, + Parsha.MIKETZ, + Parsha.VAYIGASH, + Parsha.VAYECHI, + Parsha.SHEMOS, + Parsha.VAERA, + Parsha.BO, + Parsha.BESHALACH, + Parsha.YISRO, + Parsha.MISHPATIM, + Parsha.TERUMAH, + Parsha.TETZAVEH, + Parsha.KI_SISA, + Parsha.VAYAKHEL_PEKUDEI, + Parsha.VAYIKRA, + Parsha.TZAV, + Parsha.NONE, + Parsha.SHMINI, + Parsha.TAZRIA_METZORA, + Parsha.ACHREI_MOS_KEDOSHIM, + Parsha.EMOR, + Parsha.BEHAR_BECHUKOSAI, + Parsha.BAMIDBAR, + Parsha.NONE, + Parsha.NASSO, + Parsha.BEHAALOSCHA, + Parsha.SHLACH, + Parsha.KORACH, + Parsha.CHUKAS_BALAK, + Parsha.PINCHAS, + Parsha.MATOS_MASEI, + Parsha.DEVARIM, + Parsha.VAESCHANAN, + Parsha.EIKEV, + Parsha.REEH, + Parsha.SHOFTIM, + Parsha.KI_SEITZEI, + Parsha.KI_SAVO, + Parsha.NITZAVIM_VAYEILECH, + ], + [ + Parsha.NONE, + Parsha.HAAZINU, + Parsha.NONE, + Parsha.NONE, + Parsha.BERESHIS, + Parsha.NOACH, + Parsha.LECH_LECHA, + Parsha.VAYERA, + Parsha.CHAYEI_SARA, + Parsha.TOLDOS, + Parsha.VAYETZEI, + Parsha.VAYISHLACH, + Parsha.VAYESHEV, + Parsha.MIKETZ, + Parsha.VAYIGASH, + Parsha.VAYECHI, + Parsha.SHEMOS, + Parsha.VAERA, + Parsha.BO, + Parsha.BESHALACH, + Parsha.YISRO, + Parsha.MISHPATIM, + Parsha.TERUMAH, + Parsha.TETZAVEH, + Parsha.KI_SISA, + Parsha.VAYAKHEL_PEKUDEI, + Parsha.VAYIKRA, + Parsha.TZAV, + Parsha.NONE, + Parsha.NONE, + Parsha.SHMINI, + Parsha.TAZRIA_METZORA, + Parsha.ACHREI_MOS_KEDOSHIM, + Parsha.EMOR, + Parsha.BEHAR_BECHUKOSAI, + Parsha.BAMIDBAR, + Parsha.NASSO, + Parsha.BEHAALOSCHA, + Parsha.SHLACH, + Parsha.KORACH, + Parsha.CHUKAS, + Parsha.BALAK, + Parsha.PINCHAS, + Parsha.MATOS_MASEI, + Parsha.DEVARIM, + Parsha.VAESCHANAN, + Parsha.EIKEV, + Parsha.REEH, + Parsha.SHOFTIM, + Parsha.KI_SEITZEI, + Parsha.KI_SAVO, + Parsha.NITZAVIM, + ], + [ + Parsha.NONE, + Parsha.HAAZINU, + Parsha.NONE, + Parsha.NONE, + Parsha.BERESHIS, + Parsha.NOACH, + Parsha.LECH_LECHA, + Parsha.VAYERA, + Parsha.CHAYEI_SARA, + Parsha.TOLDOS, + Parsha.VAYETZEI, + Parsha.VAYISHLACH, + Parsha.VAYESHEV, + Parsha.MIKETZ, + Parsha.VAYIGASH, + Parsha.VAYECHI, + Parsha.SHEMOS, + Parsha.VAERA, + Parsha.BO, + Parsha.BESHALACH, + Parsha.YISRO, + Parsha.MISHPATIM, + Parsha.TERUMAH, + Parsha.TETZAVEH, + Parsha.KI_SISA, + Parsha.VAYAKHEL, + Parsha.PEKUDEI, + Parsha.VAYIKRA, + Parsha.TZAV, + Parsha.NONE, + Parsha.SHMINI, + Parsha.TAZRIA_METZORA, + Parsha.ACHREI_MOS_KEDOSHIM, + Parsha.EMOR, + Parsha.BEHAR_BECHUKOSAI, + Parsha.BAMIDBAR, + Parsha.NASSO, + Parsha.BEHAALOSCHA, + Parsha.SHLACH, + Parsha.KORACH, + Parsha.CHUKAS, + Parsha.BALAK, + Parsha.PINCHAS, + Parsha.MATOS_MASEI, + Parsha.DEVARIM, + Parsha.VAESCHANAN, + Parsha.EIKEV, + Parsha.REEH, + Parsha.SHOFTIM, + Parsha.KI_SEITZEI, + Parsha.KI_SAVO, + Parsha.NITZAVIM, + ], + [ + Parsha.NONE, + Parsha.NONE, + Parsha.HAAZINU, + Parsha.NONE, + Parsha.NONE, + Parsha.BERESHIS, + Parsha.NOACH, + Parsha.LECH_LECHA, + Parsha.VAYERA, + Parsha.CHAYEI_SARA, + Parsha.TOLDOS, + Parsha.VAYETZEI, + Parsha.VAYISHLACH, + Parsha.VAYESHEV, + Parsha.MIKETZ, + Parsha.VAYIGASH, + Parsha.VAYECHI, + Parsha.SHEMOS, + Parsha.VAERA, + Parsha.BO, + Parsha.BESHALACH, + Parsha.YISRO, + Parsha.MISHPATIM, + Parsha.TERUMAH, + Parsha.TETZAVEH, + Parsha.KI_SISA, + Parsha.VAYAKHEL_PEKUDEI, + Parsha.VAYIKRA, + Parsha.TZAV, + Parsha.NONE, + Parsha.SHMINI, + Parsha.TAZRIA_METZORA, + Parsha.ACHREI_MOS_KEDOSHIM, + Parsha.EMOR, + Parsha.BEHAR_BECHUKOSAI, + Parsha.BAMIDBAR, + Parsha.NASSO, + Parsha.BEHAALOSCHA, + Parsha.SHLACH, + Parsha.KORACH, + Parsha.CHUKAS, + Parsha.BALAK, + Parsha.PINCHAS, + Parsha.MATOS_MASEI, + Parsha.DEVARIM, + Parsha.VAESCHANAN, + Parsha.EIKEV, + Parsha.REEH, + Parsha.SHOFTIM, + Parsha.KI_SEITZEI, + Parsha.KI_SAVO, + Parsha.NITZAVIM, + ], + [ + Parsha.NONE, + Parsha.NONE, + Parsha.HAAZINU, + Parsha.NONE, + Parsha.NONE, + Parsha.BERESHIS, + Parsha.NOACH, + Parsha.LECH_LECHA, + Parsha.VAYERA, + Parsha.CHAYEI_SARA, + Parsha.TOLDOS, + Parsha.VAYETZEI, + Parsha.VAYISHLACH, + Parsha.VAYESHEV, + Parsha.MIKETZ, + Parsha.VAYIGASH, + Parsha.VAYECHI, + Parsha.SHEMOS, + Parsha.VAERA, + Parsha.BO, + Parsha.BESHALACH, + Parsha.YISRO, + Parsha.MISHPATIM, + Parsha.TERUMAH, + Parsha.TETZAVEH, + Parsha.KI_SISA, + Parsha.VAYAKHEL_PEKUDEI, + Parsha.VAYIKRA, + Parsha.TZAV, + Parsha.NONE, + Parsha.SHMINI, + Parsha.TAZRIA_METZORA, + Parsha.ACHREI_MOS_KEDOSHIM, + Parsha.EMOR, + Parsha.BEHAR_BECHUKOSAI, + Parsha.BAMIDBAR, + Parsha.NASSO, + Parsha.BEHAALOSCHA, + Parsha.SHLACH, + Parsha.KORACH, + Parsha.CHUKAS, + Parsha.BALAK, + Parsha.PINCHAS, + Parsha.MATOS_MASEI, + Parsha.DEVARIM, + Parsha.VAESCHANAN, + Parsha.EIKEV, + Parsha.REEH, + Parsha.SHOFTIM, + Parsha.KI_SEITZEI, + Parsha.KI_SAVO, + Parsha.NITZAVIM_VAYEILECH, + ], + [ + Parsha.NONE, + Parsha.VAYEILECH, + Parsha.HAAZINU, + Parsha.NONE, + Parsha.BERESHIS, + Parsha.NOACH, + Parsha.LECH_LECHA, + Parsha.VAYERA, + Parsha.CHAYEI_SARA, + Parsha.TOLDOS, + Parsha.VAYETZEI, + Parsha.VAYISHLACH, + Parsha.VAYESHEV, + Parsha.MIKETZ, + Parsha.VAYIGASH, + Parsha.VAYECHI, + Parsha.SHEMOS, + Parsha.VAERA, + Parsha.BO, + Parsha.BESHALACH, + Parsha.YISRO, + Parsha.MISHPATIM, + Parsha.TERUMAH, + Parsha.TETZAVEH, + Parsha.KI_SISA, + Parsha.VAYAKHEL, + Parsha.PEKUDEI, + Parsha.VAYIKRA, + Parsha.TZAV, + Parsha.SHMINI, + Parsha.TAZRIA, + Parsha.METZORA, + Parsha.NONE, + Parsha.ACHREI_MOS, + Parsha.KEDOSHIM, + Parsha.EMOR, + Parsha.BEHAR, + Parsha.BECHUKOSAI, + Parsha.BAMIDBAR, + Parsha.NONE, + Parsha.NASSO, + Parsha.BEHAALOSCHA, + Parsha.SHLACH, + Parsha.KORACH, + Parsha.CHUKAS_BALAK, + Parsha.PINCHAS, + Parsha.MATOS_MASEI, + Parsha.DEVARIM, + Parsha.VAESCHANAN, + Parsha.EIKEV, + Parsha.REEH, + Parsha.SHOFTIM, + Parsha.KI_SEITZEI, + Parsha.KI_SAVO, + Parsha.NITZAVIM_VAYEILECH, + ], + [ + Parsha.NONE, + Parsha.VAYEILECH, + Parsha.HAAZINU, + Parsha.NONE, + Parsha.BERESHIS, + Parsha.NOACH, + Parsha.LECH_LECHA, + Parsha.VAYERA, + Parsha.CHAYEI_SARA, + Parsha.TOLDOS, + Parsha.VAYETZEI, + Parsha.VAYISHLACH, + Parsha.VAYESHEV, + Parsha.MIKETZ, + Parsha.VAYIGASH, + Parsha.VAYECHI, + Parsha.SHEMOS, + Parsha.VAERA, + Parsha.BO, + Parsha.BESHALACH, + Parsha.YISRO, + Parsha.MISHPATIM, + Parsha.TERUMAH, + Parsha.TETZAVEH, + Parsha.KI_SISA, + Parsha.VAYAKHEL, + Parsha.PEKUDEI, + Parsha.VAYIKRA, + Parsha.TZAV, + Parsha.SHMINI, + Parsha.TAZRIA, + Parsha.METZORA, + Parsha.NONE, + Parsha.NONE, + Parsha.ACHREI_MOS, + Parsha.KEDOSHIM, + Parsha.EMOR, + Parsha.BEHAR, + Parsha.BECHUKOSAI, + Parsha.BAMIDBAR, + Parsha.NASSO, + Parsha.BEHAALOSCHA, + Parsha.SHLACH, + Parsha.KORACH, + Parsha.CHUKAS, + Parsha.BALAK, + Parsha.PINCHAS, + Parsha.MATOS_MASEI, + Parsha.DEVARIM, + Parsha.VAESCHANAN, + Parsha.EIKEV, + Parsha.REEH, + Parsha.SHOFTIM, + Parsha.KI_SEITZEI, + Parsha.KI_SAVO, + Parsha.NITZAVIM, + ], + [ + Parsha.NONE, + Parsha.HAAZINU, + Parsha.NONE, + Parsha.NONE, + Parsha.BERESHIS, + Parsha.NOACH, + Parsha.LECH_LECHA, + Parsha.VAYERA, + Parsha.CHAYEI_SARA, + Parsha.TOLDOS, + Parsha.VAYETZEI, + Parsha.VAYISHLACH, + Parsha.VAYESHEV, + Parsha.MIKETZ, + Parsha.VAYIGASH, + Parsha.VAYECHI, + Parsha.SHEMOS, + Parsha.VAERA, + Parsha.BO, + Parsha.BESHALACH, + Parsha.YISRO, + Parsha.MISHPATIM, + Parsha.TERUMAH, + Parsha.TETZAVEH, + Parsha.KI_SISA, + Parsha.VAYAKHEL, + Parsha.PEKUDEI, + Parsha.VAYIKRA, + Parsha.TZAV, + Parsha.SHMINI, + Parsha.TAZRIA, + Parsha.METZORA, + Parsha.ACHREI_MOS, + Parsha.NONE, + Parsha.KEDOSHIM, + Parsha.EMOR, + Parsha.BEHAR, + Parsha.BECHUKOSAI, + Parsha.BAMIDBAR, + Parsha.NASSO, + Parsha.BEHAALOSCHA, + Parsha.SHLACH, + Parsha.KORACH, + Parsha.CHUKAS, + Parsha.BALAK, + Parsha.PINCHAS, + Parsha.MATOS, + Parsha.MASEI, + Parsha.DEVARIM, + Parsha.VAESCHANAN, + Parsha.EIKEV, + Parsha.REEH, + Parsha.SHOFTIM, + Parsha.KI_SEITZEI, + Parsha.KI_SAVO, + Parsha.NITZAVIM, + ], + [ + Parsha.NONE, + Parsha.HAAZINU, + Parsha.NONE, + Parsha.NONE, + Parsha.BERESHIS, + Parsha.NOACH, + Parsha.LECH_LECHA, + Parsha.VAYERA, + Parsha.CHAYEI_SARA, + Parsha.TOLDOS, + Parsha.VAYETZEI, + Parsha.VAYISHLACH, + Parsha.VAYESHEV, + Parsha.MIKETZ, + Parsha.VAYIGASH, + Parsha.VAYECHI, + Parsha.SHEMOS, + Parsha.VAERA, + Parsha.BO, + Parsha.BESHALACH, + Parsha.YISRO, + Parsha.MISHPATIM, + Parsha.TERUMAH, + Parsha.TETZAVEH, + Parsha.KI_SISA, + Parsha.VAYAKHEL, + Parsha.PEKUDEI, + Parsha.VAYIKRA, + Parsha.TZAV, + Parsha.SHMINI, + Parsha.TAZRIA, + Parsha.METZORA, + Parsha.ACHREI_MOS, + Parsha.NONE, + Parsha.KEDOSHIM, + Parsha.EMOR, + Parsha.BEHAR, + Parsha.BECHUKOSAI, + Parsha.BAMIDBAR, + Parsha.NASSO, + Parsha.BEHAALOSCHA, + Parsha.SHLACH, + Parsha.KORACH, + Parsha.CHUKAS, + Parsha.BALAK, + Parsha.PINCHAS, + Parsha.MATOS, + Parsha.MASEI, + Parsha.DEVARIM, + Parsha.VAESCHANAN, + Parsha.EIKEV, + Parsha.REEH, + Parsha.SHOFTIM, + Parsha.KI_SEITZEI, + Parsha.KI_SAVO, + Parsha.NITZAVIM_VAYEILECH, + ], + [ + Parsha.NONE, + Parsha.NONE, + Parsha.HAAZINU, + Parsha.NONE, + Parsha.NONE, + Parsha.BERESHIS, + Parsha.NOACH, + Parsha.LECH_LECHA, + Parsha.VAYERA, + Parsha.CHAYEI_SARA, + Parsha.TOLDOS, + Parsha.VAYETZEI, + Parsha.VAYISHLACH, + Parsha.VAYESHEV, + Parsha.MIKETZ, + Parsha.VAYIGASH, + Parsha.VAYECHI, + Parsha.SHEMOS, + Parsha.VAERA, + Parsha.BO, + Parsha.BESHALACH, + Parsha.YISRO, + Parsha.MISHPATIM, + Parsha.TERUMAH, + Parsha.TETZAVEH, + Parsha.KI_SISA, + Parsha.VAYAKHEL, + Parsha.PEKUDEI, + Parsha.VAYIKRA, + Parsha.TZAV, + Parsha.SHMINI, + Parsha.TAZRIA, + Parsha.METZORA, + Parsha.NONE, + Parsha.ACHREI_MOS, + Parsha.KEDOSHIM, + Parsha.EMOR, + Parsha.BEHAR, + Parsha.BECHUKOSAI, + Parsha.BAMIDBAR, + Parsha.NASSO, + Parsha.BEHAALOSCHA, + Parsha.SHLACH, + Parsha.KORACH, + Parsha.CHUKAS, + Parsha.BALAK, + Parsha.PINCHAS, + Parsha.MATOS_MASEI, + Parsha.DEVARIM, + Parsha.VAESCHANAN, + Parsha.EIKEV, + Parsha.REEH, + Parsha.SHOFTIM, + Parsha.KI_SEITZEI, + Parsha.KI_SAVO, + Parsha.NITZAVIM_VAYEILECH, + ], + [ + Parsha.NONE, + Parsha.NONE, + Parsha.HAAZINU, + Parsha.NONE, + Parsha.NONE, + Parsha.BERESHIS, + Parsha.NOACH, + Parsha.LECH_LECHA, + Parsha.VAYERA, + Parsha.CHAYEI_SARA, + Parsha.TOLDOS, + Parsha.VAYETZEI, + Parsha.VAYISHLACH, + Parsha.VAYESHEV, + Parsha.MIKETZ, + Parsha.VAYIGASH, + Parsha.VAYECHI, + Parsha.SHEMOS, + Parsha.VAERA, + Parsha.BO, + Parsha.BESHALACH, + Parsha.YISRO, + Parsha.MISHPATIM, + Parsha.TERUMAH, + Parsha.TETZAVEH, + Parsha.KI_SISA, + Parsha.VAYAKHEL, + Parsha.PEKUDEI, + Parsha.VAYIKRA, + Parsha.TZAV, + Parsha.SHMINI, + Parsha.TAZRIA, + Parsha.METZORA, + Parsha.NONE, + Parsha.ACHREI_MOS, + Parsha.KEDOSHIM, + Parsha.EMOR, + Parsha.BEHAR, + Parsha.BECHUKOSAI, + Parsha.BAMIDBAR, + Parsha.NONE, + Parsha.NASSO, + Parsha.BEHAALOSCHA, + Parsha.SHLACH, + Parsha.KORACH, + Parsha.CHUKAS_BALAK, + Parsha.PINCHAS, + Parsha.MATOS_MASEI, + Parsha.DEVARIM, + Parsha.VAESCHANAN, + Parsha.EIKEV, + Parsha.REEH, + Parsha.SHOFTIM, + Parsha.KI_SEITZEI, + Parsha.KI_SAVO, + Parsha.NITZAVIM_VAYEILECH, + ], + [ + Parsha.NONE, + Parsha.VAYEILECH, + Parsha.HAAZINU, + Parsha.NONE, + Parsha.BERESHIS, + Parsha.NOACH, + Parsha.LECH_LECHA, + Parsha.VAYERA, + Parsha.CHAYEI_SARA, + Parsha.TOLDOS, + Parsha.VAYETZEI, + Parsha.VAYISHLACH, + Parsha.VAYESHEV, + Parsha.MIKETZ, + Parsha.VAYIGASH, + Parsha.VAYECHI, + Parsha.SHEMOS, + Parsha.VAERA, + Parsha.BO, + Parsha.BESHALACH, + Parsha.YISRO, + Parsha.MISHPATIM, + Parsha.TERUMAH, + Parsha.TETZAVEH, + Parsha.KI_SISA, + Parsha.VAYAKHEL_PEKUDEI, + Parsha.VAYIKRA, + Parsha.TZAV, + Parsha.NONE, + Parsha.SHMINI, + Parsha.TAZRIA_METZORA, + Parsha.ACHREI_MOS_KEDOSHIM, + Parsha.EMOR, + Parsha.BEHAR_BECHUKOSAI, + Parsha.BAMIDBAR, + Parsha.NASSO, + Parsha.BEHAALOSCHA, + Parsha.SHLACH, + Parsha.KORACH, + Parsha.CHUKAS, + Parsha.BALAK, + Parsha.PINCHAS, + Parsha.MATOS_MASEI, + Parsha.DEVARIM, + Parsha.VAESCHANAN, + Parsha.EIKEV, + Parsha.REEH, + Parsha.SHOFTIM, + Parsha.KI_SEITZEI, + Parsha.KI_SAVO, + Parsha.NITZAVIM_VAYEILECH, + ], + [ + Parsha.NONE, + Parsha.HAAZINU, + Parsha.NONE, + Parsha.NONE, + Parsha.BERESHIS, + Parsha.NOACH, + Parsha.LECH_LECHA, + Parsha.VAYERA, + Parsha.CHAYEI_SARA, + Parsha.TOLDOS, + Parsha.VAYETZEI, + Parsha.VAYISHLACH, + Parsha.VAYESHEV, + Parsha.MIKETZ, + Parsha.VAYIGASH, + Parsha.VAYECHI, + Parsha.SHEMOS, + Parsha.VAERA, + Parsha.BO, + Parsha.BESHALACH, + Parsha.YISRO, + Parsha.MISHPATIM, + Parsha.TERUMAH, + Parsha.TETZAVEH, + Parsha.KI_SISA, + Parsha.VAYAKHEL_PEKUDEI, + Parsha.VAYIKRA, + Parsha.TZAV, + Parsha.NONE, + Parsha.SHMINI, + Parsha.TAZRIA_METZORA, + Parsha.ACHREI_MOS_KEDOSHIM, + Parsha.EMOR, + Parsha.BEHAR, + Parsha.BECHUKOSAI, + Parsha.BAMIDBAR, + Parsha.NASSO, + Parsha.BEHAALOSCHA, + Parsha.SHLACH, + Parsha.KORACH, + Parsha.CHUKAS, + Parsha.BALAK, + Parsha.PINCHAS, + Parsha.MATOS_MASEI, + Parsha.DEVARIM, + Parsha.VAESCHANAN, + Parsha.EIKEV, + Parsha.REEH, + Parsha.SHOFTIM, + Parsha.KI_SEITZEI, + Parsha.KI_SAVO, + Parsha.NITZAVIM, + ], + [ + Parsha.NONE, + Parsha.VAYEILECH, + Parsha.HAAZINU, + Parsha.NONE, + Parsha.BERESHIS, + Parsha.NOACH, + Parsha.LECH_LECHA, + Parsha.VAYERA, + Parsha.CHAYEI_SARA, + Parsha.TOLDOS, + Parsha.VAYETZEI, + Parsha.VAYISHLACH, + Parsha.VAYESHEV, + Parsha.MIKETZ, + Parsha.VAYIGASH, + Parsha.VAYECHI, + Parsha.SHEMOS, + Parsha.VAERA, + Parsha.BO, + Parsha.BESHALACH, + Parsha.YISRO, + Parsha.MISHPATIM, + Parsha.TERUMAH, + Parsha.TETZAVEH, + Parsha.KI_SISA, + Parsha.VAYAKHEL, + Parsha.PEKUDEI, + Parsha.VAYIKRA, + Parsha.TZAV, + Parsha.SHMINI, + Parsha.TAZRIA, + Parsha.METZORA, + Parsha.NONE, + Parsha.ACHREI_MOS, + Parsha.KEDOSHIM, + Parsha.EMOR, + Parsha.BEHAR, + Parsha.BECHUKOSAI, + Parsha.BAMIDBAR, + Parsha.NASSO, + Parsha.BEHAALOSCHA, + Parsha.SHLACH, + Parsha.KORACH, + Parsha.CHUKAS, + Parsha.BALAK, + Parsha.PINCHAS, + Parsha.MATOS_MASEI, + Parsha.DEVARIM, + Parsha.VAESCHANAN, + Parsha.EIKEV, + Parsha.REEH, + Parsha.SHOFTIM, + Parsha.KI_SEITZEI, + Parsha.KI_SAVO, + Parsha.NITZAVIM_VAYEILECH, + ], + [ + Parsha.NONE, + Parsha.VAYEILECH, + Parsha.HAAZINU, + Parsha.NONE, + Parsha.BERESHIS, + Parsha.NOACH, + Parsha.LECH_LECHA, + Parsha.VAYERA, + Parsha.CHAYEI_SARA, + Parsha.TOLDOS, + Parsha.VAYETZEI, + Parsha.VAYISHLACH, + Parsha.VAYESHEV, + Parsha.MIKETZ, + Parsha.VAYIGASH, + Parsha.VAYECHI, + Parsha.SHEMOS, + Parsha.VAERA, + Parsha.BO, + Parsha.BESHALACH, + Parsha.YISRO, + Parsha.MISHPATIM, + Parsha.TERUMAH, + Parsha.TETZAVEH, + Parsha.KI_SISA, + Parsha.VAYAKHEL, + Parsha.PEKUDEI, + Parsha.VAYIKRA, + Parsha.TZAV, + Parsha.SHMINI, + Parsha.TAZRIA, + Parsha.METZORA, + Parsha.NONE, + Parsha.ACHREI_MOS, + Parsha.KEDOSHIM, + Parsha.EMOR, + Parsha.BEHAR, + Parsha.BECHUKOSAI, + Parsha.BAMIDBAR, + Parsha.NASSO, + Parsha.BEHAALOSCHA, + Parsha.SHLACH, + Parsha.KORACH, + Parsha.CHUKAS, + Parsha.BALAK, + Parsha.PINCHAS, + Parsha.MATOS, + Parsha.MASEI, + Parsha.DEVARIM, + Parsha.VAESCHANAN, + Parsha.EIKEV, + Parsha.REEH, + Parsha.SHOFTIM, + Parsha.KI_SEITZEI, + Parsha.KI_SAVO, + Parsha.NITZAVIM, + ], + [ + Parsha.NONE, + Parsha.NONE, + Parsha.HAAZINU, + Parsha.NONE, + Parsha.NONE, + Parsha.BERESHIS, + Parsha.NOACH, + Parsha.LECH_LECHA, + Parsha.VAYERA, + Parsha.CHAYEI_SARA, + Parsha.TOLDOS, + Parsha.VAYETZEI, + Parsha.VAYISHLACH, + Parsha.VAYESHEV, + Parsha.MIKETZ, + Parsha.VAYIGASH, + Parsha.VAYECHI, + Parsha.SHEMOS, + Parsha.VAERA, + Parsha.BO, + Parsha.BESHALACH, + Parsha.YISRO, + Parsha.MISHPATIM, + Parsha.TERUMAH, + Parsha.TETZAVEH, + Parsha.KI_SISA, + Parsha.VAYAKHEL, + Parsha.PEKUDEI, + Parsha.VAYIKRA, + Parsha.TZAV, + Parsha.SHMINI, + Parsha.TAZRIA, + Parsha.METZORA, + Parsha.NONE, + Parsha.ACHREI_MOS, + Parsha.KEDOSHIM, + Parsha.EMOR, + Parsha.BEHAR, + Parsha.BECHUKOSAI, + Parsha.BAMIDBAR, + Parsha.NASSO, + Parsha.BEHAALOSCHA, + Parsha.SHLACH, + Parsha.KORACH, + Parsha.CHUKAS, + Parsha.BALAK, + Parsha.PINCHAS, + Parsha.MATOS_MASEI, + Parsha.DEVARIM, + Parsha.VAESCHANAN, + Parsha.EIKEV, + Parsha.REEH, + Parsha.SHOFTIM, + Parsha.KI_SEITZEI, + Parsha.KI_SAVO, + Parsha.NITZAVIM_VAYEILECH, + ], ]; /** @@ -317,11 +1298,22 @@ export class JewishCalendar extends JewishDate { * @param inIsrael * whether in Israel. This affects Yom Tov calculations */ - constructor(jewishYear: number, jewishMonth: number, jewishDayOfMonth: number, inIsrael?: boolean) - constructor(date: Date) - constructor(date: DateTime) - constructor() - constructor(jewishYearOrDateTimeOrDate?: number | Date | DateTime, jewishMonth?: number, jewishDayOfMonth?: number, inIsrael?: boolean) { + constructor( + jewishYear: number, + jewishMonth: number, + jewishDayOfMonth: number, + inIsrael?: boolean + ); + + constructor(date: Date); + constructor(date: DateTime); + constructor(); + constructor( + jewishYearOrDateTimeOrDate?: number | Date | DateTime, + jewishMonth?: number, + jewishDayOfMonth?: number, + inIsrael?: boolean, + ) { // @ts-ignore super(jewishYearOrDateTimeOrDate, jewishMonth, jewishDayOfMonth); if (inIsrael) this.setInIsrael(inIsrael); @@ -355,7 +1347,9 @@ export class JewishCalendar extends JewishDate { */ public isBirkasHachamah(): boolean { // elapsed days since molad ToHu - let elapsedDays: number = JewishCalendar.getJewishCalendarElapsedDays(this.getJewishYear()); + let elapsedDays: number = JewishCalendar.getJewishCalendarElapsedDays( + this.getJewishYear(), + ); // elapsed days to the current calendar date elapsedDays += this.getDaysSinceStartOfJewishYear(); @@ -377,7 +1371,8 @@ export class JewishCalendar extends JewishDate { */ private getParshaYearType(): number { // plus one to the original Rosh Hashana of year 1 to get a week starting on Sunday - let roshHashanaDayOfWeek: number = (JewishCalendar.getJewishCalendarElapsedDays(this.getJewishYear()) + 1) % 7; + let roshHashanaDayOfWeek: number = (JewishCalendar.getJewishCalendarElapsedDays(this.getJewishYear()) + 1) + % 7; if (roshHashanaDayOfWeek === 0) { // convert 0 to 7 for Shabbos for readability roshHashanaDayOfWeek = SATURDAY; @@ -526,14 +1521,21 @@ export class JewishCalendar extends JewishDate { */ public getSpecialShabbos(): Parsha { if (this.getDayOfWeek() === SATURDAY) { - if (((this.getJewishMonth() === JewishCalendar.SHEVAT && !this.isJewishLeapYear()) - || (this.getJewishMonth() === JewishCalendar.ADAR && this.isJewishLeapYear())) - && [25, 27, 29].includes(this.getJewishDayOfMonth())) { + if ( + ((this.getJewishMonth() === JewishCalendar.SHEVAT + && !this.isJewishLeapYear()) + || (this.getJewishMonth() === JewishCalendar.ADAR + && this.isJewishLeapYear())) + && [25, 27, 29].includes(this.getJewishDayOfMonth()) + ) { return Parsha.SHKALIM; } - if ((this.getJewishMonth() === JewishCalendar.ADAR && !this.isJewishLeapYear()) - || this.getJewishMonth() === JewishCalendar.ADAR_II) { + if ( + (this.getJewishMonth() === JewishCalendar.ADAR + && !this.isJewishLeapYear()) + || this.getJewishMonth() === JewishCalendar.ADAR_II + ) { if (this.getJewishDayOfMonth() === 1) { return Parsha.SHKALIM; } @@ -551,7 +1553,10 @@ export class JewishCalendar extends JewishDate { } } - if (this.getJewishMonth() === JewishCalendar.NISSAN && this.getJewishDayOfMonth() === 1) { + if ( + this.getJewishMonth() === JewishCalendar.NISSAN + && this.getJewishDayOfMonth() === 1 + ) { return Parsha.HACHODESH; } } @@ -578,29 +1583,43 @@ export class JewishCalendar extends JewishDate { case JewishCalendar.NISSAN: if (day === 14) { return JewishCalendar.EREV_PESACH; - } else if (day === 15 || day === 21 || (!this.inIsrael && (day === 16 || day === 22))) { + } else if ( + day === 15 + || day === 21 + || (!this.inIsrael && (day === 16 || day === 22)) + ) { return JewishCalendar.PESACH; } else if ((day >= 17 && day <= 20) || (day === 16 && this.inIsrael)) { return JewishCalendar.CHOL_HAMOED_PESACH; } - if (this.isUseModernHolidays() - && ((day === 26 && dayOfWeek === 5) || (day === 28 && dayOfWeek === 2) - || (day === 27 && dayOfWeek !== 1 && dayOfWeek !== 6))) { + if ( + this.isUseModernHolidays() + && ((day === 26 && dayOfWeek === 5) + || (day === 28 && dayOfWeek === 2) + || (day === 27 && dayOfWeek !== 1 && dayOfWeek !== 6)) + ) { return JewishCalendar.YOM_HASHOAH; } break; case JewishCalendar.IYAR: - if (this.isUseModernHolidays() - && ((day === 4 && dayOfWeek === 3) || ((day === 3 || day === 2) && dayOfWeek === 4) - || (day === 5 && dayOfWeek === 2))) { + if ( + this.isUseModernHolidays() + && ((day === 4 && dayOfWeek === 3) + || ((day === 3 || day === 2) && dayOfWeek === 4) + || (day === 5 && dayOfWeek === 2)) + ) { return JewishCalendar.YOM_HAZIKARON; } // if 5 Iyar falls on Wed Yom Haatzmaut is that day. If it fal1s on Friday or Shabbos it is moved back to // Thursday. If it falls on Monday it is moved to Tuesday - if (this.isUseModernHolidays() && ((day === 5 && dayOfWeek === 4) - || ((day === 4 || day === 3) && dayOfWeek === 5) || (day === 6 && dayOfWeek === 3))) { + if ( + this.isUseModernHolidays() + && ((day === 5 && dayOfWeek === 4) + || ((day === 4 || day === 3) && dayOfWeek === 5) + || (day === 6 && dayOfWeek === 3)) + ) { return JewishCalendar.YOM_HAATZMAUT; } @@ -625,7 +1644,10 @@ export class JewishCalendar extends JewishDate { break; case JewishCalendar.TAMMUZ: // push off the fast day if it falls on Shabbos - if ((day === 17 && dayOfWeek !== 7) || (day === 18 && dayOfWeek === 1)) { + if ( + (day === 17 && dayOfWeek !== 7) + || (day === 18 && dayOfWeek === 1) + ) { return JewishCalendar.SEVENTEEN_OF_TAMMUZ; } break; @@ -645,7 +1667,10 @@ export class JewishCalendar extends JewishDate { case JewishCalendar.TISHREI: if (day === 1 || day === 2) { return JewishCalendar.ROSH_HASHANA; - } else if ((day === 3 && dayOfWeek !== 7) || (day === 4 && dayOfWeek === 1)) { + } else if ( + (day === 3 && dayOfWeek !== 7) + || (day === 4 && dayOfWeek === 1) + ) { // push off Tzom Gedalia if it falls on Shabbos return JewishCalendar.FAST_OF_GEDALYAH; } else if (day === 9) { @@ -699,7 +1724,10 @@ export class JewishCalendar extends JewishDate { case JewishCalendar.ADAR: if (!this.isJewishLeapYear()) { // if 13th Adar falls on Friday or Shabbos, push back to Thursday - if (((day === 11 || day === 12) && dayOfWeek === 5) || (day === 13 && !(dayOfWeek === 6 || dayOfWeek === 7))) { + if ( + ((day === 11 || day === 12) && dayOfWeek === 5) + || (day === 13 && !(dayOfWeek === 6 || dayOfWeek === 7)) + ) { return JewishCalendar.FAST_OF_ESTHER; } @@ -721,7 +1749,10 @@ export class JewishCalendar extends JewishDate { break; case JewishCalendar.ADAR_II: // if 13th Adar falls on Friday or Shabbos, push back to Thursday - if (((day === 11 || day === 12) && dayOfWeek === 5) || (day === 13 && !(dayOfWeek === 6 || dayOfWeek === 7))) { + if ( + ((day === 11 || day === 12) && dayOfWeek === 5) + || (day === 13 && !(dayOfWeek === 6 || dayOfWeek === 7)) + ) { return JewishCalendar.FAST_OF_ESTHER; } @@ -754,9 +1785,13 @@ export class JewishCalendar extends JewishDate { public isYomTov(): boolean { const holidayIndex: number = this.getYomTovIndex(); - if ((this.isErevYomTov() && (holidayIndex !== JewishCalendar.HOSHANA_RABBA - && (holidayIndex === JewishCalendar.CHOL_HAMOED_PESACH && this.getJewishDayOfMonth() !== 20))) - || (this.isTaanis() && holidayIndex !== JewishCalendar.YOM_KIPPUR)) { + if ( + (this.isErevYomTov() + && holidayIndex !== JewishCalendar.HOSHANA_RABBA + && holidayIndex === JewishCalendar.CHOL_HAMOED_PESACH + && this.getJewishDayOfMonth() !== 20) + || (this.isTaanis() && holidayIndex !== JewishCalendar.YOM_KIPPUR) + ) { return false; } @@ -810,7 +1845,11 @@ export class JewishCalendar extends JewishDate { * @return will return if the next day is Shabbos or Yom Tov */ public isTomorrowShabbosOrYomTov(): boolean { - return this.getDayOfWeek() === FRIDAY || this.isErevYomTov() || this.isErevYomTovSheni(); + return ( + this.getDayOfWeek() === FRIDAY + || this.isErevYomTov() + || this.isErevYomTovSheni() + ); } /** @@ -820,11 +1859,17 @@ export class JewishCalendar extends JewishDate { * @return if the day is the second day of Yom Tov. */ public isErevYomTovSheni(): boolean { - return (this.getJewishMonth() === JewishCalendar.TISHREI && (this.getJewishDayOfMonth() === 1)) + return ( + (this.getJewishMonth() === JewishCalendar.TISHREI + && this.getJewishDayOfMonth() === 1) || (!this.getInIsrael() - && ((this.getJewishMonth() === JewishCalendar.NISSAN && [15, 21].includes(this.getJewishDayOfMonth())) - || (this.getJewishMonth() === JewishCalendar.TISHREI && [15, 22].includes(this.getJewishDayOfMonth())) - || (this.getJewishMonth() === JewishCalendar.SIVAN && this.getJewishDayOfMonth() === 6))); + && ((this.getJewishMonth() === JewishCalendar.NISSAN + && [15, 21].includes(this.getJewishDayOfMonth())) + || (this.getJewishMonth() === JewishCalendar.TISHREI + && [15, 22].includes(this.getJewishDayOfMonth())) + || (this.getJewishMonth() === JewishCalendar.SIVAN + && this.getJewishDayOfMonth() === 6))) + ); } /** @@ -833,7 +1878,10 @@ export class JewishCalendar extends JewishDate { * @return if the current day is Aseret Yemei Teshuvah */ public isAseresYemeiTeshuva(): boolean { - return this.getJewishMonth() === JewishCalendar.TISHREI && this.getJewishDayOfMonth() <= 10; + return ( + this.getJewishMonth() === JewishCalendar.TISHREI + && this.getJewishDayOfMonth() <= 10 + ); } /** @@ -890,8 +1938,11 @@ export class JewishCalendar extends JewishDate { JewishCalendar.HOSHANA_RABBA, ]; const holidayIndex: number = this.getYomTovIndex(); - return erevYomTov.includes(holidayIndex) - || (holidayIndex === JewishCalendar.CHOL_HAMOED_PESACH && this.getJewishDayOfMonth() === 20); + return ( + erevYomTov.includes(holidayIndex) + || (holidayIndex === JewishCalendar.CHOL_HAMOED_PESACH + && this.getJewishDayOfMonth() === 20) + ); } /** @@ -902,7 +1953,10 @@ export class JewishCalendar extends JewishDate { */ public isErevRoshChodesh(): boolean { // Erev Rosh Hashana is not Erev Rosh Chodesh. - return (this.getJewishDayOfMonth() === 29 && this.getJewishMonth() !== JewishCalendar.ELUL); + return ( + this.getJewishDayOfMonth() === 29 + && this.getJewishMonth() !== JewishCalendar.ELUL + ); } /** @@ -934,8 +1988,11 @@ export class JewishCalendar extends JewishDate { const day: number = this.getJewishDayOfMonth(); const dayOfWeek: number = this.getDayOfWeek(); // on 14 Nisan unless that is Shabbos where the fast is moved back to Thursday - return this.getJewishMonth() === JewishCalendar.NISSAN && ((day === 14 && dayOfWeek !== Calendar.SATURDAY) - || (day === 12 && dayOfWeek === Calendar.THURSDAY)); + return ( + this.getJewishMonth() === JewishCalendar.NISSAN + && ((day === 14 && dayOfWeek !== Calendar.SATURDAY) + || (day === 12 && dayOfWeek === Calendar.THURSDAY)) + ); } /** @@ -973,7 +2030,11 @@ export class JewishCalendar extends JewishDate { */ public isRoshChodesh(): boolean { // Rosh Hashana is not rosh chodesh. Elul never has 30 days - return (this.getJewishDayOfMonth() === 1 && this.getJewishMonth() !== JewishCalendar.TISHREI) || this.getJewishDayOfMonth() === 30; + return ( + (this.getJewishDayOfMonth() === 1 + && this.getJewishMonth() !== JewishCalendar.TISHREI) + || this.getJewishDayOfMonth() === 30 + ); } /** @@ -982,7 +2043,10 @@ export class JewishCalendar extends JewishDate { * @return true if it is Shabbos and sunday is Rosh Chodesh. */ public isMacharChodesh(): boolean { - return (this.getDayOfWeek() === SATURDAY && (this.getJewishDayOfMonth() === 30 || this.getJewishDayOfMonth() === 29)); + return ( + this.getDayOfWeek() === SATURDAY + && (this.getJewishDayOfMonth() === 30 || this.getJewishDayOfMonth() === 29) + ); } /** @@ -991,10 +2055,12 @@ export class JewishCalendar extends JewishDate { * @return true if it is Shabbos Mevorchim. */ public isShabbosMevorchim(): boolean { - return this.getDayOfWeek() === SATURDAY + return ( + this.getDayOfWeek() === SATURDAY && this.getJewishDayOfMonth() >= 23 && this.getJewishDayOfMonth() <= 29 - && this.getJewishMonth() !== JewishCalendar.ELUL; + && this.getJewishMonth() !== JewishCalendar.ELUL + ); } /** @@ -1040,11 +2106,18 @@ export class JewishCalendar extends JewishDate { // being incorrectly off by an hour in the summer due to DST. Proper adjustment for the actual time in DST will be done by the date // formatter class used to display the Date. const yerushalayimStandardTZ: string = 'Etc/GMT+2'; - const geo: GeoLocation = new GeoLocation(locationName, latitude, longitude, yerushalayimStandardTZ); + const geo: GeoLocation = new GeoLocation( + locationName, + latitude, + longitude, + yerushalayimStandardTZ, + ); const moladSeconds: number = (molad.getMoladChalakim() * 10) / 3; // subtract local time difference of 20.94 minutes (20 minutes and 56.496 seconds) to get to Standard time - const milliseconds: number = Math.trunc(1000 * (moladSeconds - Math.trunc(moladSeconds))); + const milliseconds: number = Math.trunc( + 1000 * (moladSeconds - Math.trunc(moladSeconds)), + ); return DateTime.fromObject({ year: molad.getGregorianYear(), @@ -1055,8 +2128,7 @@ export class JewishCalendar extends JewishDate { second: Math.trunc(moladSeconds), millisecond: milliseconds, zone: geo.getTimeZone(), - }) - .minus({ milliseconds: Math.trunc(geo.getLocalMeanTimeOffset()) }); + }).minus({ milliseconds: Math.trunc(geo.getLocalMeanTimeOffset()) }); } /** @@ -1152,7 +2224,9 @@ export class JewishCalendar extends JewishDate { // eslint-disable-next-line class-methods-use-this public getDafYomiBavli(): Daf { // return YomiCalculator.getDafYomiBavli(this); - throw new UnsupportedError('This method is not supported, due to a circular dependency. Use `YomiCalculator.getDafYomiBavli(jewishCalendar)` instead'); + throw new UnsupportedError( + 'This method is not supported, due to a circular dependency. Use `YomiCalculator.getDafYomiBavli(jewishCalendar)` instead', + ); } /** @@ -1166,7 +2240,9 @@ export class JewishCalendar extends JewishDate { // eslint-disable-next-line class-methods-use-this public getDafYomiYerushalmi(): Daf { // return YerushalmiYomiCalculator.getDafYomiYerushalmi(this); - throw new UnsupportedError('This method is not supported, due to a circular dependency. Use `YerushalmiYomiCalculator.getDafYomiYerushalmi(jewishCalendar)` instead'); + throw new UnsupportedError( + 'This method is not supported, due to a circular dependency. Use `YerushalmiYomiCalculator.getDafYomiYerushalmi(jewishCalendar)` instead', + ); } /** @@ -1174,6 +2250,63 @@ export class JewishCalendar extends JewishDate { * @see Object#equals(Object) */ public equals(jewishCalendar: JewishCalendar): boolean { - return this.getAbsDate() === jewishCalendar.getAbsDate() && this.getInIsrael() === jewishCalendar.getInIsrael(); + return ( + this.getAbsDate() === jewishCalendar.getAbsDate() + && this.getInIsrael() === jewishCalendar.getInIsrael() + ); + } + + /** + * A method that creates a deep copy of the object. + * @see Object#clone() + */ + + public clone(): JewishCalendar { + const newJewishCalendar = JewishCalendar.initDate( + getJewishYear(), + getJewishMonth(), + getJewishDayOfMonth(), + ); + newJewishCalendar.inIsrael = this.inIsrael; + return newJewishCalendar; + } + + /** + * Returns true if the current day is Isru Chag. The method returns true for the day following Pesach + * Shavuos and Succos. It utilizes {@see #getInIsrael()} to return the proper date. + * + * @return true if the current day is Isru Chag. The method returns true for the day following Pesach + * Shavuos and Succos. It utilizes {@see #getInIsrael()} to return the proper date. + */ + public isIsruChag(): boolean { + const holidayIndex = this.getYomTovIndex(); + return holidayIndex == JewishCalendar.ISRU_CHAG; + } + + /// Returns the elapsed days since Tekufas Tishrei. This uses Tekufas Shmuel (identical to the Julian Year with a solar year length of 365.25 days. + /// The notation used below is D = days, H = hours and C = chalakim. Molad BaHaRad was 2D,5H,204C or 5H,204C from the start of Rosh Hashana year 1. For molad + /// Nissan add 177D, 4H and 438C (6 * 29D, 12H and 793C), or 177D,9H,642C after Rosh Hashana year 1. + /// Tekufas Nissan was 7D, 9H and 642C before molad Nissan according to the Rambam, or 170D, 0H and + /// 0C after Rosh Hashana year 1. Tekufas Tishrei was 182D and 3H (365.25 / 2) before tekufas + /// Nissan, or 12D and 15H before Rosh Hashana of year 1. Outside of Israel we start reciting Tal + /// Umatar in Birkas Hashanim from 60 days after tekufas Tishrei. The 60 days include the day of + /// the tekufah and the day we start reciting Tal Umatar. 60 days from the tekufah == 47D and 9H + /// from Rosh Hashana year 1. + /// + /// @return the number of elapsed days since tekufas Tishrei + + public getTekufasTishreiElapsedDays(): number { + // days since Rosh Hashana year 1 + // add 1/2 day as the first tekufas tishrei was 9 hours into the day + // this allows all 4 years of the secular leap year cycle to share 47 days + // make from 47D,9H to 47D for simplicity + const days = JewishDate.getJewishCalendarElapsedDays(this.getJewishYear()) + + (JewishCaLendar.getDaysSinceStartOfJewishYear() - 1) + + 0.5; + // days of completed solar years + const solar = (this.getJewishYear() - 1) * 365.25; + return Math.floor(days - solar); } } diff --git a/src/hebrewcalendar/JewishDate.ts b/src/hebrewcalendar/JewishDate.ts index d349e87..e8a8df3 100644 --- a/src/hebrewcalendar/JewishDate.ts +++ b/src/hebrewcalendar/JewishDate.ts @@ -123,6 +123,20 @@ export class JewishDate { */ public static readonly ADAR_II: number = 13; + static readonly sunday = 1; + + static readonly monday = 2; + + static readonly tuesday = 3; + + static readonly wednesday = 4; + + static readonly thursday = 5; + + static readonly friday = 6; + + static readonly saturday = 7; + /** * the Jewish epoch using the RD (Rata Die/Fixed Date or Reingold Dershowitz) day used in Calendrical Calculations. * Day 1 is January 1, 0001 Gregorian diff --git a/src/hebrewcalendar/TefilaRules.ts b/src/hebrewcalendar/TefilaRules.ts new file mode 100644 index 0000000..21d799a --- /dev/null +++ b/src/hebrewcalendar/TefilaRules.ts @@ -0,0 +1,563 @@ +/// Tefila Rules is a utility class that covers the various halachos and minhagim regarding +/// changes to daily tefila / prayers, +/// based on the Jewish calendar. This is mostly useful for use in +/// developing siddur type applications, +/// but it is also valuable for shul calendars that set +/// tefila times based on if tachanun is +/// recited that day. There are many settings in this class to cover the vast majority of minhagim, +/// but +/// there are likely some not covered here. The source for many of the chasidishe minhagim can be found +/// in the Minhag Yisrael Torah on Orach +/// Chaim 131. +/// Dates used in specific communities such as specific yahrzeits or a holidays like Purim Mezhbizh +/// (Medzhybizh) celebrated on 11 {@link JewishDate#TEVES Teves} or Purim Saragossa celebrated on +/// the (17th or) 18th of {@link JewishDate#SHEVAT Shevat} are not (and likely will not be) supported by +/// this class. +///

Sample code: +///

+/// TefilaRules tr = new TefilaRules();
+/// JewishCalendar jewishCalendar = new JewishCalendar();
+/// HebrewDateFormatter hdf = new HebrewDateFormatter();
+/// jewishCalendar.setJewishDate(5783,
+/// JewishDate.TISHREI,
+/// 1); // Rosh Hashana
+/// System.out.println(hdf.format(jewishCalendar) + ": " + tr.isTachanunRecitedShacharis(jd));
+/// jewishCalendar.setJewishDate(5783,
+/// JewishDate.ADAR,
+/// 17);
+/// System.out.println(hdf.format(jewishCalendar) + ": " + tr.isTachanunRecitedShacharis(jewishCalendar));
+/// tr.setTachanunRecitedWeekOfPurim(false);
+/// System.out.println(hdf.format(jewishCalendar) + ": " + tr.isTachanunRecitedShacharis(jewishCalendar));
+/// +/// ### Authors +/// - © Y. Paritcher 2019 - 2021 +/// - © Eliyahu Hershfeld 2019 - 2022 +/// +/// +/// TODO The following items may be added at a future date. +/// - *Lamnatzaiach* +/// - *Mizmor Lesoda* +/// - *Behab* +/// - *Selichos* + +import { Calendar } from '../kosher-zmanim'; +import { JewishCalendar } from './JewishCalendar'; +import { JewishDate } from './JewishDate'; + +/// - ... +export class TefilaRules { + /// Whether or not tachanun recited at the end Of {@link JewishDate#TISHREI Tishrei}. + /// + /// The Magen Avraham 669:1 and the Pri Chadash 131:7 state that some places to not recite + /// tachanun during this period. The Sh"UT Chasam Sofer on Choshen Mishpat 77 writes + /// that this is the minhag in Ashkenaz. The Shaarei Teshuva 131:19 quotes the + /// Sheyarie Kneses Hagdola who also states that it should not be recited. The Aderes wanted + /// to institute saying tachanun during this period, but was dissuaded from this by Rav + /// Shmuel Salant who did not want to change the minhag in Yerushalayim. The Aruch + /// Hashulchan is of the opinion that that this minhag is incorrect, and it should be + /// recited, and The Chazon Ish also recited tachanun during this period. See the Dirshu + /// edition of the Mishna Berurah for details. + private tachanunRecitedEndOfTishrei: boolean = true; + + /** + * Is tachanun recited during the week after Shavuos. This is the opinion of the Pri Megadim + * quoted by the Mishna Berurah. This is since karbanos of Shavuos have tashlumim for + * 7 days, it is still considered like a Yom Tov. The Chazon Ish quoted in the Orchos Rabainu vol. 1 page 68 + * recited tachanun during this week. + * + * @return If tachanun is set to be recited during the week after Shavuos. + * @see #setTachanunRecitedWeekAfterShavuos(boolean) + */ + private tachanunRecitedWeekAfterShavuos: boolean = false; + + /** + * Is tachanun is recited on the 13th of {@link JewishDate#SIVAN Sivan} (Yom Tov Sheni shel Galuyos of the 7th + * day) outside Israel. This is brought down by the Shaarie Teshuva 131:19 quoting the Sheyarei Kneses Hagedola 131:12that + * tachanun should not be recited on this day. Rav Shlomo Zalman Orbach in Halichos Shlomo on + * Shavuos 12:16:25 is of the opinion that even in chutz laaretz it should be recited since the yemei + * Tashlumin are counted based on Israel since that is where the karbanos are brought. Both + * {@link #isTachanunRecitedShacharis(JewishCalendar)} and {@link #isTachanunRecitedMincha(JewishCalendar)} + * only return false if the location is not set to {@link JewishCalendar#getInIsrael() Israel} and both + * {@link #tachanunRecitedWeekAfterShavuos} and {@link #setTachanunRecited13SivanOutOfIsrael} are set to false. + * + * @return If tachanun is set to be recited on the 13th of {@link JewishDate#SIVAN Sivan} out of Israel. + * @see #setTachanunRecited13SivanOutOfIsrael(isTachanunRecitedThirteenSivanOutOfIsrael) + * @see #isTachanunRecitedWeekAfterShavuos() + */ + private tachanunRecited13SivanOutOfIsrael: boolean = true; + + /** + * Is tachanun recited on {@link JewishCalendar#PESACH_SHENI Pesach Sheni}. The Pri Chadash 131:7 states + * that tachanun should not be recited. The Aruch Hashulchan states that this is the minhag of the sephardim. + * the Shaarei Efraim 10:27 also mentions that it is not recited, as does the Siddur Yaavetz (Shaar Hayesod, Chodesh Iyar). + * The Pri Megadim (Mishbetzes Hazahav 131:15) and the Chazon Ish (Erev Pesahc Shchal Beshabos, page 203 in Rav Sheraya + * Devlitzky's comments). + * + * @return If tachanun is recited on {@link JewishCalendar#PESACH_SHENI Pesach Sheni}. + * @see #setTachanunRecitedPesachSheni(boolean) + */ + private tachanunRecitedPesachSheni: boolean = false; + + /** + * Is tachanun recited on 15 {@link JewishDate#IYAR Iyar} (sfaika deyoma of {@link JewishCalendar#PESACH_SHENI + * Pesach Sheni}) out of Israel. If {@link #isTachanunRecitedPesachSheni()} is true this will be + * ignored even if false. + * + * @return if tachanun is recited on 15 {@link JewishDate#IYAR Iyar} (sfaika deyoma of {@link + * JewishCalendar#PESACH_SHENI Pesach Sheni} out of Israel. If {@link #isTachanunRecitedPesachSheni()} + * is true this will be ignored even if false. + * @see #setTachanunRecited15IyarOutOfIsrael(boolean) + * @see #setTachanunRecitedPesachSheni(boolean) + * @see #isTachanunRecitedPesachSheni() + */ + private tachanunRecited15IyarOutOfIsrael: boolean = true; + + /** + * Is tachanun recited on mincha on erev {@link JewishCalendar#LAG_BAOMER Lag Baomer}. + * @return if tachanun is recited in mincha on erev + * {@link JewishCalendar#LAG_BAOMER Lag Baomer}. + * @see #setTachanunRecitedMinchaErevLagBaomer(boolean) + */ + private tachanunRecitedMinchaErevLagBaomer: boolean = false; + + /** + * Is tachanun recited during the Shivas Yemei Hamiluim, from the 23 of {@link + * JewishDate#ADAR Adar} on a non-leap-year or {@link JewishDate#ADAR_II Adar II} on a + * leap year to the end of the month. Some chasidishe communities do not say tachanun + * during this week. See Darkei + * Chaim Veshalom 191. + * @return if tachanun is recited during the Shivas Yemei Hamiluim, from the 23 of {@link + * JewishDate#ADAR Adar} on a non-leap-year or {@link JewishDate#ADAR_II Adar II} + * on a leap year to the end of the month. + * @see #setTachanunRecitedShivasYemeiHamiluim(boolean) + */ + private tachanunRecitedShivasYemeiHamiluim: boolean = true; + + /** + * Is tachanun recited during the sefira week of Hod (14 - 20 {@link JewishDate#IYAR Iyar}, + * or the 29th - 35th of the {@link JewishCalendar#getDayOfOmer() Omer}). Some chasidishe communities + * do not recite tachanun during this week. See Minhag Yisrael Torah 131:Iyar. + * @return If tachanun is set to be recited during the sefira week of Hod (14 - 20 {@link + * JewishDate#IYAR Iyar}, or the 29th - 35th of the {@link JewishCalendar#getDayOfOmer() Omer}). + * @see #setTachanunRecitedWeekOfHod(boolean) + */ + private tachanunRecitedWeekOfHod: boolean = true; + + /** + * Is tachanun recited during the week of Purim, from the 11th through the 17th of {@link + * JewishDate#ADAR Adar} (on a non-leap year, or {@link JewishDate#ADAR_II Adar II} on a leap year). Some + * chasidishe communities do not recite tachanun during this period. See the Minhag Yisrael Torah 131 and Darkei Chaim Veshalom 191who discuss the + * minhag not to recite tachanun. Also see the Mishmeres Shalom (Hadras Shalom) who discusses the + * minhag of not reciting it on the 16th and 17th. + * @return If tachanun is set to be recited during the week of Purim from the 11th through the 17th of {@link + * JewishDate#ADAR Adar} (on a non-leap year, or {@link JewishDate#ADAR_II Adar II} on a leap year). + * @see #setTachanunRecitedWeekOfPurim(boolean) + */ + private tachanunRecitedWeekOfPurim: boolean = true; + + /** + * Is tachanun recited on Fridays. Some chasidishe communities do not recite + * tachanun on Fridays. See Likutei + * Maharich Vol 2 Seder Hanhagos Erev Shabbos. This is also the minhag in Satmar. + * @return if tachanun is recited on Fridays. + * @see #setTachanunRecitedFridays(boolean) + */ + private tachanunRecitedFridays: boolean = true; + + /** + * Is tachanun recited on Sundays. Some chasidishe communities do not recite + * tachanun on Sundays. See Likutei + * Maharich Vol 2 Seder Hanhagos Erev Shabbos. + * @return if tachanun is recited on Sundays. + * @see #setTachanunRecitedSundays(boolean) + */ + private tachanunRecitedSundays: boolean = true; + + /** + * Is tachanun recited in Mincha the entire year. Some chasidishe communities do not recite + * tachanun by Mincha all year round. SeeNemukei Orach Chaim 131:3. + * @return if tachanun is recited in Mincha the entire year. + * @see #setTachanunRecitedMinchaAllYear(boolean) + */ + private tachanunRecitedMinchaAllYear: boolean = true; + + /** + * Returns if tachanun is recited during shacharis on the day in question. See the many + * minhag based settings that are available in this class. + * + * @param jewishCalendar the Jewish calendar day. + * @return if tachanun is recited during shacharis. + * @see #isTachanunRecitedMincha(JewishCalendar) + */ + public isTachanunRecitedShacharis(jewishCalendar: JewishCalendar): boolean { + const holidayIndex = jewishCalendar.getYomTovIndex(); + const day = jewishCalendar.getJewishDayOfMonth(); + const month = jewishCalendar.getJewishMonth(); + + const res = + jewishCalendar.getDayOfWeek() === JewishDate.saturday || + (!this.tachanunRecitedSundays && + jewishCalendar.getDayOfWeek() === JewishDate.sunday) || + (!this.tachanunRecitedFridays && + jewishCalendar.getDayOfWeek() === JewishDate.friday) || + month === JewishDate.NISSAN || + (month === JewishDate.TISHREI && + ((!this.tachanunRecitedEndOfTishrei && day > 8) || + (this.tachanunRecitedEndOfTishrei && day > 8 && day < 22))) || + (month === JewishDate.SIVAN && + ((this.tachanunRecitedWeekAfterShavuos && day < 7) || + (!this.tachanunRecitedWeekAfterShavuos && + day < + (!jewishCalendar.getInIsrael() && + !this.tachanunRecited13SivanOutOfIsrael + ? 14 + : 13)))) || + (jewishCalendar.isYomTov() && + (!jewishCalendar.isTaanis() || + (!this.tachanunRecitedPesachSheni && + holidayIndex === JewishCalendar.PESACH_SHENI))) || // Erev YT is included in isYomTov() + (!jewishCalendar.getInIsrael() && + !this.tachanunRecitedPesachSheni && + !this.tachanunRecited15IyarOutOfIsrael && + jewishCalendar.getJewishMonth() === JewishDate.IYAR && + day === 15) || + holidayIndex === JewishCalendar.TISHA_BEAV || + jewishCalendar.isIsruChag() || + jewishCalendar.isRoshChodesh() || + (!this.tachanunRecitedShivasYemeiHamiluim && + ((!jewishCalendar.isJewishLeapYear() && month === JewishDate.ADAR) || + (jewishCalendar.isJewishLeapYear() && + month === JewishDate.ADAR_II)) && + day > 22) || + (!this.tachanunRecitedWeekOfPurim && + ((!jewishCalendar.isJewishLeapYear() && month === JewishDate.ADAR) || + (jewishCalendar.isJewishLeapYear() && + month === JewishDate.ADAR_II)) && + day > 10 && + day < 18) || + (jewishCalendar.isUseModernHolidays() && + (holidayIndex === JewishCalendar.YOM_HAATZMAUT || + holidayIndex === JewishCalendar.YOM_YERUSHALAYIM)) || + (!this.tachanunRecitedWeekOfHod && + month === JewishDate.IYAR && + day > 13 && + day < 21); + + return !res; + } + + /** + * Returns if tachanun is recited during mincha on the day in question. + * + * @param jewishCalendar the Jewish calendar day. + * @return if tachanun is recited during mincha. + * @see #isTachanunRecitedShacharis(JewishCalendar) + */ + public isTachanunRecitedMincha(jewishCalendar: JewishCalendar): boolean { + const tomorrow = jewishCalendar.clone(); + + tomorrow.forward(Calendar.DATE, 1); + + const res = + !this.tachanunRecitedMinchaAllYear || + jewishCalendar.getDayOfWeek() === JewishDate.friday || + !this.isTachanunRecitedShacharis(jewishCalendar) || + (!this.isTachanunRecitedShacharis(tomorrow) && + !(tomorrow.getYomTovIndex() === JewishCalendar.EREV_ROSH_HASHANA) && + !(tomorrow.getYomTovIndex() === JewishCalendar.EREV_YOM_KIPPUR) && + !(tomorrow.getYomTovIndex() === JewishCalendar.PESACH_SHENI)) || + (!this.tachanunRecitedMinchaErevLagBaomer && + tomorrow.getYomTovIndex() === JewishCalendar.LAG_BAOMER); + + return !res; + } + + /** + * Returns if it is the Jewish day (starting the evening before) to start reciting Vesein Tal Umatar Livracha + * (Sheailas Geshamim). In Israel this is the 7th day of {@link JewishDate#CHESHVAN Marcheshvan}. + * Outside Israel recitation starts on the evening of December 4th (or 5th if it is the year before a civil leap year) + * in the 21st century and shifts a day forward every century not evenly divisible by 400. This method will return true + * if vesein tal umatar on the current Jewish date that starts on the previous night, so Dec 5/6 will be + * returned by this method in the 21st century. vesein tal umatar is not recited on Shabbos and the + * start date will be delayed a day when the start day is on a Shabbos (this can only occur out of Israel). + * + * @param jewishCalendar the Jewish calendar day. + * + * @return true if it is the first Jewish day (starting the prior evening of reciting Vesein Tal Umatar Livracha + * (Sheailas Geshamim). + * + * @see #isVeseinTalUmatarStartingTonight(JewishCalendar) + * @see #isVeseinTalUmatarRecited(JewishCalendar) + */ + public static isVeseinTalUmatarStartDate(jewishCalendar: JewishCalendar) { + if ( + jewishCalendar.getInIsrael() && + jewishCalendar.getJewishMonth() === JewishDate.CHESHVAN && + jewishCalendar.getJewishDayOfMonth() === 7 + ) { + // The 7th Cheshvan can't occur on Shabbos, so always return true for 7 Cheshvan + return true; + } + + // Not recited on Friday night + if (jewishCalendar.getDayOfWeek() === JewishDate.saturday) { + return false; + } + + // When starting on Sunday, it can be the start date or delayed from Shabbos + const tted = jewishCalendar.getTekufasTishreiElapsedDays(); + return ( + (jewishCalendar.getDayOfWeek() === JewishDate.sunday && tted === 48) || + tted === 47 + ); + } + + /** + * Returns if true if tonight is the first night to start reciting Vesein Tal Umatar Livracha ( + * Sheailas Geshamim). In Israel this is the 7th day of {@link JewishDate#CHESHVAN + * Marcheshvan} (so the 6th will return true). Outside Israel recitation starts on the evening + * of December 4th (or 5th if it is the year before a civil leap year) in the 21st century and shifts a + * day forward every century not evenly divisible by 400. Vesein tal umatar is not recited on + * Shabbos and the start date will be delayed a day when the start day is on a Shabbos + * (this can only occur out of Israel). + * + * @param jewishCalendar the Jewish calendar day. + * + * @return true if it is the first Jewish day (starting the prior evening of reciting Vesein Tal Umatar + * Livracha (Sheailas Geshamim). + * + * @see #isVeseinTalUmatarStartDate(JewishCalendar) + * @see #isVeseinTalUmatarRecited(JewishCalendar) + */ + public static isVeseinTalUmatarStartingTonight( + jewishCalendar: JewishCalendar + ) { + if ( + jewishCalendar.getInIsrael() && + jewishCalendar.getJewishMonth() === JewishDate.CHESHVAN && + jewishCalendar.getJewishDayOfMonth() === 6 + ) { + // The 7th Cheshvan can't occur on Shabbos, so always return true for 6 Cheshvan + return true; + } + + // Not recited on Friday night + if (jewishCalendar.getDayOfWeek() === JewishDate.friday) { + return false; + } + + // When starting on motzai Shabbos, it can be the start date or delayed from Friday night + const tted = jewishCalendar.getTekufasTishreiElapsedDays(); + return ( + (jewishCalendar.getDayOfWeek() === JewishDate.sunday && tted === 47) || + tted === 46 + ); + } + + /** + * Returns if Vesein Tal Umatar Livracha (Sheailas Geshamim) is recited. This will return + * true for the entire season, even on Shabbos when it is not recited. + * + * @param jewishCalendar the Jewish calendar day. + * + * @return true if Vesein Tal Umatar Livracha (Sheailas Geshamim) is recited. + * + * @see #isVeseinTalUmatarStartDate(JewishCalendar) + * @see #isVeseinTalUmatarStartingTonight(JewishCalendar) + */ + public static isVeseinTalUmatarRecited(jewishCalendar: JewishCalendar) { + if ( + jewishCalendar.getJewishMonth() === JewishDate.NISSAN && + jewishCalendar.getJewishDayOfMonth() < 15 + ) { + return true; + } + if (jewishCalendar.getJewishMonth() < JewishDate.CHESHVAN) { + return false; + } + if (jewishCalendar.getInIsrael()) { + return ( + jewishCalendar.getJewishMonth() !== JewishDate.CHESHVAN || + jewishCalendar.getJewishDayOfMonth() >= 7 + ); + } + return jewishCalendar.getTekufasTishreiElapsedDays() >= 47; + } + + /** + * Returns if Vesein Beracha is recited. It is recited from 15 {@link JewishDate#NISSAN Nissan} to the + * point that {@link #isVeseinTalUmatarRecited(JewishCalendar) vesein tal umatar is recited}. + * + * @param jewishCalendar the Jewish calendar day. + * @return true if Vesein Beracha is recited. + * @see #isVeseinTalUmatarRecited(JewishCalendar) + */ + public isVeseinBerachaRecited(jewishCalendar: JewishCalendar) { + return !this.isVeseinTalUmatarRecited(jewishCalendar); + } + + /** + * Returns if the date is the start date for reciting Mashiv Haruach Umorid Hageshem. The date is 22 + * {@link JewishDate#TISHREI Tishrei}. + * + * @param jewishCalendar the Jewish calendar day. + * @return true if the date is the start date for reciting Mashiv Haruach Umorid Hageshem. + * @see #isMashivHaruachEndDate(JewishCalendar) + * @see #isMashivHaruachRecited(JewishCalendar) + */ + public static isMashivHaruachStartDate(jewishCalendar: JewishCalendar) { + return ( + jewishCalendar.getJewishMonth() === JewishDate.TISHREI && + jewishCalendar.getJewishDayOfMonth() === 22 + ); + } + + /** + * Returns if the date is the end date for reciting Mashiv Haruach Umorid Hageshem. The date is 15 + * {@link JewishDate#NISSAN Nissan}. + * + * @param jewishCalendar the Jewish calendar day. + * @return true if the date is the end date for reciting Mashiv Haruach Umorid Hageshem. + * @see #isMashivHaruachStartDate(JewishCalendar) + * @see #isMashivHaruachRecited(JewishCalendar) + */ + public static isMashivHaruachEndDate(jewishCalendar: JewishCalendar) { + return ( + jewishCalendar.getJewishMonth() === JewishDate.NISSAN && + jewishCalendar.getJewishDayOfMonth() === 15 + ); + } + + /** + * Returns if Mashiv Haruach Umorid Hageshem is recited. This period starts on 22 {@link + * JewishDate#TISHREI Tishrei} and ends on the 15th day of {@link JewishDate#NISSAN Nissan}. + * + * @param jewishCalendar the Jewish calendar day. + * @return true if Mashiv Haruach Umorid Hageshem is recited. + * @see #isMashivHaruachStartDate(JewishCalendar) + * @see #isMashivHaruachEndDate(JewishCalendar) + */ + public static isMashivHaruachRecited(jewishCalendar: JewishCalendar) { + const startDate = new JewishDate( + jewishCalendar.getJewishYear(), + JewishDate.TISHREI, + 22, + ); + + const endDate = new JewishDate( + jewishCalendar.getJewishYear(), + JewishDate.NISSAN, + 15, + ); + + return ( + jewishCalendar.compareTo(startDate) > 0 && + jewishCalendar.compareTo(endDate) < 0 + ); + } + + /** + * Returns if Morid Hatal (or the lack of reciting Mashiv Haruach following nussach Ashkenaz) is + * recited. This period starts on the 15th day of {@link JewishDate#NISSAN Nissan} and ends on 22 {@link + * JewishDate#TISHREI Tishrei}. + * + * @param jewishCalendar the Jewish calendar day. + * + * @return true if Morid Hatal (or the lack of reciting Mashiv Haruach following nussach Ashkenaz) is recited. + */ + public static isMoridHatalRecited(jewishCalendar: JewishCalendar) { + return ( + !TefilaRules.isMashivHaruachRecited(jewishCalendar) + || TefilaRules.isMashivHaruachStartDate(jewishCalendar) + || TefilaRules.isMashivHaruachEndDate(jewishCalendar) + ); + } + + /** + * Returns if hallel is recited on the day in question. This will return true for both hallel shalem + * and chatzi hallel. See {@link #isHallelShalemRecited(JewishCalendar)} to know if the complete hallel + * is recited. + * + * @param jewishCalendar the Jewish calendar day. + * @return if hallel is recited. + * @see #isHallelShalemRecited(JewishCalendar) + */ + public static isHallelRecited(jewishCalendar: JewishCalendar) { + const day = jewishCalendar.getJewishDayOfMonth(); + const month = jewishCalendar.getJewishMonth(); + const holidayIndex = jewishCalendar.getYomTovIndex(); + const inIsrael = jewishCalendar.getInIsrael(); + + if (jewishCalendar.isRoshChodesh()) { + // RH returns false for RC + return true; + } + if (jewishCalendar.isChanukah()) { + return true; + } + // eslint-disable-next-line default-case + switch (month) { + case JewishDate.NISSAN: + if ( + day >= 15 + && ((inIsrael && day <= 21) || (!inIsrael && day <= 22)) + ) { + return true; + } + break; + case JewishDate.IYAR: // modern holidays + if ( + jewishCalendar.isUseModernHolidays() + && (holidayIndex === JewishCalendar.YOM_HAATZMAUT + || holidayIndex === JewishCalendar.YOM_YERUSHALAYIM) + ) { + return true; + } + break; + case JewishDate.SIVAN: + if (day === 6 || (!inIsrael && day === 7)) { + return true; + } + break; + case JewishDate.TISHREI: + if (day >= 15 && (day <= 22 || (!inIsrael && day <= 23))) { + return true; + } + } + return false; + } + + /** + * Returns if hallel shalem is recited on the day in question. This will always return false if {@link + * #isHallelRecited(JewishCalendar)} returns false. + * + * @param jewishCalendar the Jewish calendar day. + * @return if hallel shalem is recited. + * @see #isHallelRecited(JewishCalendar) + */ + public static isHallelShalemRecited(jewishCalendar: JewishCalendar) { + const day = jewishCalendar.getJewishDayOfMonth(); + const month = jewishCalendar.getJewishMonth(); + const inIsrael = jewishCalendar.getInIsrael(); + + if (TefilaRules.isHallelRecited(jewishCalendar)) { + if ( + (jewishCalendar.isRoshChodesh() && !jewishCalendar.isChanukah()) || + (month === JewishDate.NISSAN + && ((inIsrael && day > 15) || (!inIsrael && day > 16))) + ) { + return false; + } + return true; + } + return false; + } +}