From 544abbbf567d57acb37e391915793083d37258ef Mon Sep 17 00:00:00 2001 From: Hare Date: Fri, 14 Aug 2026 01:27:29 +0900 Subject: [PATCH] config: enforce browser preflight and generated DTOs --- Cargo.lock | 1 + crates/config-source-wasm/src/lib.rs | 28 ++++- crates/config-source/Cargo.toml | 1 + crates/config-source/src/lib.rs | 82 +++++++++++-- crates/workspace-server/src/config_source.rs | 26 ++++- .../config-source/ConfigSourceEditor.svelte | 26 +++-- .../generated/config_source_wasm.d.ts | 5 +- .../generated/config_source_wasm.js | 19 ++- .../generated/config_source_wasm_bg.wasm | Bin 635839 -> 641502 bytes .../generated/config_source_wasm_bg.wasm.d.ts | 1 + .../generated/types/ConfigCommitRequest.ts | 5 + .../generated/types/ConfigContentType.ts | 3 + .../generated/types/ConfigDiagnostic.ts | 6 + .../generated/types/ConfigDiagnosticLabel.ts | 4 + .../generated/types/ConfigEntry.ts | 5 + .../generated/types/ConfigPreviewRequest.ts | 5 + .../generated/types/ConfigSpan.ts | 3 + .../generated/types/ConfigTreeChange.ts | 5 + .../generated/types/ConfigTreeSnapshot.ts | 5 + .../types/EvaluatedConfigCandidate.ts | 6 + .../generated/types/EvaluatedProjection.ts | 4 + .../generated/types/EvaluationResult.ts | 4 + .../generated/types/ToolchainContract.ts | 4 + .../generated/types/VirtualPath.ts | 3 + .../generated/types/WorkspaceConfigState.ts | 5 + .../lib/workspace/config-source/toolchain.ts | 8 +- .../config-source/toolchain.worker.ts | 9 +- .../src/lib/workspace/config-source/types.ts | 109 +++--------------- .../settings/DecodalSourceEditor.svelte | 5 +- 29 files changed, 259 insertions(+), 128 deletions(-) create mode 100644 web/workspace/src/lib/workspace/config-source/generated/types/ConfigCommitRequest.ts create mode 100644 web/workspace/src/lib/workspace/config-source/generated/types/ConfigContentType.ts create mode 100644 web/workspace/src/lib/workspace/config-source/generated/types/ConfigDiagnostic.ts create mode 100644 web/workspace/src/lib/workspace/config-source/generated/types/ConfigDiagnosticLabel.ts create mode 100644 web/workspace/src/lib/workspace/config-source/generated/types/ConfigEntry.ts create mode 100644 web/workspace/src/lib/workspace/config-source/generated/types/ConfigPreviewRequest.ts create mode 100644 web/workspace/src/lib/workspace/config-source/generated/types/ConfigSpan.ts create mode 100644 web/workspace/src/lib/workspace/config-source/generated/types/ConfigTreeChange.ts create mode 100644 web/workspace/src/lib/workspace/config-source/generated/types/ConfigTreeSnapshot.ts create mode 100644 web/workspace/src/lib/workspace/config-source/generated/types/EvaluatedConfigCandidate.ts create mode 100644 web/workspace/src/lib/workspace/config-source/generated/types/EvaluatedProjection.ts create mode 100644 web/workspace/src/lib/workspace/config-source/generated/types/EvaluationResult.ts create mode 100644 web/workspace/src/lib/workspace/config-source/generated/types/ToolchainContract.ts create mode 100644 web/workspace/src/lib/workspace/config-source/generated/types/VirtualPath.ts create mode 100644 web/workspace/src/lib/workspace/config-source/generated/types/WorkspaceConfigState.ts diff --git a/Cargo.lock b/Cargo.lock index cdc5792b..de317867 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -601,6 +601,7 @@ dependencies = [ "serde_json", "sha2 0.11.0", "thiserror 2.0.18", + "ts-rs", ] [[package]] diff --git a/crates/config-source-wasm/src/lib.rs b/crates/config-source-wasm/src/lib.rs index 21d64ac7..5b992f64 100644 --- a/crates/config-source-wasm/src/lib.rs +++ b/crates/config-source-wasm/src/lib.rs @@ -32,6 +32,13 @@ pub fn apply_changes(changes: JsValue) -> Result { }) } +#[wasm_bindgen] +pub fn changes_between(base: JsValue, candidate: JsValue) -> Result { + let base: ConfigTreeSnapshot = decode(base)?; + let candidate: ConfigTreeSnapshot = decode(candidate)?; + encode(base.changes_to(&candidate)) +} + #[wasm_bindgen] pub fn evaluate_current(contract: JsValue) -> Result { let contract: ToolchainContract = decode(contract)?; @@ -68,7 +75,7 @@ struct WasmCompletionItem { pub fn complete_current( entrypoint: String, source: String, - utf8_byte_offset: usize, + utf16_offset: usize, explicit: bool, ) -> Result { let entrypoint = VirtualPath::parse(entrypoint).map_err(js_error)?; @@ -77,6 +84,7 @@ pub fn complete_current( let snapshot = session .as_ref() .ok_or_else(|| JsValue::from_str("config source snapshot is not initialized"))?; + let utf8_byte_offset = utf16_to_utf8_offset(&source, utf16_offset)?; let result = SnapshotEnvironment::new(snapshot.clone()) .complete(&entrypoint, &source, utf8_byte_offset, explicit) .map_err(|error| JsValue::from_str(&format!("{error:?}")))? @@ -128,6 +136,24 @@ pub fn format_source(source: String) -> Result { .map_err(|error| JsValue::from_str(&error)) } +fn utf16_to_utf8_offset(source: &str, utf16_offset: usize) -> Result { + let mut units = 0usize; + for (byte_offset, character) in source.char_indices() { + if units == utf16_offset { + return Ok(byte_offset); + } + units += character.len_utf16(); + if units > utf16_offset { + return Err(JsValue::from_str("UTF-16 offset splits a surrogate pair")); + } + } + if units == utf16_offset { + Ok(source.len()) + } else { + Err(JsValue::from_str("UTF-16 offset is outside the source")) + } +} + fn decode(value: JsValue) -> Result { from_value(value).map_err(|error| JsValue::from_str(&error.to_string())) } diff --git a/crates/config-source/Cargo.toml b/crates/config-source/Cargo.toml index 9deb7fa9..d86dc5d5 100644 --- a/crates/config-source/Cargo.toml +++ b/crates/config-source/Cargo.toml @@ -13,6 +13,7 @@ serde = { workspace = true, features = ["derive"] } serde_json.workspace = true sha2.workspace = true thiserror.workspace = true +ts-rs = "12.0.1" [dev-dependencies] pretty_assertions = "1" diff --git a/crates/config-source/src/lib.rs b/crates/config-source/src/lib.rs index f1806799..49c0a9f5 100644 --- a/crates/config-source/src/lib.rs +++ b/crates/config-source/src/lib.rs @@ -19,7 +19,7 @@ pub const MAX_ENTRY_BYTES: usize = 256 * 1024; pub const MAX_TOTAL_BYTES: usize = 4 * 1024 * 1024; pub const MAX_PATH_BYTES: usize = 512; -#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)] +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize, ts_rs::TS)] #[serde(transparent)] pub struct VirtualPath(String); @@ -71,7 +71,7 @@ impl fmt::Display for VirtualPath { } } -#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] +#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, ts_rs::TS)] #[serde(rename_all = "snake_case")] pub enum ConfigContentType { Decodal, @@ -87,7 +87,7 @@ impl ConfigContentType { } } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ts_rs::TS)] pub struct ConfigEntry { pub path: VirtualPath, pub content_type: ConfigContentType, @@ -114,8 +114,9 @@ impl ConfigEntry { } } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ts_rs::TS)] pub struct ConfigTreeSnapshot { + #[ts(type = "number")] pub revision: u64, pub digest: String, pub entries: BTreeMap, @@ -174,6 +175,38 @@ impl ConfigTreeSnapshot { self.entries.get(path) } + pub fn changes_to(&self, candidate: &Self) -> Vec { + let mut changes = Vec::new(); + for (path, base_entry) in &self.entries { + match candidate.entries.get(path) { + None => changes.push(ConfigTreeChange::Delete { + path: path.clone(), + expected_digest: base_entry.content_digest.clone(), + }), + Some(candidate_entry) + if candidate_entry.content_digest != base_entry.content_digest => + { + changes.push(ConfigTreeChange::Update { + path: path.clone(), + expected_digest: base_entry.content_digest.clone(), + content: candidate_entry.content.clone(), + }); + } + Some(_) => {} + } + } + for (path, entry) in &candidate.entries { + if !self.entries.contains_key(path) { + changes.push(ConfigTreeChange::Create { + path: path.clone(), + content_type: entry.content_type, + content: entry.content.clone(), + }); + } + } + changes + } + pub fn apply(&self, changes: &[ConfigTreeChange]) -> Result { if changes.len() > MAX_CHANGE_COUNT { return Err(ConfigTreeError::LimitExceeded("change count")); @@ -253,7 +286,7 @@ impl ConfigTreeSnapshot { } } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ts_rs::TS)] #[serde(tag = "kind", rename_all = "snake_case")] pub enum ConfigTreeChange { Create { @@ -288,7 +321,7 @@ impl ConfigTreeChange { } } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ts_rs::TS)] pub struct ToolchainContract { pub contract_version: u32, pub decodal_version: String, @@ -329,21 +362,22 @@ impl ToolchainContract { } } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ts_rs::TS)] pub struct ConfigSpan { pub start_byte: u32, pub end_byte: u32, } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ts_rs::TS)] pub struct ConfigDiagnosticLabel { pub span: ConfigSpan, pub message: String, } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ts_rs::TS)] pub struct ConfigDiagnostic { pub path: VirtualPath, + #[ts(type = "number")] pub revision: u64, pub tree_digest: String, pub kind: String, @@ -353,14 +387,16 @@ pub struct ConfigDiagnostic { pub notes: Vec, } -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, ts_rs::TS)] +#[ts(export)] pub struct EvaluatedProjection { pub entrypoint: VirtualPath, + #[ts(type = "unknown")] pub data_json: serde_json::Value, pub projection_digest: String, } -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, ts_rs::TS)] pub struct EvaluationResult { pub projections: Vec, pub projection_digest: String, @@ -779,6 +815,30 @@ pub enum ConfigTreeError { mod tests { use super::*; use pretty_assertions::assert_eq; + use ts_rs::TS; + + #[test] + fn exports_typescript_contract() { + let output = std::path::Path::new(env!("CARGO_MANIFEST_DIR")) + .join("../../web/workspace/src/lib/workspace/config-source/generated/types"); + std::fs::create_dir_all(&output).unwrap(); + macro_rules! export { + ($type:ty) => { + <$type>::export_all(&ts_rs::Config::default().with_out_dir(&output)).unwrap(); + }; + } + export!(VirtualPath); + export!(ConfigContentType); + export!(ConfigEntry); + export!(ConfigTreeSnapshot); + export!(ConfigTreeChange); + export!(ToolchainContract); + export!(ConfigSpan); + export!(ConfigDiagnosticLabel); + export!(ConfigDiagnostic); + export!(EvaluatedProjection); + export!(EvaluationResult); + } fn path(value: &str) -> VirtualPath { VirtualPath::parse(value).unwrap() diff --git a/crates/workspace-server/src/config_source.rs b/crates/workspace-server/src/config_source.rs index e9f72a25..2fea1f43 100644 --- a/crates/workspace-server/src/config_source.rs +++ b/crates/workspace-server/src/config_source.rs @@ -11,15 +11,18 @@ use crate::{Error, Result, SqliteWorkspaceStore}; pub const DEFAULT_CONFIG_ENTRYPOINT: &str = "workspace.dcdl"; -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, ts_rs::TS)] +#[ts(export)] pub struct WorkspaceConfigState { pub snapshot: ConfigTreeSnapshot, pub contract: ToolchainContract, pub projection_digest: String, } -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, ts_rs::TS)] +#[ts(export)] pub struct EvaluatedConfigCandidate { + #[ts(type = "number")] pub base_revision: u64, pub base_digest: String, pub snapshot: ConfigTreeSnapshot, @@ -27,8 +30,10 @@ pub struct EvaluatedConfigCandidate { pub evaluation: EvaluationResult, } -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, ts_rs::TS)] +#[ts(export)] pub struct ConfigCommitRequest { + #[ts(type = "number")] pub base_revision: u64, pub base_digest: String, pub changes: Vec, @@ -36,7 +41,8 @@ pub struct ConfigCommitRequest { pub toolchain_fingerprint: String, } -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, ts_rs::TS)] +#[ts(export)] pub struct ConfigPreviewRequest { pub changes: Vec, pub entrypoints: Vec, @@ -494,6 +500,18 @@ mod tests { assert!(store.load_workspace_config("w-config").unwrap().is_none()); } + #[test] + fn exports_typescript_transport_contract() { + use ts_rs::TS; + let output = std::path::Path::new(env!("CARGO_MANIFEST_DIR")) + .join("../../web/workspace/src/lib/workspace/config-source/generated/types"); + let config = ts_rs::Config::default().with_out_dir(&output); + WorkspaceConfigState::export_all(&config).unwrap(); + EvaluatedConfigCandidate::export_all(&config).unwrap(); + ConfigCommitRequest::export_all(&config).unwrap(); + ConfigPreviewRequest::export_all(&config).unwrap(); + } + #[test] fn migration_creates_config_authority_without_changing_applied_migrations() { let store = SqliteWorkspaceStore::in_memory().unwrap(); diff --git a/web/workspace/src/lib/workspace/config-source/ConfigSourceEditor.svelte b/web/workspace/src/lib/workspace/config-source/ConfigSourceEditor.svelte index ffeae315..ae53e273 100644 --- a/web/workspace/src/lib/workspace/config-source/ConfigSourceEditor.svelte +++ b/web/workspace/src/lib/workspace/config-source/ConfigSourceEditor.svelte @@ -25,6 +25,8 @@ let baseRevision = $state(0); let baseDigest = $state(""); let renamePath = $state(""); + let baseSnapshot = $state(null); + let preflightDigest = $state(""); let toolchain: ConfigSourceToolchain | null = null; const paths = $derived( @@ -34,6 +36,7 @@ treeState && selectedPath ? treeState.snapshot.entries[selectedPath] : undefined, ); const dirty = $derived(draftChanges.length > 0 || (selected ? source !== selected.content : source.length > 0)); + const commitReady = $derived(dirty && preflightDigest === treeState?.snapshot.digest); onMount(() => { toolchain = new ConfigSourceToolchain(); @@ -48,6 +51,7 @@ selectedPath = Object.keys(treeState.snapshot.entries).toSorted()[0] ?? ""; } source = selectedPath ? treeState.snapshot.entries[selectedPath].content : ""; + baseSnapshot = structuredClone(treeState.snapshot); baseRevision = treeState.snapshot.revision; baseDigest = treeState.snapshot.digest; await toolchain?.setSnapshot(treeState.snapshot); @@ -65,13 +69,10 @@ async function stageCurrent() { const change = currentChange(); if (!change || !toolchain) return; - draftChanges = [...draftChanges.filter((item) => !changeTouches(item, selectedPath)), change]; const candidate = await toolchain.applyChanges([change]); if (treeState) treeState = { ...treeState, snapshot: candidate }; - } - - function changeTouches(change: ConfigTreeChange, path: string): boolean { - return change.kind === "rename" ? change.from === path || change.to === path : change.path === path; + if (baseSnapshot) draftChanges = await toolchain.changesBetween(baseSnapshot, candidate); + preflightDigest = ""; } async function select(path: string) { @@ -144,6 +145,7 @@ toolchain_fingerprint: treeState.contract.fingerprint, }); diagnostics = []; + preflightDigest = candidate.snapshot.digest; status = `Preview valid · projection ${candidate.evaluation.projection_digest.slice(0, 20)}…`; } catch (error) { status = String(error); @@ -159,6 +161,10 @@ status = "No draft changes to commit."; return; } + if (preflightDigest !== treeState.snapshot.digest) { + status = "Preview the complete candidate successfully before Commit."; + return; + } busy = true; try { treeState = await commitConfigTree(workspaceId, { @@ -169,6 +175,8 @@ toolchain_fingerprint: treeState.contract.fingerprint, }); draftChanges = []; + preflightDigest = ""; + baseSnapshot = structuredClone(treeState.snapshot); baseRevision = treeState.snapshot.revision; baseDigest = treeState.snapshot.digest; await toolchain?.setSnapshot(treeState.snapshot); @@ -198,9 +206,10 @@ path: selectedPath, expected_digest: selected.content_digest, }; - draftChanges = [...draftChanges.filter((item) => !changeTouches(item, selectedPath)), change]; const candidate = await toolchain.applyChanges([change]); treeState = { ...treeState, snapshot: candidate }; + if (baseSnapshot) draftChanges = await toolchain.changesBetween(baseSnapshot, candidate); + preflightDigest = ""; selectedPath = Object.keys(candidate.entries).toSorted()[0] ?? ""; source = selectedPath ? candidate.entries[selectedPath].content : ""; renamePath = selectedPath; @@ -218,9 +227,10 @@ to, expected_digest: selected.content_digest, }; - draftChanges = [...draftChanges.filter((item) => !changeTouches(item, selectedPath)), change]; const candidate = await toolchain.applyChanges([change]); treeState = { ...treeState, snapshot: candidate }; + if (baseSnapshot) draftChanges = await toolchain.changesBetween(baseSnapshot, candidate); + preflightDigest = ""; selectedPath = to; source = candidate.entries[to]?.content ?? ""; status = `Rename to ${to} staged. Preview and Commit to persist.`; @@ -261,7 +271,7 @@ - + diff --git a/web/workspace/src/lib/workspace/config-source/generated/config_source_wasm.d.ts b/web/workspace/src/lib/workspace/config-source/generated/config_source_wasm.d.ts index 6e3d657c..f6e5ecf0 100644 --- a/web/workspace/src/lib/workspace/config-source/generated/config_source_wasm.d.ts +++ b/web/workspace/src/lib/workspace/config-source/generated/config_source_wasm.d.ts @@ -5,7 +5,9 @@ export function analyze_snapshot(snapshot: any, entrypoint: string, source_overr export function apply_changes(changes: any): any; -export function complete_current(entrypoint: string, source: string, utf8_byte_offset: number, explicit: boolean): any; +export function changes_between(base: any, candidate: any): any; + +export function complete_current(entrypoint: string, source: string, utf16_offset: number, explicit: boolean): any; export function evaluate_current(contract: any): any; @@ -23,6 +25,7 @@ export interface InitOutput { readonly memory: WebAssembly.Memory; readonly analyze_snapshot: (a: any, b: number, c: number, d: number, e: number) => [number, number, number]; readonly apply_changes: (a: any) => [number, number, number]; + readonly changes_between: (a: any, b: any) => [number, number, number]; readonly complete_current: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number]; readonly evaluate_current: (a: any) => [number, number, number]; readonly evaluate_snapshot: (a: any, b: any) => [number, number, number]; diff --git a/web/workspace/src/lib/workspace/config-source/generated/config_source_wasm.js b/web/workspace/src/lib/workspace/config-source/generated/config_source_wasm.js index f12b9440..713887df 100644 --- a/web/workspace/src/lib/workspace/config-source/generated/config_source_wasm.js +++ b/web/workspace/src/lib/workspace/config-source/generated/config_source_wasm.js @@ -30,19 +30,32 @@ export function apply_changes(changes) { return takeFromExternrefTable0(ret[0]); } +/** + * @param {any} base + * @param {any} candidate + * @returns {any} + */ +export function changes_between(base, candidate) { + const ret = wasm.changes_between(base, candidate); + if (ret[2]) { + throw takeFromExternrefTable0(ret[1]); + } + return takeFromExternrefTable0(ret[0]); +} + /** * @param {string} entrypoint * @param {string} source - * @param {number} utf8_byte_offset + * @param {number} utf16_offset * @param {boolean} explicit * @returns {any} */ -export function complete_current(entrypoint, source, utf8_byte_offset, explicit) { +export function complete_current(entrypoint, source, utf16_offset, explicit) { const ptr0 = passStringToWasm0(entrypoint, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); const len0 = WASM_VECTOR_LEN; const ptr1 = passStringToWasm0(source, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); const len1 = WASM_VECTOR_LEN; - const ret = wasm.complete_current(ptr0, len0, ptr1, len1, utf8_byte_offset, explicit); + const ret = wasm.complete_current(ptr0, len0, ptr1, len1, utf16_offset, explicit); if (ret[2]) { throw takeFromExternrefTable0(ret[1]); } diff --git a/web/workspace/src/lib/workspace/config-source/generated/config_source_wasm_bg.wasm b/web/workspace/src/lib/workspace/config-source/generated/config_source_wasm_bg.wasm index 7b59d0fa511dc0d0c3180be005068146e45dc2bb..9ca6bd6442fb57ad52b267b444bb0acc9ce185db 100644 GIT binary patch delta 106823 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�d3c%}odL<8@@+B?va-*CEH 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 yYprc)^K+P#ZS=--KpeJb52YnH!2s>F1 [number, number, number]; export const apply_changes: (a: any) => [number, number, number]; +export const changes_between: (a: any, b: any) => [number, number, number]; export const complete_current: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number]; export const evaluate_current: (a: any) => [number, number, number]; export const evaluate_snapshot: (a: any, b: any) => [number, number, number]; diff --git a/web/workspace/src/lib/workspace/config-source/generated/types/ConfigCommitRequest.ts b/web/workspace/src/lib/workspace/config-source/generated/types/ConfigCommitRequest.ts new file mode 100644 index 00000000..ab262091 --- /dev/null +++ b/web/workspace/src/lib/workspace/config-source/generated/types/ConfigCommitRequest.ts @@ -0,0 +1,5 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { ConfigTreeChange } from "./ConfigTreeChange"; +import type { VirtualPath } from "./VirtualPath"; + +export type ConfigCommitRequest = { base_revision: number, base_digest: string, changes: Array, entrypoints: Array, toolchain_fingerprint: string, }; diff --git a/web/workspace/src/lib/workspace/config-source/generated/types/ConfigContentType.ts b/web/workspace/src/lib/workspace/config-source/generated/types/ConfigContentType.ts new file mode 100644 index 00000000..bef199f9 --- /dev/null +++ b/web/workspace/src/lib/workspace/config-source/generated/types/ConfigContentType.ts @@ -0,0 +1,3 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type ConfigContentType = "decodal" | "text"; diff --git a/web/workspace/src/lib/workspace/config-source/generated/types/ConfigDiagnostic.ts b/web/workspace/src/lib/workspace/config-source/generated/types/ConfigDiagnostic.ts new file mode 100644 index 00000000..f1de18e3 --- /dev/null +++ b/web/workspace/src/lib/workspace/config-source/generated/types/ConfigDiagnostic.ts @@ -0,0 +1,6 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { ConfigDiagnosticLabel } from "./ConfigDiagnosticLabel"; +import type { ConfigSpan } from "./ConfigSpan"; +import type { VirtualPath } from "./VirtualPath"; + +export type ConfigDiagnostic = { path: VirtualPath, revision: number, tree_digest: string, kind: string, span: ConfigSpan, message: string, labels: Array, notes: Array, }; diff --git a/web/workspace/src/lib/workspace/config-source/generated/types/ConfigDiagnosticLabel.ts b/web/workspace/src/lib/workspace/config-source/generated/types/ConfigDiagnosticLabel.ts new file mode 100644 index 00000000..487335f0 --- /dev/null +++ b/web/workspace/src/lib/workspace/config-source/generated/types/ConfigDiagnosticLabel.ts @@ -0,0 +1,4 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { ConfigSpan } from "./ConfigSpan"; + +export type ConfigDiagnosticLabel = { span: ConfigSpan, message: string, }; diff --git a/web/workspace/src/lib/workspace/config-source/generated/types/ConfigEntry.ts b/web/workspace/src/lib/workspace/config-source/generated/types/ConfigEntry.ts new file mode 100644 index 00000000..1e16ad74 --- /dev/null +++ b/web/workspace/src/lib/workspace/config-source/generated/types/ConfigEntry.ts @@ -0,0 +1,5 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { ConfigContentType } from "./ConfigContentType"; +import type { VirtualPath } from "./VirtualPath"; + +export type ConfigEntry = { path: VirtualPath, content_type: ConfigContentType, content: string, content_digest: string, }; diff --git a/web/workspace/src/lib/workspace/config-source/generated/types/ConfigPreviewRequest.ts b/web/workspace/src/lib/workspace/config-source/generated/types/ConfigPreviewRequest.ts new file mode 100644 index 00000000..6bf8acb1 --- /dev/null +++ b/web/workspace/src/lib/workspace/config-source/generated/types/ConfigPreviewRequest.ts @@ -0,0 +1,5 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { ConfigTreeChange } from "./ConfigTreeChange"; +import type { VirtualPath } from "./VirtualPath"; + +export type ConfigPreviewRequest = { changes: Array, entrypoints: Array, }; diff --git a/web/workspace/src/lib/workspace/config-source/generated/types/ConfigSpan.ts b/web/workspace/src/lib/workspace/config-source/generated/types/ConfigSpan.ts new file mode 100644 index 00000000..fb28eb7d --- /dev/null +++ b/web/workspace/src/lib/workspace/config-source/generated/types/ConfigSpan.ts @@ -0,0 +1,3 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type ConfigSpan = { start_byte: number, end_byte: number, }; diff --git a/web/workspace/src/lib/workspace/config-source/generated/types/ConfigTreeChange.ts b/web/workspace/src/lib/workspace/config-source/generated/types/ConfigTreeChange.ts new file mode 100644 index 00000000..9f2442c4 --- /dev/null +++ b/web/workspace/src/lib/workspace/config-source/generated/types/ConfigTreeChange.ts @@ -0,0 +1,5 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { ConfigContentType } from "./ConfigContentType"; +import type { VirtualPath } from "./VirtualPath"; + +export type ConfigTreeChange = { "kind": "create", path: VirtualPath, content_type: ConfigContentType, content: string, } | { "kind": "update", path: VirtualPath, expected_digest: string, content: string, } | { "kind": "rename", from: VirtualPath, to: VirtualPath, expected_digest: string, } | { "kind": "delete", path: VirtualPath, expected_digest: string, }; diff --git a/web/workspace/src/lib/workspace/config-source/generated/types/ConfigTreeSnapshot.ts b/web/workspace/src/lib/workspace/config-source/generated/types/ConfigTreeSnapshot.ts new file mode 100644 index 00000000..5f723ce9 --- /dev/null +++ b/web/workspace/src/lib/workspace/config-source/generated/types/ConfigTreeSnapshot.ts @@ -0,0 +1,5 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { ConfigEntry } from "./ConfigEntry"; +import type { VirtualPath } from "./VirtualPath"; + +export type ConfigTreeSnapshot = { revision: number, digest: string, entries: { [key in VirtualPath]: ConfigEntry }, }; diff --git a/web/workspace/src/lib/workspace/config-source/generated/types/EvaluatedConfigCandidate.ts b/web/workspace/src/lib/workspace/config-source/generated/types/EvaluatedConfigCandidate.ts new file mode 100644 index 00000000..f71ba29a --- /dev/null +++ b/web/workspace/src/lib/workspace/config-source/generated/types/EvaluatedConfigCandidate.ts @@ -0,0 +1,6 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { ConfigTreeSnapshot } from "./ConfigTreeSnapshot"; +import type { EvaluationResult } from "./EvaluationResult"; +import type { ToolchainContract } from "./ToolchainContract"; + +export type EvaluatedConfigCandidate = { base_revision: number, base_digest: string, snapshot: ConfigTreeSnapshot, contract: ToolchainContract, evaluation: EvaluationResult, }; diff --git a/web/workspace/src/lib/workspace/config-source/generated/types/EvaluatedProjection.ts b/web/workspace/src/lib/workspace/config-source/generated/types/EvaluatedProjection.ts new file mode 100644 index 00000000..86f4d2e1 --- /dev/null +++ b/web/workspace/src/lib/workspace/config-source/generated/types/EvaluatedProjection.ts @@ -0,0 +1,4 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { VirtualPath } from "./VirtualPath"; + +export type EvaluatedProjection = { entrypoint: VirtualPath, data_json: unknown, projection_digest: string, }; diff --git a/web/workspace/src/lib/workspace/config-source/generated/types/EvaluationResult.ts b/web/workspace/src/lib/workspace/config-source/generated/types/EvaluationResult.ts new file mode 100644 index 00000000..b2061ee9 --- /dev/null +++ b/web/workspace/src/lib/workspace/config-source/generated/types/EvaluationResult.ts @@ -0,0 +1,4 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { EvaluatedProjection } from "./EvaluatedProjection"; + +export type EvaluationResult = { projections: Array, projection_digest: string, }; diff --git a/web/workspace/src/lib/workspace/config-source/generated/types/ToolchainContract.ts b/web/workspace/src/lib/workspace/config-source/generated/types/ToolchainContract.ts new file mode 100644 index 00000000..66f3d3c6 --- /dev/null +++ b/web/workspace/src/lib/workspace/config-source/generated/types/ToolchainContract.ts @@ -0,0 +1,4 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { VirtualPath } from "./VirtualPath"; + +export type ToolchainContract = { contract_version: number, decodal_version: string, schema_version: number, entrypoints: Array, import_policy_version: number, fingerprint: string, }; diff --git a/web/workspace/src/lib/workspace/config-source/generated/types/VirtualPath.ts b/web/workspace/src/lib/workspace/config-source/generated/types/VirtualPath.ts new file mode 100644 index 00000000..12c7d5ec --- /dev/null +++ b/web/workspace/src/lib/workspace/config-source/generated/types/VirtualPath.ts @@ -0,0 +1,3 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type VirtualPath = string; diff --git a/web/workspace/src/lib/workspace/config-source/generated/types/WorkspaceConfigState.ts b/web/workspace/src/lib/workspace/config-source/generated/types/WorkspaceConfigState.ts new file mode 100644 index 00000000..592277cc --- /dev/null +++ b/web/workspace/src/lib/workspace/config-source/generated/types/WorkspaceConfigState.ts @@ -0,0 +1,5 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { ConfigTreeSnapshot } from "./ConfigTreeSnapshot"; +import type { ToolchainContract } from "./ToolchainContract"; + +export type WorkspaceConfigState = { snapshot: ConfigTreeSnapshot, contract: ToolchainContract, projection_digest: string, }; diff --git a/web/workspace/src/lib/workspace/config-source/toolchain.ts b/web/workspace/src/lib/workspace/config-source/toolchain.ts index d1164e64..cf27ed0f 100644 --- a/web/workspace/src/lib/workspace/config-source/toolchain.ts +++ b/web/workspace/src/lib/workspace/config-source/toolchain.ts @@ -4,6 +4,7 @@ import type { ConfigSourceWorkerRequest, ConfigSourceWorkerResponse } from "./to type Command = | Omit, "id"> | Omit, "id"> + | Omit, "id"> | Omit, "id"> | Omit, "id"> | Omit, "id"> @@ -31,14 +32,17 @@ export class ConfigSourceToolchain { applyChanges(changes: ConfigTreeChange[]): Promise { return this.#request({ kind: "apply_changes", changes }); } + changesBetween(base: ConfigTreeSnapshot, candidate: ConfigTreeSnapshot): Promise { + return this.#request({ kind: "changes_between", base, candidate }); + } analyze(path: string, source?: string): Promise { return this.#request({ kind: "analyze", path, source }); } evaluate(contract: ToolchainContract) { return this.#request({ kind: "evaluate", contract }); } - complete(path: string, source: string, utf8ByteOffset: number, explicit = false): Promise { - return this.#request({ kind: "complete", path, source, utf8ByteOffset, explicit }); + complete(path: string, source: string, utf16Offset: number, explicit = false): Promise { + return this.#request({ kind: "complete", path, source, utf16Offset, explicit }); } format(source: string): Promise { return this.#request({ kind: "format", source }); diff --git a/web/workspace/src/lib/workspace/config-source/toolchain.worker.ts b/web/workspace/src/lib/workspace/config-source/toolchain.worker.ts index 9ca865f4..32885cb7 100644 --- a/web/workspace/src/lib/workspace/config-source/toolchain.worker.ts +++ b/web/workspace/src/lib/workspace/config-source/toolchain.worker.ts @@ -1,6 +1,7 @@ import init, { analyze_snapshot, apply_changes, + changes_between, complete_current, evaluate_current, format_source, @@ -11,9 +12,10 @@ import type { ConfigTreeChange } from "./types.ts"; export type ConfigSourceWorkerRequest = | { id: number; kind: "set_snapshot"; snapshot: unknown } | { id: number; kind: "apply_changes"; changes: ConfigTreeChange[] } + | { id: number; kind: "changes_between"; base: unknown; candidate: unknown } | { id: number; kind: "analyze"; path: string; source?: string } | { id: number; kind: "evaluate"; contract: unknown } - | { id: number; kind: "complete"; path: string; source: string; utf8ByteOffset: number; explicit: boolean } + | { id: number; kind: "complete"; path: string; source: string; utf16Offset: number; explicit: boolean } | { id: number; kind: "format"; source: string }; export type ConfigSourceWorkerResponse = @@ -38,6 +40,9 @@ self.onmessage = async (event: MessageEvent): Promise snapshot = apply_changes(request.changes); result = snapshot; break; + case "changes_between": + result = changes_between(request.base, request.candidate); + break; case "analyze": if (!snapshot) throw new Error("config source snapshot is not initialized"); result = analyze_snapshot(snapshot, request.path, request.source); @@ -46,7 +51,7 @@ self.onmessage = async (event: MessageEvent): Promise result = evaluate_current(request.contract); break; case "complete": - result = complete_current(request.path, request.source, request.utf8ByteOffset, request.explicit); + result = complete_current(request.path, request.source, request.utf16Offset, request.explicit); break; case "format": result = format_source(request.source); diff --git a/web/workspace/src/lib/workspace/config-source/types.ts b/web/workspace/src/lib/workspace/config-source/types.ts index f157a515..f8fa6ac8 100644 --- a/web/workspace/src/lib/workspace/config-source/types.ts +++ b/web/workspace/src/lib/workspace/config-source/types.ts @@ -1,93 +1,16 @@ -export type VirtualPath = string; - -export type ConfigContentType = "decodal" | "text"; - -export interface ConfigEntry { - path: VirtualPath; - content_type: ConfigContentType; - content: string; - content_digest: string; -} - -export interface ConfigTreeSnapshot { - revision: number; - digest: string; - entries: Record; -} - -export type ConfigTreeChange = - | { - kind: "create"; - path: VirtualPath; - content_type: ConfigContentType; - content: string; - } - | { - kind: "update"; - path: VirtualPath; - expected_digest: string; - content: string; - } - | { - kind: "rename"; - from: VirtualPath; - to: VirtualPath; - expected_digest: string; - } - | { - kind: "delete"; - path: VirtualPath; - expected_digest: string; - }; - -export interface ToolchainContract { - contract_version: number; - decodal_version: string; - schema_version: number; - entrypoints: VirtualPath[]; - import_policy_version: number; - fingerprint: string; -} - -export interface ConfigDiagnostic { - path: VirtualPath; - revision: number; - tree_digest: string; - kind: string; - span: { start_byte: number; end_byte: number }; - message: string; - labels: Array<{ - span: { start_byte: number; end_byte: number }; - message: string; - }>; - notes: string[]; -} - -export interface WorkspaceConfigTreeResponse { - snapshot: ConfigTreeSnapshot; - contract: ToolchainContract; - projection_digest: string; -} - -export interface EvaluatedConfigCandidate { - base_revision: number; - base_digest: string; - snapshot: ConfigTreeSnapshot; - contract: ToolchainContract; - evaluation: { - projections: Array<{ - entrypoint: VirtualPath; - data_json: unknown; - projection_digest: string; - }>; - projection_digest: string; - }; -} - -export interface ConfigCommitRequest { - base_revision: number; - base_digest: string; - changes: ConfigTreeChange[]; - entrypoints: VirtualPath[]; - toolchain_fingerprint: string; -} +// Core and HTTP DTOs are generated from Rust with ts-rs. +export type { ConfigContentType } from "./generated/types/ConfigContentType.ts"; +export type { ConfigDiagnostic } from "./generated/types/ConfigDiagnostic.ts"; +export type { ConfigDiagnosticLabel } from "./generated/types/ConfigDiagnosticLabel.ts"; +export type { ConfigEntry } from "./generated/types/ConfigEntry.ts"; +export type { ConfigSpan } from "./generated/types/ConfigSpan.ts"; +export type { ConfigTreeChange } from "./generated/types/ConfigTreeChange.ts"; +export type { ConfigTreeSnapshot } from "./generated/types/ConfigTreeSnapshot.ts"; +export type { EvaluatedProjection } from "./generated/types/EvaluatedProjection.ts"; +export type { EvaluationResult } from "./generated/types/EvaluationResult.ts"; +export type { ToolchainContract } from "./generated/types/ToolchainContract.ts"; +export type { VirtualPath } from "./generated/types/VirtualPath.ts"; +export type { ConfigCommitRequest } from "./generated/types/ConfigCommitRequest.ts"; +export type { ConfigPreviewRequest } from "./generated/types/ConfigPreviewRequest.ts"; +export type { EvaluatedConfigCandidate } from "./generated/types/EvaluatedConfigCandidate.ts"; +export type { WorkspaceConfigState as WorkspaceConfigTreeResponse } from "./generated/types/WorkspaceConfigState.ts"; diff --git a/web/workspace/src/lib/workspace/settings/DecodalSourceEditor.svelte b/web/workspace/src/lib/workspace/settings/DecodalSourceEditor.svelte index 6a9411d0..20e58e61 100644 --- a/web/workspace/src/lib/workspace/settings/DecodalSourceEditor.svelte +++ b/web/workspace/src/lib/workspace/settings/DecodalSourceEditor.svelte @@ -16,7 +16,7 @@ readonly?: boolean; ariaLabel?: string; onChange?: (value: string) => void; - onComplete?: (source: string, utf8ByteOffset: number, explicit: boolean) => Promise; + onComplete?: (source: string, utf16Offset: number, explicit: boolean) => Promise; } = $props(); let host = $state(null); @@ -54,8 +54,7 @@ decodal(), ...(handleComplete ? [autocompletion({ override: [async (context: CompletionContext) => { const doc = context.state.doc.toString(); - const utf8ByteOffset = new TextEncoder().encode(doc.slice(0, context.pos)).byteLength; - return await handleComplete(doc, utf8ByteOffset, context.explicit); + return await handleComplete(doc, context.pos, context.explicit); }] })] : []), keymap.of([]), EditorState.readOnly.of(initialReadonly),