@llm-newsletter-kit/core 1.3.8 → 1.3.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +28 -17
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +28 -17
- package/dist/index.js.map +1 -1
- package/package.json +17 -17
package/dist/index.cjs
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
var runnables = require('@langchain/core/runnables');
|
|
4
4
|
var esToolkit = require('es-toolkit');
|
|
5
|
-
var ai = require('ai');
|
|
6
5
|
var zod = require('zod');
|
|
6
|
+
var ai = require('ai');
|
|
7
7
|
var jsdom = require('jsdom');
|
|
8
8
|
var juice = require('juice');
|
|
9
9
|
var safeMarkdown2Html = require('safe-markdown2html');
|
|
@@ -91,6 +91,25 @@ class LoggingExecutor {
|
|
|
91
91
|
}
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
+
async function generateObjectByLLM({ schema, ...rest }) {
|
|
95
|
+
const result = await ai.generateText({
|
|
96
|
+
...rest,
|
|
97
|
+
output: ai.Output.object({ schema }),
|
|
98
|
+
// Anthropic truncates structured output when it contains quotation marks.
|
|
99
|
+
// Using 'jsonTool' mode avoids this issue.
|
|
100
|
+
providerOptions: {
|
|
101
|
+
anthropic: {
|
|
102
|
+
structuredOutputMode: 'jsonTool',
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
return {
|
|
107
|
+
output: result.output,
|
|
108
|
+
usage: result.usage,
|
|
109
|
+
finishReason: result.finishReason,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
|
|
94
113
|
/**
|
|
95
114
|
* Replaces ASCII double quotes with Unicode smart quotes (U+201C, U+201D).
|
|
96
115
|
* Prevents JSON structured output corruption when LLM reproduces quoted titles.
|
|
@@ -186,12 +205,10 @@ class AnalyzeImages extends LLMQuery {
|
|
|
186
205
|
if (this.imageMessages.length === 0) {
|
|
187
206
|
return { result: null, usage: ZERO_USAGE };
|
|
188
207
|
}
|
|
189
|
-
const { output, usage } = await
|
|
208
|
+
const { output, usage } = await generateObjectByLLM({
|
|
190
209
|
model: this.model,
|
|
191
210
|
maxRetries: this.options.llm.maxRetries,
|
|
192
|
-
|
|
193
|
-
schema: this.schema,
|
|
194
|
-
}),
|
|
211
|
+
schema: this.schema,
|
|
195
212
|
system: this.systemPrompt,
|
|
196
213
|
messages: [
|
|
197
214
|
{
|
|
@@ -316,12 +333,10 @@ class ClassifyTags extends LLMQuery {
|
|
|
316
333
|
}
|
|
317
334
|
async execute({ existTags }) {
|
|
318
335
|
this.existTags = existTags;
|
|
319
|
-
const { output, usage } = await
|
|
336
|
+
const { output, usage } = await generateObjectByLLM({
|
|
320
337
|
model: this.model,
|
|
321
338
|
maxRetries: this.options.llm.maxRetries,
|
|
322
|
-
|
|
323
|
-
schema: this.schema,
|
|
324
|
-
}),
|
|
339
|
+
schema: this.schema,
|
|
325
340
|
system: this.systemPrompt,
|
|
326
341
|
prompt: this.userPrompt,
|
|
327
342
|
});
|
|
@@ -398,12 +413,10 @@ class DetermineArticleImportance extends LLMQuery {
|
|
|
398
413
|
this.dateService = config.dateService;
|
|
399
414
|
}
|
|
400
415
|
async execute() {
|
|
401
|
-
const { output, usage } = await
|
|
416
|
+
const { output, usage } = await generateObjectByLLM({
|
|
402
417
|
model: this.model,
|
|
403
418
|
maxRetries: this.options.llm.maxRetries,
|
|
404
|
-
|
|
405
|
-
schema: this.schema,
|
|
406
|
-
}),
|
|
419
|
+
schema: this.schema,
|
|
407
420
|
system: this.systemPrompt,
|
|
408
421
|
prompt: this.userPrompt,
|
|
409
422
|
});
|
|
@@ -940,7 +953,7 @@ let GenerateNewsletter$1 = class GenerateNewsletter extends BaseLLMQuery {
|
|
|
940
953
|
this.newsletterBrandName = config.newsletterBrandName;
|
|
941
954
|
}
|
|
942
955
|
async execute() {
|
|
943
|
-
const { output, usage, finishReason } = await
|
|
956
|
+
const { output, usage, finishReason } = await generateObjectByLLM({
|
|
944
957
|
model: this.model,
|
|
945
958
|
maxRetries: this.options.llm.maxRetries,
|
|
946
959
|
maxOutputTokens: this.maxOutputTokens,
|
|
@@ -949,9 +962,7 @@ let GenerateNewsletter$1 = class GenerateNewsletter extends BaseLLMQuery {
|
|
|
949
962
|
topK: this.topK,
|
|
950
963
|
presencePenalty: this.presencePenalty,
|
|
951
964
|
frequencyPenalty: this.frequencyPenalty,
|
|
952
|
-
|
|
953
|
-
schema: this.schema,
|
|
954
|
-
}),
|
|
965
|
+
schema: this.schema,
|
|
955
966
|
system: this.systemPrompt,
|
|
956
967
|
prompt: this.userPrompt,
|
|
957
968
|
});
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { RunnablePassthrough, RunnableSequence } from '@langchain/core/runnables';
|
|
2
2
|
import { pick, omit } from 'es-toolkit';
|
|
3
|
-
import { generateText, Output } from 'ai';
|
|
4
3
|
import { z } from 'zod';
|
|
4
|
+
import { generateText, Output } from 'ai';
|
|
5
5
|
import { JSDOM } from 'jsdom';
|
|
6
6
|
import juice from 'juice';
|
|
7
7
|
import safeMarkdown2Html from 'safe-markdown2html';
|
|
@@ -89,6 +89,25 @@ class LoggingExecutor {
|
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
+
async function generateObjectByLLM({ schema, ...rest }) {
|
|
93
|
+
const result = await generateText({
|
|
94
|
+
...rest,
|
|
95
|
+
output: Output.object({ schema }),
|
|
96
|
+
// Anthropic truncates structured output when it contains quotation marks.
|
|
97
|
+
// Using 'jsonTool' mode avoids this issue.
|
|
98
|
+
providerOptions: {
|
|
99
|
+
anthropic: {
|
|
100
|
+
structuredOutputMode: 'jsonTool',
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
});
|
|
104
|
+
return {
|
|
105
|
+
output: result.output,
|
|
106
|
+
usage: result.usage,
|
|
107
|
+
finishReason: result.finishReason,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
|
|
92
111
|
/**
|
|
93
112
|
* Replaces ASCII double quotes with Unicode smart quotes (U+201C, U+201D).
|
|
94
113
|
* Prevents JSON structured output corruption when LLM reproduces quoted titles.
|
|
@@ -184,12 +203,10 @@ class AnalyzeImages extends LLMQuery {
|
|
|
184
203
|
if (this.imageMessages.length === 0) {
|
|
185
204
|
return { result: null, usage: ZERO_USAGE };
|
|
186
205
|
}
|
|
187
|
-
const { output, usage } = await
|
|
206
|
+
const { output, usage } = await generateObjectByLLM({
|
|
188
207
|
model: this.model,
|
|
189
208
|
maxRetries: this.options.llm.maxRetries,
|
|
190
|
-
|
|
191
|
-
schema: this.schema,
|
|
192
|
-
}),
|
|
209
|
+
schema: this.schema,
|
|
193
210
|
system: this.systemPrompt,
|
|
194
211
|
messages: [
|
|
195
212
|
{
|
|
@@ -314,12 +331,10 @@ class ClassifyTags extends LLMQuery {
|
|
|
314
331
|
}
|
|
315
332
|
async execute({ existTags }) {
|
|
316
333
|
this.existTags = existTags;
|
|
317
|
-
const { output, usage } = await
|
|
334
|
+
const { output, usage } = await generateObjectByLLM({
|
|
318
335
|
model: this.model,
|
|
319
336
|
maxRetries: this.options.llm.maxRetries,
|
|
320
|
-
|
|
321
|
-
schema: this.schema,
|
|
322
|
-
}),
|
|
337
|
+
schema: this.schema,
|
|
323
338
|
system: this.systemPrompt,
|
|
324
339
|
prompt: this.userPrompt,
|
|
325
340
|
});
|
|
@@ -396,12 +411,10 @@ class DetermineArticleImportance extends LLMQuery {
|
|
|
396
411
|
this.dateService = config.dateService;
|
|
397
412
|
}
|
|
398
413
|
async execute() {
|
|
399
|
-
const { output, usage } = await
|
|
414
|
+
const { output, usage } = await generateObjectByLLM({
|
|
400
415
|
model: this.model,
|
|
401
416
|
maxRetries: this.options.llm.maxRetries,
|
|
402
|
-
|
|
403
|
-
schema: this.schema,
|
|
404
|
-
}),
|
|
417
|
+
schema: this.schema,
|
|
405
418
|
system: this.systemPrompt,
|
|
406
419
|
prompt: this.userPrompt,
|
|
407
420
|
});
|
|
@@ -938,7 +951,7 @@ let GenerateNewsletter$1 = class GenerateNewsletter extends BaseLLMQuery {
|
|
|
938
951
|
this.newsletterBrandName = config.newsletterBrandName;
|
|
939
952
|
}
|
|
940
953
|
async execute() {
|
|
941
|
-
const { output, usage, finishReason } = await
|
|
954
|
+
const { output, usage, finishReason } = await generateObjectByLLM({
|
|
942
955
|
model: this.model,
|
|
943
956
|
maxRetries: this.options.llm.maxRetries,
|
|
944
957
|
maxOutputTokens: this.maxOutputTokens,
|
|
@@ -947,9 +960,7 @@ let GenerateNewsletter$1 = class GenerateNewsletter extends BaseLLMQuery {
|
|
|
947
960
|
topK: this.topK,
|
|
948
961
|
presencePenalty: this.presencePenalty,
|
|
949
962
|
frequencyPenalty: this.frequencyPenalty,
|
|
950
|
-
|
|
951
|
-
schema: this.schema,
|
|
952
|
-
}),
|
|
963
|
+
schema: this.schema,
|
|
953
964
|
system: this.systemPrompt,
|
|
954
965
|
prompt: this.userPrompt,
|
|
955
966
|
});
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@llm-newsletter-kit/core",
|
|
3
3
|
"private": false,
|
|
4
4
|
"type": "module",
|
|
5
|
-
"version": "1.3.
|
|
5
|
+
"version": "1.3.9",
|
|
6
6
|
"description": "An extensible framework to automate your entire newsletter workflow. Handles data collection, LLM-based content analysis, and email generation, letting you focus on your unique domain logic.",
|
|
7
7
|
"main": "dist/index.cjs",
|
|
8
8
|
"module": "dist/index.js",
|
|
@@ -48,36 +48,36 @@
|
|
|
48
48
|
"author": "kimhongyeon",
|
|
49
49
|
"license": "Apache-2.0",
|
|
50
50
|
"dependencies": {
|
|
51
|
-
"@langchain/core": "^1.1.
|
|
52
|
-
"ai": "^6.0.
|
|
51
|
+
"@langchain/core": "^1.1.39",
|
|
52
|
+
"ai": "^6.0.154",
|
|
53
53
|
"es-toolkit": "^1.45.1",
|
|
54
|
-
"jsdom": "^29.0.
|
|
54
|
+
"jsdom": "^29.0.2",
|
|
55
55
|
"juice": "^11.1.1",
|
|
56
56
|
"safe-markdown2html": "^1.0.1",
|
|
57
57
|
"zod": "^4.3.6"
|
|
58
58
|
},
|
|
59
59
|
"devDependencies": {
|
|
60
|
-
"@ai-sdk/anthropic": "^3.0.
|
|
61
|
-
"@ai-sdk/google": "^3.0.
|
|
62
|
-
"@ai-sdk/openai": "^3.0.
|
|
63
|
-
"@ai-sdk/togetherai": "^2.0.
|
|
60
|
+
"@ai-sdk/anthropic": "^3.0.68",
|
|
61
|
+
"@ai-sdk/google": "^3.0.60",
|
|
62
|
+
"@ai-sdk/openai": "^3.0.52",
|
|
63
|
+
"@ai-sdk/togetherai": "^2.0.45",
|
|
64
64
|
"@eslint/js": "^10.0.1",
|
|
65
65
|
"@trivago/prettier-plugin-sort-imports": "^6.0.2",
|
|
66
66
|
"@types/jsdom": "^28.0.1",
|
|
67
|
-
"@types/node": "^25.5.
|
|
68
|
-
"@vitest/coverage-v8": "^4.1.
|
|
69
|
-
"@vitest/expect": "^4.1.
|
|
70
|
-
"eslint": "^10.
|
|
67
|
+
"@types/node": "^25.5.2",
|
|
68
|
+
"@vitest/coverage-v8": "^4.1.4",
|
|
69
|
+
"@vitest/expect": "^4.1.4",
|
|
70
|
+
"eslint": "^10.2.0",
|
|
71
71
|
"eslint-plugin-unused-imports": "^4.4.1",
|
|
72
72
|
"prettier": "^3.8.1",
|
|
73
73
|
"rimraf": "^6.1.3",
|
|
74
|
-
"rollup": "^4.60.
|
|
74
|
+
"rollup": "^4.60.1",
|
|
75
75
|
"rollup-plugin-dts": "^6.4.1",
|
|
76
|
-
"rollup-plugin-typescript2": "^0.
|
|
76
|
+
"rollup-plugin-typescript2": "^0.37.0",
|
|
77
77
|
"tsx": "^4.21.0",
|
|
78
|
-
"typescript": "^
|
|
79
|
-
"typescript-eslint": "^8.
|
|
80
|
-
"vitest": "^4.1.
|
|
78
|
+
"typescript": "^6.0.2",
|
|
79
|
+
"typescript-eslint": "^8.58.1",
|
|
80
|
+
"vitest": "^4.1.4"
|
|
81
81
|
},
|
|
82
82
|
"repository": {
|
|
83
83
|
"type": "git",
|