feat: Add EPUB file support to document loader

This commit is contained in:
bC2y5tal 2025-02-14 23:54:19 +08:00 committed by 亢奋猫
parent 23a2a6b57c
commit 99aa0d3255
5 changed files with 530 additions and 16 deletions

View File

@ -71,6 +71,7 @@
"electron-store": "^8.2.0",
"electron-updater": "^6.3.9",
"electron-window-state": "^5.0.3",
"epub": "^1.3.0",
"fs-extra": "^11.2.0",
"html2canvas": "^1.4.1",
"markdown-it": "^14.1.0",

View File

@ -1,7 +1,7 @@
export const imageExts = ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp']
export const videoExts = ['.mp4', '.avi', '.mov', '.wmv', '.flv', '.mkv']
export const audioExts = ['.mp3', '.wav', '.ogg', '.flac', '.aac']
export const documentExts = ['.pdf', '.docx', '.pptx', '.xlsx', '.odt', '.odp', '.ods']
export const documentExts = ['.pdf', '.docx', '.pptx', '.xlsx', '.odt', '.odp', '.ods', '.epub']
export const textExts = [
'.txt', // 普通文本文件
'.md', // Markdown 文件

View File

@ -0,0 +1,228 @@
import { RecursiveCharacterTextSplitter } from '@langchain/textsplitters'
import { BaseLoader } from '@llm-tools/embedjs-interfaces'
import { cleanString } from '@llm-tools/embedjs-utils'
import Logger from 'electron-log'
import EPub from 'epub'
import * as fs from 'fs'
/**
* epub
*/
interface EpubLoaderOptions {
/** epub 文件路径 */
filePath: string
/** 文本分块大小 */
chunkSize: number
/** 分块重叠大小 */
chunkOverlap: number
}
/**
* epub
*/
interface EpubMetadata {
/** 作者显示名称(例如:"Lewis Carroll" */
creator?: string
/** 作者规范化名称,用于排序和索引(例如:"Carroll, Lewis" */
creatorFileAs?: string
/** 书籍标题(例如:"Alice's Adventures in Wonderland" */
title?: string
/** 语言代码(例如:"en" 或 "zh-CN" */
language?: string
/** 主题或分类(例如:"Fantasy"、"Fiction" */
subject?: string
/** 创建日期(例如:"2024-02-14" */
date?: string
/** 书籍描述或简介 */
description?: string
}
/**
* epub
*/
interface EpubChapter {
/** 章节 ID */
id: string
/** 章节标题 */
title?: string
/** 章节顺序 */
order?: number
}
/**
* epub
* epub
*/
export class EpubLoader extends BaseLoader<Record<string, string | number | boolean>, Record<string, unknown>> {
protected filePath: string
protected chunkSize: number
protected chunkOverlap: number
private extractedText: string
private metadata: EpubMetadata | null
/**
* epub
* @param options
*/
constructor(options: EpubLoaderOptions) {
super(options.filePath, {
chunkSize: options.chunkSize,
chunkOverlap: options.chunkOverlap
})
this.filePath = options.filePath
this.chunkSize = options.chunkSize
this.chunkOverlap = options.chunkOverlap
this.extractedText = ''
this.metadata = null
}
/**
* epub
* epub 使 'end' 访
* @param epub epub
* @returns
*/
private waitForEpubInit(epub: any): Promise<{ metadata: EpubMetadata; chapters: EpubChapter[] }> {
return new Promise((resolve, reject) => {
epub.on('end', () => {
// 提取元数据
const metadata: EpubMetadata = {
creator: epub.metadata.creator,
creatorFileAs: epub.metadata.creatorFileAs,
title: epub.metadata.title,
language: epub.metadata.language,
subject: epub.metadata.subject,
date: epub.metadata.date,
description: epub.metadata.description
}
// 提取章节信息
const chapters: EpubChapter[] = epub.flow.map((chapter: any, index: number) => ({
id: chapter.id,
title: chapter.title || `Chapter ${index + 1}`,
order: index + 1
}))
resolve({ metadata, chapters })
})
epub.on('error', (error: Error) => {
reject(error)
})
epub.parse()
})
}
/**
*
* @param epub epub
* @param chapterId ID
* @returns
*/
private getChapter(epub: any, chapterId: string): Promise<string> {
return new Promise((resolve, reject) => {
epub.getChapter(chapterId, (error: Error | null, text: string) => {
if (error) {
reject(error)
} else {
resolve(text)
}
})
})
}
/**
* epub
* 1.
* 2. epub
* 3.
* 4. HTML
* 5.
*/
private async extractTextFromEpub() {
try {
// 检查文件是否存在
if (!fs.existsSync(this.filePath)) {
throw new Error(`File not found: ${this.filePath}`)
}
const epub = new EPub(this.filePath)
// 等待 epub 初始化完成并获取元数据
const { metadata, chapters } = await this.waitForEpubInit(epub)
this.metadata = metadata
if (!epub.flow || epub.flow.length === 0) {
throw new Error('No content found in epub file')
}
const chapterTexts: string[] = []
// 遍历所有章节
for (const chapter of chapters) {
try {
const content = await this.getChapter(epub, chapter.id)
if (!content) {
continue
}
// 移除 HTML 标签并清理文本
const text = content
.replace(/<[^>]*>/g, ' ') // 移除所有 HTML 标签
.replace(/\s+/g, ' ') // 将多个空白字符替换为单个空格
.trim() // 移除首尾空白
if (text) {
chapterTexts.push(text)
}
} catch (error) {
Logger.error(`[EpubLoader] Error processing chapter ${chapter.id}:`, error)
}
}
// 使用双换行符连接所有章节文本
this.extractedText = chapterTexts.join('\n\n')
} catch (error) {
Logger.error('[EpubLoader] Error in extractTextFromEpub:', error)
throw error
}
}
/**
*
* BaseLoader
*
*/
override async *getUnfilteredChunks() {
// 如果还没有提取文本,先提取
if (!this.extractedText) {
await this.extractTextFromEpub()
}
Logger.info('[EpubLoader] 书名:', this.metadata?.title || '未知书名', ' 文本大小:', this.extractedText.length)
// 创建文本分块器
const chunker = new RecursiveCharacterTextSplitter({
chunkSize: this.chunkSize,
chunkOverlap: this.chunkOverlap
})
// 清理并分割文本
const chunks = await chunker.splitText(cleanString(this.extractedText))
// 为每个文本块添加元数据
for (const chunk of chunks) {
yield {
pageContent: chunk,
metadata: {
source: this.filePath,
title: this.metadata?.title || '',
creator: this.metadata?.creator || '',
language: this.metadata?.language || ''
}
}
}
}
}

View File

@ -7,6 +7,7 @@ import { LoaderReturn } from '@shared/config/types'
import { FileType, KnowledgeBaseParams } from '@types'
import Logger from 'electron-log'
import { EpubLoader } from './epubLoader'
import { OdLoader, OdType } from './odLoader'
// embedjs内置loader类型
@ -70,6 +71,24 @@ export async function addFileLoader(
} as LoaderReturn
}
// epub 文件处理
if (file.ext === '.epub') {
const loaderReturn = await ragApplication.addLoader(
new EpubLoader({
filePath: file.path,
chunkSize: base.chunkSize ?? 1000,
chunkOverlap: base.chunkOverlap ?? 200
}) as any,
forceReload
)
return {
entriesAdded: loaderReturn.entriesAdded,
uniqueId: loaderReturn.uniqueId,
uniqueIds: [loaderReturn.uniqueId],
loaderType: loaderReturn.loaderType
} as LoaderReturn
}
const fileContent = fs.readFileSync(file.path, 'utf-8')
// HTML类型
if (['.html', '.htm'].includes(file.ext)) {

296
yarn.lock
View File

@ -3038,6 +3038,7 @@ __metadata:
electron-window-state: "npm:^5.0.3"
emittery: "npm:^1.0.3"
emoji-picker-element: "npm:^1.22.1"
epub: "npm:^1.3.0"
eslint: "npm:^8.56.0"
eslint-plugin-react: "npm:^7.34.3"
eslint-plugin-react-hooks: "npm:^4.6.2"
@ -3127,6 +3128,13 @@ __metadata:
languageName: node
linkType: hard
"adm-zip@npm:^0.4.11":
version: 0.4.16
resolution: "adm-zip@npm:0.4.16"
checksum: 10c0/c56c6e138fd19006155fc716acae14d54e07c267ae19d78c8a8cdca04762bf20170a71a41aa8d8bad2f13b70d4f3e9a191009bafa5280e05a440ee506f871a55
languageName: node
linkType: hard
"adm-zip@npm:^0.5.16":
version: 0.5.16
resolution: "adm-zip@npm:0.5.16"
@ -3407,6 +3415,13 @@ __metadata:
languageName: node
linkType: hard
"aproba@npm:^1.0.3":
version: 1.2.0
resolution: "aproba@npm:1.2.0"
checksum: 10c0/2d34f008c9edfa991f42fe4b667d541d38a474a39ae0e24805350486d76744cd91ee45313283c1d39a055b14026dd0fc4d0cbfc13f210855d59d7e8b5a61dc51
languageName: node
linkType: hard
"aproba@npm:^1.0.3 || ^2.0.0":
version: 2.0.0
resolution: "aproba@npm:2.0.0"
@ -3424,6 +3439,16 @@ __metadata:
languageName: node
linkType: hard
"are-we-there-yet@npm:~1.1.2":
version: 1.1.7
resolution: "are-we-there-yet@npm:1.1.7"
dependencies:
delegates: "npm:^1.0.0"
readable-stream: "npm:^2.0.6"
checksum: 10c0/03cb45f2892767773c86a616205fc67feb8dfdd56685d1b34999cfa6c0d2aebe73ec0e6ba88a406422b998dea24138337fdb9a3f9b172d7c2a7f75d02f3df088
languageName: node
linkType: hard
"argparse@npm:^2.0.1":
version: 2.0.1
resolution: "argparse@npm:2.0.1"
@ -4217,7 +4242,7 @@ __metadata:
languageName: node
linkType: hard
"chownr@npm:^1.1.1":
"chownr@npm:^1.1.1, chownr@npm:^1.1.4":
version: 1.1.4
resolution: "chownr@npm:1.1.4"
checksum: 10c0/ed57952a84cc0c802af900cf7136de643d3aba2eecb59d29344bc2f3f9bf703a301b9d84cdc71f82c3ffc9ccde831b0d92f5b45f91727d6c9da62f23aef9d9db
@ -4498,7 +4523,7 @@ __metadata:
languageName: node
linkType: hard
"console-control-strings@npm:^1.1.0":
"console-control-strings@npm:^1.0.0, console-control-strings@npm:^1.1.0, console-control-strings@npm:~1.1.0":
version: 1.1.0
resolution: "console-control-strings@npm:1.1.0"
checksum: 10c0/7ab51d30b52d461412cd467721bb82afe695da78fff8f29fe6f6b9cbaac9a2328e27a22a966014df9532100f6dd85370460be8130b9c677891ba36d96a343f50
@ -4745,7 +4770,7 @@ __metadata:
languageName: node
linkType: hard
"debug@npm:^3.1.0":
"debug@npm:^3.1.0, debug@npm:^3.2.6":
version: 3.2.7
resolution: "debug@npm:3.2.7"
dependencies:
@ -4950,7 +4975,7 @@ __metadata:
languageName: node
linkType: hard
"detect-libc@npm:^1.0.3":
"detect-libc@npm:^1.0.2, detect-libc@npm:^1.0.3":
version: 1.0.3
resolution: "detect-libc@npm:1.0.3"
bin:
@ -5459,6 +5484,20 @@ __metadata:
languageName: node
linkType: hard
"epub@npm:^1.3.0":
version: 1.3.0
resolution: "epub@npm:1.3.0"
dependencies:
adm-zip: "npm:^0.4.11"
xml2js: "npm:^0.4.23"
zipfile: "npm:^0.5.11"
dependenciesMeta:
zipfile:
optional: true
checksum: 10c0/2e8bb70354d13f17224f0fea2f999d1a5537383ed3df7388054eb28b98bd4f91057db19bf58e8bc8618f4f509051ad21fb12f36b6faa029d29bcf647ab13e074
languageName: node
linkType: hard
"err-code@npm:^2.0.2":
version: 2.0.3
resolution: "err-code@npm:2.0.3"
@ -6457,6 +6496,15 @@ __metadata:
languageName: node
linkType: hard
"fs-minipass@npm:^1.2.7":
version: 1.2.7
resolution: "fs-minipass@npm:1.2.7"
dependencies:
minipass: "npm:^2.6.0"
checksum: 10c0/c8259ce8caab360f16b8c3774fd09dd1d5240d6f3f78fd8efa0a215b5f40edfa90e7b5b5ddc2335a4c50885e29d5983f9fe6ac3ac19320e6917a21dbb9f05c64
languageName: node
linkType: hard
"fs-minipass@npm:^2.0.0":
version: 2.1.0
resolution: "fs-minipass@npm:2.1.0"
@ -6545,6 +6593,22 @@ __metadata:
languageName: node
linkType: hard
"gauge@npm:~2.7.3":
version: 2.7.4
resolution: "gauge@npm:2.7.4"
dependencies:
aproba: "npm:^1.0.3"
console-control-strings: "npm:^1.0.0"
has-unicode: "npm:^2.0.0"
object-assign: "npm:^4.1.0"
signal-exit: "npm:^3.0.0"
string-width: "npm:^1.0.1"
strip-ansi: "npm:^3.0.1"
wide-align: "npm:^1.1.0"
checksum: 10c0/d606346e2e47829e0bc855d0becb36c4ce492feabd61ae92884b89e07812dd8a67a860ca30ece3a4c2e9f2c73bd68ba2b8e558ed362432ffd86de83c08847f84
languageName: node
linkType: hard
"gensync@npm:^1.0.0-beta.2":
version: 1.0.0-beta.2
resolution: "gensync@npm:1.0.0-beta.2"
@ -6907,7 +6971,7 @@ __metadata:
languageName: node
linkType: hard
"has-unicode@npm:^2.0.1":
"has-unicode@npm:^2.0.0, has-unicode@npm:^2.0.1":
version: 2.0.1
resolution: "has-unicode@npm:2.0.1"
checksum: 10c0/ebdb2f4895c26bb08a8a100b62d362e49b2190bcfd84b76bc4be1a3bd4d254ec52d0dd9f2fbcc093fc5eb878b20c52146f9dfd33e2686ed28982187be593b47c
@ -7377,6 +7441,15 @@ __metadata:
languageName: node
linkType: hard
"iconv-lite@npm:^0.4.4":
version: 0.4.24
resolution: "iconv-lite@npm:0.4.24"
dependencies:
safer-buffer: "npm:>= 2.1.2 < 3"
checksum: 10c0/c6886a24cc00f2a059767440ec1bc00d334a89f250db8e0f7feb4961c8727118457e27c495ba94d082e51d3baca378726cd110aaf7ded8b9bbfd6a44760cf1d4
languageName: node
linkType: hard
"ieee754@npm:^1.1.13, ieee754@npm:^1.2.1":
version: 1.2.1
resolution: "ieee754@npm:1.2.1"
@ -7384,6 +7457,15 @@ __metadata:
languageName: node
linkType: hard
"ignore-walk@npm:^3.0.1":
version: 3.0.4
resolution: "ignore-walk@npm:3.0.4"
dependencies:
minimatch: "npm:^3.0.4"
checksum: 10c0/690372b433887796fa3badd25babab7daf60a1882259dcc130ec78eea79745c2416322e10d1a96b367071204471c532647d20b11cd7ab70bd9b49879e461f956
languageName: node
linkType: hard
"ignore@npm:^5.2.0, ignore@npm:^5.2.4":
version: 5.3.2
resolution: "ignore@npm:5.3.2"
@ -9686,6 +9768,16 @@ __metadata:
languageName: node
linkType: hard
"minipass@npm:^2.6.0, minipass@npm:^2.9.0":
version: 2.9.0
resolution: "minipass@npm:2.9.0"
dependencies:
safe-buffer: "npm:^5.1.2"
yallist: "npm:^3.0.0"
checksum: 10c0/307d8765ac3db9fcd6b486367e6f6c3e460f3a3e198d95d6c0005a2d95804c40c72959261cdebde3c8237cda0b03d4c01975e4581fe11abcf201f5005caafd2a
languageName: node
linkType: hard
"minipass@npm:^3.0.0, minipass@npm:^3.1.0, minipass@npm:^3.1.1, minipass@npm:^3.1.3":
version: 3.3.6
resolution: "minipass@npm:3.3.6"
@ -9709,6 +9801,15 @@ __metadata:
languageName: node
linkType: hard
"minizlib@npm:^1.3.3":
version: 1.3.3
resolution: "minizlib@npm:1.3.3"
dependencies:
minipass: "npm:^2.9.0"
checksum: 10c0/79798032bbaa6594fa517e5b7ff9977951984fc9548a421b28d3fb0add8ed7e98a33e41e262af53b944f9d860c1e00fc778b477ef692e7b38b1ba12b390ffb17
languageName: node
linkType: hard
"minizlib@npm:^2.0.0, minizlib@npm:^2.1.1":
version: 2.1.2
resolution: "minizlib@npm:2.1.2"
@ -9743,7 +9844,7 @@ __metadata:
languageName: node
linkType: hard
"mkdirp@npm:^0.5.1, mkdirp@npm:^0.5.4":
"mkdirp@npm:^0.5.1, mkdirp@npm:^0.5.4, mkdirp@npm:^0.5.5":
version: 0.5.6
resolution: "mkdirp@npm:0.5.6"
dependencies:
@ -9802,6 +9903,15 @@ __metadata:
languageName: node
linkType: hard
"nan@npm:~2.10.0":
version: 2.10.0
resolution: "nan@npm:2.10.0"
dependencies:
node-gyp: "npm:latest"
checksum: 10c0/9d3a83704b4f89473c01485eae527f3e78def4f098b140c9d1164cd539183b283fb6f7b3536a298dc21aa8b6b4e597e01b0dfa939d591205a80a63a8274f0edd
languageName: node
linkType: hard
"nanoid@npm:^3.3.7":
version: 3.3.8
resolution: "nanoid@npm:3.3.8"
@ -9834,6 +9944,19 @@ __metadata:
languageName: node
linkType: hard
"needle@npm:^2.2.1":
version: 2.9.1
resolution: "needle@npm:2.9.1"
dependencies:
debug: "npm:^3.2.6"
iconv-lite: "npm:^0.4.4"
sax: "npm:^1.2.4"
bin:
needle: ./bin/needle
checksum: 10c0/65a7eaeaf4ca3410de492957474592af9838e02875273d9232ff6cff331393c58a95e48c592bd9a05f575e5bb9b08543d6cfd19eb96595dbd3d7da2c5fe1accb
languageName: node
linkType: hard
"negotiator@npm:^0.6.2":
version: 0.6.4
resolution: "negotiator@npm:0.6.4"
@ -9961,6 +10084,26 @@ __metadata:
languageName: node
linkType: hard
"node-pre-gyp@npm:~0.10.2":
version: 0.10.3
resolution: "node-pre-gyp@npm:0.10.3"
dependencies:
detect-libc: "npm:^1.0.2"
mkdirp: "npm:^0.5.1"
needle: "npm:^2.2.1"
nopt: "npm:^4.0.1"
npm-packlist: "npm:^1.1.6"
npmlog: "npm:^4.0.2"
rc: "npm:^1.2.7"
rimraf: "npm:^2.6.1"
semver: "npm:^5.3.0"
tar: "npm:^4"
bin:
node-pre-gyp: ./bin/node-pre-gyp
checksum: 10c0/382db414572d225885c6bf2d2de42ce0be751dc85fa524bd90a1ccff009facf73d7ef3619b396d275ab3e4a01c33c0b9aee42d41d32dc72208ebfc923f6f234f
languageName: node
linkType: hard
"node-releases@npm:^2.0.19":
version: 2.0.19
resolution: "node-releases@npm:2.0.19"
@ -9968,6 +10111,18 @@ __metadata:
languageName: node
linkType: hard
"nopt@npm:^4.0.1":
version: 4.0.3
resolution: "nopt@npm:4.0.3"
dependencies:
abbrev: "npm:1"
osenv: "npm:^0.1.4"
bin:
nopt: bin/nopt.js
checksum: 10c0/03e54cdf8c9b46924cfadf333b2b86fc180410d74d51f9c72fec5ef9c6f1a19ec533f647c05e40d49ef7491af59664c5d0baace808d6ccfe3ff064ae630a61b4
languageName: node
linkType: hard
"nopt@npm:^5.0.0":
version: 5.0.0
resolution: "nopt@npm:5.0.0"
@ -10016,6 +10171,45 @@ __metadata:
languageName: node
linkType: hard
"npm-bundled@npm:^1.0.1":
version: 1.1.2
resolution: "npm-bundled@npm:1.1.2"
dependencies:
npm-normalize-package-bin: "npm:^1.0.1"
checksum: 10c0/3f2337789afc8cb608a0dd71cefe459531053d48a5497db14b07b985c4cab15afcae88600db9f92eae072c89b982eeeec8e4463e1d77bc03a7e90f5dacf29769
languageName: node
linkType: hard
"npm-normalize-package-bin@npm:^1.0.1":
version: 1.0.1
resolution: "npm-normalize-package-bin@npm:1.0.1"
checksum: 10c0/b0c8c05fe419a122e0ff970ccbe7874ae24b4b4b08941a24d18097fe6e1f4b93e3f6abfb5512f9c5488827a5592f2fb3ce2431c41d338802aed24b9a0c160551
languageName: node
linkType: hard
"npm-packlist@npm:^1.1.6":
version: 1.4.8
resolution: "npm-packlist@npm:1.4.8"
dependencies:
ignore-walk: "npm:^3.0.1"
npm-bundled: "npm:^1.0.1"
npm-normalize-package-bin: "npm:^1.0.1"
checksum: 10c0/3b6dd1d0f677a3c1ad8e5f59362f4249459ad9fbb31c8a9306c0cf2af74016078d17a37fffee66b5437e76aba33c7ceb008905bccbadb23ea4776171d4b22b92
languageName: node
linkType: hard
"npmlog@npm:^4.0.2":
version: 4.1.2
resolution: "npmlog@npm:4.1.2"
dependencies:
are-we-there-yet: "npm:~1.1.2"
console-control-strings: "npm:~1.1.0"
gauge: "npm:~2.7.3"
set-blocking: "npm:~2.0.0"
checksum: 10c0/d6a26cb362277c65e24a70ebdaff31f81184ceb5415fd748abaaf26417bf0794a17ba849116e4f454a0370b9067ae320834cc78d74527dbeadf6e9d19a959046
languageName: node
linkType: hard
"npmlog@npm:^6.0.0":
version: 6.0.2
resolution: "npmlog@npm:6.0.2"
@ -10042,7 +10236,7 @@ __metadata:
languageName: node
linkType: hard
"object-assign@npm:^4.0.1, object-assign@npm:^4.1.1":
"object-assign@npm:^4.0.1, object-assign@npm:^4.1.0, object-assign@npm:^4.1.1":
version: 4.1.1
resolution: "object-assign@npm:4.1.1"
checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414
@ -10263,6 +10457,13 @@ __metadata:
languageName: node
linkType: hard
"os-homedir@npm:^1.0.0":
version: 1.0.2
resolution: "os-homedir@npm:1.0.2"
checksum: 10c0/6be4aa67317ee247b8d46142e243fb4ef1d2d65d3067f54bfc5079257a2f4d4d76b2da78cba7af3cb3f56dbb2e4202e0c47f26171d11ca1ed4008d842c90363f
languageName: node
linkType: hard
"os-locale@npm:^1.4.0":
version: 1.4.0
resolution: "os-locale@npm:1.4.0"
@ -10272,6 +10473,23 @@ __metadata:
languageName: node
linkType: hard
"os-tmpdir@npm:^1.0.0":
version: 1.0.2
resolution: "os-tmpdir@npm:1.0.2"
checksum: 10c0/f438450224f8e2687605a8dd318f0db694b6293c5d835ae509a69e97c8de38b6994645337e5577f5001115470414638978cc49da1cdcc25106dad8738dc69990
languageName: node
linkType: hard
"osenv@npm:^0.1.4":
version: 0.1.5
resolution: "osenv@npm:0.1.5"
dependencies:
os-homedir: "npm:^1.0.0"
os-tmpdir: "npm:^1.0.0"
checksum: 10c0/b33ed4b77e662f3ee2a04bf4b56cad2107ab069dee982feb9e39ad44feb9aa0cf1016b9ac6e05d0d84c91fa496798fe48dd05a33175d624e51668068b9805302
languageName: node
linkType: hard
"own-keys@npm:^1.0.1":
version: 1.0.1
resolution: "own-keys@npm:1.0.1"
@ -11776,7 +11994,7 @@ __metadata:
languageName: node
linkType: hard
"readable-stream@npm:^2.2.2, readable-stream@npm:^2.3.0, readable-stream@npm:^2.3.5, readable-stream@npm:~2.3.6":
"readable-stream@npm:^2.0.6, readable-stream@npm:^2.2.2, readable-stream@npm:^2.3.0, readable-stream@npm:^2.3.5, readable-stream@npm:~2.3.6":
version: 2.3.8
resolution: "readable-stream@npm:2.3.8"
dependencies:
@ -12199,6 +12417,17 @@ __metadata:
languageName: node
linkType: hard
"rimraf@npm:^2.6.1":
version: 2.7.1
resolution: "rimraf@npm:2.7.1"
dependencies:
glob: "npm:^7.1.3"
bin:
rimraf: ./bin.js
checksum: 10c0/4eef73d406c6940927479a3a9dee551e14a54faf54b31ef861250ac815172bade86cc6f7d64a4dc5e98b65e4b18a2e1c9ff3b68d296be0c748413f092bb0dd40
languageName: node
linkType: hard
"rimraf@npm:^3.0.2":
version: 3.0.2
resolution: "rimraf@npm:3.0.2"
@ -12365,7 +12594,7 @@ __metadata:
languageName: node
linkType: hard
"safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:~5.2.0":
"safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.1, safe-buffer@npm:~5.2.0":
version: 5.2.1
resolution: "safe-buffer@npm:5.2.1"
checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3
@ -12400,7 +12629,7 @@ __metadata:
languageName: node
linkType: hard
"safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.0.2, safer-buffer@npm:^2.1.0, safer-buffer@npm:~2.1.0":
"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.0.2, safer-buffer@npm:^2.1.0, safer-buffer@npm:~2.1.0":
version: 2.1.2
resolution: "safer-buffer@npm:2.1.2"
checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4
@ -12495,7 +12724,7 @@ __metadata:
languageName: node
linkType: hard
"semver@npm:2 || 3 || 4 || 5":
"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.3.0":
version: 5.7.2
resolution: "semver@npm:5.7.2"
bin:
@ -12531,7 +12760,7 @@ __metadata:
languageName: node
linkType: hard
"set-blocking@npm:^2.0.0":
"set-blocking@npm:^2.0.0, set-blocking@npm:~2.0.0":
version: 2.0.0
resolution: "set-blocking@npm:2.0.0"
checksum: 10c0/9f8c1b2d800800d0b589de1477c753492de5c1548d4ade52f57f1d1f5e04af5481554d75ce5e5c43d4004b80a3eb714398d6907027dc0534177b7539119f4454
@ -12669,7 +12898,7 @@ __metadata:
languageName: node
linkType: hard
"signal-exit@npm:^3.0.7":
"signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.7":
version: 3.0.7
resolution: "signal-exit@npm:3.0.7"
checksum: 10c0/25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912
@ -13364,6 +13593,21 @@ __metadata:
languageName: node
linkType: hard
"tar@npm:^4":
version: 4.4.19
resolution: "tar@npm:4.4.19"
dependencies:
chownr: "npm:^1.1.4"
fs-minipass: "npm:^1.2.7"
minipass: "npm:^2.9.0"
minizlib: "npm:^1.3.3"
mkdirp: "npm:^0.5.5"
safe-buffer: "npm:^5.2.1"
yallist: "npm:^3.1.1"
checksum: 10c0/1a32a68feabd55e040f399f75fed37c35fd76202bb60e393986312cdee0175ff0dfd1aec9cc04ad2ade8a252d2a08c7d191fda877ce23f14a3da954d91d301d7
languageName: node
linkType: hard
"tar@npm:^6.0.2, tar@npm:^6.1.11, tar@npm:^6.1.12, tar@npm:^6.1.2":
version: 6.2.1
resolution: "tar@npm:6.2.1"
@ -14450,7 +14694,7 @@ __metadata:
languageName: node
linkType: hard
"wide-align@npm:^1.1.5":
"wide-align@npm:^1.1.0, wide-align@npm:^1.1.5":
version: 1.1.5
resolution: "wide-align@npm:1.1.5"
dependencies:
@ -14583,6 +14827,16 @@ __metadata:
languageName: node
linkType: hard
"xml2js@npm:^0.4.23":
version: 0.4.23
resolution: "xml2js@npm:0.4.23"
dependencies:
sax: "npm:>=0.6.0"
xmlbuilder: "npm:~11.0.0"
checksum: 10c0/a3f41c9afc46d5bd0bea4070e5108777b605fd5ce2ebb978a68fd4c75513978ad5939f8135664ffea6f1adb342f391b1ba1584ed7955123b036e9ab8a1d26566
languageName: node
linkType: hard
"xml2js@npm:^0.5.0":
version: 0.5.0
resolution: "xml2js@npm:0.5.0"
@ -14663,7 +14917,7 @@ __metadata:
languageName: node
linkType: hard
"yallist@npm:^3.0.2":
"yallist@npm:^3.0.0, yallist@npm:^3.0.2, yallist@npm:^3.1.1":
version: 3.1.1
resolution: "yallist@npm:3.1.1"
checksum: 10c0/c66a5c46bc89af1625476f7f0f2ec3653c1a1791d2f9407cfb4c2ba812a1e1c9941416d71ba9719876530e3340a99925f697142989371b72d93b9ee628afd8c1
@ -14762,6 +15016,18 @@ __metadata:
languageName: node
linkType: hard
"zipfile@npm:^0.5.11":
version: 0.5.12
resolution: "zipfile@npm:0.5.12"
dependencies:
nan: "npm:~2.10.0"
node-pre-gyp: "npm:~0.10.2"
bin:
unzip.js: ./bin/unzip.js
checksum: 10c0/0813640a8f1b544b3b61f9039a8589f62f5d185c61b8ee282ee5d97115c99d0bf131cadbbe729b86dc1c147ed3196576eaac98175a64893ff4ead039521a5e7f
languageName: node
linkType: hard
"zod-to-json-schema@npm:^3.22.3":
version: 3.24.1
resolution: "zod-to-json-schema@npm:3.24.1"