From e9b69fb56d1c91fc69ac08360fd0e064e7c0f254 Mon Sep 17 00:00:00 2001
From: Chris Joel <0xcda7a@gmail.com>
Date: Thu, 23 May 2024 20:41:22 -0700
Subject: [PATCH 1/7] feat: Better transpiled module caching in SW
---
Cargo.lock | 3 +
Cargo.toml | 2 +
rust/usuba-compat/Cargo.toml | 1 +
rust/usuba-compat/src/lib.rs | 4 +
rust/usuba-compat/wit/usuba-compat.wit | 1 +
rust/usuba/Cargo.toml | 2 +
rust/usuba/src/bake/bake.rs | 7 +-
rust/usuba/src/bake/javascript.rs | 49 ++--
rust/usuba/src/bake/mod.rs | 9 +-
rust/usuba/src/error.rs | 16 ++
rust/usuba/src/routes/module/build.rs | 70 ++++--
typescript/packages/usuba-sw/openapi.json | 13 +-
typescript/packages/usuba-sw/package.json | 10 +-
typescript/packages/usuba-sw/src/index.ts | 229 ++++++++++--------
.../packages/usuba-sw/tsconfig.tsbuildinfo | 2 +-
15 files changed, 274 insertions(+), 144 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
index 26808daa5..e00e0aedf 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1558,6 +1558,7 @@ dependencies = [
name = "usuba"
version = "0.1.0"
dependencies = [
+ "anyhow",
"async-trait",
"axum",
"blake3",
@@ -1574,12 +1575,14 @@ dependencies = [
"tracing-subscriber",
"utoipa",
"utoipa-swagger-ui",
+ "wit-parser 0.208.1",
]
[[package]]
name = "usuba-compat"
version = "0.1.0"
dependencies = [
+ "blake3",
"js-component-bindgen",
"wasmtime-environ",
"wit-bindgen",
diff --git a/Cargo.toml b/Cargo.toml
index d1bc1843c..b2ebf2cfe 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -9,6 +9,7 @@ members = [
resolver = "2"
[workspace.dependencies]
+anyhow = { version = "1" }
async-trait = { version = "0.1" }
axum = { version = "0.7" }
blake3 = { version = "1.5" }
@@ -32,6 +33,7 @@ wasm-bindgen = { version = "0.2" }
wasmtime-environ = { version = "20" }
web-sys = { version = "0.3" }
wit-bindgen = { version = "0.25" }
+wit-parser = { version = "0.208" }
[profile.release]
opt-level = 'z'
diff --git a/rust/usuba-compat/Cargo.toml b/rust/usuba-compat/Cargo.toml
index 2eb428e60..dcceeead1 100644
--- a/rust/usuba-compat/Cargo.toml
+++ b/rust/usuba-compat/Cargo.toml
@@ -7,6 +7,7 @@ edition = "2021"
crate-type = ["cdylib", "rlib"]
[dependencies]
+blake3 = { workspace = true }
js-component-bindgen = { workspace = true }
wit-bindgen = { workspace = true }
wasmtime-environ = { workspace = true, features = ["component-model", "compile"] }
\ No newline at end of file
diff --git a/rust/usuba-compat/src/lib.rs b/rust/usuba-compat/src/lib.rs
index 9620f27ab..3810dd3ba 100644
--- a/rust/usuba-compat/src/lib.rs
+++ b/rust/usuba-compat/src/lib.rs
@@ -30,6 +30,10 @@ impl Guest for Polyfill {
.map(|transpiled| transpiled.into())
.map_err(|error| format!("{}", error))
}
+
+ fn hash(bytes: Vec) -> String {
+ blake3::hash(&bytes).to_string()
+ }
}
export!(Polyfill);
diff --git a/rust/usuba-compat/wit/usuba-compat.wit b/rust/usuba-compat/wit/usuba-compat.wit
index 04e25250f..c0318cacd 100644
--- a/rust/usuba-compat/wit/usuba-compat.wit
+++ b/rust/usuba-compat/wit/usuba-compat.wit
@@ -21,4 +21,5 @@ world usuba-compat {
}
export polyfill: func(component: list, options: polyfill-options) -> result;
+ export hash: func(bytes: list) -> string;
}
\ No newline at end of file
diff --git a/rust/usuba/Cargo.toml b/rust/usuba/Cargo.toml
index effb467cb..85d86b2b8 100644
--- a/rust/usuba/Cargo.toml
+++ b/rust/usuba/Cargo.toml
@@ -7,6 +7,7 @@ edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
+anyhow = { workspace = true }
async-trait = { workspace = true }
axum = { workspace = true, features = ["multipart"] }
blake3 = { workspace = true }
@@ -23,5 +24,6 @@ tracing = { workspace = true }
tracing-subscriber = { workspace = true }
utoipa = { workspace = true, features = ["axum_extras"] }
utoipa-swagger-ui = { workspace = true, features = ["axum"] }
+wit-parser = { workspace = true }
# gcloud-sdk = { version = "0.24.6", features = ["google-cloud-aiplatform-v1"] }
diff --git a/rust/usuba/src/bake/bake.rs b/rust/usuba/src/bake/bake.rs
index 638521c6e..b8295d909 100644
--- a/rust/usuba/src/bake/bake.rs
+++ b/rust/usuba/src/bake/bake.rs
@@ -4,5 +4,10 @@ use bytes::Bytes;
#[async_trait]
pub trait Bake {
- async fn bake(&self, wit: Bytes, source_code: Bytes) -> Result;
+ async fn bake(
+ &self,
+ world: &str,
+ wit: Vec,
+ source_code: Bytes,
+ ) -> Result;
}
diff --git a/rust/usuba/src/bake/javascript.rs b/rust/usuba/src/bake/javascript.rs
index ed7a4baee..1b2f87da0 100644
--- a/rust/usuba/src/bake/javascript.rs
+++ b/rust/usuba/src/bake/javascript.rs
@@ -1,12 +1,25 @@
use std::io::Cursor;
+use std::path::{Path, PathBuf};
use tracing::instrument;
+use crate::UsubaError;
+
use super::Bake;
use async_trait::async_trait;
use bytes::Bytes;
use tempfile::TempDir;
use tokio::process::Command;
+use tokio::task::JoinSet;
+
+use wit_parser::UnresolvedPackage;
+
+async fn write_file(path: PathBuf, bytes: Bytes) -> Result<(), UsubaError> {
+ let mut file = tokio::fs::File::create(&path).await?;
+ let mut cursor = Cursor::new(bytes.as_ref());
+ tokio::io::copy(&mut cursor, &mut file).await?;
+ Ok(())
+}
#[derive(Debug)]
pub struct JavaScriptBaker {}
@@ -14,7 +27,12 @@ pub struct JavaScriptBaker {}
#[async_trait]
impl Bake for JavaScriptBaker {
#[instrument]
- async fn bake(&self, wit: Bytes, source_code: Bytes) -> Result {
+ async fn bake(
+ &self,
+ world: &str,
+ wit: Vec,
+ source_code: Bytes,
+ ) -> Result {
let workspace = TempDir::new()?;
debug!(
"Created temporary workspace in {}",
@@ -23,31 +41,32 @@ impl Bake for JavaScriptBaker {
let wasm_path = workspace.path().join("module.wasm");
let js_path = workspace.path().join("module.js");
- let wit_path = workspace.path().join("module.wit");
- let (mut wit_file, mut js_file) = tokio::try_join!(
- tokio::fs::File::create(&wit_path),
- tokio::fs::File::create(&js_path),
- )?;
+ debug!(?workspace, "Created temporary workspace");
- debug!(?wit_path, ?js_path, "Created temporary input files");
+ let mut writes = JoinSet::new();
- let mut wit_cursor = Cursor::new(wit);
- let mut js_cursor = Cursor::new(source_code);
+ wit.into_iter()
+ .enumerate()
+ .map(|(i, wit)| write_file(workspace.path().join(format!("module{}.wit", i)), wit))
+ .chain([write_file(js_path.clone(), source_code)])
+ .for_each(|fut| {
+ writes.spawn(fut);
+ });
- tokio::try_join!(
- tokio::io::copy(&mut wit_cursor, &mut wit_file),
- tokio::io::copy(&mut js_cursor, &mut js_file),
- )?;
+ while let Some(result) = writes.try_join_next() {
+ result??;
+ continue;
+ }
- debug!(?wit_path, ?js_path, "Populated temporary input files");
+ debug!(?workspace, "Populated temporary input files");
let mut command = Command::new("jco");
command
.arg("componentize")
.arg("-w")
- .arg(wit_path.display().to_string())
+ .arg(workspace.path())
.arg("-o")
.arg(wasm_path.display().to_string())
.arg(js_path.display().to_string());
diff --git a/rust/usuba/src/bake/mod.rs b/rust/usuba/src/bake/mod.rs
index fde35aff0..f2ae05c64 100644
--- a/rust/usuba/src/bake/mod.rs
+++ b/rust/usuba/src/bake/mod.rs
@@ -13,9 +13,14 @@ pub enum Baker {
#[async_trait]
impl Bake for Baker {
- async fn bake(&self, wit: Bytes, source_code: Bytes) -> Result {
+ async fn bake(
+ &self,
+ world: &str,
+ wit: Vec,
+ source_code: Bytes,
+ ) -> Result {
match self {
- Baker::JavaScript => (JavaScriptBaker {}).bake(wit, source_code).await,
+ Baker::JavaScript => (JavaScriptBaker {}).bake(world, wit, source_code).await,
}
}
}
diff --git a/rust/usuba/src/error.rs b/rust/usuba/src/error.rs
index eaaa76771..ac11a4af6 100644
--- a/rust/usuba/src/error.rs
+++ b/rust/usuba/src/error.rs
@@ -5,6 +5,7 @@ use blake3::HexError;
use redb::{CommitError, DatabaseError, StorageError, TableError, TransactionError};
use serde::{Deserialize, Serialize};
use thiserror::Error;
+use tokio::task::JoinError;
use tracing::subscriber::SetGlobalDefaultError;
use utoipa::ToSchema;
@@ -16,6 +17,8 @@ pub enum UsubaError {
BakeFailure(String),
#[error("Invalid configuration: {0}")]
InvalidConfiguration(String),
+ #[error("Invalid module: {0}")]
+ InvalidModule(String),
#[error("Module not found")]
ModuleNotFound,
#[error("An internal error occurred")]
@@ -89,10 +92,23 @@ impl From for UsubaError {
}
}
+impl From for UsubaError {
+ fn from(value: JoinError) -> Self {
+ UsubaError::Internal(format!("{}", value))
+ }
+}
+
+impl From for UsubaError {
+ fn from(value: anyhow::Error) -> Self {
+ todo!()
+ }
+}
+
impl IntoResponse for UsubaError {
fn into_response(self) -> axum::response::Response {
let status = match self {
UsubaError::BadRequest => StatusCode::BAD_REQUEST,
+ UsubaError::InvalidModule(_) => StatusCode::BAD_REQUEST,
UsubaError::BakeFailure(_) => StatusCode::INTERNAL_SERVER_ERROR,
UsubaError::InvalidConfiguration(_) => StatusCode::BAD_REQUEST,
UsubaError::Internal(_) => StatusCode::INTERNAL_SERVER_ERROR,
diff --git a/rust/usuba/src/routes/module/build.rs b/rust/usuba/src/routes/module/build.rs
index 518542758..02226d547 100644
--- a/rust/usuba/src/routes/module/build.rs
+++ b/rust/usuba/src/routes/module/build.rs
@@ -8,12 +8,16 @@ use axum::{
use bytes::Bytes;
use serde::{Deserialize, Serialize};
use utoipa::ToSchema;
+use wit_parser::UnresolvedPackage;
use crate::{Bake, Baker, HashStorage, UsubaError, UsubaState};
#[derive(ToSchema)]
+/// A `multipart/form-data` payload that consists of module WIT + source code as
+/// well as additional (optional) library WIT files
pub struct BuildModuleRequest {
- pub files: Vec>,
+ pub module: Vec>,
+ pub library: Vec>,
}
#[derive(Serialize, Deserialize, ToSchema)]
@@ -41,36 +45,60 @@ pub async fn build_module(
State(UsubaState { mut storage }): State,
mut form_data: Multipart,
) -> Result {
- let mut wit: Option = None;
+ let mut world_name: Option = None;
+ let mut wit: Vec = Vec::new();
let mut source_code: Option = None;
let mut baker: Option = None;
- 'collect_files: while let Some(field) = form_data.next_field().await? {
+ while let Some(field) = form_data.next_field().await? {
if let Some(file_name) = field.file_name() {
let file_name = PathBuf::from(file_name);
- if let Some(extension) = file_name.extension() {
- match extension.to_str() {
- Some("wit") => {
- wit = Some(field.bytes().await?);
- }
- Some("js") => {
- source_code = Some(field.bytes().await?);
- baker = Some(Baker::JavaScript);
- }
- _ => (),
- };
- }
- }
+ match field.name() {
+ Some("module") => {
+ if let Some(extension) = file_name.extension() {
+ match extension.to_str() {
+ Some("wit") => {
+ let module_wit = field.bytes().await?;
+ let wit_package = UnresolvedPackage::parse(
+ &PathBuf::from("module.wit"),
+ String::from_utf8_lossy(&module_wit).as_ref(),
+ )?;
- match (&wit, &source_code, &baker) {
- (Some(_), Some(_), Some(_)) => break 'collect_files,
- _ => (),
+ wit.push(module_wit);
+
+ world_name = Some(
+ wit_package
+ .worlds
+ .iter()
+ .nth(0)
+ .map(|(_, world)| world.name.clone())
+ .ok_or_else(|| {
+ UsubaError::InvalidModule(format!(
+ "Module WIT does not contain a world"
+ ))
+ })?,
+ );
+ }
+ Some("js") => {
+ source_code = Some(field.bytes().await?);
+ baker = Some(Baker::JavaScript);
+ }
+ _ => (),
+ };
+ }
+ }
+ Some("library") => {
+ wit.push(field.bytes().await?);
+ }
+ Some(name) => warn!("Unexpected multipart content: {name}"),
+ _ => warn!("Skipping unnamed multipart content"),
+ };
}
}
- if let (Some(wit), Some(source_code), Some(baker)) = (wit, source_code, baker) {
- let wasm = baker.bake(wit, source_code).await?;
+ if let (Some(world_name), Some(source_code), Some(baker)) = (world_name, source_code, baker) {
+ let wasm = baker.bake(&world_name, wit, source_code).await?;
let hash = storage.write(wasm).await?;
Ok(BuildModuleResponse {
diff --git a/typescript/packages/usuba-sw/openapi.json b/typescript/packages/usuba-sw/openapi.json
index 58b8bbaa0..5c840421b 100644
--- a/typescript/packages/usuba-sw/openapi.json
+++ b/typescript/packages/usuba-sw/openapi.json
@@ -105,11 +105,20 @@
"schemas": {
"BuildModuleRequest": {
"type": "object",
+ "description": "A `multipart/form-data` payload that consists of module WIT + source code as\nwell as additional (optional) library WIT files",
"required": [
- "files"
+ "module",
+ "library"
],
"properties": {
- "files": {
+ "library": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "binary"
+ }
+ },
+ "module": {
"type": "array",
"items": {
"type": "string",
diff --git a/typescript/packages/usuba-sw/package.json b/typescript/packages/usuba-sw/package.json
index cb3b2ce63..218dd215f 100644
--- a/typescript/packages/usuba-sw/package.json
+++ b/typescript/packages/usuba-sw/package.json
@@ -32,13 +32,19 @@
},
"wireit": {
"update-openapi-spec": {
- "command": "./scripts/update-openapi-spec.sh"
+ "command": "./scripts/update-openapi-spec.sh",
+ "output": [
+ "./openapi.json"
+ ]
},
"build:openapi-client": {
+ "command": "npx @hey-api/openapi-ts -i ./openapi.json -o ./src/openapi-client",
"files": [
"./openapi.json"
],
- "command": "npx @hey-api/openapi-ts -i ./openapi.json -o ./src/openapi-client"
+ "output": [
+ "./src/openapi-client/**/*"
+ ]
},
"build:wasm": {
"command": "../../../rust/usuba-compat/build-wasm-component.sh",
diff --git a/typescript/packages/usuba-sw/src/index.ts b/typescript/packages/usuba-sw/src/index.ts
index 50b6bbf29..c92c5649c 100644
--- a/typescript/packages/usuba-sw/src/index.ts
+++ b/typescript/packages/usuba-sw/src/index.ts
@@ -1,10 +1,136 @@
import * as apiClient from './openapi-client/services.gen';
-import { polyfill } from './usuba_compat/usuba_compat.component.js';
+import { polyfill, hash } from './usuba_compat/usuba_compat.component.js';
self.addEventListener('install', (_event) => {
console.log('Usuba Service Worker installed');
});
+const TRANSPILED_MODULES_CACHE_NAME = 'v1/modules/transpiled';
+
+const respondFromCache = (event: FetchEvent, url: URL) => {
+ event.respondWith(
+ (async () => {
+ const cache = await caches.open(TRANSPILED_MODULES_CACHE_NAME);
+ const cacheResponse = await cache.match(url);
+
+ if (cacheResponse) {
+ return cacheResponse;
+ } else {
+ return fetch(event.request);
+ }
+ })()
+ );
+};
+
+const buildModule = (event: FetchEvent, url: URL) => {
+ event.respondWith(
+ (async () => {
+ console.log('On-demand module generation detected...');
+ url.pathname.split('/').slice(2);
+
+ const [ext, witBase64, sourceCodeBase64] = url.pathname
+ .split('/')
+ .slice(3);
+
+ console.log('Attempting to parse on-demand path fragment...');
+
+ if (ext && witBase64 && sourceCodeBase64) {
+ const encoder = new TextEncoder();
+ const polyfilledModuleId = hash(
+ encoder.encode(`${witBase64}.${sourceCodeBase64}`)
+ );
+ const cache = await caches.open(TRANSPILED_MODULES_CACHE_NAME);
+ const moduleShortId = polyfilledModuleId.slice(0, 6);
+ const moduleSlug = `module-${moduleShortId}`;
+
+ const entrypointModule = `/module/tra'v1/modules/transpiled'nspiled/${moduleSlug}-wrapper.js`;
+ const entrypointUrl = new URL(entrypointModule, url.origin);
+
+ const cacheItem = await cache.match(entrypointUrl);
+
+ if (typeof cacheItem != 'undefined') {
+ console.log('Polyfilled module found in cache!');
+ return cacheItem;
+ }
+
+ console.log("Nothing found in cache; we'll do it live!");
+
+ const wit = atob(witBase64);
+ const sourceCode = atob(sourceCodeBase64);
+
+ console.log('File extension:', ext);
+ console.log('WIT:\n', wit);
+ console.log('Source Code:\n', sourceCode);
+
+ const witFile = new File([new Blob([wit])], 'module.wit');
+ const sourceCodeFile = new File(
+ [new Blob([sourceCode])],
+ `module.${ext}`
+ );
+
+ const moduleId = (
+ await apiClient.buildModule({
+ formData: {
+ library: [],
+ module: [witFile, sourceCodeFile],
+ },
+ })
+ ).id;
+
+ const moduleBytes = new Uint8Array(
+ await (
+ await apiClient.retrieveModule({
+ id: moduleId,
+ })
+ ).arrayBuffer()
+ );
+
+ const {
+ files,
+ imports: _imports,
+ exports: _exports,
+ } = polyfill(moduleBytes, {
+ name: moduleSlug,
+ mappings: Object.entries({
+ 'wasi:cli/*': '/wasi-shim/cli.js#*',
+ 'wasi:clocks/*': '/wasi-shim/clocks.js#*',
+ 'wasi:filesystem/*': '/wasi-shim/filesystem.js#*',
+ 'wasi:http/*': '/wasi-shim/http.js#*',
+ 'wasi:io/*': '/wasi-shim/io.js#*',
+ 'wasi:random/*': '/wasi-shim/random.js#*',
+ 'wasi:sockets/*': '/wasi-shim/sockets.js#*',
+ }),
+ });
+
+ for (const [filename, bytes] of files) {
+ console.log('Caching artifact:', filename);
+
+ const blob = new Blob([bytes], {
+ type: filename.endsWith('.wasm')
+ ? 'application/wasm'
+ : 'text/javascript',
+ });
+
+ const nextUrl = new URL(`/module/transpiled/${filename}`, url.origin);
+ await cache.put(nextUrl, new Response(blob));
+ }
+
+ const wrapperModule = `export * from '/module/transpiled/${moduleSlug}.js'`;
+ const blob = new Blob([wrapperModule], { type: 'text/javascript' });
+ const response = new Response(blob);
+
+ await cache.put(entrypointUrl, response.clone());
+
+ return response;
+ } else {
+ return new Response(new Blob([], { type: 'text/html' }), {
+ status: 404,
+ });
+ }
+ })()
+ );
+};
+
self.addEventListener('fetch', async (event: FetchEvent) => {
if (event.request.method !== 'GET') {
return;
@@ -13,106 +139,9 @@ self.addEventListener('fetch', async (event: FetchEvent) => {
const requestUrl = new URL(event.request.url);
if (requestUrl.pathname.startsWith('/module/transpiled')) {
- console.log('Pulling generated artifact from cache...');
- event.respondWith(
- (async () => {
- const cache = await caches.open('v0/modules/transpiled');
- const cacheResponse = await cache.match(requestUrl);
- if (cacheResponse) {
- return cacheResponse;
- } else {
- return fetch(event.request);
- }
- })()
- );
+ respondFromCache(event, requestUrl);
} else if (requestUrl.pathname.startsWith('/module/on-demand')) {
- console.log('On-demand module generation detected...');
- requestUrl.pathname.split('/').slice(2);
-
- const [ext, witBase64, sourceCodeBase64] = requestUrl.pathname
- .split('/')
- .slice(3);
-
- console.log('Attempting to parse on-demand path fragment...');
-
- if (ext && witBase64 && sourceCodeBase64) {
- const wit = atob(witBase64);
- const sourceCode = atob(sourceCodeBase64);
-
- console.log('File extension:', ext);
- console.log('WIT:\n', wit);
- console.log('Source Code:\n', sourceCode);
-
- const witFile = new File([new Blob([wit])], 'module.wit');
- const sourceCodeFile = new File(
- [new Blob([sourceCode])],
- `module.${ext}`
- );
-
- event.respondWith(
- (async () => {
- const moduleId = (
- await apiClient.buildModule({
- formData: {
- files: [witFile, sourceCodeFile],
- },
- })
- ).id;
-
- const moduleBytes = new Uint8Array(
- await (
- await apiClient.retrieveModule({
- id: moduleId,
- })
- ).arrayBuffer()
- );
- const cache = await caches.open('v0/modules/transpiled');
- const fileSlug = `module-${moduleId.slice(0, 6)}`;
-
- const entrypointModule = `/module/transpiled/${fileSlug}.js`;
- const maybeHotUrl = new URL(entrypointModule, requestUrl.origin);
-
- if (!(await cache.match(maybeHotUrl))) {
- const {
- files,
- imports: _imports,
- exports: _exports,
- } = polyfill(moduleBytes, {
- name: fileSlug,
- mappings: Object.entries({
- 'wasi:cli/*': '/wasi-shim/cli.js#*',
- 'wasi:clocks/*': '/wasi-shim/clocks.js#*',
- 'wasi:filesystem/*': '/wasi-shim/filesystem.js#*',
- 'wasi:http/*': '/wasi-shim/http.js#*',
- 'wasi:io/*': '/wasi-shim/io.js#*',
- 'wasi:random/*': '/wasi-shim/random.js#*',
- 'wasi:sockets/*': '/wasi-shim/sockets.js#*',
- }),
- });
-
- for (const [filename, bytes] of files) {
- console.log('Caching artifact:', filename);
- const blob = new Blob([bytes], {
- type: filename.endsWith('.wasm')
- ? 'application/wasm'
- : 'text/javascript',
- });
- const url = new URL(
- `/module/transpiled/${filename}`,
- requestUrl.origin
- );
-
- await cache.put(url, new Response(blob));
- }
- }
-
- const wrapperModule = `export * from '/module/transpiled/${fileSlug}.js'`;
- const blob = new Blob([wrapperModule], { type: 'text/javascript' });
-
- return new Response(blob);
- })()
- );
- }
+ buildModule(event, requestUrl);
}
});
diff --git a/typescript/packages/usuba-sw/tsconfig.tsbuildinfo b/typescript/packages/usuba-sw/tsconfig.tsbuildinfo
index 164f511dd..53a46ee01 100644
--- a/typescript/packages/usuba-sw/tsconfig.tsbuildinfo
+++ b/typescript/packages/usuba-sw/tsconfig.tsbuildinfo
@@ -1 +1 @@
-{"program":{"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","./src/openapi-client/core/CancelablePromise.ts","./src/openapi-client/core/ApiRequestOptions.ts","./src/openapi-client/core/OpenAPI.ts","./src/openapi-client/core/ApiResult.ts","./src/openapi-client/core/ApiError.ts","./src/openapi-client/core/request.ts","./src/openapi-client/types.gen.ts","./src/openapi-client/services.gen.ts","./src/usuba_compat/interfaces/wasi-cli-environment.d.ts","./src/usuba_compat/interfaces/wasi-cli-exit.d.ts","./src/usuba_compat/interfaces/wasi-io-error.d.ts","./src/usuba_compat/interfaces/wasi-io-streams.d.ts","./src/usuba_compat/interfaces/wasi-cli-stderr.d.ts","./src/usuba_compat/interfaces/wasi-cli-stdin.d.ts","./src/usuba_compat/interfaces/wasi-cli-stdout.d.ts","./src/usuba_compat/interfaces/wasi-clocks-wall-clock.d.ts","./src/usuba_compat/interfaces/wasi-filesystem-types.d.ts","./src/usuba_compat/interfaces/wasi-filesystem-preopens.d.ts","./src/usuba_compat/interfaces/wasi-random-random.d.ts","./src/usuba_compat/usuba_compat.component.d.ts","./src/index.ts","./src/openapi-client/schemas.gen.ts","./src/openapi-client/index.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-environment.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-exit.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-run.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-io-error.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-io-poll.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-io-streams.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-stderr.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-stdin.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-stdout.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-terminal-input.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-terminal-output.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-terminal-stderr.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-terminal-stdin.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-terminal-stdout.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/cli.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-clocks-monotonic-clock.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-clocks-wall-clock.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/clocks.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-filesystem-types.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-filesystem-preopens.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/filesystem.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-http-types.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-http-incoming-handler.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-http-outgoing-handler.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/http.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/io.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-random-insecure-seed.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-random-insecure.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-random-random.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/random.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-sockets-network.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-sockets-instance-network.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-sockets-ip-name-lookup.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-sockets-tcp.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-sockets-tcp-create-socket.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-sockets-udp.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-sockets-udp-create-socket.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/sockets.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/index.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/wasi-cli-command.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/wasi-http-proxy.d.ts","../../node_modules/@types/serviceworker/iterable.d.ts","../../node_modules/@types/serviceworker/index.d.ts"],"fileInfos":[{"version":"824cb491a40f7e8fdeb56f1df5edf91b23f3e3ee6b4cde84d4a99be32338faee","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569",{"version":"138fb588d26538783b78d1e3b2c2cc12d55840b97bf5e08bca7f7a174fbe2f17","affectsGlobalScope":true},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"bc47685641087c015972a3f072480889f0d6c65515f12bd85222f49a98952ed7","affectsGlobalScope":true},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true},{"version":"bb42a7797d996412ecdc5b2787720de477103a0b2e53058569069a0e2bae6c7e","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"b541a838a13f9234aba650a825393ffc2292dc0fc87681a5d81ef0c96d281e7a","affectsGlobalScope":true},{"version":"b20fe0eca9a4e405f1a5ae24a2b3290b37cf7f21eba6cbe4fc3fab979237d4f3","affectsGlobalScope":true},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"49ed889be54031e1044af0ad2c603d627b8bda8b50c1a68435fe85583901d072","affectsGlobalScope":true},{"version":"e93d098658ce4f0c8a0779e6cab91d0259efb88a318137f686ad76f8410ca270","affectsGlobalScope":true},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"5e07ed3809d48205d5b985642a59f2eba47c402374a7cf8006b686f79efadcbd","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"8073890e29d2f46fdbc19b8d6d2eb9ea58db9a2052f8640af20baff9afbc8640","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true},{"version":"51e547984877a62227042850456de71a5c45e7fe86b7c975c6e68896c86fa23b","affectsGlobalScope":true},{"version":"956d27abdea9652e8368ce029bb1e0b9174e9678a273529f426df4b3d90abd60","affectsGlobalScope":true},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},{"version":"663237e06287606be7ccdb892ddc9562352aec15dedca983ac84004c2b1b17cc","signature":"11a746b4d1023300a23da9afb502364b8a67874b00f34fd92c3adcf605e49368"},{"version":"f49f644231f39b74684e103ae64a56952d8eb263b79bf35574d8379e0a01056e","signature":"133b004d5fec7847b2043006864672606223edffb06fe0726b5506da919500e5"},{"version":"64d75e977b227615ff85a8fc46bc56148eeb5143cb86c9d4bc196fabc89d4ea9","signature":"c209b0f634e8337bb9ef368d842d38d3a95f32cbd8b0df3b1c5ffa386e2fb067"},{"version":"8b8a47fd8c3b647c999ac6f83c85e7f0b851a8954c148a787d9e8e90f3b7da4e","signature":"1499eebe9457d103b9b5782b243797305ca7f26e198d384c2e0b2a25d6f10bde"},{"version":"95f506c7f6b38262bd5932f87820faab73121e08bd9306ce440b732a9443fe95","signature":"358537bc98289ec8e0a883558469c877a4fbe38a15d023f7e0456e4a4f72bcd8"},{"version":"eabebdebcb2173d4679f69c60d9dd32d4fdc5beefeea62fdce60e91d949e08f4","signature":"7d67dcebda39234142a94b0f3949b1410ffcae09318dfe2f98af3c0d68babd75"},{"version":"fa7afa288e7f17ed0f9618b510333a3b8449cba201af4c1132fff13cedd22c2f","signature":"a4c847ed607f44f7b2b1c1e7fd254b572faa1c54f82b4ca2d39a6a40b14e4b67"},{"version":"98c47f37dba0f3c9b0807003aa56195eeed9dc70bee53b2d0034ff2841667992","signature":"bf5be703ddfcada43840ed728f03d8fd1529fdce43b2ca35eaaabd7bb17cf68f"},"5c972c15e17460c7187ca686ad4f849ec67fd80973dd081040d101cbb6289c0f","6d978b7e6fe437e74fd706a46aa068e95ce527707fc1bcd0581b42ad2d6cd857","051889e07ae7cce2fda01c0205b2094e4b6af8fc15d94c1fbf74e243791367e9","4771dc75aef3e1ca2c94755fafa3a2fabe901e2c228f44863396304225574e12","40b503e330de157566a04cf9c3d2fa25884202627182383aa9a93241f9aa181e","afa98d3b6a0444ae8c3917468410fe970fd89b591b74fc05613cde891923448d","f7b9b849771d5ad94c0b7942ad7ad9a8b9be8c06bb9ca9b87808be9b035e9e11","389dc524ad7c8b880df9287266597830f9fa6eff0279cac2e41cc626508e5344","bfd13eb3b7b5d7be0ebf666ab855eed9f6f78faef9efea64d41f966807dbf53b","7f071c1d1eb9b7cb04bcf38f765ddaebcbba2baf00f4958913e6c888529b2144","db671aadda72ca3d173bf3540d52366e0b7727855a83c64526eacdcfa751b372","3ade56ac91b009a34bdd91d2de3dfee48da335de8a7fd9192fdb9ddd45df95f0",{"version":"114c5a0b52752c12622b5733a176dbf61f27cb6bc4c70a7b031751bdae7ea1bc","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"cf3464cf28790cf6ff84a62c082940148bd7a05967c5a9a216f6b853a669c8a7","signature":"b01c7ed36a99de419dcb74dffb8ef99b2daf87e64522d9a9198be94fb240e3c7"},{"version":"7b2931f49e92fdcd2af4f577707392ad2c3d3a71a8ee78c07418d83b7540fcdf","signature":"139558747accfba69018e47cc01ffa611a8afdfc75fcc218276ec7aad96f246b"},"8a95678ae9f5199675902f24f3fd2a2b1759d1246198f53d0076890c8f3a89ca","648cdcd5baccca30b3c217976c52463269071a3a0a8f6784a95e7818f7b8abad","c033bb2c56ec100557bb616c98f8ad4648ca263062ad9f9f8a1e8bc71694052c","7ae0338b32bd72df596a5f49daa37c4ba5046d44ca77dd294325a8a0a612b744","8d52b8d32199c9f1e9bec474d5fff4a80dbc2079a277f68d5548e6b2649590d8","5ee4bd3be80e194388bf521245bbcf8d44d5c148d18b6bb262d3617b89e91421","40b503e330de157566a04cf9c3d2fa25884202627182383aa9a93241f9aa181e","afa98d3b6a0444ae8c3917468410fe970fd89b591b74fc05613cde891923448d","f7b9b849771d5ad94c0b7942ad7ad9a8b9be8c06bb9ca9b87808be9b035e9e11","9179a85ab76d3118975c391f747d408172ff0544f8b46763639a74883f437bfd","e06a866dcb1161b68602c62bc03c3f1cedede1576003e3697babd853bd3edefc","3f464b0aa7697aae1d05cd4cdc05e84e5befed0a4613279bbfaabca912d9f814","3a8c7f5622f3618a8c5b73537207cc4bbff8ba4ce5acdaaf6a67f13bf5e0badd","9186c8a514ea5cced20eb6b5c8dec2368fa16bba618891b9a69b241965e14947","007395c473f26cfcb59ab5be0582d7c4eeff8b5c72abb3cb18b9036ef0578bb7","a50a4ee87a7bde63aa3a35edd3bdb9cf4c3af8759104dbb9af08b87126ab6a9a","c9ba76f88d66712c51a5a119d632f62bcaa732c2fa5c8462fe7915684e57ff67","f67fac478210657611e869e2362d223e4d61f917c070e8240e9a60986f4f8637","42d3551eccf74ddce49fc958867627299b20c5731d4574d5c0f6b9816280faa0","5e6077e37d029ce395176871abb5d9e7f57ee5081e795dd5b298230a647b0553","c3d442c17548ba48cf94807da3d921bc116a4ef290ce2cb3d250ca4908fbf288","555887e71cdaf0778cf5d0c7e3ff29e939eb936d1ea3ee41243c3953a27ce045","6e993216d537448a8c69aad1589937cbc7bf669170f4be096581b6bc6817c6ff","8c54633bd9f570d76382a2d9dc80bc22edd5ca6c328add090812475c6728ec64","2a04c5392e50c6130127a09e8e938c71bd434ec57561fd27c916cf9622476b02","21d40f8dedbedd15e1c8d8f9ee192113aea300fd301ae2d790c53d927004102f","a8ec6e7afa929f5b4b623b03caf71bc9f3da37db2ffe76834c8e8fdefc59849f","446f1e6d9689df03c60c5a304e40b7edbdf505f188a914c105f2e58e1e641698","2c984aa8ea779bc70295121d6b9345c1de3c1fbc785ab793407ceb723835ca02","50b16d3ba0174d213d96f10068a2a01835286e8ac965b25c5aa658c5e60bc11f","5c7c053f85a15696cb4d3d466f3f2151be10b8b5fb0670b44d5f064b8897cc1e","2c993e1ec6fbdd02a472028d5203809ef8f2c76c2bc274110a7b01926dfe2b8c","8dafcb5fb479acabc058b87fa4347cba6104f7e960522f560a5b97818bca48a5","78dd0065f3d11c46b4d77028bdb0c29ee0a736cfea9f8d80a7815a02e2abaf7f","c88d9f88f24fe30f65be0b070060a030464fe89447e508b8529524970cde6aa6","1ea9b70fb2a0fe796ffdb9131c0c2a34176375fa6a4a888e6db613089a7e6782","ef66473f8402eff2a1d498a5026b7c333e849431465b2fa09b001ae0bac21ace","3a54a9ef2660e17912988954069c5b4143cf8f75227c8d8bf8eed6d1d0afd49f","86c18f2c92063f5dae9b954ca61b9798b4e59a7aec23d7d66fa182e009d7d31a","739d47f59b244557f360604ddfcba5293e24de25c7e3fe84c6cf4961dc620b9c","1c9c6ddba8ecb02562d0822a5e3c37046177866a4079b4ca166b923b72edeb16",{"version":"79fec4fbe74b8c013dd5f5e783c7ae1bc25ad38be5529f716168f47417e32203","affectsGlobalScope":true},{"version":"36fe69661e343cb4be10ff09db41af3abed1309a5edcb089e2e001f3c935efaf","affectsGlobalScope":true}],"root":[[50,115]],"options":{"allowSyntheticDefaultImports":true,"composite":true,"declaration":true,"declarationMap":true,"experimentalDecorators":true,"importHelpers":true,"inlineSources":true,"module":5,"noFallthroughCasesInSwitch":true,"noImplicitAny":true,"noImplicitOverride":true,"noImplicitReturns":true,"noImplicitThis":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./lib","rootDir":"./src","sourceMap":true,"strict":true,"stripInternal":true,"target":8},"fileIdsList":[[73,74,75,79,80,81,82,83,84,85,86],[88,89],[91,92],[94,95,96],[87,90,93,97,98,102,110],[78],[83],[82],[77],[91],[78,89],[94],[76,77,78,88],[76,77],[103],[77,103],[103,106],[77,78,88,103],[103,108],[76,77,78],[99,100,101],[103,104,105,106,107,108,109],[73,74,75,76,77,78,79,80,81,82,83,84,85,86,88,89,91,92,99,100,101,103,104,105,106,107,108,109],[76,77,78,79,80,81,88,89,94,95,96,101],[114],[57,69],[51,53],[51],[50,51,52,53,54],[50,52,54,56,57,71],[50,52,55,56],[61],[66],[61,65],[60],[58,59,60,61,62,63,64,65,66,67,68],[50,51,52,53],[50,56]],"referencedMap":[[87,1],[90,2],[93,3],[97,4],[111,5],[79,6],[80,6],[81,6],[84,7],[85,8],[86,7],[88,9],[92,10],[91,11],[95,12],[96,12],[94,13],[78,14],[104,15],[105,16],[107,17],[106,18],[109,19],[108,16],[98,20],[102,21],[110,22],[112,23],[113,24],[115,25],[70,26],[54,27],[52,28],[55,29],[72,30],[57,31],[62,32],[63,32],[64,32],[67,33],[66,34],[61,35],[69,36]],"exportedModulesMap":[[87,1],[90,2],[93,3],[97,4],[111,5],[79,6],[80,6],[81,6],[84,7],[85,8],[86,7],[88,9],[92,10],[91,11],[95,12],[96,12],[94,13],[78,14],[104,15],[105,16],[107,17],[106,18],[109,19],[108,16],[98,20],[102,21],[110,22],[112,23],[113,24],[115,25],[54,27],[52,28],[55,37],[72,30],[57,38],[62,32],[63,32],[64,32],[67,33],[66,34],[61,35],[69,36]],"semanticDiagnosticsPerFile":[87,90,93,97,111,73,74,75,79,80,81,82,83,84,85,86,88,89,92,91,95,96,94,76,77,78,99,100,101,104,105,103,107,106,109,108,98,102,110,112,113,115,114,48,49,10,9,2,11,12,13,14,15,16,17,18,3,19,4,20,24,21,22,23,25,26,27,5,28,29,30,31,6,35,32,33,34,36,7,37,42,43,38,39,40,41,8,47,44,45,46,1,70,54,51,53,50,52,55,72,71,57,56,58,59,62,63,64,65,67,66,60,61,68,69],"latestChangedDtsFile":"./lib/openapi-client/index.d.ts"},"version":"5.4.5"}
\ No newline at end of file
+{"program":{"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","./src/openapi-client/core/CancelablePromise.ts","./src/openapi-client/core/ApiRequestOptions.ts","./src/openapi-client/core/OpenAPI.ts","./src/openapi-client/core/ApiResult.ts","./src/openapi-client/core/ApiError.ts","./src/openapi-client/core/request.ts","./src/openapi-client/types.gen.ts","./src/openapi-client/services.gen.ts","./src/usuba_compat/interfaces/wasi-cli-environment.d.ts","./src/usuba_compat/interfaces/wasi-cli-exit.d.ts","./src/usuba_compat/interfaces/wasi-io-error.d.ts","./src/usuba_compat/interfaces/wasi-io-streams.d.ts","./src/usuba_compat/interfaces/wasi-cli-stderr.d.ts","./src/usuba_compat/interfaces/wasi-cli-stdin.d.ts","./src/usuba_compat/interfaces/wasi-cli-stdout.d.ts","./src/usuba_compat/interfaces/wasi-clocks-wall-clock.d.ts","./src/usuba_compat/interfaces/wasi-filesystem-types.d.ts","./src/usuba_compat/interfaces/wasi-filesystem-preopens.d.ts","./src/usuba_compat/interfaces/wasi-random-random.d.ts","./src/usuba_compat/usuba_compat.component.d.ts","./src/index.ts","./src/openapi-client/schemas.gen.ts","./src/openapi-client/index.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-environment.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-exit.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-run.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-io-error.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-io-poll.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-io-streams.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-stderr.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-stdin.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-stdout.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-terminal-input.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-terminal-output.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-terminal-stderr.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-terminal-stdin.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-terminal-stdout.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/cli.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-clocks-monotonic-clock.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-clocks-wall-clock.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/clocks.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-filesystem-types.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-filesystem-preopens.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/filesystem.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-http-types.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-http-incoming-handler.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-http-outgoing-handler.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/http.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/io.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-random-insecure-seed.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-random-insecure.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-random-random.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/random.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-sockets-network.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-sockets-instance-network.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-sockets-ip-name-lookup.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-sockets-tcp.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-sockets-tcp-create-socket.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-sockets-udp.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-sockets-udp-create-socket.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/sockets.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/index.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/wasi-cli-command.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/wasi-http-proxy.d.ts","../../node_modules/@types/serviceworker/iterable.d.ts","../../node_modules/@types/serviceworker/index.d.ts"],"fileInfos":[{"version":"824cb491a40f7e8fdeb56f1df5edf91b23f3e3ee6b4cde84d4a99be32338faee","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569",{"version":"138fb588d26538783b78d1e3b2c2cc12d55840b97bf5e08bca7f7a174fbe2f17","affectsGlobalScope":true},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"bc47685641087c015972a3f072480889f0d6c65515f12bd85222f49a98952ed7","affectsGlobalScope":true},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true},{"version":"bb42a7797d996412ecdc5b2787720de477103a0b2e53058569069a0e2bae6c7e","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"b541a838a13f9234aba650a825393ffc2292dc0fc87681a5d81ef0c96d281e7a","affectsGlobalScope":true},{"version":"b20fe0eca9a4e405f1a5ae24a2b3290b37cf7f21eba6cbe4fc3fab979237d4f3","affectsGlobalScope":true},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"49ed889be54031e1044af0ad2c603d627b8bda8b50c1a68435fe85583901d072","affectsGlobalScope":true},{"version":"e93d098658ce4f0c8a0779e6cab91d0259efb88a318137f686ad76f8410ca270","affectsGlobalScope":true},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"5e07ed3809d48205d5b985642a59f2eba47c402374a7cf8006b686f79efadcbd","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"8073890e29d2f46fdbc19b8d6d2eb9ea58db9a2052f8640af20baff9afbc8640","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true},{"version":"51e547984877a62227042850456de71a5c45e7fe86b7c975c6e68896c86fa23b","affectsGlobalScope":true},{"version":"956d27abdea9652e8368ce029bb1e0b9174e9678a273529f426df4b3d90abd60","affectsGlobalScope":true},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},{"version":"663237e06287606be7ccdb892ddc9562352aec15dedca983ac84004c2b1b17cc","signature":"11a746b4d1023300a23da9afb502364b8a67874b00f34fd92c3adcf605e49368"},{"version":"f49f644231f39b74684e103ae64a56952d8eb263b79bf35574d8379e0a01056e","signature":"133b004d5fec7847b2043006864672606223edffb06fe0726b5506da919500e5"},{"version":"64d75e977b227615ff85a8fc46bc56148eeb5143cb86c9d4bc196fabc89d4ea9","signature":"c209b0f634e8337bb9ef368d842d38d3a95f32cbd8b0df3b1c5ffa386e2fb067"},{"version":"8b8a47fd8c3b647c999ac6f83c85e7f0b851a8954c148a787d9e8e90f3b7da4e","signature":"1499eebe9457d103b9b5782b243797305ca7f26e198d384c2e0b2a25d6f10bde"},{"version":"95f506c7f6b38262bd5932f87820faab73121e08bd9306ce440b732a9443fe95","signature":"358537bc98289ec8e0a883558469c877a4fbe38a15d023f7e0456e4a4f72bcd8"},{"version":"eabebdebcb2173d4679f69c60d9dd32d4fdc5beefeea62fdce60e91d949e08f4","signature":"7d67dcebda39234142a94b0f3949b1410ffcae09318dfe2f98af3c0d68babd75"},{"version":"6f48769e82337f7cb4a4d923fbb89d75aeebfe80b84544388891aea2273e54d0","signature":"747b8dae4f3c27e0077fc35ef969cea194712bc834eee03fbf342bdcddede335"},{"version":"98c47f37dba0f3c9b0807003aa56195eeed9dc70bee53b2d0034ff2841667992","signature":"bf5be703ddfcada43840ed728f03d8fd1529fdce43b2ca35eaaabd7bb17cf68f"},"5c972c15e17460c7187ca686ad4f849ec67fd80973dd081040d101cbb6289c0f","6d978b7e6fe437e74fd706a46aa068e95ce527707fc1bcd0581b42ad2d6cd857","051889e07ae7cce2fda01c0205b2094e4b6af8fc15d94c1fbf74e243791367e9","4771dc75aef3e1ca2c94755fafa3a2fabe901e2c228f44863396304225574e12","40b503e330de157566a04cf9c3d2fa25884202627182383aa9a93241f9aa181e","afa98d3b6a0444ae8c3917468410fe970fd89b591b74fc05613cde891923448d","f7b9b849771d5ad94c0b7942ad7ad9a8b9be8c06bb9ca9b87808be9b035e9e11","389dc524ad7c8b880df9287266597830f9fa6eff0279cac2e41cc626508e5344","bfd13eb3b7b5d7be0ebf666ab855eed9f6f78faef9efea64d41f966807dbf53b","7f071c1d1eb9b7cb04bcf38f765ddaebcbba2baf00f4958913e6c888529b2144","db671aadda72ca3d173bf3540d52366e0b7727855a83c64526eacdcfa751b372","729c830f54b0fcf042a7786c53c48b59528c0dd97f7b979b69627fc997fe6cf3",{"version":"c2667617f43e2a785882c261182155a2a12677514f0d0e2c7f47de7323c7e3d0","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"6ed1b13b13a69c569270c3e025e761eabf69486e7cbf96f9014bf8716d2a0dd1","signature":"5cac732e45a89f989c5da96592e7839aef7877ff58e33f79c4d120aa1e32e0ca"},{"version":"7b2931f49e92fdcd2af4f577707392ad2c3d3a71a8ee78c07418d83b7540fcdf","signature":"139558747accfba69018e47cc01ffa611a8afdfc75fcc218276ec7aad96f246b"},"8a95678ae9f5199675902f24f3fd2a2b1759d1246198f53d0076890c8f3a89ca","648cdcd5baccca30b3c217976c52463269071a3a0a8f6784a95e7818f7b8abad","c033bb2c56ec100557bb616c98f8ad4648ca263062ad9f9f8a1e8bc71694052c","7ae0338b32bd72df596a5f49daa37c4ba5046d44ca77dd294325a8a0a612b744","8d52b8d32199c9f1e9bec474d5fff4a80dbc2079a277f68d5548e6b2649590d8","5ee4bd3be80e194388bf521245bbcf8d44d5c148d18b6bb262d3617b89e91421","40b503e330de157566a04cf9c3d2fa25884202627182383aa9a93241f9aa181e","afa98d3b6a0444ae8c3917468410fe970fd89b591b74fc05613cde891923448d","f7b9b849771d5ad94c0b7942ad7ad9a8b9be8c06bb9ca9b87808be9b035e9e11","9179a85ab76d3118975c391f747d408172ff0544f8b46763639a74883f437bfd","e06a866dcb1161b68602c62bc03c3f1cedede1576003e3697babd853bd3edefc","3f464b0aa7697aae1d05cd4cdc05e84e5befed0a4613279bbfaabca912d9f814","3a8c7f5622f3618a8c5b73537207cc4bbff8ba4ce5acdaaf6a67f13bf5e0badd","9186c8a514ea5cced20eb6b5c8dec2368fa16bba618891b9a69b241965e14947","007395c473f26cfcb59ab5be0582d7c4eeff8b5c72abb3cb18b9036ef0578bb7","a50a4ee87a7bde63aa3a35edd3bdb9cf4c3af8759104dbb9af08b87126ab6a9a","c9ba76f88d66712c51a5a119d632f62bcaa732c2fa5c8462fe7915684e57ff67","f67fac478210657611e869e2362d223e4d61f917c070e8240e9a60986f4f8637","42d3551eccf74ddce49fc958867627299b20c5731d4574d5c0f6b9816280faa0","5e6077e37d029ce395176871abb5d9e7f57ee5081e795dd5b298230a647b0553","c3d442c17548ba48cf94807da3d921bc116a4ef290ce2cb3d250ca4908fbf288","555887e71cdaf0778cf5d0c7e3ff29e939eb936d1ea3ee41243c3953a27ce045","6e993216d537448a8c69aad1589937cbc7bf669170f4be096581b6bc6817c6ff","8c54633bd9f570d76382a2d9dc80bc22edd5ca6c328add090812475c6728ec64","2a04c5392e50c6130127a09e8e938c71bd434ec57561fd27c916cf9622476b02","21d40f8dedbedd15e1c8d8f9ee192113aea300fd301ae2d790c53d927004102f","a8ec6e7afa929f5b4b623b03caf71bc9f3da37db2ffe76834c8e8fdefc59849f","446f1e6d9689df03c60c5a304e40b7edbdf505f188a914c105f2e58e1e641698","2c984aa8ea779bc70295121d6b9345c1de3c1fbc785ab793407ceb723835ca02","50b16d3ba0174d213d96f10068a2a01835286e8ac965b25c5aa658c5e60bc11f","5c7c053f85a15696cb4d3d466f3f2151be10b8b5fb0670b44d5f064b8897cc1e","2c993e1ec6fbdd02a472028d5203809ef8f2c76c2bc274110a7b01926dfe2b8c","8dafcb5fb479acabc058b87fa4347cba6104f7e960522f560a5b97818bca48a5","78dd0065f3d11c46b4d77028bdb0c29ee0a736cfea9f8d80a7815a02e2abaf7f","c88d9f88f24fe30f65be0b070060a030464fe89447e508b8529524970cde6aa6","1ea9b70fb2a0fe796ffdb9131c0c2a34176375fa6a4a888e6db613089a7e6782","ef66473f8402eff2a1d498a5026b7c333e849431465b2fa09b001ae0bac21ace","3a54a9ef2660e17912988954069c5b4143cf8f75227c8d8bf8eed6d1d0afd49f","86c18f2c92063f5dae9b954ca61b9798b4e59a7aec23d7d66fa182e009d7d31a","739d47f59b244557f360604ddfcba5293e24de25c7e3fe84c6cf4961dc620b9c","1c9c6ddba8ecb02562d0822a5e3c37046177866a4079b4ca166b923b72edeb16",{"version":"79fec4fbe74b8c013dd5f5e783c7ae1bc25ad38be5529f716168f47417e32203","affectsGlobalScope":true},{"version":"36fe69661e343cb4be10ff09db41af3abed1309a5edcb089e2e001f3c935efaf","affectsGlobalScope":true}],"root":[[50,115]],"options":{"allowSyntheticDefaultImports":true,"composite":true,"declaration":true,"declarationMap":true,"experimentalDecorators":true,"importHelpers":true,"inlineSources":true,"module":5,"noFallthroughCasesInSwitch":true,"noImplicitAny":true,"noImplicitOverride":true,"noImplicitReturns":true,"noImplicitThis":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./lib","rootDir":"./src","sourceMap":true,"strict":true,"stripInternal":true,"target":8},"fileIdsList":[[73,74,75,79,80,81,82,83,84,85,86],[88,89],[91,92],[94,95,96],[87,90,93,97,98,102,110],[78],[83],[82],[77],[91],[78,89],[94],[76,77,78,88],[76,77],[103],[77,103],[103,106],[77,78,88,103],[103,108],[76,77,78],[99,100,101],[103,104,105,106,107,108,109],[73,74,75,76,77,78,79,80,81,82,83,84,85,86,88,89,91,92,99,100,101,103,104,105,106,107,108,109],[76,77,78,79,80,81,88,89,94,95,96,101],[114],[57,69],[51,53],[51],[50,51,52,53,54],[50,52,54,56,57,71],[50,52,55,56],[61],[66],[61,65],[60],[58,59,60,61,62,63,64,65,66,67,68],[50,51,52,53],[50,56]],"referencedMap":[[87,1],[90,2],[93,3],[97,4],[111,5],[79,6],[80,6],[81,6],[84,7],[85,8],[86,7],[88,9],[92,10],[91,11],[95,12],[96,12],[94,13],[78,14],[104,15],[105,16],[107,17],[106,18],[109,19],[108,16],[98,20],[102,21],[110,22],[112,23],[113,24],[115,25],[70,26],[54,27],[52,28],[55,29],[72,30],[57,31],[62,32],[63,32],[64,32],[67,33],[66,34],[61,35],[69,36]],"exportedModulesMap":[[87,1],[90,2],[93,3],[97,4],[111,5],[79,6],[80,6],[81,6],[84,7],[85,8],[86,7],[88,9],[92,10],[91,11],[95,12],[96,12],[94,13],[78,14],[104,15],[105,16],[107,17],[106,18],[109,19],[108,16],[98,20],[102,21],[110,22],[112,23],[113,24],[115,25],[54,27],[52,28],[55,37],[72,30],[57,38],[62,32],[63,32],[64,32],[67,33],[66,34],[61,35],[69,36]],"semanticDiagnosticsPerFile":[87,90,93,97,111,73,74,75,79,80,81,82,83,84,85,86,88,89,92,91,95,96,94,76,77,78,99,100,101,104,105,103,107,106,109,108,98,102,110,112,113,115,114,48,49,10,9,2,11,12,13,14,15,16,17,18,3,19,4,20,24,21,22,23,25,26,27,5,28,29,30,31,6,35,32,33,34,36,7,37,42,43,38,39,40,41,8,47,44,45,46,1,70,54,51,53,50,52,55,72,71,57,56,58,59,62,63,64,65,67,66,60,61,68,69],"latestChangedDtsFile":"./lib/openapi-client/index.d.ts"},"version":"5.4.5"}
\ No newline at end of file
From 989ea57f04ed8e78adbf6451939fe59d59a8f432 Mon Sep 17 00:00:00 2001
From: Chris Joel <0xcda7a@gmail.com>
Date: Sat, 25 May 2024 00:33:47 -0700
Subject: [PATCH 2/7] feat: SW support for Runtime Module instantiation
---
rust/usuba-compat/build-wasm-component.sh | 2 +-
rust/usuba-compat/src/lib.rs | 16 +-
rust/usuba-compat/wit/usuba-compat.wit | 8 +-
typescript/package-lock.json | 434 ++++++++++++++++++
typescript/package.json | 1 +
typescript/packages/usuba-api/.gitignore | 2 +
typescript/packages/usuba-api/openapi.json | 154 +++++++
typescript/packages/usuba-api/package.json | 61 +++
.../scripts/update-openapi-spec.sh | 0
typescript/packages/usuba-api/src/index.ts | 1 +
typescript/packages/usuba-api/tsconfig.json | 33 ++
.../packages/usuba-api/tsconfig.tsbuildinfo | 1 +
typescript/packages/usuba-api/vite.config.js | 19 +
typescript/packages/usuba-sw/package.json | 27 +-
typescript/packages/usuba-sw/src/index.ts | 330 ++++++++++---
typescript/packages/usuba-sw/tsconfig.json | 8 +-
.../packages/usuba-sw/tsconfig.tsbuildinfo | 2 +-
typescript/packages/usuba-ui/index.html | 2 +
typescript/packages/usuba-ui/package.json | 4 +-
typescript/packages/usuba-ui/src/index.ts | 33 +-
typescript/packages/usuba-ui/tsconfig.json | 33 ++
21 files changed, 1072 insertions(+), 99 deletions(-)
create mode 100644 typescript/packages/usuba-api/.gitignore
create mode 100644 typescript/packages/usuba-api/openapi.json
create mode 100644 typescript/packages/usuba-api/package.json
rename typescript/packages/{usuba-sw => usuba-api}/scripts/update-openapi-spec.sh (100%)
create mode 100644 typescript/packages/usuba-api/src/index.ts
create mode 100644 typescript/packages/usuba-api/tsconfig.json
create mode 100644 typescript/packages/usuba-api/tsconfig.tsbuildinfo
create mode 100644 typescript/packages/usuba-api/vite.config.js
create mode 100644 typescript/packages/usuba-ui/tsconfig.json
diff --git a/rust/usuba-compat/build-wasm-component.sh b/rust/usuba-compat/build-wasm-component.sh
index 3a8f8ede2..01dc2a771 100755
--- a/rust/usuba-compat/build-wasm-component.sh
+++ b/rust/usuba-compat/build-wasm-component.sh
@@ -18,7 +18,7 @@ wasm-tools component new \
-o usuba_compat.component.wasm \
--adapt ./wasi_snapshot_preview1.reactor.wasm
-jco transpile -O --tla-compat ./usuba_compat.component.wasm \
+jco transpile --tla-compat ./usuba_compat.component.wasm \
-o ./usuba_compat
popd
diff --git a/rust/usuba-compat/src/lib.rs b/rust/usuba-compat/src/lib.rs
index 3810dd3ba..3b7d5adb1 100644
--- a/rust/usuba-compat/src/lib.rs
+++ b/rust/usuba-compat/src/lib.rs
@@ -1,4 +1,4 @@
-use js_component_bindgen::{transpile, TranspileOpts, Transpiled};
+use js_component_bindgen::{transpile, InstantiationMode, TranspileOpts, Transpiled};
use wasmtime_environ::component::Export as WasmtimeExport;
wit_bindgen::generate!({
@@ -15,7 +15,10 @@ impl Guest for Polyfill {
.mappings
.map(|mappings| mappings.into_iter().collect()),
no_typescript: true,
- instantiation: None,
+ instantiation: options
+ .instantiation
+ .unwrap_or_else(|| Instantiation::Automatic)
+ .into(),
import_bindings: None,
no_nodejs_compat: true,
base64_cutoff: 1024,
@@ -38,6 +41,15 @@ impl Guest for Polyfill {
export!(Polyfill);
+impl From for Option {
+ fn from(value: Instantiation) -> Self {
+ match value {
+ Instantiation::Automatic => None,
+ Instantiation::Manual => Some(InstantiationMode::Async),
+ }
+ }
+}
+
impl From for Artifacts {
fn from(value: Transpiled) -> Self {
Artifacts {
diff --git a/rust/usuba-compat/wit/usuba-compat.wit b/rust/usuba-compat/wit/usuba-compat.wit
index c0318cacd..fd4bd5510 100644
--- a/rust/usuba-compat/wit/usuba-compat.wit
+++ b/rust/usuba-compat/wit/usuba-compat.wit
@@ -6,7 +6,13 @@ world usuba-compat {
record polyfill-options {
name: string,
- mappings: option
+ mappings: option,
+ instantiation: option
+ }
+
+ enum instantiation {
+ automatic,
+ manual
}
enum export-type {
diff --git a/typescript/package-lock.json b/typescript/package-lock.json
index ab156b71e..8824f7bb0 100644
--- a/typescript/package-lock.json
+++ b/typescript/package-lock.json
@@ -32,12 +32,60 @@
"url": "https://github.com/sponsors/philsturgeon"
}
},
+ "node_modules/@bytecodealliance/jco": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@bytecodealliance/jco/-/jco-1.2.4.tgz",
+ "integrity": "sha512-uuOm9UkYqWp5uElYDNzlhjbdrAmczEvETgQdI1hFTk79h+mrmHPRV32pgRP5o1eHVwMIpuk4XQkDIhFbksurUw==",
+ "dev": true,
+ "workspaces": [
+ "packages/preview2-shim"
+ ],
+ "dependencies": {
+ "@bytecodealliance/preview2-shim": "^0.16.2",
+ "binaryen": "^116.0.0",
+ "chalk-template": "^1",
+ "commander": "^12",
+ "mkdirp": "^3",
+ "ora": "^8",
+ "terser": "^5"
+ },
+ "bin": {
+ "jco": "src/jco.js"
+ }
+ },
+ "node_modules/@bytecodealliance/jco/node_modules/mkdirp": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz",
+ "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==",
+ "dev": true,
+ "bin": {
+ "mkdirp": "dist/cjs/src/bin.js"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/@bytecodealliance/preview2-shim": {
"version": "0.16.2",
"resolved": "https://registry.npmjs.org/@bytecodealliance/preview2-shim/-/preview2-shim-0.16.2.tgz",
"integrity": "sha512-36MwesmbLSf3Y5/OHcS85iBaF0N92CQ4gpjtDVKSbrjxmrBKCWlWVfoQ03F/cqDg8k5K7pzVaVBH0XBIbTCfTQ==",
"dev": true
},
+ "node_modules/@commontools/std": {
+ "resolved": "packages/std",
+ "link": true
+ },
+ "node_modules/@commontools/usuba-api": {
+ "resolved": "packages/usuba-api",
+ "link": true
+ },
+ "node_modules/@commontools/usuba-rt": {
+ "resolved": "packages/usuba-rt",
+ "link": true
+ },
"node_modules/@commontools/usuba-sw": {
"resolved": "packages/usuba-sw",
"link": true
@@ -114,6 +162,64 @@
"typescript": "^5.x"
}
},
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
+ "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/set-array": "^1.2.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/source-map": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz",
+ "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.25"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.4.15",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
+ "dev": true
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.25",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+ "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
"node_modules/@jsdevtools/ono": {
"version": "7.1.3",
"resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz",
@@ -289,6 +395,18 @@
"node": ">=0.4.0"
}
},
+ "node_modules/ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
"node_modules/anymatch": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
@@ -320,6 +438,16 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/binaryen": {
+ "version": "116.0.0",
+ "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-116.0.0.tgz",
+ "integrity": "sha512-Hp0dXC6Cb/rTwWEoUS2BRghObE7g/S9umKtxuTDt3f61G6fNTE/YVew/ezyy3IdHcLx3f17qfh6LwETgCfvWkQ==",
+ "dev": true,
+ "bin": {
+ "wasm-opt": "bin/wasm-opt",
+ "wasm2js": "bin/wasm2js"
+ }
+ },
"node_modules/braces": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
@@ -332,6 +460,12 @@
"node": ">=8"
}
},
+ "node_modules/buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+ "dev": true
+ },
"node_modules/c12": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/c12/-/c12-1.10.0.tgz",
@@ -364,6 +498,33 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/chalk": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
+ "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==",
+ "dev": true,
+ "engines": {
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/chalk-template": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-1.1.0.tgz",
+ "integrity": "sha512-T2VJbcDuZQ0Tb2EWwSotMPJjgpy1/tGee1BTpUNsGZ/qgNjV2t7Mvu+d4600U564nbLesN1x2dPL+xii174Ekg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk-template?sponsor=1"
+ }
+ },
"node_modules/chokidar": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
@@ -406,6 +567,33 @@
"consola": "^3.2.3"
}
},
+ "node_modules/cli-cursor": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz",
+ "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==",
+ "dev": true,
+ "dependencies": {
+ "restore-cursor": "^4.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cli-spinners": {
+ "version": "2.9.2",
+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz",
+ "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/commander": {
"version": "12.1.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
@@ -479,6 +667,12 @@
"url": "https://dotenvx.com"
}
},
+ "node_modules/emoji-regex": {
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz",
+ "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==",
+ "dev": true
+ },
"node_modules/esbuild": {
"version": "0.20.2",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz",
@@ -617,6 +811,18 @@
"node": ">=8"
}
},
+ "node_modules/get-east-asian-width": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz",
+ "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==",
+ "dev": true,
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/get-stream": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
@@ -729,6 +935,18 @@
"node": ">=0.10.0"
}
},
+ "node_modules/is-interactive": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz",
+ "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
@@ -750,6 +968,18 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/is-unicode-supported": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.0.0.tgz",
+ "integrity": "sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -811,6 +1041,34 @@
"@types/trusted-types": "^2.0.2"
}
},
+ "node_modules/log-symbols": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz",
+ "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^5.3.0",
+ "is-unicode-supported": "^1.3.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/log-symbols/node_modules/is-unicode-supported": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz",
+ "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/merge-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
@@ -1024,6 +1282,29 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/ora": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/ora/-/ora-8.0.1.tgz",
+ "integrity": "sha512-ANIvzobt1rls2BDny5fWZ3ZVKyD6nscLvfFRpQgfWsythlcsVUC9kL0zq6j2Z5z9wwp1kd7wpsD/T9qNPVLCaQ==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^5.3.0",
+ "cli-cursor": "^4.0.0",
+ "cli-spinners": "^2.9.2",
+ "is-interactive": "^2.0.0",
+ "is-unicode-supported": "^2.0.0",
+ "log-symbols": "^6.0.0",
+ "stdin-discarder": "^0.2.1",
+ "string-width": "^7.0.0",
+ "strip-ansi": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/path-key": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
@@ -1160,6 +1441,46 @@
"node": ">=8.10.0"
}
},
+ "node_modules/restore-cursor": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz",
+ "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==",
+ "dev": true,
+ "dependencies": {
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/restore-cursor/node_modules/mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/restore-cursor/node_modules/onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "dependencies": {
+ "mimic-fn": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/retry": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
@@ -1282,6 +1603,60 @@
"node": ">=0.10.0"
}
},
+ "node_modules/source-map-support": {
+ "version": "0.5.21",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+ "dev": true,
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "node_modules/stdin-discarder": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz",
+ "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz",
+ "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^10.3.0",
+ "get-east-asian-width": "^1.0.0",
+ "strip-ansi": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
"node_modules/strip-final-newline": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
@@ -1311,6 +1686,30 @@
"node": ">=10"
}
},
+ "node_modules/terser": {
+ "version": "5.31.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.0.tgz",
+ "integrity": "sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/source-map": "^0.3.3",
+ "acorn": "^8.8.2",
+ "commander": "^2.20.0",
+ "source-map-support": "~0.5.20"
+ },
+ "bin": {
+ "terser": "bin/terser"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/terser/node_modules/commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "dev": true
+ },
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -1470,10 +1869,44 @@
"wireit": "^0.14.4"
}
},
+ "packages/std": {
+ "name": "@commontools/std",
+ "version": "0.0.1",
+ "license": "UNLICENSED",
+ "devDependencies": {
+ "@bytecodealliance/jco": "^1.2.4",
+ "typescript": "^5.2.2",
+ "wireit": "^0.14.4"
+ }
+ },
+ "packages/usuba-api": {
+ "name": "@commontools/usuba-api",
+ "version": "0.0.1",
+ "license": "UNLICENSED",
+ "devDependencies": {
+ "@hey-api/openapi-ts": "^0.46.0",
+ "typescript": "^5.2.2",
+ "vite": "^5.2.0",
+ "wireit": "^0.14.4"
+ }
+ },
+ "packages/usuba-rt": {
+ "name": "@commontools/usuba-rt",
+ "version": "0.0.1",
+ "license": "UNLICENSED",
+ "devDependencies": {
+ "typescript": "^5.2.2",
+ "vite": "^5.2.0",
+ "wireit": "^0.14.4"
+ }
+ },
"packages/usuba-sw": {
"name": "@commontools/usuba-sw",
"version": "0.0.1",
"license": "UNLICENSED",
+ "dependencies": {
+ "@commontools/usuba-api": "^0.0.1"
+ },
"devDependencies": {
"@bytecodealliance/preview2-shim": "^0.16.2",
"@hey-api/openapi-ts": "^0.46.0",
@@ -1491,6 +1924,7 @@
"@shoelace-style/shoelace": "^2.15.1"
},
"devDependencies": {
+ "@commontools/usuba-api": "^0.0.1",
"@commontools/usuba-sw": "^0.0.1",
"typescript": "^5.2.2",
"vite": "^5.2.0",
diff --git a/typescript/package.json b/typescript/package.json
index fd257608b..beb827082 100644
--- a/typescript/package.json
+++ b/typescript/package.json
@@ -27,6 +27,7 @@
"build": {
"dependencies": [
"./packages/example-package:build",
+ "./packages/usuba-api:build",
"./packages/usuba-sw:build",
"./packages/usuba-ui:build"
]
diff --git a/typescript/packages/usuba-api/.gitignore b/typescript/packages/usuba-api/.gitignore
new file mode 100644
index 000000000..eb5155b41
--- /dev/null
+++ b/typescript/packages/usuba-api/.gitignore
@@ -0,0 +1,2 @@
+openapi-client
+lib
diff --git a/typescript/packages/usuba-api/openapi.json b/typescript/packages/usuba-api/openapi.json
new file mode 100644
index 000000000..5c840421b
--- /dev/null
+++ b/typescript/packages/usuba-api/openapi.json
@@ -0,0 +1,154 @@
+{
+ "openapi": "3.0.3",
+ "info": {
+ "title": "usuba",
+ "description": "An anything-to-Common-Wasm build server",
+ "license": {
+ "name": ""
+ },
+ "version": "0.1.0"
+ },
+ "paths": {
+ "/api/v0/module": {
+ "post": {
+ "tags": [
+ "crate::routes"
+ ],
+ "operationId": "build_module",
+ "requestBody": {
+ "content": {
+ "multipart/form-data": {
+ "schema": {
+ "$ref": "#/components/schemas/BuildModuleRequest"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Successfully built the module",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BuildModuleResponse"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request body",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorResponse"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Internal error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorResponse"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v0/module/{id}": {
+ "get": {
+ "tags": [
+ "crate::routes"
+ ],
+ "operationId": "retrieve_module",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved the module",
+ "content": {
+ "application/octet-stream": {
+ "schema": {
+ "type": "string",
+ "format": "binary"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Module not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorResponse"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "components": {
+ "schemas": {
+ "BuildModuleRequest": {
+ "type": "object",
+ "description": "A `multipart/form-data` payload that consists of module WIT + source code as\nwell as additional (optional) library WIT files",
+ "required": [
+ "module",
+ "library"
+ ],
+ "properties": {
+ "library": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "binary"
+ }
+ },
+ "module": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "binary"
+ }
+ }
+ }
+ },
+ "BuildModuleResponse": {
+ "type": "object",
+ "required": [
+ "id"
+ ],
+ "properties": {
+ "id": {
+ "type": "string"
+ }
+ }
+ },
+ "ErrorResponse": {
+ "type": "object",
+ "required": [
+ "error"
+ ],
+ "properties": {
+ "error": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/typescript/packages/usuba-api/package.json b/typescript/packages/usuba-api/package.json
new file mode 100644
index 000000000..4e6c4be9c
--- /dev/null
+++ b/typescript/packages/usuba-api/package.json
@@ -0,0 +1,61 @@
+{
+ "name": "@commontools/usuba-api",
+ "author": "The Common Authors",
+ "version": "0.0.1",
+ "description": "Auto-generated REST API client for the Usuba build server",
+ "license": "UNLICENSED",
+ "private": true,
+ "type": "module",
+ "scripts": {
+ "build": "wireit",
+ "update-openapi-spec": "wireit"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/commontoolsinc/labs.git"
+ },
+ "bugs": {
+ "url": "https://github.com/commontoolsinc/labs/issues"
+ },
+ "homepage": "https://github.com/commontoolsinc/labs#readme",
+ "files": [
+ "./lib/**/*"
+ ],
+ "exports": "./lib/index.js",
+ "dependencies": {},
+ "devDependencies": {
+ "@hey-api/openapi-ts": "^0.46.0",
+ "typescript": "^5.2.2",
+ "vite": "^5.2.0",
+ "wireit": "^0.14.4"
+ },
+ "wireit": {
+ "update-openapi-spec": {
+ "command": "./scripts/update-openapi-spec.sh",
+ "output": [
+ "./openapi.json"
+ ]
+ },
+ "build:openapi-client": {
+ "command": "npx @hey-api/openapi-ts -i ./openapi.json -o ./src/openapi-client",
+ "files": [
+ "./openapi.json"
+ ],
+ "output": [
+ "./src/openapi-client/**/*"
+ ]
+ },
+ "build": {
+ "dependencies": [
+ "build:openapi-client"
+ ],
+ "files": [
+ "./src/**/*"
+ ],
+ "output": [
+ "./lib/**/*"
+ ],
+ "command": "tsc --build -f"
+ }
+ }
+}
\ No newline at end of file
diff --git a/typescript/packages/usuba-sw/scripts/update-openapi-spec.sh b/typescript/packages/usuba-api/scripts/update-openapi-spec.sh
similarity index 100%
rename from typescript/packages/usuba-sw/scripts/update-openapi-spec.sh
rename to typescript/packages/usuba-api/scripts/update-openapi-spec.sh
diff --git a/typescript/packages/usuba-api/src/index.ts b/typescript/packages/usuba-api/src/index.ts
new file mode 100644
index 000000000..a2eea3b30
--- /dev/null
+++ b/typescript/packages/usuba-api/src/index.ts
@@ -0,0 +1 @@
+export * from './openapi-client/index.js';
diff --git a/typescript/packages/usuba-api/tsconfig.json b/typescript/packages/usuba-api/tsconfig.json
new file mode 100644
index 000000000..e0ddf35f7
--- /dev/null
+++ b/typescript/packages/usuba-api/tsconfig.json
@@ -0,0 +1,33 @@
+{
+ "compilerOptions": {
+ "composite": true,
+ "target": "es2021",
+ "module": "es6",
+ "lib": ["es2021"],
+ "declaration": true,
+ "declarationMap": true,
+ "sourceMap": true,
+ "inlineSources": true,
+ "outDir": "./lib",
+ "rootDir": "./src",
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "noImplicitReturns": true,
+ "noFallthroughCasesInSwitch": true,
+ "noImplicitAny": true,
+ "noImplicitThis": true,
+ "moduleResolution": "node",
+ "allowSyntheticDefaultImports": true,
+ "experimentalDecorators": true,
+ "importHelpers": true,
+ "stripInternal": true,
+ "noImplicitOverride": true,
+ "types": []
+ },
+ "include": [
+ "src/**/*",
+ "../../node_modules/@bytecodealliance/preview2-shim",
+ "../../node_modules/@types/serviceworker/*.d.ts"
+ ]
+}
diff --git a/typescript/packages/usuba-api/tsconfig.tsbuildinfo b/typescript/packages/usuba-api/tsconfig.tsbuildinfo
new file mode 100644
index 000000000..d9a125a51
--- /dev/null
+++ b/typescript/packages/usuba-api/tsconfig.tsbuildinfo
@@ -0,0 +1 @@
+{"program":{"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","./src/openapi-client/core/ApiRequestOptions.ts","./src/openapi-client/core/ApiResult.ts","./src/openapi-client/core/ApiError.ts","./src/openapi-client/core/CancelablePromise.ts","./src/openapi-client/core/OpenAPI.ts","./src/openapi-client/schemas.gen.ts","./src/openapi-client/core/request.ts","./src/openapi-client/types.gen.ts","./src/openapi-client/services.gen.ts","./src/openapi-client/index.ts","./src/index.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-environment.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-exit.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-run.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-io-error.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-io-poll.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-io-streams.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-stderr.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-stdin.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-stdout.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-terminal-input.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-terminal-output.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-terminal-stderr.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-terminal-stdin.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-terminal-stdout.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/cli.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-clocks-monotonic-clock.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-clocks-wall-clock.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/clocks.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-filesystem-types.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-filesystem-preopens.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/filesystem.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-http-types.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-http-incoming-handler.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-http-outgoing-handler.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/http.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/io.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-random-insecure-seed.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-random-insecure.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-random-random.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/random.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-sockets-network.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-sockets-instance-network.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-sockets-ip-name-lookup.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-sockets-tcp.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-sockets-tcp-create-socket.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-sockets-udp.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-sockets-udp-create-socket.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/sockets.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/index.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/wasi-cli-command.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/wasi-http-proxy.d.ts","../../node_modules/@types/serviceworker/iterable.d.ts","../../node_modules/@types/serviceworker/index.d.ts"],"fileInfos":[{"version":"824cb491a40f7e8fdeb56f1df5edf91b23f3e3ee6b4cde84d4a99be32338faee","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569",{"version":"138fb588d26538783b78d1e3b2c2cc12d55840b97bf5e08bca7f7a174fbe2f17","affectsGlobalScope":true},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"bc47685641087c015972a3f072480889f0d6c65515f12bd85222f49a98952ed7","affectsGlobalScope":true},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true},{"version":"bb42a7797d996412ecdc5b2787720de477103a0b2e53058569069a0e2bae6c7e","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"b541a838a13f9234aba650a825393ffc2292dc0fc87681a5d81ef0c96d281e7a","affectsGlobalScope":true},{"version":"b20fe0eca9a4e405f1a5ae24a2b3290b37cf7f21eba6cbe4fc3fab979237d4f3","affectsGlobalScope":true},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"49ed889be54031e1044af0ad2c603d627b8bda8b50c1a68435fe85583901d072","affectsGlobalScope":true},{"version":"e93d098658ce4f0c8a0779e6cab91d0259efb88a318137f686ad76f8410ca270","affectsGlobalScope":true},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"5e07ed3809d48205d5b985642a59f2eba47c402374a7cf8006b686f79efadcbd","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"8073890e29d2f46fdbc19b8d6d2eb9ea58db9a2052f8640af20baff9afbc8640","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true},{"version":"51e547984877a62227042850456de71a5c45e7fe86b7c975c6e68896c86fa23b","affectsGlobalScope":true},{"version":"956d27abdea9652e8368ce029bb1e0b9174e9678a273529f426df4b3d90abd60","affectsGlobalScope":true},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},{"version":"f49f644231f39b74684e103ae64a56952d8eb263b79bf35574d8379e0a01056e","signature":"133b004d5fec7847b2043006864672606223edffb06fe0726b5506da919500e5"},{"version":"8b8a47fd8c3b647c999ac6f83c85e7f0b851a8954c148a787d9e8e90f3b7da4e","signature":"1499eebe9457d103b9b5782b243797305ca7f26e198d384c2e0b2a25d6f10bde"},{"version":"95f506c7f6b38262bd5932f87820faab73121e08bd9306ce440b732a9443fe95","signature":"358537bc98289ec8e0a883558469c877a4fbe38a15d023f7e0456e4a4f72bcd8"},{"version":"663237e06287606be7ccdb892ddc9562352aec15dedca983ac84004c2b1b17cc","signature":"11a746b4d1023300a23da9afb502364b8a67874b00f34fd92c3adcf605e49368"},{"version":"64d75e977b227615ff85a8fc46bc56148eeb5143cb86c9d4bc196fabc89d4ea9","signature":"c209b0f634e8337bb9ef368d842d38d3a95f32cbd8b0df3b1c5ffa386e2fb067"},{"version":"6ed1b13b13a69c569270c3e025e761eabf69486e7cbf96f9014bf8716d2a0dd1","signature":"5cac732e45a89f989c5da96592e7839aef7877ff58e33f79c4d120aa1e32e0ca"},{"version":"eabebdebcb2173d4679f69c60d9dd32d4fdc5beefeea62fdce60e91d949e08f4","signature":"7d67dcebda39234142a94b0f3949b1410ffcae09318dfe2f98af3c0d68babd75"},{"version":"6f48769e82337f7cb4a4d923fbb89d75aeebfe80b84544388891aea2273e54d0","signature":"747b8dae4f3c27e0077fc35ef969cea194712bc834eee03fbf342bdcddede335"},{"version":"98c47f37dba0f3c9b0807003aa56195eeed9dc70bee53b2d0034ff2841667992","signature":"bf5be703ddfcada43840ed728f03d8fd1529fdce43b2ca35eaaabd7bb17cf68f"},{"version":"7b2931f49e92fdcd2af4f577707392ad2c3d3a71a8ee78c07418d83b7540fcdf","signature":"139558747accfba69018e47cc01ffa611a8afdfc75fcc218276ec7aad96f246b"},"5a37807f64441957c7d5a96fa0415a7e6f4b93ae307219cf5fb49a68d2637dd0","8a95678ae9f5199675902f24f3fd2a2b1759d1246198f53d0076890c8f3a89ca","648cdcd5baccca30b3c217976c52463269071a3a0a8f6784a95e7818f7b8abad","c033bb2c56ec100557bb616c98f8ad4648ca263062ad9f9f8a1e8bc71694052c","7ae0338b32bd72df596a5f49daa37c4ba5046d44ca77dd294325a8a0a612b744","8d52b8d32199c9f1e9bec474d5fff4a80dbc2079a277f68d5548e6b2649590d8","5ee4bd3be80e194388bf521245bbcf8d44d5c148d18b6bb262d3617b89e91421","40b503e330de157566a04cf9c3d2fa25884202627182383aa9a93241f9aa181e","afa98d3b6a0444ae8c3917468410fe970fd89b591b74fc05613cde891923448d","f7b9b849771d5ad94c0b7942ad7ad9a8b9be8c06bb9ca9b87808be9b035e9e11","9179a85ab76d3118975c391f747d408172ff0544f8b46763639a74883f437bfd","e06a866dcb1161b68602c62bc03c3f1cedede1576003e3697babd853bd3edefc","3f464b0aa7697aae1d05cd4cdc05e84e5befed0a4613279bbfaabca912d9f814","3a8c7f5622f3618a8c5b73537207cc4bbff8ba4ce5acdaaf6a67f13bf5e0badd","9186c8a514ea5cced20eb6b5c8dec2368fa16bba618891b9a69b241965e14947","007395c473f26cfcb59ab5be0582d7c4eeff8b5c72abb3cb18b9036ef0578bb7","a50a4ee87a7bde63aa3a35edd3bdb9cf4c3af8759104dbb9af08b87126ab6a9a","c9ba76f88d66712c51a5a119d632f62bcaa732c2fa5c8462fe7915684e57ff67","f67fac478210657611e869e2362d223e4d61f917c070e8240e9a60986f4f8637","42d3551eccf74ddce49fc958867627299b20c5731d4574d5c0f6b9816280faa0","5e6077e37d029ce395176871abb5d9e7f57ee5081e795dd5b298230a647b0553","c3d442c17548ba48cf94807da3d921bc116a4ef290ce2cb3d250ca4908fbf288","555887e71cdaf0778cf5d0c7e3ff29e939eb936d1ea3ee41243c3953a27ce045","6e993216d537448a8c69aad1589937cbc7bf669170f4be096581b6bc6817c6ff","8c54633bd9f570d76382a2d9dc80bc22edd5ca6c328add090812475c6728ec64","2a04c5392e50c6130127a09e8e938c71bd434ec57561fd27c916cf9622476b02","21d40f8dedbedd15e1c8d8f9ee192113aea300fd301ae2d790c53d927004102f","a8ec6e7afa929f5b4b623b03caf71bc9f3da37db2ffe76834c8e8fdefc59849f","446f1e6d9689df03c60c5a304e40b7edbdf505f188a914c105f2e58e1e641698","2c984aa8ea779bc70295121d6b9345c1de3c1fbc785ab793407ceb723835ca02","50b16d3ba0174d213d96f10068a2a01835286e8ac965b25c5aa658c5e60bc11f","5c7c053f85a15696cb4d3d466f3f2151be10b8b5fb0670b44d5f064b8897cc1e","2c993e1ec6fbdd02a472028d5203809ef8f2c76c2bc274110a7b01926dfe2b8c","8dafcb5fb479acabc058b87fa4347cba6104f7e960522f560a5b97818bca48a5","78dd0065f3d11c46b4d77028bdb0c29ee0a736cfea9f8d80a7815a02e2abaf7f","c88d9f88f24fe30f65be0b070060a030464fe89447e508b8529524970cde6aa6","1ea9b70fb2a0fe796ffdb9131c0c2a34176375fa6a4a888e6db613089a7e6782","ef66473f8402eff2a1d498a5026b7c333e849431465b2fa09b001ae0bac21ace","3a54a9ef2660e17912988954069c5b4143cf8f75227c8d8bf8eed6d1d0afd49f","86c18f2c92063f5dae9b954ca61b9798b4e59a7aec23d7d66fa182e009d7d31a","739d47f59b244557f360604ddfcba5293e24de25c7e3fe84c6cf4961dc620b9c","1c9c6ddba8ecb02562d0822a5e3c37046177866a4079b4ca166b923b72edeb16",{"version":"79fec4fbe74b8c013dd5f5e783c7ae1bc25ad38be5529f716168f47417e32203","affectsGlobalScope":true},{"version":"36fe69661e343cb4be10ff09db41af3abed1309a5edcb089e2e001f3c935efaf","affectsGlobalScope":true}],"root":[[50,103]],"options":{"allowSyntheticDefaultImports":true,"composite":true,"declaration":true,"declarationMap":true,"experimentalDecorators":true,"importHelpers":true,"inlineSources":true,"module":5,"noFallthroughCasesInSwitch":true,"noImplicitAny":true,"noImplicitOverride":true,"noImplicitReturns":true,"noImplicitThis":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./lib","rootDir":"./src","sourceMap":true,"strict":true,"stripInternal":true,"target":8},"fileIdsList":[[61,62,63,67,68,69,70,71,72,73,74],[76,77],[79,80],[82,83,84],[75,78,81,85,86,90,98],[66],[71],[70],[65],[79],[66,77],[82],[64,65,66,76],[64,65],[91],[65,91],[91,94],[65,66,76,91],[91,96],[64,65,66],[87,88,89],[91,92,93,94,95,96,97],[61,62,63,64,65,66,67,68,69,70,71,72,73,74,76,77,79,80,87,88,89,91,92,93,94,95,96,97],[64,65,66,67,68,69,76,77,82,83,84,89],[102],[59],[50,51],[50],[50,51,52,53,54],[52,53,54,55,57,58],[53,54,56,57],[50,51,53,54],[53,57]],"referencedMap":[[75,1],[78,2],[81,3],[85,4],[99,5],[67,6],[68,6],[69,6],[72,7],[73,8],[74,7],[76,9],[80,10],[79,11],[83,12],[84,12],[82,13],[66,14],[92,15],[93,16],[95,17],[94,18],[97,19],[96,16],[86,20],[90,21],[98,22],[100,23],[101,24],[103,25],[60,26],[52,27],[54,28],[56,29],[59,30],[58,31]],"exportedModulesMap":[[75,1],[78,2],[81,3],[85,4],[99,5],[67,6],[68,6],[69,6],[72,7],[73,8],[74,7],[76,9],[80,10],[79,11],[83,12],[84,12],[82,13],[66,14],[92,15],[93,16],[95,17],[94,18],[97,19],[96,16],[86,20],[90,21],[98,22],[100,23],[101,24],[103,25],[60,26],[52,27],[54,28],[56,32],[59,30],[58,33]],"semanticDiagnosticsPerFile":[75,78,81,85,99,61,62,63,67,68,69,70,71,72,73,74,76,77,80,79,83,84,82,64,65,66,87,88,89,92,93,91,95,94,97,96,86,90,98,100,101,103,102,48,49,10,9,2,11,12,13,14,15,16,17,18,3,19,4,20,24,21,22,23,25,26,27,5,28,29,30,31,6,35,32,33,34,36,7,37,42,43,38,39,40,41,8,47,44,45,46,1,60,52,50,51,53,54,56,59,55,58,57],"latestChangedDtsFile":"./lib/index.d.ts"},"version":"5.4.5"}
\ No newline at end of file
diff --git a/typescript/packages/usuba-api/vite.config.js b/typescript/packages/usuba-api/vite.config.js
new file mode 100644
index 000000000..10a4e40e5
--- /dev/null
+++ b/typescript/packages/usuba-api/vite.config.js
@@ -0,0 +1,19 @@
+// vite.config.js
+import { resolve } from 'path'
+import { defineConfig } from 'vite'
+
+export default defineConfig({
+ build: {
+ target: 'esnext',
+ lib: {
+ type: "module",
+ entry: resolve(__dirname, 'lib/index.js'),
+ name: 'UsubaServiceWorker',
+ fileName: 'usuba-sw',
+ module: "./dist/usuba-sw.js"
+ }
+ },
+ resolve: {
+ preserveSymlinks: true
+ }
+})
\ No newline at end of file
diff --git a/typescript/packages/usuba-sw/package.json b/typescript/packages/usuba-sw/package.json
index 218dd215f..95a6eb000 100644
--- a/typescript/packages/usuba-sw/package.json
+++ b/typescript/packages/usuba-sw/package.json
@@ -21,7 +21,9 @@
"files": [
"./dist/usuba-sw.js"
],
- "dependencies": {},
+ "dependencies": {
+ "@commontools/usuba-api": "^0.0.1"
+ },
"devDependencies": {
"@bytecodealliance/preview2-shim": "^0.16.2",
"@hey-api/openapi-ts": "^0.46.0",
@@ -31,21 +33,6 @@
"wireit": "^0.14.4"
},
"wireit": {
- "update-openapi-spec": {
- "command": "./scripts/update-openapi-spec.sh",
- "output": [
- "./openapi.json"
- ]
- },
- "build:openapi-client": {
- "command": "npx @hey-api/openapi-ts -i ./openapi.json -o ./src/openapi-client",
- "files": [
- "./openapi.json"
- ],
- "output": [
- "./src/openapi-client/**/*"
- ]
- },
"build:wasm": {
"command": "../../../rust/usuba-compat/build-wasm-component.sh",
"files": [
@@ -57,12 +44,16 @@
},
"build": {
"dependencies": [
- "build:wasm",
- "build:openapi-client"
+ "../usuba-api:build",
+ "build:wasm"
],
"files": [
"./src/**/*"
],
+ "output": [
+ "./lib/**/*",
+ "./dist/*"
+ ],
"command": "tsc --build -f && cp -r ./src/usuba_compat ./lib/usuba_compat && vite build"
}
}
diff --git a/typescript/packages/usuba-sw/src/index.ts b/typescript/packages/usuba-sw/src/index.ts
index c92c5649c..f7a0ee842 100644
--- a/typescript/packages/usuba-sw/src/index.ts
+++ b/typescript/packages/usuba-sw/src/index.ts
@@ -1,16 +1,43 @@
-import * as apiClient from './openapi-client/services.gen';
+import * as apiClient from '@commontools/usuba-api';
import { polyfill, hash } from './usuba_compat/usuba_compat.component.js';
+const SERVICE_WORKER_VERSION = '0.0.1';
+
self.addEventListener('install', (_event) => {
- console.log('Usuba Service Worker installed');
+ console.log(
+ `Usuba Service Worker installed (version ${SERVICE_WORKER_VERSION}`
+ );
});
-const TRANSPILED_MODULES_CACHE_NAME = 'v1/modules/transpiled';
+const WASI_SHIM_MAP = {
+ 'wasi:cli/*': '/wasi-shim/cli.js#*',
+ 'wasi:clocks/*': '/wasi-shim/clocks.js#*',
+ 'wasi:filesystem/*': '/wasi-shim/filesystem.js#*',
+ 'wasi:http/*': '/wasi-shim/http.js#*',
+ 'wasi:io/*': '/wasi-shim/io.js#*',
+ 'wasi:random/*': '/wasi-shim/random.js#*',
+ 'wasi:sockets/*': '/wasi-shim/sockets.js#*',
+};
+
+const ON_DEMAND_TRANSPILED_MODULES_CACHE_NAME =
+ 'v1/modules/transpiled/on-demand';
+const RUNTIME_TRANSPILED_MODULES_CACHE_NAME = 'v1/modules/transpiled/runtime';
+
+const ON_DEMAND_TRANSPILED_MODULE_DIRNAME = '/module/transpiled/on-demand';
+const ON_DEMAND_BUILD_DIRNAME = '/module/on-demand';
-const respondFromCache = (event: FetchEvent, url: URL) => {
+const RUNTIME_TRANSPILED_MODULE_DIRNAME = '/module/transpiled/runtime';
+const RUNTIME_BUILD_DIRNAME = '/api/v0/module';
+
+/**
+ * For a given request, if an item in the specified cache matches a specified
+ * URL (which may be different from the request URL), respond from the cache.
+ * Otherwise, forward the request.
+ */
+const respondFromCache = (event: FetchEvent, url: URL, cacheName: string) => {
event.respondWith(
(async () => {
- const cache = await caches.open(TRANSPILED_MODULES_CACHE_NAME);
+ const cache = await caches.open(cacheName);
const cacheResponse = await cache.match(url);
if (cacheResponse) {
@@ -22,7 +49,80 @@ const respondFromCache = (event: FetchEvent, url: URL) => {
);
};
-const buildModule = (event: FetchEvent, url: URL) => {
+/**
+ * Perform the steps to build a Module, first by invoking the Build Server
+ * and then by transpiling the resulting Wasm Component. Returns the artifacts
+ * of a successful transpilation.
+ */
+const buildModule = async (
+ slug: string,
+ module: File[],
+ library: File[],
+ instantiation: 'automatic' | 'manual' = 'automatic'
+): Promise> => {
+ const moduleId = (
+ await apiClient.buildModule({
+ formData: {
+ library,
+ module,
+ },
+ })
+ ).id;
+
+ const moduleBytes = new Uint8Array(
+ await (
+ await apiClient.retrieveModule({
+ id: moduleId,
+ })
+ ).arrayBuffer()
+ );
+
+ return polyfill(moduleBytes, {
+ name: slug,
+ mappings: Object.entries(WASI_SHIM_MAP),
+ instantiation,
+ });
+};
+
+/**
+ * Cache build artifacts, and generate / cache an entrypoint "wrapper"
+ * that re-exports the transpiled Wasm Component.
+ */
+const shrinkWrap = async (
+ entrypointUrl: URL,
+ wrapperModule: string,
+ files: [string, Uint8Array][],
+ cacheName: string,
+ dirName: string
+): Promise => {
+ const cache = await caches.open(cacheName);
+
+ for (const [filename, bytes] of files) {
+ console.log('Caching artifact:', filename);
+
+ const blob = new Blob([bytes], {
+ type: filename.endsWith('.wasm') ? 'application/wasm' : 'text/javascript',
+ });
+
+ const nextUrl = new URL(`${dirName}/${filename}`, entrypointUrl.origin);
+ await cache.put(nextUrl, new Response(blob));
+ }
+
+ const blob = new Blob([wrapperModule], { type: 'text/javascript' });
+ const response = new Response(blob);
+
+ await cache.put(entrypointUrl, response.clone());
+
+ return response;
+};
+
+/**
+ * The on-demand build flow is distinguished in two ways:
+ *
+ * 1. The flow starts with a GET request and yields an importable module
+ * 2. Module instantiation is automatic (its imports aren't configurable)
+ */
+const buildOnDemandModule = (event: FetchEvent, url: URL) => {
event.respondWith(
(async () => {
console.log('On-demand module generation detected...');
@@ -39,17 +139,19 @@ const buildModule = (event: FetchEvent, url: URL) => {
const polyfilledModuleId = hash(
encoder.encode(`${witBase64}.${sourceCodeBase64}`)
);
- const cache = await caches.open(TRANSPILED_MODULES_CACHE_NAME);
+ const cache = await caches.open(
+ ON_DEMAND_TRANSPILED_MODULES_CACHE_NAME
+ );
const moduleShortId = polyfilledModuleId.slice(0, 6);
const moduleSlug = `module-${moduleShortId}`;
- const entrypointModule = `/module/tra'v1/modules/transpiled'nspiled/${moduleSlug}-wrapper.js`;
+ const entrypointModule = `${ON_DEMAND_TRANSPILED_MODULE_DIRNAME}/${moduleSlug}-wrapper.js`;
const entrypointUrl = new URL(entrypointModule, url.origin);
const cacheItem = await cache.match(entrypointUrl);
if (typeof cacheItem != 'undefined') {
- console.log('Polyfilled module found in cache!');
+ console.log('Polyfilled on-demand module found in cache!');
return cacheItem;
}
@@ -68,60 +170,26 @@ const buildModule = (event: FetchEvent, url: URL) => {
`module.${ext}`
);
- const moduleId = (
- await apiClient.buildModule({
- formData: {
- library: [],
- module: [witFile, sourceCodeFile],
- },
- })
- ).id;
-
- const moduleBytes = new Uint8Array(
- await (
- await apiClient.retrieveModule({
- id: moduleId,
- })
- ).arrayBuffer()
- );
-
const {
files,
imports: _imports,
exports: _exports,
- } = polyfill(moduleBytes, {
- name: moduleSlug,
- mappings: Object.entries({
- 'wasi:cli/*': '/wasi-shim/cli.js#*',
- 'wasi:clocks/*': '/wasi-shim/clocks.js#*',
- 'wasi:filesystem/*': '/wasi-shim/filesystem.js#*',
- 'wasi:http/*': '/wasi-shim/http.js#*',
- 'wasi:io/*': '/wasi-shim/io.js#*',
- 'wasi:random/*': '/wasi-shim/random.js#*',
- 'wasi:sockets/*': '/wasi-shim/sockets.js#*',
- }),
- });
-
- for (const [filename, bytes] of files) {
- console.log('Caching artifact:', filename);
-
- const blob = new Blob([bytes], {
- type: filename.endsWith('.wasm')
- ? 'application/wasm'
- : 'text/javascript',
- });
-
- const nextUrl = new URL(`/module/transpiled/${filename}`, url.origin);
- await cache.put(nextUrl, new Response(blob));
- }
-
- const wrapperModule = `export * from '/module/transpiled/${moduleSlug}.js'`;
- const blob = new Blob([wrapperModule], { type: 'text/javascript' });
- const response = new Response(blob);
+ } = await buildModule(
+ moduleSlug,
+ [witFile, sourceCodeFile],
+ [],
+ 'automatic'
+ );
- await cache.put(entrypointUrl, response.clone());
+ const wrapperModule = `export * from '${ON_DEMAND_TRANSPILED_MODULE_DIRNAME}/${moduleSlug}.js'`;
- return response;
+ return await shrinkWrap(
+ entrypointUrl,
+ wrapperModule,
+ files,
+ ON_DEMAND_TRANSPILED_MODULES_CACHE_NAME,
+ ON_DEMAND_TRANSPILED_MODULE_DIRNAME
+ );
} else {
return new Response(new Blob([], { type: 'text/html' }), {
status: 404,
@@ -131,22 +199,144 @@ const buildModule = (event: FetchEvent, url: URL) => {
);
};
-self.addEventListener('fetch', async (event: FetchEvent) => {
- if (event.request.method !== 'GET') {
- return;
+/**
+ * A Runtime Module is built when the Service Worker intercepts an API request
+ * to the Build Server. The Wasm Component (produced by the Build Server) is
+ * transpiled and cached locally, and a derived Module ID is given to the caller
+ * (not the original Wasm Component ID). This allows the caller to provide an
+ * arbitrary number of input files with an initial POST, and then instantiate
+ * the Runtime Module "just in time" using a secondary import.
+ *
+ * Instantiation of a Runtime Module is manual, which means that it allows for
+ * imports to be configured at instantiation time. But, it also means that a
+ * Runtime Module cannot be imported transparently the way an On-demand Module
+ * can. Instead, the result of importing a Runtime Module is an `instantiate`
+ * function that yields the actual module.
+ */
+const buildRuntimeModule = (event: FetchEvent, url: URL) => {
+ event.respondWith(
+ (async () => {
+ const formData = await event.request.formData();
+ const moduleFiles = formData.getAll('module') as File[];
+ const libraryFiles = formData.getAll('library') as File[];
+
+ const allFiles = moduleFiles.concat(libraryFiles);
+
+ const runtimeModuleId = hash(
+ new Uint8Array(
+ await new Blob(
+ await Promise.all(allFiles.map((file) => file.arrayBuffer()))
+ ).arrayBuffer()
+ )
+ );
+
+ const cache = await caches.open(RUNTIME_TRANSPILED_MODULES_CACHE_NAME);
+ const moduleShortId = runtimeModuleId.slice(0, 6);
+ const moduleSlug = `module-${moduleShortId}`;
+
+ const buildResultPath = `${RUNTIME_TRANSPILED_MODULE_DIRNAME}/result-${moduleSlug}.json`;
+ const buildResultUrl = new URL(buildResultPath, url.origin);
+
+ const cacheItem = await cache.match(buildResultUrl);
+
+ if (typeof cacheItem != 'undefined') {
+ console.log('Polyfilled runtime module build result found in cache!');
+ return cacheItem;
+ }
+
+ const {
+ files,
+ imports: _imports,
+ exports: _exports,
+ } = await buildModule(moduleSlug, moduleFiles, libraryFiles, 'manual');
+
+ const wasiShimImports = [];
+
+ for (const specifier of Object.values(WASI_SHIM_MAP)) {
+ const trimmedSpecifier = specifier.split('#').shift();
+ wasiShimImports.push(`'${trimmedSpecifier}': import('${specifier}')`);
+ }
+
+ // const wrapperModule = `export * from '${ON_DEMAND_TRANSPILED_MODULE_DIRNAME}/${moduleSlug}.js'`;
+ const wrapperModule = `import {instantiate as innerInstantiate} from '${RUNTIME_TRANSPILED_MODULE_DIRNAME}/${moduleSlug}.js';
+
+const wasiShimImportPromises = {
+ ${wasiShimImports.join(',\n ')}
+};
+
+const wasiShimImports = Promise.all(
+ Object.entries(wasiShimImportPromises)
+ .map(([specifier, importPromise]) =>
+ importPromise.then((importResult) => [specifier, importResult])
+ )
+);
+
+export const instantiate = async (imports) => {
+ const resolvedWasiShimImports = await wasiShimImports;
+
+ for (const [name, shimImport] of resolvedWasiShimImports) {
+ if (typeof imports[name] == 'undefined') {
+ imports[name] = shimImport;
+ }
}
+ const getCoreModule = async (name) => fetch('${RUNTIME_TRANSPILED_MODULE_DIRNAME}/' + name).then(WebAssembly.compileStreaming);
+ return innerInstantiate(getCoreModule, imports);
+};`;
+
+ await shrinkWrap(
+ new URL(
+ `${RUNTIME_TRANSPILED_MODULE_DIRNAME}/${runtimeModuleId}.js`,
+ url.origin
+ ),
+ wrapperModule,
+ files,
+ RUNTIME_TRANSPILED_MODULES_CACHE_NAME,
+ RUNTIME_TRANSPILED_MODULE_DIRNAME
+ );
+
+ const response = new Response(
+ new Blob([JSON.stringify({ id: runtimeModuleId })], {
+ type: 'application/json',
+ })
+ );
+
+ await cache.put(buildResultUrl, response.clone());
+
+ return response;
+ })()
+ );
+};
+
+self.addEventListener('fetch', async (event: FetchEvent) => {
const requestUrl = new URL(event.request.url);
- if (requestUrl.pathname.startsWith('/module/transpiled')) {
- respondFromCache(event, requestUrl);
- } else if (requestUrl.pathname.startsWith('/module/on-demand')) {
- buildModule(event, requestUrl);
+ switch (event.request.method) {
+ case 'GET':
+ if (requestUrl.pathname.startsWith(ON_DEMAND_TRANSPILED_MODULE_DIRNAME)) {
+ respondFromCache(
+ event,
+ requestUrl,
+ ON_DEMAND_TRANSPILED_MODULES_CACHE_NAME
+ );
+ } else if (
+ requestUrl.pathname.startsWith(RUNTIME_TRANSPILED_MODULE_DIRNAME)
+ ) {
+ respondFromCache(
+ event,
+ requestUrl,
+ RUNTIME_TRANSPILED_MODULES_CACHE_NAME
+ );
+ } else if (requestUrl.pathname.startsWith(ON_DEMAND_BUILD_DIRNAME)) {
+ buildOnDemandModule(event, requestUrl);
+ }
+ break;
+ case 'POST':
+ if (requestUrl.pathname.startsWith(RUNTIME_BUILD_DIRNAME)) {
+ buildRuntimeModule(event, requestUrl);
+ }
+ break;
+ default:
+ break;
}
});
-
-/*
-
-
-
-*/
diff --git a/typescript/packages/usuba-sw/tsconfig.json b/typescript/packages/usuba-sw/tsconfig.json
index e0ddf35f7..05bd418e6 100644
--- a/typescript/packages/usuba-sw/tsconfig.json
+++ b/typescript/packages/usuba-sw/tsconfig.json
@@ -1,9 +1,9 @@
{
"compilerOptions": {
"composite": true,
- "target": "es2021",
- "module": "es6",
- "lib": ["es2021"],
+ "target": "es2022",
+ "module": "es2022",
+ "lib": ["es2022"],
"declaration": true,
"declarationMap": true,
"sourceMap": true,
@@ -17,7 +17,7 @@
"noFallthroughCasesInSwitch": true,
"noImplicitAny": true,
"noImplicitThis": true,
- "moduleResolution": "node",
+ "moduleResolution": "bundler",
"allowSyntheticDefaultImports": true,
"experimentalDecorators": true,
"importHelpers": true,
diff --git a/typescript/packages/usuba-sw/tsconfig.tsbuildinfo b/typescript/packages/usuba-sw/tsconfig.tsbuildinfo
index 53a46ee01..75f73e2a9 100644
--- a/typescript/packages/usuba-sw/tsconfig.tsbuildinfo
+++ b/typescript/packages/usuba-sw/tsconfig.tsbuildinfo
@@ -1 +1 @@
-{"program":{"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","./src/openapi-client/core/CancelablePromise.ts","./src/openapi-client/core/ApiRequestOptions.ts","./src/openapi-client/core/OpenAPI.ts","./src/openapi-client/core/ApiResult.ts","./src/openapi-client/core/ApiError.ts","./src/openapi-client/core/request.ts","./src/openapi-client/types.gen.ts","./src/openapi-client/services.gen.ts","./src/usuba_compat/interfaces/wasi-cli-environment.d.ts","./src/usuba_compat/interfaces/wasi-cli-exit.d.ts","./src/usuba_compat/interfaces/wasi-io-error.d.ts","./src/usuba_compat/interfaces/wasi-io-streams.d.ts","./src/usuba_compat/interfaces/wasi-cli-stderr.d.ts","./src/usuba_compat/interfaces/wasi-cli-stdin.d.ts","./src/usuba_compat/interfaces/wasi-cli-stdout.d.ts","./src/usuba_compat/interfaces/wasi-clocks-wall-clock.d.ts","./src/usuba_compat/interfaces/wasi-filesystem-types.d.ts","./src/usuba_compat/interfaces/wasi-filesystem-preopens.d.ts","./src/usuba_compat/interfaces/wasi-random-random.d.ts","./src/usuba_compat/usuba_compat.component.d.ts","./src/index.ts","./src/openapi-client/schemas.gen.ts","./src/openapi-client/index.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-environment.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-exit.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-run.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-io-error.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-io-poll.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-io-streams.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-stderr.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-stdin.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-stdout.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-terminal-input.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-terminal-output.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-terminal-stderr.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-terminal-stdin.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-terminal-stdout.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/cli.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-clocks-monotonic-clock.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-clocks-wall-clock.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/clocks.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-filesystem-types.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-filesystem-preopens.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/filesystem.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-http-types.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-http-incoming-handler.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-http-outgoing-handler.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/http.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/io.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-random-insecure-seed.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-random-insecure.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-random-random.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/random.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-sockets-network.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-sockets-instance-network.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-sockets-ip-name-lookup.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-sockets-tcp.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-sockets-tcp-create-socket.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-sockets-udp.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-sockets-udp-create-socket.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/sockets.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/index.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/wasi-cli-command.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/wasi-http-proxy.d.ts","../../node_modules/@types/serviceworker/iterable.d.ts","../../node_modules/@types/serviceworker/index.d.ts"],"fileInfos":[{"version":"824cb491a40f7e8fdeb56f1df5edf91b23f3e3ee6b4cde84d4a99be32338faee","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569",{"version":"138fb588d26538783b78d1e3b2c2cc12d55840b97bf5e08bca7f7a174fbe2f17","affectsGlobalScope":true},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"bc47685641087c015972a3f072480889f0d6c65515f12bd85222f49a98952ed7","affectsGlobalScope":true},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true},{"version":"bb42a7797d996412ecdc5b2787720de477103a0b2e53058569069a0e2bae6c7e","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"b541a838a13f9234aba650a825393ffc2292dc0fc87681a5d81ef0c96d281e7a","affectsGlobalScope":true},{"version":"b20fe0eca9a4e405f1a5ae24a2b3290b37cf7f21eba6cbe4fc3fab979237d4f3","affectsGlobalScope":true},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"49ed889be54031e1044af0ad2c603d627b8bda8b50c1a68435fe85583901d072","affectsGlobalScope":true},{"version":"e93d098658ce4f0c8a0779e6cab91d0259efb88a318137f686ad76f8410ca270","affectsGlobalScope":true},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"5e07ed3809d48205d5b985642a59f2eba47c402374a7cf8006b686f79efadcbd","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"8073890e29d2f46fdbc19b8d6d2eb9ea58db9a2052f8640af20baff9afbc8640","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true},{"version":"51e547984877a62227042850456de71a5c45e7fe86b7c975c6e68896c86fa23b","affectsGlobalScope":true},{"version":"956d27abdea9652e8368ce029bb1e0b9174e9678a273529f426df4b3d90abd60","affectsGlobalScope":true},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},{"version":"663237e06287606be7ccdb892ddc9562352aec15dedca983ac84004c2b1b17cc","signature":"11a746b4d1023300a23da9afb502364b8a67874b00f34fd92c3adcf605e49368"},{"version":"f49f644231f39b74684e103ae64a56952d8eb263b79bf35574d8379e0a01056e","signature":"133b004d5fec7847b2043006864672606223edffb06fe0726b5506da919500e5"},{"version":"64d75e977b227615ff85a8fc46bc56148eeb5143cb86c9d4bc196fabc89d4ea9","signature":"c209b0f634e8337bb9ef368d842d38d3a95f32cbd8b0df3b1c5ffa386e2fb067"},{"version":"8b8a47fd8c3b647c999ac6f83c85e7f0b851a8954c148a787d9e8e90f3b7da4e","signature":"1499eebe9457d103b9b5782b243797305ca7f26e198d384c2e0b2a25d6f10bde"},{"version":"95f506c7f6b38262bd5932f87820faab73121e08bd9306ce440b732a9443fe95","signature":"358537bc98289ec8e0a883558469c877a4fbe38a15d023f7e0456e4a4f72bcd8"},{"version":"eabebdebcb2173d4679f69c60d9dd32d4fdc5beefeea62fdce60e91d949e08f4","signature":"7d67dcebda39234142a94b0f3949b1410ffcae09318dfe2f98af3c0d68babd75"},{"version":"6f48769e82337f7cb4a4d923fbb89d75aeebfe80b84544388891aea2273e54d0","signature":"747b8dae4f3c27e0077fc35ef969cea194712bc834eee03fbf342bdcddede335"},{"version":"98c47f37dba0f3c9b0807003aa56195eeed9dc70bee53b2d0034ff2841667992","signature":"bf5be703ddfcada43840ed728f03d8fd1529fdce43b2ca35eaaabd7bb17cf68f"},"5c972c15e17460c7187ca686ad4f849ec67fd80973dd081040d101cbb6289c0f","6d978b7e6fe437e74fd706a46aa068e95ce527707fc1bcd0581b42ad2d6cd857","051889e07ae7cce2fda01c0205b2094e4b6af8fc15d94c1fbf74e243791367e9","4771dc75aef3e1ca2c94755fafa3a2fabe901e2c228f44863396304225574e12","40b503e330de157566a04cf9c3d2fa25884202627182383aa9a93241f9aa181e","afa98d3b6a0444ae8c3917468410fe970fd89b591b74fc05613cde891923448d","f7b9b849771d5ad94c0b7942ad7ad9a8b9be8c06bb9ca9b87808be9b035e9e11","389dc524ad7c8b880df9287266597830f9fa6eff0279cac2e41cc626508e5344","bfd13eb3b7b5d7be0ebf666ab855eed9f6f78faef9efea64d41f966807dbf53b","7f071c1d1eb9b7cb04bcf38f765ddaebcbba2baf00f4958913e6c888529b2144","db671aadda72ca3d173bf3540d52366e0b7727855a83c64526eacdcfa751b372","729c830f54b0fcf042a7786c53c48b59528c0dd97f7b979b69627fc997fe6cf3",{"version":"c2667617f43e2a785882c261182155a2a12677514f0d0e2c7f47de7323c7e3d0","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"6ed1b13b13a69c569270c3e025e761eabf69486e7cbf96f9014bf8716d2a0dd1","signature":"5cac732e45a89f989c5da96592e7839aef7877ff58e33f79c4d120aa1e32e0ca"},{"version":"7b2931f49e92fdcd2af4f577707392ad2c3d3a71a8ee78c07418d83b7540fcdf","signature":"139558747accfba69018e47cc01ffa611a8afdfc75fcc218276ec7aad96f246b"},"8a95678ae9f5199675902f24f3fd2a2b1759d1246198f53d0076890c8f3a89ca","648cdcd5baccca30b3c217976c52463269071a3a0a8f6784a95e7818f7b8abad","c033bb2c56ec100557bb616c98f8ad4648ca263062ad9f9f8a1e8bc71694052c","7ae0338b32bd72df596a5f49daa37c4ba5046d44ca77dd294325a8a0a612b744","8d52b8d32199c9f1e9bec474d5fff4a80dbc2079a277f68d5548e6b2649590d8","5ee4bd3be80e194388bf521245bbcf8d44d5c148d18b6bb262d3617b89e91421","40b503e330de157566a04cf9c3d2fa25884202627182383aa9a93241f9aa181e","afa98d3b6a0444ae8c3917468410fe970fd89b591b74fc05613cde891923448d","f7b9b849771d5ad94c0b7942ad7ad9a8b9be8c06bb9ca9b87808be9b035e9e11","9179a85ab76d3118975c391f747d408172ff0544f8b46763639a74883f437bfd","e06a866dcb1161b68602c62bc03c3f1cedede1576003e3697babd853bd3edefc","3f464b0aa7697aae1d05cd4cdc05e84e5befed0a4613279bbfaabca912d9f814","3a8c7f5622f3618a8c5b73537207cc4bbff8ba4ce5acdaaf6a67f13bf5e0badd","9186c8a514ea5cced20eb6b5c8dec2368fa16bba618891b9a69b241965e14947","007395c473f26cfcb59ab5be0582d7c4eeff8b5c72abb3cb18b9036ef0578bb7","a50a4ee87a7bde63aa3a35edd3bdb9cf4c3af8759104dbb9af08b87126ab6a9a","c9ba76f88d66712c51a5a119d632f62bcaa732c2fa5c8462fe7915684e57ff67","f67fac478210657611e869e2362d223e4d61f917c070e8240e9a60986f4f8637","42d3551eccf74ddce49fc958867627299b20c5731d4574d5c0f6b9816280faa0","5e6077e37d029ce395176871abb5d9e7f57ee5081e795dd5b298230a647b0553","c3d442c17548ba48cf94807da3d921bc116a4ef290ce2cb3d250ca4908fbf288","555887e71cdaf0778cf5d0c7e3ff29e939eb936d1ea3ee41243c3953a27ce045","6e993216d537448a8c69aad1589937cbc7bf669170f4be096581b6bc6817c6ff","8c54633bd9f570d76382a2d9dc80bc22edd5ca6c328add090812475c6728ec64","2a04c5392e50c6130127a09e8e938c71bd434ec57561fd27c916cf9622476b02","21d40f8dedbedd15e1c8d8f9ee192113aea300fd301ae2d790c53d927004102f","a8ec6e7afa929f5b4b623b03caf71bc9f3da37db2ffe76834c8e8fdefc59849f","446f1e6d9689df03c60c5a304e40b7edbdf505f188a914c105f2e58e1e641698","2c984aa8ea779bc70295121d6b9345c1de3c1fbc785ab793407ceb723835ca02","50b16d3ba0174d213d96f10068a2a01835286e8ac965b25c5aa658c5e60bc11f","5c7c053f85a15696cb4d3d466f3f2151be10b8b5fb0670b44d5f064b8897cc1e","2c993e1ec6fbdd02a472028d5203809ef8f2c76c2bc274110a7b01926dfe2b8c","8dafcb5fb479acabc058b87fa4347cba6104f7e960522f560a5b97818bca48a5","78dd0065f3d11c46b4d77028bdb0c29ee0a736cfea9f8d80a7815a02e2abaf7f","c88d9f88f24fe30f65be0b070060a030464fe89447e508b8529524970cde6aa6","1ea9b70fb2a0fe796ffdb9131c0c2a34176375fa6a4a888e6db613089a7e6782","ef66473f8402eff2a1d498a5026b7c333e849431465b2fa09b001ae0bac21ace","3a54a9ef2660e17912988954069c5b4143cf8f75227c8d8bf8eed6d1d0afd49f","86c18f2c92063f5dae9b954ca61b9798b4e59a7aec23d7d66fa182e009d7d31a","739d47f59b244557f360604ddfcba5293e24de25c7e3fe84c6cf4961dc620b9c","1c9c6ddba8ecb02562d0822a5e3c37046177866a4079b4ca166b923b72edeb16",{"version":"79fec4fbe74b8c013dd5f5e783c7ae1bc25ad38be5529f716168f47417e32203","affectsGlobalScope":true},{"version":"36fe69661e343cb4be10ff09db41af3abed1309a5edcb089e2e001f3c935efaf","affectsGlobalScope":true}],"root":[[50,115]],"options":{"allowSyntheticDefaultImports":true,"composite":true,"declaration":true,"declarationMap":true,"experimentalDecorators":true,"importHelpers":true,"inlineSources":true,"module":5,"noFallthroughCasesInSwitch":true,"noImplicitAny":true,"noImplicitOverride":true,"noImplicitReturns":true,"noImplicitThis":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./lib","rootDir":"./src","sourceMap":true,"strict":true,"stripInternal":true,"target":8},"fileIdsList":[[73,74,75,79,80,81,82,83,84,85,86],[88,89],[91,92],[94,95,96],[87,90,93,97,98,102,110],[78],[83],[82],[77],[91],[78,89],[94],[76,77,78,88],[76,77],[103],[77,103],[103,106],[77,78,88,103],[103,108],[76,77,78],[99,100,101],[103,104,105,106,107,108,109],[73,74,75,76,77,78,79,80,81,82,83,84,85,86,88,89,91,92,99,100,101,103,104,105,106,107,108,109],[76,77,78,79,80,81,88,89,94,95,96,101],[114],[57,69],[51,53],[51],[50,51,52,53,54],[50,52,54,56,57,71],[50,52,55,56],[61],[66],[61,65],[60],[58,59,60,61,62,63,64,65,66,67,68],[50,51,52,53],[50,56]],"referencedMap":[[87,1],[90,2],[93,3],[97,4],[111,5],[79,6],[80,6],[81,6],[84,7],[85,8],[86,7],[88,9],[92,10],[91,11],[95,12],[96,12],[94,13],[78,14],[104,15],[105,16],[107,17],[106,18],[109,19],[108,16],[98,20],[102,21],[110,22],[112,23],[113,24],[115,25],[70,26],[54,27],[52,28],[55,29],[72,30],[57,31],[62,32],[63,32],[64,32],[67,33],[66,34],[61,35],[69,36]],"exportedModulesMap":[[87,1],[90,2],[93,3],[97,4],[111,5],[79,6],[80,6],[81,6],[84,7],[85,8],[86,7],[88,9],[92,10],[91,11],[95,12],[96,12],[94,13],[78,14],[104,15],[105,16],[107,17],[106,18],[109,19],[108,16],[98,20],[102,21],[110,22],[112,23],[113,24],[115,25],[54,27],[52,28],[55,37],[72,30],[57,38],[62,32],[63,32],[64,32],[67,33],[66,34],[61,35],[69,36]],"semanticDiagnosticsPerFile":[87,90,93,97,111,73,74,75,79,80,81,82,83,84,85,86,88,89,92,91,95,96,94,76,77,78,99,100,101,104,105,103,107,106,109,108,98,102,110,112,113,115,114,48,49,10,9,2,11,12,13,14,15,16,17,18,3,19,4,20,24,21,22,23,25,26,27,5,28,29,30,31,6,35,32,33,34,36,7,37,42,43,38,39,40,41,8,47,44,45,46,1,70,54,51,53,50,52,55,72,71,57,56,58,59,62,63,64,65,67,66,60,61,68,69],"latestChangedDtsFile":"./lib/openapi-client/index.d.ts"},"version":"5.4.5"}
\ No newline at end of file
+{"program":{"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/typescript/lib/lib.es2022.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../usuba-api/lib/openapi-client/core/ApiRequestOptions.d.ts","../usuba-api/lib/openapi-client/core/ApiResult.d.ts","../usuba-api/lib/openapi-client/core/ApiError.d.ts","../usuba-api/lib/openapi-client/core/CancelablePromise.d.ts","../usuba-api/lib/openapi-client/core/OpenAPI.d.ts","../usuba-api/lib/openapi-client/schemas.gen.d.ts","../usuba-api/lib/openapi-client/types.gen.d.ts","../usuba-api/lib/openapi-client/services.gen.d.ts","../usuba-api/lib/openapi-client/index.d.ts","../usuba-api/lib/index.d.ts","./src/usuba_compat/interfaces/wasi-cli-environment.d.ts","./src/usuba_compat/interfaces/wasi-cli-exit.d.ts","./src/usuba_compat/interfaces/wasi-io-error.d.ts","./src/usuba_compat/interfaces/wasi-io-streams.d.ts","./src/usuba_compat/interfaces/wasi-cli-stderr.d.ts","./src/usuba_compat/interfaces/wasi-cli-stdin.d.ts","./src/usuba_compat/interfaces/wasi-cli-stdout.d.ts","./src/usuba_compat/interfaces/wasi-clocks-wall-clock.d.ts","./src/usuba_compat/interfaces/wasi-filesystem-types.d.ts","./src/usuba_compat/interfaces/wasi-filesystem-preopens.d.ts","./src/usuba_compat/interfaces/wasi-random-random.d.ts","./src/usuba_compat/usuba_compat.component.d.ts","./src/index.ts","./src/openapi-client/core/ApiRequestOptions.ts","./src/openapi-client/core/ApiResult.ts","./src/openapi-client/core/ApiError.ts","./src/openapi-client/core/CancelablePromise.ts","./src/openapi-client/core/OpenAPI.ts","./src/openapi-client/schemas.gen.ts","./src/openapi-client/core/request.ts","./src/openapi-client/types.gen.ts","./src/openapi-client/services.gen.ts","./src/openapi-client/index.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-environment.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-exit.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-run.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-io-error.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-io-poll.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-io-streams.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-stderr.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-stdin.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-stdout.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-terminal-input.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-terminal-output.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-terminal-stderr.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-terminal-stdin.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-cli-terminal-stdout.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/cli.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-clocks-monotonic-clock.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-clocks-wall-clock.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/clocks.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-filesystem-types.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-filesystem-preopens.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/filesystem.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-http-types.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-http-incoming-handler.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-http-outgoing-handler.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/http.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/io.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-random-insecure-seed.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-random-insecure.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-random-random.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/random.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-sockets-network.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-sockets-instance-network.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-sockets-ip-name-lookup.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-sockets-tcp.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-sockets-tcp-create-socket.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-sockets-udp.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/interfaces/wasi-sockets-udp-create-socket.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/sockets.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/index.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/wasi-cli-command.d.ts","../../node_modules/@bytecodealliance/preview2-shim/types/wasi-http-proxy.d.ts","../../node_modules/@types/serviceworker/iterable.d.ts","../../node_modules/@types/serviceworker/index.d.ts"],"fileInfos":[{"version":"824cb491a40f7e8fdeb56f1df5edf91b23f3e3ee6b4cde84d4a99be32338faee","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","5514e54f17d6d74ecefedc73c504eadffdeda79c7ea205cf9febead32d45c4bc",{"version":"138fb588d26538783b78d1e3b2c2cc12d55840b97bf5e08bca7f7a174fbe2f17","affectsGlobalScope":true},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"bc47685641087c015972a3f072480889f0d6c65515f12bd85222f49a98952ed7","affectsGlobalScope":true},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true},{"version":"bb42a7797d996412ecdc5b2787720de477103a0b2e53058569069a0e2bae6c7e","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"b541a838a13f9234aba650a825393ffc2292dc0fc87681a5d81ef0c96d281e7a","affectsGlobalScope":true},{"version":"b20fe0eca9a4e405f1a5ae24a2b3290b37cf7f21eba6cbe4fc3fab979237d4f3","affectsGlobalScope":true},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"49ed889be54031e1044af0ad2c603d627b8bda8b50c1a68435fe85583901d072","affectsGlobalScope":true},{"version":"e93d098658ce4f0c8a0779e6cab91d0259efb88a318137f686ad76f8410ca270","affectsGlobalScope":true},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"5e07ed3809d48205d5b985642a59f2eba47c402374a7cf8006b686f79efadcbd","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"8073890e29d2f46fdbc19b8d6d2eb9ea58db9a2052f8640af20baff9afbc8640","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true},{"version":"51e547984877a62227042850456de71a5c45e7fe86b7c975c6e68896c86fa23b","affectsGlobalScope":true},{"version":"956d27abdea9652e8368ce029bb1e0b9174e9678a273529f426df4b3d90abd60","affectsGlobalScope":true},{"version":"4fa6ed14e98aa80b91f61b9805c653ee82af3502dc21c9da5268d3857772ca05","affectsGlobalScope":true},{"version":"e6633e05da3ff36e6da2ec170d0d03ccf33de50ca4dc6f5aeecb572cedd162fb","affectsGlobalScope":true},{"version":"d8670852241d4c6e03f2b89d67497a4bbefe29ecaa5a444e2c11a9b05e6fccc6","affectsGlobalScope":true},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true},{"version":"caccc56c72713969e1cfe5c3d44e5bab151544d9d2b373d7dbe5a1e4166652be","affectsGlobalScope":true},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true},{"version":"50d53ccd31f6667aff66e3d62adf948879a3a16f05d89882d1188084ee415bbc","affectsGlobalScope":true},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},"133b004d5fec7847b2043006864672606223edffb06fe0726b5506da919500e5","1499eebe9457d103b9b5782b243797305ca7f26e198d384c2e0b2a25d6f10bde","358537bc98289ec8e0a883558469c877a4fbe38a15d023f7e0456e4a4f72bcd8","11a746b4d1023300a23da9afb502364b8a67874b00f34fd92c3adcf605e49368","c209b0f634e8337bb9ef368d842d38d3a95f32cbd8b0df3b1c5ffa386e2fb067","5cac732e45a89f989c5da96592e7839aef7877ff58e33f79c4d120aa1e32e0ca","747b8dae4f3c27e0077fc35ef969cea194712bc834eee03fbf342bdcddede335","bf5be703ddfcada43840ed728f03d8fd1529fdce43b2ca35eaaabd7bb17cf68f","139558747accfba69018e47cc01ffa611a8afdfc75fcc218276ec7aad96f246b","5a37807f64441957c7d5a96fa0415a7e6f4b93ae307219cf5fb49a68d2637dd0","5c972c15e17460c7187ca686ad4f849ec67fd80973dd081040d101cbb6289c0f","6d978b7e6fe437e74fd706a46aa068e95ce527707fc1bcd0581b42ad2d6cd857","051889e07ae7cce2fda01c0205b2094e4b6af8fc15d94c1fbf74e243791367e9","4771dc75aef3e1ca2c94755fafa3a2fabe901e2c228f44863396304225574e12","40b503e330de157566a04cf9c3d2fa25884202627182383aa9a93241f9aa181e","afa98d3b6a0444ae8c3917468410fe970fd89b591b74fc05613cde891923448d","f7b9b849771d5ad94c0b7942ad7ad9a8b9be8c06bb9ca9b87808be9b035e9e11","389dc524ad7c8b880df9287266597830f9fa6eff0279cac2e41cc626508e5344","bfd13eb3b7b5d7be0ebf666ab855eed9f6f78faef9efea64d41f966807dbf53b","7f071c1d1eb9b7cb04bcf38f765ddaebcbba2baf00f4958913e6c888529b2144","db671aadda72ca3d173bf3540d52366e0b7727855a83c64526eacdcfa751b372","93b374f67d818bd8803b403024b91e22395e19829f678bdd4ce60f42ed6c0785",{"version":"f520d253f22020a13e1a670229b6fcd27447ec0c0d8bff8611c23dfa4ac367b1","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"f49f644231f39b74684e103ae64a56952d8eb263b79bf35574d8379e0a01056e","signature":"133b004d5fec7847b2043006864672606223edffb06fe0726b5506da919500e5"},{"version":"8b8a47fd8c3b647c999ac6f83c85e7f0b851a8954c148a787d9e8e90f3b7da4e","signature":"1499eebe9457d103b9b5782b243797305ca7f26e198d384c2e0b2a25d6f10bde"},{"version":"95f506c7f6b38262bd5932f87820faab73121e08bd9306ce440b732a9443fe95","signature":"358537bc98289ec8e0a883558469c877a4fbe38a15d023f7e0456e4a4f72bcd8"},{"version":"663237e06287606be7ccdb892ddc9562352aec15dedca983ac84004c2b1b17cc","signature":"11a746b4d1023300a23da9afb502364b8a67874b00f34fd92c3adcf605e49368"},{"version":"64d75e977b227615ff85a8fc46bc56148eeb5143cb86c9d4bc196fabc89d4ea9","signature":"c209b0f634e8337bb9ef368d842d38d3a95f32cbd8b0df3b1c5ffa386e2fb067"},{"version":"6ed1b13b13a69c569270c3e025e761eabf69486e7cbf96f9014bf8716d2a0dd1","signature":"5cac732e45a89f989c5da96592e7839aef7877ff58e33f79c4d120aa1e32e0ca"},{"version":"eabebdebcb2173d4679f69c60d9dd32d4fdc5beefeea62fdce60e91d949e08f4","signature":"7d67dcebda39234142a94b0f3949b1410ffcae09318dfe2f98af3c0d68babd75"},{"version":"6f48769e82337f7cb4a4d923fbb89d75aeebfe80b84544388891aea2273e54d0","signature":"747b8dae4f3c27e0077fc35ef969cea194712bc834eee03fbf342bdcddede335"},{"version":"98c47f37dba0f3c9b0807003aa56195eeed9dc70bee53b2d0034ff2841667992","signature":"bf5be703ddfcada43840ed728f03d8fd1529fdce43b2ca35eaaabd7bb17cf68f"},{"version":"7b2931f49e92fdcd2af4f577707392ad2c3d3a71a8ee78c07418d83b7540fcdf","signature":"139558747accfba69018e47cc01ffa611a8afdfc75fcc218276ec7aad96f246b"},"8a95678ae9f5199675902f24f3fd2a2b1759d1246198f53d0076890c8f3a89ca","648cdcd5baccca30b3c217976c52463269071a3a0a8f6784a95e7818f7b8abad","c033bb2c56ec100557bb616c98f8ad4648ca263062ad9f9f8a1e8bc71694052c","7ae0338b32bd72df596a5f49daa37c4ba5046d44ca77dd294325a8a0a612b744","8d52b8d32199c9f1e9bec474d5fff4a80dbc2079a277f68d5548e6b2649590d8","5ee4bd3be80e194388bf521245bbcf8d44d5c148d18b6bb262d3617b89e91421","40b503e330de157566a04cf9c3d2fa25884202627182383aa9a93241f9aa181e","afa98d3b6a0444ae8c3917468410fe970fd89b591b74fc05613cde891923448d","f7b9b849771d5ad94c0b7942ad7ad9a8b9be8c06bb9ca9b87808be9b035e9e11","9179a85ab76d3118975c391f747d408172ff0544f8b46763639a74883f437bfd","e06a866dcb1161b68602c62bc03c3f1cedede1576003e3697babd853bd3edefc","3f464b0aa7697aae1d05cd4cdc05e84e5befed0a4613279bbfaabca912d9f814","3a8c7f5622f3618a8c5b73537207cc4bbff8ba4ce5acdaaf6a67f13bf5e0badd","9186c8a514ea5cced20eb6b5c8dec2368fa16bba618891b9a69b241965e14947","007395c473f26cfcb59ab5be0582d7c4eeff8b5c72abb3cb18b9036ef0578bb7","a50a4ee87a7bde63aa3a35edd3bdb9cf4c3af8759104dbb9af08b87126ab6a9a","c9ba76f88d66712c51a5a119d632f62bcaa732c2fa5c8462fe7915684e57ff67","f67fac478210657611e869e2362d223e4d61f917c070e8240e9a60986f4f8637","42d3551eccf74ddce49fc958867627299b20c5731d4574d5c0f6b9816280faa0","5e6077e37d029ce395176871abb5d9e7f57ee5081e795dd5b298230a647b0553","c3d442c17548ba48cf94807da3d921bc116a4ef290ce2cb3d250ca4908fbf288","555887e71cdaf0778cf5d0c7e3ff29e939eb936d1ea3ee41243c3953a27ce045","6e993216d537448a8c69aad1589937cbc7bf669170f4be096581b6bc6817c6ff","8c54633bd9f570d76382a2d9dc80bc22edd5ca6c328add090812475c6728ec64","2a04c5392e50c6130127a09e8e938c71bd434ec57561fd27c916cf9622476b02","21d40f8dedbedd15e1c8d8f9ee192113aea300fd301ae2d790c53d927004102f","a8ec6e7afa929f5b4b623b03caf71bc9f3da37db2ffe76834c8e8fdefc59849f","446f1e6d9689df03c60c5a304e40b7edbdf505f188a914c105f2e58e1e641698","2c984aa8ea779bc70295121d6b9345c1de3c1fbc785ab793407ceb723835ca02","50b16d3ba0174d213d96f10068a2a01835286e8ac965b25c5aa658c5e60bc11f","5c7c053f85a15696cb4d3d466f3f2151be10b8b5fb0670b44d5f064b8897cc1e","2c993e1ec6fbdd02a472028d5203809ef8f2c76c2bc274110a7b01926dfe2b8c","8dafcb5fb479acabc058b87fa4347cba6104f7e960522f560a5b97818bca48a5","78dd0065f3d11c46b4d77028bdb0c29ee0a736cfea9f8d80a7815a02e2abaf7f","c88d9f88f24fe30f65be0b070060a030464fe89447e508b8529524970cde6aa6","1ea9b70fb2a0fe796ffdb9131c0c2a34176375fa6a4a888e6db613089a7e6782","ef66473f8402eff2a1d498a5026b7c333e849431465b2fa09b001ae0bac21ace","3a54a9ef2660e17912988954069c5b4143cf8f75227c8d8bf8eed6d1d0afd49f","86c18f2c92063f5dae9b954ca61b9798b4e59a7aec23d7d66fa182e009d7d31a","739d47f59b244557f360604ddfcba5293e24de25c7e3fe84c6cf4961dc620b9c","1c9c6ddba8ecb02562d0822a5e3c37046177866a4079b4ca166b923b72edeb16",{"version":"79fec4fbe74b8c013dd5f5e783c7ae1bc25ad38be5529f716168f47417e32203","affectsGlobalScope":true},{"version":"36fe69661e343cb4be10ff09db41af3abed1309a5edcb089e2e001f3c935efaf","affectsGlobalScope":true}],"root":[[68,133]],"options":{"allowSyntheticDefaultImports":true,"composite":true,"declaration":true,"declarationMap":true,"experimentalDecorators":true,"importHelpers":true,"inlineSources":true,"module":7,"noFallthroughCasesInSwitch":true,"noImplicitAny":true,"noImplicitOverride":true,"noImplicitReturns":true,"noImplicitThis":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./lib","rootDir":"./src","sourceMap":true,"strict":true,"stripInternal":true,"target":9},"fileIdsList":[[91,92,93,97,98,99,100,101,102,103,104],[106,107],[109,110],[112,113,114],[105,108,111,115,116,120,128],[96],[101],[100],[95],[109],[96,107],[112],[94,95,96,106],[94,95],[121],[95,121],[121,124],[95,96,106,121],[121,126],[94,95,96],[117,118,119],[121,122,123,124,125,126,127],[91,92,93,94,95,96,97,98,99,100,101,102,103,104,106,107,109,110,117,118,119,121,122,123,124,125,126,127],[94,95,96,97,98,99,106,107,112,113,114,119],[132],[66],[58,59],[58],[60,61,62,63,64,65],[61,64],[67,79],[81,82],[81],[81,82,83,84,85],[83,84,85,86,88,89],[84,85,87,88],[71],[76],[71,75],[70],[68,69,70,71,72,73,74,75,76,77,78],[81,82,84,85],[84,88]],"referencedMap":[[105,1],[108,2],[111,3],[115,4],[129,5],[97,6],[98,6],[99,6],[102,7],[103,8],[104,7],[106,9],[110,10],[109,11],[113,12],[114,12],[112,13],[96,14],[122,15],[123,16],[125,17],[124,18],[127,19],[126,16],[116,20],[120,21],[128,22],[130,23],[131,24],[133,25],[67,26],[60,27],[62,28],[66,29],[65,30],[80,31],[83,32],[85,33],[87,34],[90,35],[89,36],[72,37],[73,37],[74,37],[77,38],[76,39],[71,40],[79,41]],"exportedModulesMap":[[105,1],[108,2],[111,3],[115,4],[129,5],[97,6],[98,6],[99,6],[102,7],[103,8],[104,7],[106,9],[110,10],[109,11],[113,12],[114,12],[112,13],[96,14],[122,15],[123,16],[125,17],[124,18],[127,19],[126,16],[116,20],[120,21],[128,22],[130,23],[131,24],[133,25],[67,26],[60,27],[62,28],[66,29],[65,30],[83,32],[85,33],[87,42],[90,35],[89,43],[72,37],[73,37],[74,37],[77,38],[76,39],[71,40],[79,41]],"semanticDiagnosticsPerFile":[105,108,111,115,129,91,92,93,97,98,99,100,101,102,103,104,106,107,110,109,113,114,112,94,95,96,117,118,119,122,123,121,125,124,127,126,116,120,128,130,131,133,132,56,57,11,10,2,12,13,14,15,16,17,18,19,3,20,4,21,25,22,23,24,26,27,28,5,29,30,31,32,6,36,33,34,35,37,7,38,43,44,39,40,41,42,8,48,45,46,47,49,9,50,51,52,55,53,54,1,67,60,58,59,61,62,66,63,65,64,80,83,81,82,84,85,87,90,86,89,88,68,69,72,73,74,75,77,76,70,71,78,79],"latestChangedDtsFile":"./lib/openapi-client/index.d.ts"},"version":"5.4.5"}
\ No newline at end of file
diff --git a/typescript/packages/usuba-ui/index.html b/typescript/packages/usuba-ui/index.html
index 1f042f847..9bf3f7fb7 100644
--- a/typescript/packages/usuba-ui/index.html
+++ b/typescript/packages/usuba-ui/index.html
@@ -27,6 +27,8 @@
+ special btn
+
-
-
-
-
- Vite + Lit
-
-
-
-