omni-viewer-core 0.1.0
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 +21 -0
- package/README.md +80 -0
- package/THIRD_PARTY_NOTICES.md +49 -0
- package/dist/assets/audio-engine/audio_engine.mjs +2 -0
- package/dist/assets/audio-engine/audio_engine.wasm +0 -0
- package/dist/assets/pdfjs/pdf.worker.min.mjs +21 -0
- package/dist/host/index.d.ts +133 -0
- package/dist/host/index.js +10 -0
- package/dist/i18n/catalog.en.d.ts +1 -0
- package/dist/i18n/catalog.en.js +411 -0
- package/dist/i18n/catalog.ko.d.ts +1 -0
- package/dist/i18n/catalog.ko.js +68 -0
- package/dist/i18n/index.d.ts +18 -0
- package/dist/i18n/index.js +41 -0
- package/dist/licenses/emscripten.txt +101 -0
- package/dist/licenses/kissfft.txt +28 -0
- package/dist/licenses/pdfjs-dist.txt +177 -0
- package/dist/parsers/a2l/index.d.ts +1 -0
- package/dist/parsers/a2l/index.js +1 -0
- package/dist/parsers/archive/index.d.ts +22 -0
- package/dist/parsers/archive/index.js +46 -0
- package/dist/parsers/archive/model.d.ts +29 -0
- package/dist/parsers/archive/model.js +1 -0
- package/dist/parsers/archive/worker.d.ts +21 -0
- package/dist/parsers/archive/worker.js +1 -0
- package/dist/parsers/arxml/index.d.ts +1 -0
- package/dist/parsers/arxml/index.js +1 -0
- package/dist/parsers/asc/index.d.ts +1 -0
- package/dist/parsers/asc/index.js +1 -0
- package/dist/parsers/audio/index.d.ts +9 -0
- package/dist/parsers/audio/index.js +46 -0
- package/dist/parsers/automotive/index.d.ts +33 -0
- package/dist/parsers/automotive/index.js +973 -0
- package/dist/parsers/blf/index.d.ts +1 -0
- package/dist/parsers/blf/index.js +1 -0
- package/dist/parsers/csv/delimiter.d.ts +31 -0
- package/dist/parsers/csv/delimiter.js +151 -0
- package/dist/parsers/csv/index.d.ts +30 -0
- package/dist/parsers/csv/index.js +108 -0
- package/dist/parsers/csv/parseText.d.ts +20 -0
- package/dist/parsers/csv/parseText.js +108 -0
- package/dist/parsers/csv/sort.d.ts +26 -0
- package/dist/parsers/csv/sort.js +224 -0
- package/dist/parsers/csv/statistics.d.ts +49 -0
- package/dist/parsers/csv/statistics.js +150 -0
- package/dist/parsers/dbc/index.d.ts +56 -0
- package/dist/parsers/dbc/index.js +94 -0
- package/dist/parsers/doc-binary/index.d.ts +35 -0
- package/dist/parsers/doc-binary/index.js +267 -0
- package/dist/parsers/doc-binary/vscode-parser.d.ts +142 -0
- package/dist/parsers/doc-binary/vscode-parser.js +3747 -0
- package/dist/parsers/excel/index.d.ts +17 -0
- package/dist/parsers/excel/index.js +406 -0
- package/dist/parsers/excel/model.d.ts +80 -0
- package/dist/parsers/excel/model.js +48 -0
- package/dist/parsers/excel/serialize.d.ts +3 -0
- package/dist/parsers/excel/serialize.js +78 -0
- package/dist/parsers/hdf5/index.d.ts +75 -0
- package/dist/parsers/hdf5/index.js +658 -0
- package/dist/parsers/hdf5/node.d.ts +21 -0
- package/dist/parsers/hdf5/node.js +95 -0
- package/dist/parsers/json/index.d.ts +15 -0
- package/dist/parsers/json/index.js +102 -0
- package/dist/parsers/json/model.d.ts +42 -0
- package/dist/parsers/json/model.js +140 -0
- package/dist/parsers/json/parse.d.ts +22 -0
- package/dist/parsers/json/parse.js +279 -0
- package/dist/parsers/json/tokenizer.d.ts +17 -0
- package/dist/parsers/json/tokenizer.js +175 -0
- package/dist/parsers/jsonl/index.d.ts +14 -0
- package/dist/parsers/jsonl/index.js +18 -0
- package/dist/parsers/jsonl/model.d.ts +23 -0
- package/dist/parsers/jsonl/model.js +1 -0
- package/dist/parsers/jsonl/parse.d.ts +7 -0
- package/dist/parsers/jsonl/parse.js +34 -0
- package/dist/parsers/markdown/index.d.ts +37 -0
- package/dist/parsers/markdown/index.js +59 -0
- package/dist/parsers/mat/index.d.ts +31 -0
- package/dist/parsers/mat/index.js +426 -0
- package/dist/parsers/mermaid/index.d.ts +5 -0
- package/dist/parsers/mermaid/index.js +3 -0
- package/dist/parsers/mf4/index.d.ts +1 -0
- package/dist/parsers/mf4/index.js +1 -0
- package/dist/parsers/parquet/index.d.ts +21 -0
- package/dist/parsers/parquet/index.js +68 -0
- package/dist/parsers/pcap/index.d.ts +1 -0
- package/dist/parsers/pcap/index.js +1 -0
- package/dist/parsers/pcapng/index.d.ts +1 -0
- package/dist/parsers/pcapng/index.js +1 -0
- package/dist/parsers/plantuml/index.d.ts +5 -0
- package/dist/parsers/plantuml/index.js +4 -0
- package/dist/parsers/ppt-binary/index.d.ts +5 -0
- package/dist/parsers/ppt-binary/index.js +62 -0
- package/dist/parsers/ppt-binary/pptBinaryBuildContext.d.ts +12 -0
- package/dist/parsers/ppt-binary/pptBinaryBuildContext.js +40 -0
- package/dist/parsers/ppt-binary/pptBinaryContainer.d.ts +4 -0
- package/dist/parsers/ppt-binary/pptBinaryContainer.js +174 -0
- package/dist/parsers/ppt-binary/pptBinaryTypes.d.ts +125 -0
- package/dist/parsers/ppt-binary/pptBinaryTypes.js +1 -0
- package/dist/parsers/ppt-binary/pptSlideLayouts.d.ts +9 -0
- package/dist/parsers/ppt-binary/pptSlideLayouts.js +510 -0
- package/dist/parsers/ppt-binary/vscode-parser.d.ts +116 -0
- package/dist/parsers/ppt-binary/vscode-parser.js +2853 -0
- package/dist/parsers/ppt-binary/vscode.d.ts +4 -0
- package/dist/parsers/ppt-binary/vscode.js +12 -0
- package/dist/parsers/pptx/index.d.ts +15 -0
- package/dist/parsers/pptx/index.js +88 -0
- package/dist/parsers/pptx/vscode-parser.d.ts +167 -0
- package/dist/parsers/pptx/vscode-parser.js +1503 -0
- package/dist/parsers/pptx/vscode.d.ts +4 -0
- package/dist/parsers/pptx/vscode.js +18 -0
- package/dist/parsers/pptx/zip-reader.d.ts +3 -0
- package/dist/parsers/pptx/zip-reader.js +20 -0
- package/dist/parsers/proto/index.d.ts +90 -0
- package/dist/parsers/proto/index.js +197 -0
- package/dist/parsers/psd/index.d.ts +16 -0
- package/dist/parsers/psd/index.js +10 -0
- package/dist/parsers/shapefile/dbf.d.ts +23 -0
- package/dist/parsers/shapefile/dbf.js +112 -0
- package/dist/parsers/shapefile/index.d.ts +44 -0
- package/dist/parsers/shapefile/index.js +119 -0
- package/dist/parsers/shapefile/reproject.d.ts +10 -0
- package/dist/parsers/shapefile/reproject.js +41 -0
- package/dist/parsers/slide-model.d.ts +106 -0
- package/dist/parsers/slide-model.js +1 -0
- package/dist/parsers/toml/index.d.ts +15 -0
- package/dist/parsers/toml/index.js +18 -0
- package/dist/parsers/toml/model.d.ts +15 -0
- package/dist/parsers/toml/model.js +1 -0
- package/dist/parsers/toml/parse.d.ts +16 -0
- package/dist/parsers/toml/parse.js +266 -0
- package/dist/parsers/types.d.ts +103 -0
- package/dist/parsers/types.js +106 -0
- package/dist/parsers/video/index.d.ts +6 -0
- package/dist/parsers/video/index.js +2 -0
- package/dist/parsers/yaml/index.d.ts +16 -0
- package/dist/parsers/yaml/index.js +58 -0
- package/dist/parsers/yaml/model.d.ts +22 -0
- package/dist/parsers/yaml/model.js +1 -0
- package/dist/parsers/yaml/self-loading.d.ts +3 -0
- package/dist/parsers/yaml/self-loading.js +19 -0
- package/dist/parsers/zip-scan.d.ts +8 -0
- package/dist/parsers/zip-scan.js +80 -0
- package/dist/registry/container.d.ts +17 -0
- package/dist/registry/container.js +49 -0
- package/dist/registry/index.d.ts +133 -0
- package/dist/registry/index.js +348 -0
- package/dist/registry/probe.d.ts +3 -0
- package/dist/registry/probe.js +177 -0
- package/dist/registry/sniff.d.ts +17 -0
- package/dist/registry/sniff.js +57 -0
- package/dist/styles/archive.css +10 -0
- package/dist/styles/audio.css +66 -0
- package/dist/styles/automotive.css +1 -0
- package/dist/styles/csv.css +262 -0
- package/dist/styles/excel.css +212 -0
- package/dist/styles/fallback.css +48 -0
- package/dist/styles/hdf5.css +3 -0
- package/dist/styles/hwp.css +12 -0
- package/dist/styles/image.css +115 -0
- package/dist/styles/json.css +342 -0
- package/dist/styles/jsonl.css +1 -0
- package/dist/styles/markdown.css +10 -0
- package/dist/styles/mat.css +2 -0
- package/dist/styles/mermaid.css +1 -0
- package/dist/styles/parquet.css +2 -0
- package/dist/styles/pdf.css +551 -0
- package/dist/styles/plantuml.css +1 -0
- package/dist/styles/ppt.css +1 -0
- package/dist/styles/proto.css +2 -0
- package/dist/styles/psd.css +1 -0
- package/dist/styles/shapefile.css +25 -0
- package/dist/styles/toml.css +1 -0
- package/dist/styles/video.css +74 -0
- package/dist/styles/word.css +685 -0
- package/dist/styles/yaml.css +1 -0
- package/dist/viewers/a2l/index.d.ts +15 -0
- package/dist/viewers/a2l/index.js +5 -0
- package/dist/viewers/archive/archive-preview-decoder.d.ts +4 -0
- package/dist/viewers/archive/archive-preview-decoder.js +223 -0
- package/dist/viewers/archive/controller.d.ts +24 -0
- package/dist/viewers/archive/controller.js +18 -0
- package/dist/viewers/archive/index.d.ts +25 -0
- package/dist/viewers/archive/index.js +230 -0
- package/dist/viewers/archive/preview.d.ts +2 -0
- package/dist/viewers/archive/preview.js +2 -0
- package/dist/viewers/archive/styles.d.ts +1 -0
- package/dist/viewers/archive/styles.js +11 -0
- package/dist/viewers/arxml/index.d.ts +15 -0
- package/dist/viewers/arxml/index.js +5 -0
- package/dist/viewers/asc/index.d.ts +15 -0
- package/dist/viewers/asc/index.js +5 -0
- package/dist/viewers/audio/controller.d.ts +33 -0
- package/dist/viewers/audio/controller.js +49 -0
- package/dist/viewers/audio/engine.d.ts +44 -0
- package/dist/viewers/audio/engine.js +108 -0
- package/dist/viewers/audio/index.d.ts +92 -0
- package/dist/viewers/audio/index.js +448 -0
- package/dist/viewers/audio/self-loading.d.ts +7 -0
- package/dist/viewers/audio/self-loading.js +42 -0
- package/dist/viewers/audio/styles.d.ts +1 -0
- package/dist/viewers/audio/styles.js +73 -0
- package/dist/viewers/automotive/index.d.ts +8 -0
- package/dist/viewers/automotive/index.js +152 -0
- package/dist/viewers/automotive/styles.d.ts +1 -0
- package/dist/viewers/automotive/styles.js +1 -0
- package/dist/viewers/avro/index.d.ts +15 -0
- package/dist/viewers/avro/index.js +5 -0
- package/dist/viewers/bag/index.d.ts +15 -0
- package/dist/viewers/bag/index.js +5 -0
- package/dist/viewers/blf/index.d.ts +15 -0
- package/dist/viewers/blf/index.js +5 -0
- package/dist/viewers/csv/controller.d.ts +126 -0
- package/dist/viewers/csv/controller.js +598 -0
- package/dist/viewers/csv/index.d.ts +48 -0
- package/dist/viewers/csv/index.js +846 -0
- package/dist/viewers/csv/styles.d.ts +1 -0
- package/dist/viewers/csv/styles.js +267 -0
- package/dist/viewers/db3/index.d.ts +15 -0
- package/dist/viewers/db3/index.js +5 -0
- package/dist/viewers/dbc/index.d.ts +15 -0
- package/dist/viewers/dbc/index.js +5 -0
- package/dist/viewers/diagram.d.ts +14 -0
- package/dist/viewers/diagram.js +95 -0
- package/dist/viewers/excel/controller.d.ts +108 -0
- package/dist/viewers/excel/controller.js +548 -0
- package/dist/viewers/excel/grid.d.ts +28 -0
- package/dist/viewers/excel/grid.js +99 -0
- package/dist/viewers/excel/index.d.ts +37 -0
- package/dist/viewers/excel/index.js +620 -0
- package/dist/viewers/excel/self-loading.d.ts +6 -0
- package/dist/viewers/excel/self-loading.js +13 -0
- package/dist/viewers/excel/styles.d.ts +1 -0
- package/dist/viewers/excel/styles.js +216 -0
- package/dist/viewers/fallback/index.d.ts +17 -0
- package/dist/viewers/fallback/index.js +130 -0
- package/dist/viewers/fallback/styles.d.ts +1 -0
- package/dist/viewers/fallback/styles.js +49 -0
- package/dist/viewers/hdf5/index.d.ts +19 -0
- package/dist/viewers/hdf5/index.js +170 -0
- package/dist/viewers/hdf5/styles.d.ts +1 -0
- package/dist/viewers/hdf5/styles.js +4 -0
- package/dist/viewers/hwp/controller.d.ts +19 -0
- package/dist/viewers/hwp/controller.js +22 -0
- package/dist/viewers/hwp/index.d.ts +39 -0
- package/dist/viewers/hwp/index.js +271 -0
- package/dist/viewers/hwp/self-loading.d.ts +2 -0
- package/dist/viewers/hwp/self-loading.js +6 -0
- package/dist/viewers/hwp/styles.d.ts +1 -0
- package/dist/viewers/hwp/styles.js +13 -0
- package/dist/viewers/image/controller.d.ts +210 -0
- package/dist/viewers/image/controller.js +336 -0
- package/dist/viewers/image/decode.d.ts +54 -0
- package/dist/viewers/image/decode.js +150 -0
- package/dist/viewers/image/index.d.ts +38 -0
- package/dist/viewers/image/index.js +749 -0
- package/dist/viewers/image/limits.d.ts +18 -0
- package/dist/viewers/image/limits.js +20 -0
- package/dist/viewers/image/styles.d.ts +1 -0
- package/dist/viewers/image/styles.js +119 -0
- package/dist/viewers/json/controller.d.ts +89 -0
- package/dist/viewers/json/controller.js +411 -0
- package/dist/viewers/json/index.d.ts +25 -0
- package/dist/viewers/json/index.js +503 -0
- package/dist/viewers/json/styles.d.ts +1 -0
- package/dist/viewers/json/styles.js +346 -0
- package/dist/viewers/json/transforms.d.ts +27 -0
- package/dist/viewers/json/transforms.js +253 -0
- package/dist/viewers/jsonl/controller.d.ts +48 -0
- package/dist/viewers/jsonl/controller.js +136 -0
- package/dist/viewers/jsonl/index.d.ts +22 -0
- package/dist/viewers/jsonl/index.js +184 -0
- package/dist/viewers/jsonl/styles.d.ts +1 -0
- package/dist/viewers/jsonl/styles.js +1 -0
- package/dist/viewers/markdown/controller.d.ts +50 -0
- package/dist/viewers/markdown/controller.js +62 -0
- package/dist/viewers/markdown/index.d.ts +64 -0
- package/dist/viewers/markdown/index.js +425 -0
- package/dist/viewers/markdown/math.d.ts +21 -0
- package/dist/viewers/markdown/math.js +100 -0
- package/dist/viewers/markdown/self-loading.d.ts +5 -0
- package/dist/viewers/markdown/self-loading.js +48 -0
- package/dist/viewers/markdown/styles.d.ts +1 -0
- package/dist/viewers/markdown/styles.js +11 -0
- package/dist/viewers/mat/index.d.ts +19 -0
- package/dist/viewers/mat/index.js +113 -0
- package/dist/viewers/mat/styles.d.ts +1 -0
- package/dist/viewers/mat/styles.js +3 -0
- package/dist/viewers/media.d.ts +9 -0
- package/dist/viewers/media.js +77 -0
- package/dist/viewers/mermaid/index.d.ts +17 -0
- package/dist/viewers/mermaid/index.js +6 -0
- package/dist/viewers/mermaid/self-loading.d.ts +2 -0
- package/dist/viewers/mermaid/self-loading.js +2 -0
- package/dist/viewers/mf4/index.d.ts +15 -0
- package/dist/viewers/mf4/index.js +5 -0
- package/dist/viewers/parquet/controller.d.ts +37 -0
- package/dist/viewers/parquet/controller.js +26 -0
- package/dist/viewers/parquet/index.d.ts +23 -0
- package/dist/viewers/parquet/index.js +134 -0
- package/dist/viewers/parquet/styles.d.ts +1 -0
- package/dist/viewers/parquet/styles.js +3 -0
- package/dist/viewers/pcap/index.d.ts +15 -0
- package/dist/viewers/pcap/index.js +5 -0
- package/dist/viewers/pcapng/index.d.ts +15 -0
- package/dist/viewers/pcapng/index.js +5 -0
- package/dist/viewers/pdf/controller.d.ts +120 -0
- package/dist/viewers/pdf/controller.js +191 -0
- package/dist/viewers/pdf/editing.d.ts +26 -0
- package/dist/viewers/pdf/editing.js +265 -0
- package/dist/viewers/pdf/index.d.ts +88 -0
- package/dist/viewers/pdf/index.js +1400 -0
- package/dist/viewers/pdf/self-loading.d.ts +6 -0
- package/dist/viewers/pdf/self-loading.js +14 -0
- package/dist/viewers/pdf/styles.d.ts +1 -0
- package/dist/viewers/pdf/styles.js +555 -0
- package/dist/viewers/plantuml/index.d.ts +17 -0
- package/dist/viewers/plantuml/index.js +6 -0
- package/dist/viewers/plantuml/self-loading.d.ts +2 -0
- package/dist/viewers/plantuml/self-loading.js +2 -0
- package/dist/viewers/ppt/chart.d.ts +8 -0
- package/dist/viewers/ppt/chart.js +83 -0
- package/dist/viewers/ppt/controller.d.ts +34 -0
- package/dist/viewers/ppt/controller.js +27 -0
- package/dist/viewers/ppt/index.d.ts +33 -0
- package/dist/viewers/ppt/index.js +101 -0
- package/dist/viewers/ppt/render.d.ts +5 -0
- package/dist/viewers/ppt/render.js +144 -0
- package/dist/viewers/ppt/self-loading.d.ts +9 -0
- package/dist/viewers/ppt/self-loading.js +4 -0
- package/dist/viewers/ppt/styles.d.ts +1 -0
- package/dist/viewers/ppt/styles.js +1 -0
- package/dist/viewers/proto/index.d.ts +17 -0
- package/dist/viewers/proto/index.js +170 -0
- package/dist/viewers/proto/styles.d.ts +1 -0
- package/dist/viewers/proto/styles.js +2 -0
- package/dist/viewers/psd/index.d.ts +27 -0
- package/dist/viewers/psd/index.js +39 -0
- package/dist/viewers/psd/self-loading.d.ts +10 -0
- package/dist/viewers/psd/self-loading.js +20 -0
- package/dist/viewers/psd/styles.d.ts +1 -0
- package/dist/viewers/psd/styles.js +1 -0
- package/dist/viewers/reqif/index.d.ts +15 -0
- package/dist/viewers/reqif/index.js +5 -0
- package/dist/viewers/shapefile/index.d.ts +35 -0
- package/dist/viewers/shapefile/index.js +336 -0
- package/dist/viewers/shapefile/self-loading.d.ts +7 -0
- package/dist/viewers/shapefile/self-loading.js +32 -0
- package/dist/viewers/shapefile/styles.d.ts +1 -0
- package/dist/viewers/shapefile/styles.js +28 -0
- package/dist/viewers/stp/index.d.ts +15 -0
- package/dist/viewers/stp/index.js +5 -0
- package/dist/viewers/structured-styles.d.ts +1 -0
- package/dist/viewers/structured-styles.js +1 -0
- package/dist/viewers/structured.d.ts +36 -0
- package/dist/viewers/structured.js +138 -0
- package/dist/viewers/toml/controller.d.ts +38 -0
- package/dist/viewers/toml/controller.js +61 -0
- package/dist/viewers/toml/index.d.ts +18 -0
- package/dist/viewers/toml/index.js +34 -0
- package/dist/viewers/types.d.ts +36 -0
- package/dist/viewers/types.js +9 -0
- package/dist/viewers/video/controller.d.ts +29 -0
- package/dist/viewers/video/controller.js +54 -0
- package/dist/viewers/video/index.d.ts +18 -0
- package/dist/viewers/video/index.js +305 -0
- package/dist/viewers/video/styles.d.ts +1 -0
- package/dist/viewers/video/styles.js +79 -0
- package/dist/viewers/word/controller.d.ts +19 -0
- package/dist/viewers/word/controller.js +22 -0
- package/dist/viewers/word/docx-preprocess.d.ts +63 -0
- package/dist/viewers/word/docx-preprocess.js +136 -0
- package/dist/viewers/word/index.d.ts +32 -0
- package/dist/viewers/word/index.js +187 -0
- package/dist/viewers/word/normalize-docx.d.ts +2 -0
- package/dist/viewers/word/normalize-docx.js +50 -0
- package/dist/viewers/word/paginate.d.ts +1 -0
- package/dist/viewers/word/paginate.js +1035 -0
- package/dist/viewers/word/self-loading.d.ts +2 -0
- package/dist/viewers/word/self-loading.js +7 -0
- package/dist/viewers/word/styles.d.ts +1 -0
- package/dist/viewers/word/styles.js +686 -0
- package/dist/viewers/yaml/controller.d.ts +42 -0
- package/dist/viewers/yaml/controller.js +41 -0
- package/dist/viewers/yaml/index.d.ts +21 -0
- package/dist/viewers/yaml/index.js +20 -0
- package/package.json +375 -0
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { SlideDeck } from '../slide-model.js';
|
|
2
|
+
import type { ParseOptions, ParseOutcome } from '../types.js';
|
|
3
|
+
/** Full VS Code legacy PowerPoint parser adapted from a file path to bytes. */
|
|
4
|
+
export declare function parsePptBinaryVscode(input: Uint8Array, options?: ParseOptions): Promise<ParseOutcome<SlideDeck>>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { PptBinaryParser } from './vscode-parser.js';
|
|
2
|
+
/** Full VS Code legacy PowerPoint parser adapted from a file path to bytes. */
|
|
3
|
+
export async function parsePptBinaryVscode(input, options = {}) { const started = Date.now(), diagnostics = []; if (options.signal?.aborted)
|
|
4
|
+
return { result: { status: 'failed', failure: { code: 'aborted', retryable: true, messageKey: 'diag.aborted' }, diagnostics }, execution: { workerUsed: false, hardLimitEnforced: false, elapsedMillis: 0 } }; if (input.byteLength > (options.limits?.maxInputBytes ?? 50 * 1024 * 1024))
|
|
5
|
+
return { result: { status: 'failed', failure: { code: 'limit-exceeded', retryable: false, messageKey: 'diag.limit-exceeded.input' }, diagnostics }, execution: { workerUsed: false, hardLimitEnforced: false, elapsedMillis: Date.now() - started } }; try {
|
|
6
|
+
const parsed = await PptBinaryParser.parse(input);
|
|
7
|
+
const slides = parsed.slides;
|
|
8
|
+
return { result: { status: 'ok', document: { slides, totalSlides: parsed.totalSlides, ...(slides[0] ? { slideSize: { widthPx: slides[0].widthPx, heightPx: slides[0].heightPx } } : {}) }, diagnostics }, execution: { workerUsed: false, hardLimitEnforced: false, elapsedMillis: Date.now() - started } };
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
return { result: { status: 'failed', failure: { code: 'invalid-format', retryable: false, messageKey: 'diag.ppt.invalid-format' }, diagnostics }, execution: { workerUsed: false, hardLimitEnforced: false, elapsedMillis: Date.now() - started } };
|
|
12
|
+
} }
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type ParseOptions, type ParseOutcome } from '../types.js';
|
|
2
|
+
import type { SlideDeck } from '../slide-model.js';
|
|
3
|
+
export * from '../slide-model.js';
|
|
4
|
+
export interface PptxZipReader {
|
|
5
|
+
list(): Promise<readonly string[]>;
|
|
6
|
+
text(path: string): Promise<string | undefined>;
|
|
7
|
+
bytes(path: string): Promise<Uint8Array | undefined>;
|
|
8
|
+
close?(): void | Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
export interface PptxParserDeps {
|
|
11
|
+
openZip(data: Uint8Array, options?: ParseOptions): Promise<PptxZipReader>;
|
|
12
|
+
}
|
|
13
|
+
export { openPptxZip } from './zip-reader.js';
|
|
14
|
+
export { parsePptxVscode } from './vscode.js';
|
|
15
|
+
export declare function parsePptx(input: Uint8Array, deps: PptxParserDeps, options?: ParseOptions): Promise<ParseOutcome<SlideDeck>>;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// @ts-nocheck -- OOXML's sparse optional attributes are normalized at the public boundary.
|
|
2
|
+
import { DEFAULT_LIMITS, LimitTracker } from '../types.js';
|
|
3
|
+
export * from '../slide-model.js';
|
|
4
|
+
export { openPptxZip } from './zip-reader.js';
|
|
5
|
+
export { parsePptxVscode } from './vscode.js';
|
|
6
|
+
const EMU_PER_PX = 9525;
|
|
7
|
+
const DEFAULT_SIZE = { widthPx: 1280, heightPx: 720 };
|
|
8
|
+
const attr = (tag, name) => new RegExp(`(?:^|\\s)${name}="([^"]*)"`).exec(tag)?.[1];
|
|
9
|
+
const xmlText = (value) => value.replace(/<a:br\s*\/?\s*>/g, '\n').replace(/<[^>]+>/g, '').replace(/</g, '<').replace(/>/g, '>').replace(/&/g, '&').replace(/"/g, '"').replace(/'/g, "'");
|
|
10
|
+
function relationships(xml, part) { const out = new Map(); const dir = part.slice(0, part.lastIndexOf('/')); for (const tag of xml.match(/<Relationship\b[^>]*>/g) ?? []) {
|
|
11
|
+
const id = attr(tag, 'Id'), target = attr(tag, 'Target');
|
|
12
|
+
if (!id || !target || target.startsWith('http:') || target.startsWith('https:'))
|
|
13
|
+
continue;
|
|
14
|
+
const pieces = `${dir}/${target}`.split('/');
|
|
15
|
+
const resolved = [];
|
|
16
|
+
for (const p of pieces) {
|
|
17
|
+
if (p === '..')
|
|
18
|
+
resolved.pop();
|
|
19
|
+
else if (p !== '.' && p)
|
|
20
|
+
resolved.push(p);
|
|
21
|
+
}
|
|
22
|
+
out.set(id, resolved.join('/'));
|
|
23
|
+
} return out; }
|
|
24
|
+
function transform(block) { const xfrm = /<a:xfrm\b[^>]*>([\s\S]*?)<\/a:xfrm>/.exec(block)?.[0] ?? ''; const off = /<a:off\b[^>]*>/.exec(xfrm)?.[0] ?? ''; const ext = /<a:ext\b[^>]*>/.exec(xfrm)?.[0] ?? ''; return { x: Number(attr(off, 'x') ?? 0) / EMU_PER_PX, y: Number(attr(off, 'y') ?? 0) / EMU_PER_PX, width: Number(attr(ext, 'cx') ?? 0) / EMU_PER_PX, height: Number(attr(ext, 'cy') ?? 0) / EMU_PER_PX, rotateDeg: Number(attr(/<a:xfrm\b[^>]*>/.exec(xfrm)?.[0] ?? '', 'rot') ?? 0) / 60000 }; }
|
|
25
|
+
function color(block, fallback) { const value = /<a:srgbClr\b[^>]*val="([0-9A-Fa-f]{6})"/.exec(block)?.[1]; return value ? `#${value.toLowerCase()}` : fallback; }
|
|
26
|
+
function paragraphs(block) { return (block.match(/<a:p\b[\s\S]*?<\/a:p>/g) ?? []).map(p => { const runs = (p.match(/<a:r\b[\s\S]*?<\/a:r>/g) ?? []).map(r => { const text = xmlText(/<a:t\b[^>]*>([\s\S]*?)<\/a:t>/.exec(r)?.[1] ?? ''); const rpr = /<a:rPr\b[^>]*>/.exec(r)?.[0] ?? ''; return { text, ...(attr(rpr, 'sz') ? { fontSizePx: Number(attr(rpr, 'sz')) / 75 } : {}), ...(attr(rpr, 'b') === '1' ? { bold: true } : {}), ...(attr(rpr, 'i') === '1' ? { italic: true } : {}), ...(color(r) ? { color: color(r) } : {}) }; }); const ppr = /<a:pPr\b[^>]*>/.exec(p)?.[0] ?? ''; const text = runs.length ? runs.map(r => r.text).join('') : xmlText(/<a:t\b[^>]*>([\s\S]*?)<\/a:t>/.exec(p)?.[1] ?? ''); return { text, level: Number(attr(ppr, 'lvl') ?? 0), ...(/<a:bu(?:Char|AutoNum)\b/.test(p) ? { bullet: true } : {}), ...(attr(ppr, 'algn') ? { align: attr(ppr, 'algn') } : {}), runs }; }).filter(p => p.text.length > 0); }
|
|
27
|
+
async function parseSlide(zip, path, n, size) { const xml = await zip.text(path) ?? ''; const relPath = `${path.slice(0, path.lastIndexOf('/'))}/_rels/${path.slice(path.lastIndexOf('/') + 1)}.rels`; const rels = relationships(await zip.text(relPath) ?? '', path); const elements = []; let z = 0; for (const block of xml.match(/<p:(?:sp|pic|graphicFrame)\b[\s\S]*?<\/p:(?:sp|pic|graphicFrame)>/g) ?? []) {
|
|
28
|
+
const frame = transform(block);
|
|
29
|
+
const common = { ...frame, zIndex: z++ };
|
|
30
|
+
if (block.startsWith('<p:pic')) {
|
|
31
|
+
const rid = /<a:blip\b[^>]*r:embed="([^"]+)"/.exec(block)?.[1];
|
|
32
|
+
const target = rid ? rels.get(rid) : undefined;
|
|
33
|
+
const data = target ? await zip.bytes(target) : undefined;
|
|
34
|
+
if (data) {
|
|
35
|
+
let binary = '';
|
|
36
|
+
for (const b of data)
|
|
37
|
+
binary += String.fromCharCode(b);
|
|
38
|
+
const ext = target?.split('.').pop()?.toLowerCase();
|
|
39
|
+
const mime = ext === 'png' ? 'image/png' : ext === 'svg' ? 'image/svg+xml' : 'image/jpeg';
|
|
40
|
+
elements.push({ ...common, type: 'image', src: `data:${mime};base64,${btoa(binary)}` });
|
|
41
|
+
}
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
if (block.startsWith('<p:graphicFrame')) {
|
|
45
|
+
const rows = (block.match(/<a:tr\b[\s\S]*?<\/a:tr>/g) ?? []).map(r => (r.match(/<a:tc\b[\s\S]*?<\/a:tc>/g) ?? []).map(c => xmlText((c.match(/<a:t\b[^>]*>([\s\S]*?)<\/a:t>/g) ?? []).join(' '))));
|
|
46
|
+
if (rows.length)
|
|
47
|
+
elements.push({ ...common, type: 'table', tableRows: rows });
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
const ps = paragraphs(block);
|
|
51
|
+
const geom = /<a:prstGeom\b[^>]*prst="([^"]+)"/.exec(block)?.[1];
|
|
52
|
+
if (ps.length)
|
|
53
|
+
elements.push({ ...common, type: 'text', paragraphs: ps, isTitle: /<p:ph\b[^>]*type="(?:title|ctrTitle)"/i.test(block) });
|
|
54
|
+
else
|
|
55
|
+
elements.push({ ...common, type: 'shape', presetGeom: geom, fillColor: color(block, 'transparent'), borderColor: color(/<a:ln\b[\s\S]*?<\/a:ln>/.exec(block)?.[0] ?? '') });
|
|
56
|
+
} return { slideNumber: n, ...size, backgroundColor: color(/<p:bg\b[\s\S]*?<\/p:bg>/.exec(xml)?.[0] ?? '', '#ffffff') ?? '#ffffff', elements }; }
|
|
57
|
+
export async function parsePptx(input, deps, options = {}) { const started = Date.now(), diagnostics = []; if (input.byteLength > (options.limits?.maxInputBytes ?? 50 * 1024 * 1024))
|
|
58
|
+
return { result: { status: 'failed', failure: { code: 'limit-exceeded', retryable: false, messageKey: 'diag.limit-exceeded.input' }, diagnostics }, execution: { workerUsed: false, hardLimitEnforced: false, elapsedMillis: Date.now() - started } }; let zip; try {
|
|
59
|
+
zip = await deps.openZip(input, options);
|
|
60
|
+
const presentation = await zip.text('ppt/presentation.xml');
|
|
61
|
+
if (!presentation)
|
|
62
|
+
throw new Error('presentation');
|
|
63
|
+
const sz = /<p:sldSz\b[^>]*>/.exec(presentation)?.[0] ?? '';
|
|
64
|
+
const size = attr(sz, 'cx') && attr(sz, 'cy') ? { widthPx: Number(attr(sz, 'cx')) / EMU_PER_PX, heightPx: Number(attr(sz, 'cy')) / EMU_PER_PX } : DEFAULT_SIZE;
|
|
65
|
+
const rels = relationships(await zip.text('ppt/_rels/presentation.xml.rels') ?? '', 'ppt/presentation.xml');
|
|
66
|
+
let paths = (presentation.match(/<p:sldId\b[^>]*r:id="([^"]+)"/g) ?? []).map(t => rels.get(/r:id="([^"]+)"/.exec(t)?.[1] ?? '')).filter((x) => !!x);
|
|
67
|
+
if (!paths.length)
|
|
68
|
+
paths = (await zip.list()).filter(x => /^ppt\/slides\/slide\d+\.xml$/i.test(x)).sort((a, b) => Number(/slide(\d+)/i.exec(a)?.[1]) - Number(/slide(\d+)/i.exec(b)?.[1]));
|
|
69
|
+
const tracker = new LimitTracker({ ...DEFAULT_LIMITS, ...options.limits }, options.signal);
|
|
70
|
+
const slides = [];
|
|
71
|
+
for (const path of paths) {
|
|
72
|
+
tracker.addEntries(1);
|
|
73
|
+
const violation = tracker.checkpoint();
|
|
74
|
+
if (violation) {
|
|
75
|
+
diagnostics.push({ severity: 'warning', code: 'limit-exceeded', messageKey: violation.kind === 'aborted' ? 'diag.aborted' : 'diag.ppt.limit-exceeded' });
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
slides.push(await parseSlide(zip, path, slides.length + 1, size));
|
|
79
|
+
}
|
|
80
|
+
const deck = { slides, totalSlides: slides.length, slideSize: size };
|
|
81
|
+
return { result: { status: slides.length === paths.length ? 'ok' : 'partial', document: deck, diagnostics }, execution: { workerUsed: false, hardLimitEnforced: false, elapsedMillis: Date.now() - started } };
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return { result: { status: 'failed', failure: { code: 'invalid-format', retryable: false, messageKey: 'diag.ppt.invalid-format' }, diagnostics }, execution: { workerUsed: false, hardLimitEnforced: false, elapsedMillis: Date.now() - started } };
|
|
85
|
+
}
|
|
86
|
+
finally {
|
|
87
|
+
await zip?.close?.();
|
|
88
|
+
} }
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
interface ParsedElement {
|
|
2
|
+
type: 'text' | 'image' | 'table' | 'chart' | 'shape';
|
|
3
|
+
x: number;
|
|
4
|
+
y: number;
|
|
5
|
+
width: number;
|
|
6
|
+
height: number;
|
|
7
|
+
rotateDeg?: number;
|
|
8
|
+
zIndex: number;
|
|
9
|
+
sourcePriority: number;
|
|
10
|
+
placeholderKey?: string;
|
|
11
|
+
isTitle?: boolean;
|
|
12
|
+
paragraphs?: Array<{
|
|
13
|
+
text: string;
|
|
14
|
+
level: number;
|
|
15
|
+
bullet?: boolean;
|
|
16
|
+
align?: string;
|
|
17
|
+
fontSizePx?: number;
|
|
18
|
+
bold?: boolean;
|
|
19
|
+
italic?: boolean;
|
|
20
|
+
color?: string;
|
|
21
|
+
runs?: Array<{
|
|
22
|
+
text: string;
|
|
23
|
+
fontSizePx?: number;
|
|
24
|
+
bold?: boolean;
|
|
25
|
+
italic?: boolean;
|
|
26
|
+
color?: string;
|
|
27
|
+
}>;
|
|
28
|
+
}>;
|
|
29
|
+
src?: string;
|
|
30
|
+
srcRect?: {
|
|
31
|
+
l: number;
|
|
32
|
+
t: number;
|
|
33
|
+
r: number;
|
|
34
|
+
b: number;
|
|
35
|
+
};
|
|
36
|
+
vectorFallback?: boolean;
|
|
37
|
+
tableRows?: string[][];
|
|
38
|
+
chartKind?: string;
|
|
39
|
+
chartTitle?: string;
|
|
40
|
+
chartData?: {
|
|
41
|
+
kind: 'stackedColumn' | 'line';
|
|
42
|
+
categories: string[];
|
|
43
|
+
series: Array<{
|
|
44
|
+
name: string;
|
|
45
|
+
color: string;
|
|
46
|
+
values: number[];
|
|
47
|
+
valueFormat?: string;
|
|
48
|
+
dataLabel?: {
|
|
49
|
+
showValue?: boolean;
|
|
50
|
+
numFmt?: string;
|
|
51
|
+
fontSizePx?: number;
|
|
52
|
+
color?: string;
|
|
53
|
+
};
|
|
54
|
+
}>;
|
|
55
|
+
gapWidth?: number;
|
|
56
|
+
overlap?: number;
|
|
57
|
+
legend?: {
|
|
58
|
+
position?: string;
|
|
59
|
+
fontSizePx?: number;
|
|
60
|
+
color?: string;
|
|
61
|
+
align?: string;
|
|
62
|
+
};
|
|
63
|
+
categoryAxis?: {
|
|
64
|
+
numFmt?: string;
|
|
65
|
+
fontSizePx?: number;
|
|
66
|
+
color?: string;
|
|
67
|
+
lineColor?: string;
|
|
68
|
+
};
|
|
69
|
+
valueAxis?: {
|
|
70
|
+
numFmt?: string;
|
|
71
|
+
fontSizePx?: number;
|
|
72
|
+
color?: string;
|
|
73
|
+
lineColor?: string;
|
|
74
|
+
gridColor?: string;
|
|
75
|
+
majorUnit?: number;
|
|
76
|
+
min?: number;
|
|
77
|
+
max?: number;
|
|
78
|
+
crossesAt?: number;
|
|
79
|
+
};
|
|
80
|
+
};
|
|
81
|
+
fillColor?: string;
|
|
82
|
+
borderColor?: string;
|
|
83
|
+
customSvgPath?: string;
|
|
84
|
+
presetGeom?: string;
|
|
85
|
+
headEnd?: string;
|
|
86
|
+
tailEnd?: string;
|
|
87
|
+
flipH?: boolean;
|
|
88
|
+
flipV?: boolean;
|
|
89
|
+
hasGeometry?: boolean;
|
|
90
|
+
hiddenPromptText?: boolean;
|
|
91
|
+
}
|
|
92
|
+
export declare class PptxXmlParser {
|
|
93
|
+
static parse(input: Uint8Array): Promise<{
|
|
94
|
+
slides: Array<{
|
|
95
|
+
slideNumber: number;
|
|
96
|
+
widthPx: number;
|
|
97
|
+
heightPx: number;
|
|
98
|
+
backgroundColor: string;
|
|
99
|
+
elements: ParsedElement[];
|
|
100
|
+
}>;
|
|
101
|
+
totalSlides: number;
|
|
102
|
+
}>;
|
|
103
|
+
private static parseSingleSlide;
|
|
104
|
+
private static mergeWithPlaceholderInheritance;
|
|
105
|
+
private static mergePlaceholderElement;
|
|
106
|
+
private static hasValidGeometry;
|
|
107
|
+
private static mergeParagraphStyles;
|
|
108
|
+
private static extractElementsFromPart;
|
|
109
|
+
private static collectBlocks;
|
|
110
|
+
private static findNextTagIndex;
|
|
111
|
+
private static parseShapeBlock;
|
|
112
|
+
private static parsePictureBlock;
|
|
113
|
+
private static parseGraphicFrameBlock;
|
|
114
|
+
private static extractTableRows;
|
|
115
|
+
private static extractTextParagraphs;
|
|
116
|
+
private static parseGeometry;
|
|
117
|
+
private static parseGroupTransform;
|
|
118
|
+
private static combineTransforms;
|
|
119
|
+
private static applyTransform;
|
|
120
|
+
private static parseTheme;
|
|
121
|
+
private static extractBackgroundColor;
|
|
122
|
+
private static extractFillColor;
|
|
123
|
+
private static stripNestedBlocks;
|
|
124
|
+
private static extractLineColor;
|
|
125
|
+
private static extractColorFromXml;
|
|
126
|
+
private static isTitleShape;
|
|
127
|
+
private static getPlaceholderKey;
|
|
128
|
+
private static normalizePlaceholderType;
|
|
129
|
+
private static getPlaceholderType;
|
|
130
|
+
private static getSlideSize;
|
|
131
|
+
private static getOrderedSlidePaths;
|
|
132
|
+
private static getRelationships;
|
|
133
|
+
private static toRelsPath;
|
|
134
|
+
private static resolvePath;
|
|
135
|
+
private static readZipText;
|
|
136
|
+
private static extractBalancedTag;
|
|
137
|
+
private static extractTagBlock;
|
|
138
|
+
private static getAttr;
|
|
139
|
+
private static parseOptionalBoolAttr;
|
|
140
|
+
private static emuToPx;
|
|
141
|
+
private static decodeXmlEntities;
|
|
142
|
+
private static extractParagraphLevelStyle;
|
|
143
|
+
private static buildColorContext;
|
|
144
|
+
private static parseMasterClrMap;
|
|
145
|
+
private static parseClrMapOverride;
|
|
146
|
+
private static parseChartData;
|
|
147
|
+
private static parseLineChartData;
|
|
148
|
+
private static parseSeriesDataLabel;
|
|
149
|
+
private static parseCategoryAxis;
|
|
150
|
+
private static parseValueAxis;
|
|
151
|
+
private static parseLegend;
|
|
152
|
+
private static parseTxPrStyle;
|
|
153
|
+
private static extractChartPoints;
|
|
154
|
+
private static extractChartNumericPoints;
|
|
155
|
+
private static padValues;
|
|
156
|
+
private static parseCustomGeometryPath;
|
|
157
|
+
private static extractPathPoint;
|
|
158
|
+
private static mapPresetColorName;
|
|
159
|
+
private static applyColorTransforms;
|
|
160
|
+
private static hexToRgb;
|
|
161
|
+
private static rgbToHex;
|
|
162
|
+
private static parseNumber;
|
|
163
|
+
private static isPlaceholderPromptText;
|
|
164
|
+
private static resolveImageTarget;
|
|
165
|
+
private static getMimeTypeByExtension;
|
|
166
|
+
}
|
|
167
|
+
export {};
|