@simoko/tw-zip
Version:
台灣縣市、行政區、郵遞區號(3碼/6碼)查詢工具,支援 React/Vue/Svelte/SolidJS/Angular
3 lines • 5.74 kB
JavaScript
'use strict';var core=require('@angular/core');var K=Object.create;var P=Object.defineProperty;var Q=Object.getOwnPropertyDescriptor;var F=(i,e)=>(e=Symbol[i])?e:Symbol.for("Symbol."+i),x=i=>{throw TypeError(i)};var W=(i,e,t)=>e in i?P(i,e,{enumerable:true,configurable:true,writable:true,value:t}):i[e]=t;var Z=(i,e)=>P(i,"name",{value:e,configurable:true});var _=i=>[,,,K(null)],B=["class","method","getter","setter","accessor","field","value","get","set"],A=i=>i!==void 0&&typeof i!="function"?x("Function expected"):i,X=(i,e,t,n,s)=>({kind:B[i],name:e,metadata:n,addInitializer:r=>t._?x("Already initialized"):s.push(A(r||null))}),ee=(i,e)=>W(e,F("metadata"),i[3]),H=(i,e,t,n)=>{for(var s=0,r=i[e>>1],o=r&&r.length;s<o;s++)r[s].call(t);return n},S=(i,e,t,n,s,r)=>{var d,m,C,a=e&7,f=false,y=0,D=i[y]||(i[y]=[]),c=a&&((s=s.prototype),a<5&&(a>3||!f)&&Q(s,t));Z(s,t);for(var R=n.length-1;R>=0;R--)C=X(a,t,m={},i[3],D),d=(0, n[R])(s,C),m._=1,A(d)&&(s=d);return ee(i,s),c&&P(s,t,c),f?a^4?r:c:s};var V="https://cdn.jsdelivr.net/npm/@simoko/tw-zip/data/zip6",O=new Map,z=null,w=null;async function Y(i={}){if(z)return z;if(w)return w;let e=i.baseUrl||V;return w=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=>(z=t,t)).catch(t=>{throw w=null,t}),w}async function v(i,e={}){let t=i.trim();if(!t)throw new Error("City name cannot be empty");let n=O.get(t);if(n)return n;let s=e.baseUrl||V,r=await fetch(`${s}/${encodeURIComponent(t)}.json`);if(!r.ok)throw new Error(`Failed to load city data for ${t}: HTTP ${r.status}`);let o=await r.json();return O.set(t,o),o}async function j(i,e={}){await Promise.all(i.map(t=>v(t,e)));}function E(i){return O.has(i)}function N(){O.clear(),z=null,w=null;}var G=new Map;function ne(i){if(!i)return [];let e=G.get(i);if(e)return e;let t=i.split("|").map(n=>{let s=n.split(",");return [s[0],...s.slice(1).map(Number)]});return G.set(i,t),t}function re(i,e,t,n,s,r,o,d){if(!o)return;let m=o[e];if(!m)return;let C=m[t];if(!C)return;let p=d[i]?.[e];if(!p)return;let a=ne(C);for(let b of a){let[f,y=0,g=0,U=0,D=0,c=0,R=0,u=0,h=0,ae=0]=b;if(g>0||U>0){if(!s)continue;if(g>0&&U>0){if(s<g||s>U)continue}else if(g>0){if(h===9999||h===9998){if(s<g)continue}else if(s!==g)continue}}if(D>0||c>0){if(!r)continue;if(D>0&&c>0){if(r<D||r>c)continue}else if(D>0&&r!==D)continue}if(n!==void 0&&(R>0||h>0)){if(y===1&&n%2===0||y===2&&n%2===1)continue;let T=h===9999||h===9998?Number.POSITIVE_INFINITY:h;if(R>0&&n<R||T!==Number.POSITIVE_INFINITY&&n>T)continue}else if(y!==0&&n!==void 0&&(y===1&&n%2===0||y===2&&n%2===1))continue;return {zipcode:p+f,zip3:p,city:i,area:e,road:t}}if(a.length>0){let[b]=a[0];return {zipcode:p+b,zip3:p,city:i,area:e,road:t}}}var J,L;J=[core.Injectable({providedIn:"root"})];exports.TwZip6LazyService=class I{constructor(){this.baseUrl=core.signal(void 0);this.zip3Map=core.signal({});this.cityData=core.signal(void 0);this.requestId=0;this.loading=core.signal(true);this.cities=core.signal([]);this.city=core.signal("");this.area=core.signal("");this.road=core.signal("");this.number=core.signal(void 0);this.lane=core.signal(void 0);this.alley=core.signal(void 0);this.areas=core.signal([]);this.roads=core.signal([]);this.searchResults=core.signal([]);this.result=core.computed(()=>{let e=this.city(),t=this.area(),n=this.road(),s=this.cityData();if(!(!e||!t||!n||!s))return re(e,t,n,this.number(),this.lane(),this.alley(),s,this.zip3Map())});this.zipCode=core.computed(()=>this.result()?.zipcode??"");this.zip3=core.computed(()=>this.result()?.zip3??"");}async init(e={}){this.baseUrl.set(e.baseUrl),this.loading.set(true);try{let t=await Y({baseUrl:e.baseUrl});this.cities.set(t.cities),this.zip3Map.set(t.zip3);let n=t.cities[0]??"";if(this.city.set(n),e.preload&&e.preload.length>0&&await j(e.preload,{baseUrl:e.baseUrl}),n){let s=await v(n,{baseUrl:e.baseUrl});this.cityData.set(s);let r=Object.keys(s);if(this.areas.set(r),this.area.set(r[0]??""),r[0]){let o=s[r[0]];if(o){let d=Object.keys(o);this.roads.set(d),this.road.set(d[0]??"");}}}}finally{this.loading.set(false);}}async setCity(e){let t=++this.requestId;this.city.set(e),this.loading.set(true);try{let n=await v(e,{baseUrl:this.baseUrl()});if(this.requestId!==t)return;this.cityData.set(n);let s=Object.keys(n);if(this.areas.set(s),this.area.set(s[0]??""),this.roads.set([]),this.road.set(""),this.number.set(void 0),this.lane.set(void 0),this.alley.set(void 0),s[0]){let r=n[s[0]];if(r){let o=Object.keys(r);this.roads.set(o),this.road.set(o[0]??"");}}}catch(n){this.requestId===t&&console.error(`Failed to load city data for ${e}:`,n);}finally{this.requestId===t&&this.loading.set(false);}}setArea(e){this.area.set(e);let t=this.cityData();if(t){let n=t[e];if(n){let s=Object.keys(n);this.roads.set(s),this.road.set(s[0]??"");}else this.roads.set([]),this.road.set("");}this.number.set(void 0),this.lane.set(void 0),this.alley.set(void 0);}setRoad(e){this.road.set(e),this.number.set(void 0),this.lane.set(void 0),this.alley.set(void 0);}setNumber(e){this.number.set(e);}setLane(e){this.lane.set(e);}setAlley(e){this.alley.set(e);}searchRoads(e){if(!e.trim()){this.searchResults.set([]);return}let t=[],n=e.trim(),s=this.cityData(),r=this.city();if(s)for(let[o,d]of Object.entries(s))for(let m of Object.keys(d))m.includes(n)&&t.push({city:r,area:o,road:m});this.searchResults.set(t);}async preloadCities(e){await j(e,{baseUrl:this.baseUrl()});}isCityCached(e){return E(e)}clearCache(){N();}};L=_(),exports.TwZip6LazyService=S(L,0,"TwZip6LazyService",J,exports.TwZip6LazyService),H(L,1,exports.TwZip6LazyService);
exports.clearCache=N;exports.isCityCached=E;exports.preloadCities=j;//# sourceMappingURL=lazy.cjs.map
//# sourceMappingURL=lazy.cjs.map