@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.
Files changed (42) hide show
  1. package/README.md +24 -9
  2. package/lib/cjs/domain/models/PostalCode.d.ts +4 -0
  3. package/lib/cjs/domain/models/PostalCode.d.ts.map +1 -1
  4. package/lib/cjs/domain/models/PostalCode.js +4 -0
  5. package/lib/cjs/domain/models/PostalCode.js.map +1 -1
  6. package/lib/cjs/domain/repositories/DataProvider.d.ts +17 -0
  7. package/lib/cjs/domain/repositories/DataProvider.d.ts.map +1 -0
  8. package/lib/cjs/domain/repositories/DataProvider.js +3 -0
  9. package/lib/cjs/domain/repositories/DataProvider.js.map +1 -0
  10. package/lib/cjs/infrastructure/data-providers/TsDataProvider.d.ts +13 -0
  11. package/lib/cjs/infrastructure/data-providers/TsDataProvider.d.ts.map +1 -0
  12. package/lib/cjs/infrastructure/data-providers/TsDataProvider.js +57 -0
  13. package/lib/cjs/infrastructure/data-providers/TsDataProvider.js.map +1 -0
  14. package/lib/cjs/infrastructure/repositories/TsPostalCodeRepository.d.ts +22 -4
  15. package/lib/cjs/infrastructure/repositories/TsPostalCodeRepository.d.ts.map +1 -1
  16. package/lib/cjs/infrastructure/repositories/TsPostalCodeRepository.js +55 -44
  17. package/lib/cjs/infrastructure/repositories/TsPostalCodeRepository.js.map +1 -1
  18. package/lib/cjs/main.d.ts +47 -4
  19. package/lib/cjs/main.d.ts.map +1 -1
  20. package/lib/cjs/main.js +57 -6
  21. package/lib/cjs/main.js.map +1 -1
  22. package/lib/esm/domain/models/PostalCode.d.ts +4 -0
  23. package/lib/esm/domain/models/PostalCode.d.ts.map +1 -1
  24. package/lib/esm/domain/models/PostalCode.js +4 -0
  25. package/lib/esm/domain/models/PostalCode.js.map +1 -1
  26. package/lib/esm/domain/repositories/DataProvider.d.ts +17 -0
  27. package/lib/esm/domain/repositories/DataProvider.d.ts.map +1 -0
  28. package/lib/esm/domain/repositories/DataProvider.js +2 -0
  29. package/lib/esm/domain/repositories/DataProvider.js.map +1 -0
  30. package/lib/esm/infrastructure/data-providers/TsDataProvider.d.ts +13 -0
  31. package/lib/esm/infrastructure/data-providers/TsDataProvider.d.ts.map +1 -0
  32. package/lib/esm/infrastructure/data-providers/TsDataProvider.js +53 -0
  33. package/lib/esm/infrastructure/data-providers/TsDataProvider.js.map +1 -0
  34. package/lib/esm/infrastructure/repositories/TsPostalCodeRepository.d.ts +22 -4
  35. package/lib/esm/infrastructure/repositories/TsPostalCodeRepository.d.ts.map +1 -1
  36. package/lib/esm/infrastructure/repositories/TsPostalCodeRepository.js +55 -44
  37. package/lib/esm/infrastructure/repositories/TsPostalCodeRepository.js.map +1 -1
  38. package/lib/esm/main.d.ts +47 -4
  39. package/lib/esm/main.d.ts.map +1 -1
  40. package/lib/esm/main.js +55 -5
  41. package/lib/esm/main.js.map +1 -1
  42. 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 { TsPostalCodeRepository, SearchPostalCode } from '@damarkuncoro/posindonesia';
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
- const repo = new TsPostalCodeRepository({
58
- useFuzzy: true,
59
- fuzzyThreshold: 0.3
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,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=DataProvider.js.map
@@ -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 using internal TypeScript data.
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;AAK3G,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,qBAAa,sBAAuB,YAAW,oBAAoB;IACjE,OAAO,CAAC,aAAa,CAA4C;IACjE,OAAO,CAAC,oBAAoB,CAAqD;IACjF,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,cAAc,CAA0C;IAChE,OAAO,CAAC,eAAe,CAA4C;IACnE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;gBAE5B,MAAM,GAAE,YAAiB;IAKrC;;OAEG;IACH,OAAO,CAAC,UAAU;IASlB;;OAEG;YACW,YAAY;IAgC1B;;OAEG;YACW,eAAe;IAyB7B;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAsBtF;;;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;CAOpB"}
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 index_js_1 = require("../../data/index.js");
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 using internal TypeScript data.
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
- data.forEach(item => {
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
- if (this.provinceCache.has(code)) {
40
- return this.provinceCache.get(code);
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 codes = Object.keys(index_js_1.PROVINCE_LOADERS);
79
- const results = await Promise.allSettled(codes.map(code => this.loadProvince(code)));
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
- matches = rawData.filter((data) => PostalCode_js_1.PostalCode.matches(data, keywords));
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":"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"}
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 declare function search(keywords: string | string[] | PostalCodeFilter, options?: {
13
+ export interface SearchOptions {
14
+ province?: string;
13
15
  provinceCode?: string;
14
16
  useFuzzy?: boolean;
15
- }): Promise<PostalCode[]>;
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
- * Global helper for quick search by specific code.
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, provinceCode?: string): Promise<PostalCode[]>;
59
+ export declare function searchByCode(code: string, options?: {
60
+ province?: string;
61
+ provinceCode?: string;
62
+ }): Promise<PostalCode[]>;
20
63
  //# sourceMappingURL=main.d.ts.map
@@ -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,cAAc,YAAY,CAAC;AAS3B,wBAAsB,MAAM,CAC1B,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,gBAAgB,EAC9C,OAAO,GAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,GAC1D,OAAO,CAAC,UAAU,EAAE,CAAC,CAyBvB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,UAAU,EAAE,CAAC,CAOvB"}
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, options.provinceCode);
86
+ return useCase.executeByFilter(keywords, resolvedProvinceCode);
54
87
  }
55
88
  const keywordArray = Array.isArray(keywords) ? keywords : [keywords];
56
- return useCase.execute(keywordArray, options.provinceCode);
89
+ return useCase.execute(keywordArray, resolvedProvinceCode);
57
90
  }
58
91
  /**
59
- * Global helper for quick search by specific code.
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, provinceCode) {
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
- return useCase.executeByCode(code, provinceCode);
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
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AA2BA,wBA4BC;AAKD,oCAUC;AAtED,uGAA+G;AAiBtG,uGAjBA,kDAAsB,OAiBA;AAhB/B,qFAA+E;AAI/E,4BAA4B;AAC5B,gEAA8C;AAO9C,yEAAuD;AACvD,8DAA4C;AAC5C,qEAAmD;AACnD,8EAA4D;AAE5D,6CAA2B;AAE3B;;;GAGG;AACH,IAAI,kBAAkB,GAAkC,IAAI,CAAC;AAC7D,IAAI,eAAe,GAAkC,IAAI,CAAC;AAEnD,KAAK,UAAU,MAAM,CAC1B,QAA8C,EAC9C,UAAyD,EAAE;IAE3D,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,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7D,OAAO,OAAO,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,YAAY,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,OAAO,CAAC,YAAY,CAAC,CAAC;AAC7D,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,YAAY,CAChC,IAAY,EACZ,YAAqB;IAErB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,kBAAkB,GAAG,IAAI,kDAAsB,EAAE,CAAC;IACpD,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,sCAAgB,CAAC,kBAAkB,CAAC,CAAC;IACzD,OAAO,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;AACnD,CAAC"}
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"}