browser-transport.js 1.2 KB

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