fix: sequential progression bug in course with ordered contents (#889)

* fix: sequential progression bug in course with ordered contents

* test(utils): add course progression tests and unify navigation ordering

Reuse flattenNavigableItems in getOrderedNavigableContent so next/previous
navigation follows the same section-aware order as progression locks.
Add vitest coverage for grouped multi-section flattening and sequential
access rules.

Co-authored-by: Rotimi Best <[email protected]>

* fix: address PR review comments for course progression

Simplify grouped flatten ordering, only block progression for lessons and
exercises explicitly, integrate flattenNavigableItems in the sequential access
test, and include @cio/core watch in api:dev:full.

---------
This commit is contained in:
Richard Kenneth
2026-08-14 13:50:59 +01:00
committed by GitHub
parent d3a0e01f2b
commit 96bade402a
10 changed files with 538 additions and 230 deletions
@@ -2,6 +2,7 @@ import type { Course, CourseContentItem, CourseContentSection } from './types';
import { ExerciseIcon, LessonIcon } from '@cio/ui/custom/moving-icons';
import { ContentType as CourseContentType } from '@cio/utils/constants/content';
import { flattenNavigableItems } from '@cio/utils/functions/course-progression';
import TableOfContentsIcon from '@lucide/svelte/icons/table-of-contents';
export type ContentItem = CourseContentItem;
@@ -94,8 +95,9 @@ export function getCourseProgress(course: Course | null): ContentProgress {
export function getOrderedNavigableContent(course: Course | null): ContentItem[] {
const content = getCourseContent(course);
const items = content.grouped ? content.sections.flatMap((s) => s.items) : content.items;
return items.filter((item) =>
const flattenedItems = flattenNavigableItems(content);
return flattenedItems.filter((item) =>
NAVIGABLE_CONTENT_TYPES.includes(item.type as (typeof NAVIGABLE_CONTENT_TYPES)[number])
);
}
@@ -1,95 +1,20 @@
import { ContentType } from '@cio/utils/constants/content';
import type { Course, CourseContentItem } from './types';
type ProgressionLockReason = 'teacher_locked' | 'progression_blocked';
function sortNavigableItems(items: CourseContentItem[]): CourseContentItem[] {
return [...items].sort((left, right) => {
const orderDiff = (left.order ?? 0) - (right.order ?? 0);
if (orderDiff !== 0) return orderDiff;
const typeDiff = (left.type === ContentType.Lesson ? 0 : 1) - (right.type === ContentType.Lesson ? 0 : 1);
if (typeDiff !== 0) return typeDiff;
return new Date(left.createdAt || 0).getTime() - new Date(right.createdAt || 0).getTime();
});
}
function getNavigableItems(course: Course): CourseContentItem[] {
if (!course.content) return [];
const items = course.content.grouped
? course.content.sections.flatMap((section) => section.items)
: course.content.items;
return sortNavigableItems(
items.filter((item) => item.type === ContentType.Lesson || item.type === ContentType.Exercise)
);
}
function lessonBlocksProgression(policy: string | null | undefined): boolean {
return policy !== 'none';
}
function isItemProgressComplete(item: CourseContentItem): boolean {
return Boolean(item.isComplete);
}
function computeProgressionAccess(
navigableItems: CourseContentItem[],
progressionMode: 'free' | 'sequential'
): Map<string, { accessible: boolean; lockReason: ProgressionLockReason | null }> {
const accessById = new Map<string, { accessible: boolean; lockReason: ProgressionLockReason | null }>();
let priorBlockingComplete = true;
for (const item of navigableItems) {
const teacherLocked = !(item.isUnlocked ?? true);
const progressionLocked = progressionMode === 'sequential' && !priorBlockingComplete;
let accessible = !teacherLocked && !progressionLocked;
let lockReason: ProgressionLockReason | null = null;
if (teacherLocked) {
accessible = false;
lockReason = 'teacher_locked';
} else if (progressionLocked) {
accessible = false;
lockReason = 'progression_blocked';
}
accessById.set(item.id, { accessible, lockReason });
const complete = isItemProgressComplete(item);
const blocks = item.type === ContentType.Lesson ? lessonBlocksProgression(item.completionPolicy ?? 'manual') : true;
if (blocks && !complete) {
priorBlockingComplete = false;
}
}
return accessById;
}
function annotateContentItem(
item: CourseContentItem,
accessById: Map<string, { accessible: boolean; lockReason: ProgressionLockReason | null }>
): CourseContentItem {
const access = accessById.get(item.id);
if (!access) return item;
return {
...item,
accessible: access.accessible,
lockReason: access.lockReason
};
}
import {
annotateContentItem,
computeProgressionAccess,
flattenNavigableItems
} from '@cio/utils/functions/course-progression';
import type { Course } from './types';
/** Recomputes student progression locks on in-memory course content after completion changes. */
export function syncProgressionAccessToCourse(course: Course): Course {
if (!course.content) return course;
const progressionMode = course.metadata?.progressionMode === 'sequential' ? 'sequential' : 'free';
const accessById = computeProgressionAccess(getNavigableItems(course), progressionMode);
const navigableItems = flattenNavigableItems(course.content);
const accessById = computeProgressionAccess({
navigableItems,
progressionMode
});
if (course.content.grouped) {
return {
+3 -2
View File
@@ -16,9 +16,10 @@
"db:reset": "pnpm --filter @cio/db db:reset",
"db:studio": "pnpm --filter @cio/db db:studio",
"db:backfill-profile-email-verification": "pnpm --filter @cio/db db:backfill-profile-email-verification",
"dashboard:dev:full": "pnpm turbo run build --filter=@cio/dashboard^... --filter=@cio/ui^... && pnpm concurrently -n dashboard,ui -c blue,yellow \"pnpm --filter=@cio/dashboard run dev\" \"pnpm --filter=@cio/ui run dev\"",
"dashboard:dev": "pnpm concurrently -n dashboard,ui -c blue,yellow \"pnpm --filter=@cio/dashboard run dev\" \"pnpm --filter=@cio/ui run dev\"",
"api:dev:full": "pnpm turbo run build --filter=@cio/api^... --filter=@cio/jobs-worker^... && pnpm concurrently -n api,jobs -c blue,yellow \"pnpm --filter=@cio/api run dev\" \"pnpm --filter=@cio/jobs-worker run dev\"",
"api:dev": "pnpm concurrently -n api,jobs -c blue,yellow \"pnpm --filter=@cio/api run dev\" \"pnpm --filter=@cio/jobs-worker run dev\"",
"api:dev:full": "pnpm turbo run build --filter=@cio/api^... --filter=@cio/jobs-worker^... && pnpm concurrently -n api,core,jobs -c blue,red,yellow \"pnpm --filter=@cio/api run dev\" \"pnpm --filter=@cio/core run dev\" \"pnpm --filter=@cio/jobs-worker run dev\"",
"api:dev": "pnpm concurrently -n api,core,jobs -c blue,red,yellow \"pnpm --filter=@cio/api run dev\" \"pnpm --filter=@cio/core run dev\" \"pnpm --filter=@cio/jobs-worker run dev\"",
"jobs:dev": "pnpm --filter=@cio/jobs-worker run dev",
"docs:dev": "pnpm --filter @cio/docs dev",
"docs:build": "pnpm --filter @cio/docs build",
@@ -1,6 +1,10 @@
import { ContentType } from '@cio/utils/constants';
import { ROLE } from '@cio/utils/constants';
import { ContentType, ROLE } from '@cio/utils/constants';
import { AppError, ErrorCodes } from '@cio/utils/errors';
import {
computeProgressionAccess,
flattenNavigableItems,
type ProgressionLockReason
} from '@cio/utils/functions/course-progression';
import type { CourseContentItemRow } from '@cio/db/queries/course/content';
import {
getCompletedExerciseIdsForMember,
@@ -14,8 +18,6 @@ import { getGroupMemberIdByCourseAndProfile } from '@cio/db/queries/group';
import { buildCourseContent, type CourseContent, type CourseContentItem } from './utils';
export type ProgressionLockReason = 'teacher_locked' | 'progression_blocked';
export type AnnotatedCourseContentItem = CourseContentItem & {
accessible?: boolean;
lockReason?: ProgressionLockReason | null;
@@ -35,52 +37,6 @@ export type AnnotatedCourseContent = {
items: AnnotatedCourseContentItem[];
};
function sortNavigableItems(items: CourseContentItem[]): CourseContentItem[] {
return [...items].sort((left, right) => {
const orderDiff = (left.order ?? 0) - (right.order ?? 0);
if (orderDiff !== 0) return orderDiff;
const typeDiff = (left.type === ContentType.Lesson ? 0 : 1) - (right.type === ContentType.Lesson ? 0 : 1);
if (typeDiff !== 0) return typeDiff;
return new Date(left.createdAt || 0).getTime() - new Date(right.createdAt || 0).getTime();
});
}
function flattenNavigableItems(content: CourseContent): CourseContentItem[] {
const items = content.grouped ? content.sections.flatMap((section) => section.items) : content.items;
return sortNavigableItems(
items.filter((item) => item.type === ContentType.Lesson || item.type === ContentType.Exercise)
);
}
function lessonBlocksProgression(policy: string | undefined): boolean {
return policy !== 'none';
}
function exerciseBlocksProgression(): boolean {
return true;
}
function isItemProgressComplete(params: {
item: CourseContentItem;
completedLessonIds: Set<string>;
completedExerciseIds: Set<string>;
}): boolean {
const { item, completedLessonIds, completedExerciseIds } = params;
if (item.type === ContentType.Lesson) {
return completedLessonIds.has(item.id);
}
if (item.type === ContentType.Exercise) {
return completedExerciseIds.has(item.id) || Boolean(item.isComplete);
}
return true;
}
function annotateNavigableAccess(params: {
navigableItems: CourseContentItem[];
lessonPolicyById: Map<string, LessonProgressionPolicy>;
@@ -88,44 +44,25 @@ function annotateNavigableAccess(params: {
completedLessonIds: Set<string>;
completedExerciseIds: Set<string>;
}): Map<string, { accessible: boolean; lockReason: ProgressionLockReason | null }> {
const accessById = new Map<string, { accessible: boolean; lockReason: ProgressionLockReason | null }>();
let priorBlockingComplete = true;
return computeProgressionAccess({
navigableItems: params.navigableItems,
progressionMode: params.progressionMode,
isComplete: (item) => {
if (item.type === ContentType.Lesson) {
return params.completedLessonIds.has(item.id);
}
for (const item of params.navigableItems) {
const lessonPolicy = params.lessonPolicyById.get(item.id);
const teacherLocked = !(item.isUnlocked ?? true);
const progressionLocked = params.progressionMode === 'sequential' && !priorBlockingComplete;
if (item.type === ContentType.Exercise) {
return params.completedExerciseIds.has(item.id) || Boolean(item.isComplete);
}
let accessible = !teacherLocked && !progressionLocked;
let lockReason: ProgressionLockReason | null = null;
if (teacherLocked) {
accessible = false;
lockReason = 'teacher_locked';
} else if (progressionLocked) {
accessible = false;
lockReason = 'progression_blocked';
return true;
},
getCompletionPolicy: (item) => {
const lessonPolicy = params.lessonPolicyById.get(item.id);
return lessonPolicy?.completionPolicy ?? 'manual';
}
accessById.set(item.id, { accessible, lockReason });
const complete = isItemProgressComplete({
item,
completedLessonIds: params.completedLessonIds,
completedExerciseIds: params.completedExerciseIds
});
const blocks =
item.type === ContentType.Lesson
? lessonBlocksProgression(lessonPolicy?.completionPolicy ?? 'manual')
: exerciseBlocksProgression();
if (blocks && !complete) {
priorBlockingComplete = false;
}
}
return accessById;
});
}
function applyAccessToContent(
+4 -1
View File
@@ -73,7 +73,9 @@
"scripts": {
"build": "rimraf dist tsconfig.tsbuildinfo && tsc && tsc-alias",
"dev": "tsc --watch",
"format": "prettier --write ."
"format": "prettier --write .",
"test": "vitest run",
"test:watch": "vitest"
},
"peerDependencies": {
"zod": "^4.1.8"
@@ -86,6 +88,7 @@
"tsc-alias": "^1.8.16",
"tsx": "^4.7.1",
"typescript": "^5.5.2",
"vitest": "^1.2.2",
"zod": "^4.1.8"
}
}
@@ -0,0 +1,135 @@
import { ContentType } from '../constants/content';
export type ProgressionLockReason = 'teacher_locked' | 'progression_blocked';
type NavigableCourseContent<T extends { order?: number | null }> = {
grouped: boolean;
sections: Array<{ items: T[] }>;
items: T[];
};
/**
* Flattens sectioned or flat course content into a single ordered array of items based on section and item orders.
*/
export function flattenNavigableItems<T extends { order?: number | null }>(content: NavigableCourseContent<T>): T[] {
if (content.grouped) {
const flattenedListItems: T[] = [];
for (const section of content.sections) {
const sortedSectionItems = section.items
.map((item, index) => ({ item, sortOrder: item.order ?? index }))
.sort((left, right) => left.sortOrder - right.sortOrder)
.map(({ item }) => item);
flattenedListItems.push(...sortedSectionItems);
}
return flattenedListItems;
}
return [...content.items].sort((left, right) => (left.order ?? 0) - (right.order ?? 0));
}
/**
* Evaluates whether a lesson with a given completion policy blocks sequential progression.
*/
function lessonBlocksProgression(policy?: string | null): boolean {
return policy !== 'none';
}
/**
* Evaluates whether an exercise blocks sequential progression (always true).
*/
function exerciseBlocksProgression(): boolean {
return true;
}
/**
* Determines whether a course content item blocks sequential progression.
*/
function itemBlocksProgression(type?: ContentType, completionPolicy?: string | null): boolean {
if (type === ContentType.Lesson) {
return lessonBlocksProgression(completionPolicy ?? 'manual');
}
if (type === ContentType.Exercise) {
return exerciseBlocksProgression();
}
return false;
}
type CourseProgressionItem = {
id: string;
type?: ContentType;
order?: number | null;
completionPolicy?: string | null;
isUnlocked?: boolean | null;
isComplete?: boolean | null;
accessible?: boolean;
lockReason?: ProgressionLockReason | null;
};
type ComputeProgressionAccessParams<T extends CourseProgressionItem> = {
navigableItems: T[];
progressionMode: 'free' | 'sequential';
isComplete?: (item: T) => boolean;
getCompletionPolicy?: (item: T) => string | null | undefined;
getIsUnlocked?: (item: T) => boolean;
};
type AccessMap = Map<string, { accessible: boolean; lockReason: ProgressionLockReason | null }>;
/**
* Computes progression access (accessible flag and lockReason) across an ordered array of navigable items.
*/
export function computeProgressionAccess<T extends CourseProgressionItem>(
params: ComputeProgressionAccessParams<T>
): AccessMap {
const { navigableItems, progressionMode, isComplete, getCompletionPolicy, getIsUnlocked } = params;
const accessById: AccessMap = new Map();
let priorBlockingComplete = true;
for (const item of navigableItems) {
const isUnlocked = getIsUnlocked ? getIsUnlocked(item) : (item.isUnlocked ?? true);
const teacherLocked = !isUnlocked;
const progressionLocked = progressionMode === 'sequential' && !priorBlockingComplete;
let accessible = !teacherLocked && !progressionLocked;
let lockReason: ProgressionLockReason | null = null;
if (teacherLocked) {
accessible = false;
lockReason = 'teacher_locked';
} else if (progressionLocked) {
accessible = false;
lockReason = 'progression_blocked';
}
accessById.set(item.id, { accessible, lockReason });
const itemComplete = isComplete ? isComplete(item) : Boolean(item.isComplete);
const policy = getCompletionPolicy ? getCompletionPolicy(item) : item.completionPolicy;
const blocks = itemBlocksProgression(item.type, policy);
if (blocks && !itemComplete) {
priorBlockingComplete = false;
}
}
return accessById;
}
/**
* Annotates a content item with its computed access and lock reason.
*/
export function annotateContentItem<T extends CourseProgressionItem>(item: T, accessById: AccessMap): T {
const access = accessById.get(item.id);
if (!access) return item;
return {
...item,
accessible: access.accessible,
lockReason: access.lockReason
};
}
+1
View File
@@ -1,4 +1,5 @@
export * from './array';
export * from './course-progression';
export * from './currency';
export * from './fileValidation';
export * from './number';
@@ -0,0 +1,199 @@
import { describe, expect, it } from 'vitest';
import { ContentType } from '../src/constants/content';
import {
annotateContentItem,
computeProgressionAccess,
flattenNavigableItems,
type ProgressionLockReason
} from '../src/functions/course-progression';
type TestItem = {
id: string;
type: ContentType;
order?: number | null;
isComplete?: boolean | null;
isUnlocked?: boolean | null;
completionPolicy?: string | null;
accessible?: boolean;
lockReason?: ProgressionLockReason | null;
};
function lesson(id: string, order: number, options: Partial<TestItem> = {}): TestItem {
return {
id,
type: ContentType.Lesson,
order,
isComplete: false,
isUnlocked: true,
completionPolicy: 'manual',
...options
};
}
function exercise(id: string, order: number, options: Partial<TestItem> = {}): TestItem {
return {
id,
type: ContentType.Exercise,
order,
isComplete: false,
isUnlocked: true,
...options
};
}
describe('flattenNavigableItems', () => {
it('orders grouped content section-by-section instead of by global order values', () => {
const content = {
grouped: true,
sections: [
{
items: [lesson('section-1-lesson-1', 1), lesson('section-1-lesson-2', 2)]
},
{
items: [lesson('section-2-lesson-1', 1), lesson('section-2-lesson-2', 2)]
}
],
items: []
};
const flattenedIds = flattenNavigableItems(content).map((item) => item.id);
expect(flattenedIds).toEqual([
'section-1-lesson-1',
'section-1-lesson-2',
'section-2-lesson-1',
'section-2-lesson-2'
]);
});
it('sorts ungrouped content by order', () => {
const content = {
grouped: false,
sections: [],
items: [lesson('lesson-3', 3), lesson('lesson-1', 1), lesson('lesson-2', 2)]
};
const flattenedIds = flattenNavigableItems(content).map((item) => item.id);
expect(flattenedIds).toEqual(['lesson-1', 'lesson-2', 'lesson-3']);
});
it('does not mutate the source content array for ungrouped courses', () => {
const items = [lesson('lesson-2', 2), lesson('lesson-1', 1)];
const content = {
grouped: false,
sections: [],
items
};
flattenNavigableItems(content);
expect(content.items.map((item) => item.id)).toEqual(['lesson-2', 'lesson-1']);
});
});
describe('computeProgressionAccess', () => {
it('unlocks the next item in the same section after the previous item is complete', () => {
const content = {
grouped: true,
sections: [
{
items: [lesson('section-1-lesson-1', 1, { isComplete: true }), lesson('section-1-lesson-2', 2)]
},
{
items: [lesson('section-2-lesson-1', 1), lesson('section-2-lesson-2', 2)]
}
],
items: []
};
const navigableItems = flattenNavigableItems(content);
const accessById = computeProgressionAccess({
navigableItems,
progressionMode: 'sequential'
});
expect(accessById.get('section-1-lesson-1')).toEqual({ accessible: true, lockReason: null });
expect(accessById.get('section-1-lesson-2')).toEqual({ accessible: true, lockReason: null });
expect(accessById.get('section-2-lesson-1')).toEqual({
accessible: false,
lockReason: 'progression_blocked'
});
expect(accessById.get('section-2-lesson-2')).toEqual({
accessible: false,
lockReason: 'progression_blocked'
});
});
it('keeps all items accessible in free progression mode', () => {
const navigableItems = [lesson('lesson-1', 1), lesson('lesson-2', 2, { isComplete: false })];
const accessById = computeProgressionAccess({
navigableItems,
progressionMode: 'free'
});
expect(accessById.get('lesson-1')).toEqual({ accessible: true, lockReason: null });
expect(accessById.get('lesson-2')).toEqual({ accessible: true, lockReason: null });
});
it('blocks teacher-locked items before sequential progression rules', () => {
const navigableItems = [lesson('lesson-1', 1, { isComplete: true }), lesson('lesson-2', 2, { isUnlocked: false })];
const accessById = computeProgressionAccess({
navigableItems,
progressionMode: 'sequential'
});
expect(accessById.get('lesson-2')).toEqual({
accessible: false,
lockReason: 'teacher_locked'
});
});
it('does not block progression on lessons with completion policy none', () => {
const navigableItems = [
lesson('lesson-1', 1, { isComplete: false, completionPolicy: 'none' }),
lesson('lesson-2', 2)
];
const accessById = computeProgressionAccess({
navigableItems,
progressionMode: 'sequential'
});
expect(accessById.get('lesson-2')).toEqual({ accessible: true, lockReason: null });
});
it('blocks progression until exercises are complete', () => {
const navigableItems = [
lesson('lesson-1', 1, { isComplete: true }),
exercise('exercise-1', 2),
lesson('lesson-2', 3)
];
const accessById = computeProgressionAccess({
navigableItems,
progressionMode: 'sequential'
});
expect(accessById.get('exercise-1')).toEqual({ accessible: true, lockReason: null });
expect(accessById.get('lesson-2')).toEqual({
accessible: false,
lockReason: 'progression_blocked'
});
});
});
describe('annotateContentItem', () => {
it('applies computed access metadata to a content item', () => {
const item = lesson('lesson-1', 1);
const accessById = new Map([['lesson-1', { accessible: false, lockReason: 'progression_blocked' as const }]]);
const annotated = annotateContentItem(item, accessById);
expect(annotated.accessible).toBe(false);
expect(annotated.lockReason).toBe('progression_blocked');
});
});
+8
View File
@@ -0,0 +1,8 @@
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
environment: 'node',
include: ['tests/**/*.test.ts']
}
});
+151 -54
View File
@@ -624,7 +624,7 @@ importers:
version: 0.4.9([email protected](@astrojs/[email protected])(@emnapi/[email protected])(@emnapi/[email protected])(@types/[email protected])(@vercel/[email protected](@aws-sdk/[email protected])([email protected]([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))
'@shikijs/twoslash':
specifier: 4.3.1
version: 4.3.1(typescript@6.0.3)
version: 4.3.1(typescript@5.9.3)
'@tailwindcss/typography':
specifier: 0.5.19
version: 0.5.19([email protected])
@@ -636,7 +636,7 @@ importers:
version: 7.0.9(@astrojs/[email protected])(@emnapi/[email protected])(@emnapi/[email protected])(@types/[email protected])(@vercel/[email protected](@aws-sdk/[email protected])([email protected]([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])
blume:
specifier: 1.2.0
version: 1.2.0(864af55737aed5e342af6da019f32ece)
version: 1.2.0(4833f745f9fd8f626b4a7791f185a353)
mermaid:
specifier: ^11.16.0
version: 11.16.0
@@ -1351,7 +1351,7 @@ importers:
version: 10.1.10(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected]([email protected])([email protected])([email protected]))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))
'@storybook/sveltekit':
specifier: ^8.4.2
version: 8.6.15(@babel/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected]([email protected])([email protected](@types/[email protected])(typescript@6.0.3)))([email protected])([email protected])([email protected]([email protected])([email protected])([email protected]))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))
version: 8.6.15(@babel/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected]([email protected])([email protected](@types/[email protected])(typescript@5.9.3)))([email protected])([email protected])([email protected]([email protected])([email protected])([email protected]))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))
'@storybook/test':
specifier: ^8.4.2
version: 8.6.14([email protected]([email protected])([email protected])([email protected]))
@@ -1390,7 +1390,7 @@ importers:
version: 4.21.0
typescript-svelte-plugin:
specifier: ^0.3.50
version: 0.3.50([email protected])(typescript@6.0.3)
version: 0.3.50([email protected])(typescript@5.9.3)
vite:
specifier: ^7.1.4
version: 7.3.0(@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])
@@ -1620,6 +1620,9 @@ importers:
typescript:
specifier: ^5.5.2
version: 5.9.3
vitest:
specifier: ^1.2.2
version: 1.6.1(@types/[email protected])([email protected](@noble/[email protected]))([email protected])([email protected])
zod:
specifier: 4.2.1
version: 4.2.1
@@ -1754,24 +1757,28 @@ packages:
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@astrojs/[email protected]':
resolution: {integrity: sha512-xqE8BVbDoBueK/B47w30PtkVofUWJKGkwoMVE+EOMLf11rnoANxIAdA9FPqY+rng4oNI5ndHGsri1yPj2k8vZQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
libc: [musl]
'@astrojs/[email protected]':
resolution: {integrity: sha512-1y0StU1qiCuDFH3rmbRJXcxdfHxFPrES1Rd+RLffosvUR7I2cH5SF5SFnBN9vXpzpkmyElZm3Yr47iJBPN7vVA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
libc: [glibc]
'@astrojs/[email protected]':
resolution: {integrity: sha512-16q0fYf7kpbmdObZEeZJEup8hQv/whgNwVjrSvT8umrKwLDSnNIWiQpm09lQQu6bweZB0XyIvHwlPitvJhC+hg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
libc: [musl]
'@astrojs/[email protected]':
resolution: {integrity: sha512-cB456shIwDv/PrVT+2QG7LFndpHkVge5HjqADKZgGaAc9JHVktCtjSrcdkRQ+3tbkPazNKaTLRjXLIiz2NIx9g==}
@@ -2770,21 +2777,25 @@ packages:
resolution: {integrity: sha512-u51id17uJwNEMK9nBlICsq6U31c+XVqQueVBkwRIzZG+gMpS8TOJctt5h5Wz33Z8xnMdTd+adtACVz0yHgGuOA==}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@bruits/[email protected]':
resolution: {integrity: sha512-v39HxiwGC5Rqm01HksP6+5Y+xKLPlsuVFgIgpEAo+SiQ22c+mJVhS3u7Z6ePAKdhL5NJoK1xq70kLz3L13AhpQ==}
cpu: [arm64]
os: [linux]
libc: [musl]
'@bruits/[email protected]':
resolution: {integrity: sha512-F3uO8uFp3pAP5ZGXttwvh57GS7s0lL953tnNdyI2gRyP4kOOkp6pyGojNJzCjkDvWI2Cvb9iNrKok3aqQPauAw==}
cpu: [x64]
os: [linux]
libc: [glibc]
'@bruits/[email protected]':
resolution: {integrity: sha512-bicEqglLlz++mWyADaZoP0JY20s4vDfLjaPYgQqC+NI4zZLTOOg1T4GB8aqtc822Pqji8SQBmSrTb7CrP8i08Q==}
cpu: [x64]
os: [linux]
libc: [musl]
'@bruits/[email protected]':
resolution: {integrity: sha512-zauAuMwfPnKPUkd4AFixRFpXdgKwP2mKgxrIIo2gJzW0/ZneF9dbHnLkojSpaBnCCp7VUL1hIi5WWZvB1CqmAQ==}
@@ -3015,11 +3026,11 @@ packages:
'@esbuild-kit/[email protected]':
resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==}
deprecated: 'Merged into tsx: https://tsx.is'
deprecated: 'Merged into tsx: https://tsx.hirok.io'
'@esbuild-kit/[email protected]':
resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==}
deprecated: 'Merged into tsx: https://tsx.is'
deprecated: 'Merged into tsx: https://tsx.hirok.io'
'@esbuild/[email protected]':
resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==}
@@ -4440,155 +4451,183 @@ packages:
resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@img/[email protected]':
resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@img/[email protected]':
resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==}
cpu: [arm]
os: [linux]
libc: [glibc]
'@img/[email protected]':
resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==}
cpu: [arm]
os: [linux]
libc: [glibc]
'@img/[email protected]':
resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==}
cpu: [ppc64]
os: [linux]
libc: [glibc]
'@img/[email protected]':
resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==}
cpu: [riscv64]
os: [linux]
libc: [glibc]
'@img/[email protected]':
resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==}
cpu: [s390x]
os: [linux]
libc: [glibc]
'@img/[email protected]':
resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==}
cpu: [s390x]
os: [linux]
libc: [glibc]
'@img/[email protected]':
resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==}
cpu: [x64]
os: [linux]
libc: [glibc]
'@img/[email protected]':
resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==}
cpu: [x64]
os: [linux]
libc: [glibc]
'@img/[email protected]':
resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==}
cpu: [arm64]
os: [linux]
libc: [musl]
'@img/[email protected]':
resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==}
cpu: [arm64]
os: [linux]
libc: [musl]
'@img/[email protected]':
resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==}
cpu: [x64]
os: [linux]
libc: [musl]
'@img/[email protected]':
resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==}
cpu: [x64]
os: [linux]
libc: [musl]
'@img/[email protected]':
resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@img/[email protected]':
resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@img/[email protected]':
resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm]
os: [linux]
libc: [glibc]
'@img/[email protected]':
resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm]
os: [linux]
libc: [glibc]
'@img/[email protected]':
resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [ppc64]
os: [linux]
libc: [glibc]
'@img/[email protected]':
resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [riscv64]
os: [linux]
libc: [glibc]
'@img/[email protected]':
resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [s390x]
os: [linux]
libc: [glibc]
'@img/[email protected]':
resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [s390x]
os: [linux]
libc: [glibc]
'@img/[email protected]':
resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64]
os: [linux]
libc: [glibc]
'@img/[email protected]':
resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64]
os: [linux]
libc: [glibc]
'@img/[email protected]':
resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64]
os: [linux]
libc: [musl]
'@img/[email protected]':
resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64]
os: [linux]
libc: [musl]
'@img/[email protected]':
resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64]
os: [linux]
libc: [musl]
'@img/[email protected]':
resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64]
os: [linux]
libc: [musl]
'@img/[email protected]':
resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==}
@@ -5158,48 +5197,56 @@ packages:
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@oxc-parser/[email protected]':
resolution: {integrity: sha512-3R0iqjM3xYOZCnwgcxOQXH7hrz64/USDIuLbNTM1kZqQzRqaR4w7SwoWKU934zABo8d0op2oSwOp+CV3hZnM7A==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
libc: [musl]
'@oxc-parser/[email protected]':
resolution: {integrity: sha512-lAQf8PQxfgy7h0bmcfSVE3hg3qMueshPYULFsCrHM+8KefGZ9W+ZMvRyU33gLrB4w1O3Fz1orR0hmKMCRxXNrQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [ppc64]
os: [linux]
libc: [glibc]
'@oxc-parser/[email protected]':
resolution: {integrity: sha512-2QlvQBUhHuAE3ezD4X3CAEKMXdfgInggQ5Bj/7gb5NcYP3GyfLTj7c+mMu+BRwfC9B3AXBNyqHWbqEuuUvZyRQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [riscv64]
os: [linux]
libc: [glibc]
'@oxc-parser/[email protected]':
resolution: {integrity: sha512-v06iu0osHszgqJ1dLQRb6leWFU1sjG/UQk4MoVBtE6ZPewgfTkby6G9II1SpEAf2onnAuQceVYxQH9iuU3NJqw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [riscv64]
os: [linux]
libc: [musl]
'@oxc-parser/[email protected]':
resolution: {integrity: sha512-+5HhNHtxsdcd7+ljXFnn9FOoCNXJX3UPgIfIE6vdwS1HqdGNH6eAcVobuqGOp54l8pvcxDQA6F4cPswCgLrQfQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [s390x]
os: [linux]
libc: [glibc]
'@oxc-parser/[email protected]':
resolution: {integrity: sha512-jKwO7ZLNkjxwg7FoCLw+fJszooL9yXRZsDN0AQ1AQUTWq1l8GH/2e44k68N3fcP19jl8O8jGpqLAZcQTYk6skA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
libc: [glibc]
'@oxc-parser/[email protected]':
resolution: {integrity: sha512-TYqnuKV/p3eOc+N61E0961nA7DC+gaCeJ3+V2LcjJdTwFMdikqWL6uVk1jlrpUCBrozHDATVUKDZYH7r4FQYjQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
libc: [musl]
'@oxc-parser/[email protected]':
resolution: {integrity: sha512-ZhrVmWFifVEFQX4XPwLoVFDHw9tAWH9p9vHsHFH+5uCKdfVR+jje4WxVo6YrokWCboGckoOzHq5KKMOcPZfkRg==}
@@ -5300,36 +5347,42 @@ packages:
engines: {node: '>= 10.0.0'}
cpu: [arm]
os: [linux]
libc: [glibc]
'@parcel/[email protected]':
resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==}
engines: {node: '>= 10.0.0'}
cpu: [arm]
os: [linux]
libc: [musl]
'@parcel/[email protected]':
resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==}
engines: {node: '>= 10.0.0'}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@parcel/[email protected]':
resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==}
engines: {node: '>= 10.0.0'}
cpu: [arm64]
os: [linux]
libc: [musl]
'@parcel/[email protected]':
resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==}
engines: {node: '>= 10.0.0'}
cpu: [x64]
os: [linux]
libc: [glibc]
'@parcel/[email protected]':
resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==}
engines: {node: '>= 10.0.0'}
cpu: [x64]
os: [linux]
libc: [musl]
'@parcel/[email protected]':
resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==}
@@ -5705,36 +5758,42 @@ packages:
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@rolldown/[email protected]':
resolution: {integrity: sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
libc: [musl]
'@rolldown/[email protected]':
resolution: {integrity: sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [ppc64]
os: [linux]
libc: [glibc]
'@rolldown/[email protected]':
resolution: {integrity: sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [s390x]
os: [linux]
libc: [glibc]
'@rolldown/[email protected]':
resolution: {integrity: sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
libc: [glibc]
'@rolldown/[email protected]':
resolution: {integrity: sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
libc: [musl]
'@rolldown/[email protected]':
resolution: {integrity: sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw==}
@@ -5851,56 +5910,67 @@ packages:
resolution: {integrity: sha512-EHMUcDwhtdRGlXZsGSIuXSYwD5kOT9NVnx9sqzYiwAc91wfYOE1g1djOEDseZJKKqtHAHGwnGPQu3kytmfaXLQ==}
cpu: [arm]
os: [linux]
libc: [glibc]
'@rollup/[email protected]':
resolution: {integrity: sha512-+pBrqEjaakN2ySv5RVrj/qLytYhPKEUwk+e3SFU5jTLHIcAtqh2rLrd/OkbNuHJpsBgxsD8ccJt5ga/SeG0JmA==}
cpu: [arm]
os: [linux]
libc: [musl]
'@rollup/[email protected]':
resolution: {integrity: sha512-NSqc7rE9wuUaRBsBp5ckQ5CVz5aIRKCwsoa6WMF7G01sX3/qHUw/z4pv+D+ahL1EIKy6Enpcnz1RY8pf7bjwng==}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@rollup/[email protected]':
resolution: {integrity: sha512-gr5vDbg3Bakga5kbdpqx81m2n9IX8M6gIMlQQIXiLTNeQW6CucvuInJ91EuCJ/JYvc+rcLLsDFcfAD1K7fMofg==}
cpu: [arm64]
os: [linux]
libc: [musl]
'@rollup/[email protected]':
resolution: {integrity: sha512-gsrtB1NA3ZYj2vq0Rzkylo9ylCtW/PhpLEivlgWe0bpgtX5+9j9EZa0wtZiCjgu6zmSeZWyI/e2YRX1URozpIw==}
cpu: [loong64]
os: [linux]
libc: [glibc]
'@rollup/[email protected]':
resolution: {integrity: sha512-y3qNOfTBStmFNq+t4s7Tmc9hW2ENtPg8FeUD/VShI7rKxNW7O4fFeaYbMsd3tpFlIg1Q8IapFgy7Q9i2BqeBvA==}
cpu: [ppc64]
os: [linux]
libc: [glibc]
'@rollup/[email protected]':
resolution: {integrity: sha512-89sepv7h2lIVPsFma8iwmccN7Yjjtgz0Rj/Ou6fEqg3HDhpCa+Et+YSufy27i6b0Wav69Qv4WBNl3Rs6pwhebQ==}
cpu: [riscv64]
os: [linux]
libc: [glibc]
'@rollup/[email protected]':
resolution: {integrity: sha512-ZcU77ieh0M2Q8Ur7D5X7KvK+UxbXeDHwiOt/CPSBTI1fBmeDMivW0dPkdqkT4rOgDjrDDBUed9x4EgraIKoR2A==}
cpu: [riscv64]
os: [linux]
libc: [musl]
'@rollup/[email protected]':
resolution: {integrity: sha512-2AdWy5RdDF5+4YfG/YesGDDtbyJlC9LHmL6rZw6FurBJ5n4vFGupsOBGfwMRjBYH7qRQowT8D/U4LoSvVwOhSQ==}
cpu: [s390x]
os: [linux]
libc: [glibc]
'@rollup/[email protected]':
resolution: {integrity: sha512-WGt5J8Ij/rvyqpFexxk3ffKqqbLf9AqrTBbWDk7ApGUzaIs6V+s2s84kAxklFwmMF/vBNGrVdYgbblCOFFezMQ==}
cpu: [x64]
os: [linux]
libc: [glibc]
'@rollup/[email protected]':
resolution: {integrity: sha512-JzQmb38ATzHjxlPHuTH6tE7ojnMKM2kYNzt44LO/jJi8BpceEC8QuXYA908n8r3CNuG/B3BV8VR3Hi1rYtmPiw==}
cpu: [x64]
os: [linux]
libc: [musl]
'@rollup/[email protected]':
resolution: {integrity: sha512-huT3fd0iC7jigGh7n3q/+lfPcXxBi+om/Rs3yiFxjvSxbSB6aohDFXbWvlspaqjeOh+hx7DDHS+5Es5qRkWkZg==}
@@ -6980,72 +7050,84 @@ packages:
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@tailwindcss/[email protected]':
resolution: {integrity: sha512-CTrwomI+c7n6aSSQlsPL0roRiNMDQ/YzMD9EjcR+H4f0I1SQ8QqIuPnsVp7QgMkC1Qi8rtkekLkOFjo7OlEFRQ==}
engines: {node: '>= 20'}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@tailwindcss/[email protected]':
resolution: {integrity: sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw==}
engines: {node: '>= 20'}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@tailwindcss/[email protected]':
resolution: {integrity: sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
libc: [musl]
'@tailwindcss/[email protected]':
resolution: {integrity: sha512-WZA0CHRL/SP1TRbA5mp9htsppSEkWuQ4KsSUumYQnyl8ZdT39ntwqmz4IUHGN6p4XdSlYfJwM4rRzZLShHsGAQ==}
engines: {node: '>= 20'}
cpu: [arm64]
os: [linux]
libc: [musl]
'@tailwindcss/[email protected]':
resolution: {integrity: sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag==}
engines: {node: '>= 20'}
cpu: [arm64]
os: [linux]
libc: [musl]
'@tailwindcss/[email protected]':
resolution: {integrity: sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
libc: [glibc]
'@tailwindcss/[email protected]':
resolution: {integrity: sha512-qMFzxI2YlBOLW5PhblzuSWlWfwLHaneBE0xHzLrBgNtqN6mWfs+qYbhryGSXQjFYB1Dzf5w+LN5qbUTPhW7Y5g==}
engines: {node: '>= 20'}
cpu: [x64]
os: [linux]
libc: [glibc]
'@tailwindcss/[email protected]':
resolution: {integrity: sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg==}
engines: {node: '>= 20'}
cpu: [x64]
os: [linux]
libc: [glibc]
'@tailwindcss/[email protected]':
resolution: {integrity: sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
libc: [musl]
'@tailwindcss/[email protected]':
resolution: {integrity: sha512-5r1X2FKnCMUPlXTWRYpHdPYUY6a1Ar/t7P24OuiEdEOmms5lyqjDRvVY1yy9Rmioh+AunQ0rWiOTPE8F9A3v5g==}
engines: {node: '>= 20'}
cpu: [x64]
os: [linux]
libc: [musl]
'@tailwindcss/[email protected]':
resolution: {integrity: sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ==}
engines: {node: '>= 20'}
cpu: [x64]
os: [linux]
libc: [musl]
'@tailwindcss/[email protected]':
resolution: {integrity: sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==}
@@ -7169,24 +7251,28 @@ packages:
engines: {node: '>=18'}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@takumi-rs/[email protected]':
resolution: {integrity: sha512-CPpEe7UgBql01R1rSuOm/ukuUM6iPecCg0QGh+9xmBcq9VxzNS7FKgWqOVTQbPNc+V3HsJQ2kzPGm6LFeMf6Qw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [linux]
libc: [musl]
'@takumi-rs/[email protected]':
resolution: {integrity: sha512-narVoruMDK/3x83DiyhVHpggPVB8vYxBmDLtXqSzvZDaiifaXF8UGSJ8YUUrBAm2RSmj7zwfrGFQRZeh0hJoGA==}
engines: {node: '>=18'}
cpu: [x64]
os: [linux]
libc: [glibc]
'@takumi-rs/[email protected]':
resolution: {integrity: sha512-2Aqbyqh3gqkzH2B81XMsNsCdozN5+yuU9RJDCPOk9D5ON2GqCHcelpwfKDei8JM4Ei3Kfg20yKB+Uyj/SumjJg==}
engines: {node: '>=18'}
cpu: [x64]
os: [linux]
libc: [musl]
'@takumi-rs/[email protected]':
resolution: {integrity: sha512-JVFuihQs9X6N1mR78myrmuWBMnFrfhSU+x4Og1izxrexdDQ9JzzjsDHnPA0rFYgbtXEhDooh3Yr25AovqH0GOw==}
@@ -9313,6 +9399,7 @@ packages:
[email protected]:
resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==}
engines: {node: '>=12.0.0'}
deprecated: v4 is no longer maintained, upgrade to v5
[email protected]:
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
@@ -10588,7 +10675,7 @@ packages:
[email protected]:
resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==}
engines: {node: '>=10'}
deprecated: This package is no longer maintained. For the JavaScript API, please use @conventional-changelog/git-client instead.
deprecated: Deprecated and no longer maintained. Use @conventional-changelog/git-client instead.
hasBin: true
[email protected]:
@@ -10598,7 +10685,7 @@ packages:
[email protected]:
resolution: {integrity: sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==}
engines: {node: '>=10'}
deprecated: This package is no longer maintained. For the JavaScript API, please use @conventional-changelog/git-client instead.
deprecated: Deprecated and no longer maintained. Use @conventional-changelog/git-client instead.
hasBin: true
[email protected]:
@@ -11651,72 +11738,84 @@ packages:
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [linux]
libc: [glibc]
[email protected]:
resolution: {integrity: sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [linux]
libc: [glibc]
[email protected]:
resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [linux]
libc: [glibc]
[email protected]:
resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [linux]
libc: [musl]
[email protected]:
resolution: {integrity: sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [linux]
libc: [musl]
[email protected]:
resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [linux]
libc: [musl]
[email protected]:
resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [linux]
libc: [glibc]
[email protected]:
resolution: {integrity: sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [linux]
libc: [glibc]
[email protected]:
resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [linux]
libc: [glibc]
[email protected]:
resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [linux]
libc: [musl]
[email protected]:
resolution: {integrity: sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [linux]
libc: [musl]
[email protected]:
resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [linux]
libc: [musl]
[email protected]:
resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==}
@@ -16025,10 +16124,10 @@ snapshots:
is-docker: 4.0.0
package-manager-detector: 1.7.0
'@astrojs/[email protected](@aws-sdk/[email protected])(@sveltejs/[email protected](@opentelemetry/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected](@astrojs/[email protected])(@emnapi/[email protected])(@emnapi/[email protected])(@types/[email protected])(@vercel/[email protected](@aws-sdk/[email protected])([email protected]([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))([email protected])([email protected])([email protected])([email protected])([email protected](typescript@6.0.3))([email protected]([email protected])([email protected]))':
'@astrojs/[email protected](@aws-sdk/[email protected])(@sveltejs/[email protected](@opentelemetry/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected](@astrojs/[email protected])(@emnapi/[email protected])(@emnapi/[email protected])(@types/[email protected])(@vercel/[email protected](@aws-sdk/[email protected])([email protected]([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))([email protected])([email protected])([email protected])([email protected])([email protected](typescript@5.9.3))([email protected]([email protected])([email protected]))':
dependencies:
'@astrojs/internal-helpers': 0.10.1
'@vercel/analytics': 1.6.1(@sveltejs/[email protected](@opentelemetry/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected](typescript@6.0.3))
'@vercel/analytics': 1.6.1(@sveltejs/[email protected](@opentelemetry/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected](typescript@5.9.3))
'@vercel/functions': 3.7.5(@aws-sdk/[email protected])([email protected]([email protected])([email protected]))
'@vercel/nft': 1.10.2([email protected])([email protected])
'@vercel/routing-utils': 5.3.3
@@ -20578,6 +20677,15 @@ snapshots:
'@shikijs/core': 4.3.1
'@shikijs/types': 4.3.1
'@shikijs/[email protected]([email protected])':
dependencies:
'@shikijs/core': 4.3.1
'@shikijs/types': 4.3.1
twoslash: 0.3.9([email protected])
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
'@shikijs/[email protected]([email protected])':
dependencies:
'@shikijs/core': 4.3.1
@@ -21237,7 +21345,7 @@ snapshots:
- rollup
- webpack
'@storybook/[email protected](@babel/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected]([email protected])([email protected](@types/[email protected])(typescript@6.0.3)))([email protected])([email protected])([email protected]([email protected])([email protected])([email protected]))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))':
'@storybook/[email protected](@babel/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected]([email protected])([email protected](@types/[email protected])(typescript@5.9.3)))([email protected])([email protected])([email protected]([email protected])([email protected])([email protected]))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))':
dependencies:
'@storybook/builder-vite': 8.6.15([email protected]([email protected])([email protected])([email protected]))([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))
'@storybook/svelte': 8.6.15([email protected]([email protected])([email protected])([email protected]))([email protected])
@@ -21245,7 +21353,7 @@ snapshots:
magic-string: 0.30.21
storybook: 8.6.15([email protected])([email protected])([email protected])
svelte: 5.46.0
svelte-preprocess: 5.1.4(@babel/[email protected])([email protected]([email protected])([email protected](@types/[email protected])(typescript@6.0.3)))([email protected])([email protected])([email protected])([email protected])
svelte-preprocess: 5.1.4(@babel/[email protected])([email protected]([email protected])([email protected](@types/[email protected])(typescript@5.9.3)))([email protected])([email protected])([email protected])([email protected])
svelte2tsx: 0.7.46([email protected])([email protected])
sveltedoc-parser: 4.2.1
ts-dedent: 2.2.0
@@ -21286,12 +21394,12 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@storybook/[email protected](@babel/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected]([email protected])([email protected](@types/[email protected])(typescript@6.0.3)))([email protected])([email protected])([email protected]([email protected])([email protected])([email protected]))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))':
'@storybook/[email protected](@babel/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected]([email protected])([email protected](@types/[email protected])(typescript@5.9.3)))([email protected])([email protected])([email protected]([email protected])([email protected])([email protected]))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))':
dependencies:
'@storybook/addon-actions': 8.6.15([email protected]([email protected])([email protected])([email protected]))
'@storybook/builder-vite': 8.6.15([email protected]([email protected])([email protected])([email protected]))([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))
'@storybook/svelte': 8.6.15([email protected]([email protected])([email protected])([email protected]))([email protected])
'@storybook/svelte-vite': 8.6.15(@babel/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected]([email protected])([email protected](@types/[email protected])(typescript@6.0.3)))([email protected])([email protected])([email protected]([email protected])([email protected])([email protected]))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))
'@storybook/svelte-vite': 8.6.15(@babel/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected]([email protected])([email protected](@types/[email protected])(typescript@5.9.3)))([email protected])([email protected])([email protected]([email protected])([email protected])([email protected]))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))
storybook: 8.6.15([email protected])([email protected])([email protected])
svelte: 5.46.0
vite: 7.3.0(@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])
@@ -23148,6 +23256,13 @@ snapshots:
'@typescript-eslint/types': 8.50.1
eslint-visitor-keys: 4.2.1
'@typescript/[email protected]([email protected])':
dependencies:
debug: 4.4.3
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
'@typescript/[email protected]([email protected])':
dependencies:
debug: 4.4.3
@@ -23162,19 +23277,19 @@ snapshots:
d3-selection: 3.0.0
d3-transition: 3.0.1([email protected])
'@vercel/[email protected](@sveltejs/[email protected](@opentelemetry/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected](typescript@6.0.3))':
'@vercel/[email protected](@sveltejs/[email protected](@opentelemetry/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected](typescript@5.9.3))':
optionalDependencies:
'@sveltejs/kit': 2.49.2(@opentelemetry/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))
react: 19.2.3
svelte: 5.46.0
vue: 3.5.26(typescript@6.0.3)
vue: 3.5.26(typescript@5.9.3)
'@vercel/[email protected](@sveltejs/[email protected](@opentelemetry/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected](typescript@6.0.3))':
'@vercel/[email protected](@sveltejs/[email protected](@opentelemetry/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected](typescript@5.9.3))':
optionalDependencies:
'@sveltejs/kit': 2.49.2(@opentelemetry/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))
react: 19.2.3
svelte: 5.46.0
vue: 3.5.26(typescript@6.0.3)
vue: 3.5.26(typescript@5.9.3)
'@vercel/[email protected]':
dependencies:
@@ -23580,7 +23695,7 @@ snapshots:
[email protected]:
dependencies:
acorn: 8.15.0
acorn: 8.17.0
[email protected]: {}
@@ -24133,14 +24248,14 @@ snapshots:
[email protected]: {}
[email protected](864af55737aed5e342af6da019f32ece):
[email protected](4833f745f9fd8f626b4a7791f185a353):
dependencies:
'@astrojs/check': 0.9.9([email protected])([email protected])
'@astrojs/markdown-satteri': 0.3.4
'@astrojs/mdx': 7.0.3(@astrojs/[email protected])([email protected](@astrojs/[email protected])(@emnapi/[email protected])(@emnapi/[email protected])(@types/[email protected])(@vercel/[email protected](@aws-sdk/[email protected])([email protected]([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))
'@astrojs/node': 11.0.2([email protected](@astrojs/[email protected])(@emnapi/[email protected])(@emnapi/[email protected])(@types/[email protected])(@vercel/[email protected](@aws-sdk/[email protected])([email protected]([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))
'@astrojs/react': 6.0.1(@types/[email protected])(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected]([email protected]))([email protected])([email protected])([email protected])([email protected])
'@astrojs/vercel': 11.0.3(@aws-sdk/[email protected])(@sveltejs/[email protected](@opentelemetry/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected](@astrojs/[email protected])(@emnapi/[email protected])(@emnapi/[email protected])(@types/[email protected])(@vercel/[email protected](@aws-sdk/[email protected])([email protected]([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))([email protected])([email protected])([email protected])([email protected])([email protected](typescript@6.0.3))([email protected]([email protected])([email protected]))
'@astrojs/vercel': 11.0.3(@aws-sdk/[email protected])(@sveltejs/[email protected](@opentelemetry/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected](@astrojs/[email protected])(@emnapi/[email protected])(@emnapi/[email protected])(@types/[email protected])(@vercel/[email protected](@aws-sdk/[email protected])([email protected]([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))([email protected])([email protected])([email protected])([email protected])([email protected](typescript@5.9.3))([email protected]([email protected])([email protected]))
'@clack/prompts': 1.7.0
'@iconify-json/lucide': 1.2.117
'@iconify/types': 2.0.0
@@ -24155,7 +24270,7 @@ snapshots:
'@shikijs/twoslash': 4.3.1([email protected])
'@tailwindcss/typography': 0.5.20([email protected])
'@tailwindcss/vite': 4.1.18([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))
'@vercel/analytics': 2.0.1(@sveltejs/[email protected](@opentelemetry/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected](typescript@6.0.3))
'@vercel/analytics': 2.0.1(@sveltejs/[email protected](@opentelemetry/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected](typescript@5.9.3))
ai: 5.0.212([email protected])
astro: 7.0.9(@astrojs/[email protected])(@emnapi/[email protected])(@emnapi/[email protected])(@types/[email protected])(@vercel/[email protected](@aws-sdk/[email protected])([email protected]([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])
babel-plugin-react-compiler: 1.0.0
@@ -29222,13 +29337,13 @@ snapshots:
postcss: 8.5.6
ts-node: 10.9.2(@types/[email protected])([email protected])
[email protected]([email protected])([email protected](@types/[email protected])(typescript@6.0.3)):
[email protected]([email protected])([email protected](@types/[email protected])(typescript@5.9.3)):
dependencies:
lilconfig: 3.1.3
yaml: 2.8.2
optionalDependencies:
postcss: 8.5.19
ts-node: 10.9.2(@types/[email protected])(typescript@6.0.3)
ts-node: 10.9.2(@types/[email protected])(typescript@5.9.3)
optional: true
[email protected]([email protected])([email protected](@types/[email protected])([email protected])):
@@ -30706,7 +30821,7 @@ snapshots:
svelte: 5.46.0
tslib: 2.8.1
[email protected](@babel/[email protected])([email protected]([email protected])([email protected](@types/[email protected])(typescript@6.0.3)))([email protected])([email protected])([email protected])([email protected]):
[email protected](@babel/[email protected])([email protected]([email protected])([email protected](@types/[email protected])(typescript@5.9.3)))([email protected])([email protected])([email protected])([email protected]):
dependencies:
'@types/pug': 2.0.10
detect-indent: 6.1.0
@@ -30717,7 +30832,7 @@ snapshots:
optionalDependencies:
'@babel/core': 7.29.0
postcss: 8.5.19
postcss-load-config: 4.0.2([email protected])([email protected](@types/[email protected])(typescript@6.0.3))
postcss-load-config: 4.0.2([email protected])([email protected](@types/[email protected])(typescript@5.9.3))
sass: 1.97.1
typescript: 5.9.3
@@ -30793,13 +30908,6 @@ snapshots:
svelte: 5.46.0
typescript: 5.9.3
[email protected]([email protected])([email protected]):
dependencies:
dedent-js: 1.0.1
scule: 1.3.0
svelte: 5.46.0
typescript: 6.0.3
[email protected]:
dependencies:
'@jridgewell/remapping': 2.3.5
@@ -31165,25 +31273,6 @@ snapshots:
yn: 3.1.1
optional: true
[email protected](@types/[email protected])([email protected]):
dependencies:
'@cspotcode/source-map-support': 0.8.1
'@tsconfig/node10': 1.0.12
'@tsconfig/node12': 1.0.11
'@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.4
'@types/node': 24.10.4
acorn: 8.15.0
acorn-walk: 8.3.4
arg: 4.1.3
create-require: 1.1.1
diff: 4.0.2
make-error: 1.3.6
typescript: 6.0.3
v8-compile-cache-lib: 3.0.1
yn: 3.1.1
optional: true
[email protected]:
dependencies:
chokidar: 3.6.0
@@ -31236,6 +31325,14 @@ snapshots:
[email protected]: {}
[email protected]([email protected]):
dependencies:
'@typescript/vfs': 1.6.4([email protected])
twoslash-protocol: 0.3.9
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
[email protected]([email protected]):
dependencies:
'@typescript/vfs': 1.6.4([email protected])
@@ -31304,10 +31401,10 @@ snapshots:
transitivePeerDependencies:
- supports-color
[email protected]([email protected])(typescript@6.0.3):
[email protected]([email protected])(typescript@5.9.3):
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
svelte2tsx: 0.7.46([email protected])(typescript@6.0.3)
svelte2tsx: 0.7.46([email protected])(typescript@5.9.3)
transitivePeerDependencies:
- svelte
- typescript