mirror of
https://github.com/acamarata/date-fns-hijri.git
synced 2026-06-30 18:54:25 +00:00
ci: fix eslint config files pattern, add @typescript-eslint direct devDeps, fix prettier formatting
This commit is contained in:
parent
b96d6fc921
commit
f260912927
5 changed files with 50 additions and 38 deletions
|
|
@ -4,13 +4,17 @@ import eslintConfigPrettier from 'eslint-config-prettier';
|
||||||
import { typescript } from '@acamarata/eslint-config';
|
import { typescript } from '@acamarata/eslint-config';
|
||||||
|
|
||||||
export default [
|
export default [
|
||||||
{
|
|
||||||
plugins: { '@typescript-eslint': tsPlugin },
|
|
||||||
languageOptions: { parser: tsParser },
|
|
||||||
},
|
|
||||||
...typescript,
|
|
||||||
eslintConfigPrettier,
|
|
||||||
{
|
{
|
||||||
ignores: ['dist/', 'node_modules/', 'test.mjs', 'test-cjs.cjs'],
|
ignores: ['dist/', 'node_modules/', 'test.mjs', 'test-cjs.cjs'],
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
files: ['src/**/*.ts'],
|
||||||
|
plugins: { '@typescript-eslint': tsPlugin },
|
||||||
|
languageOptions: {
|
||||||
|
parser: tsParser,
|
||||||
|
parserOptions: { project: true, tsconfigRootDir: import.meta.dirname },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
...typescript.map((cfg) => ({ ...cfg, files: ['src/**/*.ts'] })),
|
||||||
|
{ ...eslintConfigPrettier, files: ['src/**/*.ts'] },
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,8 @@
|
||||||
"@acamarata/tsconfig": "^0.1.0",
|
"@acamarata/tsconfig": "^0.1.0",
|
||||||
"@eslint/js": "^10.0.1",
|
"@eslint/js": "^10.0.1",
|
||||||
"@types/node": "^25.3.5",
|
"@types/node": "^25.3.5",
|
||||||
|
"@typescript-eslint/eslint-plugin": "^8.56.1",
|
||||||
|
"@typescript-eslint/parser": "^8.56.1",
|
||||||
"c8": "^10.1.3",
|
"c8": "^10.1.3",
|
||||||
"eslint": "^10.0.3",
|
"eslint": "^10.0.3",
|
||||||
"eslint-config-prettier": "^10.1.8",
|
"eslint-config-prettier": "^10.1.8",
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,12 @@ importers:
|
||||||
'@types/node':
|
'@types/node':
|
||||||
specifier: ^25.3.5
|
specifier: ^25.3.5
|
||||||
version: 25.3.5
|
version: 25.3.5
|
||||||
|
'@typescript-eslint/eslint-plugin':
|
||||||
|
specifier: ^8.56.1
|
||||||
|
version: 8.56.1(@typescript-eslint/parser@8.56.1(eslint@10.0.3)(typescript@5.9.3))(eslint@10.0.3)(typescript@5.9.3)
|
||||||
|
'@typescript-eslint/parser':
|
||||||
|
specifier: ^8.56.1
|
||||||
|
version: 8.56.1(eslint@10.0.3)(typescript@5.9.3)
|
||||||
c8:
|
c8:
|
||||||
specifier: ^10.1.3
|
specifier: ^10.1.3
|
||||||
version: 10.1.3
|
version: 10.1.3
|
||||||
|
|
|
||||||
62
src/index.ts
62
src/index.ts
|
|
@ -9,11 +9,11 @@ import {
|
||||||
hwLong,
|
hwLong,
|
||||||
hwShort,
|
hwShort,
|
||||||
hwNumeric,
|
hwNumeric,
|
||||||
} from 'hijri-core';
|
} from "hijri-core";
|
||||||
|
|
||||||
export type { HijriDate, CalendarEngine, ConversionOptions } from './types';
|
export type { HijriDate, CalendarEngine, ConversionOptions } from "./types";
|
||||||
|
|
||||||
import type { HijriDate, ConversionOptions } from './types';
|
import type { HijriDate, ConversionOptions } from "./types";
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
// Conversion
|
// Conversion
|
||||||
|
|
@ -122,7 +122,7 @@ export function getDaysInHijriMonth(hy: number, hm: number, options?: Conversion
|
||||||
*/
|
*/
|
||||||
export function getHijriMonthName(
|
export function getHijriMonthName(
|
||||||
hm: number,
|
hm: number,
|
||||||
length: 'long' | 'medium' | 'short' = 'long',
|
length: "long" | "medium" | "short" = "long",
|
||||||
): string {
|
): string {
|
||||||
if (hm < 1 || hm > 12) {
|
if (hm < 1 || hm > 12) {
|
||||||
throw new RangeError(`Hijri month must be 1–12, got ${hm}.`);
|
throw new RangeError(`Hijri month must be 1–12, got ${hm}.`);
|
||||||
|
|
@ -130,9 +130,9 @@ export function getHijriMonthName(
|
||||||
const idx = hm - 1;
|
const idx = hm - 1;
|
||||||
// Non-null: hm validated 1-12 above; idx is always 0-11, within all hm* array bounds.
|
// Non-null: hm validated 1-12 above; idx is always 0-11, within all hm* array bounds.
|
||||||
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
||||||
if (length === 'medium') return hmMedium[idx]!;
|
if (length === "medium") return hmMedium[idx]!;
|
||||||
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
||||||
if (length === 'short') return hmShort[idx]!;
|
if (length === "short") return hmShort[idx]!;
|
||||||
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
||||||
return hmLong[idx]!;
|
return hmLong[idx]!;
|
||||||
}
|
}
|
||||||
|
|
@ -145,11 +145,11 @@ export function getHijriMonthName(
|
||||||
* @param date - Any Gregorian `Date`.
|
* @param date - Any Gregorian `Date`.
|
||||||
* @param length - `'long'` (default) or `'short'`.
|
* @param length - `'long'` (default) or `'short'`.
|
||||||
*/
|
*/
|
||||||
export function getHijriWeekdayName(date: Date, length: 'long' | 'short' = 'long'): string {
|
export function getHijriWeekdayName(date: Date, length: "long" | "short" = "long"): string {
|
||||||
const day = date.getDay(); // 0–6
|
const day = date.getDay(); // 0–6
|
||||||
// Non-null: day is always 0-6 from getDay(), within hw* array bounds.
|
// Non-null: day is always 0-6 from getDay(), within hw* array bounds.
|
||||||
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
||||||
return length === 'short' ? hwShort[day]! : hwLong[day]!;
|
return length === "short" ? hwShort[day]! : hwLong[day]!;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
|
@ -188,45 +188,45 @@ export function formatHijriDate(
|
||||||
options?: ConversionOptions,
|
options?: ConversionOptions,
|
||||||
): string {
|
): string {
|
||||||
const h = coreToHijri(date, options);
|
const h = coreToHijri(date, options);
|
||||||
if (!h) return '';
|
if (!h) return "";
|
||||||
|
|
||||||
const day = date.getDay(); // 0–6
|
const day = date.getDay(); // 0–6
|
||||||
|
|
||||||
return formatStr.replace(TOKEN_RE, (token): string => {
|
return formatStr.replace(TOKEN_RE, (token): string => {
|
||||||
switch (token) {
|
switch (token) {
|
||||||
case 'iYYYY':
|
case "iYYYY":
|
||||||
return String(h.hy);
|
return String(h.hy);
|
||||||
case 'iYY':
|
case "iYY":
|
||||||
return String(h.hy).slice(-2).padStart(2, '0');
|
return String(h.hy).slice(-2).padStart(2, "0");
|
||||||
case 'iMMMM':
|
case "iMMMM":
|
||||||
// Non-null: hm is a valid Hijri month 1-12; index hm-1 is within hmLong bounds.
|
// Non-null: hm is a valid Hijri month 1-12; index hm-1 is within hmLong bounds.
|
||||||
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
||||||
return hmLong[h.hm - 1]!;
|
return hmLong[h.hm - 1]!;
|
||||||
case 'iMMM':
|
case "iMMM":
|
||||||
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
||||||
return hmMedium[h.hm - 1]!;
|
return hmMedium[h.hm - 1]!;
|
||||||
case 'iMM':
|
case "iMM":
|
||||||
return String(h.hm).padStart(2, '0');
|
return String(h.hm).padStart(2, "0");
|
||||||
case 'iM':
|
case "iM":
|
||||||
return String(h.hm);
|
return String(h.hm);
|
||||||
case 'iDD':
|
case "iDD":
|
||||||
return String(h.hd).padStart(2, '0');
|
return String(h.hd).padStart(2, "0");
|
||||||
case 'iD':
|
case "iD":
|
||||||
return String(h.hd);
|
return String(h.hd);
|
||||||
case 'iEEEE':
|
case "iEEEE":
|
||||||
// Non-null: day is always 0-6 from getDay(), within hwLong bounds.
|
// Non-null: day is always 0-6 from getDay(), within hwLong bounds.
|
||||||
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
||||||
return hwLong[day]!;
|
return hwLong[day]!;
|
||||||
case 'iEEE':
|
case "iEEE":
|
||||||
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
||||||
return hwShort[day]!;
|
return hwShort[day]!;
|
||||||
case 'iE':
|
case "iE":
|
||||||
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
||||||
return String(hwNumeric[day]!);
|
return String(hwNumeric[day]!);
|
||||||
case 'ioooo':
|
case "ioooo":
|
||||||
return 'AH';
|
return "AH";
|
||||||
case 'iooo':
|
case "iooo":
|
||||||
return 'AH';
|
return "AH";
|
||||||
default:
|
default:
|
||||||
return token;
|
return token;
|
||||||
}
|
}
|
||||||
|
|
@ -267,7 +267,7 @@ function utcMidnightToLocalNoon(d: Date): Date {
|
||||||
export function addHijriMonths(date: Date, months: number, options?: ConversionOptions): Date {
|
export function addHijriMonths(date: Date, months: number, options?: ConversionOptions): Date {
|
||||||
const h = coreToHijri(date, options);
|
const h = coreToHijri(date, options);
|
||||||
if (!h) {
|
if (!h) {
|
||||||
throw new Error('Date is outside the supported Hijri calendar range.');
|
throw new Error("Date is outside the supported Hijri calendar range.");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Total months from epoch: 0-based
|
// Total months from epoch: 0-based
|
||||||
|
|
@ -293,7 +293,7 @@ export function addHijriMonths(date: Date, months: number, options?: ConversionO
|
||||||
export function addHijriYears(date: Date, years: number, options?: ConversionOptions): Date {
|
export function addHijriYears(date: Date, years: number, options?: ConversionOptions): Date {
|
||||||
const h = coreToHijri(date, options);
|
const h = coreToHijri(date, options);
|
||||||
if (!h) {
|
if (!h) {
|
||||||
throw new Error('Date is outside the supported Hijri calendar range.');
|
throw new Error("Date is outside the supported Hijri calendar range.");
|
||||||
}
|
}
|
||||||
|
|
||||||
const newYear = h.hy + years;
|
const newYear = h.hy + years;
|
||||||
|
|
@ -315,7 +315,7 @@ export function addHijriYears(date: Date, years: number, options?: ConversionOpt
|
||||||
export function startOfHijriMonth(date: Date, options?: ConversionOptions): Date {
|
export function startOfHijriMonth(date: Date, options?: ConversionOptions): Date {
|
||||||
const h = coreToHijri(date, options);
|
const h = coreToHijri(date, options);
|
||||||
if (!h) {
|
if (!h) {
|
||||||
throw new Error('Date is outside the supported Hijri calendar range.');
|
throw new Error("Date is outside the supported Hijri calendar range.");
|
||||||
}
|
}
|
||||||
return utcMidnightToLocalNoon(fromHijriDate(h.hy, h.hm, 1, options));
|
return utcMidnightToLocalNoon(fromHijriDate(h.hy, h.hm, 1, options));
|
||||||
}
|
}
|
||||||
|
|
@ -328,7 +328,7 @@ export function startOfHijriMonth(date: Date, options?: ConversionOptions): Date
|
||||||
export function endOfHijriMonth(date: Date, options?: ConversionOptions): Date {
|
export function endOfHijriMonth(date: Date, options?: ConversionOptions): Date {
|
||||||
const h = coreToHijri(date, options);
|
const h = coreToHijri(date, options);
|
||||||
if (!h) {
|
if (!h) {
|
||||||
throw new Error('Date is outside the supported Hijri calendar range.');
|
throw new Error("Date is outside the supported Hijri calendar range.");
|
||||||
}
|
}
|
||||||
const lastDay = coreDaysInHijriMonth(h.hy, h.hm, options);
|
const lastDay = coreDaysInHijriMonth(h.hy, h.hm, options);
|
||||||
return utcMidnightToLocalNoon(fromHijriDate(h.hy, h.hm, lastDay, options));
|
return utcMidnightToLocalNoon(fromHijriDate(h.hy, h.hm, lastDay, options));
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
export type { HijriDate, CalendarEngine, ConversionOptions } from 'hijri-core';
|
export type { HijriDate, CalendarEngine, ConversionOptions } from "hijri-core";
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue