From fe9bed95d1e657b186be8c9aece1ae240d50f5f1 Mon Sep 17 00:00:00 2001 From: Vitaly Budovski Date: Sun, 8 Dec 2024 14:55:10 +1100 Subject: [PATCH 1/6] fix: Capture errors from child schemas of union --- paseri-lib/src/schemas/schema.ts | 3 +-- paseri-lib/src/schemas/union.test.ts | 10 +++++++++- paseri-lib/src/schemas/union.ts | 18 +++++++++--------- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/paseri-lib/src/schemas/schema.ts b/paseri-lib/src/schemas/schema.ts index e38bcd1..8e5dfb7 100644 --- a/paseri-lib/src/schemas/schema.ts +++ b/paseri-lib/src/schemas/schema.ts @@ -123,8 +123,7 @@ class ChainSchema extends Schema { } } -// biome-ignore lint/suspicious/noExplicitAny: Required to accept any Schema variant. -type AnySchemaType = Schema; +type AnySchemaType = Schema; export { Schema, OptionalSchema }; export type { AnySchemaType }; diff --git a/paseri-lib/src/schemas/union.test.ts b/paseri-lib/src/schemas/union.test.ts index 9084d66..572805a 100644 --- a/paseri-lib/src/schemas/union.test.ts +++ b/paseri-lib/src/schemas/union.test.ts @@ -32,7 +32,15 @@ test('Invalid type', () => { (data) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'invalid_value' }); + expect(result.issue).toEqual({ + type: 'join', + left: { + type: 'join', + left: { type: 'nest', key: 0, child: { type: 'leaf', code: 'invalid_type' } }, + right: { type: 'nest', key: 1, child: { type: 'leaf', code: 'invalid_type' } }, + }, + right: { type: 'nest', key: 2, child: { type: 'leaf', code: 'invalid_value' } }, + }); } else { expect(result.ok).toBeFalsy(); } diff --git a/paseri-lib/src/schemas/union.ts b/paseri-lib/src/schemas/union.ts index d946a46..1c9ffdc 100644 --- a/paseri-lib/src/schemas/union.ts +++ b/paseri-lib/src/schemas/union.ts @@ -1,5 +1,6 @@ import type { TupleToUnion } from 'type-fest'; import type { Infer } from '../infer.ts'; +import { type TreeNode, addIssue } from '../issue.ts'; import { type InternalParseResult, isParseSuccess } from '../result.ts'; import { type AnySchemaType, Schema } from './schema.ts'; @@ -8,10 +9,6 @@ type ValidTupleType = [AnySchemaType, AnySchemaType, ...AnySchemaType[]]; class UnionSchema extends Schema>> { private readonly _elements: TupleType; - readonly issues = { - INVALID_VALUE: { type: 'leaf', code: 'invalid_value' }, - } as const; - constructor(...elements: TupleType) { super(); @@ -21,18 +18,21 @@ class UnionSchema extends Schema>> { + let issue: TreeNode | undefined = undefined; for (let i = 0; i < this._elements.length; i++) { const schema = this._elements[i]; - const result = schema._parse(value); - if (result === undefined) { + const issueOrSuccess = schema._parse(value); + if (issueOrSuccess === undefined) { return undefined; } - if (isParseSuccess>>(result)) { - return result; + if (isParseSuccess(issueOrSuccess)) { + return issueOrSuccess as InternalParseResult>>; } + + issue = addIssue(issue, { type: 'nest', key: i, child: issueOrSuccess }); } - return this.issues.INVALID_VALUE; + return issue; } } From 44d7089f1927bc2dd3444894120bd812e31c544c Mon Sep 17 00:00:00 2001 From: Vitaly Budovski Date: Sun, 8 Dec 2024 15:11:45 +1100 Subject: [PATCH 2/6] feature: Messages --- paseri-lib/src/issue.test.ts | 51 +++++++------ paseri-lib/src/issue.ts | 95 ++++++++++++++++++++++-- paseri-lib/src/locales/en.ts | 21 ++++++ paseri-lib/src/locales/index.ts | 2 + paseri-lib/src/locales/message.ts | 24 ++++++ paseri-lib/src/result.ts | 46 ++++++++++-- paseri-lib/src/schemas/array.test.ts | 36 ++++++--- paseri-lib/src/schemas/array.ts | 10 +-- paseri-lib/src/schemas/bigint.test.ts | 10 +-- paseri-lib/src/schemas/bigint.ts | 10 +-- paseri-lib/src/schemas/boolean.test.ts | 2 +- paseri-lib/src/schemas/boolean.ts | 5 +- paseri-lib/src/schemas/chain.test.ts | 8 +- paseri-lib/src/schemas/lazy.test.ts | 18 ++++- paseri-lib/src/schemas/literal.test.ts | 10 +-- paseri-lib/src/schemas/literal.ts | 11 ++- paseri-lib/src/schemas/map.test.ts | 52 +++---------- paseri-lib/src/schemas/map.ts | 10 +-- paseri-lib/src/schemas/never.test.ts | 2 +- paseri-lib/src/schemas/never.ts | 5 +- paseri-lib/src/schemas/null.test.ts | 2 +- paseri-lib/src/schemas/null.ts | 5 +- paseri-lib/src/schemas/number.test.ts | 16 ++-- paseri-lib/src/schemas/number.ts | 16 ++-- paseri-lib/src/schemas/object.test.ts | 76 ++++--------------- paseri-lib/src/schemas/object.ts | 10 +-- paseri-lib/src/schemas/parse.test.ts | 2 +- paseri-lib/src/schemas/record.test.ts | 14 ++-- paseri-lib/src/schemas/record.ts | 6 +- paseri-lib/src/schemas/schema.ts | 6 +- paseri-lib/src/schemas/set.test.ts | 22 +++--- paseri-lib/src/schemas/set.ts | 10 +-- paseri-lib/src/schemas/string.test.ts | 18 ++--- paseri-lib/src/schemas/string.ts | 18 ++--- paseri-lib/src/schemas/symbol.test.ts | 2 +- paseri-lib/src/schemas/symbol.ts | 5 +- paseri-lib/src/schemas/tuple.test.ts | 26 ++----- paseri-lib/src/schemas/tuple.ts | 10 +-- paseri-lib/src/schemas/undefined.test.ts | 2 +- paseri-lib/src/schemas/undefined.ts | 5 +- paseri-lib/src/schemas/union.test.ts | 14 ++-- paseri-lib/src/schemas/union.ts | 2 +- 42 files changed, 417 insertions(+), 298 deletions(-) create mode 100644 paseri-lib/src/locales/en.ts create mode 100644 paseri-lib/src/locales/index.ts create mode 100644 paseri-lib/src/locales/message.ts diff --git a/paseri-lib/src/issue.test.ts b/paseri-lib/src/issue.test.ts index e1df089..74c6a16 100644 --- a/paseri-lib/src/issue.test.ts +++ b/paseri-lib/src/issue.test.ts @@ -1,4 +1,5 @@ import { expect } from '@std/expect'; +import type { Tagged } from 'type-fest'; import { type Issue, type TreeNode, addIssue, issueList } from './issue.ts'; const { test } = Deno; @@ -6,7 +7,7 @@ const { test } = Deno; test('Leaf', () => { const issues = issueList({ type: 'leaf', - code: 'bad_leaf', + code: 'bad_leaf' as Tagged, }); expect(issues).toEqual([{ path: [], code: 'bad_leaf' }] satisfies Issue[]); }); @@ -14,8 +15,8 @@ test('Leaf', () => { test('Join leaves', () => { const issues = issueList({ type: 'join', - left: { type: 'leaf', code: 'bad_leaf1' }, - right: { type: 'leaf', code: 'bad_leaf2' }, + left: { type: 'leaf', code: 'bad_leaf1' as Tagged }, + right: { type: 'leaf', code: 'bad_leaf2' as Tagged }, }); expect(issues).toEqual([ @@ -28,7 +29,7 @@ test('Nest single level', () => { const issues = issueList({ type: 'nest', key: 'level1', - child: { type: 'leaf', code: 'bad_leaf' }, + child: { type: 'leaf', code: 'bad_leaf' as Tagged }, }); expect(issues).toEqual([{ path: ['level1'], code: 'bad_leaf' }] satisfies Issue[]); @@ -46,7 +47,7 @@ test('Nest multiple levels', () => { key: 'level3', child: { type: 'leaf', - code: 'bad_leaf', + code: 'bad_leaf' as Tagged, }, }, }, @@ -60,14 +61,14 @@ test('Join leaf left nested right', () => { type: 'join', left: { type: 'leaf', - code: 'bad_leaf', + code: 'bad_leaf' as Tagged, }, right: { type: 'nest', key: 'right', child: { type: 'leaf', - code: 'bad_leaf', + code: 'bad_leaf' as Tagged, }, }, }); @@ -86,12 +87,12 @@ test('Join nested left leaf right', () => { key: 'left', child: { type: 'leaf', - code: 'bad_leaf', + code: 'bad_leaf' as Tagged, }, }, right: { type: 'leaf', - code: 'bad_leaf', + code: 'bad_leaf' as Tagged, }, }); @@ -109,7 +110,7 @@ test('Join nested left nested right', () => { key: 'left', child: { type: 'leaf', - code: 'bad_leaf', + code: 'bad_leaf' as Tagged, }, }, right: { @@ -117,7 +118,7 @@ test('Join nested left nested right', () => { key: 'right', child: { type: 'leaf', - code: 'bad_leaf', + code: 'bad_leaf' as Tagged, }, }, }); @@ -130,19 +131,19 @@ test('Join nested left nested right', () => { test('Add leaf node to empty', () => { let tree: TreeNode | undefined = undefined; - tree = addIssue(tree, { type: 'leaf', code: 'bad_leaf' }); + tree = addIssue(tree, { type: 'leaf', code: 'bad_leaf' as Tagged }); - expect(tree).toEqual({ type: 'leaf', code: 'bad_leaf' } satisfies TreeNode); + expect(tree).toEqual({ type: 'leaf', code: 'bad_leaf' as Tagged } satisfies TreeNode); }); test('Add leaf node to existing leaf node', () => { - let tree: TreeNode = { type: 'leaf', code: 'bad_leaf1' }; - tree = addIssue(tree, { type: 'leaf', code: 'bad_leaf2' }); + let tree: TreeNode = { type: 'leaf', code: 'bad_leaf1' as Tagged }; + tree = addIssue(tree, { type: 'leaf', code: 'bad_leaf2' as Tagged }); expect(tree).toEqual({ type: 'join', - left: { type: 'leaf', code: 'bad_leaf1' }, - right: { type: 'leaf', code: 'bad_leaf2' }, + left: { type: 'leaf', code: 'bad_leaf1' as Tagged }, + right: { type: 'leaf', code: 'bad_leaf2' as Tagged }, } satisfies TreeNode); }); @@ -153,7 +154,7 @@ test('Add nest node to empty', () => { key: 'child', child: { type: 'leaf', - code: 'bad_leaf', + code: 'bad_leaf' as Tagged, }, }); @@ -162,25 +163,29 @@ test('Add nest node to empty', () => { key: 'child', child: { type: 'leaf', - code: 'bad_leaf', + code: 'bad_leaf' as Tagged, }, } satisfies TreeNode); }); test('Add nest node to leaf node', () => { - let tree: TreeNode = { type: 'leaf', code: 'bad_leaf' }; + let tree: TreeNode = { type: 'leaf', code: 'bad_leaf' as Tagged }; tree = addIssue(tree, { type: 'nest', key: 'child', child: { type: 'leaf', - code: 'bad_leaf', + code: 'bad_leaf' as Tagged, }, }); expect(tree).toEqual({ type: 'join', - left: { type: 'leaf', code: 'bad_leaf' }, - right: { type: 'nest', key: 'child', child: { type: 'leaf', code: 'bad_leaf' } }, + left: { type: 'leaf', code: 'bad_leaf' as Tagged }, + right: { + type: 'nest', + key: 'child', + child: { type: 'leaf', code: 'bad_leaf' as Tagged }, + }, } satisfies TreeNode); }); diff --git a/paseri-lib/src/issue.ts b/paseri-lib/src/issue.ts index ce18615..a3b3146 100644 --- a/paseri-lib/src/issue.ts +++ b/paseri-lib/src/issue.ts @@ -1,9 +1,56 @@ +import type { Tagged } from 'type-fest'; +import type { Translations } from './locales/index.ts'; +import { message } from './locales/message.ts'; + type Key = string | number; -interface LeafNode { - type: 'leaf'; - code: string; -} +const issueCodes = { + // Common. + INVALID_TYPE: 'invalid_type' as Tagged<'invalid_type', 'IssueCode'>, + // Array/Tuple/Map/Set/String. + TOO_SHORT: 'too_short' as Tagged<'too_short', 'IssueCode'>, + TOO_LONG: 'too_long' as Tagged<'too_long', 'IssueCode'>, + // String. + INVALID_EMAIL: 'invalid_email' as Tagged<'invalid_email', 'IssueCode'>, + INVALID_EMOJI: 'invalid_emoji' as Tagged<'invalid_emoji', 'IssueCode'>, + INVALID_UUID: 'invalid_uuid' as Tagged<'invalid_uuid', 'IssueCode'>, + INVALID_NANOID: 'invalid_nanoid' as Tagged<'invalid_nanoid', 'IssueCode'>, + // BigInt/Number. + TOO_SMALL: 'too_small' as Tagged<'too_small', 'IssueCode'>, + TOO_LARGE: 'too_large' as Tagged<'too_large', 'IssueCode'>, + // Number. + INVALID_INTEGER: 'invalid_integer' as Tagged<'invalid_integer', 'IssueCode'>, + INVALID_FINITE: 'invalid_finite' as Tagged<'invalid_finite', 'IssueCode'>, + INVALID_SAFE_INTEGER: 'invalid_safe_integer' as Tagged<'invalid_safe_integer', 'IssueCode'>, + // Literal/Null/Undefined/Union. + INVALID_VALUE: 'invalid_value' as Tagged<'invalid_value', 'IssueCode'>, + // Object. + UNRECOGNIZED_KEY: 'unrecognized_key' as Tagged<'unrecognized_key', 'IssueCode'>, + MISSING_VALUE: 'missing_value' as Tagged<'missing_value', 'IssueCode'>, +} as const; + +type IssueCode = (typeof issueCodes)[keyof typeof issueCodes]; +type CustomIssueCode = Tagged; + +type LeafNode = + | { + type: 'leaf'; + code: typeof issueCodes.INVALID_TYPE; + expected: string; + } + | { + type: 'leaf'; + code: typeof issueCodes.INVALID_VALUE; + expected: string; + } + | { + type: 'leaf'; + code: Exclude; + } + | { + type: 'leaf'; + code: CustomIssueCode; + }; interface JoinNode { type: 'join'; @@ -26,6 +73,42 @@ interface Issue { code: string; } +interface Message { + path: Key[]; + message: string; +} + +function messageList(node: TreeNode, locale: Translations): readonly Message[] { + const messages: Message[] = []; + + const stack: StackItem[] = []; + let current: StackItem | undefined = [node, []]; + while (current) { + const [currentNode, currentPath] = current; + + switch (currentNode.type) { + case 'leaf': { + const { code, type, ...placeholders } = currentNode; + + messages.push({ path: currentPath, message: message(locale, currentNode.code, placeholders) }); + break; + } + case 'join': { + stack.push([currentNode.right, currentPath], [currentNode.left, currentPath]); + break; + } + case 'nest': { + stack.push([currentNode.child, [...currentPath, currentNode.key]]); + break; + } + } + + current = stack.pop(); + } + + return messages; +} + function issueList(node: TreeNode): readonly Issue[] { const issues: Issue[] = []; @@ -63,5 +146,5 @@ function addIssue(node: TreeNode | undefined, newNode: TreeNode): TreeNode { return tree; } -export { issueList, addIssue }; -export type { TreeNode, LeafNode, JoinNode, Issue }; +export { issueList, addIssue, issueCodes, messageList }; +export type { TreeNode, LeafNode, JoinNode, Issue, IssueCode, CustomIssueCode, Message }; diff --git a/paseri-lib/src/locales/en.ts b/paseri-lib/src/locales/en.ts new file mode 100644 index 0000000..b06a287 --- /dev/null +++ b/paseri-lib/src/locales/en.ts @@ -0,0 +1,21 @@ +import type { Translations } from './index.ts'; + +const en = { + invalid_type: 'Invalid type. Expected {expected}.', + too_short: 'Too short.', + too_long: 'Too long.', + invalid_email: 'Invalid email.', + invalid_emoji: 'Invalid emoji.', + invalid_uuid: 'Invalid UUID.', + invalid_nanoid: 'Invalid Nano ID.', + too_small: 'Too small.', + too_large: 'Too large.', + invalid_integer: 'Number must be an integer.', + invalid_finite: 'Number must be finite.', + invalid_safe_integer: 'Number must be a safe integer.', + invalid_value: 'Invalid value. Expected {expected}.', + unrecognized_key: 'Unrecognised key.', + missing_value: 'Missing value.', +} satisfies Translations; + +export { en }; diff --git a/paseri-lib/src/locales/index.ts b/paseri-lib/src/locales/index.ts new file mode 100644 index 0000000..8e6d4ea --- /dev/null +++ b/paseri-lib/src/locales/index.ts @@ -0,0 +1,2 @@ +export type { Translations } from './message.ts'; +export { en } from './en.ts'; diff --git a/paseri-lib/src/locales/message.ts b/paseri-lib/src/locales/message.ts new file mode 100644 index 0000000..471387a --- /dev/null +++ b/paseri-lib/src/locales/message.ts @@ -0,0 +1,24 @@ +import type { Simplify, UnwrapTagged } from 'type-fest'; +import type { CustomIssueCode, IssueCode } from '../issue.ts'; + +type Translations = Simplify<{ [Key in UnwrapTagged]: string } & Record>; + +function message( + locale: Translations, + code: IssueCode | CustomIssueCode, + placeholders: Record, +): string { + let value = locale[code]; + if (value === undefined) { + throw new Error(`No message for code ${code}.`); + } + + for (const [placeholder, replacement] of Object.entries(placeholders)) { + value = value.replaceAll(`{${placeholder}}`, replacement); + } + + return value; +} + +export type { Translations }; +export { message }; diff --git a/paseri-lib/src/result.ts b/paseri-lib/src/result.ts index fa779b0..6354673 100644 --- a/paseri-lib/src/result.ts +++ b/paseri-lib/src/result.ts @@ -1,13 +1,47 @@ -import type { TreeNode } from './issue.ts'; +import { type CustomIssueCode, type Message, type TreeNode, messageList } from './issue.ts'; +import { type Translations, en } from './locales/index.ts'; interface ParseSuccessResult { readonly ok: true; readonly value: OutputType; } -interface ParseErrorResult { - readonly ok: false; - readonly issue: TreeNode; +class ParseErrorResult { + readonly ok = false; + private readonly _issue: TreeNode; + private _messageList: readonly Message[] | undefined; + + constructor(issue: TreeNode) { + this._issue = issue; + } + get issue(): TreeNode { + return this._issue; + } + messages(locale: Translations = en) { + if (this._messageList === undefined) { + this._messageList = messageList(this._issue, locale); + } + + return this._messageList; + } +} + +class PaseriError extends Error { + private readonly _issue: TreeNode; + private _messageList: readonly Message[] | undefined; + + constructor(issue: TreeNode) { + super('Failed to parse. See `e.messages()` for details.'); + + this._issue = issue; + } + messages(locale: Translations = en) { + if (this._messageList === undefined) { + this._messageList = messageList(this._issue, locale); + } + + return this._messageList; + } } type ParseResult = ParseSuccessResult | ParseErrorResult; @@ -17,7 +51,7 @@ function ok(value: OutputType): ParseSuccessResult { } function err(code: string): ParseErrorResult { - return { ok: false, issue: { type: 'leaf', code } }; + return new ParseErrorResult({ type: 'leaf', code: code as CustomIssueCode }); } // To avoid creating intermediate objects, we return `undefined` when the input value does not need to be sanitised. @@ -35,5 +69,5 @@ function isIssue(value: Record): value is TreeNode { return typeof value.type === 'string'; } -export { isIssue, isParseSuccess, ok, err }; +export { isIssue, isParseSuccess, ok, err, PaseriError, ParseErrorResult }; export type { InternalParseResult, ParseResult }; diff --git a/paseri-lib/src/schemas/array.test.ts b/paseri-lib/src/schemas/array.test.ts index 2f89c99..294fdf5 100644 --- a/paseri-lib/src/schemas/array.test.ts +++ b/paseri-lib/src/schemas/array.test.ts @@ -2,7 +2,7 @@ import { expect } from '@std/expect'; import { expectTypeOf } from 'expect-type'; import fc from 'fast-check'; import * as p from '../index.ts'; -import type { TreeNode } from '../issue.ts'; +import { type TreeNode, issueCodes } from '../issue.ts'; const { test } = Deno; @@ -31,7 +31,7 @@ test('Invalid type', () => { (data) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'invalid_type' }); + expect(result.messages()).toEqual([{ path: [], message: 'Invalid type. Expected array.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -63,7 +63,7 @@ test('Invalid min', () => { fc.property(fc.array(fc.float(), { maxLength: 2 }), (data) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'too_short' }); + expect(result.messages()).toEqual([{ path: [], message: 'Too short.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -94,7 +94,7 @@ test('Invalid max', () => { fc.property(fc.array(fc.float(), { minLength: 4 }), (data) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'too_long' }); + expect(result.messages()).toEqual([{ path: [], message: 'Too long.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -125,7 +125,7 @@ test('Invalid length (too long)', () => { fc.property(fc.array(fc.float(), { minLength: 4 }), (data) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'too_long' }); + expect(result.messages()).toEqual([{ path: [], message: 'Too long.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -140,7 +140,7 @@ test('Invalid length (too short)', () => { fc.property(fc.array(fc.float(), { maxLength: 2 }), (data) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'too_short' }); + expect(result.messages()).toEqual([{ path: [], message: 'Too short.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -154,12 +154,24 @@ test('Invalid elements', () => { const result = schema.safeParse(data); if (!result.ok) { - const expectedResult: TreeNode = { - type: 'join', - left: { type: 'nest', key: 1, child: { type: 'leaf', code: 'invalid_type' } }, - right: { type: 'nest', key: 3, child: { type: 'leaf', code: 'invalid_type' } }, - }; - expect(result.issue).toEqual(expectedResult); + expect(result.messages()).toEqual([ + { path: [1], message: 'Invalid type. Expected number.' }, + { path: [3], message: 'Invalid type. Expected number.' }, + ]); + } else { + expect(result.ok).toBeFalsy(); + } +}); + +test('Invalid nested elements', () => { + const schema = p.array(p.array(p.number())); + const data = [[1], [2, 'foo'], [3], 'bar']; + const result = schema.safeParse(data); + if (!result.ok) { + expect(result.messages()).toEqual([ + { path: [1, 1], message: 'Invalid type. Expected number.' }, + { path: [3], message: 'Invalid type. Expected array.' }, + ]); } else { expect(result.ok).toBeFalsy(); } diff --git a/paseri-lib/src/schemas/array.ts b/paseri-lib/src/schemas/array.ts index 22cf824..da23c0f 100644 --- a/paseri-lib/src/schemas/array.ts +++ b/paseri-lib/src/schemas/array.ts @@ -1,5 +1,5 @@ import type { Infer } from '../index.ts'; -import type { TreeNode } from '../issue.ts'; +import { type LeafNode, type TreeNode, issueCodes } from '../issue.ts'; import { addIssue } from '../issue.ts'; import { type InternalParseResult, isIssue } from '../result.ts'; import { type AnySchemaType, Schema } from './schema.ts'; @@ -9,10 +9,10 @@ class ArraySchema extends Schema = { + INVALID_TYPE: { type: 'leaf', code: issueCodes.INVALID_TYPE, expected: 'array' }, + TOO_LONG: { type: 'leaf', code: issueCodes.TOO_LONG }, + TOO_SHORT: { type: 'leaf', code: issueCodes.TOO_SHORT }, } as const; constructor(element: ElementSchemaType) { diff --git a/paseri-lib/src/schemas/bigint.test.ts b/paseri-lib/src/schemas/bigint.test.ts index 9c4385b..f7bbf9d 100644 --- a/paseri-lib/src/schemas/bigint.test.ts +++ b/paseri-lib/src/schemas/bigint.test.ts @@ -30,7 +30,7 @@ test('Invalid type', () => { (data) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'invalid_type' }); + expect(result.messages()).toEqual([{ path: [], message: 'Invalid type. Expected bigint.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -62,7 +62,7 @@ test('Invalid gte', () => { fc.property(fc.bigInt({ max: 9n }), (data) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'too_small' }); + expect(result.messages()).toEqual([{ path: [], message: 'Too small.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -93,7 +93,7 @@ test('Invalid gt', () => { fc.property(fc.bigInt({ max: 10n }), (data) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'too_small' }); + expect(result.messages()).toEqual([{ path: [], message: 'Too small.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -124,7 +124,7 @@ test('Invalid lte', () => { fc.property(fc.bigInt({ min: 11n }), (data) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'too_large' }); + expect(result.messages()).toEqual([{ path: [], message: 'Too large.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -155,7 +155,7 @@ test('Invalid lt', () => { fc.property(fc.bigInt({ min: 10n }), (data) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'too_large' }); + expect(result.messages()).toEqual([{ path: [], message: 'Too large.' }]); } else { expect(result.ok).toBeFalsy(); } diff --git a/paseri-lib/src/schemas/bigint.ts b/paseri-lib/src/schemas/bigint.ts index ce54f71..af1d438 100644 --- a/paseri-lib/src/schemas/bigint.ts +++ b/paseri-lib/src/schemas/bigint.ts @@ -1,4 +1,4 @@ -import type { TreeNode } from '../issue.ts'; +import { type LeafNode, type TreeNode, issueCodes } from '../issue.ts'; import type { InternalParseResult } from '../result.ts'; import { Schema } from './schema.ts'; @@ -7,10 +7,10 @@ type CheckFunction = (value: bigint) => TreeNode | undefined; class BigIntSchema extends Schema { private _checks: CheckFunction[] | undefined = undefined; - readonly issues = { - INVALID_TYPE: { type: 'leaf', code: 'invalid_type' }, - TOO_SMALL: { type: 'leaf', code: 'too_small' }, - TOO_LARGE: { type: 'leaf', code: 'too_large' }, + readonly issues: Record = { + INVALID_TYPE: { type: 'leaf', code: issueCodes.INVALID_TYPE, expected: 'bigint' }, + TOO_SMALL: { type: 'leaf', code: issueCodes.TOO_SMALL }, + TOO_LARGE: { type: 'leaf', code: issueCodes.TOO_LARGE }, } as const; protected _clone(): BigIntSchema { diff --git a/paseri-lib/src/schemas/boolean.test.ts b/paseri-lib/src/schemas/boolean.test.ts index ec66c28..5436896 100644 --- a/paseri-lib/src/schemas/boolean.test.ts +++ b/paseri-lib/src/schemas/boolean.test.ts @@ -30,7 +30,7 @@ test('Invalid type', () => { (data) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'invalid_type' }); + expect(result.messages()).toEqual([{ path: [], message: 'Invalid type. Expected boolean.' }]); } else { expect(result.ok).toBeFalsy(); } diff --git a/paseri-lib/src/schemas/boolean.ts b/paseri-lib/src/schemas/boolean.ts index 8833938..6de7075 100644 --- a/paseri-lib/src/schemas/boolean.ts +++ b/paseri-lib/src/schemas/boolean.ts @@ -1,9 +1,10 @@ +import { type LeafNode, issueCodes } from '../issue.ts'; import type { InternalParseResult } from '../result.ts'; import { Schema } from './schema.ts'; class BooleanSchema extends Schema { - readonly issues = { - INVALID_TYPE: { type: 'leaf', code: 'invalid_type' }, + readonly issues: Record = { + INVALID_TYPE: { type: 'leaf', code: issueCodes.INVALID_TYPE, expected: 'boolean' }, } as const; protected _clone(): BooleanSchema { diff --git a/paseri-lib/src/schemas/chain.test.ts b/paseri-lib/src/schemas/chain.test.ts index 4bbd940..ebc4484 100644 --- a/paseri-lib/src/schemas/chain.test.ts +++ b/paseri-lib/src/schemas/chain.test.ts @@ -2,6 +2,7 @@ import { expect } from '@std/expect'; import { expectTypeOf } from 'expect-type'; import fc from 'fast-check'; import * as p from '../index.ts'; +import { en } from '../locales/index.ts'; const { test } = Deno; @@ -24,7 +25,7 @@ test('Chain from schema fail', () => { (data) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'invalid_type' }); + expect(result.messages()).toEqual([{ path: [], message: 'Invalid type. Expected string.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -43,7 +44,7 @@ test('Chain to schema fail', () => { fc.property(fc.string(), (data) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'invalid_type' }); + expect(result.messages()).toEqual([{ path: [], message: 'Invalid type. Expected number.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -60,7 +61,8 @@ test('Chain transform fail', () => { fc.property(fc.string(), (data) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'foo' }); + const custom = { ...en, ...{ foo: 'Custom foo error.' } }; + expect(result.messages(custom)).toEqual([{ path: [], message: 'Custom foo error.' }]); } else { expect(result.ok).toBeFalsy(); } diff --git a/paseri-lib/src/schemas/lazy.test.ts b/paseri-lib/src/schemas/lazy.test.ts index ae81a48..e986fa7 100644 --- a/paseri-lib/src/schemas/lazy.test.ts +++ b/paseri-lib/src/schemas/lazy.test.ts @@ -2,6 +2,7 @@ import { expect } from '@std/expect'; import { expectTypeOf } from 'expect-type'; import fc from 'fast-check'; import * as p from '../index.ts'; +import type { Message } from '../issue.ts'; const { test } = Deno; @@ -41,8 +42,23 @@ test('Invalid type', () => { fc.assert( fc.property(tree, (data) => { const result = schema.safeParse(data); + + function makeExpectedMessages(d: unknown, path: number[] = []): Message[] { + if (Array.isArray(d)) { + return [ + { path, message: 'Invalid type. Expected string.' }, + ...d.flatMap((di, i) => makeExpectedMessages(di, [...path, i])), + ]; + } + + return [ + { path, message: 'Invalid type. Expected string.' }, + { path, message: 'Invalid type. Expected array.' }, + ]; + } + if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'invalid_value' }); + expect(result.messages()).toEqual(makeExpectedMessages(data)); } else { expect(result.ok).toBeFalsy(); } diff --git a/paseri-lib/src/schemas/literal.test.ts b/paseri-lib/src/schemas/literal.test.ts index 8c24674..39e025d 100644 --- a/paseri-lib/src/schemas/literal.test.ts +++ b/paseri-lib/src/schemas/literal.test.ts @@ -21,7 +21,7 @@ test('String', async (t) => { await t.step('Invalid', () => { const result = schema.safeParse('banana'); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'invalid_value' }); + expect(result.messages()).toEqual([{ path: [], message: 'Invalid value. Expected apple.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -44,7 +44,7 @@ test('Number', async (t) => { await t.step('Invalid', () => { const result = schema.safeParse(456); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'invalid_value' }); + expect(result.messages()).toEqual([{ path: [], message: 'Invalid value. Expected 123.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -67,7 +67,7 @@ test('BigInt', async (t) => { await t.step('Invalid', () => { const result = schema.safeParse(456n); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'invalid_value' }); + expect(result.messages()).toEqual([{ path: [], message: 'Invalid value. Expected 123n.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -90,7 +90,7 @@ test('Boolean', async (t) => { await t.step('Invalid', () => { const result = schema.safeParse(false); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'invalid_value' }); + expect(result.messages()).toEqual([{ path: [], message: 'Invalid value. Expected true.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -118,7 +118,7 @@ test('Symbol', async (t) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'invalid_value' }); + expect(result.messages()).toEqual([{ path: [], message: 'Invalid value. Expected Symbol(test).' }]); } else { expect(result.ok).toBeFalsy(); } diff --git a/paseri-lib/src/schemas/literal.ts b/paseri-lib/src/schemas/literal.ts index e04ae26..f82cbdf 100644 --- a/paseri-lib/src/schemas/literal.ts +++ b/paseri-lib/src/schemas/literal.ts @@ -1,4 +1,5 @@ import type { IsLiteral } from 'type-fest'; +import { type LeafNode, issueCodes } from '../issue.ts'; import type { InternalParseResult } from '../result.ts'; import { Schema } from './schema.ts'; @@ -7,14 +8,18 @@ type LiteralType = string | number | bigint | boolean | symbol; class LiteralSchema extends Schema { private readonly _value: OutputType; - readonly issues = { - INVALID_VALUE: { type: 'leaf', code: 'invalid_value' }, - } as const; + readonly issues: Record = {} as const; constructor(value: IsLiteral extends true ? OutputType : never) { super(); this._value = value; + + this.issues.INVALID_VALUE = { + type: 'leaf', + code: issueCodes.INVALID_VALUE, + expected: typeof value === 'bigint' ? `${value}n` : String(value), + }; } protected _clone(): LiteralSchema { return new LiteralSchema(this._value as IsLiteral extends true ? OutputType : never); diff --git a/paseri-lib/src/schemas/map.test.ts b/paseri-lib/src/schemas/map.test.ts index 91eed2f..e7a0679 100644 --- a/paseri-lib/src/schemas/map.test.ts +++ b/paseri-lib/src/schemas/map.test.ts @@ -2,7 +2,7 @@ import { expect } from '@std/expect'; import { expectTypeOf } from 'expect-type'; import fc from 'fast-check'; import * as p from '../index.ts'; -import type { TreeNode } from '../issue.ts'; +import { type TreeNode, issueCodes } from '../issue.ts'; const { test } = Deno; @@ -31,7 +31,7 @@ test('Invalid type', () => { fc.property(fc.anything(), (data) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'invalid_type' }); + expect(result.messages()).toEqual([{ path: [], message: 'Invalid type. Expected Map.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -71,7 +71,7 @@ test('Invalid min', () => { const result = schema.safeParse(dataAsMap); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'too_short' }); + expect(result.messages()).toEqual([{ path: [], message: 'Too short.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -112,7 +112,7 @@ test('Invalid max', () => { const result = schema.safeParse(dataAsMap); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'too_long' }); + expect(result.messages()).toEqual([{ path: [], message: 'Too long.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -155,7 +155,7 @@ test('Invalid size (too long)', () => { const result = schema.safeParse(dataAsMap); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'too_long' }); + expect(result.messages()).toEqual([{ path: [], message: 'Too long.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -175,7 +175,7 @@ test('Invalid size (too short)', () => { const result = schema.safeParse(dataAsMap); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'too_short' }); + expect(result.messages()).toEqual([{ path: [], message: 'Too short.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -198,40 +198,12 @@ test('Invalid elements', () => { const result = schema.safeParse(data); if (!result.ok) { - const expectedResult: TreeNode = { - type: 'join', - left: { - type: 'join', - left: { - type: 'nest', - key: 1, - child: { type: 'nest', key: 0, child: { type: 'leaf', code: 'invalid_type' } }, - }, - right: { - type: 'nest', - key: 3, - child: { type: 'nest', key: 1, child: { type: 'leaf', code: 'invalid_type' } }, - }, - }, - right: { - type: 'nest', - key: 5, - child: { - type: 'join', - left: { - type: 'nest', - key: 0, - child: { type: 'leaf', code: 'invalid_type' }, - }, - right: { - type: 'nest', - key: 1, - child: { type: 'leaf', code: 'invalid_type' }, - }, - }, - }, - }; - expect(result.issue).toEqual(expectedResult); + expect(result.messages()).toEqual([ + { path: [1, 0], message: 'Invalid type. Expected number.' }, + { path: [3, 1], message: 'Invalid type. Expected string.' }, + { path: [5, 0], message: 'Invalid type. Expected number.' }, + { path: [5, 1], message: 'Invalid type. Expected string.' }, + ]); } else { expect(result.ok).toBeFalsy(); } diff --git a/paseri-lib/src/schemas/map.ts b/paseri-lib/src/schemas/map.ts index 67e1422..d9b562e 100644 --- a/paseri-lib/src/schemas/map.ts +++ b/paseri-lib/src/schemas/map.ts @@ -1,5 +1,5 @@ import type { Infer } from '../infer.ts'; -import { type TreeNode, addIssue } from '../issue.ts'; +import { type LeafNode, type TreeNode, addIssue, issueCodes } from '../issue.ts'; import { type InternalParseResult, isIssue } from '../result.ts'; import type { AnySchemaType } from './schema.ts'; import { Schema } from './schema.ts'; @@ -12,10 +12,10 @@ class MapSchema< private _minSize = 0; private _maxSize = Number.POSITIVE_INFINITY; - readonly issues = { - INVALID_TYPE: { type: 'leaf', code: 'invalid_type' }, - TOO_LONG: { type: 'leaf', code: 'too_long' }, - TOO_SHORT: { type: 'leaf', code: 'too_short' }, + readonly issues: Record = { + INVALID_TYPE: { type: 'leaf', code: issueCodes.INVALID_TYPE, expected: 'Map' }, + TOO_LONG: { type: 'leaf', code: issueCodes.TOO_LONG }, + TOO_SHORT: { type: 'leaf', code: issueCodes.TOO_SHORT }, } as const; constructor(...element: [ElementKeySchemaType, ElementValueSchemaType]) { diff --git a/paseri-lib/src/schemas/never.test.ts b/paseri-lib/src/schemas/never.test.ts index 1ce2753..52d9df1 100644 --- a/paseri-lib/src/schemas/never.test.ts +++ b/paseri-lib/src/schemas/never.test.ts @@ -11,7 +11,7 @@ test('Everything fails', () => { fc.property(fc.anything(), (data) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'invalid_type' }); + expect(result.messages()).toEqual([{ path: [], message: 'Invalid type. Expected never.' }]); } else { expect(result.ok).toBeFalsy(); } diff --git a/paseri-lib/src/schemas/never.ts b/paseri-lib/src/schemas/never.ts index 488a2fd..7163d63 100644 --- a/paseri-lib/src/schemas/never.ts +++ b/paseri-lib/src/schemas/never.ts @@ -1,9 +1,10 @@ +import { type LeafNode, issueCodes } from '../issue.ts'; import type { InternalParseResult } from '../result.ts'; import { Schema } from './schema.ts'; class NeverSchema extends Schema { - readonly issues = { - INVALID_TYPE: { type: 'leaf', code: 'invalid_type' }, + readonly issues: Record = { + INVALID_TYPE: { type: 'leaf', code: issueCodes.INVALID_TYPE, expected: 'never' }, } as const; protected _clone(): NeverSchema { diff --git a/paseri-lib/src/schemas/null.test.ts b/paseri-lib/src/schemas/null.test.ts index 106e1c6..cef837f 100644 --- a/paseri-lib/src/schemas/null.test.ts +++ b/paseri-lib/src/schemas/null.test.ts @@ -25,7 +25,7 @@ test('Invalid value', () => { (data) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'invalid_value' }); + expect(result.messages()).toEqual([{ path: [], message: 'Invalid value. Expected null.' }]); } else { expect(result.ok).toBeFalsy(); } diff --git a/paseri-lib/src/schemas/null.ts b/paseri-lib/src/schemas/null.ts index 76d6e39..4f1d6ec 100644 --- a/paseri-lib/src/schemas/null.ts +++ b/paseri-lib/src/schemas/null.ts @@ -1,9 +1,10 @@ +import { type LeafNode, issueCodes } from '../issue.ts'; import type { InternalParseResult } from '../result.ts'; import { Schema } from './schema.ts'; class NullSchema extends Schema { - readonly issues = { - INVALID_VALUE: { type: 'leaf', code: 'invalid_value' }, + readonly issues: Record = { + INVALID_VALUE: { type: 'leaf', code: issueCodes.INVALID_VALUE, expected: 'null' }, } as const; protected _clone(): NullSchema { diff --git a/paseri-lib/src/schemas/number.test.ts b/paseri-lib/src/schemas/number.test.ts index b2f673d..b50e262 100644 --- a/paseri-lib/src/schemas/number.test.ts +++ b/paseri-lib/src/schemas/number.test.ts @@ -30,7 +30,7 @@ test('Invalid type', () => { (data) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'invalid_type' }); + expect(result.messages()).toEqual([{ path: [], message: 'Invalid type. Expected number.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -62,7 +62,7 @@ test('Invalid gte', () => { fc.property(fc.float({ noNaN: true, max: 10, maxExcluded: true }), (data) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'too_small' }); + expect(result.messages()).toEqual([{ path: [], message: 'Too small.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -93,7 +93,7 @@ test('Invalid gt', () => { fc.property(fc.float({ noNaN: true, max: 10 }), (data) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'too_small' }); + expect(result.messages()).toEqual([{ path: [], message: 'Too small.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -124,7 +124,7 @@ test('Invalid lte', () => { fc.property(fc.float({ noNaN: true, min: 10, minExcluded: true }), (data) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'too_large' }); + expect(result.messages()).toEqual([{ path: [], message: 'Too large.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -155,7 +155,7 @@ test('Invalid lt', () => { fc.property(fc.float({ noNaN: true, min: 10 }), (data) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'too_large' }); + expect(result.messages()).toEqual([{ path: [], message: 'Too large.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -186,7 +186,7 @@ test('Invalid int', () => { fc.property(fc.float({ noInteger: true }), (data) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'invalid_integer' }); + expect(result.messages()).toEqual([{ path: [], message: 'Number must be an integer.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -223,7 +223,7 @@ test('Invalid finite', () => { (data) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'invalid_finite' }); + expect(result.messages()).toEqual([{ path: [], message: 'Number must be finite.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -257,7 +257,7 @@ test('Invalid safe', () => { (data) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'invalid_safe_integer' }); + expect(result.messages()).toEqual([{ path: [], message: 'Number must be a safe integer.' }]); } else { expect(result.ok).toBeFalsy(); } diff --git a/paseri-lib/src/schemas/number.ts b/paseri-lib/src/schemas/number.ts index 2306cf8..877f5a7 100644 --- a/paseri-lib/src/schemas/number.ts +++ b/paseri-lib/src/schemas/number.ts @@ -1,4 +1,4 @@ -import type { TreeNode } from '../issue.ts'; +import { type LeafNode, type TreeNode, issueCodes } from '../issue.ts'; import type { InternalParseResult } from '../result.ts'; import { Schema } from './schema.ts'; @@ -7,13 +7,13 @@ type CheckFunction = (value: number) => TreeNode | undefined; class NumberSchema extends Schema { private _checks: CheckFunction[] | undefined = undefined; - readonly issues = { - INVALID_TYPE: { type: 'leaf', code: 'invalid_type' }, - TOO_SMALL: { type: 'leaf', code: 'too_small' }, - TOO_LARGE: { type: 'leaf', code: 'too_large' }, - INVALID_INTEGER: { type: 'leaf', code: 'invalid_integer' }, - INVALID_FINITE: { type: 'leaf', code: 'invalid_finite' }, - INVALID_SAFE_INTEGER: { type: 'leaf', code: 'invalid_safe_integer' }, + readonly issues: Record = { + INVALID_TYPE: { type: 'leaf', code: issueCodes.INVALID_TYPE, expected: 'number' }, + TOO_SMALL: { type: 'leaf', code: issueCodes.TOO_SMALL }, + TOO_LARGE: { type: 'leaf', code: issueCodes.TOO_LARGE }, + INVALID_INTEGER: { type: 'leaf', code: issueCodes.INVALID_INTEGER }, + INVALID_FINITE: { type: 'leaf', code: issueCodes.INVALID_FINITE }, + INVALID_SAFE_INTEGER: { type: 'leaf', code: issueCodes.INVALID_SAFE_INTEGER }, } as const; protected _clone(): NumberSchema { diff --git a/paseri-lib/src/schemas/object.test.ts b/paseri-lib/src/schemas/object.test.ts index 85c1b78..79df8c6 100644 --- a/paseri-lib/src/schemas/object.test.ts +++ b/paseri-lib/src/schemas/object.test.ts @@ -2,7 +2,7 @@ import { expect } from '@std/expect'; import { expectTypeOf } from 'expect-type'; import fc from 'fast-check'; import * as p from '../index.ts'; -import type { TreeNode } from '../issue.ts'; +import { type TreeNode, issueCodes } from '../issue.ts'; const { test } = Deno; @@ -31,7 +31,7 @@ test('Invalid type', () => { (data) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'invalid_type' }); + expect(result.messages()).toEqual([{ path: [], message: 'Invalid type. Expected object.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -91,16 +91,10 @@ test('Strict', () => { (data) => { const result = schema.safeParse(data); if (!result.ok) { - const expectedResult: TreeNode = { - type: 'join', - left: { - type: 'nest', - key: 'bar', - child: { type: 'nest', key: 'extra2', child: { type: 'leaf', code: 'unrecognized_key' } }, - }, - right: { type: 'nest', key: 'extra1', child: { type: 'leaf', code: 'unrecognized_key' } }, - }; - expect(result.issue).toEqual(expectedResult); + expect(result.messages()).toEqual([ + { path: ['bar', 'extra2'], message: 'Unrecognised key.' }, + { path: ['extra1'], message: 'Unrecognised key.' }, + ]); } else { expect(result.ok).toBeFalsy(); } @@ -151,12 +145,10 @@ test('Missing keys', () => { const result = schema.safeParse(data); if (!result.ok) { - const expectedResult: TreeNode = { - type: 'join', - left: { type: 'nest', key: 'child1', child: { type: 'leaf', code: 'missing_value' } }, - right: { type: 'nest', key: 'child3', child: { type: 'leaf', code: 'missing_value' } }, - }; - expect(result.issue).toEqual(expectedResult); + expect(result.messages()).toEqual([ + { path: ['child1'], message: 'Missing value.' }, + { path: ['child3'], message: 'Missing value.' }, + ]); } else { expect(result.ok).toBeFalsy(); } @@ -177,39 +169,11 @@ test('Deep missing keys', () => { const result = schema.safeParse(data); if (!result.ok) { - const expectedResult: TreeNode = { - type: 'join', - left: { - type: 'join', - left: { - type: 'nest', - key: 'object1', - child: { type: 'nest', key: 'number1', child: { type: 'leaf', code: 'missing_value' } }, - }, - right: { - type: 'nest', - key: 'object2', - child: { - type: 'nest', - key: 'object3', - child: { - type: 'nest', - key: 'number2', - child: { - type: 'leaf', - code: 'missing_value', - }, - }, - }, - }, - }, - right: { - type: 'nest', - key: 'string1', - child: { type: 'leaf', code: 'missing_value' }, - }, - }; - expect(result.issue).toEqual(expectedResult); + expect(result.messages()).toEqual([ + { path: ['object1', 'number1'], message: 'Missing value.' }, + { path: ['object2', 'object3', 'number2'], message: 'Missing value.' }, + { path: ['string1'], message: 'Missing value.' }, + ]); } else { expect(result.ok).toBeFalsy(); } @@ -221,15 +185,7 @@ test('Optional key is not flagged as missing', () => { const result = schema.safeParse(data); if (!result.ok) { - const expectedResult: TreeNode = { - type: 'nest', - key: 'required', - child: { - type: 'leaf', - code: 'missing_value', - }, - }; - expect(result.issue).toEqual(expectedResult); + expect(result.messages()).toEqual([{ path: ['required'], message: 'Missing value.' }]); } else { expect(result.ok).toBeFalsy(); } diff --git a/paseri-lib/src/schemas/object.ts b/paseri-lib/src/schemas/object.ts index d430578..c63ef47 100644 --- a/paseri-lib/src/schemas/object.ts +++ b/paseri-lib/src/schemas/object.ts @@ -1,6 +1,6 @@ import type { NonEmptyObject } from 'type-fest'; import type { Infer } from '../infer.ts'; -import type { TreeNode } from '../issue.ts'; +import { type LeafNode, type TreeNode, issueCodes } from '../issue.ts'; import { addIssue } from '../issue.ts'; import { type InternalParseResult, isParseSuccess } from '../result.ts'; import { isPlainObject } from '../utils.ts'; @@ -16,10 +16,10 @@ class ObjectSchema> extends Schema>; private _mode: Mode = 'strict'; - readonly issues = { - INVALID_TYPE: { type: 'leaf', code: 'invalid_type' }, - UNRECOGNIZED_KEY: { type: 'leaf', code: 'unrecognized_key' }, - MISSING_VALUE: { type: 'leaf', code: 'missing_value' }, + readonly issues: Record = { + INVALID_TYPE: { type: 'leaf', code: issueCodes.INVALID_TYPE, expected: 'object' }, + UNRECOGNIZED_KEY: { type: 'leaf', code: issueCodes.UNRECOGNIZED_KEY }, + MISSING_VALUE: { type: 'leaf', code: issueCodes.MISSING_VALUE }, } as const; constructor(shape: ShapeType) { diff --git a/paseri-lib/src/schemas/parse.test.ts b/paseri-lib/src/schemas/parse.test.ts index 7cade58..f70f31b 100644 --- a/paseri-lib/src/schemas/parse.test.ts +++ b/paseri-lib/src/schemas/parse.test.ts @@ -13,5 +13,5 @@ test('Failure', () => { const schema = p.string(); expect(() => { schema.parse(123); - }).toThrow('Failed to parse {"type":"leaf","code":"invalid_type"}.'); + }).toThrow('Failed to parse. See `e.messages()` for details.'); }); diff --git a/paseri-lib/src/schemas/record.test.ts b/paseri-lib/src/schemas/record.test.ts index 1766bc6..f25370e 100644 --- a/paseri-lib/src/schemas/record.test.ts +++ b/paseri-lib/src/schemas/record.test.ts @@ -2,7 +2,7 @@ import { expect } from '@std/expect'; import { expectTypeOf } from 'expect-type'; import fc from 'fast-check'; import * as p from '../index.ts'; -import type { TreeNode } from '../issue.ts'; +import { type TreeNode, issueCodes } from '../issue.ts'; const { test } = Deno; @@ -31,7 +31,7 @@ test('Invalid type', () => { (data) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'invalid_type' }); + expect(result.messages()).toEqual([{ path: [], message: 'Invalid type. Expected Record.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -46,12 +46,10 @@ test('Invalid elements', () => { const result = schema.safeParse(data); if (!result.ok) { - const expectedResult: TreeNode = { - type: 'join', - left: { type: 'nest', key: 'bad1', child: { type: 'leaf', code: 'invalid_type' } }, - right: { type: 'nest', key: 'bad2', child: { type: 'leaf', code: 'invalid_type' } }, - }; - expect(result.issue).toEqual(expectedResult); + expect(result.messages()).toEqual([ + { path: ['bad1'], message: 'Invalid type. Expected number.' }, + { path: ['bad2'], message: 'Invalid type. Expected number.' }, + ]); } else { expect(result.ok).toBeFalsy(); } diff --git a/paseri-lib/src/schemas/record.ts b/paseri-lib/src/schemas/record.ts index c5839f7..7ad4a0b 100644 --- a/paseri-lib/src/schemas/record.ts +++ b/paseri-lib/src/schemas/record.ts @@ -1,5 +1,5 @@ import type { Infer } from '../infer.ts'; -import { type TreeNode, addIssue } from '../issue.ts'; +import { type LeafNode, type TreeNode, addIssue, issueCodes } from '../issue.ts'; import { type InternalParseResult, isIssue } from '../result.ts'; import { isPlainObject } from '../utils.ts'; import { type AnySchemaType, Schema } from './schema.ts'; @@ -7,8 +7,8 @@ import { type AnySchemaType, Schema } from './schema.ts'; class RecordSchema extends Schema>> { private readonly _element: ElementSchemaType; - readonly issues = { - INVALID_TYPE: { type: 'leaf', code: 'invalid_type' }, + readonly issues: Record = { + INVALID_TYPE: { type: 'leaf', code: issueCodes.INVALID_TYPE, expected: 'Record' }, } as const; constructor(element: ElementSchemaType) { diff --git a/paseri-lib/src/schemas/schema.ts b/paseri-lib/src/schemas/schema.ts index 8e5dfb7..6aea5a6 100644 --- a/paseri-lib/src/schemas/schema.ts +++ b/paseri-lib/src/schemas/schema.ts @@ -1,4 +1,4 @@ -import { isParseSuccess } from '../result.ts'; +import { ParseErrorResult, PaseriError, isParseSuccess } from '../result.ts'; import type { InternalParseResult, ParseResult } from '../result.ts'; abstract class Schema { @@ -10,7 +10,7 @@ abstract class Schema { return result.value; } - throw new Error(`Failed to parse ${JSON.stringify(result.issue)}.`); + throw new PaseriError(result.issue); } safeParse(value: unknown): ParseResult { const issueOrSuccess = this._parse(value); @@ -23,7 +23,7 @@ abstract class Schema { return issueOrSuccess; } - return { ok: false, issue: issueOrSuccess }; + return new ParseErrorResult(issueOrSuccess); } optional(): OptionalSchema { return new OptionalSchema(this); diff --git a/paseri-lib/src/schemas/set.test.ts b/paseri-lib/src/schemas/set.test.ts index 2c19471..4d346b8 100644 --- a/paseri-lib/src/schemas/set.test.ts +++ b/paseri-lib/src/schemas/set.test.ts @@ -2,7 +2,7 @@ import { expect } from '@std/expect'; import { expectTypeOf } from 'expect-type'; import fc from 'fast-check'; import * as p from '../index.ts'; -import type { TreeNode } from '../issue.ts'; +import { type TreeNode, issueCodes } from '../issue.ts'; const { test } = Deno; @@ -31,7 +31,7 @@ test('Invalid type', () => { fc.property(fc.anything(), (data) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'invalid_type' }); + expect(result.messages()).toEqual([{ path: [], message: 'Invalid type. Expected Set.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -71,7 +71,7 @@ test('Invalid min', () => { const result = schema.safeParse(dataAsSet); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'too_short' }); + expect(result.messages()).toEqual([{ path: [], message: 'Too short.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -112,7 +112,7 @@ test('Invalid max', () => { const result = schema.safeParse(dataAsSet); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'too_long' }); + expect(result.messages()).toEqual([{ path: [], message: 'Too long.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -153,7 +153,7 @@ test('Invalid size (too long)', () => { const result = schema.safeParse(dataAsSet); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'too_long' }); + expect(result.messages()).toEqual([{ path: [], message: 'Too long.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -173,7 +173,7 @@ test('Invalid size (too short)', () => { const result = schema.safeParse(dataAsSet); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'too_short' }); + expect(result.messages()).toEqual([{ path: [], message: 'Too short.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -188,12 +188,10 @@ test('Invalid elements', () => { const result = schema.safeParse(data); if (!result.ok) { - const expectedResult: TreeNode = { - type: 'join', - left: { type: 'nest', key: 1, child: { type: 'leaf', code: 'invalid_type' } }, - right: { type: 'nest', key: 3, child: { type: 'leaf', code: 'invalid_type' } }, - }; - expect(result.issue).toEqual(expectedResult); + expect(result.messages()).toEqual([ + { path: [1], message: 'Invalid type. Expected number.' }, + { path: [3], message: 'Invalid type. Expected number.' }, + ]); } else { expect(result.ok).toBeFalsy(); } diff --git a/paseri-lib/src/schemas/set.ts b/paseri-lib/src/schemas/set.ts index 735fa33..da91ceb 100644 --- a/paseri-lib/src/schemas/set.ts +++ b/paseri-lib/src/schemas/set.ts @@ -1,5 +1,5 @@ import type { Infer } from '../infer.ts'; -import { type TreeNode, addIssue } from '../issue.ts'; +import { type LeafNode, type TreeNode, addIssue, issueCodes } from '../issue.ts'; import { type InternalParseResult, isIssue } from '../result.ts'; import type { AnySchemaType } from './schema.ts'; import { Schema } from './schema.ts'; @@ -9,10 +9,10 @@ class SetSchema extends Schema = { + INVALID_TYPE: { type: 'leaf', code: issueCodes.INVALID_TYPE, expected: 'Set' }, + TOO_LONG: { type: 'leaf', code: issueCodes.TOO_LONG }, + TOO_SHORT: { type: 'leaf', code: issueCodes.TOO_SHORT }, } as const; constructor(element: ElementSchemaType) { diff --git a/paseri-lib/src/schemas/string.test.ts b/paseri-lib/src/schemas/string.test.ts index 84935f4..085c6b5 100644 --- a/paseri-lib/src/schemas/string.test.ts +++ b/paseri-lib/src/schemas/string.test.ts @@ -31,7 +31,7 @@ test('Invalid type', () => { (data) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'invalid_type' }); + expect(result.messages()).toEqual([{ path: [], message: 'Invalid type. Expected string.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -63,7 +63,7 @@ test('Invalid min', () => { fc.property(fc.string({ maxLength: 2 }), (data) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'too_short' }); + expect(result.messages()).toEqual([{ path: [], message: 'Too short.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -94,7 +94,7 @@ test('Invalid max', () => { fc.property(fc.string({ minLength: 4 }), (data) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'too_long' }); + expect(result.messages()).toEqual([{ path: [], message: 'Too long.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -125,7 +125,7 @@ test('Invalid length (too long)', () => { fc.property(fc.string({ minLength: 4 }), (data) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'too_long' }); + expect(result.messages()).toEqual([{ path: [], message: 'Too long.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -140,7 +140,7 @@ test('Invalid length (too short)', () => { fc.property(fc.string({ maxLength: 2 }), (data) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'too_short' }); + expect(result.messages()).toEqual([{ path: [], message: 'Too short.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -165,7 +165,7 @@ test('Email', async (t) => { await t.step('Invalid', () => { const result = schema.safeParse('not_an_email'); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'invalid_email' }); + expect(result.messages()).toEqual([{ path: [], message: 'Invalid email.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -189,7 +189,7 @@ test('Emoji', async (t) => { await t.step('Invalid', () => { const result = schema.safeParse('a'); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'invalid_emoji' }); + expect(result.messages()).toEqual([{ path: [], message: 'Invalid emoji.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -220,7 +220,7 @@ test('Invalid uuid', () => { fc.property(fc.string(), (data) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'invalid_uuid' }); + expect(result.messages()).toEqual([{ path: [], message: 'Invalid UUID.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -254,7 +254,7 @@ test('Invalid Nano ID', () => { fc.property(fc.string(), (data) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'invalid_nanoid' }); + expect(result.messages()).toEqual([{ path: [], message: 'Invalid Nano ID.' }]); } else { expect(result.ok).toBeFalsy(); } diff --git a/paseri-lib/src/schemas/string.ts b/paseri-lib/src/schemas/string.ts index 5821a1b..158bcae 100644 --- a/paseri-lib/src/schemas/string.ts +++ b/paseri-lib/src/schemas/string.ts @@ -1,4 +1,4 @@ -import type { TreeNode } from '../issue.ts'; +import { type LeafNode, type TreeNode, issueCodes } from '../issue.ts'; import type { InternalParseResult } from '../result.ts'; import { Schema } from './schema.ts'; @@ -12,14 +12,14 @@ type CheckFunction = (value: string) => TreeNode | undefined; class StringSchema extends Schema { private _checks: CheckFunction[] | undefined = undefined; - readonly issues = { - INVALID_TYPE: { type: 'leaf', code: 'invalid_type' }, - TOO_SHORT: { type: 'leaf', code: 'too_short' }, - TOO_LONG: { type: 'leaf', code: 'too_long' }, - INVALID_EMAIL: { type: 'leaf', code: 'invalid_email' }, - INVALID_EMOJI: { type: 'leaf', code: 'invalid_emoji' }, - INVALID_UUID: { type: 'leaf', code: 'invalid_uuid' }, - INVALID_NANOID: { type: 'leaf', code: 'invalid_nanoid' }, + readonly issues: Record = { + INVALID_TYPE: { type: 'leaf', code: issueCodes.INVALID_TYPE, expected: 'string' }, + TOO_SHORT: { type: 'leaf', code: issueCodes.TOO_SHORT }, + TOO_LONG: { type: 'leaf', code: issueCodes.TOO_LONG }, + INVALID_EMAIL: { type: 'leaf', code: issueCodes.INVALID_EMAIL }, + INVALID_EMOJI: { type: 'leaf', code: issueCodes.INVALID_EMOJI }, + INVALID_UUID: { type: 'leaf', code: issueCodes.INVALID_UUID }, + INVALID_NANOID: { type: 'leaf', code: issueCodes.INVALID_NANOID }, } as const; protected _clone(): StringSchema { diff --git a/paseri-lib/src/schemas/symbol.test.ts b/paseri-lib/src/schemas/symbol.test.ts index 6c0bafe..1043701 100644 --- a/paseri-lib/src/schemas/symbol.test.ts +++ b/paseri-lib/src/schemas/symbol.test.ts @@ -24,7 +24,7 @@ test('Type', async (t) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'invalid_type' }); + expect(result.messages()).toEqual([{ path: [], message: 'Invalid type. Expected Symbol.' }]); } else { expect(result.ok).toBeFalsy(); } diff --git a/paseri-lib/src/schemas/symbol.ts b/paseri-lib/src/schemas/symbol.ts index d0badea..17dede5 100644 --- a/paseri-lib/src/schemas/symbol.ts +++ b/paseri-lib/src/schemas/symbol.ts @@ -1,9 +1,10 @@ +import { type LeafNode, issueCodes } from '../issue.ts'; import type { InternalParseResult } from '../result.ts'; import { Schema } from './schema.ts'; class SymbolSchema extends Schema { - readonly issues = { - INVALID_TYPE: { type: 'leaf', code: 'invalid_type' }, + readonly issues: Record = { + INVALID_TYPE: { type: 'leaf', code: issueCodes.INVALID_TYPE, expected: 'Symbol' }, } as const; protected _clone(): SymbolSchema { diff --git a/paseri-lib/src/schemas/tuple.test.ts b/paseri-lib/src/schemas/tuple.test.ts index 7e7c296..f778c24 100644 --- a/paseri-lib/src/schemas/tuple.test.ts +++ b/paseri-lib/src/schemas/tuple.test.ts @@ -2,7 +2,7 @@ import { expect } from '@std/expect'; import { expectTypeOf } from 'expect-type'; import fc from 'fast-check'; import * as p from '../index.ts'; -import type { TreeNode } from '../issue.ts'; +import { type TreeNode, issueCodes } from '../issue.ts'; const { test } = Deno; @@ -31,7 +31,7 @@ test('Invalid type', () => { (data) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'invalid_type' }); + expect(result.messages()).toEqual([{ path: [], message: 'Invalid type. Expected array.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -46,11 +46,7 @@ test('Too long', () => { const result = schema.safeParse(data); if (!result.ok) { - const expectedResult: TreeNode = { - type: 'leaf', - code: 'too_long', - }; - expect(result.issue).toEqual(expectedResult); + expect(result.messages()).toEqual([{ path: [], message: 'Too long.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -62,11 +58,7 @@ test('Too short', () => { const result = schema.safeParse(data); if (!result.ok) { - const expectedResult: TreeNode = { - type: 'leaf', - code: 'too_short', - }; - expect(result.issue).toEqual(expectedResult); + expect(result.messages()).toEqual([{ path: [], message: 'Too short.' }]); } else { expect(result.ok).toBeFalsy(); } @@ -78,12 +70,10 @@ test('Invalid elements', () => { const result = schema.safeParse(data); if (!result.ok) { - const expectedResult: TreeNode = { - type: 'join', - left: { type: 'nest', key: 1, child: { type: 'leaf', code: 'invalid_type' } }, - right: { type: 'nest', key: 3, child: { type: 'leaf', code: 'invalid_type' } }, - }; - expect(result.issue).toEqual(expectedResult); + expect(result.messages()).toEqual([ + { path: [1], message: 'Invalid type. Expected string.' }, + { path: [3], message: 'Invalid type. Expected number.' }, + ]); } else { expect(result.ok).toBeFalsy(); } diff --git a/paseri-lib/src/schemas/tuple.ts b/paseri-lib/src/schemas/tuple.ts index e64fed2..5b1d47c 100644 --- a/paseri-lib/src/schemas/tuple.ts +++ b/paseri-lib/src/schemas/tuple.ts @@ -1,5 +1,5 @@ import type { Infer } from '../infer.ts'; -import { type TreeNode, addIssue } from '../issue.ts'; +import { type LeafNode, type TreeNode, addIssue, issueCodes } from '../issue.ts'; import { type InternalParseResult, isIssue } from '../result.ts'; import { type AnySchemaType, Schema } from './schema.ts'; @@ -9,10 +9,10 @@ class TupleSchema extends Schema = { + INVALID_TYPE: { type: 'leaf', code: issueCodes.INVALID_TYPE, expected: 'array' }, + TOO_LONG: { type: 'leaf', code: issueCodes.TOO_LONG }, + TOO_SHORT: { type: 'leaf', code: issueCodes.TOO_SHORT }, } as const; constructor(...schemas: TupleSchemaType) { diff --git a/paseri-lib/src/schemas/undefined.test.ts b/paseri-lib/src/schemas/undefined.test.ts index 0def079..538d16d 100644 --- a/paseri-lib/src/schemas/undefined.test.ts +++ b/paseri-lib/src/schemas/undefined.test.ts @@ -25,7 +25,7 @@ test('Invalid value', () => { (data) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ type: 'leaf', code: 'invalid_value' }); + expect(result.messages()).toEqual([{ path: [], message: 'Invalid value. Expected undefined.' }]); } else { expect(result.ok).toBeFalsy(); } diff --git a/paseri-lib/src/schemas/undefined.ts b/paseri-lib/src/schemas/undefined.ts index ec948db..3b4b727 100644 --- a/paseri-lib/src/schemas/undefined.ts +++ b/paseri-lib/src/schemas/undefined.ts @@ -1,9 +1,10 @@ +import { type LeafNode, issueCodes } from '../issue.ts'; import type { InternalParseResult } from '../result.ts'; import { Schema } from './schema.ts'; class UndefinedSchema extends Schema { - readonly issues = { - INVALID_VALUE: { type: 'leaf', code: 'invalid_value' }, + readonly issues: Record = { + INVALID_VALUE: { type: 'leaf', code: issueCodes.INVALID_VALUE, expected: 'undefined' }, } as const; protected _clone(): UndefinedSchema { diff --git a/paseri-lib/src/schemas/union.test.ts b/paseri-lib/src/schemas/union.test.ts index 572805a..dd7027f 100644 --- a/paseri-lib/src/schemas/union.test.ts +++ b/paseri-lib/src/schemas/union.test.ts @@ -32,15 +32,11 @@ test('Invalid type', () => { (data) => { const result = schema.safeParse(data); if (!result.ok) { - expect(result.issue).toEqual({ - type: 'join', - left: { - type: 'join', - left: { type: 'nest', key: 0, child: { type: 'leaf', code: 'invalid_type' } }, - right: { type: 'nest', key: 1, child: { type: 'leaf', code: 'invalid_type' } }, - }, - right: { type: 'nest', key: 2, child: { type: 'leaf', code: 'invalid_value' } }, - }); + expect(result.messages()).toEqual([ + { path: [], message: 'Invalid type. Expected string.' }, + { path: [], message: 'Invalid type. Expected number.' }, + { path: [], message: 'Invalid value. Expected 123n.' }, + ]); } else { expect(result.ok).toBeFalsy(); } diff --git a/paseri-lib/src/schemas/union.ts b/paseri-lib/src/schemas/union.ts index 1c9ffdc..3cdeb28 100644 --- a/paseri-lib/src/schemas/union.ts +++ b/paseri-lib/src/schemas/union.ts @@ -29,7 +29,7 @@ class UnionSchema extends Schema>>; } - issue = addIssue(issue, { type: 'nest', key: i, child: issueOrSuccess }); + issue = addIssue(issue, issueOrSuccess); } return issue; From 9579c275ed4a68ba4584f6fdf4f5f0cd2be4ee4e Mon Sep 17 00:00:00 2001 From: Vitaly Budovski Date: Sun, 15 Dec 2024 14:58:12 +1100 Subject: [PATCH 3/6] feature: Upgrade docs dependencies --- paseri-docs/package.json | 10 +- paseri-docs/pnpm-lock.yaml | 2999 ++++++++++++++++-------------------- 2 files changed, 1318 insertions(+), 1691 deletions(-) diff --git a/paseri-docs/package.json b/paseri-docs/package.json index 7ce683b..397f589 100644 --- a/paseri-docs/package.json +++ b/paseri-docs/package.json @@ -11,12 +11,12 @@ "astro": "astro" }, "devDependencies": { - "@astrojs/check": "^0.8.1", - "@astrojs/starlight": "^0.25.1", - "astro": "^4.10.2", + "@astrojs/check": "^0.9.4", + "@astrojs/starlight": "^0.30.1", + "astro": "^5.0.5", "rehype-external-links": "^3.0.0", - "sharp": "^0.32.5", - "typescript": "^5.5.3" + "sharp": "^0.33.5", + "typescript": "^5.7.2" }, "packageManager": "pnpm@9.6.0+sha256.dae0f7e822c56b20979bb5965e3b73b8bdabb6b8b8ef121da6d857508599ca35" } diff --git a/paseri-docs/pnpm-lock.yaml b/paseri-docs/pnpm-lock.yaml index 3caaf68..d73a187 100644 --- a/paseri-docs/pnpm-lock.yaml +++ b/paseri-docs/pnpm-lock.yaml @@ -9,44 +9,40 @@ importers: .: devDependencies: '@astrojs/check': - specifier: ^0.8.1 - version: 0.8.1(typescript@5.5.3) + specifier: ^0.9.4 + version: 0.9.4(typescript@5.7.2) '@astrojs/starlight': - specifier: ^0.25.1 - version: 0.25.1(astro@4.11.5(typescript@5.5.3)) + specifier: ^0.30.1 + version: 0.30.1(astro@5.0.5(rollup@4.28.1)(typescript@5.7.2)(yaml@2.6.1)) astro: - specifier: ^4.10.2 - version: 4.11.5(typescript@5.5.3) + specifier: ^5.0.5 + version: 5.0.5(rollup@4.28.1)(typescript@5.7.2)(yaml@2.6.1) rehype-external-links: specifier: ^3.0.0 version: 3.0.0 sharp: - specifier: ^0.32.5 - version: 0.32.6 + specifier: ^0.33.5 + version: 0.33.5 typescript: - specifier: ^5.5.3 - version: 5.5.3 + specifier: ^5.7.2 + version: 5.7.2 packages: - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - - '@astrojs/check@0.8.1': - resolution: {integrity: sha512-QTzCuiBWll3SLSe7OsWtWyZRbwChXwxM4Y0Jb84jdPOdYobzHad9ubU7V23qmK3Y0BNwgzCbEP5C5FPVitb31Q==} + '@astrojs/check@0.9.4': + resolution: {integrity: sha512-IOheHwCtpUfvogHHsvu0AbeRZEnjJg3MopdLddkJE70mULItS/Vh37BHcI00mcOJcH1vhD3odbpvWokpxam7xA==} hasBin: true peerDependencies: typescript: ^5.0.0 - '@astrojs/compiler@2.8.2': - resolution: {integrity: sha512-2v2N2oDnMH6+CX1Wn6f45Afa4tdkUMutdx8pJaokfaOYnAU+u6+UK7o7sXqydKro1cLwVmmOIJv6AqiXnAdLDA==} + '@astrojs/compiler@2.10.3': + resolution: {integrity: sha512-bL/O7YBxsFt55YHU021oL+xz+B/9HvGNId3F9xURN16aeqDK9juHGktdkCSXz+U4nqFACq6ZFvWomOzhV+zfPw==} - '@astrojs/internal-helpers@0.4.1': - resolution: {integrity: sha512-bMf9jFihO8YP940uD70SI/RDzIhUHJAolWVcO1v5PUivxGKvfLZTLTVVxEYzGYyPsA3ivdLNqMnL5VgmQySa+g==} + '@astrojs/internal-helpers@0.4.2': + resolution: {integrity: sha512-EdDWkC3JJVcpGpqJAU/5hSk2LKXyG3mNGkzGoAuyK+xoPHbaVdSuIWoN1QTnmK3N/gGfaaAfM8gO2KDCAW7S3w==} - '@astrojs/language-server@2.11.1': - resolution: {integrity: sha512-WSIBBUK9lSeVD4KhPiZk2u3wsXdj7WEYvYPPs8ZsgbSVIOzUJWAKVcITHiXmcXlzZB5ubK44YUN/Hq+f2GeMyQ==} + '@astrojs/language-server@2.15.4': + resolution: {integrity: sha512-JivzASqTPR2bao9BWsSc/woPHH7OGSGc9aMxXL4U6egVTqBycB3ZHdBJPuOCVtcGLrzdWTosAqVPz1BVoxE0+A==} hasBin: true peerDependencies: prettier: ^3.0.0 @@ -57,136 +53,53 @@ packages: prettier-plugin-astro: optional: true - '@astrojs/markdown-remark@5.1.1': - resolution: {integrity: sha512-rkWWjR9jVo0LAMxQ2+T19RKbQUa7NwBGhFj03bAz3hGf3blqeBIXs1NSPpizshO5kZzcOqKe8OlG6XpYO8esHg==} + '@astrojs/markdown-remark@6.0.1': + resolution: {integrity: sha512-CTSYijj25NfxgZi15TU3CwPwgyD1/7yA3FcdcNmB9p94nydupiUbrIiq3IqeTp2m5kCVzxbPZeC7fTwEOaNyGw==} - '@astrojs/mdx@3.1.2': - resolution: {integrity: sha512-0EizCWhUi0wdYPm31kNOHsOrGmn8pEJy+YEGQlHWt4Flg2NYfV7nWZuYG8KxoRSK/W397vPhyHYrITCYo7JMYw==} - engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0} + '@astrojs/mdx@4.0.2': + resolution: {integrity: sha512-uBoXNSSAUqhf2dVtJWFbSapwNkcnCzbISW98EcybFXvNgYt9g8yPJ7+lYnf+sH5pv0c/JEW8HlBvPSi81AVRlw==} + engines: {node: ^18.17.1 || ^20.3.0 || >=22.0.0} peerDependencies: - astro: ^4.8.0 + astro: ^5.0.0 - '@astrojs/prism@3.1.0': - resolution: {integrity: sha512-Z9IYjuXSArkAUx3N6xj6+Bnvx8OdUSHA8YoOgyepp3+zJmtVYJIl/I18GozdJVW1p5u/CNpl3Km7/gwTJK85cw==} - engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0} + '@astrojs/prism@3.2.0': + resolution: {integrity: sha512-GilTHKGCW6HMq7y3BUv9Ac7GMe/MO9gi9GW62GzKtth0SwukCu/qp2wLiGpEujhY+VVhaG9v7kv/5vFzvf4NYw==} + engines: {node: ^18.17.1 || ^20.3.0 || >=22.0.0} '@astrojs/sitemap@3.1.6': resolution: {integrity: sha512-1Qp2NvAzVImqA6y+LubKi1DVhve/hXXgFvB0szxiipzh7BvtuKe4oJJ9dXSqaubaTkt4nMa6dv6RCCAYeB6xaQ==} - '@astrojs/starlight@0.25.1': - resolution: {integrity: sha512-tniE870QpwDs7stJk/qb1LwE78761Fi77qF/UsWedDU90gC6gPjGOHNrbQYUABAmkQ63t3/Jpq9/kmS6sfHT0g==} - peerDependencies: - astro: ^4.8.6 - - '@astrojs/telemetry@3.1.0': - resolution: {integrity: sha512-/ca/+D8MIKEC8/A9cSaPUqQNZm+Es/ZinRv0ZAzvu2ios7POQSsVD+VOj7/hypWNsNM3T7RpfgNq7H2TU1KEHA==} - engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0} - - '@babel/code-frame@7.24.7': - resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.24.8': - resolution: {integrity: sha512-c4IM7OTg6k1Q+AJ153e2mc2QVTezTwnb4VzquwcyiEzGnW0Kedv4do/TrkU98qPeC5LNiMt/QXwIjzYXLBpyZg==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.24.8': - resolution: {integrity: sha512-6AWcmZC/MZCO0yKys4uhg5NlxL0ESF3K6IAaoQ+xSXvPyPyxNWRafP+GDbI88Oh68O7QkJgmEtedWPM9U0pZNg==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.24.8': - resolution: {integrity: sha512-47DG+6F5SzOi0uEvK4wMShmn5yY0mVjVJoWTphdY2B4Rx9wHgjK7Yhtr0ru6nE+sn0v38mzrWOlah0p/YlHHOQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-annotate-as-pure@7.24.7': - resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.24.8': - resolution: {integrity: sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-environment-visitor@7.24.7': - resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-function-name@7.24.7': - resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-hoist-variables@7.24.7': - resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.24.7': - resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.24.8': - resolution: {integrity: sha512-m4vWKVqvkVAWLXfHCCfff2luJj86U+J0/x+0N3ArG/tP0Fq7zky2dYwMbtPmkc/oulkkbjdL3uWzuoBwQ8R00Q==} - engines: {node: '>=6.9.0'} + '@astrojs/starlight@0.30.1': + resolution: {integrity: sha512-NHElruXD71rfPp0A1VPrpVv93VqhyLqJ7+fPc+PHluLsBsh3/Y9H0GPApjpJtxOOFvDNy0gNYvV2ZLjhc22WOg==} peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-plugin-utils@7.24.8': - resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-simple-access@7.24.7': - resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} - engines: {node: '>=6.9.0'} + astro: ^5.0.0 - '@babel/helper-split-export-declaration@7.24.7': - resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.24.8': - resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} - engines: {node: '>=6.9.0'} + '@astrojs/telemetry@3.2.0': + resolution: {integrity: sha512-wxhSKRfKugLwLlr4OFfcqovk+LIFtKwLyGPqMsv+9/ibqqnW3Gv7tBhtKEb0gAyUAC4G9BTVQeQahqnQAhd6IQ==} + engines: {node: ^18.17.1 || ^20.3.0 || >=22.0.0} - '@babel/helper-validator-identifier@7.24.7': - resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-option@7.24.8': - resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} - engines: {node: '>=6.9.0'} + '@astrojs/yaml2ts@0.2.2': + resolution: {integrity: sha512-GOfvSr5Nqy2z5XiwqTouBBpy5FyI6DEe+/g/Mk5am9SjILN1S5fOEvYK0GuWHg98yS/dobP4m8qyqw/URW35fQ==} - '@babel/helpers@7.24.8': - resolution: {integrity: sha512-gV2265Nkcz7weJJfvDoAEVzC1e2OTDpkGbEsebse8koXUJUXPsCMi7sRo/+SPMuMZ9MtUPnGwITTnQnU5YjyaQ==} + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} - '@babel/highlight@7.24.7': - resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} - '@babel/parser@7.24.8': - resolution: {integrity: sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==} + '@babel/parser@7.26.3': + resolution: {integrity: sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-syntax-jsx@7.24.7': - resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-jsx@7.24.7': - resolution: {integrity: sha512-+Dj06GDZEFRYvclU6k4bme55GKBEWUmByM/eoKuqg4zTNQHiApWRhQph5fxQB2wAEFvRzL1tOEj1RJ19wJrhoA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/template@7.24.7': - resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} + '@babel/runtime@7.26.0': + resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.24.8': - resolution: {integrity: sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.24.8': - resolution: {integrity: sha512-SkSBEHwwJRU52QEVZBmMBnE5Ux2/6WU1grdYyOhpbCNxbmJrDuDCphBzKZSO3taf0zztp+qkWlymE5tVL5l0TA==} + '@babel/types@7.26.3': + resolution: {integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==} engines: {node: '>=6.9.0'} '@ctrl/tinycolor@4.1.0': @@ -214,8 +127,8 @@ packages: '@emmetio/stream-reader@2.2.0': resolution: {integrity: sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw==} - '@emnapi/runtime@1.2.0': - resolution: {integrity: sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==} + '@emnapi/runtime@1.3.1': + resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} '@esbuild/aix-ppc64@0.21.5': resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} @@ -223,283 +136,404 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.24.0': + resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/android-arm64@0.21.5': resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} engines: {node: '>=12'} cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.24.0': + resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm@0.21.5': resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} engines: {node: '>=12'} cpu: [arm] os: [android] + '@esbuild/android-arm@0.24.0': + resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-x64@0.21.5': resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} engines: {node: '>=12'} cpu: [x64] os: [android] + '@esbuild/android-x64@0.24.0': + resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/darwin-arm64@0.21.5': resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.24.0': + resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-x64@0.21.5': resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} engines: {node: '>=12'} cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.24.0': + resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/freebsd-arm64@0.21.5': resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.24.0': + resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-x64@0.21.5': resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.24.0': + resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/linux-arm64@0.21.5': resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} engines: {node: '>=12'} cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.24.0': + resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm@0.21.5': resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} engines: {node: '>=12'} cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.24.0': + resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-ia32@0.21.5': resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} engines: {node: '>=12'} cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.24.0': + resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-loong64@0.21.5': resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.24.0': + resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-mips64el@0.21.5': resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.24.0': + resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-ppc64@0.21.5': resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.24.0': + resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-riscv64@0.21.5': resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.24.0': + resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-s390x@0.21.5': resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} engines: {node: '>=12'} cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.24.0': + resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-x64@0.21.5': resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} engines: {node: '>=12'} cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.24.0': + resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/netbsd-x64@0.21.5': resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.24.0': + resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.24.0': + resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-x64@0.21.5': resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.24.0': + resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/sunos-x64@0.21.5': resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} engines: {node: '>=12'} cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.24.0': + resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/win32-arm64@0.21.5': resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} engines: {node: '>=12'} cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.24.0': + resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-ia32@0.21.5': resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} engines: {node: '>=12'} cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.24.0': + resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-x64@0.21.5': resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} engines: {node: '>=12'} cpu: [x64] os: [win32] - '@expressive-code/core@0.35.3': - resolution: {integrity: sha512-SYamcarAjufYhbuK/kfvJSvAXLsfnM7DKc78R7Dq4B73R5bKQK2m5zR0l57tXr4yp2C5Z8lu5xZncdwWxcmPdg==} + '@esbuild/win32-x64@0.24.0': + resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@expressive-code/core@0.38.3': + resolution: {integrity: sha512-s0/OtdRpBONwcn23O8nVwDNQqpBGKscysejkeBkwlIeHRLZWgiTVrusT5Idrdz1d8cW5wRk9iGsAIQmwDPXgJg==} - '@expressive-code/plugin-frames@0.35.3': - resolution: {integrity: sha512-QYytMq6IsaHgTofQ5b6d+CnbxkqLdikSF2hC+IL/ZZwPYHYZoUlmjIwmJZhY4/hHqJGELrtZsyVdlt06RntgmA==} + '@expressive-code/plugin-frames@0.38.3': + resolution: {integrity: sha512-qL2oC6FplmHNQfZ8ZkTR64/wKo9x0c8uP2WDftR/ydwN/yhe1ed7ZWYb8r3dezxsls+tDokCnN4zYR594jbpvg==} - '@expressive-code/plugin-shiki@0.35.3': - resolution: {integrity: sha512-aFQBPepv0zhVXqJFAvfQ4vXYv/meJKiqmEEKSxdjAfwXllIV49PDlnGEXmbGYjR4hUQQjbfDgzAbrbfePc3YVQ==} + '@expressive-code/plugin-shiki@0.38.3': + resolution: {integrity: sha512-kqHnglZeesqG3UKrb6e9Fq5W36AZ05Y9tCREmSN2lw8LVTqENIeCIkLDdWtQ5VoHlKqwUEQFTVlRehdwoY7Gmw==} - '@expressive-code/plugin-text-markers@0.35.3': - resolution: {integrity: sha512-gDdnQrfDRXw5Y+PKHJDkpAUdf2pthYOthGcgy3JB8GOTQ3EL1h+755Ct/bGc4MR6jn+dgnQP47uHMWQaccvN6Q==} + '@expressive-code/plugin-text-markers@0.38.3': + resolution: {integrity: sha512-dPK3+BVGTbTmGQGU3Fkj3jZ3OltWUAlxetMHI6limUGCWBCucZiwoZeFM/WmqQa71GyKRzhBT+iEov6kkz2xVA==} - '@img/sharp-darwin-arm64@0.33.4': - resolution: {integrity: sha512-p0suNqXufJs9t3RqLBO6vvrgr5OhgbWp76s5gTRvdmxmuv9E1rcaqGUsl3l4mKVmXPkTkTErXediAui4x+8PSA==} - engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-darwin-arm64@0.33.5': + resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [darwin] - '@img/sharp-darwin-x64@0.33.4': - resolution: {integrity: sha512-0l7yRObwtTi82Z6ebVI2PnHT8EB2NxBgpK2MiKJZJ7cz32R4lxd001ecMhzzsZig3Yv9oclvqqdV93jo9hy+Dw==} - engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-darwin-x64@0.33.5': + resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [darwin] - '@img/sharp-libvips-darwin-arm64@1.0.2': - resolution: {integrity: sha512-tcK/41Rq8IKlSaKRCCAuuY3lDJjQnYIW1UXU1kxcEKrfL8WR7N6+rzNoOxoQRJWTAECuKwgAHnPvqXGN8XfkHA==} - engines: {macos: '>=11', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-libvips-darwin-arm64@1.0.4': + resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} cpu: [arm64] os: [darwin] - '@img/sharp-libvips-darwin-x64@1.0.2': - resolution: {integrity: sha512-Ofw+7oaWa0HiiMiKWqqaZbaYV3/UGL2wAPeLuJTx+9cXpCRdvQhCLG0IH8YGwM0yGWGLpsF4Su9vM1o6aer+Fw==} - engines: {macos: '>=10.13', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-libvips-darwin-x64@1.0.4': + resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} cpu: [x64] os: [darwin] - '@img/sharp-libvips-linux-arm64@1.0.2': - resolution: {integrity: sha512-x7kCt3N00ofFmmkkdshwj3vGPCnmiDh7Gwnd4nUwZln2YjqPxV1NlTyZOvoDWdKQVDL911487HOueBvrpflagw==} - engines: {glibc: '>=2.26', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-libvips-linux-arm64@1.0.4': + resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} cpu: [arm64] os: [linux] - '@img/sharp-libvips-linux-arm@1.0.2': - resolution: {integrity: sha512-iLWCvrKgeFoglQxdEwzu1eQV04o8YeYGFXtfWU26Zr2wWT3q3MTzC+QTCO3ZQfWd3doKHT4Pm2kRmLbupT+sZw==} - engines: {glibc: '>=2.28', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-libvips-linux-arm@1.0.5': + resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} cpu: [arm] os: [linux] - '@img/sharp-libvips-linux-s390x@1.0.2': - resolution: {integrity: sha512-cmhQ1J4qVhfmS6szYW7RT+gLJq9dH2i4maq+qyXayUSn9/3iY2ZeWpbAgSpSVbV2E1JUL2Gg7pwnYQ1h8rQIog==} - engines: {glibc: '>=2.28', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-libvips-linux-s390x@1.0.4': + resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} cpu: [s390x] os: [linux] - '@img/sharp-libvips-linux-x64@1.0.2': - resolution: {integrity: sha512-E441q4Qdb+7yuyiADVi5J+44x8ctlrqn8XgkDTwr4qPJzWkaHwD489iZ4nGDgcuya4iMN3ULV6NwbhRZJ9Z7SQ==} - engines: {glibc: '>=2.26', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-libvips-linux-x64@1.0.4': + resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} cpu: [x64] os: [linux] - '@img/sharp-libvips-linuxmusl-arm64@1.0.2': - resolution: {integrity: sha512-3CAkndNpYUrlDqkCM5qhksfE+qSIREVpyoeHIU6jd48SJZViAmznoQQLAv4hVXF7xyUB9zf+G++e2v1ABjCbEQ==} - engines: {musl: '>=1.2.2', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} cpu: [arm64] os: [linux] - '@img/sharp-libvips-linuxmusl-x64@1.0.2': - resolution: {integrity: sha512-VI94Q6khIHqHWNOh6LLdm9s2Ry4zdjWJwH56WoiJU7NTeDwyApdZZ8c+SADC8OH98KWNQXnE01UdJ9CSfZvwZw==} - engines: {musl: '>=1.2.2', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} cpu: [x64] os: [linux] - '@img/sharp-linux-arm64@0.33.4': - resolution: {integrity: sha512-2800clwVg1ZQtxwSoTlHvtm9ObgAax7V6MTAB/hDT945Tfyy3hVkmiHpeLPCKYqYR1Gcmv1uDZ3a4OFwkdBL7Q==} - engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-linux-arm64@0.33.5': + resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - '@img/sharp-linux-arm@0.33.4': - resolution: {integrity: sha512-RUgBD1c0+gCYZGCCe6mMdTiOFS0Zc/XrN0fYd6hISIKcDUbAW5NtSQW9g/powkrXYm6Vzwd6y+fqmExDuCdHNQ==} - engines: {glibc: '>=2.28', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-linux-arm@0.33.5': + resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] - '@img/sharp-linux-s390x@0.33.4': - resolution: {integrity: sha512-h3RAL3siQoyzSoH36tUeS0PDmb5wINKGYzcLB5C6DIiAn2F3udeFAum+gj8IbA/82+8RGCTn7XW8WTFnqag4tQ==} - engines: {glibc: '>=2.31', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-linux-s390x@0.33.5': + 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] - '@img/sharp-linux-x64@0.33.4': - resolution: {integrity: sha512-GoR++s0XW9DGVi8SUGQ/U4AeIzLdNjHka6jidVwapQ/JebGVQIpi52OdyxCNVRE++n1FCLzjDovJNozif7w/Aw==} - engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-linux-x64@0.33.5': + resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - '@img/sharp-linuxmusl-arm64@0.33.4': - resolution: {integrity: sha512-nhr1yC3BlVrKDTl6cO12gTpXMl4ITBUZieehFvMntlCXFzH2bvKG76tBL2Y/OqhupZt81pR7R+Q5YhJxW0rGgQ==} - engines: {musl: '>=1.2.2', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-linuxmusl-arm64@0.33.5': + resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - '@img/sharp-linuxmusl-x64@0.33.4': - resolution: {integrity: sha512-uCPTku0zwqDmZEOi4ILyGdmW76tH7dm8kKlOIV1XC5cLyJ71ENAAqarOHQh0RLfpIpbV5KOpXzdU6XkJtS0daw==} - engines: {musl: '>=1.2.2', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-linuxmusl-x64@0.33.5': + 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] - '@img/sharp-wasm32@0.33.4': - resolution: {integrity: sha512-Bmmauh4sXUsUqkleQahpdNXKvo+wa1V9KhT2pDA4VJGKwnKMJXiSTGphn0gnJrlooda0QxCtXc6RX1XAU6hMnQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-wasm32@0.33.5': + resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] - '@img/sharp-win32-ia32@0.33.4': - resolution: {integrity: sha512-99SJ91XzUhYHbx7uhK3+9Lf7+LjwMGQZMDlO/E/YVJ7Nc3lyDFZPGhjwiYdctoH2BOzW9+TnfqcaMKt0jHLdqw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-win32-ia32@0.33.5': + resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ia32] os: [win32] - '@img/sharp-win32-x64@0.33.4': - resolution: {integrity: sha512-3QLocdTRVIrFNye5YocZl+KKpYKP+fksi1QhmOArgx7GyhIbQp/WrJRu176jm8IxromS7RIkzMiMINVdBtC8Aw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-win32-x64@0.33.5': + resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [win32] - '@jridgewell/gen-mapping@0.3.5': - resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} - engines: {node: '>=6.0.0'} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - '@jridgewell/sourcemap-codec@1.5.0': resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - - '@mdx-js/mdx@3.0.1': - resolution: {integrity: sha512-eIQ4QTrOWyL3LWEe/bu6Taqzq2HQvHcyTMaOrI95P2/LmJE7AsfPfgJGuFLPVqBUE1BC1rik3VIhU+s9u72arA==} + '@mdx-js/mdx@3.1.0': + resolution: {integrity: sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==} '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -513,6 +547,9 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@oslojs/encoding@1.1.0': + resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==} + '@pagefind/darwin-arm64@1.1.0': resolution: {integrity: sha512-SLsXNLtSilGZjvqis8sX42fBWsWAVkcDh1oerxwqbac84HbiwxpxOC2jm8hRwcR0Z55HPZPWO77XeRix/8GwTg==} cpu: [arm64] @@ -541,103 +578,127 @@ packages: cpu: [x64] os: [win32] - '@rollup/rollup-android-arm-eabi@4.18.1': - resolution: {integrity: sha512-lncuC4aHicncmbORnx+dUaAgzee9cm/PbIqgWz1PpXuwc+sa1Ct83tnqUDy/GFKleLiN7ZIeytM6KJ4cAn1SxA==} + '@rollup/pluginutils@5.1.3': + resolution: {integrity: sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.28.1': + resolution: {integrity: sha512-2aZp8AES04KI2dy3Ss6/MDjXbwBzj+i0GqKtWXgw2/Ma6E4jJvujryO6gJAghIRVz7Vwr9Gtl/8na3nDUKpraQ==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.18.1': - resolution: {integrity: sha512-F/tkdw0WSs4ojqz5Ovrw5r9odqzFjb5LIgHdHZG65dFI1lWTWRVy32KDJLKRISHgJvqUeUhdIvy43fX41znyDg==} + '@rollup/rollup-android-arm64@4.28.1': + resolution: {integrity: sha512-EbkK285O+1YMrg57xVA+Dp0tDBRB93/BZKph9XhMjezf6F4TpYjaUSuPt5J0fZXlSag0LmZAsTmdGGqPp4pQFA==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.18.1': - resolution: {integrity: sha512-vk+ma8iC1ebje/ahpxpnrfVQJibTMyHdWpOGZ3JpQ7Mgn/3QNHmPq7YwjZbIE7km73dH5M1e6MRRsnEBW7v5CQ==} + '@rollup/rollup-darwin-arm64@4.28.1': + resolution: {integrity: sha512-prduvrMKU6NzMq6nxzQw445zXgaDBbMQvmKSJaxpaZ5R1QDM8w+eGxo6Y/jhT/cLoCvnZI42oEqf9KQNYz1fqQ==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.18.1': - resolution: {integrity: sha512-IgpzXKauRe1Tafcej9STjSSuG0Ghu/xGYH+qG6JwsAUxXrnkvNHcq/NL6nz1+jzvWAnQkuAJ4uIwGB48K9OCGA==} + '@rollup/rollup-darwin-x64@4.28.1': + resolution: {integrity: sha512-WsvbOunsUk0wccO/TV4o7IKgloJ942hVFK1CLatwv6TJspcCZb9umQkPdvB7FihmdxgaKR5JyxDjWpCOp4uZlQ==} cpu: [x64] os: [darwin] - '@rollup/rollup-linux-arm-gnueabihf@4.18.1': - resolution: {integrity: sha512-P9bSiAUnSSM7EmyRK+e5wgpqai86QOSv8BwvkGjLwYuOpaeomiZWifEos517CwbG+aZl1T4clSE1YqqH2JRs+g==} + '@rollup/rollup-freebsd-arm64@4.28.1': + resolution: {integrity: sha512-HTDPdY1caUcU4qK23FeeGxCdJF64cKkqajU0iBnTVxS8F7H/7BewvYoG+va1KPSL63kQ1PGNyiwKOfReavzvNA==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.28.1': + resolution: {integrity: sha512-m/uYasxkUevcFTeRSM9TeLyPe2QDuqtjkeoTpP9SW0XxUWfcYrGDMkO/m2tTw+4NMAF9P2fU3Mw4ahNvo7QmsQ==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.28.1': + resolution: {integrity: sha512-QAg11ZIt6mcmzpNE6JZBpKfJaKkqTm1A9+y9O+frdZJEuhQxiugM05gnCWiANHj4RmbgeVJpTdmKRmH/a+0QbA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.18.1': - resolution: {integrity: sha512-5RnjpACoxtS+aWOI1dURKno11d7krfpGDEn19jI8BuWmSBbUC4ytIADfROM1FZrFhQPSoP+KEa3NlEScznBTyQ==} + '@rollup/rollup-linux-arm-musleabihf@4.28.1': + resolution: {integrity: sha512-dRP9PEBfolq1dmMcFqbEPSd9VlRuVWEGSmbxVEfiq2cs2jlZAl0YNxFzAQS2OrQmsLBLAATDMb3Z6MFv5vOcXg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.18.1': - resolution: {integrity: sha512-8mwmGD668m8WaGbthrEYZ9CBmPug2QPGWxhJxh/vCgBjro5o96gL04WLlg5BA233OCWLqERy4YUzX3bJGXaJgQ==} + '@rollup/rollup-linux-arm64-gnu@4.28.1': + resolution: {integrity: sha512-uGr8khxO+CKT4XU8ZUH1TTEUtlktK6Kgtv0+6bIFSeiSlnGJHG1tSFSjm41uQ9sAO/5ULx9mWOz70jYLyv1QkA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.18.1': - resolution: {integrity: sha512-dJX9u4r4bqInMGOAQoGYdwDP8lQiisWb9et+T84l2WXk41yEej8v2iGKodmdKimT8cTAYt0jFb+UEBxnPkbXEQ==} + '@rollup/rollup-linux-arm64-musl@4.28.1': + resolution: {integrity: sha512-QF54q8MYGAqMLrX2t7tNpi01nvq5RI59UBNx+3+37zoKX5KViPo/gk2QLhsuqok05sSCRluj0D00LzCwBikb0A==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.18.1': - resolution: {integrity: sha512-V72cXdTl4EI0x6FNmho4D502sy7ed+LuVW6Ym8aI6DRQ9hQZdp5sj0a2usYOlqvFBNKQnLQGwmYnujo2HvjCxQ==} + '@rollup/rollup-linux-loongarch64-gnu@4.28.1': + resolution: {integrity: sha512-vPul4uodvWvLhRco2w0GcyZcdyBfpfDRgNKU+p35AWEbJ/HPs1tOUrkSueVbBS0RQHAf/A+nNtDpvw95PeVKOA==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.28.1': + resolution: {integrity: sha512-pTnTdBuC2+pt1Rmm2SV7JWRqzhYpEILML4PKODqLz+C7Ou2apEV52h19CR7es+u04KlqplggmN9sqZlekg3R1A==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.18.1': - resolution: {integrity: sha512-f+pJih7sxoKmbjghrM2RkWo2WHUW8UbfxIQiWo5yeCaCM0TveMEuAzKJte4QskBp1TIinpnRcxkquY+4WuY/tg==} + '@rollup/rollup-linux-riscv64-gnu@4.28.1': + resolution: {integrity: sha512-vWXy1Nfg7TPBSuAncfInmAI/WZDd5vOklyLJDdIRKABcZWojNDY0NJwruY2AcnCLnRJKSaBgf/GiJfauu8cQZA==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.18.1': - resolution: {integrity: sha512-qb1hMMT3Fr/Qz1OKovCuUM11MUNLUuHeBC2DPPAWUYYUAOFWaxInaTwTQmc7Fl5La7DShTEpmYwgdt2hG+4TEg==} + '@rollup/rollup-linux-s390x-gnu@4.28.1': + resolution: {integrity: sha512-/yqC2Y53oZjb0yz8PVuGOQQNOTwxcizudunl/tFs1aLvObTclTwZ0JhXF2XcPT/zuaymemCDSuuUPXJJyqeDOg==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.18.1': - resolution: {integrity: sha512-7O5u/p6oKUFYjRbZkL2FLbwsyoJAjyeXHCU3O4ndvzg2OFO2GinFPSJFGbiwFDaCFc+k7gs9CF243PwdPQFh5g==} + '@rollup/rollup-linux-x64-gnu@4.28.1': + resolution: {integrity: sha512-fzgeABz7rrAlKYB0y2kSEiURrI0691CSL0+KXwKwhxvj92VULEDQLpBYLHpF49MSiPG4sq5CK3qHMnb9tlCjBw==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.18.1': - resolution: {integrity: sha512-pDLkYITdYrH/9Cv/Vlj8HppDuLMDUBmgsM0+N+xLtFd18aXgM9Nyqupb/Uw+HeidhfYg2lD6CXvz6CjoVOaKjQ==} + '@rollup/rollup-linux-x64-musl@4.28.1': + resolution: {integrity: sha512-xQTDVzSGiMlSshpJCtudbWyRfLaNiVPXt1WgdWTwWz9n0U12cI2ZVtWe/Jgwyv/6wjL7b66uu61Vg0POWVfz4g==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.18.1': - resolution: {integrity: sha512-W2ZNI323O/8pJdBGil1oCauuCzmVd9lDmWBBqxYZcOqWD6aWqJtVBQ1dFrF4dYpZPks6F+xCZHfzG5hYlSHZ6g==} + '@rollup/rollup-win32-arm64-msvc@4.28.1': + resolution: {integrity: sha512-wSXmDRVupJstFP7elGMgv+2HqXelQhuNf+IS4V+nUpNVi/GUiBgDmfwD0UGN3pcAnWsgKG3I52wMOBnk1VHr/A==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.18.1': - resolution: {integrity: sha512-ELfEX1/+eGZYMaCIbK4jqLxO1gyTSOIlZr6pbC4SRYFaSIDVKOnZNMdoZ+ON0mrFDp4+H5MhwNC1H/AhE3zQLg==} + '@rollup/rollup-win32-ia32-msvc@4.28.1': + resolution: {integrity: sha512-ZkyTJ/9vkgrE/Rk9vhMXhf8l9D+eAhbAVbsGsXKy2ohmJaWg0LPQLnIxRdRp/bKyr8tXuPlXhIoGlEB5XpJnGA==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.18.1': - resolution: {integrity: sha512-yjk2MAkQmoaPYCSu35RLJ62+dz358nE83VfTePJRp8CG7aMg25mEJYpXFiD+NcevhX8LxD5OP5tktPXnXN7GDw==} + '@rollup/rollup-win32-x64-msvc@4.28.1': + resolution: {integrity: sha512-ZvK2jBafvttJjoIdKm/Q/Bh7IJ1Ose9IBOwpOXcOvW3ikGTQGmKDgxTC6oCAzW6PynbkKP8+um1du81XJHZ0JA==} cpu: [x64] os: [win32] - '@shikijs/core@1.10.3': - resolution: {integrity: sha512-D45PMaBaeDHxww+EkcDQtDAtzv00Gcsp72ukBtaLSmqRvh0WgGMq3Al0rl1QQBZfuneO75NXMIzEZGFitThWbg==} + '@shikijs/core@1.24.2': + resolution: {integrity: sha512-BpbNUSKIwbKrRRA+BQj0BEWSw+8kOPKDJevWeSE/xIqGX7K0xrCZQ9kK0nnEQyrzsUoka1l81ZtJ2mGaCA32HQ==} - '@types/acorn@4.0.6': - resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} + '@shikijs/engine-javascript@1.24.2': + resolution: {integrity: sha512-EqsmYBJdLEwEiO4H+oExz34a5GhhnVp+jH9Q/XjPjmBPc6TE/x4/gD0X3i0EbkKKNqXYHHJTJUpOLRQNkEzS9Q==} - '@types/babel__core@7.20.5': - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + '@shikijs/engine-oniguruma@1.24.2': + resolution: {integrity: sha512-ZN6k//aDNWRJs1uKB12pturKHh7GejKugowOFGAuG7TxDRLod1Bd5JhpOikOiFqPmKjKEPtEA6mRCf7q3ulDyQ==} - '@types/babel__generator@7.6.8': - resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + '@shikijs/types@1.24.2': + resolution: {integrity: sha512-bdeWZiDtajGLG9BudI0AHet0b6e7FbR0EsE4jpGaI0YwHm/XJunI9+3uZnzFtX65gsyJ6ngCIWUfA4NWRPnBkQ==} - '@types/babel__template@7.4.4': - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + '@shikijs/vscode-textmate@9.3.1': + resolution: {integrity: sha512-79QfK1393x9Ho60QFyLti+QfdJzRQCVLFb97kOIV7Eo9vQU/roINgk7m24uv0a7AUvN//RDH36FLjjK48v0s9g==} - '@types/babel__traverse@7.20.6': - resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + '@types/acorn@4.0.6': + resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} @@ -651,9 +712,15 @@ packages: '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + '@types/js-yaml@4.0.9': + resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} + '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} @@ -681,28 +748,25 @@ packages: '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - '@volar/kit@2.4.0-alpha.15': - resolution: {integrity: sha512-ZCBErTebCVdzpSo/0wBlrjnZfqQfVIaHUJa3kOQe3TbVR/8Ny/3mij9gSkBTUcSyVtlUFpJpJo/B8aQp0xt/mQ==} + '@volar/kit@2.4.11': + resolution: {integrity: sha512-ups5RKbMzMCr6RKafcCqDRnJhJDNWqo2vfekwOAj6psZ15v5TlcQFQAyokQJ3wZxVkzxrQM+TqTRDENfQEXpmA==} peerDependencies: typescript: '*' - '@volar/language-core@2.4.0-alpha.15': - resolution: {integrity: sha512-mt8z4Fm2WxfQYoQHPcKVjLQV6PgPqyKLbkCVY2cr5RSaamqCHjhKEpsFX66aL4D/7oYguuaUw9Bx03Vt0TpIIA==} - - '@volar/language-server@2.4.0-alpha.15': - resolution: {integrity: sha512-epaF7Rllb29nr25F8hX5bq7ivgStNZzXGkhuPlHCUM+Ij/aQnsBeYQsfm7EttPqqO3abCctpRWyd+icklFEBoQ==} + '@volar/language-core@2.4.11': + resolution: {integrity: sha512-lN2C1+ByfW9/JRPpqScuZt/4OrUUse57GLI6TbLgTIqBVemdl1wNcZ1qYGEo2+Gw8coYLgCy7SuKqn6IrQcQgg==} - '@volar/language-service@2.4.0-alpha.15': - resolution: {integrity: sha512-H5T5JvvqvWhG0PvvKPTM0nczTbTKQ+U87a8r0eahlH/ySi2HvIHO/7PiNKLxKqLNsiT8SX4U3QcGC8ZaNcC07g==} + '@volar/language-server@2.4.11': + resolution: {integrity: sha512-W9P8glH1M8LGREJ7yHRCANI5vOvTrRO15EMLdmh5WNF9sZYSEbQxiHKckZhvGIkbeR1WAlTl3ORTrJXUghjk7g==} - '@volar/snapshot-document@2.4.0-alpha.15': - resolution: {integrity: sha512-8lnX0eZ7/lM+hakO5kspWABi4nijppxTy9XU0f9ns2lZ/JCE0t9EurNNiOaw4MWFO9USr0H72Ut0LCB9o4rpqA==} + '@volar/language-service@2.4.11': + resolution: {integrity: sha512-KIb6g8gjUkS2LzAJ9bJCLIjfsJjeRtmXlu7b2pDFGD3fNqdbC53cCAKzgWDs64xtQVKYBU13DLWbtSNFtGuMLQ==} - '@volar/source-map@2.4.0-alpha.15': - resolution: {integrity: sha512-8Htngw5TmBY4L3ClDqBGyfLhsB8EmoEXUH1xydyEtEoK0O6NX5ur4Jw8jgvscTlwzizyl/wsN1vn0cQXVbbXYg==} + '@volar/source-map@2.4.11': + resolution: {integrity: sha512-ZQpmafIGvaZMn/8iuvCFGrW3smeqkq/IIh9F1SdSx9aUl0J4Iurzd6/FhmjNO5g2ejF3rT45dKskgXWiofqlZQ==} - '@volar/typescript@2.4.0-alpha.15': - resolution: {integrity: sha512-U3StRBbDuxV6Woa4hvGS4kz3XcOzrWUKgFdEFN+ba1x3eaYg7+ytau8ul05xgA+UNGLXXsKur7fTUhDFyISk0w==} + '@volar/typescript@2.4.11': + resolution: {integrity: sha512-2DT+Tdh88Spp5PyPbqhyoYavYCPDsqbHLFwcUI9K1NlY1YgUJvujGdrqUp0zWxnW7KWNTr3xSpMuv2WnaTKDAw==} '@vscode/emmet-helper@2.9.3': resolution: {integrity: sha512-rB39LHWWPQYYlYfpv9qCoZOVioPCftKXXqrsyqN1mTWZM6dTnONT63Db+03vgrBbHzJN45IrgS/AGxw9iiqfEw==} @@ -715,11 +779,14 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.12.1: - resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} engines: {node: '>=0.4.0'} hasBin: true + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + ansi-align@3.0.1: resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} @@ -731,10 +798,6 @@ packages: resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} engines: {node: '>=12'} - ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -743,10 +806,6 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} @@ -756,8 +815,9 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - aria-query@5.3.0: - resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} array-iterate@2.0.1: resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==} @@ -766,92 +826,50 @@ packages: resolution: {integrity: sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==} hasBin: true - astro-expressive-code@0.35.3: - resolution: {integrity: sha512-f1L1m3J3EzZHDEox6TXmuKo5fTSbaNxE/HU0S0UQmvlCowtOKnU/LOsoDwsbQSYGKz+fdLRPsCjFMiKqEoyfcw==} + astro-expressive-code@0.38.3: + resolution: {integrity: sha512-Tvdc7RV0G92BbtyEOsfJtXU35w41CkM94fOAzxbQP67Wj5jArfserJ321FO4XA7WG9QMV0GIBmQq77NBIRDzpQ==} peerDependencies: - astro: ^4.0.0-beta || ^3.3.0 + astro: ^4.0.0-beta || ^5.0.0-beta || ^3.3.0 - astro@4.11.5: - resolution: {integrity: sha512-TCRhuaLwrxwMhS8S1GG+ZTdrAXigX9C8E/YUTs/r2t+owHxDgwl86IV9xH1IHrCPoqhK6civyAQNOT+GKmkb0A==} - engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'} + astro@5.0.5: + resolution: {integrity: sha512-xfptdmurDsQcj/Anc7mU+eKlcyV7ppJIlmaSwhX3ZWwK5N/0rGKVmUqnuILgR6MB0XVJiIfublNzDGoyj4Q6BQ==} + engines: {node: ^18.17.1 || ^20.3.0 || >=22.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'} hasBin: true - axobject-query@4.0.0: - resolution: {integrity: sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==} - - b4a@1.6.6: - resolution: {integrity: sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==} + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} - bare-events@2.4.2: - resolution: {integrity: sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==} - - bare-fs@2.3.1: - resolution: {integrity: sha512-W/Hfxc/6VehXlsgFtbB5B4xFcsCl+pAh30cYhoFyXErf6oGrwjh8SwiPAdHgpmWonKuYpZgGywN0SXt7dgsADA==} - - bare-os@2.4.0: - resolution: {integrity: sha512-v8DTT08AS/G0F9xrhyLtepoo9EJBJ85FRSMbu1pQUlAf6A8T0tEEQGMVObWeqpjhSPXsE0VGlluFBJu2fdoTNg==} - - bare-path@2.1.3: - resolution: {integrity: sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==} - - bare-stream@2.1.3: - resolution: {integrity: sha512-tiDAH9H/kP+tvNO5sczyn9ZAA7utrSMobyDchsnyyXBuUe2FSQWbxhtuHB8jwpHYYevVo2UJpcmvvjrbHboUUQ==} - base-64@1.0.0: resolution: {integrity: sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==} - base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - bcp-47-match@2.0.3: resolution: {integrity: sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==} bcp-47@2.1.0: resolution: {integrity: sha512-9IIS3UPrvIa1Ej+lVDdDwO7zLehjqsaByECw0bu2RRGP73jALm6FYbzI5gWbgHLvNdkvfXB5YrSbocZdOS0c0w==} - binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} - - bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - boxen@7.1.1: - resolution: {integrity: sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==} - engines: {node: '>=14.16'} + boxen@8.0.1: + resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} + engines: {node: '>=18'} braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.23.2: - resolution: {integrity: sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - - buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - - camelcase@7.0.1: - resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} - engines: {node: '>=14.16'} - - caniuse-lite@1.0.30001641: - resolution: {integrity: sha512-Phv5thgl67bHYo1TtMY/MurjkHhV4EDaCosezRXgZ8jzA/Ub+wjxAvbGvjoFENStinwi5kCyOYV3mi5tOGykwA==} + camelcase@8.0.0: + resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} + engines: {node: '>=16'} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - chalk@5.3.0: resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} @@ -868,29 +886,18 @@ packages: character-reference-invalid@2.0.1: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} - chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} - - chownr@1.1.4: - resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + chokidar@4.0.1: + resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==} + engines: {node: '>= 14.16.0'} - ci-info@4.0.0: - resolution: {integrity: sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==} + ci-info@4.1.0: + resolution: {integrity: sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==} engines: {node: '>=8'} cli-boxes@3.0.0: resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} engines: {node: '>=10'} - cli-cursor@4.0.0: - resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} - cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -902,16 +909,10 @@ packages: collapse-white-space@2.1.0: resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} - color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} - color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} @@ -928,17 +929,10 @@ packages: common-ancestor-path@1.0.1: resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==} - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - - cookie@0.6.0: - resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} - cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - css-selector-parser@3.0.5: resolution: {integrity: sha512-3itoDFbKUNx1eKmVpYMFyqKX04Ww9osZ+dLgrk6GEv6KMVeXUhUnp4I5X+evw+u3ZxVU6RFXSSRxlTeMh8bA+g==} @@ -956,17 +950,18 @@ packages: supports-color: optional: true + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + decode-named-character-reference@1.0.2: resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} - decompress-response@6.0.0: - resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} - engines: {node: '>=10'} - - deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} - dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} @@ -979,8 +974,8 @@ packages: resolution: {integrity: sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==} engines: {node: '>=18'} - devalue@5.0.0: - resolution: {integrity: sha512-gO+/OMXF7488D+u3ue+G7Y4AA3ZmUnB3eHJXmBTgNHvr4ZNzl36A0ZtG+XCRNYCkYx/bFmw4qtkoFLa+wSrwAA==} + devalue@5.1.1: + resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==} devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} @@ -996,31 +991,22 @@ packages: dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - dset@3.1.3: - resolution: {integrity: sha512-20TuZZHCEZ2O71q9/+8BwKwZ0QtD9D8ObhrihJPr+vLLYlSuAU3/zL4cSlgbfeoGHTjCSJBa7NGcrF9/Bx/WJQ==} + dset@3.1.4: + resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==} engines: {node: '>=4'} - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - - electron-to-chromium@1.4.827: - resolution: {integrity: sha512-VY+J0e4SFcNfQy19MEoMdaIcZLmDCprqvBtkii1WTCTQHpRvf5N8+3kTYCgL/PcntvwQvmMJWTuDPsq+IlhWKQ==} - emmet@2.4.7: resolution: {integrity: sha512-O5O5QNqtdlnQM2bmKHtJgyChcrFMgQuulI+WdiOw2NArzprUqqxUW6bgYtKvzKgrsYpuLWalOkdhNP+1jluhCA==} + emoji-regex-xs@1.0.0: + resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} + emoji-regex@10.3.0: resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - - end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -1028,19 +1014,26 @@ packages: es-module-lexer@1.5.4: resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} + esast-util-from-estree@2.0.0: + resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==} + + esast-util-from-js@2.0.1: + resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==} + esbuild@0.21.5: resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} engines: {node: '>=12'} hasBin: true + esbuild@0.24.0: + resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==} + engines: {node: '>=18'} + hasBin: true + escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - escape-string-regexp@5.0.0: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} @@ -1059,43 +1052,40 @@ packages: estree-util-is-identifier-name@3.0.0: resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + estree-util-scope@1.0.0: + resolution: {integrity: sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==} + estree-util-to-js@2.0.0: resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==} estree-util-visit@2.0.0: resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - execa@8.0.1: - resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} - engines: {node: '>=16.17'} - - expand-template@2.0.3: - resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} - engines: {node: '>=6'} - - expressive-code@0.35.3: - resolution: {integrity: sha512-XjWWUCxS4uQjPoRM98R7SNWWIYlFEaOeHm1piWv+c7coHCekuWno81thsc3g/UJ+DajNtOEsIQIAAcsBQZ8LMg==} - - extend-shallow@2.0.1: - resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} - engines: {node: '>=0.10.0'} + expressive-code@0.38.3: + resolution: {integrity: sha512-COM04AiUotHCKJgWdn7NtW2lqu8OW8owAidMpkXt1qxrZ9Q2iC7+tok/1qIn2ocGnczvr9paIySgGnEwFeEQ8Q==} extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - fast-fifo@1.3.2: - resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} fast-glob@3.3.2: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} + fast-uri@3.0.3: + resolution: {integrity: sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==} + fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} @@ -1103,14 +1093,14 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + find-up-simple@1.0.0: + resolution: {integrity: sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==} + engines: {node: '>=18'} + find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - find-yarn-workspace-root2@1.2.16: resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} @@ -1118,18 +1108,11 @@ packages: resolution: {integrity: sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==} engines: {node: '>=8'} - fs-constants@1.0.0: - resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} @@ -1138,13 +1121,6 @@ packages: resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} engines: {node: '>=18'} - get-stream@8.0.1: - resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} - engines: {node: '>=16'} - - github-from-package@0.0.0: - resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} - github-slugger@2.0.0: resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} @@ -1152,27 +1128,18 @@ packages: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} - globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - gray-matter@4.0.3: - resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} - engines: {node: '>=6.0'} - - has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - hast-util-embedded@3.0.0: resolution: {integrity: sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA==} hast-util-from-html@2.0.1: resolution: {integrity: sha512-RXQBLMl9kjKVNkJTIO6bZyb2n+cUH8LFaSSzo82jiLT6Tfc+Pt7VQCS+/h3YwG4jaNE2TA2sdJisGWR+aJrp0g==} + hast-util-from-html@2.0.3: + resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} + hast-util-from-parse5@8.0.1: resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==} @@ -1203,6 +1170,9 @@ packages: hast-util-to-html@9.0.1: resolution: {integrity: sha512-hZOofyZANbyWo+9RP75xIDV/gq+OUKx+T46IlwERnKmfpwp81XBFbT9mi26ws+SJchA4RVUQwIBJpqEOBhMzEQ==} + hast-util-to-html@9.0.4: + resolution: {integrity: sha512-wxQzXtdbhiwGAUKrnQJXlOPmHnEehzphwkK7aluUPQ+lEc1xefC8pblMgpp2w5ldBTEfveRIrADcrhGIWrlTDA==} + hast-util-to-jsx-runtime@2.3.0: resolution: {integrity: sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==} @@ -1236,22 +1206,12 @@ packages: http-cache-semantics@4.1.1: resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} - human-signals@5.0.0: - resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} - engines: {node: '>=16.17.0'} - - ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + i18next@23.16.8: + resolution: {integrity: sha512-06r/TitrM88Mg5FdUXAKL96dJMzgqLE5dv3ryBAra4KCwD9mJ4ndOTS95ZuymIGoE+2hzfdaMak2X11/es7ZWg==} import-meta-resolve@4.1.0: resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - inline-style-parser@0.1.1: resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} @@ -1271,10 +1231,6 @@ packages: is-arrayish@0.3.2: resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - is-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} @@ -1283,10 +1239,6 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} hasBin: true - is-extendable@0.1.1: - resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} - engines: {node: '>=0.10.0'} - is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -1307,10 +1259,6 @@ packages: engines: {node: '>=14.16'} hasBin: true - is-interactive@2.0.0: - resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} - engines: {node: '>=12'} - is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -1319,31 +1267,10 @@ packages: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} - is-reference@3.0.2: - resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} - - is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - is-unicode-supported@1.3.0: - resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} - engines: {node: '>=12'} - - is-unicode-supported@2.0.0: - resolution: {integrity: sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==} - engines: {node: '>=18'} - is-wsl@3.1.0: resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} engines: {node: '>=16'} - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true @@ -1352,22 +1279,14 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} jsonc-parser@2.3.1: resolution: {integrity: sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==} - kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} kleur@3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} @@ -1385,22 +1304,17 @@ packages: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - - log-symbols@6.0.0: - resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} - engines: {node: '>=18'} + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + magic-string@0.30.15: + resolution: {integrity: sha512-zXeaYRgZ6ldS1RJJUrMrYgNJ4fdwnyI6tVqoiIhyCyv5IVTK9BU8Ic2l253GGETQHxI4HNUwhJ3fjDhKqEoaAw==} - magic-string@0.30.10: - resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} + magicast@0.3.5: + resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} markdown-extensions@2.0.0: resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} @@ -1463,9 +1377,6 @@ packages: mdast-util-to-string@4.0.0: resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} - merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} @@ -1578,28 +1489,10 @@ packages: micromark@4.0.0: resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} - micromatch@4.0.7: - resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} - mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - - mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} - - mimic-response@3.1.0: - resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} - engines: {node: '>=10'} - - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - - mkdirp-classic@0.5.3: - resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} - mrmime@2.0.0: resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} engines: {node: '>=10'} @@ -1607,6 +1500,9 @@ packages: ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + muggle-string@0.4.1: resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} @@ -1615,71 +1511,34 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - napi-build-utils@1.0.2: - resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} + neotraverse@0.6.18: + resolution: {integrity: sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==} + engines: {node: '>= 10'} nlcst-to-string@4.0.0: resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==} - node-abi@3.65.0: - resolution: {integrity: sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA==} - engines: {node: '>=10'} - - node-addon-api@6.1.0: - resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} - - node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} - - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - not@0.1.0: resolution: {integrity: sha512-5PDmaAsVfnWUgTUbJ3ERwn7u79Z0dYxN9ErxCpVJJqe2RK0PJ3z+iFUxuqjwtlDDegXvtWoxD/3Fzxox7tFGWA==} - npm-run-path@5.3.0: - resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - - onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} - engines: {node: '>=12'} - - ora@8.0.1: - resolution: {integrity: sha512-ANIvzobt1rls2BDny5fWZ3ZVKyD6nscLvfFRpQgfWsythlcsVUC9kL0zq6j2Z5z9wwp1kd7wpsD/T9qNPVLCaQ==} - engines: {node: '>=18'} + oniguruma-to-es@0.7.0: + resolution: {integrity: sha512-HRaRh09cE0gRS3+wi2zxekB+I5L8C/gN60S+vb11eADHUaB/q4u8wGGOX3GvwvitG8ixaeycZfeoyruKQzUgNg==} p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} - p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - - p-limit@5.0.0: - resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} + p-limit@6.1.0: + resolution: {integrity: sha512-H0jc0q1vOzlEk0TqAKXKZxdl7kX3OFUzCnNVUnq5Pc3DGo0kpeaMuPqxQn235HibwBEb0/pm9dgKTjXy66fBkg==} engines: {node: '>=18'} p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} - p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - p-queue@8.0.1: resolution: {integrity: sha512-NXzu9aQJTAzbBqOt2hwsR63ea7yvxJc0PwN/zobNAudYfb1B7R08SzB4TsLeSbUCuG467NhnoT0oO6w1qRO+BA==} engines: {node: '>=18'} @@ -1712,27 +1571,20 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} - engines: {node: '>=12'} - - path-to-regexp@6.2.2: - resolution: {integrity: sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==} - - periscopic@3.1.0: - resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} - picocolors@1.0.1: resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} @@ -1755,14 +1607,18 @@ packages: resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==} engines: {node: ^10 || ^12 || >=14} - prebuild-install@7.1.2: - resolution: {integrity: sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==} - engines: {node: '>=10'} - hasBin: true + postcss@8.4.49: + resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} + engines: {node: ^10 || ^12 || >=14} - preferred-pm@3.1.4: - resolution: {integrity: sha512-lEHd+yEm22jXdCphDrkvIJQU66EuLojPPtvZkpKIkiD+l0DMThF/niqZKJSoU8Vl7iuvtmzyMhir9LdVy5WMnA==} - engines: {node: '>=10'} + preferred-pm@4.0.0: + resolution: {integrity: sha512-gYBeFTZLu055D8Vv3cSPox/0iTPtkzxpLroSYYA7WXgRi31WCJ51Uyl8ZiPeUUjyvs2MBzK+S8v9JVUgHU/Sqw==} + engines: {node: '>=18.12'} + + prettier@2.8.7: + resolution: {integrity: sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==} + engines: {node: '>=10.13.0'} + hasBin: true prismjs@1.29.0: resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} @@ -1775,29 +1631,39 @@ packages: property-information@6.5.0: resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} - pump@3.0.0: - resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} - queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - queue-tick@1.0.1: - resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} + readdirp@4.0.2: + resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} + engines: {node: '>= 14.16.0'} - rc@1.2.8: - resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true + recma-build-jsx@1.0.0: + resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} - readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} + recma-jsx@1.0.0: + resolution: {integrity: sha512-5vwkv65qWwYxg+Atz95acp8DMu1JDSqdGkA2Of1j6rCreyFUE/gp15fC8MnGEuG1W68UKjM6x6+YTWIh7hZM/Q==} + + recma-parse@1.0.0: + resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==} + + recma-stringify@1.0.0: + resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==} - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - rehype-expressive-code@0.35.3: - resolution: {integrity: sha512-kj43Rg+WzYUs8RRr6XyBr60pnrIZEgbmn9yJoV6qka1UDpcx7r8icn6Q2uSAgaLtlEUy+HCPgQJraOZrA53LOQ==} + regex-recursion@4.3.0: + resolution: {integrity: sha512-5LcLnizwjcQ2ALfOj95MjcatxyqF5RPySx9yT+PaXu3Gox2vyAtLDjHB8NTJLtMGkvyau6nI3CfpwFCjPUIs/A==} + + regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + + regex@5.0.2: + resolution: {integrity: sha512-/pczGbKIQgfTMRV0XjABvc5RzLqQmwqxLHdQao2RTXPk+pmTXB2P0IaUHYdYyk412YLwUIkaeMd5T+RzVgTqnQ==} + + rehype-expressive-code@0.38.3: + resolution: {integrity: sha512-RYSSDkMBikoTbycZPkcWp6ELneANT4eTpND1DSRJ6nI2eVFUwTBDCvE2vO6jOOTaavwnPiydi4i/87NRyjpdOA==} rehype-external-links@3.0.0: resolution: {integrity: sha512-yp+e5N9V3C6bwBeAC4n796kc86M4gJCdlVhiMTxIrJG5UHDMh+PJANf9heqORJbt1nrCbDwIlAZKjANIaVBbvw==} @@ -1814,12 +1680,21 @@ packages: rehype-raw@7.0.0: resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} + rehype-recma@1.0.0: + resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==} + rehype-stringify@10.0.0: resolution: {integrity: sha512-1TX1i048LooI9QoecrXy7nGFFbFSufxVRAfc6Y9YMRAi56l+oB0zP51mLSV312uRuvVLPV1opSlJmslozR1XHQ==} + rehype-stringify@10.0.1: + resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==} + rehype@13.0.1: resolution: {integrity: sha512-AcSLS2mItY+0fYu9xKxOu1LhUZeBZZBx8//5HKzF+0XP+eP8+6a5MXn2+DW2kfXR6Dtp1FEXMVrjyKAcvcU8vg==} + rehype@13.0.2: + resolution: {integrity: sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==} + remark-directive@3.0.0: resolution: {integrity: sha512-l1UyWJ6Eg1VPU7Hm/9tt0zKtReJQNOA4+iDMAxTyZNWnJnFlbS/7zhiel/rogTLQ2vMYwDzSJa4BiVNqGlqIMA==} @@ -1835,6 +1710,9 @@ packages: remark-rehype@11.1.0: resolution: {integrity: sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==} + remark-rehype@11.1.1: + resolution: {integrity: sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==} + remark-smartypants@3.0.2: resolution: {integrity: sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==} engines: {node: '>=16.0.0'} @@ -1842,6 +1720,9 @@ packages: remark-stringify@11.0.0: resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + request-light@0.5.8: + resolution: {integrity: sha512-3Zjgh+8b5fhRJBQZoy+zbVKpAQGLyka0MPgW3zruTF4dFFJ8Fqcfu9YsAvi/rvdcaTeWG3MkbZv4WKxAn/84Lg==} + request-light@0.7.0: resolution: {integrity: sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q==} @@ -1849,9 +1730,9 @@ packages: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} - restore-cursor@4.0.0: - resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} retext-latin@4.0.0: resolution: {integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==} @@ -1869,64 +1750,33 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rollup@4.18.1: - resolution: {integrity: sha512-Elx2UT8lzxxOXMpy5HWQGZqkrQOtrVDDa/bm9l10+U4rQnVzbL/LgZ4NOM1MPIDyHk69W4InuYDF5dzRh4Kw1A==} + rollup@4.28.1: + resolution: {integrity: sha512-61fXYl/qNVinKmGSTHAZ6Yy8I3YIJC/r2m9feHo6SwVAVcLT5MPwOUFe7EuURA/4m0NR8lXG4BBXuo/IZEsjMg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - sax@1.4.1: resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} - section-matter@1.0.0: - resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} - engines: {node: '>=4'} - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - semver@7.6.2: resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} engines: {node: '>=10'} hasBin: true - sharp@0.32.6: - resolution: {integrity: sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==} - engines: {node: '>=14.15.0'} - - sharp@0.33.4: - resolution: {integrity: sha512-7i/dt5kGl7qR4gwPRD2biwD2/SvBn3O04J77XKFgL2OnZtQw+AG9wnuS/csmu80nPRHLYE9E41fyEiG8nhH6/Q==} - engines: {libvips: '>=8.15.2', node: ^18.17.0 || ^20.3.0 || >=21.0.0} - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - shiki@1.10.3: - resolution: {integrity: sha512-eneCLncGuvPdTutJuLyUGS8QNPAVFO5Trvld2wgEq1e002mwctAhJKeMGWtWVXOIEzmlcLRqcgPSorR6AVzOmQ==} - - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true - simple-concat@1.0.1: - resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + sharp@0.33.5: + resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - simple-get@4.0.1: - resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} + shiki@1.24.2: + resolution: {integrity: sha512-TR1fi6mkRrzW+SKT5G6uKuc32Dj2EEa7Kj0k8kGqiBINb+C1TiflVOiT9ta6GqOJtC4fraxO5SLUaKBcSY38Fg==} simple-swizzle@0.2.2: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} @@ -1943,6 +1793,10 @@ packages: resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + source-map@0.7.4: resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} engines: {node: '>= 8'} @@ -1953,31 +1807,17 @@ packages: sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - stdin-discarder@0.2.2: - resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} - engines: {node: '>=18'} - stream-replace-string@2.0.0: resolution: {integrity: sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==} - streamx@2.18.0: - resolution: {integrity: sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==} - string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} - string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - string-width@7.2.0: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} - string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - stringify-entities@4.0.4: resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} @@ -1989,51 +1829,18 @@ packages: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} - strip-bom-string@1.0.0: - resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} - engines: {node: '>=0.10.0'} - strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} - strip-final-newline@3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} - engines: {node: '>=12'} - - strip-json-comments@2.0.1: - resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} - engines: {node: '>=0.10.0'} - style-to-object@0.4.4: resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} style-to-object@1.0.6: resolution: {integrity: sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA==} - supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - - tar-fs@2.1.1: - resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} - - tar-fs@3.0.6: - resolution: {integrity: sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==} - - tar-stream@2.2.0: - resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} - engines: {node: '>=6'} - - tar-stream@3.1.7: - resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} - - text-decoder@1.1.1: - resolution: {integrity: sha512-8zll7REEv4GDD3x4/0pW+ppIxSNs7H1J10IKFZsuOMscumCdM2a+toDGLPA3T+1+fLBql4zbt5z83GEQGGV5VA==} - - to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} + tinyexec@0.3.1: + resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==} to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} @@ -2045,8 +1852,8 @@ packages: trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - tsconfck@3.1.1: - resolution: {integrity: sha512-00eoI6WY57SvZEVjm13stEVE90VkEdJAFGgpFLTsZbJyW/LwFQ7uQxJHWpZ2hzSWgCPKc9AnBnNP+0X7o3hAmQ==} + tsconfck@3.1.4: + resolution: {integrity: sha512-kdqWFGVJqe+KGYvlSO9NIaWn9jT1Ny4oKVzAJsKii5eoE9snzTJzL4+MMVOMn+fikWGFmKEylcXL710V/kIPJQ==} engines: {node: ^18 || >=20} hasBin: true peerDependencies: @@ -2055,15 +1862,12 @@ packages: typescript: optional: true - tslib@2.6.3: - resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} - - tunnel-agent@0.6.0: - resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - type-fest@2.19.0: - resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} - engines: {node: '>=12.20'} + type-fest@4.30.1: + resolution: {integrity: sha512-ojFL7eDMX2NF0xMbDwPZJ8sb7ckqtlAi1GsmgsFXvErT9kFTk1r0DuQKvrCh73M6D4nngeHJmvogF9OluXs7Hw==} + engines: {node: '>=16'} typesafe-path@0.2.2: resolution: {integrity: sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA==} @@ -2071,11 +1875,14 @@ packages: typescript-auto-import-cache@0.3.3: resolution: {integrity: sha512-ojEC7+Ci1ij9eE6hp8Jl9VUNnsEKzztktP5gtYNRMrTmfXVwA1PITYYAkpxCvvupdSYa/Re51B6KMcv1CTZEUA==} - typescript@5.5.3: - resolution: {integrity: sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==} + typescript@5.7.2: + resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} engines: {node: '>=14.17'} hasBin: true + ultrahtml@1.5.3: + resolution: {integrity: sha512-GykOvZwgDWZlTQMtp5jrD4BVL+gNn2NVlVafjcFUJ7taY20tqYdwdoWBFy6GBJsNTZe1GkGPkSl5knQAjtgceg==} + unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} @@ -2109,12 +1916,6 @@ packages: unist-util-visit@5.0.0: resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} - update-browserslist-db@1.1.0: - resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -2124,73 +1925,85 @@ packages: vfile-message@4.0.2: resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} - vfile@6.0.1: - resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==} + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vite@5.3.3: - resolution: {integrity: sha512-NPQdeCU0Dv2z5fu+ULotpuq5yfCS1BzKUIPhNbP3YBfAMGJXbt2nS+sbTFu+qchaqWTD+H3JK++nRwr6XIcp6A==} - engines: {node: ^18.0.0 || >=20.0.0} + vite@6.0.3: + resolution: {integrity: sha512-Cmuo5P0ENTN6HxLSo6IHsjCLn/81Vgrp81oaiFFMRa8gGDj5xEjIcEpf2ZymZtZR8oU0P2JX5WuUp/rlXcHkAw==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' less: '*' lightningcss: ^1.21.0 sass: '*' + sass-embedded: '*' stylus: '*' sugarss: '*' - terser: ^5.4.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 peerDependenciesMeta: '@types/node': optional: true + jiti: + optional: true less: optional: true lightningcss: optional: true sass: optional: true + sass-embedded: + optional: true stylus: optional: true sugarss: optional: true terser: optional: true + tsx: + optional: true + yaml: + optional: true - vitefu@0.2.5: - resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} + vitefu@1.0.4: + resolution: {integrity: sha512-y6zEE3PQf6uu/Mt6DTJ9ih+kyJLr4XcSgHR2zUkM8SWDhuixEJxfJ6CZGMHh1Ec3vPLoEA0IHU5oWzVqw8ulow==} peerDependencies: - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 peerDependenciesMeta: vite: optional: true - volar-service-css@0.0.59: - resolution: {integrity: sha512-gLNjJnECbalPvQB7qeJjhkDN8sR5M3ItbVYjnyio61aHaWptIiXm/HfDahcQ2ApwmvWidkMWWegjGq5L0BENDA==} + volar-service-css@0.0.62: + resolution: {integrity: sha512-JwNyKsH3F8PuzZYuqPf+2e+4CTU8YoyUHEHVnoXNlrLe7wy9U3biomZ56llN69Ris7TTy/+DEX41yVxQpM4qvg==} peerDependencies: - '@volar/language-service': ~2.4.0-alpha.12 + '@volar/language-service': ~2.4.0 peerDependenciesMeta: '@volar/language-service': optional: true - volar-service-emmet@0.0.59: - resolution: {integrity: sha512-6EynHcuMwMBETpK29TbZvIMmvzdVG+Tkokk9VWfZeI+SwDptk2tgdhEqiXXvIkqYNgbuu73Itp66lpH76cAU+Q==} + volar-service-emmet@0.0.62: + resolution: {integrity: sha512-U4dxWDBWz7Pi4plpbXf4J4Z/ss6kBO3TYrACxWNsE29abu75QzVS0paxDDhI6bhqpbDFXlpsDhZ9aXVFpnfGRQ==} peerDependencies: - '@volar/language-service': ~2.4.0-alpha.12 + '@volar/language-service': ~2.4.0 peerDependenciesMeta: '@volar/language-service': optional: true - volar-service-html@0.0.59: - resolution: {integrity: sha512-hEXOsYpILDlITZxnqRLV9OepVWD63GZBsyjMxszwdzlxvGZjzbGcBBinJGGJRwFIV8djdJwnt91bkdg1V5tj6Q==} + volar-service-html@0.0.62: + resolution: {integrity: sha512-Zw01aJsZRh4GTGUjveyfEzEqpULQUdQH79KNEiKVYHZyuGtdBRYCHlrus1sueSNMxwwkuF5WnOHfvBzafs8yyQ==} peerDependencies: - '@volar/language-service': ~2.4.0-alpha.12 + '@volar/language-service': ~2.4.0 peerDependenciesMeta: '@volar/language-service': optional: true - volar-service-prettier@0.0.59: - resolution: {integrity: sha512-FmBR4lsgFRGR3V0LnxZZal0WqdOJjuLL6mQSj4p57M15APtQwuocG/FiF+ONGFnwRXMOIBDBTCARdth+TKgL3A==} + volar-service-prettier@0.0.62: + resolution: {integrity: sha512-h2yk1RqRTE+vkYZaI9KYuwpDfOQRrTEMvoHol0yW4GFKc75wWQRrb5n/5abDrzMPrkQbSip8JH2AXbvrRtYh4w==} peerDependencies: - '@volar/language-service': ~2.4.0-alpha.12 + '@volar/language-service': ~2.4.0 prettier: ^2.2 || ^3.0 peerDependenciesMeta: '@volar/language-service': @@ -2198,18 +2011,26 @@ packages: prettier: optional: true - volar-service-typescript-twoslash-queries@0.0.59: - resolution: {integrity: sha512-skm8e6yhCIkqLwJB6S9MqT5lO9LNFuMD3dYxKpmOZs1CKbXmCZZTmLfEaD5VkJae1xdleEDZFFTHl2O5HLjOGQ==} + volar-service-typescript-twoslash-queries@0.0.62: + resolution: {integrity: sha512-KxFt4zydyJYYI0kFAcWPTh4u0Ha36TASPZkAnNY784GtgajerUqM80nX/W1d0wVhmcOFfAxkVsf/Ed+tiYU7ng==} peerDependencies: - '@volar/language-service': ~2.4.0-alpha.12 + '@volar/language-service': ~2.4.0 peerDependenciesMeta: '@volar/language-service': optional: true - volar-service-typescript@0.0.59: - resolution: {integrity: sha512-VCOpfiu+lUo5lapWLB5L5vmQGtwzmNWn5MueV915eku7blpphmE+Z7hCNcL1NApn7AetXWhiblv8ZhmUx/dGIA==} + volar-service-typescript@0.0.62: + resolution: {integrity: sha512-p7MPi71q7KOsH0eAbZwPBiKPp9B2+qrdHAd6VY5oTo9BUXatsOAdakTm9Yf0DUj6uWBAaOT01BSeVOPwucMV1g==} peerDependencies: - '@volar/language-service': ~2.4.0-alpha.12 + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + volar-service-yaml@0.0.62: + resolution: {integrity: sha512-k7gvv7sk3wa+nGll3MaSKyjwQsJjIGCHFjVkl3wjaSP2nouKyn9aokGmqjrl39mi88Oy49giog2GkZH526wjig==} + peerDependencies: + '@volar/language-service': ~2.4.0 peerDependenciesMeta: '@volar/language-service': optional: true @@ -2220,19 +2041,37 @@ packages: vscode-html-languageservice@5.3.0: resolution: {integrity: sha512-C4Z3KsP5Ih+fjHpiBc5jxmvCl+4iEwvXegIrzu2F5pktbWvQaBT3YkVPk8N+QlSSMk8oCG6PKtZ/Sq2YHb5e8g==} + vscode-json-languageservice@4.1.8: + resolution: {integrity: sha512-0vSpg6Xd9hfV+eZAaYN63xVVMOTmJ4GgHxXnkLCh+9RsQBkWKIghzLhW2B9ebfG+LQQg8uLtsQ2aUKjTgE+QOg==} + engines: {npm: '>=7.0.0'} + + vscode-jsonrpc@6.0.0: + resolution: {integrity: sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==} + engines: {node: '>=8.0.0 || >=10.0.0'} + vscode-jsonrpc@8.2.0: resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==} engines: {node: '>=14.0.0'} + vscode-languageserver-protocol@3.16.0: + resolution: {integrity: sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==} + vscode-languageserver-protocol@3.17.5: resolution: {integrity: sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==} vscode-languageserver-textdocument@1.0.11: resolution: {integrity: sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==} + vscode-languageserver-types@3.16.0: + resolution: {integrity: sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==} + vscode-languageserver-types@3.17.5: resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==} + vscode-languageserver@7.0.0: + resolution: {integrity: sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==} + hasBin: true + vscode-languageserver@9.0.1: resolution: {integrity: sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==} hasBin: true @@ -2253,36 +2092,41 @@ packages: resolution: {integrity: sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==} engines: {node: '>=4'} - which-pm@2.2.0: - resolution: {integrity: sha512-MOiaDbA5ZZgUjkeMWM5EkJp4loW5ZRoa5bc3/aeMox/PJelMhE6t7S/mLuiY43DBupyxH+S0U1bTui9kWUlmsw==} - engines: {node: '>=8.15'} - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true + which-pm@3.0.0: + resolution: {integrity: sha512-ysVYmw6+ZBhx3+ZkcPwRuJi38ZOTLJJ33PSHaitLxSKUMsh0LkKd0nC69zZCwt5D+AYUcMK2hhw4yWny20vSGg==} + engines: {node: '>=18.12'} - widest-line@4.0.1: - resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} - engines: {node: '>=12'} + widest-line@5.0.0: + resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} + engines: {node: '>=18'} wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} + wrap-ansi@9.0.0: + resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} + engines: {node: '>=18'} - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + xxhash-wasm@1.1.0: + resolution: {integrity: sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==} y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yaml-language-server@1.15.0: + resolution: {integrity: sha512-N47AqBDCMQmh6mBLmI6oqxryHRzi33aPFPsJhYy3VTUGCdLHYjGh4FZzpUjRlphaADBBkDmnkM/++KNIOHi5Rw==} + hasBin: true + + yaml@2.2.2: + resolution: {integrity: sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==} + engines: {node: '>= 14'} + + yaml@2.6.1: + resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==} + engines: {node: '>= 14'} + hasBin: true yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} @@ -2292,18 +2136,28 @@ packages: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - yocto-queue@1.1.1: resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} engines: {node: '>=12.20'} - zod-to-json-schema@3.23.1: - resolution: {integrity: sha512-oT9INvydob1XV0v1d2IadrR74rLtDInLvDFfAa1CG0Pmg/vxATk7I2gSelfj271mbzeM4Da0uuDQE/Nkj3DWNw==} + yocto-spinner@0.1.2: + resolution: {integrity: sha512-VfmLIh/ZSZOJnVRQZc/dvpPP90lWL4G0bmxQMP0+U/2vKBA8GSpcBuWv17y7F+CZItRuO97HN1wdbb4p10uhOg==} + engines: {node: '>=18.19'} + + yoctocolors@2.1.1: + resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} + engines: {node: '>=18'} + + zod-to-json-schema@3.24.1: + resolution: {integrity: sha512-3h08nf3Vw3Wl3PK+q3ow/lIil81IT2Oa7YpQyUUDsEWbXveMesdfK1xBd2RhCkynwZndAxixji/7SYJJowr62w==} + peerDependencies: + zod: ^3.24.1 + + zod-to-ts@1.2.0: + resolution: {integrity: sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA==} peerDependencies: - zod: ^3.23.3 + typescript: ^4.9.4 || ^5.0.2 + zod: ^3 zod@3.23.8: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} @@ -2313,94 +2167,88 @@ packages: snapshots: - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - - '@astrojs/check@0.8.1(typescript@5.5.3)': + '@astrojs/check@0.9.4(typescript@5.7.2)': dependencies: - '@astrojs/language-server': 2.11.1(typescript@5.5.3) - chokidar: 3.6.0 - fast-glob: 3.3.2 + '@astrojs/language-server': 2.15.4(typescript@5.7.2) + chokidar: 4.0.1 kleur: 4.1.5 - typescript: 5.5.3 + typescript: 5.7.2 yargs: 17.7.2 transitivePeerDependencies: - prettier - prettier-plugin-astro - '@astrojs/compiler@2.8.2': {} + '@astrojs/compiler@2.10.3': {} - '@astrojs/internal-helpers@0.4.1': {} + '@astrojs/internal-helpers@0.4.2': {} - '@astrojs/language-server@2.11.1(typescript@5.5.3)': + '@astrojs/language-server@2.15.4(typescript@5.7.2)': dependencies: - '@astrojs/compiler': 2.8.2 + '@astrojs/compiler': 2.10.3 + '@astrojs/yaml2ts': 0.2.2 '@jridgewell/sourcemap-codec': 1.5.0 - '@volar/kit': 2.4.0-alpha.15(typescript@5.5.3) - '@volar/language-core': 2.4.0-alpha.15 - '@volar/language-server': 2.4.0-alpha.15 - '@volar/language-service': 2.4.0-alpha.15 - '@volar/typescript': 2.4.0-alpha.15 + '@volar/kit': 2.4.11(typescript@5.7.2) + '@volar/language-core': 2.4.11 + '@volar/language-server': 2.4.11 + '@volar/language-service': 2.4.11 fast-glob: 3.3.2 muggle-string: 0.4.1 - volar-service-css: 0.0.59(@volar/language-service@2.4.0-alpha.15) - volar-service-emmet: 0.0.59(@volar/language-service@2.4.0-alpha.15) - volar-service-html: 0.0.59(@volar/language-service@2.4.0-alpha.15) - volar-service-prettier: 0.0.59(@volar/language-service@2.4.0-alpha.15) - volar-service-typescript: 0.0.59(@volar/language-service@2.4.0-alpha.15) - volar-service-typescript-twoslash-queries: 0.0.59(@volar/language-service@2.4.0-alpha.15) + volar-service-css: 0.0.62(@volar/language-service@2.4.11) + volar-service-emmet: 0.0.62(@volar/language-service@2.4.11) + volar-service-html: 0.0.62(@volar/language-service@2.4.11) + volar-service-prettier: 0.0.62(@volar/language-service@2.4.11) + volar-service-typescript: 0.0.62(@volar/language-service@2.4.11) + volar-service-typescript-twoslash-queries: 0.0.62(@volar/language-service@2.4.11) + volar-service-yaml: 0.0.62(@volar/language-service@2.4.11) vscode-html-languageservice: 5.3.0 vscode-uri: 3.0.8 transitivePeerDependencies: - typescript - '@astrojs/markdown-remark@5.1.1': + '@astrojs/markdown-remark@6.0.1': dependencies: - '@astrojs/prism': 3.1.0 + '@astrojs/prism': 3.2.0 github-slugger: 2.0.0 - hast-util-from-html: 2.0.1 + hast-util-from-html: 2.0.3 hast-util-to-text: 4.0.2 import-meta-resolve: 4.1.0 + js-yaml: 4.1.0 mdast-util-definitions: 6.0.0 rehype-raw: 7.0.0 - rehype-stringify: 10.0.0 + rehype-stringify: 10.0.1 remark-gfm: 4.0.0 remark-parse: 11.0.0 - remark-rehype: 11.1.0 + remark-rehype: 11.1.1 remark-smartypants: 3.0.2 - shiki: 1.10.3 + shiki: 1.24.2 unified: 11.0.5 unist-util-remove-position: 5.0.0 unist-util-visit: 5.0.0 unist-util-visit-parents: 6.0.1 - vfile: 6.0.1 + vfile: 6.0.3 transitivePeerDependencies: - supports-color - '@astrojs/mdx@3.1.2(astro@4.11.5(typescript@5.5.3))': + '@astrojs/mdx@4.0.2(astro@5.0.5(rollup@4.28.1)(typescript@5.7.2)(yaml@2.6.1))': dependencies: - '@astrojs/markdown-remark': 5.1.1 - '@mdx-js/mdx': 3.0.1 - acorn: 8.12.1 - astro: 4.11.5(typescript@5.5.3) + '@astrojs/markdown-remark': 6.0.1 + '@mdx-js/mdx': 3.1.0(acorn@8.14.0) + acorn: 8.14.0 + astro: 5.0.5(rollup@4.28.1)(typescript@5.7.2)(yaml@2.6.1) es-module-lexer: 1.5.4 estree-util-visit: 2.0.0 - github-slugger: 2.0.0 - gray-matter: 4.0.3 - hast-util-to-html: 9.0.1 + hast-util-to-html: 9.0.4 kleur: 4.1.5 rehype-raw: 7.0.0 remark-gfm: 4.0.0 remark-smartypants: 3.0.2 source-map: 0.7.4 unist-util-visit: 5.0.0 - vfile: 6.0.1 + vfile: 6.0.3 transitivePeerDependencies: - supports-color - '@astrojs/prism@3.1.0': + '@astrojs/prism@3.2.0': dependencies: prismjs: 1.29.0 @@ -2410,198 +2258,68 @@ snapshots: stream-replace-string: 2.0.0 zod: 3.23.8 - '@astrojs/starlight@0.25.1(astro@4.11.5(typescript@5.5.3))': + '@astrojs/starlight@0.30.1(astro@5.0.5(rollup@4.28.1)(typescript@5.7.2)(yaml@2.6.1))': dependencies: - '@astrojs/mdx': 3.1.2(astro@4.11.5(typescript@5.5.3)) + '@astrojs/mdx': 4.0.2(astro@5.0.5(rollup@4.28.1)(typescript@5.7.2)(yaml@2.6.1)) '@astrojs/sitemap': 3.1.6 '@pagefind/default-ui': 1.1.0 '@types/hast': 3.0.4 + '@types/js-yaml': 4.0.9 '@types/mdast': 4.0.4 - astro: 4.11.5(typescript@5.5.3) - astro-expressive-code: 0.35.3(astro@4.11.5(typescript@5.5.3)) + astro: 5.0.5(rollup@4.28.1)(typescript@5.7.2)(yaml@2.6.1) + astro-expressive-code: 0.38.3(astro@5.0.5(rollup@4.28.1)(typescript@5.7.2)(yaml@2.6.1)) bcp-47: 2.1.0 hast-util-from-html: 2.0.1 hast-util-select: 6.0.2 hast-util-to-string: 3.0.0 hastscript: 9.0.0 + i18next: 23.16.8 + js-yaml: 4.1.0 mdast-util-directive: 3.0.0 mdast-util-to-markdown: 2.1.0 + mdast-util-to-string: 4.0.0 pagefind: 1.1.0 rehype: 13.0.1 rehype-format: 5.0.0 remark-directive: 3.0.0 unified: 11.0.5 unist-util-visit: 5.0.0 - vfile: 6.0.1 + vfile: 6.0.3 transitivePeerDependencies: - supports-color - '@astrojs/telemetry@3.1.0': + '@astrojs/telemetry@3.2.0': dependencies: - ci-info: 4.0.0 - debug: 4.3.5 + ci-info: 4.1.0 + debug: 4.4.0 dlv: 1.1.3 - dset: 3.1.3 + dset: 3.1.4 is-docker: 3.0.0 is-wsl: 3.1.0 which-pm-runs: 1.1.0 transitivePeerDependencies: - supports-color - '@babel/code-frame@7.24.7': - dependencies: - '@babel/highlight': 7.24.7 - picocolors: 1.0.1 - - '@babel/compat-data@7.24.8': {} - - '@babel/core@7.24.8': - dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.8 - '@babel/helper-compilation-targets': 7.24.8 - '@babel/helper-module-transforms': 7.24.8(@babel/core@7.24.8) - '@babel/helpers': 7.24.8 - '@babel/parser': 7.24.8 - '@babel/template': 7.24.7 - '@babel/traverse': 7.24.8 - '@babel/types': 7.24.8 - convert-source-map: 2.0.0 - debug: 4.3.5 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/generator@7.24.8': - dependencies: - '@babel/types': 7.24.8 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 - - '@babel/helper-annotate-as-pure@7.24.7': - dependencies: - '@babel/types': 7.24.8 - - '@babel/helper-compilation-targets@7.24.8': - dependencies: - '@babel/compat-data': 7.24.8 - '@babel/helper-validator-option': 7.24.8 - browserslist: 4.23.2 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-environment-visitor@7.24.7': - dependencies: - '@babel/types': 7.24.8 - - '@babel/helper-function-name@7.24.7': - dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.8 - - '@babel/helper-hoist-variables@7.24.7': - dependencies: - '@babel/types': 7.24.8 - - '@babel/helper-module-imports@7.24.7': - dependencies: - '@babel/traverse': 7.24.8 - '@babel/types': 7.24.8 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.24.8(@babel/core@7.24.8)': - dependencies: - '@babel/core': 7.24.8 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-simple-access': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-plugin-utils@7.24.8': {} - - '@babel/helper-simple-access@7.24.7': - dependencies: - '@babel/traverse': 7.24.8 - '@babel/types': 7.24.8 - transitivePeerDependencies: - - supports-color - - '@babel/helper-split-export-declaration@7.24.7': - dependencies: - '@babel/types': 7.24.8 - - '@babel/helper-string-parser@7.24.8': {} - - '@babel/helper-validator-identifier@7.24.7': {} - - '@babel/helper-validator-option@7.24.8': {} - - '@babel/helpers@7.24.8': - dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.8 - - '@babel/highlight@7.24.7': + '@astrojs/yaml2ts@0.2.2': dependencies: - '@babel/helper-validator-identifier': 7.24.7 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.0.1 - - '@babel/parser@7.24.8': - dependencies: - '@babel/types': 7.24.8 + yaml: 2.6.1 - '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.24.8)': - dependencies: - '@babel/core': 7.24.8 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-string-parser@7.25.9': {} - '@babel/plugin-transform-react-jsx@7.24.7(@babel/core@7.24.8)': - dependencies: - '@babel/core': 7.24.8 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.8) - '@babel/types': 7.24.8 - transitivePeerDependencies: - - supports-color + '@babel/helper-validator-identifier@7.25.9': {} - '@babel/template@7.24.7': + '@babel/parser@7.26.3': dependencies: - '@babel/code-frame': 7.24.7 - '@babel/parser': 7.24.8 - '@babel/types': 7.24.8 + '@babel/types': 7.26.3 - '@babel/traverse@7.24.8': + '@babel/runtime@7.26.0': dependencies: - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.8 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/parser': 7.24.8 - '@babel/types': 7.24.8 - debug: 4.3.5 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color + regenerator-runtime: 0.14.1 - '@babel/types@7.24.8': + '@babel/types@7.26.3': dependencies: - '@babel/helper-string-parser': 7.24.8 - '@babel/helper-validator-identifier': 7.24.7 - to-fast-properties: 2.0.0 + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 '@ctrl/tinycolor@4.1.0': {} @@ -2628,81 +2346,153 @@ snapshots: '@emmetio/stream-reader@2.2.0': {} - '@emnapi/runtime@1.2.0': + '@emnapi/runtime@1.3.1': dependencies: - tslib: 2.6.3 + tslib: 2.8.1 optional: true '@esbuild/aix-ppc64@0.21.5': optional: true + '@esbuild/aix-ppc64@0.24.0': + optional: true + '@esbuild/android-arm64@0.21.5': optional: true + '@esbuild/android-arm64@0.24.0': + optional: true + '@esbuild/android-arm@0.21.5': optional: true + '@esbuild/android-arm@0.24.0': + optional: true + '@esbuild/android-x64@0.21.5': optional: true + '@esbuild/android-x64@0.24.0': + optional: true + '@esbuild/darwin-arm64@0.21.5': optional: true + '@esbuild/darwin-arm64@0.24.0': + optional: true + '@esbuild/darwin-x64@0.21.5': optional: true + '@esbuild/darwin-x64@0.24.0': + optional: true + '@esbuild/freebsd-arm64@0.21.5': optional: true + '@esbuild/freebsd-arm64@0.24.0': + optional: true + '@esbuild/freebsd-x64@0.21.5': optional: true + '@esbuild/freebsd-x64@0.24.0': + optional: true + '@esbuild/linux-arm64@0.21.5': optional: true + '@esbuild/linux-arm64@0.24.0': + optional: true + '@esbuild/linux-arm@0.21.5': optional: true + '@esbuild/linux-arm@0.24.0': + optional: true + '@esbuild/linux-ia32@0.21.5': optional: true + '@esbuild/linux-ia32@0.24.0': + optional: true + '@esbuild/linux-loong64@0.21.5': optional: true + '@esbuild/linux-loong64@0.24.0': + optional: true + '@esbuild/linux-mips64el@0.21.5': optional: true + '@esbuild/linux-mips64el@0.24.0': + optional: true + '@esbuild/linux-ppc64@0.21.5': optional: true + '@esbuild/linux-ppc64@0.24.0': + optional: true + '@esbuild/linux-riscv64@0.21.5': optional: true + '@esbuild/linux-riscv64@0.24.0': + optional: true + '@esbuild/linux-s390x@0.21.5': optional: true + '@esbuild/linux-s390x@0.24.0': + optional: true + '@esbuild/linux-x64@0.21.5': optional: true + '@esbuild/linux-x64@0.24.0': + optional: true + '@esbuild/netbsd-x64@0.21.5': optional: true + '@esbuild/netbsd-x64@0.24.0': + optional: true + + '@esbuild/openbsd-arm64@0.24.0': + optional: true + '@esbuild/openbsd-x64@0.21.5': optional: true + '@esbuild/openbsd-x64@0.24.0': + optional: true + '@esbuild/sunos-x64@0.21.5': optional: true + '@esbuild/sunos-x64@0.24.0': + optional: true + '@esbuild/win32-arm64@0.21.5': optional: true + '@esbuild/win32-arm64@0.24.0': + optional: true + '@esbuild/win32-ia32@0.21.5': optional: true + '@esbuild/win32-ia32@0.24.0': + optional: true + '@esbuild/win32-x64@0.21.5': optional: true - '@expressive-code/core@0.35.3': + '@esbuild/win32-x64@0.24.0': + optional: true + + '@expressive-code/core@0.38.3': dependencies: '@ctrl/tinycolor': 4.1.0 hast-util-select: 6.0.2 @@ -2714,112 +2504,97 @@ snapshots: unist-util-visit: 5.0.0 unist-util-visit-parents: 6.0.1 - '@expressive-code/plugin-frames@0.35.3': + '@expressive-code/plugin-frames@0.38.3': dependencies: - '@expressive-code/core': 0.35.3 + '@expressive-code/core': 0.38.3 - '@expressive-code/plugin-shiki@0.35.3': + '@expressive-code/plugin-shiki@0.38.3': dependencies: - '@expressive-code/core': 0.35.3 - shiki: 1.10.3 + '@expressive-code/core': 0.38.3 + shiki: 1.24.2 - '@expressive-code/plugin-text-markers@0.35.3': + '@expressive-code/plugin-text-markers@0.38.3': dependencies: - '@expressive-code/core': 0.35.3 + '@expressive-code/core': 0.38.3 - '@img/sharp-darwin-arm64@0.33.4': + '@img/sharp-darwin-arm64@0.33.5': optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.0.2 + '@img/sharp-libvips-darwin-arm64': 1.0.4 optional: true - '@img/sharp-darwin-x64@0.33.4': + '@img/sharp-darwin-x64@0.33.5': optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.0.2 + '@img/sharp-libvips-darwin-x64': 1.0.4 optional: true - '@img/sharp-libvips-darwin-arm64@1.0.2': + '@img/sharp-libvips-darwin-arm64@1.0.4': optional: true - '@img/sharp-libvips-darwin-x64@1.0.2': + '@img/sharp-libvips-darwin-x64@1.0.4': optional: true - '@img/sharp-libvips-linux-arm64@1.0.2': + '@img/sharp-libvips-linux-arm64@1.0.4': optional: true - '@img/sharp-libvips-linux-arm@1.0.2': + '@img/sharp-libvips-linux-arm@1.0.5': optional: true - '@img/sharp-libvips-linux-s390x@1.0.2': + '@img/sharp-libvips-linux-s390x@1.0.4': optional: true - '@img/sharp-libvips-linux-x64@1.0.2': + '@img/sharp-libvips-linux-x64@1.0.4': optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.0.2': + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': optional: true - '@img/sharp-libvips-linuxmusl-x64@1.0.2': + '@img/sharp-libvips-linuxmusl-x64@1.0.4': optional: true - '@img/sharp-linux-arm64@0.33.4': + '@img/sharp-linux-arm64@0.33.5': optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.0.2 + '@img/sharp-libvips-linux-arm64': 1.0.4 optional: true - '@img/sharp-linux-arm@0.33.4': + '@img/sharp-linux-arm@0.33.5': optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.0.2 + '@img/sharp-libvips-linux-arm': 1.0.5 optional: true - '@img/sharp-linux-s390x@0.33.4': + '@img/sharp-linux-s390x@0.33.5': optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.0.2 + '@img/sharp-libvips-linux-s390x': 1.0.4 optional: true - '@img/sharp-linux-x64@0.33.4': + '@img/sharp-linux-x64@0.33.5': optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.0.2 + '@img/sharp-libvips-linux-x64': 1.0.4 optional: true - '@img/sharp-linuxmusl-arm64@0.33.4': + '@img/sharp-linuxmusl-arm64@0.33.5': optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.0.2 + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 optional: true - '@img/sharp-linuxmusl-x64@0.33.4': + '@img/sharp-linuxmusl-x64@0.33.5': optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.0.2 + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 optional: true - '@img/sharp-wasm32@0.33.4': + '@img/sharp-wasm32@0.33.5': dependencies: - '@emnapi/runtime': 1.2.0 + '@emnapi/runtime': 1.3.1 optional: true - '@img/sharp-win32-ia32@0.33.4': + '@img/sharp-win32-ia32@0.33.5': optional: true - '@img/sharp-win32-x64@0.33.4': + '@img/sharp-win32-x64@0.33.5': optional: true - '@jridgewell/gen-mapping@0.3.5': - dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/set-array@1.2.1': {} - '@jridgewell/sourcemap-codec@1.5.0': {} - '@jridgewell/trace-mapping@0.3.25': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - - '@mdx-js/mdx@3.0.1': + '@mdx-js/mdx@3.1.0(acorn@8.14.0)': dependencies: '@types/estree': 1.0.5 '@types/estree-jsx': 1.0.5 @@ -2827,14 +2602,15 @@ snapshots: '@types/mdx': 2.0.13 collapse-white-space: 2.1.0 devlop: 1.1.0 - estree-util-build-jsx: 3.0.1 estree-util-is-identifier-name: 3.0.0 - estree-util-to-js: 2.0.0 + estree-util-scope: 1.0.0 estree-walker: 3.0.3 - hast-util-to-estree: 3.1.0 hast-util-to-jsx-runtime: 2.3.0 markdown-extensions: 2.0.0 - periscopic: 3.1.0 + recma-build-jsx: 1.0.0 + recma-jsx: 1.0.0(acorn@8.14.0) + recma-stringify: 1.0.0 + rehype-recma: 1.0.0 remark-mdx: 3.0.1 remark-parse: 11.0.0 remark-rehype: 11.1.0 @@ -2843,8 +2619,9 @@ snapshots: unist-util-position-from-estree: 2.0.0 unist-util-stringify-position: 4.0.0 unist-util-visit: 5.0.0 - vfile: 6.0.1 + vfile: 6.0.3 transitivePeerDependencies: + - acorn - supports-color '@nodelib/fs.scandir@2.1.5': @@ -2859,6 +2636,8 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 + '@oslojs/encoding@1.1.0': {} + '@pagefind/darwin-arm64@1.1.0': optional: true @@ -2876,82 +2655,101 @@ snapshots: '@pagefind/windows-x64@1.1.0': optional: true - '@rollup/rollup-android-arm-eabi@4.18.1': + '@rollup/pluginutils@5.1.3(rollup@4.28.1)': + dependencies: + '@types/estree': 1.0.5 + estree-walker: 2.0.2 + picomatch: 4.0.2 + optionalDependencies: + rollup: 4.28.1 + + '@rollup/rollup-android-arm-eabi@4.28.1': + optional: true + + '@rollup/rollup-android-arm64@4.28.1': + optional: true + + '@rollup/rollup-darwin-arm64@4.28.1': + optional: true + + '@rollup/rollup-darwin-x64@4.28.1': optional: true - '@rollup/rollup-android-arm64@4.18.1': + '@rollup/rollup-freebsd-arm64@4.28.1': optional: true - '@rollup/rollup-darwin-arm64@4.18.1': + '@rollup/rollup-freebsd-x64@4.28.1': optional: true - '@rollup/rollup-darwin-x64@4.18.1': + '@rollup/rollup-linux-arm-gnueabihf@4.28.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.18.1': + '@rollup/rollup-linux-arm-musleabihf@4.28.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.18.1': + '@rollup/rollup-linux-arm64-gnu@4.28.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.18.1': + '@rollup/rollup-linux-arm64-musl@4.28.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.18.1': + '@rollup/rollup-linux-loongarch64-gnu@4.28.1': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.18.1': + '@rollup/rollup-linux-powerpc64le-gnu@4.28.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.18.1': + '@rollup/rollup-linux-riscv64-gnu@4.28.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.18.1': + '@rollup/rollup-linux-s390x-gnu@4.28.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.18.1': + '@rollup/rollup-linux-x64-gnu@4.28.1': optional: true - '@rollup/rollup-linux-x64-musl@4.18.1': + '@rollup/rollup-linux-x64-musl@4.28.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.18.1': + '@rollup/rollup-win32-arm64-msvc@4.28.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.18.1': + '@rollup/rollup-win32-ia32-msvc@4.28.1': optional: true - '@rollup/rollup-win32-x64-msvc@4.18.1': + '@rollup/rollup-win32-x64-msvc@4.28.1': optional: true - '@shikijs/core@1.10.3': + '@shikijs/core@1.24.2': dependencies: + '@shikijs/engine-javascript': 1.24.2 + '@shikijs/engine-oniguruma': 1.24.2 + '@shikijs/types': 1.24.2 + '@shikijs/vscode-textmate': 9.3.1 '@types/hast': 3.0.4 + hast-util-to-html: 9.0.4 - '@types/acorn@4.0.6': + '@shikijs/engine-javascript@1.24.2': dependencies: - '@types/estree': 1.0.5 + '@shikijs/types': 1.24.2 + '@shikijs/vscode-textmate': 9.3.1 + oniguruma-to-es: 0.7.0 - '@types/babel__core@7.20.5': + '@shikijs/engine-oniguruma@1.24.2': dependencies: - '@babel/parser': 7.24.8 - '@babel/types': 7.24.8 - '@types/babel__generator': 7.6.8 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.6 + '@shikijs/types': 1.24.2 + '@shikijs/vscode-textmate': 9.3.1 - '@types/babel__generator@7.6.8': + '@shikijs/types@1.24.2': dependencies: - '@babel/types': 7.24.8 + '@shikijs/vscode-textmate': 9.3.1 + '@types/hast': 3.0.4 - '@types/babel__template@7.4.4': - dependencies: - '@babel/parser': 7.24.8 - '@babel/types': 7.24.8 + '@shikijs/vscode-textmate@9.3.1': {} - '@types/babel__traverse@7.20.6': + '@types/acorn@4.0.6': dependencies: - '@babel/types': 7.24.8 + '@types/estree': 1.0.5 '@types/cookie@0.6.0': {} @@ -2965,10 +2763,14 @@ snapshots: '@types/estree@1.0.5': {} + '@types/estree@1.0.6': {} + '@types/hast@3.0.4': dependencies: '@types/unist': 3.0.2 + '@types/js-yaml@4.0.9': {} + '@types/mdast@4.0.4': dependencies: '@types/unist': 3.0.2 @@ -2993,25 +2795,24 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@volar/kit@2.4.0-alpha.15(typescript@5.5.3)': + '@volar/kit@2.4.11(typescript@5.7.2)': dependencies: - '@volar/language-service': 2.4.0-alpha.15 - '@volar/typescript': 2.4.0-alpha.15 + '@volar/language-service': 2.4.11 + '@volar/typescript': 2.4.11 typesafe-path: 0.2.2 - typescript: 5.5.3 + typescript: 5.7.2 vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 - '@volar/language-core@2.4.0-alpha.15': + '@volar/language-core@2.4.11': dependencies: - '@volar/source-map': 2.4.0-alpha.15 + '@volar/source-map': 2.4.11 - '@volar/language-server@2.4.0-alpha.15': + '@volar/language-server@2.4.11': dependencies: - '@volar/language-core': 2.4.0-alpha.15 - '@volar/language-service': 2.4.0-alpha.15 - '@volar/snapshot-document': 2.4.0-alpha.15 - '@volar/typescript': 2.4.0-alpha.15 + '@volar/language-core': 2.4.11 + '@volar/language-service': 2.4.11 + '@volar/typescript': 2.4.11 path-browserify: 1.0.1 request-light: 0.7.0 vscode-languageserver: 9.0.1 @@ -3019,23 +2820,18 @@ snapshots: vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 - '@volar/language-service@2.4.0-alpha.15': + '@volar/language-service@2.4.11': dependencies: - '@volar/language-core': 2.4.0-alpha.15 + '@volar/language-core': 2.4.11 vscode-languageserver-protocol: 3.17.5 vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 - '@volar/snapshot-document@2.4.0-alpha.15': - dependencies: - vscode-languageserver-protocol: 3.17.5 - vscode-languageserver-textdocument: 1.0.11 - - '@volar/source-map@2.4.0-alpha.15': {} + '@volar/source-map@2.4.11': {} - '@volar/typescript@2.4.0-alpha.15': + '@volar/typescript@2.4.11': dependencies: - '@volar/language-core': 2.4.0-alpha.15 + '@volar/language-core': 2.4.11 path-browserify: 1.0.1 vscode-uri: 3.0.8 @@ -3049,11 +2845,18 @@ snapshots: '@vscode/l10n@0.0.18': {} - acorn-jsx@5.3.2(acorn@8.12.1): + acorn-jsx@5.3.2(acorn@8.14.0): dependencies: - acorn: 8.12.1 + acorn: 8.14.0 - acorn@8.12.1: {} + acorn@8.14.0: {} + + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 ansi-align@3.0.1: dependencies: @@ -3063,21 +2866,12 @@ snapshots: ansi-regex@6.0.1: {} - ansi-styles@3.2.1: - dependencies: - color-convert: 1.9.3 - ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 ansi-styles@6.2.1: {} - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - arg@5.0.2: {} argparse@1.0.10: @@ -3086,131 +2880,101 @@ snapshots: argparse@2.0.1: {} - aria-query@5.3.0: - dependencies: - dequal: 2.0.3 + aria-query@5.3.2: {} array-iterate@2.0.1: {} astring@1.8.6: {} - astro-expressive-code@0.35.3(astro@4.11.5(typescript@5.5.3)): + astro-expressive-code@0.38.3(astro@5.0.5(rollup@4.28.1)(typescript@5.7.2)(yaml@2.6.1)): dependencies: - astro: 4.11.5(typescript@5.5.3) - rehype-expressive-code: 0.35.3 + astro: 5.0.5(rollup@4.28.1)(typescript@5.7.2)(yaml@2.6.1) + rehype-expressive-code: 0.38.3 - astro@4.11.5(typescript@5.5.3): + astro@5.0.5(rollup@4.28.1)(typescript@5.7.2)(yaml@2.6.1): dependencies: - '@astrojs/compiler': 2.8.2 - '@astrojs/internal-helpers': 0.4.1 - '@astrojs/markdown-remark': 5.1.1 - '@astrojs/telemetry': 3.1.0 - '@babel/core': 7.24.8 - '@babel/generator': 7.24.8 - '@babel/parser': 7.24.8 - '@babel/plugin-transform-react-jsx': 7.24.7(@babel/core@7.24.8) - '@babel/traverse': 7.24.8 - '@babel/types': 7.24.8 - '@types/babel__core': 7.20.5 + '@astrojs/compiler': 2.10.3 + '@astrojs/internal-helpers': 0.4.2 + '@astrojs/markdown-remark': 6.0.1 + '@astrojs/telemetry': 3.2.0 + '@oslojs/encoding': 1.1.0 + '@rollup/pluginutils': 5.1.3(rollup@4.28.1) '@types/cookie': 0.6.0 - acorn: 8.12.1 - aria-query: 5.3.0 - axobject-query: 4.0.0 - boxen: 7.1.1 - chokidar: 3.6.0 - ci-info: 4.0.0 + acorn: 8.14.0 + aria-query: 5.3.2 + axobject-query: 4.1.0 + boxen: 8.0.1 + ci-info: 4.1.0 clsx: 2.1.1 common-ancestor-path: 1.0.1 - cookie: 0.6.0 + cookie: 0.7.2 cssesc: 3.0.0 - debug: 4.3.5 + debug: 4.4.0 deterministic-object-hash: 2.0.2 - devalue: 5.0.0 + devalue: 5.1.1 diff: 5.2.0 dlv: 1.1.3 - dset: 3.1.3 + dset: 3.1.4 es-module-lexer: 1.5.4 esbuild: 0.21.5 estree-walker: 3.0.3 - execa: 8.0.1 fast-glob: 3.3.2 flattie: 1.1.1 github-slugger: 2.0.0 - gray-matter: 4.0.3 html-escaper: 3.0.3 http-cache-semantics: 4.1.1 js-yaml: 4.1.0 kleur: 4.1.5 - magic-string: 0.30.10 + magic-string: 0.30.15 + magicast: 0.3.5 + micromatch: 4.0.8 mrmime: 2.0.0 - ora: 8.0.1 - p-limit: 5.0.0 + neotraverse: 0.6.18 + p-limit: 6.1.0 p-queue: 8.0.1 - path-to-regexp: 6.2.2 - preferred-pm: 3.1.4 + preferred-pm: 4.0.0 prompts: 2.4.2 - rehype: 13.0.1 - semver: 7.6.2 - shiki: 1.10.3 - string-width: 7.2.0 - strip-ansi: 7.1.0 - tsconfck: 3.1.1(typescript@5.5.3) + rehype: 13.0.2 + semver: 7.6.3 + shiki: 1.24.2 + tinyexec: 0.3.1 + tsconfck: 3.1.4(typescript@5.7.2) + ultrahtml: 1.5.3 unist-util-visit: 5.0.0 - vfile: 6.0.1 - vite: 5.3.3 - vitefu: 0.2.5(vite@5.3.3) - which-pm: 2.2.0 + vfile: 6.0.3 + vite: 6.0.3(yaml@2.6.1) + vitefu: 1.0.4(vite@6.0.3(yaml@2.6.1)) + which-pm: 3.0.0 + xxhash-wasm: 1.1.0 yargs-parser: 21.1.1 + yocto-spinner: 0.1.2 zod: 3.23.8 - zod-to-json-schema: 3.23.1(zod@3.23.8) + zod-to-json-schema: 3.24.1(zod@3.23.8) + zod-to-ts: 1.2.0(typescript@5.7.2)(zod@3.23.8) optionalDependencies: - sharp: 0.33.4 + sharp: 0.33.5 transitivePeerDependencies: - '@types/node' + - jiti - less - lightningcss + - rollup - sass + - sass-embedded - stylus - sugarss - supports-color - terser + - tsx - typescript + - yaml - axobject-query@4.0.0: - dependencies: - dequal: 2.0.3 - - b4a@1.6.6: {} + axobject-query@4.1.0: {} bail@2.0.2: {} - bare-events@2.4.2: - optional: true - - bare-fs@2.3.1: - dependencies: - bare-events: 2.4.2 - bare-path: 2.1.3 - bare-stream: 2.1.3 - optional: true - - bare-os@2.4.0: - optional: true - - bare-path@2.1.3: - dependencies: - bare-os: 2.4.0 - optional: true - - bare-stream@2.1.3: - dependencies: - streamx: 2.18.0 - optional: true - base-64@1.0.0: {} - base64-js@1.5.1: {} - bcp-47-match@2.0.3: {} bcp-47@2.1.0: @@ -3219,55 +2983,27 @@ snapshots: is-alphanumerical: 2.0.1 is-decimal: 2.0.1 - binary-extensions@2.3.0: {} - - bl@4.1.0: - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.2 - boolbase@1.0.0: {} - boxen@7.1.1: + boxen@8.0.1: dependencies: ansi-align: 3.0.1 - camelcase: 7.0.1 + camelcase: 8.0.0 chalk: 5.3.0 cli-boxes: 3.0.0 - string-width: 5.1.2 - type-fest: 2.19.0 - widest-line: 4.0.1 - wrap-ansi: 8.1.0 + string-width: 7.2.0 + type-fest: 4.30.1 + widest-line: 5.0.0 + wrap-ansi: 9.0.0 braces@3.0.3: dependencies: fill-range: 7.1.1 - browserslist@4.23.2: - dependencies: - caniuse-lite: 1.0.30001641 - electron-to-chromium: 1.4.827 - node-releases: 2.0.14 - update-browserslist-db: 1.1.0(browserslist@4.23.2) - - buffer@5.7.1: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - - camelcase@7.0.1: {} - - caniuse-lite@1.0.30001641: {} + camelcase@8.0.0: {} ccount@2.0.1: {} - chalk@2.4.2: - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - chalk@5.3.0: {} character-entities-html4@2.1.0: {} @@ -3278,30 +3014,14 @@ snapshots: character-reference-invalid@2.0.1: {} - chokidar@3.6.0: + chokidar@4.0.1: dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - - chownr@1.1.4: {} + readdirp: 4.0.2 - ci-info@4.0.0: {} + ci-info@4.1.0: {} cli-boxes@3.0.0: {} - cli-cursor@4.0.0: - dependencies: - restore-cursor: 4.0.0 - - cli-spinners@2.9.2: {} - cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -3312,16 +3032,10 @@ snapshots: collapse-white-space@2.1.0: {} - color-convert@1.9.3: - dependencies: - color-name: 1.1.3 - color-convert@2.0.1: dependencies: color-name: 1.1.4 - color-name@1.1.3: {} - color-name@1.1.4: {} color-string@1.9.1: @@ -3338,15 +3052,7 @@ snapshots: common-ancestor-path@1.0.1: {} - convert-source-map@2.0.0: {} - - cookie@0.6.0: {} - - cross-spawn@7.0.3: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 + cookie@0.7.2: {} css-selector-parser@3.0.5: {} @@ -3356,15 +3062,13 @@ snapshots: dependencies: ms: 2.1.2 - decode-named-character-reference@1.0.2: + debug@4.4.0: dependencies: - character-entities: 2.0.2 + ms: 2.1.3 - decompress-response@6.0.0: + decode-named-character-reference@1.0.2: dependencies: - mimic-response: 3.1.0 - - deep-extend@0.6.0: {} + character-entities: 2.0.2 dequal@2.0.3: {} @@ -3374,7 +3078,7 @@ snapshots: dependencies: base-64: 1.0.0 - devalue@5.0.0: {} + devalue@5.1.1: {} devlop@1.1.0: dependencies: @@ -3386,31 +3090,37 @@ snapshots: dlv@1.1.3: {} - dset@3.1.3: {} - - eastasianwidth@0.2.0: {} - - electron-to-chromium@1.4.827: {} + dset@3.1.4: {} emmet@2.4.7: dependencies: '@emmetio/abbreviation': 2.3.3 '@emmetio/css-abbreviation': 2.1.8 + emoji-regex-xs@1.0.0: {} + emoji-regex@10.3.0: {} emoji-regex@8.0.0: {} - emoji-regex@9.2.2: {} - - end-of-stream@1.4.4: - dependencies: - once: 1.4.0 - entities@4.5.0: {} es-module-lexer@1.5.4: {} + esast-util-from-estree@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + unist-util-position-from-estree: 2.0.0 + + esast-util-from-js@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + acorn: 8.14.0 + esast-util-from-estree: 2.0.0 + vfile-message: 4.0.2 + esbuild@0.21.5: optionalDependencies: '@esbuild/aix-ppc64': 0.21.5 @@ -3437,9 +3147,34 @@ snapshots: '@esbuild/win32-ia32': 0.21.5 '@esbuild/win32-x64': 0.21.5 - escalade@3.1.2: {} + esbuild@0.24.0: + optionalDependencies: + '@esbuild/aix-ppc64': 0.24.0 + '@esbuild/android-arm': 0.24.0 + '@esbuild/android-arm64': 0.24.0 + '@esbuild/android-x64': 0.24.0 + '@esbuild/darwin-arm64': 0.24.0 + '@esbuild/darwin-x64': 0.24.0 + '@esbuild/freebsd-arm64': 0.24.0 + '@esbuild/freebsd-x64': 0.24.0 + '@esbuild/linux-arm': 0.24.0 + '@esbuild/linux-arm64': 0.24.0 + '@esbuild/linux-ia32': 0.24.0 + '@esbuild/linux-loong64': 0.24.0 + '@esbuild/linux-mips64el': 0.24.0 + '@esbuild/linux-ppc64': 0.24.0 + '@esbuild/linux-riscv64': 0.24.0 + '@esbuild/linux-s390x': 0.24.0 + '@esbuild/linux-x64': 0.24.0 + '@esbuild/netbsd-x64': 0.24.0 + '@esbuild/openbsd-arm64': 0.24.0 + '@esbuild/openbsd-x64': 0.24.0 + '@esbuild/sunos-x64': 0.24.0 + '@esbuild/win32-arm64': 0.24.0 + '@esbuild/win32-ia32': 0.24.0 + '@esbuild/win32-x64': 0.24.0 - escape-string-regexp@1.0.5: {} + escalade@3.1.2: {} escape-string-regexp@5.0.0: {} @@ -3458,6 +3193,11 @@ snapshots: estree-util-is-identifier-name@3.0.0: {} + estree-util-scope@1.0.0: + dependencies: + '@types/estree': 1.0.5 + devlop: 1.1.0 + estree-util-to-js@2.0.0: dependencies: '@types/estree-jsx': 1.0.5 @@ -3469,40 +3209,24 @@ snapshots: '@types/estree-jsx': 1.0.5 '@types/unist': 3.0.2 + estree-walker@2.0.2: {} + estree-walker@3.0.3: dependencies: '@types/estree': 1.0.5 eventemitter3@5.0.1: {} - execa@8.0.1: - dependencies: - cross-spawn: 7.0.3 - get-stream: 8.0.1 - human-signals: 5.0.0 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.3.0 - onetime: 6.0.0 - signal-exit: 4.1.0 - strip-final-newline: 3.0.0 - - expand-template@2.0.3: {} - - expressive-code@0.35.3: - dependencies: - '@expressive-code/core': 0.35.3 - '@expressive-code/plugin-frames': 0.35.3 - '@expressive-code/plugin-shiki': 0.35.3 - '@expressive-code/plugin-text-markers': 0.35.3 - - extend-shallow@2.0.1: + expressive-code@0.38.3: dependencies: - is-extendable: 0.1.1 + '@expressive-code/core': 0.38.3 + '@expressive-code/plugin-frames': 0.38.3 + '@expressive-code/plugin-shiki': 0.38.3 + '@expressive-code/plugin-text-markers': 0.38.3 extend@3.0.2: {} - fast-fifo@1.3.2: {} + fast-deep-equal@3.1.3: {} fast-glob@3.3.2: dependencies: @@ -3510,7 +3234,9 @@ snapshots: '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.7 + micromatch: 4.0.8 + + fast-uri@3.0.3: {} fastq@1.17.1: dependencies: @@ -3520,57 +3246,35 @@ snapshots: dependencies: to-regex-range: 5.0.1 + find-up-simple@1.0.0: {} + find-up@4.1.0: dependencies: locate-path: 5.0.0 path-exists: 4.0.0 - find-up@5.0.0: - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - find-yarn-workspace-root2@1.2.16: dependencies: - micromatch: 4.0.7 + micromatch: 4.0.8 pkg-dir: 4.2.0 flattie@1.1.1: {} - fs-constants@1.0.0: {} - fsevents@2.3.3: optional: true - gensync@1.0.0-beta.2: {} - get-caller-file@2.0.5: {} get-east-asian-width@1.2.0: {} - get-stream@8.0.1: {} - - github-from-package@0.0.0: {} - github-slugger@2.0.0: {} glob-parent@5.1.2: dependencies: is-glob: 4.0.3 - globals@11.12.0: {} - graceful-fs@4.2.11: {} - gray-matter@4.0.3: - dependencies: - js-yaml: 3.14.1 - kind-of: 6.0.3 - section-matter: 1.0.0 - strip-bom-string: 1.0.0 - - has-flag@3.0.0: {} - hast-util-embedded@3.0.0: dependencies: '@types/hast': 3.0.4 @@ -3582,7 +3286,16 @@ snapshots: devlop: 1.1.0 hast-util-from-parse5: 8.0.1 parse5: 7.1.2 - vfile: 6.0.1 + vfile: 6.0.3 + vfile-message: 4.0.2 + + hast-util-from-html@2.0.3: + dependencies: + '@types/hast': 3.0.4 + devlop: 1.1.0 + hast-util-from-parse5: 8.0.1 + parse5: 7.1.2 + vfile: 6.0.3 vfile-message: 4.0.2 hast-util-from-parse5@8.0.1: @@ -3592,7 +3305,7 @@ snapshots: devlop: 1.1.0 hastscript: 8.0.0 property-information: 6.5.0 - vfile: 6.0.1 + vfile: 6.0.3 vfile-location: 5.0.2 web-namespaces: 2.0.1 @@ -3632,7 +3345,7 @@ snapshots: parse5: 7.1.2 unist-util-position: 5.0.0 unist-util-visit: 5.0.0 - vfile: 6.0.1 + vfile: 6.0.3 web-namespaces: 2.0.1 zwitch: 2.0.4 @@ -3691,6 +3404,20 @@ snapshots: stringify-entities: 4.0.4 zwitch: 2.0.4 + hast-util-to-html@9.0.4: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.2 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.0 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + hast-util-to-jsx-runtime@2.3.0: dependencies: '@types/estree': 1.0.5 @@ -3760,16 +3487,12 @@ snapshots: http-cache-semantics@4.1.1: {} - human-signals@5.0.0: {} - - ieee754@1.2.1: {} + i18next@23.16.8: + dependencies: + '@babel/runtime': 7.26.0 import-meta-resolve@4.1.0: {} - inherits@2.0.4: {} - - ini@1.3.8: {} - inline-style-parser@0.1.1: {} inline-style-parser@0.2.3: {} @@ -3785,16 +3508,10 @@ snapshots: is-arrayish@0.3.2: {} - is-binary-path@2.1.0: - dependencies: - binary-extensions: 2.3.0 - is-decimal@2.0.1: {} is-docker@3.0.0: {} - is-extendable@0.1.1: {} - is-extglob@2.1.1: {} is-fullwidth-code-point@3.0.0: {} @@ -3809,30 +3526,14 @@ snapshots: dependencies: is-docker: 3.0.0 - is-interactive@2.0.0: {} - is-number@7.0.0: {} is-plain-obj@4.1.0: {} - is-reference@3.0.2: - dependencies: - '@types/estree': 1.0.5 - - is-stream@3.0.0: {} - - is-unicode-supported@1.3.0: {} - - is-unicode-supported@2.0.0: {} - is-wsl@3.1.0: dependencies: is-inside-container: 1.0.0 - isexe@2.0.0: {} - - js-tokens@4.0.0: {} - js-yaml@3.14.1: dependencies: argparse: 1.0.10 @@ -3842,13 +3543,11 @@ snapshots: dependencies: argparse: 2.0.1 - jsesc@2.5.2: {} - - json5@2.2.3: {} + json-schema-traverse@1.0.0: {} jsonc-parser@2.3.1: {} - kind-of@6.0.3: {} + jsonc-parser@3.3.1: {} kleur@3.0.3: {} @@ -3865,24 +3564,19 @@ snapshots: dependencies: p-locate: 4.1.0 - locate-path@6.0.0: - dependencies: - p-locate: 5.0.0 - - log-symbols@6.0.0: - dependencies: - chalk: 5.3.0 - is-unicode-supported: 1.3.0 + lodash@4.17.21: {} longest-streak@3.1.0: {} - lru-cache@5.1.1: + magic-string@0.30.15: dependencies: - yallist: 3.1.1 + '@jridgewell/sourcemap-codec': 1.5.0 - magic-string@0.30.10: + magicast@0.3.5: dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 + '@babel/parser': 7.26.3 + '@babel/types': 7.26.3 + source-map-js: 1.2.0 markdown-extensions@2.0.0: {} @@ -4053,7 +3747,7 @@ snapshots: trim-lines: 3.0.1 unist-util-position: 5.0.0 unist-util-visit: 5.0.0 - vfile: 6.0.1 + vfile: 6.0.3 mdast-util-to-markdown@2.1.0: dependencies: @@ -4070,8 +3764,6 @@ snapshots: dependencies: '@types/mdast': 4.0.4 - merge-stream@2.0.0: {} - merge2@1.4.1: {} micromark-core-commonmark@2.0.1: @@ -4203,8 +3895,8 @@ snapshots: micromark-extension-mdxjs@3.0.0: dependencies: - acorn: 8.12.1 - acorn-jsx: 5.3.2(acorn@8.12.1) + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) micromark-extension-mdx-expression: 3.0.0 micromark-extension-mdx-jsx: 3.0.0 micromark-extension-mdx-md: 2.0.0 @@ -4348,88 +4040,44 @@ snapshots: transitivePeerDependencies: - supports-color - micromatch@4.0.7: + micromatch@4.0.8: dependencies: braces: 3.0.3 picomatch: 2.3.1 - mimic-fn@2.1.0: {} - - mimic-fn@4.0.0: {} - - mimic-response@3.1.0: {} - - minimist@1.2.8: {} - - mkdirp-classic@0.5.3: {} - mrmime@2.0.0: {} ms@2.1.2: {} + ms@2.1.3: {} + muggle-string@0.4.1: {} nanoid@3.3.7: {} - napi-build-utils@1.0.2: {} + neotraverse@0.6.18: {} nlcst-to-string@4.0.0: dependencies: '@types/nlcst': 2.0.3 - node-abi@3.65.0: - dependencies: - semver: 7.6.2 - - node-addon-api@6.1.0: {} - - node-releases@2.0.14: {} - - normalize-path@3.0.0: {} - not@0.1.0: {} - npm-run-path@5.3.0: - dependencies: - path-key: 4.0.0 - nth-check@2.1.1: dependencies: boolbase: 1.0.0 - once@1.4.0: + oniguruma-to-es@0.7.0: dependencies: - wrappy: 1.0.2 - - onetime@5.1.2: - dependencies: - mimic-fn: 2.1.0 - - onetime@6.0.0: - dependencies: - mimic-fn: 4.0.0 - - ora@8.0.1: - dependencies: - chalk: 5.3.0 - cli-cursor: 4.0.0 - cli-spinners: 2.9.2 - is-interactive: 2.0.0 - is-unicode-supported: 2.0.0 - log-symbols: 6.0.0 - stdin-discarder: 0.2.2 - string-width: 7.2.0 - strip-ansi: 7.1.0 + emoji-regex-xs: 1.0.0 + regex: 5.0.2 + regex-recursion: 4.3.0 p-limit@2.3.0: dependencies: p-try: 2.2.0 - p-limit@3.1.0: - dependencies: - yocto-queue: 0.1.0 - - p-limit@5.0.0: + p-limit@6.1.0: dependencies: yocto-queue: 1.1.1 @@ -4437,10 +4085,6 @@ snapshots: dependencies: p-limit: 2.3.0 - p-locate@5.0.0: - dependencies: - p-limit: 3.1.0 - p-queue@8.0.1: dependencies: eventemitter3: 5.0.1 @@ -4476,7 +4120,7 @@ snapshots: nlcst-to-string: 4.0.0 unist-util-modify-children: 4.0.0 unist-util-visit-children: 3.0.0 - vfile: 6.0.1 + vfile: 6.0.3 parse5@7.1.2: dependencies: @@ -4486,22 +4130,14 @@ snapshots: path-exists@4.0.0: {} - path-key@3.1.1: {} - - path-key@4.0.0: {} - - path-to-regexp@6.2.2: {} - - periscopic@3.1.0: - dependencies: - '@types/estree': 1.0.5 - estree-walker: 3.0.3 - is-reference: 3.0.2 - picocolors@1.0.1: {} + picocolors@1.1.1: {} + picomatch@2.3.1: {} + picomatch@4.0.2: {} + pify@4.0.1: {} pkg-dir@4.2.0: @@ -4524,27 +4160,20 @@ snapshots: picocolors: 1.0.1 source-map-js: 1.2.0 - prebuild-install@7.1.2: + postcss@8.4.49: dependencies: - detect-libc: 2.0.3 - expand-template: 2.0.3 - github-from-package: 0.0.0 - minimist: 1.2.8 - mkdirp-classic: 0.5.3 - napi-build-utils: 1.0.2 - node-abi: 3.65.0 - pump: 3.0.0 - rc: 1.2.8 - simple-get: 4.0.1 - tar-fs: 2.1.1 - tunnel-agent: 0.6.0 - - preferred-pm@3.1.4: - dependencies: - find-up: 5.0.0 + nanoid: 3.3.7 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + preferred-pm@4.0.0: + dependencies: + find-up-simple: 1.0.0 find-yarn-workspace-root2: 1.2.16 - path-exists: 4.0.0 - which-pm: 2.2.0 + which-pm: 3.0.0 + + prettier@2.8.7: + optional: true prismjs@1.29.0: {} @@ -4555,35 +4184,55 @@ snapshots: property-information@6.5.0: {} - pump@3.0.0: + queue-microtask@1.2.3: {} + + readdirp@4.0.2: {} + + recma-build-jsx@1.0.0: dependencies: - end-of-stream: 1.4.4 - once: 1.4.0 + '@types/estree': 1.0.5 + estree-util-build-jsx: 3.0.1 + vfile: 6.0.3 - queue-microtask@1.2.3: {} + recma-jsx@1.0.0(acorn@8.14.0): + dependencies: + acorn-jsx: 5.3.2(acorn@8.14.0) + estree-util-to-js: 2.0.0 + recma-parse: 1.0.0 + recma-stringify: 1.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - acorn - queue-tick@1.0.1: {} + recma-parse@1.0.0: + dependencies: + '@types/estree': 1.0.5 + esast-util-from-js: 2.0.1 + unified: 11.0.5 + vfile: 6.0.3 - rc@1.2.8: + recma-stringify@1.0.0: dependencies: - deep-extend: 0.6.0 - ini: 1.3.8 - minimist: 1.2.8 - strip-json-comments: 2.0.1 + '@types/estree': 1.0.5 + estree-util-to-js: 2.0.0 + unified: 11.0.5 + vfile: 6.0.3 + + regenerator-runtime@0.14.1: {} - readable-stream@3.6.2: + regex-recursion@4.3.0: dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 + regex-utilities: 2.3.0 + + regex-utilities@2.3.0: {} - readdirp@3.6.0: + regex@5.0.2: dependencies: - picomatch: 2.3.1 + regex-utilities: 2.3.0 - rehype-expressive-code@0.35.3: + rehype-expressive-code@0.38.3: dependencies: - expressive-code: 0.35.3 + expressive-code: 0.38.3 rehype-external-links@3.0.0: dependencies: @@ -4623,7 +4272,15 @@ snapshots: dependencies: '@types/hast': 3.0.4 hast-util-raw: 9.0.4 - vfile: 6.0.1 + vfile: 6.0.3 + + rehype-recma@1.0.0: + dependencies: + '@types/estree': 1.0.5 + '@types/hast': 3.0.4 + hast-util-to-estree: 3.1.0 + transitivePeerDependencies: + - supports-color rehype-stringify@10.0.0: dependencies: @@ -4631,6 +4288,12 @@ snapshots: hast-util-to-html: 9.0.1 unified: 11.0.5 + rehype-stringify@10.0.1: + dependencies: + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.1 + unified: 11.0.5 + rehype@13.0.1: dependencies: '@types/hast': 3.0.4 @@ -4638,6 +4301,13 @@ snapshots: rehype-stringify: 10.0.0 unified: 11.0.5 + rehype@13.0.2: + dependencies: + '@types/hast': 3.0.4 + rehype-parse: 9.0.0 + rehype-stringify: 10.0.0 + unified: 11.0.5 + remark-directive@3.0.0: dependencies: '@types/mdast': 4.0.4 @@ -4680,7 +4350,15 @@ snapshots: '@types/mdast': 4.0.4 mdast-util-to-hast: 13.2.0 unified: 11.0.5 - vfile: 6.0.1 + vfile: 6.0.3 + + remark-rehype@11.1.1: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + mdast-util-to-hast: 13.2.0 + unified: 11.0.5 + vfile: 6.0.3 remark-smartypants@3.0.2: dependencies: @@ -4695,14 +4373,13 @@ snapshots: mdast-util-to-markdown: 2.1.0 unified: 11.0.5 + request-light@0.5.8: {} + request-light@0.7.0: {} require-directory@2.1.1: {} - restore-cursor@4.0.0: - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 + require-from-string@2.0.2: {} retext-latin@4.0.0: dependencies: @@ -4731,106 +4408,76 @@ snapshots: reusify@1.0.4: {} - rollup@4.18.1: + rollup@4.28.1: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.18.1 - '@rollup/rollup-android-arm64': 4.18.1 - '@rollup/rollup-darwin-arm64': 4.18.1 - '@rollup/rollup-darwin-x64': 4.18.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.18.1 - '@rollup/rollup-linux-arm-musleabihf': 4.18.1 - '@rollup/rollup-linux-arm64-gnu': 4.18.1 - '@rollup/rollup-linux-arm64-musl': 4.18.1 - '@rollup/rollup-linux-powerpc64le-gnu': 4.18.1 - '@rollup/rollup-linux-riscv64-gnu': 4.18.1 - '@rollup/rollup-linux-s390x-gnu': 4.18.1 - '@rollup/rollup-linux-x64-gnu': 4.18.1 - '@rollup/rollup-linux-x64-musl': 4.18.1 - '@rollup/rollup-win32-arm64-msvc': 4.18.1 - '@rollup/rollup-win32-ia32-msvc': 4.18.1 - '@rollup/rollup-win32-x64-msvc': 4.18.1 + '@rollup/rollup-android-arm-eabi': 4.28.1 + '@rollup/rollup-android-arm64': 4.28.1 + '@rollup/rollup-darwin-arm64': 4.28.1 + '@rollup/rollup-darwin-x64': 4.28.1 + '@rollup/rollup-freebsd-arm64': 4.28.1 + '@rollup/rollup-freebsd-x64': 4.28.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.28.1 + '@rollup/rollup-linux-arm-musleabihf': 4.28.1 + '@rollup/rollup-linux-arm64-gnu': 4.28.1 + '@rollup/rollup-linux-arm64-musl': 4.28.1 + '@rollup/rollup-linux-loongarch64-gnu': 4.28.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.28.1 + '@rollup/rollup-linux-riscv64-gnu': 4.28.1 + '@rollup/rollup-linux-s390x-gnu': 4.28.1 + '@rollup/rollup-linux-x64-gnu': 4.28.1 + '@rollup/rollup-linux-x64-musl': 4.28.1 + '@rollup/rollup-win32-arm64-msvc': 4.28.1 + '@rollup/rollup-win32-ia32-msvc': 4.28.1 + '@rollup/rollup-win32-x64-msvc': 4.28.1 fsevents: 2.3.3 run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - safe-buffer@5.2.1: {} - sax@1.4.1: {} - section-matter@1.0.0: - dependencies: - extend-shallow: 2.0.1 - kind-of: 6.0.3 - - semver@6.3.1: {} - semver@7.6.2: {} - sharp@0.32.6: - dependencies: - color: 4.2.3 - detect-libc: 2.0.3 - node-addon-api: 6.1.0 - prebuild-install: 7.1.2 - semver: 7.6.2 - simple-get: 4.0.1 - tar-fs: 3.0.6 - tunnel-agent: 0.6.0 + semver@7.6.3: {} - sharp@0.33.4: + sharp@0.33.5: dependencies: color: 4.2.3 detect-libc: 2.0.3 - semver: 7.6.2 + semver: 7.6.3 optionalDependencies: - '@img/sharp-darwin-arm64': 0.33.4 - '@img/sharp-darwin-x64': 0.33.4 - '@img/sharp-libvips-darwin-arm64': 1.0.2 - '@img/sharp-libvips-darwin-x64': 1.0.2 - '@img/sharp-libvips-linux-arm': 1.0.2 - '@img/sharp-libvips-linux-arm64': 1.0.2 - '@img/sharp-libvips-linux-s390x': 1.0.2 - '@img/sharp-libvips-linux-x64': 1.0.2 - '@img/sharp-libvips-linuxmusl-arm64': 1.0.2 - '@img/sharp-libvips-linuxmusl-x64': 1.0.2 - '@img/sharp-linux-arm': 0.33.4 - '@img/sharp-linux-arm64': 0.33.4 - '@img/sharp-linux-s390x': 0.33.4 - '@img/sharp-linux-x64': 0.33.4 - '@img/sharp-linuxmusl-arm64': 0.33.4 - '@img/sharp-linuxmusl-x64': 0.33.4 - '@img/sharp-wasm32': 0.33.4 - '@img/sharp-win32-ia32': 0.33.4 - '@img/sharp-win32-x64': 0.33.4 - optional: true - - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - - shebang-regex@3.0.0: {} - - shiki@1.10.3: - dependencies: - '@shikijs/core': 1.10.3 + '@img/sharp-darwin-arm64': 0.33.5 + '@img/sharp-darwin-x64': 0.33.5 + '@img/sharp-libvips-darwin-arm64': 1.0.4 + '@img/sharp-libvips-darwin-x64': 1.0.4 + '@img/sharp-libvips-linux-arm': 1.0.5 + '@img/sharp-libvips-linux-arm64': 1.0.4 + '@img/sharp-libvips-linux-s390x': 1.0.4 + '@img/sharp-libvips-linux-x64': 1.0.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + '@img/sharp-linux-arm': 0.33.5 + '@img/sharp-linux-arm64': 0.33.5 + '@img/sharp-linux-s390x': 0.33.5 + '@img/sharp-linux-x64': 0.33.5 + '@img/sharp-linuxmusl-arm64': 0.33.5 + '@img/sharp-linuxmusl-x64': 0.33.5 + '@img/sharp-wasm32': 0.33.5 + '@img/sharp-win32-ia32': 0.33.5 + '@img/sharp-win32-x64': 0.33.5 + + shiki@1.24.2: + dependencies: + '@shikijs/core': 1.24.2 + '@shikijs/engine-javascript': 1.24.2 + '@shikijs/engine-oniguruma': 1.24.2 + '@shikijs/types': 1.24.2 + '@shikijs/vscode-textmate': 9.3.1 '@types/hast': 3.0.4 - signal-exit@3.0.7: {} - - signal-exit@4.1.0: {} - - simple-concat@1.0.1: {} - - simple-get@4.0.1: - dependencies: - decompress-response: 6.0.0 - once: 1.4.0 - simple-concat: 1.0.1 - simple-swizzle@0.2.2: dependencies: is-arrayish: 0.3.2 @@ -4846,46 +4493,28 @@ snapshots: source-map-js@1.2.0: {} + source-map-js@1.2.1: {} + source-map@0.7.4: {} space-separated-tokens@2.0.2: {} sprintf-js@1.0.3: {} - stdin-discarder@0.2.2: {} - stream-replace-string@2.0.0: {} - streamx@2.18.0: - dependencies: - fast-fifo: 1.3.2 - queue-tick: 1.0.1 - text-decoder: 1.1.1 - optionalDependencies: - bare-events: 2.4.2 - string-width@4.2.3: dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - string-width@5.1.2: - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.0 - string-width@7.2.0: dependencies: emoji-regex: 10.3.0 get-east-asian-width: 1.2.0 strip-ansi: 7.1.0 - string_decoder@1.3.0: - dependencies: - safe-buffer: 5.2.1 - stringify-entities@4.0.4: dependencies: character-entities-html4: 2.1.0 @@ -4899,14 +4528,8 @@ snapshots: dependencies: ansi-regex: 6.0.1 - strip-bom-string@1.0.0: {} - strip-bom@3.0.0: {} - strip-final-newline@3.0.0: {} - - strip-json-comments@2.0.1: {} - style-to-object@0.4.4: dependencies: inline-style-parser: 0.1.1 @@ -4915,44 +4538,7 @@ snapshots: dependencies: inline-style-parser: 0.2.3 - supports-color@5.5.0: - dependencies: - has-flag: 3.0.0 - - tar-fs@2.1.1: - dependencies: - chownr: 1.1.4 - mkdirp-classic: 0.5.3 - pump: 3.0.0 - tar-stream: 2.2.0 - - tar-fs@3.0.6: - dependencies: - pump: 3.0.0 - tar-stream: 3.1.7 - optionalDependencies: - bare-fs: 2.3.1 - bare-path: 2.1.3 - - tar-stream@2.2.0: - dependencies: - bl: 4.1.0 - end-of-stream: 1.4.4 - fs-constants: 1.0.0 - inherits: 2.0.4 - readable-stream: 3.6.2 - - tar-stream@3.1.7: - dependencies: - b4a: 1.6.6 - fast-fifo: 1.3.2 - streamx: 2.18.0 - - text-decoder@1.1.1: - dependencies: - b4a: 1.6.6 - - to-fast-properties@2.0.0: {} + tinyexec@0.3.1: {} to-regex-range@5.0.1: dependencies: @@ -4962,18 +4548,14 @@ snapshots: trough@2.2.0: {} - tsconfck@3.1.1(typescript@5.5.3): + tsconfck@3.1.4(typescript@5.7.2): optionalDependencies: - typescript: 5.5.3 + typescript: 5.7.2 - tslib@2.6.3: + tslib@2.8.1: optional: true - tunnel-agent@0.6.0: - dependencies: - safe-buffer: 5.2.1 - - type-fest@2.19.0: {} + type-fest@4.30.1: {} typesafe-path@0.2.2: {} @@ -4981,7 +4563,9 @@ snapshots: dependencies: semver: 7.6.2 - typescript@5.5.3: {} + typescript@5.7.2: {} + + ultrahtml@1.5.3: {} unified@11.0.5: dependencies: @@ -4991,7 +4575,7 @@ snapshots: extend: 3.0.2 is-plain-obj: 4.1.0 trough: 2.2.0 - vfile: 6.0.1 + vfile: 6.0.3 unist-util-find-after@5.0.0: dependencies: @@ -5039,80 +4623,74 @@ snapshots: unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 - update-browserslist-db@1.1.0(browserslist@4.23.2): - dependencies: - browserslist: 4.23.2 - escalade: 3.1.2 - picocolors: 1.0.1 - util-deprecate@1.0.2: {} vfile-location@5.0.2: dependencies: '@types/unist': 3.0.2 - vfile: 6.0.1 + vfile: 6.0.3 vfile-message@4.0.2: dependencies: '@types/unist': 3.0.2 unist-util-stringify-position: 4.0.0 - vfile@6.0.1: + vfile@6.0.3: dependencies: '@types/unist': 3.0.2 - unist-util-stringify-position: 4.0.0 vfile-message: 4.0.2 - vite@5.3.3: + vite@6.0.3(yaml@2.6.1): dependencies: - esbuild: 0.21.5 - postcss: 8.4.39 - rollup: 4.18.1 + esbuild: 0.24.0 + postcss: 8.4.49 + rollup: 4.28.1 optionalDependencies: fsevents: 2.3.3 + yaml: 2.6.1 - vitefu@0.2.5(vite@5.3.3): + vitefu@1.0.4(vite@6.0.3(yaml@2.6.1)): optionalDependencies: - vite: 5.3.3 + vite: 6.0.3(yaml@2.6.1) - volar-service-css@0.0.59(@volar/language-service@2.4.0-alpha.15): + volar-service-css@0.0.62(@volar/language-service@2.4.11): dependencies: vscode-css-languageservice: 6.3.0 vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 optionalDependencies: - '@volar/language-service': 2.4.0-alpha.15 + '@volar/language-service': 2.4.11 - volar-service-emmet@0.0.59(@volar/language-service@2.4.0-alpha.15): + volar-service-emmet@0.0.62(@volar/language-service@2.4.11): dependencies: '@emmetio/css-parser': 0.4.0 '@emmetio/html-matcher': 1.3.0 '@vscode/emmet-helper': 2.9.3 vscode-uri: 3.0.8 optionalDependencies: - '@volar/language-service': 2.4.0-alpha.15 + '@volar/language-service': 2.4.11 - volar-service-html@0.0.59(@volar/language-service@2.4.0-alpha.15): + volar-service-html@0.0.62(@volar/language-service@2.4.11): dependencies: vscode-html-languageservice: 5.3.0 vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 optionalDependencies: - '@volar/language-service': 2.4.0-alpha.15 + '@volar/language-service': 2.4.11 - volar-service-prettier@0.0.59(@volar/language-service@2.4.0-alpha.15): + volar-service-prettier@0.0.62(@volar/language-service@2.4.11): dependencies: vscode-uri: 3.0.8 optionalDependencies: - '@volar/language-service': 2.4.0-alpha.15 + '@volar/language-service': 2.4.11 - volar-service-typescript-twoslash-queries@0.0.59(@volar/language-service@2.4.0-alpha.15): + volar-service-typescript-twoslash-queries@0.0.62(@volar/language-service@2.4.11): dependencies: vscode-uri: 3.0.8 optionalDependencies: - '@volar/language-service': 2.4.0-alpha.15 + '@volar/language-service': 2.4.11 - volar-service-typescript@0.0.59(@volar/language-service@2.4.0-alpha.15): + volar-service-typescript@0.0.62(@volar/language-service@2.4.11): dependencies: path-browserify: 1.0.1 semver: 7.6.2 @@ -5121,7 +4699,14 @@ snapshots: vscode-nls: 5.2.0 vscode-uri: 3.0.8 optionalDependencies: - '@volar/language-service': 2.4.0-alpha.15 + '@volar/language-service': 2.4.11 + + volar-service-yaml@0.0.62(@volar/language-service@2.4.11): + dependencies: + vscode-uri: 3.0.8 + yaml-language-server: 1.15.0 + optionalDependencies: + '@volar/language-service': 2.4.11 vscode-css-languageservice@6.3.0: dependencies: @@ -5137,8 +4722,23 @@ snapshots: vscode-languageserver-types: 3.17.5 vscode-uri: 3.0.8 + vscode-json-languageservice@4.1.8: + dependencies: + jsonc-parser: 3.3.1 + vscode-languageserver-textdocument: 1.0.11 + vscode-languageserver-types: 3.17.5 + vscode-nls: 5.2.0 + vscode-uri: 3.0.8 + + vscode-jsonrpc@6.0.0: {} + vscode-jsonrpc@8.2.0: {} + vscode-languageserver-protocol@3.16.0: + dependencies: + vscode-jsonrpc: 6.0.0 + vscode-languageserver-types: 3.16.0 + vscode-languageserver-protocol@3.17.5: dependencies: vscode-jsonrpc: 8.2.0 @@ -5146,8 +4746,14 @@ snapshots: vscode-languageserver-textdocument@1.0.11: {} + vscode-languageserver-types@3.16.0: {} + vscode-languageserver-types@3.17.5: {} + vscode-languageserver@7.0.0: + dependencies: + vscode-languageserver-protocol: 3.16.0 + vscode-languageserver@9.0.1: dependencies: vscode-languageserver-protocol: 3.17.5 @@ -5162,18 +4768,13 @@ snapshots: which-pm-runs@1.1.0: {} - which-pm@2.2.0: + which-pm@3.0.0: dependencies: load-yaml-file: 0.2.0 - path-exists: 4.0.0 - - which@2.0.2: - dependencies: - isexe: 2.0.0 - widest-line@4.0.1: + widest-line@5.0.0: dependencies: - string-width: 5.1.2 + string-width: 7.2.0 wrap-ansi@7.0.0: dependencies: @@ -5181,17 +4782,34 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 - wrap-ansi@8.1.0: + wrap-ansi@9.0.0: dependencies: ansi-styles: 6.2.1 - string-width: 5.1.2 + string-width: 7.2.0 strip-ansi: 7.1.0 - wrappy@1.0.2: {} + xxhash-wasm@1.1.0: {} y18n@5.0.8: {} - yallist@3.1.1: {} + yaml-language-server@1.15.0: + dependencies: + ajv: 8.17.1 + lodash: 4.17.21 + request-light: 0.5.8 + vscode-json-languageservice: 4.1.8 + vscode-languageserver: 7.0.0 + vscode-languageserver-textdocument: 1.0.11 + vscode-languageserver-types: 3.17.5 + vscode-nls: 5.2.0 + vscode-uri: 3.0.8 + yaml: 2.2.2 + optionalDependencies: + prettier: 2.8.7 + + yaml@2.2.2: {} + + yaml@2.6.1: {} yargs-parser@21.1.1: {} @@ -5205,12 +4823,21 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 - yocto-queue@0.1.0: {} - yocto-queue@1.1.1: {} - zod-to-json-schema@3.23.1(zod@3.23.8): + yocto-spinner@0.1.2: + dependencies: + yoctocolors: 2.1.1 + + yoctocolors@2.1.1: {} + + zod-to-json-schema@3.24.1(zod@3.23.8): + dependencies: + zod: 3.23.8 + + zod-to-ts@1.2.0(typescript@5.7.2)(zod@3.23.8): dependencies: + typescript: 5.7.2 zod: 3.23.8 zod@3.23.8: {} From dd6e2786e2e3ccf6c35a12cd445abe241a7b685a Mon Sep 17 00:00:00 2001 From: Vitaly Budovski Date: Sun, 15 Dec 2024 15:28:47 +1100 Subject: [PATCH 4/6] refactor: Remove unused issueList logic --- paseri-lib/src/issue.test.ts | 191 ------------------------------ paseri-lib/src/issue.ts | 69 +---------- paseri-lib/src/locales/en.ts | 2 +- paseri-lib/src/locales/index.ts | 1 - paseri-lib/src/locales/message.ts | 24 ---- paseri-lib/src/message.ts | 58 +++++++++ paseri-lib/src/result.ts | 5 +- 7 files changed, 66 insertions(+), 284 deletions(-) delete mode 100644 paseri-lib/src/issue.test.ts delete mode 100644 paseri-lib/src/locales/message.ts create mode 100644 paseri-lib/src/message.ts diff --git a/paseri-lib/src/issue.test.ts b/paseri-lib/src/issue.test.ts deleted file mode 100644 index 74c6a16..0000000 --- a/paseri-lib/src/issue.test.ts +++ /dev/null @@ -1,191 +0,0 @@ -import { expect } from '@std/expect'; -import type { Tagged } from 'type-fest'; -import { type Issue, type TreeNode, addIssue, issueList } from './issue.ts'; - -const { test } = Deno; - -test('Leaf', () => { - const issues = issueList({ - type: 'leaf', - code: 'bad_leaf' as Tagged, - }); - expect(issues).toEqual([{ path: [], code: 'bad_leaf' }] satisfies Issue[]); -}); - -test('Join leaves', () => { - const issues = issueList({ - type: 'join', - left: { type: 'leaf', code: 'bad_leaf1' as Tagged }, - right: { type: 'leaf', code: 'bad_leaf2' as Tagged }, - }); - - expect(issues).toEqual([ - { path: [], code: 'bad_leaf1' }, - { path: [], code: 'bad_leaf2' }, - ] satisfies Issue[]); -}); - -test('Nest single level', () => { - const issues = issueList({ - type: 'nest', - key: 'level1', - child: { type: 'leaf', code: 'bad_leaf' as Tagged }, - }); - - expect(issues).toEqual([{ path: ['level1'], code: 'bad_leaf' }] satisfies Issue[]); -}); - -test('Nest multiple levels', () => { - const issues = issueList({ - type: 'nest', - key: 'level1', - child: { - type: 'nest', - key: 'level2', - child: { - type: 'nest', - key: 'level3', - child: { - type: 'leaf', - code: 'bad_leaf' as Tagged, - }, - }, - }, - }); - - expect(issues).toEqual([{ path: ['level1', 'level2', 'level3'], code: 'bad_leaf' }] satisfies Issue[]); -}); - -test('Join leaf left nested right', () => { - const issues = issueList({ - type: 'join', - left: { - type: 'leaf', - code: 'bad_leaf' as Tagged, - }, - right: { - type: 'nest', - key: 'right', - child: { - type: 'leaf', - code: 'bad_leaf' as Tagged, - }, - }, - }); - - expect(issues).toEqual([ - { path: [], code: 'bad_leaf' }, - { path: ['right'], code: 'bad_leaf' }, - ] satisfies Issue[]); -}); - -test('Join nested left leaf right', () => { - const issues = issueList({ - type: 'join', - left: { - type: 'nest', - key: 'left', - child: { - type: 'leaf', - code: 'bad_leaf' as Tagged, - }, - }, - right: { - type: 'leaf', - code: 'bad_leaf' as Tagged, - }, - }); - - expect(issues).toEqual([ - { path: ['left'], code: 'bad_leaf' }, - { path: [], code: 'bad_leaf' }, - ] satisfies Issue[]); -}); - -test('Join nested left nested right', () => { - const issues = issueList({ - type: 'join', - left: { - type: 'nest', - key: 'left', - child: { - type: 'leaf', - code: 'bad_leaf' as Tagged, - }, - }, - right: { - type: 'nest', - key: 'right', - child: { - type: 'leaf', - code: 'bad_leaf' as Tagged, - }, - }, - }); - - expect(issues).toEqual([ - { path: ['left'], code: 'bad_leaf' }, - { path: ['right'], code: 'bad_leaf' }, - ] satisfies Issue[]); -}); - -test('Add leaf node to empty', () => { - let tree: TreeNode | undefined = undefined; - tree = addIssue(tree, { type: 'leaf', code: 'bad_leaf' as Tagged }); - - expect(tree).toEqual({ type: 'leaf', code: 'bad_leaf' as Tagged } satisfies TreeNode); -}); - -test('Add leaf node to existing leaf node', () => { - let tree: TreeNode = { type: 'leaf', code: 'bad_leaf1' as Tagged }; - tree = addIssue(tree, { type: 'leaf', code: 'bad_leaf2' as Tagged }); - - expect(tree).toEqual({ - type: 'join', - left: { type: 'leaf', code: 'bad_leaf1' as Tagged }, - right: { type: 'leaf', code: 'bad_leaf2' as Tagged }, - } satisfies TreeNode); -}); - -test('Add nest node to empty', () => { - let tree: TreeNode | undefined = undefined; - tree = addIssue(tree, { - type: 'nest', - key: 'child', - child: { - type: 'leaf', - code: 'bad_leaf' as Tagged, - }, - }); - - expect(tree).toEqual({ - type: 'nest', - key: 'child', - child: { - type: 'leaf', - code: 'bad_leaf' as Tagged, - }, - } satisfies TreeNode); -}); - -test('Add nest node to leaf node', () => { - let tree: TreeNode = { type: 'leaf', code: 'bad_leaf' as Tagged }; - tree = addIssue(tree, { - type: 'nest', - key: 'child', - child: { - type: 'leaf', - code: 'bad_leaf' as Tagged, - }, - }); - - expect(tree).toEqual({ - type: 'join', - left: { type: 'leaf', code: 'bad_leaf' as Tagged }, - right: { - type: 'nest', - key: 'child', - child: { type: 'leaf', code: 'bad_leaf' as Tagged }, - }, - } satisfies TreeNode); -}); diff --git a/paseri-lib/src/issue.ts b/paseri-lib/src/issue.ts index a3b3146..d403491 100644 --- a/paseri-lib/src/issue.ts +++ b/paseri-lib/src/issue.ts @@ -1,8 +1,4 @@ import type { Tagged } from 'type-fest'; -import type { Translations } from './locales/index.ts'; -import { message } from './locales/message.ts'; - -type Key = string | number; const issueCodes = { // Common. @@ -32,6 +28,8 @@ const issueCodes = { type IssueCode = (typeof issueCodes)[keyof typeof issueCodes]; type CustomIssueCode = Tagged; +type Key = string | number; + type LeafNode = | { type: 'leaf'; @@ -66,8 +64,6 @@ interface NestNode { type TreeNode = LeafNode | JoinNode | NestNode; -type StackItem = [TreeNode, Key[]]; - interface Issue { path: Key[]; code: string; @@ -78,63 +74,6 @@ interface Message { message: string; } -function messageList(node: TreeNode, locale: Translations): readonly Message[] { - const messages: Message[] = []; - - const stack: StackItem[] = []; - let current: StackItem | undefined = [node, []]; - while (current) { - const [currentNode, currentPath] = current; - - switch (currentNode.type) { - case 'leaf': { - const { code, type, ...placeholders } = currentNode; - - messages.push({ path: currentPath, message: message(locale, currentNode.code, placeholders) }); - break; - } - case 'join': { - stack.push([currentNode.right, currentPath], [currentNode.left, currentPath]); - break; - } - case 'nest': { - stack.push([currentNode.child, [...currentPath, currentNode.key]]); - break; - } - } - - current = stack.pop(); - } - - return messages; -} - -function issueList(node: TreeNode): readonly Issue[] { - const issues: Issue[] = []; - - const stack: StackItem[] = []; - let current: StackItem | undefined = [node, []]; - while (current) { - const [currentNode, currentPath] = current; - - switch (currentNode.type) { - case 'leaf': - issues.push({ path: currentPath, code: currentNode.code }); - break; - case 'join': - stack.push([currentNode.right, currentPath], [currentNode.left, currentPath]); - break; - case 'nest': - stack.push([currentNode.child, [...currentPath, currentNode.key]]); - break; - } - - current = stack.pop(); - } - - return issues; -} - function addIssue(node: TreeNode | undefined, newNode: TreeNode): TreeNode { let tree: TreeNode | undefined = node; if (!tree) { @@ -146,5 +85,5 @@ function addIssue(node: TreeNode | undefined, newNode: TreeNode): TreeNode { return tree; } -export { issueList, addIssue, issueCodes, messageList }; -export type { TreeNode, LeafNode, JoinNode, Issue, IssueCode, CustomIssueCode, Message }; +export { addIssue, issueCodes }; +export type { TreeNode, LeafNode, JoinNode, Issue, IssueCode, CustomIssueCode, Message, Key }; diff --git a/paseri-lib/src/locales/en.ts b/paseri-lib/src/locales/en.ts index b06a287..82687ef 100644 --- a/paseri-lib/src/locales/en.ts +++ b/paseri-lib/src/locales/en.ts @@ -1,4 +1,4 @@ -import type { Translations } from './index.ts'; +import type { Translations } from '../message.ts'; const en = { invalid_type: 'Invalid type. Expected {expected}.', diff --git a/paseri-lib/src/locales/index.ts b/paseri-lib/src/locales/index.ts index 8e6d4ea..a7f2236 100644 --- a/paseri-lib/src/locales/index.ts +++ b/paseri-lib/src/locales/index.ts @@ -1,2 +1 @@ -export type { Translations } from './message.ts'; export { en } from './en.ts'; diff --git a/paseri-lib/src/locales/message.ts b/paseri-lib/src/locales/message.ts deleted file mode 100644 index 471387a..0000000 --- a/paseri-lib/src/locales/message.ts +++ /dev/null @@ -1,24 +0,0 @@ -import type { Simplify, UnwrapTagged } from 'type-fest'; -import type { CustomIssueCode, IssueCode } from '../issue.ts'; - -type Translations = Simplify<{ [Key in UnwrapTagged]: string } & Record>; - -function message( - locale: Translations, - code: IssueCode | CustomIssueCode, - placeholders: Record, -): string { - let value = locale[code]; - if (value === undefined) { - throw new Error(`No message for code ${code}.`); - } - - for (const [placeholder, replacement] of Object.entries(placeholders)) { - value = value.replaceAll(`{${placeholder}}`, replacement); - } - - return value; -} - -export type { Translations }; -export { message }; diff --git a/paseri-lib/src/message.ts b/paseri-lib/src/message.ts new file mode 100644 index 0000000..cc62c8e --- /dev/null +++ b/paseri-lib/src/message.ts @@ -0,0 +1,58 @@ +import type { Simplify, UnwrapTagged } from 'type-fest'; +import type { CustomIssueCode, IssueCode, Key } from './issue.ts'; +import type { Message, TreeNode } from './issue.ts'; + +type Translations = Simplify<{ [Key in UnwrapTagged]: string } & Record>; + +function message( + locale: Translations, + code: IssueCode | CustomIssueCode, + placeholders: Record, +): string { + let value = locale[code]; + if (value === undefined) { + throw new Error(`No message for code ${code}.`); + } + + for (const [placeholder, replacement] of Object.entries(placeholders)) { + value = value.replaceAll(`{${placeholder}}`, replacement); + } + + return value; +} + +type StackItem = [TreeNode, Key[]]; + +function messageList(node: TreeNode, locale: Translations): readonly Message[] { + const messages: Message[] = []; + + const stack: StackItem[] = []; + let current: StackItem | undefined = [node, []]; + while (current) { + const [currentNode, currentPath] = current; + + switch (currentNode.type) { + case 'leaf': { + const { code, type, ...placeholders } = currentNode; + + messages.push({ path: currentPath, message: message(locale, currentNode.code, placeholders) }); + break; + } + case 'join': { + stack.push([currentNode.right, currentPath], [currentNode.left, currentPath]); + break; + } + case 'nest': { + stack.push([currentNode.child, [...currentPath, currentNode.key]]); + break; + } + } + + current = stack.pop(); + } + + return messages; +} + +export type { Translations }; +export { messageList }; diff --git a/paseri-lib/src/result.ts b/paseri-lib/src/result.ts index 6354673..e769023 100644 --- a/paseri-lib/src/result.ts +++ b/paseri-lib/src/result.ts @@ -1,5 +1,6 @@ -import { type CustomIssueCode, type Message, type TreeNode, messageList } from './issue.ts'; -import { type Translations, en } from './locales/index.ts'; +import type { CustomIssueCode, Message, TreeNode } from './issue.ts'; +import { en } from './locales/index.ts'; +import { type Translations, messageList } from './message.ts'; interface ParseSuccessResult { readonly ok: true; From 781fbdc8cd2b634c489d4d6ec3fc5306da9d55c1 Mon Sep 17 00:00:00 2001 From: Vitaly Budovski Date: Sun, 22 Dec 2024 12:53:56 +1100 Subject: [PATCH 5/6] doc: Document the messages usage --- .../{ => Schema}/Collections/array.mdx | 0 .../{ => Schema}/Collections/map.mdx | 0 .../{ => Schema}/Collections/object.mdx | 0 .../{ => Schema}/Collections/record.mdx | 0 .../{ => Schema}/Collections/set.mdx | 0 .../{ => Schema}/Collections/tuple.mdx | 0 .../reference/{ => Schema}/Others/lazy.mdx | 0 .../reference/{ => Schema}/Others/literal.mdx | 0 .../reference/{ => Schema}/Others/never.mdx | 0 .../reference/{ => Schema}/Others/union.mdx | 0 .../reference/{ => Schema}/Others/unknown.mdx | 0 .../{ => Schema}/Primitives/bigint.mdx | 0 .../{ => Schema}/Primitives/boolean.mdx | 0 .../{ => Schema}/Primitives/null.mdx | 0 .../{ => Schema}/Primitives/number.mdx | 0 .../{ => Schema}/Primitives/string.mdx | 0 .../{ => Schema}/Primitives/symbol.mdx | 0 .../{ => Schema}/Primitives/undefined.mdx | 0 .../{schema.mdx => Schema/common.mdx} | 10 +++--- .../src/content/docs/reference/messages.mdx | 33 +++++++++++++++++++ paseri-lib/src/locales/en-AU.ts | 5 +++ paseri-lib/src/locales/en-GB.ts | 21 ++++++++++++ paseri-lib/src/locales/en-US.ts | 8 +++++ paseri-lib/src/locales/en.ts | 20 ++--------- paseri-lib/src/locales/index.ts | 3 ++ 25 files changed, 78 insertions(+), 22 deletions(-) rename paseri-docs/src/content/docs/reference/{ => Schema}/Collections/array.mdx (100%) rename paseri-docs/src/content/docs/reference/{ => Schema}/Collections/map.mdx (100%) rename paseri-docs/src/content/docs/reference/{ => Schema}/Collections/object.mdx (100%) rename paseri-docs/src/content/docs/reference/{ => Schema}/Collections/record.mdx (100%) rename paseri-docs/src/content/docs/reference/{ => Schema}/Collections/set.mdx (100%) rename paseri-docs/src/content/docs/reference/{ => Schema}/Collections/tuple.mdx (100%) rename paseri-docs/src/content/docs/reference/{ => Schema}/Others/lazy.mdx (100%) rename paseri-docs/src/content/docs/reference/{ => Schema}/Others/literal.mdx (100%) rename paseri-docs/src/content/docs/reference/{ => Schema}/Others/never.mdx (100%) rename paseri-docs/src/content/docs/reference/{ => Schema}/Others/union.mdx (100%) rename paseri-docs/src/content/docs/reference/{ => Schema}/Others/unknown.mdx (100%) rename paseri-docs/src/content/docs/reference/{ => Schema}/Primitives/bigint.mdx (100%) rename paseri-docs/src/content/docs/reference/{ => Schema}/Primitives/boolean.mdx (100%) rename paseri-docs/src/content/docs/reference/{ => Schema}/Primitives/null.mdx (100%) rename paseri-docs/src/content/docs/reference/{ => Schema}/Primitives/number.mdx (100%) rename paseri-docs/src/content/docs/reference/{ => Schema}/Primitives/string.mdx (100%) rename paseri-docs/src/content/docs/reference/{ => Schema}/Primitives/symbol.mdx (100%) rename paseri-docs/src/content/docs/reference/{ => Schema}/Primitives/undefined.mdx (100%) rename paseri-docs/src/content/docs/reference/{schema.mdx => Schema/common.mdx} (84%) create mode 100644 paseri-docs/src/content/docs/reference/messages.mdx create mode 100644 paseri-lib/src/locales/en-AU.ts create mode 100644 paseri-lib/src/locales/en-GB.ts create mode 100644 paseri-lib/src/locales/en-US.ts diff --git a/paseri-docs/src/content/docs/reference/Collections/array.mdx b/paseri-docs/src/content/docs/reference/Schema/Collections/array.mdx similarity index 100% rename from paseri-docs/src/content/docs/reference/Collections/array.mdx rename to paseri-docs/src/content/docs/reference/Schema/Collections/array.mdx diff --git a/paseri-docs/src/content/docs/reference/Collections/map.mdx b/paseri-docs/src/content/docs/reference/Schema/Collections/map.mdx similarity index 100% rename from paseri-docs/src/content/docs/reference/Collections/map.mdx rename to paseri-docs/src/content/docs/reference/Schema/Collections/map.mdx diff --git a/paseri-docs/src/content/docs/reference/Collections/object.mdx b/paseri-docs/src/content/docs/reference/Schema/Collections/object.mdx similarity index 100% rename from paseri-docs/src/content/docs/reference/Collections/object.mdx rename to paseri-docs/src/content/docs/reference/Schema/Collections/object.mdx diff --git a/paseri-docs/src/content/docs/reference/Collections/record.mdx b/paseri-docs/src/content/docs/reference/Schema/Collections/record.mdx similarity index 100% rename from paseri-docs/src/content/docs/reference/Collections/record.mdx rename to paseri-docs/src/content/docs/reference/Schema/Collections/record.mdx diff --git a/paseri-docs/src/content/docs/reference/Collections/set.mdx b/paseri-docs/src/content/docs/reference/Schema/Collections/set.mdx similarity index 100% rename from paseri-docs/src/content/docs/reference/Collections/set.mdx rename to paseri-docs/src/content/docs/reference/Schema/Collections/set.mdx diff --git a/paseri-docs/src/content/docs/reference/Collections/tuple.mdx b/paseri-docs/src/content/docs/reference/Schema/Collections/tuple.mdx similarity index 100% rename from paseri-docs/src/content/docs/reference/Collections/tuple.mdx rename to paseri-docs/src/content/docs/reference/Schema/Collections/tuple.mdx diff --git a/paseri-docs/src/content/docs/reference/Others/lazy.mdx b/paseri-docs/src/content/docs/reference/Schema/Others/lazy.mdx similarity index 100% rename from paseri-docs/src/content/docs/reference/Others/lazy.mdx rename to paseri-docs/src/content/docs/reference/Schema/Others/lazy.mdx diff --git a/paseri-docs/src/content/docs/reference/Others/literal.mdx b/paseri-docs/src/content/docs/reference/Schema/Others/literal.mdx similarity index 100% rename from paseri-docs/src/content/docs/reference/Others/literal.mdx rename to paseri-docs/src/content/docs/reference/Schema/Others/literal.mdx diff --git a/paseri-docs/src/content/docs/reference/Others/never.mdx b/paseri-docs/src/content/docs/reference/Schema/Others/never.mdx similarity index 100% rename from paseri-docs/src/content/docs/reference/Others/never.mdx rename to paseri-docs/src/content/docs/reference/Schema/Others/never.mdx diff --git a/paseri-docs/src/content/docs/reference/Others/union.mdx b/paseri-docs/src/content/docs/reference/Schema/Others/union.mdx similarity index 100% rename from paseri-docs/src/content/docs/reference/Others/union.mdx rename to paseri-docs/src/content/docs/reference/Schema/Others/union.mdx diff --git a/paseri-docs/src/content/docs/reference/Others/unknown.mdx b/paseri-docs/src/content/docs/reference/Schema/Others/unknown.mdx similarity index 100% rename from paseri-docs/src/content/docs/reference/Others/unknown.mdx rename to paseri-docs/src/content/docs/reference/Schema/Others/unknown.mdx diff --git a/paseri-docs/src/content/docs/reference/Primitives/bigint.mdx b/paseri-docs/src/content/docs/reference/Schema/Primitives/bigint.mdx similarity index 100% rename from paseri-docs/src/content/docs/reference/Primitives/bigint.mdx rename to paseri-docs/src/content/docs/reference/Schema/Primitives/bigint.mdx diff --git a/paseri-docs/src/content/docs/reference/Primitives/boolean.mdx b/paseri-docs/src/content/docs/reference/Schema/Primitives/boolean.mdx similarity index 100% rename from paseri-docs/src/content/docs/reference/Primitives/boolean.mdx rename to paseri-docs/src/content/docs/reference/Schema/Primitives/boolean.mdx diff --git a/paseri-docs/src/content/docs/reference/Primitives/null.mdx b/paseri-docs/src/content/docs/reference/Schema/Primitives/null.mdx similarity index 100% rename from paseri-docs/src/content/docs/reference/Primitives/null.mdx rename to paseri-docs/src/content/docs/reference/Schema/Primitives/null.mdx diff --git a/paseri-docs/src/content/docs/reference/Primitives/number.mdx b/paseri-docs/src/content/docs/reference/Schema/Primitives/number.mdx similarity index 100% rename from paseri-docs/src/content/docs/reference/Primitives/number.mdx rename to paseri-docs/src/content/docs/reference/Schema/Primitives/number.mdx diff --git a/paseri-docs/src/content/docs/reference/Primitives/string.mdx b/paseri-docs/src/content/docs/reference/Schema/Primitives/string.mdx similarity index 100% rename from paseri-docs/src/content/docs/reference/Primitives/string.mdx rename to paseri-docs/src/content/docs/reference/Schema/Primitives/string.mdx diff --git a/paseri-docs/src/content/docs/reference/Primitives/symbol.mdx b/paseri-docs/src/content/docs/reference/Schema/Primitives/symbol.mdx similarity index 100% rename from paseri-docs/src/content/docs/reference/Primitives/symbol.mdx rename to paseri-docs/src/content/docs/reference/Schema/Primitives/symbol.mdx diff --git a/paseri-docs/src/content/docs/reference/Primitives/undefined.mdx b/paseri-docs/src/content/docs/reference/Schema/Primitives/undefined.mdx similarity index 100% rename from paseri-docs/src/content/docs/reference/Primitives/undefined.mdx rename to paseri-docs/src/content/docs/reference/Schema/Primitives/undefined.mdx diff --git a/paseri-docs/src/content/docs/reference/schema.mdx b/paseri-docs/src/content/docs/reference/Schema/common.mdx similarity index 84% rename from paseri-docs/src/content/docs/reference/schema.mdx rename to paseri-docs/src/content/docs/reference/Schema/common.mdx index 1bb074f..41bf7ab 100644 --- a/paseri-docs/src/content/docs/reference/schema.mdx +++ b/paseri-docs/src/content/docs/reference/Schema/common.mdx @@ -1,5 +1,5 @@ --- -title: "Schema" +title: "Common" sidebar: order: 0 --- @@ -11,7 +11,8 @@ All schemas contain some common methods. ### `parse` The `parse` method takes a `value` parameter as input. If the `value` conforms to the schema, then the parsed value is -returned with the appropriate type, otherwise an exception is thrown. +returned with the appropriate type, otherwise an exception containing a `messages` method is thrown. See the +[messages](/reference/messages/) reference for details. ```typescript import * as p from '@vbudovski/paseri'; @@ -28,7 +29,8 @@ try { ### `safeParse` The `safeParse` method takes a `value` parameter as input. The result is a discriminated union with a `boolean` member -`ok`. You can use it to extract the parsed value on success, or a list of issues on failure. +`ok`. You can use it to extract the parsed value on success or get the error [messages](/reference/messages/) using +`result.messages()`. ```typescript import * as p from '@vbudovski/paseri'; @@ -38,7 +40,7 @@ const result = schema.safeParse('foo'); if (result.ok) { // Do something with the `result.value`. } else { - // Do something with the `result.issue`. + // Do something with the `result.messages()`. } ``` diff --git a/paseri-docs/src/content/docs/reference/messages.mdx b/paseri-docs/src/content/docs/reference/messages.mdx new file mode 100644 index 0000000..f52a155 --- /dev/null +++ b/paseri-docs/src/content/docs/reference/messages.mdx @@ -0,0 +1,33 @@ +--- +title: "Messages" +--- + +In order to support localised error messages, each parsing error produces a unique error code. This is then looked up in +the messages object for the selected locale. When calling the `messages` method on either the `safeParse` result or the +exception thrown from `parse`, you can pass the desired messages object as the parameter. The default messages can be +found in `locales/en.ts`. + +## Contributing new translations + +You can copy the definition of the closest language to the one you are targeting as a starting point, if one exists. +If there isn't a suitable starting point, please create a new file. Be sure to follow the TypeScript type `Translations` +to ensure all standard messages are handled. The naming of the file should follow the pattern `-`, +where the language is a 2-letter [ISO 639](https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes) code, and the +country is a 2-letter [ISO 3166](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) code. For example, `en-GB` or +`pt-BR`. + +# Custom error codes + +You can extend the messages object to add your custom error codes and corresponding translations. + +```typescript +import { en } from '@vbudovski/paseri/locales'; + +const enCustom = { + ...en, + ...{ + foo: 'This is a `foo` error.', + bar: 'This is a `bar` error.', + } +} satisfies Translations; +``` diff --git a/paseri-lib/src/locales/en-AU.ts b/paseri-lib/src/locales/en-AU.ts new file mode 100644 index 0000000..a79960b --- /dev/null +++ b/paseri-lib/src/locales/en-AU.ts @@ -0,0 +1,5 @@ +import { en_GB } from './en-GB.ts'; + +const en_AU = en_GB; + +export { en_AU }; diff --git a/paseri-lib/src/locales/en-GB.ts b/paseri-lib/src/locales/en-GB.ts new file mode 100644 index 0000000..e05bbfa --- /dev/null +++ b/paseri-lib/src/locales/en-GB.ts @@ -0,0 +1,21 @@ +import type { Translations } from '../message.ts'; + +const en_GB = { + invalid_type: 'Invalid type. Expected {expected}.', + too_short: 'Too short.', + too_long: 'Too long.', + invalid_email: 'Invalid email.', + invalid_emoji: 'Invalid emoji.', + invalid_uuid: 'Invalid UUID.', + invalid_nanoid: 'Invalid Nano ID.', + too_small: 'Too small.', + too_large: 'Too large.', + invalid_integer: 'Number must be an integer.', + invalid_finite: 'Number must be finite.', + invalid_safe_integer: 'Number must be a safe integer.', + invalid_value: 'Invalid value. Expected {expected}.', + unrecognized_key: 'Unrecognised key.', + missing_value: 'Missing value.', +} satisfies Translations; + +export { en_GB }; diff --git a/paseri-lib/src/locales/en-US.ts b/paseri-lib/src/locales/en-US.ts new file mode 100644 index 0000000..c6b6af8 --- /dev/null +++ b/paseri-lib/src/locales/en-US.ts @@ -0,0 +1,8 @@ +import { en_GB } from './en-GB.ts'; + +const en_US = { + ...en_GB, + unrecognized_key: 'Unrecognized key.', +}; + +export { en_US }; diff --git a/paseri-lib/src/locales/en.ts b/paseri-lib/src/locales/en.ts index 82687ef..3061300 100644 --- a/paseri-lib/src/locales/en.ts +++ b/paseri-lib/src/locales/en.ts @@ -1,21 +1,5 @@ -import type { Translations } from '../message.ts'; +import { en_GB } from './en-GB.ts'; -const en = { - invalid_type: 'Invalid type. Expected {expected}.', - too_short: 'Too short.', - too_long: 'Too long.', - invalid_email: 'Invalid email.', - invalid_emoji: 'Invalid emoji.', - invalid_uuid: 'Invalid UUID.', - invalid_nanoid: 'Invalid Nano ID.', - too_small: 'Too small.', - too_large: 'Too large.', - invalid_integer: 'Number must be an integer.', - invalid_finite: 'Number must be finite.', - invalid_safe_integer: 'Number must be a safe integer.', - invalid_value: 'Invalid value. Expected {expected}.', - unrecognized_key: 'Unrecognised key.', - missing_value: 'Missing value.', -} satisfies Translations; +const en = en_GB; export { en }; diff --git a/paseri-lib/src/locales/index.ts b/paseri-lib/src/locales/index.ts index a7f2236..572e998 100644 --- a/paseri-lib/src/locales/index.ts +++ b/paseri-lib/src/locales/index.ts @@ -1 +1,4 @@ export { en } from './en.ts'; +export { en_AU } from './en-AU.ts'; +export { en_GB } from './en-GB.ts'; +export { en_US } from './en-US.ts'; From 81652ef8cfe7019840afb05d2618e20447ea9c54 Mon Sep 17 00:00:00 2001 From: Vitaly Budovski Date: Sun, 22 Dec 2024 13:55:57 +1100 Subject: [PATCH 6/6] fix: JSR warnings --- paseri-lib/deno.json | 6 +++++- paseri-lib/src/result.ts | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/paseri-lib/deno.json b/paseri-lib/deno.json index c14c425..c9cf966 100644 --- a/paseri-lib/deno.json +++ b/paseri-lib/deno.json @@ -1,5 +1,6 @@ { "name": "@vbudovski/paseri", + "license": "MIT", "version": "0.1.0", "exports": "./src/index.ts", "imports": { @@ -9,7 +10,7 @@ "esbuild": "npm:esbuild", "expect-type": "npm:expect-type", "fast-check": "npm:fast-check", - "type-fest": "npm:type-fest", + "type-fest": "npm:type-fest@4.30.0", "typescript": "npm:typescript", "zod": "npm:zod" }, @@ -22,5 +23,8 @@ "rules": { "exclude": ["no-explicit-any", "no-unused-vars"] } + }, + "publish": { + "include": ["src"] } } diff --git a/paseri-lib/src/result.ts b/paseri-lib/src/result.ts index e769023..01b609d 100644 --- a/paseri-lib/src/result.ts +++ b/paseri-lib/src/result.ts @@ -18,7 +18,7 @@ class ParseErrorResult { get issue(): TreeNode { return this._issue; } - messages(locale: Translations = en) { + messages(locale: Translations = en): readonly Message[] { if (this._messageList === undefined) { this._messageList = messageList(this._issue, locale); } @@ -36,7 +36,7 @@ class PaseriError extends Error { this._issue = issue; } - messages(locale: Translations = en) { + messages(locale: Translations = en): readonly Message[] { if (this._messageList === undefined) { this._messageList = messageList(this._issue, locale); }