From f1cfdb29f8343601190aaa9363d15cf32324bd34 Mon Sep 17 00:00:00 2001 From: kangfenmao Date: Sat, 12 Oct 2024 13:18:53 +0800 Subject: [PATCH] feat: add document files support --- package.json | 1 + src/main/constant.ts | 94 ++++++ src/main/services/FileManager.ts | 9 +- src/main/utils/file.ts | 97 +----- src/renderer/src/config/constant.ts | 1 + .../pages/home/Inputbar/AttachmentButton.tsx | 4 +- .../src/pages/home/Inputbar/Inputbar.tsx | 4 +- .../src/providers/AnthropicProvider.ts | 2 +- src/renderer/src/providers/GeminiProvider.ts | 2 +- src/renderer/src/providers/OpenAIProvider.ts | 4 +- yarn.lock | 279 +++++++++++++++++- 11 files changed, 383 insertions(+), 114 deletions(-) create mode 100644 src/main/constant.ts diff --git a/package.json b/package.json index 5d9a8c4e..5177324d 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "electron-window-state": "^5.0.3", "fs-extra": "^11.2.0", "html2canvas": "^1.4.1", + "officeparser": "^4.1.1", "unzipper": "^0.12.3", "webdav": "4.11.4" }, diff --git a/src/main/constant.ts b/src/main/constant.ts new file mode 100644 index 00000000..f9d52d74 --- /dev/null +++ b/src/main/constant.ts @@ -0,0 +1,94 @@ +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 textExts = [ + '.txt', // 普通文本文件 + '.md', // Markdown 文件 + '.mdx', // Markdown 文件 + '.html', // HTML 文件 + '.htm', // HTML 文件的另一种扩展名 + '.xml', // XML 文件 + '.json', // JSON 文件 + '.yaml', // YAML 文件 + '.yml', // YAML 文件的另一种扩展名 + '.csv', // 逗号分隔值文件 + '.tsv', // 制表符分隔值文件 + '.ini', // 配置文件 + '.log', // 日志文件 + '.rtf', // 富文本格式文件 + '.tex', // LaTeX 文件 + '.srt', // 字幕文件 + '.xhtml', // XHTML 文件 + '.nfo', // 信息文件(主要用于场景发布) + '.conf', // 配置文件 + '.config', // 配置文件 + '.env', // 环境变量文件 + '.properties', // 配置属性文件 + '.latex', // LaTeX 文档文件 + '.rst', // reStructuredText 文件 + '.php', // PHP 脚本文件,包含嵌入的 HTML + '.js', // JavaScript 文件(部分是文本,部分可能包含代码) + '.ts', // TypeScript 文件 + '.jsp', // JavaServer Pages 文件 + '.aspx', // ASP.NET 文件 + '.bat', // Windows 批处理文件 + '.sh', // Unix/Linux Shell 脚本文件 + '.py', // Python 脚本文件 + '.rb', // Ruby 脚本文件 + '.pl', // Perl 脚本文件 + '.sql', // SQL 脚本文件 + '.css', // Cascading Style Sheets 文件 + '.less', // Less CSS 预处理器文件 + '.scss', // Sass CSS 预处理器文件 + '.sass', // Sass 文件 + '.styl', // Stylus CSS 预处理器文件 + '.coffee', // CoffeeScript 文件 + '.ino', // Arduino 代码文件 + '.ino', // Arduino 代码文件 + '.asm', // Assembly 语言文件 + '.go', // Go 语言文件 + '.scala', // Scala 语言文件 + '.swift', // Swift 语言文件 + '.kt', // Kotlin 语言文件 + '.rs', // Rust 语言文件 + '.lua', // Lua 语言文件 + '.groovy', // Groovy 语言文件 + '.dart', // Dart 语言文件 + '.hs', // Haskell 语言文件 + '.clj', // Clojure 语言文件 + '.cljs', // ClojureScript 语言文件 + '.elm', // Elm 语言文件 + '.erl', // Erlang 语言文件 + '.ex', // Elixir 语言文件 + '.exs', // Elixir 脚本文件 + '.pug', // Pug (formerly Jade) 模板文件 + '.haml', // Haml 模板文件 + '.slim', // Slim 模板文件 + '.tpl', // 模板文件(通用) + '.ejs', // Embedded JavaScript 模板文件 + '.hbs', // Handlebars 模板文件 + '.mustache', // Mustache 模板文件 + '.jade', // Jade 模板文件 (已重命名为 Pug) + '.twig', // Twig 模板文件 + '.blade', // Blade 模板文件 (Laravel) + '.vue', // Vue.js 单文件组件 + '.jsx', // React JSX 文件 + '.tsx', // React TSX 文件 + '.graphql', // GraphQL 查询语言文件 + '.gql', // GraphQL 查询语言文件 + '.proto', // Protocol Buffers 文件 + '.thrift', // Thrift 文件 + '.toml', // TOML 配置文件 + '.edn', // Clojure 数据表示文件 + '.cake', // CakePHP 配置文件 + '.ctp', // CakePHP 视图文件 + '.cfm', // ColdFusion 标记语言文件 + '.cfc', // ColdFusion 组件文件 + '.m', // Objective-C 源文件 + '.mm', // Objective-C++ 源文件 + '.gradle', // Gradle 构建文件 + '.groovy', // Gradle 构建文件 + '.gradle', // Gradle 构建文件 + '.kts' // Kotlin Script 文件 +] diff --git a/src/main/services/FileManager.ts b/src/main/services/FileManager.ts index eeca5d29..3ebc477b 100644 --- a/src/main/services/FileManager.ts +++ b/src/main/services/FileManager.ts @@ -1,3 +1,4 @@ +import { documentExts } from '@main/constant' import { getFileType } from '@main/utils/file' import { FileType } from '@types' import * as crypto from 'crypto' @@ -13,6 +14,7 @@ import logger from 'electron-log' import * as fs from 'fs' import { writeFileSync } from 'fs' import { readFile } from 'fs/promises' +import officeParser from 'officeparser' import * as path from 'path' import { v4 as uuidv4 } from 'uuid' @@ -172,7 +174,12 @@ class FileManager { } public readFile = async (_: Electron.IpcMainInvokeEvent, id: string): Promise => { - const filePath = path.join(this.storageDir, id) + const filePath = id.includes('/') ? id : path.join(this.storageDir, id) + + if (documentExts.includes(path.extname(filePath))) { + return await officeParser.parseOfficeAsync(filePath) + } + return fs.readFileSync(filePath, 'utf8') } diff --git a/src/main/utils/file.ts b/src/main/utils/file.ts index f2b1d626..fa8c0ef9 100644 --- a/src/main/utils/file.ts +++ b/src/main/utils/file.ts @@ -1,101 +1,8 @@ +import { audioExts, documentExts, imageExts, textExts, videoExts } from '@main/constant' + import { FileTypes } from '../../renderer/src/types' export function getFileType(ext: string): FileTypes { - const imageExts = ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp'] - const videoExts = ['.mp4', '.avi', '.mov', '.wmv', '.flv', '.mkv'] - const audioExts = ['.mp3', '.wav', '.ogg', '.flac', '.aac'] - const documentExts = ['.pdf', '.doc', '.docx', '.xls', '.xlsx', '.ppt', '.pptx'] - const textExts = [ - '.txt', // 普通文本文件 - '.md', // Markdown 文件 - '.mdx', // Markdown 文件 - '.html', // HTML 文件 - '.htm', // HTML 文件的另一种扩展名 - '.xml', // XML 文件 - '.json', // JSON 文件 - '.yaml', // YAML 文件 - '.yml', // YAML 文件的另一种扩展名 - '.csv', // 逗号分隔值文件 - '.tsv', // 制表符分隔值文件 - '.ini', // 配置文件 - '.log', // 日志文件 - '.rtf', // 富文本格式文件 - '.tex', // LaTeX 文件 - '.srt', // 字幕文件 - '.xhtml', // XHTML 文件 - '.nfo', // 信息文件(主要用于场景发布) - '.conf', // 配置文件 - '.config', // 配置文件 - '.env', // 环境变量文件 - '.properties', // 配置属性文件 - '.latex', // LaTeX 文档文件 - '.rst', // reStructuredText 文件 - '.php', // PHP 脚本文件,包含嵌入的 HTML - '.js', // JavaScript 文件(部分是文本,部分可能包含代码) - '.ts', // TypeScript 文件 - '.jsp', // JavaServer Pages 文件 - '.aspx', // ASP.NET 文件 - '.bat', // Windows 批处理文件 - '.sh', // Unix/Linux Shell 脚本文件 - '.py', // Python 脚本文件 - '.rb', // Ruby 脚本文件 - '.pl', // Perl 脚本文件 - '.sql', // SQL 脚本文件 - '.css', // Cascading Style Sheets 文件 - '.less', // Less CSS 预处理器文件 - '.scss', // Sass CSS 预处理器文件 - '.sass', // Sass 文件 - '.styl', // Stylus CSS 预处理器文件 - '.coffee', // CoffeeScript 文件 - '.ino', // Arduino 代码文件 - '.ino', // Arduino 代码文件 - '.asm', // Assembly 语言文件 - '.go', // Go 语言文件 - '.scala', // Scala 语言文件 - '.swift', // Swift 语言文件 - '.kt', // Kotlin 语言文件 - '.rs', // Rust 语言文件 - '.lua', // Lua 语言文件 - '.groovy', // Groovy 语言文件 - '.dart', // Dart 语言文件 - '.hs', // Haskell 语言文件 - '.clj', // Clojure 语言文件 - '.cljs', // ClojureScript 语言文件 - '.elm', // Elm 语言文件 - '.erl', // Erlang 语言文件 - '.ex', // Elixir 语言文件 - '.exs', // Elixir 脚本文件 - '.pug', // Pug (formerly Jade) 模板文件 - '.haml', // Haml 模板文件 - '.slim', // Slim 模板文件 - '.tpl', // 模板文件(通用) - '.ejs', // Embedded JavaScript 模板文件 - '.hbs', // Handlebars 模板文件 - '.mustache', // Mustache 模板文件 - '.jade', // Jade 模板文件 (已重命名为 Pug) - '.twig', // Twig 模板文件 - '.blade', // Blade 模板文件 (Laravel) - '.vue', // Vue.js 单文件组件 - '.jsx', // React JSX 文件 - '.tsx', // React TSX 文件 - '.graphql', // GraphQL 查询语言文件 - '.gql', // GraphQL 查询语言文件 - '.proto', // Protocol Buffers 文件 - '.thrift', // Thrift 文件 - '.toml', // TOML 配置文件 - '.edn', // Clojure 数据表示文件 - '.cake', // CakePHP 配置文件 - '.ctp', // CakePHP 视图文件 - '.cfm', // ColdFusion 标记语言文件 - '.cfc', // ColdFusion 组件文件 - '.m', // Objective-C 源文件 - '.mm', // Objective-C++ 源文件 - '.gradle', // Gradle 构建文件 - '.groovy', // Gradle 构建文件 - '.gradle', // Gradle 构建文件 - '.kts' // Kotlin Script 文件 - ] - ext = ext.toLowerCase() if (imageExts.includes(ext)) return FileTypes.IMAGE if (videoExts.includes(ext)) return FileTypes.VIDEO diff --git a/src/renderer/src/config/constant.ts b/src/renderer/src/config/constant.ts index 8174f5c5..607e70ce 100644 --- a/src/renderer/src/config/constant.ts +++ b/src/renderer/src/config/constant.ts @@ -9,6 +9,7 @@ export const isWindows = platform === 'win32' || platform === 'win64' export const isLinux = platform === 'linux' export const imageExts = ['.jpg', '.png', '.jpeg'] +export const documentExts = ['.pdf', '.docx', '.pptx', '.xlsx', '.odt', '.odp', '.ods'] export const textExts = [ '.txt', // 普通文本文件 '.md', // Markdown 文件 diff --git a/src/renderer/src/pages/home/Inputbar/AttachmentButton.tsx b/src/renderer/src/pages/home/Inputbar/AttachmentButton.tsx index 34e7df5d..3986bd89 100644 --- a/src/renderer/src/pages/home/Inputbar/AttachmentButton.tsx +++ b/src/renderer/src/pages/home/Inputbar/AttachmentButton.tsx @@ -1,5 +1,5 @@ import { PaperClipOutlined } from '@ant-design/icons' -import { imageExts, textExts } from '@renderer/config/constant' +import { documentExts, imageExts, textExts } from '@renderer/config/constant' import { isVisionModel } from '@renderer/config/models' import { FileType, Model } from '@renderer/types' import { Tooltip } from 'antd' @@ -15,7 +15,7 @@ interface Props { const AttachmentButton: FC = ({ model, files, setFiles, ToolbarButton }) => { const { t } = useTranslation() - const extensions = isVisionModel(model) ? [...imageExts, ...textExts] : [...textExts] + const extensions = isVisionModel(model) ? [...imageExts, ...textExts, ...documentExts] : [...textExts] const onSelectFile = async () => { if (files.length > 0) { diff --git a/src/renderer/src/pages/home/Inputbar/Inputbar.tsx b/src/renderer/src/pages/home/Inputbar/Inputbar.tsx index 3e86975d..e15d3024 100644 --- a/src/renderer/src/pages/home/Inputbar/Inputbar.tsx +++ b/src/renderer/src/pages/home/Inputbar/Inputbar.tsx @@ -7,7 +7,7 @@ import { PauseCircleOutlined, QuestionCircleOutlined } from '@ant-design/icons' -import { imageExts, textExts } from '@renderer/config/constant' +import { documentExts, imageExts, textExts } from '@renderer/config/constant' import { isVisionModel } from '@renderer/config/models' import db from '@renderer/databases' import { useAssistant } from '@renderer/hooks/useAssistant' @@ -60,7 +60,7 @@ const Inputbar: FC = ({ assistant, setActiveTopic }) => { const dispatch = useAppDispatch() const isVision = useMemo(() => isVisionModel(model), [model]) - const supportExts = useMemo(() => [...textExts, ...(isVision ? imageExts : [])], [isVision]) + const supportExts = useMemo(() => [...textExts, ...documentExts, ...(isVision ? imageExts : [])], [isVision]) const inputTokenCount = useMemo(() => estimateTextTokens(text), [text]) _text = text diff --git a/src/renderer/src/providers/AnthropicProvider.ts b/src/renderer/src/providers/AnthropicProvider.ts index 8b48a686..390582e7 100644 --- a/src/renderer/src/providers/AnthropicProvider.ts +++ b/src/renderer/src/providers/AnthropicProvider.ts @@ -37,7 +37,7 @@ export default class AnthropicProvider extends BaseProvider { } }) } - if (file.type === FileTypes.TEXT) { + if ([FileTypes.TEXT, FileTypes.DOCUMENT].includes(file.type)) { const fileContent = await (await window.api.file.read(file.id + file.ext)).trim() parts.push({ type: 'text', diff --git a/src/renderer/src/providers/GeminiProvider.ts b/src/renderer/src/providers/GeminiProvider.ts index a98f67da..600f239d 100644 --- a/src/renderer/src/providers/GeminiProvider.ts +++ b/src/renderer/src/providers/GeminiProvider.ts @@ -40,7 +40,7 @@ export default class GeminiProvider extends BaseProvider { } } as InlineDataPart) } - if (file.type === FileTypes.TEXT) { + if ([FileTypes.TEXT, FileTypes.DOCUMENT].includes(file.type)) { const fileContent = await (await window.api.file.read(file.id + file.ext)).trim() parts.push({ text: file.origin_name + '\n' + fileContent diff --git a/src/renderer/src/providers/OpenAIProvider.ts b/src/renderer/src/providers/OpenAIProvider.ts index 0f4ba21a..a007f087 100644 --- a/src/renderer/src/providers/OpenAIProvider.ts +++ b/src/renderer/src/providers/OpenAIProvider.ts @@ -64,7 +64,7 @@ export default class OpenAIProvider extends BaseProvider { if (this.isNotSupportFiles) { if (message.files) { - const textFiles = message.files.filter((file) => file.type === FileTypes.TEXT) + const textFiles = message.files.filter((file) => [FileTypes.TEXT, FileTypes.DOCUMENT].includes(file.type)) if (textFiles.length > 0) { let text = '' @@ -104,7 +104,7 @@ export default class OpenAIProvider extends BaseProvider { image_url: { url: image.data } }) } - if (file.type === FileTypes.TEXT) { + if ([FileTypes.TEXT, FileTypes.DOCUMENT].includes(file.type)) { const fileContent = await (await window.api.file.read(file.id + file.ext)).trim() parts.push({ type: 'text', diff --git a/yarn.lock b/yarn.lock index fbbec603..f7499179 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2227,7 +2227,7 @@ __metadata: languageName: node linkType: hard -"@xmldom/xmldom@npm:^0.8.8": +"@xmldom/xmldom@npm:^0.8.10, @xmldom/xmldom@npm:^0.8.8": version: 0.8.10 resolution: "@xmldom/xmldom@npm:0.8.10" checksum: 10c0/c7647c442502720182b0d65b17d45d2d95317c1c8c497626fe524bda79b4fb768a9aa4fae2da919f308e7abcff7d67c058b102a9d641097e9a57f0b80187851f @@ -2287,6 +2287,7 @@ __metadata: localforage: "npm:^1.10.0" lodash: "npm:^4.17.21" mime: "npm:^4.0.4" + officeparser: "npm:^4.1.1" openai: "npm:^4.52.1" prettier: "npm:^3.2.4" react: "npm:^18.2.0" @@ -2941,6 +2942,16 @@ __metadata: languageName: node linkType: hard +"bl@npm:^1.0.0": + version: 1.2.3 + resolution: "bl@npm:1.2.3" + dependencies: + readable-stream: "npm:^2.3.5" + safe-buffer: "npm:^5.1.1" + checksum: 10c0/ee6478864d3b1295614f269f3fbabeb2362a2f2fc7f8dc2f6c1f944a278d84e0572ecefd6d0b0736d7418763f98dc3b2738253191ea9e98e4b08de211cfac0a6 + languageName: node + linkType: hard + "bluebird-lst@npm:^1.0.9": version: 1.0.9 resolution: "bluebird-lst@npm:1.0.9" @@ -3022,6 +3033,23 @@ __metadata: languageName: node linkType: hard +"buffer-alloc-unsafe@npm:^1.1.0": + version: 1.1.0 + resolution: "buffer-alloc-unsafe@npm:1.1.0" + checksum: 10c0/06b9298c9369621a830227c3797ceb3ff5535e323946d7b39a7398fed8b3243798259b3c85e287608c5aad35ccc551cec1a0a5190cc8f39652e8eee25697fc9c + languageName: node + linkType: hard + +"buffer-alloc@npm:^1.2.0": + version: 1.2.0 + resolution: "buffer-alloc@npm:1.2.0" + dependencies: + buffer-alloc-unsafe: "npm:^1.1.0" + buffer-fill: "npm:^1.0.0" + checksum: 10c0/09d87dd53996342ccfbeb2871257d8cdb25ce9ee2259adc95c6490200cd6e528c5fbae8f30bcc323fe8d8efb0fe541e4ac3bbe9ee3f81c6b7c4b27434cc02ab4 + languageName: node + linkType: hard + "buffer-crc32@npm:^1.0.0": version: 1.0.0 resolution: "buffer-crc32@npm:1.0.0" @@ -3050,6 +3078,13 @@ __metadata: languageName: node linkType: hard +"buffer-fill@npm:^1.0.0": + version: 1.0.0 + resolution: "buffer-fill@npm:1.0.0" + checksum: 10c0/55b5654fbbf2d7ceb4991bb537f5e5b5b5b9debca583fee416a74fcec47c16d9e7a90c15acd27577da7bd750b7fa6396e77e7c221e7af138b6d26242381c6e4d + languageName: node + linkType: hard + "buffer-from@npm:^1.0.0": version: 1.1.2 resolution: "buffer-from@npm:1.1.2" @@ -3057,7 +3092,7 @@ __metadata: languageName: node linkType: hard -"buffer@npm:^5.1.0, buffer@npm:^5.2.0": +"buffer@npm:^5.1.0, buffer@npm:^5.2.0, buffer@npm:^5.2.1": version: 5.7.1 resolution: "buffer@npm:5.7.1" dependencies: @@ -3489,6 +3524,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:^2.8.1": + version: 2.20.3 + resolution: "commander@npm:2.20.3" + checksum: 10c0/74c781a5248c2402a0a3e966a0a2bba3c054aad144f5c023364be83265e796b20565aa9feff624132ff629aa64e16999fa40a743c10c12f7c61e96a794b99288 + languageName: node + linkType: hard + "commander@npm:^5.0.0": version: 5.1.0 resolution: "commander@npm:5.1.0" @@ -3843,6 +3885,69 @@ __metadata: languageName: node linkType: hard +"decompress-tar@npm:^4.0.0, decompress-tar@npm:^4.1.0, decompress-tar@npm:^4.1.1": + version: 4.1.1 + resolution: "decompress-tar@npm:4.1.1" + dependencies: + file-type: "npm:^5.2.0" + is-stream: "npm:^1.1.0" + tar-stream: "npm:^1.5.2" + checksum: 10c0/92d86c5dfe2a89f9b5db584668f8ed2a3107339083872c7f78b5f7d55222d954545e018c10346a50991542ad6d1406128bf1c97a24f023810993a1dcfb3c3f21 + languageName: node + linkType: hard + +"decompress-tarbz2@npm:^4.0.0": + version: 4.1.1 + resolution: "decompress-tarbz2@npm:4.1.1" + dependencies: + decompress-tar: "npm:^4.1.0" + file-type: "npm:^6.1.0" + is-stream: "npm:^1.1.0" + seek-bzip: "npm:^1.0.5" + unbzip2-stream: "npm:^1.0.9" + checksum: 10c0/d5ab2c2435a53f45da8348ffdb5ae0a3ff8fec55948b7890a1c55413de4d1e539a22978e7dcd8bd3561985878c9778253fe146cbdea429f04fa4529abb57c54e + languageName: node + linkType: hard + +"decompress-targz@npm:^4.0.0": + version: 4.1.1 + resolution: "decompress-targz@npm:4.1.1" + dependencies: + decompress-tar: "npm:^4.1.1" + file-type: "npm:^5.2.0" + is-stream: "npm:^1.1.0" + checksum: 10c0/42514fb2df6248c56b2b115494b7d1d046bc582e960354ba4faad5792f261782a61d17d9ef53845abe78c0f0ecafc195cb0754c00227fa0bd0642a1bfd8eafad + languageName: node + linkType: hard + +"decompress-unzip@npm:^4.0.1": + version: 4.0.1 + resolution: "decompress-unzip@npm:4.0.1" + dependencies: + file-type: "npm:^3.8.0" + get-stream: "npm:^2.2.0" + pify: "npm:^2.3.0" + yauzl: "npm:^2.4.2" + checksum: 10c0/896f88e1c23b59cdce022227a8910c06158bd4b296c21d61af7167bd50d00e9e4355b605bdbfd7ba75d46ad277d4f881cdd037aec7165a40ccd0ee4ef59443a8 + languageName: node + linkType: hard + +"decompress@npm:^4.2.0": + version: 4.2.1 + resolution: "decompress@npm:4.2.1" + dependencies: + decompress-tar: "npm:^4.0.0" + decompress-tarbz2: "npm:^4.0.0" + decompress-targz: "npm:^4.0.0" + decompress-unzip: "npm:^4.0.1" + graceful-fs: "npm:^4.1.10" + make-dir: "npm:^1.0.0" + pify: "npm:^2.3.0" + strip-dirs: "npm:^2.0.0" + checksum: 10c0/6730279fa206aad04a8338a88ab49c596034c502b2d5f23a28d0a28290b82d9217f9e60c8b5739805474ca842fc856e08e2d64ed759f2118c2bcabe42fa9eece + languageName: node + linkType: hard + "deep-is@npm:^0.1.3": version: 0.1.4 resolution: "deep-is@npm:0.1.4" @@ -4295,7 +4400,7 @@ __metadata: languageName: node linkType: hard -"end-of-stream@npm:^1.1.0": +"end-of-stream@npm:^1.0.0, end-of-stream@npm:^1.1.0": version: 1.4.4 resolution: "end-of-stream@npm:1.4.4" dependencies: @@ -4993,6 +5098,27 @@ __metadata: languageName: node linkType: hard +"file-type@npm:^3.8.0": + version: 3.9.0 + resolution: "file-type@npm:3.9.0" + checksum: 10c0/7ae074b350c2300807a99d428600a8ee6b2ace901400898706a20ddc2c43c9abb7e05177ff55ed67a2fd26dfa9b91857b21ec9c0ab3202b9cabebc7e65900240 + languageName: node + linkType: hard + +"file-type@npm:^5.2.0": + version: 5.2.0 + resolution: "file-type@npm:5.2.0" + checksum: 10c0/c16c2f4e484a838c12b63e08637277905f08aebb1afbc291086029210aea17ded5ed701c9a4588313446ae0c1da71566b58df9a9c758a1ec300c4f80b9713cbf + languageName: node + linkType: hard + +"file-type@npm:^6.1.0": + version: 6.2.0 + resolution: "file-type@npm:6.2.0" + checksum: 10c0/3d7fe85a10bd97ca0c35fd9a20d21f5b20849bbb70985d37c34475051433f3c6109c76a3e5893bff6773037b769be9730a2db762789ecf25def9b62a4c2ee953 + languageName: node + linkType: hard + "file-url@npm:^2.0.0": version: 2.0.2 resolution: "file-url@npm:2.0.2" @@ -5147,6 +5273,13 @@ __metadata: languageName: node linkType: hard +"fs-constants@npm:^1.0.0": + version: 1.0.0 + resolution: "fs-constants@npm:1.0.0" + checksum: 10c0/a0cde99085f0872f4d244e83e03a46aa387b74f5a5af750896c6b05e9077fac00e9932fdf5aef84f2f16634cd473c63037d7a512576da7d5c2b9163d1909f3a8 + languageName: node + linkType: hard + "fs-extra@npm:^1.0.0": version: 1.0.0 resolution: "fs-extra@npm:1.0.0" @@ -5307,6 +5440,16 @@ __metadata: languageName: node linkType: hard +"get-stream@npm:^2.2.0": + version: 2.3.1 + resolution: "get-stream@npm:2.3.1" + dependencies: + object-assign: "npm:^4.0.1" + pinkie-promise: "npm:^2.0.0" + checksum: 10c0/46c12f496e7edec688a1cc570fe7556ce91e91201fa7efb146853fb9f0a8f0b0bb9a02cf9d9e4e9d4e2097f98c83b09621d9034c25ca0cf80ae6f4dace9c3465 + languageName: node + linkType: hard + "get-stream@npm:^5.1.0": version: 5.2.0 resolution: "get-stream@npm:5.2.0" @@ -5497,7 +5640,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.1.9, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.2, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6": +"graceful-fs@npm:^4.1.10, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.1.9, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.2, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 @@ -6329,6 +6472,13 @@ __metadata: languageName: node linkType: hard +"is-natural-number@npm:^4.0.1": + version: 4.0.1 + resolution: "is-natural-number@npm:4.0.1" + checksum: 10c0/f05c544cb0ad39d4410e2ae2244282bf61918ebbb808b665436ffca4f6bbe908d3ae3a8d21fe143d302951f157d969986dd432098b63899561639fcd1ce1c280 + languageName: node + linkType: hard + "is-negative-zero@npm:^2.0.3": version: 2.0.3 resolution: "is-negative-zero@npm:2.0.3" @@ -6413,7 +6563,7 @@ __metadata: languageName: node linkType: hard -"is-stream@npm:^1.0.1": +"is-stream@npm:^1.0.1, is-stream@npm:^1.1.0": version: 1.1.0 resolution: "is-stream@npm:1.1.0" checksum: 10c0/b8ae7971e78d2e8488d15f804229c6eed7ed36a28f8807a1815938771f4adff0e705218b7dab968270433f67103e4fef98062a0beea55d64835f705ee72c7002 @@ -7087,6 +7237,15 @@ __metadata: languageName: node linkType: hard +"make-dir@npm:^1.0.0": + version: 1.3.0 + resolution: "make-dir@npm:1.3.0" + dependencies: + pify: "npm:^3.0.0" + checksum: 10c0/5eb94f47d7ef41d89d1b8eef6539b8950d5bd99eeba093a942bfd327faa37d2d62227526b88b73633243a2ec7972d21eb0f4e5d62ae4e02a79e389f4a7bb3022 + languageName: node + linkType: hard + "make-fetch-happen@npm:^13.0.0": version: 13.0.1 resolution: "make-fetch-happen@npm:13.0.1" @@ -8053,6 +8212,13 @@ __metadata: languageName: node linkType: hard +"node-ensure@npm:^0.0.0": + version: 0.0.0 + resolution: "node-ensure@npm:0.0.0" + checksum: 10c0/7af391aee024a8b7df77c239ed8b90417e3f2539824fa06b60f243ce14c75ee455766464c7c3ba9407d5b1e4d1d74ed5cf5f8af10c67b0fc05aa6e29f5d2462b + languageName: node + linkType: hard + "node-fetch@npm:^2.6.7": version: 2.7.0 resolution: "node-fetch@npm:2.7.0" @@ -8152,7 +8318,7 @@ __metadata: languageName: node linkType: hard -"object-assign@npm:^4.1.1": +"object-assign@npm:^4.0.1, object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414 @@ -8219,6 +8385,21 @@ __metadata: languageName: node linkType: hard +"officeparser@npm:^4.1.1": + version: 4.1.1 + resolution: "officeparser@npm:4.1.1" + dependencies: + "@xmldom/xmldom": "npm:^0.8.10" + decompress: "npm:^4.2.0" + file-type: "npm:^16.5.4" + node-ensure: "npm:^0.0.0" + rimraf: "npm:^2.6.3" + bin: + officeparser: officeParser.js + checksum: 10c0/7c5f01b3fe74fd31ca6ae6a6f46b2336d953eece3ca61d171e417b50d7e1962268af630bef0c8d40e39a1c471e7146281eecd880f0eecc576895eee9bc20b6a7 + languageName: node + linkType: hard + "omggif@npm:^1.0.10, omggif@npm:^1.0.9": version: 1.0.10 resolution: "omggif@npm:1.0.10" @@ -8610,13 +8791,20 @@ __metadata: languageName: node linkType: hard -"pify@npm:^2.0.0": +"pify@npm:^2.0.0, pify@npm:^2.3.0": version: 2.3.0 resolution: "pify@npm:2.3.0" checksum: 10c0/551ff8ab830b1052633f59cb8adc9ae8407a436e06b4a9718bcb27dc5844b83d535c3a8512b388b6062af65a98c49bdc0dd523d8b2617b188f7c8fee457158dc languageName: node linkType: hard +"pify@npm:^3.0.0": + version: 3.0.0 + resolution: "pify@npm:3.0.0" + checksum: 10c0/fead19ed9d801f1b1fcd0638a1ac53eabbb0945bf615f2f8806a8b646565a04a1b0e7ef115c951d225f042cca388fdc1cd3add46d10d1ed6951c20bd2998af10 + languageName: node + linkType: hard + "pinkie-promise@npm:^2.0.0": version: 2.0.1 resolution: "pinkie-promise@npm:2.0.1" @@ -9664,7 +9852,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^2.0.2, readable-stream@npm:^2.0.5, readable-stream@npm:^2.2.2, readable-stream@npm:~2.3.6": +"readable-stream@npm:^2.0.2, readable-stream@npm:^2.0.5, 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: @@ -10073,6 +10261,17 @@ __metadata: languageName: node linkType: hard +"rimraf@npm:^2.6.3": + 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" @@ -10196,7 +10395,7 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:^5.0.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.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 @@ -10284,6 +10483,18 @@ __metadata: languageName: node linkType: hard +"seek-bzip@npm:^1.0.5": + version: 1.0.6 + resolution: "seek-bzip@npm:1.0.6" + dependencies: + commander: "npm:^2.8.1" + bin: + seek-bunzip: bin/seek-bunzip + seek-table: bin/seek-bzip-table + checksum: 10c0/e4019e4498bb725ff855603595c4116ca003674b13d29cb9ed9891b2ceec884ccf7c1cb5dba0d6b50fe6ce760a011078f5744efb79823f4ddb9decb1571e9912 + languageName: node + linkType: hard + "semver-compare@npm:^1.0.0": version: 1.0.0 resolution: "semver-compare@npm:1.0.0" @@ -10776,6 +10987,15 @@ __metadata: languageName: node linkType: hard +"strip-dirs@npm:^2.0.0": + version: 2.1.0 + resolution: "strip-dirs@npm:2.1.0" + dependencies: + is-natural-number: "npm:^4.0.1" + checksum: 10c0/073d6d08331ec2e87afc2c2535d7336fee1d63797384045e4ecb9908a5ac6615022ee000cc278d6bbc94147bed7350f7cf4657b6d18c377813f37e7ae329fb52 + languageName: node + linkType: hard + "strip-json-comments@npm:^3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" @@ -10908,6 +11128,21 @@ __metadata: languageName: node linkType: hard +"tar-stream@npm:^1.5.2": + version: 1.6.2 + resolution: "tar-stream@npm:1.6.2" + dependencies: + bl: "npm:^1.0.0" + buffer-alloc: "npm:^1.2.0" + end-of-stream: "npm:^1.0.0" + fs-constants: "npm:^1.0.0" + readable-stream: "npm:^2.3.0" + to-buffer: "npm:^1.1.1" + xtend: "npm:^4.0.0" + checksum: 10c0/ab8528d2cc9ccd0906d1ce6d8089030b2c92a578c57645ff4971452c8c5388b34c7152c04ed64b8510d22a66ffaf0fee58bada7d6ab41ad1e816e31993d59cf3 + languageName: node + linkType: hard + "tar-stream@npm:^3.0.0": version: 3.1.7 resolution: "tar-stream@npm:3.1.7" @@ -10982,6 +11217,13 @@ __metadata: languageName: node linkType: hard +"through@npm:^2.3.8": + version: 2.3.8 + resolution: "through@npm:2.3.8" + checksum: 10c0/4b09f3774099de0d4df26d95c5821a62faee32c7e96fb1f4ebd54a2d7c11c57fe88b0a0d49cf375de5fee5ae6bf4eb56dbbf29d07366864e2ee805349970d3cc + languageName: node + linkType: hard + "timm@npm:^1.6.1": version: 1.7.1 resolution: "timm@npm:1.7.1" @@ -11026,6 +11268,13 @@ __metadata: languageName: node linkType: hard +"to-buffer@npm:^1.1.1": + version: 1.1.1 + resolution: "to-buffer@npm:1.1.1" + checksum: 10c0/fb9fc6a0103f2b06e2e01c3d291586d0148759d5584f35d0973376434d1b58bd6ee5df9273f0bb1190eb2a5747c894bf49fed571325a7ac10208a48f31736439 + languageName: node + linkType: hard + "to-fast-properties@npm:^2.0.0": version: 2.0.0 resolution: "to-fast-properties@npm:2.0.0" @@ -11280,6 +11529,16 @@ __metadata: languageName: node linkType: hard +"unbzip2-stream@npm:^1.0.9": + version: 1.4.3 + resolution: "unbzip2-stream@npm:1.4.3" + dependencies: + buffer: "npm:^5.2.1" + through: "npm:^2.3.8" + checksum: 10c0/2ea2048f3c9db3499316ccc1d95ff757017ccb6f46c812d7c42466247e3b863fb178864267482f7f178254214247779daf68e85f50bd7736c3c97ba2d58b910a + languageName: node + linkType: hard + "undici-types@npm:~5.26.4": version: 5.26.5 resolution: "undici-types@npm:5.26.5" @@ -12101,7 +12360,7 @@ __metadata: languageName: node linkType: hard -"yauzl@npm:^2.10.0": +"yauzl@npm:^2.10.0, yauzl@npm:^2.4.2": version: 2.10.0 resolution: "yauzl@npm:2.10.0" dependencies: