@damarkuncoro/posindonesia 1.0.2 → 1.0.4
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 +24 -9
- package/lib/cjs/domain/models/PostalCode.d.ts +4 -0
- package/lib/cjs/domain/models/PostalCode.d.ts.map +1 -1
- package/lib/cjs/domain/models/PostalCode.js +4 -0
- package/lib/cjs/domain/models/PostalCode.js.map +1 -1
- package/lib/cjs/domain/repositories/DataProvider.d.ts +17 -0
- package/lib/cjs/domain/repositories/DataProvider.d.ts.map +1 -0
- package/lib/cjs/domain/repositories/DataProvider.js +3 -0
- package/lib/cjs/domain/repositories/DataProvider.js.map +1 -0
- package/lib/cjs/infrastructure/data-providers/TsDataProvider.d.ts +13 -0
- package/lib/cjs/infrastructure/data-providers/TsDataProvider.d.ts.map +1 -0
- package/lib/cjs/infrastructure/data-providers/TsDataProvider.js +57 -0
- package/lib/cjs/infrastructure/data-providers/TsDataProvider.js.map +1 -0
- package/lib/cjs/infrastructure/repositories/TsPostalCodeRepository.d.ts +22 -4
- package/lib/cjs/infrastructure/repositories/TsPostalCodeRepository.d.ts.map +1 -1
- package/lib/cjs/infrastructure/repositories/TsPostalCodeRepository.js +55 -44
- package/lib/cjs/infrastructure/repositories/TsPostalCodeRepository.js.map +1 -1
- package/lib/cjs/main.d.ts +47 -4
- package/lib/cjs/main.d.ts.map +1 -1
- package/lib/cjs/main.js +57 -6
- package/lib/cjs/main.js.map +1 -1
- package/lib/esm/domain/models/PostalCode.d.ts +4 -0
- package/lib/esm/domain/models/PostalCode.d.ts.map +1 -1
- package/lib/esm/domain/models/PostalCode.js +4 -0
- package/lib/esm/domain/models/PostalCode.js.map +1 -1
- package/lib/esm/domain/repositories/DataProvider.d.ts +17 -0
- package/lib/esm/domain/repositories/DataProvider.d.ts.map +1 -0
- package/lib/esm/domain/repositories/DataProvider.js +2 -0
- package/lib/esm/domain/repositories/DataProvider.js.map +1 -0
- package/lib/esm/infrastructure/data-providers/TsDataProvider.d.ts +13 -0
- package/lib/esm/infrastructure/data-providers/TsDataProvider.d.ts.map +1 -0
- package/lib/esm/infrastructure/data-providers/TsDataProvider.js +53 -0
- package/lib/esm/infrastructure/data-providers/TsDataProvider.js.map +1 -0
- package/lib/esm/infrastructure/repositories/TsPostalCodeRepository.d.ts +22 -4
- package/lib/esm/infrastructure/repositories/TsPostalCodeRepository.d.ts.map +1 -1
- package/lib/esm/infrastructure/repositories/TsPostalCodeRepository.js +55 -44
- package/lib/esm/infrastructure/repositories/TsPostalCodeRepository.js.map +1 -1
- package/lib/esm/main.d.ts +47 -4
- package/lib/esm/main.d.ts.map +1 -1
- package/lib/esm/main.js +55 -5
- package/lib/esm/main.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -49,21 +49,36 @@ const dki = await search('Gambir', { provinceCode: '31' });
|
|
|
49
49
|
const byCode = await searchByCode('10110');
|
|
50
50
|
```
|
|
51
51
|
|
|
52
|
-
### **2. Penggunaan Advanced (Repository)**
|
|
52
|
+
### **2. Penggunaan Advanced (Repository & Custom Data)**
|
|
53
|
+
|
|
54
|
+
Untuk skenario yang lebih kompleks, seperti menggunakan sumber data Anda sendiri (misal: dari database), Anda dapat menyuntikkan `DataProvider` custom ke dalam `TsPostalCodeRepository`.
|
|
53
55
|
|
|
54
56
|
```typescript
|
|
55
|
-
import {
|
|
57
|
+
import {
|
|
58
|
+
TsPostalCodeRepository,
|
|
59
|
+
SearchPostalCode,
|
|
60
|
+
type DataProvider,
|
|
61
|
+
type PostalCodeData
|
|
62
|
+
} from '@damarkuncoro/posindonesia';
|
|
63
|
+
|
|
64
|
+
// 1. Buat DataProvider Anda sendiri
|
|
65
|
+
class MyDbProvider implements DataProvider {
|
|
66
|
+
async getAll(): Promise<PostalCodeData[]> {
|
|
67
|
+
// Logika untuk mengambil data dari database Anda
|
|
68
|
+
return [];
|
|
69
|
+
}
|
|
70
|
+
async getByProvince(provinceCode: string): Promise<PostalCodeData[]> {
|
|
71
|
+
// Logika untuk mengambil data provinsi tertentu dari DB
|
|
72
|
+
return [];
|
|
73
|
+
}
|
|
74
|
+
}
|
|
56
75
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
});
|
|
76
|
+
// 2. Suntikkan ke Repository
|
|
77
|
+
const myProvider = new MyDbProvider();
|
|
78
|
+
const repo = new TsPostalCodeRepository({ dataProvider: myProvider });
|
|
61
79
|
|
|
62
80
|
const searchUseCase = new SearchPostalCode(repo);
|
|
63
81
|
const results = await searchUseCase.execute(['Bandung']);
|
|
64
|
-
|
|
65
|
-
// Bebaskan memori cache jika diperlukan
|
|
66
|
-
repo.clearMemory();
|
|
67
82
|
```
|
|
68
83
|
|
|
69
84
|
## Penggunaan (CLI)
|
|
@@ -2,6 +2,10 @@ import { PostalCodeData } from '../../types.js';
|
|
|
2
2
|
/**
|
|
3
3
|
* Domain model representing a Postal Code entry with its administrative details.
|
|
4
4
|
*/
|
|
5
|
+
/**
|
|
6
|
+
* Represents a single postal code entry with its associated administrative data.
|
|
7
|
+
* This is the core domain model returned by all search operations.
|
|
8
|
+
*/
|
|
5
9
|
export declare class PostalCode {
|
|
6
10
|
readonly postalCode: string;
|
|
7
11
|
readonly province: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PostalCode.d.ts","sourceRoot":"","sources":["../../../../src/domain/models/PostalCode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;GAEG;AACH,qBAAa,UAAU;IACrB,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,SAAgB,YAAY,EAAE,MAAM,CAAC;IACrC,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,SAAgB,YAAY,EAAE,MAAM,CAAC;IACrC,SAAgB,OAAO,EAAE,MAAM,CAAC;IAChC,SAAgB,WAAW,EAAE,MAAM,CAAC;gBAExB,IAAI,EAAE,cAAc;IAchC,OAAO,CAAC,QAAQ;IAShB;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO;IAMjE;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAW/D;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO;IAIpC;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIlC;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIlB;;OAEG;IACH,MAAM,IAAI,cAAc;CAazB"}
|
|
1
|
+
{"version":3,"file":"PostalCode.d.ts","sourceRoot":"","sources":["../../../../src/domain/models/PostalCode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;GAEG;AACH;;;GAGG;AACH,qBAAa,UAAU;IACrB,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,SAAgB,YAAY,EAAE,MAAM,CAAC;IACrC,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,SAAgB,YAAY,EAAE,MAAM,CAAC;IACrC,SAAgB,OAAO,EAAE,MAAM,CAAC;IAChC,SAAgB,WAAW,EAAE,MAAM,CAAC;gBAExB,IAAI,EAAE,cAAc;IAchC,OAAO,CAAC,QAAQ;IAShB;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO;IAMjE;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAW/D;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO;IAIpC;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIlC;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIlB;;OAEG;IACH,MAAM,IAAI,cAAc;CAazB"}
|
|
@@ -4,6 +4,10 @@ exports.PostalCode = void 0;
|
|
|
4
4
|
/**
|
|
5
5
|
* Domain model representing a Postal Code entry with its administrative details.
|
|
6
6
|
*/
|
|
7
|
+
/**
|
|
8
|
+
* Represents a single postal code entry with its associated administrative data.
|
|
9
|
+
* This is the core domain model returned by all search operations.
|
|
10
|
+
*/
|
|
7
11
|
class PostalCode {
|
|
8
12
|
constructor(data) {
|
|
9
13
|
this.postalCode = data.postalCode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PostalCode.js","sourceRoot":"","sources":["../../../../src/domain/models/PostalCode.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PostalCode.js","sourceRoot":"","sources":["../../../../src/domain/models/PostalCode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { PostalCodeData } from '../../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* An interface for any class that can provide postal code data.
|
|
4
|
+
* This allows the repository to be decoupled from the data source.
|
|
5
|
+
*/
|
|
6
|
+
export interface DataProvider {
|
|
7
|
+
/**
|
|
8
|
+
* Retrieves all postal code data.
|
|
9
|
+
*/
|
|
10
|
+
getAll(): Promise<PostalCodeData[]>;
|
|
11
|
+
/**
|
|
12
|
+
* Retrieves postal code data for a specific province.
|
|
13
|
+
* @param provinceCode The 2-digit province code.
|
|
14
|
+
*/
|
|
15
|
+
getByProvince(provinceCode: string): Promise<PostalCodeData[]>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=DataProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataProvider.d.ts","sourceRoot":"","sources":["../../../../src/domain/repositories/DataProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,MAAM,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAEpC;;;OAGG;IACH,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;CAChE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataProvider.js","sourceRoot":"","sources":["../../../../src/domain/repositories/DataProvider.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { DataProvider } from '../../domain/repositories/DataProvider.js';
|
|
2
|
+
import { PostalCodeData } from '../../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* A DataProvider implementation that loads data from the internal TypeScript files.
|
|
5
|
+
*/
|
|
6
|
+
export declare class TsDataProvider implements DataProvider {
|
|
7
|
+
private provinceCache;
|
|
8
|
+
private provinceLoadPromises;
|
|
9
|
+
getByProvince(provinceCode: string): Promise<PostalCodeData[]>;
|
|
10
|
+
getAll(): Promise<PostalCodeData[]>;
|
|
11
|
+
clearCache(): void;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=TsDataProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TsDataProvider.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/data-providers/TsDataProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGhD;;GAEG;AACH,qBAAa,cAAe,YAAW,YAAY;IACjD,OAAO,CAAC,aAAa,CAA4C;IACjE,OAAO,CAAC,oBAAoB,CAAqD;IAE3E,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IA+B9D,MAAM,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAYzC,UAAU,IAAI,IAAI;CAInB"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TsDataProvider = void 0;
|
|
4
|
+
const index_js_1 = require("../../data/index.js");
|
|
5
|
+
/**
|
|
6
|
+
* A DataProvider implementation that loads data from the internal TypeScript files.
|
|
7
|
+
*/
|
|
8
|
+
class TsDataProvider {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.provinceCache = new Map();
|
|
11
|
+
this.provinceLoadPromises = new Map();
|
|
12
|
+
}
|
|
13
|
+
async getByProvince(provinceCode) {
|
|
14
|
+
if (this.provinceCache.has(provinceCode)) {
|
|
15
|
+
return this.provinceCache.get(provinceCode);
|
|
16
|
+
}
|
|
17
|
+
let loadPromise = this.provinceLoadPromises.get(provinceCode);
|
|
18
|
+
if (!loadPromise) {
|
|
19
|
+
loadPromise = (async () => {
|
|
20
|
+
const loader = index_js_1.PROVINCE_LOADERS[provinceCode];
|
|
21
|
+
if (!loader)
|
|
22
|
+
return [];
|
|
23
|
+
try {
|
|
24
|
+
const module = await loader();
|
|
25
|
+
const exportKey = Object.keys(module).find(k => k !== 'default');
|
|
26
|
+
if (!exportKey)
|
|
27
|
+
return [];
|
|
28
|
+
const rawData = module[exportKey];
|
|
29
|
+
this.provinceCache.set(provinceCode, rawData);
|
|
30
|
+
return rawData;
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
finally {
|
|
36
|
+
this.provinceLoadPromises.delete(provinceCode);
|
|
37
|
+
}
|
|
38
|
+
})();
|
|
39
|
+
this.provinceLoadPromises.set(provinceCode, loadPromise);
|
|
40
|
+
}
|
|
41
|
+
return loadPromise;
|
|
42
|
+
}
|
|
43
|
+
async getAll() {
|
|
44
|
+
const codes = Object.keys(index_js_1.PROVINCE_LOADERS);
|
|
45
|
+
const results = await Promise.allSettled(codes.map(code => this.getByProvince(code)));
|
|
46
|
+
return results
|
|
47
|
+
.filter((r) => r.status === 'fulfilled')
|
|
48
|
+
.map(r => r.value)
|
|
49
|
+
.flat();
|
|
50
|
+
}
|
|
51
|
+
clearCache() {
|
|
52
|
+
this.provinceCache.clear();
|
|
53
|
+
this.provinceLoadPromises.clear();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.TsDataProvider = TsDataProvider;
|
|
57
|
+
//# sourceMappingURL=TsDataProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TsDataProvider.js","sourceRoot":"","sources":["../../../../src/infrastructure/data-providers/TsDataProvider.ts"],"names":[],"mappings":";;;AAEA,kDAAuD;AAEvD;;GAEG;AACH,MAAa,cAAc;IAA3B;QACU,kBAAa,GAAkC,IAAI,GAAG,EAAE,CAAC;QACzD,yBAAoB,GAA2C,IAAI,GAAG,EAAE,CAAC;IAiDnF,CAAC;IA/CC,KAAK,CAAC,aAAa,CAAC,YAAoB;QACtC,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YACzC,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAE,CAAC;QAC/C,CAAC;QAED,IAAI,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC9D,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,WAAW,GAAG,CAAC,KAAK,IAAI,EAAE;gBACxB,MAAM,MAAM,GAAG,2BAAgB,CAAC,YAAY,CAAC,CAAC;gBAC9C,IAAI,CAAC,MAAM;oBAAE,OAAO,EAAE,CAAC;gBAEvB,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,MAAM,EAAE,CAAC;oBAC9B,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;oBACjE,IAAI,CAAC,SAAS;wBAAE,OAAO,EAAE,CAAC;oBAE1B,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAqB,CAAC;oBACtD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;oBAC9C,OAAO,OAAO,CAAC;gBACjB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,EAAE,CAAC;gBACZ,CAAC;wBAAS,CAAC;oBACT,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBACjD,CAAC;YACH,CAAC,CAAC,EAAE,CAAC;YACL,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QAC3D,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,MAAM;QACV,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,2BAAgB,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAC5C,CAAC;QAEF,OAAO,OAAO;aACX,MAAM,CAAC,CAAC,CAAC,EAAiD,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC;aACtF,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;aACjB,IAAI,EAAE,CAAC;IACZ,CAAC;IAED,UAAU;QACR,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;IACpC,CAAC;CACF;AAnDD,wCAmDC"}
|
|
@@ -1,24 +1,42 @@
|
|
|
1
1
|
import { PostalCode } from '../../domain/models/PostalCode.js';
|
|
2
2
|
import { SearchableRepository, PostalCodeFilter } from '../../domain/repositories/PostalCodeRepository.js';
|
|
3
|
+
import { DataProvider } from '../../domain/repositories/DataProvider.js';
|
|
4
|
+
/**
|
|
5
|
+
* Configuration for the TsPostalCodeRepository.
|
|
6
|
+
*/
|
|
3
7
|
export interface TsRepoConfig {
|
|
8
|
+
/**
|
|
9
|
+
* If true, enables fuzzy search mode using Fuse.js.
|
|
10
|
+
* @default false
|
|
11
|
+
*/
|
|
4
12
|
useFuzzy?: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* The threshold for fuzzy search sensitivity (0.0 to 1.0).
|
|
15
|
+
* Lower values are more strict.
|
|
16
|
+
* @default 0.4
|
|
17
|
+
*/
|
|
5
18
|
fuzzyThreshold?: number;
|
|
19
|
+
/**
|
|
20
|
+
* Optional custom data provider. Defaults to internal TsDataProvider.
|
|
21
|
+
*/
|
|
22
|
+
dataProvider?: DataProvider;
|
|
6
23
|
}
|
|
7
24
|
/**
|
|
8
|
-
* Implementation of SearchableRepository
|
|
25
|
+
* Implementation of SearchableRepository.
|
|
9
26
|
* Optimized with Flyweight pattern, dynamic imports, and secondary indexing.
|
|
10
27
|
*/
|
|
11
28
|
export declare class TsPostalCodeRepository implements SearchableRepository {
|
|
12
|
-
private provinceCache;
|
|
13
|
-
private provinceLoadPromises;
|
|
14
29
|
private allData;
|
|
15
30
|
private allLoadPromise;
|
|
16
31
|
private postalCodeIndex;
|
|
32
|
+
private invertedIndex;
|
|
33
|
+
private allDataArray;
|
|
17
34
|
private readonly useFuzzy;
|
|
18
35
|
private readonly fuzzyThreshold;
|
|
36
|
+
private readonly dataProvider;
|
|
19
37
|
constructor(config?: TsRepoConfig);
|
|
20
38
|
/**
|
|
21
|
-
* Internal helper to build an index for postal codes.
|
|
39
|
+
* Internal helper to build an index for postal codes and inverted index for text search.
|
|
22
40
|
*/
|
|
23
41
|
private buildIndex;
|
|
24
42
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TsPostalCodeRepository.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/repositories/TsPostalCodeRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,mDAAmD,CAAC;
|
|
1
|
+
{"version":3,"file":"TsPostalCodeRepository.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/repositories/TsPostalCodeRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,mDAAmD,CAAC;AAE3G,OAAO,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AAIzE;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED;;;GAGG;AACH,qBAAa,sBAAuB,YAAW,oBAAoB;IACjE,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,cAAc,CAA0C;IAChE,OAAO,CAAC,eAAe,CAA4C;IACnE,OAAO,CAAC,aAAa,CAAoC;IACzD,OAAO,CAAC,YAAY,CAAwB;IAC5C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;gBAEhC,MAAM,GAAE,YAAiB;IAMrC;;OAEG;IACH,OAAO,CAAC,UAAU;IA4BlB;;OAEG;YACW,YAAY;IAM1B;;OAEG;YACW,eAAe;IAiB7B;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAgDtF;;;OAGG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAqB5E;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE,gBAAgB,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAiB1F;;OAEG;IACH,WAAW,IAAI,IAAI;CAUpB"}
|
|
@@ -5,66 +5,56 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.TsPostalCodeRepository = void 0;
|
|
7
7
|
const PostalCode_js_1 = require("../../domain/models/PostalCode.js");
|
|
8
|
-
const
|
|
8
|
+
const TsDataProvider_js_1 = require("../data-providers/TsDataProvider.js");
|
|
9
9
|
const fuse_js_1 = __importDefault(require("fuse.js"));
|
|
10
10
|
/**
|
|
11
|
-
* Implementation of SearchableRepository
|
|
11
|
+
* Implementation of SearchableRepository.
|
|
12
12
|
* Optimized with Flyweight pattern, dynamic imports, and secondary indexing.
|
|
13
13
|
*/
|
|
14
14
|
class TsPostalCodeRepository {
|
|
15
15
|
constructor(config = {}) {
|
|
16
|
-
this.provinceCache = new Map();
|
|
17
|
-
this.provinceLoadPromises = new Map();
|
|
18
16
|
this.allData = null;
|
|
19
17
|
this.allLoadPromise = null;
|
|
20
18
|
this.postalCodeIndex = new Map();
|
|
19
|
+
this.invertedIndex = new Map();
|
|
20
|
+
this.allDataArray = [];
|
|
21
21
|
this.useFuzzy = config.useFuzzy ?? false;
|
|
22
22
|
this.fuzzyThreshold = config.fuzzyThreshold ?? 0.4;
|
|
23
|
+
this.dataProvider = config.dataProvider ?? new TsDataProvider_js_1.TsDataProvider();
|
|
23
24
|
}
|
|
24
25
|
/**
|
|
25
|
-
* Internal helper to build an index for postal codes.
|
|
26
|
+
* Internal helper to build an index for postal codes and inverted index for text search.
|
|
26
27
|
*/
|
|
27
28
|
buildIndex(data) {
|
|
28
|
-
|
|
29
|
+
const startIndex = this.allDataArray.length;
|
|
30
|
+
data.forEach((item, idx) => {
|
|
31
|
+
const globalIdx = startIndex + idx;
|
|
32
|
+
this.allDataArray.push(item);
|
|
33
|
+
// Postal Code Index
|
|
29
34
|
if (!this.postalCodeIndex.has(item.postalCode)) {
|
|
30
35
|
this.postalCodeIndex.set(item.postalCode, []);
|
|
31
36
|
}
|
|
32
37
|
this.postalCodeIndex.get(item.postalCode).push(item);
|
|
38
|
+
// Inverted Index for text search
|
|
39
|
+
const text = `${item.province} ${item.city} ${item.district} ${item.village}`.toLowerCase();
|
|
40
|
+
const tokens = text.split(/[\s,.-]+/).filter(t => t.length > 0);
|
|
41
|
+
// Use a Set to avoid duplicate tokens for the same document
|
|
42
|
+
const uniqueTokens = new Set(tokens);
|
|
43
|
+
uniqueTokens.forEach(token => {
|
|
44
|
+
if (!this.invertedIndex.has(token)) {
|
|
45
|
+
this.invertedIndex.set(token, []);
|
|
46
|
+
}
|
|
47
|
+
this.invertedIndex.get(token).push(globalIdx);
|
|
48
|
+
});
|
|
33
49
|
});
|
|
34
50
|
}
|
|
35
51
|
/**
|
|
36
52
|
* Internal helper to load data for a specific province.
|
|
37
53
|
*/
|
|
38
54
|
async loadProvince(code) {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
let loadPromise = this.provinceLoadPromises.get(code);
|
|
43
|
-
if (!loadPromise) {
|
|
44
|
-
loadPromise = (async () => {
|
|
45
|
-
const loader = index_js_1.PROVINCE_LOADERS[code];
|
|
46
|
-
if (!loader)
|
|
47
|
-
return [];
|
|
48
|
-
try {
|
|
49
|
-
const module = await loader();
|
|
50
|
-
const exportKey = Object.keys(module).find(k => k !== 'default');
|
|
51
|
-
if (!exportKey)
|
|
52
|
-
return [];
|
|
53
|
-
const rawData = module[exportKey];
|
|
54
|
-
this.provinceCache.set(code, rawData);
|
|
55
|
-
this.buildIndex(rawData);
|
|
56
|
-
return rawData;
|
|
57
|
-
}
|
|
58
|
-
catch (error) {
|
|
59
|
-
return [];
|
|
60
|
-
}
|
|
61
|
-
finally {
|
|
62
|
-
this.provinceLoadPromises.delete(code);
|
|
63
|
-
}
|
|
64
|
-
})();
|
|
65
|
-
this.provinceLoadPromises.set(code, loadPromise);
|
|
66
|
-
}
|
|
67
|
-
return loadPromise;
|
|
55
|
+
const data = await this.dataProvider.getByProvince(code);
|
|
56
|
+
this.buildIndex(data);
|
|
57
|
+
return data;
|
|
68
58
|
}
|
|
69
59
|
/**
|
|
70
60
|
* Internal helper to load all data.
|
|
@@ -75,12 +65,8 @@ class TsPostalCodeRepository {
|
|
|
75
65
|
}
|
|
76
66
|
if (!this.allLoadPromise) {
|
|
77
67
|
this.allLoadPromise = (async () => {
|
|
78
|
-
const
|
|
79
|
-
|
|
80
|
-
const combinedData = results
|
|
81
|
-
.filter((r) => r.status === 'fulfilled')
|
|
82
|
-
.map(r => r.value)
|
|
83
|
-
.flat();
|
|
68
|
+
const combinedData = await this.dataProvider.getAll();
|
|
69
|
+
this.buildIndex(combinedData);
|
|
84
70
|
this.allData = combinedData;
|
|
85
71
|
return combinedData;
|
|
86
72
|
})();
|
|
@@ -104,7 +90,29 @@ class TsPostalCodeRepository {
|
|
|
104
90
|
matches = fuse.search(keywords.join(' ')).map(result => result.item);
|
|
105
91
|
}
|
|
106
92
|
else {
|
|
107
|
-
|
|
93
|
+
// Use Inverted Index for standard search
|
|
94
|
+
const lowerKeywords = keywords.map(k => k.toLowerCase());
|
|
95
|
+
const resultIndices = new Set();
|
|
96
|
+
if (lowerKeywords.length > 0) {
|
|
97
|
+
const firstKeyword = lowerKeywords[0];
|
|
98
|
+
const initialDocs = this.invertedIndex.get(firstKeyword) || [];
|
|
99
|
+
initialDocs.forEach(idx => resultIndices.add(idx));
|
|
100
|
+
for (let i = 1; i < lowerKeywords.length; i++) {
|
|
101
|
+
const keyword = lowerKeywords[i];
|
|
102
|
+
const docsForKeyword = new Set(this.invertedIndex.get(keyword) || []);
|
|
103
|
+
resultIndices.forEach(idx => {
|
|
104
|
+
if (!docsForKeyword.has(idx)) {
|
|
105
|
+
resultIndices.delete(idx);
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
const finalIndices = Array.from(resultIndices);
|
|
111
|
+
matches = finalIndices.map(idx => this.allDataArray[idx]);
|
|
112
|
+
// If provinceCode is provided, we need to filter the results from the global index
|
|
113
|
+
if (provinceCode) {
|
|
114
|
+
matches = matches.filter(m => m.provinceCode === provinceCode);
|
|
115
|
+
}
|
|
108
116
|
}
|
|
109
117
|
// Flyweight: Instantiate PostalCode only for results
|
|
110
118
|
return matches.map(data => new PostalCode_js_1.PostalCode(data));
|
|
@@ -156,11 +164,14 @@ class TsPostalCodeRepository {
|
|
|
156
164
|
* Clear the memory cache.
|
|
157
165
|
*/
|
|
158
166
|
clearMemory() {
|
|
159
|
-
this.provinceCache.clear();
|
|
160
|
-
this.provinceLoadPromises.clear();
|
|
161
167
|
this.postalCodeIndex.clear();
|
|
168
|
+
this.invertedIndex.clear();
|
|
162
169
|
this.allData = null;
|
|
170
|
+
this.allDataArray = [];
|
|
163
171
|
this.allLoadPromise = null;
|
|
172
|
+
if (this.dataProvider instanceof TsDataProvider_js_1.TsDataProvider) {
|
|
173
|
+
this.dataProvider.clearCache();
|
|
174
|
+
}
|
|
164
175
|
}
|
|
165
176
|
}
|
|
166
177
|
exports.TsPostalCodeRepository = TsPostalCodeRepository;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TsPostalCodeRepository.js","sourceRoot":"","sources":["../../../../src/infrastructure/repositories/TsPostalCodeRepository.ts"],"names":[],"mappings":";;;;;;AAAA,qEAA+D;
|
|
1
|
+
{"version":3,"file":"TsPostalCodeRepository.js","sourceRoot":"","sources":["../../../../src/infrastructure/repositories/TsPostalCodeRepository.ts"],"names":[],"mappings":"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"}
|
package/lib/cjs/main.d.ts
CHANGED
|
@@ -8,13 +8,56 @@ export * from './domain/services/Logger.js';
|
|
|
8
8
|
export * from './domain/errors/PostalCodeError.js';
|
|
9
9
|
export * from './application/use-cases/SearchPostalCode.js';
|
|
10
10
|
export { TsPostalCodeRepository, type TsRepoConfig };
|
|
11
|
+
export { TsDataProvider } from './infrastructure/data-providers/TsDataProvider.js';
|
|
11
12
|
export * from './types.js';
|
|
12
|
-
export
|
|
13
|
+
export interface SearchOptions {
|
|
14
|
+
province?: string;
|
|
13
15
|
provinceCode?: string;
|
|
14
16
|
useFuzzy?: boolean;
|
|
15
|
-
}
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Searches for postal codes based on various criteria.
|
|
20
|
+
* This is the primary, recommended function for all search operations.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* // Search by keywords
|
|
24
|
+
* await search(['Gambir', 'Jakarta Pusat']);
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* // Fuzzy search for a typo
|
|
28
|
+
* await search('Gmbir', { useFuzzy: true });
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* // Structured search for a specific village and city
|
|
32
|
+
* await search({ village: 'Gambir', city: 'Jakarta Pusat' });
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* // Search within a specific province by name (more intuitive)
|
|
36
|
+
* await search('Bandung', { province: 'Jawa Barat' });
|
|
37
|
+
*
|
|
38
|
+
* @param keywords - A search term, an array of terms, or a structured filter object.
|
|
39
|
+
* @param options - Configuration for the search, such as province filter or fuzzy mode.
|
|
40
|
+
* @returns A promise that resolves to an array of `PostalCode` instances.
|
|
41
|
+
*/
|
|
42
|
+
export declare function search(keywords: string | string[] | PostalCodeFilter, options?: SearchOptions): Promise<PostalCode[]>;
|
|
16
43
|
/**
|
|
17
|
-
*
|
|
44
|
+
* A quick-access helper to find postal codes by a specific code.
|
|
45
|
+
* This is optimized for searching by a 5-digit postal code or administrative codes.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* // Find by postal code
|
|
49
|
+
* await searchByCode('10110');
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* // Find by village code within a specific province
|
|
53
|
+
* await searchByCode('3171010001', { province: 'DKI Jakarta' });
|
|
54
|
+
*
|
|
55
|
+
* @param code - The code to search for (e.g., '10110').
|
|
56
|
+
* @param options - Optional configuration to narrow down the search by province.
|
|
57
|
+
* @returns A promise that resolves to an array of `PostalCode` instances.
|
|
18
58
|
*/
|
|
19
|
-
export declare function searchByCode(code: string,
|
|
59
|
+
export declare function searchByCode(code: string, options?: {
|
|
60
|
+
province?: string;
|
|
61
|
+
provinceCode?: string;
|
|
62
|
+
}): Promise<PostalCode[]>;
|
|
20
63
|
//# sourceMappingURL=main.d.ts.map
|
package/lib/cjs/main.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,yDAAyD,CAAC;AAE/G,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,+CAA+C,CAAC;AAGjF,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACtB,MAAM,+CAA+C,CAAC;AACvD,cAAc,wCAAwC,CAAC;AACvD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oCAAoC,CAAC;AACnD,cAAc,6CAA6C,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,KAAK,YAAY,EAAE,CAAC;AACrD,
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,yDAAyD,CAAC;AAE/G,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,+CAA+C,CAAC;AAGjF,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACtB,MAAM,+CAA+C,CAAC;AACvD,cAAc,wCAAwC,CAAC;AACvD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oCAAoC,CAAC;AACnD,cAAc,6CAA6C,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,KAAK,YAAY,EAAE,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AACnF,cAAc,YAAY,CAAC;AAW3B,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,MAAM,CAC1B,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,gBAAgB,EAC9C,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,UAAU,EAAE,CAAC,CAgCvB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,GACzD,OAAO,CAAC,UAAU,EAAE,CAAC,CAcvB"}
|
package/lib/cjs/main.js
CHANGED
|
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.TsPostalCodeRepository = void 0;
|
|
17
|
+
exports.TsDataProvider = exports.TsPostalCodeRepository = void 0;
|
|
18
18
|
exports.search = search;
|
|
19
19
|
exports.searchByCode = searchByCode;
|
|
20
20
|
const TsPostalCodeRepository_js_1 = require("./infrastructure/repositories/TsPostalCodeRepository.js");
|
|
@@ -26,13 +26,40 @@ __exportStar(require("./domain/services/PostalCodeMatcher.js"), exports);
|
|
|
26
26
|
__exportStar(require("./domain/services/Logger.js"), exports);
|
|
27
27
|
__exportStar(require("./domain/errors/PostalCodeError.js"), exports);
|
|
28
28
|
__exportStar(require("./application/use-cases/SearchPostalCode.js"), exports);
|
|
29
|
+
var TsDataProvider_js_1 = require("./infrastructure/data-providers/TsDataProvider.js");
|
|
30
|
+
Object.defineProperty(exports, "TsDataProvider", { enumerable: true, get: function () { return TsDataProvider_js_1.TsDataProvider; } });
|
|
29
31
|
__exportStar(require("./types.js"), exports);
|
|
32
|
+
const index_js_1 = require("./data/index.js");
|
|
30
33
|
/**
|
|
31
34
|
* Global helper for quick postal code searching without manual instantiation.
|
|
32
35
|
* Uses the internal TypeScript database with caching.
|
|
33
36
|
*/
|
|
34
37
|
let globalStandardRepo = null;
|
|
35
38
|
let globalFuzzyRepo = null;
|
|
39
|
+
/**
|
|
40
|
+
* Searches for postal codes based on various criteria.
|
|
41
|
+
* This is the primary, recommended function for all search operations.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* // Search by keywords
|
|
45
|
+
* await search(['Gambir', 'Jakarta Pusat']);
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* // Fuzzy search for a typo
|
|
49
|
+
* await search('Gmbir', { useFuzzy: true });
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* // Structured search for a specific village and city
|
|
53
|
+
* await search({ village: 'Gambir', city: 'Jakarta Pusat' });
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* // Search within a specific province by name (more intuitive)
|
|
57
|
+
* await search('Bandung', { province: 'Jawa Barat' });
|
|
58
|
+
*
|
|
59
|
+
* @param keywords - A search term, an array of terms, or a structured filter object.
|
|
60
|
+
* @param options - Configuration for the search, such as province filter or fuzzy mode.
|
|
61
|
+
* @returns A promise that resolves to an array of `PostalCode` instances.
|
|
62
|
+
*/
|
|
36
63
|
async function search(keywords, options = {}) {
|
|
37
64
|
const isFuzzy = !!options.useFuzzy;
|
|
38
65
|
let repo;
|
|
@@ -49,20 +76,44 @@ async function search(keywords, options = {}) {
|
|
|
49
76
|
repo = globalStandardRepo;
|
|
50
77
|
}
|
|
51
78
|
const useCase = new SearchPostalCode_js_1.SearchPostalCode(repo);
|
|
79
|
+
// Resolve province name to code
|
|
80
|
+
let resolvedProvinceCode = options.provinceCode;
|
|
81
|
+
if (options.province && !resolvedProvinceCode) {
|
|
82
|
+
const upperProvince = options.province.toUpperCase().replace(/\s+/g, '_');
|
|
83
|
+
resolvedProvinceCode = index_js_1.PROVINCE_ALIAS_MAP[upperProvince];
|
|
84
|
+
}
|
|
52
85
|
if (typeof keywords === 'object' && !Array.isArray(keywords)) {
|
|
53
|
-
return useCase.executeByFilter(keywords,
|
|
86
|
+
return useCase.executeByFilter(keywords, resolvedProvinceCode);
|
|
54
87
|
}
|
|
55
88
|
const keywordArray = Array.isArray(keywords) ? keywords : [keywords];
|
|
56
|
-
return useCase.execute(keywordArray,
|
|
89
|
+
return useCase.execute(keywordArray, resolvedProvinceCode);
|
|
57
90
|
}
|
|
58
91
|
/**
|
|
59
|
-
*
|
|
92
|
+
* A quick-access helper to find postal codes by a specific code.
|
|
93
|
+
* This is optimized for searching by a 5-digit postal code or administrative codes.
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* // Find by postal code
|
|
97
|
+
* await searchByCode('10110');
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* // Find by village code within a specific province
|
|
101
|
+
* await searchByCode('3171010001', { province: 'DKI Jakarta' });
|
|
102
|
+
*
|
|
103
|
+
* @param code - The code to search for (e.g., '10110').
|
|
104
|
+
* @param options - Optional configuration to narrow down the search by province.
|
|
105
|
+
* @returns A promise that resolves to an array of `PostalCode` instances.
|
|
60
106
|
*/
|
|
61
|
-
async function searchByCode(code,
|
|
107
|
+
async function searchByCode(code, options = {}) {
|
|
62
108
|
if (!globalStandardRepo) {
|
|
63
109
|
globalStandardRepo = new TsPostalCodeRepository_js_1.TsPostalCodeRepository();
|
|
64
110
|
}
|
|
65
111
|
const useCase = new SearchPostalCode_js_1.SearchPostalCode(globalStandardRepo);
|
|
66
|
-
|
|
112
|
+
let resolvedProvinceCode = options.provinceCode;
|
|
113
|
+
if (options.province && !resolvedProvinceCode) {
|
|
114
|
+
const upperProvince = options.province.toUpperCase().replace(/\s+/g, '_');
|
|
115
|
+
resolvedProvinceCode = index_js_1.PROVINCE_ALIAS_MAP[upperProvince];
|
|
116
|
+
}
|
|
117
|
+
return useCase.executeByCode(code, resolvedProvinceCode);
|
|
67
118
|
}
|
|
68
119
|
//# sourceMappingURL=main.js.map
|
package/lib/cjs/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AA4DA,wBAmCC;AAkBD,oCAiBC;AAlID,uGAA+G;AAiBtG,uGAjBA,kDAAsB,OAiBA;AAhB/B,qFAA+E;AAI/E,4BAA4B;AAC5B,gEAA8C;AAO9C,yEAAuD;AACvD,8DAA4C;AAC5C,qEAAmD;AACnD,8EAA4D;AAE5D,uFAAmF;AAA1E,mHAAA,cAAc,OAAA;AACvB,6CAA2B;AAE3B,8CAAqD;AAErD;;;GAGG;AACH,IAAI,kBAAkB,GAAkC,IAAI,CAAC;AAC7D,IAAI,eAAe,GAAkC,IAAI,CAAC;AAQ1D;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACI,KAAK,UAAU,MAAM,CAC1B,QAA8C,EAC9C,UAAyB,EAAE;IAE3B,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IACnC,IAAI,IAA4B,CAAC;IAEjC,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,eAAe,GAAG,IAAI,kDAAsB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,GAAG,eAAe,CAAC;IACzB,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,kBAAkB,GAAG,IAAI,kDAAsB,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,GAAG,kBAAkB,CAAC;IAC5B,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,sCAAgB,CAAC,IAAI,CAAC,CAAC;IAE3C,gCAAgC;IAChC,IAAI,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAAC;IAChD,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC9C,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC1E,oBAAoB,GAAG,6BAAkB,CAAC,aAAa,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7D,OAAO,OAAO,CAAC,eAAe,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAErE,OAAO,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAC;AAC7D,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACI,KAAK,UAAU,YAAY,CAChC,IAAY,EACZ,UAAwD,EAAE;IAE1D,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,kBAAkB,GAAG,IAAI,kDAAsB,EAAE,CAAC;IACpD,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,sCAAgB,CAAC,kBAAkB,CAAC,CAAC;IAEzD,IAAI,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAAC;IAChD,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC9C,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC1E,oBAAoB,GAAG,6BAAkB,CAAC,aAAa,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;AAC3D,CAAC"}
|