node/mongo server

This commit is contained in:
polv committed 2026-03-02 23:51:25 +07:00
1 parent 5b8a728db4
commit bedb810119
16 files changed
+1558 -8

No files matched your search

+3
View File
@@ -3,6 +3,9 @@
{
"path": ".",
},
{
"path": "js-server",
},
{
"path": "src-core",
},
+1
View File
@@ -0,0 +1 @@
.env
+24
View File
@@ -0,0 +1,24 @@
{
"editor.tabSize": 2,
"[vue]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true
},
"[typescript]": {
"editor.formatOnSave": true
},
"[javascript]": {
"editor.formatOnSave": true
},
"[jsonc]": {
"editor.formatOnSave": true
},
"[rust]": {
"editor.tabSize": 4,
"editor.formatOnSave": true
},
"cmake.ignoreCMakeListsMissing": true,
"code-runner.executorMap": {
"typescript": "tsx"
}
}
+25
View File
@@ -0,0 +1,25 @@
{
"name": "js-server",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"packageManager": "pnpm@10.30.3",
"dependencies": {
"@types/adm-zip": "^0.5.7",
"adm-zip": "^0.5.16",
"dotenv": "^17.3.1",
"fastify": "^5.7.4",
"mongodb": "^7.1.0"
},
"devDependencies": {
"@types/node": "^24.10.13",
"tsx": "^4.21.0",
"typescript": "~5.8.3"
}
}
View File
Whitespace-only changes.
+202
View File
@@ -0,0 +1,202 @@
import "dotenv/config";
import AdmZip from "adm-zip";
import { readdirSync } from "fs";
import { MongoClient, ObjectId } from "mongodb";
import { join as joinPath } from "path";
import { Kanji, KanjiEntry } from "./kanji";
import { KanjiMeta, KanjiMetaEntry } from "./kanji-meta";
import { Tag, TagEntry } from "./tag";
import { Term, TermEntry } from "./term";
import { TermMeta, TermMetaEntry } from "./term-meta";
if (require.main === module) {
const client = new MongoClient(process.env.MONGO_URI!);
(async () => {
await client.connect();
const db = client.db("yomitan");
const colMeta = db.collection<DictionaryIndex>("meta");
await colMeta.createIndex({ title: 1 }, { unique: true });
const colKanjiMeta = db.collection<KanjiMeta & { meta_id: ObjectId }>(
"kanji-meta",
);
await colKanjiMeta.createIndex({ meta_id: 1 });
const colKanji = db.collection<Kanji & { meta_id: ObjectId }>("kanji");
await colKanji.createIndex({ meta_id: 1 });
const colTag = db.collection<Tag & { meta_id: ObjectId }>("tag");
await colTag.createIndex({ meta_id: 1 });
const colTermMeta = db.collection<TermMeta & { meta_id: ObjectId }>(
"term-meta",
);
await colTermMeta.createIndex({ meta_id: 1 });
const colTerm = db.collection<Term & { meta_id: ObjectId }>("term");
await colTerm.createIndex({ meta_id: 1 });
const zipPath = "../src-tauri/resources/yomitan/ja";
for (const f of readdirSync(zipPath)) {
if (!f.endsWith(".zip")) continue;
const zipFile = new AdmZip(joinPath(zipPath, f));
const idx = zipFile.getEntry("index.json");
if (!idx) continue;
const meta: DictionaryIndex = JSON.parse(idx.getData().toString("utf-8"));
const title = meta.title.replace(/\[.+?\]$/, "").trimEnd();
if (title !== meta.title) {
console.log(meta.title);
meta.title = title;
}
console.log(meta.title);
const it = await colMeta.insertOne(meta).catch((e) => {
console.error(e);
return null;
});
if (!it) continue;
const meta_id = it.insertedId;
for (const et of zipFile.getEntries()) {
const f = et.entryName;
if (f.startsWith("kanji_meta_bank")) {
// yet empty
await colKanjiMeta.insertMany(
JSON.parse(et.getData().toString("utf-8")).map((t: any) => ({
meta_id,
...KanjiMetaEntry.fromBank(t).json,
})),
);
} else if (f.startsWith("kanji_bank")) {
// yet empty
await colKanji.insertMany(
JSON.parse(et.getData().toString("utf-8")).map((t: any) => ({
meta_id,
...KanjiEntry.fromBank(t).json,
})),
);
} else if (f.startsWith("tag_bank")) {
// 5 so far
await colTag.insertMany(
JSON.parse(et.getData().toString("utf-8")).map((t: any) => ({
meta_id,
...TagEntry.fromBank(t).json,
})),
);
} else if (f.startsWith("term_bank")) {
// lots
await colTerm.insertMany(
JSON.parse(et.getData().toString("utf-8")).map((t: any) => ({
meta_id,
...TermEntry.fromBank(t).json,
})),
);
} else if (f.startsWith("term_meta_bank")) {
// yet empty
await colTermMeta.insertMany(
JSON.parse(et.getData().toString("utf-8")).map((t: any) => ({
meta_id,
...TermMetaEntry.fromBank(t).json,
})),
);
}
}
}
})().finally(async () => {
await client.close();
});
}
/**
* The schema for the index.json file that contains metadata about the dictionary.
* PLEASE ALWAYS PUT AS MUCH DETAIL IN THIS AS POSSIBLE.
*
* Note that this information can be displayed in Yomichan by going to the dictionaries overview page
* and clicking the three dots, then Details....
*
* "isoLanguageCode": {
* "type": "string",
* "description": "ISO language code (ISO 639-1 where possible, ISO 639-3 otherwise).",
* "pattern": "^[a-z]{2,3}$"
* }
* "required": [
* "title",
* "revision"
* ],
* "anyOf": [
* {
* "required": ["format"]
* },
* {
* "required": ["version"]
* }
* ],
* "dependencies": {
* "isUpdatable": ["indexUrl", "downloadUrl"]
* }
*
* @see https://github.com/yomidevs/yomitan/blob/master/ext/data/schemas/dictionary-index-schema.json
*/
interface DictionaryIndex {
title: string;
// "description": "Title of the dictionary."
revision: string;
// "description": "Revision of the dictionary. This value is displayed, and used to check for dictionary updates."
minimumYomitanVersion?: string;
// "description": "Minimum version of Yomitan that is compatible with this dictionary."
sequenced?: boolean;
// "default": false,
// "description": "Whether or not this dictionary contains sequencing information for related terms."
format?: 1 | 2 | 3;
// "type": "integer",
// "description": "Format of data found in the JSON data files.",
// "enum": [1, 2, 3]
version?: 1 | 2 | 3;
// "type": "integer",
// "description": "Alias for format.",
// "enum": [1, 2, 3]
author?: string;
// "description": "Creator of the dictionary."
isUpdatable?: boolean;
// "const": true,
// "description": "Whether this dictionary contains links to its latest version."
indexUrl?: string;
// "description": "URL for the index file of the latest revision of the dictionary, used to check for updates."
downloadUrl?: string;
// "description": "URL for the download of the latest revision of the dictionary."
url?: string;
// "description": "URL for the source of the dictionary, displayed in the dictionary details."
description?: string;
// "description": "Description of the dictionary data."
attribution?: string;
// "description": "Attribution information for the dictionary data."
sourceLanguage?: string;
// "$ref": "#/definitions/isoLanguageCode",
// "description": "Language of the terms in the dictionary."
targetLanguage?: string;
// "$ref": "#/definitions/isoLanguageCode",
// "description": "Main language of the definitions in the dictionary."
frequencyMode?: "occurrence-based" | "rank-based";
tagMeta?: {
// "description": "Tag information for terms and kanji. This object is obsolete and individual tag files should be used instead.",
// "description": "Information about a single tag. The object key is the name of the tag.",
category?: string;
// "description": "Category for the tag."
order?: number;
// "description": "Sorting order for the tag."
notes?: string;
// "description": "Notes for the tag."
score?: number;
// "description": "Score used to determine popularity. Negative values are more rare and positive values are more frequent. This score is also used to sort search results."
};
}
+62
View File
@@ -0,0 +1,62 @@
export interface KanjiMeta {
character: string;
type: string;
freqNumber?: number;
freqString?: string;
}
export class KanjiMetaEntry {
static fromBank([character, type, freq]: DictionaryKanjiMeta) {
let freqNumber = 0;
let freqString = "";
if (freq) {
if (typeof freq === "string") {
freqString = freq;
} else if (typeof freq === "number") {
freqNumber = freq;
} else {
freqString = freq.displayValue || "";
freqNumber = freq.value;
}
}
return new KanjiMetaEntry({
character,
type,
freqNumber: freqNumber || undefined,
freqString: freqString || undefined,
});
}
constructor(public json: KanjiMeta) {}
}
/**
* kanji_meta_bank_${number}.json
*
* The meta bank for kanji information. Right now, this is only used to store kanji frequency data.
*
* @see https://github.com/themoeway/yomitan/tree/master/ext/data/schemas/dictionary-kanji-meta-bank-v3-schema.json
*/
type DictionaryKanjiMetaBankV3 = DictionaryKanjiMeta[];
type DictionaryKanjiMeta = [
// "description": "Metadata about a single kanji character.",
// "minItems": 3,
// "maxItems": 3,
string,
// "minLength": 1
string,
// "const": "freq",
// "description": "Type of data. \"freq\" corresponds to frequency information."
Frequency,
];
export type Frequency = string | number | FrequencyObject;
interface FrequencyObject {
value: number;
displayValue?: string;
}
+63
View File
@@ -0,0 +1,63 @@
export interface Kanji {
character: string;
onyomi?: string[];
kunyomi?: string[];
tags?: string[];
meanings?: string[];
stats?: Record<string, string>;
}
export class KanjiEntry {
static fromBank([
character,
onyomi,
kunyomi,
tags,
meanings,
stats,
]: DictionaryKanji) {
return new KanjiEntry({
character,
onyomi: onyomi ? onyomi.split(" ") : undefined,
kunyomi: kunyomi ? kunyomi.split(" ") : undefined,
tags: tags ? tags.split(" ") : undefined,
meanings: meanings.length ? meanings : undefined,
stats,
});
}
constructor(public json: Kanji) {}
}
/**
* kanji_bank_${number}.json
*
* Contains information used in the kanji viewer - meaning, readings, statistics, and codepoints.
* Unfortunately a lot of the structuring is hardcoded and can't be customized nearly as much as with term definitions.
*
* @see https://github.com/yomidevs/yomitan/blob/master/ext/data/schemas/dictionary-kanji-bank-v3-schema.json
*/
type DictionaryKanjiBankV3 = DictionaryKanji[];
type DictionaryKanji = [
// "description": "Information about a single kanji character.",
// "minItems": 6,
// "maxItems": 6,
string,
// "description": "Kanji character.",
// "minLength": 1
string,
// "description": "String of space-separated onyomi readings for the kanji character. An empty string is treated as no readings."
string,
// "description": "String of space-separated kunyomi readings for the kanji character. An empty string is treated as no readings."
string,
// "description": "String of space-separated tags for the kanji character. An empty string is treated as no tags."
string[],
// "description": "Array of meanings for the kanji character.",
{
// "description": "Various stats for the kanji character.",
[k: string]: string;
},
];
+52
View File
@@ -0,0 +1,52 @@
export interface Tag {
tag: string;
category: string;
sorting: number;
notes: string;
popularity: number;
}
export class TagEntry {
static fromBank([tag, category, sorting, notes, popularity]: DictionaryTag) {
return new TagEntry({
tag,
category,
sorting,
notes,
popularity,
});
}
constructor(public json: Tag) {}
}
/**
* tag_bank_${number}.json
*
* The tag bank for term information.
*
* This is where you'll define tags for kanji and term dictionaries, like for example specifying parts of speech or kanken level.
* These are generally displayed in Yomichan as grey tags next to the dictionary name.
*
* @see https://github.com/yomidevs/yomitan/blob/master/ext/data/schemas/dictionary-tag-bank-v3-schema.json
*/
type DictionaryTagBankV3 = DictionaryTag[];
type DictionaryTag = [
// "description": "Information about a single tag.",
// "minItems": 5,
// "maxItems": 5,
string,
// "description": "Tag name."
string,
// "description": "Category for the tag."
number,
// "description": "Sorting order for the tag."
string,
// "description": "Notes for the tag."
number,
// "description": "Score used to determine popularity.
// Negative values are more rare and positive values are more frequent.
// This score is also used to sort search results."
];
+154
View File
@@ -0,0 +1,154 @@
import { Frequency } from "./kanji-meta";
export interface TermFreq {
text: string;
type: "freq";
data: {
reading?: string;
freqNumber?: number;
freqString?: string;
};
}
export interface TermPitch {
text: string;
type: "pitch";
data: {
pitches: PitchEntry[];
};
}
export interface TermIPA {
text: string;
type: "ipa";
data: {
reading: string;
transcriptions: IPATranscription[];
};
}
export type TermMeta = TermFreq | TermPitch | TermIPA;
export class TermMetaEntry {
static fromBank([text, type, data]: DictionaryTermMeta) {
switch (type) {
case "freq":
const freq = data;
let reading = "";
let freqNumber = 0;
let freqString = "";
if (freq) {
if (typeof freq === "string") {
freqString = freq;
} else if (typeof freq === "number") {
freqNumber = freq;
} else if ("reading" in freq) {
reading = freq.reading;
const f = freq.frequency;
if (typeof f === "string") {
freqString = f;
} else if (typeof f === "number") {
freqNumber = f;
} else {
freqString = f.displayValue || "";
freqNumber = f.value;
}
} else {
freqString = freq.displayValue || "";
freqNumber = freq.value;
}
}
return new TermMetaEntry({
text,
type,
data: {
reading: reading || undefined,
freqNumber: freqNumber || undefined,
freqString: freqString || undefined,
},
});
case "pitch":
return new TermMetaEntry({ text, type, data });
case "ipa":
return new TermMetaEntry({ text, type, data });
}
return new TermMetaEntry({
text,
type,
data: data as any,
});
}
constructor(public json: TermMeta) {}
}
type DictionaryTermMetaBankV3 = DictionaryTermMeta[];
type DictionaryTermMeta =
| DictionaryTermMeta_freq
| DictionaryTermMeta_pitch
| DictionaryTermMeta_ipa;
type DictionaryTermMeta_freq = [string, "freq", Frequency | ReadingFrequency];
type DictionaryTermMeta_pitch = [string, "pitch", Pitch];
type DictionaryTermMeta_ipa = [string, "ipa", IPA];
interface ReadingFrequency {
reading: string;
// "description": "Reading for the term."
frequency: Frequency;
}
interface Pitch {
reading: string;
pitches: PitchEntry[];
}
interface PitchEntry {
position: PitchPosition_integer | PitchPosition_string;
nasal?: PitchNasal | PitchNasal[];
devoice?: PitchDevoice | PitchDevoice[];
tags?: string[];
// "description": "Tag for this pitch accent. This typically corresponds to a certain type of part of speech."
}
type PitchPosition_integer = number;
// "type": "integer",
// "description": "Mora position of the pitch accent downstep. A value of 0 indicates that the word does not have a downstep (heiban).",
// "minimum": 0
type PitchPosition_string = string;
// "type": "string",
// "description": "Pitch level of each mora with H representing high and L representing low. For example: HHLL for a 4 mora word. Add an additional pitch level at the end to explicitly define the suffix.",
// "pattern": "^[HL]+$"
type PitchNasal = number;
// "type": "integer",
// "description": "Position of a mora with nasal sound.",
// "minimum": 0
type PitchDevoice = number;
// "type": "integer",
// "description": "Position of a mora with devoiced sound.",
// "minimum": 0
interface IPA {
// "description": "IPA transcription information for the term.",
reading: string;
// "description": "Reading for the term."
transcriptions: IPATranscription[];
}
interface IPATranscription {
ipa?: string;
// "description": "IPA transcription for the term."
tags: string[];
// "description": "Tag for this IPA transcription."
}
+334
View File
@@ -0,0 +1,334 @@
export interface Term {
text: string;
reading?: string;
defTags?: string[];
rules?: string[];
popularity?: number;
definition: DictionaryDefinition;
sequence?: number;
tags?: string[];
}
export class TermEntry {
static fromBank([
text,
reading,
defTags,
rules,
popularity,
definition,
sequence,
tags,
]: DictionaryTerm) {
return new TermEntry({
text,
reading,
defTags: defTags ? defTags.split(" ") : undefined,
rules: rules ? rules.split(" ") : undefined,
popularity,
definition,
sequence,
tags: tags ? tags.split(" ") : undefined,
});
}
constructor(public json: Term) {}
}
/**
* term_bank_${number}.json
*
* The term bank for term information. This is where dictionary readings, definitions, and such are stored.
*
* @see https://github.com/themoeway/yomitan/tree/master/ext/data/schemas/dictionary-term-bank-v3-schema.json
*/
type DictionaryTermBankV3 = DictionaryTerm[];
type DictionaryTerm = [
// "description": "Information about a single term.",
// "minItems": 8,
// "maxItems": 8,
string,
// "description": "The text for the term."
// "description": "Reading of the term, or an empty string if the reading is the same as the term."
string,
string | null,
// "description": "String of space-separated tags for the definition. An empty string is treated as no tags."
string,
// "description": "String of space-separated rule identifiers for the definition which is used to validate deinflection.
// An empty string should be used for words which aren't inflected."
number,
// "description": "Score used to determine popularity.
// Negative values are more rare and positive values are more frequent.
// This score is also used to sort search results."
DictionaryDefinition,
number,
// "type": "integer",
// "description": "Sequence number for the term.
// Terms with the same sequence number can be shown together when the \"resultOutputMode\" option is set to \"merge\"."
string,
// "description": "String of space-separated tags for the term. An empty string is treated as no tags."
];
type DictionaryDefinition =
| string
| DictionaryDefinitionObject
| DictionaryDefinitionInflected;
type DictionaryDefinitionObject =
| DictionaryDefinition_text
| DictionaryDefinition_structured
| DictionaryDefinition_img;
type DictionaryDefinitionInflected = [
// "description": "Deinflection of the term to an uninflected term.",
// "minItems": 2,
// "maxItems": 2,
string,
// "description": "The uninflected term."
string[],
// "description": "A chain of inflection rules that produced the inflected term",
// "description": "A single inflection rule."
];
interface DictionaryDefinition_text {
type: "text";
text: string;
// "description": "Single definition for the term."
}
interface DictionaryDefinition_structured {
type: "structured-content";
content: StructuredContent;
}
interface DictionaryDefinition_img {
type: "image";
path: string;
width?: number;
// "type": "integer",
// "description": "Preferred width of the image.",
// "minimum": 1
height?: number;
// "type": "integer",
// "description": "Preferred height of the image.",
// "minimum": 1
title?: string;
// "description": "Hover text for the image."
alt?: string;
// "description": "Alt text for the image."
description?: string;
// "description": "Description of the image."
pixelated?: boolean;
// "description": "Whether or not the image should appear pixelated at sizes larger than the image's native resolution.",
// "default": false
imageRendering?: "auto" | "pixelated" | "crisp-edges";
// "description": "Controls how the image is rendered. The value of this field supersedes the pixelated field.",
// "default": "auto"
appearance?: "auto" | "monochrome";
// "description": "Controls the appearance of the image.
// The \"monochrome\" value will mask the opaque parts of the image using the current text color.",
// "default": "auto"
background?: boolean;
// "description": "Whether or not a background color is displayed behind the image.",
// "default": true
collapsed?: boolean;
// "description": "Whether or not the image is collapsed by default.",
// "default": false
collapsible?: boolean;
// "description": "Whether or not the image can be collapsed.",
// "default": true
}
type StructuredContent =
| string
| StructuredContent[]
| StructuredContent_br
| StructuredContent_container
| StructuredContent_table
| StructuredContent_styled_container
| StructuredContent_img
| StructuredContent_link;
interface StructuredContent_br {
tag: "br";
data?: StructuredContentData;
}
interface StructuredContent_container {
tag: "ruby" | "rt" | "rp" | "table" | "thead" | "tbody" | "tfoot" | "tr";
content?: StructuredContent;
data?: StructuredContentData;
lang?: string;
}
interface StructuredContent_table {
tag: "td" | "th";
content?: StructuredContent;
data?: StructuredContentData;
colSpan?: number;
// "type": "integer",
// "minimum": 1
rowSpan?: number;
// "type": "integer",
// "minimum": 1
lang?: string;
}
interface StructuredContent_styled_container {
tag: "span" | "div" | "ol" | "ul" | "li" | "details" | "summary";
content?: StructuredContent;
data?: StructuredContentData;
style: StructuredContentStyle;
title?: string;
// "description": "Hover text for the element."
open?: boolean;
// "description": "Whether or not the details element is open by default."
lang?: string;
}
interface StructuredContent_img {
tag: "img";
data?: StructuredContentData;
path: string;
// "description": "Path to the image file in the archive."
width?: number;
// "description": "Preferred width of the image.",
// "minimum": 0
height?: number;
// "description": "Preferred height of the image.",
// "minimum": 0
title?: string;
// "description": "Hover text for the image."
alt?: string;
// "description": "Alt text for the image."
description?: string;
// "description": "Description of the image."
pixelated?: boolean;
// "description": "Whether or not the image should appear pixelated at sizes larger than the image's native resolution.",
// "default": false
imageRendering?: "auto" | "pixelated" | "crisp-edges";
// "description": "Controls how the image is rendered. The value of this field supersedes the pixelated field.",
// "default": "auto"
appearance?: "auto" | "monochrome";
// "description": "Controls the appearance of the image. The \"monochrome\" value will mask the opaque parts of the image using the current text color.",
// "default": "auto"
background?: boolean;
// "description": "Whether or not a background color is displayed behind the image.",
// "default": true
collapsed?: boolean;
// "description": "Whether or not the image is collapsed by default.",
// "default": false
collapsible?: boolean;
// "description": "Whether or not the image can be collapsed.",
// "default": false
verticalAlign:
| "baseline"
| "sub"
| "super"
| "text-top"
| "text-bottom"
| "middle"
| "top"
| "bottom";
// "description": "The vertical alignment of the image.",
border?: string;
// "description": "Shorthand for border width, style, and color."
borderRadius?: string;
// "description": "Roundness of the corners of the image's outer border edge."
sizeUnits: "px" | "em";
// "description": "The units for the width and height.",
}
interface StructuredContent_link {
tag: "a";
content?: StructuredContent;
href: string;
// "description": "The URL for the link. URLs starting with a ? are treated as internal links to other dictionary content.",
// "pattern": "^(?:https?:|\\?)[\\w\\W]*"
lang?: string;
}
interface StructuredContentData {
// "description": "Generic data attributes that should be added to the element.",
[key: string]: string;
}
interface StructuredContentStyle {
fontStyle?: "normal" | "italic";
// "default": "normal"
fontWeight?: "normal" | "bold";
// "default": "normal"
fontSize?: string;
// "default": "medium"
color?: string;
background?: string;
backgroundColor?: string;
textDecorationLine?:
| "none"
| "underline"
| "overline"
| "line-through"
| StructuredContentStyle_textDecorationLine[];
// "default": "none"
textDecorationStyle?: "solid" | "double" | "dotted" | "dashed" | "wavy";
// "default": "solid"
textDecorationColor?: string;
borderColor?: string;
borderStyle?: string;
borderRadius?: string;
borderWidth?: string;
clipPath?: string;
verticalAlign?:
| "baseline"
| "sub"
| "super"
| "text-top"
| "text-bottom"
| "middle"
| "top"
| "bottom";
// "default": "baseline"
textAlign?:
| "start"
| "end"
| "left"
| "right"
| "center"
| "justify"
| "justify-all"
| "match-parent";
// "default": "start"
textEmphasis?: string;
textShadow?: string;
margin?: string;
marginTop?: number | string;
// "default": 0
marginLeft?: number | string;
// "default": 0
marginRight?: number | string;
// "default": 0
marginBottom?: number | string;
// "default": 0
padding?: string;
paddingTop?: string;
paddingLeft?: string;
paddingRight?: string;
paddingBottom?: string;
wordBreak?: "normal" | "break-all" | "keep-all";
// "default": "normal"
whiteSpace?: string;
// "default": "normal"
cursor?: string;
// "default": "auto"
listStyleType?: string;
// "default": "disc"
}
type StructuredContentStyle_textDecorationLine =
| "underline"
| "overline"
| "line-through";
// "default": "none"
+113
View File
@@ -0,0 +1,113 @@
{
"compilerOptions": {
/* Visit https://aka.ms/tsconfig to read more about this file */
/* Projects */
// "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */
// "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
// "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */
// "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */
// "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
// "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
/* Language and Environment */
"target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
// "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
// "jsx": "preserve", /* Specify what JSX code is generated. */
// "libReplacement": true, /* Enable lib replacement. */
// "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */
// "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
// "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
// "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
// "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
// "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
// "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
// "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
// "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
/* Modules */
"module": "commonjs", /* Specify what module code is generated. */
// "rootDir": "./", /* Specify the root folder within your source files. */
// "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */
// "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
// "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
// "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
// "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */
// "types": [], /* Specify type package names to be included without being referenced in a source file. */
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
// "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */
// "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */
// "rewriteRelativeImportExtensions": true, /* Rewrite '.ts', '.tsx', '.mts', and '.cts' file extensions in relative import paths to their JavaScript equivalent in output files. */
// "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */
// "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */
// "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */
// "noUncheckedSideEffectImports": true, /* Check side effect imports. */
// "resolveJsonModule": true, /* Enable importing .json files. */
// "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */
// "noResolve": true, /* Disallow 'import's, 'require's or '<reference>'s from expanding the number of files TypeScript should add to a project. */
/* JavaScript Support */
// "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
// "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
// "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
/* Emit */
// "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
// "declarationMap": true, /* Create sourcemaps for d.ts files. */
// "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
// "sourceMap": true, /* Create source map files for emitted JavaScript files. */
// "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
// "noEmit": true, /* Disable emitting files from a compilation. */
// "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
// "outDir": "./", /* Specify an output folder for all emitted files. */
// "removeComments": true, /* Disable emitting comments. */
// "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
// "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
// "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
// "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
// "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
// "newLine": "crlf", /* Set the newline character for emitting files. */
// "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
// "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */
// "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
// "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */
// "declarationDir": "./", /* Specify the output directory for generated declaration files. */
/* Interop Constraints */
// "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
// "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */
// "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */
// "erasableSyntaxOnly": true, /* Do not allow runtime constructs that are not part of ECMAScript. */
// "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
"esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
// "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
"forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
/* Type Checking */
"strict": true, /* Enable all strict type-checking options. */
// "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */
// "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */
// "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
// "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
// "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
// "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */
// "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */
// "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */
// "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
// "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */
// "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */
// "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
// "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
// "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
// "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */
// "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
// "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */
// "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
// "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
/* Completeness */
// "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
"skipLibCheck": true /* Skip type checking all .d.ts files. */
}
}
View File
Whitespace-only changes.
+521 -8
View File
@@ -12,6 +12,34 @@ importers:
specifier: ^2
version: 2.10.0
js-server:
dependencies:
'@types/adm-zip':
specifier: ^0.5.7
version: 0.5.7
adm-zip:
specifier: ^0.5.16
version: 0.5.16
dotenv:
specifier: ^17.3.1
version: 17.3.1
fastify:
specifier: ^5.7.4
version: 5.7.4
mongodb:
specifier: ^7.1.0
version: 7.1.0
devDependencies:
'@types/node':
specifier: ^24.10.13
version: 24.10.13
tsx:
specifier: ^4.21.0
version: 4.21.0
typescript:
specifier: ~5.8.3
version: 5.8.3
src-react:
dependencies:
'@chakra-ui/react':
@@ -59,13 +87,13 @@ importers:
version: 19.2.3(@types/react@19.2.14)
'@vitejs/plugin-react':
specifier: ^4.6.0
version: 4.7.0(vite@7.3.1(@types/node@24.10.13))
version: 4.7.0(vite@7.3.1(@types/node@24.10.13)(tsx@4.21.0))
typescript:
specifier: ~5.8.3
version: 5.8.3
vite:
specifier: ^7.0.4
version: 7.3.1(@types/node@24.10.13)
version: 7.3.1(@types/node@24.10.13)(tsx@4.21.0)
packages:
@@ -369,6 +397,24 @@ packages:
cpu: [x64]
os: [win32]
'@fastify/ajv-compiler@4.0.5':
resolution: {integrity: sha512-KoWKW+MhvfTRWL4qrhUwAAZoaChluo0m0vbiJlGMt2GXvL4LVPQEjt8kSpHI3IBq5Rez8fg+XeH3cneztq+C7A==}
'@fastify/error@4.2.0':
resolution: {integrity: sha512-RSo3sVDXfHskiBZKBPRgnQTtIqpi/7zhJOEmAxCiBcM7d0uwdGdxLlsCaLzGs8v8NnxIRlfG0N51p5yFaOentQ==}
'@fastify/fast-json-stringify-compiler@5.0.3':
resolution: {integrity: sha512-uik7yYHkLr6fxd8hJSZ8c+xF4WafPK+XzneQDPU+D10r5X19GW8lJcom2YijX2+qtFF1ENJlHXKFM9ouXNJYgQ==}
'@fastify/forwarded@3.0.1':
resolution: {integrity: sha512-JqDochHFqXs3C3Ml3gOY58zM7OqO9ENqPo0UqAjAjH8L01fRZqwX9iLeX34//kiJubF7r2ZQHtBRU36vONbLlw==}
'@fastify/merge-json-schemas@0.2.1':
resolution: {integrity: sha512-OA3KGBCy6KtIvLf8DINC5880o5iBlDX4SxzLQS8HorJAbqluzLRn80UXU0bxZn7UOFhFgpRJDasfwn9nG4FG4A==}
'@fastify/proxy-addr@5.1.0':
resolution: {integrity: sha512-INS+6gh91cLUjB+PVHfu1UqcB76Sqtpyp7bnL+FYojhjygvOPA9ctiD/JDKsyD9Xgu4hUhCSJBPig/w7duNajw==}
'@floating-ui/core@1.7.4':
resolution: {integrity: sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg==}
@@ -400,9 +446,15 @@ packages:
'@jridgewell/trace-mapping@0.3.31':
resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
'@mongodb-js/saslprep@1.4.6':
resolution: {integrity: sha512-y+x3H1xBZd38n10NZF/rEBlvDOOMQ6LKUTHqr8R9VkJ+mmQOYtJFxIlkkK8fZrtOiL6VixbOBWMbZGBdal3Z1g==}
'@pandacss/is-valid-prop@1.8.2':
resolution: {integrity: sha512-wfZ4kzvHXQ9pG3wuIGTUCcbC7Op8pqIQZNIRY/bqWQu67WTHxZUHUPSZgQMhguI8Tz4ot+DNf4Qhha0bhLvNEQ==}
'@pinojs/redact@0.4.0':
resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==}
'@rolldown/pluginutils@1.0.0-beta.27':
resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==}
@@ -635,6 +687,9 @@ packages:
'@tauri-apps/plugin-opener@2.5.3':
resolution: {integrity: sha512-CCcUltXMOfUEArbf3db3kCE7Ggy1ExBEBl51Ko2ODJ6GDYHRp1nSNlQm5uNCFY5k7/ufaK5Ib3Du/Zir19IYQQ==}
'@types/adm-zip@0.5.7':
resolution: {integrity: sha512-DNEs/QvmyRLurdQPChqq0Md4zGvPwHerAJYWk9l2jCbD1VPpnzRJorOdiq4zsw09NFbYnhfsoEhWtxIzXpn2yw==}
'@types/babel__core@7.20.5':
resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
@@ -664,6 +719,12 @@ packages:
'@types/react@19.2.14':
resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==}
'@types/webidl-conversions@7.0.3':
resolution: {integrity: sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==}
'@types/whatwg-url@13.0.0':
resolution: {integrity: sha512-N8WXpbE6Wgri7KUSvrmQcqrMllKZ9uxkYWMt+mCSGwNc0Hsw9VQTW7ApqI4XNrx6/SaM2QQJCzMPDEXE058s+Q==}
'@vitejs/plugin-react@4.7.0':
resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==}
engines: {node: ^14.18.0 || >=16.0.0}
@@ -899,6 +960,31 @@ packages:
'@zag-js/utils@1.34.1':
resolution: {integrity: sha512-XgNTbcxPgNkPEuH/s/WUSU3M1mnO7453P53Wvym3dte+zPmqjwf5VT1FmEw8t6YQDBiBkIEKpUnNwR2x/pmZgg==}
abstract-logging@2.0.1:
resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==}
adm-zip@0.5.16:
resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==}
engines: {node: '>=12.0'}
ajv-formats@3.0.1:
resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==}
peerDependencies:
ajv: ^8.0.0
peerDependenciesMeta:
ajv:
optional: true
ajv@8.18.0:
resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==}
atomic-sleep@1.0.0:
resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==}
engines: {node: '>=8.0.0'}
avvio@9.2.0:
resolution: {integrity: sha512-2t/sy01ArdHHE0vRH5Hsay+RtCZt3dLPji7W7/MMOCEgze5b7SNDC4j5H6FnVgPkI1MTNFGzHdHrVXDDl7QSSQ==}
babel-plugin-macros@3.1.0:
resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==}
engines: {node: '>=10', npm: '>=6'}
@@ -913,6 +999,10 @@ packages:
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
bson@7.2.0:
resolution: {integrity: sha512-YCEo7KjMlbNlyHhz7zAZNDpIpQbd+wOEHJYezv0nMYTn4x31eIUM2yomNNubclAt63dObUzKHWsBLJ9QcZNSnQ==}
engines: {node: '>=20.19.0'}
callsites@3.1.0:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
@@ -926,6 +1016,10 @@ packages:
convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
cookie@1.1.1:
resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==}
engines: {node: '>=18'}
cosmiconfig@7.1.0:
resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==}
engines: {node: '>=10'}
@@ -942,6 +1036,14 @@ packages:
supports-color:
optional: true
dequal@2.0.3:
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
engines: {node: '>=6'}
dotenv@17.3.1:
resolution: {integrity: sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==}
engines: {node: '>=12'}
electron-to-chromium@1.5.302:
resolution: {integrity: sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==}
@@ -961,6 +1063,27 @@ packages:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
fast-decode-uri-component@1.0.1:
resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==}
fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
fast-json-stringify@6.3.0:
resolution: {integrity: sha512-oRCntNDY/329HJPlmdNLIdogNtt6Vyjb1WuT01Soss3slIdyUp8kAcDU3saQTOquEK8KFVfwIIF7FebxUAu+yA==}
fast-querystring@1.1.2:
resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==}
fast-uri@3.1.0:
resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==}
fastify@5.7.4:
resolution: {integrity: sha512-e6l5NsRdaEP8rdD8VR0ErJASeyaRbzXYpmkrpr2SuvuMq6Si3lvsaVy5C+7gLanEkvjpMDzBXWE5HPeb/hgTxA==}
fastq@1.20.1:
resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==}
fdir@6.5.0:
resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
engines: {node: '>=12.0.0'}
@@ -970,6 +1093,10 @@ packages:
picomatch:
optional: true
find-my-way@9.5.0:
resolution: {integrity: sha512-VW2RfnmscZO5KgBY5XVyKREMW5nMZcxDy+buTOsL+zIPnBlbKm+00sgzoQzq1EVh4aALZLfKdwv6atBGcjvjrQ==}
engines: {node: '>=20'}
find-root@1.1.0:
resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==}
@@ -985,6 +1112,9 @@ packages:
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
engines: {node: '>=6.9.0'}
get-tsconfig@4.13.6:
resolution: {integrity: sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==}
hasown@2.0.2:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
@@ -996,6 +1126,10 @@ packages:
resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
engines: {node: '>=6'}
ipaddr.js@2.3.0:
resolution: {integrity: sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==}
engines: {node: '>= 10'}
is-arrayish@0.2.1:
resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
@@ -1014,17 +1148,60 @@ packages:
json-parse-even-better-errors@2.3.1:
resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
json-schema-ref-resolver@3.0.0:
resolution: {integrity: sha512-hOrZIVL5jyYFjzk7+y7n5JDzGlU8rfWDuYyHwGa2WA8/pcmMHezp2xsVwxrebD/Q9t8Nc5DboieySDpCp4WG4A==}
json-schema-traverse@1.0.0:
resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
json5@2.2.3:
resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
engines: {node: '>=6'}
hasBin: true
light-my-request@6.6.0:
resolution: {integrity: sha512-CHYbu8RtboSIoVsHZ6Ye4cj4Aw/yg2oAFimlF7mNvfDV192LR7nDiKtSIfCuLT7KokPSTn/9kfVLm5OGN0A28A==}
lines-and-columns@1.2.4:
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
lru-cache@5.1.1:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
memory-pager@1.5.0:
resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==}
mongodb-connection-string-url@7.0.1:
resolution: {integrity: sha512-h0AZ9A7IDVwwHyMxmdMXKy+9oNlF0zFoahHiX3vQ8e3KFcSP3VmsmfvtRSuLPxmyv2vjIDxqty8smTgie/SNRQ==}
engines: {node: '>=20.19.0'}
mongodb@7.1.0:
resolution: {integrity: sha512-kMfnKunbolQYwCIyrkxNJFB4Ypy91pYqua5NargS/f8ODNSJxT03ZU3n1JqL4mCzbSih8tvmMEMLpKTT7x5gCg==}
engines: {node: '>=20.19.0'}
peerDependencies:
'@aws-sdk/credential-providers': ^3.806.0
'@mongodb-js/zstd': ^7.0.0
gcp-metadata: ^7.0.1
kerberos: ^7.0.0
mongodb-client-encryption: '>=7.0.0 <7.1.0'
snappy: ^7.3.2
socks: ^2.8.6
peerDependenciesMeta:
'@aws-sdk/credential-providers':
optional: true
'@mongodb-js/zstd':
optional: true
gcp-metadata:
optional: true
kerberos:
optional: true
mongodb-client-encryption:
optional: true
snappy:
optional: true
socks:
optional: true
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
@@ -1042,6 +1219,10 @@ packages:
node-releases@2.0.27:
resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==}
on-exit-leak-free@2.1.2:
resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==}
engines: {node: '>=14.0.0'}
parent-module@1.0.1:
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
engines: {node: '>=6'}
@@ -1067,16 +1248,39 @@ packages:
resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
engines: {node: '>=12'}
pino-abstract-transport@3.0.0:
resolution: {integrity: sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==}
pino-std-serializers@7.1.0:
resolution: {integrity: sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==}
pino@10.3.1:
resolution: {integrity: sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==}
hasBin: true
postcss@8.5.6:
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
engines: {node: ^10 || ^12 || >=14}
process-warning@4.0.1:
resolution: {integrity: sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==}
process-warning@5.0.0:
resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==}
proxy-compare@3.0.1:
resolution: {integrity: sha512-V9plBAt3qjMlS1+nC8771KNf6oJ12gExvaxnNzN/9yVRLdTv/lc+oJlnSzrdYDAvBfTStPCoiaCOTmTs0adv7Q==}
proxy-memoize@3.0.1:
resolution: {integrity: sha512-VDdG/VYtOgdGkWJx7y0o7p+zArSf2383Isci8C+BP3YXgMYDoPd3cCBjw0JdWb6YBb9sFiOPbAADDVTPJnh+9g==}
punycode@2.3.1:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
quick-format-unescaped@4.0.4:
resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==}
react-dom@19.2.4:
resolution: {integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==}
peerDependencies:
@@ -1098,27 +1302,70 @@ packages:
resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==}
engines: {node: '>=0.10.0'}
real-require@0.2.0:
resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==}
engines: {node: '>= 12.13.0'}
require-from-string@2.0.2:
resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
engines: {node: '>=0.10.0'}
resolve-from@4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'}
resolve-pkg-maps@1.0.0:
resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
resolve@1.22.11:
resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==}
engines: {node: '>= 0.4'}
hasBin: true
ret@0.5.0:
resolution: {integrity: sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw==}
engines: {node: '>=10'}
reusify@1.1.0:
resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
rfdc@1.4.1:
resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
rollup@4.58.0:
resolution: {integrity: sha512-wbT0mBmWbIvvq8NeEYWWvevvxnOyhKChir47S66WCxw1SXqhw7ssIYejnQEVt7XYQpsj2y8F9PM+Cr3SNEa0gw==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
safe-regex2@5.0.0:
resolution: {integrity: sha512-YwJwe5a51WlK7KbOJREPdjNrpViQBI3p4T50lfwPuDhZnE3XGVTlGvi+aolc5+RvxDD6bnUmjVsU9n1eboLUYw==}
safe-stable-stringify@2.5.0:
resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==}
engines: {node: '>=10'}
scheduler@0.27.0:
resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==}
secure-json-parse@4.1.0:
resolution: {integrity: sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==}
semver@6.3.1:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true
semver@7.7.4:
resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==}
engines: {node: '>=10'}
hasBin: true
set-cookie-parser@2.7.2:
resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==}
sonic-boom@4.2.1:
resolution: {integrity: sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==}
source-map-js@1.2.1:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
@@ -1127,6 +1374,13 @@ packages:
resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==}
engines: {node: '>=0.10.0'}
sparse-bitfield@3.0.3:
resolution: {integrity: sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==}
split2@4.2.0:
resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
engines: {node: '>= 10.x'}
stylis@4.2.0:
resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==}
@@ -1134,13 +1388,30 @@ packages:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
thread-stream@4.0.0:
resolution: {integrity: sha512-4iMVL6HAINXWf1ZKZjIPcz5wYaOdPhtO8ATvZ+Xqp3BTdaqtAwQkNmKORqcIo5YkQqGXq5cwfswDwMqqQNrpJA==}
engines: {node: '>=20'}
tinyglobby@0.2.15:
resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
engines: {node: '>=12.0.0'}
toad-cache@3.7.0:
resolution: {integrity: sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==}
engines: {node: '>=12'}
tr46@5.1.1:
resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==}
engines: {node: '>=18'}
tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
tsx@4.21.0:
resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==}
engines: {node: '>=18.0.0'}
hasBin: true
typescript@5.8.3:
resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==}
engines: {node: '>=14.17'}
@@ -1202,6 +1473,14 @@ packages:
resolution: {integrity: sha512-OSDqupzTlzl2LGyqTdhcXcl6ezMiFhcUwLBP8YKaBIbMYW1wAwDvupw2T9G9oVaKT9RmaSpyTXjxddFPUcFFIw==}
engines: {node: '>=12'}
webidl-conversions@7.0.0:
resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
engines: {node: '>=12'}
whatwg-url@14.2.0:
resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==}
engines: {node: '>=18'}
yallist@3.1.1:
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
@@ -1572,6 +1851,29 @@ snapshots:
'@esbuild/win32-x64@0.27.3':
optional: true
'@fastify/ajv-compiler@4.0.5':
dependencies:
ajv: 8.18.0
ajv-formats: 3.0.1(ajv@8.18.0)
fast-uri: 3.1.0
'@fastify/error@4.2.0': {}
'@fastify/fast-json-stringify-compiler@5.0.3':
dependencies:
fast-json-stringify: 6.3.0
'@fastify/forwarded@3.0.1': {}
'@fastify/merge-json-schemas@0.2.1':
dependencies:
dequal: 2.0.3
'@fastify/proxy-addr@5.1.0':
dependencies:
'@fastify/forwarded': 3.0.1
ipaddr.js: 2.3.0
'@floating-ui/core@1.7.4':
dependencies:
'@floating-ui/utils': 0.2.10
@@ -1610,8 +1912,14 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.5
'@mongodb-js/saslprep@1.4.6':
dependencies:
sparse-bitfield: 3.0.3
'@pandacss/is-valid-prop@1.8.2': {}
'@pinojs/redact@0.4.0': {}
'@rolldown/pluginutils@1.0.0-beta.27': {}
'@rollup/rollup-android-arm-eabi@4.58.0':
@@ -1754,6 +2062,10 @@ snapshots:
dependencies:
'@tauri-apps/api': 2.10.1
'@types/adm-zip@0.5.7':
dependencies:
'@types/node': 24.10.13
'@types/babel__core@7.20.5':
dependencies:
'@babel/parser': 7.29.0
@@ -1780,7 +2092,6 @@ snapshots:
'@types/node@24.10.13':
dependencies:
undici-types: 7.16.0
optional: true
'@types/parse-json@4.0.2': {}
@@ -1792,7 +2103,13 @@ snapshots:
dependencies:
csstype: 3.2.3
'@vitejs/plugin-react@4.7.0(vite@7.3.1(@types/node@24.10.13))':
'@types/webidl-conversions@7.0.3': {}
'@types/whatwg-url@13.0.0':
dependencies:
'@types/webidl-conversions': 7.0.3
'@vitejs/plugin-react@4.7.0(vite@7.3.1(@types/node@24.10.13)(tsx@4.21.0))':
dependencies:
'@babel/core': 7.29.0
'@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0)
@@ -1800,7 +2117,7 @@ snapshots:
'@rolldown/pluginutils': 1.0.0-beta.27
'@types/babel__core': 7.20.5
react-refresh: 0.17.0
vite: 7.3.1(@types/node@24.10.13)
vite: 7.3.1(@types/node@24.10.13)(tsx@4.21.0)
transitivePeerDependencies:
- supports-color
@@ -2360,6 +2677,28 @@ snapshots:
'@zag-js/utils@1.34.1': {}
abstract-logging@2.0.1: {}
adm-zip@0.5.16: {}
ajv-formats@3.0.1(ajv@8.18.0):
optionalDependencies:
ajv: 8.18.0
ajv@8.18.0:
dependencies:
fast-deep-equal: 3.1.3
fast-uri: 3.1.0
json-schema-traverse: 1.0.0
require-from-string: 2.0.2
atomic-sleep@1.0.0: {}
avvio@9.2.0:
dependencies:
'@fastify/error': 4.2.0
fastq: 1.20.1
babel-plugin-macros@3.1.0:
dependencies:
'@babel/runtime': 7.28.6
@@ -2376,6 +2715,8 @@ snapshots:
node-releases: 2.0.27
update-browserslist-db: 1.2.3(browserslist@4.28.1)
bson@7.2.0: {}
callsites@3.1.0: {}
caniuse-lite@1.0.30001770: {}
@@ -2384,6 +2725,8 @@ snapshots:
convert-source-map@2.0.0: {}
cookie@1.1.1: {}
cosmiconfig@7.1.0:
dependencies:
'@types/parse-json': 4.0.2
@@ -2398,6 +2741,10 @@ snapshots:
dependencies:
ms: 2.1.3
dequal@2.0.3: {}
dotenv@17.3.1: {}
electron-to-chromium@1.5.302: {}
error-ex@1.3.4:
@@ -2437,10 +2784,57 @@ snapshots:
escape-string-regexp@4.0.0: {}
fast-decode-uri-component@1.0.1: {}
fast-deep-equal@3.1.3: {}
fast-json-stringify@6.3.0:
dependencies:
'@fastify/merge-json-schemas': 0.2.1
ajv: 8.18.0
ajv-formats: 3.0.1(ajv@8.18.0)
fast-uri: 3.1.0
json-schema-ref-resolver: 3.0.0
rfdc: 1.4.1
fast-querystring@1.1.2:
dependencies:
fast-decode-uri-component: 1.0.1
fast-uri@3.1.0: {}
fastify@5.7.4:
dependencies:
'@fastify/ajv-compiler': 4.0.5
'@fastify/error': 4.2.0
'@fastify/fast-json-stringify-compiler': 5.0.3
'@fastify/proxy-addr': 5.1.0
abstract-logging: 2.0.1
avvio: 9.2.0
fast-json-stringify: 6.3.0
find-my-way: 9.5.0
light-my-request: 6.6.0
pino: 10.3.1
process-warning: 5.0.0
rfdc: 1.4.1
secure-json-parse: 4.1.0
semver: 7.7.4
toad-cache: 3.7.0
fastq@1.20.1:
dependencies:
reusify: 1.1.0
fdir@6.5.0(picomatch@4.0.3):
optionalDependencies:
picomatch: 4.0.3
find-my-way@9.5.0:
dependencies:
fast-deep-equal: 3.1.3
fast-querystring: 1.1.2
safe-regex2: 5.0.0
find-root@1.1.0: {}
fsevents@2.3.3:
@@ -2450,6 +2844,10 @@ snapshots:
gensync@1.0.0-beta.2: {}
get-tsconfig@4.13.6:
dependencies:
resolve-pkg-maps: 1.0.0
hasown@2.0.2:
dependencies:
function-bind: 1.1.2
@@ -2463,6 +2861,8 @@ snapshots:
parent-module: 1.0.1
resolve-from: 4.0.0
ipaddr.js@2.3.0: {}
is-arrayish@0.2.1: {}
is-core-module@2.16.1:
@@ -2475,14 +2875,39 @@ snapshots:
json-parse-even-better-errors@2.3.1: {}
json-schema-ref-resolver@3.0.0:
dependencies:
dequal: 2.0.3
json-schema-traverse@1.0.0: {}
json5@2.2.3: {}
light-my-request@6.6.0:
dependencies:
cookie: 1.1.1
process-warning: 4.0.1
set-cookie-parser: 2.7.2
lines-and-columns@1.2.4: {}
lru-cache@5.1.1:
dependencies:
yallist: 3.1.1
memory-pager@1.5.0: {}
mongodb-connection-string-url@7.0.1:
dependencies:
'@types/whatwg-url': 13.0.0
whatwg-url: 14.2.0
mongodb@7.1.0:
dependencies:
'@mongodb-js/saslprep': 1.4.6
bson: 7.2.0
mongodb-connection-string-url: 7.0.1
ms@2.1.3: {}
nanoid@3.3.11: {}
@@ -2494,6 +2919,8 @@ snapshots:
node-releases@2.0.27: {}
on-exit-leak-free@2.1.2: {}
parent-module@1.0.1:
dependencies:
callsites: 3.1.0
@@ -2515,18 +2942,46 @@ snapshots:
picomatch@4.0.3: {}
pino-abstract-transport@3.0.0:
dependencies:
split2: 4.2.0
pino-std-serializers@7.1.0: {}
pino@10.3.1:
dependencies:
'@pinojs/redact': 0.4.0
atomic-sleep: 1.0.0
on-exit-leak-free: 2.1.2
pino-abstract-transport: 3.0.0
pino-std-serializers: 7.1.0
process-warning: 5.0.0
quick-format-unescaped: 4.0.4
real-require: 0.2.0
safe-stable-stringify: 2.5.0
sonic-boom: 4.2.1
thread-stream: 4.0.0
postcss@8.5.6:
dependencies:
nanoid: 3.3.11
picocolors: 1.1.1
source-map-js: 1.2.1
process-warning@4.0.1: {}
process-warning@5.0.0: {}
proxy-compare@3.0.1: {}
proxy-memoize@3.0.1:
dependencies:
proxy-compare: 3.0.1
punycode@2.3.1: {}
quick-format-unescaped@4.0.4: {}
react-dom@19.2.4(react@19.2.4):
dependencies:
react: 19.2.4
@@ -2542,14 +2997,26 @@ snapshots:
react@19.2.4: {}
real-require@0.2.0: {}
require-from-string@2.0.2: {}
resolve-from@4.0.0: {}
resolve-pkg-maps@1.0.0: {}
resolve@1.22.11:
dependencies:
is-core-module: 2.16.1
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
ret@0.5.0: {}
reusify@1.1.0: {}
rfdc@1.4.1: {}
rollup@4.58.0:
dependencies:
'@types/estree': 1.0.8
@@ -2581,29 +3048,67 @@ snapshots:
'@rollup/rollup-win32-x64-msvc': 4.58.0
fsevents: 2.3.3
safe-regex2@5.0.0:
dependencies:
ret: 0.5.0
safe-stable-stringify@2.5.0: {}
scheduler@0.27.0: {}
secure-json-parse@4.1.0: {}
semver@6.3.1: {}
semver@7.7.4: {}
set-cookie-parser@2.7.2: {}
sonic-boom@4.2.1:
dependencies:
atomic-sleep: 1.0.0
source-map-js@1.2.1: {}
source-map@0.5.7: {}
sparse-bitfield@3.0.3:
dependencies:
memory-pager: 1.5.0
split2@4.2.0: {}
stylis@4.2.0: {}
supports-preserve-symlinks-flag@1.0.0: {}
thread-stream@4.0.0:
dependencies:
real-require: 0.2.0
tinyglobby@0.2.15:
dependencies:
fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3
toad-cache@3.7.0: {}
tr46@5.1.1:
dependencies:
punycode: 2.3.1
tslib@2.8.1: {}
tsx@4.21.0:
dependencies:
esbuild: 0.27.3
get-tsconfig: 4.13.6
optionalDependencies:
fsevents: 2.3.3
typescript@5.8.3: {}
undici-types@7.16.0:
optional: true
undici-types@7.16.0: {}
update-browserslist-db@1.2.3(browserslist@4.28.1):
dependencies:
@@ -2613,7 +3118,7 @@ snapshots:
uqr@0.1.2: {}
vite@7.3.1(@types/node@24.10.13):
vite@7.3.1(@types/node@24.10.13)(tsx@4.21.0):
dependencies:
esbuild: 0.27.3
fdir: 6.5.0(picomatch@4.0.3)
@@ -2624,9 +3129,17 @@ snapshots:
optionalDependencies:
'@types/node': 24.10.13
fsevents: 2.3.3
tsx: 4.21.0
wanakana@5.3.1: {}
webidl-conversions@7.0.0: {}
whatwg-url@14.2.0:
dependencies:
tr46: 5.1.1
webidl-conversions: 7.0.0
yallist@3.1.1: {}
yaml@1.10.2: {}
+1
View File
@@ -1,4 +1,5 @@
packages:
- js-server
- src-react
onlyBuiltDependencies:
@@ -1 +1,4 @@
*
!.gitignore
# Pixiv_*.zip => Pixiv.zip from https://github.com/MarvNC/pixiv-yomitan/releases