stringzy 2.2.0 → 3.0.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 (151) hide show
  1. package/.github/workflows/publish.yml +29 -0
  2. package/.github/workflows/test-on-pr.yml +23 -0
  3. package/CONTRIBUTING.md +87 -0
  4. package/LICENSE +21 -21
  5. package/README.md +952 -723
  6. package/changelog.txt +110 -102
  7. package/dist/analyzing/characterCount.d.ts +1 -0
  8. package/dist/analyzing/characterCount.js +9 -0
  9. package/dist/analyzing/characterFrequency.d.ts +1 -0
  10. package/dist/analyzing/characterFrequency.js +16 -0
  11. package/dist/analyzing/complexity.d.ts +6 -0
  12. package/dist/analyzing/complexity.js +30 -0
  13. package/dist/analyzing/index.d.ts +20 -0
  14. package/dist/analyzing/index.js +29 -0
  15. package/dist/analyzing/readingDuration.d.ts +10 -0
  16. package/dist/analyzing/readingDuration.js +17 -0
  17. package/dist/analyzing/stringSimilarity.d.ts +8 -0
  18. package/dist/analyzing/stringSimilarity.js +145 -0
  19. package/dist/analyzing/wordCount.d.ts +1 -0
  20. package/dist/analyzing/wordCount.js +11 -0
  21. package/dist/formatting/capitalize.d.ts +1 -0
  22. package/dist/formatting/capitalize.js +12 -0
  23. package/dist/formatting/index.d.ts +11 -0
  24. package/dist/formatting/index.js +17 -0
  25. package/dist/formatting/number.d.ts +1 -0
  26. package/dist/formatting/number.js +7 -0
  27. package/dist/formatting/phone.d.ts +2 -0
  28. package/dist/formatting/phone.js +25 -0
  29. package/dist/index.d.ts +47 -0
  30. package/dist/index.js +30 -0
  31. package/dist/tests/analyzing/characterCount.test.d.ts +1 -0
  32. package/dist/tests/analyzing/characterCount.test.js +19 -0
  33. package/dist/tests/analyzing/characterFrequency.test.d.ts +1 -0
  34. package/dist/tests/analyzing/characterFrequency.test.js +22 -0
  35. package/dist/tests/analyzing/complexity.test.d.ts +1 -0
  36. package/dist/tests/analyzing/complexity.test.js +28 -0
  37. package/dist/tests/analyzing/readingDuration.test.d.ts +1 -0
  38. package/dist/tests/analyzing/readingDuration.test.js +45 -0
  39. package/dist/tests/analyzing/stringSimilarity.test.d.ts +1 -0
  40. package/dist/tests/analyzing/stringSimilarity.test.js +61 -0
  41. package/dist/tests/analyzing/wordCount.test.d.ts +1 -0
  42. package/dist/tests/analyzing/wordCount.test.js +22 -0
  43. package/dist/tests/formatting/capitalize.test.d.ts +1 -0
  44. package/dist/tests/formatting/capitalize.test.js +22 -0
  45. package/dist/tests/formatting/number.test.d.ts +1 -0
  46. package/dist/tests/formatting/number.test.js +19 -0
  47. package/dist/tests/formatting/phone.test.d.ts +1 -0
  48. package/dist/tests/formatting/phone.test.js +25 -0
  49. package/dist/tests/transformations/camelCase.test.d.ts +1 -0
  50. package/dist/tests/transformations/camelCase.test.js +19 -0
  51. package/dist/tests/transformations/capitalizeWords.test.d.ts +1 -0
  52. package/dist/tests/transformations/capitalizeWords.test.js +19 -0
  53. package/dist/tests/transformations/constantCase.test.d.ts +1 -0
  54. package/dist/tests/transformations/constantCase.test.js +19 -0
  55. package/dist/tests/transformations/deburr.test.d.ts +1 -0
  56. package/dist/tests/transformations/deburr.test.js +27 -0
  57. package/dist/tests/transformations/escapeHTML.test.d.ts +1 -0
  58. package/dist/tests/transformations/escapeHTML.test.js +46 -0
  59. package/dist/tests/transformations/initials.test.d.ts +1 -0
  60. package/dist/tests/transformations/initials.test.js +25 -0
  61. package/dist/tests/transformations/kebabCase.test.d.ts +1 -0
  62. package/dist/tests/transformations/kebabCase.test.js +19 -0
  63. package/dist/tests/transformations/maskSegment.test.d.ts +1 -0
  64. package/dist/tests/transformations/maskSegment.test.js +30 -0
  65. package/dist/tests/transformations/pascalCase.test.d.ts +1 -0
  66. package/dist/tests/transformations/pascalCase.test.js +19 -0
  67. package/dist/tests/transformations/removeDuplicates.test.d.ts +1 -0
  68. package/dist/tests/transformations/removeDuplicates.test.js +19 -0
  69. package/dist/tests/transformations/removeSpecialChars.test.d.ts +1 -0
  70. package/dist/tests/transformations/removeSpecialChars.test.js +22 -0
  71. package/dist/tests/transformations/removeWords.test.d.ts +1 -0
  72. package/dist/tests/transformations/removeWords.test.js +25 -0
  73. package/dist/tests/transformations/snakeCase.test.d.ts +1 -0
  74. package/dist/tests/transformations/snakeCase.test.js +19 -0
  75. package/dist/tests/transformations/titleCase.test.d.ts +1 -0
  76. package/dist/tests/transformations/titleCase.test.js +19 -0
  77. package/dist/tests/transformations/toSlug.test.d.ts +1 -0
  78. package/dist/tests/transformations/toSlug.test.js +22 -0
  79. package/dist/tests/transformations/truncateText.test.d.ts +1 -0
  80. package/dist/tests/transformations/truncateText.test.js +31 -0
  81. package/dist/tests/validations/isDate.test.d.ts +1 -0
  82. package/dist/tests/validations/isDate.test.js +55 -0
  83. package/dist/tests/validations/isEmail.test.d.ts +1 -0
  84. package/dist/tests/validations/isEmail.test.js +17 -0
  85. package/dist/tests/validations/isEmpty.test.d.ts +1 -0
  86. package/dist/tests/validations/isEmpty.test.js +19 -0
  87. package/dist/tests/validations/isHexColor.test.d.ts +1 -0
  88. package/dist/tests/validations/isHexColor.test.js +32 -0
  89. package/dist/tests/validations/isIPv4.test.d.ts +1 -0
  90. package/dist/tests/validations/isIPv4.test.js +59 -0
  91. package/dist/tests/validations/isSlug.test.d.ts +1 -0
  92. package/dist/tests/validations/isSlug.test.js +22 -0
  93. package/dist/tests/validations/isURL.test.d.ts +1 -0
  94. package/dist/tests/validations/isURL.test.js +18 -0
  95. package/dist/transformations/camelCase.d.ts +1 -0
  96. package/dist/transformations/camelCase.js +15 -0
  97. package/dist/transformations/capitalizeWords.d.ts +1 -0
  98. package/dist/transformations/capitalizeWords.js +9 -0
  99. package/dist/transformations/constantCase.d.ts +1 -0
  100. package/dist/transformations/constantCase.js +15 -0
  101. package/dist/transformations/deburr.d.ts +7 -0
  102. package/dist/transformations/deburr.js +16 -0
  103. package/dist/transformations/escapeHTML.d.ts +1 -0
  104. package/dist/transformations/escapeHTML.js +14 -0
  105. package/dist/transformations/index.d.ts +49 -0
  106. package/dist/transformations/index.js +67 -0
  107. package/dist/transformations/initials.d.ts +1 -0
  108. package/dist/transformations/initials.js +19 -0
  109. package/dist/transformations/kebabCase.d.ts +1 -0
  110. package/dist/transformations/kebabCase.js +15 -0
  111. package/dist/transformations/maskSegment.d.ts +9 -0
  112. package/dist/transformations/maskSegment.js +25 -0
  113. package/dist/transformations/pascalCase.d.ts +1 -0
  114. package/dist/transformations/pascalCase.js +15 -0
  115. package/dist/transformations/removeDuplicates.d.ts +1 -0
  116. package/dist/transformations/removeDuplicates.js +13 -0
  117. package/dist/transformations/removeSpecialChars.d.ts +1 -0
  118. package/dist/transformations/removeSpecialChars.js +12 -0
  119. package/dist/transformations/removeWords.d.ts +1 -0
  120. package/dist/transformations/removeWords.js +23 -0
  121. package/dist/transformations/snakeCase.d.ts +1 -0
  122. package/dist/transformations/snakeCase.js +15 -0
  123. package/dist/transformations/titleCase.d.ts +1 -0
  124. package/dist/transformations/titleCase.js +14 -0
  125. package/dist/transformations/toSlug.d.ts +1 -0
  126. package/dist/transformations/toSlug.js +13 -0
  127. package/dist/transformations/truncateText.d.ts +1 -0
  128. package/dist/transformations/truncateText.js +19 -0
  129. package/dist/validations/index.d.ts +23 -0
  130. package/dist/validations/index.js +33 -0
  131. package/dist/validations/isDate.d.ts +18 -0
  132. package/dist/validations/isDate.js +63 -0
  133. package/dist/validations/isEmail.d.ts +1 -0
  134. package/dist/validations/isEmail.js +7 -0
  135. package/dist/validations/isEmpty.d.ts +1 -0
  136. package/dist/validations/isEmpty.js +6 -0
  137. package/dist/validations/isHexColor.d.ts +7 -0
  138. package/dist/validations/isHexColor.js +15 -0
  139. package/dist/validations/isIPv4.d.ts +1 -0
  140. package/dist/validations/isIPv4.js +13 -0
  141. package/dist/validations/isSlug.d.ts +1 -0
  142. package/dist/validations/isSlug.js +10 -0
  143. package/dist/validations/isURL.d.ts +1 -0
  144. package/dist/validations/isURL.js +12 -0
  145. package/package.json +10 -4
  146. package/analysis.js +0 -21
  147. package/assets/stringzy-banner2.jpg +0 -0
  148. package/formatting.js +0 -37
  149. package/index.js +0 -75
  150. package/transformations.js +0 -190
  151. package/validations.js +0 -80
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const node_test_1 = require("node:test");
7
+ const node_assert_1 = __importDefault(require("node:assert"));
8
+ const pascalCase_1 = require("../../transformations/pascalCase");
9
+ (0, node_test_1.describe)('pascalCase', () => {
10
+ (0, node_test_1.it)('converts text to PascalCase', () => {
11
+ node_assert_1.default.strictEqual((0, pascalCase_1.pascalCase)('hello world'), 'HelloWorld');
12
+ });
13
+ (0, node_test_1.it)('handles empty string', () => {
14
+ node_assert_1.default.strictEqual((0, pascalCase_1.pascalCase)(''), '');
15
+ });
16
+ (0, node_test_1.it)('returns empty string for null', () => {
17
+ node_assert_1.default.strictEqual((0, pascalCase_1.pascalCase)(null), '');
18
+ });
19
+ });
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const node_test_1 = require("node:test");
7
+ const node_assert_1 = __importDefault(require("node:assert"));
8
+ const removeDuplicates_1 = require("../../transformations/removeDuplicates");
9
+ (0, node_test_1.describe)('removeDuplicates', () => {
10
+ (0, node_test_1.it)('removes duplicate words', () => {
11
+ node_assert_1.default.strictEqual((0, removeDuplicates_1.removeDuplicates)('foo bar foo'), 'foo bar');
12
+ });
13
+ (0, node_test_1.it)('returns input if no duplicates', () => {
14
+ node_assert_1.default.strictEqual((0, removeDuplicates_1.removeDuplicates)('foo bar'), 'foo bar');
15
+ });
16
+ (0, node_test_1.it)('throws if input is not a string', () => {
17
+ node_assert_1.default.throws(() => (0, removeDuplicates_1.removeDuplicates)(123), /Input must be a string/);
18
+ });
19
+ });
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const node_test_1 = require("node:test");
7
+ const node_assert_1 = __importDefault(require("node:assert"));
8
+ const removeSpecialChars_1 = require("../../transformations/removeSpecialChars");
9
+ (0, node_test_1.describe)('removeSpecialChars', () => {
10
+ (0, node_test_1.it)('removes special characters', () => {
11
+ node_assert_1.default.strictEqual((0, removeSpecialChars_1.removeSpecialChars)('hello@world!'), 'helloworld');
12
+ });
13
+ (0, node_test_1.it)('replaces special characters with custom string', () => {
14
+ node_assert_1.default.strictEqual((0, removeSpecialChars_1.removeSpecialChars)('hello@world!', '-'), 'hello-world-');
15
+ });
16
+ (0, node_test_1.it)('throws if input is not a string', () => {
17
+ node_assert_1.default.throws(() => (0, removeSpecialChars_1.removeSpecialChars)(123), /Invalid argument/);
18
+ });
19
+ (0, node_test_1.it)('throws if replacement is not a string', () => {
20
+ node_assert_1.default.throws(() => (0, removeSpecialChars_1.removeSpecialChars)('abc', 123), /Replacement must be a string/);
21
+ });
22
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const node_test_1 = require("node:test");
7
+ const node_assert_1 = __importDefault(require("node:assert"));
8
+ const removeWords_1 = require("../../transformations/removeWords");
9
+ (0, node_test_1.describe)('removeWords', () => {
10
+ (0, node_test_1.it)('removes a single word', () => {
11
+ node_assert_1.default.strictEqual((0, removeWords_1.removeWords)('hello world', 'world'), 'hello');
12
+ });
13
+ (0, node_test_1.it)('removes multiple words', () => {
14
+ node_assert_1.default.strictEqual((0, removeWords_1.removeWords)('foo bar baz', ['bar', 'baz']), 'foo');
15
+ });
16
+ (0, node_test_1.it)('returns empty string for empty input', () => {
17
+ node_assert_1.default.strictEqual((0, removeWords_1.removeWords)('', 'foo'), '');
18
+ });
19
+ (0, node_test_1.it)('throws if input is not a string', () => {
20
+ node_assert_1.default.throws(() => (0, removeWords_1.removeWords)(123, 'foo'), /First parameter must be a string/);
21
+ });
22
+ (0, node_test_1.it)('throws if wordsToRemove is not string or array', () => {
23
+ node_assert_1.default.throws(() => (0, removeWords_1.removeWords)('foo', 123), /Second parameter must be a string or an array/);
24
+ });
25
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const node_test_1 = require("node:test");
7
+ const node_assert_1 = __importDefault(require("node:assert"));
8
+ const snakeCase_1 = require("../../transformations/snakeCase");
9
+ (0, node_test_1.describe)('snakeCase', () => {
10
+ (0, node_test_1.it)('converts text to snake_case', () => {
11
+ node_assert_1.default.strictEqual((0, snakeCase_1.snakeCase)('hello world'), 'hello_world');
12
+ });
13
+ (0, node_test_1.it)('handles camelCase', () => {
14
+ node_assert_1.default.strictEqual((0, snakeCase_1.snakeCase)('helloWorld'), 'hello_world');
15
+ });
16
+ (0, node_test_1.it)('returns empty string for null', () => {
17
+ node_assert_1.default.strictEqual((0, snakeCase_1.snakeCase)(null), '');
18
+ });
19
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const node_test_1 = require("node:test");
7
+ const node_assert_1 = __importDefault(require("node:assert"));
8
+ const titleCase_1 = require("../../transformations/titleCase");
9
+ (0, node_test_1.describe)('titleCase', () => {
10
+ (0, node_test_1.it)('converts text to Title Case', () => {
11
+ node_assert_1.default.strictEqual((0, titleCase_1.titleCase)('hello world'), 'Hello World');
12
+ });
13
+ (0, node_test_1.it)('handles empty string', () => {
14
+ node_assert_1.default.strictEqual((0, titleCase_1.titleCase)(''), '');
15
+ });
16
+ (0, node_test_1.it)('returns empty string for null', () => {
17
+ node_assert_1.default.strictEqual((0, titleCase_1.titleCase)(null), '');
18
+ });
19
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const node_test_1 = require("node:test");
7
+ const node_assert_1 = __importDefault(require("node:assert"));
8
+ const toSlug_1 = require("../../transformations/toSlug");
9
+ (0, node_test_1.describe)('toSlug', () => {
10
+ (0, node_test_1.it)('converts text to slug', () => {
11
+ node_assert_1.default.strictEqual((0, toSlug_1.toSlug)('Hello World!'), 'hello-world');
12
+ });
13
+ (0, node_test_1.it)('handles already slugged text', () => {
14
+ node_assert_1.default.strictEqual((0, toSlug_1.toSlug)('already-slugged'), 'already-slugged');
15
+ });
16
+ (0, node_test_1.it)('removes special characters', () => {
17
+ node_assert_1.default.strictEqual((0, toSlug_1.toSlug)('foo@bar#baz'), 'foobarbaz');
18
+ });
19
+ (0, node_test_1.it)('throws if input is not a string', () => {
20
+ node_assert_1.default.throws(() => (0, toSlug_1.toSlug)(123), /Invalid argument/);
21
+ });
22
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const node_test_1 = require("node:test");
7
+ const node_assert_1 = __importDefault(require("node:assert"));
8
+ const truncateText_1 = require("../../transformations/truncateText");
9
+ (0, node_test_1.describe)('truncateText', () => {
10
+ (0, node_test_1.it)('returns the original text if shorter than maxLength', () => {
11
+ node_assert_1.default.strictEqual((0, truncateText_1.truncateText)('hello', 10), 'hello');
12
+ });
13
+ (0, node_test_1.it)('truncates and adds suffix if text is longer', () => {
14
+ node_assert_1.default.strictEqual((0, truncateText_1.truncateText)('hello world', 5), 'he...');
15
+ });
16
+ (0, node_test_1.it)('truncates and adds custom suffix', () => {
17
+ node_assert_1.default.strictEqual((0, truncateText_1.truncateText)('abcdef', 5, '--'), 'abc--');
18
+ });
19
+ (0, node_test_1.it)('returns only suffix if maxLength < suffix.length', () => {
20
+ node_assert_1.default.strictEqual((0, truncateText_1.truncateText)('abcdef', 2), '...');
21
+ });
22
+ (0, node_test_1.it)('throws if text is not a string', () => {
23
+ node_assert_1.default.throws(() => (0, truncateText_1.truncateText)(123, 5), /Input text must be a string/);
24
+ });
25
+ (0, node_test_1.it)('throws if maxLength is negative', () => {
26
+ node_assert_1.default.throws(() => (0, truncateText_1.truncateText)('abc', -1), /maxLength must be a non-negative number/);
27
+ });
28
+ (0, node_test_1.it)('throws if suffix is not a string', () => {
29
+ node_assert_1.default.throws(() => (0, truncateText_1.truncateText)('abc', 5, 123), /Suffix must be a string/);
30
+ });
31
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const node_test_1 = require("node:test");
7
+ const node_assert_1 = __importDefault(require("node:assert"));
8
+ const isDate_1 = require("../../validations/isDate");
9
+ (0, node_test_1.describe)('isDate', () => {
10
+ (0, node_test_1.it)('validates dates formatted as YYYY-MM-DD', () => {
11
+ node_assert_1.default.strictEqual((0, isDate_1.isDate)('2020-01-01', isDate_1.DateFormats.YYYYMMDD), true);
12
+ node_assert_1.default.strictEqual((0, isDate_1.isDate)('1999-06-22', isDate_1.DateFormats.YYYYMMDD), true);
13
+ node_assert_1.default.strictEqual((0, isDate_1.isDate)('1852-12-31', isDate_1.DateFormats.YYYYMMDD), true);
14
+ });
15
+ (0, node_test_1.it)('invalidates dates formatted as YYYY-MM-DD with out-of-range months', () => {
16
+ node_assert_1.default.strictEqual((0, isDate_1.isDate)('2020-13-31', isDate_1.DateFormats.YYYYMMDD), false);
17
+ node_assert_1.default.strictEqual((0, isDate_1.isDate)('1000-02-40', isDate_1.DateFormats.YYYYMMDD), false);
18
+ node_assert_1.default.strictEqual((0, isDate_1.isDate)('1970-15-32', isDate_1.DateFormats.YYYYMMDD), false);
19
+ });
20
+ (0, node_test_1.it)('validates dates formatted as MM-DD-YYYY', () => {
21
+ node_assert_1.default.strictEqual((0, isDate_1.isDate)('12-31-2020', isDate_1.DateFormats.MMDDYYYY), true);
22
+ node_assert_1.default.strictEqual((0, isDate_1.isDate)('02-04-1900', isDate_1.DateFormats.MMDDYYYY), true);
23
+ node_assert_1.default.strictEqual((0, isDate_1.isDate)('05-20-1820', isDate_1.DateFormats.MMDDYYYY), true);
24
+ });
25
+ (0, node_test_1.it)('invalidates dates formatted as MM-DD-YYYY', () => {
26
+ node_assert_1.default.strictEqual((0, isDate_1.isDate)('13-31-2000', isDate_1.DateFormats.MMDDYYYY), false);
27
+ node_assert_1.default.strictEqual((0, isDate_1.isDate)('02-31-1990', isDate_1.DateFormats.MMDDYYYY), false);
28
+ node_assert_1.default.strictEqual((0, isDate_1.isDate)('01-33-1970', isDate_1.DateFormats.MMDDYYYY), false);
29
+ });
30
+ (0, node_test_1.it)('validates dates formatted as DD-MM-YYYY', () => {
31
+ node_assert_1.default.strictEqual((0, isDate_1.isDate)('31-12-2020', isDate_1.DateFormats.DDMMYYYY), true);
32
+ node_assert_1.default.strictEqual((0, isDate_1.isDate)('23-01-1888', isDate_1.DateFormats.DDMMYYYY), true);
33
+ node_assert_1.default.strictEqual((0, isDate_1.isDate)('28-02-2000', isDate_1.DateFormats.DDMMYYYY), true);
34
+ });
35
+ (0, node_test_1.it)('invalidates dates formatted as DD-MM-YYYY', () => {
36
+ node_assert_1.default.strictEqual((0, isDate_1.isDate)('32-12-2020', isDate_1.DateFormats.DDMMYYYY), false);
37
+ node_assert_1.default.strictEqual((0, isDate_1.isDate)('30-02-2001', isDate_1.DateFormats.DDMMYYYY), false);
38
+ node_assert_1.default.strictEqual((0, isDate_1.isDate)('01-13-1999', isDate_1.DateFormats.DDMMYYYY), false);
39
+ });
40
+ (0, node_test_1.it)('properly handles other valid separators', () => {
41
+ node_assert_1.default.strictEqual((0, isDate_1.isDate)('2020/12/31', isDate_1.DateFormats.YYYYMMDD, '/'), true);
42
+ node_assert_1.default.strictEqual((0, isDate_1.isDate)('2020.12.31', isDate_1.DateFormats.YYYYMMDD, '.'), true);
43
+ });
44
+ (0, node_test_1.it)('properly invalidates non-valid separators', () => {
45
+ node_assert_1.default.strictEqual((0, isDate_1.isDate)('2020?12?31', isDate_1.DateFormats.YYYYMMDD, '?'), false);
46
+ node_assert_1.default.strictEqual((0, isDate_1.isDate)('2020!12!31', isDate_1.DateFormats.YYYYMMDD, '!'), false);
47
+ });
48
+ (0, node_test_1.it)('invalidates improperly formatted dates', () => {
49
+ node_assert_1.default.strictEqual((0, isDate_1.isDate)('1-01-2000', isDate_1.DateFormats.MMDDYYYY), false);
50
+ node_assert_1.default.strictEqual((0, isDate_1.isDate)('01-1-2000', isDate_1.DateFormats.MMDDYYYY), false);
51
+ node_assert_1.default.strictEqual((0, isDate_1.isDate)('01-1--2000', isDate_1.DateFormats.MMDDYYYY), false);
52
+ node_assert_1.default.strictEqual((0, isDate_1.isDate)('not a date', isDate_1.DateFormats.MMDDYYYY), false);
53
+ node_assert_1.default.strictEqual((0, isDate_1.isDate)(11012000, isDate_1.DateFormats.MMDDYYYY), false);
54
+ });
55
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const node_test_1 = require("node:test");
7
+ const node_assert_1 = __importDefault(require("node:assert"));
8
+ const isEmail_1 = require("../../validations/isEmail");
9
+ (0, node_test_1.describe)('isEmail', () => {
10
+ (0, node_test_1.it)('returns true for valid emails', () => {
11
+ node_assert_1.default.strictEqual((0, isEmail_1.isEmail)('foo@bar.com'), true);
12
+ });
13
+ (0, node_test_1.it)('returns false for invalid emails', () => {
14
+ node_assert_1.default.strictEqual((0, isEmail_1.isEmail)('foo@bar'), false);
15
+ node_assert_1.default.strictEqual((0, isEmail_1.isEmail)(''), false);
16
+ });
17
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const node_test_1 = require("node:test");
7
+ const node_assert_1 = __importDefault(require("node:assert"));
8
+ const isEmpty_1 = require("../../validations/isEmpty");
9
+ (0, node_test_1.describe)('isEmpty', () => {
10
+ (0, node_test_1.it)('returns true for empty string', () => {
11
+ node_assert_1.default.strictEqual((0, isEmpty_1.isEmpty)(''), true);
12
+ });
13
+ (0, node_test_1.it)('returns true for whitespace string', () => {
14
+ node_assert_1.default.strictEqual((0, isEmpty_1.isEmpty)(' '), true);
15
+ });
16
+ (0, node_test_1.it)('returns false for non-empty string', () => {
17
+ node_assert_1.default.strictEqual((0, isEmpty_1.isEmpty)('foo'), false);
18
+ });
19
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const node_test_1 = require("node:test");
7
+ const node_assert_1 = __importDefault(require("node:assert"));
8
+ const isHexColor_1 = require("../../validations/isHexColor");
9
+ (0, node_test_1.describe)("isHexColor", () => {
10
+ (0, node_test_1.it)("returns true for valid hex colors", () => {
11
+ node_assert_1.default.strictEqual((0, isHexColor_1.isHexColor)("#abc"), true);
12
+ node_assert_1.default.strictEqual((0, isHexColor_1.isHexColor)("abc"), true);
13
+ node_assert_1.default.strictEqual((0, isHexColor_1.isHexColor)("#a1b2c3"), true);
14
+ node_assert_1.default.strictEqual((0, isHexColor_1.isHexColor)("a1b2c3"), true);
15
+ node_assert_1.default.strictEqual((0, isHexColor_1.isHexColor)("#A1B2C3"), true);
16
+ node_assert_1.default.strictEqual((0, isHexColor_1.isHexColor)(" #fff "), true);
17
+ });
18
+ (0, node_test_1.it)("returns false for invalid hex colors", () => {
19
+ node_assert_1.default.strictEqual((0, isHexColor_1.isHexColor)("#12G"), false);
20
+ node_assert_1.default.strictEqual((0, isHexColor_1.isHexColor)("xyz"), false);
21
+ node_assert_1.default.strictEqual((0, isHexColor_1.isHexColor)("#ab"), false);
22
+ node_assert_1.default.strictEqual((0, isHexColor_1.isHexColor)("#12345"), false);
23
+ node_assert_1.default.strictEqual((0, isHexColor_1.isHexColor)("12345"), false);
24
+ node_assert_1.default.strictEqual((0, isHexColor_1.isHexColor)("#1234567"), false);
25
+ node_assert_1.default.strictEqual((0, isHexColor_1.isHexColor)("1234567"), false);
26
+ node_assert_1.default.strictEqual((0, isHexColor_1.isHexColor)("#1234g6"), false);
27
+ node_assert_1.default.strictEqual((0, isHexColor_1.isHexColor)("1234g6"), false);
28
+ node_assert_1.default.strictEqual((0, isHexColor_1.isHexColor)(""), false);
29
+ node_assert_1.default.strictEqual((0, isHexColor_1.isHexColor)(" "), false);
30
+ node_assert_1.default.strictEqual((0, isHexColor_1.isHexColor)("blue"), false);
31
+ });
32
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const node_test_1 = require("node:test");
7
+ const node_assert_1 = __importDefault(require("node:assert"));
8
+ const isIPv4_1 = require("../../validations/isIPv4");
9
+ (0, node_test_1.describe)('isIPv4', () => {
10
+ (0, node_test_1.it)('returns true for valid IPv4 addresses', () => {
11
+ node_assert_1.default.strictEqual((0, isIPv4_1.isIPv4)('192.168.1.1'), true);
12
+ node_assert_1.default.strictEqual((0, isIPv4_1.isIPv4)('0.0.0.0'), true);
13
+ });
14
+ (0, node_test_1.it)('returns false for invalid IPv4 addresses with out-of-range numbers', () => {
15
+ node_assert_1.default.strictEqual((0, isIPv4_1.isIPv4)('256.1.1.1'), false);
16
+ node_assert_1.default.strictEqual((0, isIPv4_1.isIPv4)('1.256.1.1'), false);
17
+ node_assert_1.default.strictEqual((0, isIPv4_1.isIPv4)('-1.0.0.1'), false);
18
+ });
19
+ (0, node_test_1.it)('returns false for invalid IPv4 addresses with wrong number of parts', () => {
20
+ node_assert_1.default.strictEqual((0, isIPv4_1.isIPv4)('192.168.1'), false);
21
+ node_assert_1.default.strictEqual((0, isIPv4_1.isIPv4)('192'), false);
22
+ node_assert_1.default.strictEqual((0, isIPv4_1.isIPv4)('192.168'), false);
23
+ node_assert_1.default.strictEqual((0, isIPv4_1.isIPv4)(''), false);
24
+ });
25
+ (0, node_test_1.it)('returns false for IPv4 addresses with leading zeros', () => {
26
+ node_assert_1.default.strictEqual((0, isIPv4_1.isIPv4)('192.168.01.1'), false);
27
+ node_assert_1.default.strictEqual((0, isIPv4_1.isIPv4)('01.168.1.1'), false);
28
+ node_assert_1.default.strictEqual((0, isIPv4_1.isIPv4)('192.168.1.001'), false);
29
+ node_assert_1.default.strictEqual((0, isIPv4_1.isIPv4)('000.0.0.1'), false);
30
+ });
31
+ (0, node_test_1.it)('returns false for non-numeric parts', () => {
32
+ node_assert_1.default.strictEqual((0, isIPv4_1.isIPv4)('192.168.1.a'), false);
33
+ node_assert_1.default.strictEqual((0, isIPv4_1.isIPv4)('abc.168.1.1'), false);
34
+ });
35
+ (0, node_test_1.it)('returns false for IPv4 addresses with special characters', () => {
36
+ node_assert_1.default.strictEqual((0, isIPv4_1.isIPv4)('192.168.1.1.'), false);
37
+ node_assert_1.default.strictEqual((0, isIPv4_1.isIPv4)('.192.168.1.1'), false);
38
+ node_assert_1.default.strictEqual((0, isIPv4_1.isIPv4)('192..168.1.1'), false);
39
+ node_assert_1.default.strictEqual((0, isIPv4_1.isIPv4)('192.168.1.1/24'), false);
40
+ });
41
+ (0, node_test_1.it)('returns false for empty strings and edge cases', () => {
42
+ node_assert_1.default.strictEqual((0, isIPv4_1.isIPv4)(''), false);
43
+ node_assert_1.default.strictEqual((0, isIPv4_1.isIPv4)('...'), false);
44
+ node_assert_1.default.strictEqual((0, isIPv4_1.isIPv4)('192.168..1'), false);
45
+ node_assert_1.default.strictEqual((0, isIPv4_1.isIPv4)('192.168.1.'), false);
46
+ node_assert_1.default.strictEqual((0, isIPv4_1.isIPv4)('.192.168.1'), false);
47
+ });
48
+ (0, node_test_1.it)('returns false for decimal numbers', () => {
49
+ node_assert_1.default.strictEqual((0, isIPv4_1.isIPv4)('192.168.1.1.5'), false);
50
+ node_assert_1.default.strictEqual((0, isIPv4_1.isIPv4)('192.168.1.5.0'), false);
51
+ node_assert_1.default.strictEqual((0, isIPv4_1.isIPv4)('1.2.3.4.5'), false);
52
+ });
53
+ (0, node_test_1.it)('returns false for hexadecimal and other number formats', () => {
54
+ node_assert_1.default.strictEqual((0, isIPv4_1.isIPv4)('0x192.168.1.1'), false);
55
+ node_assert_1.default.strictEqual((0, isIPv4_1.isIPv4)('192.0x168.1.1'), false);
56
+ node_assert_1.default.strictEqual((0, isIPv4_1.isIPv4)('192.168.0x1.1'), false);
57
+ node_assert_1.default.strictEqual((0, isIPv4_1.isIPv4)('192.168.1.0x1'), false);
58
+ });
59
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const node_test_1 = require("node:test");
7
+ const node_assert_1 = __importDefault(require("node:assert"));
8
+ const isSlug_1 = require("../../validations/isSlug");
9
+ (0, node_test_1.describe)('isSlug', () => {
10
+ (0, node_test_1.it)('returns true for valid slug', () => {
11
+ node_assert_1.default.strictEqual((0, isSlug_1.isSlug)('foo-bar-baz'), true);
12
+ });
13
+ (0, node_test_1.it)('returns false for string with spaces', () => {
14
+ node_assert_1.default.strictEqual((0, isSlug_1.isSlug)('foo bar'), false);
15
+ });
16
+ (0, node_test_1.it)('returns false for empty string', () => {
17
+ node_assert_1.default.strictEqual((0, isSlug_1.isSlug)(''), false);
18
+ });
19
+ (0, node_test_1.it)('returns false for non-string input', () => {
20
+ node_assert_1.default.strictEqual((0, isSlug_1.isSlug)(123), false);
21
+ });
22
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const node_test_1 = require("node:test");
7
+ const node_assert_1 = __importDefault(require("node:assert"));
8
+ const isURL_1 = require("../../validations/isURL");
9
+ (0, node_test_1.describe)('isURL', () => {
10
+ (0, node_test_1.it)('returns true for valid URLs', () => {
11
+ node_assert_1.default.strictEqual((0, isURL_1.isURL)('https://example.com'), true);
12
+ node_assert_1.default.strictEqual((0, isURL_1.isURL)('http://localhost:3000'), true);
13
+ });
14
+ (0, node_test_1.it)('returns false for invalid URLs', () => {
15
+ node_assert_1.default.strictEqual((0, isURL_1.isURL)('not a url'), false);
16
+ node_assert_1.default.strictEqual((0, isURL_1.isURL)(''), false);
17
+ });
18
+ });
@@ -0,0 +1 @@
1
+ export declare function camelCase(text: string): string;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.camelCase = camelCase;
4
+ function camelCase(text) {
5
+ if (text == null)
6
+ return '';
7
+ return text
8
+ .trim()
9
+ .toLowerCase()
10
+ .replace(/[^\w\s]/g, ' ')
11
+ .replace(/_/g, ' ')
12
+ .replace(/\s+/g, ' ')
13
+ .replace(/\s(.)/g, (_, character) => character.toUpperCase())
14
+ .replace(/^(.)/, (_, character) => character.toLowerCase());
15
+ }
@@ -0,0 +1 @@
1
+ export declare function capitalizeWords(text: string): string;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.capitalizeWords = capitalizeWords;
4
+ function capitalizeWords(text) {
5
+ if (typeof text !== "string") {
6
+ throw new Error("Invalid argument. Expected a string.");
7
+ }
8
+ return text.replace(/\b\w/g, (char) => char.toUpperCase());
9
+ }
@@ -0,0 +1 @@
1
+ export declare function constantCase(text: string): string;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.constantCase = constantCase;
4
+ function constantCase(text) {
5
+ if (text == null)
6
+ return '';
7
+ return text
8
+ .trim()
9
+ .replace(/[\s-]+/g, '_')
10
+ .replace(/([a-z])([A-Z])/g, '$1_$2')
11
+ .replace(/[^\w_]/g, '_')
12
+ .toUpperCase()
13
+ .replace(/_+/g, '_')
14
+ .replace(/^_+|_+$/g, '');
15
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Removes accents and diacritics from letters in a string.
3
+ * @param str - Input string
4
+ * @returns A deburred string without accented characters.
5
+ * @throws Error if input is not a string
6
+ */
7
+ export declare function deburr(str: string): string;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deburr = deburr;
4
+ /**
5
+ * Removes accents and diacritics from letters in a string.
6
+ * @param str - Input string
7
+ * @returns A deburred string without accented characters.
8
+ * @throws Error if input is not a string
9
+ */
10
+ function deburr(str) {
11
+ if (typeof str !== 'string') {
12
+ throw new Error('Input must be a string');
13
+ }
14
+ // Normalize and strip combining marks (diacritics)
15
+ return str.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
16
+ }
@@ -0,0 +1 @@
1
+ export declare function escapeHtml(str: string): string;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.escapeHtml = escapeHtml;
4
+ function escapeHtml(str) {
5
+ const htmlEscapes = {
6
+ '&': '&amp;',
7
+ '<': '&lt;',
8
+ '>': '&gt;',
9
+ '"': '&quot;',
10
+ "'": '&#39;'
11
+ };
12
+ return str.replace(/[&<>"']/g, (match) => htmlEscapes[match]);
13
+ }
14
+ ;
@@ -0,0 +1,49 @@
1
+ export { camelCase } from './camelCase';
2
+ export { capitalizeWords } from './capitalizeWords';
3
+ export { constantCase } from './constantCase';
4
+ export { initials } from './initials';
5
+ export { kebabCase } from './kebabCase';
6
+ export { pascalCase } from './pascalCase';
7
+ export { removeDuplicates } from './removeDuplicates';
8
+ export { removeSpecialChars } from './removeSpecialChars';
9
+ export { removeWords } from './removeWords';
10
+ export { snakeCase } from './snakeCase';
11
+ export { titleCase } from './titleCase';
12
+ export { toSlug } from './toSlug';
13
+ export { truncateText } from './truncateText';
14
+ export { escapeHtml } from './escapeHTML';
15
+ export { maskSegment } from './maskSegment';
16
+ import { camelCase } from './camelCase';
17
+ import { capitalizeWords } from './capitalizeWords';
18
+ import { constantCase } from './constantCase';
19
+ import { initials } from './initials';
20
+ import { kebabCase } from './kebabCase';
21
+ import { pascalCase } from './pascalCase';
22
+ import { removeDuplicates } from './removeDuplicates';
23
+ import { removeSpecialChars } from './removeSpecialChars';
24
+ import { removeWords } from './removeWords';
25
+ import { snakeCase } from './snakeCase';
26
+ import { titleCase } from './titleCase';
27
+ import { toSlug } from './toSlug';
28
+ import { truncateText } from './truncateText';
29
+ import { escapeHtml } from './escapeHTML';
30
+ import { maskSegment } from './maskSegment';
31
+ import { deburr } from './deburr';
32
+ export declare const transformations: {
33
+ camelCase: typeof camelCase;
34
+ capitalizeWords: typeof capitalizeWords;
35
+ constantCase: typeof constantCase;
36
+ initials: typeof initials;
37
+ kebabCase: typeof kebabCase;
38
+ pascalCase: typeof pascalCase;
39
+ removeDuplicates: typeof removeDuplicates;
40
+ removeSpecialChars: typeof removeSpecialChars;
41
+ removeWords: typeof removeWords;
42
+ snakeCase: typeof snakeCase;
43
+ titleCase: typeof titleCase;
44
+ toSlug: typeof toSlug;
45
+ truncateText: typeof truncateText;
46
+ escapeHtml: typeof escapeHtml;
47
+ maskSegment: typeof maskSegment;
48
+ deburr: typeof deburr;
49
+ };