UNPKG

@simoko/tw-zip

Version:

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

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