@aiamitsuri/interoperability-ffi-wasm
v0.1.15
Published
FFI layer to fetch and filter interoperability data across Node.js and Web environments
Readme
@aiamitsuri/interoperability-ffi-wasm
FFI layer to fetch and filter interoperability data across Node.js and Web environments
📦 Usages
💻 Node.js (Server-side)
const { fetch_from_js } = require("@aiamitsuri/interoperability-ffi-wasm");
async function deepSearch() {
console.log("🚀 Starting Deep Wasm Test...");
const params = {
// language: "node",
// integration: "done",
// crates: "wasm",
// developmentkit: "app",
// page: "1",
// ids: null,
// ids: [1].join(","),
ids: [1, 3, 4].join(",")
};
try {
const result = await fetch_from_js(params);
const totalItems = result?.pagination?.total_items ?? 0;
if (totalItems > 0) {
console.log(`✅ Success! Found ${totalItems} items.`);
console.dir(result, { depth: null });
} else {
console.warn("⚠️ No items found matching those specific criteria.");
console.log("Full Response:", result);
}
} catch (err) {
console.error("❌ Wasm Execution Error:", err.message);
}
}
deepSearch();
🌐 Web (React, Vue, Svelte, Astro)
import React, { useEffect, useState, useCallback } from 'react';
import * as wasm from "@aiamitsuri/interoperability-ffi-wasm";
function App() {
const [results, setResults] = useState(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
const loadData = useCallback(async () => {
setLoading(true);
try {
await wasm.default();
const params = {
language: "node",
integration: "done",
crates: "wasm",
developmentkit: "app",
page: "1",
ids: null
};
const data = await wasm.fetch_from_js(params);
console.log("Data received from Rust:", data);
setResults(data);
} catch (err) {
console.error("Wasm Error:", err);
setError(err.toString());
} finally {
setLoading(false);
}
}, []);
useEffect(() => {
loadData();
}, [loadData]);
if (loading && !results) return <p>🚀 Initializing Rust Wasm...</p>;
if (error) return <p style={{color: 'red'}}>❌ Error: {error}</p>;
return (
<div style={{ padding: '20px', fontFamily: 'sans-serif' }}>
<h1>🚩 Interoperability Search</h1>
<button
onClick={loadData}
disabled={loading}
style={{ marginBottom: '20px', padding: '8px 16px', cursor: 'pointer' }}>
{loading ? 'Refreshing...' : '🔄 Refresh Data'}
</button>
{results ? (
<div>
<h3>Found {results.pagination?.total_items || 0} Items</h3>
<pre style={{ background: '#f4f4f4', padding: '10px', borderRadius: '8px', overflow: 'auto' }}>
{JSON.stringify(results, null, 2)}
</pre>
</div>
) : (
<p>No results found.</p>
)}
</div>
);
}
export default App;