Implements Phases 1-8 of the TFTSR implementation plan. Rust backend (Tauri 2.x, src-tauri/): - Multi-provider AI: OpenAI-compatible, Anthropic, Gemini, Mistral, Ollama - PII detection engine: 11 regex patterns with overlap resolution - SQLCipher AES-256 encrypted database with 10 versioned migrations - 28 Tauri IPC commands for triage, analysis, document, and system ops - Ollama: hardware probe, model recommendations, pull/delete with events - RCA and blameless post-mortem Markdown document generators - PDF export via printpdf - Audit log: SHA-256 hash of every external data send - Integration stubs for Confluence, ServiceNow, Azure DevOps (v0.2) Frontend (React 18 + TypeScript + Vite, src/): - 9 pages: full triage workflow NewIssue→LogUpload→Triage→Resolution→RCA→Postmortem→History+Settings - 7 components: ChatWindow, TriageProgress, PiiDiffViewer, DocEditor, HardwareReport, ModelSelector, UI primitives - 3 Zustand stores: session, settings (persisted), history - Type-safe tauriCommands.ts matching Rust backend types exactly - 8 IT domain system prompts (Linux, Windows, Network, K8s, DB, Virt, HW, Obs) DevOps: - .woodpecker/test.yml: rustfmt, clippy, cargo test, tsc, vitest on every push - .woodpecker/release.yml: linux/amd64 + linux/arm64 builds, Gogs release upload Verified: - cargo check: zero errors - tsc --noEmit: zero errors - vitest run: 13/13 unit tests passing Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
62 lines
1.7 KiB
Markdown
62 lines
1.7 KiB
Markdown
data-uri-to-buffer
|
|
==================
|
|
### Create an ArrayBuffer instance from a [Data URI][rfc] string
|
|
|
|
This module accepts a ["data" URI][rfc] String of data, and returns
|
|
an `ArrayBuffer` instance with the decoded data.
|
|
|
|
This module is intended to work on a large variety of JavaScript
|
|
runtimes, including Node.js and web browsers.
|
|
|
|
Example
|
|
-------
|
|
|
|
```typescript
|
|
import { dataUriToBuffer } from 'data-uri-to-buffer';
|
|
|
|
// plain-text data is supported
|
|
let uri = 'data:,Hello%2C%20World!';
|
|
let parsed = dataUriToBuffer(uri);
|
|
console.log(new TextDecoder().decode(parsed.buffer));
|
|
// 'Hello, World!'
|
|
|
|
// base64-encoded data is supported
|
|
uri = 'data:text/plain;base64,SGVsbG8sIFdvcmxkIQ%3D%3D';
|
|
parsed = dataUriToBuffer(uri);
|
|
console.log(new TextDecoder().decode(parsed.buffer));
|
|
// 'Hello, World!'
|
|
```
|
|
|
|
|
|
API
|
|
---
|
|
|
|
```typescript
|
|
export interface ParsedDataURI {
|
|
type: string;
|
|
typeFull: string;
|
|
charset: string;
|
|
buffer: ArrayBuffer;
|
|
}
|
|
```
|
|
|
|
### dataUriToBuffer(uri: string | URL) → ParsedDataURI
|
|
|
|
The `type` property gets set to the main type portion of
|
|
the "mediatype" portion of the "data" URI, or defaults to `"text/plain"` if not
|
|
specified.
|
|
|
|
The `typeFull` property gets set to the entire
|
|
"mediatype" portion of the "data" URI (including all parameters), or defaults
|
|
to `"text/plain;charset=US-ASCII"` if not specified.
|
|
|
|
The `charset` property gets set to the Charset portion of
|
|
the "mediatype" portion of the "data" URI, or defaults to `"US-ASCII"` if the
|
|
entire type is not specified, or defaults to `""` otherwise.
|
|
|
|
*Note*: If only the main type is specified but not the charset, e.g.
|
|
`"data:text/plain,abc"`, the charset is set to the empty string. The spec only
|
|
defaults to US-ASCII as charset if the entire type is not specified.
|
|
|
|
[rfc]: http://tools.ietf.org/html/rfc2397
|