diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml new file mode 100644 index 0000000..90208d4 --- /dev/null +++ b/.github/workflows/deploy-docs.yml @@ -0,0 +1,59 @@ +name: Deploy VitePress site to GitHub Pages + +on: + push: + branches: + - master + paths: + - 'docs/**' + - '.github/workflows/deploy-docs.yml' + workflow_dispatch: + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: pages + cancel-in-progress: false + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 18 + cache: npm + + - name: Setup Pages + uses: actions/configure-pages@v4 + + - name: Install dependencies + run: npm ci + + - name: Build with VitePress + run: npm run docs:build + + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: docs/.vitepress/dist + + deploy: + needs: build + runs-on: ubuntu-latest + permissions: + pages: write + id-token: write + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 \ No newline at end of file diff --git a/.gitignore b/.gitignore index 56de452..b0e806e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ .DS_Store .claude/ CLAUDE.md +cache/ coverage/ dist/ -node_modules/ +node_modules/ \ No newline at end of file diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts new file mode 100644 index 0000000..61c68d7 --- /dev/null +++ b/docs/.vitepress/config.ts @@ -0,0 +1,90 @@ +import { defineConfig } from 'vitepress'; + +export default defineConfig({ + title: 'date-and-time', + description: 'The simplest, most intuitive date and time library', + base: '/date-and-time/', + ignoreDeadLinks: true, + + head: [ + ['link', { rel: 'icon', href: '/date-and-time/favicon.ico' }] + ], + + themeConfig: { + logo: '/logo.png', + + nav: [ + { text: 'Guide', link: '/guide/' }, + { text: 'API Reference', link: '/api/' }, + { text: 'Locales', link: '/locales' }, + { text: 'Timezones', link: '/timezones' }, + { text: 'Plugins', link: '/plugins' }, + { text: 'Migration', link: '/migration' }, + { + text: 'Links', + items: [ + { text: 'GitHub', link: 'https://github.com/knowledgecode/date-and-time' }, + { text: 'npm', link: 'https://www.npmjs.com/package/date-and-time' } + ] + } + ], + + sidebar: { + '/guide/': [ + { + text: 'Getting Started', + items: [ + { text: 'Introduction', link: '/guide/' }, + { text: 'Installation', link: '/guide/installation' }, + { text: 'Quick Start', link: '/guide/quick-start' } + ] + } + ], + '/api/': [ + { + text: 'Core Functions', + items: [ + { text: 'Overview', link: '/api/' }, + { text: 'format()', link: '/api/format' }, + { text: 'parse()', link: '/api/parse' }, + { text: 'compile()', link: '/api/compile' }, + { text: 'preparse()', link: '/api/preparse' }, + { text: 'isValid()', link: '/api/isValid' }, + { text: 'transform()', link: '/api/transform' }, + { text: 'addYears()', link: '/api/addYears' }, + { text: 'addMonths()', link: '/api/addMonths' }, + { text: 'addDays()', link: '/api/addDays' }, + { text: 'addHours()', link: '/api/addHours' }, + { text: 'addMinutes()', link: '/api/addMinutes' }, + { text: 'addSeconds()', link: '/api/addSeconds' }, + { text: 'addMilliseconds()', link: '/api/addMilliseconds' }, + { text: 'subtract()', link: '/api/subtract' }, + { text: 'isLeapYear()', link: '/api/isLeapYear' }, + { text: 'isSameDay()', link: '/api/isSameDay' }, + ] + } + ] + }, + + socialLinks: [ + { icon: 'github', link: 'https://github.com/knowledgecode/date-and-time' } + ], + + footer: { + message: 'Released under the MIT License.', + copyright: 'Copyright © 2015 KNOWLEDGECODE' + }, + + search: { + provider: 'local' + } + }, + + markdown: { + theme: { + light: 'github-light', + dark: 'github-dark' + }, + lineNumbers: true + } +}) diff --git a/docs/api/addDays.md b/docs/api/addDays.md new file mode 100644 index 0000000..369fc91 --- /dev/null +++ b/docs/api/addDays.md @@ -0,0 +1,128 @@ +# addDays() + +Adds or subtracts days from a Date object. Handles month boundaries, leap years, and daylight saving time transitions properly. + +## Syntax + +```typescript +addDays(dateObj, days[, timeZone]) +``` + +### Parameters + +| Parameter | Type | Required | Description | +|-----------|------|----------|-------------| +| `dateObj` | `Date` | Yes | The base Date object | +| `days` | `number` | Yes | Number of days to add (positive) or subtract (negative) | +| `timeZone` | `TimeZone \| 'UTC'` | No | Timezone for the calculation | + +### Returns + +`Date` - A new Date object with the specified number of days added or subtracted + +## Basic Examples + +### Adding and Subtracting Days + +```typescript +import { addDays } from 'date-and-time'; + +const date = new Date(2024, 7, 15); // August 15, 2024 + +// Add days +const future = addDays(date, 10); +console.log(future); // August 25, 2024 + +// Subtract days +const past = addDays(date, -5); +console.log(past); // August 10, 2024 +``` + +### Daylight Saving Time Aware Calculations + +```typescript +import { addDays } from 'date-and-time'; +import New_York from 'date-and-time/timezones/America/New_York'; + +// Working with specific timezones +const nyDate = new Date('2024-03-10T05:00:00Z'); // March 10, 2024 05:00 UTC (DST transition day) + +// Add 30 days in New York timezone +const futureNY = addDays(nyDate, 30, New_York); +console.log(futureNY); // April 9, 2024 04:00 UTC (EDT, DST adjusted) + +// UTC calculation for comparison +const futureUTC = addDays(nyDate, 30, 'UTC'); +console.log(futureUTC); // April 9, 2024 05:00 UTC (same time, no DST adjustment) +``` + +## Use Cases + +### Work Day Calculations + +```typescript +function addBusinessDays(date: Date, businessDays: number): Date { + let result = new Date(date); + let daysToAdd = businessDays; + + while (daysToAdd > 0) { + result = addDays(result, 1); + const dayOfWeek = result.getDay(); + + // Skip weekends (0 = Sunday, 6 = Saturday) + if (dayOfWeek !== 0 && dayOfWeek !== 6) { + daysToAdd--; + } + } + + return result; +} + +const friday = new Date(2024, 7, 23); // August 23, 2024 (Friday) +const nextBusinessDay = addBusinessDays(friday, 1); +console.log(nextBusinessDay); // August 26, 2024 (Monday) +``` + +### Date Range Generation + +```typescript +function generateDateRange(startDate: Date, endDate: Date): Date[] { + const dates: Date[] = []; + let currentDate = new Date(startDate); + + while (currentDate <= endDate) { + dates.push(new Date(currentDate)); + currentDate = addDays(currentDate, 1); + } + + return dates; +} + +const start = new Date(2024, 7, 28); // August 28, 2024 +const end = new Date(2024, 8, 3); // September 3, 2024 +const dateRange = generateDateRange(start, end); +console.log(dateRange); +// [Aug 28, Aug 29, Aug 30, Aug 31, Sep 1, Sep 2, Sep 3] +``` + +## Immutability + +`addDays()` does not modify the original Date object: + +```typescript +const originalDate = new Date(2024, 7, 15); +const modifiedDate = addDays(originalDate, 10); + +console.log(originalDate); // August 15, 2024 (unchanged) +console.log(modifiedDate); // August 25, 2024 (new object) +``` + +## See Also + +- [`addYears()`](./addYears) - Add/subtract years +- [`addMonths()`](./addMonths) - Add/subtract months +- [`addHours()`](./addHours) - Add/subtract hours +- [`addMinutes()`](./addMinutes) - Add/subtract minutes +- [`addSeconds()`](./addSeconds) - Add/subtract seconds +- [`addMilliseconds()`](./addMilliseconds) - Add/subtract milliseconds +- [`subtract()`](./subtract) - Calculate differences with Duration objects diff --git a/docs/api/addHours.md b/docs/api/addHours.md new file mode 100644 index 0000000..e356934 --- /dev/null +++ b/docs/api/addHours.md @@ -0,0 +1,127 @@ +# addHours() + +Adds or subtracts hours from a Date object. + +## Syntax + +```typescript +addHours(dateObj, hours) +``` + +### Parameters + +| Parameter | Type | Required | Description | +|-----------|------|----------|-------------| +| `dateObj` | `Date` | Yes | The base Date object | +| `hours` | `number` | Yes | Number of hours to add (positive) or subtract (negative) | + +### Returns + +`Date` - A new Date object with the specified number of hours added or subtracted + +## Basic Examples + +### Adding and Subtracting Hours + +```typescript +import { addHours } from 'date-and-time'; + +const date = new Date(2024, 7, 15, 14, 30, 45); // August 15, 2024 14:30:45 + +// Add hours +const future = addHours(date, 6); +console.log(future); // August 15, 2024 20:30:45 + +// Subtract hours +const past = addHours(date, -3); +console.log(past); // August 15, 2024 11:30:45 +``` + +## Use Cases + +### Work Hours Calculation + +```typescript +function addWorkingHours(startDate: Date, workHours: number): Date { + // Assuming 8-hour work days, 5 days a week + const hoursPerDay = 8; + const result = new Date(startDate); + let remainingHours = workHours; + + while (remainingHours > 0) { + const dayOfWeek = result.getDay(); + + // Skip weekends + if (dayOfWeek === 0 || dayOfWeek === 6) { + result.setDate(result.getDate() + 1); + continue; + } + + const hoursToAdd = Math.min(remainingHours, hoursPerDay); + const newTime = addHours(result, hoursToAdd); + result.setTime(newTime.getTime()); + remainingHours -= hoursToAdd; + + if (remainingHours > 0) { + // Move to next day, reset to start of work day + result.setDate(result.getDate() + 1); + result.setHours(9, 0, 0, 0); // 9 AM start + } + } + + return result; +} + +const projectStart = new Date(2024, 7, 15, 9, 0); // August 15, 2024 09:00 +const completion = addWorkingHours(projectStart, 24); // 24 working hours +console.log(completion); +``` + +### Shift Scheduling + +```typescript +function generateShiftSchedule(startDate: Date, shiftHours: number, numberOfShifts: number): Date[] { + const shifts: Date[] = []; + let currentStart = new Date(startDate); + + for (let i = 0; i < numberOfShifts; i++) { + shifts.push(new Date(currentStart)); + currentStart = addHours(currentStart, shiftHours); + } + + return shifts; +} + +const firstShift = new Date(2024, 7, 15, 6, 0); // August 15, 2024 06:00 +const schedule = generateShiftSchedule(firstShift, 8, 5); // 5 shifts of 8 hours each +console.log(schedule); +// [ +// August 15, 2024 06:00, // Shift 1 +// August 15, 2024 14:00, // Shift 2 +// August 15, 2024 22:00, // Shift 3 +// August 16, 2024 06:00, // Shift 4 +// August 16, 2024 14:00 // Shift 5 +// ] +``` + +## Immutability + +`addHours()` does not modify the original Date object: + +```typescript +const originalDate = new Date(2024, 7, 15, 14, 30); +const modifiedDate = addHours(originalDate, 5); + +console.log(originalDate); // August 15, 2024 14:30:00 (unchanged) +console.log(modifiedDate); // August 15, 2024 19:30:00 (new object) +``` + +## See Also + +- [`addYears()`](./addYears) - Add/subtract years +- [`addMonths()`](./addMonths) - Add/subtract months +- [`addDays()`](./addDays) - Add/subtract days +- [`addMinutes()`](./addMinutes) - Add/subtract minutes +- [`addSeconds()`](./addSeconds) - Add/subtract seconds +- [`addMilliseconds()`](./addMilliseconds) - Add/subtract milliseconds +- [`subtract()`](./subtract) - Calculate differences with Duration objects diff --git a/docs/api/addMilliseconds.md b/docs/api/addMilliseconds.md new file mode 100644 index 0000000..623d389 --- /dev/null +++ b/docs/api/addMilliseconds.md @@ -0,0 +1,124 @@ +# addMilliseconds() + +Adds or subtracts milliseconds from a Date object. + +## Syntax + +```typescript +addMilliseconds(dateObj, milliseconds) +``` + +### Parameters + +| Parameter | Type | Required | Description | +|-----------|------|----------|-------------| +| `dateObj` | `Date` | Yes | The base Date object | +| `milliseconds` | `number` | Yes | Number of milliseconds to add (positive) or subtract (negative) | + +### Returns + +`Date` - A new Date object with the specified number of milliseconds added or subtracted + +## Basic Examples + +### Adding and Subtracting Milliseconds + +```typescript +import { addMilliseconds } from 'date-and-time'; + +const date = new Date(2024, 7, 15, 14, 30, 45, 123); // August 15, 2024 14:30:45.123 + +// Add milliseconds +const future = addMilliseconds(date, 500); +console.log(future); // August 15, 2024 14:30:45.623 + +// Subtract milliseconds +const past = addMilliseconds(date, -200); +console.log(past); // August 15, 2024 14:30:44.923 +``` + +## Use Cases + +### High-Precision Timing + +```typescript +class PrecisionTimer { + private startTime: Date + + start(): void { + this.startTime = new Date(); + } + + elapsedMs(): number { + if (!this.startTime) { + return 0; + } + return Date.now() - this.startTime.getTime(); + } + + addPreciseDelay(baseTime: Date, delayMs: number): Date { + return addMilliseconds(baseTime, delayMs); + } + + scheduleNextExecution(intervalMs: number): Date { + return addMilliseconds(new Date(), intervalMs); + } +} + +const timer = new PrecisionTimer(); + +timer.start(); +// ... perform operations ... +console.log(`Operation took: ${timer.elapsedMs()}ms`); + +const nextRun = timer.scheduleNextExecution(150); // Schedule 150ms from now +console.log(`Next execution at: ${nextRun.toISOString()}`); +``` + +### Animation Frame Scheduling + +```typescript +function createAnimationSchedule(startTime: Date, frameRate: number, duration: number) { + const frameInterval = 1000 / frameRate; // ms per frame + const totalFrames = Math.floor((duration * 1000) / frameInterval); + const schedule: { frame: number, time: Date }[] = []; + + for (let frame = 0; frame < totalFrames; frame++) { + const frameTime = addMilliseconds(startTime, frame * frameInterval); + schedule.push({ frame, time: frameTime }); + } + + return schedule; +} + +const animationStart = new Date(); // Animation starts now +const frames = createAnimationSchedule(animationStart, 60, 2); // 60 FPS for 2 seconds + +console.log(`Animation has ${frames.length} frames`); +console.log('First 5 frames:'); +frames.slice(0, 5).forEach(f => { + console.log(`Frame ${f.frame}: ${f.time.toISOString()}`); +}); +``` + +## Immutability + +`addMilliseconds()` does not modify the original Date object: + +```typescript +const originalDate = new Date(2024, 7, 15, 14, 30, 45, 123); +const modifiedDate = addMilliseconds(originalDate, 500); + +console.log(originalDate); // August 15, 2024 14:30:45.123 (unchanged) +console.log(modifiedDate); // August 15, 2024 14:30:45.623 (new object) +``` + +## See Also + +- [`addYears()`](./addYears) - Add/subtract years +- [`addMonths()`](./addMonths) - Add/subtract months +- [`addDays()`](./addDays) - Add/subtract days +- [`addHours()`](./addHours) - Add/subtract hours +- [`addMinutes()`](./addMinutes) - Add/subtract minutes +- [`addSeconds()`](./addSeconds) - Add/subtract seconds +- [`subtract()`](./subtract) - Calculate differences with Duration objects diff --git a/docs/api/addMinutes.md b/docs/api/addMinutes.md new file mode 100644 index 0000000..c315510 --- /dev/null +++ b/docs/api/addMinutes.md @@ -0,0 +1,134 @@ +# addMinutes() + +Adds or subtracts minutes from a Date object. + +## Syntax + +```typescript +addMinutes(dateObj, minutes) +``` + +### Parameters + +| Parameter | Type | Required | Description | +|-----------|------|----------|-------------| +| `dateObj` | `Date` | Yes | The base Date object | +| `minutes` | `number` | Yes | Number of minutes to add (positive) or subtract (negative) | + +### Returns + +`Date` - A new Date object with the specified number of minutes added or subtracted + +## Basic Examples + +### Adding and Subtracting Minutes + +```typescript +import { addMinutes } from 'date-and-time'; + +const date = new Date(2024, 7, 15, 14, 30, 45); // August 15, 2024 14:30:45 + +// Add minutes +const future = addMinutes(date, 25); +console.log(future); // August 15, 2024 14:55:45 + +// Subtract minutes +const past = addMinutes(date, -15); +console.log(past); // August 15, 2024 14:15:45 +``` + +## Use Cases + +### Appointment Scheduling + +```typescript +function scheduleAppointments(startTime: Date, appointmentLength: number, count: number): Date[] { + const appointments: Date[] = []; + let currentTime = new Date(startTime); + + for (let i = 0; i < count; i++) { + appointments.push(new Date(currentTime)); + currentTime = addMinutes(currentTime, appointmentLength); + } + + return appointments; +} + +const firstAppointment = new Date(2024, 7, 15, 9, 0); // August 15, 2024 09:00 +const schedule = scheduleAppointments(firstAppointment, 30, 6); // 6 appointments, 30 min each +console.log(schedule); +// [ +// August 15, 2024 09:00, +// August 15, 2024 09:30, +// August 15, 2024 10:00, +// August 15, 2024 10:30, +// August 15, 2024 11:00, +// August 15, 2024 11:30 +// ] +``` + +### Pomodoro Timer + +```typescript +class PomodoroTimer { + private workMinutes = 25; + private shortBreakMinutes = 5; + private longBreakMinutes = 15; + + createSession(startTime: Date, cycles: number = 4) { + const schedule: { type: string, start: Date, end: Date }[] = []; + let currentTime = new Date(startTime); + + for (let i = 0; i < cycles; i++) { + // Work session + const workEnd = addMinutes(currentTime, this.workMinutes); + + schedule.push({ + type: 'work', + start: new Date(currentTime), + end: workEnd + }); + currentTime = workEnd; + + // Break session + const breakMinutes = (i === cycles - 1) ? this.longBreakMinutes : this.shortBreakMinutes; + const breakEnd = addMinutes(currentTime, breakMinutes); + + schedule.push({ + type: i === cycles - 1 ? 'long-break' : 'short-break', + start: new Date(currentTime), + end: breakEnd + }); + currentTime = breakEnd; + } + + return schedule; + } +} + +const pomodoro = new PomodoroTimer(); +const session = pomodoro.createSession(new Date(2024, 7, 15, 9, 0)); +console.log(session); +``` + +## Immutability + +`addMinutes()` does not modify the original Date object: + +```typescript +const originalDate = new Date(2024, 7, 15, 14, 30); +const modifiedDate = addMinutes(originalDate, 45); + +console.log(originalDate); // August 15, 2024 14:30:00 (unchanged) +console.log(modifiedDate); // August 15, 2024 15:15:00 (new object) +``` + +## See Also + +- [`addYears()`](./addYears) - Add/subtract years +- [`addMonths()`](./addMonths) - Add/subtract months +- [`addDays()`](./addDays) - Add/subtract days +- [`addHours()`](./addHours) - Add/subtract hours +- [`addSeconds()`](./addSeconds) - Add/subtract seconds +- [`addMilliseconds()`](./addMilliseconds) - Add/subtract milliseconds +- [`subtract()`](./subtract) - Calculate differences with Duration objects diff --git a/docs/api/addMonths.md b/docs/api/addMonths.md new file mode 100644 index 0000000..e7f54ec --- /dev/null +++ b/docs/api/addMonths.md @@ -0,0 +1,143 @@ +# addMonths() + +Adds or subtracts months from a Date object. Handles month boundaries, leap years, and varying month lengths appropriately. + +## Syntax + +```typescript +addMonths(dateObj, months[, timeZone]) +``` + +### Parameters + +| Parameter | Type | Required | Description | +|-----------|------|----------|-------------| +| `dateObj` | `Date` | Yes | The base Date object | +| `months` | `number` | Yes | Number of months to add (positive) or subtract (negative) | +| `timeZone` | `TimeZone \| 'UTC'` | No | Timezone for the calculation | + +### Returns + +`Date` - A new Date object with the specified number of months added or subtracted + +## Basic Examples + +### Adding and Subtracting Months + +```typescript +import { addMonths } from 'date-and-time'; + +const date = new Date(2024, 0, 15); // January 15, 2024 + +// Add months +const future = addMonths(date, 6); +console.log(future); // July 15, 2024 + +// Subtract months +const past = addMonths(date, -3); +console.log(past); // October 15, 2023 +``` + +### Daylight Saving Time Aware Calculations + +```typescript +import { addMonths } from 'date-and-time'; +import New_York from 'date-and-time/timezones/America/New_York'; + +// Working with specific timezones +const nyDate = new Date('2024-03-10T05:00:00Z'); // March 10, 2024 05:00 UTC (DST transition day) + +// Add 6 months in New York timezone +const futureNY = addMonths(nyDate, 6, New_York); +console.log(futureNY); // September 10, 2024 04:00 UTC (EDT, DST adjusted) + +// UTC calculation for comparison +const futureUTC = addMonths(nyDate, 6, 'UTC'); +console.log(futureUTC); // September 10, 2024 05:00 UTC (same time, no DST adjustment) +``` + +## Use Cases + +### Payment Due Dates + +```typescript +function calculatePaymentSchedule(startDate: Date, months: number): Date[] { + const schedule: Date[] = []; + + for (let i = 1; i <= months; i++) { + schedule.push(addMonths(startDate, i)); + } + + return schedule; +} + +const loanStart = new Date(2024, 0, 15); // January 15, 2024 +const payments = calculatePaymentSchedule(loanStart, 12); +console.log(payments); +// [February 15, March 15, April 15, ..., January 15] +``` + +### Quarterly Reports + +```typescript +function getQuarterlyDates(year: number): Date[] { + const q1 = new Date(year, 0, 1); // January 1 + return [ + q1, // Q1 + addMonths(q1, 3), // Q2 - April 1 + addMonths(q1, 6), // Q3 - July 1 + addMonths(q1, 9) // Q4 - October 1 + ]; +} + +const quarters2024 = getQuarterlyDates(2024); +console.log(quarters2024); +``` + +## Edge Cases and Behavior + +### End-of-Month Dates + +```typescript +const endOfMonth = new Date(2024, 0, 31); // January 31, 2024 + +console.log(addMonths(endOfMonth, 1)); // February 29, 2024 (Feb has 29 days) +console.log(addMonths(endOfMonth, 2)); // March 31, 2024 (back to 31st) +console.log(addMonths(endOfMonth, 3)); // April 30, 2024 (April has 30 days) +``` + +### February Edge Cases + +```typescript +// February 28 in non-leap year +const feb28 = new Date(2025, 1, 28); // February 28, 2025 +console.log(addMonths(feb28, 12)); // February 28, 2026 +console.log(addMonths(feb28, -12)); // February 28, 2024 (leap year, but stays at 28) + +// February 29 in leap year +const feb29 = new Date(2024, 1, 29); // February 29, 2024 +console.log(addMonths(feb29, 1)); // March 29, 2024 +console.log(addMonths(feb29, -1)); // January 29, 2024 +``` + +## Immutability + +`addMonths()` does not modify the original Date object: + +```typescript +const originalDate = new Date(2024, 0, 15); +const modifiedDate = addMonths(originalDate, 6); + +console.log(originalDate); // January 15, 2024 (unchanged) +console.log(modifiedDate); // July 15, 2024 (new object) +``` + +## See Also + +- [`addYears()`](./addYears) - Add/subtract years +- [`addDays()`](./addDays) - Add/subtract days +- [`addHours()`](./addHours) - Add/subtract hours +- [`addMinutes()`](./addMinutes) - Add/subtract minutes +- [`addSeconds()`](./addSeconds) - Add/subtract seconds +- [`addMilliseconds()`](./addMilliseconds) - Add/subtract milliseconds +- [`subtract()`](./subtract) - Calculate differences with Duration objects diff --git a/docs/api/addSeconds.md b/docs/api/addSeconds.md new file mode 100644 index 0000000..5f93c14 --- /dev/null +++ b/docs/api/addSeconds.md @@ -0,0 +1,116 @@ +# addSeconds() + +Adds or subtracts seconds from a Date object. + +## Syntax + +```typescript +addSeconds(dateObj, seconds) +``` + +### Parameters + +| Parameter | Type | Required | Description | +|-----------|------|----------|-------------| +| `dateObj` | `Date` | Yes | The base Date object | +| `seconds` | `number` | Yes | Number of seconds to add (positive) or subtract (negative) | + +### Returns + +`Date` - A new Date object with the specified number of seconds added or subtracted + +## Basic Examples + +### Adding and Subtracting Seconds + +```typescript +import { addSeconds } from 'date-and-time'; + +const date = new Date(2024, 7, 15, 14, 30, 45, 123); // August 15, 2024 14:30:45.123 + +// Add seconds +const future = addSeconds(date, 30); +console.log(future); // August 15, 2024 14:31:15.123 + +// Subtract seconds +const past = addSeconds(date, -20); +console.log(past); // August 15, 2024 14:30:25.123 +``` + +## Use Cases + +### Countdown Timers + +```typescript +function createCountdown(duration: number): { start: Date, end: Date, remaining: () => number } { + const start = new Date(); + const end = addSeconds(start, duration); + + return { + start, + end, + remaining: () => Math.max(0, Math.floor((end.getTime() - Date.now()) / 1000)) + }; +} + +const countdown = createCountdown(300); // 5 minute countdown +console.log(`Countdown ends at: ${countdown.end.toLocaleTimeString()}`); +console.log(`Time remaining: ${countdown.remaining()} seconds`); + +// Use in a timer +const updateCountdown = () => { + const remaining = countdown.remaining(); + if (remaining > 0) { + console.log(`${remaining} seconds left`); + setTimeout(updateCountdown, 1000); + } else { + console.log('Time up!'); + } +}; + +updateCountdown(); +``` + +### Precise Time Intervals + +```typescript +function generateTimeIntervals(startTime: Date, intervalSeconds: number, count: number): Date[] { + const intervals: Date[] = []; + let currentTime = new Date(startTime); + + for (let i = 0; i < count; i++) { + intervals.push(new Date(currentTime)); + currentTime = addSeconds(currentTime, intervalSeconds); + } + + return intervals; +} + +const start = new Date(2024, 7, 15, 12, 0, 0); // August 15, 2024 12:00:00 +const intervals = generateTimeIntervals(start, 15, 8); // Every 15 seconds, 8 times + +console.log(intervals); +// [12:00:00, 12:00:15, 12:00:30, 12:00:45, 12:01:00, 12:01:15, 12:01:30, 12:01:45] +``` + +## Immutability + +`addSeconds()` does not modify the original Date object: + +```typescript +const originalDate = new Date(2024, 7, 15, 14, 30, 45); +const modifiedDate = addSeconds(originalDate, 120); + +console.log(originalDate); // August 15, 2024 14:30:45 (unchanged) +console.log(modifiedDate); // August 15, 2024 14:32:45 (new object); +``` + +## See Also + +- [`addYears()`](./addYears) - Add/subtract years +- [`addMonths()`](./addMonths) - Add/subtract months +- [`addDays()`](./addDays) - Add/subtract days +- [`addHours()`](./addHours) - Add/subtract hours +- [`addMinutes()`](./addMinutes) - Add/subtract minutes +- [`addMilliseconds()`](./addMilliseconds) - Add/subtract milliseconds +- [`subtract()`](./subtract) - Calculate differences with Duration objects diff --git a/docs/api/addYears.md b/docs/api/addYears.md new file mode 100644 index 0000000..7e0388c --- /dev/null +++ b/docs/api/addYears.md @@ -0,0 +1,141 @@ +# addYears() + +Adds or subtracts years from a Date object. Handles leap years and edge cases appropriately. + +## Syntax + +```typescript +addYears(dateObj, years[, timeZone]) +``` + +### Parameters + +| Parameter | Type | Required | Description | +|-----------|------|----------|-------------| +| `dateObj` | `Date` | Yes | The base Date object | +| `years` | `number` | Yes | Number of years to add (positive) or subtract (negative) | +| `timeZone` | `TimeZone \| 'UTC'` | No | Timezone for the calculation | + +### Returns + +`Date` - A new Date object with the specified number of years added or subtracted + +## Basic Examples + +### Adding and Subtracting Years + +```typescript +import { addYears } from 'date-and-time'; + +const date = new Date(2024, 0, 15); // January 15, 2024 + +// Add years +const future = addYears(date, 3); +console.log(future); // January 15, 2027 + +// Subtract years +const past = addYears(date, -2); +console.log(past); // January 15, 2022 +``` + +### Daylight Saving Time Aware Calculations + +```typescript +import { addYears } from 'date-and-time'; +import New_York from 'date-and-time/timezones/America/New_York'; + +// Working with specific timezones +const nyDate = new Date('2024-03-10T05:00:00Z'); // March 10, 2024 05:00 UTC (DST transition day) + +// Add years in New York timezone +const futureNY = addYears(nyDate, 1, New_York); +console.log(futureNY); // March 10, 2025 04:00 UTC (EST, DST adjusted) + +// UTC calculation for comparison +const futureUTC = addYears(nyDate, 1, 'UTC'); +console.log(futureUTC); // March 10, 2025 05:00 UTC (same time, no DST adjustment) +``` + +## Use Cases + +### Age Calculation + +```typescript +function calculateAge(birthDate: Date): number { + const now = new Date(); + const thisYear = addYears(birthDate, now.getFullYear() - birthDate.getFullYear()); + + if (thisYear > now) { + return now.getFullYear() - birthDate.getFullYear() - 1; + } + return now.getFullYear() - birthDate.getFullYear(); +} + +const birthDate = new Date(1990, 6, 15); // July 15, 1990; +console.log(calculateAge(birthDate)); // Current age +``` + +### Financial Year Calculations + +```typescript +function getFinancialYearEnd(date: Date): Date { + const currentYear = date.getFullYear(); + const financialYearEnd = new Date(currentYear, 2, 31); // March 31 + + if (date <= financialYearEnd) { + return financialYearEnd; + } else { + return addYears(financialYearEnd, 1); // Next year's March 31 + } +} + +const someDate = new Date(2024, 5, 15); // June 15, 2024 +console.log(getFinancialYearEnd(someDate)); // March 31, 2025 +``` + +## Edge Cases and Behavior + +### February 29 Handling + +```typescript +// Starting from February 29 (leap year) +const feb29 = new Date(2024, 1, 29); // February 29, 2024 + +// Adding to non-leap years +console.log(addYears(feb29, 1)); // February 28, 2025 +console.log(addYears(feb29, 2)); // February 28, 2026 +console.log(addYears(feb29, 3)); // February 28, 2027 +console.log(addYears(feb29, 4)); // February 29, 2028 (leap year) +``` + +### Negative Years + +```typescript +const date = new Date(2024, 6, 15); // July 15, 2024 + +// Go back in time +console.log(addYears(date, -10)); // July 15, 2014 +console.log(addYears(date, -100)); // July 15, 1924 +``` + +## Immutability + +`addYears()` does not modify the original Date object: + +```typescript +const originalDate = new Date(2024, 0, 15); +const modifiedDate = addYears(originalDate, 5); + +console.log(originalDate); // January 15, 2024 (unchanged) +console.log(modifiedDate); // January 15, 2029 (new object) +``` + +## See Also + +- [`addMonths()`](./addMonths) - Add/subtract months +- [`addDays()`](./addDays) - Add/subtract days +- [`addHours()`](./addHours) - Add/subtract hours +- [`addMinutes()`](./addMinutes) - Add/subtract minutes +- [`addSeconds()`](./addSeconds) - Add/subtract seconds +- [`addMilliseconds()`](./addMilliseconds) - Add/subtract milliseconds +- [`subtract()`](./subtract) - Calculate differences with Duration objects diff --git a/docs/api/compile.md b/docs/api/compile.md new file mode 100644 index 0000000..5d621d2 --- /dev/null +++ b/docs/api/compile.md @@ -0,0 +1,291 @@ +# compile() + +Precompiles a format string into a reusable compiled object for improved performance when the same format pattern is used repeatedly. + +## Syntax + +```typescript +compile(formatString) +``` + +### Parameters + +| Parameter | Type | Required | Description | +|-----------|------|----------|-------------| +| `formatString` | `string` | Yes | The format pattern to compile | + +### Returns + +`CompiledObject` - A compiled format object that can be reused with `format()` and `parse()` + +## Basic Usage + +```typescript +import { compile, format, parse } from 'date-and-time'; + +// Compile once +const pattern = compile('YYYY-MM-DD HH:mm:ss'); + +// Use multiple times - much faster than parsing the format string each time +const date1 = new Date(2025, 7, 23, 14, 30, 45); +const date2 = new Date(2025, 7, 24, 9, 15, 30); + +const formatted1 = format(date1, pattern); // => 2025-08-23 14:30:45 +const formatted2 = format(date2, pattern); // => 2025-08-24 09:15:30 + +// Also works with parse() +const parsed = parse('2025-08-25 16:20:10', pattern); +``` + +## Performance Benefits + +The `compile()` function provides significant performance improvements for repeated operations: + +### Without Compilation (Slower) + +```typescript +import { format } from 'date-and-time'; + +const dates = Array.from({ length: 1000 }, () => new Date()); + +// Format string is parsed 1000 times +dates.forEach(date => { + format(date, 'YYYY-MM-DD HH:mm:ss.SSS [GMT]ZZ'); +}); +``` + +### With Compilation (Faster) + +```typescript +import { format, compile } from 'date-and-time'; + +const dates = Array.from({ length: 1000 }, () => new Date()); +const pattern = compile('YYYY-MM-DD HH:mm:ss.SSS [GMT]ZZ'); + +// Format string is compiled once, reused 1000 times +dates.forEach(date => { + format(date, pattern); // Much faster! +}); +``` + +## Real-world Examples + +### Logging System + +```typescript +import { compile, format } from 'date-and-time'; + +class Logger { + private timestampPattern = compile('YYYY-MM-DD HH:mm:ss.SSS'); + + log(level: string, message: string) { + const timestamp = format(new Date(), this.timestampPattern); + console.log(`[${timestamp}] ${level.toUpperCase()}: ${message}`); + } +} + +const logger = new Logger(); +logger.log('info', 'Application started'); +logger.log('error', 'Database connection failed'); +// [2025-08-23 14:30:45.123] INFO: Application started +// [2025-08-23 14:30:45.124] ERROR: Database connection failed +``` + +### Template Engine Integration + +```typescript +import { compile, format } from 'date-and-time'; + +class EmailTemplateEngine { + private patterns = { + timestamp: compile('YYYY-MM-DD HH:mm:ss'), + friendly: compile('MMMM D, YYYY [at] h:mm A'), + fileDate: compile('YYYY-MM-DD') + }; + + generateEmail(user: string, data: any): string { + const now = new Date(); + + return ` + Dear ${user}, + + This report was generated on ${format(now, this.patterns.friendly)}. + + System timestamp: ${format(now, this.patterns.timestamp)} + Report date: ${format(data.reportDate, this.patterns.fileDate)} + + Best regards, + System + `.trim(); + } +} + +const engine = new EmailTemplateEngine(); +const email = engine.generateEmail('John', { + reportDate: new Date(2025, 7, 23) +}); +``` + +### API Response Formatting + +```typescript +import { compile, format } from 'date-and-time'; + +class ApiService { + private isoPattern = compile('YYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); + private friendlyPattern = compile('MMMM D, YYYY [at] h:mm A'); + + formatResponse(data: any[]) { + return data.map(item => ({ + ...item, + createdAt: format(item.createdAt, this.isoPattern, { timeZone: 'UTC' }), + createdAtFriendly: format(item.createdAt, this.friendlyPattern) + })); + } +} +``` + +### Batch File Operations + +```typescript +import { compile, format } from 'date-and-time'; +import { writeFileSync } from 'fs'; + +const filenamePattern = compile('YYYY-MM-DD_HH-mm-ss'); + +function generateReports(data: any[]) { + const timestamp = format(new Date(), filenamePattern); + + data.forEach((report, index) => { + const filename = `report_${index}_${timestamp}.json`; + writeFileSync(filename, JSON.stringify(report)); + }); +} +``` + +## Advanced Usage + +### Multiple Compiled Patterns + +```typescript +import { compile, format } from 'date-and-time'; +import en from 'date-and-time/locales/en'; +import ja from 'date-and-time/locales/ja'; + +class MultiFormatHandler { + private patterns = { + iso: compile('YYYY-MM-DD[T]HH:mm:ss[Z]'), + friendly: compile('MMMM D, YYYY [at] h:mm A'), + japanese: compile('YYYY年M月D日(ddd) HH:mm'), + filename: compile('YYYYMMDD_HHmmss') + }; + + format(date: Date, type: keyof typeof this.patterns) { + const pattern = this.patterns[type]; + + switch (type) { + case 'iso': + return format(date, pattern, { timeZone: 'UTC' }); + case 'japanese': + return format(date, pattern, { locale: ja }); + default: + return format(date, pattern); + } + } +} + +const handler = new MultiFormatHandler(); +const date = new Date(); + +console.log(handler.format(date, 'iso')); // => 2025-08-23T14:30:45Z +console.log(handler.format(date, 'friendly')); // => August 23, 2025 at 2:30 PM +console.log(handler.format(date, 'japanese')); // => 2025年8月23日(土) 14:30 +console.log(handler.format(date, 'filename')); // => 20250823_143045 +``` + +### Conditional Compilation + +```typescript +import { compile, format } from 'date-and-time'; + +class SmartFormatter { + private cache = new Map(); + + private getCompiledPattern(formatString: string) { + if (!this.cache.has(formatString)) { + this.cache.set(formatString, compile(formatString)); + } + return this.cache.get(formatString); + } + + format(date: Date, formatString: string, options?: any) { + const pattern = this.getCompiledPattern(formatString); + return format(date, pattern, options); + } +} + +const formatter = new SmartFormatter(); + +// First call compiles the pattern +formatter.format(new Date(), 'YYYY-MM-DD'); + +// Subsequent calls reuse the compiled pattern +formatter.format(new Date(), 'YYYY-MM-DD'); // Faster! +``` + +## Best Practices + +### 1. Compile Once, Use Many Times + +```typescript +// ✅ Good - compile once +const pattern = compile('YYYY-MM-DD HH:mm:ss'); +for (const date of dates) { + format(date, pattern); +} + +// ❌ Bad - compiles every time +for (const date of dates) { + format(date, 'YYYY-MM-DD HH:mm:ss'); +} +``` + +### 2. Cache Compiled Patterns + +```typescript +// ✅ Good - cached patterns +class DateFormatter { + private static patterns = { + iso: compile('YYYY-MM-DD[T]HH:mm:ss[Z]'), + short: compile('MM/DD/YYYY'), + long: compile('MMMM D, YYYY') + }; + + static format(date: Date, type: keyof typeof DateFormatter.patterns) { + return format(date, DateFormatter.patterns[type]); + } +} +``` + +### 3. Lazy Compilation + +```typescript +// ✅ Good - lazy compilation for dynamic patterns +class DynamicFormatter { + private cache = new Map(); + + format(date: Date, pattern: string) { + if (!this.cache.has(pattern)) { + this.cache.set(pattern, compile(pattern)); + } + return format(date, this.cache.get(pattern)!); + } +} +``` + +## See Also + +- [`format()`](./format) - Format Date objects using compiled patterns +- [`parse()`](./parse) - Parse date strings using compiled patterns +- [`preparse()`](./preparse) - Parse and return intermediate parsing results +- [`transform()`](./transform) - Transform date strings between formats diff --git a/docs/api/format.md b/docs/api/format.md new file mode 100644 index 0000000..809ba0d --- /dev/null +++ b/docs/api/format.md @@ -0,0 +1,340 @@ +# format() + +Formats a Date object according to the specified format string. + +## Syntax + +```typescript +format(dateObj, formatString[, options]) +``` + +### Parameters + +| Parameter | Type | Required | Description | +|-----------|------|----------|-------------| +| `dateObj` | `Date` | Yes | The Date object to format | +| `formatString` | `string \| CompiledObject` | Yes | The format string or compiled object | +| `options` | `FormatterOptions` | No | Formatter options for customization | + +### Returns + +`string` - The formatted date string + +## Basic Examples + +```typescript +import { format } from 'date-and-time'; + +const now = new Date(); + +format(now, 'YYYY/MM/DD HH:mm:ss'); +// => 2025/08/23 14:30:45 + +format(now, 'ddd, MMM DD YYYY'); +// => Sat, Aug 23 2025 + +format(now, 'hh:mm A [GMT]Z'); +// => 02:30 PM GMT+0900 +``` + +## Format Tokens + +### Date Tokens + +| Token | Description | Output Examples | +|-------|-------------|-----------------| +| `YYYY` | 4-digit year | 0999, 2015 | +| `YY` | 2-digit year | 99, 01, 15 | +| `Y` | Year without zero padding | 2, 44, 888, 2015 | +| `MMMM` | Full month name | January, December | +| `MMM` | Short month name | Jan, Dec | +| `MM` | Month (01-12) | 01, 12 | +| `M` | Month without zero padding | 1, 12 | +| `DD` | Day (01-31) | 02, 31 | +| `D` | Day without zero padding | 2, 31 | + +### Day of Week Tokens + +| Token | Description | Output Examples | +|-------|-------------|-----------------| +| `dddd` | Full day name | Friday, Sunday | +| `ddd` | Short day name | Fri, Sun | +| `dd` | Very short day name | Fr, Su | + +### Time Tokens + +| Token | Description | Output Examples | +|-------|-------------|-----------------| +| `HH` | Hour in 24-hour format | 23, 08 | +| `H` | Hour in 24-hour format (no padding) | 23, 8 | +| `hh` | Hour in 12-hour format | 11, 08 | +| `h` | Hour in 12-hour format (no padding) | 11, 8 | +| `mm` | Minutes | 14, 07 | +| `m` | Minutes without zero padding | 14, 7 | +| `ss` | Seconds | 05, 10 | +| `s` | Seconds without zero padding | 5, 10 | +| `SSS` | 3-digit milliseconds | 753, 022 | +| `SS` | 2-digit milliseconds | 75, 02 | +| `S` | 1-digit milliseconds | 7, 0 | + +### AM/PM Tokens + +| Token | Description | Output Examples | +|-------|-------------|-----------------| +| `A` | Uppercase AM/PM | AM, PM | +| `AA` | Uppercase AM/PM (with periods) | A.M., P.M. | +| `a` | Lowercase AM/PM | am, pm | +| `aa` | Lowercase AM/PM (with periods) | a.m., p.m. | + +### Timezone Tokens + +| Token | Description | Output Examples | +|-------|-------------|-----------------| +| `Z` | Timezone offset | +0100, -0800 | +| `ZZ` | Timezone offset with colon | +01:00, -08:00 | + +### Plugin Tokens + +Additional tokens available with plugins: + +| Token | Description | Output Examples | Plugin Required | +|-------|-------------|-----------------|-----------------| +| `DDD` | Ordinal representation | 1st, 2nd, 3rd | ordinal | +| `z` | Short timezone name | PST, EST | zonename | +| `zz` | Long timezone name | Pacific Standard Time | zonename | + +## FormatterOptions + +The `FormatterOptions` object allows you to customize the formatting behavior: + +### locale + +**Type**: `Locale` +**Default**: `en` (English) + +Specifies the locale for localized formatting of month names, day names, and meridiem indicators. + +```typescript +import { format } from 'date-and-time'; +import ja from 'date-and-time/locales/ja'; +import es from 'date-and-time/locales/es'; + +const date = new Date(); + +// Japanese formatting +format(date, 'YYYY年M月D日(ddd)', { locale: ja }); +// => 2025年8月23日(土) + +// Spanish formatting +format(date, 'dddd, D [de] MMMM [de] YYYY', { locale: es }); +// => sábado, 23 de agosto de 2025 +``` + +For a complete list of all supported locales with import examples, see [Supported Locales](../locales). + +### timeZone + +**Type**: `TimeZone | "UTC"` +**Default**: `undefined` (local timezone) + +Converts the date to the specified timezone before formatting. + +```typescript +import { format } from 'date-and-time'; +import Tokyo from 'date-and-time/timezones/Asia/Tokyo'; +import New_York from 'date-and-time/timezones/America/New_York'; + +const date = new Date(); + +// Format in Tokyo timezone +format(date, 'YYYY-MM-DD HH:mm:ss [JST]', { timeZone: Tokyo }); +// => 2025-08-23 23:30:45 JST + +// Format in New York timezone +format(date, 'YYYY-MM-DD HH:mm:ss [EST]', { timeZone: New_York }); +// => 2025-08-23 09:30:45 EST + +// Format in UTC +format(date, 'YYYY-MM-DD HH:mm:ss [UTC]', { timeZone: 'UTC' }); +// => 2025-08-23 14:30:45 UTC +``` + +For a complete list of all supported timezones with import examples, see [Supported Timezones](../timezones). + +### numeral + +**Type**: `Numeral` +**Default**: `latn` (Latin numerals) + +Specifies the numeral system for formatting numbers. + +```typescript +import { format } from 'date-and-time'; +import arab from 'date-and-time/numerals/arab'; +import beng from 'date-and-time/numerals/beng'; + +const date = new Date(); + +// Arabic-Indic numerals +format(date, 'DD/MM/YYYY', { numeral: arab }); +// => ٠٨/٠٧/٢٠٢٥ + +// Bengali numerals +format(date, 'DD/MM/YYYY', { numeral: beng }); +// => ০৮/০৭/২০২৫ +``` + +**Available numeral systems:** + +- `latn` - Latin numerals (0-9) - default +- `arab` - Arabic-Indic numerals (٠-٩) +- `arabext` - Extended Arabic-Indic numerals (۰-۹) +- `beng` - Bengali numerals (০-৯) +- `mymr` - Myanmar numerals (၀-၉) + +### calendar + +**Type**: `"gregory" | "buddhist"` +**Default**: `"gregory"` + +Specifies the calendar system for date calculations. + +```typescript +import { format } from 'date-and-time'; + +const date = new Date(); + +// Gregorian calendar (default) +format(date, 'MMMM D, YYYY'); +// => August 23, 2025 + +// Buddhist calendar (543 years ahead) +format(date, 'MMMM D, YYYY', { calendar: 'buddhist' }); +// => August 23, 2568 +``` + +### hour12 + +**Type**: `"h11" | "h12"` +**Default**: `"h12"` + +Controls the 12-hour format interpretation. Use h11 for 11-hour format (0-11) or h12 for 12-hour format (1-12). + +```typescript +import { format } from 'date-and-time'; + +const midnight = new Date(2025, 7, 23, 0, 30, 0); // 12:30 AM + +// h12 format (1-12) +format(midnight, 'h:mm A', { hour12: 'h12' }); +// => 12:30 AM + +// h11 format (0-11) +format(midnight, 'h:mm A', { hour12: 'h11' }); +// => 0:30 AM +``` + +### hour24 + +**Type**: `"h23" | "h24"` +**Default**: `"h23"` + +Controls the 24-hour format interpretation. Use h23 for 23-hour format (0-23) or h24 for 24-hour format (1-24). + +```typescript +import { format } from 'date-and-time'; + +const midnight = new Date(2025, 7, 23, 0, 30, 0); + +// h23 format (0-23) +format(midnight, 'H:mm', { hour24: 'h23' }); +// => 0:30 + +// h24 format (1-24) +format(midnight, 'H:mm', { hour24: 'h24' }); +// => 24:30 +``` + +## Advanced Usage + +### Comments in Format Strings + +Parts of the format string enclosed in square brackets are output literally: + +```typescript +import { format } from 'date-and-time'; + +const date = new Date(); + +format(date, '[Today is] dddd, MMMM D, YYYY'); +// => Today is Saturday, August 23, 2025 + +format(date, 'YYYY-MM-DD[T]HH:mm:ss[Z]'); +// => 2025-08-23T14:30:45Z + +format(date, '[Report generated on] YYYY/MM/DD [at] HH:mm'); +// => Report generated on 2025/08/23 at 14:30 +``` + +### Complex Localized Formatting + +```typescript +import { format } from 'date-and-time'; +import ja from 'date-and-time/locales/ja'; +import Tokyo from 'date-and-time/timezones/Asia/Tokyo'; + +const date = new Date(); + +// Japanese with timezone +format(date, 'YYYY年MMMM月D日dddd Ah:mm:ss [GMT]Z', { + timeZone: Tokyo, + locale: ja +}); +// => 2025年8月23日土曜日 午後11:30:45 GMT+0900 +``` + +### Business and Technical Formats + +```typescript +import { format } from 'date-and-time'; + +const date = new Date(); + +// ISO 8601 format +format(date, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]', { timeZone: 'UTC' }); +// => 2025-08-23T14:30:45.123Z + +// RFC 2822 format +format(date, 'ddd, DD MMM YYYY HH:mm:ss ZZ'); +// => Sat, 23 Aug 2025 14:30:45 +09:00 + +// Log timestamp +format(date, '[YYYY-MM-DD HH:mm:ss.SSS]'); +// => [2025-08-23 14:30:45.123] + +// File naming +format(date, 'YYYYMMDD_HHmmss'); +// => 20250823_143045 +``` + +## Performance Considerations + +For repeated formatting with the same pattern, use [`compile()`](./compile) to precompile the format string: + +```typescript +import { format, compile } from 'date-and-time'; + +// Compile once +const pattern = compile('YYYY-MM-DD HH:mm:ss'); + +// Reuse for better performance +const dates = [new Date(), new Date(), new Date()]; +dates.forEach(date => { + console.log(format(date, pattern)); +}); +``` + +## See Also + +- [`compile()`](./compile) - Precompile format patterns for performance +- [`transform()`](./transform) - Transform date strings between formats diff --git a/docs/api/index.md b/docs/api/index.md new file mode 100644 index 0000000..d5d3a72 --- /dev/null +++ b/docs/api/index.md @@ -0,0 +1,248 @@ +# API Reference + +Welcome to the comprehensive API reference for date-and-time v4.x. This section provides detailed documentation for all available functions, types, and options. + +## Core Functions + +### Formatting and Parsing + +| Function | Description | +|----------|-------------| +| [`format()`](./format) | Convert Date objects to formatted strings | +| [`parse()`](./parse) | Parse date strings into Date objects | +| [`compile()`](./compile) | Precompile format patterns for performance | +| [`preparse()`](./preparse) | Parse and return intermediate parsing results | +| [`isValid()`](./isValid) | Validate date string formats | +| [`transform()`](./transform) | Transform date strings between formats | + +### Date Arithmetic + +| Function | Description | +|----------|-------------| +| [`addYears()`](./add-functions#addyears) | Add/subtract years from dates | +| [`addMonths()`](./add-functions#addmonths) | Add/subtract months from dates | +| [`addDays()`](./add-functions#adddays) | Add/subtract days from dates | +| [`addHours()`](./add-functions#addhours) | Add/subtract hours from dates | +| [`addMinutes()`](./add-functions#addminutes) | Add/subtract minutes from dates | +| [`addSeconds()`](./add-functions#addseconds) | Add/subtract seconds from dates | +| [`addMilliseconds()`](./add-functions#addmilliseconds) | Add/subtract milliseconds from dates | +| [`subtract()`](./subtract) | Calculate time differences with Duration objects | + +### Utility Functions + +| Function | Description | +|----------|-------------| +| [`isLeapYear()`](./utilities#isleapyear) | Check if a year is a leap year | +| [`isSameDay()`](./utilities#issameday) | Check if two dates are on the same day | + +## Quick Examples + +### Basic Usage + +```typescript +import { format, parse, isValid } from 'date-and-time' + +// Formatting +const date = new Date() +format(date, 'YYYY-MM-DD HH:mm:ss'); +// => 2025-08-23 14:30:45 + +// Parsing +const parsed = parse('2025-08-23 14:30:45', 'YYYY-MM-DD HH:mm:ss'); +// => Date object + +// Validation +isValid('2025-02-29', 'YYYY-MM-DD'); // => false (not a leap year) +``` + +### With Options + +```typescript +import { format } from 'date-and-time'; +import ja from 'date-and-time/locales/ja'; +import Tokyo from 'date-and-time/timezones/Asia/Tokyo'; + +format(new Date(), 'YYYY年M月D日(ddd) HH:mm', { + locale: ja, + timeZone: Tokyo +}); +// => 2025年8月23日(土) 23:30 +``` + +## Types and Interfaces + +### Option Types + +#### FormatterOptions + +```typescript +interface FormatterOptions { + locale?: Locale; // Locale object for localized formatting + timeZone?: TimeZone | 'UTC'; // Timezone object or UTC string + numeral?: Numeral; // Numeral system for number formatting + calendar?: 'gregory' | 'buddhist'; // Calendar system + hour12?: 'h11' | 'h12'; // 12-hour format type + hour24?: 'h23' | 'h24'; // 24-hour format type +} +``` + +#### ParserOptions + +```typescript +interface ParserOptions { + locale?: Locale; // Locale object for localized parsing + timeZone?: TimeZone | 'UTC'; // Timezone object or UTC string + numeral?: Numeral; // Numeral system for number parsing + calendar?: 'gregory' | 'buddhist'; // Calendar system + hour12?: 'h11' | 'h12'; // 12-hour format type + hour24?: 'h23' | 'h24'; // 24-hour format type + ignoreCase?: boolean; // Case-insensitive parsing +} +``` + +## Format Tokens + +### Date Tokens + +| Token | Meaning | Output Examples | +|-------|---------|-----------------| +| `YYYY` | 4-digit year | 0999, 2015 | +| `YY` | 2-digit year | 99, 01, 15 | +| `Y` | Year without zero padding | 2, 44, 888, 2015 | +| `MMMM` | Full month name | January, December | +| `MMM` | Short month name | Jan, Dec | +| `MM` | Month | 01, 12 | +| `M` | Month without zero padding | 1, 12 | +| `DD` | Day | 02, 31 | +| `D` | Day without zero padding | 2, 31 | + +### Time Tokens + +| Token | Meaning | Output Examples | +|-------|---------|-----------------| +| `HH` | Hour in 24-hour format | 23, 08 | +| `H` | Hour in 24-hour format without zero padding | 23, 8 | +| `hh` | Hour in 12-hour format | 11, 08 | +| `h` | Hour in 12-hour format without zero padding | 11, 8 | +| `mm` | Minutes | 14, 07 | +| `m` | Minutes without zero padding | 14, 7 | +| `ss` | Seconds | 05, 10 | +| `s` | Seconds without zero padding | 5, 10 | +| `SSS` | 3-digit milliseconds | 753, 022 | +| `SS` | 2-digit milliseconds | 75, 02 | +| `S` | 1-digit milliseconds | 7, 0 | + +### Day of Week Tokens + +| Token | Meaning | Output Examples | +|-------|---------|-----------------| +| `dddd` | Full day name | Friday, Sunday | +| `ddd` | Short day name | Fri, Sun | +| `dd` | Very short day name | Fr, Su | + +### AM/PM and Timezone Tokens + +| Token | Meaning | Output Examples | +|-------|---------|-----------------| +| `A` | Uppercase AM/PM | AM, PM | +| `AA` | Uppercase AM/PM (with periods) | A.M., P.M. | +| `a` | Lowercase AM/PM | am, pm | +| `aa` | Lowercase AM/PM (with periods) | a.m., p.m. | +| `Z` | Timezone offset | +0100, -0800 | +| `ZZ` | Timezone offset with colon | +01:00, -08:00 | + +## Supported Locales + +date-and-time supports 40+ locales. Import only the ones you need: + +```typescript +// Examples +import ar from 'date-and-time/locales/ar'; // Arabic +import ja from 'date-and-time/locales/ja'; // Japanese +import es from 'date-and-time/locales/es'; // Spanish +import fr from 'date-and-time/locales/fr'; // French +import de from 'date-and-time/locales/de'; // German +import ru from 'date-and-time/locales/ru'; // Russian +import zhHans from 'date-and-time/locales/zh-Hans'; // Simplified Chinese +``` + +For a complete list of all supported locales with import examples, see [Supported Locales](../locales). + +## Supported Timezones + +Complete IANA timezone database support. Import specific timezones: + +```typescript +// Examples +import Tokyo from 'date-and-time/timezones/Asia/Tokyo'; +import New_York from 'date-and-time/timezones/America/New_York'; +import London from 'date-and-time/timezones/Europe/London'; +import Sydney from 'date-and-time/timezones/Australia/Sydney'; +``` + +For a complete list of all supported timezones with import examples, see [Supported Timezones](../timezones). + +## Numeral Systems + +Support for different numeral systems: + +```typescript +import arab from 'date-and-time/numerals/arab'; // Arabic-Indic +import beng from 'date-and-time/numerals/beng'; // Bengali +import mymr from 'date-and-time/numerals/mymr'; // Myanmar +import latn from 'date-and-time/numerals/latn'; // Latin (default) + +format(new Date(), 'DD/MM/YYYY', { numeral: arab }); +// => ٠٨/٠٧/٢٠٢٥ +``` + +## Error Handling + +### Parse Failures + +```typescript +import { parse, isValid } from 'date-and-time'; + +// Always check validity first +if (!isValid('invalid-date', 'YYYY-MM-DD')) { + throw new Error('Invalid date format'); +} + +// Or check parse results +const result = parse('invalid-date', 'YYYY-MM-DD'); +if (isNaN(result.getTime())) { + throw new Error('Parse failed'); +} +``` + +### Type Safety + +```typescript +import { format, FormatterOptions } from 'date-and-time'; + +// TypeScript will catch type errors +const options: FormatterOptions = { + locale: 'invalid', // ❌ TypeScript error + timeZone: 123 // ❌ TypeScript error +}; +``` + +## Performance Tips + +1. **Use `compile()`** for repeated operations: + + ```typescript + const pattern = compile('YYYY-MM-DD HH:mm:ss'); + // Reuse pattern for better performance + ``` + +2. **Import only what you need**: + + ```typescript + import { format } from 'date-and-time'; // ✅ Tree-shakable + import * as date from 'date-and-time'; // ❌ Imports everything + ``` + +## Migration from v3.x + +If you're migrating from version 3.x, see the [Migration Guide](../migration) for detailed upgrade instructions and breaking changes. diff --git a/docs/api/isLeapYear.md b/docs/api/isLeapYear.md new file mode 100644 index 0000000..912b5c2 --- /dev/null +++ b/docs/api/isLeapYear.md @@ -0,0 +1,71 @@ +# isLeapYear() + +Determine if a given year is a leap year according to the Gregorian calendar rules. + +## Syntax + +```typescript +isLeapYear(year) +``` + +### Parameters + +| Parameter | Type | Required | Description | +|-----------|------|----------|-------------| +| `year` | `number` | Yes | The year to check | + +### Returns + +`boolean` - Returns `true` if the year is a leap year, `false` otherwise + +## Basic Examples + +### Checking Leap Years + +```typescript +import { isLeapYear } from 'date-and-time'; + +console.log(isLeapYear(2024)); // true (divisible by 4) +console.log(isLeapYear(2023)); // false (not divisible by 4) +console.log(isLeapYear(2000)); // true (divisible by 400) +console.log(isLeapYear(1900)); // false (divisible by 100 but not by 400) +``` + +### Working with Date Objects + +```typescript +function checkDateLeapYear(date: Date): boolean { + return isLeapYear(date.getFullYear()); +} + +const dates = [ + new Date(2024, 1, 29), // February 29, 2024 + new Date(2023, 1, 28), // February 28, 2023 + new Date(2000, 1, 29) // February 29, 2000 +]; + +dates.forEach(date => { + const year = date.getFullYear(); + console.log(`${year}: ${isLeapYear(year) ? 'Leap year' : 'Not a leap year'}`); +}); +``` + +## Edge Cases + +### Historical Context + +```typescript +// Note: Gregorian calendar was adopted in 1582 +// Before that, different leap year rules applied +function isHistoricalAccurate(year: number): boolean { + if (year < 1582) { + console.warn('Year is before Gregorian calendar adoption (1582)'); + // Julian calendar had simpler rule: every 4 years + return year % 4 === 0; + } + return isLeapYear(year); +} + +console.log(isHistoricalAccurate(1500)); // true (Julian calendar rule) +console.log(isHistoricalAccurate(1700)); // false (Gregorian calendar rule) +``` diff --git a/docs/api/isSameDay.md b/docs/api/isSameDay.md new file mode 100644 index 0000000..71c7bea --- /dev/null +++ b/docs/api/isSameDay.md @@ -0,0 +1,50 @@ +# isSameDay() + +Check if two Date objects represent the same calendar day, regardless of time. + +## Syntax + +```typescript +isSameDay(date1, date2) +``` + +### Parameters + +| Parameter | Type | Required | Description | +|-----------|------|----------|-------------| +| `date1` | `Date` | Yes | The first Date object to compare | +| `date2` | `Date` | Yes | The second Date object to compare | + +### Returns + +`boolean` - Returns `true` if both dates are on the same calendar day, `false` otherwise + +## Basic Examples + +### Comparing Calendar Days + +```typescript +import { isSameDay } from 'date-and-time'; + +const morning = new Date(2024, 7, 15, 9, 30, 0); // August 15, 2024 09:30:00 +const evening = new Date(2024, 7, 15, 18, 45, 30); // August 15, 2024 18:45:30 +const nextDay = new Date(2024, 7, 16, 9, 30, 0); // August 16, 2024 09:30:00 + +console.log(isSameDay(morning, evening)); // true (same day, different times) +console.log(isSameDay(morning, nextDay)); // false (different days) +``` + +### Ignoring Time Components + +```typescript +const startOfDay = new Date(2024, 7, 15, 0, 0, 0, 0); // August 15, 2024 00:00:00.000 +const endOfDay = new Date(2024, 7, 15, 23, 59, 59, 999); // August 15, 2024 23:59:59.999 + +console.log(isSameDay(startOfDay, endOfDay)); // true + +// Even milliseconds don't matter for day comparison +const precise1 = new Date(2024, 7, 15, 12, 30, 45, 123); +const precise2 = new Date(2024, 7, 15, 12, 30, 45, 456); + +console.log(isSameDay(precise1, precise2)); // true +``` diff --git a/docs/api/isValid.md b/docs/api/isValid.md new file mode 100644 index 0000000..6f2f091 --- /dev/null +++ b/docs/api/isValid.md @@ -0,0 +1,240 @@ +# isValid() + +Validates whether a date string conforms to the specified format pattern and represents a valid date. + +## Syntax + +```typescript +isValid(dateString, formatString[, options]) +``` + +### Parameters + +| Parameter | Type | Required | Description | +|-----------|------|----------|-------------| +| `dateString` | `string` | Yes | The date string to validate | +| `formatString` | `string \| CompiledObject` | Yes | The format pattern or compiled object | +| `options` | `ParserOptions` | No | Parser options for validation (see [`parse()`](./parse#parseroptions) for details) | + +### Returns + +`boolean` - `true` if the date string is valid and matches the format, `false` otherwise + +## Basic Examples + +```typescript +import { isValid } from 'date-and-time'; + +// Valid dates +isValid('2025-08-23', 'YYYY-MM-DD'); // => true +isValid('08/23/2025', 'MM/DD/YYYY'); // => true +isValid('14:30:45', 'HH:mm:ss'); // => true +isValid('2:30 PM', 'h:mm A'); // => true + +// Invalid dates +isValid('2025-02-30', 'YYYY-MM-DD'); // => false (Feb 30th doesn't exist) +isValid('2025-13-01', 'YYYY-MM-DD'); // => false (month 13 doesn't exist) +isValid('25:30:00', 'HH:mm:ss'); // => false (hour 25 doesn't exist) +isValid('invalid-date', 'YYYY-MM-DD'); // => false (doesn't match format) + +// Format mismatch +isValid('2025-08-23', 'MM/DD/YYYY'); // => false (wrong format) +isValid('08/23/2025', 'YYYY-MM-DD'); // => false (wrong format) +``` + +## Validation with Options + +### Locale Validation + +```typescript +import { isValid } from 'date-and-time'; +import es from 'date-and-time/locales/es'; + +// Spanish month names +isValid('23 de agosto de 2025', 'D [de] MMMM [de] YYYY', { locale: es }); // => true +isValid('23 de invalid de 2025', 'D [de] MMMM [de] YYYY', { locale: es }); // => false +``` + +### Case-Insensitive Validation + +```typescript +import { isValid } from 'date-and-time'; + +// Case-sensitive (default) +isValid('AUGUST 23, 2025', 'MMMM D, YYYY'); // => false +isValid('august 23, 2025', 'MMMM D, YYYY'); // => false + +// Case-insensitive +isValid('AUGUST 23, 2025', 'MMMM D, YYYY', { ignoreCase: true }); // => true +isValid('august 23, 2025', 'MMMM D, YYYY', { ignoreCase: true }); // => true +isValid('August 23, 2025', 'MMMM D, YYYY'); // => true (correct case) +``` + +## Advanced Validation Patterns + +### Multiple Format Validation + +```typescript +import { isValid } from 'date-and-time'; + +function isValidDate(dateString: string): boolean { + const formats = [ + 'YYYY-MM-DD', + 'MM/DD/YYYY', + 'DD.MM.YYYY', + 'MMMM D, YYYY', + 'MMM D, YYYY' + ]; + + return formats.some(format => isValid(dateString, format)); +} + +// Usage +console.log(isValidDate('2025-08-23')); // => true +console.log(isValidDate('08/23/2025')); // => true +console.log(isValidDate('23.08.2025')); // => true +console.log(isValidDate('August 23, 2025')); // => true +console.log(isValidDate('invalid-date')); // => false +``` + +### Business Rule Validation + +```typescript +import { isValid, parse } from 'date-and-time'; + +function isBusinessDay(dateString: string, format: string): boolean { + // First check if it's a valid date + if (!isValid(dateString, format)) { + return false; + } + + // Parse and check if it's a weekday + const date = parse(dateString, format); + const dayOfWeek = date.getDay(); + + // 0 = Sunday, 6 = Saturday + return dayOfWeek >= 1 && dayOfWeek <= 5; +} + +// Usage +console.log(isBusinessDay('2025-08-23', 'YYYY-MM-DD')); // => false (Saturday) +console.log(isBusinessDay('2025-08-25', 'YYYY-MM-DD')); // => true (Monday) +``` + +### Range Validation + +```typescript +import { isValid, parse } from 'date-and-time'; + +function isValidInRange( + dateString: string, + format: string, + minDate: Date, + maxDate: Date +): boolean { + if (!isValid(dateString, format)) { + return false; + } + + const date = parse(dateString, format); + return date >= minDate && date <= maxDate; +} + +// Usage +const min = new Date(2025, 0, 1); // Jan 1, 2025 +const max = new Date(2025, 11, 31); // Dec 31, 2025 + +console.log(isValidInRange('2025-08-23', 'YYYY-MM-DD', min, max)); // => true +console.log(isValidInRange('2024-08-23', 'YYYY-MM-DD', min, max)); // => false +``` + +## Performance with Compiled Patterns + +For repeated validation, use `compile()` for better performance: + +```typescript +import { isValid, compile } from 'date-and-time'; + +// Compile once +const pattern = compile('YYYY-MM-DD HH:mm:ss'); + +// Validate multiple times (faster) +const dateStrings = [ + '2025-08-23 14:30:45', + '2025-08-24 09:15:30', + '2025-02-30 12:00:00', // Invalid + '2025-08-25 16:45:20' +]; + +const validDates = dateStrings.filter(dateString => + isValid(dateString, pattern) +); + +console.log('Valid dates:', validDates); +// => ['2025-08-23 14:30:45', '2025-08-24 09:15:30', '2025-08-25 16:45:20'] +``` + +## Common Use Cases + +### Form Input Validation + +```typescript +import { isValid, parse } from 'date-and-time'; + +class DateInputValidator { + static validateBirthDate(dateString: string): boolean { + if (!isValid(dateString, 'YYYY-MM-DD')) { + return false; + } + + const date = parse(dateString, 'YYYY-MM-DD'); + const now = new Date(); + + // Must be in the past and reasonable range + return date < now && date > new Date(1900, 0, 1); + } + + static validateAppointment(dateString: string): boolean { + if (!isValid(dateString, 'YYYY-MM-DD HH:mm')) { + return false; + } + + const date = parse(dateString, 'YYYY-MM-DD HH:mm'); + const now = new Date(); + + // Must be in the future + return date > now; + } +} +``` + +### API Input Validation + +```typescript +import { isValid, parse } from 'date-and-time'; + +function validateApiDateRange(startDate: string, endDate: string) { + const format = 'YYYY-MM-DD'; + + // Check both dates are valid + if (!isValid(startDate, format) || !isValid(endDate, format)) { + throw new Error('Invalid date format. Expected YYYY-MM-DD'); + } + + const start = parse(startDate, format); + const end = parse(endDate, format); + + // Check logical order + if (start >= end) { + throw new Error('Start date must be before end date'); + } + + return { start, end }; +} +``` + +## See Also + +- [`parse()`](./parse) - Parse validated date strings into Date objects +- [`compile()`](./compile) - Precompile format patterns for performance +- [`preparse()`](./preparse) - Parse and return intermediate parsing results diff --git a/docs/api/parse.md b/docs/api/parse.md new file mode 100644 index 0000000..1d2b0b4 --- /dev/null +++ b/docs/api/parse.md @@ -0,0 +1,552 @@ +# parse() + +Parses a formatted date string into a Date object according to the specified format pattern. + +## Syntax + +```typescript +parse(dateString, formatString[, options]) +``` + +### Parameters + +| Parameter | Type | Required | Description | +|-----------|------|----------|-------------| +| `dateString` | `string` | Yes | The date string to parse | +| `formatString` | `string \| CompiledObject` | Yes | The format pattern or compiled object | +| `options` | `ParserOptions` | No | Parser options for customization | + +### Returns + +`Date` - The parsed Date object, or Invalid Date if parsing fails + +## Basic Examples + +```typescript +import { parse } from 'date-and-time'; + +// Basic date parsing +parse('2025-08-23', 'YYYY-MM-DD'); +// => Fri Aug 23 2025 00:00:00 GMT+0900 + +parse('08/23/2025', 'MM/DD/YYYY'); +// => Fri Aug 23 2025 00:00:00 GMT+0900 + +parse('23.08.2025', 'DD.MM.YYYY'); +// => Fri Aug 23 2025 00:00:00 GMT+0900 + +// Time parsing +parse('14:30:45', 'HH:mm:ss'); +// => Thu Jan 01 1970 14:30:45 GMT+0900 + +parse('2:30:45 PM', 'h:mm:ss A'); +// => Thu Jan 01 1970 14:30:45 GMT+0900 + +// Combined date and time +parse('2025-08-23 14:30:45', 'YYYY-MM-DD HH:mm:ss'); +// => Fri Aug 23 2025 14:30:45 GMT+0900 +``` + +## Format Tokens + +### Date Tokens + +| Token | Description | Input Examples | +|-------|-------------|----------------| +| `YYYY` | 4-digit year | 0999, 2015 | +| `Y` | Year without zero padding | 2, 44, 888, 2015 | +| `MMMM` | Full month name | January, December | +| `MMM` | Short month name | Jan, Dec | +| `MM` | Month (01-12) | 01, 12 | +| `M` | Month without zero padding | 1, 12 | +| `DD` | Day (01-31) | 02, 31 | +| `D` | Day without zero padding | 2, 31 | + +### Time Tokens + +| Token | Description | Input Examples | +|-------|-------------|----------------| +| `HH` | Hour in 24-hour format | 23, 08 | +| `H` | Hour in 24-hour format (no padding) | 23, 8 | +| `hh` | Hour in 12-hour format | 11, 08 | +| `h` | Hour in 12-hour format (no padding) | 11, 8 | +| `mm` | Minutes | 14, 07 | +| `m` | Minutes without zero padding | 14, 7 | +| `ss` | Seconds | 05, 10 | +| `s` | Seconds without zero padding | 5, 10 | +| `SSS` | 3-digit milliseconds | 753, 022 | +| `SS` | 2-digit milliseconds | 75, 02 | +| `S` | 1-digit milliseconds | 7, 0 | + +### AM/PM Tokens + +| Token | Description | Input Examples | +|-------|-------------|----------------| +| `A` | Uppercase AM/PM | AM, PM | +| `AA` | Uppercase AM/PM (with periods) | A.M., P.M. | +| `a` | Lowercase AM/PM | am, pm | +| `aa` | Lowercase AM/PM (with periods) | a.m., p.m. | + +### Timezone Tokens + +| Token | Description | Input Examples | +|-------|-------------|----------------| +| `Z` | Timezone offset | +0100, -0800 | +| `ZZ` | Timezone offset with colon | +01:00, -08:00 | + +### Plugin Tokens + +Additional tokens available with plugins: + +| Token | Description | Input Examples | Plugin Required | +|-------|-------------|----------------|-----------------| +| `YY` | 2-digit year | 90, 00, 08, 19 | two-digit-year | +| `DDD` | Ordinal representation | 1st, 2nd, 3rd | ordinal | +| `dddd` | Full day name | Friday, Sunday | day-of-week | +| `ddd` | Short day name | Fri, Sun | day-of-week | +| `dd` | Very short day name | Fr, Su | day-of-week | +| `SSSSSS` | 6-digit milliseconds | 123456, 000001 | microsecond | +| `SSSSS` | 5-digit milliseconds | 12345, 00001 | microsecond | +| `SSSS` | 4-digit milliseconds | 1234, 0001 | microsecond | +| `fff` | 3-digit microseconds | 753, 022 | microsecond | +| `ff` | 2-digit microseconds | 75, 02 | microsecond | +| `f` | 1-digit microseconds | 7, 0 | microsecond | +| `SSSSSSSSS` | 9-digit milliseconds | 123456789, 000000001 | nanosecond | +| `SSSSSSSS` | 8-digit milliseconds | 12345678, 00000001 | nanosecond | +| `SSSSSSS` | 7-digit milliseconds | 1234567, 0000001 | nanosecond | +| `FFF` | 3-digit nanoseconds | 753, 022 | nanosecond | +| `FF` | 2-digit nanoseconds | 75, 02 | nanosecond | +| `F` | 1-digit nanoseconds | 7, 0 | nanosecond | + +## ParserOptions + +### locale + +**Type**: `Locale` +**Default**: `en` (English) + +Specifies the locale for parsing localized month names, day names, and meridiem indicators. + +```typescript +import { parse } from 'date-and-time'; +import es from 'date-and-time/locales/es'; + +// Spanish parsing +parse('23 de agosto de 2025', 'D [de] MMMM [de] YYYY', { locale: es }); +// => Fri Aug 23 2025 00:00:00 GMT+0900 +``` + +For a complete list of all supported locales with import examples, see [Supported Locales](../locales). + +### timeZone + +**Type**: `TimeZone | "UTC"` +**Default**: `undefined` (local timezone) + +Interprets the parsed date in the specified timezone. **Note**: If the input string contains a timezone offset (e.g., `Z` or `ZZ` tokens), that offset takes precedence and the `timeZone` option is ignored. + +```typescript +import { parse } from 'date-and-time'; +import Tokyo from 'date-and-time/timezones/Asia/Tokyo'; +import New_York from 'date-and-time/timezones/America/New_York'; + +// Parse in Tokyo timezone +parse('2025-08-23 14:30:00', 'YYYY-MM-DD HH:mm:ss', { timeZone: Tokyo }); +// => Fri Aug 23 2025 14:30:00 GMT+0900 + +// Parse in New York timezone +parse('2025-08-23 14:30:00', 'YYYY-MM-DD HH:mm:ss', { timeZone: New_York }); +// => Fri Aug 23 2025 14:30:00 GMT-0400 + +// Parse in UTC +parse('2025-08-23 14:30:00', 'YYYY-MM-DD HH:mm:ss', { timeZone: 'UTC' }); +// => Fri Aug 23 2025 14:30:00 GMT+0000 + +// Timezone offset in input takes precedence over timeZone option +parse('2025-08-23 14:30:00 +0300', 'YYYY-MM-DD HH:mm:ss Z', { timeZone: Tokyo }); +// => Fri Aug 23 2025 14:30:00 GMT+0300 (Tokyo timeZone is ignored) + +parse('2025-08-23T14:30:00 +05:00', 'YYYY-MM-DD[T]HH:mm:ss ZZ', { timeZone: New_York }); +// => Fri Aug 23 2025 14:30:00 GMT+0500 (New_York timeZone is ignored) +``` + +For a complete list of all supported timezones with import examples, see [Supported Timezones](../timezones). + +### numeral + +**Type**: `Numeral` +**Default**: `latn` (Latin numerals) + +Specifies the numeral system for parsing numbers. + +```typescript +import { parse } from 'date-and-time'; +import arab from 'date-and-time/numerals/arab'; +import beng from 'date-and-time/numerals/beng'; + +// Arabic-Indic numerals +parse('٠٨/٠٧/٢٠٢٥', 'DD/MM/YYYY', { numeral: arab }); +// => Fri Aug 08 2025 00:00:00 GMT+0900 + +// Bengali numerals +parse('০৮/০৭/২০২৫', 'DD/MM/YYYY', { numeral: beng }); +// => Fri Aug 08 2025 00:00:00 GMT+0900 +``` + +**Available numeral systems:** + +- `latn` - Latin numerals (0-9) - default +- `arab` - Arabic-Indic numerals (٠-٩) +- `arabext` - Extended Arabic-Indic numerals (۰-۹) +- `beng` - Bengali numerals (০-৯) +- `mymr` - Myanmar numerals (၀-၉) + +### calendar + +**Type**: `"gregory" | "buddhist"` +**Default**: `"gregory"` + +Specifies the calendar system for date calculations. + +```typescript +import { parse } from 'date-and-time'; + +// Gregorian calendar (default) +parse('August 23, 2025', 'MMMM D, YYYY'); +// => Fri Aug 23 2025 00:00:00 GMT+0900 + +// Buddhist calendar (543 years behind) +parse('August 23, 2568', 'MMMM D, YYYY', { calendar: 'buddhist' }); +// => Fri Aug 23 2025 00:00:00 GMT+0900 +``` + +### ignoreCase + +**Type**: `boolean` +**Default**: `false` + +Enables case-insensitive parsing for text elements. + +```typescript +import { parse } from 'date-and-time'; + +// Case-sensitive (default) +parse('august 23, 2025', 'MMMM D, YYYY'); +// => Invalid Date + +// Case-insensitive +parse('AUGUST 23, 2025', 'MMMM D, YYYY', { ignoreCase: true }); +// => Fri Aug 23 2025 00:00:00 GMT+0900 + +parse('fri aug 23 2025', 'ddd MMM DD YYYY', { ignoreCase: true }); +// => Fri Aug 23 2025 00:00:00 GMT+0900 +``` + +### hour12 + +**Type**: `"h11" | "h12"` +**Default**: `"h12"` + +Controls the 12-hour format interpretation. Use `h11` for 11-hour format (0-11) or `h12` for 12-hour format (1-12). + +```typescript +import { parse } from 'date-and-time'; + +// h12 format - midnight is 12 AM +parse('12:30 AM', 'h:mm A', { hour12: 'h12' }); +// => Thu Jan 01 1970 00:30:00 GMT+0900 + +// h11 format - midnight is 0 AM +parse('0:30 AM', 'h:mm A', { hour12: 'h11' }); +// => Thu Jan 01 1970 00:30:00 GMT+0900 +``` + +### hour24 + +**Type**: `"h23" | "h24"` +**Default**: `"h23"` + +Controls the 24-hour format interpretation. Use `h23` for 23-hour format (0-23) or `h24` for 24-hour format (1-24). + +```typescript +import { parse } from 'date-and-time'; + +// h23 format - midnight is 0 +parse('0:30', 'H:mm', { hour24: 'h23' }); +// => Thu Jan 01 1970 00:30:00 GMT+0900 + +// h24 format - midnight is 24 (of previous day) +parse('24:30', 'H:mm', { hour24: 'h24' }); +// => Thu Jan 01 1970 00:30:00 GMT+0900 +``` + +## Parsing Behavior and Limitations + +### Default Date and Time Values + +When parsing partial dates or times, missing components are filled with default values. The default date is `January 1, 1970`, and the default time is `00:00:00.000`. + +```typescript +import { parse } from 'date-and-time'; + +// Only time - defaults to Jan 1, 1970 +parse('14:30:45', 'HH:mm:ss'); +// => Thu Jan 01 1970 14:30:45 GMT+0900 + +// Only date - defaults to 00:00:00 +parse('2025-08-23', 'YYYY-MM-DD'); +// => Fri Aug 23 2025 00:00:00 GMT+0900 + +// Year and month - defaults to 1st day +parse('2025-08', 'YYYY-MM'); +// => Mon Aug 01 2025 00:00:00 GMT+0900 + +// Just year - defaults to Jan 1st, 00:00:00 +parse('2025', 'YYYY'); +// => Wed Jan 01 2025 00:00:00 GMT+0900 +``` + +### Date Range Limitations + +The parsable maximum date is `December 31, 9999`, and the minimum date is `January 1, 0001`. + +```typescript +import { parse } from 'date-and-time'; + +// Valid maximum date +parse('Dec 31 9999', 'MMM D YYYY'); +// => Dec 31 9999 00:00:00 GMT+0900 + +// Invalid - exceeds maximum +parse('Dec 31 10000', 'MMM D YYYY'); +// => Invalid Date + +// Valid minimum date +parse('Jan 1 0001', 'MMM D YYYY'); +// => Jan 1 0001 00:00:00 GMT+0900 + +// Invalid - below minimum +parse('Jan 1 0000', 'MMM D YYYY'); +// => Invalid Date +``` + +### UTC Input Parsing + +If the input string doesn't contain a timezone offset and no `timeZone` option is specified, the function treats the input as local timezone. To parse input as UTC, set `timeZone: 'UTC'` in the options. + +```typescript +import { parse } from 'date-and-time'; + +// Parsed as local timezone +parse('14:30:45', 'HH:mm:ss'); +// => Thu Jan 01 1970 14:30:45 GMT+0900 + +// Timezone offset in input takes precedence +parse('14:30:45 +0000', 'HH:mm:ss Z'); +// => Thu Jan 01 1970 14:30:45 GMT+0000 + +// Force UTC parsing +parse('14:30:45', 'HH:mm:ss', { timeZone: 'UTC' }); +// => Thu Jan 01 1970 14:30:45 GMT+0000 +``` + +### 12-hour Format and Meridiem + +When using 12-hour format tokens (`h` or `hh`), always include the meridiem token (`A` or `a`) for correct parsing. + +```typescript +import { parse } from 'date-and-time'; + +// Without meridiem - ambiguous time +parse('11:30:45', 'h:mm:ss'); +// => Thu Jan 01 1970 11:30:45 GMT+0900 (assumes AM) + +// With meridiem - unambiguous time +parse('11:30:45 PM', 'h:mm:ss A'); +// => Thu Jan 01 1970 23:30:45 GMT+0900 +``` + +## Advanced Usage + +### Comments in Format Strings + +Parts of the format string enclosed in square brackets are treated as literal text: + +```typescript +import { parse } from 'date-and-time'; + +parse('Today is Saturday, August 23, 2025', '[Today is] dddd, MMMM D, YYYY'); +// => Fri Aug 23 2025 00:00:00 GMT+0900 + +parse('2025-08-23T14:30:45Z', 'YYYY-MM-DD[T]HH:mm:ss[Z]'); +// => Fri Aug 23 2025 14:30:45 GMT+0900 + +parse('Report generated on 2025/08/23 at 14:30', '[Report generated on] YYYY/MM/DD [at] HH:mm'); +// => Fri Aug 23 2025 14:30:00 GMT+0900 +``` + +### Wildcard Parsing + +Whitespace in the format string acts as a wildcard token, allowing you to skip corresponding parts of the input string. The character count must match between the format string and input string. + +```typescript +import { parse } from 'date-and-time'; + +// This will fail - extra content not accounted for +parse('2025/08/23 14:30:45', 'YYYY/MM/DD'); +// => Invalid Date + +// Use whitespace as wildcard (9 spaces to match ' 14:30:45') +parse('2025/08/23 14:30:45', 'YYYY/MM/DD '); +// => Fri Aug 23 2025 00:00:00 GMT+0900 +``` + +### Ellipsis Token + +The `...` token ignores all subsequent content in the input string. Use this token only at the end of a format string. + +```typescript +import { parse } from 'date-and-time'; + +// Ignore everything after the date +parse('2025/08/23 14:30:45', 'YYYY/MM/DD...'); +// => Fri Aug 23 2025 00:00:00 GMT+0900 + +// More complex example +parse('Log entry: 2025-08-23 some extra data here', '[Log entry: ]YYYY-MM-DD...'); +// => Fri Aug 23 2025 00:00:00 GMT+0900 +``` + +### Complex Localized Parsing + +```typescript +import { parse } from 'date-and-time'; +import fr from 'date-and-time/locales/fr'; +import Paris from 'date-and-time/timezones/Europe/Paris'; + +// French with timezone +parse('samedi, 23 août 2025 à 14:30:45', 'dddd, D MMMM YYYY [à] HH:mm:ss', { + locale: fr, + timeZone: Paris +}); +// => Fri Aug 23 2025 14:30:45 GMT+0200 +``` + +### Business and Technical Formats + +```typescript +import { parse } from 'date-and-time'; + +// ISO 8601 format +parse('2025-08-23T14:30:45.123Z', 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]', { timeZone: 'UTC' }); +// => Fri Aug 23 2025 14:30:45 GMT+0000 + +// RFC 2822 format +parse('Sat, 23 Aug 2025 14:30:45 +0900', 'ddd, DD MMM YYYY HH:mm:ss ZZ'); +// => Fri Aug 23 2025 14:30:45 GMT+0900 + +// File naming format +parse('20250823_143045', 'YYYYMMDD_HHmmss'); +// => Fri Aug 23 2025 14:30:45 GMT+0900 +``` + +## Error Handling + +### When Parsing Fails + +If the `parse()` function fails to parse the input, it returns an `Invalid Date` object. Note that `Invalid Date` is still a Date object, not `NaN` or `null`. + +```typescript +import { parse } from 'date-and-time'; + +// Example of parsing failure +const result = parse('invalid-date', 'YYYY-MM-DD'); + +// Check if parsing failed +if (isNaN(result.getTime())) { + console.error('Parse failed - invalid date'); +} else { + console.log('Successfully parsed:', result); +} + +// Common parsing failures +parse('Jam 1 2017', 'MMM D YYYY'); // Invalid - 'Jam' is not a valid month +parse('2025-02-30', 'YYYY-MM-DD'); // Invalid - Feb 30th doesn't exist +parse('2025-13-01', 'YYYY-MM-DD'); // Invalid - month 13 doesn't exist +parse('25:30:00', 'HH:mm:ss'); // Invalid - hour 25 doesn't exist +parse('12 hours 34', 'HH hours mm'); // Invalid - format mismatch +``` + +## Performance Considerations + +For repeated parsing with the same pattern, use [`compile()`](./compile): + +```typescript +import { parse, compile } from 'date-and-time'; + +// Compile once +const pattern = compile('YYYY-MM-DD HH:mm:ss'); + +// Reuse for better performance +const dateStrings = ['2025-08-23 14:30:45', '2025-08-24 09:15:30']; +dateStrings.forEach(dateString => { + const parsed = parse(dateString, pattern); + console.log(parsed); +}); +``` + +## Common Parsing Patterns + +### Log Timestamps + +```typescript +import { parse } from 'date-and-time'; + +const logLine = '[2025-08-23 14:30:45.123] Application started'; +const timestamp = parse(logLine, ' YYYY-MM-DD HH:mm:ss.SSS ...'); +// => Fri Aug 23 2025 14:30:45 GMT+0900 + +// For different log formats +const syslogLine = 'Aug 23 14:30:45 server: Process started'; +const syslogTimestamp = parse(syslogLine, 'MMM DD HH:mm:ss...'); +// => Fri Aug 23 1970 14:30:45 GMT+0900 +``` + +### API Responses + +```typescript +import { parse } from 'date-and-time'; + +const apiTimestamp = '2025-08-23T14:30:45Z'; +const date = parse(apiTimestamp, 'YYYY-MM-DD[T]HH:mm:ss[Z]', { timeZone: 'UTC' }); +``` + +### User Input + +```typescript +import { parse } from 'date-and-time'; + +function parseUserDate(input: string) { + const formats = [ + 'YYYY-MM-DD', + 'MM/DD/YYYY', + 'DD.MM.YYYY', + 'MMMM D, YYYY' + ]; + + for (const format of formats) { + const result = parse(input, format); + if (!isNaN(result.getTime())) { + return result; + } + } + + throw new Error('Unable to parse date'); +} +``` + +## See Also + +- [`compile()`](./compile) - Precompile format patterns for performance +- [`preparse()`](./preparse) - Parse and return intermediate parsing results +- [`isValid()`](./isValid) - Validate date string formats diff --git a/docs/api/preparse.md b/docs/api/preparse.md new file mode 100644 index 0000000..5706a50 --- /dev/null +++ b/docs/api/preparse.md @@ -0,0 +1,165 @@ +# preparse() + +Pre-parses date strings and returns intermediate parsing results. This function is useful when you need to examine parsing details before creating a final Date object. + +## Syntax + +```typescript +preparse(dateString, formatString[, options]) +``` + +### Parameters + +| Parameter | Type | Required | Description | +|-----------|------|----------|-------------| +| `dateString` | `string` | Yes | The date string to parse | +| `formatString` | `string \| CompiledObject` | Yes | Format pattern string or compiled object | +| `options` | `ParserOptions` | No | Parsing options for customization (see [`parse()`](./parse) for details) | + +### Returns + +`ParseResult` - Object containing parsed date components + +```typescript +interface ParseResult { + Y?: number // Year + M?: number // Month (1-12) + D?: number // Day + H?: number // Hours (24-hour format, 0-23) + A?: number // AM/PM (0 = AM, 1 = PM) + h?: number // Hours (12-hour format, 1-12) + m?: number // Minutes (0-59) + s?: number // Seconds (0-59) + S?: number // Milliseconds (0-999) + SS?: number // 2-digit milliseconds (0-99) + SSS?: number // 3-digit milliseconds (0-999) + Z?: number // Timezone offset in minutes + _index?: number // Current parsing position + _length?: number // Total length of input string + _match?: number // Number of matched tokens +} +``` + +## Basic Examples + +### Simple Date Parsing + +```typescript +import { preparse } from 'date-and-time'; + +const result = preparse('2025-08-23 14:30:45', 'YYYY-MM-DD HH:mm:ss'); +console.log(result); +// { +// Y: 2025, +// M: 8, +// D: 23, +// H: 14, +// m: 30, +// s: 45 +// } +``` + +### With 12-hour Format + +```typescript +const result = preparse('2025-08-23 2:30:45 PM', 'YYYY-MM-DD h:mm:ss A'); +console.log(result); +// { +// Y: 2025, +// M: 8, +// D: 23, +// A: 1, // PM +// h: 2, +// m: 30, +// s: 45 +// } +``` + +### With Localized Content + +```typescript +import { preparse } from 'date-and-time'; +import ja from 'date-and-time/locales/ja'; + +const result = preparse('2025年8月23日', 'YYYY年M月D日', { locale: ja }); +console.log(result); +// { +// Y: 2025, +// M: 8, +// D: 23 +// } +``` + +## ParserOptions + +The `options` parameter accepts the same `ParserOptions` as the [`parse()`](./parse#parseroptions) function. This includes locale, timezone, numeral system, calendar, case sensitivity, and hour format settings. Refer to the parse documentation for complete details on all available options. + +## Use Cases + +### Validation Before Parsing + +```typescript +import { preparse, parse, isValid } from 'date-and-time'; + +function safeParse(dateString: string, format: string) { + const result = preparse(dateString, format); + + // Check if required components are present + if (result.Y && result.M && result.D) { + return parse(dateString, format); + } + + throw new Error('Missing required date components'); +} +``` + +### Custom Date Validation + +```typescript +function validateBusinessDay(dateString: string, format: string) { + const result = preparse(dateString, format); + + if (result.Y && result.M && result.D) { + const date = new Date(result.Y, result.M - 1, result.D); + const dayOfWeek = date.getDay(); + + if (dayOfWeek === 0 || dayOfWeek === 6) { + throw new Error('Business days only (Monday-Friday)'); + } + + return date; + } + + throw new Error('Invalid date format'); +} +``` + +## Error Handling + +If parsing fails, `preparse()` returns an object with parsing metadata but without the main date components (Y, M, D, H, etc.). + +```typescript +const result = preparse('invalid-date', 'YYYY-MM-DD'); +console.log(result); +// { +// _index: 0, +// _length: 12, +// _match: 0 +// } + +// Check for successful parsing by looking for date components +if (!result.Y && !result.M && !result.D) { + console.log('Parsing failed - no date components found'); +} + +// Alternative: check the _match property +if (result._match === 0) { + console.log('Parsing failed - no tokens matched'); +} +``` + +## See Also + +- [`parse()`](./parse) - Parse formatted date strings into Date objects +- [`compile()`](./compile) - Precompile format patterns for performance +- [`isValid()`](./isValid) - Validate date string formats diff --git a/docs/api/subtract.md b/docs/api/subtract.md new file mode 100644 index 0000000..f4b9cdb --- /dev/null +++ b/docs/api/subtract.md @@ -0,0 +1,227 @@ +# subtract() + +Calculates the difference between two Date objects and return a rich Duration object with multiple time units and formatting options. + +## Syntax + +```typescript +subtract(date1, date2) +``` + +### Parameters + +| Parameter | Type | Required | Description | +|-----------|------|----------|-------------| +| `date1` | `Date` | Yes | The earlier/start date | +| `date2` | `Date` | Yes | The later/end date | + +### Returns + +`Duration` - Rich duration object containing the time difference with properties for years, months, days, hours, minutes, seconds, and milliseconds + +## Basic Examples + +### Calculating Time Differences + +```typescript +import { subtract } from 'date-and-time'; + +const start = new Date(2024, 0, 1, 10, 30, 0); // January 1, 2024 10:30:00 +const end = new Date(2024, 0, 1, 14, 45, 30); // January 1, 2024 14:45:30 + +const duration = subtract(start, end); + +console.log(duration.toHours().value); // 4.258333... +console.log(duration.toMinutes().value); // 255.5 +console.log(duration.toSeconds().value); // 15330 + +const hoursParts = duration.toHours().toParts(); + +console.log(hoursParts.hours); // 4 +console.log(hoursParts.minutes); // 15 +console.log(hoursParts.seconds); // 30 +``` + +### Cross-Day Calculation + +```typescript +const start = new Date(2024, 6, 15, 22, 30); // July 15, 2024 22:30 +const end = new Date(2024, 6, 18, 8, 15); // July 18, 2024 08:15 + +const duration = subtract(start, end); +const daysParts = duration.toDays().toParts(); + +console.log(daysParts.days); // 2 +console.log(daysParts.hours); // 9 +console.log(daysParts.minutes); // 45 +console.log(duration.toHours().value); // 57.75 (total hours as decimal) +``` + +### Age Calculation + +```typescript +const birthDate = new Date(1990, 5, 15); // June 15, 1990 +const today = new Date(); // Current date + +const age = subtract(birthDate, today); +const ageParts = age.toDays().toParts(); + +// Note: Simple age calculation (not accounting for leap years) +console.log(`Age: ${Math.floor(ageParts.days / 365)} years`); + +// Get total days lived +console.log(`Total days lived: ${ageParts.days}`); +``` + +## Duration Object Methods + +The returned Duration object provides methods to convert and format durations. The Duration can also be directly instantiated with a millisecond value: + +```typescript +class Duration { + constructor(milliseconds: number) // Create Duration instance directly + + // Convert to different time units with value and formatting capabilities + toNanoseconds(): DurationDescriptor + toMicroseconds(): DurationDescriptor + toMilliseconds(): DurationDescriptor + toSeconds(): DurationDescriptor + toMinutes(): DurationDescriptor + toHours(): DurationDescriptor + toDays(): DurationDescriptor +} + +interface DurationDescriptor { + value: number // Total duration in the specified unit + format: (formatString: string, numeral?: Numeral) => string // Format duration with custom pattern + toParts: () => T // Get duration broken down into parts +} + +// Example part interfaces +interface HoursParts { + hours: number + minutes: number + seconds: number + milliseconds: number + microseconds: number + nanoseconds: number +} +``` + +### Creating Duration Instances Directly + +```typescript +import { Duration } from 'date-and-time'; + +// Create a Duration for 2 hours (7200000 milliseconds) +const duration = new Duration(7200000); +console.log(duration.toHours().value); // 2 +console.log(duration.toMinutes().value); // 120 + +// Format the duration +console.log(duration.toHours().format('H[h] m[m]')); // "2h 0m" +``` + +### Advanced Duration Formatting + +```typescript +const start = new Date(2024, 7, 15, 9, 30, 45); +const end = new Date(2024, 7, 18, 16, 15, 20); +const duration = subtract(start, end); + +// Various formatting options +console.log(duration.toDays().format('D[d] H[h] m[m]')); // "3d 6h 44m" +console.log(duration.toHours().format('H:mm:ss')); // "78:44:35" +console.log(duration.toMinutes().format('[Total minutes:] m')); // "Total minutes: 4724" +console.log(duration.toDays().format('D[day], H:mm:ss.SSS')); // "3day, 6:44:35.000" +``` + +## Use Cases + +### Work Session Tracking + +```typescript +const clockIn = new Date(2024, 7, 15, 9, 0); // August 15, 2024 09:00 +const clockOut = new Date(2024, 7, 15, 17, 45); // August 15, 2024 17:45 + +const duration = subtract(clockIn, clockOut); +console.log(duration.toHours().value); // 8.75 +console.log(duration.toHours().format('H:mm')); // "8:45" +console.log(duration.toHours().format('H[h] m[m]')); // "8h 45m" +``` + +### Performance Monitoring + +```typescript +const start = performance.now(); +// ... some operation ... +const end = performance.now(); + +// Create Duration directly from millisecond difference +const duration = new Duration(end - start); + +console.log(duration.toMilliseconds().format('SSS[ms]')); // "234ms" +``` + +## Edge Cases and Behavior + +### Negative Durations + +When the first argument is later than the second argument, `subtract()` returns negative duration values. This behavior allows for flexible date comparison in either direction. + +```typescript +// Comparing dates in reverse chronological order +const later = new Date(2024, 7, 15, 14, 30); // 2:30 PM +const earlier = new Date(2024, 7, 15, 10, 15); // 10:15 AM + +const negativeDuration = subtract(later, earlier); +console.log(negativeDuration.toHours().value); // -4.25 (negative value) +console.log(negativeDuration.toMinutes().value); // -255 (all values are negative) + +// Format methods handle negative values appropriately +console.log(negativeDuration.toHours().format('H[h] m[m]')); // "-4h 15m" +``` + +### Negative Zero + +An edge case of negative durations occurs when the difference is negative but the integer part of certain units is zero. This affects both `toParts()` and `format()` output differently. + +```typescript +// Short negative duration (less than 1 day but more than 1 hour) +const date1 = new Date(2024, 7, 15, 14, 30); // 2:30 PM +const date2 = new Date(2024, 7, 15, 12, 15); // 12:15 PM + +const duration = subtract(date1, date2); +console.log(duration.toDays().value); // -0.09375 (negative but less than 1 day) + +// toParts() shows negative signs on all non-zero unit values +const parts = duration.toDays().toParts(); +console.log(parts); // { days: 0, hours: -2, minutes: -15, seconds: 0, ... } + +// format() places a single negative sign at the beginning, potentially creating "-0" +console.log(duration.toDays().format('D[day], H:mm:ss')); // "-0day, 2:15:00" +``` + +## Immutability + +Both input Date objects remain unchanged: + +```typescript +const date1 = new Date(2024, 7, 15, 14, 30); +const date2 = new Date(2024, 7, 15, 12, 15); +const duration = subtract(date2, date1); + +console.log(date1); // Unchanged +console.log(date2); // Unchanged +console.log(duration.toHours().value); // 2.25 (new Duration object) +``` + +## See Also + +- [`addYears()`](./addYears) - Add/subtract years +- [`addMonths()`](./addMonths) - Add/subtract months +- [`addDays()`](./addDays) - Add/subtract days +- [`addHours()`](./addHours) - Add/subtract hours +- [`addMinutes()`](./addMinutes) - Add/subtract minutes +- [`addSeconds()`](./addSeconds) - Add/subtract seconds +- [`addMilliseconds()`](./addMilliseconds) - Add/subtract milliseconds diff --git a/docs/api/transform.md b/docs/api/transform.md new file mode 100644 index 0000000..4ebc42d --- /dev/null +++ b/docs/api/transform.md @@ -0,0 +1,152 @@ +# transform() + +Transforms date strings from one format to another. This is a convenience function that combines parse() and format() operations. + +## Syntax + +```typescript +transform(dateString, sourceFormat, targetFormat[, parserOptions, formatterOptions]) +``` + +### Parameters + +| Parameter | Type | Required | Description | +|-----------|------|----------|-------------| +| `dateString` | `string` | Yes | The input date string to transform | +| `sourceFormat` | `string \| CompiledObject` | Yes | Source format pattern or compiled pattern | +| `targetFormat` | `string \| CompiledObject` | Yes | Target format pattern or compiled pattern | +| `parserOptions` | `ParserOptions` | No | Options for parsing the source string | +| `formatterOptions` | `FormatterOptions` | No | Options for formatting the target string | + +### Returns + +`string` - The transformed date string in the target format + +## Basic Examples + +### Format Transformation + +```typescript +import { transform } from 'date-and-time'; + +// ISO to US format +const result = transform('2025-08-23', 'YYYY-MM-DD', 'MM/DD/YYYY'); +console.log(result); // '08/23/2025' + +// Add time components +const withTime = transform('2025-08-23', 'YYYY-MM-DD', 'DD/MM/YYYY HH:mm:ss'); +console.log(withTime); // '23/08/2025 00:00:00' +``` + +### Time Format Conversion + +```typescript +// 24-hour to 12-hour format +const time12 = transform('14:30:45', 'HH:mm:ss', 'h:mm:ss A'); +console.log(time12); // '2:30:45 PM' + +// 12-hour to 24-hour format +const time24 = transform('2:30:45 PM', 'h:mm:ss A', 'H:mm:ss'); +console.log(time24); // '14:30:45' +``` + +### With Localized Formats + +```typescript +import es from 'date-and-time/locales/es'; + +// Transform Spanish to English UTC +const localized = transform( + 'viernes, 23 ago 2025 14:30:45 GMT+0200', + 'dddd, DD MMM YYYY HH:mm:ss [GMT]Z', + 'ddd, DD MMM YYYY HH:mm:ss [GMT]', + { locale: es } +); +console.log(localized); // 'Fri, 23 Aug 2025 12:30:45 GMT' +``` + +### Using Compiled Patterns + +```typescript +import { compile, transform } from 'date-and-time'; + +// Precompile for better performance +const sourcePattern = compile('YYYY-MM-DD HH:mm:ss'); +const targetPattern = compile('DD/MM/YYYY h:mm:ss A'); + +const result = transform( + '2025-08-23 14:30:45', + sourcePattern, + targetPattern +); +console.log(result); // '23/08/2025 2:30:45 PM' +``` + +## Use Cases + +### API Response Transformation + +```typescript +function normalizeApiDates(apiResponse: any) { + // Transform API dates to display format + if (apiResponse.created_at) { + apiResponse.created_at = transform( + apiResponse.created_at, + 'YYYY-MM-DD[T]HH:mm:ss[Z]', + 'MMM DD, YYYY [at] h:mm A' + ); + } + return apiResponse; +} + +const data = { created_at: '2025-08-23T14:30:45Z' }; +console.log(normalizeApiDates(data)); +// { created_at: 'Aug 23, 2025 at 2:30 PM' } +``` + +### Batch Format Conversion + +```typescript +function convertDateFormats(dates: string[], sourceFormat: string, targetFormat: string) { + return dates.map(date => transform(date, sourceFormat, targetFormat)); +} + +const dates = ['2025-08-23', '2025-08-24', '2025-08-25']; +const converted = convertDateFormats(dates, 'YYYY-MM-DD', 'DD/MM/YYYY'); +console.log(converted); +// ['23/08/2025', '24/08/2025', '25/08/2025'] +``` + +### Form Input Standardization + +```typescript +function standardizeUserInput(userDate: string, userFormat: string) { + // Always convert user input to ISO format for storage + return transform(userDate, userFormat, 'YYYY-MM-DD'); +} + +const userInput = '23/08/2025'; +const standardized = standardizeUserInput(userInput, 'DD/MM/YYYY'); +console.log(standardized); // '2025-08-23' +``` + +## Implementation Details + +The `transform()` function is a convenience wrapper that internally: + +1. Parses the input string using the source format +2. Formats the resulting Date object using the target format + +```typescript +// transform() is equivalent to: +const date = parse(dateString, sourceFormat); +const result = format(date, targetFormat); + +// But provides a cleaner API: +const result = transform(dateString, sourceFormat, targetFormat); +``` + +## See Also + +- [`format()`](./format) - Format Date objects using compiled patterns +- [`compile()`](./compile) - Precompile format patterns for performance diff --git a/docs/guide/index.md b/docs/guide/index.md new file mode 100644 index 0000000..be83eee --- /dev/null +++ b/docs/guide/index.md @@ -0,0 +1,129 @@ +# Introduction + +**date-and-time** is the simplest, most intuitive date and time library for JavaScript and TypeScript. Built from the ground up with modern development practices, it provides a comprehensive set of tools for date manipulation, formatting, parsing, and timezone handling. + +## Why date-and-time? + +### 🚀 Modern & Performant + +- Written entirely in **TypeScript** with ES2021 target +- **Tree-shakable** modules for optimal bundle size +- **Zero dependencies** for core functionality +- Full **ES Modules** and **CommonJS** support + +### 🌍 Internationalization Ready + +- Support for **40+ locales** with native month/day names +- Multiple **calendar systems** (Gregorian, Buddhist) +- **Numeral systems** (Latin, Arabic, Bengali, Myanmar) +- **Timezone-aware** formatting and parsing + +### 🎯 Developer Experience + +- **Full TypeScript** support with comprehensive type definitions +- **IntelliSense** support in modern editors +- **Consistent API** design across all functions +- **Extensive documentation** and examples + +### 📦 Production Ready + +- **Node.js 18+** support +- **Modern browser** compatibility (Chrome 85+, Firefox 78+, Safari 14+) +- **Comprehensive test suite** with high coverage +- **Battle-tested** in production environments + +## Key Features + +### Formatting and Parsing + +- **`format()`** - Convert Date objects to formatted strings +- **`parse()`** - Parse date strings into Date objects +- **`compile()`** - Precompile format strings for performance +- **`preparse()`** - Parse date strings and return intermediate results +- **`isValid()`** - Validate date string formats +- **`transform()`** - Transform date strings between different formats + +### Date Arithmetic + +- **`addYears()`, `addMonths()`, `addDays()`** - Date addition +- **`addHours()`, `addMinutes()`, `addSeconds()`, `addMilliseconds()`** - Time addition +- **`subtract()`** - Calculate time differences with Duration objects + +### Utility Functions + +- **`isLeapYear()`** - Check if a year is a leap year +- **`isSameDay()`** - Check if two dates are on the same day + +### Advanced Features + +- **Timezone Support** - Comprehensive timezone data from timezonedb +- **Locale Support** - 40+ languages with native formatting +- **Plugin System** - Extensible with microsecond/nanosecond precision +- **Duration Objects** - Rich time difference calculations + +## Version 4.x Highlights + +Version 4.x represents a complete rewrite with significant improvements: + +### 🔄 Breaking Changes + +- **TypeScript-first** development approach +- **Integrated plugins** - timezone and timespan functionality built-in +- **New API signatures** - options objects replace boolean parameters +- **Modern JavaScript** - ES2021 features throughout + +### 📈 Performance Improvements + +- **Reduced bundle size** with tree-shaking + +### 🛠 Developer Improvements + +- **Expanded language support** - Now supporting 40+ locales +- **Improved TypeScript** inference and completion +- **Comprehensive documentation** with live examples + +## Architecture + +```typescript +import { format, parse } from 'date-and-time'; +import ja from 'date-and-time/locales/ja'; +import Tokyo from 'date-and-time/timezones/Asia/Tokyo'; + +// Core functionality +const date = new Date(); +const formatted = format(date, 'YYYY/MM/DD'); + +// Localized formatting +const localized = format(date, 'YYYY年M月D日', { locale: ja }); + +// Timezone-aware operations +const tokyoTime = format(date, 'YYYY-MM-DD HH:mm:ss', { timeZone: Tokyo }); +``` + +## Browser and Environment Support + +### Node.js + +- **Node.js 18.0.0+** (LTS recommended) +- Full ES Modules support +- CommonJS compatibility + +### Browsers + +| Browser | Minimum Version | +|---------|----------------| +| Chrome | 85+ | +| Firefox | 78+ | +| Safari | 14+ | +| Edge | 85+ | + +### Module Systems + +- **ES Modules** (`.mjs`, `type: "module"`) +- **CommonJS** (`.cjs`, traditional Node.js) +- **TypeScript** (4.5+) +- **Bundlers** (Webpack, Rollup, Vite, etc.) + +## Getting Started + +Ready to start using date-and-time? Continue to the [Installation Guide](./installation) to set up the library in your project. diff --git a/docs/guide/installation.md b/docs/guide/installation.md new file mode 100644 index 0000000..cff1fd7 --- /dev/null +++ b/docs/guide/installation.md @@ -0,0 +1,187 @@ +# Installation + +Get started with date-and-time in your project using your preferred package manager. + +## Package Manager Installation + +::: code-group + +```bash [npm] +npm install date-and-time +``` + +```bash [yarn] +yarn add date-and-time +``` + +```bash [pnpm] +pnpm add date-and-time +``` + +::: + +## Requirements + +### Runtime Requirements + +- **Node.js**: Version 18.0.0 or higher +- **Browsers**: ES2021 support required + +### Development Requirements (optional) + +- **TypeScript**: Version 4.5 or higher for full type support +- **Modern bundler**: For optimal tree-shaking (Webpack 5+, Rollup, Vite, etc.) + +## Import Methods + +date-and-time supports both ES Modules and CommonJS, allowing you to use the import style that best fits your project. + +### ES Modules (Recommended) + +```typescript +import { format, parse } from 'date-and-time'; + +format(new Date(), 'YYYY/MM/DD'); +// => 2025/08/23 +``` + +### CommonJS + +```typescript +const { format, parse } = require('date-and-time'); + +format(new Date(), 'YYYY/MM/DD'); +// => 2025/08/23 +``` + +## Importing Locales and Timezones + +Locales and timezones are distributed as separate modules to support tree shaking: + +### Locale Imports + +```typescript +// Import specific locales +import ja from 'date-and-time/locales/ja'; +import es from 'date-and-time/locales/es'; +import fr from 'date-and-time/locales/fr'; + +// Use in formatting +format(new Date(), 'YYYY年M月D日', { locale: ja }); +format(new Date(), 'D [de] MMMM [de] YYYY', { locale: es }); +format(new Date(), 'D MMMM YYYY', { locale: fr }); +``` + +For a complete list of all supported locales with import examples, see [Supported Locales](../locales). + +### Timezone Imports + +```typescript +// Import specific timezones +import Tokyo from 'date-and-time/timezones/Asia/Tokyo'; +import New_York from 'date-and-time/timezones/America/New_York'; +import London from 'date-and-time/timezones/Europe/London'; + +// Use in operations +format(new Date(), 'YYYY-MM-DD HH:mm:ss', { timeZone: Tokyo }); +format(new Date(), 'YYYY-MM-DD HH:mm:ss', { timeZone: New_York }); +``` + +For a complete list of all supported timezones with import examples, see [Supported Timezones](../timezones). + +### Numeral Systems + +```typescript +// Import numeral systems +import arab from 'date-and-time/numerals/arab'; +import beng from 'date-and-time/numerals/beng'; + +format(new Date(), 'DD/MM/YYYY', { numeral: arab }); +// => ٠٨/٠٧/٢٠٢٥ +``` + +## Plugin Imports + +Some advanced features are available as plugins: + +```typescript +import { format } from 'date-and-time'; +// Import specific plugins +import microsecond from 'date-and-time/plugins/microsecond'; +import ordinal from 'date-and-time/plugins/ordinal'; +import zonename from 'date-and-time/plugins/zonename'; + +// Use plugin-specific tokens with plugins specified in options +format(new Date(), 'MMMM DDD, YYYY', { plugins: [ordinal] }); // with ordinal plugin +format(new Date(), 'HH:mm:ss.SSSSSS', { plugins: [microsecond] }); // with microsecond plugin +``` + +## CDN Usage + +For browser-only projects, you can use date-and-time directly from a CDN: + +### ES Modules via CDN + +```html + +``` + +### Via unpkg + +```html + +``` + +## Bundle Size + +::: tip Tree Shaking Benefits +date-and-time is built with tree-shaking in mind. You only bundle the functions and locales you actually use, resulting in optimal bundle sizes. Modern bundlers like Webpack 5, Rollup, and Vite automatically eliminate unused code, ensuring your application stays lightweight. +::: + +## Verification + +After installation, verify that the library works correctly: + +```typescript +import { format } from 'date-and-time'; + +console.log(format(new Date(), 'YYYY/MM/DD HH:mm:ss')); +// Should output current date in YYYY/MM/DD HH:mm:ss format +``` + +## Next Steps + +Now that you have date-and-time installed, you can: + +1. **[Quick Start](./quick-start)** - Learn the basics with simple examples +2. **[API Reference](/api/)** - Dive deep into all available functions + +## Troubleshooting + +### TypeScript Issues + +If you encounter TypeScript errors, ensure you're using TypeScript 4.5+ and have the latest version of date-and-time: + +```bash +npm install typescript@latest date-and-time@latest +``` + +### Module Resolution Issues + +For Node.js projects using ES Modules, ensure your `package.json` includes: + +```json +{ + "type": "module" +} +``` + +For CommonJS projects, this field should be omitted or set to `"commonjs"`. diff --git a/docs/guide/quick-start.md b/docs/guide/quick-start.md new file mode 100644 index 0000000..3d6eb80 --- /dev/null +++ b/docs/guide/quick-start.md @@ -0,0 +1,187 @@ +# Quick Start + +This guide will get you up and running with date-and-time in just a few minutes. + +## Basic Example + +```typescript +import { format, parse } from 'date-and-time'; + +const now = new Date(); + +// Format a date +const formatted = format(now, 'YYYY/MM/DD HH:mm:ss'); +console.log(formatted); +// => 2025/08/23 14:30:45 + +// Parse a date string +const parsed = parse('2025/08/23 14:30:45', 'YYYY/MM/DD HH:mm:ss'); +console.log(parsed); +// => Fri Aug 23 2025 14:30:45 GMT+0900 +``` + +## Common Format Patterns + +### Date Formats + +```typescript +import { format } from 'date-and-time'; + +const date = new Date(); + +format(date, 'YYYY-MM-DD'); // => 2025-08-23 +format(date, 'MM/DD/YYYY'); // => 08/23/2025 +format(date, 'DD.MM.YYYY'); // => 23.08.2025 +format(date, 'MMMM D, YYYY'); // => August 23, 2025 +format(date, 'ddd, MMM DD YYYY'); // => Sat, Aug 23 2025 +``` + +### Time Formats + +```typescript +format(date, 'HH:mm:ss'); // => 14:30:45 (24-hour) +format(date, 'hh:mm:ss A'); // => 02:30:45 PM (12-hour) +format(date, 'h:mm A'); // => 2:30 PM (12-hour, no leading zero) +``` + +### Combined DateTime Formats + +```typescript +format(date, 'YYYY-MM-DD HH:mm:ss'); // => 2025-08-23 14:30:45 +format(date, 'ddd, MMM D, YYYY [at] h:mm A'); +// => Sat, Aug 23, 2025 at 2:30 PM + +format(date, '[Today is] dddd'); // => Today is Saturday +``` + +## Working with Locales + +```typescript +import { format } from 'date-and-time'; +import ja from 'date-and-time/locales/ja'; +import es from 'date-and-time/locales/es'; +import fr from 'date-and-time/locales/fr'; + +const date = new Date(); + +// Japanese +format(date, 'YYYY年M月D日(ddd)', { locale: ja }); +// => 2025年8月23日(土) + +// Spanish +format(date, 'dddd, D [de] MMMM [de] YYYY', { locale: es }); +// => sábado, 23 de agosto de 2025 + +// French +format(date, 'dddd D MMMM YYYY', { locale: fr }); +// => samedi 23 août 2025 +``` + +For a complete list of all supported locales with import examples, see [Supported Locales](../locales). + +## Timezone Operations + +```typescript +import { format, parse } from 'date-and-time'; +import Tokyo from 'date-and-time/timezones/Asia/Tokyo'; +import New_York from 'date-and-time/timezones/America/New_York'; + +const date = new Date(); + +// Format in different timezones +format(date, 'YYYY-MM-DD HH:mm:ss [JST]', { timeZone: Tokyo }); +// => 2025-08-23 23:30:45 JST + +format(date, 'YYYY-MM-DD HH:mm:ss [EST]', { timeZone: New_York }); +// => 2025-08-23 09:30:45 EST + +// UTC formatting +format(date, 'YYYY-MM-DD HH:mm:ss [UTC]', { timeZone: 'UTC' }); +// => 2025-08-23 14:30:45 UTC +``` + +For a complete list of all supported timezones with import examples, see [Supported Timezones](../timezones). + +## Date Arithmetic + +```typescript +import { addDays, addHours, addMonths, subtract } from 'date-and-time'; + +const date = new Date(2025, 7, 23); // Aug 23, 2025 + +// Add time +const nextWeek = addDays(date, 7); // Aug 30, 2025 +const nextMonth = addMonths(date, 1); // Sep 23, 2025 +const inFiveHours = addHours(date, 5); // Aug 23, 2025 05:00:00 + +// Subtract time (use negative values) +const lastWeek = addDays(date, -7); // Aug 16, 2025 + +// Calculate differences +const start = new Date(2025, 7, 23, 10, 0, 0); +const end = new Date(2025, 7, 23, 14, 30, 0); +const duration = subtract(start, end); + +console.log(duration.toHours().value); // => 4.5 +console.log(duration.toMinutes().value); // => 270 +``` + +## Validation + +```typescript +import { isValid, parse } from 'date-and-time'; + +// Check if a date string is valid +isValid('2025/08/23', 'YYYY/MM/DD'); // => true +isValid('2025/02/30', 'YYYY/MM/DD'); // => false (no Feb 30th) +isValid('invalid-date', 'YYYY/MM/DD'); // => false + +// Safe parsing with validation +if (isValid('2025/08/23', 'YYYY/MM/DD')) { + const date = parse('2025/08/23', 'YYYY/MM/DD'); + console.log('Parsed successfully:', date); +} else { + console.log('Invalid date format'); +} +``` + +## Performance Optimization + +For repeated operations with the same format pattern, use `compile()`: + +```typescript +import { compile, format, parse } from 'date-and-time'; + +// Compile the pattern once +const pattern = compile('YYYY/MM/DD HH:mm:ss'); + +// Reuse for multiple operations (faster) +const dates = [new Date(), new Date(), new Date()]; +dates.forEach(date => { + console.log(format(date, pattern)); +}); +``` + +## Error Handling + +```typescript +import { parse } from 'date-and-time'; + +// parse() returns Invalid Date on failure +const result = parse('invalid-date', 'YYYY/MM/DD'); + +// Check for parsing errors +if (isNaN(result.getTime())) { + console.error('Failed to parse date'); +} else { + console.log('Successfully parsed:', result); +} +``` + +## Next Steps + +Now that you're familiar with the basics: + +1. **[API Reference](/api/)** - Explore all available functions +2. **[Plugins](../plugins)** - Extend functionality with microsecond precision, ordinals, and more +3. **[Migration Guide](../migration)** - If upgrading from v3.x diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..9b66610 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,116 @@ +--- +layout: home + +hero: + name: "date-and-time" + text: "The simplest, most intuitive date and time library" + tagline: "Modern TypeScript library for date manipulation with full ES Modules support" + image: + src: /logo.png + alt: date-and-time + actions: + - theme: brand + text: Get Started + link: /guide/ + - theme: alt + text: API Reference + link: /api/ + - theme: alt + text: View on GitHub + link: https://github.com/knowledgecode/date-and-time + +features: + - icon: ⚡ + title: Modern & Fast + details: Written in TypeScript with ES2021 target. Tree-shakable modules for optimal bundle size. + + - icon: 🌍 + title: Internationalization + details: Support for 40+ locales and multiple calendar systems. Arabic, Bengali, Myanmar numerals. + + - icon: 🕐 + title: Timezone Support + details: Complete timezone handling with IANA timezone database built-in. + + - icon: 🎯 + title: Type Safe + details: Full TypeScript support with comprehensive type definitions and IntelliSense. + + - icon: 📦 + title: Tree Shakable + details: Import only what you need. Optimized for modern bundlers with sideEffects false. + + - icon: 🧩 + title: Plugin System + details: Extensible with microsecond/nanosecond precision and custom formatting options. +--- + +## Quick Example + +```typescript +import { format, parse, addDays } from 'date-and-time'; +import ja from 'date-and-time/locales/ja'; +import Tokyo from 'date-and-time/timezones/Asia/Tokyo'; + +const now = new Date(); + +// Basic formatting +format(now, 'YYYY/MM/DD HH:mm:ss'); +// => 2025/08/23 14:30:45 + +// Localized formatting +format(now, 'YYYY年M月D日(ddd)', { locale: ja }); +// => 2025年8月23日(金) + +// Timezone-aware formatting +format(now, 'YYYY-MM-DD HH:mm:ss [JST]', { timeZone: Tokyo }); +// => 2025-08-23 23:30:45 JST + +// Parsing +const date = parse('2025/08/23 14:30:45', 'YYYY/MM/DD HH:mm:ss'); +console.log(date) + +// Date arithmetic +const futureDate = addDays(now, 7); +console.log(format(futureDate, 'YYYY/MM/DD')); +``` + +## Key Features in v4.x + +- **🔄 Complete TypeScript rewrite** with enhanced type safety +- **📦 Tree-shaking support** for better bundle optimization +- **🌍 Integrated timezone and timespan plugins** into the core library +- **🎯 Modern JavaScript** targeting ES2021 (Node.js ≥18 required) +- **🔧 Enhanced API** with options objects instead of boolean flags +- **📚 Improved locale handling** with per-function locale specification + +## Browser & Environment Support + +- **Node.js**: 18+ +- **Browsers**: Chrome 85+, Firefox 78+, Safari 14+, Edge 85+ +- **Module Systems**: ES Modules, CommonJS +- **TypeScript**: 4.5+ + +## Installation + +::: code-group + +```bash [npm] +npm install date-and-time +``` + +```bash [yarn] +yarn add date-and-time +``` + +```bash [pnpm] +pnpm add date-and-time +``` + +::: + +## Community + +- [GitHub Repository](https://github.com/knowledgecode/date-and-time) +- [npm Package](https://www.npmjs.com/package/date-and-time) +- [Issue Tracker](https://github.com/knowledgecode/date-and-time/issues) diff --git a/docs/locales.md b/docs/locales.md new file mode 100644 index 0000000..9a0861d --- /dev/null +++ b/docs/locales.md @@ -0,0 +1,247 @@ +# Supported Locales + +- ar (Arabic) + +```typescript +import ar from 'date-and-time/locales/ar'; +``` + +- az (Azerbaijani) + +```typescript +import az from 'date-and-time/locales/az'; +``` + +- bn (Bengali) + +```typescript +import bn from 'date-and-time/locales/bn'; +``` + +- cs (Czech) + +```typescript +import cs from 'date-and-time/locales/cs'; +``` + +- da (Danish) + +```typescript +import da from 'date-and-time/locales/da'; +``` + +- de (German) + +```typescript +import de from 'date-and-time/locales/de'; +``` + +- el (Greek) + +```typescript +import el from 'date-and-time/locales/el'; +``` + +- en (English) + +```typescript +import en from 'date-and-time/locales/en'; +``` + +- es (Spanish) + +```typescript +import es from 'date-and-time/locales/es'; +``` + +- fa (Persian) + +```typescript +import fa from 'date-and-time/locales/fa'; +``` + +- fi (Finnish) + +```typescript +import fi from 'date-and-time/locales/fi'; +``` + +- fr (French) + +```typescript +import fr from 'date-and-time/locales/fr'; +``` + +- he (Hebrew) + +```typescript +import he from 'date-and-time/locales/he'; +``` + +- hi (Hindi) + +```typescript +import hi from 'date-and-time/locales/hi'; +``` + +- hu (Hungarian) + +```typescript +import hu from 'date-and-time/locales/hu'; +``` + +- id (Indonesian) + +```typescript +import id from 'date-and-time/locales/id'; +``` + +- it (Italian) + +```typescript +import it from 'date-and-time/locales/it'; +``` + +- ja (Japanese) + +```typescript +import ja from 'date-and-time/locales/ja'; +``` + +- ko (Korean) + +```typescript +import ko from 'date-and-time/locales/ko'; +``` + +- ms (Malay) + +```typescript +import ms from 'date-and-time/locales/ms'; +``` + +- my (Burmese) + +```typescript +import my from 'date-and-time/locales/my'; +``` + +- nl (Dutch) + +```typescript +import nl from 'date-and-time/locales/nl'; +``` + +- no (Norwegian) + +```typescript +import no from 'date-and-time/locales/no'; +``` + +- pl (Polish) + +```typescript +import pl from 'date-and-time/locales/pl'; +``` + +- pt-BR (Brazilian Portuguese) + +```typescript +import ptBR from 'date-and-time/locales/pt-BR'; +``` + +- pt-PT (European Portuguese) + +```typescript +import ptPT from 'date-and-time/locales/pt-PT'; +``` + +- ro (Romanian) + +```typescript +import ro from 'date-and-time/locales/ro'; +``` + +- ru (Russian) + +```typescript +import ru from 'date-and-time/locales/ru'; +``` + +- rw (Kinyarwanda) + +```typescript +import rw from 'date-and-time/locales/rw'; +``` + +- sr-Cyrl (Serbian Cyrillic) + +```typescript +import srCyrl from 'date-and-time/locales/sr-Cyrl'; +``` + +- sr-Latn (Serbian Latin) + +```typescript +import srLatn from 'date-and-time/locales/sr-Latn'; +``` + +- sv (Swedish) + +```typescript +import sv from 'date-and-time/locales/sv'; +``` + +- ta (Tamil) + +```typescript +import ta from 'date-and-time/locales/ta'; +``` + +- th (Thai) + +```typescript +import th from 'date-and-time/locales/th'; +``` + +- tr (Turkish) + +```typescript +import tr from 'date-and-time/locales/tr'; +``` + +- uk (Ukrainian) + +```typescript +import uk from 'date-and-time/locales/uk'; +``` + +- uz-Cyrl (Uzbek Cyrillic) + +```typescript +import uzCyrl from 'date-and-time/locales/uz-Cyrl'; +``` + +- uz-Latn (Uzbek Latin) + +```typescript +import uzLatn from 'date-and-time/locales/uz-Latn'; +``` + +- vi (Vietnamese) + +```typescript +import vi from 'date-and-time/locales/vi'; +``` + +- zh-Hans (Simplified Chinese) + +```typescript +import zhHans from 'date-and-time/locales/zh-Hans'; +``` + +- zh-Hant (Traditional Chinese) + +```typescript +import zhHant from 'date-and-time/locales/zh-Hant'; +``` diff --git a/docs/public/logo.png b/docs/public/logo.png new file mode 100644 index 0000000..027b3fc Binary files /dev/null and b/docs/public/logo.png differ diff --git a/docs/timezones.md b/docs/timezones.md new file mode 100644 index 0000000..e9a49bc --- /dev/null +++ b/docs/timezones.md @@ -0,0 +1,2550 @@ +# Supported Timezones + +## Regions + +1. [Africa](#africa) +2. [America](#america) +3. [Antarctica](#antarctica) +4. [Arctic](#arctic) +5. [Asia](#asia) +6. [Atlantic](#atlantic) +7. [Australia](#australia) +8. [Europe](#europe) +9. [Indian](#indian) +10. [Pacific](#pacific) + +## Africa + +- Abidjan + +```typescript +import Abidjan from 'date-and-time/timezones/Africa/Abidjan'; +``` + +- Accra + +```typescript +import Accra from 'date-and-time/timezones/Africa/Accra'; +``` + +- Addis_Ababa + +```typescript +import Addis_Ababa from 'date-and-time/timezones/Africa/Addis_Ababa'; +``` + +- Algiers + +```typescript +import Algiers from 'date-and-time/timezones/Africa/Algiers'; +``` + +- Asmara + +```typescript +import Asmara from 'date-and-time/timezones/Africa/Asmara'; +``` + +- Bamako + +```typescript +import Bamako from 'date-and-time/timezones/Africa/Bamako'; +``` + +- Bangui + +```typescript +import Bangui from 'date-and-time/timezones/Africa/Bangui'; +``` + +- Banjul + +```typescript +import Banjul from 'date-and-time/timezones/Africa/Banjul'; +``` + +- Bissau + +```typescript +import Bissau from 'date-and-time/timezones/Africa/Bissau'; +``` + +- Blantyre + +```typescript +import Blantyre from 'date-and-time/timezones/Africa/Blantyre'; +``` + +- Brazzaville + +```typescript +import Brazzaville from 'date-and-time/timezones/Africa/Brazzaville'; +``` + +- Bujumbura + +```typescript +import Bujumbura from 'date-and-time/timezones/Africa/Bujumbura'; +``` + +- Cairo + +```typescript +import Cairo from 'date-and-time/timezones/Africa/Cairo'; +``` + +- Casablanca + +```typescript +import Casablanca from 'date-and-time/timezones/Africa/Casablanca'; +``` + +- Ceuta + +```typescript +import Ceuta from 'date-and-time/timezones/Africa/Ceuta'; +``` + +- Conakry + +```typescript +import Conakry from 'date-and-time/timezones/Africa/Conakry'; +``` + +- Dakar + +```typescript +import Dakar from 'date-and-time/timezones/Africa/Dakar'; +``` + +- Dar_es_Salaam + +```typescript +import Dar_es_Salaam from 'date-and-time/timezones/Africa/Dar_es_Salaam'; +``` + +- Djibouti + +```typescript +import Djibouti from 'date-and-time/timezones/Africa/Djibouti'; +``` + +- Douala + +```typescript +import Douala from 'date-and-time/timezones/Africa/Douala'; +``` + +- El_Aaiun + +```typescript +import El_Aaiun from 'date-and-time/timezones/Africa/El_Aaiun'; +``` + +- Freetown + +```typescript +import Freetown from 'date-and-time/timezones/Africa/Freetown'; +``` + +- Gaborone + +```typescript +import Gaborone from 'date-and-time/timezones/Africa/Gaborone'; +``` + +- Harare + +```typescript +import Harare from 'date-and-time/timezones/Africa/Harare'; +``` + +- Johannesburg + +```typescript +import Johannesburg from 'date-and-time/timezones/Africa/Johannesburg'; +``` + +- Juba + +```typescript +import Juba from 'date-and-time/timezones/Africa/Juba'; +``` + +- Kampala + +```typescript +import Kampala from 'date-and-time/timezones/Africa/Kampala'; +``` + +- Khartoum + +```typescript +import Khartoum from 'date-and-time/timezones/Africa/Khartoum'; +``` + +- Kigali + +```typescript +import Kigali from 'date-and-time/timezones/Africa/Kigali'; +``` + +- Kinshasa + +```typescript +import Kinshasa from 'date-and-time/timezones/Africa/Kinshasa'; +``` + +- Lagos + +```typescript +import Lagos from 'date-and-time/timezones/Africa/Lagos'; +``` + +- Libreville + +```typescript +import Libreville from 'date-and-time/timezones/Africa/Libreville'; +``` + +- Lome + +```typescript +import Lome from 'date-and-time/timezones/Africa/Lome'; +``` + +- Luanda + +```typescript +import Luanda from 'date-and-time/timezones/Africa/Luanda'; +``` + +- Lubumbashi + +```typescript +import Lubumbashi from 'date-and-time/timezones/Africa/Lubumbashi'; +``` + +- Lusaka + +```typescript +import Lusaka from 'date-and-time/timezones/Africa/Lusaka'; +``` + +- Malabo + +```typescript +import Malabo from 'date-and-time/timezones/Africa/Malabo'; +``` + +- Maputo + +```typescript +import Maputo from 'date-and-time/timezones/Africa/Maputo'; +``` + +- Maseru + +```typescript +import Maseru from 'date-and-time/timezones/Africa/Maseru'; +``` + +- Mbabane + +```typescript +import Mbabane from 'date-and-time/timezones/Africa/Mbabane'; +``` + +- Mogadishu + +```typescript +import Mogadishu from 'date-and-time/timezones/Africa/Mogadishu'; +``` + +- Monrovia + +```typescript +import Monrovia from 'date-and-time/timezones/Africa/Monrovia'; +``` + +- Nairobi + +```typescript +import Nairobi from 'date-and-time/timezones/Africa/Nairobi'; +``` + +- Ndjamena + +```typescript +import Ndjamena from 'date-and-time/timezones/Africa/Ndjamena'; +``` + +- Niamey + +```typescript +import Niamey from 'date-and-time/timezones/Africa/Niamey'; +``` + +- Nouakchott + +```typescript +import Nouakchott from 'date-and-time/timezones/Africa/Nouakchott'; +``` + +- Ouagadougou + +```typescript +import Ouagadougou from 'date-and-time/timezones/Africa/Ouagadougou'; +``` + +- Porto-Novo + +```typescript +import Porto_Novo from 'date-and-time/timezones/Africa/Porto_Novo'; +``` + +- Sao_Tome + +```typescript +import Sao_Tome from 'date-and-time/timezones/Africa/Sao_Tome'; +``` + +- Tripoli + +```typescript +import Tripoli from 'date-and-time/timezones/Africa/Tripoli'; +``` + +- Tunis + +```typescript +import Tunis from 'date-and-time/timezones/Africa/Tunis'; +``` + +- Windhoek + +```typescript +import Windhoek from 'date-and-time/timezones/Africa/Windhoek'; +``` + +## America + +- Adak + +```typescript +import Adak from 'date-and-time/timezones/America/Adak'; +``` + +- Anchorage + +```typescript +import Anchorage from 'date-and-time/timezones/America/Anchorage'; +``` + +- Anguilla + +```typescript +import Anguilla from 'date-and-time/timezones/America/Anguilla'; +``` + +- Antigua + +```typescript +import Antigua from 'date-and-time/timezones/America/Antigua'; +``` + +- Araguaina + +```typescript +import Araguaina from 'date-and-time/timezones/America/Araguaina'; +``` + +- Argentina + + - Buenos_Aires + + ```typescript + import Buenos_Aires from 'date-and-time/timezones/America/Argentina/Buenos_Aires'; + ``` + + - Catamarca + + ```typescript + import Catamarca from 'date-and-time/timezones/America/Argentina/Catamarca'; + ``` + + - Cordoba + + ```typescript + import Cordoba from 'date-and-time/timezones/America/Argentina/Cordoba'; + ``` + + - Jujuy + + ```typescript + import Jujuy from 'date-and-time/timezones/America/Argentina/Jujuy'; + ``` + + - La_Rioja + + ```typescript + import La_Rioja from 'date-and-time/timezones/America/Argentina/La_Rioja'; + ``` + + - Mendoza + + ```typescript + import Mendoza from 'date-and-time/timezones/America/Argentina/Mendoza'; + ``` + + - Rio_Gallegos + + ```typescript + import Rio_Gallegos from 'date-and-time/timezones/America/Argentina/Rio_Gallegos'; + ``` + + - Salta + + ```typescript + import Salta from 'date-and-time/timezones/America/Argentina/Salta'; + ``` + + - San_Juan + + ```typescript + import San_Juan from 'date-and-time/timezones/America/Argentina/San_Juan'; + ``` + + - San_Luis + + ```typescript + import San_Luis from 'date-and-time/timezones/America/Argentina/San_Luis'; + ``` + + - Tucuman + + ```typescript + import Tucuman from 'date-and-time/timezones/America/Argentina/Tucuman'; + ``` + + - Ushuaia + + ```typescript + import Ushuaia from 'date-and-time/timezones/America/Argentina/Ushuaia'; + ``` + +- Aruba + +```typescript +import Aruba from 'date-and-time/timezones/America/Aruba'; +``` + +- Asuncion + +```typescript +import Asuncion from 'date-and-time/timezones/America/Asuncion'; +``` + +- Atikokan + +```typescript +import Atikokan from 'date-and-time/timezones/America/Atikokan'; +``` + +- Bahia_Banderas + +```typescript +import Bahia_Banderas from 'date-and-time/timezones/America/Bahia_Banderas'; +``` + +- Bahia + +```typescript +import Bahia from 'date-and-time/timezones/America/Bahia'; +``` + +- Barbados + +```typescript +import Barbados from 'date-and-time/timezones/America/Barbados'; +``` + +- Belem + +```typescript +import Belem from 'date-and-time/timezones/America/Belem'; +``` + +- Belize + +```typescript +import Belize from 'date-and-time/timezones/America/Belize'; +``` + +- Blanc-Sablon + +```typescript +import Blanc_Sablon from 'date-and-time/timezones/America/Blanc_Sablon'; +``` + +- Boa_Vista + +```typescript +import Boa_Vista from 'date-and-time/timezones/America/Boa_Vista'; +``` + +- Bogota + +```typescript +import Bogota from 'date-and-time/timezones/America/Bogota'; +``` + +- Boise + +```typescript +import Boise from 'date-and-time/timezones/America/Boise'; +``` + +- Cambridge_Bay + +```typescript +import Cambridge_Bay from 'date-and-time/timezones/America/Cambridge_Bay'; +``` + +- Campo_Grande + +```typescript +import Campo_Grande from 'date-and-time/timezones/America/Campo_Grande'; +``` + +- Cancun + +```typescript +import Cancun from 'date-and-time/timezones/America/Cancun'; +``` + +- Caracas + +```typescript +import Caracas from 'date-and-time/timezones/America/Caracas'; +``` + +- Cayenne + +```typescript +import Cayenne from 'date-and-time/timezones/America/Cayenne'; +``` + +- Cayman + +```typescript +import Cayman from 'date-and-time/timezones/America/Cayman'; +``` + +- Chicago + +```typescript +import Chicago from 'date-and-time/timezones/America/Chicago'; +``` + +- Chihuahua + +```typescript +import Chihuahua from 'date-and-time/timezones/America/Chihuahua'; +``` + +- Ciudad_Juarez + +```typescript +import Ciudad_Juarez from 'date-and-time/timezones/America/Ciudad_Juarez'; +``` + +- Costa_Rica + +```typescript +import Costa_Rica from 'date-and-time/timezones/America/Costa_Rica'; +``` + +- Coyhaique + +```typescript +import Coyhaique from 'date-and-time/timezones/America/Coyhaique'; +``` + +- Creston + +```typescript +import Creston from 'date-and-time/timezones/America/Creston'; +``` + +- Cuiaba + +```typescript +import Cuiaba from 'date-and-time/timezones/America/Cuiaba'; +``` + +- Curacao + +```typescript +import Curacao from 'date-and-time/timezones/America/Curacao'; +``` + +- Danmarkshavn + +```typescript +import Danmarkshavn from 'date-and-time/timezones/America/Danmarkshavn'; +``` + +- Dawson_Creek + +```typescript +import Dawson_Creek from 'date-and-time/timezones/America/Dawson_Creek'; +``` + +- Dawson + +```typescript +import Dawson from 'date-and-time/timezones/America/Dawson'; +``` + +- Denver + +```typescript +import Denver from 'date-and-time/timezones/America/Denver'; +``` + +- Detroit + +```typescript +import Detroit from 'date-and-time/timezones/America/Detroit'; +``` + +- Dominica + +```typescript +import Dominica from 'date-and-time/timezones/America/Dominica'; +``` + +- Edmonton + +```typescript +import Edmonton from 'date-and-time/timezones/America/Edmonton'; +``` + +- Eirunepe + +```typescript +import Eirunepe from 'date-and-time/timezones/America/Eirunepe'; +``` + +- El_Salvador + +```typescript +import El_Salvador from 'date-and-time/timezones/America/El_Salvador'; +``` + +- Fort_Nelson + +```typescript +import Fort_Nelson from 'date-and-time/timezones/America/Fort_Nelson'; +``` + +- Fortaleza + +```typescript +import Fortaleza from 'date-and-time/timezones/America/Fortaleza'; +``` + +- Glace_Bay + +```typescript +import Glace_Bay from 'date-and-time/timezones/America/Glace_Bay'; +``` + +- Goose_Bay + +```typescript +import Goose_Bay from 'date-and-time/timezones/America/Goose_Bay'; +``` + +- Grand_Turk + +```typescript +import Grand_Turk from 'date-and-time/timezones/America/Grand_Turk'; +``` + +- Grenada + +```typescript +import Grenada from 'date-and-time/timezones/America/Grenada'; +``` + +- Guadeloupe + +```typescript +import Guadeloupe from 'date-and-time/timezones/America/Guadeloupe'; +``` + +- Guatemala + +```typescript +import Guatemala from 'date-and-time/timezones/America/Guatemala'; +``` + +- Guayaquil + +```typescript +import Guayaquil from 'date-and-time/timezones/America/Guayaquil'; +``` + +- Guyana + +```typescript +import Guyana from 'date-and-time/timezones/America/Guyana'; +``` + +- Halifax + +```typescript +import Halifax from 'date-and-time/timezones/America/Halifax'; +``` + +- Havana + +```typescript +import Havana from 'date-and-time/timezones/America/Havana'; +``` + +- Hermosillo + +```typescript +import Hermosillo from 'date-and-time/timezones/America/Hermosillo'; +``` + +- Indiana + + - Indianapolis + + ```typescript + import Indianapolis from 'date-and-time/timezones/America/Indiana/Indianapolis'; + ``` + + - Knox + + ```typescript + import Knox from 'date-and-time/timezones/America/Indiana/Knox'; + ``` + + - Marengo + + ```typescript + import Marengo from 'date-and-time/timezones/America/Indiana/Marengo'; + ``` + + - Petersburg + + ```typescript + import Petersburg from 'date-and-time/timezones/America/Indiana/Petersburg'; + ``` + + - Tell_City + + ```typescript + import Tell_City from 'date-and-time/timezones/America/Indiana/Tell_City'; + ``` + + - Vevay + + ```typescript + import Vevay from 'date-and-time/timezones/America/Indiana/Vevay'; + ``` + + - Vincennes + + ```typescript + import Vincennes from 'date-and-time/timezones/America/Indiana/Vincennes'; + ``` + + - Winamac + + ```typescript + import Winamac from 'date-and-time/timezones/America/Indiana/Winamac'; + ``` + +- Inuvik + +```typescript +import Inuvik from 'date-and-time/timezones/America/Inuvik'; +``` + +- Iqaluit + +```typescript +import Iqaluit from 'date-and-time/timezones/America/Iqaluit'; +``` + +- Jamaica + +```typescript +import Jamaica from 'date-and-time/timezones/America/Jamaica'; +``` + +- Juneau + +```typescript +import Juneau from 'date-and-time/timezones/America/Juneau'; +``` + +- Kentucky + + - Louisville + + ```typescript + import Louisville from 'date-and-time/timezones/America/Kentucky/Louisville'; + ``` + + - Monticello + + ```typescript + import Monticello from 'date-and-time/timezones/America/Kentucky/Monticello'; + ``` + +- Kralendijk + +```typescript +import Kralendijk from 'date-and-time/timezones/America/Kralendijk'; +``` + +- La_Paz + +```typescript +import La_Paz from 'date-and-time/timezones/America/La_Paz'; +``` + +- Lima + +```typescript +import Lima from 'date-and-time/timezones/America/Lima'; +``` + +- Los_Angeles + +```typescript +import Los_Angeles from 'date-and-time/timezones/America/Los_Angeles'; +``` + +- Lower_Princes + +```typescript +import Lower_Princes from 'date-and-time/timezones/America/Lower_Princes'; +``` + +- Maceio + +```typescript +import Maceio from 'date-and-time/timezones/America/Maceio'; +``` + +- Managua + +```typescript +import Managua from 'date-and-time/timezones/America/Managua'; +``` + +- Manaus + +```typescript +import Manaus from 'date-and-time/timezones/America/Manaus'; +``` + +- Marigot + +```typescript +import Marigot from 'date-and-time/timezones/America/Marigot'; +``` + +- Martinique + +```typescript +import Martinique from 'date-and-time/timezones/America/Martinique'; +``` + +- Matamoros + +```typescript +import Matamoros from 'date-and-time/timezones/America/Matamoros'; +``` + +- Mazatlan + +```typescript +import Mazatlan from 'date-and-time/timezones/America/Mazatlan'; +``` + +- Menominee + +```typescript +import Menominee from 'date-and-time/timezones/America/Menominee'; +``` + +- Merida + +```typescript +import Merida from 'date-and-time/timezones/America/Merida'; +``` + +- Metlakatla + +```typescript +import Metlakatla from 'date-and-time/timezones/America/Metlakatla'; +``` + +- Mexico_City + +```typescript +import Mexico_City from 'date-and-time/timezones/America/Mexico_City'; +``` + +- Miquelon + +```typescript +import Miquelon from 'date-and-time/timezones/America/Miquelon'; +``` + +- Moncton + +```typescript +import Moncton from 'date-and-time/timezones/America/Moncton'; +``` + +- Monterrey + +```typescript +import Monterrey from 'date-and-time/timezones/America/Monterrey'; +``` + +- Montevideo + +```typescript +import Montevideo from 'date-and-time/timezones/America/Montevideo'; +``` + +- Montserrat + +```typescript +import Montserrat from 'date-and-time/timezones/America/Montserrat'; +``` + +- Nassau + +```typescript +import Nassau from 'date-and-time/timezones/America/Nassau'; +``` + +- New_York + +```typescript +import New_York from 'date-and-time/timezones/America/New_York'; +``` + +- Nome + +```typescript +import Nome from 'date-and-time/timezones/America/Nome'; +``` + +- Noronha + +```typescript +import Noronha from 'date-and-time/timezones/America/Noronha'; +``` + +- North_Dakota + + - Beulah + + ```typescript + import Beulah from 'date-and-time/timezones/America/North_Dakota/Beulah'; + ``` + + - Center + + ```typescript + import Center from 'date-and-time/timezones/America/North_Dakota/Center'; + ``` + + - New_Salem + + ```typescript + import New_Salem from 'date-and-time/timezones/America/North_Dakota/New_Salem'; + ``` + +- Nuuk + +```typescript +import Nuuk from 'date-and-time/timezones/America/Nuuk'; +``` + +- Ojinaga + +```typescript +import Ojinaga from 'date-and-time/timezones/America/Ojinaga'; +``` + +- Panama + +```typescript +import Panama from 'date-and-time/timezones/America/Panama'; +``` + +- Paramaribo + +```typescript +import Paramaribo from 'date-and-time/timezones/America/Paramaribo'; +``` + +- Phoenix + +```typescript +import Phoenix from 'date-and-time/timezones/America/Phoenix'; +``` + +- Port_of_Spain + +```typescript +import Port_of_Spain from 'date-and-time/timezones/America/Port_of_Spain'; +``` + +- Port-au-Prince + +```typescript +import Port_au_Prince from 'date-and-time/timezones/America/Port_au_Prince'; +``` + +- Porto_Velho + +```typescript +import Porto_Velho from 'date-and-time/timezones/America/Porto_Velho'; +``` + +- Puerto_Rico + +```typescript +import Puerto_Rico from 'date-and-time/timezones/America/Puerto_Rico'; +``` + +- Punta_Arenas + +```typescript +import Punta_Arenas from 'date-and-time/timezones/America/Punta_Arenas'; +``` + +- Rankin_Inlet + +```typescript +import Rankin_Inlet from 'date-and-time/timezones/America/Rankin_Inlet'; +``` + +- Recife + +```typescript +import Recife from 'date-and-time/timezones/America/Recife'; +``` + +- Regina + +```typescript +import Regina from 'date-and-time/timezones/America/Regina'; +``` + +- Resolute + +```typescript +import Resolute from 'date-and-time/timezones/America/Resolute'; +``` + +- Rio_Branco + +```typescript +import Rio_Branco from 'date-and-time/timezones/America/Rio_Branco'; +``` + +- Santarem + +```typescript +import Santarem from 'date-and-time/timezones/America/Santarem'; +``` + +- Santiago + +```typescript +import Santiago from 'date-and-time/timezones/America/Santiago'; +``` + +- Santo_Domingo + +```typescript +import Santo_Domingo from 'date-and-time/timezones/America/Santo_Domingo'; +``` + +- Sao_Paulo + +```typescript +import Sao_Paulo from 'date-and-time/timezones/America/Sao_Paulo'; +``` + +- Scoresbysund + +```typescript +import Scoresbysund from 'date-and-time/timezones/America/Scoresbysund'; +``` + +- Sitka + +```typescript +import Sitka from 'date-and-time/timezones/America/Sitka'; +``` + +- St_Barthelemy + +```typescript +import St_Barthelemy from 'date-and-time/timezones/America/St_Barthelemy'; +``` + +- St_Johns + +```typescript +import St_Johns from 'date-and-time/timezones/America/St_Johns'; +``` + +- St_Kitts + +```typescript +import St_Kitts from 'date-and-time/timezones/America/St_Kitts'; +``` + +- St_Lucia + +```typescript +import St_Lucia from 'date-and-time/timezones/America/St_Lucia'; +``` + +- St_Thomas + +```typescript +import St_Thomas from 'date-and-time/timezones/America/St_Thomas'; +``` + +- St_Vincent + +```typescript +import St_Vincent from 'date-and-time/timezones/America/St_Vincent'; +``` + +- Swift_Current + +```typescript +import Swift_Current from 'date-and-time/timezones/America/Swift_Current'; +``` + +- Tegucigalpa + +```typescript +import Tegucigalpa from 'date-and-time/timezones/America/Tegucigalpa'; +``` + +- Thule + +```typescript +import Thule from 'date-and-time/timezones/America/Thule'; +``` + +- Tijuana + +```typescript +import Tijuana from 'date-and-time/timezones/America/Tijuana'; +``` + +- Toronto + +```typescript +import Toronto from 'date-and-time/timezones/America/Toronto'; +``` + +- Tortola + +```typescript +import Tortola from 'date-and-time/timezones/America/Tortola'; +``` + +- Vancouver + +```typescript +import Vancouver from 'date-and-time/timezones/America/Vancouver'; +``` + +- Whitehorse + +```typescript +import Whitehorse from 'date-and-time/timezones/America/Whitehorse'; +``` + +- Winnipeg + +```typescript +import Winnipeg from 'date-and-time/timezones/America/Winnipeg'; +``` + +- Yakutat + +```typescript +import Yakutat from 'date-and-time/timezones/America/Yakutat'; +``` + +## Antarctica + +- Casey + +```typescript +import Casey from 'date-and-time/timezones/Antarctica/Casey'; +``` + +- Davis + +```typescript +import Davis from 'date-and-time/timezones/Antarctica/Davis'; +``` + +- DumontDUrville + +```typescript +import DumontDUrville from 'date-and-time/timezones/Antarctica/DumontDUrville'; +``` + +- Macquarie + +```typescript +import Macquarie from 'date-and-time/timezones/Antarctica/Macquarie'; +``` + +- Mawson + +```typescript +import Mawson from 'date-and-time/timezones/Antarctica/Mawson'; +``` + +- McMurdo + +```typescript +import McMurdo from 'date-and-time/timezones/Antarctica/McMurdo'; +``` + +- Palmer + +```typescript +import Palmer from 'date-and-time/timezones/Antarctica/Palmer'; +``` + +- Rothera + +```typescript +import Rothera from 'date-and-time/timezones/Antarctica/Rothera'; +``` + +- Syowa + +```typescript +import Syowa from 'date-and-time/timezones/Antarctica/Syowa'; +``` + +- Troll + +```typescript +import Troll from 'date-and-time/timezones/Antarctica/Troll'; +``` + +- Vostok + +```typescript +import Vostok from 'date-and-time/timezones/Antarctica/Vostok'; +``` + +## Arctic + +- Longyearbyen + +```typescript +import Longyearbyen from 'date-and-time/timezones/Arctic/Longyearbyen'; +``` + +## Asia + +- Aden + +```typescript +import Aden from 'date-and-time/timezones/Asia/Aden'; +``` + +- Almaty + +```typescript +import Almaty from 'date-and-time/timezones/Asia/Almaty'; +``` + +- Amman + +```typescript +import Amman from 'date-and-time/timezones/Asia/Amman'; +``` + +- Anadyr + +```typescript +import Anadyr from 'date-and-time/timezones/Asia/Anadyr'; +``` + +- Aqtau + +```typescript +import Aqtau from 'date-and-time/timezones/Asia/Aqtau'; +``` + +- Aqtobe + +```typescript +import Aqtobe from 'date-and-time/timezones/Asia/Aqtobe'; +``` + +- Ashgabat + +```typescript +import Ashgabat from 'date-and-time/timezones/Asia/Ashgabat'; +``` + +- Atyrau + +```typescript +import Atyrau from 'date-and-time/timezones/Asia/Atyrau'; +``` + +- Baghdad + +```typescript +import Baghdad from 'date-and-time/timezones/Asia/Baghdad'; +``` + +- Bahrain + +```typescript +import Bahrain from 'date-and-time/timezones/Asia/Bahrain'; +``` + +- Baku + +```typescript +import Baku from 'date-and-time/timezones/Asia/Baku'; +``` + +- Bangkok + +```typescript +import Bangkok from 'date-and-time/timezones/Asia/Bangkok'; +``` + +- Barnaul + +```typescript +import Barnaul from 'date-and-time/timezones/Asia/Barnaul'; +``` + +- Beirut + +```typescript +import Beirut from 'date-and-time/timezones/Asia/Beirut'; +``` + +- Bishkek + +```typescript +import Bishkek from 'date-and-time/timezones/Asia/Bishkek'; +``` + +- Brunei + +```typescript +import Brunei from 'date-and-time/timezones/Asia/Brunei'; +``` + +- Chita + +```typescript +import Chita from 'date-and-time/timezones/Asia/Chita'; +``` + +- Colombo + +```typescript +import Colombo from 'date-and-time/timezones/Asia/Colombo'; +``` + +- Damascus + +```typescript +import Damascus from 'date-and-time/timezones/Asia/Damascus'; +``` + +- Dhaka + +```typescript +import Dhaka from 'date-and-time/timezones/Asia/Dhaka'; +``` + +- Dili + +```typescript +import Dili from 'date-and-time/timezones/Asia/Dili'; +``` + +- Dubai + +```typescript +import Dubai from 'date-and-time/timezones/Asia/Dubai'; +``` + +- Dushanbe + +```typescript +import Dushanbe from 'date-and-time/timezones/Asia/Dushanbe'; +``` + +- Famagusta + +```typescript +import Famagusta from 'date-and-time/timezones/Asia/Famagusta'; +``` + +- Gaza + +```typescript +import Gaza from 'date-and-time/timezones/Asia/Gaza'; +``` + +- Hebron + +```typescript +import Hebron from 'date-and-time/timezones/Asia/Hebron'; +``` + +- Ho_Chi_Minh + +```typescript +import Ho_Chi_Minh from 'date-and-time/timezones/Asia/Ho_Chi_Minh'; +``` + +- Hong_Kong + +```typescript +import Hong_Kong from 'date-and-time/timezones/Asia/Hong_Kong'; +``` + +- Hovd + +```typescript +import Hovd from 'date-and-time/timezones/Asia/Hovd'; +``` + +- Irkutsk + +```typescript +import Irkutsk from 'date-and-time/timezones/Asia/Irkutsk'; +``` + +- Jakarta + +```typescript +import Jakarta from 'date-and-time/timezones/Asia/Jakarta'; +``` + +- Jayapura + +```typescript +import Jayapura from 'date-and-time/timezones/Asia/Jayapura'; +``` + +- Jerusalem + +```typescript +import Jerusalem from 'date-and-time/timezones/Asia/Jerusalem'; +``` + +- Kabul + +```typescript +import Kabul from 'date-and-time/timezones/Asia/Kabul'; +``` + +- Kamchatka + +```typescript +import Kamchatka from 'date-and-time/timezones/Asia/Kamchatka'; +``` + +- Karachi + +```typescript +import Karachi from 'date-and-time/timezones/Asia/Karachi'; +``` + +- Kathmandu + +```typescript +import Kathmandu from 'date-and-time/timezones/Asia/Kathmandu'; +``` + +- Khandyga + +```typescript +import Khandyga from 'date-and-time/timezones/Asia/Khandyga'; +``` + +- Kolkata + +```typescript +import Kolkata from 'date-and-time/timezones/Asia/Kolkata'; +``` + +- Krasnoyarsk + +```typescript +import Krasnoyarsk from 'date-and-time/timezones/Asia/Krasnoyarsk'; +``` + +- Kuala_Lumpur + +```typescript +import Kuala_Lumpur from 'date-and-time/timezones/Asia/Kuala_Lumpur'; +``` + +- Kuching + +```typescript +import Kuching from 'date-and-time/timezones/Asia/Kuching'; +``` + +- Kuwait + +```typescript +import Kuwait from 'date-and-time/timezones/Asia/Kuwait'; +``` + +- Macau + +```typescript +import Macau from 'date-and-time/timezones/Asia/Macau'; +``` + +- Magadan + +```typescript +import Magadan from 'date-and-time/timezones/Asia/Magadan'; +``` + +- Makassar + +```typescript +import Makassar from 'date-and-time/timezones/Asia/Makassar'; +``` + +- Manila + +```typescript +import Manila from 'date-and-time/timezones/Asia/Manila'; +``` + +- Muscat + +```typescript +import Muscat from 'date-and-time/timezones/Asia/Muscat'; +``` + +- Nicosia + +```typescript +import Nicosia from 'date-and-time/timezones/Asia/Nicosia'; +``` + +- Novokuznetsk + +```typescript +import Novokuznetsk from 'date-and-time/timezones/Asia/Novokuznetsk'; +``` + +- Novosibirsk + +```typescript +import Novosibirsk from 'date-and-time/timezones/Asia/Novosibirsk'; +``` + +- Omsk + +```typescript +import Omsk from 'date-and-time/timezones/Asia/Omsk'; +``` + +- Oral + +```typescript +import Oral from 'date-and-time/timezones/Asia/Oral'; +``` + +- Phnom_Penh + +```typescript +import Phnom_Penh from 'date-and-time/timezones/Asia/Phnom_Penh'; +``` + +- Pontianak + +```typescript +import Pontianak from 'date-and-time/timezones/Asia/Pontianak'; +``` + +- Pyongyang + +```typescript +import Pyongyang from 'date-and-time/timezones/Asia/Pyongyang'; +``` + +- Qatar + +```typescript +import Qatar from 'date-and-time/timezones/Asia/Qatar'; +``` + +- Qostanay + +```typescript +import Qostanay from 'date-and-time/timezones/Asia/Qostanay'; +``` + +- Qyzylorda + +```typescript +import Qyzylorda from 'date-and-time/timezones/Asia/Qyzylorda'; +``` + +- Riyadh + +```typescript +import Riyadh from 'date-and-time/timezones/Asia/Riyadh'; +``` + +- Sakhalin + +```typescript +import Sakhalin from 'date-and-time/timezones/Asia/Sakhalin'; +``` + +- Samarkand + +```typescript +import Samarkand from 'date-and-time/timezones/Asia/Samarkand'; +``` + +- Seoul + +```typescript +import Seoul from 'date-and-time/timezones/Asia/Seoul'; +``` + +- Shanghai + +```typescript +import Shanghai from 'date-and-time/timezones/Asia/Shanghai'; +``` + +- Singapore + +```typescript +import Singapore from 'date-and-time/timezones/Asia/Singapore'; +``` + +- Srednekolymsk + +```typescript +import Srednekolymsk from 'date-and-time/timezones/Asia/Srednekolymsk'; +``` + +- Taipei + +```typescript +import Taipei from 'date-and-time/timezones/Asia/Taipei'; +``` + +- Tashkent + +```typescript +import Tashkent from 'date-and-time/timezones/Asia/Tashkent'; +``` + +- Tbilisi + +```typescript +import Tbilisi from 'date-and-time/timezones/Asia/Tbilisi'; +``` + +- Tehran + +```typescript +import Tehran from 'date-and-time/timezones/Asia/Tehran'; +``` + +- Thimphu + +```typescript +import Thimphu from 'date-and-time/timezones/Asia/Thimphu'; +``` + +- Tokyo + +```typescript +import Tokyo from 'date-and-time/timezones/Asia/Tokyo'; +``` + +- Tomsk + +```typescript +import Tomsk from 'date-and-time/timezones/Asia/Tomsk'; +``` + +- Ulaanbaatar + +```typescript +import Ulaanbaatar from 'date-and-time/timezones/Asia/Ulaanbaatar'; +``` + +- Urumqi + +```typescript +import Urumqi from 'date-and-time/timezones/Asia/Urumqi'; +``` + +- Ust-Nera + +```typescript +import Ust_Nera from 'date-and-time/timezones/Asia/Ust_Nera'; +``` + +- Vientiane + +```typescript +import Vientiane from 'date-and-time/timezones/Asia/Vientiane'; +``` + +- Vladivostok + +```typescript +import Vladivostok from 'date-and-time/timezones/Asia/Vladivostok'; +``` + +- Yakutsk + +```typescript +import Yakutsk from 'date-and-time/timezones/Asia/Yakutsk'; +``` + +- Yangon + +```typescript +import Yangon from 'date-and-time/timezones/Asia/Yangon'; +``` + +- Yekaterinburg + +```typescript +import Yekaterinburg from 'date-and-time/timezones/Asia/Yekaterinburg'; +``` + +- Yerevan + +```typescript +import Yerevan from 'date-and-time/timezones/Asia/Yerevan'; +``` + +## Atlantic + +- Azores + +```typescript +import Azores from 'date-and-time/timezones/Atlantic/Azores'; +``` + +- Bermuda + +```typescript +import Bermuda from 'date-and-time/timezones/Atlantic/Bermuda'; +``` + +- Canary + +```typescript +import Canary from 'date-and-time/timezones/Atlantic/Canary'; +``` + +- Cape_Verde + +```typescript +import Cape_Verde from 'date-and-time/timezones/Atlantic/Cape_Verde'; +``` + +- Faroe + +```typescript +import Faroe from 'date-and-time/timezones/Atlantic/Faroe'; +``` + +- Madeira + +```typescript +import Madeira from 'date-and-time/timezones/Atlantic/Madeira'; +``` + +- Reykjavik + +```typescript +import Reykjavik from 'date-and-time/timezones/Atlantic/Reykjavik'; +``` + +- South_Georgia + +```typescript +import South_Georgia from 'date-and-time/timezones/Atlantic/South_Georgia'; +``` + +- St_Helena + +```typescript +import St_Helena from 'date-and-time/timezones/Atlantic/St_Helena'; +``` + +- Stanley + +```typescript +import Stanley from 'date-and-time/timezones/Atlantic/Stanley'; +``` + +## Australia + +- Adelaide + +```typescript +import Adelaide from 'date-and-time/timezones/Australia/Adelaide'; +``` + +- Brisbane + +```typescript +import Brisbane from 'date-and-time/timezones/Australia/Brisbane'; +``` + +- Broken_Hill + +```typescript +import Broken_Hill from 'date-and-time/timezones/Australia/Broken_Hill'; +``` + +- Darwin + +```typescript +import Darwin from 'date-and-time/timezones/Australia/Darwin'; +``` + +- Eucla + +```typescript +import Eucla from 'date-and-time/timezones/Australia/Eucla'; +``` + +- Hobart + +```typescript +import Hobart from 'date-and-time/timezones/Australia/Hobart'; +``` + +- Lindeman + +```typescript +import Lindeman from 'date-and-time/timezones/Australia/Lindeman'; +``` + +- Lord_Howe + +```typescript +import Lord_Howe from 'date-and-time/timezones/Australia/Lord_Howe'; +``` + +- Melbourne + +```typescript +import Melbourne from 'date-and-time/timezones/Australia/Melbourne'; +``` + +- Perth + +```typescript +import Perth from 'date-and-time/timezones/Australia/Perth'; +``` + +- Sydney + +```typescript +import Sydney from 'date-and-time/timezones/Australia/Sydney'; +``` + +## Europe + +- Amsterdam + +```typescript +import Amsterdam from 'date-and-time/timezones/Europe/Amsterdam'; +``` + +- Andorra + +```typescript +import Andorra from 'date-and-time/timezones/Europe/Andorra'; +``` + +- Astrakhan + +```typescript +import Astrakhan from 'date-and-time/timezones/Europe/Astrakhan'; +``` + +- Athens + +```typescript +import Athens from 'date-and-time/timezones/Europe/Athens'; +``` + +- Belgrade + +```typescript +import Belgrade from 'date-and-time/timezones/Europe/Belgrade'; +``` + +- Berlin + +```typescript +import Berlin from 'date-and-time/timezones/Europe/Berlin'; +``` + +- Bratislava + +```typescript +import Bratislava from 'date-and-time/timezones/Europe/Bratislava'; +``` + +- Brussels + +```typescript +import Brussels from 'date-and-time/timezones/Europe/Brussels'; +``` + +- Bucharest + +```typescript +import Bucharest from 'date-and-time/timezones/Europe/Bucharest'; +``` + +- Budapest + +```typescript +import Budapest from 'date-and-time/timezones/Europe/Budapest'; +``` + +- Busingen + +```typescript +import Busingen from 'date-and-time/timezones/Europe/Busingen'; +``` + +- Chisinau + +```typescript +import Chisinau from 'date-and-time/timezones/Europe/Chisinau'; +``` + +- Copenhagen + +```typescript +import Copenhagen from 'date-and-time/timezones/Europe/Copenhagen'; +``` + +- Dublin + +```typescript +import Dublin from 'date-and-time/timezones/Europe/Dublin'; +``` + +- Gibraltar + +```typescript +import Gibraltar from 'date-and-time/timezones/Europe/Gibraltar'; +``` + +- Guernsey + +```typescript +import Guernsey from 'date-and-time/timezones/Europe/Guernsey'; +``` + +- Helsinki + +```typescript +import Helsinki from 'date-and-time/timezones/Europe/Helsinki'; +``` + +- Isle_of_Man + +```typescript +import Isle_of_Man from 'date-and-time/timezones/Europe/Isle_of_Man'; +``` + +- Istanbul + +```typescript +import Istanbul from 'date-and-time/timezones/Europe/Istanbul'; +``` + +- Jersey + +```typescript +import Jersey from 'date-and-time/timezones/Europe/Jersey'; +``` + +- Kaliningrad + +```typescript +import Kaliningrad from 'date-and-time/timezones/Europe/Kaliningrad'; +``` + +- Kirov + +```typescript +import Kirov from 'date-and-time/timezones/Europe/Kirov'; +``` + +- Kyiv + +```typescript +import Kyiv from 'date-and-time/timezones/Europe/Kyiv'; +``` + +- Lisbon + +```typescript +import Lisbon from 'date-and-time/timezones/Europe/Lisbon'; +``` + +- Ljubljana + +```typescript +import Ljubljana from 'date-and-time/timezones/Europe/Ljubljana'; +``` + +- London + +```typescript +import London from 'date-and-time/timezones/Europe/London'; +``` + +- Luxembourg + +```typescript +import Luxembourg from 'date-and-time/timezones/Europe/Luxembourg'; +``` + +- Madrid + +```typescript +import Madrid from 'date-and-time/timezones/Europe/Madrid'; +``` + +- Malta + +```typescript +import Malta from 'date-and-time/timezones/Europe/Malta'; +``` + +- Mariehamn + +```typescript +import Mariehamn from 'date-and-time/timezones/Europe/Mariehamn'; +``` + +- Minsk + +```typescript +import Minsk from 'date-and-time/timezones/Europe/Minsk'; +``` + +- Monaco + +```typescript +import Monaco from 'date-and-time/timezones/Europe/Monaco'; +``` + +- Moscow + +```typescript +import Moscow from 'date-and-time/timezones/Europe/Moscow'; +``` + +- Oslo + +```typescript +import Oslo from 'date-and-time/timezones/Europe/Oslo'; +``` + +- Paris + +```typescript +import Paris from 'date-and-time/timezones/Europe/Paris'; +``` + +- Podgorica + +```typescript +import Podgorica from 'date-and-time/timezones/Europe/Podgorica'; +``` + +- Prague + +```typescript +import Prague from 'date-and-time/timezones/Europe/Prague'; +``` + +- Riga + +```typescript +import Riga from 'date-and-time/timezones/Europe/Riga'; +``` + +- Rome + +```typescript +import Rome from 'date-and-time/timezones/Europe/Rome'; +``` + +- Samara + +```typescript +import Samara from 'date-and-time/timezones/Europe/Samara'; +``` + +- San_Marino + +```typescript +import San_Marino from 'date-and-time/timezones/Europe/San_Marino'; +``` + +- Sarajevo + +```typescript +import Sarajevo from 'date-and-time/timezones/Europe/Sarajevo'; +``` + +- Saratov + +```typescript +import Saratov from 'date-and-time/timezones/Europe/Saratov'; +``` + +- Simferopol + +```typescript +import Simferopol from 'date-and-time/timezones/Europe/Simferopol'; +``` + +- Skopje + +```typescript +import Skopje from 'date-and-time/timezones/Europe/Skopje'; +``` + +- Sofia + +```typescript +import Sofia from 'date-and-time/timezones/Europe/Sofia'; +``` + +- Stockholm + +```typescript +import Stockholm from 'date-and-time/timezones/Europe/Stockholm'; +``` + +- Tallinn + +```typescript +import Tallinn from 'date-and-time/timezones/Europe/Tallinn'; +``` + +- Tirane + +```typescript +import Tirane from 'date-and-time/timezones/Europe/Tirane'; +``` + +- Ulyanovsk + +```typescript +import Ulyanovsk from 'date-and-time/timezones/Europe/Ulyanovsk'; +``` + +- Vaduz + +```typescript +import Vaduz from 'date-and-time/timezones/Europe/Vaduz'; +``` + +- Vatican + +```typescript +import Vatican from 'date-and-time/timezones/Europe/Vatican'; +``` + +- Vienna + +```typescript +import Vienna from 'date-and-time/timezones/Europe/Vienna'; +``` + +- Vilnius + +```typescript +import Vilnius from 'date-and-time/timezones/Europe/Vilnius'; +``` + +- Volgograd + +```typescript +import Volgograd from 'date-and-time/timezones/Europe/Volgograd'; +``` + +- Warsaw + +```typescript +import Warsaw from 'date-and-time/timezones/Europe/Warsaw'; +``` + +- Zagreb + +```typescript +import Zagreb from 'date-and-time/timezones/Europe/Zagreb'; +``` + +- Zurich + +```typescript +import Zurich from 'date-and-time/timezones/Europe/Zurich'; +``` + +## Indian + +- Antananarivo + +```typescript +import Antananarivo from 'date-and-time/timezones/Indian/Antananarivo'; +``` + +- Chagos + +```typescript +import Chagos from 'date-and-time/timezones/Indian/Chagos'; +``` + +- Christmas + +```typescript +import Christmas from 'date-and-time/timezones/Indian/Christmas'; +``` + +- Cocos + +```typescript +import Cocos from 'date-and-time/timezones/Indian/Cocos'; +``` + +- Comoro + +```typescript +import Comoro from 'date-and-time/timezones/Indian/Comoro'; +``` + +- Kerguelen + +```typescript +import Kerguelen from 'date-and-time/timezones/Indian/Kerguelen'; +``` + +- Mahe + +```typescript +import Mahe from 'date-and-time/timezones/Indian/Mahe'; +``` + +- Maldives + +```typescript +import Maldives from 'date-and-time/timezones/Indian/Maldives'; +``` + +- Mauritius + +```typescript +import Mauritius from 'date-and-time/timezones/Indian/Mauritius'; +``` + +- Mayotte + +```typescript +import Mayotte from 'date-and-time/timezones/Indian/Mayotte'; +``` + +- Reunion + +```typescript +import Reunion from 'date-and-time/timezones/Indian/Reunion'; +``` + +## Pacific + +- Apia + +```typescript +import Apia from 'date-and-time/timezones/Pacific/Apia'; +``` + +- Auckland + +```typescript +import Auckland from 'date-and-time/timezones/Pacific/Auckland'; +``` + +- Bougainville + +```typescript +import Bougainville from 'date-and-time/timezones/Pacific/Bougainville'; +``` + +- Chatham + +```typescript +import Chatham from 'date-and-time/timezones/Pacific/Chatham'; +``` + +- Chuuk + +```typescript +import Chuuk from 'date-and-time/timezones/Pacific/Chuuk'; +``` + +- Easter + +```typescript +import Easter from 'date-and-time/timezones/Pacific/Easter'; +``` + +- Efate + +```typescript +import Efate from 'date-and-time/timezones/Pacific/Efate'; +``` + +- Fakaofo + +```typescript +import Fakaofo from 'date-and-time/timezones/Pacific/Fakaofo'; +``` + +- Fiji + +```typescript +import Fiji from 'date-and-time/timezones/Pacific/Fiji'; +``` + +- Funafuti + +```typescript +import Funafuti from 'date-and-time/timezones/Pacific/Funafuti'; +``` + +- Galapagos + +```typescript +import Galapagos from 'date-and-time/timezones/Pacific/Galapagos'; +``` + +- Gambier + +```typescript +import Gambier from 'date-and-time/timezones/Pacific/Gambier'; +``` + +- Guadalcanal + +```typescript +import Guadalcanal from 'date-and-time/timezones/Pacific/Guadalcanal'; +``` + +- Guam + +```typescript +import Guam from 'date-and-time/timezones/Pacific/Guam'; +``` + +- Honolulu + +```typescript +import Honolulu from 'date-and-time/timezones/Pacific/Honolulu'; +``` + +- Kanton + +```typescript +import Kanton from 'date-and-time/timezones/Pacific/Kanton'; +``` + +- Kiritimati + +```typescript +import Kiritimati from 'date-and-time/timezones/Pacific/Kiritimati'; +``` + +- Kosrae + +```typescript +import Kosrae from 'date-and-time/timezones/Pacific/Kosrae'; +``` + +- Kwajalein + +```typescript +import Kwajalein from 'date-and-time/timezones/Pacific/Kwajalein'; +``` + +- Majuro + +```typescript +import Majuro from 'date-and-time/timezones/Pacific/Majuro'; +``` + +- Marquesas + +```typescript +import Marquesas from 'date-and-time/timezones/Pacific/Marquesas'; +``` + +- Midway + +```typescript +import Midway from 'date-and-time/timezones/Pacific/Midway'; +``` + +- Nauru + +```typescript +import Nauru from 'date-and-time/timezones/Pacific/Nauru'; +``` + +- Niue + +```typescript +import Niue from 'date-and-time/timezones/Pacific/Niue'; +``` + +- Norfolk + +```typescript +import Norfolk from 'date-and-time/timezones/Pacific/Norfolk'; +``` + +- Noumea + +```typescript +import Noumea from 'date-and-time/timezones/Pacific/Noumea'; +``` + +- Pago_Pago + +```typescript +import Pago_Pago from 'date-and-time/timezones/Pacific/Pago_Pago'; +``` + +- Palau + +```typescript +import Palau from 'date-and-time/timezones/Pacific/Palau'; +``` + +- Pitcairn + +```typescript +import Pitcairn from 'date-and-time/timezones/Pacific/Pitcairn'; +``` + +- Pohnpei + +```typescript +import Pohnpei from 'date-and-time/timezones/Pacific/Pohnpei'; +``` + +- Port_Moresby + +```typescript +import Port_Moresby from 'date-and-time/timezones/Pacific/Port_Moresby'; +``` + +- Rarotonga + +```typescript +import Rarotonga from 'date-and-time/timezones/Pacific/Rarotonga'; +``` + +- Saipan + +```typescript +import Saipan from 'date-and-time/timezones/Pacific/Saipan'; +``` + +- Tahiti + +```typescript +import Tahiti from 'date-and-time/timezones/Pacific/Tahiti'; +``` + +- Tarawa + +```typescript +import Tarawa from 'date-and-time/timezones/Pacific/Tarawa'; +``` + +- Tongatapu + +```typescript +import Tongatapu from 'date-and-time/timezones/Pacific/Tongatapu'; +``` + +- Wake + +```typescript +import Wake from 'date-and-time/timezones/Pacific/Wake'; +``` + +- Wallis + +```typescript +import Wallis from 'date-and-time/timezones/Pacific/Wallis'; +``` diff --git a/eslint.config.ts b/eslint.config.ts index 070af5e..d04c24e 100644 --- a/eslint.config.ts +++ b/eslint.config.ts @@ -1,16 +1,14 @@ import tseslint from 'typescript-eslint'; -import globals from 'globals'; export default tseslint.config( ...tseslint.configs.strict, ...tseslint.configs.stylistic, { + files: ['**/*.ts'], languageOptions: { ecmaVersion: 2021, sourceType: 'module', globals: { - ...globals.browser, - ...globals.node }, parserOptions: { project: './tsconfig.json', diff --git a/logo.png b/logo.png index d2f88b7..027b3fc 100644 Binary files a/logo.png and b/logo.png differ diff --git a/package-lock.json b/package-lock.json index 535621e..b486e53 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,33 +1,291 @@ { "name": "date-and-time", - "version": "4.0.2", + "version": "4.0.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "date-and-time", - "version": "4.0.2", + "version": "4.0.3", "license": "MIT", "devDependencies": { "@rollup/plugin-terser": "^0.4.4", - "@types/node": "^24.2.1", + "@types/node": "^24.3.0", "@vitest/coverage-v8": "^3.2.4", - "eslint": "^9.33.0", + "eslint": "^9.34.0", "glob": "^11.0.3", - "globals": "^16.3.0", "jiti": "^2.5.1", "prettier": "^3.6.2", - "rollup": "^4.46.2", - "rollup-plugin-dts": "^6.2.1", + "rollup": "^4.49.0", + "rollup-plugin-dts": "^6.2.3", "rollup-plugin-esbuild": "^6.2.1", - "tsx": "^4.20.4", - "typescript-eslint": "^8.39.1", + "tsx": "^4.20.5", + "typescript-eslint": "^8.41.0", + "vitepress": "^1.6.4", "vitest": "^3.2.4" }, "engines": { "node": ">=18" } }, + "node_modules/@algolia/abtesting": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.2.0.tgz", + "integrity": "sha512-Z6Liq7US5CpdHExZLfPMBPxQHHUObV587kGvCLniLr1UTx0fGFIeGNWd005WIqQXqEda9GyAi7T2e7DUupVv0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.36.0", + "@algolia/requester-browser-xhr": "5.36.0", + "@algolia/requester-fetch": "5.36.0", + "@algolia/requester-node-http": "5.36.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/autocomplete-core": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.7.tgz", + "integrity": "sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-plugin-algolia-insights": "1.17.7", + "@algolia/autocomplete-shared": "1.17.7" + } + }, + "node_modules/@algolia/autocomplete-plugin-algolia-insights": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.7.tgz", + "integrity": "sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-shared": "1.17.7" + }, + "peerDependencies": { + "search-insights": ">= 1 < 3" + } + }, + "node_modules/@algolia/autocomplete-preset-algolia": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.7.tgz", + "integrity": "sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-shared": "1.17.7" + }, + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/autocomplete-shared": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.7.tgz", + "integrity": "sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/client-abtesting": { + "version": "5.36.0", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.36.0.tgz", + "integrity": "sha512-uGr57O1UqDDeZHYXr1VnUomtdgQMxb6fS8yC/LXCMOn5ucN4k6FlcCRqXQnUyiiFZNG/rVK3zpRiyomq4JWXdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.36.0", + "@algolia/requester-browser-xhr": "5.36.0", + "@algolia/requester-fetch": "5.36.0", + "@algolia/requester-node-http": "5.36.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-analytics": { + "version": "5.36.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.36.0.tgz", + "integrity": "sha512-/zrf0NMxcvBBQ4r9lIqM7rMt7oI7gY7bZ+bNcgpZAQMvzXbKJVla3MqKGuPC/bfOthKvAcAr0mCZ8/7GwBmkVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.36.0", + "@algolia/requester-browser-xhr": "5.36.0", + "@algolia/requester-fetch": "5.36.0", + "@algolia/requester-node-http": "5.36.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-common": { + "version": "5.36.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.36.0.tgz", + "integrity": "sha512-fDsg9w6xXWQyNkm/VfiWF2D9wnpTPv0fRVei7lWtz7cXJewhOmP1kKE2GaDTI4QDxVxgDkoPJ1+3UVMIzTcjjQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-insights": { + "version": "5.36.0", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.36.0.tgz", + "integrity": "sha512-x6ZICyIN3BZjja47lqlMLG+AZwfx9wrYWttd6Daxp+wX/fFGxha6gdqxeoi5J44BmFqK8CUU4u8vpwHqGOCl4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.36.0", + "@algolia/requester-browser-xhr": "5.36.0", + "@algolia/requester-fetch": "5.36.0", + "@algolia/requester-node-http": "5.36.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-personalization": { + "version": "5.36.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.36.0.tgz", + "integrity": "sha512-gnH9VHrC+/9OuaumbgxNXzzEq1AY2j3tm00ymNXNz35T7RQ2AK/x4T5b2UnjOUJejuXaSJ88gFyPk3nM5OhJZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.36.0", + "@algolia/requester-browser-xhr": "5.36.0", + "@algolia/requester-fetch": "5.36.0", + "@algolia/requester-node-http": "5.36.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-query-suggestions": { + "version": "5.36.0", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.36.0.tgz", + "integrity": "sha512-GkWIS+cAMoxsNPHEp3j7iywO9JJMVHVCWHzPPHFXIe0iNIOfsnZy5MqC1T9sifjqoU9b0GGbzzdxB3TEdwfiFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.36.0", + "@algolia/requester-browser-xhr": "5.36.0", + "@algolia/requester-fetch": "5.36.0", + "@algolia/requester-node-http": "5.36.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-search": { + "version": "5.36.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.36.0.tgz", + "integrity": "sha512-MLx32nSeDSNxfx28IfvwfHEfeo3AYe9JgEj0rLeYtJGmt0W30K6tCNokxhWGUUKrggQTH6H1lnohWsoj2OC2bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.36.0", + "@algolia/requester-browser-xhr": "5.36.0", + "@algolia/requester-fetch": "5.36.0", + "@algolia/requester-node-http": "5.36.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/ingestion": { + "version": "1.36.0", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.36.0.tgz", + "integrity": "sha512-6zmlPLCsyzShOsfs1G1uqxwLTojte3NLyukwyUmJFfa46DSq3wkIOE9hFtqAoV951dXp4sZd2KCFYJmgRjcYbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.36.0", + "@algolia/requester-browser-xhr": "5.36.0", + "@algolia/requester-fetch": "5.36.0", + "@algolia/requester-node-http": "5.36.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/monitoring": { + "version": "1.36.0", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.36.0.tgz", + "integrity": "sha512-SjJeDqlzAKJiWhquqfDWLEu5X/PIM+5KvUH65c4LBvt8T+USOVJbijtzA9UHZ1eUIfFSDBmbzEH0YvlS6Di2mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.36.0", + "@algolia/requester-browser-xhr": "5.36.0", + "@algolia/requester-fetch": "5.36.0", + "@algolia/requester-node-http": "5.36.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/recommend": { + "version": "5.36.0", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.36.0.tgz", + "integrity": "sha512-FalJm3h9fwoZZpkkMpA0r4Grcvjk32FzmC4CXvlpyF/gBvu6pXE01yygjJBU20zGVLGsXU+Ad8nYPf+oGD7Zkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.36.0", + "@algolia/requester-browser-xhr": "5.36.0", + "@algolia/requester-fetch": "5.36.0", + "@algolia/requester-node-http": "5.36.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "5.36.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.36.0.tgz", + "integrity": "sha512-weE9SImWIDmQrfGLb1pSPEfP3mioKQ84GaQRpUmjFxlxG/4nW2bSsmkV+kNp1s+iomL2gnxFknSmcQuuAy+kPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.36.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-fetch": { + "version": "5.36.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.36.0.tgz", + "integrity": "sha512-zGPI2sgzvOwCHTVMmDvc301iirOKCtJ+Egh+HQB/+DG0zTGUT1DpdwQVT25A7Yin/twnO8CkFpI/S+74FVYNjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.36.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-node-http": { + "version": "5.36.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.36.0.tgz", + "integrity": "sha512-dNbBGE/O6VG/6vFhv3CFm5za4rubAVrhQf/ef0YWiDqPMmalPxGEzIijw4xV1mU1JmX2ffyp/x8Kdtz24sDkOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.36.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, "node_modules/@ampproject/remapping": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", @@ -43,21 +301,29 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, "license": "MIT", "optional": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", + "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/code-frame/node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT", + "optional": true + }, "node_modules/@babel/helper-string-parser": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", @@ -79,13 +345,13 @@ } }, "node_modules/@babel/parser": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", - "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.3.tgz", + "integrity": "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.28.0" + "@babel/types": "^7.28.2" }, "bin": { "parser": "bin/babel-parser.js" @@ -95,9 +361,9 @@ } }, "node_modules/@babel/types": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.0.tgz", - "integrity": "sha512-jYnje+JyZG5YThjHiF28oT4SIZLnYOcSBb6+SDaFIyzDVSkXQmQQYclJ2R+YxcdmK0AX6x1E5OQNtuh3jHDrUg==", + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", + "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", "dev": true, "license": "MIT", "dependencies": { @@ -118,10 +384,61 @@ "node": ">=18" } }, + "node_modules/@docsearch/css": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.8.2.tgz", + "integrity": "sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@docsearch/js": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.8.2.tgz", + "integrity": "sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@docsearch/react": "3.8.2", + "preact": "^10.0.0" + } + }, + "node_modules/@docsearch/react": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.8.2.tgz", + "integrity": "sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-core": "1.17.7", + "@algolia/autocomplete-preset-algolia": "1.17.7", + "@docsearch/css": "3.8.2", + "algoliasearch": "^5.14.2" + }, + "peerDependencies": { + "@types/react": ">= 16.8.0 < 19.0.0", + "react": ">= 16.8.0 < 19.0.0", + "react-dom": ">= 16.8.0 < 19.0.0", + "search-insights": ">= 1 < 3" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "search-insights": { + "optional": true + } + } + }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz", - "integrity": "sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.9.tgz", + "integrity": "sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==", "cpu": [ "ppc64" ], @@ -136,9 +453,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.2.tgz", - "integrity": "sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.9.tgz", + "integrity": "sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==", "cpu": [ "arm" ], @@ -153,9 +470,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz", - "integrity": "sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.9.tgz", + "integrity": "sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==", "cpu": [ "arm64" ], @@ -170,9 +487,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.2.tgz", - "integrity": "sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.9.tgz", + "integrity": "sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==", "cpu": [ "x64" ], @@ -187,9 +504,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz", - "integrity": "sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.9.tgz", + "integrity": "sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==", "cpu": [ "arm64" ], @@ -204,9 +521,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz", - "integrity": "sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.9.tgz", + "integrity": "sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==", "cpu": [ "x64" ], @@ -221,9 +538,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz", - "integrity": "sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.9.tgz", + "integrity": "sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==", "cpu": [ "arm64" ], @@ -238,9 +555,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz", - "integrity": "sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.9.tgz", + "integrity": "sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==", "cpu": [ "x64" ], @@ -255,9 +572,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz", - "integrity": "sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.9.tgz", + "integrity": "sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==", "cpu": [ "arm" ], @@ -272,9 +589,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz", - "integrity": "sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.9.tgz", + "integrity": "sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==", "cpu": [ "arm64" ], @@ -289,9 +606,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz", - "integrity": "sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.9.tgz", + "integrity": "sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==", "cpu": [ "ia32" ], @@ -306,9 +623,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz", - "integrity": "sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.9.tgz", + "integrity": "sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==", "cpu": [ "loong64" ], @@ -323,9 +640,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz", - "integrity": "sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.9.tgz", + "integrity": "sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==", "cpu": [ "mips64el" ], @@ -340,9 +657,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz", - "integrity": "sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.9.tgz", + "integrity": "sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==", "cpu": [ "ppc64" ], @@ -357,9 +674,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz", - "integrity": "sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.9.tgz", + "integrity": "sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==", "cpu": [ "riscv64" ], @@ -374,9 +691,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz", - "integrity": "sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.9.tgz", + "integrity": "sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==", "cpu": [ "s390x" ], @@ -391,9 +708,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz", - "integrity": "sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.9.tgz", + "integrity": "sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==", "cpu": [ "x64" ], @@ -408,9 +725,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.2.tgz", - "integrity": "sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.9.tgz", + "integrity": "sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==", "cpu": [ "arm64" ], @@ -425,9 +742,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz", - "integrity": "sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.9.tgz", + "integrity": "sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==", "cpu": [ "x64" ], @@ -442,9 +759,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.2.tgz", - "integrity": "sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.9.tgz", + "integrity": "sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==", "cpu": [ "arm64" ], @@ -459,9 +776,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz", - "integrity": "sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.9.tgz", + "integrity": "sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==", "cpu": [ "x64" ], @@ -475,10 +792,27 @@ "node": ">=18" } }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.9.tgz", + "integrity": "sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz", - "integrity": "sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.9.tgz", + "integrity": "sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==", "cpu": [ "x64" ], @@ -493,9 +827,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz", - "integrity": "sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.9.tgz", + "integrity": "sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==", "cpu": [ "arm64" ], @@ -510,9 +844,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz", - "integrity": "sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.9.tgz", + "integrity": "sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==", "cpu": [ "ia32" ], @@ -527,9 +861,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz", - "integrity": "sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.9.tgz", + "integrity": "sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==", "cpu": [ "x64" ], @@ -567,6 +901,7 @@ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -660,9 +995,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.33.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.33.0.tgz", - "integrity": "sha512-5K1/mKhWaMfreBGJTwval43JJmkip0RmM+3+IuqupeSKNC/Th2Kc7ucaq5ovTSra/OOKB9c58CGSz3QMVbWt0A==", + "version": "9.34.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.34.0.tgz", + "integrity": "sha512-EoyvqQnBNsV1CWaEJ559rxXL4c8V92gxirbawSmVUOWXlsRxxQXl6LmCpdUblgxgSkDIqKnhzba2SjRTI/A5Rw==", "dev": true, "license": "MIT", "engines": { @@ -739,6 +1074,7 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -748,9 +1084,9 @@ } }, "node_modules/@humanwhocodes/retry": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz", - "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -761,6 +1097,23 @@ "url": "https://github.com/sponsors/nzakas" } }, + "node_modules/@iconify-json/simple-icons": { + "version": "1.2.49", + "resolved": "https://registry.npmjs.org/@iconify-json/simple-icons/-/simple-icons-1.2.49.tgz", + "integrity": "sha512-nRLwrHzz+cTAQYBNQrcr4eWOmQIcHObTj/QSi7nj0SFwVh5MvBsgx8OhoDC/R8iGklNmMpmoE/NKU0cPXMlOZw==", + "dev": true, + "license": "CC0-1.0", + "dependencies": { + "@iconify/types": "*" + } + }, + "node_modules/@iconify/types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", + "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", + "dev": true, + "license": "MIT" + }, "node_modules/@isaacs/balanced-match": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", @@ -802,91 +1155,6 @@ "node": ">=12" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", @@ -898,9 +1166,9 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.12", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", - "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, "license": "MIT", "dependencies": { @@ -919,9 +1187,9 @@ } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.10.tgz", - "integrity": "sha512-0pPkgz9dY+bijgistcTTJ5mR+ocqRXLuhXHYdzoMmmoJ2C9S46RCm2GMUbatPEUK9Yjy26IrAy8D/M00lLkv+Q==", + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", "dev": true, "license": "MIT", "dependencies": { @@ -930,16 +1198,16 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.29", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", - "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", + "version": "0.3.30", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz", + "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -1020,9 +1288,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.46.2.tgz", - "integrity": "sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.49.0.tgz", + "integrity": "sha512-rlKIeL854Ed0e09QGYFlmDNbka6I3EQFw7iZuugQjMb11KMpJCLPFL4ZPbMfaEhLADEL1yx0oujGkBQ7+qW3eA==", "cpu": [ "arm" ], @@ -1034,9 +1302,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.46.2.tgz", - "integrity": "sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.49.0.tgz", + "integrity": "sha512-cqPpZdKUSQYRtLLr6R4X3sD4jCBO1zUmeo3qrWBCqYIeH8Q3KRL4F3V7XJ2Rm8/RJOQBZuqzQGWPjjvFUcYa/w==", "cpu": [ "arm64" ], @@ -1048,9 +1316,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.46.2.tgz", - "integrity": "sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.49.0.tgz", + "integrity": "sha512-99kMMSMQT7got6iYX3yyIiJfFndpojBmkHfTc1rIje8VbjhmqBXE+nb7ZZP3A5skLyujvT0eIUCUsxAe6NjWbw==", "cpu": [ "arm64" ], @@ -1062,9 +1330,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.46.2.tgz", - "integrity": "sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.49.0.tgz", + "integrity": "sha512-y8cXoD3wdWUDpjOLMKLx6l+NFz3NlkWKcBCBfttUn+VGSfgsQ5o/yDUGtzE9HvsodkP0+16N0P4Ty1VuhtRUGg==", "cpu": [ "x64" ], @@ -1076,9 +1344,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.46.2.tgz", - "integrity": "sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.49.0.tgz", + "integrity": "sha512-3mY5Pr7qv4GS4ZvWoSP8zha8YoiqrU+e0ViPvB549jvliBbdNLrg2ywPGkgLC3cmvN8ya3za+Q2xVyT6z+vZqA==", "cpu": [ "arm64" ], @@ -1090,9 +1358,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.46.2.tgz", - "integrity": "sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.49.0.tgz", + "integrity": "sha512-C9KzzOAQU5gU4kG8DTk+tjdKjpWhVWd5uVkinCwwFub2m7cDYLOdtXoMrExfeBmeRy9kBQMkiyJ+HULyF1yj9w==", "cpu": [ "x64" ], @@ -1104,9 +1372,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.46.2.tgz", - "integrity": "sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.49.0.tgz", + "integrity": "sha512-OVSQgEZDVLnTbMq5NBs6xkmz3AADByCWI4RdKSFNlDsYXdFtlxS59J+w+LippJe8KcmeSSM3ba+GlsM9+WwC1w==", "cpu": [ "arm" ], @@ -1118,9 +1386,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.46.2.tgz", - "integrity": "sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.49.0.tgz", + "integrity": "sha512-ZnfSFA7fDUHNa4P3VwAcfaBLakCbYaxCk0jUnS3dTou9P95kwoOLAMlT3WmEJDBCSrOEFFV0Y1HXiwfLYJuLlA==", "cpu": [ "arm" ], @@ -1132,9 +1400,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.46.2.tgz", - "integrity": "sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.49.0.tgz", + "integrity": "sha512-Z81u+gfrobVK2iV7GqZCBfEB1y6+I61AH466lNK+xy1jfqFLiQ9Qv716WUM5fxFrYxwC7ziVdZRU9qvGHkYIJg==", "cpu": [ "arm64" ], @@ -1146,9 +1414,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.46.2.tgz", - "integrity": "sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.49.0.tgz", + "integrity": "sha512-zoAwS0KCXSnTp9NH/h9aamBAIve0DXeYpll85shf9NJ0URjSTzzS+Z9evmolN+ICfD3v8skKUPyk2PO0uGdFqg==", "cpu": [ "arm64" ], @@ -1160,9 +1428,9 @@ ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.46.2.tgz", - "integrity": "sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.49.0.tgz", + "integrity": "sha512-2QyUyQQ1ZtwZGiq0nvODL+vLJBtciItC3/5cYN8ncDQcv5avrt2MbKt1XU/vFAJlLta5KujqyHdYtdag4YEjYQ==", "cpu": [ "loong64" ], @@ -1174,9 +1442,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.46.2.tgz", - "integrity": "sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.49.0.tgz", + "integrity": "sha512-k9aEmOWt+mrMuD3skjVJSSxHckJp+SiFzFG+v8JLXbc/xi9hv2icSkR3U7uQzqy+/QbbYY7iNB9eDTwrELo14g==", "cpu": [ "ppc64" ], @@ -1188,9 +1456,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.46.2.tgz", - "integrity": "sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.49.0.tgz", + "integrity": "sha512-rDKRFFIWJ/zJn6uk2IdYLc09Z7zkE5IFIOWqpuU0o6ZpHcdniAyWkwSUWE/Z25N/wNDmFHHMzin84qW7Wzkjsw==", "cpu": [ "riscv64" ], @@ -1202,9 +1470,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.46.2.tgz", - "integrity": "sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.49.0.tgz", + "integrity": "sha512-FkkhIY/hYFVnOzz1WeV3S9Bd1h0hda/gRqvZCMpHWDHdiIHn6pqsY3b5eSbvGccWHMQ1uUzgZTKS4oGpykf8Tw==", "cpu": [ "riscv64" ], @@ -1216,9 +1484,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.46.2.tgz", - "integrity": "sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.49.0.tgz", + "integrity": "sha512-gRf5c+A7QiOG3UwLyOOtyJMD31JJhMjBvpfhAitPAoqZFcOeK3Kc1Veg1z/trmt+2P6F/biT02fU19GGTS529A==", "cpu": [ "s390x" ], @@ -1230,9 +1498,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.46.2.tgz", - "integrity": "sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.49.0.tgz", + "integrity": "sha512-BR7+blScdLW1h/2hB/2oXM+dhTmpW3rQt1DeSiCP9mc2NMMkqVgjIN3DDsNpKmezffGC9R8XKVOLmBkRUcK/sA==", "cpu": [ "x64" ], @@ -1244,9 +1512,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.46.2.tgz", - "integrity": "sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.49.0.tgz", + "integrity": "sha512-hDMOAe+6nX3V5ei1I7Au3wcr9h3ktKzDvF2ne5ovX8RZiAHEtX1A5SNNk4zt1Qt77CmnbqT+upb/umzoPMWiPg==", "cpu": [ "x64" ], @@ -1258,9 +1526,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.46.2.tgz", - "integrity": "sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.49.0.tgz", + "integrity": "sha512-wkNRzfiIGaElC9kXUT+HLx17z7D0jl+9tGYRKwd8r7cUqTL7GYAvgUY++U2hK6Ar7z5Z6IRRoWC8kQxpmM7TDA==", "cpu": [ "arm64" ], @@ -1272,9 +1540,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.46.2.tgz", - "integrity": "sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.49.0.tgz", + "integrity": "sha512-gq5aW/SyNpjp71AAzroH37DtINDcX1Qw2iv9Chyz49ZgdOP3NV8QCyKZUrGsYX9Yyggj5soFiRCgsL3HwD8TdA==", "cpu": [ "ia32" ], @@ -1286,9 +1554,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.46.2.tgz", - "integrity": "sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.49.0.tgz", + "integrity": "sha512-gEtqFbzmZLFk2xKh7g0Rlo8xzho8KrEFEkzvHbfUGkrgXOpZ4XagQ6n+wIZFNh1nTb8UD16J4nFSFKXYgnbdBg==", "cpu": [ "x64" ], @@ -1299,6 +1567,93 @@ "win32" ] }, + "node_modules/@shikijs/core": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-2.5.0.tgz", + "integrity": "sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/engine-javascript": "2.5.0", + "@shikijs/engine-oniguruma": "2.5.0", + "@shikijs/types": "2.5.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.4" + } + }, + "node_modules/@shikijs/engine-javascript": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-2.5.0.tgz", + "integrity": "sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "2.5.0", + "@shikijs/vscode-textmate": "^10.0.2", + "oniguruma-to-es": "^3.1.0" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-2.5.0.tgz", + "integrity": "sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "2.5.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, + "node_modules/@shikijs/langs": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-2.5.0.tgz", + "integrity": "sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "2.5.0" + } + }, + "node_modules/@shikijs/themes": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-2.5.0.tgz", + "integrity": "sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "2.5.0" + } + }, + "node_modules/@shikijs/transformers": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-2.5.0.tgz", + "integrity": "sha512-SI494W5X60CaUwgi8u4q4m4s3YAFSxln3tzNjOSYqq54wlVgz0/NbbXEb3mdLbqMBztcmS7bVTaEd2w0qMmfeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/core": "2.5.0", + "@shikijs/types": "2.5.0" + } + }, + "node_modules/@shikijs/types": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-2.5.0.tgz", + "integrity": "sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/chai": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.2.tgz", @@ -1323,6 +1678,16 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -1330,28 +1695,77 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/markdown-it": { + "version": "14.1.2", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", + "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/linkify-it": "^5", + "@types/mdurl": "^2" + } + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/node": { - "version": "24.2.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.2.1.tgz", - "integrity": "sha512-DRh5K+ka5eJic8CjH7td8QpYEV6Zo10gfRkjHCO3weqZHWDtAaSTFtl4+VMqOJ4N5jcuhZ9/l+yy8rVgw7BQeQ==", + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.0.tgz", + "integrity": "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==", "dev": true, "license": "MIT", "dependencies": { "undici-types": "~7.10.0" } }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.21", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", + "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", + "dev": true, + "license": "MIT" + }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.39.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.39.1.tgz", - "integrity": "sha512-yYegZ5n3Yr6eOcqgj2nJH8cH/ZZgF+l0YIdKILSDjYFRjgYQMgv/lRjV5Z7Up04b9VYUondt8EPMqg7kTWgJ2g==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.41.0.tgz", + "integrity": "sha512-8fz6oa6wEKZrhXWro/S3n2eRJqlRcIa6SlDh59FXJ5Wp5XRZ8B9ixpJDcjadHq47hMx0u+HW6SNa6LjJQ6NLtw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.39.1", - "@typescript-eslint/type-utils": "8.39.1", - "@typescript-eslint/utils": "8.39.1", - "@typescript-eslint/visitor-keys": "8.39.1", + "@typescript-eslint/scope-manager": "8.41.0", + "@typescript-eslint/type-utils": "8.41.0", + "@typescript-eslint/utils": "8.41.0", + "@typescript-eslint/visitor-keys": "8.41.0", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", @@ -1365,7 +1779,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.39.1", + "@typescript-eslint/parser": "^8.41.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } @@ -1381,16 +1795,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.39.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.39.1.tgz", - "integrity": "sha512-pUXGCuHnnKw6PyYq93lLRiZm3vjuslIy7tus1lIQTYVK9bL8XBgJnCWm8a0KcTtHC84Yya1Q6rtll+duSMj0dg==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.41.0.tgz", + "integrity": "sha512-gTtSdWX9xiMPA/7MV9STjJOOYtWwIJIYxkQxnSV1U3xcE+mnJSH3f6zI0RYP+ew66WSlZ5ed+h0VCxsvdC1jJg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.39.1", - "@typescript-eslint/types": "8.39.1", - "@typescript-eslint/typescript-estree": "8.39.1", - "@typescript-eslint/visitor-keys": "8.39.1", + "@typescript-eslint/scope-manager": "8.41.0", + "@typescript-eslint/types": "8.41.0", + "@typescript-eslint/typescript-estree": "8.41.0", + "@typescript-eslint/visitor-keys": "8.41.0", "debug": "^4.3.4" }, "engines": { @@ -1406,14 +1820,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.39.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.39.1.tgz", - "integrity": "sha512-8fZxek3ONTwBu9ptw5nCKqZOSkXshZB7uAxuFF0J/wTMkKydjXCzqqga7MlFMpHi9DoG4BadhmTkITBcg8Aybw==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.41.0.tgz", + "integrity": "sha512-b8V9SdGBQzQdjJ/IO3eDifGpDBJfvrNTp2QD9P2BeqWTGrRibgfgIlBSw6z3b6R7dPzg752tOs4u/7yCLxksSQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.39.1", - "@typescript-eslint/types": "^8.39.1", + "@typescript-eslint/tsconfig-utils": "^8.41.0", + "@typescript-eslint/types": "^8.41.0", "debug": "^4.3.4" }, "engines": { @@ -1428,14 +1842,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.39.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.39.1.tgz", - "integrity": "sha512-RkBKGBrjgskFGWuyUGz/EtD8AF/GW49S21J8dvMzpJitOF1slLEbbHnNEtAHtnDAnx8qDEdRrULRnWVx27wGBw==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.41.0.tgz", + "integrity": "sha512-n6m05bXn/Cd6DZDGyrpXrELCPVaTnLdPToyhBoFkLIMznRUQUEQdSp96s/pcWSQdqOhrgR1mzJ+yItK7T+WPMQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.39.1", - "@typescript-eslint/visitor-keys": "8.39.1" + "@typescript-eslint/types": "8.41.0", + "@typescript-eslint/visitor-keys": "8.41.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1446,9 +1860,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.39.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.39.1.tgz", - "integrity": "sha512-ePUPGVtTMR8XMU2Hee8kD0Pu4NDE1CN9Q1sxGSGd/mbOtGZDM7pnhXNJnzW63zk/q+Z54zVzj44HtwXln5CvHA==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.41.0.tgz", + "integrity": "sha512-TDhxYFPUYRFxFhuU5hTIJk+auzM/wKvWgoNYOPcOf6i4ReYlOoYN8q1dV5kOTjNQNJgzWN3TUUQMtlLOcUgdUw==", "dev": true, "license": "MIT", "engines": { @@ -1463,15 +1877,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.39.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.39.1.tgz", - "integrity": "sha512-gu9/ahyatyAdQbKeHnhT4R+y3YLtqqHyvkfDxaBYk97EcbfChSJXyaJnIL3ygUv7OuZatePHmQvuH5ru0lnVeA==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.41.0.tgz", + "integrity": "sha512-63qt1h91vg3KsjVVonFJWjgSK7pZHSQFKH6uwqxAH9bBrsyRhO6ONoKyXxyVBzG1lJnFAJcKAcxLS54N1ee1OQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.39.1", - "@typescript-eslint/typescript-estree": "8.39.1", - "@typescript-eslint/utils": "8.39.1", + "@typescript-eslint/types": "8.41.0", + "@typescript-eslint/typescript-estree": "8.41.0", + "@typescript-eslint/utils": "8.41.0", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -1488,9 +1902,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.39.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.39.1.tgz", - "integrity": "sha512-7sPDKQQp+S11laqTrhHqeAbsCfMkwJMrV7oTDvtDds4mEofJYir414bYKUEb8YPUm9QL3U+8f6L6YExSoAGdQw==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.41.0.tgz", + "integrity": "sha512-9EwxsWdVqh42afLbHP90n2VdHaWU/oWgbH2P0CfcNfdKL7CuKpwMQGjwev56vWu9cSKU7FWSu6r9zck6CVfnag==", "dev": true, "license": "MIT", "engines": { @@ -1502,16 +1916,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.39.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.39.1.tgz", - "integrity": "sha512-EKkpcPuIux48dddVDXyQBlKdeTPMmALqBUbEk38McWv0qVEZwOpVJBi7ugK5qVNgeuYjGNQxrrnoM/5+TI/BPw==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.41.0.tgz", + "integrity": "sha512-D43UwUYJmGhuwHfY7MtNKRZMmfd8+p/eNSfFe6tH5mbVDto+VQCayeAt35rOx3Cs6wxD16DQtIKw/YXxt5E0UQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.39.1", - "@typescript-eslint/tsconfig-utils": "8.39.1", - "@typescript-eslint/types": "8.39.1", - "@typescript-eslint/visitor-keys": "8.39.1", + "@typescript-eslint/project-service": "8.41.0", + "@typescript-eslint/tsconfig-utils": "8.41.0", + "@typescript-eslint/types": "8.41.0", + "@typescript-eslint/visitor-keys": "8.41.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -1557,16 +1971,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.39.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.39.1.tgz", - "integrity": "sha512-VF5tZ2XnUSTuiqZFXCZfZs1cgkdd3O/sSYmdo2EpSyDlC86UM/8YytTmKnehOW3TGAlivqTDT6bS87B/GQ/jyg==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.41.0.tgz", + "integrity": "sha512-udbCVstxZ5jiPIXrdH+BZWnPatjlYwJuJkDA4Tbo3WyYLh8NvB+h/bKeSZHDOFKfphsZYJQqaFtLeXEqurQn1A==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.39.1", - "@typescript-eslint/types": "8.39.1", - "@typescript-eslint/typescript-estree": "8.39.1" + "@typescript-eslint/scope-manager": "8.41.0", + "@typescript-eslint/types": "8.41.0", + "@typescript-eslint/typescript-estree": "8.41.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1581,13 +1995,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.39.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.39.1.tgz", - "integrity": "sha512-W8FQi6kEh2e8zVhQ0eeRnxdvIoOkAp/CPAahcNio6nO9dsIwb9b34z90KOlheoyuVf6LSOEdjlkxSkapNEc+4A==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.41.0.tgz", + "integrity": "sha512-+GeGMebMCy0elMNg67LRNoVnUFPIm37iu5CmHESVx56/9Jsfdpsvbv605DQ81Pi/x11IdKUsS5nzgTYbCQU9fg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.39.1", + "@typescript-eslint/types": "8.41.0", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -1598,6 +2012,27 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "dev": true, + "license": "ISC" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", + "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, "node_modules/@vitest/coverage-v8": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.2.4.tgz", @@ -1747,6 +2182,271 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/@vue/compiler-core": { + "version": "3.5.20", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.20.tgz", + "integrity": "sha512-8TWXUyiqFd3GmP4JTX9hbiTFRwYHgVL/vr3cqhr4YQ258+9FADwvj7golk2sWNGHR67QgmCZ8gz80nQcMokhwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.3", + "@vue/shared": "3.5.20", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-core/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.20", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.20.tgz", + "integrity": "sha512-whB44M59XKjqUEYOMPYU0ijUV0G+4fdrHVKDe32abNdX/kJe1NUEMqsi4cwzXa9kyM9w5S8WqFsrfo1ogtBZGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.20", + "@vue/shared": "3.5.20" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.20", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.20.tgz", + "integrity": "sha512-SFcxapQc0/feWiSBfkGsa1v4DOrnMAQSYuvDMpEaxbpH5dKbnEM5KobSNSgU+1MbHCl+9ftm7oQWxvwDB6iBfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.3", + "@vue/compiler-core": "3.5.20", + "@vue/compiler-dom": "3.5.20", + "@vue/compiler-ssr": "3.5.20", + "@vue/shared": "3.5.20", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.17", + "postcss": "^8.5.6", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-sfc/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.20", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.20.tgz", + "integrity": "sha512-RSl5XAMc5YFUXpDQi+UQDdVjH9FnEpLDHIALg5J0ITHxkEzJ8uQLlo7CIbjPYqmZtt6w0TsIPbo1izYXwDG7JA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.20", + "@vue/shared": "3.5.20" + } + }, + "node_modules/@vue/devtools-api": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.7.tgz", + "integrity": "sha512-lwOnNBH2e7x1fIIbVT7yF5D+YWhqELm55/4ZKf45R9T8r9dE2AIOy8HKjfqzGsoTHFbWbr337O4E0A0QADnjBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.7.7" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.7.tgz", + "integrity": "sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^7.7.7", + "birpc": "^2.3.0", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.2" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.7.tgz", + "integrity": "sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.20", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.20.tgz", + "integrity": "sha512-hS8l8x4cl1fmZpSQX/NXlqWKARqEsNmfkwOIYqtR2F616NGfsLUm0G6FQBK6uDKUCVyi1YOL8Xmt/RkZcd/jYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.20" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.20", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.20.tgz", + "integrity": "sha512-vyQRiH5uSZlOa+4I/t4Qw/SsD/gbth0SW2J7oMeVlMFMAmsG1rwDD6ok0VMmjXY3eI0iHNSSOBilEDW98PLRKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.20", + "@vue/shared": "3.5.20" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.20", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.20.tgz", + "integrity": "sha512-KBHzPld/Djw3im0CQ7tGCpgRedryIn4CcAl047EhFTCCPT2xFf4e8j6WeKLgEEoqPSl9TYqShc3Q6tpWpz/Xgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.20", + "@vue/runtime-core": "3.5.20", + "@vue/shared": "3.5.20", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.20", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.20.tgz", + "integrity": "sha512-HthAS0lZJDH21HFJBVNTtx+ULcIbJQRpjSVomVjfyPkFSpCwvsPTA+jIzOaUm3Hrqx36ozBHePztQFg6pj5aKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.20", + "@vue/shared": "3.5.20" + }, + "peerDependencies": { + "vue": "3.5.20" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.20", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.20.tgz", + "integrity": "sha512-SoRGP596KU/ig6TfgkCMbXkr4YJ91n/QSdMuqeP5r3hVIYA3CPHUBCc7Skak0EAKV+5lL4KyIh61VA/pK1CIAA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vueuse/core": { + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-12.8.2.tgz", + "integrity": "sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "12.8.2", + "@vueuse/shared": "12.8.2", + "vue": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/integrations": { + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-12.8.2.tgz", + "integrity": "sha512-fbGYivgK5uBTRt7p5F3zy6VrETlV9RtZjBqd1/HxGdjdckBgBM4ugP8LHpjolqTj14TXTxSK1ZfgPbHYyGuH7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vueuse/core": "12.8.2", + "@vueuse/shared": "12.8.2", + "vue": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "async-validator": "^4", + "axios": "^1", + "change-case": "^5", + "drauu": "^0.4", + "focus-trap": "^7", + "fuse.js": "^7", + "idb-keyval": "^6", + "jwt-decode": "^4", + "nprogress": "^0.2", + "qrcode": "^1.5", + "sortablejs": "^1", + "universal-cookie": "^7" + }, + "peerDependenciesMeta": { + "async-validator": { + "optional": true + }, + "axios": { + "optional": true + }, + "change-case": { + "optional": true + }, + "drauu": { + "optional": true + }, + "focus-trap": { + "optional": true + }, + "fuse.js": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "jwt-decode": { + "optional": true + }, + "nprogress": { + "optional": true + }, + "qrcode": { + "optional": true + }, + "sortablejs": { + "optional": true + }, + "universal-cookie": { + "optional": true + } + } + }, + "node_modules/@vueuse/metadata": { + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-12.8.2.tgz", + "integrity": "sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-12.8.2.tgz", + "integrity": "sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "vue": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/acorn": { "version": "8.15.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", @@ -1787,13 +2487,43 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/algoliasearch": { + "version": "5.36.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.36.0.tgz", + "integrity": "sha512-FpwQ+p4x4RIsWnPj2z9idOC70T90ga7Oeh8BURSFKpqp5lITRsgkIj/bwYj2bY5xbyD7uBuP9AZRnM5EV20WOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/abtesting": "1.2.0", + "@algolia/client-abtesting": "5.36.0", + "@algolia/client-analytics": "5.36.0", + "@algolia/client-common": "5.36.0", + "@algolia/client-insights": "5.36.0", + "@algolia/client-personalization": "5.36.0", + "@algolia/client-query-suggestions": "5.36.0", + "@algolia/client-search": "5.36.0", + "@algolia/ingestion": "1.36.0", + "@algolia/monitoring": "1.36.0", + "@algolia/recommend": "5.36.0", + "@algolia/requester-browser-xhr": "5.36.0", + "@algolia/requester-fetch": "5.36.0", + "@algolia/requester-node-http": "5.36.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.0.tgz", + "integrity": "sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, "node_modules/ansi-styles": { @@ -1801,6 +2531,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -1829,24 +2560,17 @@ } }, "node_modules/ast-v8-to-istanbul": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-0.3.3.tgz", - "integrity": "sha512-MuXMrSLVVoA6sYN/6Hke18vMzrT4TZNbZIj/hvh0fnYFpO+/kFXcLIaiPwXXWaQUPg4yJD8fj+lfJ7/1EBconw==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-0.3.4.tgz", + "integrity": "sha512-cxrAnZNLBnQwBPByK4CeDaw5sWZtMilJE/Q3iDA0aamgaIVNDF9T6K2/8DfYDZEejZ2jNnDrG9m8MY72HFd0KA==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", + "@jridgewell/trace-mapping": "^0.3.29", "estree-walker": "^3.0.3", "js-tokens": "^9.0.1" } }, - "node_modules/ast-v8-to-istanbul/node_modules/js-tokens": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", - "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", - "dev": true, - "license": "MIT" - }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1854,6 +2578,16 @@ "dev": true, "license": "MIT" }, + "node_modules/birpc": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.5.0.tgz", + "integrity": "sha512-VSWO/W6nNQdyP520F1mhf+Lc2f8pjGQOtoHHm7Ze8Go1kX7akpVIrtTa0fn+HB0QJEDVacl6aO08YE0PgXfdnQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/brace-expansion": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", @@ -1905,10 +2639,21 @@ "node": ">=6" } }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/chai": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.1.tgz", - "integrity": "sha512-5nFxhUrX0PqtyogoYOA8IPswy5sZFTOsBFl/9bNsmDLgsxYTzSZQJDPppDnZPTQbzSEm0hqGjWPzRemQCYbD6A==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", + "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", "dev": true, "license": "MIT", "dependencies": { @@ -1927,6 +2672,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -1938,14 +2684,36 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/check-error": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", - "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 16" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/check-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" } }, "node_modules/color-convert": { @@ -1953,6 +2721,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -1964,7 +2733,19 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/commander": { "version": "2.20.3", @@ -1980,6 +2761,22 @@ "dev": true, "license": "MIT" }, + "node_modules/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -1995,6 +2792,13 @@ "node": ">= 8" } }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true, + "license": "MIT" + }, "node_modules/debug": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", @@ -2027,7 +2831,32 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/eastasianwidth": { "version": "0.2.0", @@ -2037,10 +2866,31 @@ "license": "MIT" }, "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/emoji-regex-xs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz", + "integrity": "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==", + "dev": true, + "license": "MIT" + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } }, "node_modules/es-module-lexer": { "version": "1.7.0", @@ -2050,9 +2900,9 @@ "license": "MIT" }, "node_modules/esbuild": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.2.tgz", - "integrity": "sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.9.tgz", + "integrity": "sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -2063,31 +2913,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.2", - "@esbuild/android-arm": "0.25.2", - "@esbuild/android-arm64": "0.25.2", - "@esbuild/android-x64": "0.25.2", - "@esbuild/darwin-arm64": "0.25.2", - "@esbuild/darwin-x64": "0.25.2", - "@esbuild/freebsd-arm64": "0.25.2", - "@esbuild/freebsd-x64": "0.25.2", - "@esbuild/linux-arm": "0.25.2", - "@esbuild/linux-arm64": "0.25.2", - "@esbuild/linux-ia32": "0.25.2", - "@esbuild/linux-loong64": "0.25.2", - "@esbuild/linux-mips64el": "0.25.2", - "@esbuild/linux-ppc64": "0.25.2", - "@esbuild/linux-riscv64": "0.25.2", - "@esbuild/linux-s390x": "0.25.2", - "@esbuild/linux-x64": "0.25.2", - "@esbuild/netbsd-arm64": "0.25.2", - "@esbuild/netbsd-x64": "0.25.2", - "@esbuild/openbsd-arm64": "0.25.2", - "@esbuild/openbsd-x64": "0.25.2", - "@esbuild/sunos-x64": "0.25.2", - "@esbuild/win32-arm64": "0.25.2", - "@esbuild/win32-ia32": "0.25.2", - "@esbuild/win32-x64": "0.25.2" + "@esbuild/aix-ppc64": "0.25.9", + "@esbuild/android-arm": "0.25.9", + "@esbuild/android-arm64": "0.25.9", + "@esbuild/android-x64": "0.25.9", + "@esbuild/darwin-arm64": "0.25.9", + "@esbuild/darwin-x64": "0.25.9", + "@esbuild/freebsd-arm64": "0.25.9", + "@esbuild/freebsd-x64": "0.25.9", + "@esbuild/linux-arm": "0.25.9", + "@esbuild/linux-arm64": "0.25.9", + "@esbuild/linux-ia32": "0.25.9", + "@esbuild/linux-loong64": "0.25.9", + "@esbuild/linux-mips64el": "0.25.9", + "@esbuild/linux-ppc64": "0.25.9", + "@esbuild/linux-riscv64": "0.25.9", + "@esbuild/linux-s390x": "0.25.9", + "@esbuild/linux-x64": "0.25.9", + "@esbuild/netbsd-arm64": "0.25.9", + "@esbuild/netbsd-x64": "0.25.9", + "@esbuild/openbsd-arm64": "0.25.9", + "@esbuild/openbsd-x64": "0.25.9", + "@esbuild/openharmony-arm64": "0.25.9", + "@esbuild/sunos-x64": "0.25.9", + "@esbuild/win32-arm64": "0.25.9", + "@esbuild/win32-ia32": "0.25.9", + "@esbuild/win32-x64": "0.25.9" } }, "node_modules/escape-string-regexp": { @@ -2095,6 +2946,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -2103,9 +2955,9 @@ } }, "node_modules/eslint": { - "version": "9.33.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.33.0.tgz", - "integrity": "sha512-TS9bTNIryDzStCpJN93aC5VRSW3uTx9sClUn4B87pwiCaJh220otoI0X8mJKr+VcPtniMdN8GKjlwgWGUv5ZKA==", + "version": "9.34.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.34.0.tgz", + "integrity": "sha512-RNCHRX5EwdrESy3Jc9o8ie8Bog+PeYvvSR8sDGoZxNFTvZ4dlxUB3WzQ3bQMztFrSRODGrLLj8g6OFuGY/aiQg==", "dev": true, "license": "MIT", "dependencies": { @@ -2115,7 +2967,7 @@ "@eslint/config-helpers": "^0.3.1", "@eslint/core": "^0.15.2", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.33.0", + "@eslint/js": "9.34.0", "@eslint/plugin-kit": "^0.3.5", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", @@ -2193,18 +3045,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/espree": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", @@ -2224,10 +3064,11 @@ } }, "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -2253,6 +3094,7 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -2272,6 +3114,7 @@ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } @@ -2310,6 +3153,19 @@ "node": ">=8.6.0" } }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -2321,7 +3177,8 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fastq": { "version": "1.19.1", @@ -2338,6 +3195,7 @@ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, + "license": "MIT", "dependencies": { "flat-cache": "^4.0.0" }, @@ -2363,6 +3221,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -2379,6 +3238,7 @@ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, + "license": "MIT", "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" @@ -2388,10 +3248,21 @@ } }, "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/focus-trap": { + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.6.5.tgz", + "integrity": "sha512-7Ke1jyybbbPZyZXFxEftUtxFGLMpE2n6A+z//m4CRDlj0hW+o3iYSmh8nFlYMurOiJVDmJRilUQtJr08KfIxlg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tabbable": "^6.2.0" + } }, "node_modules/foreground-child": { "version": "3.3.1", @@ -2416,6 +3287,7 @@ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -2425,9 +3297,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz", - "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz", + "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2462,16 +3334,16 @@ } }, "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "license": "ISC", "dependencies": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" }, "engines": { - "node": ">= 6" + "node": ">=10.13.0" } }, "node_modules/glob/node_modules/minimatch": { @@ -2490,19 +3362,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/globals": { - "version": "16.3.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-16.3.0.tgz", - "integrity": "sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", @@ -2515,10 +3374,56 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/hast-util-to-html": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", + "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "dev": true, + "license": "MIT" + }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -2526,10 +3431,21 @@ "dev": true, "license": "MIT" }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "license": "MIT", "engines": { @@ -2558,6 +3474,7 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } @@ -2567,6 +3484,7 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2576,6 +3494,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -2585,6 +3504,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -2602,11 +3522,25 @@ "node": ">=0.12.0" } }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", @@ -2649,9 +3583,9 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -2689,12 +3623,11 @@ } }, "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", "dev": true, - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.0", @@ -2713,7 +3646,8 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-schema-traverse": { "version": "0.4.1", @@ -2726,13 +3660,15 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } @@ -2742,6 +3678,7 @@ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -2755,6 +3692,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -2769,19 +3707,20 @@ "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/loupe": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.4.tgz", - "integrity": "sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", + "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", "dev": true, "license": "MIT" }, "node_modules/lru-cache": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.0.tgz", - "integrity": "sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz", + "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==", "dev": true, "license": "ISC", "engines": { @@ -2789,13 +3728,13 @@ } }, "node_modules/magic-string": { - "version": "0.30.17", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", - "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "version": "0.30.18", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.18.tgz", + "integrity": "sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" + "@jridgewell/sourcemap-codec": "^1.5.5" } }, "node_modules/magicast": { @@ -2826,6 +3765,35 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/mark.js": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", + "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", + "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -2836,35 +3804,129 @@ "node": ">= 8" } }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", "dev": true, - "license": "ISC", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/minipass": { - "version": "7.1.2", + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minipass": { + "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, @@ -2873,6 +3935,20 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/minisearch": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-7.1.2.tgz", + "integrity": "sha512-R1Pd9eF+MD5JYDDSPAp/q1ougKglm14uEkPMvQ/05RGmx6G9wvmLTrTI/Q5iPNJLYqNdsDQ7qTGIcNWR+FrHmA==", + "dev": true, + "license": "MIT" + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "dev": true, + "license": "MIT" + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -2903,13 +3979,27 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/oniguruma-to-es": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-3.1.1.tgz", + "integrity": "sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex-xs": "^1.0.0", + "regex": "^6.0.1", + "regex-recursion": "^6.0.2" + } }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, + "license": "MIT", "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -2927,6 +4017,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -2942,6 +4033,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -2953,9 +4045,9 @@ } }, "node_modules/package-json-from-dist": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", - "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", "dev": true, "license": "BlueOak-1.0.0" }, @@ -2977,6 +4069,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -2986,6 +4079,7 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3024,6 +4118,13 @@ "node": ">= 14.16" } }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "dev": true, + "license": "MIT" + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -3073,11 +4174,23 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/preact": { + "version": "10.27.1", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.27.1.tgz", + "integrity": "sha512-V79raXEWch/rbqoNc7nT9E4ep7lu+mI3+sBmfRD4i1M73R3WLYcCtdI0ibxGVf4eQL8ZIz2nFacqEC+rmnOORQ==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } @@ -3098,6 +4211,17 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -3139,6 +4263,33 @@ "safe-buffer": "^5.1.0" } }, + "node_modules/regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/regex/-/regex-6.0.1.tgz", + "integrity": "sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-recursion": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", + "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-utilities": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", + "dev": true, + "license": "MIT" + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -3170,10 +4321,17 @@ "node": ">=0.10.0" } }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, + "license": "MIT" + }, "node_modules/rollup": { - "version": "4.46.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.46.2.tgz", - "integrity": "sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==", + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.49.0.tgz", + "integrity": "sha512-3IVq0cGJ6H7fKXXEdVt+RcYvRCt8beYY9K1760wGQwSAHZcS9eot1zDG5axUbcp/kWRi5zKIIDX8MoKv/TzvZA==", "dev": true, "license": "MIT", "dependencies": { @@ -3187,33 +4345,33 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.46.2", - "@rollup/rollup-android-arm64": "4.46.2", - "@rollup/rollup-darwin-arm64": "4.46.2", - "@rollup/rollup-darwin-x64": "4.46.2", - "@rollup/rollup-freebsd-arm64": "4.46.2", - "@rollup/rollup-freebsd-x64": "4.46.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.46.2", - "@rollup/rollup-linux-arm-musleabihf": "4.46.2", - "@rollup/rollup-linux-arm64-gnu": "4.46.2", - "@rollup/rollup-linux-arm64-musl": "4.46.2", - "@rollup/rollup-linux-loongarch64-gnu": "4.46.2", - "@rollup/rollup-linux-ppc64-gnu": "4.46.2", - "@rollup/rollup-linux-riscv64-gnu": "4.46.2", - "@rollup/rollup-linux-riscv64-musl": "4.46.2", - "@rollup/rollup-linux-s390x-gnu": "4.46.2", - "@rollup/rollup-linux-x64-gnu": "4.46.2", - "@rollup/rollup-linux-x64-musl": "4.46.2", - "@rollup/rollup-win32-arm64-msvc": "4.46.2", - "@rollup/rollup-win32-ia32-msvc": "4.46.2", - "@rollup/rollup-win32-x64-msvc": "4.46.2", + "@rollup/rollup-android-arm-eabi": "4.49.0", + "@rollup/rollup-android-arm64": "4.49.0", + "@rollup/rollup-darwin-arm64": "4.49.0", + "@rollup/rollup-darwin-x64": "4.49.0", + "@rollup/rollup-freebsd-arm64": "4.49.0", + "@rollup/rollup-freebsd-x64": "4.49.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.49.0", + "@rollup/rollup-linux-arm-musleabihf": "4.49.0", + "@rollup/rollup-linux-arm64-gnu": "4.49.0", + "@rollup/rollup-linux-arm64-musl": "4.49.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.49.0", + "@rollup/rollup-linux-ppc64-gnu": "4.49.0", + "@rollup/rollup-linux-riscv64-gnu": "4.49.0", + "@rollup/rollup-linux-riscv64-musl": "4.49.0", + "@rollup/rollup-linux-s390x-gnu": "4.49.0", + "@rollup/rollup-linux-x64-gnu": "4.49.0", + "@rollup/rollup-linux-x64-musl": "4.49.0", + "@rollup/rollup-win32-arm64-msvc": "4.49.0", + "@rollup/rollup-win32-ia32-msvc": "4.49.0", + "@rollup/rollup-win32-x64-msvc": "4.49.0", "fsevents": "~2.3.2" } }, "node_modules/rollup-plugin-dts": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-dts/-/rollup-plugin-dts-6.2.1.tgz", - "integrity": "sha512-sR3CxYUl7i2CHa0O7bA45mCrgADyAQ0tVtGSqi3yvH28M+eg1+g5d7kQ9hLvEz5dorK3XVsH5L2jwHLQf72DzA==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-dts/-/rollup-plugin-dts-6.2.3.tgz", + "integrity": "sha512-UgnEsfciXSPpASuOelix7m4DrmyQgiaWBnvI0TM4GxuDh5FkqW8E5hu57bCxXB90VvR1WNfLV80yEDN18UogSA==", "dev": true, "license": "LGPL-3.0-only", "dependencies": { @@ -3226,7 +4384,7 @@ "url": "https://github.com/sponsors/Swatinem" }, "optionalDependencies": { - "@babel/code-frame": "^7.26.2" + "@babel/code-frame": "^7.27.1" }, "peerDependencies": { "rollup": "^3.29.4 || ^4", @@ -3298,6 +4456,14 @@ ], "license": "MIT" }, + "node_modules/search-insights": { + "version": "2.17.3", + "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz", + "integrity": "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/semver": { "version": "7.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", @@ -3326,6 +4492,7 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -3338,10 +4505,28 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/shiki": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-2.5.0.tgz", + "integrity": "sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/core": "2.5.0", + "@shikijs/engine-javascript": "2.5.0", + "@shikijs/engine-oniguruma": "2.5.0", + "@shikijs/langs": "2.5.0", + "@shikijs/themes": "2.5.0", + "@shikijs/types": "2.5.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, "node_modules/siginfo": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", @@ -3354,6 +4539,7 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, + "license": "ISC", "engines": { "node": ">=14" }, @@ -3399,6 +4585,27 @@ "source-map": "^0.6.0" } }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/stackback": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", @@ -3414,17 +4621,21 @@ "license": "MIT" }, "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, + "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/string-width-cjs": { @@ -3443,11 +4654,29 @@ "node": ">=8" } }, - "node_modules/strip-ansi": { + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -3455,6 +4684,37 @@ "node": ">=8" } }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "dev": true, + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", @@ -3469,6 +4729,16 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -3495,12 +4765,18 @@ "url": "https://github.com/sponsors/antfu" } }, - "node_modules/strip-literal/node_modules/js-tokens": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", - "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "node_modules/superjson": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.2.tgz", + "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=16" + } }, "node_modules/supports-color": { "version": "7.2.0", @@ -3515,6 +4791,13 @@ "node": ">=8" } }, + "node_modules/tabbable": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", + "dev": true, + "license": "MIT" + }, "node_modules/terser": { "version": "5.43.1", "resolved": "https://registry.npmjs.org/terser/-/terser-5.43.1.tgz", @@ -3668,11 +4951,14 @@ } }, "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.4.6", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", - "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, "peerDependencies": { "picomatch": "^3 || ^4" }, @@ -3683,9 +4969,9 @@ } }, "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", "engines": { @@ -3738,6 +5024,17 @@ "node": ">=8.0" } }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/ts-api-utils": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", @@ -3752,9 +5049,9 @@ } }, "node_modules/tsx": { - "version": "4.20.4", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.4.tgz", - "integrity": "sha512-yyxBKfORQ7LuRt/BQKBXrpcq59ZvSW0XxwfjAt3w2/8PmdxaFzijtMhTawprSHhpzeM5BgU2hXHG3lklIERZXg==", + "version": "4.20.5", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.5.tgz", + "integrity": "sha512-+wKjMNU9w/EaQayHXb7WA7ZaHY6hN8WgfvHNQ3t1PnU91/7O8TcTnIhCDYTZwnt8JsO9IBqZ30Ln1r7pPF52Aw==", "dev": true, "license": "MIT", "dependencies": { @@ -3776,6 +5073,7 @@ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -3784,9 +5082,9 @@ } }, "node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", "dev": true, "license": "Apache-2.0", "peer": true, @@ -3799,16 +5097,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.39.1", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.39.1.tgz", - "integrity": "sha512-GDUv6/NDYngUlNvwaHM1RamYftxf782IyEDbdj3SeaIHHv8fNQVRC++fITT7kUJV/5rIA/tkoRSSskt6osEfqg==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.41.0.tgz", + "integrity": "sha512-n66rzs5OBXW3SFSnZHr2T685q1i4ODm2nulFJhMZBotaTavsS8TrI3d7bDlRSs9yWo7HmyWrN9qDu14Qv7Y0Dw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.39.1", - "@typescript-eslint/parser": "8.39.1", - "@typescript-eslint/typescript-estree": "8.39.1", - "@typescript-eslint/utils": "8.39.1" + "@typescript-eslint/eslint-plugin": "8.41.0", + "@typescript-eslint/parser": "8.41.0", + "@typescript-eslint/typescript-estree": "8.41.0", + "@typescript-eslint/utils": "8.41.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3829,65 +5127,165 @@ "dev": true, "license": "MIT" }, - "node_modules/unplugin-utils": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/unplugin-utils/-/unplugin-utils-0.2.4.tgz", - "integrity": "sha512-8U/MtpkPkkk3Atewj1+RcKIjb5WBimZ/WSLhhR3w6SsIj8XJuKTacSP8g+2JhfSGw0Cb125Y+2zA/IzJZDVbhA==", + "node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "dev": true, "license": "MIT", "dependencies": { - "pathe": "^2.0.2", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=18.12.0" + "@types/unist": "^3.0.0" }, "funding": { - "url": "https://github.com/sponsors/sxzz" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/unplugin-utils/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "@types/unist": "^3.0.0" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "punycode": "^2.1.0" + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unplugin-utils": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/unplugin-utils/-/unplugin-utils-0.2.5.tgz", + "integrity": "sha512-gwXJnPRewT4rT7sBi/IvxKTjsms7jX7QIDLOClApuZwR49SXbrB1z2NLUZ+vDHyqCj/n58OzRRqaW+B8OZi8vg==", + "dev": true, + "license": "MIT", + "dependencies": { + "pathe": "^2.0.3", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=18.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/unplugin-utils/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/vite": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.3.tgz", - "integrity": "sha512-y2L5oJZF7bj4c0jgGYgBNSdIu+5HF+m68rn2cQXFbGoShdhV1phX9rbnxy9YXj82aS8MMsCLAAFkRxZeWdldrQ==", + "version": "5.4.19", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.19.tgz", + "integrity": "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==", "dev": true, "license": "MIT", "dependencies": { - "esbuild": "^0.25.0", - "fdir": "^6.4.6", - "picomatch": "^4.0.2", - "postcss": "^8.5.6", - "rollup": "^4.40.0", - "tinyglobby": "^0.2.14" + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": "^18.0.0 || >=20.0.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" @@ -3896,25 +5294,19 @@ "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": "^20.19.0 || >=22.12.0", - "jiti": ">=1.21.0", - "less": "^4.0.0", + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", "lightningcss": "^1.21.0", - "sass": "^1.70.0", - "sass-embedded": "^1.70.0", - "stylus": ">=0.54.8", - "sugarss": "^5.0.0", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" }, "peerDependenciesMeta": { "@types/node": { "optional": true }, - "jiti": { - "optional": true - }, "less": { "optional": true }, @@ -3935,12 +5327,6 @@ }, "terser": { "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true } } }, @@ -3967,32 +5353,476 @@ "url": "https://opencollective.com/vitest" } }, - "node_modules/vite/node_modules/fdir": { - "version": "6.4.6", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", - "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], "dev": true, "license": "MIT", - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" } }, - "node_modules/vite/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/vitepress": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.6.4.tgz", + "integrity": "sha512-+2ym1/+0VVrbhNyRoFFesVvBvHAVMZMK0rw60E3X/5349M1GuVdKeazuksqopEdvkKwKGs21Q729jX81/bkBJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@docsearch/css": "3.8.2", + "@docsearch/js": "3.8.2", + "@iconify-json/simple-icons": "^1.2.21", + "@shikijs/core": "^2.1.0", + "@shikijs/transformers": "^2.1.0", + "@shikijs/types": "^2.1.0", + "@types/markdown-it": "^14.1.2", + "@vitejs/plugin-vue": "^5.2.1", + "@vue/devtools-api": "^7.7.0", + "@vue/shared": "^3.5.13", + "@vueuse/core": "^12.4.0", + "@vueuse/integrations": "^12.4.0", + "focus-trap": "^7.6.4", + "mark.js": "8.11.1", + "minisearch": "^7.1.1", + "shiki": "^2.1.0", + "vite": "^5.4.14", + "vue": "^3.5.13" + }, + "bin": { + "vitepress": "bin/vitepress.js" + }, + "peerDependencies": { + "markdown-it-mathjax3": "^4", + "postcss": "^8" + }, + "peerDependenciesMeta": { + "markdown-it-mathjax3": { + "optional": true + }, + "postcss": { + "optional": true + } } }, "node_modules/vitest": { @@ -4069,9 +5899,9 @@ } }, "node_modules/vitest/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", "engines": { @@ -4081,11 +5911,34 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/vue": { + "version": "3.5.20", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.20.tgz", + "integrity": "sha512-2sBz0x/wis5TkF1XZ2vH25zWq3G1bFEPOfkBcx2ikowmphoQsPH6X0V3mmPCXA2K1N/XGTnifVyDQP4GfDDeQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.20", + "@vue/compiler-sfc": "3.5.20", + "@vue/runtime-dom": "3.5.20", + "@vue/server-renderer": "3.5.20", + "@vue/shared": "3.5.20" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -4118,10 +5971,29 @@ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", @@ -4141,17 +6013,87 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } } } } diff --git a/package.json b/package.json index b241cca..664bf43 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "date-and-time", - "version": "4.0.2", + "version": "4.0.3", "description": "The simplest, most intuitive date and time library", "keywords": [ "date", @@ -45,14 +45,16 @@ "files": [ "LICENSE", "README.md", - "dist/", - "docs/" + "dist/" ], "scripts": { "build": "rollup -c", "build-watch": "rollup -c --watch", "build:ts": "rollup -c --config-ts", "build:types": "rollup -c --config-types", + "docs:build": "vitepress build docs", + "docs:dev": "vitepress dev docs", + "docs:preview": "vitepress preview docs", "lint": "eslint src", "prepublishOnly": "npm run build", "test": "vitest run", @@ -65,7 +67,7 @@ "engines": { "node": ">=18" }, - "homepage": "https://github.com/knowledgecode/date-and-time#readme", + "homepage": "https://knowledgecode.github.io/date-and-time/", "bugs": { "url": "https://github.com/knowledgecode/date-and-time/issues" }, @@ -77,18 +79,18 @@ "sideEffects": false, "devDependencies": { "@rollup/plugin-terser": "^0.4.4", - "@types/node": "^24.2.1", + "@types/node": "^24.3.0", "@vitest/coverage-v8": "^3.2.4", - "eslint": "^9.33.0", + "eslint": "^9.34.0", "glob": "^11.0.3", - "globals": "^16.3.0", "jiti": "^2.5.1", "prettier": "^3.6.2", - "rollup": "^4.46.2", - "rollup-plugin-dts": "^6.2.1", + "rollup": "^4.49.0", + "rollup-plugin-dts": "^6.2.3", "rollup-plugin-esbuild": "^6.2.1", - "tsx": "^4.20.4", - "typescript-eslint": "^8.39.1", + "tsx": "^4.20.5", + "typescript-eslint": "^8.41.0", + "vitepress": "^1.6.4", "vitest": "^3.2.4" } }