@0xd33p/vietnam-divisions 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +94 -61
- package/dist/index.d.ts +17 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -4
- package/dist/index.js.map +1 -1
- package/dist/internal/address.d.ts.map +1 -1
- package/dist/internal/address.js +20 -5
- package/dist/internal/address.js.map +1 -1
- package/dist/internal/helpers.d.ts.map +1 -1
- package/dist/internal/helpers.js +144 -24
- package/dist/internal/helpers.js.map +1 -1
- package/dist/internal/v3/types.d.ts +7 -5
- package/dist/internal/v3/types.d.ts.map +1 -1
- package/dist/query.d.ts +11 -0
- package/dist/query.d.ts.map +1 -0
- package/dist/query.js +262 -0
- package/dist/query.js.map +1 -0
- package/dist/types.d.ts +60 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -2
package/README.md
CHANGED
|
@@ -1,80 +1,113 @@
|
|
|
1
|
-
# @0xd33p/vietnam-divisions
|
|
1
|
+
# @0xd33p/vietnam-divisions
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
legacy cũ) với auto-detect và auto-resolve ID.
|
|
3
|
+
Dữ liệu hành chính Việt Nam — không phụ thuộc runtime nào.
|
|
5
4
|
|
|
6
|
-
|
|
5
|
+
Cung cấp cả hệ thống **hiện tại** (34 tỉnh, sau sáp nhập 2025) và **cũ** (63 tỉnh) kèm tự động tra cứu ID giữa hai hệ thống.
|
|
7
6
|
|
|
8
|
-
|
|
7
|
+
---
|
|
9
8
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
## Cài đặt
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install @0xd33p/vietnam-divisions
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
| ------------------------------------ | ---------------- | ------------------------------------------ |
|
|
17
|
-
| `vn.divisions()` | — | 34 tỉnh (v3) |
|
|
18
|
-
| `vn.divisions(provinceId)` | `string` | Xã/phường theo tỉnh |
|
|
19
|
-
| `vn.lookup(query)` | `string` | Tra cứu ID/mã/tên — auto-resolve legacy ID |
|
|
20
|
-
| `vn.search(name)` | `string` | Tìm tỉnh theo tên |
|
|
21
|
-
| `vn.search(name, provinceId)` | `string, string` | Tìm xã theo tên trong tỉnh |
|
|
22
|
-
| `vn.legacy.divisions()` | — | 63 tỉnh (legacy) |
|
|
23
|
-
| `vn.legacy.divisions(provinceId)` | `string` | Huyện theo tỉnh |
|
|
24
|
-
| `vn.legacy.lookup(query)` | `string` | Tra cứu legacy ID (tỉnh/huyện/xã) |
|
|
25
|
-
| `vn.legacy.search(name)` | `string` | Tìm tỉnh legacy theo tên |
|
|
26
|
-
| `vn.legacy.search(name, provinceId)` | `string, string` | Tìm huyện theo tên trong tỉnh |
|
|
27
|
-
|
|
28
|
-
Output type cho tất cả method: `GeoResult<T> | GeoErrorResult` (legacy methods cũng
|
|
29
|
-
vậy — unified error handling).
|
|
30
|
-
|
|
31
|
-
## Types
|
|
32
|
-
|
|
33
|
-
| Type | Mô tả |
|
|
34
|
-
| ---------------- | --------------------------------------------------------------- |
|
|
35
|
-
| `GeoUnit` | `{ id: string; name: string }` |
|
|
36
|
-
| `GeoError` | `'province_not_found' \| 'commune_not_found' \| ...` (9 errors) |
|
|
37
|
-
| `GeoResult<T>` | `{ data: T }` — success |
|
|
38
|
-
| `GeoErrorResult` | `{ data: null; error: GeoError }` — failure |
|
|
39
|
-
|
|
40
|
-
## Ví dụ
|
|
15
|
+
## Bắt đầu nhanh
|
|
41
16
|
|
|
42
17
|
```typescript
|
|
43
|
-
|
|
44
|
-
|
|
18
|
+
import { vn } from '@0xd33p/vietnam-divisions';
|
|
19
|
+
|
|
20
|
+
// Danh sách tỉnh hiện tại
|
|
21
|
+
const { data: tinh } = vn.divisions();
|
|
45
22
|
|
|
46
|
-
//
|
|
47
|
-
const { data:
|
|
23
|
+
// Danh sách xã/phường theo tỉnh
|
|
24
|
+
const { data: xa } = vn.divisions('79'); // TP.HCM
|
|
48
25
|
|
|
49
|
-
// Tra cứu
|
|
50
|
-
const
|
|
51
|
-
const
|
|
52
|
-
const hn = vn.lookup('01'); // province by ID
|
|
53
|
-
const ward = vn.lookup('27148'); // commune by ID
|
|
26
|
+
// Tra cứu theo ID, mã, hoặc tên (tự động resolve ID cũ)
|
|
27
|
+
const tinhTra = vn.lookup('HCM');
|
|
28
|
+
const phuong = vn.lookup('00004');
|
|
54
29
|
|
|
55
|
-
// Tìm kiếm
|
|
56
|
-
const
|
|
57
|
-
const wards = vn.search('Phường', '79');
|
|
30
|
+
// Tìm kiếm theo tên
|
|
31
|
+
const ketQua = vn.search('Hồ Chí Minh');
|
|
58
32
|
|
|
59
|
-
//
|
|
60
|
-
const { data:
|
|
33
|
+
// Hệ thống cũ (63 tỉnh, 3 cấp)
|
|
34
|
+
const { data: tinhCu } = vn.legacy.divisions();
|
|
61
35
|
const { data: huyen } = vn.legacy.divisions('01');
|
|
62
|
-
const { data: oldWard } = vn.legacy.lookup('00100');
|
|
63
36
|
```
|
|
64
37
|
|
|
65
|
-
|
|
38
|
+
---
|
|
66
39
|
|
|
67
|
-
|
|
68
|
-
- **Auto-resolve**: old province/commune IDs → new IDs qua merge/mapping data
|
|
40
|
+
## API
|
|
69
41
|
|
|
70
|
-
|
|
42
|
+
### `vn.divisions(maTinh?)`
|
|
71
43
|
|
|
44
|
+
| Đầu vào | Kết quả |
|
|
45
|
+
| --------- | ----------------------- |
|
|
46
|
+
| _(không)_ | 34 tỉnh hiện tại |
|
|
47
|
+
| `"79"` | Xã/phường thuộc tỉnh đó |
|
|
48
|
+
|
|
49
|
+
### `vn.lookup(truyVan)`
|
|
50
|
+
|
|
51
|
+
Chấp nhận: ID tỉnh (`"79"`), mã tỉnh (`"HCM"`), ID xã (`"00004"`), hoặc tên đầy đủ.
|
|
52
|
+
|
|
53
|
+
Tự động resolve ID cũ sang ID mới.
|
|
54
|
+
|
|
55
|
+
### `vn.search(ten, maTinh?)`
|
|
56
|
+
|
|
57
|
+
Tìm mờ theo tên (không phân biệt hoa thường). Có `maTinh` thì giới hạn trong tỉnh đó.
|
|
58
|
+
|
|
59
|
+
### `vn.addressLookup(diaChi)`
|
|
60
|
+
|
|
61
|
+
Phân tích địa chỉ dạng chuỗi và trả về kết quả khớp ở **cả hai** hệ thống.
|
|
62
|
+
|
|
63
|
+
```typescript
|
|
64
|
+
const ketQua = vn.addressLookup(
|
|
65
|
+
'Thôn Nghĩa Thắng, Đông Hòa, TP Thái Bình, Thái Bình',
|
|
66
|
+
);
|
|
67
|
+
// {
|
|
68
|
+
// legacy: { province: { id: '34', name: 'Tỉnh Thái Bình' }, ... },
|
|
69
|
+
// v3: { province: { id: '33', name: 'Hưng Yên' }, ... },
|
|
70
|
+
// }
|
|
72
71
|
```
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
72
|
+
|
|
73
|
+
Tính năng:
|
|
74
|
+
|
|
75
|
+
- Tự động tách thành phần (dấu phẩy, nhận diện cấp)
|
|
76
|
+
- Không phân biệt có dấu / không dấu (`"Thai Binh"` → `"Thái Bình"`)
|
|
77
|
+
- Mở rộng viết tắt (`"TP"` → `"Thành phố"`)
|
|
78
|
+
- Chế độ chặt: báo lỗi nếu thiếu hoặc không xác định được tỉnh
|
|
79
|
+
|
|
80
|
+
### `vn.legacy.*`
|
|
81
|
+
|
|
82
|
+
3 phương thức tương tự (`divisions`, `lookup`, `search`) cho hệ thống 63 tỉnh cũ với 3 cấp (tỉnh → huyện → xã).
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## Kiểu dữ liệu
|
|
87
|
+
|
|
88
|
+
| Kiểu | Mô tả |
|
|
89
|
+
| --------------------- | -------------------------------------------- |
|
|
90
|
+
| `GeoUnit` | `{ id: string; name: string }` |
|
|
91
|
+
| `GeoResult<T>` | `{ data: T }` — thành công |
|
|
92
|
+
| `GeoErrorResult` | `{ data: null; error: GeoError }` — thất bại |
|
|
93
|
+
| `GeoError` | 11 mã lỗi dạng discriminated union |
|
|
94
|
+
| `AddressLookupResult` | `{ legacy: {...}, v3: {...} }` |
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## Dữ liệu
|
|
99
|
+
|
|
100
|
+
| Hệ thống | Tỉnh | Huyện | Xã |
|
|
101
|
+
| ------------- | ---- | ----- | ------ |
|
|
102
|
+
| v3 (hiện tại) | 34 | — | 3.321 |
|
|
103
|
+
| Cũ | 63 | 696 | 10.051 |
|
|
104
|
+
|
|
105
|
+
Hệ thống v3 áp dụng theo Nghị quyết 202/2025/QH15 (sáp nhập tỉnh có hiệu lực từ 2025).
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## Ứng dụng
|
|
110
|
+
|
|
111
|
+
- **Form địa chỉ** — đổ dữ liệu tỉnh/xã vào dropdown
|
|
112
|
+
- **Xác thực địa chỉ** — kiểm tra địa chỉ nhập vào có hợp lệ không
|
|
113
|
+
- **Chuyển đổi dữ liệu** — map địa chỉ cũ sang hệ thống mới
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { addressQuery } from './query.js';
|
|
1
2
|
import type { GeoUnit, GeoResult, GeoErrorResult, AddressLookupResult } from './types.js';
|
|
2
|
-
export type { GeoUnit, GeoError, GeoResult, AddressLookupResult, } from './types.js';
|
|
3
|
+
export type { GeoUnit, GeoError, GeoResult, AddressLookupResult, AddressQueryInput, AddressQueryResult, ResolvedUnit, VerifiedUnit, } from './types.js';
|
|
3
4
|
export declare const vn: {
|
|
4
5
|
/**
|
|
5
6
|
* Get administrative divisions.
|
|
@@ -33,6 +34,21 @@ export declare const vn: {
|
|
|
33
34
|
* `address_missing_province` or `address_ambiguous_province` otherwise.
|
|
34
35
|
*/
|
|
35
36
|
addressLookup(raw: string): GeoResult<AddressLookupResult> | GeoErrorResult;
|
|
37
|
+
/**
|
|
38
|
+
* Structured address query — resolve address components across both v3 and legacy
|
|
39
|
+
* systems with fuzzy matching and flat LLM-friendly output.
|
|
40
|
+
*
|
|
41
|
+
* All fields in the input are optional — pass only what you know.
|
|
42
|
+
* Structured params take priority; address string is used as fallback.
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* vn.address.query({ province: 'HCM' })
|
|
46
|
+
* vn.address.query({ address: 'Quận 1, Hồ Chí Minh', district: 'Quận 1' })
|
|
47
|
+
* vn.address.query({ province: 'Thái Bình', commune: 'Đông Hòa' })
|
|
48
|
+
*/
|
|
49
|
+
address: {
|
|
50
|
+
query: typeof addressQuery;
|
|
51
|
+
};
|
|
36
52
|
/**
|
|
37
53
|
* Legacy system (63 provinces, 3 levels: province → district → commune).
|
|
38
54
|
* Explicit opt-in for backward compatibility.
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EACV,OAAO,EACP,SAAS,EACT,cAAc,EACd,mBAAmB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EACV,OAAO,EACP,SAAS,EACT,cAAc,EACd,mBAAmB,EAKpB,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,OAAO,EACP,QAAQ,EACR,SAAS,EACT,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,YAAY,GACb,MAAM,YAAY,CAAC;AAqCpB,eAAO,MAAM,EAAE;IACb;;;;OAIG;yBACkB,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,cAAc;IAYnE;;;;;OAKG;kBAEM,MAAM,GACZ,SAAS,CAAC,OAAO,GAAG;QAAE,IAAI,EAAE,UAAU,GAAG,MAAM,CAAA;KAAE,CAAC,GAAG,cAAc;IA4DtE;;;;OAIG;iBACU,MAAM,aAAa,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;IAU7D;;;;;;;;;OASG;uBACgB,MAAM,GAAG,SAAS,CAAC,mBAAmB,CAAC,GAAG,cAAc;IAkJ3E;;;;;;;;;;;OAWG;;;;IAKH;;;OAGG;;QAED;;;;WAIG;6BACkB,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,cAAc;QAYnE;;;WAGG;sBAEM,MAAM,GAEX,SAAS,CAAC,OAAO,GAAG;YAAE,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,MAAM,CAAA;SAAE,CAAC,GAC/D,cAAc;QAwClB;;;;WAIG;qBACU,MAAM,aAAa,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;;CAehE,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,6 +2,7 @@ import { v3 as v3Internal, provinceMerges, wardMappings, } from './internal/v3/i
|
|
|
2
2
|
import { legacy as legacyInternal } from './internal/legacy/index.js';
|
|
3
3
|
import { normalizeProvince, normalizeCommune, normalizeDistrict, normalizeName, ok, fail, } from './internal/helpers.js';
|
|
4
4
|
import { parseAddress, fuzzySearchProvinces } from './internal/address.js';
|
|
5
|
+
import { addressQuery } from './query.js';
|
|
5
6
|
// ─── Private helpers ────────────────────────────────────
|
|
6
7
|
function resolveOldProvinceId(oldId) {
|
|
7
8
|
const trimmed = oldId.trim();
|
|
@@ -18,8 +19,7 @@ function resolveOldProvinceId(oldId) {
|
|
|
18
19
|
}
|
|
19
20
|
function resolveOldCommuneId(oldId) {
|
|
20
21
|
const trimmed = oldId.trim();
|
|
21
|
-
const
|
|
22
|
-
for (const mapping of rawMappings) {
|
|
22
|
+
for (const mapping of wardMappings) {
|
|
23
23
|
if (mapping.oldWardCode === trimmed) {
|
|
24
24
|
const c = v3Internal.getCommuneById(mapping.newWardCode);
|
|
25
25
|
if (c) {
|
|
@@ -212,8 +212,7 @@ export const vn = {
|
|
|
212
212
|
if (v3Province) {
|
|
213
213
|
// 6a. Try ward_mappings if we have a legacy commune
|
|
214
214
|
if (legacyCommune) {
|
|
215
|
-
const
|
|
216
|
-
const match = rawMappings.find((m) => m.oldWardCode === legacyCommune.id);
|
|
215
|
+
const match = wardMappings.find((m) => m.oldWardCode === legacyCommune.id);
|
|
217
216
|
if (match) {
|
|
218
217
|
const resolved = v3Internal.getCommuneById(match.newWardCode);
|
|
219
218
|
if (resolved) {
|
|
@@ -248,6 +247,21 @@ export const vn = {
|
|
|
248
247
|
};
|
|
249
248
|
return ok(result);
|
|
250
249
|
},
|
|
250
|
+
/**
|
|
251
|
+
* Structured address query — resolve address components across both v3 and legacy
|
|
252
|
+
* systems with fuzzy matching and flat LLM-friendly output.
|
|
253
|
+
*
|
|
254
|
+
* All fields in the input are optional — pass only what you know.
|
|
255
|
+
* Structured params take priority; address string is used as fallback.
|
|
256
|
+
*
|
|
257
|
+
* @example
|
|
258
|
+
* vn.address.query({ province: 'HCM' })
|
|
259
|
+
* vn.address.query({ address: 'Quận 1, Hồ Chí Minh', district: 'Quận 1' })
|
|
260
|
+
* vn.address.query({ province: 'Thái Bình', commune: 'Đông Hòa' })
|
|
261
|
+
*/
|
|
262
|
+
address: {
|
|
263
|
+
query: addressQuery,
|
|
264
|
+
},
|
|
251
265
|
/**
|
|
252
266
|
* Legacy system (63 provinces, 3 levels: province → district → commune).
|
|
253
267
|
* Explicit opt-in for backward compatibility.
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,EAAE,IAAI,UAAU,EAChB,cAAc,EACd,YAAY,GACb,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,MAAM,IAAI,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,EAAE,EACF,IAAI,GACL,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"address.d.ts","sourceRoot":"","sources":["../../src/internal/address.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAU3C;;;GAGG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,aAAa,CAAC,EAAE,OAAO,GACtB,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CA4B5D;AAED,MAAM,WAAW,aAAa;IAC5B,wEAAwE;IACxE,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"address.d.ts","sourceRoot":"","sources":["../../src/internal/address.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAU3C;;;GAGG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,aAAa,CAAC,EAAE,OAAO,GACtB,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CA4B5D;AAED,MAAM,WAAW,aAAa;IAC5B,wEAAwE;IACxE,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CA6EvD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOxD;AASD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAQjE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,OAAO,EAAE,GACf,OAAO,EAAE,CAkBX"}
|
package/dist/internal/address.js
CHANGED
|
@@ -44,12 +44,27 @@ export function detectLevel(part, provinceFound) {
|
|
|
44
44
|
*/
|
|
45
45
|
export function parseAddress(raw) {
|
|
46
46
|
if (!raw) {
|
|
47
|
-
return {
|
|
47
|
+
return {
|
|
48
|
+
parts: [],
|
|
49
|
+
hamlet: null,
|
|
50
|
+
commune: null,
|
|
51
|
+
district: null,
|
|
52
|
+
province: null,
|
|
53
|
+
};
|
|
48
54
|
}
|
|
49
55
|
// Split by comma, trim, filter empty
|
|
50
|
-
const rawParts = raw
|
|
56
|
+
const rawParts = raw
|
|
57
|
+
.split(',')
|
|
58
|
+
.map((s) => s.trim())
|
|
59
|
+
.filter(Boolean);
|
|
51
60
|
if (rawParts.length === 0) {
|
|
52
|
-
return {
|
|
61
|
+
return {
|
|
62
|
+
parts: [],
|
|
63
|
+
hamlet: null,
|
|
64
|
+
commune: null,
|
|
65
|
+
district: null,
|
|
66
|
+
province: null,
|
|
67
|
+
};
|
|
53
68
|
}
|
|
54
69
|
// Dedup by normalized form (keep first occurrence)
|
|
55
70
|
const seen = new Set();
|
|
@@ -115,8 +130,8 @@ export function expandAbbreviations(name) {
|
|
|
115
130
|
.replace(/\bhni\b/gi, 'hà nội');
|
|
116
131
|
}
|
|
117
132
|
/**
|
|
118
|
-
* Normalize for search: expand abbreviations first, THEN remove diacritics.
|
|
119
|
-
*/
|
|
133
|
+
* Normalize for search: expand abbreviations first, THEN remove diacritics.
|
|
134
|
+
*/
|
|
120
135
|
function normalizeForSearch(name) {
|
|
121
136
|
return normalizeName(expandAbbreviations(name));
|
|
122
137
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"address.js","sourceRoot":"","sources":["../../src/internal/address.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7C,0DAA0D;AAC1D,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AACjE,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AACnE,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AACnE,0EAA0E;AAC1E,MAAM,kBAAkB,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AACtD,MAAM,iBAAiB,GAAG,CAAC,MAAM,CAAC,CAAC;AAEnC;;;GAGG;AACH,MAAM,UAAU,WAAW,CACzB,IAAY,EACZ,aAAuB;IAEvB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IAExC,4BAA4B;IAC5B,KAAK,MAAM,MAAM,IAAI,iBAAiB,EAAE,CAAC;QACvC,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACvD,OAAO,UAAU,CAAC;QACpB,CAAC;IACH,CAAC;IAED,0DAA0D;IAC1D,KAAK,MAAM,MAAM,IAAI,kBAAkB,EAAE,CAAC;QACxC,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACvD,OAAO,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC;QACjD,CAAC;IACH,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,iBAAiB,EAAE,CAAC;QACvC,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO,UAAU,CAAC;IAClD,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,gBAAgB,EAAE,CAAC;QACtC,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO,SAAS,CAAC;IACjD,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO,QAAQ,CAAC;IAChD,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAWD;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,
|
|
1
|
+
{"version":3,"file":"address.js","sourceRoot":"","sources":["../../src/internal/address.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/internal/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/internal/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAwJrD,oEAAoE;AACpE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQlD;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAEV;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAEV;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAEV;AAED,wBAAgB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG;IAAE,IAAI,EAAE,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,SAAS,CAAA;CAAE,CAE7D;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,QAAQ,CAAA;CAAE,CAErE"}
|
package/dist/internal/helpers.js
CHANGED
|
@@ -1,30 +1,150 @@
|
|
|
1
1
|
const DIACRITIC_MAP = {
|
|
2
|
-
a: 'a',
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
2
|
+
a: 'a',
|
|
3
|
+
à: 'a',
|
|
4
|
+
á: 'a',
|
|
5
|
+
ả: 'a',
|
|
6
|
+
ã: 'a',
|
|
7
|
+
ạ: 'a',
|
|
8
|
+
ă: 'a',
|
|
9
|
+
ằ: 'a',
|
|
10
|
+
ắ: 'a',
|
|
11
|
+
ẳ: 'a',
|
|
12
|
+
ẵ: 'a',
|
|
13
|
+
ặ: 'a',
|
|
14
|
+
â: 'a',
|
|
15
|
+
ầ: 'a',
|
|
16
|
+
ấ: 'a',
|
|
17
|
+
ẩ: 'a',
|
|
18
|
+
ẫ: 'a',
|
|
19
|
+
ậ: 'a',
|
|
20
|
+
e: 'e',
|
|
21
|
+
è: 'e',
|
|
22
|
+
é: 'e',
|
|
23
|
+
ẻ: 'e',
|
|
24
|
+
ẽ: 'e',
|
|
25
|
+
ẹ: 'e',
|
|
26
|
+
ê: 'e',
|
|
27
|
+
ề: 'e',
|
|
28
|
+
ế: 'e',
|
|
29
|
+
ể: 'e',
|
|
30
|
+
ễ: 'e',
|
|
31
|
+
ệ: 'e',
|
|
32
|
+
i: 'i',
|
|
33
|
+
ì: 'i',
|
|
34
|
+
í: 'i',
|
|
35
|
+
ỉ: 'i',
|
|
36
|
+
ĩ: 'i',
|
|
37
|
+
ị: 'i',
|
|
38
|
+
o: 'o',
|
|
39
|
+
ò: 'o',
|
|
40
|
+
ó: 'o',
|
|
41
|
+
ỏ: 'o',
|
|
42
|
+
õ: 'o',
|
|
43
|
+
ọ: 'o',
|
|
44
|
+
ô: 'o',
|
|
45
|
+
ồ: 'o',
|
|
46
|
+
ố: 'o',
|
|
47
|
+
ổ: 'o',
|
|
48
|
+
ỗ: 'o',
|
|
49
|
+
ộ: 'o',
|
|
50
|
+
ơ: 'o',
|
|
51
|
+
ờ: 'o',
|
|
52
|
+
ớ: 'o',
|
|
53
|
+
ở: 'o',
|
|
54
|
+
ỡ: 'o',
|
|
55
|
+
ợ: 'o',
|
|
56
|
+
u: 'u',
|
|
57
|
+
ù: 'u',
|
|
58
|
+
ú: 'u',
|
|
59
|
+
ủ: 'u',
|
|
60
|
+
ũ: 'u',
|
|
61
|
+
ụ: 'u',
|
|
62
|
+
ư: 'u',
|
|
63
|
+
ừ: 'u',
|
|
64
|
+
ứ: 'u',
|
|
65
|
+
ử: 'u',
|
|
66
|
+
ữ: 'u',
|
|
67
|
+
ự: 'u',
|
|
68
|
+
y: 'y',
|
|
69
|
+
ỳ: 'y',
|
|
70
|
+
ý: 'y',
|
|
71
|
+
ỷ: 'y',
|
|
72
|
+
ỹ: 'y',
|
|
73
|
+
ỵ: 'y',
|
|
14
74
|
đ: 'd',
|
|
15
75
|
// uppercase
|
|
16
|
-
A: 'a',
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
76
|
+
A: 'a',
|
|
77
|
+
À: 'a',
|
|
78
|
+
Á: 'a',
|
|
79
|
+
Ả: 'a',
|
|
80
|
+
Ã: 'a',
|
|
81
|
+
Ạ: 'a',
|
|
82
|
+
Ă: 'a',
|
|
83
|
+
Ằ: 'a',
|
|
84
|
+
Ắ: 'a',
|
|
85
|
+
Ẳ: 'a',
|
|
86
|
+
Ẵ: 'a',
|
|
87
|
+
Ặ: 'a',
|
|
88
|
+
Â: 'a',
|
|
89
|
+
Ầ: 'a',
|
|
90
|
+
Ấ: 'a',
|
|
91
|
+
Ẩ: 'a',
|
|
92
|
+
Ẫ: 'a',
|
|
93
|
+
Ậ: 'a',
|
|
94
|
+
E: 'e',
|
|
95
|
+
È: 'e',
|
|
96
|
+
É: 'e',
|
|
97
|
+
Ẻ: 'e',
|
|
98
|
+
Ẽ: 'e',
|
|
99
|
+
Ẹ: 'e',
|
|
100
|
+
Ê: 'e',
|
|
101
|
+
Ề: 'e',
|
|
102
|
+
Ế: 'e',
|
|
103
|
+
Ể: 'e',
|
|
104
|
+
Ễ: 'e',
|
|
105
|
+
Ệ: 'e',
|
|
106
|
+
I: 'i',
|
|
107
|
+
Ì: 'i',
|
|
108
|
+
Í: 'i',
|
|
109
|
+
Ỉ: 'i',
|
|
110
|
+
Ĩ: 'i',
|
|
111
|
+
Ị: 'i',
|
|
112
|
+
O: 'o',
|
|
113
|
+
Ò: 'o',
|
|
114
|
+
Ó: 'o',
|
|
115
|
+
Ỏ: 'o',
|
|
116
|
+
Õ: 'o',
|
|
117
|
+
Ọ: 'o',
|
|
118
|
+
Ô: 'o',
|
|
119
|
+
Ồ: 'o',
|
|
120
|
+
Ố: 'o',
|
|
121
|
+
Ổ: 'o',
|
|
122
|
+
Ỗ: 'o',
|
|
123
|
+
Ộ: 'o',
|
|
124
|
+
Ơ: 'o',
|
|
125
|
+
Ờ: 'o',
|
|
126
|
+
Ớ: 'o',
|
|
127
|
+
Ở: 'o',
|
|
128
|
+
Ỡ: 'o',
|
|
129
|
+
Ợ: 'o',
|
|
130
|
+
U: 'u',
|
|
131
|
+
Ù: 'u',
|
|
132
|
+
Ú: 'u',
|
|
133
|
+
Ủ: 'u',
|
|
134
|
+
Ũ: 'u',
|
|
135
|
+
Ụ: 'u',
|
|
136
|
+
Ư: 'u',
|
|
137
|
+
Ừ: 'u',
|
|
138
|
+
Ứ: 'u',
|
|
139
|
+
Ử: 'u',
|
|
140
|
+
Ữ: 'u',
|
|
141
|
+
Ự: 'u',
|
|
142
|
+
Y: 'y',
|
|
143
|
+
Ỳ: 'y',
|
|
144
|
+
Ý: 'y',
|
|
145
|
+
Ỷ: 'y',
|
|
146
|
+
Ỹ: 'y',
|
|
147
|
+
Ỵ: 'y',
|
|
28
148
|
Đ: 'd',
|
|
29
149
|
};
|
|
30
150
|
/** Remove Vietnamese diacritics, lowercase, collapse whitespace. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/internal/helpers.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAA2B;IAC5C,CAAC,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/internal/helpers.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAA2B;IAC5C,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,YAAY;IACZ,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;CACP,CAAC;AAEF,oEAAoE;AACpE,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,IAAI;SACR,KAAK,CAAC,EAAE,CAAC;SACT,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;SACpC,IAAI,CAAC,EAAE,CAAC;SACR,WAAW,EAAE;SACb,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,CAGjC;IACC,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,CAGhC;IACC,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,CAGjC;IACC,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,EAAE,CAAI,IAAO;IAC3B,OAAO,EAAE,IAAI,EAAE,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,KAAe;IAClC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC/B,CAAC"}
|
|
@@ -24,10 +24,12 @@ export interface ProvinceMerge {
|
|
|
24
24
|
}
|
|
25
25
|
/** Old-to-new ward code mapping. */
|
|
26
26
|
export interface WardMapping {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
oldWardCode: string;
|
|
28
|
+
oldWardName: string;
|
|
29
|
+
oldDistrictName: string;
|
|
30
|
+
oldProvinceName: string;
|
|
31
|
+
newWardCode: string;
|
|
32
|
+
newWardName: string;
|
|
33
|
+
newProvinceName: string;
|
|
32
34
|
}
|
|
33
35
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/internal/v3/types.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,yDAAyD;AACzD,MAAM,WAAW,OAAO;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,yCAAyC;AACzC,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,iBAAiB,EAAE,CAAC;CACjC;AAED,oCAAoC;AACpC,MAAM,WAAW,WAAW;IAC1B,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/internal/v3/types.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,yDAAyD;AACzD,MAAM,WAAW,OAAO;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,yCAAyC;AACzC,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,iBAAiB,EAAE,CAAC;CACjC;AAED,oCAAoC;AACpC,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB"}
|
package/dist/query.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { AddressQueryInput, AddressQueryResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Structured address query: resolve address components across both v3 and legacy
|
|
4
|
+
* systems with fuzzy matching, cross-resolution, and flat LLM-friendly output.
|
|
5
|
+
*
|
|
6
|
+
* - All fields are optional — pass only what you know.
|
|
7
|
+
* - Structured params (province/district/commune/hamlet) take priority over address parsing.
|
|
8
|
+
* - Address string is used as fallback for any missing structured param.
|
|
9
|
+
*/
|
|
10
|
+
export declare function addressQuery(input: AddressQueryInput): AddressQueryResult;
|
|
11
|
+
//# sourceMappingURL=query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAGnB,MAAM,YAAY,CAAC;AAuHpB;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,kBAAkB,CAsKzE"}
|
package/dist/query.js
ADDED
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
import { parseAddress, fuzzySearchProvinces, } from './internal/address.js';
|
|
2
|
+
import { normalizeProvince, normalizeCommune, normalizeDistrict, } from './internal/helpers.js';
|
|
3
|
+
import { v3 as v3Internal, provinceMerges, wardMappings } from './internal/v3/index.js';
|
|
4
|
+
import { legacy as legacyInternal } from './internal/legacy/index.js';
|
|
5
|
+
// ─── Private helpers ────────────────────────────────────
|
|
6
|
+
function toResolvedUnit(unit) {
|
|
7
|
+
if (!unit)
|
|
8
|
+
return { id: null, name: null };
|
|
9
|
+
return { id: unit.id, name: unit.name };
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Resolve a province query against both v3 and legacy systems.
|
|
13
|
+
* Attempts ID, code, and name lookups with cross-resolution via provinceMerges.
|
|
14
|
+
*/
|
|
15
|
+
function resolveProvince(query) {
|
|
16
|
+
if (!query) {
|
|
17
|
+
return { v3Province: { id: null, name: null }, legacyProvince: { id: null, name: null } };
|
|
18
|
+
}
|
|
19
|
+
const trimmed = query.trim();
|
|
20
|
+
const v3ProvinceList = v3Internal.provinces().map(normalizeProvince);
|
|
21
|
+
const legacyProvinceList = legacyInternal.provinces().map(normalizeProvince);
|
|
22
|
+
let v3Province = null;
|
|
23
|
+
let legacyProvince = null;
|
|
24
|
+
// ── v3 lookup ──
|
|
25
|
+
// By code (3-letter, e.g. "HCM", "HNI")
|
|
26
|
+
if (trimmed.length === 3 && /^[A-Za-z]+$/.test(trimmed)) {
|
|
27
|
+
const byCode = v3Internal.getProvinceByCode(trimmed.toUpperCase());
|
|
28
|
+
if (byCode)
|
|
29
|
+
v3Province = normalizeProvince(byCode);
|
|
30
|
+
}
|
|
31
|
+
// By ID (2-digit)
|
|
32
|
+
if (!v3Province && trimmed.length === 2 && /^\d+$/.test(trimmed)) {
|
|
33
|
+
const byId = v3Internal.getProvinceById(trimmed);
|
|
34
|
+
if (byId)
|
|
35
|
+
v3Province = normalizeProvince(byId);
|
|
36
|
+
}
|
|
37
|
+
// By name (fuzzy)
|
|
38
|
+
if (!v3Province) {
|
|
39
|
+
const matches = fuzzySearchProvinces(trimmed, v3ProvinceList);
|
|
40
|
+
if (matches.length >= 1)
|
|
41
|
+
v3Province = matches[0];
|
|
42
|
+
}
|
|
43
|
+
// ── Legacy lookup ──
|
|
44
|
+
// By ID (2-digit)
|
|
45
|
+
if (trimmed.length === 2 && /^\d+$/.test(trimmed)) {
|
|
46
|
+
const byId = legacyInternal.getProvinceById(trimmed);
|
|
47
|
+
if (byId)
|
|
48
|
+
legacyProvince = normalizeProvince(byId);
|
|
49
|
+
}
|
|
50
|
+
// By name (fuzzy)
|
|
51
|
+
if (!legacyProvince) {
|
|
52
|
+
const matches = fuzzySearchProvinces(trimmed, legacyProvinceList);
|
|
53
|
+
if (matches.length >= 1)
|
|
54
|
+
legacyProvince = matches[0];
|
|
55
|
+
}
|
|
56
|
+
// ── Cross-resolution ──
|
|
57
|
+
// v3 → legacy: try direct ID match first
|
|
58
|
+
if (v3Province && !legacyProvince) {
|
|
59
|
+
const byId = legacyInternal.getProvinceById(v3Province.id);
|
|
60
|
+
if (byId) {
|
|
61
|
+
legacyProvince = normalizeProvince(byId);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// legacy → v3: try direct ID match first
|
|
65
|
+
if (!v3Province && legacyProvince) {
|
|
66
|
+
const byId = v3Internal.getProvinceById(legacyProvince.id);
|
|
67
|
+
if (byId) {
|
|
68
|
+
v3Province = normalizeProvince(byId);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// v3 → legacy via provinceMerges (v3 is new merged province)
|
|
72
|
+
if (v3Province && !legacyProvince) {
|
|
73
|
+
for (const merge of provinceMerges) {
|
|
74
|
+
if (merge.newProvinceId === v3Province.id) {
|
|
75
|
+
const firstOld = merge.mergedFrom[0];
|
|
76
|
+
if (firstOld) {
|
|
77
|
+
legacyProvince = normalizeProvince({
|
|
78
|
+
idProvince: firstOld.oldProvinceId,
|
|
79
|
+
name: firstOld.oldProvinceName,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// legacy → v3 via provinceMerges
|
|
87
|
+
if (!v3Province && legacyProvince) {
|
|
88
|
+
for (const merge of provinceMerges) {
|
|
89
|
+
const found = merge.mergedFrom.find((m) => m.oldProvinceId === legacyProvince.id);
|
|
90
|
+
if (found) {
|
|
91
|
+
const resolved = v3Internal.getProvinceById(merge.newProvinceId);
|
|
92
|
+
if (resolved) {
|
|
93
|
+
v3Province = normalizeProvince(resolved);
|
|
94
|
+
}
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return {
|
|
100
|
+
v3Province: toResolvedUnit(v3Province),
|
|
101
|
+
legacyProvince: toResolvedUnit(legacyProvince),
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
// ─── Public API ─────────────────────────────────────────
|
|
105
|
+
/**
|
|
106
|
+
* Structured address query: resolve address components across both v3 and legacy
|
|
107
|
+
* systems with fuzzy matching, cross-resolution, and flat LLM-friendly output.
|
|
108
|
+
*
|
|
109
|
+
* - All fields are optional — pass only what you know.
|
|
110
|
+
* - Structured params (province/district/commune/hamlet) take priority over address parsing.
|
|
111
|
+
* - Address string is used as fallback for any missing structured param.
|
|
112
|
+
*/
|
|
113
|
+
export function addressQuery(input) {
|
|
114
|
+
const raw = { ...input };
|
|
115
|
+
// ── Phase 1: Parse address string (fallback) ──
|
|
116
|
+
const parsed = input.address
|
|
117
|
+
? parseAddress(input.address)
|
|
118
|
+
: {
|
|
119
|
+
parts: [],
|
|
120
|
+
hamlet: null,
|
|
121
|
+
commune: null,
|
|
122
|
+
district: null,
|
|
123
|
+
province: null,
|
|
124
|
+
};
|
|
125
|
+
// Structured params take priority; address fills in missing fields
|
|
126
|
+
const targetProvince = input.province || parsed.province;
|
|
127
|
+
const targetDistrict = input.district || parsed.district;
|
|
128
|
+
const targetCommune = input.commune || parsed.commune;
|
|
129
|
+
const targetHamlet = input.hamlet || parsed.hamlet;
|
|
130
|
+
// ── Phase 2: Determine which fields were requested ──
|
|
131
|
+
const requestedFields = new Set();
|
|
132
|
+
if (input.province)
|
|
133
|
+
requestedFields.add('province');
|
|
134
|
+
else if (parsed.province)
|
|
135
|
+
requestedFields.add('province');
|
|
136
|
+
if (input.district)
|
|
137
|
+
requestedFields.add('district');
|
|
138
|
+
else if (parsed.district)
|
|
139
|
+
requestedFields.add('district');
|
|
140
|
+
if (input.commune)
|
|
141
|
+
requestedFields.add('commune');
|
|
142
|
+
else if (parsed.commune)
|
|
143
|
+
requestedFields.add('commune');
|
|
144
|
+
if (input.hamlet)
|
|
145
|
+
requestedFields.add('hamlet');
|
|
146
|
+
else if (parsed.hamlet)
|
|
147
|
+
requestedFields.add('hamlet');
|
|
148
|
+
// ── Phase 3: Resolve province ──
|
|
149
|
+
const { v3Province, legacyProvince } = resolveProvince(targetProvince);
|
|
150
|
+
// ── Phase 4: Resolve district (legacy system) ──
|
|
151
|
+
let resolvedLegacyDistrict = { id: null, name: null };
|
|
152
|
+
if (targetDistrict && legacyProvince.id) {
|
|
153
|
+
const districts = legacyInternal
|
|
154
|
+
.getDistrictsByProvinceId(legacyProvince.id)
|
|
155
|
+
.map(normalizeDistrict);
|
|
156
|
+
const matches = fuzzySearchProvinces(targetDistrict, districts);
|
|
157
|
+
if (matches.length > 0) {
|
|
158
|
+
resolvedLegacyDistrict = toResolvedUnit(matches[0]);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
// ── Phase 5: Resolve commune ──
|
|
162
|
+
let resolvedV3Commune = { id: null, name: null };
|
|
163
|
+
let resolvedLegacyCommune = { id: null, name: null };
|
|
164
|
+
if (targetCommune) {
|
|
165
|
+
// 5a. Legacy commune search
|
|
166
|
+
if (legacyProvince.id) {
|
|
167
|
+
// Within district first
|
|
168
|
+
if (resolvedLegacyDistrict.id) {
|
|
169
|
+
const communes = legacyInternal
|
|
170
|
+
.getCommunesByDistrictId(resolvedLegacyDistrict.id)
|
|
171
|
+
.map(normalizeCommune);
|
|
172
|
+
const matches = fuzzySearchProvinces(targetCommune, communes);
|
|
173
|
+
if (matches.length > 0) {
|
|
174
|
+
resolvedLegacyCommune = toResolvedUnit(matches[0]);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
// Then within province
|
|
178
|
+
if (!resolvedLegacyCommune.id) {
|
|
179
|
+
const communes = legacyInternal
|
|
180
|
+
.getCommunesByProvinceId(legacyProvince.id)
|
|
181
|
+
.map(normalizeCommune);
|
|
182
|
+
const matches = fuzzySearchProvinces(targetCommune, communes);
|
|
183
|
+
if (matches.length > 0) {
|
|
184
|
+
resolvedLegacyCommune = toResolvedUnit(matches[0]);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// 5b. V3 commune search (when v3 province known)
|
|
189
|
+
if (v3Province.id) {
|
|
190
|
+
// Try wardMappings first if we have a legacy commune (authoritative cross-ref)
|
|
191
|
+
if (resolvedLegacyCommune.id) {
|
|
192
|
+
const mapping = wardMappings.find((m) => m.oldWardCode === resolvedLegacyCommune.id);
|
|
193
|
+
if (mapping) {
|
|
194
|
+
const resolved = v3Internal.getCommuneById(mapping.newWardCode);
|
|
195
|
+
if (resolved) {
|
|
196
|
+
resolvedV3Commune = toResolvedUnit(normalizeCommune(resolved));
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
// Fall back to name search in v3 communes
|
|
201
|
+
if (!resolvedV3Commune.id) {
|
|
202
|
+
const v3Communes = v3Internal
|
|
203
|
+
.getCommunesByProvinceId(v3Province.id)
|
|
204
|
+
.map(normalizeCommune);
|
|
205
|
+
const matches = fuzzySearchProvinces(targetCommune, v3Communes);
|
|
206
|
+
if (matches.length > 0) {
|
|
207
|
+
resolvedV3Commune = toResolvedUnit(matches[0]);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
// ── Phase 6: Build result ──
|
|
213
|
+
// Verified status
|
|
214
|
+
const provinceVerified = v3Province.id !== null || legacyProvince.id !== null;
|
|
215
|
+
const communeVerified = resolvedV3Commune.id !== null;
|
|
216
|
+
const districtVerified = resolvedLegacyDistrict.id !== null;
|
|
217
|
+
// Best-match flat fields
|
|
218
|
+
const bestProvinceName = v3Province.name || legacyProvince.name;
|
|
219
|
+
const bestProvinceId = v3Province.id || legacyProvince.id;
|
|
220
|
+
const bestCommuneName = resolvedV3Commune.name || resolvedLegacyCommune.name;
|
|
221
|
+
const bestCommuneId = resolvedV3Commune.id || resolvedLegacyCommune.id;
|
|
222
|
+
// Missing fields
|
|
223
|
+
const missingFields = [];
|
|
224
|
+
if (requestedFields.has('province') && !bestProvinceName) {
|
|
225
|
+
missingFields.push('province');
|
|
226
|
+
}
|
|
227
|
+
if (requestedFields.has('district') && !resolvedLegacyDistrict.name) {
|
|
228
|
+
missingFields.push('district');
|
|
229
|
+
}
|
|
230
|
+
if (requestedFields.has('commune') && !bestCommuneName) {
|
|
231
|
+
missingFields.push('commune');
|
|
232
|
+
}
|
|
233
|
+
if (requestedFields.has('hamlet') && !targetHamlet) {
|
|
234
|
+
missingFields.push('hamlet');
|
|
235
|
+
}
|
|
236
|
+
return {
|
|
237
|
+
raw,
|
|
238
|
+
v3: {
|
|
239
|
+
province: v3Province,
|
|
240
|
+
commune: resolvedV3Commune,
|
|
241
|
+
},
|
|
242
|
+
legacy: {
|
|
243
|
+
province: legacyProvince,
|
|
244
|
+
district: resolvedLegacyDistrict,
|
|
245
|
+
commune: resolvedLegacyCommune,
|
|
246
|
+
hamlet: targetHamlet,
|
|
247
|
+
},
|
|
248
|
+
province: bestProvinceName,
|
|
249
|
+
provinceId: bestProvinceId,
|
|
250
|
+
provinceVerified,
|
|
251
|
+
commune: bestCommuneName,
|
|
252
|
+
communeId: bestCommuneId,
|
|
253
|
+
communeVerified,
|
|
254
|
+
district: resolvedLegacyDistrict.name,
|
|
255
|
+
districtId: resolvedLegacyDistrict.id,
|
|
256
|
+
districtVerified,
|
|
257
|
+
hamlet: targetHamlet,
|
|
258
|
+
missingFields,
|
|
259
|
+
complete: missingFields.length === 0,
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
//# sourceMappingURL=query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,EAAE,IAAI,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACxF,OAAO,EAAE,MAAM,IAAI,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAQtE,2DAA2D;AAE3D,SAAS,cAAc,CAAC,IAAoB;IAC1C,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC3C,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;AAC1C,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CACtB,KAAgC;IAEhC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;IAC5F,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,MAAM,cAAc,GAAc,UAAU,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAChF,MAAM,kBAAkB,GAAc,cAAc,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAExF,IAAI,UAAU,GAAmB,IAAI,CAAC;IACtC,IAAI,cAAc,GAAmB,IAAI,CAAC;IAE1C,kBAAkB;IAElB,wCAAwC;IACxC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACxD,MAAM,MAAM,GAAG,UAAU,CAAC,iBAAiB,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;QACnE,IAAI,MAAM;YAAE,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACrD,CAAC;IAED,kBAAkB;IAClB,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACjE,MAAM,IAAI,GAAG,UAAU,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,IAAI;YAAE,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;IAED,kBAAkB;IAClB,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAC9D,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC;YAAE,UAAU,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;IACpD,CAAC;IAED,sBAAsB;IAEtB,kBAAkB;IAClB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,GAAG,cAAc,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACrD,IAAI,IAAI;YAAE,cAAc,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC;IAED,kBAAkB;IAClB,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;QAClE,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC;YAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;IACxD,CAAC;IAED,yBAAyB;IAEzB,yCAAyC;IACzC,IAAI,UAAU,IAAI,CAAC,cAAc,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,cAAc,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC3D,IAAI,IAAI,EAAE,CAAC;YACT,cAAc,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,yCAAyC;IACzC,IAAI,CAAC,UAAU,IAAI,cAAc,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,UAAU,CAAC,eAAe,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QAC3D,IAAI,IAAI,EAAE,CAAC;YACT,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,6DAA6D;IAC7D,IAAI,UAAU,IAAI,CAAC,cAAc,EAAE,CAAC;QAClC,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YACnC,IAAI,KAAK,CAAC,aAAa,KAAK,UAAU,CAAC,EAAE,EAAE,CAAC;gBAC1C,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBACrC,IAAI,QAAQ,EAAE,CAAC;oBACb,cAAc,GAAG,iBAAiB,CAAC;wBACjC,UAAU,EAAE,QAAQ,CAAC,aAAa;wBAClC,IAAI,EAAE,QAAQ,CAAC,eAAe;qBAC/B,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,iCAAiC;IACjC,IAAI,CAAC,UAAU,IAAI,cAAc,EAAE,CAAC;QAClC,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CACjC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,cAAc,CAAC,EAAE,CAC7C,CAAC;YACF,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,QAAQ,GAAG,UAAU,CAAC,eAAe,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBACjE,IAAI,QAAQ,EAAE,CAAC;oBACb,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;gBAC3C,CAAC;gBACD,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,UAAU,EAAE,cAAc,CAAC,UAAU,CAAC;QACtC,cAAc,EAAE,cAAc,CAAC,cAAc,CAAC;KAC/C,CAAC;AACJ,CAAC;AAED,2DAA2D;AAE3D;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,KAAwB;IACnD,MAAM,GAAG,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;IAEzB,iDAAiD;IAEjD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO;QAC1B,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC;QAC7B,CAAC,CAAC;YACE,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,IAAI;SACf,CAAC;IAEN,mEAAmE;IACnE,MAAM,cAAc,GAAG,KAAK,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC;IACzD,MAAM,cAAc,GAAG,KAAK,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC;IACzD,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC;IACtD,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC;IAEnD,uDAAuD;IAEvD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;IAE1C,IAAI,KAAK,CAAC,QAAQ;QAAE,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;SAC/C,IAAI,MAAM,CAAC,QAAQ;QAAE,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAE1D,IAAI,KAAK,CAAC,QAAQ;QAAE,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;SAC/C,IAAI,MAAM,CAAC,QAAQ;QAAE,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAE1D,IAAI,KAAK,CAAC,OAAO;QAAE,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;SAC7C,IAAI,MAAM,CAAC,OAAO;QAAE,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAExD,IAAI,KAAK,CAAC,MAAM;QAAE,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;SAC3C,IAAI,MAAM,CAAC,MAAM;QAAE,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAEtD,kCAAkC;IAElC,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;IAEvE,kDAAkD;IAElD,IAAI,sBAAsB,GAAiB,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAEpE,IAAI,cAAc,IAAI,cAAc,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,SAAS,GAAG,cAAc;aAC7B,wBAAwB,CAAC,cAAc,CAAC,EAAE,CAAC;aAC3C,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAC1B,MAAM,OAAO,GAAG,oBAAoB,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;QAChE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,sBAAsB,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,iCAAiC;IAEjC,IAAI,iBAAiB,GAAiB,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC/D,IAAI,qBAAqB,GAAiB,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAEnE,IAAI,aAAa,EAAE,CAAC;QAClB,4BAA4B;QAC5B,IAAI,cAAc,CAAC,EAAE,EAAE,CAAC;YACtB,wBAAwB;YACxB,IAAI,sBAAsB,CAAC,EAAE,EAAE,CAAC;gBAC9B,MAAM,QAAQ,GAAG,cAAc;qBAC5B,uBAAuB,CAAC,sBAAsB,CAAC,EAAE,CAAC;qBAClD,GAAG,CAAC,gBAAgB,CAAC,CAAC;gBACzB,MAAM,OAAO,GAAG,oBAAoB,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;gBAC9D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACvB,qBAAqB,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;YACD,uBAAuB;YACvB,IAAI,CAAC,qBAAqB,CAAC,EAAE,EAAE,CAAC;gBAC9B,MAAM,QAAQ,GAAG,cAAc;qBAC5B,uBAAuB,CAAC,cAAc,CAAC,EAAE,CAAC;qBAC1C,GAAG,CAAC,gBAAgB,CAAC,CAAC;gBACzB,MAAM,OAAO,GAAG,oBAAoB,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;gBAC9D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACvB,qBAAqB,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;QACH,CAAC;QAED,iDAAiD;QACjD,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC;YAClB,+EAA+E;YAC/E,IAAI,qBAAqB,CAAC,EAAE,EAAE,CAAC;gBAC7B,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAC/B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,qBAAqB,CAAC,EAAE,CAClD,CAAC;gBACF,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM,QAAQ,GAAG,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;oBAChE,IAAI,QAAQ,EAAE,CAAC;wBACb,iBAAiB,GAAG,cAAc,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;oBACjE,CAAC;gBACH,CAAC;YACH,CAAC;YAED,0CAA0C;YAC1C,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,CAAC;gBAC1B,MAAM,UAAU,GAAG,UAAU;qBAC1B,uBAAuB,CAAC,UAAU,CAAC,EAAE,CAAC;qBACtC,GAAG,CAAC,gBAAgB,CAAC,CAAC;gBACzB,MAAM,OAAO,GAAG,oBAAoB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;gBAChE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACvB,iBAAiB,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,CAAC;gBAClD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,8BAA8B;IAE9B,kBAAkB;IAClB,MAAM,gBAAgB,GAAG,UAAU,CAAC,EAAE,KAAK,IAAI,IAAI,cAAc,CAAC,EAAE,KAAK,IAAI,CAAC;IAC9E,MAAM,eAAe,GAAG,iBAAiB,CAAC,EAAE,KAAK,IAAI,CAAC;IACtD,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,EAAE,KAAK,IAAI,CAAC;IAE5D,yBAAyB;IACzB,MAAM,gBAAgB,GAAG,UAAU,CAAC,IAAI,IAAI,cAAc,CAAC,IAAI,CAAC;IAChE,MAAM,cAAc,GAAG,UAAU,CAAC,EAAE,IAAI,cAAc,CAAC,EAAE,CAAC;IAC1D,MAAM,eAAe,GAAG,iBAAiB,CAAC,IAAI,IAAI,qBAAqB,CAAC,IAAI,CAAC;IAC7E,MAAM,aAAa,GAAG,iBAAiB,CAAC,EAAE,IAAI,qBAAqB,CAAC,EAAE,CAAC;IAEvE,iBAAiB;IACjB,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,IAAI,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACzD,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC;QACpE,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;QACvD,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAChC,CAAC;IACD,IAAI,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QACnD,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO;QACL,GAAG;QACH,EAAE,EAAE;YACF,QAAQ,EAAE,UAAU;YACpB,OAAO,EAAE,iBAAiB;SAC3B;QACD,MAAM,EAAE;YACN,QAAQ,EAAE,cAAc;YACxB,QAAQ,EAAE,sBAAsB;YAChC,OAAO,EAAE,qBAAqB;YAC9B,MAAM,EAAE,YAAY;SACrB;QACD,QAAQ,EAAE,gBAAgB;QAC1B,UAAU,EAAE,cAAc;QAC1B,gBAAgB;QAChB,OAAO,EAAE,eAAe;QACxB,SAAS,EAAE,aAAa;QACxB,eAAe;QACf,QAAQ,EAAE,sBAAsB,CAAC,IAAI;QACrC,UAAU,EAAE,sBAAsB,CAAC,EAAE;QACrC,gBAAgB;QAChB,MAAM,EAAE,YAAY;QACpB,aAAa;QACb,QAAQ,EAAE,aAAa,CAAC,MAAM,KAAK,CAAC;KACrC,CAAC;AACJ,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -34,4 +34,64 @@ export interface AddressLookupResult {
|
|
|
34
34
|
hamlet: string | null;
|
|
35
35
|
};
|
|
36
36
|
}
|
|
37
|
+
/** Input for structured address query. All fields optional — mix and match. */
|
|
38
|
+
export interface AddressQueryInput {
|
|
39
|
+
/** Full address string (free text, will be parsed if needed) */
|
|
40
|
+
address?: string;
|
|
41
|
+
/** Province/city name or ID (e.g. "Hà Nội", "01", "HNI") */
|
|
42
|
+
province?: string;
|
|
43
|
+
/** District name (legacy system — quận/huyện) */
|
|
44
|
+
district?: string;
|
|
45
|
+
/** Commune/ward name (v3 system — phường/xã) */
|
|
46
|
+
commune?: string;
|
|
47
|
+
/** Hamlet/village name (thôn/ấp) */
|
|
48
|
+
hamlet?: string;
|
|
49
|
+
}
|
|
50
|
+
/** A resolved administrative unit with verification status. */
|
|
51
|
+
export interface ResolvedUnit {
|
|
52
|
+
id: string | null;
|
|
53
|
+
name: string | null;
|
|
54
|
+
}
|
|
55
|
+
/** A resolved unit with verification flag. */
|
|
56
|
+
export interface VerifiedUnit extends ResolvedUnit {
|
|
57
|
+
verified: boolean;
|
|
58
|
+
}
|
|
59
|
+
/** Result of structured address query — flat, LLM-friendly. */
|
|
60
|
+
export interface AddressQueryResult {
|
|
61
|
+
/** Original input */
|
|
62
|
+
raw: AddressQueryInput;
|
|
63
|
+
/** v3 system (34 tỉnh, 2-tier: province → commune) */
|
|
64
|
+
v3: {
|
|
65
|
+
province: ResolvedUnit | null;
|
|
66
|
+
commune: ResolvedUnit | null;
|
|
67
|
+
};
|
|
68
|
+
/** Legacy system (63 tỉnh, 3-tier: province → district → commune) */
|
|
69
|
+
legacy: {
|
|
70
|
+
province: ResolvedUnit | null;
|
|
71
|
+
district: ResolvedUnit | null;
|
|
72
|
+
commune: ResolvedUnit | null;
|
|
73
|
+
hamlet: string | null;
|
|
74
|
+
};
|
|
75
|
+
/** Best-match province name */
|
|
76
|
+
province: string | null;
|
|
77
|
+
provinceId: string | null;
|
|
78
|
+
/** true if province was found in official data */
|
|
79
|
+
provinceVerified: boolean;
|
|
80
|
+
/** Best-match commune/ward name (v3) */
|
|
81
|
+
commune: string | null;
|
|
82
|
+
communeId: string | null;
|
|
83
|
+
/** true if commune was found in v3 data */
|
|
84
|
+
communeVerified: boolean;
|
|
85
|
+
/** Best-match district name (legacy) */
|
|
86
|
+
district: string | null;
|
|
87
|
+
districtId: string | null;
|
|
88
|
+
/** true if district was found in legacy data */
|
|
89
|
+
districtVerified: boolean;
|
|
90
|
+
/** Hamlet/village */
|
|
91
|
+
hamlet: string | null;
|
|
92
|
+
/** Fields that were requested but couldn't be resolved */
|
|
93
|
+
missingFields: string[];
|
|
94
|
+
/** Overall: true if all requested fields were resolved */
|
|
95
|
+
complete: boolean;
|
|
96
|
+
}
|
|
37
97
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,sCAAsC;AACtC,MAAM,MAAM,QAAQ,GAChB,oBAAoB,GACpB,mBAAmB,GACnB,oBAAoB,GACpB,qBAAqB,GACrB,oBAAoB,GACpB,qBAAqB,GACrB,qBAAqB,GACrB,oBAAoB,GACpB,eAAe,GACf,0BAA0B,GAC1B,4BAA4B,CAAC;AAEjC,4CAA4C;AAC5C,MAAM,WAAW,SAAS,CAAC,CAAC;IAC1B,IAAI,EAAE,CAAC,CAAC;IACR,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,QAAQ,CAAC;CACjB;AAED,iDAAiD;AACjD,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;CACtD;AAED,sFAAsF;AACtF,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE;QACN,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;QACzB,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;QACzB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;QACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;KACvB,CAAC;IACF,EAAE,EAAE;QACF,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;QACzB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;QACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;KACvB,CAAC;CACH"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|