@hy_ong/zod-kit 0.2.7 → 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-V2WFT5M2.cjs → chunk-7EUHTSMF.cjs} +3 -3
- package/dist/{chunk-MUXYP6IK.js → chunk-ADKXVZHH.js} +3 -3
- 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 -1
- package/dist/taiwan/tel.d.ts +1 -1
- package/dist/taiwan/tel.js +1 -1
- package/package.json +1 -1
- package/src/validators/taiwan/tel.ts +6 -6
- package/tests/taiwan/tel.test.ts +11 -9
|
@@ -11,9 +11,6 @@ var validateTaiwanTel = (value) => {
|
|
|
11
11
|
return false;
|
|
12
12
|
}
|
|
13
13
|
const areaCode4 = cleanValue.substring(0, 4);
|
|
14
|
-
if (areaCode4 === "0700") {
|
|
15
|
-
return cleanValue.length === 10 && /^0700\d{6}$/.test(cleanValue);
|
|
16
|
-
}
|
|
17
14
|
if (areaCode4 === "0800" || areaCode4 === "0809") {
|
|
18
15
|
return cleanValue.length === 10 && /^080[09]\d{6}$/.test(cleanValue);
|
|
19
16
|
}
|
|
@@ -21,6 +18,9 @@ var validateTaiwanTel = (value) => {
|
|
|
21
18
|
return (cleanValue.length === 9 || cleanValue.length === 10) && /^0836\d{5,6}$/.test(cleanValue);
|
|
22
19
|
}
|
|
23
20
|
const areaCode3 = cleanValue.substring(0, 3);
|
|
21
|
+
if (areaCode3 === "070") {
|
|
22
|
+
return cleanValue.length === 11 && /^070\d{8}$/.test(cleanValue);
|
|
23
|
+
}
|
|
24
24
|
if (areaCode3 === "037") {
|
|
25
25
|
const firstDigit = cleanValue[3];
|
|
26
26
|
if (firstDigit === "0" || firstDigit === "1") {
|
|
@@ -11,9 +11,6 @@ var validateTaiwanTel = (value) => {
|
|
|
11
11
|
return false;
|
|
12
12
|
}
|
|
13
13
|
const areaCode4 = cleanValue.substring(0, 4);
|
|
14
|
-
if (areaCode4 === "0700") {
|
|
15
|
-
return cleanValue.length === 10 && /^0700\d{6}$/.test(cleanValue);
|
|
16
|
-
}
|
|
17
14
|
if (areaCode4 === "0800" || areaCode4 === "0809") {
|
|
18
15
|
return cleanValue.length === 10 && /^080[09]\d{6}$/.test(cleanValue);
|
|
19
16
|
}
|
|
@@ -21,6 +18,9 @@ var validateTaiwanTel = (value) => {
|
|
|
21
18
|
return (cleanValue.length === 9 || cleanValue.length === 10) && /^0836\d{5,6}$/.test(cleanValue);
|
|
22
19
|
}
|
|
23
20
|
const areaCode3 = cleanValue.substring(0, 3);
|
|
21
|
+
if (areaCode3 === "070") {
|
|
22
|
+
return cleanValue.length === 11 && /^070\d{8}$/.test(cleanValue);
|
|
23
|
+
}
|
|
24
24
|
if (areaCode3 === "037") {
|
|
25
25
|
const firstDigit = cleanValue[3];
|
|
26
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,7 +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
|
-
* -
|
|
74
|
+
* - 070: VoIP / Internet Telephony (網路電話) - 8 digits (11 total)
|
|
75
75
|
* - 0800: Toll-free - 6 digits
|
|
76
76
|
* - 0809: Toll-free - 6 digits
|
|
77
77
|
* - 082: Kinmen - 6 digits
|
package/dist/taiwan/tel.d.ts
CHANGED
|
@@ -71,7 +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
|
-
* -
|
|
74
|
+
* - 070: VoIP / Internet Telephony (網路電話) - 8 digits (11 total)
|
|
75
75
|
* - 0800: Toll-free - 6 digits
|
|
76
76
|
* - 0809: Toll-free - 6 digits
|
|
77
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,7 +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
|
-
* -
|
|
78
|
+
* - 070: VoIP / Internet Telephony (網路電話) - 8 digits (11 total)
|
|
79
79
|
* - 0800: Toll-free - 6 digits
|
|
80
80
|
* - 0809: Toll-free - 6 digits
|
|
81
81
|
* - 082: Kinmen - 6 digits
|
|
@@ -102,7 +102,7 @@ const validateTaiwanTel = (value: string): boolean => {
|
|
|
102
102
|
// 06: Tainan - 7 digits
|
|
103
103
|
// 07: Kaohsiung - 7-8 digits
|
|
104
104
|
// 08: Pingtung - 7 digits
|
|
105
|
-
//
|
|
105
|
+
// 070: VoIP / Internet Telephony (網路電話) - 8 digits (11 total)
|
|
106
106
|
// 0800/0809: Toll-free - 6 digits
|
|
107
107
|
// 082: Kinmen - 6 digits
|
|
108
108
|
// 0836: Matsu - 5-6 digits
|
|
@@ -118,10 +118,6 @@ const validateTaiwanTel = (value: string): boolean => {
|
|
|
118
118
|
|
|
119
119
|
// Check 4-digit area codes first
|
|
120
120
|
const areaCode4 = cleanValue.substring(0, 4)
|
|
121
|
-
if (areaCode4 === "0700") {
|
|
122
|
-
// Premium rate (付費語音資訊): 0700 + 6 digits, total 10 digits
|
|
123
|
-
return cleanValue.length === 10 && /^0700\d{6}$/.test(cleanValue)
|
|
124
|
-
}
|
|
125
121
|
if (areaCode4 === "0800" || areaCode4 === "0809") {
|
|
126
122
|
// Toll-free: 0800/0809 + 6 digits, total 10 digits
|
|
127
123
|
return cleanValue.length === 10 && /^080[09]\d{6}$/.test(cleanValue)
|
|
@@ -133,6 +129,10 @@ const validateTaiwanTel = (value: string): boolean => {
|
|
|
133
129
|
|
|
134
130
|
// Check 3-digit area codes
|
|
135
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
|
+
}
|
|
136
136
|
if (areaCode3 === "037") {
|
|
137
137
|
// Miaoli: 037 + 6-7 digits, total 9-10 digits
|
|
138
138
|
// User number must start with 2-9 (not 0 or 1)
|
package/tests/taiwan/tel.test.ts
CHANGED
|
@@ -41,9 +41,9 @@ 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
|
-
//
|
|
45
|
-
expect(schema.parse("
|
|
46
|
-
expect(schema.parse("
|
|
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
47
|
|
|
48
48
|
// Toll-free numbers
|
|
49
49
|
expect(schema.parse("0800123456")).toBe("0800123456") // 0800-123-456 (10 digits)
|
|
@@ -260,9 +260,10 @@ describe("Taiwan twTel(true) validator", () => {
|
|
|
260
260
|
expect(validateTaiwanTel("083621234")).toBe(true) // Matsu 9 digits
|
|
261
261
|
expect(validateTaiwanTel("0836212345")).toBe(true) // Matsu 10 digits
|
|
262
262
|
|
|
263
|
-
//
|
|
264
|
-
expect(validateTaiwanTel("
|
|
265
|
-
expect(validateTaiwanTel("
|
|
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)
|
|
266
267
|
|
|
267
268
|
// Toll-free numbers
|
|
268
269
|
expect(validateTaiwanTel("0800123456")).toBe(true) // 0800
|
|
@@ -288,8 +289,9 @@ describe("Taiwan twTel(true) validator", () => {
|
|
|
288
289
|
expect(validateTaiwanTel("071234567")).toBe(false) // Invalid first digit for 07
|
|
289
290
|
expect(validateTaiwanTel("037134567")).toBe(false) // Invalid first digit for 037
|
|
290
291
|
expect(validateTaiwanTel("081234567")).toBe(false) // Invalid first digit for 08
|
|
291
|
-
expect(validateTaiwanTel("
|
|
292
|
-
expect(validateTaiwanTel("
|
|
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)
|
|
293
295
|
expect(validateTaiwanTel("080012345")).toBe(false) // 0800 too short (9 digits)
|
|
294
296
|
expect(validateTaiwanTel("08001234567")).toBe(false) // 0800 too long (11 digits)
|
|
295
297
|
expect(validateTaiwanTel("0801123456")).toBe(false) // 0801 not valid toll-free prefix
|
|
@@ -390,7 +392,7 @@ describe("Taiwan twTel(true) validator", () => {
|
|
|
390
392
|
{ code: "08", numbers: ["084234567"] }, // Pingtung (9 digits, first digit 4) - from utility test ✓
|
|
391
393
|
{ code: "082", numbers: ["082234567"] }, // Kinmen (9 digits, first digit 2) - from utility test ✓
|
|
392
394
|
{ code: "089", numbers: ["089234567"] }, // Taitung (9 digits, first digit 2) - from utility test ✓
|
|
393
|
-
{ code: "
|
|
395
|
+
{ code: "070", numbers: ["07012345678"] }, // VoIP (11 digits)
|
|
394
396
|
{ code: "0800", numbers: ["0800123456"] }, // Toll-free (10 digits)
|
|
395
397
|
{ code: "0809", numbers: ["0809123456"] }, // Toll-free (10 digits)
|
|
396
398
|
{ code: "0826", numbers: ["082661234"] }, // Wuqiu (9 digits, first digit 6) - from utility test ✓
|