@file-viewer/vite-plugin 2.0.11

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/LICENSE ADDED
@@ -0,0 +1,6 @@
1
+ Apache-2.0
2
+
3
+ Copyright 2026 Flyfish Viewer
4
+
5
+ Licensed under the Apache License, Version 2.0. See the root repository LICENSE
6
+ file or https://www.apache.org/licenses/LICENSE-2.0 for the full license text.
package/README.en.md ADDED
@@ -0,0 +1,84 @@
1
+ # @file-viewer/vite-plugin
2
+
3
+ Vite plugin for Flyfish File Viewer on-demand renderer assembly. It generates `virtual:file-viewer-renderers` from the formats your application declares, imports only the matching renderer packages, and provides renderer-oriented chunk planning plus offline worker/WASM asset copying. The extension mapping is verified against the full `@file-viewer/core` format matrix in repository gates, so new formats cannot silently drift away from automatic assembly.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ pnpm add @file-viewer/vue3 @file-viewer/vite-plugin @file-viewer/renderer-pdf
9
+ ```
10
+
11
+ Install additional renderer packages when you need more formats, such as `@file-viewer/renderer-word`, `@file-viewer/renderer-ofd`, `@file-viewer/renderer-presentation`, `@file-viewer/renderer-cad`, `@file-viewer/renderer-drawing`, `@file-viewer/renderer-3d`, `@file-viewer/renderer-data`, `@file-viewer/renderer-eda`, `@file-viewer/renderer-typst`, `@file-viewer/renderer-archive`, or `@file-viewer/renderer-text`.
12
+
13
+ When you want one package for a common product shape, install a preset:
14
+
15
+ ```bash
16
+ pnpm add @file-viewer/vue3 @file-viewer/vite-plugin @file-viewer/preset-office
17
+ ```
18
+
19
+ Available presets:
20
+
21
+ - `@file-viewer/preset-lite`: text, Markdown, code, image, audio, and video.
22
+ - `@file-viewer/preset-office`: PDF, Word, Excel, PowerPoint, OFD, RTF, and OpenDocument.
23
+ - `@file-viewer/preset-engineering`: CAD, 3D, drawing, XMind, Geo, Typst, Archive, Data, and EDA.
24
+ - `@file-viewer/preset-all`: the complete official demo format matrix.
25
+
26
+ ## vite.config.ts
27
+
28
+ ```ts
29
+ import { defineConfig } from 'vite'
30
+ import { fileViewerRenderers } from '@file-viewer/vite-plugin'
31
+
32
+ export default defineConfig({
33
+ plugins: [
34
+ fileViewerRenderers({
35
+ formats: ['pdf', 'dwg', 'typst', 'zip', 'xmind'],
36
+ scan: true,
37
+ copyAssets: true,
38
+ chunkStrategy: 'renderer'
39
+ })
40
+ ]
41
+ })
42
+ ```
43
+
44
+ Or use one preset package:
45
+
46
+ ```ts
47
+ fileViewerRenderers({
48
+ preset: 'office',
49
+ copyAssets: true
50
+ })
51
+ ```
52
+
53
+ `scan: true` inspects common source folders for lightweight hints and merges them with `formats`:
54
+
55
+ ```ts
56
+ export const fileViewerFormats = ['pdf', 'docx', 'xlsx']
57
+ ```
58
+
59
+ ```html
60
+ <input accept=".pdf,.docx" data-file-viewer-formats="dwg,xmind" />
61
+ ```
62
+
63
+ This is useful when upload accept lists, sample matrices, or attachment allow-lists already live in source code: dev and production builds can generate the renderer assembly module without a second hand-written import list.
64
+
65
+ ## Application Code
66
+
67
+ ```ts
68
+ import FileViewer from '@file-viewer/vue3'
69
+ import { configuredFileViewerRenderers } from 'virtual:file-viewer-renderers'
70
+
71
+ const options = {
72
+ rendererMode: 'replace',
73
+ renderers: configuredFileViewerRenderers
74
+ }
75
+ ```
76
+
77
+ ## Current Boundary
78
+
79
+ The plugin currently generates imports for extracted renderer packages: Word, Spreadsheet, PDF, OFD, Presentation, CAD, Draw.io/Excalidraw/Mermaid/PlantUML, 3D, Data, EDA, Typst, archives, email, EPUB, code/Markdown/Patch/Git Bundle, image, media, XMind, and Geo. Declare them explicitly with `formats`, or let `scan: true` discover source hints automatically; core-supported extensions such as `.zipx`, `.cbz`, `.tiff`, `.mjs`, `.gv`, `.patch`, `.bundle`, `.mermaid`, `.puml`, and `.mpeg` also resolve to their renderer packages. `preset: 'lite' | 'office' | 'engineering' | 'all'` imports the matching `@file-viewer/preset-*` package; when `formats` are also present, the plugin adds extra renderers outside the preset.
80
+
81
+ ## Documentation
82
+
83
+ - On-demand renderer architecture: <https://doc.file-viewer.app/guide/on-demand-renderers>
84
+ - Supported formats: <https://doc.file-viewer.app/guide/formats>
package/README.md ADDED
@@ -0,0 +1,84 @@
1
+ # @file-viewer/vite-plugin
2
+
3
+ Flyfish File Viewer 的 Vite 按需 renderer 自动装配插件。它根据业务声明的文件格式生成 `virtual:file-viewer-renderers`,只 import 命中的 renderer 包,并提供 chunk 分组和离线 worker/WASM 资源复制能力。插件的扩展名映射会在仓库门禁中对照 `@file-viewer/core` 的完整格式矩阵验证,避免新增格式后自动装配能力漂移。
4
+
5
+ ## 安装
6
+
7
+ ```bash
8
+ pnpm add @file-viewer/vue3 @file-viewer/vite-plugin @file-viewer/renderer-pdf
9
+ ```
10
+
11
+ 需要更多格式时安装对应 renderer 包,例如 `@file-viewer/renderer-word`、`@file-viewer/renderer-ofd`、`@file-viewer/renderer-presentation`、`@file-viewer/renderer-cad`、`@file-viewer/renderer-drawing`、`@file-viewer/renderer-3d`、`@file-viewer/renderer-data`、`@file-viewer/renderer-eda`、`@file-viewer/renderer-typst`、`@file-viewer/renderer-archive`、`@file-viewer/renderer-text`。
12
+
13
+ 如果你希望用一个包完成常见场景装配,可以安装 preset:
14
+
15
+ ```bash
16
+ pnpm add @file-viewer/vue3 @file-viewer/vite-plugin @file-viewer/preset-office
17
+ ```
18
+
19
+ 可选 preset:
20
+
21
+ - `@file-viewer/preset-lite`: 文本、Markdown、代码、图片、音频、视频。
22
+ - `@file-viewer/preset-office`: PDF、Word、Excel、PowerPoint、OFD、RTF、OpenDocument。
23
+ - `@file-viewer/preset-engineering`: CAD、3D、绘图、XMind、Geo、Typst、Archive、Data、EDA。
24
+ - `@file-viewer/preset-all`: 官方 demo 完整格式矩阵。
25
+
26
+ ## vite.config.ts
27
+
28
+ ```ts
29
+ import { defineConfig } from 'vite'
30
+ import { fileViewerRenderers } from '@file-viewer/vite-plugin'
31
+
32
+ export default defineConfig({
33
+ plugins: [
34
+ fileViewerRenderers({
35
+ formats: ['pdf', 'dwg', 'typst', 'zip', 'xmind'],
36
+ scan: true,
37
+ copyAssets: true,
38
+ chunkStrategy: 'renderer'
39
+ })
40
+ ]
41
+ })
42
+ ```
43
+
44
+ 或者使用 preset 一包装配:
45
+
46
+ ```ts
47
+ fileViewerRenderers({
48
+ preset: 'office',
49
+ copyAssets: true
50
+ })
51
+ ```
52
+
53
+ `scan: true` 会扫描常见源码目录里的轻量 hint,并把它们合并到 `formats`:
54
+
55
+ ```ts
56
+ export const fileViewerFormats = ['pdf', 'docx', 'xlsx']
57
+ ```
58
+
59
+ ```html
60
+ <input accept=".pdf,.docx" data-file-viewer-formats="dwg,xmind" />
61
+ ```
62
+
63
+ 这适合业务把上传入口、示例矩阵或附件白名单维护在源码中时使用:开发和构建阶段插件会自动生成 renderer 装配模块,少写一份手工 import 清单。
64
+
65
+ ## 业务代码
66
+
67
+ ```ts
68
+ import FileViewer from '@file-viewer/vue3'
69
+ import { configuredFileViewerRenderers } from 'virtual:file-viewer-renderers'
70
+
71
+ const options = {
72
+ rendererMode: 'replace',
73
+ renderers: configuredFileViewerRenderers
74
+ }
75
+ ```
76
+
77
+ ## 当前边界
78
+
79
+ 当前插件会为已经拆出的 renderer 包生成导入:Word、Spreadsheet、PDF、OFD、Presentation、CAD、Draw.io/Excalidraw/Mermaid/PlantUML、3D、Data、EDA、Typst、压缩包、邮件、EPUB、代码/Markdown/Patch/Git Bundle、图片、媒体、XMind 和 Geo。可以通过 `formats` 显式声明,也可以通过 `scan: true` 从源码 hint 自动发现;`.zipx`、`.cbz`、`.tiff`、`.mjs`、`.gv`、`.patch`、`.bundle`、`.mermaid`、`.puml`、`.mpeg` 等 core 支持的扩展也会映射到对应 renderer。`preset: 'lite' | 'office' | 'engineering' | 'all'` 会导入对应 `@file-viewer/preset-*` 包;如果同时声明 `formats`,插件会在 preset 之外补充额外 renderer。
80
+
81
+ ## 文档
82
+
83
+ - 按需渲染架构: <https://doc.file-viewer.app/guide/on-demand-renderers>
84
+ - 支持格式: <https://doc.file-viewer.app/guide/formats>
package/client.d.ts ADDED
@@ -0,0 +1,21 @@
1
+ declare module 'virtual:file-viewer-renderers' {
2
+ import type {
3
+ FileRenderHandler,
4
+ FileViewerRenderedInstance,
5
+ FileViewerRendererPluginInput,
6
+ } from '@file-viewer/core';
7
+
8
+ type BrowserRendererHandler = FileRenderHandler<FileViewerRenderedInstance, HTMLDivElement>;
9
+
10
+ export interface ConfiguredFileViewerRendererPlan {
11
+ preset: string | null;
12
+ formats: string[];
13
+ rendererIds: string[];
14
+ packages: string[];
15
+ generatedBy: '@file-viewer/vite-plugin';
16
+ }
17
+
18
+ export const configuredFileViewerRenderers: FileViewerRendererPluginInput<BrowserRendererHandler>;
19
+ export const fileViewerRendererPlan: ConfiguredFileViewerRendererPlan;
20
+ export default configuredFileViewerRenderers;
21
+ }
@@ -0,0 +1,100 @@
1
+ import type { Plugin } from 'vite';
2
+ export type FileViewerVitePreset = 'all' | 'lite' | 'office' | 'engineering';
3
+ export type FileViewerMissingRendererMode = 'error' | 'warn' | 'ignore';
4
+ export type FileViewerChunkStrategy = 'renderer' | 'none';
5
+ export interface FileViewerRendererScanOptions {
6
+ /**
7
+ * Disable a shared scan object without branching user config.
8
+ */
9
+ enabled?: boolean;
10
+ /**
11
+ * Source roots, relative to Vite root, that should be inspected for format hints.
12
+ * Defaults to common application source folders.
13
+ */
14
+ roots?: readonly string[];
15
+ /**
16
+ * Text-like source extensions to inspect. Values may include or omit the dot.
17
+ */
18
+ extensions?: readonly string[];
19
+ /**
20
+ * Large generated files are ignored by default to keep config/startup fast.
21
+ */
22
+ maxFileSize?: number;
23
+ }
24
+ export interface FileViewerCopyAssetsOptions {
25
+ /**
26
+ * Directory used by Vite dev. Defaults to config.publicDir.
27
+ */
28
+ publicDir?: string;
29
+ /**
30
+ * Directory used after production build. Defaults to build.outDir.
31
+ */
32
+ outDir?: string;
33
+ /**
34
+ * Copy during dev server startup, build closeBundle, or both.
35
+ */
36
+ mode?: 'dev' | 'build' | 'both';
37
+ }
38
+ export interface FileViewerRenderersPluginOptions {
39
+ /**
40
+ * File extensions or renderer ids. Examples: pdf, .dwg, typst, zip, xmind.
41
+ */
42
+ formats?: readonly string[];
43
+ /**
44
+ * Explicit renderer ids. Useful when several extensions share one renderer.
45
+ */
46
+ renderers?: readonly string[];
47
+ /**
48
+ * Presets import their dedicated @file-viewer/preset-* package. Add
49
+ * `formats` / `renderers` when you need to extend a preset with extra lines.
50
+ */
51
+ preset?: FileViewerVitePreset;
52
+ /**
53
+ * Virtual module id consumed by application code.
54
+ */
55
+ moduleId?: string;
56
+ /**
57
+ * Controls how planned-but-not-yet-extracted renderer lines are reported.
58
+ */
59
+ missingRenderer?: FileViewerMissingRendererMode;
60
+ /**
61
+ * Adds renderer-oriented manualChunks when the user did not define one.
62
+ */
63
+ chunkStrategy?: FileViewerChunkStrategy;
64
+ /**
65
+ * Copies known worker/WASM/vendor assets for selected renderer lines.
66
+ */
67
+ copyAssets?: boolean | FileViewerCopyAssetsOptions;
68
+ /**
69
+ * Opt-in source scan. The plugin reads lightweight hints such as
70
+ * `fileViewerFormats = ['pdf', 'docx']`, `data-file-viewer-formats="pdf,docx"`,
71
+ * and upload `accept=".pdf,.docx"` declarations, then merges them with
72
+ * `formats` / `renderers` before generating the virtual module.
73
+ */
74
+ scan?: boolean | FileViewerRendererScanOptions;
75
+ }
76
+ interface MissingRendererNotice {
77
+ format: string;
78
+ targetPackage?: string;
79
+ note: string;
80
+ }
81
+ export declare function extractFileViewerRendererHintTokens(source: string): string[];
82
+ export declare function collectFileViewerRendererScanTokens(projectRoot: string, scan: FileViewerRenderersPluginOptions['scan']): string[];
83
+ export declare function fileViewerRenderers(options?: FileViewerRenderersPluginOptions): Plugin;
84
+ export declare function createFileViewerManualChunks(options?: FileViewerRenderersPluginOptions): (id: string) => string | undefined;
85
+ export declare function resolveFileViewerRendererSelection(options?: FileViewerRenderersPluginOptions, projectRoot?: string): {
86
+ preset: FileViewerVitePreset | null;
87
+ presetPackage: string | null;
88
+ formats: string[];
89
+ packages: string[];
90
+ rendererIds: string[];
91
+ renderers: {
92
+ id: string;
93
+ packageName: string;
94
+ formats: string[];
95
+ rendererIds: string[];
96
+ chunkName: string;
97
+ }[];
98
+ missing: MissingRendererNotice[];
99
+ };
100
+ export default fileViewerRenderers;