PageSourceSearch

https://coffeelab.com.tw/_next/static/chunks/app/(store)/layout-aa5e6a502f34e04f.js

js coffeelab.com.tw collected 2026-10-07 19:56:33 UTC 2,118 bytes, 1 lines download raw bytes

1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3122],{4004:(e,t,a)=>{"use strict";a.d(t,{CartProvider:()=>u,_:()=>c});var n=a(5155),r=a(2115);let i=(0,r.createContext)(null),s={cartSessionId:"",discountTwd:0,itemCount:0,lines:[],shippingFeeTwd:0,subtotalTwd:0,totalTwd:0};async function l(e){return await e.json().catch(()=>({}))}async function o(e,t){let a=await fetch("/api/cart",{body:t?JSON.stringify(t):void 0,headers:t?{"content-type":"application/json"}:void 0,credentials:"same-origin",method:e||"GET"}),n=await l(a);if(!a.ok||!n.snapshot)throw Error(n.error||"Cart API error");return n.snapshot}function u({children:e}){let t,[a,l]=(0,r.useState)(s),[c,d]=(0,r.useState)({}),[f,h]=(0,r.useState)(!0),[w,C]=(0,r.useState)(!1),y=(0,r.useRef)((t=new Set,async function(e,a){if(!t.has(e)){t.add(e);try{return await a()}finally{t.delete(e)}}})).current;(0,r.useEffect)(()=>{let e=!0;return o().then(t=>{e&&l(t)}).catch(t=>{console.error("Failed to load cart",t),e&&l(s)}).finally(()=>{e&&h(!1)}),()=>{e=!1}},[]);let _=(0,r.useCallback)(async function(e,t){let a=t&&"object"==typeof t&&"variantId"in t?String(t.variantId||"__global__"):"__global__";await y(a,async()=>{d(e=>({...e,[a]:!0}));try{let a=await o(e,t);l(a)}finally{d(e=>{let t={...e};return delete t[a],t})}})},[y]),b=(0,r.useCallback)(()=>_("DELETE"),[_]),E=(0,r.useCallback)(e=>_("DELETE",{variantId:e}),[_]),p=(0,r.useCallback)((e,t)=>_("PATCH",{variantId:e,quantity:t}),[_]),k=(0,r.useCallback)(async({quantity:e,variantId:t,purchaseMode:a,subscriptionIntervalWeeks:n})=>{await _("POST",{quantity:e,variantId:t,purchaseMode:a,subscriptionIntervalWeeks:n}),C(!0)},[_]),v=(0,r.useMemo)(()=>({addItem:k,clear:b,isOpen:w,lines:a.lines,loadingActions:c,loading:f,itemCount:a.itemCount,ready:!f,removeItem:E,setItemQuantity:p,setIsOpen:C,snapshot:a}),[k,b,w,f,c,E,p,a]);return(0,n.jsx)(i.Provider,{value:v,children:e})}function c(){let e=(0,r.useContext)(i);if(!e)throw Error("useCart must be used within CartProvider");return e}},5308:(e,t,a)=>{Promise.resolve().then(a.bind(a,4004))}},e=>{e.O(0,[8441,3794,7358],()=>e(e.s=5308)),_N_E=e.O()}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.