@walkthru-earth/objex 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 +396 -0
- package/README.md +114 -0
- package/dist/assets/favicon.svg +17 -0
- package/dist/components/CLAUDE.md +44 -0
- package/dist/components/browser/Breadcrumb.svelte +50 -0
- package/dist/components/browser/Breadcrumb.svelte.d.ts +7 -0
- package/dist/components/browser/CreateFolderDialog.svelte +98 -0
- package/dist/components/browser/CreateFolderDialog.svelte.d.ts +6 -0
- package/dist/components/browser/DeleteConfirmDialog.svelte +90 -0
- package/dist/components/browser/DeleteConfirmDialog.svelte.d.ts +8 -0
- package/dist/components/browser/DropZone.svelte +83 -0
- package/dist/components/browser/DropZone.svelte.d.ts +7 -0
- package/dist/components/browser/FileBrowser.svelte +229 -0
- package/dist/components/browser/FileBrowser.svelte.d.ts +3 -0
- package/dist/components/browser/FileRow.svelte +112 -0
- package/dist/components/browser/FileRow.svelte.d.ts +9 -0
- package/dist/components/browser/FileTreeSidebar.svelte +559 -0
- package/dist/components/browser/FileTreeSidebar.svelte.d.ts +8 -0
- package/dist/components/browser/RenameDialog.svelte +101 -0
- package/dist/components/browser/RenameDialog.svelte.d.ts +8 -0
- package/dist/components/browser/SearchBar.svelte +40 -0
- package/dist/components/browser/SearchBar.svelte.d.ts +6 -0
- package/dist/components/browser/UploadButton.svelte +65 -0
- package/dist/components/browser/UploadButton.svelte.d.ts +3 -0
- package/dist/components/editor/CodeMirrorEditor.svelte +404 -0
- package/dist/components/editor/CodeMirrorEditor.svelte.d.ts +12 -0
- package/dist/components/editor/MilkdownEditor.svelte +98 -0
- package/dist/components/editor/MilkdownEditor.svelte.d.ts +9 -0
- package/dist/components/editor/SqlEditor.svelte +173 -0
- package/dist/components/editor/SqlEditor.svelte.d.ts +7 -0
- package/dist/components/editor/SqlResultBlock.svelte +199 -0
- package/dist/components/editor/SqlResultBlock.svelte.d.ts +9 -0
- package/dist/components/layout/ConnectionDialog.svelte +439 -0
- package/dist/components/layout/ConnectionDialog.svelte.d.ts +9 -0
- package/dist/components/layout/LocaleToggle.svelte +32 -0
- package/dist/components/layout/LocaleToggle.svelte.d.ts +3 -0
- package/dist/components/layout/SafeLockToggle.svelte +37 -0
- package/dist/components/layout/SafeLockToggle.svelte.d.ts +18 -0
- package/dist/components/layout/Sidebar.svelte +314 -0
- package/dist/components/layout/Sidebar.svelte.d.ts +3 -0
- package/dist/components/layout/StatusBar.svelte +73 -0
- package/dist/components/layout/StatusBar.svelte.d.ts +3 -0
- package/dist/components/layout/TabBar.svelte +102 -0
- package/dist/components/layout/TabBar.svelte.d.ts +7 -0
- package/dist/components/layout/ThemeToggle.svelte +52 -0
- package/dist/components/layout/ThemeToggle.svelte.d.ts +3 -0
- package/dist/components/ui/badge/badge.svelte +49 -0
- package/dist/components/ui/badge/badge.svelte.d.ts +32 -0
- package/dist/components/ui/badge/index.d.ts +1 -0
- package/dist/components/ui/badge/index.js +1 -0
- package/dist/components/ui/button/button.svelte +82 -0
- package/dist/components/ui/button/button.svelte.d.ts +64 -0
- package/dist/components/ui/button/index.d.ts +2 -0
- package/dist/components/ui/button/index.js +4 -0
- package/dist/components/ui/context-menu/context-menu-checkbox-item.svelte +40 -0
- package/dist/components/ui/context-menu/context-menu-checkbox-item.svelte.d.ts +9 -0
- package/dist/components/ui/context-menu/context-menu-content.svelte +28 -0
- package/dist/components/ui/context-menu/context-menu-content.svelte.d.ts +10 -0
- package/dist/components/ui/context-menu/context-menu-group-heading.svelte +21 -0
- package/dist/components/ui/context-menu/context-menu-group-heading.svelte.d.ts +7 -0
- package/dist/components/ui/context-menu/context-menu-group.svelte +7 -0
- package/dist/components/ui/context-menu/context-menu-group.svelte.d.ts +4 -0
- package/dist/components/ui/context-menu/context-menu-item.svelte +27 -0
- package/dist/components/ui/context-menu/context-menu-item.svelte.d.ts +8 -0
- package/dist/components/ui/context-menu/context-menu-label.svelte +24 -0
- package/dist/components/ui/context-menu/context-menu-label.svelte.d.ts +8 -0
- package/dist/components/ui/context-menu/context-menu-portal.svelte +7 -0
- package/dist/components/ui/context-menu/context-menu-portal.svelte.d.ts +3 -0
- package/dist/components/ui/context-menu/context-menu-radio-group.svelte +16 -0
- package/dist/components/ui/context-menu/context-menu-radio-group.svelte.d.ts +4 -0
- package/dist/components/ui/context-menu/context-menu-radio-item.svelte +33 -0
- package/dist/components/ui/context-menu/context-menu-radio-item.svelte.d.ts +4 -0
- package/dist/components/ui/context-menu/context-menu-separator.svelte +17 -0
- package/dist/components/ui/context-menu/context-menu-separator.svelte.d.ts +4 -0
- package/dist/components/ui/context-menu/context-menu-shortcut.svelte +20 -0
- package/dist/components/ui/context-menu/context-menu-shortcut.svelte.d.ts +5 -0
- package/dist/components/ui/context-menu/context-menu-sub-content.svelte +20 -0
- package/dist/components/ui/context-menu/context-menu-sub-content.svelte.d.ts +4 -0
- package/dist/components/ui/context-menu/context-menu-sub-trigger.svelte +29 -0
- package/dist/components/ui/context-menu/context-menu-sub-trigger.svelte.d.ts +8 -0
- package/dist/components/ui/context-menu/context-menu-sub.svelte +7 -0
- package/dist/components/ui/context-menu/context-menu-sub.svelte.d.ts +3 -0
- package/dist/components/ui/context-menu/context-menu-trigger.svelte +7 -0
- package/dist/components/ui/context-menu/context-menu-trigger.svelte.d.ts +4 -0
- package/dist/components/ui/context-menu/context-menu.svelte +7 -0
- package/dist/components/ui/context-menu/context-menu.svelte.d.ts +3 -0
- package/dist/components/ui/context-menu/index.d.ts +17 -0
- package/dist/components/ui/context-menu/index.js +19 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-group.svelte +16 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-group.svelte.d.ts +4 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +43 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte.d.ts +9 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-content.svelte +29 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-content.svelte.d.ts +10 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte +22 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte.d.ts +8 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-group.svelte +7 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-group.svelte.d.ts +4 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte +27 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte.d.ts +8 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-label.svelte +24 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-label.svelte.d.ts +8 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-portal.svelte +7 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-portal.svelte.d.ts +3 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte +16 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte.d.ts +4 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte +33 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte.d.ts +4 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-separator.svelte +17 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-separator.svelte.d.ts +4 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte +20 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte.d.ts +5 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte +20 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte.d.ts +4 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +29 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte.d.ts +7 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-sub.svelte +7 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-sub.svelte.d.ts +3 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-trigger.svelte +7 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-trigger.svelte.d.ts +4 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu.svelte +7 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu.svelte.d.ts +3 -0
- package/dist/components/ui/dropdown-menu/index.d.ts +18 -0
- package/dist/components/ui/dropdown-menu/index.js +18 -0
- package/dist/components/ui/input/index.d.ts +2 -0
- package/dist/components/ui/input/index.js +4 -0
- package/dist/components/ui/input/input.svelte +52 -0
- package/dist/components/ui/input/input.svelte.d.ts +13 -0
- package/dist/components/ui/resizable/index.d.ts +4 -0
- package/dist/components/ui/resizable/index.js +6 -0
- package/dist/components/ui/resizable/resizable-handle.svelte +30 -0
- package/dist/components/ui/resizable/resizable-handle.svelte.d.ts +8 -0
- package/dist/components/ui/resizable/resizable-pane-group.svelte +20 -0
- package/dist/components/ui/resizable/resizable-pane-group.svelte.d.ts +7 -0
- package/dist/components/ui/scroll-area/index.d.ts +3 -0
- package/dist/components/ui/scroll-area/index.js +5 -0
- package/dist/components/ui/scroll-area/scroll-area-scrollbar.svelte +31 -0
- package/dist/components/ui/scroll-area/scroll-area-scrollbar.svelte.d.ts +4 -0
- package/dist/components/ui/scroll-area/scroll-area.svelte +47 -0
- package/dist/components/ui/scroll-area/scroll-area.svelte.d.ts +11 -0
- package/dist/components/ui/separator/index.d.ts +2 -0
- package/dist/components/ui/separator/index.js +4 -0
- package/dist/components/ui/separator/separator.svelte +21 -0
- package/dist/components/ui/separator/separator.svelte.d.ts +4 -0
- package/dist/components/ui/sheet/index.d.ts +11 -0
- package/dist/components/ui/sheet/index.js +13 -0
- package/dist/components/ui/sheet/sheet-close.svelte +7 -0
- package/dist/components/ui/sheet/sheet-close.svelte.d.ts +4 -0
- package/dist/components/ui/sheet/sheet-content.svelte +62 -0
- package/dist/components/ui/sheet/sheet-content.svelte.d.ts +37 -0
- package/dist/components/ui/sheet/sheet-description.svelte +17 -0
- package/dist/components/ui/sheet/sheet-description.svelte.d.ts +4 -0
- package/dist/components/ui/sheet/sheet-footer.svelte +20 -0
- package/dist/components/ui/sheet/sheet-footer.svelte.d.ts +5 -0
- package/dist/components/ui/sheet/sheet-header.svelte +20 -0
- package/dist/components/ui/sheet/sheet-header.svelte.d.ts +5 -0
- package/dist/components/ui/sheet/sheet-overlay.svelte +20 -0
- package/dist/components/ui/sheet/sheet-overlay.svelte.d.ts +4 -0
- package/dist/components/ui/sheet/sheet-portal.svelte +7 -0
- package/dist/components/ui/sheet/sheet-portal.svelte.d.ts +3 -0
- package/dist/components/ui/sheet/sheet-title.svelte +13 -0
- package/dist/components/ui/sheet/sheet-title.svelte.d.ts +4 -0
- package/dist/components/ui/sheet/sheet-trigger.svelte +7 -0
- package/dist/components/ui/sheet/sheet-trigger.svelte.d.ts +4 -0
- package/dist/components/ui/sheet/sheet.svelte +7 -0
- package/dist/components/ui/sheet/sheet.svelte.d.ts +3 -0
- package/dist/components/ui/switch/index.d.ts +2 -0
- package/dist/components/ui/switch/index.js +4 -0
- package/dist/components/ui/switch/switch.svelte +28 -0
- package/dist/components/ui/switch/switch.svelte.d.ts +8 -0
- package/dist/components/ui/tabs/index.d.ts +5 -0
- package/dist/components/ui/tabs/index.js +7 -0
- package/dist/components/ui/tabs/tabs-content.svelte +17 -0
- package/dist/components/ui/tabs/tabs-content.svelte.d.ts +4 -0
- package/dist/components/ui/tabs/tabs-list.svelte +16 -0
- package/dist/components/ui/tabs/tabs-list.svelte.d.ts +4 -0
- package/dist/components/ui/tabs/tabs-trigger.svelte +20 -0
- package/dist/components/ui/tabs/tabs-trigger.svelte.d.ts +4 -0
- package/dist/components/ui/tabs/tabs.svelte +19 -0
- package/dist/components/ui/tabs/tabs.svelte.d.ts +4 -0
- package/dist/components/ui/tooltip/index.d.ts +6 -0
- package/dist/components/ui/tooltip/index.js +8 -0
- package/dist/components/ui/tooltip/tooltip-content.svelte +52 -0
- package/dist/components/ui/tooltip/tooltip-content.svelte.d.ts +11 -0
- package/dist/components/ui/tooltip/tooltip-portal.svelte +7 -0
- package/dist/components/ui/tooltip/tooltip-portal.svelte.d.ts +4 -0
- package/dist/components/ui/tooltip/tooltip-provider.svelte +7 -0
- package/dist/components/ui/tooltip/tooltip-provider.svelte.d.ts +4 -0
- package/dist/components/ui/tooltip/tooltip-trigger.svelte +7 -0
- package/dist/components/ui/tooltip/tooltip-trigger.svelte.d.ts +4 -0
- package/dist/components/ui/tooltip/tooltip.svelte +7 -0
- package/dist/components/ui/tooltip/tooltip.svelte.d.ts +4 -0
- package/dist/components/viewers/ArchiveViewer.svelte +586 -0
- package/dist/components/viewers/ArchiveViewer.svelte.d.ts +7 -0
- package/dist/components/viewers/CLAUDE.md +60 -0
- package/dist/components/viewers/CodeViewer.svelte +553 -0
- package/dist/components/viewers/CodeViewer.svelte.d.ts +7 -0
- package/dist/components/viewers/CogViewer.svelte +1345 -0
- package/dist/components/viewers/CogViewer.svelte.d.ts +7 -0
- package/dist/components/viewers/CopcViewer.svelte +25 -0
- package/dist/components/viewers/CopcViewer.svelte.d.ts +7 -0
- package/dist/components/viewers/DatabaseViewer.svelte +169 -0
- package/dist/components/viewers/DatabaseViewer.svelte.d.ts +7 -0
- package/dist/components/viewers/FileInfo.svelte +174 -0
- package/dist/components/viewers/FileInfo.svelte.d.ts +10 -0
- package/dist/components/viewers/FlatGeobufViewer.svelte +755 -0
- package/dist/components/viewers/FlatGeobufViewer.svelte.d.ts +7 -0
- package/dist/components/viewers/GeoParquetMapViewer.svelte +278 -0
- package/dist/components/viewers/GeoParquetMapViewer.svelte.d.ts +17 -0
- package/dist/components/viewers/ImageViewer.svelte +233 -0
- package/dist/components/viewers/ImageViewer.svelte.d.ts +7 -0
- package/dist/components/viewers/LoadProgress.svelte +93 -0
- package/dist/components/viewers/LoadProgress.svelte.d.ts +15 -0
- package/dist/components/viewers/MapViewer.svelte +234 -0
- package/dist/components/viewers/MapViewer.svelte.d.ts +7 -0
- package/dist/components/viewers/MarkdownViewer.svelte +478 -0
- package/dist/components/viewers/MarkdownViewer.svelte.d.ts +7 -0
- package/dist/components/viewers/MediaViewer.svelte +121 -0
- package/dist/components/viewers/MediaViewer.svelte.d.ts +7 -0
- package/dist/components/viewers/ModelViewer.svelte +164 -0
- package/dist/components/viewers/ModelViewer.svelte.d.ts +7 -0
- package/dist/components/viewers/NotebookViewer.svelte +389 -0
- package/dist/components/viewers/NotebookViewer.svelte.d.ts +7 -0
- package/dist/components/viewers/PdfViewer.svelte +278 -0
- package/dist/components/viewers/PdfViewer.svelte.d.ts +7 -0
- package/dist/components/viewers/PmtilesViewer.svelte +191 -0
- package/dist/components/viewers/PmtilesViewer.svelte.d.ts +7 -0
- package/dist/components/viewers/QueryHistoryPanel.svelte +159 -0
- package/dist/components/viewers/QueryHistoryPanel.svelte.d.ts +8 -0
- package/dist/components/viewers/RawViewer.svelte +117 -0
- package/dist/components/viewers/RawViewer.svelte.d.ts +7 -0
- package/dist/components/viewers/StacMapViewer.svelte +20 -0
- package/dist/components/viewers/StacMapViewer.svelte.d.ts +7 -0
- package/dist/components/viewers/StyleEditorOverlay.svelte +27 -0
- package/dist/components/viewers/StyleEditorOverlay.svelte.d.ts +7 -0
- package/dist/components/viewers/TableGrid.svelte +355 -0
- package/dist/components/viewers/TableGrid.svelte.d.ts +12 -0
- package/dist/components/viewers/TableStatusBar.svelte +92 -0
- package/dist/components/viewers/TableStatusBar.svelte.d.ts +11 -0
- package/dist/components/viewers/TableToolbar.svelte +382 -0
- package/dist/components/viewers/TableToolbar.svelte.d.ts +25 -0
- package/dist/components/viewers/TableViewer.svelte +923 -0
- package/dist/components/viewers/TableViewer.svelte.d.ts +7 -0
- package/dist/components/viewers/ViewerRouter.svelte +70 -0
- package/dist/components/viewers/ViewerRouter.svelte.d.ts +7 -0
- package/dist/components/viewers/ZarrMapViewer.svelte +288 -0
- package/dist/components/viewers/ZarrMapViewer.svelte.d.ts +17 -0
- package/dist/components/viewers/ZarrViewer.svelte +256 -0
- package/dist/components/viewers/ZarrViewer.svelte.d.ts +7 -0
- package/dist/components/viewers/map/AttributeTable.svelte +52 -0
- package/dist/components/viewers/map/AttributeTable.svelte.d.ts +8 -0
- package/dist/components/viewers/map/MapContainer.svelte +158 -0
- package/dist/components/viewers/map/MapContainer.svelte.d.ts +12 -0
- package/dist/components/viewers/pmtiles/PmtilesArchiveView.svelte +389 -0
- package/dist/components/viewers/pmtiles/PmtilesArchiveView.svelte.d.ts +10 -0
- package/dist/components/viewers/pmtiles/PmtilesMapView.svelte +332 -0
- package/dist/components/viewers/pmtiles/PmtilesMapView.svelte.d.ts +11 -0
- package/dist/components/viewers/pmtiles/PmtilesTileInspector.svelte +373 -0
- package/dist/components/viewers/pmtiles/PmtilesTileInspector.svelte.d.ts +12 -0
- package/dist/components/viewers/pmtiles/SvgTileRenderer.svelte +112 -0
- package/dist/components/viewers/pmtiles/SvgTileRenderer.svelte.d.ts +10 -0
- package/dist/file-icons/CLAUDE.md +21 -0
- package/dist/file-icons/FileTypeIcon.svelte +74 -0
- package/dist/file-icons/FileTypeIcon.svelte.d.ts +9 -0
- package/dist/file-icons/index.d.ts +56 -0
- package/dist/file-icons/index.js +1070 -0
- package/dist/i18n/CLAUDE.md +19 -0
- package/dist/i18n/ar.d.ts +1 -0
- package/dist/i18n/ar.js +404 -0
- package/dist/i18n/en.d.ts +1 -0
- package/dist/i18n/en.js +404 -0
- package/dist/i18n/index.svelte.d.ts +9 -0
- package/dist/i18n/index.svelte.js +27 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.js +13 -0
- package/dist/query/CLAUDE.md +22 -0
- package/dist/query/engine.d.ts +56 -0
- package/dist/query/engine.js +6 -0
- package/dist/query/index.d.ts +4 -0
- package/dist/query/index.js +19 -0
- package/dist/query/wasm.d.ts +20 -0
- package/dist/query/wasm.js +890 -0
- package/dist/storage/CLAUDE.md +23 -0
- package/dist/storage/adapter.d.ts +21 -0
- package/dist/storage/adapter.js +1 -0
- package/dist/storage/browser-azure.d.ts +25 -0
- package/dist/storage/browser-azure.js +271 -0
- package/dist/storage/browser-cloud.d.ts +32 -0
- package/dist/storage/browser-cloud.js +293 -0
- package/dist/storage/index.d.ts +11 -0
- package/dist/storage/index.js +37 -0
- package/dist/storage/url-adapter.d.ts +19 -0
- package/dist/storage/url-adapter.js +51 -0
- package/dist/stores/CLAUDE.md +29 -0
- package/dist/stores/browser.svelte.d.ts +28 -0
- package/dist/stores/browser.svelte.js +160 -0
- package/dist/stores/connections.svelte.d.ts +56 -0
- package/dist/stores/connections.svelte.js +272 -0
- package/dist/stores/credentials.svelte.d.ts +56 -0
- package/dist/stores/credentials.svelte.js +79 -0
- package/dist/stores/files.svelte.d.ts +20 -0
- package/dist/stores/files.svelte.js +76 -0
- package/dist/stores/query-history.svelte.d.ts +16 -0
- package/dist/stores/query-history.svelte.js +57 -0
- package/dist/stores/safelock.svelte.d.ts +8 -0
- package/dist/stores/safelock.svelte.js +52 -0
- package/dist/stores/settings.svelte.d.ts +11 -0
- package/dist/stores/settings.svelte.js +101 -0
- package/dist/stores/tab-resources.svelte.d.ts +25 -0
- package/dist/stores/tab-resources.svelte.js +61 -0
- package/dist/stores/tabs.svelte.d.ts +17 -0
- package/dist/stores/tabs.svelte.js +110 -0
- package/dist/types/notebookjs.d.ts +14 -0
- package/dist/types.d.ts +47 -0
- package/dist/types.js +1 -0
- package/dist/utils/CLAUDE.md +54 -0
- package/dist/utils/analytics.d.ts +10 -0
- package/dist/utils/analytics.js +38 -0
- package/dist/utils/archive.d.ts +70 -0
- package/dist/utils/archive.js +333 -0
- package/dist/utils/column-types.d.ts +5 -0
- package/dist/utils/column-types.js +137 -0
- package/dist/utils/deck.d.ts +98 -0
- package/dist/utils/deck.js +208 -0
- package/dist/utils/evidence-context.d.ts +22 -0
- package/dist/utils/evidence-context.js +56 -0
- package/dist/utils/export.d.ts +2 -0
- package/dist/utils/export.js +51 -0
- package/dist/utils/format.d.ts +14 -0
- package/dist/utils/format.js +56 -0
- package/dist/utils/geoarrow.d.ts +32 -0
- package/dist/utils/geoarrow.js +672 -0
- package/dist/utils/hex.d.ts +10 -0
- package/dist/utils/hex.js +27 -0
- package/dist/utils/host-detection.d.ts +23 -0
- package/dist/utils/host-detection.js +289 -0
- package/dist/utils/map-selection.d.ts +12 -0
- package/dist/utils/map-selection.js +45 -0
- package/dist/utils/markdown-sql.d.ts +30 -0
- package/dist/utils/markdown-sql.js +73 -0
- package/dist/utils/markdown.d.ts +18 -0
- package/dist/utils/markdown.js +146 -0
- package/dist/utils/model3d.d.ts +13 -0
- package/dist/utils/model3d.js +62 -0
- package/dist/utils/parquet-metadata.d.ts +58 -0
- package/dist/utils/parquet-metadata.js +228 -0
- package/dist/utils/pdf.d.ts +8 -0
- package/dist/utils/pdf.js +28 -0
- package/dist/utils/pmtiles-tile.d.ts +38 -0
- package/dist/utils/pmtiles-tile.js +64 -0
- package/dist/utils/pmtiles.d.ts +46 -0
- package/dist/utils/pmtiles.js +135 -0
- package/dist/utils/shiki.d.ts +8 -0
- package/dist/utils/shiki.js +98 -0
- package/dist/utils/storage-url.d.ts +64 -0
- package/dist/utils/storage-url.js +374 -0
- package/dist/utils/url-state.d.ts +40 -0
- package/dist/utils/url-state.js +113 -0
- package/dist/utils/url.d.ts +27 -0
- package/dist/utils/url.js +115 -0
- package/dist/utils/wkb.d.ts +43 -0
- package/dist/utils/wkb.js +345 -0
- package/dist/utils/zarr.d.ts +39 -0
- package/dist/utils/zarr.js +204 -0
- package/dist/utils.d.ts +12 -0
- package/dist/utils.js +5 -0
- package/package.json +203 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { BundledLanguage, BundledTheme } from 'shiki';
|
|
2
|
+
export declare function extensionToShikiLang(ext: string): BundledLanguage | undefined;
|
|
3
|
+
export declare function getTheme(): BundledTheme;
|
|
4
|
+
/** Reversed theme for code blocks inside documents (dark on light, light on dark). */
|
|
5
|
+
export declare function getReversedTheme(): BundledTheme;
|
|
6
|
+
export declare function highlightCode(code: string, lang?: BundledLanguage): Promise<string>;
|
|
7
|
+
/** Highlight with reversed theme (for code blocks inside documents). */
|
|
8
|
+
export declare function highlightCodeReversed(code: string, lang?: BundledLanguage): Promise<string>;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
let highlighterPromise = null;
|
|
2
|
+
const extToLang = {
|
|
3
|
+
'.js': 'javascript',
|
|
4
|
+
'.mjs': 'javascript',
|
|
5
|
+
'.cjs': 'javascript',
|
|
6
|
+
'.jsx': 'jsx',
|
|
7
|
+
'.ts': 'typescript',
|
|
8
|
+
'.tsx': 'tsx',
|
|
9
|
+
'.py': 'python',
|
|
10
|
+
'.rs': 'rust',
|
|
11
|
+
'.go': 'go',
|
|
12
|
+
'.java': 'java',
|
|
13
|
+
'.c': 'c',
|
|
14
|
+
'.cpp': 'cpp',
|
|
15
|
+
'.h': 'c',
|
|
16
|
+
'.hpp': 'cpp',
|
|
17
|
+
'.rb': 'ruby',
|
|
18
|
+
'.php': 'php',
|
|
19
|
+
'.swift': 'swift',
|
|
20
|
+
'.kt': 'kotlin',
|
|
21
|
+
'.scala': 'scala',
|
|
22
|
+
'.r': 'r',
|
|
23
|
+
'.lua': 'lua',
|
|
24
|
+
'.sql': 'sql',
|
|
25
|
+
'.html': 'html',
|
|
26
|
+
'.css': 'css',
|
|
27
|
+
'.scss': 'scss',
|
|
28
|
+
'.less': 'less',
|
|
29
|
+
'.xml': 'xml',
|
|
30
|
+
'.yaml': 'yaml',
|
|
31
|
+
'.yml': 'yaml',
|
|
32
|
+
'.toml': 'toml',
|
|
33
|
+
'.json': 'json',
|
|
34
|
+
'.jsonl': 'json',
|
|
35
|
+
'.ndjson': 'json',
|
|
36
|
+
'.sh': 'bash',
|
|
37
|
+
'.bash': 'bash',
|
|
38
|
+
'.zsh': 'bash',
|
|
39
|
+
'.fish': 'fish',
|
|
40
|
+
'.ps1': 'powershell',
|
|
41
|
+
'.vim': 'viml',
|
|
42
|
+
'.dockerfile': 'dockerfile',
|
|
43
|
+
'.makefile': 'makefile',
|
|
44
|
+
'.md': 'markdown',
|
|
45
|
+
'.markdown': 'markdown',
|
|
46
|
+
'.ini': 'ini',
|
|
47
|
+
'.cfg': 'ini',
|
|
48
|
+
'.conf': 'ini',
|
|
49
|
+
'.env': 'dotenv',
|
|
50
|
+
'.svelte': 'svelte',
|
|
51
|
+
'.vue': 'vue',
|
|
52
|
+
'.tf': 'hcl',
|
|
53
|
+
'.graphql': 'graphql',
|
|
54
|
+
'.gql': 'graphql',
|
|
55
|
+
'.prisma': 'prisma',
|
|
56
|
+
'.proto': 'proto'
|
|
57
|
+
};
|
|
58
|
+
export function extensionToShikiLang(ext) {
|
|
59
|
+
return extToLang[ext.toLowerCase()];
|
|
60
|
+
}
|
|
61
|
+
function isDarkMode() {
|
|
62
|
+
if (typeof document === 'undefined')
|
|
63
|
+
return false;
|
|
64
|
+
return document.documentElement.classList.contains('dark');
|
|
65
|
+
}
|
|
66
|
+
export function getTheme() {
|
|
67
|
+
return isDarkMode() ? 'github-dark' : 'github-light';
|
|
68
|
+
}
|
|
69
|
+
/** Reversed theme for code blocks inside documents (dark on light, light on dark). */
|
|
70
|
+
export function getReversedTheme() {
|
|
71
|
+
return isDarkMode() ? 'github-light' : 'github-dark';
|
|
72
|
+
}
|
|
73
|
+
async function getHighlighter() {
|
|
74
|
+
if (!highlighterPromise) {
|
|
75
|
+
highlighterPromise = import('shiki').then((mod) => mod.createHighlighter({
|
|
76
|
+
themes: ['github-dark', 'github-light'],
|
|
77
|
+
langs: Object.values(extToLang).filter((v, i, a) => a.indexOf(v) === i)
|
|
78
|
+
}));
|
|
79
|
+
}
|
|
80
|
+
return highlighterPromise;
|
|
81
|
+
}
|
|
82
|
+
export async function highlightCode(code, lang) {
|
|
83
|
+
const highlighter = await getHighlighter();
|
|
84
|
+
const theme = getTheme();
|
|
85
|
+
return highlighter.codeToHtml(code, {
|
|
86
|
+
lang: lang ?? 'text',
|
|
87
|
+
theme
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
/** Highlight with reversed theme (for code blocks inside documents). */
|
|
91
|
+
export async function highlightCodeReversed(code, lang) {
|
|
92
|
+
const highlighter = await getHighlighter();
|
|
93
|
+
const theme = getReversedTheme();
|
|
94
|
+
return highlighter.codeToHtml(code, {
|
|
95
|
+
lang: lang ?? 'text',
|
|
96
|
+
theme
|
|
97
|
+
});
|
|
98
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Universal cloud storage URL / bucket parser.
|
|
3
|
+
*
|
|
4
|
+
* Accepts the many URI/URL formats that users commonly paste and extracts
|
|
5
|
+
* the correct bucket, region, endpoint, and provider.
|
|
6
|
+
*
|
|
7
|
+
* Supported URI schemes:
|
|
8
|
+
* s3:// s3a:// s3n:// aws:// — Amazon S3 / S3-compatible
|
|
9
|
+
* r2:// — Cloudflare R2
|
|
10
|
+
* gs:// gcs:// — Google Cloud Storage
|
|
11
|
+
* azure:// az:// — Azure Blob Storage
|
|
12
|
+
* abfs:// abfss:// — Azure Data Lake (ADLS Gen2)
|
|
13
|
+
* wasbs:// — Azure Blob (Hadoop WASB driver)
|
|
14
|
+
* swift:// — OpenStack Swift
|
|
15
|
+
* file:// filesystem:// — Local filesystem
|
|
16
|
+
*
|
|
17
|
+
* Supported HTTPS URL patterns:
|
|
18
|
+
* https://<bucket>.s3.<region>.amazonaws.com[/prefix] — AWS virtual-hosted
|
|
19
|
+
* https://s3.<region>.amazonaws.com/<bucket>[/prefix] — AWS path-style
|
|
20
|
+
* https://s3.amazonaws.com/<bucket> — AWS global
|
|
21
|
+
* https://<account>.r2.cloudflarestorage.com/<bucket> — Cloudflare R2
|
|
22
|
+
* https://storage.googleapis.com/<bucket> — Google Cloud Storage
|
|
23
|
+
* https://<bucket>.storage.googleapis.com[/prefix] — GCS virtual-hosted
|
|
24
|
+
* https://<bucket>.<region>.digitaloceanspaces.com — DigitalOcean Spaces
|
|
25
|
+
* https://<region>.digitaloceanspaces.com/<bucket> — DO Spaces path-style
|
|
26
|
+
* https://s3.<region>.wasabisys.com/<bucket> — Wasabi
|
|
27
|
+
* https://f<id>.backblazeb2.com/file/<bucket> — Backblaze B2
|
|
28
|
+
* https://<bucket>.s3.<region>.backblazeb2.com — B2 S3-compatible
|
|
29
|
+
* https://<bucket>.oss-<region>.aliyuncs.com — Alibaba Cloud OSS
|
|
30
|
+
* https://<bucket>.cos.<region>.myqcloud.com — Tencent COS
|
|
31
|
+
* https://storage.yandexcloud.net/<bucket> — Yandex Cloud
|
|
32
|
+
* https://gateway.storjshare.io/<bucket> — Storj S3 gateway
|
|
33
|
+
* https://link.storjshare.io/raw/<access>/<bucket> — Storj linksharing
|
|
34
|
+
* https://<custom-endpoint>/<bucket> — Generic S3-compatible
|
|
35
|
+
*
|
|
36
|
+
* Also handles plain bucket names (no protocol).
|
|
37
|
+
*/
|
|
38
|
+
export type StorageProvider = 's3' | 'gcs' | 'r2' | 'minio' | 'azure' | 'storj' | 'unknown';
|
|
39
|
+
export interface ParsedStorageUrl {
|
|
40
|
+
bucket: string;
|
|
41
|
+
region: string;
|
|
42
|
+
endpoint: string;
|
|
43
|
+
provider: StorageProvider;
|
|
44
|
+
/** Original prefix/path after bucket, if any */
|
|
45
|
+
prefix: string;
|
|
46
|
+
}
|
|
47
|
+
export interface Defaults {
|
|
48
|
+
region?: string;
|
|
49
|
+
endpoint?: string;
|
|
50
|
+
provider?: StorageProvider;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Parse a user-provided bucket/URL string into structured storage connection parts.
|
|
54
|
+
*/
|
|
55
|
+
export declare function parseStorageUrl(input: string, defaults?: Defaults): ParsedStorageUrl;
|
|
56
|
+
/**
|
|
57
|
+
* Returns true if the input looks like a URL/URI rather than a plain bucket name.
|
|
58
|
+
* Covers all recognized cloud storage URI schemes.
|
|
59
|
+
*/
|
|
60
|
+
export declare function looksLikeUrl(input: string): boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Given a parsed URL result, build a human-readable summary of what was detected.
|
|
63
|
+
*/
|
|
64
|
+
export declare function describeParseResult(parsed: ParsedStorageUrl): string;
|
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Universal cloud storage URL / bucket parser.
|
|
3
|
+
*
|
|
4
|
+
* Accepts the many URI/URL formats that users commonly paste and extracts
|
|
5
|
+
* the correct bucket, region, endpoint, and provider.
|
|
6
|
+
*
|
|
7
|
+
* Supported URI schemes:
|
|
8
|
+
* s3:// s3a:// s3n:// aws:// — Amazon S3 / S3-compatible
|
|
9
|
+
* r2:// — Cloudflare R2
|
|
10
|
+
* gs:// gcs:// — Google Cloud Storage
|
|
11
|
+
* azure:// az:// — Azure Blob Storage
|
|
12
|
+
* abfs:// abfss:// — Azure Data Lake (ADLS Gen2)
|
|
13
|
+
* wasbs:// — Azure Blob (Hadoop WASB driver)
|
|
14
|
+
* swift:// — OpenStack Swift
|
|
15
|
+
* file:// filesystem:// — Local filesystem
|
|
16
|
+
*
|
|
17
|
+
* Supported HTTPS URL patterns:
|
|
18
|
+
* https://<bucket>.s3.<region>.amazonaws.com[/prefix] — AWS virtual-hosted
|
|
19
|
+
* https://s3.<region>.amazonaws.com/<bucket>[/prefix] — AWS path-style
|
|
20
|
+
* https://s3.amazonaws.com/<bucket> — AWS global
|
|
21
|
+
* https://<account>.r2.cloudflarestorage.com/<bucket> — Cloudflare R2
|
|
22
|
+
* https://storage.googleapis.com/<bucket> — Google Cloud Storage
|
|
23
|
+
* https://<bucket>.storage.googleapis.com[/prefix] — GCS virtual-hosted
|
|
24
|
+
* https://<bucket>.<region>.digitaloceanspaces.com — DigitalOcean Spaces
|
|
25
|
+
* https://<region>.digitaloceanspaces.com/<bucket> — DO Spaces path-style
|
|
26
|
+
* https://s3.<region>.wasabisys.com/<bucket> — Wasabi
|
|
27
|
+
* https://f<id>.backblazeb2.com/file/<bucket> — Backblaze B2
|
|
28
|
+
* https://<bucket>.s3.<region>.backblazeb2.com — B2 S3-compatible
|
|
29
|
+
* https://<bucket>.oss-<region>.aliyuncs.com — Alibaba Cloud OSS
|
|
30
|
+
* https://<bucket>.cos.<region>.myqcloud.com — Tencent COS
|
|
31
|
+
* https://storage.yandexcloud.net/<bucket> — Yandex Cloud
|
|
32
|
+
* https://gateway.storjshare.io/<bucket> — Storj S3 gateway
|
|
33
|
+
* https://link.storjshare.io/raw/<access>/<bucket> — Storj linksharing
|
|
34
|
+
* https://<custom-endpoint>/<bucket> — Generic S3-compatible
|
|
35
|
+
*
|
|
36
|
+
* Also handles plain bucket names (no protocol).
|
|
37
|
+
*/
|
|
38
|
+
/** All recognized URI scheme prefixes (lowercase) */
|
|
39
|
+
const SCHEME_MAP = {
|
|
40
|
+
's3://': { provider: 's3', strip: 5 },
|
|
41
|
+
's3a://': { provider: 's3', strip: 6 },
|
|
42
|
+
's3n://': { provider: 's3', strip: 6 },
|
|
43
|
+
'aws://': { provider: 's3', strip: 6 },
|
|
44
|
+
'r2://': { provider: 'r2', strip: 5 },
|
|
45
|
+
'gs://': { provider: 'gcs', strip: 5 },
|
|
46
|
+
'gcs://': { provider: 'gcs', strip: 6 },
|
|
47
|
+
'azure://': { provider: 'azure', strip: 8 },
|
|
48
|
+
'az://': { provider: 'azure', strip: 5 },
|
|
49
|
+
'abfs://': { provider: 'azure', strip: 7 },
|
|
50
|
+
'abfss://': { provider: 'azure', strip: 8 },
|
|
51
|
+
'wasbs://': { provider: 'azure', strip: 8 },
|
|
52
|
+
'adl://': { provider: 'azure', strip: 6 },
|
|
53
|
+
'storj://': { provider: 'storj', strip: 8 },
|
|
54
|
+
'sj://': { provider: 'storj', strip: 5 },
|
|
55
|
+
'swift://': { provider: 'unknown', strip: 8 }
|
|
56
|
+
};
|
|
57
|
+
function defaultResult(defaults) {
|
|
58
|
+
return {
|
|
59
|
+
bucket: '',
|
|
60
|
+
region: defaults.region || 'us-east-1',
|
|
61
|
+
endpoint: defaults.endpoint || '',
|
|
62
|
+
provider: defaults.provider || 's3',
|
|
63
|
+
prefix: ''
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
function splitBucketPrefix(rest) {
|
|
67
|
+
const slashIdx = rest.indexOf('/');
|
|
68
|
+
if (slashIdx >= 0) {
|
|
69
|
+
return {
|
|
70
|
+
bucket: rest.slice(0, slashIdx),
|
|
71
|
+
prefix: rest.slice(slashIdx + 1).replace(/\/+$/, '')
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
return { bucket: rest, prefix: '' };
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Parse a user-provided bucket/URL string into structured storage connection parts.
|
|
78
|
+
*/
|
|
79
|
+
export function parseStorageUrl(input, defaults = {}) {
|
|
80
|
+
const trimmed = input.trim();
|
|
81
|
+
// ── Custom URI schemes (s3://, gs://, r2://, az://, etc.) ──────────
|
|
82
|
+
const lower = trimmed.toLowerCase();
|
|
83
|
+
for (const [scheme, { provider, strip }] of Object.entries(SCHEME_MAP)) {
|
|
84
|
+
if (lower.startsWith(scheme)) {
|
|
85
|
+
const rest = trimmed.slice(strip);
|
|
86
|
+
const { bucket, prefix } = splitBucketPrefix(rest);
|
|
87
|
+
return {
|
|
88
|
+
bucket,
|
|
89
|
+
region: defaults.region || 'us-east-1',
|
|
90
|
+
endpoint: defaults.endpoint || '',
|
|
91
|
+
provider,
|
|
92
|
+
prefix
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// ── HTTP(S) URL ─────────────────────────────────────────────────
|
|
97
|
+
if (lower.startsWith('http://') || lower.startsWith('https://')) {
|
|
98
|
+
try {
|
|
99
|
+
const url = new URL(trimmed);
|
|
100
|
+
const host = url.hostname;
|
|
101
|
+
const pathParts = url.pathname.replace(/^\//, '').split('/').filter(Boolean);
|
|
102
|
+
// --- AWS S3 ---
|
|
103
|
+
// Virtual-hosted: <bucket>.s3.<region>.amazonaws.com
|
|
104
|
+
const awsVhost = host.match(/^(.+)\.s3[.-]([a-z0-9-]+)\.amazonaws\.com$/);
|
|
105
|
+
if (awsVhost) {
|
|
106
|
+
return {
|
|
107
|
+
bucket: awsVhost[1],
|
|
108
|
+
region: awsVhost[2],
|
|
109
|
+
endpoint: '',
|
|
110
|
+
provider: 's3',
|
|
111
|
+
prefix: pathParts.join('/')
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
// Path-style: s3.<region>.amazonaws.com/<bucket>
|
|
115
|
+
const awsPath = host.match(/^s3[.-]([a-z0-9-]+)\.amazonaws\.com$/);
|
|
116
|
+
if (awsPath && pathParts.length > 0) {
|
|
117
|
+
return {
|
|
118
|
+
bucket: pathParts[0],
|
|
119
|
+
region: awsPath[1],
|
|
120
|
+
endpoint: '',
|
|
121
|
+
provider: 's3',
|
|
122
|
+
prefix: pathParts.slice(1).join('/')
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
// Global: s3.amazonaws.com/<bucket>
|
|
126
|
+
if (host === 's3.amazonaws.com' && pathParts.length > 0) {
|
|
127
|
+
return {
|
|
128
|
+
bucket: pathParts[0],
|
|
129
|
+
region: defaults.region || 'us-east-1',
|
|
130
|
+
endpoint: '',
|
|
131
|
+
provider: 's3',
|
|
132
|
+
prefix: pathParts.slice(1).join('/')
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
// --- Cloudflare R2 ---
|
|
136
|
+
// <account>.r2.cloudflarestorage.com/<bucket>
|
|
137
|
+
const r2Match = host.match(/^([a-z0-9]+)\.r2\.cloudflarestorage\.com$/);
|
|
138
|
+
if (r2Match && pathParts.length > 0) {
|
|
139
|
+
return {
|
|
140
|
+
bucket: pathParts[0],
|
|
141
|
+
region: 'auto',
|
|
142
|
+
endpoint: `${url.protocol}//${url.host}`,
|
|
143
|
+
provider: 'r2',
|
|
144
|
+
prefix: pathParts.slice(1).join('/')
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
// --- Google Cloud Storage ---
|
|
148
|
+
// storage.googleapis.com/<bucket>
|
|
149
|
+
if (host === 'storage.googleapis.com' && pathParts.length > 0) {
|
|
150
|
+
return {
|
|
151
|
+
bucket: pathParts[0],
|
|
152
|
+
region: defaults.region || 'us',
|
|
153
|
+
endpoint: '',
|
|
154
|
+
provider: 'gcs',
|
|
155
|
+
prefix: pathParts.slice(1).join('/')
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
// <bucket>.storage.googleapis.com
|
|
159
|
+
const gcsVhost = host.match(/^(.+)\.storage\.googleapis\.com$/);
|
|
160
|
+
if (gcsVhost) {
|
|
161
|
+
return {
|
|
162
|
+
bucket: gcsVhost[1],
|
|
163
|
+
region: defaults.region || 'us',
|
|
164
|
+
endpoint: '',
|
|
165
|
+
provider: 'gcs',
|
|
166
|
+
prefix: pathParts.join('/')
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
// --- DigitalOcean Spaces ---
|
|
170
|
+
// <bucket>.<region>.digitaloceanspaces.com
|
|
171
|
+
const doVhost = host.match(/^(.+)\.([a-z0-9-]+)\.digitaloceanspaces\.com$/);
|
|
172
|
+
if (doVhost) {
|
|
173
|
+
return {
|
|
174
|
+
bucket: doVhost[1],
|
|
175
|
+
region: doVhost[2],
|
|
176
|
+
endpoint: `${url.protocol}//${doVhost[2]}.digitaloceanspaces.com`,
|
|
177
|
+
provider: 's3',
|
|
178
|
+
prefix: pathParts.join('/')
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
// <region>.digitaloceanspaces.com/<bucket>
|
|
182
|
+
const doPath = host.match(/^([a-z0-9-]+)\.digitaloceanspaces\.com$/);
|
|
183
|
+
if (doPath && pathParts.length > 0) {
|
|
184
|
+
return {
|
|
185
|
+
bucket: pathParts[0],
|
|
186
|
+
region: doPath[1],
|
|
187
|
+
endpoint: `${url.protocol}//${url.host}`,
|
|
188
|
+
provider: 's3',
|
|
189
|
+
prefix: pathParts.slice(1).join('/')
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
// --- Wasabi ---
|
|
193
|
+
// s3.<region>.wasabisys.com/<bucket>
|
|
194
|
+
const wasabiMatch = host.match(/^s3\.([a-z0-9-]+)\.wasabisys\.com$/);
|
|
195
|
+
if (wasabiMatch && pathParts.length > 0) {
|
|
196
|
+
return {
|
|
197
|
+
bucket: pathParts[0],
|
|
198
|
+
region: wasabiMatch[1],
|
|
199
|
+
endpoint: `${url.protocol}//${url.host}`,
|
|
200
|
+
provider: 's3',
|
|
201
|
+
prefix: pathParts.slice(1).join('/')
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
// --- Backblaze B2 ---
|
|
205
|
+
// <bucket>.s3.<region>.backblazeb2.com (S3-compatible)
|
|
206
|
+
const b2S3 = host.match(/^(.+)\.s3\.([a-z0-9-]+)\.backblazeb2\.com$/);
|
|
207
|
+
if (b2S3) {
|
|
208
|
+
return {
|
|
209
|
+
bucket: b2S3[1],
|
|
210
|
+
region: b2S3[2],
|
|
211
|
+
endpoint: `${url.protocol}//s3.${b2S3[2]}.backblazeb2.com`,
|
|
212
|
+
provider: 's3',
|
|
213
|
+
prefix: pathParts.join('/')
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
// f<id>.backblazeb2.com/file/<bucket>
|
|
217
|
+
const b2Native = host.match(/^f[a-z0-9]+\.backblazeb2\.com$/);
|
|
218
|
+
if (b2Native && pathParts[0] === 'file' && pathParts.length > 1) {
|
|
219
|
+
return {
|
|
220
|
+
bucket: pathParts[1],
|
|
221
|
+
region: defaults.region || 'us-west-000',
|
|
222
|
+
endpoint: `${url.protocol}//${url.host}`,
|
|
223
|
+
provider: 's3',
|
|
224
|
+
prefix: pathParts.slice(2).join('/')
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
// --- Alibaba Cloud OSS ---
|
|
228
|
+
// <bucket>.oss-<region>.aliyuncs.com
|
|
229
|
+
const ossMatch = host.match(/^(.+)\.(oss-[a-z0-9-]+)\.aliyuncs\.com$/);
|
|
230
|
+
if (ossMatch) {
|
|
231
|
+
return {
|
|
232
|
+
bucket: ossMatch[1],
|
|
233
|
+
region: ossMatch[2],
|
|
234
|
+
endpoint: `${url.protocol}//${ossMatch[2]}.aliyuncs.com`,
|
|
235
|
+
provider: 's3',
|
|
236
|
+
prefix: pathParts.join('/')
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
// --- Tencent Cloud COS ---
|
|
240
|
+
// <bucket>.cos.<region>.myqcloud.com
|
|
241
|
+
const cosMatch = host.match(/^(.+)\.cos\.([a-z0-9-]+)\.myqcloud\.com$/);
|
|
242
|
+
if (cosMatch) {
|
|
243
|
+
return {
|
|
244
|
+
bucket: cosMatch[1],
|
|
245
|
+
region: cosMatch[2],
|
|
246
|
+
endpoint: `${url.protocol}//cos.${cosMatch[2]}.myqcloud.com`,
|
|
247
|
+
provider: 's3',
|
|
248
|
+
prefix: pathParts.join('/')
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
// --- Yandex Cloud ---
|
|
252
|
+
// storage.yandexcloud.net/<bucket>
|
|
253
|
+
if (host === 'storage.yandexcloud.net' && pathParts.length > 0) {
|
|
254
|
+
return {
|
|
255
|
+
bucket: pathParts[0],
|
|
256
|
+
region: defaults.region || 'ru-central1',
|
|
257
|
+
endpoint: `${url.protocol}//${url.host}`,
|
|
258
|
+
provider: 's3',
|
|
259
|
+
prefix: pathParts.slice(1).join('/')
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
// --- MinIO ---
|
|
263
|
+
// Common patterns: minio.<domain>, localhost with port
|
|
264
|
+
const isMinioLike = host.includes('minio') ||
|
|
265
|
+
host === 'localhost' ||
|
|
266
|
+
host === '127.0.0.1' ||
|
|
267
|
+
host.startsWith('192.168.') ||
|
|
268
|
+
host.startsWith('10.');
|
|
269
|
+
if (isMinioLike && pathParts.length > 0) {
|
|
270
|
+
return {
|
|
271
|
+
bucket: pathParts[0],
|
|
272
|
+
region: defaults.region || 'us-east-1',
|
|
273
|
+
endpoint: `${url.protocol}//${url.host}`,
|
|
274
|
+
provider: 'minio',
|
|
275
|
+
prefix: pathParts.slice(1).join('/')
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
// --- Azure Blob Storage ---
|
|
279
|
+
// <account>.blob.core.windows.net/<container>
|
|
280
|
+
const azureBlob = host.match(/^([a-z0-9]+)\.blob\.core\.windows\.net$/);
|
|
281
|
+
if (azureBlob && pathParts.length > 0) {
|
|
282
|
+
return {
|
|
283
|
+
bucket: pathParts[0],
|
|
284
|
+
region: defaults.region || '',
|
|
285
|
+
endpoint: `${url.protocol}//${url.host}`,
|
|
286
|
+
provider: 'azure',
|
|
287
|
+
prefix: pathParts.slice(1).join('/')
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
// --- Storj ---
|
|
291
|
+
// S3 gateway: gateway.storjshare.io/<bucket> (or gateway.<region>.storjshare.io)
|
|
292
|
+
const storjGateway = host.match(/^gateway\.(?:([a-z0-9]+)\.)?storjshare\.io$/);
|
|
293
|
+
if (storjGateway && pathParts.length > 0) {
|
|
294
|
+
return {
|
|
295
|
+
bucket: pathParts[0],
|
|
296
|
+
region: storjGateway[1] || defaults.region || 'us1',
|
|
297
|
+
endpoint: `${url.protocol}//${url.host}`,
|
|
298
|
+
provider: 'storj',
|
|
299
|
+
prefix: pathParts.slice(1).join('/')
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
// Linksharing: link.storjshare.io/raw/<access>/<bucket>/... or /s/<access>/<bucket>/...
|
|
303
|
+
const storjLink = host.match(/^link\.(?:([a-z0-9]+)\.)?storjshare\.io$/);
|
|
304
|
+
if (storjLink && pathParts.length >= 3 && (pathParts[0] === 'raw' || pathParts[0] === 's')) {
|
|
305
|
+
return {
|
|
306
|
+
bucket: pathParts[2],
|
|
307
|
+
region: storjLink[1] || defaults.region || 'us1',
|
|
308
|
+
endpoint: `${url.protocol}//${url.host}/${pathParts[0]}/${pathParts[1]}`,
|
|
309
|
+
provider: 'storj',
|
|
310
|
+
prefix: pathParts.slice(3).join('/')
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
// --- Generic custom endpoint with bucket in path ---
|
|
314
|
+
if (pathParts.length > 0) {
|
|
315
|
+
const endpoint = `${url.protocol}//${url.host}`;
|
|
316
|
+
return {
|
|
317
|
+
bucket: pathParts[0],
|
|
318
|
+
region: defaults.region || 'us-east-1',
|
|
319
|
+
endpoint,
|
|
320
|
+
provider: defaults.provider || 's3',
|
|
321
|
+
prefix: pathParts.slice(1).join('/')
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
// Just a host, no path — treat as endpoint with no bucket
|
|
325
|
+
return {
|
|
326
|
+
...defaultResult(defaults),
|
|
327
|
+
endpoint: `${url.protocol}//${url.host}`
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
catch {
|
|
331
|
+
// Not a valid URL, fall through to plain bucket name
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
// ── Plain bucket name (no protocol) ─────────────────────────────
|
|
335
|
+
const cleaned = trimmed.replace(/^\/+|\/+$/g, '');
|
|
336
|
+
return {
|
|
337
|
+
bucket: cleaned,
|
|
338
|
+
region: defaults.region || 'us-east-1',
|
|
339
|
+
endpoint: defaults.endpoint || '',
|
|
340
|
+
provider: defaults.provider || 's3',
|
|
341
|
+
prefix: ''
|
|
342
|
+
};
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Returns true if the input looks like a URL/URI rather than a plain bucket name.
|
|
346
|
+
* Covers all recognized cloud storage URI schemes.
|
|
347
|
+
*/
|
|
348
|
+
export function looksLikeUrl(input) {
|
|
349
|
+
const lower = input.trim().toLowerCase();
|
|
350
|
+
if (lower.startsWith('http://') || lower.startsWith('https://'))
|
|
351
|
+
return true;
|
|
352
|
+
for (const scheme of Object.keys(SCHEME_MAP)) {
|
|
353
|
+
if (lower.startsWith(scheme))
|
|
354
|
+
return true;
|
|
355
|
+
}
|
|
356
|
+
return false;
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Given a parsed URL result, build a human-readable summary of what was detected.
|
|
360
|
+
*/
|
|
361
|
+
export function describeParseResult(parsed) {
|
|
362
|
+
const parts = [];
|
|
363
|
+
if (parsed.bucket)
|
|
364
|
+
parts.push(`bucket="${parsed.bucket}"`);
|
|
365
|
+
if (parsed.endpoint)
|
|
366
|
+
parts.push(`endpoint="${parsed.endpoint}"`);
|
|
367
|
+
if (parsed.region && parsed.region !== 'us-east-1')
|
|
368
|
+
parts.push(`region="${parsed.region}"`);
|
|
369
|
+
if (parsed.provider !== 's3')
|
|
370
|
+
parts.push(`provider=${parsed.provider}`);
|
|
371
|
+
if (parsed.prefix)
|
|
372
|
+
parts.push(`prefix="${parsed.prefix}"`);
|
|
373
|
+
return parts.length > 0 ? `Detected: ${parts.join(', ')}` : '';
|
|
374
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* URL state management for shareable links.
|
|
3
|
+
*
|
|
4
|
+
* URL format: ?url=<storage-url>[#table|map|query|inspect]
|
|
5
|
+
*
|
|
6
|
+
* - ?url= : full storage URL (endpoint + bucket + object path)
|
|
7
|
+
* e.g. https://s3.us-east-1.amazonaws.com/my-bucket/path/file.parquet
|
|
8
|
+
* - #hash : viewer mode (table, map, query, inspect)
|
|
9
|
+
*
|
|
10
|
+
* Uses SvelteKit's replaceState to avoid conflicts with the router.
|
|
11
|
+
*/
|
|
12
|
+
import type { Connection } from '../types.js';
|
|
13
|
+
/**
|
|
14
|
+
* Build a full storage URL from a Connection + optional object prefix.
|
|
15
|
+
*/
|
|
16
|
+
export declare function buildUrlParam(conn: Connection, prefix?: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* Set the ?url= param to a raw URL string (for direct URL tabs).
|
|
19
|
+
*/
|
|
20
|
+
export declare function setRawUrlParam(rawUrl: string): void;
|
|
21
|
+
/**
|
|
22
|
+
* Sync the ?url= param in the browser URL.
|
|
23
|
+
*/
|
|
24
|
+
export declare function syncUrlParam(conn: Connection, prefix?: string): void;
|
|
25
|
+
/**
|
|
26
|
+
* Update the #hash in the URL to reflect the current view mode.
|
|
27
|
+
*/
|
|
28
|
+
export declare function updateUrlView(view: string): void;
|
|
29
|
+
/**
|
|
30
|
+
* Read the current #hash view mode from the URL.
|
|
31
|
+
*/
|
|
32
|
+
export declare function getUrlView(): string;
|
|
33
|
+
/**
|
|
34
|
+
* Read the prefix (file/folder path) from the ?url= param.
|
|
35
|
+
*/
|
|
36
|
+
export declare function getUrlPrefix(): string;
|
|
37
|
+
/**
|
|
38
|
+
* Clear all URL state params.
|
|
39
|
+
*/
|
|
40
|
+
export declare function clearUrlState(): void;
|