@simoko/tw-zip
Version:
台灣縣市、行政區、郵遞區號(3碼/6碼)查詢工具,支援 React/Vue/Svelte/SolidJS/Angular
1 lines • 23.3 kB
Source Map (JSON)
{"version":3,"sources":["../../src/zip6/loader.ts","../../src/svelte/lazy.ts"],"names":["DEFAULT_BASE_URL","cityDataCache","citiesData","citiesDataPromise","loadCitiesData","options","baseUrl","res","data","error","loadCityData","city","trimmedCity","cached","response","preloadCities","cities","isCityCached","clearCache","parsedRulesCache","parseRules","rulesStr","parsed","rule","parts","calculateZipCode","area","road","number","lane","alley","cityData","zip3Map","areaData","zip3","rules","suffix","even","rLane","rLane1","rAlley","rAlley1","noBgn","_noBgn1","noEnd","maxNo","createTwZip6","preload","loading","writable","zip3MapStore","areas","roads","searchResults","requestId","getValue","store","value","v","init","firstCity","firstCityData","newAreas","areaDataObj","newRoads","setCity","currentRequestId","newCityData","setArea","currentCityData","setRoad","setNumber","setLane","setAlley","searchRoads","keyword","results","trimmed","currentCity","a","r","result","derived","$city","$area","$road","$number","$lane","$alley","$cityData","$zip3Map","zipCode","$r","citiesToPreload","lazy_default"],"mappings":"wGAcA,IAAMA,CAAAA,CAAmB,uDAAA,CAGnBC,CAAAA,CAAgB,IAAI,GAAA,CACtBC,CAAAA,CAAgC,IAAA,CAChCC,EAAgD,IAAA,CASpD,eAAsBC,CAAAA,CAAeC,CAAAA,CAAyB,EAAC,CAAwB,CACrF,GAAIH,EACF,OAAOA,CAAAA,CAGT,GAAIC,CAAAA,CACF,OAAOA,CAAAA,CAGT,IAAMG,CAAAA,CAAUD,CAAAA,CAAQ,SAAWL,CAAAA,CAEnC,OAAAG,CAAAA,CAAoB,KAAA,CAAM,CAAA,EAAGG,CAAO,CAAA,YAAA,CAAc,CAAA,CAC/C,KAAMC,CAAAA,EAAQ,CACb,GAAI,CAACA,CAAAA,CAAI,EAAA,CACP,MAAM,IAAI,MAAM,CAAA,iCAAA,EAAoCA,CAAAA,CAAI,MAAM,CAAA,CAAE,CAAA,CAElE,OAAOA,CAAAA,CAAI,IAAA,EACb,CAAC,CAAA,CACA,IAAA,CAAMC,CAAAA,GACLN,EAAaM,CAAAA,CACNA,CAAAA,CACR,CAAA,CACA,KAAA,CAAOC,GAAU,CAEhB,MAAAN,CAAAA,CAAoB,IAAA,CACdM,CACR,CAAC,CAAA,CAEIN,CACT,CAKA,eAAsBO,CAAAA,CAAaC,CAAAA,CAAcN,CAAAA,CAAyB,EAAC,CAA0B,CACnG,IAAMO,EAAcD,CAAAA,CAAK,IAAA,EAAK,CAC9B,GAAI,CAACC,CAAAA,CACH,MAAM,IAAI,MAAM,2BAA2B,CAAA,CAG7C,IAAMC,CAAAA,CAASZ,EAAc,GAAA,CAAIW,CAAW,CAAA,CAC5C,GAAIC,EACF,OAAOA,CAAAA,CAGT,IAAMP,CAAAA,CAAUD,CAAAA,CAAQ,OAAA,EAAWL,CAAAA,CAE7Bc,CAAAA,CAAW,MAAM,KAAA,CAAM,CAAA,EAAGR,CAAO,CAAA,CAAA,EAAI,kBAAA,CAAmBM,CAAW,CAAC,CAAA,KAAA,CAAO,EACjF,GAAI,CAACE,CAAAA,CAAS,EAAA,CACZ,MAAM,IAAI,KAAA,CAAM,CAAA,6BAAA,EAAgCF,CAAW,CAAA,OAAA,EAAUE,CAAAA,CAAS,MAAM,CAAA,CAAE,EAGxF,IAAMN,CAAAA,CAAO,MAAMM,CAAAA,CAAS,MAAK,CAEjC,OAAAb,CAAAA,CAAc,GAAA,CAAIW,CAAAA,CAAaJ,CAAI,CAAA,CAC5BA,CACT,CAKA,eAAsBO,CAAAA,CAAcC,CAAAA,CAAkBX,CAAAA,CAAyB,EAAC,CAAkB,CAChG,MAAM,QAAQ,GAAA,CAAIW,CAAAA,CAAO,GAAA,CAAIL,CAAAA,EAAQD,CAAAA,CAAaC,CAAAA,CAAMN,CAAO,CAAC,CAAC,EACnE,CAYO,SAASY,CAAAA,CAAaN,EAAuB,CAClD,OAAOV,CAAAA,CAAc,GAAA,CAAIU,CAAI,CAC/B,CAKO,SAASO,CAAAA,EAAmB,CACjCjB,CAAAA,CAAc,KAAA,EAAM,CACpBC,EAAa,IAAA,CACbC,CAAAA,CAAoB,KACtB,CCpFA,IAAMgB,CAAAA,CAAmB,IAAI,GAAA,CAE7B,SAASC,CAAAA,CAAWC,CAAAA,CAAgD,CAClE,GAAI,CAACA,CAAAA,CAAU,OAAO,GAEtB,IAAMR,CAAAA,CAASM,CAAAA,CAAiB,GAAA,CAAIE,CAAQ,CAAA,CAC5C,GAAIR,CAAAA,CAAQ,OAAOA,EAEnB,IAAMS,CAAAA,CAASD,CAAAA,CAAS,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAKE,CAAAA,EAAS,CAC/C,IAAMC,CAAAA,CAAQD,CAAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAC5B,OAAO,CAACC,EAAM,CAAC,CAAA,CAAG,GAAGA,CAAAA,CAAM,KAAA,CAAM,CAAC,CAAA,CAAE,GAAA,CAAI,MAAM,CAAC,CACjD,CAAC,CAAA,CAED,OAAAL,CAAAA,CAAiB,GAAA,CAAIE,CAAAA,CAAUC,CAAM,EAC9BA,CACT,CAEA,SAASG,CAAAA,CACPd,CAAAA,CACAe,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,EACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACwB,CACxB,GAAI,CAACD,CAAAA,CAAU,OAEf,IAAME,EAAWF,CAAAA,CAASL,CAAI,CAAA,CAC9B,GAAI,CAACO,CAAAA,CAAU,OAEf,IAAMZ,EAAWY,CAAAA,CAASN,CAAI,CAAA,CAC9B,GAAI,CAACN,CAAAA,CAAU,OAEf,IAAMa,CAAAA,CAAOF,EAAQrB,CAAI,CAAA,GAAIe,CAAI,CAAA,CACjC,GAAI,CAACQ,CAAAA,CAAM,OAEX,IAAMC,CAAAA,CAAQf,CAAAA,CAAWC,CAAQ,CAAA,CAEjC,IAAA,IAAWE,CAAAA,IAAQY,CAAAA,CAAO,CACxB,GAAM,CAACC,CAAAA,CAAQC,CAAAA,CAAO,CAAA,CAAGC,CAAAA,CAAQ,CAAA,CAAGC,CAAAA,CAAS,CAAA,CAAGC,EAAS,CAAA,CAAGC,CAAAA,CAAU,CAAA,CAAGC,CAAAA,CAAQ,EAAGC,CAAAA,CAAU,CAAA,CAAGC,CAAAA,CAAQ,CAAC,EAAIrB,CAAAA,CAE9G,GAAIe,CAAAA,CAAQ,CAAA,EAAKC,CAAAA,CAAS,CAAA,CAAG,CAC3B,GAAI,CAACV,CAAAA,CAAM,SACX,GAAIS,CAAAA,CAAQ,CAAA,EAAKC,CAAAA,CAAS,CAAA,CAAA,CACxB,GAAIV,EAAOS,CAAAA,EAAST,CAAAA,CAAOU,CAAAA,CAAQ,QAAA,CAAA,KAAA,GAE5BD,CAAAA,CAAQ,CAAA,CAAA,CACf,GAAIM,CAAAA,GAAU,MAAQA,CAAAA,GAAU,IAAA,CAAA,CAC9B,GAAIf,CAAAA,CAAOS,EAAO,QAAA,CAAA,KAAA,GAEXT,CAAAA,GAASS,CAAAA,CAChB,QAAA,CAGN,CAEA,GAAIE,CAAAA,CAAS,CAAA,EAAKC,CAAAA,CAAU,CAAA,CAAG,CAC7B,GAAI,CAACX,EAAO,SACZ,GAAIU,CAAAA,CAAS,CAAA,EAAKC,CAAAA,CAAU,CAAA,CAAA,CAC1B,GAAIX,CAAAA,CAAQU,GAAUV,CAAAA,CAAQW,CAAAA,CAAS,QAAA,CAAA,KAAA,GAEhCD,CAAAA,CAAS,CAAA,EAAKV,CAAAA,GAAUU,CAAAA,CAC/B,QAEJ,CAEA,GAAIZ,CAAAA,GAAW,MAAA,GAAcc,CAAAA,CAAQ,GAAKE,CAAAA,CAAQ,CAAA,CAAA,CAAI,CAEpD,GADIP,IAAS,CAAA,EAAKT,CAAAA,CAAS,CAAA,GAAM,CAAA,EAC7BS,CAAAA,GAAS,CAAA,EAAKT,CAAAA,CAAS,CAAA,GAAM,EAAG,SAEpC,IAAMiB,CAAAA,CAAQD,CAAAA,GAAU,MAAQA,CAAAA,GAAU,IAAA,CAAO,MAAA,CAAO,iBAAA,CAAoBA,EAE5E,GADIF,CAAAA,CAAQ,CAAA,EAAKd,CAAAA,CAASc,CAAAA,EACtBG,CAAAA,GAAU,MAAA,CAAO,iBAAA,EAAqBjB,EAASiB,CAAAA,CAAO,QAC5D,CAAA,KAAA,GACSR,CAAAA,GAAS,GAAKT,CAAAA,GAAW,MAAA,GAC5BS,CAAAA,GAAS,CAAA,EAAKT,EAAS,CAAA,GAAM,CAAA,EAC7BS,CAAAA,GAAS,CAAA,EAAKT,CAAAA,CAAS,CAAA,GAAM,CAAA,CAAA,CAAG,SAGtC,OAAO,CAAE,OAAA,CAASM,CAAAA,CAAOE,CAAAA,CAAQ,IAAA,CAAAF,CAAAA,CAAM,IAAA,CAAAvB,CAAAA,CAAM,KAAAe,CAAAA,CAAM,IAAA,CAAAC,CAAK,CAC1D,CAEA,GAAIQ,CAAAA,CAAM,MAAA,CAAS,EAAG,CACpB,GAAM,CAACC,CAAM,EAAID,CAAAA,CAAM,CAAC,CAAA,CACxB,OAAO,CAAE,OAAA,CAASD,CAAAA,CAAOE,CAAAA,CAAQ,IAAA,CAAAF,CAAAA,CAAM,IAAA,CAAAvB,CAAAA,CAAM,IAAA,CAAAe,EAAM,IAAA,CAAAC,CAAK,CAC1D,CAGF,CAEO,SAASmB,CAAAA,CAAazC,CAAAA,CAA+B,EAAC,CAAG,CAC9D,GAAM,CAAE,OAAA,CAAAC,CAAAA,CAAS,OAAA,CAAAyC,CAAQ,EAAI1C,CAAAA,CAEvB2C,CAAAA,CAAUC,cAAAA,CAAS,IAAI,EACvBjC,CAAAA,CAASiC,cAAAA,CAAmB,EAAE,EAC9BC,CAAAA,CAAeD,cAAAA,CAAkB,EAAE,CAAA,CAEnCtC,CAAAA,CAAOsC,cAAAA,CAAS,EAAE,EAClBvB,CAAAA,CAAOuB,cAAAA,CAAS,EAAE,CAAA,CAClBtB,CAAAA,CAAOsB,cAAAA,CAAS,EAAE,CAAA,CAClBrB,EAASqB,cAAAA,CAA6B,MAAS,CAAA,CAC/CpB,CAAAA,CAAOoB,cAAAA,CAA6B,MAAS,CAAA,CAC7CnB,CAAAA,CAAQmB,eAA6B,MAAS,CAAA,CAE9CE,CAAAA,CAAQF,cAAAA,CAAmB,EAAE,CAAA,CAC7BG,CAAAA,CAAQH,cAAAA,CAAmB,EAAE,CAAA,CAC7BI,CAAAA,CAAgBJ,cAAAA,CAAyB,EAAE,CAAA,CAC3ClB,CAAAA,CAAWkB,eAAmC,MAAS,CAAA,CAGzDK,CAAAA,CAAY,CAAA,CAGhB,SAASC,CAAAA,CAAYC,CAAAA,CAA6D,CAChF,IAAIC,EACJ,OAAAD,CAAAA,CAAM,SAAA,CAAUE,CAAAA,EAAKD,CAAAA,CAAQC,CAAC,CAAA,EAAE,CACzBD,CACT,CAGA,eAAeE,CAAAA,EAAO,CACpBX,EAAQ,GAAA,CAAI,IAAI,CAAA,CAChB,IAAMxC,EAAO,MAAMJ,CAAAA,CAAe,CAAE,OAAA,CAAAE,CAAQ,CAAC,CAAA,CAE7CU,CAAAA,CAAO,IAAIR,CAAAA,CAAK,MAAM,CAAA,CACtB0C,CAAAA,CAAa,GAAA,CAAI1C,CAAAA,CAAK,IAAI,CAAA,CAE1B,IAAMoD,CAAAA,CAAYpD,CAAAA,CAAK,MAAA,CAAO,CAAC,CAAA,EAAK,EAAA,CAOpC,GANAG,CAAAA,CAAK,IAAIiD,CAAS,CAAA,CAEdb,CAAAA,EAAWA,CAAAA,CAAQ,OAAS,CAAA,EAC9B,MAAMhC,CAAAA,CAAcgC,CAAAA,CAAS,CAAE,OAAA,CAAAzC,CAAQ,CAAC,CAAA,CAGtCsD,CAAAA,CAAW,CACb,IAAMC,CAAAA,CAAgB,MAAMnD,CAAAA,CAAakD,CAAAA,CAAW,CAAE,OAAA,CAAAtD,CAAQ,CAAC,CAAA,CAC/DyB,CAAAA,CAAS,IAAI8B,CAAa,CAAA,CAC1B,IAAMC,CAAAA,CAAW,MAAA,CAAO,IAAA,CAAKD,CAAa,CAAA,CAI1C,GAHAV,CAAAA,CAAM,GAAA,CAAIW,CAAQ,CAAA,CAClBpC,EAAK,GAAA,CAAIoC,CAAAA,CAAS,CAAC,CAAA,EAAK,EAAE,CAAA,CAEtBA,CAAAA,CAAS,CAAC,CAAA,CAAG,CACf,IAAMC,CAAAA,CAAcF,CAAAA,CAAcC,EAAS,CAAC,CAAC,CAAA,CAC7C,GAAIC,CAAAA,CAAa,CACf,IAAMC,CAAAA,CAAW,OAAO,IAAA,CAAKD,CAAW,CAAA,CACxCX,CAAAA,CAAM,GAAA,CAAIY,CAAQ,CAAA,CAClBrC,CAAAA,CAAK,IAAIqC,CAAAA,CAAS,CAAC,CAAA,EAAK,EAAE,EAC5B,CACF,CACF,CAEAhB,CAAAA,CAAQ,IAAI,KAAK,EACnB,CAGAW,CAAAA,EAAK,CAGL,eAAeM,CAAAA,CAAQR,CAAAA,CAAe,CACpC,IAAMS,CAAAA,CAAmB,EAAEZ,CAAAA,CAC3B3C,EAAK,GAAA,CAAI8C,CAAK,CAAA,CACdT,CAAAA,CAAQ,IAAI,IAAI,CAAA,CAEhB,GAAI,CACF,IAAMmB,CAAAA,CAAc,MAAMzD,CAAAA,CAAa+C,EAAO,CAAE,OAAA,CAAAnD,CAAQ,CAAC,EAEzD,GAAIgD,CAAAA,GAAcY,CAAAA,CAAkB,OAEpCnC,EAAS,GAAA,CAAIoC,CAAW,CAAA,CACxB,IAAML,CAAAA,CAAW,MAAA,CAAO,IAAA,CAAKK,CAAW,EASxC,GARAhB,CAAAA,CAAM,GAAA,CAAIW,CAAQ,CAAA,CAClBpC,CAAAA,CAAK,GAAA,CAAIoC,CAAAA,CAAS,CAAC,CAAA,EAAK,EAAE,CAAA,CAC1BV,CAAAA,CAAM,GAAA,CAAI,EAAE,CAAA,CACZzB,EAAK,GAAA,CAAI,EAAE,CAAA,CACXC,CAAAA,CAAO,IAAI,KAAA,CAAS,CAAA,CACpBC,CAAAA,CAAK,GAAA,CAAI,MAAS,CAAA,CAClBC,CAAAA,CAAM,GAAA,CAAI,KAAA,CAAS,CAAA,CAEfgC,CAAAA,CAAS,CAAC,CAAA,CAAG,CACf,IAAMC,CAAAA,CAAcI,CAAAA,CAAYL,CAAAA,CAAS,CAAC,CAAC,CAAA,CAC3C,GAAIC,EAAa,CACf,IAAMC,CAAAA,CAAW,MAAA,CAAO,IAAA,CAAKD,CAAW,CAAA,CACxCX,CAAAA,CAAM,IAAIY,CAAQ,CAAA,CAClBrC,CAAAA,CAAK,GAAA,CAAIqC,EAAS,CAAC,CAAA,EAAK,EAAE,EAC5B,CACF,CACF,CAAA,MACOvD,CAAAA,CAAO,CACR6C,CAAAA,GAAcY,CAAAA,EAChB,OAAA,CAAQ,KAAA,CAAM,gCAAgCT,CAAK,CAAA,CAAA,CAAA,CAAKhD,CAAK,EAEjE,CAAA,OACA,CACM6C,CAAAA,GAAcY,CAAAA,EAChBlB,EAAQ,GAAA,CAAI,KAAK,EAErB,CACF,CAGA,SAASoB,CAAAA,CAAQX,CAAAA,CAAe,CAC9B/B,CAAAA,CAAK,GAAA,CAAI+B,CAAK,CAAA,CACd,IAAMY,CAAAA,CAAkBd,CAAAA,CAASxB,CAAQ,CAAA,CACzC,GAAIsC,CAAAA,CAAiB,CACnB,IAAMN,CAAAA,CAAcM,CAAAA,CAAgBZ,CAAK,CAAA,CACzC,GAAIM,EAAa,CACf,IAAMC,CAAAA,CAAW,MAAA,CAAO,KAAKD,CAAW,CAAA,CACxCX,CAAAA,CAAM,GAAA,CAAIY,CAAQ,CAAA,CAClBrC,CAAAA,CAAK,GAAA,CAAIqC,CAAAA,CAAS,CAAC,CAAA,EAAK,EAAE,EAC5B,MAEEZ,CAAAA,CAAM,GAAA,CAAI,EAAE,EACZzB,CAAAA,CAAK,GAAA,CAAI,EAAE,EAEf,CACAC,CAAAA,CAAO,GAAA,CAAI,MAAS,CAAA,CACpBC,CAAAA,CAAK,GAAA,CAAI,MAAS,CAAA,CAClBC,EAAM,GAAA,CAAI,MAAS,EACrB,CAGA,SAASwC,CAAAA,CAAQb,CAAAA,CAAe,CAC9B9B,EAAK,GAAA,CAAI8B,CAAK,CAAA,CACd7B,CAAAA,CAAO,GAAA,CAAI,MAAS,CAAA,CACpBC,CAAAA,CAAK,IAAI,MAAS,CAAA,CAClBC,CAAAA,CAAM,GAAA,CAAI,MAAS,EACrB,CAEA,SAASyC,CAAAA,CAAUd,EAA2B,CAC5C7B,CAAAA,CAAO,GAAA,CAAI6B,CAAK,EAClB,CAEA,SAASe,CAAAA,CAAQf,EAA2B,CAC1C5B,CAAAA,CAAK,GAAA,CAAI4B,CAAK,EAChB,CAEA,SAASgB,CAAAA,CAAShB,EAA2B,CAC3C3B,CAAAA,CAAM,GAAA,CAAI2B,CAAK,EACjB,CAGA,SAASiB,CAAAA,CAAYC,EAAiB,CACpC,GAAI,CAACA,CAAAA,CAAQ,MAAK,CAAG,CACnBtB,CAAAA,CAAc,GAAA,CAAI,EAAE,CAAA,CACpB,MACF,CAEA,IAAMuB,CAAAA,CAA0B,EAAC,CAC3BC,EAAUF,CAAAA,CAAQ,IAAA,EAAK,CACvBG,CAAAA,CAAcvB,CAAAA,CAAS5C,CAAI,CAAA,CAC3B0D,CAAAA,CAAkBd,EAASxB,CAAQ,CAAA,CAEzC,GAAIsC,CAAAA,CACF,IAAA,GAAW,CAACU,CAAAA,CAAGhB,CAAW,IAAK,MAAA,CAAO,OAAA,CAAQM,CAAe,CAAA,CAC3D,QAAWW,CAAAA,IAAK,MAAA,CAAO,IAAA,CAAKjB,CAAW,EACjCiB,CAAAA,CAAE,QAAA,CAASH,CAAO,CAAA,EACpBD,CAAAA,CAAQ,IAAA,CAAK,CAAE,IAAA,CAAME,EAAa,IAAA,CAAMC,CAAAA,CAAG,IAAA,CAAMC,CAAE,CAAC,CAAA,CAM5D3B,CAAAA,CAAc,GAAA,CAAIuB,CAAO,EAC3B,CAGA,IAAMK,CAAAA,CAASC,aAAAA,CACb,CAACvE,CAAAA,CAAMe,CAAAA,CAAMC,CAAAA,CAAMC,EAAQC,CAAAA,CAAMC,CAAAA,CAAOC,CAAAA,CAAUmB,CAAY,EAC9D,CAAC,CAACiC,CAAAA,CAAOC,CAAAA,CAAOC,EAAOC,CAAAA,CAASC,CAAAA,CAAOC,CAAAA,CAAQC,CAAAA,CAAWC,CAAQ,CAAA,GAA8B,CAC9F,GAAI,GAACP,CAAAA,EAAS,CAACC,CAAAA,EAAS,CAACC,CAAAA,EAAS,CAACI,CAAAA,CAAAA,CACnC,OAAOhE,EAAiB0D,CAAAA,CAAOC,CAAAA,CAAOC,CAAAA,CAAOC,CAAAA,CAASC,CAAAA,CAAOC,CAAAA,CAAQC,CAAAA,CAAWC,CAAQ,CAC1F,CACF,CAAA,CAEMC,CAAAA,CAAUT,aAAAA,CAAQD,EAAQW,CAAAA,EAAMA,CAAAA,EAAI,OAAA,EAAW,EAAE,EACjD1D,CAAAA,CAAOgD,aAAAA,CAAQD,CAAAA,CAAQW,CAAAA,EAAMA,CAAAA,EAAI,IAAA,EAAQ,EAAE,CAAA,CAEjD,OAAO,CACL,OAAA,CAAS,CAAE,SAAA,CAAW5C,CAAAA,CAAQ,SAAU,CAAA,CACxC,MAAA,CAAQ,CAAE,SAAA,CAAWhC,CAAAA,CAAO,SAAU,CAAA,CACtC,KAAA,CAAO,CAAE,SAAA,CAAWmC,CAAAA,CAAM,SAAU,CAAA,CACpC,KAAA,CAAO,CAAE,SAAA,CAAWC,EAAM,SAAU,CAAA,CAEpC,IAAA,CAAM,CAAE,UAAWzC,CAAAA,CAAK,SAAU,CAAA,CAClC,IAAA,CAAM,CAAE,SAAA,CAAWe,CAAAA,CAAK,SAAU,EAClC,IAAA,CAAM,CAAE,SAAA,CAAWC,CAAAA,CAAK,SAAU,CAAA,CAClC,MAAA,CAAQ,CAAE,UAAWC,CAAAA,CAAO,SAAU,CAAA,CACtC,IAAA,CAAM,CAAE,SAAA,CAAWC,CAAAA,CAAK,SAAU,EAClC,KAAA,CAAO,CAAE,SAAA,CAAWC,CAAAA,CAAM,SAAU,CAAA,CAEpC,OAAA,CAAAmC,CAAAA,CACA,OAAA,CAAAG,EACA,OAAA,CAAAE,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,OAAA,CAAAC,CAAAA,CACA,QAAA,CAAAC,CAAAA,CAEA,YAAAC,CAAAA,CACA,aAAA,CAAe,CAAE,SAAA,CAAWrB,EAAc,SAAU,CAAA,CAEpD,OAAA,CAAAsC,CAAAA,CACA,KAAAzD,CAAAA,CACA,MAAA,CAAA+C,CAAAA,CAEA,aAAA,CAAgBY,CAAAA,EAA8B9E,CAAAA,CAAc8E,CAAAA,CAAiB,CAAE,QAAAvF,CAAQ,CAAC,CAAA,CACxF,YAAA,CAAAW,EACA,UAAA,CAAAC,CACF,CACF,KAGO4E,EAAAA,CAAQhD","file":"lazy.cjs","sourcesContent":["/**\n * 動態載入 zip6 資料\n */\n\nexport type AreaData = Record<string, string>\nexport type CityAreaData = Record<string, AreaData>\nexport type Zip3Map = Record<string, Record<string, string>>\n\nexport interface CitiesData {\n cities: string[]\n zip3: Zip3Map\n}\n\n// 預設使用 jsDelivr CDN\nconst DEFAULT_BASE_URL = 'https://cdn.jsdelivr.net/npm/@simoko/tw-zip/data/zip6'\n\n// 快取\nconst cityDataCache = new Map<string, CityAreaData>()\nlet citiesData: CitiesData | null = null\nlet citiesDataPromise: Promise<CitiesData> | null = null\n\nexport interface LoaderOptions {\n baseUrl?: string\n}\n\n/**\n * 載入縣市列表和 zip3 對照表\n */\nexport async function loadCitiesData(options: LoaderOptions = {}): Promise<CitiesData> {\n if (citiesData) {\n return citiesData\n }\n\n if (citiesDataPromise) {\n return citiesDataPromise\n }\n\n const baseUrl = options.baseUrl || DEFAULT_BASE_URL\n\n citiesDataPromise = fetch(`${baseUrl}/cities.json`)\n .then((res) => {\n if (!res.ok) {\n throw new Error(`Failed to load cities data: HTTP ${res.status}`)\n }\n return res.json()\n })\n .then((data: CitiesData) => {\n citiesData = data\n return data\n })\n .catch((error) => {\n // 清除 promise 以允許重試\n citiesDataPromise = null\n throw error\n })\n\n return citiesDataPromise\n}\n\n/**\n * 載入指定縣市的資料\n */\nexport async function loadCityData(city: string, options: LoaderOptions = {}): Promise<CityAreaData> {\n const trimmedCity = city.trim()\n if (!trimmedCity) {\n throw new Error('City name cannot be empty')\n }\n\n const cached = cityDataCache.get(trimmedCity)\n if (cached) {\n return cached\n }\n\n const baseUrl = options.baseUrl || DEFAULT_BASE_URL\n\n const response = await fetch(`${baseUrl}/${encodeURIComponent(trimmedCity)}.json`)\n if (!response.ok) {\n throw new Error(`Failed to load city data for ${trimmedCity}: HTTP ${response.status}`)\n }\n\n const data = await response.json() as CityAreaData\n\n cityDataCache.set(trimmedCity, data)\n return data\n}\n\n/**\n * 預載入指定縣市\n */\nexport async function preloadCities(cities: string[], options: LoaderOptions = {}): Promise<void> {\n await Promise.all(cities.map(city => loadCityData(city, options)))\n}\n\n/**\n * 取得已快取的縣市資料(同步)\n */\nexport function getCachedCityData(city: string): CityAreaData | undefined {\n return cityDataCache.get(city)\n}\n\n/**\n * 檢查縣市資料是否已快取\n */\nexport function isCityCached(city: string): boolean {\n return cityDataCache.has(city)\n}\n\n/**\n * 清除快取\n */\nexport function clearCache(): void {\n cityDataCache.clear()\n citiesData = null\n citiesDataPromise = null\n}\n","import type { CityAreaData, Zip3Map } from '../zip6/loader'\nimport { derived, writable } from 'svelte/store'\nimport {\n clearCache,\n isCityCached,\n loadCitiesData,\n loadCityData,\n preloadCities,\n} from '../zip6/loader'\n\nexport interface SearchResult {\n city: string\n area: string\n road: string\n}\n\nexport interface Zip6Result {\n zipcode: string\n zip3: string\n city: string\n area: string\n road: string\n}\n\nexport interface CreateTwZip6Options {\n baseUrl?: string\n preload?: string[]\n}\n\n// 規則解析快取\nconst parsedRulesCache = new Map<string, Array<[string, ...number[]]>>()\n\nfunction parseRules(rulesStr: string): Array<[string, ...number[]]> {\n if (!rulesStr) return []\n\n const cached = parsedRulesCache.get(rulesStr)\n if (cached) return cached\n\n const parsed = rulesStr.split('|').map((rule) => {\n const parts = rule.split(',')\n return [parts[0], ...parts.slice(1).map(Number)] as [string, ...number[]]\n })\n\n parsedRulesCache.set(rulesStr, parsed)\n return parsed\n}\n\nfunction calculateZipCode(\n city: string,\n area: string,\n road: string,\n number: number | undefined,\n lane: number | undefined,\n alley: number | undefined,\n cityData: CityAreaData | undefined,\n zip3Map: Zip3Map,\n): Zip6Result | undefined {\n if (!cityData) return undefined\n\n const areaData = cityData[area]\n if (!areaData) return undefined\n\n const rulesStr = areaData[road]\n if (!rulesStr) return undefined\n\n const zip3 = zip3Map[city]?.[area]\n if (!zip3) return undefined\n\n const rules = parseRules(rulesStr)\n\n for (const rule of rules) {\n const [suffix, even = 0, rLane = 0, rLane1 = 0, rAlley = 0, rAlley1 = 0, noBgn = 0, _noBgn1 = 0, noEnd = 0] = rule\n\n if (rLane > 0 || rLane1 > 0) {\n if (!lane) continue\n if (rLane > 0 && rLane1 > 0) {\n if (lane < rLane || lane > rLane1) continue\n }\n else if (rLane > 0) {\n if (noEnd === 9999 || noEnd === 9998) {\n if (lane < rLane) continue\n }\n else if (lane !== rLane) {\n continue\n }\n }\n }\n\n if (rAlley > 0 || rAlley1 > 0) {\n if (!alley) continue\n if (rAlley > 0 && rAlley1 > 0) {\n if (alley < rAlley || alley > rAlley1) continue\n }\n else if (rAlley > 0 && alley !== rAlley) {\n continue\n }\n }\n\n if (number !== undefined && (noBgn > 0 || noEnd > 0)) {\n if (even === 1 && number % 2 === 0) continue\n if (even === 2 && number % 2 === 1) continue\n\n const maxNo = noEnd === 9999 || noEnd === 9998 ? Number.POSITIVE_INFINITY : noEnd\n if (noBgn > 0 && number < noBgn) continue\n if (maxNo !== Number.POSITIVE_INFINITY && number > maxNo) continue\n }\n else if (even !== 0 && number !== undefined) {\n if (even === 1 && number % 2 === 0) continue\n if (even === 2 && number % 2 === 1) continue\n }\n\n return { zipcode: zip3 + suffix, zip3, city, area, road }\n }\n\n if (rules.length > 0) {\n const [suffix] = rules[0]\n return { zipcode: zip3 + suffix, zip3, city, area, road }\n }\n\n return undefined\n}\n\nexport function createTwZip6(options: CreateTwZip6Options = {}) {\n const { baseUrl, preload } = options\n\n const loading = writable(true)\n const cities = writable<string[]>([])\n const zip3MapStore = writable<Zip3Map>({})\n\n const city = writable('')\n const area = writable('')\n const road = writable('')\n const number = writable<number | undefined>(undefined)\n const lane = writable<number | undefined>(undefined)\n const alley = writable<number | undefined>(undefined)\n\n const areas = writable<string[]>([])\n const roads = writable<string[]>([])\n const searchResults = writable<SearchResult[]>([])\n const cityData = writable<CityAreaData | undefined>(undefined)\n\n // 用於追蹤最新請求\n let requestId = 0\n\n // 輔助函數\n function getValue<T>(store: { subscribe: (fn: (v: T) => void) => () => void }): T {\n let value: T\n store.subscribe(v => value = v)()\n return value!\n }\n\n // 初始化\n async function init() {\n loading.set(true)\n const data = await loadCitiesData({ baseUrl })\n\n cities.set(data.cities)\n zip3MapStore.set(data.zip3)\n\n const firstCity = data.cities[0] ?? ''\n city.set(firstCity)\n\n if (preload && preload.length > 0) {\n await preloadCities(preload, { baseUrl })\n }\n\n if (firstCity) {\n const firstCityData = await loadCityData(firstCity, { baseUrl })\n cityData.set(firstCityData)\n const newAreas = Object.keys(firstCityData)\n areas.set(newAreas)\n area.set(newAreas[0] ?? '')\n\n if (newAreas[0]) {\n const areaDataObj = firstCityData[newAreas[0]]\n if (areaDataObj) {\n const newRoads = Object.keys(areaDataObj)\n roads.set(newRoads)\n road.set(newRoads[0] ?? '')\n }\n }\n }\n\n loading.set(false)\n }\n\n // 啟動初始化\n init()\n\n // 切換縣市\n async function setCity(value: string) {\n const currentRequestId = ++requestId\n city.set(value)\n loading.set(true)\n\n try {\n const newCityData = await loadCityData(value, { baseUrl })\n\n if (requestId !== currentRequestId) return\n\n cityData.set(newCityData)\n const newAreas = Object.keys(newCityData)\n areas.set(newAreas)\n area.set(newAreas[0] ?? '')\n roads.set([])\n road.set('')\n number.set(undefined)\n lane.set(undefined)\n alley.set(undefined)\n\n if (newAreas[0]) {\n const areaDataObj = newCityData[newAreas[0]]\n if (areaDataObj) {\n const newRoads = Object.keys(areaDataObj)\n roads.set(newRoads)\n road.set(newRoads[0] ?? '')\n }\n }\n }\n catch (error) {\n if (requestId === currentRequestId) {\n console.error(`Failed to load city data for ${value}:`, error)\n }\n }\n finally {\n if (requestId === currentRequestId) {\n loading.set(false)\n }\n }\n }\n\n // 切換行政區\n function setArea(value: string) {\n area.set(value)\n const currentCityData = getValue(cityData)\n if (currentCityData) {\n const areaDataObj = currentCityData[value]\n if (areaDataObj) {\n const newRoads = Object.keys(areaDataObj)\n roads.set(newRoads)\n road.set(newRoads[0] ?? '')\n }\n else {\n roads.set([])\n road.set('')\n }\n }\n number.set(undefined)\n lane.set(undefined)\n alley.set(undefined)\n }\n\n // 切換路名\n function setRoad(value: string) {\n road.set(value)\n number.set(undefined)\n lane.set(undefined)\n alley.set(undefined)\n }\n\n function setNumber(value: number | undefined) {\n number.set(value)\n }\n\n function setLane(value: number | undefined) {\n lane.set(value)\n }\n\n function setAlley(value: number | undefined) {\n alley.set(value)\n }\n\n // 路名搜尋\n function searchRoads(keyword: string) {\n if (!keyword.trim()) {\n searchResults.set([])\n return\n }\n\n const results: SearchResult[] = []\n const trimmed = keyword.trim()\n const currentCity = getValue(city)\n const currentCityData = getValue(cityData)\n\n if (currentCityData) {\n for (const [a, areaDataObj] of Object.entries(currentCityData)) {\n for (const r of Object.keys(areaDataObj)) {\n if (r.includes(trimmed)) {\n results.push({ city: currentCity, area: a, road: r })\n }\n }\n }\n }\n\n searchResults.set(results)\n }\n\n // 計算郵遞區號\n const result = derived(\n [city, area, road, number, lane, alley, cityData, zip3MapStore],\n ([$city, $area, $road, $number, $lane, $alley, $cityData, $zip3Map]): Zip6Result | undefined => {\n if (!$city || !$area || !$road || !$cityData) return undefined\n return calculateZipCode($city, $area, $road, $number, $lane, $alley, $cityData, $zip3Map)\n }\n )\n\n const zipCode = derived(result, $r => $r?.zipcode ?? '')\n const zip3 = derived(result, $r => $r?.zip3 ?? '')\n\n return {\n loading: { subscribe: loading.subscribe },\n cities: { subscribe: cities.subscribe },\n areas: { subscribe: areas.subscribe },\n roads: { subscribe: roads.subscribe },\n\n city: { subscribe: city.subscribe },\n area: { subscribe: area.subscribe },\n road: { subscribe: road.subscribe },\n number: { subscribe: number.subscribe },\n lane: { subscribe: lane.subscribe },\n alley: { subscribe: alley.subscribe },\n\n setCity,\n setArea,\n setRoad,\n setNumber,\n setLane,\n setAlley,\n\n searchRoads,\n searchResults: { subscribe: searchResults.subscribe },\n\n zipCode,\n zip3,\n result,\n\n preloadCities: (citiesToPreload: string[]) => preloadCities(citiesToPreload, { baseUrl }),\n isCityCached,\n clearCache,\n }\n}\n\nexport { clearCache, isCityCached } from '../zip6/loader'\nexport default createTwZip6\n"]}