@cp949/japanpost-react 1.0.1 → 1.0.3
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.ko.md +89 -23
- package/README.md +231 -191
- package/dist/client.d.ts +1 -0
- package/dist/client.es.js +3 -0
- package/dist/index.d.ts +1 -11
- package/dist/index.es.js +156 -290
- package/dist/src/client.d.ts +7 -0
- package/dist/src/client.d.ts.map +1 -0
- package/dist/src/components/AddressSearchInput.d.ts.map +1 -0
- package/dist/src/components/PostalCodeInput.d.ts.map +1 -0
- package/dist/src/core/errors.d.ts.map +1 -0
- package/dist/src/core/formatters.d.ts.map +1 -0
- package/dist/src/core/normalizers.d.ts.map +1 -0
- package/dist/{core → src/core}/types.d.ts +27 -7
- package/dist/src/core/types.d.ts.map +1 -0
- package/dist/src/core/validators.d.ts.map +1 -0
- package/dist/src/index.d.ts +11 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/react/toJapanAddressError.d.ts.map +1 -0
- package/dist/src/react/useJapanAddress.d.ts.map +1 -0
- package/dist/src/react/useJapanAddressSearch.d.ts.map +1 -0
- package/dist/src/react/useJapanPostalCode.d.ts.map +1 -0
- package/dist/{react → src/react}/useLatestRequestState.d.ts +1 -0
- package/dist/src/react/useLatestRequestState.d.ts.map +1 -0
- package/package.json +11 -8
- package/dist/components/AddressSearchInput.d.ts.map +0 -1
- package/dist/components/PostalCodeInput.d.ts.map +0 -1
- package/dist/core/errors.d.ts.map +0 -1
- package/dist/core/formatters.d.ts.map +0 -1
- package/dist/core/normalizers.d.ts.map +0 -1
- package/dist/core/types.d.ts.map +0 -1
- package/dist/core/validators.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.umd.cjs +0 -6
- package/dist/react/toJapanAddressError.d.ts.map +0 -1
- package/dist/react/useJapanAddress.d.ts.map +0 -1
- package/dist/react/useJapanAddressSearch.d.ts.map +0 -1
- package/dist/react/useJapanPostalCode.d.ts.map +0 -1
- package/dist/react/useLatestRequestState.d.ts.map +0 -1
- /package/dist/{components → src/components}/AddressSearchInput.d.ts +0 -0
- /package/dist/{components → src/components}/PostalCodeInput.d.ts +0 -0
- /package/dist/{core → src/core}/errors.d.ts +0 -0
- /package/dist/{core → src/core}/formatters.d.ts +0 -0
- /package/dist/{core → src/core}/normalizers.d.ts +0 -0
- /package/dist/{core → src/core}/validators.d.ts +0 -0
- /package/dist/{react → src/react}/toJapanAddressError.d.ts +0 -0
- /package/dist/{react → src/react}/useJapanAddress.d.ts +0 -0
- /package/dist/{react → src/react}/useJapanAddressSearch.d.ts +0 -0
- /package/dist/{react → src/react}/useJapanPostalCode.d.ts +0 -0
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`
|
|
@@ -169,8 +194,10 @@ export function PostalForm() {
|
|
|
169
194
|
- `useJapanAddress`
|
|
170
195
|
- `PostalCodeInput`
|
|
171
196
|
- `AddressSearchInput`
|
|
172
|
-
- `JapanAddress`, `JapanAddressDataSource`, `
|
|
173
|
-
`
|
|
197
|
+
- `JapanAddress`, `JapanAddressDataSource`, `JapanPostalCodeSearchInput`,
|
|
198
|
+
`JapanAddressSearchInput`, `JapanPostSearchcodeRequest`,
|
|
199
|
+
`JapanPostAddresszipRequest`, `Page`를 포함한
|
|
200
|
+
공개 타입
|
|
174
201
|
- 요청 옵션 타입: `JapanAddressRequestOptions`
|
|
175
202
|
|
|
176
203
|
## 유틸리티 메모
|
|
@@ -182,56 +209,94 @@ export function PostalForm() {
|
|
|
182
209
|
|
|
183
210
|
### useJapanPostalCode
|
|
184
211
|
|
|
185
|
-
우편번호로 주소를 조회합니다.
|
|
186
|
-
prefix 검색으로 동작합니다.
|
|
212
|
+
우편번호로 주소를 조회합니다. 문자열 입력과 구조화된 요청 입력을 모두
|
|
213
|
+
받을 수 있고, `3~6자리` 입력일 때는 prefix 검색으로 동작합니다.
|
|
187
214
|
|
|
188
215
|
```tsx
|
|
189
|
-
const { loading, data, error, search, reset } = useJapanPostalCode({
|
|
216
|
+
const { loading, data, error, search, cancel, reset } = useJapanPostalCode({
|
|
190
217
|
dataSource,
|
|
191
218
|
});
|
|
192
219
|
```
|
|
193
220
|
|
|
221
|
+
```tsx
|
|
222
|
+
void search("1000001");
|
|
223
|
+
void search({
|
|
224
|
+
postalCode: "1000001",
|
|
225
|
+
pageNumber: 1,
|
|
226
|
+
rowsPerPage: 10,
|
|
227
|
+
includeParenthesesTown: true,
|
|
228
|
+
});
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
`cancel()`은 진행 중인 조회를 중단하고 현재 data/error 상태는 그대로 유지합니다.
|
|
232
|
+
`reset()`은 `cancel()`을 호출한 뒤 data/error까지 비워 훅을 idle 상태로
|
|
233
|
+
되돌립니다.
|
|
234
|
+
|
|
194
235
|
### useJapanAddressSearch
|
|
195
236
|
|
|
196
|
-
자유 형식
|
|
237
|
+
자유 형식 키워드 또는 구조화된 필드로 주소를 검색하며 `debounceMs`를 지원합니다.
|
|
197
238
|
|
|
198
239
|
```tsx
|
|
199
|
-
const { loading, data, error, search, reset } = useJapanAddressSearch({
|
|
240
|
+
const { loading, data, error, search, cancel, reset } = useJapanAddressSearch({
|
|
200
241
|
dataSource,
|
|
201
242
|
debounceMs: 300,
|
|
202
243
|
});
|
|
203
244
|
```
|
|
204
245
|
|
|
246
|
+
```tsx
|
|
247
|
+
void search("Tokyo");
|
|
248
|
+
void search({
|
|
249
|
+
addressQuery: "Tokyo",
|
|
250
|
+
pageNumber: 1,
|
|
251
|
+
rowsPerPage: 10,
|
|
252
|
+
includeCityDetails: true,
|
|
253
|
+
});
|
|
254
|
+
void search({
|
|
255
|
+
prefName: "東京都",
|
|
256
|
+
cityName: "千代田区",
|
|
257
|
+
});
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
`search("Tokyo")`는 `addressQuery` 검색의 축약형입니다. 구조화된 필드는
|
|
261
|
+
`addressQuery` 없이도 사용할 수 있어서, 도도부현/시/동 단위로만 검색하고 싶을 때
|
|
262
|
+
유용합니다.
|
|
263
|
+
|
|
205
264
|
이 훅은 빈 검색어에 대해 여전히 클라이언트 선제 검증을 수행하고, 요청을 보내기
|
|
206
265
|
전에 `invalid_query`를 반환합니다. 이 검증은 UX 보조 장치이며 서버 검증이나
|
|
207
266
|
서버 계약 처리를 대체하지 않습니다.
|
|
208
267
|
|
|
268
|
+
`cancel()`은 진행 중인 요청이나 대기 중인 debounce 타이머를 중단하고,
|
|
269
|
+
현재 data/error 상태는 그대로 유지합니다. `reset()`은 `cancel()`을 호출한 뒤
|
|
270
|
+
data와 error까지 비워 훅을 idle 상태로 되돌립니다.
|
|
271
|
+
|
|
209
272
|
### useJapanAddress
|
|
210
273
|
|
|
211
|
-
우편번호 조회와
|
|
274
|
+
우편번호 조회와 주소 질의 검색을 하나의 훅으로 합칩니다.
|
|
212
275
|
|
|
213
276
|
```tsx
|
|
214
|
-
const { loading, data, error, searchByPostalCode,
|
|
277
|
+
const { loading, data, error, searchByPostalCode, searchByAddressQuery, reset } =
|
|
215
278
|
useJapanAddress({ dataSource, debounceMs: 300 });
|
|
216
279
|
```
|
|
217
280
|
|
|
218
281
|
모든 훅은 런타임에서 `dataSource`가 필요합니다.
|
|
219
282
|
|
|
220
|
-
|
|
283
|
+
`useJapanPostalCode().search`, `useJapanAddressSearch().search`,
|
|
284
|
+
`useJapanAddress`의 편의 메서드는 모두 같은 공개 검색 입력 타입을 받습니다.
|
|
221
285
|
|
|
222
|
-
- `useJapanPostalCode().search(
|
|
223
|
-
- `useJapanAddressSearch().search(
|
|
224
|
-
- `useJapanAddress().searchByPostalCode(
|
|
225
|
-
- `useJapanAddress().
|
|
286
|
+
- `useJapanPostalCode().search(input: JapanPostalCodeSearchInput)`
|
|
287
|
+
- `useJapanAddressSearch().search(input: JapanAddressSearchInput)`
|
|
288
|
+
- `useJapanAddress().searchByPostalCode(input: JapanPostalCodeSearchInput)`
|
|
289
|
+
- `useJapanAddress().searchByAddressQuery(input: JapanAddressSearchInput)`
|
|
226
290
|
|
|
227
291
|
대신 훅 내부에서 `dataSource` 호출 전에 request object를 조립합니다.
|
|
228
292
|
|
|
229
|
-
- 우편번호 조회: `{
|
|
230
|
-
- 주소 검색: `{
|
|
293
|
+
- 우편번호 조회: `{ postalCode, pageNumber: 0, rowsPerPage: 100 }`
|
|
294
|
+
- 주소 검색: `{ addressQuery, pageNumber: 0, rowsPerPage: 100 }`
|
|
231
295
|
|
|
232
|
-
`
|
|
233
|
-
|
|
234
|
-
|
|
296
|
+
`useJapanAddressSearch`에서는 `addressQuery`를 생략한 구조화 요청도 가능하므로
|
|
297
|
+
도도부현, 시, 동 필드만으로 검색할 수 있습니다. `includeCityDetails`,
|
|
298
|
+
`includePrefectureDetails` 같은 optional flag는 기본적으로 넣지 않으며,
|
|
299
|
+
필요하면 사용자 data source 구현에서 직접 지정하면 됩니다.
|
|
235
300
|
|
|
236
301
|
## 에러 처리 메모
|
|
237
302
|
|
|
@@ -248,9 +313,9 @@ type JapanAddressRequestOptions = {
|
|
|
248
313
|
};
|
|
249
314
|
```
|
|
250
315
|
|
|
251
|
-
훅은 superseded 요청, `reset()`, unmount 정리 상황에서 이전
|
|
252
|
-
있도록 `signal`을 전달합니다. 백엔드 레이어가 abort를 지원하면
|
|
253
|
-
있습니다.
|
|
316
|
+
훅은 superseded 요청, `cancel()`, `reset()`, unmount 정리 상황에서 이전
|
|
317
|
+
요청을 취소할 수 있도록 `signal`을 전달합니다. 백엔드 레이어가 abort를 지원하면
|
|
318
|
+
그대로 활용할 수 있습니다.
|
|
254
319
|
|
|
255
320
|
권장 에러 코드 매핑:
|
|
256
321
|
|
|
@@ -305,5 +370,6 @@ timeout 메시지는 토큰 발급 단계와 실제 조회 단계 중 어느 쪽
|
|
|
305
370
|
## SSR
|
|
306
371
|
|
|
307
372
|
`dataSource` 구현에서는 서버 측 API를 사용하고, 토큰 교환과 업스트림 서명은
|
|
308
|
-
서버에서만 처리하세요. React 훅과 UI
|
|
373
|
+
서버에서만 처리하세요. Next.js App Router에서는 React 훅과 UI 컴포넌트를
|
|
374
|
+
`@cp949/japanpost-react/client`에서 import해 클라이언트 컴포넌트에서
|
|
309
375
|
사용하는 것이 안전합니다.
|