@nepdatejs/core 0.0.0-bootstrap → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"years-J6lZENDt.cjs","names":[],"sources":["../src/bs/data/years.ts"],"sourcesContent":["// Generated by scripts/gen-data.ts from data/bikram-sambat.json. Do not edit by hand.\n// Run `pnpm gen:data` after changing the JSON.\n\n/** The bundled Bikram Sambat table: month lengths keyed by BS year, no AD dates. */\nexport interface GeneratedBsData {\n /** The BS year of the first row. */\n readonly firstYear: number;\n /** Days since 1970-01-01 of 1 Baisakh of `firstYear`. */\n readonly epochStart: number;\n /** Years after this one are projections, not yet checked against a published calendar. */\n readonly verifiedThrough: number;\n /** Twelve month lengths (Baisakh..Chaitra) per year, starting at `firstYear`. */\n readonly years: readonly (readonly number[])[];\n}\n\nexport const BS_DATA: GeneratedBsData = {\n firstYear: 1970,\n epochStart: -20717,\n verifiedThrough: 2083,\n years: [\n [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 1970\n [31, 31, 32, 31, 32, 30, 30, 29, 30, 29, 30, 30], // 1971\n [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 1972\n [30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31], // 1973\n [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 1974\n [31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30], // 1975\n [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 1976\n [30, 32, 31, 32, 31, 31, 29, 30, 29, 30, 29, 31], // 1977\n [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 1978\n [31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30], // 1979\n [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 1980\n [31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 30, 30], // 1981\n [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 1982\n [31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30], // 1983\n [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 1984\n [31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 30, 30], // 1985\n [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 1986\n [31, 32, 31, 32, 31, 30, 30, 29, 30, 29, 30, 30], // 1987\n [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 1988\n [31, 31, 31, 32, 31, 31, 30, 29, 30, 29, 30, 30], // 1989\n [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 1990\n [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 30], // 1991\n [31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31], // 1992\n [31, 31, 31, 32, 31, 31, 30, 29, 30, 29, 30, 30], // 1993\n [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 1994\n [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 30], // 1995\n [31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31], // 1996\n [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 1997\n [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 1998\n [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 1999\n [30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31], // 2000\n [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2001\n [31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30], // 2002\n [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 2003\n [30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31], // 2004\n [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2005\n [31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30], // 2006\n [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 2007\n [31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 29, 31], // 2008\n [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2009\n [31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30], // 2010\n [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 2011\n [31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 30, 30], // 2012\n [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2013\n [31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30], // 2014\n [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 2015\n [31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 30, 30], // 2016\n [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2017\n [31, 32, 31, 32, 31, 30, 30, 29, 30, 29, 30, 30], // 2018\n [31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31], // 2019\n [31, 31, 31, 32, 31, 31, 30, 29, 30, 29, 30, 30], // 2020\n [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2021\n [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 30], // 2022\n [31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31], // 2023\n [31, 31, 31, 32, 31, 31, 30, 29, 30, 29, 30, 30], // 2024\n [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2025\n [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 2026\n [30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31], // 2027\n [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2028\n [31, 31, 32, 31, 32, 30, 30, 29, 30, 29, 30, 30], // 2029\n [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 2030\n [30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31], // 2031\n [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2032\n [31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30], // 2033\n [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 2034\n [30, 32, 31, 32, 31, 31, 29, 30, 30, 29, 29, 31], // 2035\n [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2036\n [31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30], // 2037\n [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 2038\n [31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 30, 30], // 2039\n [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2040\n [31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30], // 2041\n [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 2042\n [31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 30, 30], // 2043\n [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2044\n [31, 32, 31, 32, 31, 30, 30, 29, 30, 29, 30, 30], // 2045\n [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 2046\n [31, 31, 31, 32, 31, 31, 30, 29, 30, 29, 30, 30], // 2047\n [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2048\n [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 30], // 2049\n [31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31], // 2050\n [31, 31, 31, 32, 31, 31, 30, 29, 30, 29, 30, 30], // 2051\n [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2052\n [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 30], // 2053\n [31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31], // 2054\n [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2055\n [31, 31, 32, 31, 32, 30, 30, 29, 30, 29, 30, 30], // 2056\n [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 2057\n [30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31], // 2058\n [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2059\n [31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30], // 2060\n [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 2061\n [30, 32, 31, 32, 31, 31, 29, 30, 29, 30, 29, 31], // 2062\n [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2063\n [31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30], // 2064\n [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 2065\n [31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 29, 31], // 2066\n [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2067\n [31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30], // 2068\n [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 2069\n [31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 30, 30], // 2070\n [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2071\n [31, 32, 31, 32, 31, 30, 30, 29, 30, 29, 30, 30], // 2072\n [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 2073\n [31, 31, 31, 32, 31, 31, 30, 29, 30, 29, 30, 30], // 2074\n [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2075\n [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 30], // 2076\n [31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31], // 2077\n [31, 31, 31, 32, 31, 31, 30, 29, 30, 29, 30, 30], // 2078\n [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2079\n [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 30], // 2080\n [31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31], // 2081\n [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2082\n [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2083\n [31, 31, 32, 31, 31, 30, 30, 30, 29, 30, 30, 30], // 2084\n [31, 32, 31, 32, 30, 31, 30, 30, 29, 30, 30, 30], // 2085\n [30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 30, 30], // 2086\n [31, 31, 32, 31, 31, 31, 30, 30, 29, 30, 30, 30], // 2087\n [30, 31, 32, 32, 30, 31, 30, 30, 29, 30, 30, 30], // 2088\n [30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 30, 30], // 2089\n [30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 30, 30], // 2090\n [31, 31, 32, 31, 31, 31, 30, 30, 29, 30, 30, 30], // 2091\n [30, 31, 32, 32, 31, 30, 30, 30, 29, 30, 30, 30], // 2092\n [30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 30, 30], // 2093\n [31, 31, 32, 31, 31, 30, 30, 30, 29, 30, 30, 30], // 2094\n [31, 31, 32, 31, 31, 31, 30, 29, 30, 30, 30, 30], // 2095\n [30, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30], // 2096\n [31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 30, 30], // 2097\n [31, 31, 32, 31, 31, 31, 29, 30, 29, 30, 29, 31], // 2098\n [31, 31, 32, 31, 31, 31, 30, 29, 29, 30, 30, 30], // 2099\n ],\n};\n"],"mappings":";AAeA,MAAa,UAA2B;CACtC,WAAW;CACX,YAAY;CACZ,iBAAiB;CACjB,OAAO;EACL;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC/C;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;CACjD;AACF"}
package/package.json CHANGED
@@ -1,10 +1,83 @@
1
1
  {
2
2
  "name": "@nepdatejs/core",
3
- "version": "0.0.0-bootstrap",
4
- "description": "Placeholder. Install the latest version instead.",
3
+ "version": "0.1.0",
4
+ "description": "Bikram Sambat (BS) ⇄ AD date engine: conversion, formatting, parsing, fiscal year. Zero dependencies.",
5
+ "keywords": [
6
+ "nepali",
7
+ "bikram-sambat",
8
+ "bs",
9
+ "nepali-date",
10
+ "date",
11
+ "calendar",
12
+ "datepicker",
13
+ "nepal"
14
+ ],
5
15
  "license": "MIT",
16
+ "author": "Shishir Rai",
17
+ "homepage": "https://github.com/nepdate/nepdate/tree/main/packages/core#readme",
6
18
  "repository": {
7
19
  "type": "git",
8
- "url": "git+https://github.com/nepdate/nepdate.git"
20
+ "url": "git+https://github.com/nepdate/nepdate.git",
21
+ "directory": "packages/core"
22
+ },
23
+ "bugs": {
24
+ "url": "https://github.com/nepdate/nepdate/issues"
25
+ },
26
+ "type": "module",
27
+ "sideEffects": false,
28
+ "exports": {
29
+ ".": {
30
+ "@nepdatejs/source": "./src/index.ts",
31
+ "import": {
32
+ "types": "./dist/index.d.ts",
33
+ "default": "./dist/index.js"
34
+ },
35
+ "require": {
36
+ "types": "./dist/index.d.cts",
37
+ "default": "./dist/index.cjs"
38
+ }
39
+ },
40
+ "./data": {
41
+ "@nepdatejs/source": "./src/data.ts",
42
+ "import": {
43
+ "types": "./dist/data.d.ts",
44
+ "default": "./dist/data.js"
45
+ },
46
+ "require": {
47
+ "types": "./dist/data.d.cts",
48
+ "default": "./dist/data.cjs"
49
+ }
50
+ },
51
+ "./package.json": "./package.json"
52
+ },
53
+ "main": "./dist/index.cjs",
54
+ "module": "./dist/index.js",
55
+ "types": "./dist/index.d.cts",
56
+ "typesVersions": {
57
+ "*": {
58
+ "data": [
59
+ "./dist/data.d.cts"
60
+ ]
61
+ }
62
+ },
63
+ "unpkg": "./dist/nepdate.global.js",
64
+ "jsdelivr": "./dist/nepdate.global.js",
65
+ "files": [
66
+ "dist",
67
+ "src",
68
+ "!src/**/*.test.ts",
69
+ "README.md",
70
+ "LICENSE"
71
+ ],
72
+ "engines": {
73
+ "node": ">=18"
74
+ },
75
+ "publishConfig": {
76
+ "access": "public"
77
+ },
78
+ "scripts": {
79
+ "build": "tsdown",
80
+ "typecheck": "tsc -p tsconfig.json",
81
+ "check:package": "publint --strict && attw --pack"
9
82
  }
10
- }
83
+ }
@@ -0,0 +1,71 @@
1
+ /**
2
+ * The Gregorian (AD) calendar, by arithmetic only: no table, no BS knowledge,
3
+ * no `Date`. Works for any year in ±MAX_AD_YEAR (docs/plan D-001).
4
+ *
5
+ * The day-count algorithms are Howard Hinnant's days_from_civil and
6
+ * civil_from_days (proleptic Gregorian, March-based years).
7
+ */
8
+
9
+ /** AD years must lie within ±this value. */
10
+ export const MAX_AD_YEAR = 999_999;
11
+
12
+ const DAYS_BEFORE_EPOCH = 719_468; // 0000-03-01 → 1970-01-01
13
+ const DAYS_PER_ERA = 146_097; // 400 years
14
+ const MONTH_DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
15
+
16
+ export function isAdLeapYear(year: number): boolean {
17
+ return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
18
+ }
19
+
20
+ /** Days in an AD month. The month must be 1–12. */
21
+ export function adMonthLength(year: number, month: number): number {
22
+ return month === 2 && isAdLeapYear(year) ? 29 : (MONTH_DAYS[month - 1] ?? 0);
23
+ }
24
+
25
+ export function isValidAdDate(year: number, month: number, day: number): boolean {
26
+ return (
27
+ Number.isInteger(year) &&
28
+ Number.isInteger(month) &&
29
+ Number.isInteger(day) &&
30
+ Math.abs(year) <= MAX_AD_YEAR &&
31
+ month >= 1 &&
32
+ month <= 12 &&
33
+ day >= 1 &&
34
+ day <= adMonthLength(year, month)
35
+ );
36
+ }
37
+
38
+ /** Days since 1970-01-01 of a valid AD date. */
39
+ export function adToEpoch(year: number, month: number, day: number): number {
40
+ const y = month <= 2 ? year - 1 : year;
41
+ const era = Math.floor(y / 400);
42
+ const yearOfEra = y - era * 400;
43
+ const dayOfYear = Math.floor((153 * (month + (month > 2 ? -3 : 9)) + 2) / 5) + day - 1;
44
+ const dayOfEra =
45
+ yearOfEra * 365 + Math.floor(yearOfEra / 4) - Math.floor(yearOfEra / 100) + dayOfYear;
46
+
47
+ return era * DAYS_PER_ERA + dayOfEra - DAYS_BEFORE_EPOCH;
48
+ }
49
+
50
+ /** The AD year, month and day of a day count. */
51
+ export function epochToAd(epoch: number): { year: number; month: number; day: number } {
52
+ const z = epoch + DAYS_BEFORE_EPOCH;
53
+ const era = Math.floor(z / DAYS_PER_ERA);
54
+ const dayOfEra = z - era * DAYS_PER_ERA;
55
+ const yearOfEra = Math.floor(
56
+ (dayOfEra -
57
+ Math.floor(dayOfEra / 1460) +
58
+ Math.floor(dayOfEra / 36_524) -
59
+ Math.floor(dayOfEra / 146_096)) /
60
+ 365,
61
+ );
62
+ const dayOfYear =
63
+ dayOfEra -
64
+ (365 * yearOfEra + Math.floor(yearOfEra / 4) - Math.floor(yearOfEra / 100));
65
+ const shiftedMonth = Math.floor((5 * dayOfYear + 2) / 153);
66
+ const day = dayOfYear - Math.floor((153 * shiftedMonth + 2) / 5) + 1;
67
+ const month = shiftedMonth < 10 ? shiftedMonth + 3 : shiftedMonth - 9;
68
+ const year = yearOfEra + era * 400 + (month <= 2 ? 1 : 0);
69
+
70
+ return { year, month, day };
71
+ }
@@ -0,0 +1,123 @@
1
+ import { getConfig, isWeekday } from './config';
2
+ import { fromEpoch, toCalendar, toEpoch } from './convert';
3
+ import { createDate, daysInMonth } from './create';
4
+ import { toEpochDay, weekdayOf } from './epoch';
5
+ import { NepDateRangeError } from './errors';
6
+ import type { CalendarDate, DateOf, Weekday } from './types';
7
+
8
+ /** A date in the same calendar as `D`. */
9
+ type Same<D extends CalendarDate> = DateOf<D['calendar']>;
10
+
11
+ export function addDays<D extends CalendarDate>(date: D, days: number): Same<D> {
12
+ assertInteger(days, 'days');
13
+
14
+ return fromEpoch(toEpochDay(toEpoch(date) + days), date.calendar) as Same<D>;
15
+ }
16
+
17
+ /** Move by whole months in the date's own calendar; the day is capped to the new month's length. */
18
+ export function addMonths<D extends CalendarDate>(date: D, months: number): Same<D> {
19
+ assertInteger(months, 'months');
20
+ const index = date.year * 12 + (date.month - 1) + months;
21
+ const year = Math.floor(index / 12);
22
+ const month = index - year * 12 + 1;
23
+ const day = Math.min(date.day, daysInMonth(date.calendar, year, month));
24
+
25
+ return createDate(date.calendar, year, month, day) as Same<D>;
26
+ }
27
+
28
+ /** Move by whole years in the date's own calendar; the day is capped (29 Feb, short BS months). */
29
+ export function addYears<D extends CalendarDate>(date: D, years: number): Same<D> {
30
+ assertInteger(years, 'years');
31
+
32
+ return addMonths(date, years * 12);
33
+ }
34
+
35
+ export function startOfMonth<D extends CalendarDate>(date: D): Same<D> {
36
+ return createDate(date.calendar, date.year, date.month, 1) as Same<D>;
37
+ }
38
+
39
+ export function endOfMonth<D extends CalendarDate>(date: D): Same<D> {
40
+ return createDate(
41
+ date.calendar,
42
+ date.year,
43
+ date.month,
44
+ daysInMonth(date.calendar, date.year, date.month),
45
+ ) as Same<D>;
46
+ }
47
+
48
+ export function startOfYear<D extends CalendarDate>(date: D): Same<D> {
49
+ return createDate(date.calendar, date.year, 1, 1) as Same<D>;
50
+ }
51
+
52
+ export function endOfYear<D extends CalendarDate>(date: D): Same<D> {
53
+ return createDate(
54
+ date.calendar,
55
+ date.year,
56
+ 12,
57
+ daysInMonth(date.calendar, date.year, 12),
58
+ ) as Same<D>;
59
+ }
60
+
61
+ export function startOfWeek<D extends CalendarDate>(
62
+ date: D,
63
+ weekStartsOn: Weekday = getConfig().weekStartsOn,
64
+ ): Same<D> {
65
+ assertWeekday(weekStartsOn);
66
+ const back = (weekdayOf(toEpoch(date)) - weekStartsOn + 7) % 7;
67
+
68
+ return addDays(date, -back);
69
+ }
70
+
71
+ export function endOfWeek<D extends CalendarDate>(
72
+ date: D,
73
+ weekStartsOn: Weekday = getConfig().weekStartsOn,
74
+ ): Same<D> {
75
+ return addDays(startOfWeek(date, weekStartsOn), 6);
76
+ }
77
+
78
+ /** Whole days from `b` to `a` (positive when `a` is later). The calendars may differ. */
79
+ export function differenceInDays(a: CalendarDate, b: CalendarDate): number {
80
+ return toEpoch(a) - toEpoch(b);
81
+ }
82
+
83
+ /** Every day from `start` to `end` inclusive, in `start`'s calendar. Nothing when end < start. */
84
+ export function* eachDayOfInterval<D extends CalendarDate>(
85
+ start: D,
86
+ end: CalendarDate,
87
+ ): Generator<Same<D>, void, undefined> {
88
+ const last = toEpoch(end);
89
+ for (let epoch = toEpoch(start); epoch <= last; epoch++) {
90
+ yield fromEpoch(toEpochDay(epoch), start.calendar) as Same<D>;
91
+ }
92
+ }
93
+
94
+ /** Every day of the month the date is in. */
95
+ export function eachDayOfMonth<D extends CalendarDate>(date: D): Same<D>[] {
96
+ return [...eachDayOfInterval(startOfMonth(date), endOfMonth(date))] as Same<D>[];
97
+ }
98
+
99
+ /** The date converted to `target`'s calendar; a small helper used by compare and fiscal code. */
100
+ export function inCalendarOf<D extends CalendarDate>(
101
+ target: D,
102
+ date: CalendarDate,
103
+ ): Same<D> {
104
+ return toCalendar(date, target.calendar) as Same<D>;
105
+ }
106
+
107
+ function assertInteger(value: number, name: string): void {
108
+ if (!Number.isSafeInteger(value)) {
109
+ throw new NepDateRangeError(
110
+ 'INVALID_ARGUMENT',
111
+ `${name} must be a whole number, not ${String(value)}.`,
112
+ );
113
+ }
114
+ }
115
+
116
+ function assertWeekday(value: number): void {
117
+ if (!isWeekday(value)) {
118
+ throw new NepDateRangeError(
119
+ 'INVALID_ARGUMENT',
120
+ `${String(value)} is not a weekday (0–6).`,
121
+ );
122
+ }
123
+ }
@@ -0,0 +1,152 @@
1
+ // Generated by scripts/gen-data.ts from data/bikram-sambat.json. Do not edit by hand.
2
+ // Run `pnpm gen:data` after changing the JSON.
3
+
4
+ /** The bundled Bikram Sambat table: month lengths keyed by BS year, no AD dates. */
5
+ export interface GeneratedBsData {
6
+ /** The BS year of the first row. */
7
+ readonly firstYear: number;
8
+ /** Days since 1970-01-01 of 1 Baisakh of `firstYear`. */
9
+ readonly epochStart: number;
10
+ /** Years after this one are projections, not yet checked against a published calendar. */
11
+ readonly verifiedThrough: number;
12
+ /** Twelve month lengths (Baisakh..Chaitra) per year, starting at `firstYear`. */
13
+ readonly years: readonly (readonly number[])[];
14
+ }
15
+
16
+ export const BS_DATA: GeneratedBsData = {
17
+ firstYear: 1970,
18
+ epochStart: -20717,
19
+ verifiedThrough: 2083,
20
+ years: [
21
+ [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 1970
22
+ [31, 31, 32, 31, 32, 30, 30, 29, 30, 29, 30, 30], // 1971
23
+ [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 1972
24
+ [30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31], // 1973
25
+ [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 1974
26
+ [31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30], // 1975
27
+ [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 1976
28
+ [30, 32, 31, 32, 31, 31, 29, 30, 29, 30, 29, 31], // 1977
29
+ [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 1978
30
+ [31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30], // 1979
31
+ [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 1980
32
+ [31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 30, 30], // 1981
33
+ [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 1982
34
+ [31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30], // 1983
35
+ [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 1984
36
+ [31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 30, 30], // 1985
37
+ [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 1986
38
+ [31, 32, 31, 32, 31, 30, 30, 29, 30, 29, 30, 30], // 1987
39
+ [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 1988
40
+ [31, 31, 31, 32, 31, 31, 30, 29, 30, 29, 30, 30], // 1989
41
+ [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 1990
42
+ [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 30], // 1991
43
+ [31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31], // 1992
44
+ [31, 31, 31, 32, 31, 31, 30, 29, 30, 29, 30, 30], // 1993
45
+ [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 1994
46
+ [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 30], // 1995
47
+ [31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31], // 1996
48
+ [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 1997
49
+ [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 1998
50
+ [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 1999
51
+ [30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31], // 2000
52
+ [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2001
53
+ [31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30], // 2002
54
+ [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 2003
55
+ [30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31], // 2004
56
+ [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2005
57
+ [31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30], // 2006
58
+ [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 2007
59
+ [31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 29, 31], // 2008
60
+ [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2009
61
+ [31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30], // 2010
62
+ [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 2011
63
+ [31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 30, 30], // 2012
64
+ [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2013
65
+ [31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30], // 2014
66
+ [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 2015
67
+ [31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 30, 30], // 2016
68
+ [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2017
69
+ [31, 32, 31, 32, 31, 30, 30, 29, 30, 29, 30, 30], // 2018
70
+ [31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31], // 2019
71
+ [31, 31, 31, 32, 31, 31, 30, 29, 30, 29, 30, 30], // 2020
72
+ [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2021
73
+ [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 30], // 2022
74
+ [31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31], // 2023
75
+ [31, 31, 31, 32, 31, 31, 30, 29, 30, 29, 30, 30], // 2024
76
+ [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2025
77
+ [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 2026
78
+ [30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31], // 2027
79
+ [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2028
80
+ [31, 31, 32, 31, 32, 30, 30, 29, 30, 29, 30, 30], // 2029
81
+ [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 2030
82
+ [30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31], // 2031
83
+ [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2032
84
+ [31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30], // 2033
85
+ [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 2034
86
+ [30, 32, 31, 32, 31, 31, 29, 30, 30, 29, 29, 31], // 2035
87
+ [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2036
88
+ [31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30], // 2037
89
+ [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 2038
90
+ [31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 30, 30], // 2039
91
+ [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2040
92
+ [31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30], // 2041
93
+ [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 2042
94
+ [31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 30, 30], // 2043
95
+ [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2044
96
+ [31, 32, 31, 32, 31, 30, 30, 29, 30, 29, 30, 30], // 2045
97
+ [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 2046
98
+ [31, 31, 31, 32, 31, 31, 30, 29, 30, 29, 30, 30], // 2047
99
+ [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2048
100
+ [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 30], // 2049
101
+ [31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31], // 2050
102
+ [31, 31, 31, 32, 31, 31, 30, 29, 30, 29, 30, 30], // 2051
103
+ [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2052
104
+ [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 30], // 2053
105
+ [31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31], // 2054
106
+ [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2055
107
+ [31, 31, 32, 31, 32, 30, 30, 29, 30, 29, 30, 30], // 2056
108
+ [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 2057
109
+ [30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31], // 2058
110
+ [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2059
111
+ [31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30], // 2060
112
+ [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 2061
113
+ [30, 32, 31, 32, 31, 31, 29, 30, 29, 30, 29, 31], // 2062
114
+ [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2063
115
+ [31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30], // 2064
116
+ [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 2065
117
+ [31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 29, 31], // 2066
118
+ [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2067
119
+ [31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30], // 2068
120
+ [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 2069
121
+ [31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 30, 30], // 2070
122
+ [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2071
123
+ [31, 32, 31, 32, 31, 30, 30, 29, 30, 29, 30, 30], // 2072
124
+ [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31], // 2073
125
+ [31, 31, 31, 32, 31, 31, 30, 29, 30, 29, 30, 30], // 2074
126
+ [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2075
127
+ [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 30], // 2076
128
+ [31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31], // 2077
129
+ [31, 31, 31, 32, 31, 31, 30, 29, 30, 29, 30, 30], // 2078
130
+ [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2079
131
+ [31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 30], // 2080
132
+ [31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31], // 2081
133
+ [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2082
134
+ [31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30], // 2083
135
+ [31, 31, 32, 31, 31, 30, 30, 30, 29, 30, 30, 30], // 2084
136
+ [31, 32, 31, 32, 30, 31, 30, 30, 29, 30, 30, 30], // 2085
137
+ [30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 30, 30], // 2086
138
+ [31, 31, 32, 31, 31, 31, 30, 30, 29, 30, 30, 30], // 2087
139
+ [30, 31, 32, 32, 30, 31, 30, 30, 29, 30, 30, 30], // 2088
140
+ [30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 30, 30], // 2089
141
+ [30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 30, 30], // 2090
142
+ [31, 31, 32, 31, 31, 31, 30, 30, 29, 30, 30, 30], // 2091
143
+ [30, 31, 32, 32, 31, 30, 30, 30, 29, 30, 30, 30], // 2092
144
+ [30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 30, 30], // 2093
145
+ [31, 31, 32, 31, 31, 30, 30, 30, 29, 30, 30, 30], // 2094
146
+ [31, 31, 32, 31, 31, 31, 30, 29, 30, 30, 30, 30], // 2095
147
+ [30, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30], // 2096
148
+ [31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 30, 30], // 2097
149
+ [31, 31, 32, 31, 31, 31, 29, 30, 29, 30, 29, 31], // 2098
150
+ [31, 31, 32, 31, 31, 31, 30, 29, 29, 30, 30, 30], // 2099
151
+ ],
152
+ };
@@ -0,0 +1,112 @@
1
+ import { NepDateDataError, NepDateRangeError } from '../errors';
2
+ import type { BsData } from '../types';
3
+ import { BS_DATA } from './data/years';
4
+ import { currentBsData, useBsData } from './table';
5
+
6
+ /** The first BS month of Nepal's fiscal year: Shrawan. */
7
+ export const BS_FISCAL_YEAR_START_MONTH = 4;
8
+
9
+ /** Days a verified year may have. Projected years may be off by one (the bundled BS 2096 lists 364). */
10
+ const VERIFIED_YEAR_DAYS = [365, 366];
11
+ const PROJECTED_YEAR_DAYS = [364, 365, 366, 367];
12
+
13
+ /** Throws NepDateDataError when the table is not usable. Same rules as scripts/gen-data.ts. */
14
+ export function validateBsData(table: BsData): void {
15
+ if (!Number.isSafeInteger(table.epochStart) || !Number.isInteger(table.firstYear)) {
16
+ throw new NepDateDataError(
17
+ 'BAD_ANCHOR',
18
+ 'firstYear and epochStart must be whole numbers.',
19
+ );
20
+ }
21
+ if (!Number.isInteger(table.verifiedThrough)) {
22
+ throw new NepDateDataError('BAD_ANCHOR', 'verifiedThrough must be a whole number.');
23
+ }
24
+ if (table.years.length === 0) {
25
+ throw new NepDateDataError('EMPTY', 'The BS table has no years.');
26
+ }
27
+
28
+ table.years.forEach((months, index) => {
29
+ const year = table.firstYear + index;
30
+ if (months.length !== 12) {
31
+ throw new NepDateDataError(
32
+ 'BAD_MONTH_COUNT',
33
+ `BS ${year} lists ${months.length} months, not 12.`,
34
+ year,
35
+ );
36
+ }
37
+ let total = 0;
38
+ months.forEach((days, m) => {
39
+ if (!Number.isInteger(days) || days < 29 || days > 32) {
40
+ throw new NepDateDataError(
41
+ 'BAD_MONTH',
42
+ `BS ${year} month ${m + 1} has ${String(days)} days; expected 29–32.`,
43
+ year,
44
+ m + 1,
45
+ );
46
+ }
47
+ total += days;
48
+ });
49
+ const allowed =
50
+ year <= table.verifiedThrough ? VERIFIED_YEAR_DAYS : PROJECTED_YEAR_DAYS;
51
+ if (!allowed.includes(total)) {
52
+ throw new NepDateDataError(
53
+ 'BAD_YEAR_TOTAL',
54
+ `BS ${year} has ${total} days; expected ${allowed.join(' or ')}.`,
55
+ year,
56
+ );
57
+ }
58
+ });
59
+ }
60
+
61
+ /** The BS table in use (frozen). */
62
+ export function getBsData(): BsData {
63
+ return currentBsData();
64
+ }
65
+
66
+ /** Replace the whole BS table. Only BS results change; AD functions are unaffected. */
67
+ export function setBsData(table: BsData): void {
68
+ validateBsData(table);
69
+ useBsData(table);
70
+ }
71
+
72
+ /**
73
+ * Correct one year's month lengths, or add the year just before the first or
74
+ * just after the last. Years after a corrected year move with it; earlier years
75
+ * never move (adding a year before the first keeps every existing year in place).
76
+ */
77
+ export function patchBsYear(year: number, months: readonly number[]): void {
78
+ const table = currentBsData();
79
+ const lastYear = table.firstYear + table.years.length - 1;
80
+ let next: BsData;
81
+
82
+ if (year >= table.firstYear && year <= lastYear) {
83
+ next = {
84
+ ...table,
85
+ years: table.years.map((row, index) =>
86
+ index === year - table.firstYear ? months : row,
87
+ ),
88
+ };
89
+ } else if (year === lastYear + 1) {
90
+ next = { ...table, years: [...table.years, months] };
91
+ } else if (year === table.firstYear - 1) {
92
+ const length = months.reduce((total, days) => total + days, 0);
93
+ next = {
94
+ ...table,
95
+ firstYear: year,
96
+ epochStart: table.epochStart - length,
97
+ years: [months, ...table.years],
98
+ };
99
+ } else {
100
+ throw new NepDateRangeError(
101
+ 'OUT_OF_TABLE',
102
+ `BS ${String(year)} is not in the table and does not extend it (BS ${table.firstYear}–${lastYear}).`,
103
+ );
104
+ }
105
+
106
+ setBsData(next);
107
+ }
108
+
109
+ /** Back to the table bundled with the package. */
110
+ export function resetBsData(): void {
111
+ useBsData(BS_DATA);
112
+ }