@hy_ong/zod-kit 0.2.6 → 0.2.8
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/dist/{chunk-VKBNKPFO.cjs → chunk-7EUHTSMF.cjs} +3 -0
- package/dist/{chunk-TRQMRHFM.js → chunk-ADKXVZHH.js} +3 -0
- package/dist/index.cjs +2 -2
- package/dist/index.js +1 -1
- package/dist/taiwan/tel.cjs +2 -2
- package/dist/taiwan/tel.d.cts +1 -0
- package/dist/taiwan/tel.d.ts +1 -0
- package/dist/taiwan/tel.js +1 -1
- package/package.json +1 -1
- package/src/validators/taiwan/tel.ts +6 -0
- package/tests/taiwan/tel.test.ts +13 -0
|
@@ -18,6 +18,9 @@ var validateTaiwanTel = (value) => {
|
|
|
18
18
|
return (cleanValue.length === 9 || cleanValue.length === 10) && /^0836\d{5,6}$/.test(cleanValue);
|
|
19
19
|
}
|
|
20
20
|
const areaCode3 = cleanValue.substring(0, 3);
|
|
21
|
+
if (areaCode3 === "070") {
|
|
22
|
+
return cleanValue.length === 11 && /^070\d{8}$/.test(cleanValue);
|
|
23
|
+
}
|
|
21
24
|
if (areaCode3 === "037") {
|
|
22
25
|
const firstDigit = cleanValue[3];
|
|
23
26
|
if (firstDigit === "0" || firstDigit === "1") {
|
|
@@ -18,6 +18,9 @@ var validateTaiwanTel = (value) => {
|
|
|
18
18
|
return (cleanValue.length === 9 || cleanValue.length === 10) && /^0836\d{5,6}$/.test(cleanValue);
|
|
19
19
|
}
|
|
20
20
|
const areaCode3 = cleanValue.substring(0, 3);
|
|
21
|
+
if (areaCode3 === "070") {
|
|
22
|
+
return cleanValue.length === 11 && /^070\d{8}$/.test(cleanValue);
|
|
23
|
+
}
|
|
21
24
|
if (areaCode3 === "037") {
|
|
22
25
|
const firstDigit = cleanValue[3];
|
|
23
26
|
if (firstDigit === "0" || firstDigit === "1") {
|
package/dist/index.cjs
CHANGED
|
@@ -50,7 +50,7 @@ var _chunkFP4O2ICMcjs = require('./chunk-FP4O2ICM.cjs');
|
|
|
50
50
|
|
|
51
51
|
|
|
52
52
|
|
|
53
|
-
var
|
|
53
|
+
var _chunk7EUHTSMFcjs = require('./chunk-7EUHTSMF.cjs');
|
|
54
54
|
|
|
55
55
|
|
|
56
56
|
|
|
@@ -185,4 +185,4 @@ var _chunkQ7TUNJD4cjs = require('./chunk-Q7TUNJD4.cjs');
|
|
|
185
185
|
|
|
186
186
|
|
|
187
187
|
|
|
188
|
-
exports.DATETIME_PATTERNS = _chunk53EEWALQcjs.DATETIME_PATTERNS; exports.ID_PATTERNS = _chunkJZEF5Q3Wcjs.ID_PATTERNS; exports.TAIWAN_BANK_CODES = _chunkQQWX3ICKcjs.TAIWAN_BANK_CODES; exports.TIME_PATTERNS = _chunkEDTNS2XLcjs.TIME_PATTERNS; exports.VALID_3_DIGIT_PREFIXES = _chunkFP4O2ICMcjs.VALID_3_DIGIT_PREFIXES; exports.boolean = _chunkLNWEJED7cjs.boolean; exports.color = _chunkA2GAEU4Ocjs.color; exports.coordinate = _chunkFEL432I2cjs.coordinate; exports.creditCard = _chunkZCX22PY4cjs.creditCard; exports.date = _chunk4AQB4RSUcjs.date; exports.datetime = _chunk53EEWALQcjs.datetime; exports.detectCardType = _chunkZCX22PY4cjs.detectCardType; exports.detectIdType = _chunkJZEF5Q3Wcjs.detectIdType; exports.email = _chunkH25N5GP6cjs.email; exports.file = _chunkKIUO2HIRcjs.file; exports.getLocale = _chunkQ7TUNJD4cjs.getLocale; exports.id = _chunkJZEF5Q3Wcjs.id; exports.ip = _chunkLXFRQLH4cjs.ip; exports.manyOf = _chunk5U5ERV2Pcjs.manyOf; exports.normalizeDateTimeValue = _chunk53EEWALQcjs.normalizeDateTimeValue; exports.normalizeTime = _chunkEDTNS2XLcjs.normalizeTime; exports.number = _chunkG747FHUZcjs.number; exports.oneOf = _chunk5NBWPAHCcjs.oneOf; exports.parseDateTimeValue = _chunk53EEWALQcjs.parseDateTimeValue; exports.parseTimeToMinutes = _chunkEDTNS2XLcjs.parseTimeToMinutes; exports.password = _chunkQ24GYUTOcjs.password; exports.setLocale = _chunkQ7TUNJD4cjs.setLocale; exports.text = _chunkHZ2WESSLcjs.text; exports.time = _chunkEDTNS2XLcjs.time; exports.twBankAccount = _chunkQQWX3ICKcjs.twBankAccount; exports.twBusinessId = _chunkIWR3H7IHcjs.twBusinessId; exports.twFax = _chunkBZSPJJYTcjs.twFax; exports.twInvoice = _chunkV2KKGSKQcjs.twInvoice; exports.twLicensePlate = _chunkTPXRQT2Hcjs.twLicensePlate; exports.twMobile = _chunkAYCXAJRAcjs.twMobile; exports.twNationalId = _chunkUCPKW43Kcjs.twNationalId; exports.twPassport = _chunk5ZMTAI4Gcjs.twPassport; exports.twPostalCode = _chunkFP4O2ICMcjs.twPostalCode; exports.twTel =
|
|
188
|
+
exports.DATETIME_PATTERNS = _chunk53EEWALQcjs.DATETIME_PATTERNS; exports.ID_PATTERNS = _chunkJZEF5Q3Wcjs.ID_PATTERNS; exports.TAIWAN_BANK_CODES = _chunkQQWX3ICKcjs.TAIWAN_BANK_CODES; exports.TIME_PATTERNS = _chunkEDTNS2XLcjs.TIME_PATTERNS; exports.VALID_3_DIGIT_PREFIXES = _chunkFP4O2ICMcjs.VALID_3_DIGIT_PREFIXES; exports.boolean = _chunkLNWEJED7cjs.boolean; exports.color = _chunkA2GAEU4Ocjs.color; exports.coordinate = _chunkFEL432I2cjs.coordinate; exports.creditCard = _chunkZCX22PY4cjs.creditCard; exports.date = _chunk4AQB4RSUcjs.date; exports.datetime = _chunk53EEWALQcjs.datetime; exports.detectCardType = _chunkZCX22PY4cjs.detectCardType; exports.detectIdType = _chunkJZEF5Q3Wcjs.detectIdType; exports.email = _chunkH25N5GP6cjs.email; exports.file = _chunkKIUO2HIRcjs.file; exports.getLocale = _chunkQ7TUNJD4cjs.getLocale; exports.id = _chunkJZEF5Q3Wcjs.id; exports.ip = _chunkLXFRQLH4cjs.ip; exports.manyOf = _chunk5U5ERV2Pcjs.manyOf; exports.normalizeDateTimeValue = _chunk53EEWALQcjs.normalizeDateTimeValue; exports.normalizeTime = _chunkEDTNS2XLcjs.normalizeTime; exports.number = _chunkG747FHUZcjs.number; exports.oneOf = _chunk5NBWPAHCcjs.oneOf; exports.parseDateTimeValue = _chunk53EEWALQcjs.parseDateTimeValue; exports.parseTimeToMinutes = _chunkEDTNS2XLcjs.parseTimeToMinutes; exports.password = _chunkQ24GYUTOcjs.password; exports.setLocale = _chunkQ7TUNJD4cjs.setLocale; exports.text = _chunkHZ2WESSLcjs.text; exports.time = _chunkEDTNS2XLcjs.time; exports.twBankAccount = _chunkQQWX3ICKcjs.twBankAccount; exports.twBusinessId = _chunkIWR3H7IHcjs.twBusinessId; exports.twFax = _chunkBZSPJJYTcjs.twFax; exports.twInvoice = _chunkV2KKGSKQcjs.twInvoice; exports.twLicensePlate = _chunkTPXRQT2Hcjs.twLicensePlate; exports.twMobile = _chunkAYCXAJRAcjs.twMobile; exports.twNationalId = _chunkUCPKW43Kcjs.twNationalId; exports.twPassport = _chunk5ZMTAI4Gcjs.twPassport; exports.twPostalCode = _chunkFP4O2ICMcjs.twPostalCode; exports.twTel = _chunk7EUHTSMFcjs.twTel; exports.url = _chunkTDEXEIHHcjs.url; exports.validate3DigitPostalCode = _chunkFP4O2ICMcjs.validate3DigitPostalCode; exports.validate5DigitPostalCode = _chunkFP4O2ICMcjs.validate5DigitPostalCode; exports.validate6DigitPostalCode = _chunkFP4O2ICMcjs.validate6DigitPostalCode; exports.validateCitizenId = _chunkUCPKW43Kcjs.validateCitizenId; exports.validateColor = _chunkA2GAEU4Ocjs.validateColor; exports.validateCreditCard = _chunkZCX22PY4cjs.validateCreditCard; exports.validateDateTimeFormat = _chunk53EEWALQcjs.validateDateTimeFormat; exports.validateIPv4 = _chunkLXFRQLH4cjs.validateIPv4; exports.validateIPv6 = _chunkLXFRQLH4cjs.validateIPv6; exports.validateIdType = _chunkJZEF5Q3Wcjs.validateIdType; exports.validateLatitude = _chunkFEL432I2cjs.validateLatitude; exports.validateLongitude = _chunkFEL432I2cjs.validateLongitude; exports.validateNewResidentId = _chunkUCPKW43Kcjs.validateNewResidentId; exports.validateOldResidentId = _chunkUCPKW43Kcjs.validateOldResidentId; exports.validateTaiwanBankAccount = _chunkQQWX3ICKcjs.validateTaiwanBankAccount; exports.validateTaiwanBusinessId = _chunkIWR3H7IHcjs.validateTaiwanBusinessId; exports.validateTaiwanFax = _chunkBZSPJJYTcjs.validateTaiwanFax; exports.validateTaiwanInvoice = _chunkV2KKGSKQcjs.validateTaiwanInvoice; exports.validateTaiwanLicensePlate = _chunkTPXRQT2Hcjs.validateTaiwanLicensePlate; exports.validateTaiwanMobile = _chunkAYCXAJRAcjs.validateTaiwanMobile; exports.validateTaiwanNationalId = _chunkUCPKW43Kcjs.validateTaiwanNationalId; exports.validateTaiwanPassport = _chunk5ZMTAI4Gcjs.validateTaiwanPassport; exports.validateTaiwanPostalCode = _chunkFP4O2ICMcjs.validateTaiwanPostalCode; exports.validateTaiwanTel = _chunk7EUHTSMFcjs.validateTaiwanTel; exports.validateTimeFormat = _chunkEDTNS2XLcjs.validateTimeFormat;
|
package/dist/index.js
CHANGED
package/dist/taiwan/tel.cjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var _chunk7EUHTSMFcjs = require('../chunk-7EUHTSMF.cjs');
|
|
5
5
|
require('../chunk-Q7TUNJD4.cjs');
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
exports.twTel =
|
|
9
|
+
exports.twTel = _chunk7EUHTSMFcjs.twTel; exports.validateTaiwanTel = _chunk7EUHTSMFcjs.validateTaiwanTel;
|
package/dist/taiwan/tel.d.cts
CHANGED
|
@@ -71,6 +71,7 @@ type TwTelSchema<IsRequired extends boolean> = IsRequired extends true ? ZodStri
|
|
|
71
71
|
* - 06: Tainan - 7 digits
|
|
72
72
|
* - 07: Kaohsiung - 7-8 digits
|
|
73
73
|
* - 08: Pingtung - 7 digits
|
|
74
|
+
* - 070: VoIP / Internet Telephony (網路電話) - 8 digits (11 total)
|
|
74
75
|
* - 0800: Toll-free - 6 digits
|
|
75
76
|
* - 0809: Toll-free - 6 digits
|
|
76
77
|
* - 082: Kinmen - 6 digits
|
package/dist/taiwan/tel.d.ts
CHANGED
|
@@ -71,6 +71,7 @@ type TwTelSchema<IsRequired extends boolean> = IsRequired extends true ? ZodStri
|
|
|
71
71
|
* - 06: Tainan - 7 digits
|
|
72
72
|
* - 07: Kaohsiung - 7-8 digits
|
|
73
73
|
* - 08: Pingtung - 7 digits
|
|
74
|
+
* - 070: VoIP / Internet Telephony (網路電話) - 8 digits (11 total)
|
|
74
75
|
* - 0800: Toll-free - 6 digits
|
|
75
76
|
* - 0809: Toll-free - 6 digits
|
|
76
77
|
* - 082: Kinmen - 6 digits
|
package/dist/taiwan/tel.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hy_ong/zod-kit",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.8",
|
|
4
4
|
"description": "A comprehensive TypeScript library providing pre-built Zod validation schemas with full internationalization support for common data types and Taiwan-specific formats",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"zod",
|
|
@@ -75,6 +75,7 @@ export type TwTelSchema<IsRequired extends boolean> = IsRequired extends true ?
|
|
|
75
75
|
* - 06: Tainan - 7 digits
|
|
76
76
|
* - 07: Kaohsiung - 7-8 digits
|
|
77
77
|
* - 08: Pingtung - 7 digits
|
|
78
|
+
* - 070: VoIP / Internet Telephony (網路電話) - 8 digits (11 total)
|
|
78
79
|
* - 0800: Toll-free - 6 digits
|
|
79
80
|
* - 0809: Toll-free - 6 digits
|
|
80
81
|
* - 082: Kinmen - 6 digits
|
|
@@ -101,6 +102,7 @@ const validateTaiwanTel = (value: string): boolean => {
|
|
|
101
102
|
// 06: Tainan - 7 digits
|
|
102
103
|
// 07: Kaohsiung - 7-8 digits
|
|
103
104
|
// 08: Pingtung - 7 digits
|
|
105
|
+
// 070: VoIP / Internet Telephony (網路電話) - 8 digits (11 total)
|
|
104
106
|
// 0800/0809: Toll-free - 6 digits
|
|
105
107
|
// 082: Kinmen - 6 digits
|
|
106
108
|
// 0836: Matsu - 5-6 digits
|
|
@@ -127,6 +129,10 @@ const validateTaiwanTel = (value: string): boolean => {
|
|
|
127
129
|
|
|
128
130
|
// Check 3-digit area codes
|
|
129
131
|
const areaCode3 = cleanValue.substring(0, 3)
|
|
132
|
+
if (areaCode3 === "070") {
|
|
133
|
+
// VoIP / Internet Telephony (網路電話): 070 + 8 digits, total 11 digits
|
|
134
|
+
return cleanValue.length === 11 && /^070\d{8}$/.test(cleanValue)
|
|
135
|
+
}
|
|
130
136
|
if (areaCode3 === "037") {
|
|
131
137
|
// Miaoli: 037 + 6-7 digits, total 9-10 digits
|
|
132
138
|
// User number must start with 2-9 (not 0 or 1)
|
package/tests/taiwan/tel.test.ts
CHANGED
|
@@ -41,6 +41,10 @@ describe("Taiwan twTel(true) validator", () => {
|
|
|
41
41
|
expect(schema.parse("082661234")).toBe("082661234") // 0826-61234 (9 digits, Wuqiu)
|
|
42
42
|
expect(schema.parse("083621234")).toBe("083621234") // 0836-21234 (9 digits, Matsu)
|
|
43
43
|
|
|
44
|
+
// VoIP numbers (070)
|
|
45
|
+
expect(schema.parse("07012345678")).toBe("07012345678") // 070-1234-5678 (11 digits)
|
|
46
|
+
expect(schema.parse("070-1234-5678")).toBe("070-1234-5678") // with separators
|
|
47
|
+
|
|
44
48
|
// Toll-free numbers
|
|
45
49
|
expect(schema.parse("0800123456")).toBe("0800123456") // 0800-123-456 (10 digits)
|
|
46
50
|
expect(schema.parse("0809123456")).toBe("0809123456") // 0809-123-456 (10 digits)
|
|
@@ -256,6 +260,11 @@ describe("Taiwan twTel(true) validator", () => {
|
|
|
256
260
|
expect(validateTaiwanTel("083621234")).toBe(true) // Matsu 9 digits
|
|
257
261
|
expect(validateTaiwanTel("0836212345")).toBe(true) // Matsu 10 digits
|
|
258
262
|
|
|
263
|
+
// VoIP numbers (070)
|
|
264
|
+
expect(validateTaiwanTel("07012345678")).toBe(true) // 070 VoIP (11 digits)
|
|
265
|
+
expect(validateTaiwanTel("070-1234-5678")).toBe(true) // 070 with separators
|
|
266
|
+
expect(validateTaiwanTel("07001234567")).toBe(true) // 070 starting with 0 (valid VoIP)
|
|
267
|
+
|
|
259
268
|
// Toll-free numbers
|
|
260
269
|
expect(validateTaiwanTel("0800123456")).toBe(true) // 0800
|
|
261
270
|
expect(validateTaiwanTel("0809123456")).toBe(true) // 0809
|
|
@@ -280,6 +289,9 @@ describe("Taiwan twTel(true) validator", () => {
|
|
|
280
289
|
expect(validateTaiwanTel("071234567")).toBe(false) // Invalid first digit for 07
|
|
281
290
|
expect(validateTaiwanTel("037134567")).toBe(false) // Invalid first digit for 037
|
|
282
291
|
expect(validateTaiwanTel("081234567")).toBe(false) // Invalid first digit for 08
|
|
292
|
+
expect(validateTaiwanTel("0701234567")).toBe(false) // 070 too short (10 digits)
|
|
293
|
+
expect(validateTaiwanTel("070123456789")).toBe(false) // 070 too long (12 digits)
|
|
294
|
+
expect(validateTaiwanTel("0700123456")).toBe(false) // 070 + 7 digits = 10 digits (too short)
|
|
283
295
|
expect(validateTaiwanTel("080012345")).toBe(false) // 0800 too short (9 digits)
|
|
284
296
|
expect(validateTaiwanTel("08001234567")).toBe(false) // 0800 too long (11 digits)
|
|
285
297
|
expect(validateTaiwanTel("0801123456")).toBe(false) // 0801 not valid toll-free prefix
|
|
@@ -380,6 +392,7 @@ describe("Taiwan twTel(true) validator", () => {
|
|
|
380
392
|
{ code: "08", numbers: ["084234567"] }, // Pingtung (9 digits, first digit 4) - from utility test ✓
|
|
381
393
|
{ code: "082", numbers: ["082234567"] }, // Kinmen (9 digits, first digit 2) - from utility test ✓
|
|
382
394
|
{ code: "089", numbers: ["089234567"] }, // Taitung (9 digits, first digit 2) - from utility test ✓
|
|
395
|
+
{ code: "070", numbers: ["07012345678"] }, // VoIP (11 digits)
|
|
383
396
|
{ code: "0800", numbers: ["0800123456"] }, // Toll-free (10 digits)
|
|
384
397
|
{ code: "0809", numbers: ["0809123456"] }, // Toll-free (10 digits)
|
|
385
398
|
{ code: "0826", numbers: ["082661234"] }, // Wuqiu (9 digits, first digit 6) - from utility test ✓
|