@cp949/japanpost-react 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 (33) hide show
  1. package/README.ko.md +27 -1
  2. package/README.md +24 -0
  3. package/dist/{src/core/types.d.ts → client.d.ts} +64 -29
  4. package/dist/client.es.js +495 -0
  5. package/dist/index.d.ts +291 -1
  6. package/dist/index.es.js +512 -459
  7. package/package.json +10 -10
  8. package/dist/index.umd.cjs +0 -6
  9. package/dist/src/components/AddressSearchInput.d.ts +0 -8
  10. package/dist/src/components/AddressSearchInput.d.ts.map +0 -1
  11. package/dist/src/components/PostalCodeInput.d.ts +0 -8
  12. package/dist/src/components/PostalCodeInput.d.ts.map +0 -1
  13. package/dist/src/core/errors.d.ts +0 -11
  14. package/dist/src/core/errors.d.ts.map +0 -1
  15. package/dist/src/core/formatters.d.ts +0 -12
  16. package/dist/src/core/formatters.d.ts.map +0 -1
  17. package/dist/src/core/normalizers.d.ts +0 -7
  18. package/dist/src/core/normalizers.d.ts.map +0 -1
  19. package/dist/src/core/types.d.ts.map +0 -1
  20. package/dist/src/core/validators.d.ts +0 -6
  21. package/dist/src/core/validators.d.ts.map +0 -1
  22. package/dist/src/index.d.ts +0 -11
  23. package/dist/src/index.d.ts.map +0 -1
  24. package/dist/src/react/toJapanAddressError.d.ts +0 -8
  25. package/dist/src/react/toJapanAddressError.d.ts.map +0 -1
  26. package/dist/src/react/useJapanAddress.d.ts +0 -8
  27. package/dist/src/react/useJapanAddress.d.ts.map +0 -1
  28. package/dist/src/react/useJapanAddressSearch.d.ts +0 -7
  29. package/dist/src/react/useJapanAddressSearch.d.ts.map +0 -1
  30. package/dist/src/react/useJapanPostalCode.d.ts +0 -7
  31. package/dist/src/react/useJapanPostalCode.d.ts.map +0 -1
  32. package/dist/src/react/useLatestRequestState.d.ts +0 -23
  33. package/dist/src/react/useLatestRequestState.d.ts.map +0 -1
package/README.ko.md CHANGED
@@ -18,6 +18,28 @@ pnpm add @cp949/japanpost-react
18
18
 
19
19
  - 지원 React 버전: React 18, React 19
20
20
 
21
+ 이 패키지는 ESM으로 배포됩니다. 서버 유틸리티와 공용 타입은
22
+ `@cp949/japanpost-react`에서 가져오고, Next.js App Router에서 훅이나
23
+ headless 입력 컴포넌트는 `@cp949/japanpost-react/client`를 사용하세요.
24
+ `require("@cp949/japanpost-react")`,
25
+ `require("@cp949/japanpost-react/client")`는 지원되지 않으며, CommonJS
26
+ 소비자는 `const pkg = await import("@cp949/japanpost-react");` 같은 ESM
27
+ interop을 사용해야 합니다.
28
+
29
+ ## Next.js
30
+
31
+ Next.js App Router에서 훅이나 headless 입력 컴포넌트를 쓸 때는
32
+ 클라이언트 컴포넌트 안에서 `@cp949/japanpost-react/client` 경로를
33
+ 사용하는 것을 권장합니다. 유틸리티 함수와 공용 타입은 루트 엔트리에서
34
+ 가져오면 됩니다.
35
+
36
+ ```tsx
37
+ "use client";
38
+
39
+ import { PostalCodeInput, useJapanPostalCode } from "@cp949/japanpost-react/client";
40
+ import { normalizeJapanPostalCode, type JapanAddressDataSource } from "@cp949/japanpost-react";
41
+ ```
42
+
21
43
  ## 빠른 시작
22
44
 
23
45
  ```tsx
@@ -157,6 +179,9 @@ export function PostalForm() {
157
179
  성공할 수 있고, `404 -> not_found`는 miss를 오류로 노출하는 백엔드에서만
158
180
  선택적으로 쓰면 됩니다.
159
181
 
182
+ Next.js에서도 `dataSource`는 자체 서버 API를 바라보도록 두고, Japan Post
183
+ 업스트림 자격 증명과 토큰 교환은 브라우저가 아니라 서버에서 처리하세요.
184
+
160
185
  ## Exports
161
186
 
162
187
  - `normalizeJapanPostalCode`
@@ -345,5 +370,6 @@ timeout 메시지는 토큰 발급 단계와 실제 조회 단계 중 어느 쪽
345
370
  ## SSR
346
371
 
347
372
  `dataSource` 구현에서는 서버 측 API를 사용하고, 토큰 교환과 업스트림 서명은
348
- 서버에서만 처리하세요. React 훅과 UI 컴포넌트는 클라이언트 컴포넌트에서
373
+ 서버에서만 처리하세요. Next.js App Router에서는 React 훅과 UI 컴포넌트를
374
+ `@cp949/japanpost-react/client`에서 import해 클라이언트 컴포넌트에서
349
375
  사용하는 것이 안전합니다.
package/README.md CHANGED
@@ -21,6 +21,26 @@ pnpm add @cp949/japanpost-react
21
21
  `packages/japanpost-react`
22
22
  - Demo app in this repository: `apps/demo`
23
23
 
24
+ This package is published as ESM. Keep server utilities and shared types on
25
+ `@cp949/japanpost-react`, and import hooks or headless input components for the
26
+ Next.js App Router from `@cp949/japanpost-react/client`. CommonJS consumers
27
+ must use ESM interop. `require("@cp949/japanpost-react")` and
28
+ `require("@cp949/japanpost-react/client")` are not supported. In CommonJS, use
29
+ ESM interop such as `const pkg = await import("@cp949/japanpost-react");`.
30
+
31
+ ## Next.js
32
+
33
+ When you use hooks or headless input components in the Next.js App Router,
34
+ import them from `@cp949/japanpost-react/client` inside a Client Component.
35
+ Keep utility functions and shared types on the root entry.
36
+
37
+ ```tsx
38
+ "use client";
39
+
40
+ import { PostalCodeInput, useJapanPostalCode } from "@cp949/japanpost-react/client";
41
+ import { normalizeJapanPostalCode, type JapanAddressDataSource } from "@cp949/japanpost-react";
42
+ ```
43
+
24
44
  ## What The Package Provides
25
45
 
26
46
  - Hooks for postal-code lookup and address search:
@@ -163,6 +183,10 @@ The example paths above match this repository's reference backend. In your own
163
183
  app, the backend routes can be different as long as your `dataSource`
164
184
  implementation returns the same public types.
165
185
 
186
+ In Next.js, keep the `dataSource` implementation pointed at your own server-side
187
+ API routes. Do not expose Japan Post credentials or token exchange logic to the
188
+ browser.
189
+
166
190
  ## Core Contract
167
191
 
168
192
  `Page<T>` is the result shape shared by the hooks and the reference backend:
@@ -1,4 +1,6 @@
1
- import { ComponentPropsWithoutRef, ReactNode } from 'react';
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ReactNode, ComponentPropsWithoutRef } from 'react';
3
+
2
4
  /**
3
5
  * `japanpost-react`의 공개 계약과 내부 정규화 계약을 한 곳에 모아 둔 타입 모음이다.
4
6
  * 훅, 입력 컴포넌트, data source, minimal-api 연동 예제가 모두 이 정의를 기준으로 맞물리므로
@@ -8,7 +10,7 @@ import { ComponentPropsWithoutRef, ReactNode } from 'react';
8
10
  * 일본우정 API에서 반환되는 원본 주소 레코드 형태.
9
11
  * 공개 API 표면에는 직접 노출하지 않고 내부에서만 사용한다.
10
12
  */
11
- export type JapanPostApiAddressRecord = {
13
+ type JapanPostApiAddressRecord = {
12
14
  zip_code?: string | number | null;
13
15
  pref_code?: string | number | null;
14
16
  pref_name?: string | null;
@@ -24,7 +26,7 @@ export type JapanPostApiAddressRecord = {
24
26
  /**
25
27
  * 우편번호로 주소를 검색할 때(searchcode) API 응답 형태.
26
28
  */
27
- export type JapanPostSearchCodeResponse = {
29
+ type JapanPostSearchCodeResponse = {
28
30
  addresses?: JapanPostApiAddressRecord[] | null;
29
31
  message?: string | null;
30
32
  status?: number;
@@ -32,17 +34,17 @@ export type JapanPostSearchCodeResponse = {
32
34
  /**
33
35
  * 주소 키워드로 검색할 때(addresszip) API 응답 형태.
34
36
  */
35
- export type JapanPostAddressZipResponse = {
37
+ type JapanPostAddressZipResponse = {
36
38
  addresses?: JapanPostApiAddressRecord[] | null;
37
39
  message?: string | null;
38
40
  status?: number;
39
41
  };
40
- export type JapanPostApiResponse = JapanPostSearchCodeResponse | JapanPostAddressZipResponse;
42
+ type JapanPostApiResponse = JapanPostSearchCodeResponse | JapanPostAddressZipResponse;
41
43
  /**
42
44
  * minimal-api가 그대로 받는 공개 searchcode 요청 타입이다.
43
45
  * pageNumber/rowsPerPage를 노출하는 이유는 라이브러리와 API 예제가 같은 pager 의미 체계를 공유하기 위해서다.
44
46
  */
45
- export type JapanPostSearchcodeRequest = {
47
+ type JapanPostSearchcodeRequest = {
46
48
  postalCode: string;
47
49
  pageNumber: number;
48
50
  rowsPerPage: number;
@@ -52,7 +54,7 @@ export type JapanPostSearchcodeRequest = {
52
54
  * useJapanPostalCode의 공개 검색 입력 타입.
53
55
  * 문자열 입력은 기존 호환성을 유지하고, 객체 입력은 pager 옵션을 함께 전달할 수 있게 한다.
54
56
  */
55
- export type JapanPostalCodeSearchInput = string | {
57
+ type JapanPostalCodeSearchInput = string | {
56
58
  postalCode: string;
57
59
  pageNumber?: number;
58
60
  rowsPerPage?: number;
@@ -62,7 +64,7 @@ export type JapanPostalCodeSearchInput = string | {
62
64
  * useJapanAddressSearch의 공개 검색 입력 타입.
63
65
  * 문자열 입력은 키워드 검색 호환성을 유지하고, 객체 입력은 자유 검색과 구조화 검색 필드를 함께 전달할 수 있게 한다.
64
66
  */
65
- export type JapanAddressSearchInput = string | (Omit<JapanPostAddresszipRequest, "pageNumber" | "rowsPerPage"> & {
67
+ type JapanAddressSearchInput = string | (Omit<JapanPostAddresszipRequest, "pageNumber" | "rowsPerPage"> & {
66
68
  pageNumber?: number;
67
69
  rowsPerPage?: number;
68
70
  });
@@ -71,7 +73,7 @@ export type JapanAddressSearchInput = string | (Omit<JapanPostAddresszipRequest,
71
73
  * 자유 검색(addressQuery)뿐 아니라 구조화 검색 필드도 함께 열어 두어
72
74
  * 상위 UI가 필요한 만큼만 업스트림 검색 축을 선택적으로 노출할 수 있게 한다.
73
75
  */
74
- export type JapanPostAddresszipRequest = {
76
+ type JapanPostAddresszipRequest = {
75
77
  addressQuery?: string | null;
76
78
  prefCode?: string | null;
77
79
  prefName?: string | null;
@@ -93,7 +95,7 @@ export type JapanPostAddresszipRequest = {
93
95
  * API 응답을 정규화한 후의 중간 주소 레코드 형태.
94
96
  * 내부 data source 처리 후 공개 JapanAddress 타입으로 변환되기 전에 사용된다.
95
97
  */
96
- export type NormalizedJapanAddressRecord = {
98
+ type NormalizedJapanAddressRecord = {
97
99
  postalCode: string;
98
100
  prefecture: string;
99
101
  prefectureKana?: string;
@@ -107,7 +109,7 @@ export type NormalizedJapanAddressRecord = {
107
109
  * 라이브러리 공개 주소 타입. 훅과 클라이언트가 외부로 반환하는 최종 형태.
108
110
  * `address`는 표시 편의를 위한 결합 문자열이고, 나머지 필드는 후처리/재조합이 가능한 구조화 값이다.
109
111
  */
110
- export type JapanAddress = {
112
+ type JapanAddress = {
111
113
  postalCode: string;
112
114
  prefecture: string;
113
115
  prefectureKana?: string;
@@ -122,7 +124,7 @@ export type JapanAddress = {
122
124
  * minimal-api와 라이브러리가 공통으로 사용하는 pager 응답 계약이다.
123
125
  * 페이지 기반 UI가 아니더라도 total/page 정보를 유지해 "결과 없음"과 "일부만 조회됨"을 구분할 수 있다.
124
126
  */
125
- export type Page<T> = {
127
+ type Page<T> = {
126
128
  elements: T[];
127
129
  totalElements: number;
128
130
  pageNumber: number;
@@ -132,22 +134,22 @@ export type Page<T> = {
132
134
  * 우편번호 조회 결과.
133
135
  * 단일 주소만 기대하는 소비자도 있을 수 있지만, 업스트림 계약이 목록 + 페이징이므로 그대로 보존한다.
134
136
  */
135
- export type JapanPostalCodeLookupResult = Page<JapanAddress>;
137
+ type JapanPostalCodeLookupResult = Page<JapanAddress>;
136
138
  /**
137
139
  * 키워드 주소 검색 결과.
138
140
  * postal code 조회와 동일한 pager 형태를 사용해 두 검색 모드를 같은 UI로 렌더링할 수 있게 한다.
139
141
  */
140
- export type JapanAddressSearchResult = Page<JapanAddress>;
142
+ type JapanAddressSearchResult = Page<JapanAddress>;
141
143
  /**
142
144
  * 라이브러리 전용 오류 코드 목록.
143
145
  * 소비자는 message 문자열보다 code를 기준으로 UX를 분기하는 것이 안전하다.
144
146
  */
145
- export type JapanAddressErrorCode = "invalid_postal_code" | "invalid_query" | "network_error" | "timeout" | "not_found" | "bad_response" | "data_source_error";
147
+ type JapanAddressErrorCode = "invalid_postal_code" | "invalid_query" | "network_error" | "timeout" | "not_found" | "bad_response" | "data_source_error";
146
148
  /**
147
149
  * 라이브러리 전용 에러 타입. 훅과 data source 전반에서 일관되게 사용된다.
148
150
  * 브라우저/서버/사용자 입력 오류를 모두 같은 형태로 감싸 public contract를 단순화한다.
149
151
  */
150
- export type JapanAddressError = Error & {
152
+ type JapanAddressError = Error & {
151
153
  name: "JapanAddressError";
152
154
  code: JapanAddressErrorCode;
153
155
  cause?: unknown;
@@ -157,7 +159,7 @@ export type JapanAddressError = Error & {
157
159
  * data source 요청에 전달할 선택 옵션.
158
160
  * 현재는 AbortSignal만 쓰지만, 추후 timeout/metadata가 필요해져도 호출부 시그니처를 크게 흔들지 않기 위한 확장 지점이다.
159
161
  */
160
- export type JapanAddressRequestOptions = {
162
+ type JapanAddressRequestOptions = {
161
163
  signal?: AbortSignal;
162
164
  };
163
165
  /**
@@ -165,7 +167,7 @@ export type JapanAddressRequestOptions = {
165
167
  * 커스텀 구현체로 교체할 수 있도록 추상화되어 있다.
166
168
  * 즉, 훅은 fetch 구현을 모르고 pager 계약과 에러 계약만 신뢰한다.
167
169
  */
168
- export type JapanAddressDataSource = {
170
+ type JapanAddressDataSource = {
169
171
  lookupPostalCode: (request: JapanPostSearchcodeRequest, options?: JapanAddressRequestOptions) => Promise<Page<JapanAddress>>;
170
172
  searchAddress: (request: JapanPostAddresszipRequest, options?: JapanAddressRequestOptions) => Promise<Page<JapanAddress>>;
171
173
  };
@@ -173,14 +175,14 @@ export type JapanAddressDataSource = {
173
175
  * useJapanPostalCode 훅 옵션.
174
176
  * data source 주입 방식으로 브라우저 직접 호출, BFF, mock을 모두 같은 훅으로 다룬다.
175
177
  */
176
- export type UseJapanPostalCodeOptions = {
178
+ type UseJapanPostalCodeOptions = {
177
179
  dataSource: JapanAddressDataSource;
178
180
  };
179
181
  /**
180
182
  * useJapanAddressSearch 훅 옵션.
181
183
  * debounce는 UI 입력 빈도를 제어하기 위한 것이며 data source 계약을 바꾸지 않는다.
182
184
  */
183
- export type UseJapanAddressSearchOptions = {
185
+ type UseJapanAddressSearchOptions = {
184
186
  dataSource: JapanAddressDataSource;
185
187
  debounceMs?: number;
186
188
  };
@@ -188,7 +190,7 @@ export type UseJapanAddressSearchOptions = {
188
190
  * useJapanAddress 훅 옵션.
189
191
  * 통합 훅도 내부적으로는 두 검색 훅을 조합하므로 필요한 옵션만 얇게 위임한다.
190
192
  */
191
- export type UseJapanAddressOptions = {
193
+ type UseJapanAddressOptions = {
192
194
  dataSource: JapanAddressDataSource;
193
195
  debounceMs?: number;
194
196
  };
@@ -196,7 +198,7 @@ export type UseJapanAddressOptions = {
196
198
  * 비동기 데이터 로딩 상태를 표현하는 제네릭 타입.
197
199
  * 모든 훅이 같은 상태 모양을 공유하면 소비자 컴포넌트가 검색 종류와 무관하게 공통 렌더링 로직을 가질 수 있다.
198
200
  */
199
- export type UseAsyncState<T> = {
201
+ type UseAsyncState<T> = {
200
202
  loading: boolean;
201
203
  data: T | null;
202
204
  error: JapanAddressError | null;
@@ -205,7 +207,7 @@ export type UseAsyncState<T> = {
205
207
  * useJapanPostalCode 훅의 반환 타입.
206
208
  * search는 실패나 취소 시 null을 반환해 UI가 try/catch 없이도 분기할 수 있게 한다.
207
209
  */
208
- export type UseJapanPostalCodeResult = UseAsyncState<JapanPostalCodeLookupResult> & {
210
+ type UseJapanPostalCodeResult = UseAsyncState<JapanPostalCodeLookupResult> & {
209
211
  cancel: () => void;
210
212
  reset: () => void;
211
213
  search: (input: JapanPostalCodeSearchInput) => Promise<JapanPostalCodeLookupResult | null>;
@@ -214,7 +216,7 @@ export type UseJapanPostalCodeResult = UseAsyncState<JapanPostalCodeLookupResult
214
216
  * useJapanAddressSearch 훅의 반환 타입.
215
217
  * debounce 취소와 오류 모두 Promise 결과 관점에서는 null로 귀결될 수 있으므로 호출부는 state와 함께 해석해야 한다.
216
218
  */
217
- export type UseJapanAddressSearchResult = UseAsyncState<JapanAddressSearchResult> & {
219
+ type UseJapanAddressSearchResult = UseAsyncState<JapanAddressSearchResult> & {
218
220
  cancel: () => void;
219
221
  reset: () => void;
220
222
  search: (input: JapanAddressSearchInput) => Promise<JapanAddressSearchResult | null>;
@@ -223,7 +225,7 @@ export type UseJapanAddressSearchResult = UseAsyncState<JapanAddressSearchResult
223
225
  * useJapanAddress 훅의 반환 타입.
224
226
  * data/error는 "현재 활성 검색 모드" 기준 값이며, 두 내부 훅의 상태 전체를 그대로 노출하지는 않는다.
225
227
  */
226
- export type UseJapanAddressResult = UseAsyncState<Page<JapanAddress>> & {
228
+ type UseJapanAddressResult = UseAsyncState<Page<JapanAddress>> & {
227
229
  reset: () => void;
228
230
  searchByPostalCode: (input: JapanPostalCodeSearchInput) => Promise<JapanPostalCodeLookupResult | null>;
229
231
  searchByAddressQuery: (input: JapanAddressSearchInput) => Promise<JapanAddressSearchResult | null>;
@@ -245,7 +247,7 @@ type BaseTextSearchInputProps = {
245
247
  * PostalCodeInput 컴포넌트 props.
246
248
  * onSearch는 표시 문자열이 아니라 정규화된 우편번호를 받는다는 점이 핵심 계약이다.
247
249
  */
248
- export type PostalCodeInputProps = BaseTextSearchInputProps & {
250
+ type PostalCodeInputProps = BaseTextSearchInputProps & {
249
251
  onChange?: (postalCode: string) => void;
250
252
  onSearch: (postalCode: string) => void;
251
253
  };
@@ -253,9 +255,42 @@ export type PostalCodeInputProps = BaseTextSearchInputProps & {
253
255
  * AddressSearchInput 컴포넌트 props.
254
256
  * onSearch에는 trim 처리된 검색어가 전달되어 공백만 다른 입력이 별도 쿼리로 취급되지 않게 한다.
255
257
  */
256
- export type AddressSearchInputProps = BaseTextSearchInputProps & {
258
+ type AddressSearchInputProps = BaseTextSearchInputProps & {
257
259
  onChange?: (query: string) => void;
258
260
  onSearch: (query: string) => void;
259
261
  };
260
- export {};
261
- //# sourceMappingURL=types.d.ts.map
262
+
263
+ /**
264
+ * 스타일 의존성이 없는 최소한의 주소 키워드 검색 입력 컴포넌트.
265
+ * value를 전달하면 제어 모드, 전달하지 않으면 비제어 모드로 동작한다.
266
+ * 검색 시 trim 처리를 내부에서 수행해 공백만 다른 입력이 별도 쿼리로 번지지 않게 한다.
267
+ */
268
+ declare function AddressSearchInput({ defaultValue, value, disabled, label, buttonLabel, inputProps, buttonProps, onChange, onSearch, }: AddressSearchInputProps): react_jsx_runtime.JSX.Element;
269
+
270
+ /**
271
+ * 스타일 의존성이 없는 최소한의 우편번호 입력 컴포넌트.
272
+ * value를 전달하면 제어 모드, 전달하지 않으면 비제어 모드로 동작한다.
273
+ * 제출 시에는 표시 형식이 아니라 정규화된 숫자 문자열을 콜백에 넘기는 것이 핵심 계약이다.
274
+ */
275
+ declare function PostalCodeInput({ defaultValue, value, disabled, label, buttonLabel, inputProps, buttonProps, onChange, onSearch, }: PostalCodeInputProps): react_jsx_runtime.JSX.Element;
276
+
277
+ /**
278
+ * 우편번호 조회와 키워드 주소 검색을 하나의 인터페이스로 제공하는 통합 훅.
279
+ * 두 검색 모드가 공유하는 data source를 내부에서 재사용하고,
280
+ * 마지막으로 실행된 검색 종류만 외부에 노출해 두 결과가 섞이지 않도록 한다.
281
+ */
282
+ declare function useJapanAddress(options: UseJapanAddressOptions): UseJapanAddressResult;
283
+
284
+ /**
285
+ * 자유 형식 키워드로 일본 주소를 검색하는 훅.
286
+ * 디바운스를 지원하며 loading / data / error 상태와 search / reset 함수를 제공한다.
287
+ */
288
+ declare function useJapanAddressSearch(options: UseJapanAddressSearchOptions): UseJapanAddressSearchResult;
289
+
290
+ /**
291
+ * 일본 우편번호로 주소를 조회하는 훅.
292
+ * loading / data / error 상태와 search / reset 함수를 제공한다.
293
+ */
294
+ declare function useJapanPostalCode(options: UseJapanPostalCodeOptions): UseJapanPostalCodeResult;
295
+
296
+ export { AddressSearchInput, type AddressSearchInputProps, type JapanAddress, type JapanAddressDataSource, type JapanAddressError, type JapanAddressErrorCode, type JapanAddressRequestOptions, type JapanAddressSearchInput, type JapanAddressSearchResult, type JapanPostAddressZipResponse, type JapanPostAddresszipRequest, type JapanPostApiAddressRecord, type JapanPostApiResponse, type JapanPostSearchCodeResponse, type JapanPostSearchcodeRequest, type JapanPostalCodeLookupResult, type JapanPostalCodeSearchInput, type NormalizedJapanAddressRecord, type Page, PostalCodeInput, type PostalCodeInputProps, type UseAsyncState, type UseJapanAddressOptions, type UseJapanAddressResult, type UseJapanAddressSearchOptions, type UseJapanAddressSearchResult, type UseJapanPostalCodeOptions, type UseJapanPostalCodeResult, useJapanAddress, useJapanAddressSearch, useJapanPostalCode };