UNPKG

@simoko/tw-zip

Version:

台灣縣市、行政區、郵遞區號(3碼/6碼)查詢工具,支援 React/Vue/Svelte/SolidJS/Angular

3 lines 4.35 kB
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var store=require('svelte/store');var _="https://cdn.jsdelivr.net/npm/@simoko/tw-zip/data/zip6",L=new Map,U=null,j=null;async function B(a={}){if(U)return U;if(j)return j;let n=a.baseUrl||_;return j=fetch(`${n}/cities.json`).then(t=>{if(!t.ok)throw new Error(`Failed to load cities data: HTTP ${t.status}`);return t.json()}).then(t=>(U=t,t)).catch(t=>{throw j=null,t}),j}async function N(a,n={}){let t=a.trim();if(!t)throw new Error("City name cannot be empty");let i=L.get(t);if(i)return i;let c=n.baseUrl||_,p=await fetch(`${c}/${encodeURIComponent(t)}.json`);if(!p.ok)throw new Error(`Failed to load city data for ${t}: HTTP ${p.status}`);let l=await p.json();return L.set(t,l),l}async function E(a,n={}){await Promise.all(a.map(t=>N(t,n)));}function M(a){return L.has(a)}function v(){L.clear(),U=null,j=null;}var V=new Map;function J(a){if(!a)return [];let n=V.get(a);if(n)return n;let t=a.split("|").map(i=>{let c=i.split(",");return [c[0],...c.slice(1).map(Number)]});return V.set(a,t),t}function K(a,n,t,i,c,p,l,A){if(!l)return;let b=l[n];if(!b)return;let C=b[t];if(!C)return;let d=A[a]?.[n];if(!d)return;let g=J(C);for(let O of g){let[w,m=0,f=0,R=0,h=0,T=0,z=0,S=0,x=0]=O;if(f>0||R>0){if(!c)continue;if(f>0&&R>0){if(c<f||c>R)continue}else if(f>0){if(x===9999||x===9998){if(c<f)continue}else if(c!==f)continue}}if(h>0||T>0){if(!p)continue;if(h>0&&T>0){if(p<h||p>T)continue}else if(h>0&&p!==h)continue}if(i!==void 0&&(z>0||x>0)){if(m===1&&i%2===0||m===2&&i%2===1)continue;let I=x===9999||x===9998?Number.POSITIVE_INFINITY:x;if(z>0&&i<z||I!==Number.POSITIVE_INFINITY&&i>I)continue}else if(m!==0&&i!==void 0&&(m===1&&i%2===0||m===2&&i%2===1))continue;return {zipcode:d+w,zip3:d,city:a,area:n,road:t}}if(g.length>0){let[O]=g[0];return {zipcode:d+O,zip3:d,city:a,area:n,road:t}}}function Q(a={}){let{baseUrl:n,preload:t}=a,i=store.writable(true),c=store.writable([]),p=store.writable({}),l=store.writable(""),A=store.writable(""),b=store.writable(""),C=store.writable(void 0),d=store.writable(void 0),g=store.writable(void 0),O=store.writable([]),w=store.writable([]),m=store.writable([]),f=store.writable(void 0),R=0;function h(e){let s;return e.subscribe(r=>s=r)(),s}async function T(){i.set(true);let e=await B({baseUrl:n});c.set(e.cities),p.set(e.zip3);let s=e.cities[0]??"";if(l.set(s),t&&t.length>0&&await E(t,{baseUrl:n}),s){let r=await N(s,{baseUrl:n});f.set(r);let o=Object.keys(r);if(O.set(o),A.set(o[0]??""),o[0]){let y=r[o[0]];if(y){let D=Object.keys(y);w.set(D),b.set(D[0]??"");}}}i.set(false);}T();async function z(e){let s=++R;l.set(e),i.set(true);try{let r=await N(e,{baseUrl:n});if(R!==s)return;f.set(r);let o=Object.keys(r);if(O.set(o),A.set(o[0]??""),w.set([]),b.set(""),C.set(void 0),d.set(void 0),g.set(void 0),o[0]){let y=r[o[0]];if(y){let D=Object.keys(y);w.set(D),b.set(D[0]??"");}}}catch(r){R===s&&console.error(`Failed to load city data for ${e}:`,r);}finally{R===s&&i.set(false);}}function S(e){A.set(e);let s=h(f);if(s){let r=s[e];if(r){let o=Object.keys(r);w.set(o),b.set(o[0]??"");}else w.set([]),b.set("");}C.set(void 0),d.set(void 0),g.set(void 0);}function x(e){b.set(e),C.set(void 0),d.set(void 0),g.set(void 0);}function I(e){C.set(e);}function $(e){d.set(e);}function q(e){g.set(e);}function H(e){if(!e.trim()){m.set([]);return}let s=[],r=e.trim(),o=h(l),y=h(f);if(y)for(let[D,Z]of Object.entries(y))for(let P of Object.keys(Z))P.includes(r)&&s.push({city:o,area:D,road:P});m.set(s);}let k=store.derived([l,A,b,C,d,g,f,p],([e,s,r,o,y,D,Z,P])=>{if(!(!e||!s||!r||!Z))return K(e,s,r,o,y,D,Z,P)}),Y=store.derived(k,e=>e?.zipcode??""),G=store.derived(k,e=>e?.zip3??"");return {loading:{subscribe:i.subscribe},cities:{subscribe:c.subscribe},areas:{subscribe:O.subscribe},roads:{subscribe:w.subscribe},city:{subscribe:l.subscribe},area:{subscribe:A.subscribe},road:{subscribe:b.subscribe},number:{subscribe:C.subscribe},lane:{subscribe:d.subscribe},alley:{subscribe:g.subscribe},setCity:z,setArea:S,setRoad:x,setNumber:I,setLane:$,setAlley:q,searchRoads:H,searchResults:{subscribe:m.subscribe},zipCode:Y,zip3:G,result:k,preloadCities:e=>E(e,{baseUrl:n}),isCityCached:M,clearCache:v}}var te=Q; exports.clearCache=v;exports.createTwZip6=Q;exports.default=te;exports.isCityCached=M;//# sourceMappingURL=lazy.cjs.map //# sourceMappingURL=lazy.cjs.map