@ai-matrx/media 0.8.0 → 0.9.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/CHANGELOG.md +15 -0
- package/dist/files/engine/api/assets.d.ts +223 -0
- package/dist/files/engine/api/assets.js +124 -0
- package/dist/files/engine/api/assets.js.map +1 -0
- package/dist/files/engine/api/direct.d.ts +43 -0
- package/dist/files/engine/api/direct.js +73 -0
- package/dist/files/engine/api/direct.js.map +1 -0
- package/dist/files/engine/api/fileOrganization.d.ts +34 -0
- package/dist/files/engine/api/fileOrganization.js +38 -0
- package/dist/files/engine/api/fileOrganization.js.map +1 -0
- package/dist/files/engine/api/files.d.ts +249 -0
- package/dist/files/engine/api/files.js +231 -0
- package/dist/files/engine/api/files.js.map +1 -0
- package/dist/files/engine/api/folders.d.ts +63 -0
- package/dist/files/engine/api/folders.js +56 -0
- package/dist/files/engine/api/folders.js.map +1 -0
- package/dist/files/engine/api/office.d.ts +27 -0
- package/dist/files/engine/api/office.js +19 -0
- package/dist/files/engine/api/office.js.map +1 -0
- package/dist/files/engine/api/permissions.d.ts +37 -0
- package/dist/files/engine/api/permissions.js +109 -0
- package/dist/files/engine/api/permissions.js.map +1 -0
- package/dist/files/engine/api/versions.d.ts +26 -0
- package/dist/files/engine/api/versions.js +37 -0
- package/dist/files/engine/api/versions.js.map +1 -0
- package/dist/files/engine/cache/idb-store.d.ts +95 -0
- package/dist/files/engine/cache/idb-store.js +172 -0
- package/dist/files/engine/cache/idb-store.js.map +1 -0
- package/dist/files/engine/cache/policy.d.ts +14 -0
- package/dist/files/engine/cache/policy.js +40 -0
- package/dist/files/engine/cache/policy.js.map +1 -0
- package/dist/files/engine/cache/register-service-worker.d.ts +57 -0
- package/dist/files/engine/cache/register-service-worker.js +80 -0
- package/dist/files/engine/cache/register-service-worker.js.map +1 -0
- package/dist/files/engine/db-types.d.ts +48865 -0
- package/dist/files/engine/db-types.js +1 -0
- package/dist/files/engine/db-types.js.map +1 -0
- package/dist/files/engine/filesDb.d.ts +1913 -0
- package/dist/files/engine/filesDb.js +28 -0
- package/dist/files/engine/filesDb.js.map +1 -0
- package/dist/files/engine/handler/handler.d.ts +82 -0
- package/dist/files/engine/handler/handler.js +124 -0
- package/dist/files/engine/handler/handler.js.map +1 -0
- package/dist/files/engine/handler/hooks/useFile.d.ts +17 -0
- package/dist/files/engine/handler/hooks/useFile.js +75 -0
- package/dist/files/engine/handler/hooks/useFile.js.map +1 -0
- package/dist/files/engine/handler/hooks/useFileUpload.d.ts +76 -0
- package/dist/files/engine/handler/hooks/useFileUpload.js +67 -0
- package/dist/files/engine/handler/hooks/useFileUpload.js.map +1 -0
- package/dist/files/engine/handler/input/normalize.d.ts +14 -0
- package/dist/files/engine/handler/input/normalize.js +365 -0
- package/dist/files/engine/handler/input/normalize.js.map +1 -0
- package/dist/files/engine/handler/intelligence/access.d.ts +35 -0
- package/dist/files/engine/handler/intelligence/access.js +85 -0
- package/dist/files/engine/handler/intelligence/access.js.map +1 -0
- package/dist/files/engine/handler/intelligence/magic-bytes.d.ts +21 -0
- package/dist/files/engine/handler/intelligence/magic-bytes.js +67 -0
- package/dist/files/engine/handler/intelligence/magic-bytes.js.map +1 -0
- package/dist/files/engine/handler/output/target.d.ts +19 -0
- package/dist/files/engine/handler/output/target.js +222 -0
- package/dist/files/engine/handler/output/target.js.map +1 -0
- package/dist/files/engine/handler/resolver.d.ts +34 -0
- package/dist/files/engine/handler/resolver.js +133 -0
- package/dist/files/engine/handler/resolver.js.map +1 -0
- package/dist/files/engine/handler/types.d.ts +367 -0
- package/dist/files/engine/handler/types.js +1 -0
- package/dist/files/engine/handler/types.js.map +1 -0
- package/dist/files/engine/handler/upload.d.ts +32 -0
- package/dist/files/engine/handler/upload.js +295 -0
- package/dist/files/engine/handler/upload.js.map +1 -0
- package/dist/files/engine/handler/utils/classify.d.ts +14 -0
- package/dist/files/engine/handler/utils/classify.js +27 -0
- package/dist/files/engine/handler/utils/classify.js.map +1 -0
- package/dist/files/engine/handler/utils/prefer-locator.d.ts +32 -0
- package/dist/files/engine/handler/utils/prefer-locator.js +34 -0
- package/dist/files/engine/handler/utils/prefer-locator.js.map +1 -0
- package/dist/files/engine/handler/utils/python-base.d.ts +129 -0
- package/dist/files/engine/handler/utils/python-base.js +60 -0
- package/dist/files/engine/handler/utils/python-base.js.map +1 -0
- package/dist/files/engine/hooks/blob-cache.d.ts +130 -0
- package/dist/files/engine/hooks/blob-cache.js +162 -0
- package/dist/files/engine/hooks/blob-cache.js.map +1 -0
- package/dist/files/engine/hooks/office-extraction-cache.d.ts +28 -0
- package/dist/files/engine/hooks/office-extraction-cache.js +67 -0
- package/dist/files/engine/hooks/office-extraction-cache.js.map +1 -0
- package/dist/files/engine/host/configure.d.ts +166 -0
- package/dist/files/engine/host/configure.js +30 -0
- package/dist/files/engine/host/configure.js.map +1 -0
- package/dist/files/engine/host/org.d.ts +8 -0
- package/dist/files/engine/host/org.js +16 -0
- package/dist/files/engine/host/org.js.map +1 -0
- package/dist/files/engine/host/python-client.d.ts +60 -0
- package/dist/files/engine/host/python-client.js +46 -0
- package/dist/files/engine/host/python-client.js.map +1 -0
- package/dist/files/engine/host/share-links.d.ts +20 -0
- package/dist/files/engine/host/share-links.js +32 -0
- package/dist/files/engine/host/share-links.js.map +1 -0
- package/dist/files/engine/host/store.d.ts +24 -0
- package/dist/files/engine/host/store.js +23 -0
- package/dist/files/engine/host/store.js.map +1 -0
- package/dist/files/engine/host/supabase.d.ts +3808 -0
- package/dist/files/engine/host/supabase.js +33 -0
- package/dist/files/engine/host/supabase.js.map +1 -0
- package/dist/files/engine/host/toast.d.ts +14 -0
- package/dist/files/engine/host/toast.js +20 -0
- package/dist/files/engine/host/toast.js.map +1 -0
- package/dist/files/engine/host/typed-client.d.ts +136 -0
- package/dist/files/engine/host/typed-client.js +66 -0
- package/dist/files/engine/host/typed-client.js.map +1 -0
- package/dist/files/engine/index.d.ts +22 -0
- package/dist/files/engine/index.js +49 -0
- package/dist/files/engine/index.js.map +1 -0
- package/dist/files/engine/media/our-file-sources.d.ts +39 -0
- package/dist/files/engine/media/our-file-sources.js +83 -0
- package/dist/files/engine/media/our-file-sources.js.map +1 -0
- package/dist/files/engine/media/signed-url.d.ts +1 -0
- package/dist/files/engine/media/signed-url.js +6 -0
- package/dist/files/engine/media/signed-url.js.map +1 -0
- package/dist/files/engine/redux/converters.d.ts +73 -0
- package/dist/files/engine/redux/converters.js +286 -0
- package/dist/files/engine/redux/converters.js.map +1 -0
- package/dist/files/engine/redux/file-hydration.d.ts +15 -0
- package/dist/files/engine/redux/file-hydration.js +46 -0
- package/dist/files/engine/redux/file-hydration.js.map +1 -0
- package/dist/files/engine/redux/file-tree-auth-boundary.d.ts +5 -0
- package/dist/files/engine/redux/file-tree-auth-boundary.js +28 -0
- package/dist/files/engine/redux/file-tree-auth-boundary.js.map +1 -0
- package/dist/files/engine/redux/file-tree-timeout.d.ts +32 -0
- package/dist/files/engine/redux/file-tree-timeout.js +73 -0
- package/dist/files/engine/redux/file-tree-timeout.js.map +1 -0
- package/dist/files/engine/redux/mutation-toast-middleware.d.ts +27 -0
- package/dist/files/engine/redux/mutation-toast-middleware.js +103 -0
- package/dist/files/engine/redux/mutation-toast-middleware.js.map +1 -0
- package/dist/files/engine/redux/realtime-middleware.d.ts +61 -0
- package/dist/files/engine/redux/realtime-middleware.js +431 -0
- package/dist/files/engine/redux/realtime-middleware.js.map +1 -0
- package/dist/files/engine/redux/request-ledger.d.ts +68 -0
- package/dist/files/engine/redux/request-ledger.js +66 -0
- package/dist/files/engine/redux/request-ledger.js.map +1 -0
- package/dist/files/engine/redux/selectors.d.ts +3254 -0
- package/dist/files/engine/redux/selectors.js +428 -0
- package/dist/files/engine/redux/selectors.js.map +1 -0
- package/dist/files/engine/redux/slice.d.ts +157 -0
- package/dist/files/engine/redux/slice.js +836 -0
- package/dist/files/engine/redux/slice.js.map +1 -0
- package/dist/files/engine/redux/thunks.d.ts +449 -0
- package/dist/files/engine/redux/thunks.js +1684 -0
- package/dist/files/engine/redux/thunks.js.map +1 -0
- package/dist/files/engine/redux/tree-utils.d.ts +90 -0
- package/dist/files/engine/redux/tree-utils.js +200 -0
- package/dist/files/engine/redux/tree-utils.js.map +1 -0
- package/dist/files/engine/support/claimsUser.d.ts +77 -0
- package/dist/files/engine/support/claimsUser.js +48 -0
- package/dist/files/engine/support/claimsUser.js.map +1 -0
- package/dist/files/engine/support/datetime.d.ts +6 -0
- package/dist/files/engine/support/datetime.js +15 -0
- package/dist/files/engine/support/datetime.js.map +1 -0
- package/dist/files/engine/support/document-visibility.d.ts +14 -0
- package/dist/files/engine/support/document-visibility.js +28 -0
- package/dist/files/engine/support/document-visibility.js.map +1 -0
- package/dist/files/engine/support/logger.d.ts +28 -0
- package/dist/files/engine/support/logger.js +36 -0
- package/dist/files/engine/support/logger.js.map +1 -0
- package/dist/files/engine/types.d.ts +1081 -0
- package/dist/files/engine/types.js +30 -0
- package/dist/files/engine/types.js.map +1 -0
- package/dist/files/engine/upload/cloudUpload.d.ts +182 -0
- package/dist/files/engine/upload/cloudUpload.js +418 -0
- package/dist/files/engine/upload/cloudUpload.js.map +1 -0
- package/dist/files/engine/upload/tusUpload.d.ts +100 -0
- package/dist/files/engine/upload/tusUpload.js +258 -0
- package/dist/files/engine/upload/tusUpload.js.map +1 -0
- package/dist/files/engine/upload/uploadDedupGuard.d.ts +58 -0
- package/dist/files/engine/upload/uploadDedupGuard.js +41 -0
- package/dist/files/engine/upload/uploadDedupGuard.js.map +1 -0
- package/dist/files/engine/upload/uploadGuardOpeners.d.ts +70 -0
- package/dist/files/engine/upload/uploadGuardOpeners.js +54 -0
- package/dist/files/engine/upload/uploadGuardOpeners.js.map +1 -0
- package/dist/files/engine/utils/file-types.d.ts +243 -0
- package/dist/files/engine/utils/file-types.js +1722 -0
- package/dist/files/engine/utils/file-types.js.map +1 -0
- package/dist/files/engine/utils/user-visible.d.ts +133 -0
- package/dist/files/engine/utils/user-visible.js +115 -0
- package/dist/files/engine/utils/user-visible.js.map +1 -0
- package/package.json +393 -9
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* features/files/utils/file-types.ts
|
|
3
|
+
*
|
|
4
|
+
* THE SINGLE SOURCE OF TRUTH for cloud-files type capabilities.
|
|
5
|
+
*
|
|
6
|
+
* If you need to:
|
|
7
|
+
* - Add support for a new file type
|
|
8
|
+
* - Change which previewer a type uses
|
|
9
|
+
* - Change which icon / color a type renders with
|
|
10
|
+
* - Change whether a type renders a real thumbnail or a fallback icon
|
|
11
|
+
* - Add or remove a thumbnail strategy
|
|
12
|
+
* - Change a size cap for a particular kind
|
|
13
|
+
*
|
|
14
|
+
* → edit THIS file. Nothing else in the cloud-files feature should
|
|
15
|
+
* encode this knowledge.
|
|
16
|
+
*
|
|
17
|
+
* The supporting modules (`mime.ts`, `icon-map.ts`,
|
|
18
|
+
* `preview-capabilities.ts`) are thin wrappers that read from this
|
|
19
|
+
* registry and exist only for backwards-compat with older imports.
|
|
20
|
+
*
|
|
21
|
+
* ─────────────────────────────────────────────────────────────────────
|
|
22
|
+
* Structure
|
|
23
|
+
* ─────────────────────────────────────────────────────────────────────
|
|
24
|
+
*
|
|
25
|
+
* FILE_TYPES is an array of declarative entries. Each entry says:
|
|
26
|
+
*
|
|
27
|
+
* - which extensions match it
|
|
28
|
+
* - the canonical MIME type (used as a fallback when the server
|
|
29
|
+
* didn't send one and to canonicalize between the dozens of
|
|
30
|
+
* legacy aliases the web has accumulated)
|
|
31
|
+
* - which preview component to use
|
|
32
|
+
* - which thumbnail strategy to use in grid / list views
|
|
33
|
+
* - the icon + color tokens that drive the iconography
|
|
34
|
+
* - a human-friendly display name (e.g. "PDF Document" vs "pdf")
|
|
35
|
+
* - any size cap that overrides the global preview cap
|
|
36
|
+
*
|
|
37
|
+
* Mime-first override: when the browser knows a MIME (e.g. it set
|
|
38
|
+
* `image/avif` even though we don't have `.avif` in the extension
|
|
39
|
+
* table), the wrapper helpers fall back to MIME-prefix matching for
|
|
40
|
+
* `image/*`, `video/*`, `audio/*`, and `application/pdf`, so adding a
|
|
41
|
+
* brand-new image format never requires more than a one-line entry.
|
|
42
|
+
*/
|
|
43
|
+
import { type LucideIcon } from "lucide-react";
|
|
44
|
+
/** Top-level grouping. Drives sidebar filters and color rhythm. */
|
|
45
|
+
export type FileCategory = "CODE" | "DOCUMENT" | "AUDIO" | "IMAGE" | "VIDEO" | "ARCHIVE" | "DATA" | "NOTEBOOK" | "SUBTITLES" | "EMAIL" | "EBOOK" | "MODEL_3D" | "UNKNOWN" | "FOLDER";
|
|
46
|
+
/** Which previewer should render this kind. `generic` means "no preview".
|
|
47
|
+
*
|
|
48
|
+
* `svg` is split out from `image` on purpose: SVG is text-shaped (XML), so
|
|
49
|
+
* it has a dedicated previewer (`SvgPreview` — renders with a transparency
|
|
50
|
+
* grid and lets the user toggle to the raw markup) AND is editable in the
|
|
51
|
+
* standard Monaco inline editor with XML syntax highlighting. Routing it
|
|
52
|
+
* through `image` would hide the editor handoff and the source-view toggle.
|
|
53
|
+
*/
|
|
54
|
+
export type PreviewKind = "code" | "image" | "svg" | "html" | "audio" | "video" | "pdf" | "text" | "markdown" | "data" | "spreadsheet" | "office" | "generic";
|
|
55
|
+
/**
|
|
56
|
+
* Strategy hint for the small inline thumbnail rendered in grid / list views.
|
|
57
|
+
*
|
|
58
|
+
* Phase 1b note: server-rendered thumbnails are now **universal** —
|
|
59
|
+
* every uploaded file has `FileRecord.thumbnail_url` populated (image,
|
|
60
|
+
* PDF page 1, video frame, audio waveform, or mime-family icon for
|
|
61
|
+
* unknown). `MediaThumbnail` reads `file.thumbnailUrl` first regardless
|
|
62
|
+
* of the strategy below; this enum now only controls the "live render"
|
|
63
|
+
* fallback for the brief window between upload and variant render.
|
|
64
|
+
*
|
|
65
|
+
* "image" — `<img src={masterCdnUrl}>` fallback when the
|
|
66
|
+
* backend variant hasn't finished rendering yet.
|
|
67
|
+
* "video-poster" — `<video preload="metadata">` fallback for the
|
|
68
|
+
* same window.
|
|
69
|
+
* "pdf-firstpage" — historic; Phase 1c now ships `page1_url` via
|
|
70
|
+
* the variants store. The grid path uses
|
|
71
|
+
* `file.thumbnailUrl`; full-page detail views can
|
|
72
|
+
* bind `Asset.variants["page1_url"].url`.
|
|
73
|
+
* "backend-thumb" — historic; now equivalent to `icon` for the live
|
|
74
|
+
* render fallback because the universal pipeline
|
|
75
|
+
* handles every backend-thumb case automatically.
|
|
76
|
+
* "icon" — no live render fallback. The `file.thumbnailUrl`
|
|
77
|
+
* lookup (or icon) is the only source.
|
|
78
|
+
*/
|
|
79
|
+
export type ThumbnailStrategy = "image" | "video-poster" | "pdf-firstpage" | "backend-thumb" | "icon";
|
|
80
|
+
/**
|
|
81
|
+
* One row in the registry. Most fields are static; the `extensions`,
|
|
82
|
+
* `aliases`, `aliasPrefixes`, and `mime` fields are the lookup keys.
|
|
83
|
+
*/
|
|
84
|
+
export interface FileTypeEntry {
|
|
85
|
+
/** Extensions (lowercased, no dot) that map to this entry. First wins. */
|
|
86
|
+
extensions: readonly string[];
|
|
87
|
+
/**
|
|
88
|
+
* Exact filenames (matched as-is, then case-insensitively) that resolve to
|
|
89
|
+
* this entry — covers the universe of "no extension OR purely dotfile"
|
|
90
|
+
* text-config files. e.g. `["Dockerfile", ".dockerignore"]`.
|
|
91
|
+
*/
|
|
92
|
+
aliases?: readonly string[];
|
|
93
|
+
/**
|
|
94
|
+
* Filename prefixes that resolve to this entry. Matched after exact
|
|
95
|
+
* extensions / aliases fail. Useful for `.env*` style variants
|
|
96
|
+
* (`.env.local`, `.env.production`, ...). Compared case-insensitively.
|
|
97
|
+
*/
|
|
98
|
+
aliasPrefixes?: readonly string[];
|
|
99
|
+
/** Canonical MIME. Used to fill `mime_type` when the server didn't send one. */
|
|
100
|
+
mime: string;
|
|
101
|
+
category: FileCategory;
|
|
102
|
+
/** Specific name within the category, e.g. "PYTHON", "MP3". UPPERCASE. */
|
|
103
|
+
subCategory: string;
|
|
104
|
+
/** Human-friendly name shown in tooltips / "What can I preview?" lists. */
|
|
105
|
+
displayName: string;
|
|
106
|
+
previewKind: PreviewKind;
|
|
107
|
+
thumbnailStrategy: ThumbnailStrategy;
|
|
108
|
+
/** Tailwind text color token, e.g. `text-emerald-500`. */
|
|
109
|
+
color: string;
|
|
110
|
+
icon: LucideIcon;
|
|
111
|
+
/** Override the global 10MB preview cap if the previewer can stream. */
|
|
112
|
+
previewSizeCapOverride?: number | null;
|
|
113
|
+
}
|
|
114
|
+
/** What a caller actually needs to render any given file. */
|
|
115
|
+
export interface FileTypeDetails {
|
|
116
|
+
category: FileCategory;
|
|
117
|
+
subCategory: string;
|
|
118
|
+
displayName: string;
|
|
119
|
+
previewKind: PreviewKind;
|
|
120
|
+
thumbnailStrategy: ThumbnailStrategy;
|
|
121
|
+
color: string;
|
|
122
|
+
icon: LucideIcon;
|
|
123
|
+
/** Convenience — true when previewKind !== "generic". */
|
|
124
|
+
canPreview: boolean;
|
|
125
|
+
/** Convenience — null = use the global cap. */
|
|
126
|
+
previewSizeCapOverride: number | null;
|
|
127
|
+
/** The canonical MIME for the resolved type. */
|
|
128
|
+
mime: string;
|
|
129
|
+
}
|
|
130
|
+
/** Global default preview cap. Bigger files render a "too large" message. */
|
|
131
|
+
export declare const MAX_INLINE_PREVIEW_BYTES: number;
|
|
132
|
+
/**
|
|
133
|
+
* The registry. Order matters only when an extension belongs to multiple
|
|
134
|
+
* entries — the first match wins. In practice every extension is unique.
|
|
135
|
+
*
|
|
136
|
+
* Adding a new file type:
|
|
137
|
+
* 1. Append a new entry.
|
|
138
|
+
* 2. If the previewKind is something new (not in `PreviewKind`), add it
|
|
139
|
+
* to that union AND register a previewer in
|
|
140
|
+
* `components/core/FilePreview/FilePreview.tsx`.
|
|
141
|
+
* 3. If the thumbnail strategy is new, extend `ThumbnailStrategy` and
|
|
142
|
+
* handle it in `MediaThumbnail`.
|
|
143
|
+
*
|
|
144
|
+
* That's it. No edits to `mime.ts`, `icon-map.ts`, etc.
|
|
145
|
+
*/
|
|
146
|
+
export declare const FILE_TYPES: readonly FileTypeEntry[];
|
|
147
|
+
/** Look up details by file name (basename / alias / prefix / extension match). */
|
|
148
|
+
export declare function getFileTypeDetails(filename: string): FileTypeDetails;
|
|
149
|
+
/**
|
|
150
|
+
* Same as `getFileTypeDetails` but never falls through to UNKNOWN — used
|
|
151
|
+
* by the binary viewer's "View as text" override and any caller that has
|
|
152
|
+
* already decided "treat this as text, no matter what."
|
|
153
|
+
*/
|
|
154
|
+
export declare function getAssumedTextDetails(filename: string): FileTypeDetails;
|
|
155
|
+
/** True when the filename is recognized as text-bearing without sniffing bytes. */
|
|
156
|
+
export declare function isLikelyTextFilename(filename: string): boolean;
|
|
157
|
+
/** Folder details — used by sidebar + tree rendering. */
|
|
158
|
+
export declare function getFolderTypeDetails(open?: boolean): FileTypeDetails;
|
|
159
|
+
/** Canonical MIME for an extension (or `application/octet-stream`). */
|
|
160
|
+
export declare function mimeFromFilename(filename: string): string;
|
|
161
|
+
/**
|
|
162
|
+
* Resolve a final MIME, preferring the server-supplied value when it's
|
|
163
|
+
* meaningful, otherwise falling back to the extension table.
|
|
164
|
+
*
|
|
165
|
+
* Parameters are stripped so `audio/webm;codecs=opus` resolves like
|
|
166
|
+
* `audio/webm` — required for BY_MIME lookup and audio/video disambiguation
|
|
167
|
+
* on `.webm` containers (MediaRecorder speech captures).
|
|
168
|
+
*/
|
|
169
|
+
export declare function resolveMime(explicit: string | null | undefined, filename: string): string;
|
|
170
|
+
/**
|
|
171
|
+
* Given a (filename, mime, size) tuple, return the full preview profile —
|
|
172
|
+
* what to render at full size, what to render in a grid thumbnail, whether
|
|
173
|
+
* either is allowed at the file's current byte size, and the resolved MIME.
|
|
174
|
+
*
|
|
175
|
+
* This is THE function components should call. `getPreviewCapability` and
|
|
176
|
+
* `useFileTypeDetails` are thin views on top.
|
|
177
|
+
*/
|
|
178
|
+
export interface FilePreviewProfile {
|
|
179
|
+
details: FileTypeDetails;
|
|
180
|
+
/** Effective `previewKind` after MIME-prefix override. */
|
|
181
|
+
previewKind: PreviewKind;
|
|
182
|
+
/** True when the type is renderable AND the byte size fits the cap. */
|
|
183
|
+
canPreview: boolean;
|
|
184
|
+
/** False = file is too big for inline preview; offer download instead. */
|
|
185
|
+
sizeOk: boolean;
|
|
186
|
+
/** The cap that was effectively applied (in bytes). */
|
|
187
|
+
effectiveSizeCap: number;
|
|
188
|
+
/** True iff the registry says this file should render a real thumbnail. */
|
|
189
|
+
thumbnailStrategy: ThumbnailStrategy;
|
|
190
|
+
/** Resolved canonical MIME. */
|
|
191
|
+
mime: string;
|
|
192
|
+
}
|
|
193
|
+
export declare function getFilePreviewProfile(fileName: string, mimeType: string | null, fileSize: number | null): FilePreviewProfile;
|
|
194
|
+
export declare function isTextMime(mime: string): boolean;
|
|
195
|
+
export declare function isImageMime(mime: string): boolean;
|
|
196
|
+
/** Image bytes evergreen browsers can decode directly through `<img>`. */
|
|
197
|
+
export declare function isBrowserRenderableImageMime(mime: string): boolean;
|
|
198
|
+
export declare function isVideoMime(mime: string): boolean;
|
|
199
|
+
export declare function isAudioMime(mime: string): boolean;
|
|
200
|
+
export declare function isPdfMime(mime: string): boolean;
|
|
201
|
+
/**
|
|
202
|
+
* Result of `sniffTextBytes`. We split "definitely text" from "looks text-y
|
|
203
|
+
* but we're not sure" so the UI can pick a different default action:
|
|
204
|
+
*
|
|
205
|
+
* - `confidence === "high"` — safe to render in Monaco automatically.
|
|
206
|
+
* - `confidence === "medium"` — probably text; offer a button.
|
|
207
|
+
* - `confidence === "low"` — almost certainly binary; only show on
|
|
208
|
+
* manual override.
|
|
209
|
+
*/
|
|
210
|
+
export interface TextSniffResult {
|
|
211
|
+
isText: boolean;
|
|
212
|
+
confidence: "high" | "medium" | "low";
|
|
213
|
+
reason: string;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Heuristic byte-level text detector. Inspects the first ~4KB of the
|
|
217
|
+
* sample and answers "could this be displayed as text?". Designed to be
|
|
218
|
+
* permissive — false positives are recoverable (the user sees garbage
|
|
219
|
+
* and closes the tab), while false negatives are exactly the bug we're
|
|
220
|
+
* fighting (.bashrc, authorized_keys, etc. being declared "binary").
|
|
221
|
+
*
|
|
222
|
+
* Rules, in order:
|
|
223
|
+
* 1. Empty bytes → text (an empty file is fine to open in Monaco).
|
|
224
|
+
* 2. UTF-8 BOM, UTF-16 BOM, UTF-32 BOM → text (high confidence).
|
|
225
|
+
* 3. Strict UTF-8 decode succeeds → text (high confidence).
|
|
226
|
+
* 4. Otherwise count printable / control bytes:
|
|
227
|
+
* - any null byte (0x00) → binary (high confidence).
|
|
228
|
+
* - >= 95% printable + tab/newline/CR → text (medium).
|
|
229
|
+
* - everything else → binary (low).
|
|
230
|
+
*/
|
|
231
|
+
export declare function sniffTextBytes(bytes: Uint8Array, sampleSize?: number): TextSniffResult;
|
|
232
|
+
/** Every supported (extension, displayName, previewKind, thumbnailStrategy). */
|
|
233
|
+
export interface SupportedTypeRow {
|
|
234
|
+
extensions: readonly string[];
|
|
235
|
+
mime: string;
|
|
236
|
+
category: FileCategory;
|
|
237
|
+
displayName: string;
|
|
238
|
+
previewKind: PreviewKind;
|
|
239
|
+
thumbnailStrategy: ThumbnailStrategy;
|
|
240
|
+
/** True when previewKind !== "generic" — i.e. we have a real previewer. */
|
|
241
|
+
canPreview: boolean;
|
|
242
|
+
}
|
|
243
|
+
export declare function listSupportedTypes(): SupportedTypeRow[];
|