@l1yp/file-viewer 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 +134 -0
- package/dist/FileViewer.js +7 -0
- package/dist/FileViewer.vue.d.ts +37 -0
- package/dist/FileViewer.vue_vue_type_script_setup_true_lang.js +103 -0
- package/dist/_virtual/_plugin-vue_export-helper.js +8 -0
- package/dist/components/AppxViewer.js +7 -0
- package/dist/components/AppxViewer.vue.d.ts +18 -0
- package/dist/components/AppxViewer.vue_vue_type_script_setup_true_lang.js +174 -0
- package/dist/components/ArchiveBrowser.js +7 -0
- package/dist/components/ArchiveBrowser.vue.d.ts +18 -0
- package/dist/components/ArchiveBrowser.vue_vue_type_script_setup_true_lang.js +279 -0
- package/dist/components/AudioViewer.js +7 -0
- package/dist/components/AudioViewer.vue.d.ts +21 -0
- package/dist/components/AudioViewer.vue_vue_type_script_setup_true_lang.js +201 -0
- package/dist/components/BinObjBrowser.js +7 -0
- package/dist/components/BinObjBrowser.vue.d.ts +19 -0
- package/dist/components/BinObjBrowser.vue_vue_type_script_setup_true_lang.js +141 -0
- package/dist/components/CertViewer.js +7 -0
- package/dist/components/CertViewer.vue.d.ts +17 -0
- package/dist/components/CertViewer.vue_vue_type_script_setup_true_lang.js +251 -0
- package/dist/components/ClassViewer.js +7 -0
- package/dist/components/ClassViewer.vue.d.ts +15 -0
- package/dist/components/ClassViewer.vue_vue_type_script_setup_true_lang.js +164 -0
- package/dist/components/CodeBlock.js +7 -0
- package/dist/components/CodeBlock.vue.d.ts +17 -0
- package/dist/components/CodeBlock.vue_vue_type_script_setup_true_lang.js +79 -0
- package/dist/components/CodeView.js +7 -0
- package/dist/components/CodeView.vue.d.ts +21 -0
- package/dist/components/CodeView.vue_vue_type_script_setup_true_lang.js +180 -0
- package/dist/components/CsvViewer.js +7 -0
- package/dist/components/CsvViewer.vue.d.ts +26 -0
- package/dist/components/CsvViewer.vue_vue_type_script_setup_true_lang.js +187 -0
- package/dist/components/DicomViewer.js +7 -0
- package/dist/components/DicomViewer.vue.d.ts +30 -0
- package/dist/components/DicomViewer.vue_vue_type_script_setup_true_lang.js +362 -0
- package/dist/components/DocxViewer.js +7 -0
- package/dist/components/DocxViewer.vue.d.ts +19 -0
- package/dist/components/DocxViewer.vue_vue_type_script_setup_true_lang.js +59 -0
- package/dist/components/DrawioViewer.js +7 -0
- package/dist/components/DrawioViewer.vue.d.ts +16 -0
- package/dist/components/DrawioViewer.vue_vue_type_script_setup_true_lang.js +38 -0
- package/dist/components/DxfViewer.js +7 -0
- package/dist/components/DxfViewer.vue.d.ts +14 -0
- package/dist/components/DxfViewer.vue_vue_type_script_setup_true_lang.js +239 -0
- package/dist/components/EbookViewer.js +7 -0
- package/dist/components/EbookViewer.vue.d.ts +22 -0
- package/dist/components/EbookViewer.vue_vue_type_script_setup_true_lang.js +170 -0
- package/dist/components/EmlViewer.js +7 -0
- package/dist/components/EmlViewer.vue.d.ts +21 -0
- package/dist/components/EmlViewer.vue_vue_type_script_setup_true_lang.js +193 -0
- package/dist/components/EplViewer.js +7 -0
- package/dist/components/EplViewer.vue.d.ts +19 -0
- package/dist/components/EplViewer.vue_vue_type_script_setup_true_lang.js +201 -0
- package/dist/components/FileViewerBody.js +7 -0
- package/dist/components/FileViewerBody.vue.d.ts +47 -0
- package/dist/components/FileViewerBody.vue_vue_type_script_setup_true_lang.js +599 -0
- package/dist/components/FileViewerPanel.js +7 -0
- package/dist/components/FileViewerPanel.vue.d.ts +3 -0
- package/dist/components/FileViewerPanel.vue_vue_type_script_setup_true_lang.js +207 -0
- package/dist/components/FontViewer.js +7 -0
- package/dist/components/FontViewer.vue.d.ts +17 -0
- package/dist/components/FontViewer.vue_vue_type_script_setup_true_lang.js +120 -0
- package/dist/components/FrontmatterCard.js +7 -0
- package/dist/components/FrontmatterCard.vue.d.ts +11 -0
- package/dist/components/FrontmatterCard.vue_vue_type_script_setup_true_lang.js +30 -0
- package/dist/components/GeoViewer.js +7 -0
- package/dist/components/GeoViewer.vue.d.ts +17 -0
- package/dist/components/GeoViewer.vue_vue_type_script_setup_true_lang.js +255 -0
- package/dist/components/HarViewer.js +7 -0
- package/dist/components/HarViewer.vue.d.ts +20 -0
- package/dist/components/HarViewer.vue_vue_type_script_setup_true_lang.js +322 -0
- package/dist/components/HexViewer.js +7 -0
- package/dist/components/HexViewer.vue.d.ts +22 -0
- package/dist/components/HexViewer.vue_vue_type_script_setup_true_lang.js +121 -0
- package/dist/components/HprofViewer.js +7 -0
- package/dist/components/HprofViewer.vue.d.ts +27 -0
- package/dist/components/HprofViewer.vue_vue_type_script_setup_true_lang.js +561 -0
- package/dist/components/ImageLightbox.js +7 -0
- package/dist/components/ImageLightbox.vue.d.ts +3 -0
- package/dist/components/ImageLightbox.vue_vue_type_script_setup_true_lang.js +86 -0
- package/dist/components/InlineText.d.ts +29 -0
- package/dist/components/InlineText.js +21 -0
- package/dist/components/JksViewer.js +7 -0
- package/dist/components/JksViewer.vue.d.ts +22 -0
- package/dist/components/JksViewer.vue_vue_type_script_setup_true_lang.js +353 -0
- package/dist/components/JsonlViewer.js +7 -0
- package/dist/components/JsonlViewer.vue.d.ts +15 -0
- package/dist/components/JsonlViewer.vue_vue_type_script_setup_true_lang.js +103 -0
- package/dist/components/LogViewer.js +7 -0
- package/dist/components/LogViewer.vue.d.ts +29 -0
- package/dist/components/LogViewer.vue_vue_type_script_setup_true_lang.js +670 -0
- package/dist/components/LrcViewer.js +7 -0
- package/dist/components/LrcViewer.vue.d.ts +17 -0
- package/dist/components/LrcViewer.vue_vue_type_script_setup_true_lang.js +106 -0
- package/dist/components/MarkdownTable.js +7 -0
- package/dist/components/MarkdownTable.vue.d.ts +19 -0
- package/dist/components/MarkdownTable.vue_vue_type_script_setup_true_lang.js +71 -0
- package/dist/components/MarkdownText.d.ts +30 -0
- package/dist/components/MarkdownText.js +21 -0
- package/dist/components/MhtViewer.js +7 -0
- package/dist/components/MhtViewer.vue.d.ts +22 -0
- package/dist/components/MhtViewer.vue_vue_type_script_setup_true_lang.js +112 -0
- package/dist/components/MindMapView.js +7 -0
- package/dist/components/MindMapView.vue.d.ts +23 -0
- package/dist/components/MindMapView.vue_vue_type_script_setup_true_lang.js +337 -0
- package/dist/components/MissingDependency.js +7 -0
- package/dist/components/MissingDependency.vue.d.ts +17 -0
- package/dist/components/MissingDependency.vue_vue_type_script_setup_true_lang.js +37 -0
- package/dist/components/ModelViewer.js +7 -0
- package/dist/components/ModelViewer.vue.d.ts +18 -0
- package/dist/components/ModelViewer.vue_vue_type_script_setup_true_lang.js +157 -0
- package/dist/components/MsiViewer.js +7 -0
- package/dist/components/MsiViewer.vue.d.ts +19 -0
- package/dist/components/MsiViewer.vue_vue_type_script_setup_true_lang.js +136 -0
- package/dist/components/NotebookViewer.js +7 -0
- package/dist/components/NotebookViewer.vue.d.ts +20 -0
- package/dist/components/NotebookViewer.vue_vue_type_script_setup_true_lang.js +125 -0
- package/dist/components/PdfViewer.js +7 -0
- package/dist/components/PdfViewer.vue.d.ts +19 -0
- package/dist/components/PdfViewer.vue_vue_type_script_setup_true_lang.js +114 -0
- package/dist/components/PptxViewer.js +7 -0
- package/dist/components/PptxViewer.vue.d.ts +20 -0
- package/dist/components/PptxViewer.vue_vue_type_script_setup_true_lang.js +73 -0
- package/dist/components/PsdViewer.js +7 -0
- package/dist/components/PsdViewer.vue.d.ts +15 -0
- package/dist/components/PsdViewer.vue_vue_type_script_setup_true_lang.js +218 -0
- package/dist/components/QmcAudioViewer.js +7 -0
- package/dist/components/QmcAudioViewer.vue.d.ts +18 -0
- package/dist/components/QmcAudioViewer.vue_vue_type_script_setup_true_lang.js +92 -0
- package/dist/components/RasterViewer.js +7 -0
- package/dist/components/RasterViewer.vue.d.ts +21 -0
- package/dist/components/RasterViewer.vue_vue_type_script_setup_true_lang.js +161 -0
- package/dist/components/RtfViewer.js +7 -0
- package/dist/components/RtfViewer.vue.d.ts +21 -0
- package/dist/components/RtfViewer.vue_vue_type_script_setup_true_lang.js +66 -0
- package/dist/components/SevenZipBrowser.js +7 -0
- package/dist/components/SevenZipBrowser.vue.d.ts +13 -0
- package/dist/components/SevenZipBrowser.vue_vue_type_script_setup_true_lang.js +366 -0
- package/dist/components/SqliteViewer.js +7 -0
- package/dist/components/SqliteViewer.vue.d.ts +18 -0
- package/dist/components/SqliteViewer.vue_vue_type_script_setup_true_lang.js +186 -0
- package/dist/components/SubtitleViewer.js +7 -0
- package/dist/components/SubtitleViewer.vue.d.ts +15 -0
- package/dist/components/SubtitleViewer.vue_vue_type_script_setup_true_lang.js +48 -0
- package/dist/components/XlsxChart.js +7 -0
- package/dist/components/XlsxChart.vue.d.ts +14 -0
- package/dist/components/XlsxChart.vue_vue_type_script_setup_true_lang.js +240 -0
- package/dist/components/XlsxViewer.js +7 -0
- package/dist/components/XlsxViewer.vue.d.ts +22 -0
- package/dist/components/XlsxViewer.vue_vue_type_script_setup_true_lang.js +814 -0
- package/dist/components/XmindViewer.js +7 -0
- package/dist/components/XmindViewer.vue.d.ts +13 -0
- package/dist/components/XmindViewer.vue_vue_type_script_setup_true_lang.js +48 -0
- package/dist/components/ZipBrowser.js +7 -0
- package/dist/components/ZipBrowser.vue.d.ts +14 -0
- package/dist/components/ZipBrowser.vue_vue_type_script_setup_true_lang.js +326 -0
- package/dist/components/ZoomImage.js +7 -0
- package/dist/components/ZoomImage.vue.d.ts +29 -0
- package/dist/components/ZoomImage.vue_vue_type_script_setup_true_lang.js +147 -0
- package/dist/components/epl/EplCodeBlock.js +7 -0
- package/dist/components/epl/EplCodeBlock.vue.d.ts +15 -0
- package/dist/components/epl/EplCodeBlock.vue_vue_type_script_setup_true_lang.js +72 -0
- package/dist/components/epl/EplDoc.js +7 -0
- package/dist/components/epl/EplDoc.vue.d.ts +19 -0
- package/dist/components/epl/EplDoc.vue_vue_type_script_setup_true_lang.js +327 -0
- package/dist/components/epl/EplMethod.js +7 -0
- package/dist/components/epl/EplMethod.vue.d.ts +14 -0
- package/dist/components/epl/EplMethod.vue_vue_type_script_setup_true_lang.js +100 -0
- package/dist/components/epl/EplResource.js +7 -0
- package/dist/components/epl/EplResource.vue.d.ts +15 -0
- package/dist/components/epl/EplResource.vue_vue_type_script_setup_true_lang.js +204 -0
- package/dist/components/epl/EplTree.js +7 -0
- package/dist/components/epl/EplTree.vue.d.ts +27 -0
- package/dist/components/epl/EplTree.vue_vue_type_script_setup_true_lang.js +123 -0
- package/dist/components/epl/EplVarTable.js +7 -0
- package/dist/components/epl/EplVarTable.vue.d.ts +21 -0
- package/dist/components/epl/EplVarTable.vue_vue_type_script_setup_true_lang.js +60 -0
- package/dist/components/epl/docTypes.d.ts +12 -0
- package/dist/components/epl/numbering.d.ts +21 -0
- package/dist/components/epl/numbering.js +14 -0
- package/dist/components/icons/Icon.js +7 -0
- package/dist/components/icons/Icon.vue.d.ts +14 -0
- package/dist/components/icons/Icon.vue_vue_type_script_setup_true_lang.js +33 -0
- package/dist/components/icons/iconPaths.d.ts +60 -0
- package/dist/components/icons/iconPaths.js +54 -0
- package/dist/components/optionalViewer.d.ts +14 -0
- package/dist/components/optionalViewer.js +37 -0
- package/dist/components/ui/ClampBlock.d.ts +82 -0
- package/dist/components/ui/ClampBlock.js +63 -0
- package/dist/composables/useFileViewer.d.ts +428 -0
- package/dist/composables/useFileViewer.js +27 -0
- package/dist/composables/useLightbox.d.ts +33 -0
- package/dist/composables/useLightbox.js +17 -0
- package/dist/composables/useLogRules.d.ts +47 -0
- package/dist/composables/useLogRules.js +74 -0
- package/dist/index.d.ts +44 -0
- package/dist/index.js +30 -0
- package/dist/lib/aes.d.ts +25 -0
- package/dist/lib/aes.js +99 -0
- package/dist/lib/appx.d.ts +66 -0
- package/dist/lib/appx.js +112 -0
- package/dist/lib/archive.d.ts +29 -0
- package/dist/lib/asn1.d.ts +47 -0
- package/dist/lib/asn1.js +122 -0
- package/dist/lib/binobj.d.ts +69 -0
- package/dist/lib/binobj.js +430 -0
- package/dist/lib/brotli.d.ts +14 -0
- package/dist/lib/brotli.js +16 -0
- package/dist/lib/bzip2.d.ts +14 -0
- package/dist/lib/bzip2.js +161 -0
- package/dist/lib/classfile.d.ts +72 -0
- package/dist/lib/classfile.js +210 -0
- package/dist/lib/codePreview.d.ts +22 -0
- package/dist/lib/codePreview.js +27 -0
- package/dist/lib/codefold.d.ts +14 -0
- package/dist/lib/codefold.js +30 -0
- package/dist/lib/codeformat.d.ts +21 -0
- package/dist/lib/codeformat.js +130 -0
- package/dist/lib/csv.d.ts +19 -0
- package/dist/lib/csv.js +74 -0
- package/dist/lib/des.d.ts +17 -0
- package/dist/lib/des.js +928 -0
- package/dist/lib/diagram.d.ts +5 -0
- package/dist/lib/diagram.js +479 -0
- package/dist/lib/dicom.d.ts +69 -0
- package/dist/lib/dicom.js +442 -0
- package/dist/lib/dicomCodecs.d.ts +28 -0
- package/dist/lib/dicomCodecs.js +156 -0
- package/dist/lib/dicomRender.d.ts +46 -0
- package/dist/lib/dicomRender.js +114 -0
- package/dist/lib/dxf.d.ts +86 -0
- package/dist/lib/dxf.js +399 -0
- package/dist/lib/eml.d.ts +40 -0
- package/dist/lib/eml.js +46 -0
- package/dist/lib/encoding.d.ts +28 -0
- package/dist/lib/encoding.js +44 -0
- package/dist/lib/epl/code/ast.d.ts +150 -0
- package/dist/lib/epl/code/codeDataParser.d.ts +3 -0
- package/dist/lib/epl/code/codeDataParser.js +330 -0
- package/dist/lib/epl/code/codeLines.d.ts +20 -0
- package/dist/lib/epl/code/codeLines.js +191 -0
- package/dist/lib/epl/code/structures.d.ts +86 -0
- package/dist/lib/epl/code/textCode.d.ts +29 -0
- package/dist/lib/epl/code/textCode.js +150 -0
- package/dist/lib/epl/code/variable.d.ts +25 -0
- package/dist/lib/epl/eplDocument.d.ts +21 -0
- package/dist/lib/epl/eplDocument.js +36 -0
- package/dist/lib/epl/imageList.d.ts +28 -0
- package/dist/lib/epl/imageList.js +66 -0
- package/dist/lib/epl/index.d.ts +53 -0
- package/dist/lib/epl/index.js +45 -0
- package/dist/lib/epl/io/binaryReader.d.ts +56 -0
- package/dist/lib/epl/io/binaryReader.js +119 -0
- package/dist/lib/epl/io/encoding.d.ts +16 -0
- package/dist/lib/epl/io/encoding.js +27 -0
- package/dist/lib/epl/model/eplSystemId.d.ts +64 -0
- package/dist/lib/epl/model/eplSystemId.js +16 -0
- package/dist/lib/epl/model/section.d.ts +46 -0
- package/dist/lib/epl/names/eplLibData.js +39 -0
- package/dist/lib/epl/names/idToNameMap.d.ts +33 -0
- package/dist/lib/epl/names/idToNameMap.js +130 -0
- package/dist/lib/epl/names/libNameProvider.d.ts +15 -0
- package/dist/lib/epl/names/libNameProvider.js +18 -0
- package/dist/lib/epl/program.d.ts +120 -0
- package/dist/lib/epl/program.js +134 -0
- package/dist/lib/epl/projectFileReader.d.ts +23 -0
- package/dist/lib/epl/projectFileReader.js +65 -0
- package/dist/lib/epl/sections/code.d.ts +20 -0
- package/dist/lib/epl/sections/esystemInfo.d.ts +14 -0
- package/dist/lib/epl/sections/losable.d.ts +11 -0
- package/dist/lib/epl/sections/projectConfig.d.ts +23 -0
- package/dist/lib/epl/sections/resource.d.ts +57 -0
- package/dist/lib/fb2.d.ts +14 -0
- package/dist/lib/fb2.js +62 -0
- package/dist/lib/fileType.d.ts +315 -0
- package/dist/lib/fileType.js +800 -0
- package/dist/lib/fonts.d.ts +8 -0
- package/dist/lib/fonts.js +4 -0
- package/dist/lib/format.d.ts +16 -0
- package/dist/lib/format.js +38 -0
- package/dist/lib/frontmatter.d.ts +13 -0
- package/dist/lib/frontmatter.js +23 -0
- package/dist/lib/geo.d.ts +30 -0
- package/dist/lib/geo.js +235 -0
- package/dist/lib/har.d.ts +171 -0
- package/dist/lib/har.js +397 -0
- package/dist/lib/highlight.d.ts +18 -0
- package/dist/lib/highlight.js +34 -0
- package/dist/lib/highlightLangs.d.ts +15 -0
- package/dist/lib/highlightLangs.js +93 -0
- package/dist/lib/hprof.d.ts +211 -0
- package/dist/lib/hprof.js +709 -0
- package/dist/lib/ipynb.d.ts +48 -0
- package/dist/lib/ipynb.js +130 -0
- package/dist/lib/jks.d.ts +86 -0
- package/dist/lib/jks.js +167 -0
- package/dist/lib/jsonl.d.ts +29 -0
- package/dist/lib/jsonl.js +24 -0
- package/dist/lib/lrc.d.ts +32 -0
- package/dist/lib/lrc.js +84 -0
- package/dist/lib/lzma.d.ts +70 -0
- package/dist/lib/lzma.js +204 -0
- package/dist/lib/markdown/blocks.d.ts +9 -0
- package/dist/lib/markdown/blocks.js +221 -0
- package/dist/lib/markdown/index.d.ts +3 -0
- package/dist/lib/markdown/inline.d.ts +33 -0
- package/dist/lib/markdown/inline.js +84 -0
- package/dist/lib/markdown/math.d.ts +5 -0
- package/dist/lib/markdown/math.js +25 -0
- package/dist/lib/markdown/segmentize.d.ts +11 -0
- package/dist/lib/markdown/segmentize.js +28 -0
- package/dist/lib/markdown/styles.d.ts +26 -0
- package/dist/lib/markdown/styles.js +135 -0
- package/dist/lib/mht.d.ts +51 -0
- package/dist/lib/mht.js +122 -0
- package/dist/lib/midi.d.ts +28 -0
- package/dist/lib/midi.js +84 -0
- package/dist/lib/mime.d.ts +82 -0
- package/dist/lib/mime.js +151 -0
- package/dist/lib/mindmap.d.ts +51 -0
- package/dist/lib/mindmap.js +113 -0
- package/dist/lib/mobi.d.ts +15 -0
- package/dist/lib/mobi.js +68 -0
- package/dist/lib/msi.d.ts +50 -0
- package/dist/lib/msi.js +332 -0
- package/dist/lib/optionalDep.d.ts +26 -0
- package/dist/lib/optionalDep.js +20 -0
- package/dist/lib/pkcs12.d.ts +56 -0
- package/dist/lib/pkcs12.js +356 -0
- package/dist/lib/qmc.d.ts +50 -0
- package/dist/lib/qmc.js +213 -0
- package/dist/lib/rar.d.ts +16 -0
- package/dist/lib/rar.js +40 -0
- package/dist/lib/rawPreview.d.ts +12 -0
- package/dist/lib/rawPreview.js +54 -0
- package/dist/lib/rc2.d.ts +12 -0
- package/dist/lib/rc2.js +298 -0
- package/dist/lib/resolveInput.d.ts +22 -0
- package/dist/lib/resolveInput.js +55 -0
- package/dist/lib/rtf.d.ts +53 -0
- package/dist/lib/rtf.js +413 -0
- package/dist/lib/sevenZip.d.ts +82 -0
- package/dist/lib/sevenZip.js +395 -0
- package/dist/lib/sha1.d.ts +24 -0
- package/dist/lib/sha1.js +53 -0
- package/dist/lib/sha256.d.ts +21 -0
- package/dist/lib/sha256.js +119 -0
- package/dist/lib/speechAudio.d.ts +36 -0
- package/dist/lib/speechAudio.js +85 -0
- package/dist/lib/sqlite.d.ts +38 -0
- package/dist/lib/sqlite.js +104 -0
- package/dist/lib/subtitle.d.ts +26 -0
- package/dist/lib/subtitle.js +99 -0
- package/dist/lib/tarball.d.ts +20 -0
- package/dist/lib/tarball.js +248 -0
- package/dist/lib/viewerFormats.d.ts +35 -0
- package/dist/lib/viewerFormats.js +83 -0
- package/dist/lib/viewerKind.d.ts +36 -0
- package/dist/lib/viewerKind.js +233 -0
- package/dist/lib/x509.d.ts +68 -0
- package/dist/lib/x509.js +267 -0
- package/dist/lib/xlsx.d.ts +55 -0
- package/dist/lib/xlsx.js +321 -0
- package/dist/lib/xlsxCharts.d.ts +34 -0
- package/dist/lib/xlsxCharts.js +152 -0
- package/dist/lib/xmind.d.ts +6 -0
- package/dist/lib/xmind.js +124 -0
- package/dist/lib/zip.d.ts +56 -0
- package/dist/lib/zip.js +169 -0
- package/dist/style.css +2 -0
- package/dist/types.d.ts +42 -0
- package/package.json +128 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal in-browser Java `.class` STRUCTURE reader — no dependency, no decompilation.
|
|
3
|
+
*
|
|
4
|
+
* Mirrors {@link lib/binobj.ts}: hand-rolled big-endian parsing over a DataView, reading only the structural
|
|
5
|
+
* tables a `javap`-style listing needs — the constant pool, the field table, and the method table. It does
|
|
6
|
+
* NOT reconstruct method bodies (that's a real decompiler — control-flow recovery, expression rebuilding,
|
|
7
|
+
* out of scope). The whole thing is "read a few length-prefixed tables and translate type descriptors".
|
|
8
|
+
*
|
|
9
|
+
* What it surfaces (see {@link ClassInfo}): the class signature (modifiers + kind + this/super/interfaces),
|
|
10
|
+
* the bytecode version, every field (modifiers + type + name), and every method (modifiers + return + params),
|
|
11
|
+
* plus — when the class was compiled with `javac -g` — each method's local variables (from the Code attribute's
|
|
12
|
+
* LocalVariableTable). Faithfully ported from the project's verified reference parser (docs/java class
|
|
13
|
+
* decompile.md), validated byte-for-byte against an OpenJDK 21 compiled class.
|
|
14
|
+
*
|
|
15
|
+
* Used by ClassViewer (the side viewer's `.class` mode): bytes come from the same download endpoint as any
|
|
16
|
+
* other file, are parsed entirely client-side, and never leave the browser.
|
|
17
|
+
*/
|
|
18
|
+
export interface ClassField {
|
|
19
|
+
name: string;
|
|
20
|
+
/** Human type from the field descriptor (`Ljava/lang/String;` → `String`, `[I` → `int[]`). Generics erased. */
|
|
21
|
+
type: string;
|
|
22
|
+
/** Access modifiers in source order: `public`/`private`/`protected`/`static`/`final`/`volatile`/`transient`. */
|
|
23
|
+
flags: string[];
|
|
24
|
+
}
|
|
25
|
+
export interface ClassLocal {
|
|
26
|
+
name: string;
|
|
27
|
+
type: string;
|
|
28
|
+
/** Local-variable slot index (slot 0 of an instance method is `this`). */
|
|
29
|
+
slot: number;
|
|
30
|
+
}
|
|
31
|
+
export interface ClassMethod {
|
|
32
|
+
/** Method name; `<init>` is the constructor, `<clinit>` the static initializer. */
|
|
33
|
+
name: string;
|
|
34
|
+
/** Parameter types (descriptor-decoded, generics erased). */
|
|
35
|
+
params: string[];
|
|
36
|
+
/** Return type. */
|
|
37
|
+
ret: string;
|
|
38
|
+
flags: string[];
|
|
39
|
+
/** Local variables (from Code/LocalVariableTable, `javac -g` only); null when the table is absent. */
|
|
40
|
+
locals: ClassLocal[] | null;
|
|
41
|
+
}
|
|
42
|
+
export type ClassKind = 'class' | 'interface' | 'enum' | '@interface';
|
|
43
|
+
export interface ClassInfo {
|
|
44
|
+
majorVersion: number;
|
|
45
|
+
minorVersion: number;
|
|
46
|
+
/** `"major.minor"` raw bytecode version (e.g. `"65.0"`). */
|
|
47
|
+
version: string;
|
|
48
|
+
/** Friendly platform label derived from the major version (e.g. `"Java 21"`). */
|
|
49
|
+
javaLabel: string;
|
|
50
|
+
/** Whether it's a class / interface / enum / annotation (`@interface`). */
|
|
51
|
+
kind: ClassKind;
|
|
52
|
+
/** Class-level modifiers that aren't implied by {@link kind} (e.g. `["public", "final"]`). */
|
|
53
|
+
modifiers: string[];
|
|
54
|
+
/** Fully-qualified name of this class (`demo.Sample`). */
|
|
55
|
+
thisClass: string | null;
|
|
56
|
+
/** Fully-qualified superclass (`java.lang.Object`); null only for `java.lang.Object` itself. */
|
|
57
|
+
superClass: string | null;
|
|
58
|
+
/** Fully-qualified implemented interfaces (for an interface: its extended interfaces). */
|
|
59
|
+
interfaces: string[];
|
|
60
|
+
fields: ClassField[];
|
|
61
|
+
methods: ClassMethod[];
|
|
62
|
+
}
|
|
63
|
+
/** Thrown when the bytes aren't a Java class file (magic mismatch). */
|
|
64
|
+
export declare class NotClassFileError extends Error {
|
|
65
|
+
constructor(message: string);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Parse a `.class` file's structure. Input is an ArrayBuffer/Uint8Array of the file bytes. Throws
|
|
69
|
+
* {@link NotClassFileError} on a magic mismatch; a truncated/corrupt file surfaces as a generic RangeError
|
|
70
|
+
* (DataView bounds) for the caller to report.
|
|
71
|
+
*/
|
|
72
|
+
export declare function parseClass(input: ArrayBuffer | Uint8Array): ClassInfo;
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
//#region src/lib/classfile.ts
|
|
2
|
+
var e = class extends Error {
|
|
3
|
+
constructor(e) {
|
|
4
|
+
super(e), this.name = "NotClassFileError";
|
|
5
|
+
}
|
|
6
|
+
}, t = {
|
|
7
|
+
B: "byte",
|
|
8
|
+
C: "char",
|
|
9
|
+
D: "double",
|
|
10
|
+
F: "float",
|
|
11
|
+
I: "int",
|
|
12
|
+
J: "long",
|
|
13
|
+
S: "short",
|
|
14
|
+
Z: "boolean",
|
|
15
|
+
V: "void"
|
|
16
|
+
};
|
|
17
|
+
function n(e) {
|
|
18
|
+
return e >= 49 ? `Java ${e - 44}` : {
|
|
19
|
+
45: "Java 1.1",
|
|
20
|
+
46: "Java 1.2",
|
|
21
|
+
47: "Java 1.3",
|
|
22
|
+
48: "Java 1.4"
|
|
23
|
+
}[e] ?? `主版本 ${e}`;
|
|
24
|
+
}
|
|
25
|
+
function r(r) {
|
|
26
|
+
let i = r instanceof Uint8Array ? r : new Uint8Array(r), a = new DataView(i.buffer, i.byteOffset, i.byteLength), o = 0, s = () => a.getUint8(o++), c = () => {
|
|
27
|
+
let e = a.getUint16(o);
|
|
28
|
+
return o += 2, e;
|
|
29
|
+
}, l = () => {
|
|
30
|
+
let e = a.getUint32(o);
|
|
31
|
+
return o += 4, e;
|
|
32
|
+
};
|
|
33
|
+
if (i.byteLength < 10 || a.getUint32(0) !== 3405691582) throw new e("不是有效的 .class 文件(magic 不匹配 0xCAFEBABE)");
|
|
34
|
+
o = 4;
|
|
35
|
+
let u = c(), d = c(), f = c(), p = [], m = new TextDecoder("utf-8");
|
|
36
|
+
for (let t = 1; t < f; t++) {
|
|
37
|
+
let n = s();
|
|
38
|
+
switch (n) {
|
|
39
|
+
case 1: {
|
|
40
|
+
let e = c(), r = i.subarray(o, o + e);
|
|
41
|
+
o += e, p[t] = {
|
|
42
|
+
tag: n,
|
|
43
|
+
str: m.decode(r)
|
|
44
|
+
};
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
case 7:
|
|
48
|
+
p[t] = {
|
|
49
|
+
tag: n,
|
|
50
|
+
nameIndex: c()
|
|
51
|
+
};
|
|
52
|
+
break;
|
|
53
|
+
case 8:
|
|
54
|
+
case 16:
|
|
55
|
+
case 19:
|
|
56
|
+
case 20:
|
|
57
|
+
p[t] = { tag: n }, c();
|
|
58
|
+
break;
|
|
59
|
+
case 9:
|
|
60
|
+
case 10:
|
|
61
|
+
case 11:
|
|
62
|
+
case 12:
|
|
63
|
+
case 17:
|
|
64
|
+
case 18:
|
|
65
|
+
p[t] = { tag: n }, c(), c();
|
|
66
|
+
break;
|
|
67
|
+
case 3:
|
|
68
|
+
case 4:
|
|
69
|
+
p[t] = { tag: n }, l();
|
|
70
|
+
break;
|
|
71
|
+
case 5:
|
|
72
|
+
case 6:
|
|
73
|
+
p[t] = { tag: n }, l(), l(), t++;
|
|
74
|
+
break;
|
|
75
|
+
case 15:
|
|
76
|
+
p[t] = { tag: n }, s(), c();
|
|
77
|
+
break;
|
|
78
|
+
default: throw new e(`未知常量池标签 ${n} @${t}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
let h = (e) => p[e]?.str ?? "", g = (e) => e === 0 ? null : h(p[e]?.nameIndex ?? 0).replace(/\//g, ".");
|
|
82
|
+
function _(e, n) {
|
|
83
|
+
let r = 0;
|
|
84
|
+
for (; e[n] === "[";) r++, n++;
|
|
85
|
+
let i = e[n++] ?? "", a;
|
|
86
|
+
if (t[i]) a = t[i];
|
|
87
|
+
else if (i === "L") {
|
|
88
|
+
let t = "";
|
|
89
|
+
for (; n < e.length && e[n] !== ";";) t += e[n++];
|
|
90
|
+
n++, a = t.replace(/\//g, ".").replace(/^java\.lang\./, "");
|
|
91
|
+
} else a = i;
|
|
92
|
+
return {
|
|
93
|
+
type: a + "[]".repeat(r),
|
|
94
|
+
next: n
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
let v = (e) => _(e, 0).type;
|
|
98
|
+
function y(e) {
|
|
99
|
+
let t = 1, n = [];
|
|
100
|
+
for (; t < e.length && e[t] !== ")";) {
|
|
101
|
+
let r = _(e, t);
|
|
102
|
+
n.push(r.type), t = r.next;
|
|
103
|
+
}
|
|
104
|
+
return {
|
|
105
|
+
params: n,
|
|
106
|
+
ret: _(e, t + 1).type
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
let b = (e, t) => [
|
|
110
|
+
[1, "public"],
|
|
111
|
+
[2, "private"],
|
|
112
|
+
[4, "protected"],
|
|
113
|
+
[8, "static"],
|
|
114
|
+
[16, "final"],
|
|
115
|
+
[64, t === "field" ? "volatile" : "bridge"],
|
|
116
|
+
[128, t === "field" ? "transient" : "varargs"],
|
|
117
|
+
[256, "native"],
|
|
118
|
+
[1024, "abstract"],
|
|
119
|
+
[2048, "strictfp"]
|
|
120
|
+
].filter(([t]) => (e & t) !== 0).map(([, e]) => e), x = c(), S = g(c()), C = g(c()), w = c(), T = [];
|
|
121
|
+
for (let e = 0; e < w; e++) {
|
|
122
|
+
let e = g(c());
|
|
123
|
+
e && T.push(e);
|
|
124
|
+
}
|
|
125
|
+
let E = () => {
|
|
126
|
+
let e = c(), t = [];
|
|
127
|
+
for (let n = 0; n < e; n++) {
|
|
128
|
+
let e = c(), n = l();
|
|
129
|
+
t.push({
|
|
130
|
+
name: h(e),
|
|
131
|
+
start: o,
|
|
132
|
+
len: n
|
|
133
|
+
}), o += n;
|
|
134
|
+
}
|
|
135
|
+
return t;
|
|
136
|
+
}, D = c(), O = [];
|
|
137
|
+
for (let e = 0; e < D; e++) {
|
|
138
|
+
let e = c(), t = c(), n = c();
|
|
139
|
+
E(), O.push({
|
|
140
|
+
name: h(t),
|
|
141
|
+
type: v(h(n)),
|
|
142
|
+
flags: b(e, "field")
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
let k = c(), A = [];
|
|
146
|
+
for (let e = 0; e < k; e++) {
|
|
147
|
+
let e = c(), t = c(), n = c(), r = E(), i = y(h(n)), o = null, s = r.find((e) => e.name === "Code");
|
|
148
|
+
if (s) {
|
|
149
|
+
let e = s.start, t = () => {
|
|
150
|
+
let t = a.getUint16(e);
|
|
151
|
+
return e += 2, t;
|
|
152
|
+
}, n = () => {
|
|
153
|
+
let t = a.getUint32(e);
|
|
154
|
+
return e += 4, t;
|
|
155
|
+
};
|
|
156
|
+
t(), t();
|
|
157
|
+
let r = n();
|
|
158
|
+
e += r;
|
|
159
|
+
let i = t();
|
|
160
|
+
e += i * 8;
|
|
161
|
+
let c = t();
|
|
162
|
+
for (let r = 0; r < c; r++) {
|
|
163
|
+
let r = h(t()), i = n(), s = e;
|
|
164
|
+
if (r === "LocalVariableTable") {
|
|
165
|
+
let t = a.getUint16(e), n = e + 2;
|
|
166
|
+
o = [];
|
|
167
|
+
for (let e = 0; e < t; e++) {
|
|
168
|
+
n += 4;
|
|
169
|
+
let e = a.getUint16(n);
|
|
170
|
+
n += 2;
|
|
171
|
+
let t = a.getUint16(n);
|
|
172
|
+
n += 2;
|
|
173
|
+
let r = a.getUint16(n);
|
|
174
|
+
n += 2, o.push({
|
|
175
|
+
name: h(e),
|
|
176
|
+
type: v(h(t)),
|
|
177
|
+
slot: r
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
e = s + i;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
A.push({
|
|
185
|
+
name: h(t),
|
|
186
|
+
params: i.params,
|
|
187
|
+
ret: i.ret,
|
|
188
|
+
flags: b(e, "method"),
|
|
189
|
+
locals: o
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
let j = "class";
|
|
193
|
+
x & 8192 ? j = "@interface" : x & 512 ? j = "interface" : x & 16384 && (j = "enum");
|
|
194
|
+
let M = [];
|
|
195
|
+
return x & 1 && M.push("public"), j === "class" && x & 16 && M.push("final"), j === "class" && x & 1024 && M.push("abstract"), {
|
|
196
|
+
majorVersion: d,
|
|
197
|
+
minorVersion: u,
|
|
198
|
+
version: `${d}.${u}`,
|
|
199
|
+
javaLabel: n(d),
|
|
200
|
+
kind: j,
|
|
201
|
+
modifiers: M,
|
|
202
|
+
thisClass: S,
|
|
203
|
+
superClass: C,
|
|
204
|
+
interfaces: T,
|
|
205
|
+
fields: O,
|
|
206
|
+
methods: A
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
//#endregion
|
|
210
|
+
export { e as NotClassFileError, r as parseClass };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ViewerFile } from '@/composables/useFileViewer';
|
|
2
|
+
/**
|
|
3
|
+
* Live-preview support for fenced code blocks. A markdown/html/svg fence can be "run" in the side
|
|
4
|
+
* viewer (FileViewerPanel) with the code itself as inline content — no file, no fetch. This is the
|
|
5
|
+
* code-block twin of fileType.ts's {@link isHtmlFile}/{@link isSvgFile}: same render modes, but the
|
|
6
|
+
* input is a fence info-string language token (` ```html `) rather than a filename + mime.
|
|
7
|
+
*/
|
|
8
|
+
export interface CodePreview {
|
|
9
|
+
/** Synthesized extension for the viewer header (also a sensible name for its download/copy label). */
|
|
10
|
+
ext: string;
|
|
11
|
+
/** ViewerFile fields that pick the render mode: `lang` (source-view highlighting) + html/svg flags. */
|
|
12
|
+
fields: Pick<ViewerFile, 'lang' | 'html' | 'svg'>;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Map a fenced code block's language to a side-viewer preview, or null when it has no live preview
|
|
16
|
+
* (most languages — no Run button). Mirrors FileViewerPanel's render modes:
|
|
17
|
+
* - html/htm/xhtml → sandboxed iframe (lang 'xml' so the source toggle still highlights);
|
|
18
|
+
* - svg → picture (data-URL <img>, scripts never run) (lang 'xml' for source);
|
|
19
|
+
* - markdown/md → rendered document.
|
|
20
|
+
* Only the first info-string token matters, so ` ```html linenums ` still previews as HTML.
|
|
21
|
+
*/
|
|
22
|
+
export declare function codePreview(lang: string | undefined): CodePreview | null;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
//#region src/lib/codePreview.ts
|
|
2
|
+
var e = new Set([
|
|
3
|
+
"html",
|
|
4
|
+
"htm",
|
|
5
|
+
"xhtml"
|
|
6
|
+
]), t = new Set(["markdown", "md"]);
|
|
7
|
+
function n(n) {
|
|
8
|
+
let r = (n || "").trim().toLowerCase().split(/\s+/)[0];
|
|
9
|
+
return e.has(r) ? {
|
|
10
|
+
ext: "html",
|
|
11
|
+
fields: {
|
|
12
|
+
lang: "xml",
|
|
13
|
+
html: !0
|
|
14
|
+
}
|
|
15
|
+
} : r === "svg" ? {
|
|
16
|
+
ext: "svg",
|
|
17
|
+
fields: {
|
|
18
|
+
lang: "xml",
|
|
19
|
+
svg: !0
|
|
20
|
+
}
|
|
21
|
+
} : t.has(r) ? {
|
|
22
|
+
ext: "md",
|
|
23
|
+
fields: { lang: "markdown" }
|
|
24
|
+
} : null;
|
|
25
|
+
}
|
|
26
|
+
//#endregion
|
|
27
|
+
export { n as codePreview };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Indentation-based code folding for the source viewer (CodeView.vue).
|
|
3
|
+
*
|
|
4
|
+
* Deliberately language-AGNOSTIC: a foldable region is a header line followed by a run of more-deeply-indented
|
|
5
|
+
* lines (blank lines inside the run don't break it). This covers the requested languages — yaml / json / xml /
|
|
6
|
+
* html / java / kotlin / python / ts / js — because their block structure is mirrored in indentation, with no
|
|
7
|
+
* per-language parser or wasm grammar to ship (the codebase's hand-rolled, zero-dependency house style; a
|
|
8
|
+
* tree-sitter approach would mean bundling a runtime + a grammar per language). Minified or single-line files
|
|
9
|
+
* simply have nothing to fold.
|
|
10
|
+
*
|
|
11
|
+
* Returns a map of header line index (0-based) → the LAST line index belonging to its block, so folding the
|
|
12
|
+
* header hides lines header+1 … end (inclusive). Tabs are expanded to `tabSize` columns for the comparison.
|
|
13
|
+
*/
|
|
14
|
+
export declare function computeFoldRegions(code: string, tabSize?: number): Map<number, number>;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
//#region src/lib/codefold.ts
|
|
2
|
+
function e(e, n = 2) {
|
|
3
|
+
let r = e.split("\n"), i = r.map((e) => t(e, n)), a = /* @__PURE__ */ new Map();
|
|
4
|
+
for (let e = 0; e < r.length; e++) {
|
|
5
|
+
if (i[e] < 0) continue;
|
|
6
|
+
let t = e, n = e + 1;
|
|
7
|
+
for (; n < r.length;) {
|
|
8
|
+
if (i[n] < 0) {
|
|
9
|
+
n++;
|
|
10
|
+
continue;
|
|
11
|
+
}
|
|
12
|
+
if (i[n] > i[e]) t = n, n++;
|
|
13
|
+
else break;
|
|
14
|
+
}
|
|
15
|
+
t > e && a.set(e, t);
|
|
16
|
+
}
|
|
17
|
+
return a;
|
|
18
|
+
}
|
|
19
|
+
function t(e, t) {
|
|
20
|
+
let n = 0;
|
|
21
|
+
for (let r = 0; r < e.length; r++) {
|
|
22
|
+
let i = e[r];
|
|
23
|
+
if (i === " ") n++;
|
|
24
|
+
else if (i === " ") n += t - n % t;
|
|
25
|
+
else return n;
|
|
26
|
+
}
|
|
27
|
+
return -1;
|
|
28
|
+
}
|
|
29
|
+
//#endregion
|
|
30
|
+
export { e as computeFoldRegions };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* On-demand code formatting for the source viewer (CodeView), powered by Prettier — loaded LAZILY: the library
|
|
3
|
+
* and the one language plugin needed are dynamic-imported only when the user clicks 格式化, so they never weigh
|
|
4
|
+
* on the main bundle. Covers the languages Prettier can parse in the browser: js/jsx, ts/tsx, json/json5,
|
|
5
|
+
* css/scss/less, html/vue, xml/svg (via @prettier/plugin-xml), yaml, markdown, graphql. Other languages
|
|
6
|
+
* (python/java/kotlin/go/…) have no in-browser Prettier parser, so {@link canFormat} returns false and the
|
|
7
|
+
* button is hidden — consistent with the codebase's "be honest about what's supported" stance.
|
|
8
|
+
*
|
|
9
|
+
* The parser is chosen from the file EXTENSION first (precise — .html, .vue and .xml all collapse to hljs lang
|
|
10
|
+
* 'xml'), falling back to the hljs language id when no filename is available.
|
|
11
|
+
*/
|
|
12
|
+
/** Whether the source viewer should offer a 格式化 button for this file (Prettier can parse it in-browser). */
|
|
13
|
+
export declare function canFormat(ext: string, lang: string): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Format `code` with Prettier, picking the parser by extension (preferred) or hljs lang. Throws if the type is
|
|
16
|
+
* unsupported or the source doesn't parse (the caller surfaces a brief "格式化失败" and keeps the original).
|
|
17
|
+
*/
|
|
18
|
+
export declare function formatCode(code: string, opts: {
|
|
19
|
+
ext: string;
|
|
20
|
+
lang: string;
|
|
21
|
+
}): Promise<string>;
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
//#region src/lib/codeformat.ts
|
|
2
|
+
var e = {
|
|
3
|
+
parser: "babel",
|
|
4
|
+
plugins: ["babel", "estree"]
|
|
5
|
+
}, t = {
|
|
6
|
+
parser: "typescript",
|
|
7
|
+
plugins: ["typescript", "estree"]
|
|
8
|
+
}, n = {
|
|
9
|
+
parser: "json",
|
|
10
|
+
plugins: ["babel", "estree"]
|
|
11
|
+
}, r = {
|
|
12
|
+
js: e,
|
|
13
|
+
mjs: e,
|
|
14
|
+
cjs: e,
|
|
15
|
+
jsx: e,
|
|
16
|
+
ts: t,
|
|
17
|
+
mts: t,
|
|
18
|
+
cts: t,
|
|
19
|
+
tsx: t,
|
|
20
|
+
json: n,
|
|
21
|
+
jsonc: n,
|
|
22
|
+
json5: {
|
|
23
|
+
parser: "json5",
|
|
24
|
+
plugins: ["babel", "estree"]
|
|
25
|
+
},
|
|
26
|
+
css: {
|
|
27
|
+
parser: "css",
|
|
28
|
+
plugins: ["postcss"]
|
|
29
|
+
},
|
|
30
|
+
scss: {
|
|
31
|
+
parser: "scss",
|
|
32
|
+
plugins: ["postcss"]
|
|
33
|
+
},
|
|
34
|
+
sass: {
|
|
35
|
+
parser: "scss",
|
|
36
|
+
plugins: ["postcss"]
|
|
37
|
+
},
|
|
38
|
+
less: {
|
|
39
|
+
parser: "less",
|
|
40
|
+
plugins: ["postcss"]
|
|
41
|
+
},
|
|
42
|
+
html: {
|
|
43
|
+
parser: "html",
|
|
44
|
+
plugins: ["html"]
|
|
45
|
+
},
|
|
46
|
+
htm: {
|
|
47
|
+
parser: "html",
|
|
48
|
+
plugins: ["html"]
|
|
49
|
+
},
|
|
50
|
+
vue: {
|
|
51
|
+
parser: "vue",
|
|
52
|
+
plugins: ["html"]
|
|
53
|
+
},
|
|
54
|
+
xml: {
|
|
55
|
+
parser: "xml",
|
|
56
|
+
plugins: ["xml"]
|
|
57
|
+
},
|
|
58
|
+
svg: {
|
|
59
|
+
parser: "xml",
|
|
60
|
+
plugins: ["xml"]
|
|
61
|
+
},
|
|
62
|
+
yaml: {
|
|
63
|
+
parser: "yaml",
|
|
64
|
+
plugins: ["yaml"]
|
|
65
|
+
},
|
|
66
|
+
yml: {
|
|
67
|
+
parser: "yaml",
|
|
68
|
+
plugins: ["yaml"]
|
|
69
|
+
},
|
|
70
|
+
md: {
|
|
71
|
+
parser: "markdown",
|
|
72
|
+
plugins: ["markdown"]
|
|
73
|
+
},
|
|
74
|
+
markdown: {
|
|
75
|
+
parser: "markdown",
|
|
76
|
+
plugins: ["markdown"]
|
|
77
|
+
},
|
|
78
|
+
graphql: {
|
|
79
|
+
parser: "graphql",
|
|
80
|
+
plugins: ["graphql"]
|
|
81
|
+
},
|
|
82
|
+
gql: {
|
|
83
|
+
parser: "graphql",
|
|
84
|
+
plugins: ["graphql"]
|
|
85
|
+
}
|
|
86
|
+
}, i = {
|
|
87
|
+
javascript: e,
|
|
88
|
+
typescript: t,
|
|
89
|
+
json: n,
|
|
90
|
+
css: r.css,
|
|
91
|
+
scss: r.scss,
|
|
92
|
+
less: r.less,
|
|
93
|
+
yaml: r.yaml,
|
|
94
|
+
markdown: r.md,
|
|
95
|
+
graphql: r.graphql,
|
|
96
|
+
xml: r.xml
|
|
97
|
+
};
|
|
98
|
+
function a(e, t) {
|
|
99
|
+
return r[e] ?? i[t] ?? null;
|
|
100
|
+
}
|
|
101
|
+
function o(e, t) {
|
|
102
|
+
return a(e, t) != null;
|
|
103
|
+
}
|
|
104
|
+
function s(e) {
|
|
105
|
+
switch (e) {
|
|
106
|
+
case "babel": return import("prettier/plugins/babel");
|
|
107
|
+
case "estree": return import("prettier/plugins/estree");
|
|
108
|
+
case "typescript": return import("prettier/plugins/typescript");
|
|
109
|
+
case "postcss": return import("prettier/plugins/postcss");
|
|
110
|
+
case "html": return import("prettier/plugins/html");
|
|
111
|
+
case "yaml": return import("prettier/plugins/yaml");
|
|
112
|
+
case "markdown": return import("prettier/plugins/markdown");
|
|
113
|
+
case "graphql": return import("prettier/plugins/graphql");
|
|
114
|
+
case "xml": return import("@prettier/plugin-xml");
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
async function c(e, t) {
|
|
118
|
+
let n = a(t.ext, t.lang);
|
|
119
|
+
if (!n) throw Error("该类型暂不支持格式化");
|
|
120
|
+
let [r, ...i] = await Promise.all([import("prettier/standalone"), ...n.plugins.map(s)]), o = i.map((e) => e.default ?? e), c = {
|
|
121
|
+
parser: n.parser,
|
|
122
|
+
plugins: o,
|
|
123
|
+
printWidth: 100,
|
|
124
|
+
tabWidth: 2,
|
|
125
|
+
xmlWhitespaceSensitivity: "ignore"
|
|
126
|
+
};
|
|
127
|
+
return r.format(e, c);
|
|
128
|
+
}
|
|
129
|
+
//#endregion
|
|
130
|
+
export { o as canFormat, c as formatCode };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hand-rolled, zero-dependency CSV / TSV parser for the side viewer's table preview.
|
|
3
|
+
*
|
|
4
|
+
* Implements RFC 4180 quoting: a field may be wrapped in double quotes; a literal quote inside such a field is
|
|
5
|
+
* written doubled (`""` → `"`); a quoted field may contain the delimiter, CR, and LF. Outside quotes, fields
|
|
6
|
+
* split on the delimiter and rows on CRLF / LF / lone CR. The delimiter is the tab for `.tsv`, otherwise sniffed
|
|
7
|
+
* (comma / semicolon / tab / pipe — whichever occurs most on the first line, counted OUTSIDE quotes), so
|
|
8
|
+
* European `;`-separated files and tab files both render correctly. A leading UTF-8 BOM is stripped.
|
|
9
|
+
*
|
|
10
|
+
* The viewer (CsvViewer.vue) renders the rows as a table; cell text is escaped by Vue on render, so embedded
|
|
11
|
+
* markup is inert. We never trust the stored content_type — detection is extension-driven (see isCsvFile).
|
|
12
|
+
*/
|
|
13
|
+
export interface ParsedCsv {
|
|
14
|
+
rows: string[][];
|
|
15
|
+
delimiter: string;
|
|
16
|
+
/** Widest row's column count (shorter rows are padded with empty cells when rendered). */
|
|
17
|
+
cols: number;
|
|
18
|
+
}
|
|
19
|
+
export declare function parseCsv(text: string, ext?: string): ParsedCsv;
|
package/dist/lib/csv.js
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
//#region src/lib/csv.ts
|
|
2
|
+
var e = [
|
|
3
|
+
",",
|
|
4
|
+
";",
|
|
5
|
+
" ",
|
|
6
|
+
"|"
|
|
7
|
+
];
|
|
8
|
+
function t(e, t) {
|
|
9
|
+
let n = 0, r = !1;
|
|
10
|
+
for (let i = 0; i < e.length; i++) {
|
|
11
|
+
let a = e[i];
|
|
12
|
+
if (a === "\"") {
|
|
13
|
+
if (r && e[i + 1] === "\"") {
|
|
14
|
+
i++;
|
|
15
|
+
continue;
|
|
16
|
+
}
|
|
17
|
+
r = !r;
|
|
18
|
+
} else a === t && !r && n++;
|
|
19
|
+
}
|
|
20
|
+
return n;
|
|
21
|
+
}
|
|
22
|
+
function n(n, r) {
|
|
23
|
+
if (r === "tsv" || r === "tab") return " ";
|
|
24
|
+
let i = n.indexOf("\n"), a = (i >= 0 ? n.slice(0, i) : n).slice(0, 4096), o = ",", s = -1;
|
|
25
|
+
for (let n of e) {
|
|
26
|
+
let e = t(a, n);
|
|
27
|
+
e > s && (s = e, o = n);
|
|
28
|
+
}
|
|
29
|
+
return o;
|
|
30
|
+
}
|
|
31
|
+
function r(e, t) {
|
|
32
|
+
let r = e.charCodeAt(0) === 65279 ? e.slice(1) : e, i = n(r, t), a = [], o = [], s = "", c = !1, l = !1, u = r.length, d = 0, f = () => {
|
|
33
|
+
o.push(s), a.push(o), o = [], s = "", l = !1;
|
|
34
|
+
};
|
|
35
|
+
for (; d < u;) {
|
|
36
|
+
let e = r[d];
|
|
37
|
+
if (c) {
|
|
38
|
+
if (e === "\"") {
|
|
39
|
+
if (r[d + 1] === "\"") {
|
|
40
|
+
s += "\"", d += 2;
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
c = !1, d++;
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
s += e, d++;
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
if (e === "\"" && s === "") {
|
|
50
|
+
c = !0, l = !0, d++;
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
if (e === i) {
|
|
54
|
+
o.push(s), s = "", l = !0, d++;
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
if (e === "\n") {
|
|
58
|
+
f(), d++;
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
if (e === "\r") {
|
|
62
|
+
f(), r[d + 1] === "\n" ? d += 2 : d++;
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
s += e, l = !0, d++;
|
|
66
|
+
}
|
|
67
|
+
return (l || s !== "" || o.length > 0) && (o.push(s), a.push(o)), {
|
|
68
|
+
rows: a,
|
|
69
|
+
delimiter: i,
|
|
70
|
+
cols: a.reduce((e, t) => Math.max(e, t.length), 0)
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
//#endregion
|
|
74
|
+
export { r as parseCsv };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compact DES / Triple-DES (FIPS 46-3) — no dependency, no WASM.
|
|
3
|
+
*
|
|
4
|
+
* Needed for legacy PKCS#12 keystores (see lib/pkcs12.ts): the private key is stored in a
|
|
5
|
+
* pkcs8ShroudedKeyBag encrypted with `pbeWithSHA1And3-KeyTripleDES-CBC`, and WebCrypto ships no DES. This is
|
|
6
|
+
* decrypt-oriented (that's all the viewer needs) but the block cipher is symmetric, so an encrypt helper is
|
|
7
|
+
* exposed too (Triple-DES EDE needs a middle DES *encrypt* during decryption). DES is long obsolete — used
|
|
8
|
+
* here ONLY to read existing keystores, never for new encryption.
|
|
9
|
+
*
|
|
10
|
+
* Implementation is the textbook bit-permutation form (clear + obviously correct); keystores are a few KB, so
|
|
11
|
+
* the per-block array churn is irrelevant.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Triple-DES (EDE) CBC decrypt, no padding removal (the caller strips PKCS#7). `key` is 24 bytes
|
|
15
|
+
* (K1‖K2‖K3) or 16 bytes (2-key: K3=K1); `iv` is 8 bytes; `data` must be a whole number of 8-byte blocks.
|
|
16
|
+
*/
|
|
17
|
+
export declare function tripleDesCbcDecrypt(key: Uint8Array, iv: Uint8Array, data: Uint8Array): Uint8Array;
|