From f2609129272791123563d2c63c534e5bea88c9cf Mon Sep 17 00:00:00 2001 From: Aric Camarata Date: Sun, 31 May 2026 08:47:50 -0400 Subject: [PATCH] ci: fix eslint config files pattern, add @typescript-eslint direct devDeps, fix prettier formatting --- eslint.config.mjs | 16 +++++++----- package.json | 2 ++ pnpm-lock.yaml | 6 +++++ src/index.ts | 62 +++++++++++++++++++++++------------------------ src/types.ts | 2 +- 5 files changed, 50 insertions(+), 38 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index 442dce0..5e15f22 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -4,13 +4,17 @@ import eslintConfigPrettier from 'eslint-config-prettier'; import { typescript } from '@acamarata/eslint-config'; export default [ - { - plugins: { '@typescript-eslint': tsPlugin }, - languageOptions: { parser: tsParser }, - }, - ...typescript, - eslintConfigPrettier, { 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'] }, ]; diff --git a/package.json b/package.json index 9562f56..eb4b9e5 100644 --- a/package.json +++ b/package.json @@ -63,6 +63,8 @@ "@acamarata/tsconfig": "^0.1.0", "@eslint/js": "^10.0.1", "@types/node": "^25.3.5", + "@typescript-eslint/eslint-plugin": "^8.56.1", + "@typescript-eslint/parser": "^8.56.1", "c8": "^10.1.3", "eslint": "^10.0.3", "eslint-config-prettier": "^10.1.8", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7807294..a9c10ed 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -23,6 +23,12 @@ importers: '@types/node': specifier: ^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: specifier: ^10.1.3 version: 10.1.3 diff --git a/src/index.ts b/src/index.ts index 6efdffc..37cf7a9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -9,11 +9,11 @@ import { hwLong, hwShort, 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 @@ -122,7 +122,7 @@ export function getDaysInHijriMonth(hy: number, hm: number, options?: Conversion */ export function getHijriMonthName( hm: number, - length: 'long' | 'medium' | 'short' = 'long', + length: "long" | "medium" | "short" = "long", ): string { if (hm < 1 || hm > 12) { throw new RangeError(`Hijri month must be 1–12, got ${hm}.`); @@ -130,9 +130,9 @@ export function getHijriMonthName( const idx = hm - 1; // 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 - if (length === 'medium') return hmMedium[idx]!; + if (length === "medium") return hmMedium[idx]!; // 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 return hmLong[idx]!; } @@ -145,11 +145,11 @@ export function getHijriMonthName( * @param date - Any Gregorian `Date`. * @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 // Non-null: day is always 0-6 from getDay(), within hw* array bounds. // 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, ): string { const h = coreToHijri(date, options); - if (!h) return ''; + if (!h) return ""; const day = date.getDay(); // 0–6 return formatStr.replace(TOKEN_RE, (token): string => { switch (token) { - case 'iYYYY': + case "iYYYY": return String(h.hy); - case 'iYY': - return String(h.hy).slice(-2).padStart(2, '0'); - case 'iMMMM': + case "iYY": + return String(h.hy).slice(-2).padStart(2, "0"); + case "iMMMM": // 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 return hmLong[h.hm - 1]!; - case 'iMMM': + case "iMMM": // eslint-disable-next-line @typescript-eslint/no-non-null-assertion return hmMedium[h.hm - 1]!; - case 'iMM': - return String(h.hm).padStart(2, '0'); - case 'iM': + case "iMM": + return String(h.hm).padStart(2, "0"); + case "iM": return String(h.hm); - case 'iDD': - return String(h.hd).padStart(2, '0'); - case 'iD': + case "iDD": + return String(h.hd).padStart(2, "0"); + case "iD": return String(h.hd); - case 'iEEEE': + case "iEEEE": // Non-null: day is always 0-6 from getDay(), within hwLong bounds. // eslint-disable-next-line @typescript-eslint/no-non-null-assertion return hwLong[day]!; - case 'iEEE': + case "iEEE": // eslint-disable-next-line @typescript-eslint/no-non-null-assertion return hwShort[day]!; - case 'iE': + case "iE": // eslint-disable-next-line @typescript-eslint/no-non-null-assertion return String(hwNumeric[day]!); - case 'ioooo': - return 'AH'; - case 'iooo': - return 'AH'; + case "ioooo": + return "AH"; + case "iooo": + return "AH"; default: return token; } @@ -267,7 +267,7 @@ function utcMidnightToLocalNoon(d: Date): Date { export function addHijriMonths(date: Date, months: number, options?: ConversionOptions): Date { const h = coreToHijri(date, options); 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 @@ -293,7 +293,7 @@ export function addHijriMonths(date: Date, months: number, options?: ConversionO export function addHijriYears(date: Date, years: number, options?: ConversionOptions): Date { const h = coreToHijri(date, options); 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; @@ -315,7 +315,7 @@ export function addHijriYears(date: Date, years: number, options?: ConversionOpt export function startOfHijriMonth(date: Date, options?: ConversionOptions): Date { const h = coreToHijri(date, options); 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)); } @@ -328,7 +328,7 @@ export function startOfHijriMonth(date: Date, options?: ConversionOptions): Date export function endOfHijriMonth(date: Date, options?: ConversionOptions): Date { const h = coreToHijri(date, options); 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); return utcMidnightToLocalNoon(fromHijriDate(h.hy, h.hm, lastDay, options)); diff --git a/src/types.ts b/src/types.ts index f47c7ee..9d5ba03 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1 +1 @@ -export type { HijriDate, CalendarEngine, ConversionOptions } from 'hijri-core'; +export type { HijriDate, CalendarEngine, ConversionOptions } from "hijri-core";