| 12345678910111213141516171819202122232425262728293031323334 |
- /**
- * wc/browser-transport.js —— 浏览器 I/O 适配器。
- *
- * 组件库(wc)不自己 fetch:网络属于「宿主环境」。
- * 这里提供一个默认 transport 给 Lit 宿主用;React/Vue 宿主可换成自己的实现。
- * 注意:这个文件**才是**碰 fetch 的地方 —— core 里一个字都不许有。
- */
- export function createBrowserTransport({ endpoint = '/api/quote', headers = {} } = {}) {
- return {
- /** @param {{ items: any[], discount?: number }} input */
- async call(input) {
- const res = await fetch(endpoint, {
- method: 'POST',
- headers: { 'Content-Type': 'application/json', ...headers },
- body: JSON.stringify(input),
- });
- if (!res.ok) {
- const err = Object.assign(new Error(`HTTP ${res.status}`), { code: 'E_HTTP', status: res.status });
- throw err;
- }
- return res.json();
- },
- };
- }
- /** 无后端时的本地演示 transport:直接用 core 计算,行为与真实一致。 */
- export function createEchoTransport(quoteFn) {
- return {
- async call(input) {
- await new Promise((r) => setTimeout(r, 120)); // 模拟网络延迟,好观察 loading
- return quoteFn(input.items, { discount: input.discount || 0 });
- },
- };
- }
|