Release Data Tools 0.1.0
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
# Accessibility
|
||||
|
||||
The workbench uses semantic landmarks, ordered headings, labelled native controls and a real ARIA tab list. Left/Right, Home and End move between views. File selection, format selection, analysis, formatting, querying, copy and download are keyboard operable.
|
||||
|
||||
Parser and action state use polite live regions. Errors include text labels and codes rather than relying on colour. Tree rows expose `treeitem` levels, tables have captions and keyboard-scrollable regions, and truncated previews state what was omitted. Visible focus, reduced-motion preferences, responsive layouts and Toolbox system/light/dark themes are supported.
|
||||
|
||||
Large source and output areas remain native textareas so browser selection, zoom, high-contrast settings and assistive-technology editing conventions continue to work.
|
||||
@@ -0,0 +1,23 @@
|
||||
# Architecture
|
||||
|
||||
Data Tools is a relocatable static React application. There is no application server and no runtime API.
|
||||
|
||||
## Pipeline
|
||||
|
||||
1. The UI checks the local file size before decoding and passes text, the selected format and the optional filename to a fresh module worker.
|
||||
2. The worker applies byte/character and structural preflight limits, including a streaming dimension pass before delimited parsing, then parses with format-specific defensive options and converts the result into a serialisable typed node model.
|
||||
3. The model is measured again for node count and depth before it is returned. A newer request terminates the older worker, and a 30-second deadline terminates a stalled parse. The UI retains the last successful model until a new one is ready.
|
||||
4. Tree, table, flattened and query projections operate on the model with their own preview/result caps.
|
||||
5. Serialisers create a new string and a structured list of notices, coercions and losses. Output is capped before it reaches copy or download actions.
|
||||
|
||||
The node model has explicit null, boolean, string, number, date, array and ordered-object variants. Number nodes retain a source representation (`exact`, `bigint` or `binary`) and an exact display lexeme. Objects use ordered entry arrays rather than assigning untrusted keys to ordinary JavaScript objects.
|
||||
|
||||
XML deliberately does not pretend to be a JSON object. It is represented as explicit element records containing qualified name, namespace URI, attributes and ordered child records. Converting XML to another syntax therefore exposes this model and reports the convention.
|
||||
|
||||
## Parsers
|
||||
|
||||
Runtime versions are pinned exactly: `lossless-json` 4.3.1, `yaml` 2.9.0, `smol-toml` 1.8.0, `@xmldom/xmldom` 0.9.12 and `papaparse` 5.7.0. No imported value is rendered as HTML or executed.
|
||||
|
||||
Version 0.1 keeps its bounded data-model functions as pure app modules rather
|
||||
than introducing a runtime helper dependency. They are intentionally shaped
|
||||
for later replacement by the shared limits and download APIs.
|
||||
@@ -0,0 +1,21 @@
|
||||
# Privacy and security
|
||||
|
||||
## Data flow
|
||||
|
||||
Input files are read with the browser File API and decoded as UTF-8. Text is copied to a same-origin worker for parsing and returned as a structured-cloneable model. There is no upload endpoint, account, telemetry, analytics, persistence or content fetch. The service worker only caches the application shell.
|
||||
|
||||
## Untrusted input controls
|
||||
|
||||
- Input, model, structural depth, delimited cells, query text/results, previews
|
||||
and output have fixed limits. Delimited dimensions are scanned before the
|
||||
third-party parser allocates a table, and disposable parses have a 30-second
|
||||
deadline.
|
||||
- JSON duplicate keys and the keys `__proto__`, `constructor` and `prototype` are rejected.
|
||||
- YAML uses the 1.2 core schema with unique string keys, no custom tags or merge keys, and a bounded alias count.
|
||||
- XML rejects `DOCTYPE`, entity declarations and XInclude before parsing. The parser is not used to load external resources, and imported markup is never inserted into the DOM.
|
||||
- CSV/TSV dynamic typing is disabled. Spreadsheet-safe export prefixes cells beginning with `=`, `+`, `-`, `@`, tab or carriage return; disabling it produces a warning in the conversion report.
|
||||
- The safe query language has no evaluator, functions, filters, recursive descent or scripts.
|
||||
|
||||
Conversion is not sanitisation. XML-to-object conventions, typed-scalar coercions, nested CSV cell encoding, TOML null handling and unsafe numeric conversions are reported alongside the generated result. Users should inspect that report before relying on converted output.
|
||||
|
||||
The browser still receives normal application assets from its configured origin. A deployment should retain the supplied restrictive CSP, same-origin worker policy, `nosniff`, no-referrer policy and immutable caching for fingerprinted assets.
|
||||
Reference in New Issue
Block a user