{"id":13708507,"url":"https://github.com/romcal/romcal","last_synced_at":"2026-01-12T05:38:00.678Z","repository":{"id":19018947,"uuid":"22242102","full_name":"romcal/romcal","owner":"romcal","description":"JavaScript library that generates liturgical calendars of the Roman Rite of the Roman Catholic Church.","archived":false,"fork":false,"pushed_at":"2026-01-10T00:23:33.000Z","size":10499,"stargazers_count":119,"open_issues_count":84,"forks_count":63,"subscribers_count":12,"default_branch":"dev","last_synced_at":"2026-01-10T21:54:55.333Z","etag":null,"topics":["calendar","calendar-api","catholic","celebrations","javascript","liturgical-seasons","liturgy","roman-calendar","typescript"],"latest_commit_sha":null,"homepage":"https://romcal.js.org","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"druids/django-pyston","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/romcal.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS.md","dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2014-07-25T02:29:47.000Z","updated_at":"2026-01-10T00:23:36.000Z","dependencies_parsed_at":"2026-01-03T13:04:23.751Z","dependency_job_id":null,"html_url":"https://github.com/romcal/romcal","commit_stats":{"total_commits":1210,"total_committers":27,"mean_commits":44.81481481481482,"dds":0.6743801652892563,"last_synced_commit":"a210a89d9793368a6cb9883154ba968c7fa98961"},"previous_names":["pejulian/romcal"],"tags_count":129,"template":false,"template_full_name":null,"purl":"pkg:github/romcal/romcal","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/romcal%2Fromcal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/romcal%2Fromcal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/romcal%2Fromcal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/romcal%2Fromcal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/romcal","download_url":"https://codeload.github.com/romcal/romcal/tar.gz/refs/heads/dev","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/romcal%2Fromcal/sbom","scorecard":{"id":142576,"data":{"date":"2025-08-04","repo":{"name":"github.com/romcal/romcal","commit":"eba2cc8decc8f0a9ff8640fcbd697eeaac4cbb2f"},"scorecard":{"version":"v5.2.1-28-gc1d103a9","commit":"c1d103a9bb9f635ec7260bf9aa0699466fa4be0e"},"score":5.2,"checks":[{"name":"Maintained","score":10,"reason":"30 commit(s) and 9 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#maintained"}},{"name":"Code-Review","score":5,"reason":"Found 2/4 approved changesets -- score normalized to 5","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#packaging"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#cii-best-practices"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/dev-publishing.yml:1","Warn: no topLevel permission defined: .github/workflows/romcal-ci.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#binary-artifacts"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#license"}},{"name":"Pinned-Dependencies","score":4,"reason":"dependency not pinned by hash detected -- score normalized to 4","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/dev-publishing.yml:46: update your workflow using https://app.stepsecurity.io/secureworkflow/romcal/romcal/dev-publishing.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/dev-publishing.yml:52: update your workflow using https://app.stepsecurity.io/secureworkflow/romcal/romcal/dev-publishing.yml/dev?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/dev-publishing.yml:57: update your workflow using https://app.stepsecurity.io/secureworkflow/romcal/romcal/dev-publishing.yml/dev?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/dev-publishing.yml:69: update your workflow using https://app.stepsecurity.io/secureworkflow/romcal/romcal/dev-publishing.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/dev-publishing.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/romcal/romcal/dev-publishing.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/dev-publishing.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/romcal/romcal/dev-publishing.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/romcal-ci.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/romcal/romcal/romcal-ci.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/romcal-ci.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/romcal/romcal/romcal-ci.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/romcal-ci.yml:51: update your workflow using https://app.stepsecurity.io/secureworkflow/romcal/romcal/romcal-ci.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/romcal-ci.yml:54: update your workflow using https://app.stepsecurity.io/secureworkflow/romcal/romcal/romcal-ci.yml/dev?enable=pin","Warn: npmCommand not pinned by hash: .github/workflows/dev-publishing.yml:85","Warn: npmCommand not pinned by hash: .github/workflows/romcal-ci.yml:61","Info:   0 out of   8 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned","Info:   4 out of   6 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#pinned-dependencies"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#branch-protection"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#fuzzing"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 28 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":6,"reason":"4 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-f5x3-32g6-xq36","Warn: Project is vulnerable to: GHSA-v4rh-8p82-6h5w"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-16T08:31:36.705Z","repository_id":19018947,"created_at":"2025-08-16T08:31:36.705Z","updated_at":"2025-08-16T08:31:36.705Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28335226,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T00:36:25.062Z","status":"online","status_checked_at":"2026-01-12T02:00:08.677Z","response_time":98,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["calendar","calendar-api","catholic","celebrations","javascript","liturgical-seasons","liturgy","roman-calendar","typescript"],"created_at":"2024-08-02T23:00:24.443Z","updated_at":"2026-01-12T05:38:00.673Z","avatar_url":"https://github.com/romcal.png","language":"TypeScript","funding_links":[],"categories":["Datos","Command Line"],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\n  \u003ca href=\"https://github.com/romcal/romcal\"\u003e\n    \u003cimg alt=\"romcal\" src=\"https://user-images.githubusercontent.com/1045997/89793747-854ede00-db26-11ea-8e46-837ab4ca0a96.png\"\u003e\n  \u003c/a\u003e\n\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  Generates liturgical calendars of the Roman Rite of the Catholic Church.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  Supports Node v18+, Modern Browsers (desktop and mobile).\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg alt=\"License\" src=\"https://img.shields.io/github/license/romcal/romcal?color=blue\u0026style=flat-square\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.npmjs.com/package/romcal\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\u003cimg alt=\"Downloads\" src=\"https://img.shields.io/npm/dm/romcal?color=blue\u0026style=flat-square\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://discord.gg/MgWcwE4HZD\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\u003cimg alt=\"Discord\" src=\"https://img.shields.io/discord/1353897152119570655?color=blue\u0026label=Discord\u0026logo=discord\u0026style=flat-square\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://www.npmjs.com/package/romcal/v/latest\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\u003cimg alt=\"latest\" src=\"https://img.shields.io/npm/v/romcal/latest?style=flat-square\u0026logo=npm\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.npmjs.com/package/romcal/v/dev\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\u003cimg alt=\"dev\" src=\"https://img.shields.io/npm/v/romcal/dev?style=flat-square\u0026logo=npm\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://www.codetriage.com/romcal/romcal\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\u003cimg alt=\"Code Triage Helpers\" src=\"https://www.codetriage.com/romcal/romcal/badges/users.svg\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003e [!NOTE]\n\u003e This project is still in beta (using the `dev` npm distribution tag) until it reaches final version 3.0.0.\n\u003e There could be breaking changes between minor versions.\n\u003e Please refer to the [changelog](CHANGELOG.md) for significant updates and breaking changes.\n\n## Documentation\n\n**Quick start** (below on this page)\n\n- [Description](#description)\n- [Getting started](#getting-started)\n- [Basic samples](#basic-samples)\n- [Contribute](#contribute)\n- [Revisions \u0026 Release History](#revisions)\n- [Module Robustness \u0026 Data Integrity](#disclaimer)\n- [Credits](#credits)\n- [License](#license)\n\n**Main usages**\n\n- [General use of romcal ⇗](/docs/general-usage.md)\n- [Output data and JSON schema ⇗](/docs/data-output.md)\n\n**Contribute**\n\n- [Install, Build, Run and Test romcal locally ⇗](/docs/contribute-to-romcal.md)\n- [Localization ⇗](/docs/localization.md)\n- [Calendar definitions and contributions ⇗](/docs/calendar-definitions.md)\n- [Codebase Documentation ⇗](https://romcal.github.io/romcal/)\n\n## Description\n\nRomcal generates liturgical calendars of the Roman Rite of the Roman Catholic Church.\nOutput conforms to the revised liturgical calendar as approved by Paul VI in [Mysterii Paschalis](http://w2.vatican.va/content/paul-vi/en/motu_proprio/documents/hf_p-vi_motu-proprio_19690214_mysterii-paschalis.html) dated 14 February 1969.\nThe rules are defined in the [_General Instruction on the Roman Missal_](https://www.catholicculture.org/culture/library/view.cfm?recnum=337) (GIRM), the [_General Norms for the Liturgical Year and the Calendar_](https://www.catholicculture.org/culture/library/view.cfm?id=10842) (GNLY), and the [General Instructions of the Liturgy of the Hours](https://divineoffice.org/general-instructions/) (GILH).\n\n- :date: **Perpetual calendar:**\u003cbr\u003e romcal allows querying liturgical dates for any year in the standard calendar.\n  Note that dates for years before 1969 will still be returned in a format conforming to the calendar reforms of 1969, even though those years came before this calendar reform.\n\n- :gear: **Configure and refine output:**\u003cbr\u003e output can be configured for the civil calendar year, i.e. the Gregorian year (`Jan 1` to `Dec 31`) or the liturgical year (`First Sunday of Advent` to `Christ the King`).\n  You can filter queries to allow more streamlined date results to be obtained for the year. Additional output options are described below in the usage section.\n\n- :globe_with_meridians: **i18n, localization and calendars:**\u003cbr\u003e romcal aims to have your liturgical calendars and contents in your native language, and support various liturgical calendars (national, diocesan...).\n  You are more than welcome to contribute, add new localization, and improve the quality of this library!\n\n## Getting started\n\n### Installation\n\nRomcal can be added to your project using npm or yarn:\n\n```bash\n# npm\nnpm install romcal@dev\n\n# yarn\nyarn add romcal@dev\n```\n\nThe default export is CommonJS compatible (`cjs`).\n\nIn the `/dist` folder you may find additional builds for es6 modules (`esm`) or to be used globally from the browser (`iife`).\nThe correct entry points are already configured in the package.json so there should be no extra setup to get the best build option.\n\n### Calendars installation\n\nThe romcal library only include the General Roman Calendar (GRC), and the Proper of Time. By default, there is no other calendars, neither translation (even in English) nor extra martyrology metadata.\n\nThe complete GRC, and any other particular calendar (for a country, a region or a diocese) are available as separated plugins, that contain a bundle of the calendar data, localizations, and a martyrology catalog (containing extra metadata).\n\nFor example, to install the General Roman Calendar and the calendar of France:\n\n```bash\n# npm\nnpm install @romcal/calendar.general-roman@dev\nnpm install @romcal/calendar.france@dev\n\n# yarn\nyarn add @romcal/calendar.general-roman@dev\nyarn add @romcal/calendar.france@dev\n```\n\nThe complete list of localized calendar is [available here](./docs/calendar-plugins.md).\n\n### Load from CDN\n\nYou can also directly add a script tag loading romcal from one of the CDNs providing it:\n\n#### unpkg.com\n\n- https://unpkg.com/romcal/dist/iife/romcal.js\n\nesm or cjs:\n\n- https://unpkg.com/romcal/dist/esm/romcal.js\n- https://unpkg.com/romcal/dist/cjs/romcal.js\n\nMake sure to use a fixed version in production like https://unpkg.com/romcal@3.0.0-dev.29/dist/cjs/romcal.js as passing no version will redirect to the latest version which might contain breaking changes in the future.\n\n#### cdnjs.com\n\nhttps://cdnjs.com/libraries/romcal\n\n## Basic samples\n\n### Initialize a Romcal object\n\nBefore generating any kind of data, you must first generate a `new Romcal()` object.\n\n#### 1. Import Romcal\n\n```ts\n// as esm\nimport { Romcal } from 'romcal';\nimport { France_Fr } from '@romcal/calendar.france';\n```\n\n```ts\n// or as cjs\nconst { Romcal } = require('romcal');\nconst { France_Fr } = require('@romcal/calendar.france');\n```\n\n```html\n\u003c!-- or as iife in a web HTML page --\u003e\n\u003cscript src=\"https://unpkg.com/romcal@3.0.0-dev.29/dist/iife/romcal.js\"\u003e\u003c/script\u003e\n\u003cscript src=\"https://unpkg.com/@romcal/calendar.france@3.0.0-dev.29/iife/fr.js\"\u003e\u003c/script\u003e\n```\n\n#### 2. Initialize Romcal\n\nWith default options:\n\n```ts\nconst romcal = new Romcal();\n```\n\nOr with any of the optional options:\n\n```ts\n// Initialize romcal (all options are optional)\nconst romcal = new Romcal({\n  localizedCalendar: France_Fr, // The localized calendar to use with romcal\n  scope: 'gregorian' | 'liturgical', // Default: 'gregorian' (Jan 1 to Dec 31). Optionally: 'liturgical' (the first Sunday of Advent to the last Saturday of Ordinary Time)\n  epiphanyOnSunday: true | false, // Epiphany always a Sunday (between January 2 - 8), or on January 6\n  corpusChristiOnSunday: true | false, // Corpus Christi always a Sunday, or the Thursday after Trinity Sunday\n  ascensionOnSunday: true | false, // Ascension always a Sunday, or the 40th day of Easter (a Thursday)\n  elevatedMemorialIds: ['john_paul_ii_pope', 'our_lady_of_fatima'], // List of optional memorials to be elevated to mandatory memorials\n});\n```\n\nFor further information about romcal configuration and the default options: :books: [Configuration options](docs/general-usage.md#configuration-options).\n\nYou can also take a look to the [romcal/romcal-examples repository](https://github.com/romcal/romcal-examples), which contain additional examples:\n\n- [html-web-page](https://github.com/romcal/romcal-examples/tree/main/html-web-page) – loading romcal in a HTML script tag (`iife`).\n- [react-app](https://github.com/romcal/romcal-examples/tree/main/react-app) – a basic React application loading and displaying romcal data.\n- [rest-api-with-express](https://github.com/romcal/romcal-examples/tree/main//rest-api-with-express) – a REST API using Node.js and Express, written as CommonJs (`cjs`).\n- [rest-api-with-fastify](https://github.com/romcal/romcal-examples/tree/main//rest-api-with-fastify) – a REST API using Node.js and Fastify, written as ES Module (`esm`).\n\n### Generate a calendar `.generateCalendar(year)`\n\nThe `year` parameter is optional.\n\nBelow, 2 examples to generate a calendar for a specific year or the current year.\n\n```ts\n// Get a romcal calendar for 2030, using a Promise:\nromcal.generateCalendar(2030).then((data1) =\u003e {\n  console.log(data1);\n});\n\n// Or get a romcal calendar for the current year, using async/await:\nconst data2 = await romcal.generateCalendar();\nconsole.log(data2);\n```\n\nThis method produces an `Object` of key/values, where the key is a date (as a ISO8601 string), and the value is an `Array` of `LiturgicalDay` objects that can occur on a specific day.\nThe first `LiturgicalDay` object is the default one, the following objects are optionals (e.g. optional memorials).\n\n```json5\n{\n  key: 'mary_mother_of_god',\n  name: 'Mary, Mother of God',\n  date: '2020-01-01',\n  precedence: 'GENERAL_SOLEMNITY_3',\n  rank: 'SOLEMNITY',\n  rankName: 'Solemnity',\n  isHolyDayOfObligation: true,\n  isOptional: false,\n  colors: ['WHITE'],\n  seasons: ['CHRISTMASTIDE'],\n  seasonNames: ['Christmas'],\n  periods: ['CHRISTMAS_OCTAVE'],\n  martyrology: [],\n  titles: [],\n  cycles: {\n    sundayCycle: 'YEAR_A',\n    weekdayCycle: 'YEAR_2',\n    psalterWeek: 'WEEK_2',\n  },\n  calendar: {\n    weekOfSeason: 2,\n    dayOfSeason: 8,\n    dayOfWeek: 3,\n    nthDayOfWeekInMonth: 1,\n    startOfSeason: '2021-12-25',\n    endOfSeason: '2022-01-09',\n    startOfLiturgicalYear: '2021-11-28',\n    endOfLiturgicalYear: '2022-11-26',\n  },\n  fromCalendar: 'proper_of_time',\n  fromExtendedCalendars: [],\n}\n```\n\nBy default, the range dates correspond to a Gregorian calendar (Jan 1 to Dec 31).\nExcept if you previously initialized the `Romcal` object with `{ scope: 'liturgical' }`: the range corresponds to a liturgical year (the first Sunday of Advent to the last Saturday of Ordinary Time).\n\n```ts\n// Will generate a liturgical calendar, from 2029-12-02 to 2030-11-30\nconst romcal = new Romcal({ scope: 'liturgical' });\nconst data = await romcal.generateCalendar(2030);\n```\n\nFor further information: :books: [Output data and JSON schema](docs/data-output.md).\n\n### Get one liturgical day `.getOneLiturgicalDay(key, options)`\n\nInstead of returning `LitugicalDay` objects for the whole year, you can try to retrieve only one object by its `key`.\n\n```ts\nconst data = romcal.getOneLiturgicalDay('easter_sunday');\n```\n\nIt will return:\n\n- The corresponding `LiturgicalDay` found in the calendar.\n- Or `null` if the `LiturgicalDay` exists in the calendar definitions, but do not occur in this specific year.\n- Or `undefined` if the desired `LiturgicalYear` do not exist in the calendar.\n\nBy default, romcal compute this `LiturgicalDay` in the context of the current year.\nYou can set a specific year in the options: `{ year: 2030 }`.\n\n:warning: **Important:** from this method, romcal do not compute the whole year for performance reasons.\nSome metadata (especially the `seasons` and the `periods` in Christmas Time, and the `precedence` rules) might be incomplete or not accurate.\n\nIf this is an issue for your requirements, you can tell Romcal to compute first the whole year to ensure data integrity, by setting this option: `{ computeInWholeYear: true }`.\n\n```ts\nconst data = romcal.getOneLiturgicalDay('ordinary_time_12_sunday', {\n  year: 2022,\n  computeInWholeYear: true,\n});\n// Will return `null`, because `corpus_christi` is taking precedence over `ordinary_time_12_sunday` in 2022\n```\n\n### Get all liturgical day definitions `.getAllDefinitions()`\n\nThe 2 methods above (`.generateCalendar` and `.getOneLiturgicalDay`) are returning `LiturgicalDay` objects, in the context of a year.\nThat is, every `LiturgicalDay` objects have a `date` property, and are sorted and possibly removed depending on the year context and seasons/precedence rules.\n\nHowever, you might need to retrieve all possible calendar definitions, without any rules or year context.\n\nThe `.getAllDefinitions()` method returns absolutely all `LiturgicalDayDef` objects that are part of a liturgical calendar.\nThe returned object is a key/value, where the key is the `key` of the `LiturgicalDayDef` object, and the value is the `LiturgicalDayDef` itself.\n\n```ts\nconst definitions = romcal.getAllDefinitions();\n```\n\nNote that a `LiturgicalDayDef` object is different from a `LiturgicalDay` object.\nThe first one contain already most of the metadata, but do not have the `date` property, and the `seasons` \u0026 `periods` might be incomplete.\nAlso, some properties like `colors`, `ranks`, `precedence` might be updated in a `LiturgicalDay` object, according to the year context and seasons/rules.\n\n### Get the date of major celebrations `.date(year).fn()`\n\nYou might only need the `Date` of a liturgical day, without computing all other metadata or a whole calendar.\n\nThis gives you access to all methods from the `Dates` class: [./rites/roman1969/src/utils/dates.ts](./rites/roman1969/src/utils/dates.ts).\n\nThe `year` parameter is optional (taking the current year by default, if not provided).\n\n```ts\nconst romcal = new Romcal();\nconst dates = romcal.dates(2030);\nconst easterOf2030 = dates.easterSunday();\n```\n\nAll these methods will return a `Date` object (or a range of `Date` objects).\n\nNote that you can also pass a `year` property to the last method:\n\n```ts\nconst pentecostOf2030 = romcal.dates().pentecostSunday(2030);\n```\n\n## Contribute\n\nRomcal is an open source project, this means you are more than welcome to contribute!\nEspecially to find bugs or write new tests, verify or complete calendars, or pull new localization.\n\nTo jump into romcal’s codebase more easily, you might be interested in reading:\n\n- :books: [Contributing Guide](CONTRIBUTING.md).\n- :books: [Install, Build, Run and Test romcal locally](docs/contribute-to-romcal.md).\n- :books: [Localization](/docs/localization.md).\n- :books: [Codebase Documentation](https://romcal.github.io/romcal/).\n\n## Changelog \u0026 Release History \u003ca name=\"revisions\"\u003e\u003c/a\u003e\n\nSee the [changelog](CHANGELOG.md) for the latest updates and important/breaking changes.\n\n## Module Robustness \u0026 Data Integrity \u003ca name=\"disclaimer\"\u003e\u003c/a\u003e\n\n**Romcal’s code logic** aim to be fully compliant with the [_General Instruction on the Roman Missal_](https://www.catholicculture.org/culture/library/view.cfm?recnum=337) (GIRM) and the [_General Norms for the Liturgical Year and the Calendar_](https://www.catholicculture.org/culture/library/view.cfm?id=10842).\n\n**Calendar entries** are pulled from the missal and official sources for the _General Roman Calendar_. Other calendar entries are pulled from various liturgical books and sources from the internet (when we don't have access to the missal or proper official books of the country / region). As such the accuracy of all calendars might not be ensured.\nIf you find an incorrect calendar entry (e.g. wrong date, wrong feast rank, spelling issue, typos), you are most welcome to contribute or inform the team on the GitHub issue tracker, so that the necessary changes can be made to make this a more robust and reliable module.\n\n## Credits\n\nThis node module is inspired by the C program [romcal](http://www.romcal.net/) written by Kenneth G. Bath. This module, while exhibiting similar output, is written ground up using different tools and technologies and exposes many new functionalities.\n\nAdditional credits for bug fixes, localization and suggestions can be seen at [here](./AUTHORS.md).\n\n## License\n\n[MIT](LICENSE)\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/romcal/romcal\"\u003e\n    \u003cimg alt=\"romcal-icon\" src=\"https://user-images.githubusercontent.com/1045997/89793396-1c676600-db26-11ea-9426-991ac1e32b82.png\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fromcal%2Fromcal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fromcal%2Fromcal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fromcal%2Fromcal/lists"}