@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.
@@ -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 _chunkV2WFT5M2cjs = require('./chunk-V2WFT5M2.cjs');
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 = _chunkV2WFT5M2cjs.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 = _chunkV2WFT5M2cjs.validateTaiwanTel; exports.validateTimeFormat = _chunkEDTNS2XLcjs.validateTimeFormat;
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
@@ -50,7 +50,7 @@ import {
50
50
  import {
51
51
  twTel,
52
52
  validateTaiwanTel
53
- } from "./chunk-MUXYP6IK.js";
53
+ } from "./chunk-ADKXVZHH.js";
54
54
  import {
55
55
  twFax,
56
56
  validateTaiwanFax
@@ -1,9 +1,9 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
3
 
4
- var _chunkV2WFT5M2cjs = require('../chunk-V2WFT5M2.cjs');
4
+ var _chunk7EUHTSMFcjs = require('../chunk-7EUHTSMF.cjs');
5
5
  require('../chunk-Q7TUNJD4.cjs');
6
6
 
7
7
 
8
8
 
9
- exports.twTel = _chunkV2WFT5M2cjs.twTel; exports.validateTaiwanTel = _chunkV2WFT5M2cjs.validateTaiwanTel;
9
+ exports.twTel = _chunk7EUHTSMFcjs.twTel; exports.validateTaiwanTel = _chunk7EUHTSMFcjs.validateTaiwanTel;
@@ -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
- * - 0700: Premium rate (付費語音資訊) - 6 digits
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
@@ -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
- * - 0700: Premium rate (付費語音資訊) - 6 digits
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
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  twTel,
3
3
  validateTaiwanTel
4
- } from "../chunk-MUXYP6IK.js";
4
+ } from "../chunk-ADKXVZHH.js";
5
5
  import "../chunk-POIDES2L.js";
6
6
  export {
7
7
  twTel,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hy_ong/zod-kit",
3
- "version": "0.2.7",
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
- * - 0700: Premium rate (付費語音資訊) - 6 digits
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
- // 0700: Premium rate (付費語音資訊) - 6 digits
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)
@@ -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
- // Premium rate numbers
45
- expect(schema.parse("0700123456")).toBe("0700123456") // 0700-123-456 (10 digits)
46
- expect(schema.parse("0700-123-456")).toBe("0700-123-456") // with separators
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
- // Premium rate numbers
264
- expect(validateTaiwanTel("0700123456")).toBe(true) // 0700
265
- expect(validateTaiwanTel("0700-123-456")).toBe(true) // 0700 with separators
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("070012345")).toBe(false) // 0700 too short (9 digits)
292
- expect(validateTaiwanTel("07001234567")).toBe(false) // 0700 too long (11 digits)
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: "0700", numbers: ["0700123456"] }, // Premium rate (10 digits)
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 ✓