UNPKG

@simoko/tw-zip

Version:

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

2 lines 4.01 kB
import {a as a$1,c as c$1,b as b$1,e,f}from'../chunk-JL77HVOV.js';export{f as clearCache,e as isCityCached,c as preloadCities}from'../chunk-JL77HVOV.js';import {a,c,b}from'../chunk-VAKBHZJJ.js';import {Injectable,signal,computed}from'@angular/core';var q=new Map;function E(d){if(!d)return [];let e=q.get(d);if(e)return e;let s=d.split("|").map(t=>{let i=t.split(",");return [i[0],...i.slice(1).map(Number)]});return q.set(d,s),s}function _(d,e,s,t,i,n,a,o){if(!a)return;let f=a[e];if(!f)return;let O=f[s];if(!O)return;let l=o[d]?.[e];if(!l)return;let b=E(O);for(let m of b){let[P,h=0,c=0,C=0,y=0,I=0,D=0,F=0,u=0,B=0]=m;if(c>0||C>0){if(!i)continue;if(c>0&&C>0){if(i<c||i>C)continue}else if(c>0){if(u===9999||u===9998){if(i<c)continue}else if(i!==c)continue}}if(y>0||I>0){if(!n)continue;if(y>0&&I>0){if(n<y||n>I)continue}else if(y>0&&n!==y)continue}if(t!==void 0&&(D>0||u>0)){if(h===1&&t%2===0||h===2&&t%2===1)continue;let w=u===9999||u===9998?Number.POSITIVE_INFINITY:u;if(D>0&&t<D||w!==Number.POSITIVE_INFINITY&&t>w)continue}else if(h!==0&&t!==void 0&&(h===1&&t%2===0||h===2&&t%2===1))continue;return {zipcode:l+P,zip3:l,city:d,area:e,road:s}}if(b.length>0){let[m]=b[0];return {zipcode:l+m,zip3:l,city:d,area:e,road:s}}}var k,A;k=[Injectable({providedIn:"root"})];var p=class{constructor(){this.baseUrl=signal(void 0);this.zip3Map=signal({});this.cityData=signal(void 0);this.requestId=0;this.loading=signal(true);this.cities=signal([]);this.city=signal("");this.area=signal("");this.road=signal("");this.number=signal(void 0);this.lane=signal(void 0);this.alley=signal(void 0);this.areas=signal([]);this.roads=signal([]);this.searchResults=signal([]);this.result=computed(()=>{let e=this.city(),s=this.area(),t=this.road(),i=this.cityData();if(!(!e||!s||!t||!i))return _(e,s,t,this.number(),this.lane(),this.alley(),i,this.zip3Map())});this.zipCode=computed(()=>this.result()?.zipcode??"");this.zip3=computed(()=>this.result()?.zip3??"");}async init(e={}){this.baseUrl.set(e.baseUrl),this.loading.set(true);try{let s=await a$1({baseUrl:e.baseUrl});this.cities.set(s.cities),this.zip3Map.set(s.zip3);let t=s.cities[0]??"";if(this.city.set(t),e.preload&&e.preload.length>0&&await c$1(e.preload,{baseUrl:e.baseUrl}),t){let i=await b$1(t,{baseUrl:e.baseUrl});this.cityData.set(i);let n=Object.keys(i);if(this.areas.set(n),this.area.set(n[0]??""),n[0]){let a=i[n[0]];if(a){let o=Object.keys(a);this.roads.set(o),this.road.set(o[0]??"");}}}}finally{this.loading.set(false);}}async setCity(e){let s=++this.requestId;this.city.set(e),this.loading.set(true);try{let t=await b$1(e,{baseUrl:this.baseUrl()});if(this.requestId!==s)return;this.cityData.set(t);let i=Object.keys(t);if(this.areas.set(i),this.area.set(i[0]??""),this.roads.set([]),this.road.set(""),this.number.set(void 0),this.lane.set(void 0),this.alley.set(void 0),i[0]){let n=t[i[0]];if(n){let a=Object.keys(n);this.roads.set(a),this.road.set(a[0]??"");}}}catch(t){this.requestId===s&&console.error(`Failed to load city data for ${e}:`,t);}finally{this.requestId===s&&this.loading.set(false);}}setArea(e){this.area.set(e);let s=this.cityData();if(s){let t=s[e];if(t){let i=Object.keys(t);this.roads.set(i),this.road.set(i[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 s=[],t=e.trim(),i=this.cityData(),n=this.city();if(i)for(let[a,o]of Object.entries(i))for(let f of Object.keys(o))f.includes(t)&&s.push({city:n,area:a,road:f});this.searchResults.set(s);}async preloadCities(e){await c$1(e,{baseUrl:this.baseUrl()});}isCityCached(e$1){return e(e$1)}clearCache(){f();}};A=a(null),p=c(A,0,"TwZip6LazyService",k,p),b(A,1,p);export{p as TwZip6LazyService};//# sourceMappingURL=lazy.js.map //# sourceMappingURL=lazy.js.map