@itshackers/utilix 0.0.0-stage → 0.3.0

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 (81) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +304 -3
  3. package/dist/common/index.cjs +102 -0
  4. package/dist/common/index.cjs.map +1 -0
  5. package/dist/common/index.d.cts +58 -0
  6. package/dist/common/index.d.ts +58 -0
  7. package/dist/common/index.js +93 -0
  8. package/dist/common/index.js.map +1 -0
  9. package/dist/date/index.cjs +154 -0
  10. package/dist/date/index.cjs.map +1 -0
  11. package/dist/date/index.d.cts +65 -0
  12. package/dist/date/index.d.ts +65 -0
  13. package/dist/date/index.js +146 -0
  14. package/dist/date/index.js.map +1 -0
  15. package/dist/format/index.cjs +136 -0
  16. package/dist/format/index.cjs.map +1 -0
  17. package/dist/format/index.d.cts +56 -0
  18. package/dist/format/index.d.ts +56 -0
  19. package/dist/format/index.js +130 -0
  20. package/dist/format/index.js.map +1 -0
  21. package/dist/id/index.cjs +66 -0
  22. package/dist/id/index.cjs.map +1 -0
  23. package/dist/id/index.d.cts +19 -0
  24. package/dist/id/index.d.ts +19 -0
  25. package/dist/id/index.js +64 -0
  26. package/dist/id/index.js.map +1 -0
  27. package/dist/index.cjs +906 -0
  28. package/dist/index.cjs.map +1 -0
  29. package/dist/index.d.cts +12 -0
  30. package/dist/index.d.ts +12 -0
  31. package/dist/index.js +853 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/number/index.cjs +107 -0
  34. package/dist/number/index.cjs.map +1 -0
  35. package/dist/number/index.d.cts +90 -0
  36. package/dist/number/index.d.ts +90 -0
  37. package/dist/number/index.js +99 -0
  38. package/dist/number/index.js.map +1 -0
  39. package/dist/password/index.cjs +71 -0
  40. package/dist/password/index.cjs.map +1 -0
  41. package/dist/password/index.d.cts +15 -0
  42. package/dist/password/index.d.ts +15 -0
  43. package/dist/password/index.js +69 -0
  44. package/dist/password/index.js.map +1 -0
  45. package/dist/phone/index.cjs +19 -0
  46. package/dist/phone/index.cjs.map +1 -0
  47. package/dist/phone/index.d.cts +12 -0
  48. package/dist/phone/index.d.ts +12 -0
  49. package/dist/phone/index.js +17 -0
  50. package/dist/phone/index.js.map +1 -0
  51. package/dist/regex/index.cjs +73 -0
  52. package/dist/regex/index.cjs.map +1 -0
  53. package/dist/regex/index.d.cts +65 -0
  54. package/dist/regex/index.d.ts +65 -0
  55. package/dist/regex/index.js +67 -0
  56. package/dist/regex/index.js.map +1 -0
  57. package/dist/response/index.cjs +43 -0
  58. package/dist/response/index.cjs.map +1 -0
  59. package/dist/response/index.d.cts +41 -0
  60. package/dist/response/index.d.ts +41 -0
  61. package/dist/response/index.js +40 -0
  62. package/dist/response/index.js.map +1 -0
  63. package/dist/sanitize/index.cjs +83 -0
  64. package/dist/sanitize/index.cjs.map +1 -0
  65. package/dist/sanitize/index.d.cts +20 -0
  66. package/dist/sanitize/index.d.ts +20 -0
  67. package/dist/sanitize/index.js +80 -0
  68. package/dist/sanitize/index.js.map +1 -0
  69. package/dist/slug/index.cjs +33 -0
  70. package/dist/slug/index.cjs.map +1 -0
  71. package/dist/slug/index.d.cts +38 -0
  72. package/dist/slug/index.d.ts +38 -0
  73. package/dist/slug/index.js +31 -0
  74. package/dist/slug/index.js.map +1 -0
  75. package/dist/string/index.cjs +130 -0
  76. package/dist/string/index.cjs.map +1 -0
  77. package/dist/string/index.d.cts +112 -0
  78. package/dist/string/index.d.ts +112 -0
  79. package/dist/string/index.js +115 -0
  80. package/dist/string/index.js.map +1 -0
  81. package/package.json +187 -3
@@ -0,0 +1,71 @@
1
+ 'use strict';
2
+
3
+ // src/internal/random.ts
4
+ function getCrypto() {
5
+ const cryptoApi = globalThis.crypto;
6
+ if (!cryptoApi?.getRandomValues) {
7
+ throw new Error("Secure random number generation is not available in this runtime");
8
+ }
9
+ return cryptoApi;
10
+ }
11
+ function randomIndex(length) {
12
+ if (length <= 0) {
13
+ throw new RangeError("length must be greater than 0");
14
+ }
15
+ const cryptoApi = getCrypto();
16
+ const limit = 4294967296;
17
+ const unbiasedMax = Math.floor(limit / length) * length;
18
+ const bytes = new Uint32Array(1);
19
+ let value = 0;
20
+ do {
21
+ cryptoApi.getRandomValues(bytes);
22
+ value = bytes[0] ?? 0;
23
+ } while (value >= unbiasedMax);
24
+ return value % length;
25
+ }
26
+ function pickCharacter(charset) {
27
+ return charset[randomIndex(charset.length)] ?? charset[0] ?? "A";
28
+ }
29
+ function shuffle(items) {
30
+ const result = [...items];
31
+ for (let index = result.length - 1; index > 0; index -= 1) {
32
+ const swapIndex = randomIndex(index + 1);
33
+ const current = result[index];
34
+ const other = result[swapIndex];
35
+ if (current === void 0 || other === void 0) {
36
+ continue;
37
+ }
38
+ result[index] = other;
39
+ result[swapIndex] = current;
40
+ }
41
+ return result;
42
+ }
43
+
44
+ // src/password/index.ts
45
+ var UPPERCASE = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
46
+ var LOWERCASE = "abcdefghijklmnopqrstuvwxyz";
47
+ var NUMBERS = "0123456789";
48
+ var SPECIAL = "!@#$%^&*()_+-=[]{}|;:,.<>?";
49
+ var ALL_CHARACTERS = `${UPPERCASE}${LOWERCASE}${NUMBERS}${SPECIAL}`;
50
+ var MIN_PASSWORD_LENGTH = 8;
51
+ var DEFAULT_PASSWORD_LENGTH = 12;
52
+ function generatePassword(length = DEFAULT_PASSWORD_LENGTH) {
53
+ if (!Number.isInteger(length) || length < MIN_PASSWORD_LENGTH) {
54
+ throw new RangeError(`length must be an integer greater than or equal to ${MIN_PASSWORD_LENGTH}`);
55
+ }
56
+ const required = [
57
+ pickCharacter(UPPERCASE),
58
+ pickCharacter(LOWERCASE),
59
+ pickCharacter(NUMBERS),
60
+ pickCharacter(SPECIAL)
61
+ ];
62
+ const remaining = Array.from(
63
+ { length: length - required.length },
64
+ () => pickCharacter(ALL_CHARACTERS)
65
+ );
66
+ return shuffle([...required, ...remaining]).join("");
67
+ }
68
+
69
+ exports.generatePassword = generatePassword;
70
+ //# sourceMappingURL=index.cjs.map
71
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/internal/random.ts","../../src/password/index.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["function getCrypto(): Crypto {\r\n const cryptoApi = globalThis.crypto;\r\n if (!cryptoApi?.getRandomValues) {\r\n throw new Error(\"Secure random number generation is not available in this runtime\");\r\n }\r\n\r\n return cryptoApi;\r\n}\r\n\r\nexport function randomIndex(length: number): number {\r\n if (length <= 0) {\r\n throw new RangeError(\"length must be greater than 0\");\r\n }\r\n\r\n const cryptoApi = getCrypto();\r\n const limit = 0x1_0000_0000;\r\n const unbiasedMax = Math.floor(limit / length) * length;\r\n const bytes = new Uint32Array(1);\r\n\r\n let value = 0;\r\n do {\r\n cryptoApi.getRandomValues(bytes);\r\n value = bytes[0] ?? 0;\r\n } while (value >= unbiasedMax);\r\n\r\n return value % length;\r\n}\r\n\r\nexport function pickCharacter(charset: string): string {\r\n return charset[randomIndex(charset.length)] ?? charset[0] ?? \"A\";\r\n}\r\n\r\nexport function randomString(length: number, charset: string): string {\r\n return Array.from({ length }, () => pickCharacter(charset)).join(\"\");\r\n}\r\n\r\nexport function shuffle<T>(items: T[]): T[] {\r\n const result = [...items];\r\n for (let index = result.length - 1; index > 0; index -= 1) {\r\n const swapIndex = randomIndex(index + 1);\r\n const current = result[index];\r\n const other = result[swapIndex];\r\n if (current === undefined || other === undefined) {\r\n continue;\r\n }\r\n result[index] = other;\r\n result[swapIndex] = current;\r\n }\r\n return result;\r\n}\r\n","import { pickCharacter, shuffle } from \"../internal/random.js\";\r\n\r\nconst UPPERCASE = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\r\nconst LOWERCASE = \"abcdefghijklmnopqrstuvwxyz\";\r\nconst NUMBERS = \"0123456789\";\r\nconst SPECIAL = \"!@#$%^&*()_+-=[]{}|;:,.<>?\";\r\nconst ALL_CHARACTERS = `${UPPERCASE}${LOWERCASE}${NUMBERS}${SPECIAL}`;\r\nconst MIN_PASSWORD_LENGTH = 8;\r\nconst DEFAULT_PASSWORD_LENGTH = 12;\r\n\r\n/**\r\n * Generates a password with at least one uppercase letter, lowercase letter,\r\n * number, and special character. Uses `crypto.getRandomValues`.\r\n *\r\n * This is not a password-policy engine and does not hash passwords.\r\n *\r\n * @throws {RangeError} When `length` is below 8 or not an integer.\r\n *\r\n * @example\r\n * generatePassword()\r\n * generatePassword(16)\r\n */\r\nexport function generatePassword(length = DEFAULT_PASSWORD_LENGTH): string {\r\n if (!Number.isInteger(length) || length < MIN_PASSWORD_LENGTH) {\r\n throw new RangeError(`length must be an integer greater than or equal to ${MIN_PASSWORD_LENGTH}`);\r\n }\r\n\r\n const required = [\r\n pickCharacter(UPPERCASE),\r\n pickCharacter(LOWERCASE),\r\n pickCharacter(NUMBERS),\r\n pickCharacter(SPECIAL),\r\n ];\r\n\r\n const remaining = Array.from({ length: length - required.length }, () =>\r\n pickCharacter(ALL_CHARACTERS),\r\n );\r\n\r\n return shuffle([...required, ...remaining]).join(\"\");\r\n}\r\n"]}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Generates a password with at least one uppercase letter, lowercase letter,
3
+ * number, and special character. Uses `crypto.getRandomValues`.
4
+ *
5
+ * This is not a password-policy engine and does not hash passwords.
6
+ *
7
+ * @throws {RangeError} When `length` is below 8 or not an integer.
8
+ *
9
+ * @example
10
+ * generatePassword()
11
+ * generatePassword(16)
12
+ */
13
+ declare function generatePassword(length?: number): string;
14
+
15
+ export { generatePassword };
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Generates a password with at least one uppercase letter, lowercase letter,
3
+ * number, and special character. Uses `crypto.getRandomValues`.
4
+ *
5
+ * This is not a password-policy engine and does not hash passwords.
6
+ *
7
+ * @throws {RangeError} When `length` is below 8 or not an integer.
8
+ *
9
+ * @example
10
+ * generatePassword()
11
+ * generatePassword(16)
12
+ */
13
+ declare function generatePassword(length?: number): string;
14
+
15
+ export { generatePassword };
@@ -0,0 +1,69 @@
1
+ // src/internal/random.ts
2
+ function getCrypto() {
3
+ const cryptoApi = globalThis.crypto;
4
+ if (!cryptoApi?.getRandomValues) {
5
+ throw new Error("Secure random number generation is not available in this runtime");
6
+ }
7
+ return cryptoApi;
8
+ }
9
+ function randomIndex(length) {
10
+ if (length <= 0) {
11
+ throw new RangeError("length must be greater than 0");
12
+ }
13
+ const cryptoApi = getCrypto();
14
+ const limit = 4294967296;
15
+ const unbiasedMax = Math.floor(limit / length) * length;
16
+ const bytes = new Uint32Array(1);
17
+ let value = 0;
18
+ do {
19
+ cryptoApi.getRandomValues(bytes);
20
+ value = bytes[0] ?? 0;
21
+ } while (value >= unbiasedMax);
22
+ return value % length;
23
+ }
24
+ function pickCharacter(charset) {
25
+ return charset[randomIndex(charset.length)] ?? charset[0] ?? "A";
26
+ }
27
+ function shuffle(items) {
28
+ const result = [...items];
29
+ for (let index = result.length - 1; index > 0; index -= 1) {
30
+ const swapIndex = randomIndex(index + 1);
31
+ const current = result[index];
32
+ const other = result[swapIndex];
33
+ if (current === void 0 || other === void 0) {
34
+ continue;
35
+ }
36
+ result[index] = other;
37
+ result[swapIndex] = current;
38
+ }
39
+ return result;
40
+ }
41
+
42
+ // src/password/index.ts
43
+ var UPPERCASE = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
44
+ var LOWERCASE = "abcdefghijklmnopqrstuvwxyz";
45
+ var NUMBERS = "0123456789";
46
+ var SPECIAL = "!@#$%^&*()_+-=[]{}|;:,.<>?";
47
+ var ALL_CHARACTERS = `${UPPERCASE}${LOWERCASE}${NUMBERS}${SPECIAL}`;
48
+ var MIN_PASSWORD_LENGTH = 8;
49
+ var DEFAULT_PASSWORD_LENGTH = 12;
50
+ function generatePassword(length = DEFAULT_PASSWORD_LENGTH) {
51
+ if (!Number.isInteger(length) || length < MIN_PASSWORD_LENGTH) {
52
+ throw new RangeError(`length must be an integer greater than or equal to ${MIN_PASSWORD_LENGTH}`);
53
+ }
54
+ const required = [
55
+ pickCharacter(UPPERCASE),
56
+ pickCharacter(LOWERCASE),
57
+ pickCharacter(NUMBERS),
58
+ pickCharacter(SPECIAL)
59
+ ];
60
+ const remaining = Array.from(
61
+ { length: length - required.length },
62
+ () => pickCharacter(ALL_CHARACTERS)
63
+ );
64
+ return shuffle([...required, ...remaining]).join("");
65
+ }
66
+
67
+ export { generatePassword };
68
+ //# sourceMappingURL=index.js.map
69
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/internal/random.ts","../../src/password/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["function getCrypto(): Crypto {\r\n const cryptoApi = globalThis.crypto;\r\n if (!cryptoApi?.getRandomValues) {\r\n throw new Error(\"Secure random number generation is not available in this runtime\");\r\n }\r\n\r\n return cryptoApi;\r\n}\r\n\r\nexport function randomIndex(length: number): number {\r\n if (length <= 0) {\r\n throw new RangeError(\"length must be greater than 0\");\r\n }\r\n\r\n const cryptoApi = getCrypto();\r\n const limit = 0x1_0000_0000;\r\n const unbiasedMax = Math.floor(limit / length) * length;\r\n const bytes = new Uint32Array(1);\r\n\r\n let value = 0;\r\n do {\r\n cryptoApi.getRandomValues(bytes);\r\n value = bytes[0] ?? 0;\r\n } while (value >= unbiasedMax);\r\n\r\n return value % length;\r\n}\r\n\r\nexport function pickCharacter(charset: string): string {\r\n return charset[randomIndex(charset.length)] ?? charset[0] ?? \"A\";\r\n}\r\n\r\nexport function randomString(length: number, charset: string): string {\r\n return Array.from({ length }, () => pickCharacter(charset)).join(\"\");\r\n}\r\n\r\nexport function shuffle<T>(items: T[]): T[] {\r\n const result = [...items];\r\n for (let index = result.length - 1; index > 0; index -= 1) {\r\n const swapIndex = randomIndex(index + 1);\r\n const current = result[index];\r\n const other = result[swapIndex];\r\n if (current === undefined || other === undefined) {\r\n continue;\r\n }\r\n result[index] = other;\r\n result[swapIndex] = current;\r\n }\r\n return result;\r\n}\r\n","import { pickCharacter, shuffle } from \"../internal/random.js\";\r\n\r\nconst UPPERCASE = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\r\nconst LOWERCASE = \"abcdefghijklmnopqrstuvwxyz\";\r\nconst NUMBERS = \"0123456789\";\r\nconst SPECIAL = \"!@#$%^&*()_+-=[]{}|;:,.<>?\";\r\nconst ALL_CHARACTERS = `${UPPERCASE}${LOWERCASE}${NUMBERS}${SPECIAL}`;\r\nconst MIN_PASSWORD_LENGTH = 8;\r\nconst DEFAULT_PASSWORD_LENGTH = 12;\r\n\r\n/**\r\n * Generates a password with at least one uppercase letter, lowercase letter,\r\n * number, and special character. Uses `crypto.getRandomValues`.\r\n *\r\n * This is not a password-policy engine and does not hash passwords.\r\n *\r\n * @throws {RangeError} When `length` is below 8 or not an integer.\r\n *\r\n * @example\r\n * generatePassword()\r\n * generatePassword(16)\r\n */\r\nexport function generatePassword(length = DEFAULT_PASSWORD_LENGTH): string {\r\n if (!Number.isInteger(length) || length < MIN_PASSWORD_LENGTH) {\r\n throw new RangeError(`length must be an integer greater than or equal to ${MIN_PASSWORD_LENGTH}`);\r\n }\r\n\r\n const required = [\r\n pickCharacter(UPPERCASE),\r\n pickCharacter(LOWERCASE),\r\n pickCharacter(NUMBERS),\r\n pickCharacter(SPECIAL),\r\n ];\r\n\r\n const remaining = Array.from({ length: length - required.length }, () =>\r\n pickCharacter(ALL_CHARACTERS),\r\n );\r\n\r\n return shuffle([...required, ...remaining]).join(\"\");\r\n}\r\n"]}
@@ -0,0 +1,19 @@
1
+ 'use strict';
2
+
3
+ // src/phone/index.ts
4
+ var INDIAN_MOBILE_PATTERN = /^[6-9]\d{9}$/;
5
+ function normalizeMobile(value) {
6
+ if (value == null) {
7
+ return null;
8
+ }
9
+ const digits = String(value).replace(/\D/g, "");
10
+ if (digits.length === 0) {
11
+ return null;
12
+ }
13
+ const withoutCountryCode = digits.length > 10 && (digits.startsWith("91") || digits.startsWith("0")) ? digits.slice(-10) : digits.length >= 10 ? digits.slice(-10) : digits;
14
+ return INDIAN_MOBILE_PATTERN.test(withoutCountryCode) ? withoutCountryCode : null;
15
+ }
16
+
17
+ exports.normalizeMobile = normalizeMobile;
18
+ //# sourceMappingURL=index.cjs.map
19
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/phone/index.ts"],"names":[],"mappings":";;;AAAA,IAAM,qBAAA,GAAwB,cAAA;AAWvB,SAAS,gBAAgB,KAAA,EAA+B;AAC7D,EAAA,IAAI,SAAS,IAAA,EAAM;AACjB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,SAAS,MAAA,CAAO,KAAK,CAAA,CAAE,OAAA,CAAQ,OAAO,EAAE,CAAA;AAC9C,EAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,kBAAA,GACJ,OAAO,MAAA,GAAS,EAAA,KAAO,OAAO,UAAA,CAAW,IAAI,CAAA,IAAK,MAAA,CAAO,UAAA,CAAW,GAAG,KACnE,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA,GAChB,MAAA,CAAO,UAAU,EAAA,GACf,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA,GAChB,MAAA;AAER,EAAA,OAAO,qBAAA,CAAsB,IAAA,CAAK,kBAAkB,CAAA,GAAI,kBAAA,GAAqB,IAAA;AAC/E","file":"index.cjs","sourcesContent":["const INDIAN_MOBILE_PATTERN = /^[6-9]\\d{9}$/;\r\n\r\n/**\r\n * Normalizes an Indian mobile number to 10 digits starting with 6-9.\r\n * Country-code prefixes such as `+91` or `91` are removed when present.\r\n * Returns `null` for empty or invalid numbers.\r\n *\r\n * @example\r\n * normalizeMobile(\"+91 98765 43210\") // \"9876543210\"\r\n * normalizeMobile(\"12345\") // null\r\n */\r\nexport function normalizeMobile(value: unknown): string | null {\r\n if (value == null) {\r\n return null;\r\n }\r\n\r\n const digits = String(value).replace(/\\D/g, \"\");\r\n if (digits.length === 0) {\r\n return null;\r\n }\r\n\r\n const withoutCountryCode =\r\n digits.length > 10 && (digits.startsWith(\"91\") || digits.startsWith(\"0\"))\r\n ? digits.slice(-10)\r\n : digits.length >= 10\r\n ? digits.slice(-10)\r\n : digits;\r\n\r\n return INDIAN_MOBILE_PATTERN.test(withoutCountryCode) ? withoutCountryCode : null;\r\n}\r\n"]}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Normalizes an Indian mobile number to 10 digits starting with 6-9.
3
+ * Country-code prefixes such as `+91` or `91` are removed when present.
4
+ * Returns `null` for empty or invalid numbers.
5
+ *
6
+ * @example
7
+ * normalizeMobile("+91 98765 43210") // "9876543210"
8
+ * normalizeMobile("12345") // null
9
+ */
10
+ declare function normalizeMobile(value: unknown): string | null;
11
+
12
+ export { normalizeMobile };
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Normalizes an Indian mobile number to 10 digits starting with 6-9.
3
+ * Country-code prefixes such as `+91` or `91` are removed when present.
4
+ * Returns `null` for empty or invalid numbers.
5
+ *
6
+ * @example
7
+ * normalizeMobile("+91 98765 43210") // "9876543210"
8
+ * normalizeMobile("12345") // null
9
+ */
10
+ declare function normalizeMobile(value: unknown): string | null;
11
+
12
+ export { normalizeMobile };
@@ -0,0 +1,17 @@
1
+ // src/phone/index.ts
2
+ var INDIAN_MOBILE_PATTERN = /^[6-9]\d{9}$/;
3
+ function normalizeMobile(value) {
4
+ if (value == null) {
5
+ return null;
6
+ }
7
+ const digits = String(value).replace(/\D/g, "");
8
+ if (digits.length === 0) {
9
+ return null;
10
+ }
11
+ const withoutCountryCode = digits.length > 10 && (digits.startsWith("91") || digits.startsWith("0")) ? digits.slice(-10) : digits.length >= 10 ? digits.slice(-10) : digits;
12
+ return INDIAN_MOBILE_PATTERN.test(withoutCountryCode) ? withoutCountryCode : null;
13
+ }
14
+
15
+ export { normalizeMobile };
16
+ //# sourceMappingURL=index.js.map
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/phone/index.ts"],"names":[],"mappings":";AAAA,IAAM,qBAAA,GAAwB,cAAA;AAWvB,SAAS,gBAAgB,KAAA,EAA+B;AAC7D,EAAA,IAAI,SAAS,IAAA,EAAM;AACjB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,SAAS,MAAA,CAAO,KAAK,CAAA,CAAE,OAAA,CAAQ,OAAO,EAAE,CAAA;AAC9C,EAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,kBAAA,GACJ,OAAO,MAAA,GAAS,EAAA,KAAO,OAAO,UAAA,CAAW,IAAI,CAAA,IAAK,MAAA,CAAO,UAAA,CAAW,GAAG,KACnE,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA,GAChB,MAAA,CAAO,UAAU,EAAA,GACf,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA,GAChB,MAAA;AAER,EAAA,OAAO,qBAAA,CAAsB,IAAA,CAAK,kBAAkB,CAAA,GAAI,kBAAA,GAAqB,IAAA;AAC/E","file":"index.js","sourcesContent":["const INDIAN_MOBILE_PATTERN = /^[6-9]\\d{9}$/;\r\n\r\n/**\r\n * Normalizes an Indian mobile number to 10 digits starting with 6-9.\r\n * Country-code prefixes such as `+91` or `91` are removed when present.\r\n * Returns `null` for empty or invalid numbers.\r\n *\r\n * @example\r\n * normalizeMobile(\"+91 98765 43210\") // \"9876543210\"\r\n * normalizeMobile(\"12345\") // null\r\n */\r\nexport function normalizeMobile(value: unknown): string | null {\r\n if (value == null) {\r\n return null;\r\n }\r\n\r\n const digits = String(value).replace(/\\D/g, \"\");\r\n if (digits.length === 0) {\r\n return null;\r\n }\r\n\r\n const withoutCountryCode =\r\n digits.length > 10 && (digits.startsWith(\"91\") || digits.startsWith(\"0\"))\r\n ? digits.slice(-10)\r\n : digits.length >= 10\r\n ? digits.slice(-10)\r\n : digits;\r\n\r\n return INDIAN_MOBILE_PATTERN.test(withoutCountryCode) ? withoutCountryCode : null;\r\n}\r\n"]}
@@ -0,0 +1,73 @@
1
+ 'use strict';
2
+
3
+ // src/internal/validation.ts
4
+ function escapeRegExp(value) {
5
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
6
+ }
7
+
8
+ // src/regex/index.ts
9
+ var ValidationPatterns = {
10
+ YEAR: /^\d{4}$/,
11
+ OTP: /^\d{6}$/,
12
+ PINCODE: /^\d{6}$/,
13
+ POSTAL_CODE: /^\d{6}$/,
14
+ NUMERIC: /^[0-9]+$/,
15
+ MOBILE: /^[6-9]\d{9}$/,
16
+ NAME: /^[a-zA-Z\s\-']+$/,
17
+ ALPHABETIC: /^[a-zA-Z]+$/,
18
+ LOWERCASE_ONLY: /^[a-z_]+$/,
19
+ UPPERCASE_ONLY: /^[A-Z_]+$/,
20
+ USERNAME: /^[a-zA-Z0-9_-]+$/,
21
+ LOWER_NUMERIC: /^[a-z0-9_]+$/,
22
+ UPPER_NUMERIC: /^[A-Z0-9_]+$/,
23
+ LOWER_WITH_HYPHENS: /^[a-z-]+$/,
24
+ UPPER_WITH_HYPHENS: /^[A-Z-]+$/,
25
+ ALPHANUMERIC: /^[a-zA-Z0-9-\s]+$/,
26
+ PERMISSION_NAME: /^[a-z0-9._-]+$/,
27
+ AADHAR_CARD: /^[2-9][0-9]{11}$/,
28
+ LOWER_NUMERIC_WITH_HYPHENS: /^[a-z0-9-]+$/,
29
+ UPPER_NUMERIC_WITH_HYPHENS: /^[A-Z0-9-]+$/,
30
+ ALPHANUMERIC_WITH_SPACES: /^[a-zA-Z0-9\s]+$/,
31
+ ALPHANUMERIC_WITHOUT_SPACES: /^[a-zA-Z0-9]+$/,
32
+ PAN_CARD: /^[A-Za-z]{5}[0-9]{4}[A-Za-z]$/,
33
+ ALPHANUMERIC_WITH_UNDERSCORES: /^[a-zA-Z0-9-_]+$/,
34
+ MODEL_NAME: /^[a-zA-Z0-9_\s\-/\\*+()[\]:'",.%&]+$/,
35
+ NOTE: /^[a-zA-Z0-9\s/\\,.\-_+=<>()[\]{}@#$%^&*~`"',;:’]+$/,
36
+ EMAIL: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/,
37
+ VEHICLE_NUMBER: /^[A-Za-z]{2}\d{1,2}[A-Za-z]{1,3}\d{1,4}$/,
38
+ PASSWORD: /^(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[@$!%*?&])[a-zA-Z0-9@$!%*?&]{8,16}$/,
39
+ URL: /^https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/,
40
+ DATE: /^\d{4}-\d{2}-\d{2}$/,
41
+ CURRENCY: /^\d+(?:\.\d{1,2})?$/,
42
+ TIME: /^(?:[01]?\d|2[0-3]):[0-5]\d$/,
43
+ MESSAGE: /^[a-zA-Z0-9\s.,!?_\-@#()&%$+=:;"'<>[\]{}|\\/]+$/,
44
+ DOMAIN_HOSTNAME: /^(?=.{1,253}$)(?:localhost|(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,}|[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)$/i
45
+ };
46
+ function testPattern(value, pattern) {
47
+ if (typeof pattern === "string") {
48
+ const namedPattern = ValidationPatterns[pattern];
49
+ if (!namedPattern) {
50
+ throw new TypeError(`Unknown validation pattern: ${pattern}`);
51
+ }
52
+ return namedPattern.test(value);
53
+ }
54
+ return pattern.test(value);
55
+ }
56
+ function getPattern(name) {
57
+ const pattern = ValidationPatterns[name];
58
+ if (!pattern) {
59
+ throw new TypeError(`Unknown validation pattern: ${name}`);
60
+ }
61
+ return pattern;
62
+ }
63
+ function escapeRegex(value) {
64
+ return escapeRegExp(value);
65
+ }
66
+
67
+ exports.ValidationPatterns = ValidationPatterns;
68
+ exports.escapeRegExp = escapeRegex;
69
+ exports.escapeRegex = escapeRegex;
70
+ exports.getPattern = getPattern;
71
+ exports.testPattern = testPattern;
72
+ //# sourceMappingURL=index.cjs.map
73
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/internal/validation.ts","../../src/regex/index.ts"],"names":[],"mappings":";;;AASO,SAAS,aAAa,KAAA,EAAuB;AAClD,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,qBAAA,EAAuB,MAAM,CAAA;AACpD;;;ACJO,IAAM,kBAAA,GAAqB;AAAA,EAChC,IAAA,EAAM,SAAA;AAAA,EACN,GAAA,EAAK,SAAA;AAAA,EACL,OAAA,EAAS,SAAA;AAAA,EACT,WAAA,EAAa,SAAA;AAAA,EACb,OAAA,EAAS,UAAA;AAAA,EACT,MAAA,EAAQ,cAAA;AAAA,EACR,IAAA,EAAM,kBAAA;AAAA,EACN,UAAA,EAAY,aAAA;AAAA,EACZ,cAAA,EAAgB,WAAA;AAAA,EAChB,cAAA,EAAgB,WAAA;AAAA,EAChB,QAAA,EAAU,kBAAA;AAAA,EACV,aAAA,EAAe,cAAA;AAAA,EACf,aAAA,EAAe,cAAA;AAAA,EACf,kBAAA,EAAoB,WAAA;AAAA,EACpB,kBAAA,EAAoB,WAAA;AAAA,EACpB,YAAA,EAAc,mBAAA;AAAA,EACd,eAAA,EAAiB,gBAAA;AAAA,EACjB,WAAA,EAAa,kBAAA;AAAA,EACb,0BAAA,EAA4B,cAAA;AAAA,EAC5B,0BAAA,EAA4B,cAAA;AAAA,EAC5B,wBAAA,EAA0B,kBAAA;AAAA,EAC1B,2BAAA,EAA6B,gBAAA;AAAA,EAC7B,QAAA,EAAU,+BAAA;AAAA,EACV,6BAAA,EAA+B,kBAAA;AAAA,EAC/B,UAAA,EAAY,sCAAA;AAAA,EACZ,IAAA,EAAM,oDAAA;AAAA,EACN,KAAA,EAAO,kDAAA;AAAA,EACP,cAAA,EAAgB,0CAAA;AAAA,EAChB,QAAA,EAAU,oEAAA;AAAA,EACV,GAAA,EAAK,0GAAA;AAAA,EACL,IAAA,EAAM,qBAAA;AAAA,EACN,QAAA,EAAU,qBAAA;AAAA,EACV,IAAA,EAAM,8BAAA;AAAA,EACN,OAAA,EAAS,iDAAA;AAAA,EACT,eAAA,EACE;AACJ;AAWO,SAAS,WAAA,CACd,OACA,OAAA,EACS;AACT,EAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,IAAA,MAAM,YAAA,GAAe,mBAAmB,OAAO,CAAA;AAC/C,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,MAAM,IAAI,SAAA,CAAU,CAAA,4BAAA,EAA+B,OAAO,CAAA,CAAE,CAAA;AAAA,IAC9D;AACA,IAAA,OAAO,YAAA,CAAa,KAAK,KAAK,CAAA;AAAA,EAChC;AAEA,EAAA,OAAO,OAAA,CAAQ,KAAK,KAAK,CAAA;AAC3B;AAQO,SAAS,WAAW,IAAA,EAAqC;AAC9D,EAAA,MAAM,OAAA,GAAU,mBAAmB,IAAI,CAAA;AACvC,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,SAAA,CAAU,CAAA,4BAAA,EAA+B,IAAI,CAAA,CAAE,CAAA;AAAA,EAC3D;AAEA,EAAA,OAAO,OAAA;AACT;AAKO,SAAS,YAAY,KAAA,EAAuB;AACjD,EAAA,OAAO,aAAa,KAAK,CAAA;AAC3B","file":"index.cjs","sourcesContent":["export function assertFiniteNumber(\r\n value: unknown,\r\n name: string,\r\n): asserts value is number {\r\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\r\n throw new TypeError(`${name} must be a finite number`);\r\n }\r\n}\r\n\r\nexport function escapeRegExp(value: string): string {\r\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n}\r\n","import { escapeRegExp } from \"../internal/validation.js\";\r\n\r\n/**\r\n * Shared validation regular expressions for Indian and general form fields.\r\n * These patterns check shape only. They do not verify checksums, ownership,\r\n * or whether a value is officially issued.\r\n */\r\nexport const ValidationPatterns = {\r\n YEAR: /^\\d{4}$/,\r\n OTP: /^\\d{6}$/,\r\n PINCODE: /^\\d{6}$/,\r\n POSTAL_CODE: /^\\d{6}$/,\r\n NUMERIC: /^[0-9]+$/,\r\n MOBILE: /^[6-9]\\d{9}$/,\r\n NAME: /^[a-zA-Z\\s\\-']+$/,\r\n ALPHABETIC: /^[a-zA-Z]+$/,\r\n LOWERCASE_ONLY: /^[a-z_]+$/,\r\n UPPERCASE_ONLY: /^[A-Z_]+$/,\r\n USERNAME: /^[a-zA-Z0-9_-]+$/,\r\n LOWER_NUMERIC: /^[a-z0-9_]+$/,\r\n UPPER_NUMERIC: /^[A-Z0-9_]+$/,\r\n LOWER_WITH_HYPHENS: /^[a-z-]+$/,\r\n UPPER_WITH_HYPHENS: /^[A-Z-]+$/,\r\n ALPHANUMERIC: /^[a-zA-Z0-9-\\s]+$/,\r\n PERMISSION_NAME: /^[a-z0-9._-]+$/,\r\n AADHAR_CARD: /^[2-9][0-9]{11}$/,\r\n LOWER_NUMERIC_WITH_HYPHENS: /^[a-z0-9-]+$/,\r\n UPPER_NUMERIC_WITH_HYPHENS: /^[A-Z0-9-]+$/,\r\n ALPHANUMERIC_WITH_SPACES: /^[a-zA-Z0-9\\s]+$/,\r\n ALPHANUMERIC_WITHOUT_SPACES: /^[a-zA-Z0-9]+$/,\r\n PAN_CARD: /^[A-Za-z]{5}[0-9]{4}[A-Za-z]$/,\r\n ALPHANUMERIC_WITH_UNDERSCORES: /^[a-zA-Z0-9-_]+$/,\r\n MODEL_NAME: /^[a-zA-Z0-9_\\s\\-/\\\\*+()[\\]:'\",.%&]+$/,\r\n NOTE: /^[a-zA-Z0-9\\s/\\\\,.\\-_+=<>()[\\]{}@#$%^&*~`\"',;:’]+$/,\r\n EMAIL: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/,\r\n VEHICLE_NUMBER: /^[A-Za-z]{2}\\d{1,2}[A-Za-z]{1,3}\\d{1,4}$/,\r\n PASSWORD: /^(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[@$!%*?&])[a-zA-Z0-9@$!%*?&]{8,16}$/,\r\n URL: /^https?:\\/\\/(?:www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/,\r\n DATE: /^\\d{4}-\\d{2}-\\d{2}$/,\r\n CURRENCY: /^\\d+(?:\\.\\d{1,2})?$/,\r\n TIME: /^(?:[01]?\\d|2[0-3]):[0-5]\\d$/,\r\n MESSAGE: /^[a-zA-Z0-9\\s.,!?_\\-@#()&%$+=:;\"'<>[\\]{}|\\\\/]+$/,\r\n DOMAIN_HOSTNAME:\r\n /^(?=.{1,253}$)(?:localhost|(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z]{2,}|[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)$/i,\r\n} as const;\r\n\r\nexport type ValidationPatternName = keyof typeof ValidationPatterns;\r\n\r\n/**\r\n * Tests a string against a named validation pattern or a custom regular expression.\r\n *\r\n * @example\r\n * testPattern(\"9876543210\", \"MOBILE\") // true\r\n * testPattern(\"user@example.com\", ValidationPatterns.EMAIL) // true\r\n */\r\nexport function testPattern(\r\n value: string,\r\n pattern: ValidationPatternName | RegExp,\r\n): boolean {\r\n if (typeof pattern === \"string\") {\r\n const namedPattern = ValidationPatterns[pattern];\r\n if (!namedPattern) {\r\n throw new TypeError(`Unknown validation pattern: ${pattern}`);\r\n }\r\n return namedPattern.test(value);\r\n }\r\n\r\n return pattern.test(value);\r\n}\r\n\r\n/**\r\n * Returns a named validation pattern.\r\n *\r\n * @example\r\n * getPattern(\"PINCODE\") // /^\\d{6}$/\r\n */\r\nexport function getPattern(name: ValidationPatternName): RegExp {\r\n const pattern = ValidationPatterns[name];\r\n if (!pattern) {\r\n throw new TypeError(`Unknown validation pattern: ${name}`);\r\n }\r\n\r\n return pattern;\r\n}\r\n\r\n/**\r\n * Escapes special regular-expression characters in a string.\r\n */\r\nexport function escapeRegex(value: string): string {\r\n return escapeRegExp(value);\r\n}\r\n\r\nexport { escapeRegex as escapeRegExp };\r\n"]}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Shared validation regular expressions for Indian and general form fields.
3
+ * These patterns check shape only. They do not verify checksums, ownership,
4
+ * or whether a value is officially issued.
5
+ */
6
+ declare const ValidationPatterns: {
7
+ readonly YEAR: RegExp;
8
+ readonly OTP: RegExp;
9
+ readonly PINCODE: RegExp;
10
+ readonly POSTAL_CODE: RegExp;
11
+ readonly NUMERIC: RegExp;
12
+ readonly MOBILE: RegExp;
13
+ readonly NAME: RegExp;
14
+ readonly ALPHABETIC: RegExp;
15
+ readonly LOWERCASE_ONLY: RegExp;
16
+ readonly UPPERCASE_ONLY: RegExp;
17
+ readonly USERNAME: RegExp;
18
+ readonly LOWER_NUMERIC: RegExp;
19
+ readonly UPPER_NUMERIC: RegExp;
20
+ readonly LOWER_WITH_HYPHENS: RegExp;
21
+ readonly UPPER_WITH_HYPHENS: RegExp;
22
+ readonly ALPHANUMERIC: RegExp;
23
+ readonly PERMISSION_NAME: RegExp;
24
+ readonly AADHAR_CARD: RegExp;
25
+ readonly LOWER_NUMERIC_WITH_HYPHENS: RegExp;
26
+ readonly UPPER_NUMERIC_WITH_HYPHENS: RegExp;
27
+ readonly ALPHANUMERIC_WITH_SPACES: RegExp;
28
+ readonly ALPHANUMERIC_WITHOUT_SPACES: RegExp;
29
+ readonly PAN_CARD: RegExp;
30
+ readonly ALPHANUMERIC_WITH_UNDERSCORES: RegExp;
31
+ readonly MODEL_NAME: RegExp;
32
+ readonly NOTE: RegExp;
33
+ readonly EMAIL: RegExp;
34
+ readonly VEHICLE_NUMBER: RegExp;
35
+ readonly PASSWORD: RegExp;
36
+ readonly URL: RegExp;
37
+ readonly DATE: RegExp;
38
+ readonly CURRENCY: RegExp;
39
+ readonly TIME: RegExp;
40
+ readonly MESSAGE: RegExp;
41
+ readonly DOMAIN_HOSTNAME: RegExp;
42
+ };
43
+ type ValidationPatternName = keyof typeof ValidationPatterns;
44
+ /**
45
+ * Tests a string against a named validation pattern or a custom regular expression.
46
+ *
47
+ * @example
48
+ * testPattern("9876543210", "MOBILE") // true
49
+ * testPattern("user@example.com", ValidationPatterns.EMAIL) // true
50
+ */
51
+ declare function testPattern(value: string, pattern: ValidationPatternName | RegExp): boolean;
52
+ /**
53
+ * Returns a named validation pattern.
54
+ *
55
+ * @example
56
+ * getPattern("PINCODE") // /^\d{6}$/
57
+ */
58
+ declare function getPattern(name: ValidationPatternName): RegExp;
59
+ /**
60
+ * Escapes special regular-expression characters in a string.
61
+ */
62
+ declare function escapeRegex(value: string): string;
63
+
64
+ export { ValidationPatterns, escapeRegex as escapeRegExp, escapeRegex, getPattern, testPattern };
65
+ export type { ValidationPatternName };
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Shared validation regular expressions for Indian and general form fields.
3
+ * These patterns check shape only. They do not verify checksums, ownership,
4
+ * or whether a value is officially issued.
5
+ */
6
+ declare const ValidationPatterns: {
7
+ readonly YEAR: RegExp;
8
+ readonly OTP: RegExp;
9
+ readonly PINCODE: RegExp;
10
+ readonly POSTAL_CODE: RegExp;
11
+ readonly NUMERIC: RegExp;
12
+ readonly MOBILE: RegExp;
13
+ readonly NAME: RegExp;
14
+ readonly ALPHABETIC: RegExp;
15
+ readonly LOWERCASE_ONLY: RegExp;
16
+ readonly UPPERCASE_ONLY: RegExp;
17
+ readonly USERNAME: RegExp;
18
+ readonly LOWER_NUMERIC: RegExp;
19
+ readonly UPPER_NUMERIC: RegExp;
20
+ readonly LOWER_WITH_HYPHENS: RegExp;
21
+ readonly UPPER_WITH_HYPHENS: RegExp;
22
+ readonly ALPHANUMERIC: RegExp;
23
+ readonly PERMISSION_NAME: RegExp;
24
+ readonly AADHAR_CARD: RegExp;
25
+ readonly LOWER_NUMERIC_WITH_HYPHENS: RegExp;
26
+ readonly UPPER_NUMERIC_WITH_HYPHENS: RegExp;
27
+ readonly ALPHANUMERIC_WITH_SPACES: RegExp;
28
+ readonly ALPHANUMERIC_WITHOUT_SPACES: RegExp;
29
+ readonly PAN_CARD: RegExp;
30
+ readonly ALPHANUMERIC_WITH_UNDERSCORES: RegExp;
31
+ readonly MODEL_NAME: RegExp;
32
+ readonly NOTE: RegExp;
33
+ readonly EMAIL: RegExp;
34
+ readonly VEHICLE_NUMBER: RegExp;
35
+ readonly PASSWORD: RegExp;
36
+ readonly URL: RegExp;
37
+ readonly DATE: RegExp;
38
+ readonly CURRENCY: RegExp;
39
+ readonly TIME: RegExp;
40
+ readonly MESSAGE: RegExp;
41
+ readonly DOMAIN_HOSTNAME: RegExp;
42
+ };
43
+ type ValidationPatternName = keyof typeof ValidationPatterns;
44
+ /**
45
+ * Tests a string against a named validation pattern or a custom regular expression.
46
+ *
47
+ * @example
48
+ * testPattern("9876543210", "MOBILE") // true
49
+ * testPattern("user@example.com", ValidationPatterns.EMAIL) // true
50
+ */
51
+ declare function testPattern(value: string, pattern: ValidationPatternName | RegExp): boolean;
52
+ /**
53
+ * Returns a named validation pattern.
54
+ *
55
+ * @example
56
+ * getPattern("PINCODE") // /^\d{6}$/
57
+ */
58
+ declare function getPattern(name: ValidationPatternName): RegExp;
59
+ /**
60
+ * Escapes special regular-expression characters in a string.
61
+ */
62
+ declare function escapeRegex(value: string): string;
63
+
64
+ export { ValidationPatterns, escapeRegex as escapeRegExp, escapeRegex, getPattern, testPattern };
65
+ export type { ValidationPatternName };
@@ -0,0 +1,67 @@
1
+ // src/internal/validation.ts
2
+ function escapeRegExp(value) {
3
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
4
+ }
5
+
6
+ // src/regex/index.ts
7
+ var ValidationPatterns = {
8
+ YEAR: /^\d{4}$/,
9
+ OTP: /^\d{6}$/,
10
+ PINCODE: /^\d{6}$/,
11
+ POSTAL_CODE: /^\d{6}$/,
12
+ NUMERIC: /^[0-9]+$/,
13
+ MOBILE: /^[6-9]\d{9}$/,
14
+ NAME: /^[a-zA-Z\s\-']+$/,
15
+ ALPHABETIC: /^[a-zA-Z]+$/,
16
+ LOWERCASE_ONLY: /^[a-z_]+$/,
17
+ UPPERCASE_ONLY: /^[A-Z_]+$/,
18
+ USERNAME: /^[a-zA-Z0-9_-]+$/,
19
+ LOWER_NUMERIC: /^[a-z0-9_]+$/,
20
+ UPPER_NUMERIC: /^[A-Z0-9_]+$/,
21
+ LOWER_WITH_HYPHENS: /^[a-z-]+$/,
22
+ UPPER_WITH_HYPHENS: /^[A-Z-]+$/,
23
+ ALPHANUMERIC: /^[a-zA-Z0-9-\s]+$/,
24
+ PERMISSION_NAME: /^[a-z0-9._-]+$/,
25
+ AADHAR_CARD: /^[2-9][0-9]{11}$/,
26
+ LOWER_NUMERIC_WITH_HYPHENS: /^[a-z0-9-]+$/,
27
+ UPPER_NUMERIC_WITH_HYPHENS: /^[A-Z0-9-]+$/,
28
+ ALPHANUMERIC_WITH_SPACES: /^[a-zA-Z0-9\s]+$/,
29
+ ALPHANUMERIC_WITHOUT_SPACES: /^[a-zA-Z0-9]+$/,
30
+ PAN_CARD: /^[A-Za-z]{5}[0-9]{4}[A-Za-z]$/,
31
+ ALPHANUMERIC_WITH_UNDERSCORES: /^[a-zA-Z0-9-_]+$/,
32
+ MODEL_NAME: /^[a-zA-Z0-9_\s\-/\\*+()[\]:'",.%&]+$/,
33
+ NOTE: /^[a-zA-Z0-9\s/\\,.\-_+=<>()[\]{}@#$%^&*~`"',;:’]+$/,
34
+ EMAIL: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/,
35
+ VEHICLE_NUMBER: /^[A-Za-z]{2}\d{1,2}[A-Za-z]{1,3}\d{1,4}$/,
36
+ PASSWORD: /^(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[@$!%*?&])[a-zA-Z0-9@$!%*?&]{8,16}$/,
37
+ URL: /^https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/,
38
+ DATE: /^\d{4}-\d{2}-\d{2}$/,
39
+ CURRENCY: /^\d+(?:\.\d{1,2})?$/,
40
+ TIME: /^(?:[01]?\d|2[0-3]):[0-5]\d$/,
41
+ MESSAGE: /^[a-zA-Z0-9\s.,!?_\-@#()&%$+=:;"'<>[\]{}|\\/]+$/,
42
+ DOMAIN_HOSTNAME: /^(?=.{1,253}$)(?:localhost|(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,}|[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)$/i
43
+ };
44
+ function testPattern(value, pattern) {
45
+ if (typeof pattern === "string") {
46
+ const namedPattern = ValidationPatterns[pattern];
47
+ if (!namedPattern) {
48
+ throw new TypeError(`Unknown validation pattern: ${pattern}`);
49
+ }
50
+ return namedPattern.test(value);
51
+ }
52
+ return pattern.test(value);
53
+ }
54
+ function getPattern(name) {
55
+ const pattern = ValidationPatterns[name];
56
+ if (!pattern) {
57
+ throw new TypeError(`Unknown validation pattern: ${name}`);
58
+ }
59
+ return pattern;
60
+ }
61
+ function escapeRegex(value) {
62
+ return escapeRegExp(value);
63
+ }
64
+
65
+ export { ValidationPatterns, escapeRegex as escapeRegExp, escapeRegex, getPattern, testPattern };
66
+ //# sourceMappingURL=index.js.map
67
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/internal/validation.ts","../../src/regex/index.ts"],"names":[],"mappings":";AASO,SAAS,aAAa,KAAA,EAAuB;AAClD,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,qBAAA,EAAuB,MAAM,CAAA;AACpD;;;ACJO,IAAM,kBAAA,GAAqB;AAAA,EAChC,IAAA,EAAM,SAAA;AAAA,EACN,GAAA,EAAK,SAAA;AAAA,EACL,OAAA,EAAS,SAAA;AAAA,EACT,WAAA,EAAa,SAAA;AAAA,EACb,OAAA,EAAS,UAAA;AAAA,EACT,MAAA,EAAQ,cAAA;AAAA,EACR,IAAA,EAAM,kBAAA;AAAA,EACN,UAAA,EAAY,aAAA;AAAA,EACZ,cAAA,EAAgB,WAAA;AAAA,EAChB,cAAA,EAAgB,WAAA;AAAA,EAChB,QAAA,EAAU,kBAAA;AAAA,EACV,aAAA,EAAe,cAAA;AAAA,EACf,aAAA,EAAe,cAAA;AAAA,EACf,kBAAA,EAAoB,WAAA;AAAA,EACpB,kBAAA,EAAoB,WAAA;AAAA,EACpB,YAAA,EAAc,mBAAA;AAAA,EACd,eAAA,EAAiB,gBAAA;AAAA,EACjB,WAAA,EAAa,kBAAA;AAAA,EACb,0BAAA,EAA4B,cAAA;AAAA,EAC5B,0BAAA,EAA4B,cAAA;AAAA,EAC5B,wBAAA,EAA0B,kBAAA;AAAA,EAC1B,2BAAA,EAA6B,gBAAA;AAAA,EAC7B,QAAA,EAAU,+BAAA;AAAA,EACV,6BAAA,EAA+B,kBAAA;AAAA,EAC/B,UAAA,EAAY,sCAAA;AAAA,EACZ,IAAA,EAAM,oDAAA;AAAA,EACN,KAAA,EAAO,kDAAA;AAAA,EACP,cAAA,EAAgB,0CAAA;AAAA,EAChB,QAAA,EAAU,oEAAA;AAAA,EACV,GAAA,EAAK,0GAAA;AAAA,EACL,IAAA,EAAM,qBAAA;AAAA,EACN,QAAA,EAAU,qBAAA;AAAA,EACV,IAAA,EAAM,8BAAA;AAAA,EACN,OAAA,EAAS,iDAAA;AAAA,EACT,eAAA,EACE;AACJ;AAWO,SAAS,WAAA,CACd,OACA,OAAA,EACS;AACT,EAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,IAAA,MAAM,YAAA,GAAe,mBAAmB,OAAO,CAAA;AAC/C,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,MAAM,IAAI,SAAA,CAAU,CAAA,4BAAA,EAA+B,OAAO,CAAA,CAAE,CAAA;AAAA,IAC9D;AACA,IAAA,OAAO,YAAA,CAAa,KAAK,KAAK,CAAA;AAAA,EAChC;AAEA,EAAA,OAAO,OAAA,CAAQ,KAAK,KAAK,CAAA;AAC3B;AAQO,SAAS,WAAW,IAAA,EAAqC;AAC9D,EAAA,MAAM,OAAA,GAAU,mBAAmB,IAAI,CAAA;AACvC,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,SAAA,CAAU,CAAA,4BAAA,EAA+B,IAAI,CAAA,CAAE,CAAA;AAAA,EAC3D;AAEA,EAAA,OAAO,OAAA;AACT;AAKO,SAAS,YAAY,KAAA,EAAuB;AACjD,EAAA,OAAO,aAAa,KAAK,CAAA;AAC3B","file":"index.js","sourcesContent":["export function assertFiniteNumber(\r\n value: unknown,\r\n name: string,\r\n): asserts value is number {\r\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\r\n throw new TypeError(`${name} must be a finite number`);\r\n }\r\n}\r\n\r\nexport function escapeRegExp(value: string): string {\r\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n}\r\n","import { escapeRegExp } from \"../internal/validation.js\";\r\n\r\n/**\r\n * Shared validation regular expressions for Indian and general form fields.\r\n * These patterns check shape only. They do not verify checksums, ownership,\r\n * or whether a value is officially issued.\r\n */\r\nexport const ValidationPatterns = {\r\n YEAR: /^\\d{4}$/,\r\n OTP: /^\\d{6}$/,\r\n PINCODE: /^\\d{6}$/,\r\n POSTAL_CODE: /^\\d{6}$/,\r\n NUMERIC: /^[0-9]+$/,\r\n MOBILE: /^[6-9]\\d{9}$/,\r\n NAME: /^[a-zA-Z\\s\\-']+$/,\r\n ALPHABETIC: /^[a-zA-Z]+$/,\r\n LOWERCASE_ONLY: /^[a-z_]+$/,\r\n UPPERCASE_ONLY: /^[A-Z_]+$/,\r\n USERNAME: /^[a-zA-Z0-9_-]+$/,\r\n LOWER_NUMERIC: /^[a-z0-9_]+$/,\r\n UPPER_NUMERIC: /^[A-Z0-9_]+$/,\r\n LOWER_WITH_HYPHENS: /^[a-z-]+$/,\r\n UPPER_WITH_HYPHENS: /^[A-Z-]+$/,\r\n ALPHANUMERIC: /^[a-zA-Z0-9-\\s]+$/,\r\n PERMISSION_NAME: /^[a-z0-9._-]+$/,\r\n AADHAR_CARD: /^[2-9][0-9]{11}$/,\r\n LOWER_NUMERIC_WITH_HYPHENS: /^[a-z0-9-]+$/,\r\n UPPER_NUMERIC_WITH_HYPHENS: /^[A-Z0-9-]+$/,\r\n ALPHANUMERIC_WITH_SPACES: /^[a-zA-Z0-9\\s]+$/,\r\n ALPHANUMERIC_WITHOUT_SPACES: /^[a-zA-Z0-9]+$/,\r\n PAN_CARD: /^[A-Za-z]{5}[0-9]{4}[A-Za-z]$/,\r\n ALPHANUMERIC_WITH_UNDERSCORES: /^[a-zA-Z0-9-_]+$/,\r\n MODEL_NAME: /^[a-zA-Z0-9_\\s\\-/\\\\*+()[\\]:'\",.%&]+$/,\r\n NOTE: /^[a-zA-Z0-9\\s/\\\\,.\\-_+=<>()[\\]{}@#$%^&*~`\"',;:’]+$/,\r\n EMAIL: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/,\r\n VEHICLE_NUMBER: /^[A-Za-z]{2}\\d{1,2}[A-Za-z]{1,3}\\d{1,4}$/,\r\n PASSWORD: /^(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[@$!%*?&])[a-zA-Z0-9@$!%*?&]{8,16}$/,\r\n URL: /^https?:\\/\\/(?:www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/,\r\n DATE: /^\\d{4}-\\d{2}-\\d{2}$/,\r\n CURRENCY: /^\\d+(?:\\.\\d{1,2})?$/,\r\n TIME: /^(?:[01]?\\d|2[0-3]):[0-5]\\d$/,\r\n MESSAGE: /^[a-zA-Z0-9\\s.,!?_\\-@#()&%$+=:;\"'<>[\\]{}|\\\\/]+$/,\r\n DOMAIN_HOSTNAME:\r\n /^(?=.{1,253}$)(?:localhost|(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z]{2,}|[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)$/i,\r\n} as const;\r\n\r\nexport type ValidationPatternName = keyof typeof ValidationPatterns;\r\n\r\n/**\r\n * Tests a string against a named validation pattern or a custom regular expression.\r\n *\r\n * @example\r\n * testPattern(\"9876543210\", \"MOBILE\") // true\r\n * testPattern(\"user@example.com\", ValidationPatterns.EMAIL) // true\r\n */\r\nexport function testPattern(\r\n value: string,\r\n pattern: ValidationPatternName | RegExp,\r\n): boolean {\r\n if (typeof pattern === \"string\") {\r\n const namedPattern = ValidationPatterns[pattern];\r\n if (!namedPattern) {\r\n throw new TypeError(`Unknown validation pattern: ${pattern}`);\r\n }\r\n return namedPattern.test(value);\r\n }\r\n\r\n return pattern.test(value);\r\n}\r\n\r\n/**\r\n * Returns a named validation pattern.\r\n *\r\n * @example\r\n * getPattern(\"PINCODE\") // /^\\d{6}$/\r\n */\r\nexport function getPattern(name: ValidationPatternName): RegExp {\r\n const pattern = ValidationPatterns[name];\r\n if (!pattern) {\r\n throw new TypeError(`Unknown validation pattern: ${name}`);\r\n }\r\n\r\n return pattern;\r\n}\r\n\r\n/**\r\n * Escapes special regular-expression characters in a string.\r\n */\r\nexport function escapeRegex(value: string): string {\r\n return escapeRegExp(value);\r\n}\r\n\r\nexport { escapeRegex as escapeRegExp };\r\n"]}
@@ -0,0 +1,43 @@
1
+ 'use strict';
2
+
3
+ // src/response/index.ts
4
+ function createSuccessResponse(options = {}) {
5
+ const response = { success: true };
6
+ if (options.message) {
7
+ response.message = options.message;
8
+ }
9
+ if (options.data !== void 0) {
10
+ response.data = options.data;
11
+ }
12
+ if (options.meta !== void 0) {
13
+ response.meta = options.meta;
14
+ }
15
+ if (options.requestId) {
16
+ response.request_id = options.requestId;
17
+ }
18
+ return response;
19
+ }
20
+ function createErrorResponse(options = {}) {
21
+ const response = { success: false };
22
+ if (options.message) {
23
+ response.message = options.message;
24
+ }
25
+ if (options.code !== void 0) {
26
+ response.code = options.code;
27
+ }
28
+ if (options.errors !== void 0) {
29
+ response.errors = options.errors;
30
+ }
31
+ if (options.details !== void 0) {
32
+ response.details = options.details;
33
+ }
34
+ if (options.requestId) {
35
+ response.request_id = options.requestId;
36
+ }
37
+ return response;
38
+ }
39
+
40
+ exports.createErrorResponse = createErrorResponse;
41
+ exports.createSuccessResponse = createSuccessResponse;
42
+ //# sourceMappingURL=index.cjs.map
43
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/response/index.ts"],"names":[],"mappings":";;;AAoCO,SAAS,qBAAA,CACd,OAAA,GAA2C,EAAC,EACxB;AACpB,EAAA,MAAM,QAAA,GAA+B,EAAE,OAAA,EAAS,IAAA,EAAK;AAErD,EAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,IAAA,QAAA,CAAS,UAAU,OAAA,CAAQ,OAAA;AAAA,EAC7B;AACA,EAAA,IAAI,OAAA,CAAQ,SAAS,MAAA,EAAW;AAC9B,IAAA,QAAA,CAAS,OAAO,OAAA,CAAQ,IAAA;AAAA,EAC1B;AACA,EAAA,IAAI,OAAA,CAAQ,SAAS,MAAA,EAAW;AAC9B,IAAA,QAAA,CAAS,OAAO,OAAA,CAAQ,IAAA;AAAA,EAC1B;AACA,EAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,IAAA,QAAA,CAAS,aAAa,OAAA,CAAQ,SAAA;AAAA,EAChC;AAEA,EAAA,OAAO,QAAA;AACT;AAMO,SAAS,mBAAA,CAAoB,OAAA,GAAsC,EAAC,EAAkB;AAC3F,EAAA,MAAM,QAAA,GAA0B,EAAE,OAAA,EAAS,KAAA,EAAM;AAEjD,EAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,IAAA,QAAA,CAAS,UAAU,OAAA,CAAQ,OAAA;AAAA,EAC7B;AACA,EAAA,IAAI,OAAA,CAAQ,SAAS,MAAA,EAAW;AAC9B,IAAA,QAAA,CAAS,OAAO,OAAA,CAAQ,IAAA;AAAA,EAC1B;AACA,EAAA,IAAI,OAAA,CAAQ,WAAW,MAAA,EAAW;AAChC,IAAA,QAAA,CAAS,SAAS,OAAA,CAAQ,MAAA;AAAA,EAC5B;AACA,EAAA,IAAI,OAAA,CAAQ,YAAY,MAAA,EAAW;AACjC,IAAA,QAAA,CAAS,UAAU,OAAA,CAAQ,OAAA;AAAA,EAC7B;AACA,EAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,IAAA,QAAA,CAAS,aAAa,OAAA,CAAQ,SAAA;AAAA,EAChC;AAEA,EAAA,OAAO,QAAA;AACT","file":"index.cjs","sourcesContent":["export interface SuccessResponse<T = unknown> {\r\n success: true;\r\n message?: string;\r\n data?: T;\r\n meta?: unknown;\r\n request_id?: string;\r\n}\r\n\r\nexport interface ErrorResponse {\r\n success: false;\r\n message?: string;\r\n code?: string | number;\r\n errors?: unknown;\r\n details?: unknown;\r\n request_id?: string;\r\n}\r\n\r\nexport interface CreateSuccessResponseOptions<T> {\r\n data?: T;\r\n message?: string;\r\n meta?: unknown;\r\n requestId?: string;\r\n}\r\n\r\nexport interface CreateErrorResponseOptions {\r\n message?: string;\r\n code?: string | number;\r\n errors?: unknown;\r\n details?: unknown;\r\n requestId?: string;\r\n}\r\n\r\n/**\r\n * Builds a framework-independent success payload.\r\n * This does not write HTTP headers or call Express `res.json`.\r\n */\r\nexport function createSuccessResponse<T>(\r\n options: CreateSuccessResponseOptions<T> = {},\r\n): SuccessResponse<T> {\r\n const response: SuccessResponse<T> = { success: true };\r\n\r\n if (options.message) {\r\n response.message = options.message;\r\n }\r\n if (options.data !== undefined) {\r\n response.data = options.data;\r\n }\r\n if (options.meta !== undefined) {\r\n response.meta = options.meta;\r\n }\r\n if (options.requestId) {\r\n response.request_id = options.requestId;\r\n }\r\n\r\n return response;\r\n}\r\n\r\n/**\r\n * Builds a framework-independent error payload.\r\n * This does not write HTTP headers or call Express `res.json`.\r\n */\r\nexport function createErrorResponse(options: CreateErrorResponseOptions = {}): ErrorResponse {\r\n const response: ErrorResponse = { success: false };\r\n\r\n if (options.message) {\r\n response.message = options.message;\r\n }\r\n if (options.code !== undefined) {\r\n response.code = options.code;\r\n }\r\n if (options.errors !== undefined) {\r\n response.errors = options.errors;\r\n }\r\n if (options.details !== undefined) {\r\n response.details = options.details;\r\n }\r\n if (options.requestId) {\r\n response.request_id = options.requestId;\r\n }\r\n\r\n return response;\r\n}\r\n"]}