namefully 1.0.9 → 1.2.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 (189) hide show
  1. package/LICENSE +21 -674
  2. package/dist/example/index.js +2734 -0
  3. package/dist/lib/config.d.ts +121 -0
  4. package/dist/lib/config.js +189 -0
  5. package/dist/lib/config.js.map +1 -0
  6. package/dist/lib/constants.d.ts +4 -0
  7. package/dist/lib/constants.js +31 -0
  8. package/dist/lib/constants.js.map +1 -0
  9. package/dist/lib/error.d.ts +172 -0
  10. package/dist/lib/error.js +210 -0
  11. package/dist/lib/error.js.map +1 -0
  12. package/dist/lib/{usecases/index.d.ts → example/example.d.ts} +0 -0
  13. package/dist/lib/full-name.d.ts +71 -0
  14. package/dist/lib/full-name.js +147 -0
  15. package/dist/lib/full-name.js.map +1 -0
  16. package/dist/lib/index.d.ts +16 -6
  17. package/dist/lib/index.js +29 -8
  18. package/dist/lib/index.js.map +1 -1
  19. package/dist/lib/name.d.ts +177 -0
  20. package/dist/lib/name.js +322 -0
  21. package/dist/lib/name.js.map +1 -0
  22. package/dist/lib/namefully.d.ts +303 -208
  23. package/dist/lib/namefully.js +603 -442
  24. package/dist/lib/namefully.js.map +1 -1
  25. package/dist/lib/parser.d.ts +46 -0
  26. package/dist/lib/parser.js +173 -0
  27. package/dist/lib/parser.js.map +1 -0
  28. package/dist/lib/src/config.d.ts +121 -0
  29. package/dist/lib/src/constants.d.ts +4 -0
  30. package/dist/lib/src/error.d.ts +172 -0
  31. package/dist/lib/src/full-name.d.ts +71 -0
  32. package/dist/lib/src/index.d.ts +16 -6
  33. package/dist/lib/src/name.d.ts +177 -0
  34. package/dist/lib/src/namefully.d.ts +303 -208
  35. package/dist/lib/src/parser.d.ts +46 -0
  36. package/dist/lib/src/types.d.ts +127 -0
  37. package/dist/lib/src/utils.d.ts +63 -0
  38. package/dist/lib/src/validator.d.ts +66 -0
  39. package/dist/lib/types.d.ts +127 -0
  40. package/dist/lib/types.js +181 -0
  41. package/dist/lib/types.js.map +1 -0
  42. package/dist/lib/utils.d.ts +63 -0
  43. package/dist/lib/utils.js +138 -0
  44. package/dist/lib/utils.js.map +1 -0
  45. package/dist/lib/validator.d.ts +66 -0
  46. package/dist/lib/validator.js +332 -0
  47. package/dist/lib/validator.js.map +1 -0
  48. package/dist/umd/namefully.js +2191 -2111
  49. package/dist/umd/namefully.js.map +1 -1
  50. package/dist/umd/namefully.min.js +1 -1
  51. package/dist/umd/namefully.min.js.LICENSE.txt +8 -20
  52. package/dist/umd/namefully.min.js.map +1 -1
  53. package/package.json +50 -53
  54. package/readme.md +151 -175
  55. package/changelog.md +0 -114
  56. package/dist/lib/core/constants.d.ts +0 -26
  57. package/dist/lib/core/constants.js +0 -42
  58. package/dist/lib/core/constants.js.map +0 -1
  59. package/dist/lib/core/index.d.ts +0 -9
  60. package/dist/lib/core/index.js +0 -13
  61. package/dist/lib/core/index.js.map +0 -1
  62. package/dist/lib/core/parsers/array-name.parser.d.ts +0 -42
  63. package/dist/lib/core/parsers/array-name.parser.js +0 -84
  64. package/dist/lib/core/parsers/array-name.parser.js.map +0 -1
  65. package/dist/lib/core/parsers/array-string.parser.d.ts +0 -48
  66. package/dist/lib/core/parsers/array-string.parser.js +0 -96
  67. package/dist/lib/core/parsers/array-string.parser.js.map +0 -1
  68. package/dist/lib/core/parsers/index.d.ts +0 -11
  69. package/dist/lib/core/parsers/index.js +0 -11
  70. package/dist/lib/core/parsers/index.js.map +0 -1
  71. package/dist/lib/core/parsers/nama.parser.d.ts +0 -34
  72. package/dist/lib/core/parsers/nama.parser.js +0 -75
  73. package/dist/lib/core/parsers/nama.parser.js.map +0 -1
  74. package/dist/lib/core/parsers/parser.d.ts +0 -29
  75. package/dist/lib/core/parsers/parser.js +0 -3
  76. package/dist/lib/core/parsers/parser.js.map +0 -1
  77. package/dist/lib/core/parsers/string.parser.d.ts +0 -61
  78. package/dist/lib/core/parsers/string.parser.js +0 -63
  79. package/dist/lib/core/parsers/string.parser.js.map +0 -1
  80. package/dist/lib/core/utils/utils.d.ts +0 -14
  81. package/dist/lib/core/utils/utils.js +0 -67
  82. package/dist/lib/core/utils/utils.js.map +0 -1
  83. package/dist/lib/models/enums.d.ts +0 -91
  84. package/dist/lib/models/enums.js +0 -98
  85. package/dist/lib/models/enums.js.map +0 -1
  86. package/dist/lib/models/firstname.d.ts +0 -41
  87. package/dist/lib/models/firstname.js +0 -59
  88. package/dist/lib/models/firstname.js.map +0 -1
  89. package/dist/lib/models/index.d.ts +0 -12
  90. package/dist/lib/models/index.js +0 -15
  91. package/dist/lib/models/index.js.map +0 -1
  92. package/dist/lib/models/lastname.d.ts +0 -44
  93. package/dist/lib/models/lastname.js +0 -86
  94. package/dist/lib/models/lastname.js.map +0 -1
  95. package/dist/lib/models/misc.d.ts +0 -80
  96. package/dist/lib/models/misc.js +0 -3
  97. package/dist/lib/models/misc.js.map +0 -1
  98. package/dist/lib/models/name.d.ts +0 -48
  99. package/dist/lib/models/name.js +0 -72
  100. package/dist/lib/models/name.js.map +0 -1
  101. package/dist/lib/models/summary.d.ts +0 -23
  102. package/dist/lib/models/summary.js +0 -60
  103. package/dist/lib/models/summary.js.map +0 -1
  104. package/dist/lib/src/core/constants.d.ts +0 -26
  105. package/dist/lib/src/core/index.d.ts +0 -9
  106. package/dist/lib/src/core/parsers/array-name.parser.d.ts +0 -42
  107. package/dist/lib/src/core/parsers/array-string.parser.d.ts +0 -48
  108. package/dist/lib/src/core/parsers/index.d.ts +0 -11
  109. package/dist/lib/src/core/parsers/nama.parser.d.ts +0 -34
  110. package/dist/lib/src/core/parsers/parser.d.ts +0 -29
  111. package/dist/lib/src/core/parsers/string.parser.d.ts +0 -61
  112. package/dist/lib/src/core/utils/utils.d.ts +0 -14
  113. package/dist/lib/src/models/enums.d.ts +0 -91
  114. package/dist/lib/src/models/firstname.d.ts +0 -41
  115. package/dist/lib/src/models/index.d.ts +0 -12
  116. package/dist/lib/src/models/lastname.d.ts +0 -44
  117. package/dist/lib/src/models/misc.d.ts +0 -80
  118. package/dist/lib/src/models/name.d.ts +0 -48
  119. package/dist/lib/src/models/summary.d.ts +0 -23
  120. package/dist/lib/src/validators/array-name.validator.d.ts +0 -25
  121. package/dist/lib/src/validators/array-string.validator.d.ts +0 -43
  122. package/dist/lib/src/validators/common/validation-error.d.ts +0 -19
  123. package/dist/lib/src/validators/common/validation-rule.d.ts +0 -69
  124. package/dist/lib/src/validators/common/validation-type.d.ts +0 -24
  125. package/dist/lib/src/validators/firstname.validator.d.ts +0 -20
  126. package/dist/lib/src/validators/fullname.validator.d.ts +0 -21
  127. package/dist/lib/src/validators/index.d.ts +0 -21
  128. package/dist/lib/src/validators/lastname.validator.d.ts +0 -20
  129. package/dist/lib/src/validators/middlename.validator.d.ts +0 -20
  130. package/dist/lib/src/validators/nama.validator.d.ts +0 -21
  131. package/dist/lib/src/validators/namon.validator.d.ts +0 -20
  132. package/dist/lib/src/validators/prefix.validator.d.ts +0 -14
  133. package/dist/lib/src/validators/string-name.validator.d.ts +0 -20
  134. package/dist/lib/src/validators/suffix.validator.d.ts +0 -14
  135. package/dist/lib/src/validators/validator.d.ts +0 -13
  136. package/dist/lib/usecases/compress.usecase.d.ts +0 -8
  137. package/dist/lib/usecases/constants.d.ts +0 -7
  138. package/dist/lib/usecases/describe.usecase.d.ts +0 -12
  139. package/dist/lib/usecases/format.usecase.d.ts +0 -6
  140. package/dist/lib/usecases/namefully.usecase.d.ts +0 -14
  141. package/dist/lib/usecases/shorten.usecase.d.ts +0 -6
  142. package/dist/lib/validators/array-name.validator.d.ts +0 -25
  143. package/dist/lib/validators/array-name.validator.js +0 -82
  144. package/dist/lib/validators/array-name.validator.js.map +0 -1
  145. package/dist/lib/validators/array-string.validator.d.ts +0 -43
  146. package/dist/lib/validators/array-string.validator.js +0 -80
  147. package/dist/lib/validators/array-string.validator.js.map +0 -1
  148. package/dist/lib/validators/common/validation-error.d.ts +0 -19
  149. package/dist/lib/validators/common/validation-error.js +0 -26
  150. package/dist/lib/validators/common/validation-error.js.map +0 -1
  151. package/dist/lib/validators/common/validation-rule.d.ts +0 -69
  152. package/dist/lib/validators/common/validation-rule.js +0 -73
  153. package/dist/lib/validators/common/validation-rule.js.map +0 -1
  154. package/dist/lib/validators/common/validation-type.d.ts +0 -24
  155. package/dist/lib/validators/common/validation-type.js +0 -28
  156. package/dist/lib/validators/common/validation-type.js.map +0 -1
  157. package/dist/lib/validators/firstname.validator.d.ts +0 -20
  158. package/dist/lib/validators/firstname.validator.js +0 -29
  159. package/dist/lib/validators/firstname.validator.js.map +0 -1
  160. package/dist/lib/validators/fullname.validator.d.ts +0 -21
  161. package/dist/lib/validators/fullname.validator.js +0 -38
  162. package/dist/lib/validators/fullname.validator.js.map +0 -1
  163. package/dist/lib/validators/index.d.ts +0 -21
  164. package/dist/lib/validators/index.js +0 -35
  165. package/dist/lib/validators/index.js.map +0 -1
  166. package/dist/lib/validators/lastname.validator.d.ts +0 -20
  167. package/dist/lib/validators/lastname.validator.js +0 -29
  168. package/dist/lib/validators/lastname.validator.js.map +0 -1
  169. package/dist/lib/validators/middlename.validator.d.ts +0 -20
  170. package/dist/lib/validators/middlename.validator.js +0 -38
  171. package/dist/lib/validators/middlename.validator.js.map +0 -1
  172. package/dist/lib/validators/nama.validator.d.ts +0 -21
  173. package/dist/lib/validators/nama.validator.js +0 -43
  174. package/dist/lib/validators/nama.validator.js.map +0 -1
  175. package/dist/lib/validators/namon.validator.d.ts +0 -20
  176. package/dist/lib/validators/namon.validator.js +0 -29
  177. package/dist/lib/validators/namon.validator.js.map +0 -1
  178. package/dist/lib/validators/prefix.validator.d.ts +0 -14
  179. package/dist/lib/validators/prefix.validator.js +0 -31
  180. package/dist/lib/validators/prefix.validator.js.map +0 -1
  181. package/dist/lib/validators/string-name.validator.d.ts +0 -20
  182. package/dist/lib/validators/string-name.validator.js +0 -29
  183. package/dist/lib/validators/string-name.validator.js.map +0 -1
  184. package/dist/lib/validators/suffix.validator.d.ts +0 -14
  185. package/dist/lib/validators/suffix.validator.js +0 -31
  186. package/dist/lib/validators/suffix.validator.js.map +0 -1
  187. package/dist/lib/validators/validator.d.ts +0 -13
  188. package/dist/lib/validators/validator.js +0 -9
  189. package/dist/lib/validators/validator.js.map +0 -1
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isNameArray = exports.isStringArray = exports.toggleCase = exports.decapitalize = exports.capitalize = exports.NameIndex = void 0;
4
+ const constants_1 = require("./constants");
5
+ const name_1 = require("./name");
6
+ const types_1 = require("./types");
7
+ /**
8
+ * A fixed set of values to handle specific positions for list of names.
9
+ *
10
+ * As for list of names, this helps to follow a specific order based on the
11
+ * count of elements. It is expected that the list has to be between two and
12
+ * five elements. Also, the order of appearance set in the configuration
13
+ * influences how the parsing is carried out.
14
+ *
15
+ * Ordered by first name, the parser works as follows:
16
+ * - 2 elements: firstName lastName
17
+ * - 3 elements: firstName middleName lastName
18
+ * - 4 elements: prefix firstName middleName lastName
19
+ * - 5 elements: prefix firstName middleName lastName suffix
20
+ *
21
+ * Ordered by last name, the parser works as follows:
22
+ * - 2 elements: lastName firstName
23
+ * - 3 elements: lastName firstName middleName
24
+ * - 4 elements: prefix lastName firstName middleName
25
+ * - 5 elements: prefix lastName firstName middleName suffix
26
+ *
27
+ * For example, `Jane Smith` (ordered by first name) is expected to be indexed:
28
+ * `['Jane', 'Smith']`.
29
+ */
30
+ class NameIndex {
31
+ constructor(prefix, firstName, middleName, lastName, suffix) {
32
+ this.prefix = prefix;
33
+ this.firstName = firstName;
34
+ this.middleName = middleName;
35
+ this.lastName = lastName;
36
+ this.suffix = suffix;
37
+ }
38
+ /**
39
+ * The minimum number of parts in a list of names.
40
+ */
41
+ static get min() {
42
+ return constants_1.MIN_NUMBER_OF_NAME_PARTS;
43
+ }
44
+ /**
45
+ * The maximum number of parts in a list of names.
46
+ */
47
+ static get max() {
48
+ return constants_1.MAX_NUMBER_OF_NAME_PARTS;
49
+ }
50
+ /**
51
+ * The default or base indexing: firstName lastName.
52
+ */
53
+ static base() {
54
+ return new this(-1, 0, -1, 1, -1);
55
+ }
56
+ /**
57
+ * Gets the name index for a list of names based on the `count` of elements
58
+ * and their `order` of appearance.
59
+ */
60
+ static when(order, count = 2) {
61
+ if (order === types_1.NameOrder.FIRST_NAME) {
62
+ switch (count) {
63
+ case 2: // first name + last name
64
+ return new this(-1, 0, -1, 1, -1);
65
+ case 3: // first name + middle name + last name
66
+ return new this(-1, 0, 1, 2, -1);
67
+ case 4: // prefix + first name + middle name + last name
68
+ return new this(0, 1, 2, 3, -1);
69
+ case 5: // prefix + first name + middle name + last name + suffix
70
+ return new this(0, 1, 2, 3, 4);
71
+ default:
72
+ return NameIndex.base();
73
+ }
74
+ }
75
+ else {
76
+ switch (count) {
77
+ case 2: // last name + first name
78
+ return new this(-1, 1, -1, 0, -1);
79
+ case 3: // last name + first name + middle name
80
+ return new this(-1, 1, 2, 0, -1);
81
+ case 4: // prefix + last name + first name + middle name
82
+ return new this(0, 2, 3, 1, -1);
83
+ case 5: // prefix + last name + first name + middle name + suffix
84
+ return new this(0, 2, 3, 1, 4);
85
+ default:
86
+ return NameIndex.base();
87
+ }
88
+ }
89
+ }
90
+ }
91
+ exports.NameIndex = NameIndex;
92
+ /**
93
+ * Capitalizes a string via a `CapsRange` option.
94
+ */
95
+ function capitalize(str, range = types_1.CapsRange.INITIAL) {
96
+ if (!str || range === types_1.CapsRange.NONE)
97
+ return str;
98
+ const initial = str[0].toUpperCase();
99
+ const rest = str.slice(1).toLowerCase();
100
+ return range === types_1.CapsRange.INITIAL ? initial.concat(rest) : str.toUpperCase();
101
+ }
102
+ exports.capitalize = capitalize;
103
+ /**
104
+ * Decapitalizes a string via a `CapsRange` option.
105
+ */
106
+ function decapitalize(str, range = types_1.CapsRange.INITIAL) {
107
+ if (!str || range === types_1.CapsRange.NONE)
108
+ return str;
109
+ const initial = str[0].toLowerCase();
110
+ const rest = str.slice(1);
111
+ return range === types_1.CapsRange.INITIAL ? initial.concat(rest) : str.toLowerCase();
112
+ }
113
+ exports.decapitalize = decapitalize;
114
+ /**
115
+ * Toggles a string representation.
116
+ */
117
+ function toggleCase(str) {
118
+ const chars = [];
119
+ for (const c of str) {
120
+ if (c === c.toUpperCase()) {
121
+ chars.push(c.toLowerCase());
122
+ }
123
+ else {
124
+ chars.push(c.toUpperCase());
125
+ }
126
+ }
127
+ return chars.join('');
128
+ }
129
+ exports.toggleCase = toggleCase;
130
+ function isStringArray(value) {
131
+ return Array.isArray(value) && value.length > 0 && value.every((e) => typeof e === 'string');
132
+ }
133
+ exports.isStringArray = isStringArray;
134
+ function isNameArray(value) {
135
+ return Array.isArray(value) && value.length > 0 && value.every((e) => e instanceof name_1.Name);
136
+ }
137
+ exports.isNameArray = isNameArray;
138
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ import { FirstName, LastName, Name } from './name';
2
+ import { Namon } from './types';
3
+ import { NameIndex } from './utils';
4
+ export interface Validator<T> {
5
+ validate(value: T): void;
6
+ }
7
+ declare class ArrayValidator<T extends string | Name> implements Validator<T[]> {
8
+ validate(values: T[]): void;
9
+ }
10
+ declare class NamonValidator implements Validator<string | Name> {
11
+ private static validator;
12
+ private constructor();
13
+ static create(): NamonValidator;
14
+ validate(value: string | Name, type?: Namon): void;
15
+ }
16
+ declare class FirstNameValidator implements Validator<string | FirstName> {
17
+ private static validator;
18
+ private constructor();
19
+ static create(): FirstNameValidator;
20
+ validate(value: string | FirstName): void;
21
+ }
22
+ declare class MiddleNameValidator implements Validator<string | string[] | Name[]> {
23
+ private static validator;
24
+ private constructor();
25
+ static create(): MiddleNameValidator;
26
+ validate(value: string | string[] | Name[]): void;
27
+ }
28
+ declare class LastNameValidator implements Validator<string | LastName> {
29
+ private static validator;
30
+ private constructor();
31
+ static create(): LastNameValidator;
32
+ validate(value: string | LastName): void;
33
+ }
34
+ export declare class NamaValidator implements Validator<Map<Namon, string>> {
35
+ private static validator;
36
+ private constructor();
37
+ static create(): NamaValidator;
38
+ validate(value: Map<Namon, string>): void;
39
+ validateKeys(nama: Map<Namon, string>): void;
40
+ }
41
+ export declare class ArrayStringValidator extends ArrayValidator<string> {
42
+ readonly index: NameIndex;
43
+ constructor(index?: NameIndex);
44
+ validate(values: string[]): void;
45
+ validateIndex(values: string[]): void;
46
+ }
47
+ export declare class ArrayNameValidator implements Validator<Name[]> {
48
+ private static validator;
49
+ private constructor();
50
+ static create(): ArrayNameValidator;
51
+ validate(value: Name[]): void;
52
+ private hasBasicNames;
53
+ }
54
+ /**
55
+ * A list of validators for a specific namon.
56
+ */
57
+ export declare abstract class Validators {
58
+ static namon: NamonValidator;
59
+ static nama: NamaValidator;
60
+ static prefix: NamonValidator;
61
+ static firstName: FirstNameValidator;
62
+ static middleName: MiddleNameValidator;
63
+ static lastName: LastNameValidator;
64
+ static suffix: NamonValidator;
65
+ }
66
+ export {};
@@ -0,0 +1,332 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Validators = exports.ArrayNameValidator = exports.ArrayStringValidator = exports.NamaValidator = void 0;
4
+ const constants_1 = require("./constants");
5
+ const error_1 = require("./error");
6
+ const name_1 = require("./name");
7
+ const types_1 = require("./types");
8
+ const utils_1 = require("./utils");
9
+ /**
10
+ * Represents a set of validation rules (regex)
11
+ *
12
+ * This regex is intented to match specific alphabets only as a person name does
13
+ * not contain special characters. `\w` does not cover non-Latin characters. So,
14
+ * it is extended using unicode chars to cover more cases (e.g., Icelandic).
15
+ * It matches as follows:
16
+ * [a-z]: Latin alphabet from a (index 97) to z (index 122)
17
+ * [A-Z]: Latin alphabet from A (index 65) to Z (index 90)
18
+ * [\u00C0-\u00D6]: Latin/German chars from À (index 192) to Ö (index 214)
19
+ * [\u00D8-\u00f6]: German/Icelandic chars from Ø (index 216) to ö (index 246)
20
+ * [\u00f8-\u00ff]: German/Icelandic chars from ø (index 248) to ÿ (index 255)
21
+ * [\u0400-\u04FF]: Cyrillic alphabet from Ѐ (index 1024) to ӿ (index 1279)
22
+ * [Ά-ωΑ-ώ]: Greek alphabet from Ά (index 902) to ω (index 969)
23
+ */
24
+ class ValidationRule {
25
+ }
26
+ ValidationRule.base = /[a-zA-Z\u00C0-\u00D6\u00D8-\u00f6\u00f8-\u00ff\u0400-\u04FFΆ-ωΑ-ώ]/;
27
+ /**
28
+ * Matches one name part (namon) that is of nature:
29
+ * - Latin (English, Spanish, French, etc.)
30
+ * - European (Greek, Cyrillic, Icelandic, German)
31
+ * - hyphenated
32
+ * - with apostrophe
33
+ * - with space
34
+ */
35
+ ValidationRule.namon = new RegExp(`^${ValidationRule.base.source}+(([' -]${ValidationRule.base.source})?${ValidationRule.base.source}*)*$`);
36
+ /**
37
+ * Matches one name part (namon) that is of nature:
38
+ * - Latin (English, Spanish, French, etc.)
39
+ * - European (Greek, Cyrillic, Icelandic, German)
40
+ * - hyphenated
41
+ * - with apostrophe
42
+ */
43
+ ValidationRule.firstName = ValidationRule.namon;
44
+ /**
45
+ * Matches 1+ names part (namon) that are of nature:
46
+ * - Latin (English, Spanish, French, etc.)
47
+ * - European (Greek, Cyrillic, Icelandic, German)
48
+ * - hyphenated
49
+ * - with apostrophe
50
+ * - with space
51
+ */
52
+ ValidationRule.middleName = new RegExp(`^${ValidationRule.base.source}+(([' -]${ValidationRule.base.source})?${ValidationRule.base.source}*)*$`);
53
+ /**
54
+ * Matches one name part (namon) that is of nature:
55
+ * - Latin (English, Spanish, French, etc.)
56
+ * - European (Greek, Cyrillic, Icelandic, German)
57
+ * - hyphenated
58
+ * - with apostrophe
59
+ * - with space
60
+ */
61
+ ValidationRule.lastName = ValidationRule.namon;
62
+ class ArrayValidator {
63
+ validate(values) {
64
+ if (values.length === 0 ||
65
+ values.length < constants_1.MIN_NUMBER_OF_NAME_PARTS ||
66
+ values.length > constants_1.MAX_NUMBER_OF_NAME_PARTS) {
67
+ throw new error_1.InputError({
68
+ source: values.map((n) => n.toString()),
69
+ message: `expecting a list of ${constants_1.MIN_NUMBER_OF_NAME_PARTS}-${constants_1.MIN_NUMBER_OF_NAME_PARTS} elements`,
70
+ });
71
+ }
72
+ }
73
+ }
74
+ class NamonValidator {
75
+ constructor() { }
76
+ static create() {
77
+ return this.validator || (this.validator = new this());
78
+ }
79
+ validate(value, type) {
80
+ if (value instanceof name_1.Name) {
81
+ NameValidator.create().validate(value, type);
82
+ }
83
+ else if (typeof value === 'string') {
84
+ if (!ValidationRule.namon.test(value)) {
85
+ throw new error_1.ValidationError({
86
+ source: value,
87
+ nameType: 'namon',
88
+ message: 'invalid content',
89
+ });
90
+ }
91
+ }
92
+ else {
93
+ throw new error_1.InputError({
94
+ source: typeof value,
95
+ message: 'expecting types of string | Name',
96
+ });
97
+ }
98
+ }
99
+ }
100
+ class FirstNameValidator {
101
+ constructor() { }
102
+ static create() {
103
+ return this.validator || (this.validator = new this());
104
+ }
105
+ validate(value) {
106
+ if (value instanceof name_1.FirstName) {
107
+ value.asNames.forEach((name) => this.validate(name.value));
108
+ }
109
+ else if (typeof value === 'string') {
110
+ if (!ValidationRule.firstName.test(value)) {
111
+ throw new error_1.ValidationError({
112
+ source: value,
113
+ nameType: 'firstName',
114
+ message: 'invalid content',
115
+ });
116
+ }
117
+ }
118
+ else {
119
+ throw new error_1.InputError({
120
+ source: typeof value,
121
+ message: 'expecting types string | FirstName',
122
+ });
123
+ }
124
+ }
125
+ }
126
+ class MiddleNameValidator {
127
+ constructor() { }
128
+ static create() {
129
+ return this.validator || (this.validator = new this());
130
+ }
131
+ validate(value) {
132
+ if (typeof value === 'string') {
133
+ if (!ValidationRule.middleName.test(value)) {
134
+ throw new error_1.ValidationError({
135
+ source: value,
136
+ nameType: 'middleName',
137
+ message: 'invalid content',
138
+ });
139
+ }
140
+ }
141
+ else if (Array.isArray(value)) {
142
+ try {
143
+ const validator = NamonValidator.create();
144
+ for (const name of value)
145
+ validator.validate(name, types_1.Namon.MIDDLE_NAME);
146
+ }
147
+ catch (error) {
148
+ throw new error_1.ValidationError({
149
+ source: value,
150
+ nameType: 'middleName',
151
+ message: error === null || error === void 0 ? void 0 : error.message,
152
+ });
153
+ }
154
+ }
155
+ else {
156
+ throw new error_1.InputError({
157
+ source: typeof value,
158
+ message: 'expecting types of string | string[] | Name[]',
159
+ });
160
+ }
161
+ }
162
+ }
163
+ class LastNameValidator {
164
+ constructor() { }
165
+ static create() {
166
+ return this.validator || (this.validator = new this());
167
+ }
168
+ validate(value) {
169
+ if (value instanceof name_1.LastName) {
170
+ value.asNames.forEach((name) => this.validate(name.value));
171
+ }
172
+ else if (typeof value === 'string') {
173
+ if (!ValidationRule.lastName.test(value)) {
174
+ throw new error_1.ValidationError({
175
+ source: value,
176
+ nameType: 'lastName',
177
+ message: 'invalid content',
178
+ });
179
+ }
180
+ }
181
+ else {
182
+ throw new error_1.InputError({
183
+ source: typeof value,
184
+ message: 'expecting types string | LastName',
185
+ });
186
+ }
187
+ }
188
+ }
189
+ class NameValidator {
190
+ constructor() { }
191
+ static create() {
192
+ return this.validator || (this.validator = new this());
193
+ }
194
+ validate(name, type) {
195
+ if (type && name.type !== type) {
196
+ throw new error_1.ValidationError({
197
+ source: [name],
198
+ nameType: name.type.toString(),
199
+ message: 'wrong type',
200
+ });
201
+ }
202
+ if (!ValidationRule.namon.test(name.value)) {
203
+ throw new error_1.ValidationError({
204
+ source: [name],
205
+ nameType: name.type.toString(),
206
+ message: 'invalid content',
207
+ });
208
+ }
209
+ }
210
+ }
211
+ class NamaValidator {
212
+ constructor() { }
213
+ static create() {
214
+ return this.validator || (this.validator = new this());
215
+ }
216
+ validate(value) {
217
+ this.validateKeys(value);
218
+ Validators.firstName.validate(value.get(types_1.Namon.FIRST_NAME));
219
+ Validators.lastName.validate(value.get(types_1.Namon.LAST_NAME));
220
+ if (value.has(types_1.Namon.PREFIX)) {
221
+ Validators.namon.validate(value.get(types_1.Namon.PREFIX));
222
+ }
223
+ if (value.has(types_1.Namon.SUFFIX)) {
224
+ Validators.namon.validate(value.get(types_1.Namon.SUFFIX));
225
+ }
226
+ }
227
+ validateKeys(nama) {
228
+ if (!nama.size) {
229
+ throw new error_1.InputError({ source: undefined, message: 'Map<k,v> must not be empty' });
230
+ }
231
+ else if (nama.size < constants_1.MIN_NUMBER_OF_NAME_PARTS || nama.size > constants_1.MAX_NUMBER_OF_NAME_PARTS) {
232
+ throw new error_1.InputError({
233
+ source: [...nama.values()],
234
+ message: `expecting ${constants_1.MIN_NUMBER_OF_NAME_PARTS}-${constants_1.MIN_NUMBER_OF_NAME_PARTS} fields`,
235
+ });
236
+ }
237
+ if (!nama.has(types_1.Namon.FIRST_NAME)) {
238
+ throw new error_1.InputError({
239
+ source: [...nama.values()],
240
+ message: '"firstName" is a required key',
241
+ });
242
+ }
243
+ if (!nama.has(types_1.Namon.LAST_NAME)) {
244
+ throw new error_1.InputError({
245
+ source: [...nama.values()],
246
+ message: '"lastName" is a required key',
247
+ });
248
+ }
249
+ }
250
+ }
251
+ exports.NamaValidator = NamaValidator;
252
+ class ArrayStringValidator extends ArrayValidator {
253
+ constructor(index = utils_1.NameIndex.base()) {
254
+ super();
255
+ this.index = index;
256
+ }
257
+ validate(values) {
258
+ this.validateIndex(values);
259
+ switch (values.length) {
260
+ case 2:
261
+ Validators.firstName.validate(values[this.index.firstName]);
262
+ Validators.lastName.validate(values[this.index.lastName]);
263
+ break;
264
+ case 3:
265
+ Validators.firstName.validate(values[this.index.firstName]);
266
+ Validators.middleName.validate(values[this.index.middleName]);
267
+ Validators.lastName.validate(values[this.index.lastName]);
268
+ break;
269
+ case 4:
270
+ Validators.namon.validate(values[this.index.prefix]);
271
+ Validators.firstName.validate(values[this.index.firstName]);
272
+ Validators.middleName.validate(values[this.index.middleName]);
273
+ Validators.lastName.validate(values[this.index.lastName]);
274
+ break;
275
+ case 5:
276
+ Validators.namon.validate(values[this.index.prefix]);
277
+ Validators.firstName.validate(values[this.index.firstName]);
278
+ Validators.middleName.validate(values[this.index.middleName]);
279
+ Validators.lastName.validate(values[this.index.lastName]);
280
+ Validators.namon.validate(values[this.index.suffix]);
281
+ break;
282
+ }
283
+ }
284
+ validateIndex(values) {
285
+ super.validate(values);
286
+ }
287
+ }
288
+ exports.ArrayStringValidator = ArrayStringValidator;
289
+ class ArrayNameValidator {
290
+ constructor() { }
291
+ static create() {
292
+ return this.validator || (this.validator = new this());
293
+ }
294
+ validate(value) {
295
+ if (value.length < constants_1.MIN_NUMBER_OF_NAME_PARTS) {
296
+ throw new error_1.InputError({
297
+ source: value,
298
+ message: `expecting at least ${constants_1.MIN_NUMBER_OF_NAME_PARTS} elements`,
299
+ });
300
+ }
301
+ if (!this.hasBasicNames(value)) {
302
+ throw new error_1.InputError({
303
+ source: value,
304
+ message: 'both first and last names are required',
305
+ });
306
+ }
307
+ }
308
+ hasBasicNames(names) {
309
+ const accumulator = {};
310
+ for (const name of names) {
311
+ if (name.isFirstName || name.isLastName) {
312
+ accumulator[name.type.key] = name.toString();
313
+ }
314
+ }
315
+ return Object.keys(accumulator).length === constants_1.MIN_NUMBER_OF_NAME_PARTS;
316
+ }
317
+ }
318
+ exports.ArrayNameValidator = ArrayNameValidator;
319
+ /**
320
+ * A list of validators for a specific namon.
321
+ */
322
+ class Validators {
323
+ }
324
+ exports.Validators = Validators;
325
+ Validators.namon = NamonValidator.create();
326
+ Validators.nama = NamaValidator.create();
327
+ Validators.prefix = NamonValidator.create();
328
+ Validators.firstName = FirstNameValidator.create();
329
+ Validators.middleName = MiddleNameValidator.create();
330
+ Validators.lastName = LastNameValidator.create();
331
+ Validators.suffix = NamonValidator.create();
332
+ //# sourceMappingURL=validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/validator.ts"],"names":[],"mappings":"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"}