@cp949/japanpost-react 1.0.3 → 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/dist/client.d.ts +296 -1
  2. package/dist/client.es.js +493 -1
  3. package/dist/index.d.ts +291 -1
  4. package/dist/index.es.js +512 -281
  5. package/package.json +4 -7
  6. package/dist/src/client.d.ts +0 -7
  7. package/dist/src/client.d.ts.map +0 -1
  8. package/dist/src/components/AddressSearchInput.d.ts +0 -8
  9. package/dist/src/components/AddressSearchInput.d.ts.map +0 -1
  10. package/dist/src/components/PostalCodeInput.d.ts +0 -8
  11. package/dist/src/components/PostalCodeInput.d.ts.map +0 -1
  12. package/dist/src/core/errors.d.ts +0 -11
  13. package/dist/src/core/errors.d.ts.map +0 -1
  14. package/dist/src/core/formatters.d.ts +0 -12
  15. package/dist/src/core/formatters.d.ts.map +0 -1
  16. package/dist/src/core/normalizers.d.ts +0 -7
  17. package/dist/src/core/normalizers.d.ts.map +0 -1
  18. package/dist/src/core/types.d.ts +0 -261
  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/dist/client.d.ts CHANGED
@@ -1 +1,296 @@
1
- export * from "./index";
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ReactNode, ComponentPropsWithoutRef } from 'react';
3
+
4
+ /**
5
+ * `japanpost-react`의 공개 계약과 내부 정규화 계약을 한 곳에 모아 둔 타입 모음이다.
6
+ * 훅, 입력 컴포넌트, data source, minimal-api 연동 예제가 모두 이 정의를 기준으로 맞물리므로
7
+ * 필드 의미를 바꿀 때는 런타임 동작뿐 아니라 외부 사용자의 기대 계약도 함께 고려해야 한다.
8
+ */
9
+ /**
10
+ * 일본우정 API에서 반환되는 원본 주소 레코드 형태.
11
+ * 공개 API 표면에는 직접 노출하지 않고 내부에서만 사용한다.
12
+ */
13
+ type JapanPostApiAddressRecord = {
14
+ zip_code?: string | number | null;
15
+ pref_code?: string | number | null;
16
+ pref_name?: string | null;
17
+ pref_kana?: string | null;
18
+ city_name?: string | null;
19
+ city_kana?: string | null;
20
+ town_name?: string | null;
21
+ town_kana?: string | null;
22
+ block_name?: string | null;
23
+ other_name?: string | null;
24
+ address?: string | null;
25
+ };
26
+ /**
27
+ * 우편번호로 주소를 검색할 때(searchcode) API 응답 형태.
28
+ */
29
+ type JapanPostSearchCodeResponse = {
30
+ addresses?: JapanPostApiAddressRecord[] | null;
31
+ message?: string | null;
32
+ status?: number;
33
+ };
34
+ /**
35
+ * 주소 키워드로 검색할 때(addresszip) API 응답 형태.
36
+ */
37
+ type JapanPostAddressZipResponse = {
38
+ addresses?: JapanPostApiAddressRecord[] | null;
39
+ message?: string | null;
40
+ status?: number;
41
+ };
42
+ type JapanPostApiResponse = JapanPostSearchCodeResponse | JapanPostAddressZipResponse;
43
+ /**
44
+ * minimal-api가 그대로 받는 공개 searchcode 요청 타입이다.
45
+ * pageNumber/rowsPerPage를 노출하는 이유는 라이브러리와 API 예제가 같은 pager 의미 체계를 공유하기 위해서다.
46
+ */
47
+ type JapanPostSearchcodeRequest = {
48
+ postalCode: string;
49
+ pageNumber: number;
50
+ rowsPerPage: number;
51
+ includeParenthesesTown?: boolean | null;
52
+ };
53
+ /**
54
+ * useJapanPostalCode의 공개 검색 입력 타입.
55
+ * 문자열 입력은 기존 호환성을 유지하고, 객체 입력은 pager 옵션을 함께 전달할 수 있게 한다.
56
+ */
57
+ type JapanPostalCodeSearchInput = string | {
58
+ postalCode: string;
59
+ pageNumber?: number;
60
+ rowsPerPage?: number;
61
+ includeParenthesesTown?: boolean | null;
62
+ };
63
+ /**
64
+ * useJapanAddressSearch의 공개 검색 입력 타입.
65
+ * 문자열 입력은 키워드 검색 호환성을 유지하고, 객체 입력은 자유 검색과 구조화 검색 필드를 함께 전달할 수 있게 한다.
66
+ */
67
+ type JapanAddressSearchInput = string | (Omit<JapanPostAddresszipRequest, "pageNumber" | "rowsPerPage"> & {
68
+ pageNumber?: number;
69
+ rowsPerPage?: number;
70
+ });
71
+ /**
72
+ * minimal-api가 그대로 받는 공개 addresszip 요청 타입이다.
73
+ * 자유 검색(addressQuery)뿐 아니라 구조화 검색 필드도 함께 열어 두어
74
+ * 상위 UI가 필요한 만큼만 업스트림 검색 축을 선택적으로 노출할 수 있게 한다.
75
+ */
76
+ type JapanPostAddresszipRequest = {
77
+ addressQuery?: string | null;
78
+ prefCode?: string | null;
79
+ prefName?: string | null;
80
+ prefKana?: string | null;
81
+ prefRoma?: string | null;
82
+ cityCode?: string | null;
83
+ cityName?: string | null;
84
+ cityKana?: string | null;
85
+ cityRoma?: string | null;
86
+ townName?: string | null;
87
+ townKana?: string | null;
88
+ townRoma?: string | null;
89
+ pageNumber: number;
90
+ rowsPerPage: number;
91
+ includeCityDetails?: boolean | null;
92
+ includePrefectureDetails?: boolean | null;
93
+ };
94
+ /**
95
+ * API 응답을 정규화한 후의 중간 주소 레코드 형태.
96
+ * 내부 data source 처리 후 공개 JapanAddress 타입으로 변환되기 전에 사용된다.
97
+ */
98
+ type NormalizedJapanAddressRecord = {
99
+ postalCode: string;
100
+ prefecture: string;
101
+ prefectureKana?: string;
102
+ city: string;
103
+ cityKana?: string;
104
+ town: string;
105
+ townKana?: string;
106
+ detail?: string;
107
+ };
108
+ /**
109
+ * 라이브러리 공개 주소 타입. 훅과 클라이언트가 외부로 반환하는 최종 형태.
110
+ * `address`는 표시 편의를 위한 결합 문자열이고, 나머지 필드는 후처리/재조합이 가능한 구조화 값이다.
111
+ */
112
+ type JapanAddress = {
113
+ postalCode: string;
114
+ prefecture: string;
115
+ prefectureKana?: string;
116
+ city: string;
117
+ cityKana?: string;
118
+ town: string;
119
+ townKana?: string;
120
+ address: string;
121
+ provider: "japan-post";
122
+ };
123
+ /**
124
+ * minimal-api와 라이브러리가 공통으로 사용하는 pager 응답 계약이다.
125
+ * 페이지 기반 UI가 아니더라도 total/page 정보를 유지해 "결과 없음"과 "일부만 조회됨"을 구분할 수 있다.
126
+ */
127
+ type Page<T> = {
128
+ elements: T[];
129
+ totalElements: number;
130
+ pageNumber: number;
131
+ rowsPerPage: number;
132
+ };
133
+ /**
134
+ * 우편번호 조회 결과.
135
+ * 단일 주소만 기대하는 소비자도 있을 수 있지만, 업스트림 계약이 목록 + 페이징이므로 그대로 보존한다.
136
+ */
137
+ type JapanPostalCodeLookupResult = Page<JapanAddress>;
138
+ /**
139
+ * 키워드 주소 검색 결과.
140
+ * postal code 조회와 동일한 pager 형태를 사용해 두 검색 모드를 같은 UI로 렌더링할 수 있게 한다.
141
+ */
142
+ type JapanAddressSearchResult = Page<JapanAddress>;
143
+ /**
144
+ * 라이브러리 전용 오류 코드 목록.
145
+ * 소비자는 message 문자열보다 code를 기준으로 UX를 분기하는 것이 안전하다.
146
+ */
147
+ type JapanAddressErrorCode = "invalid_postal_code" | "invalid_query" | "network_error" | "timeout" | "not_found" | "bad_response" | "data_source_error";
148
+ /**
149
+ * 라이브러리 전용 에러 타입. 훅과 data source 전반에서 일관되게 사용된다.
150
+ * 브라우저/서버/사용자 입력 오류를 모두 같은 형태로 감싸 public contract를 단순화한다.
151
+ */
152
+ type JapanAddressError = Error & {
153
+ name: "JapanAddressError";
154
+ code: JapanAddressErrorCode;
155
+ cause?: unknown;
156
+ status?: number;
157
+ };
158
+ /**
159
+ * data source 요청에 전달할 선택 옵션.
160
+ * 현재는 AbortSignal만 쓰지만, 추후 timeout/metadata가 필요해져도 호출부 시그니처를 크게 흔들지 않기 위한 확장 지점이다.
161
+ */
162
+ type JapanAddressRequestOptions = {
163
+ signal?: AbortSignal;
164
+ };
165
+ /**
166
+ * 주소 데이터를 제공하는 data source 인터페이스.
167
+ * 커스텀 구현체로 교체할 수 있도록 추상화되어 있다.
168
+ * 즉, 훅은 fetch 구현을 모르고 pager 계약과 에러 계약만 신뢰한다.
169
+ */
170
+ type JapanAddressDataSource = {
171
+ lookupPostalCode: (request: JapanPostSearchcodeRequest, options?: JapanAddressRequestOptions) => Promise<Page<JapanAddress>>;
172
+ searchAddress: (request: JapanPostAddresszipRequest, options?: JapanAddressRequestOptions) => Promise<Page<JapanAddress>>;
173
+ };
174
+ /**
175
+ * useJapanPostalCode 훅 옵션.
176
+ * data source 주입 방식으로 브라우저 직접 호출, BFF, mock을 모두 같은 훅으로 다룬다.
177
+ */
178
+ type UseJapanPostalCodeOptions = {
179
+ dataSource: JapanAddressDataSource;
180
+ };
181
+ /**
182
+ * useJapanAddressSearch 훅 옵션.
183
+ * debounce는 UI 입력 빈도를 제어하기 위한 것이며 data source 계약을 바꾸지 않는다.
184
+ */
185
+ type UseJapanAddressSearchOptions = {
186
+ dataSource: JapanAddressDataSource;
187
+ debounceMs?: number;
188
+ };
189
+ /**
190
+ * useJapanAddress 훅 옵션.
191
+ * 통합 훅도 내부적으로는 두 검색 훅을 조합하므로 필요한 옵션만 얇게 위임한다.
192
+ */
193
+ type UseJapanAddressOptions = {
194
+ dataSource: JapanAddressDataSource;
195
+ debounceMs?: number;
196
+ };
197
+ /**
198
+ * 비동기 데이터 로딩 상태를 표현하는 제네릭 타입.
199
+ * 모든 훅이 같은 상태 모양을 공유하면 소비자 컴포넌트가 검색 종류와 무관하게 공통 렌더링 로직을 가질 수 있다.
200
+ */
201
+ type UseAsyncState<T> = {
202
+ loading: boolean;
203
+ data: T | null;
204
+ error: JapanAddressError | null;
205
+ };
206
+ /**
207
+ * useJapanPostalCode 훅의 반환 타입.
208
+ * search는 실패나 취소 시 null을 반환해 UI가 try/catch 없이도 분기할 수 있게 한다.
209
+ */
210
+ type UseJapanPostalCodeResult = UseAsyncState<JapanPostalCodeLookupResult> & {
211
+ cancel: () => void;
212
+ reset: () => void;
213
+ search: (input: JapanPostalCodeSearchInput) => Promise<JapanPostalCodeLookupResult | null>;
214
+ };
215
+ /**
216
+ * useJapanAddressSearch 훅의 반환 타입.
217
+ * debounce 취소와 오류 모두 Promise 결과 관점에서는 null로 귀결될 수 있으므로 호출부는 state와 함께 해석해야 한다.
218
+ */
219
+ type UseJapanAddressSearchResult = UseAsyncState<JapanAddressSearchResult> & {
220
+ cancel: () => void;
221
+ reset: () => void;
222
+ search: (input: JapanAddressSearchInput) => Promise<JapanAddressSearchResult | null>;
223
+ };
224
+ /**
225
+ * useJapanAddress 훅의 반환 타입.
226
+ * data/error는 "현재 활성 검색 모드" 기준 값이며, 두 내부 훅의 상태 전체를 그대로 노출하지는 않는다.
227
+ */
228
+ type UseJapanAddressResult = UseAsyncState<Page<JapanAddress>> & {
229
+ reset: () => void;
230
+ searchByPostalCode: (input: JapanPostalCodeSearchInput) => Promise<JapanPostalCodeLookupResult | null>;
231
+ searchByAddressQuery: (input: JapanAddressSearchInput) => Promise<JapanAddressSearchResult | null>;
232
+ };
233
+ /**
234
+ * 검색 입력 컴포넌트들이 공유하는 공통 props.
235
+ * 제어/비제어 모드를 모두 지원해 폼 라이브러리와 단순 데모 예제를 같은 컴포넌트로 소화한다.
236
+ */
237
+ type BaseTextSearchInputProps = {
238
+ defaultValue?: string;
239
+ value?: string;
240
+ disabled?: boolean;
241
+ label?: ReactNode;
242
+ buttonLabel?: ReactNode;
243
+ inputProps?: Omit<ComponentPropsWithoutRef<"input">, "defaultValue" | "disabled" | "onChange" | "value">;
244
+ buttonProps?: Omit<ComponentPropsWithoutRef<"button">, "children" | "disabled" | "onClick" | "type">;
245
+ };
246
+ /**
247
+ * PostalCodeInput 컴포넌트 props.
248
+ * onSearch는 표시 문자열이 아니라 정규화된 우편번호를 받는다는 점이 핵심 계약이다.
249
+ */
250
+ type PostalCodeInputProps = BaseTextSearchInputProps & {
251
+ onChange?: (postalCode: string) => void;
252
+ onSearch: (postalCode: string) => void;
253
+ };
254
+ /**
255
+ * AddressSearchInput 컴포넌트 props.
256
+ * onSearch에는 trim 처리된 검색어가 전달되어 공백만 다른 입력이 별도 쿼리로 취급되지 않게 한다.
257
+ */
258
+ type AddressSearchInputProps = BaseTextSearchInputProps & {
259
+ onChange?: (query: string) => void;
260
+ onSearch: (query: string) => void;
261
+ };
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 };