namefully 1.1.0 → 1.2.1

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 (136) hide show
  1. package/dist/lib/config.js +112 -0
  2. package/dist/lib/constants.js +30 -0
  3. package/dist/lib/error.js +92 -0
  4. package/dist/lib/full-name.js +115 -0
  5. package/dist/lib/index.js +27 -12
  6. package/dist/lib/name.js +230 -0
  7. package/dist/lib/namefully.js +368 -681
  8. package/dist/lib/parser.js +138 -0
  9. package/dist/lib/types.js +107 -0
  10. package/dist/lib/utils.js +92 -0
  11. package/dist/lib/validator.js +301 -0
  12. package/dist/types/config.d.ts +97 -0
  13. package/dist/types/constants.d.ts +4 -0
  14. package/dist/types/error.d.ts +158 -0
  15. package/dist/types/full-name.d.ts +54 -0
  16. package/dist/types/index.d.ts +21 -0
  17. package/dist/types/name.d.ts +126 -0
  18. package/dist/types/namefully.d.ts +313 -0
  19. package/dist/types/parser.d.ts +41 -0
  20. package/dist/types/types.d.ts +127 -0
  21. package/dist/types/utils.d.ts +53 -0
  22. package/dist/types/validator.d.ts +57 -0
  23. package/dist/umd/namefully.js +1503 -2900
  24. package/dist/umd/namefully.min.js +1 -3
  25. package/package.json +28 -38
  26. package/readme.md +138 -167
  27. package/changelog.md +0 -134
  28. package/dist/lib/core/constants.d.ts +0 -48
  29. package/dist/lib/core/constants.js +0 -101
  30. package/dist/lib/core/constants.js.map +0 -1
  31. package/dist/lib/core/core.d.ts +0 -17
  32. package/dist/lib/core/core.js +0 -24
  33. package/dist/lib/core/core.js.map +0 -1
  34. package/dist/lib/core/index.d.ts +0 -9
  35. package/dist/lib/core/index.js +0 -13
  36. package/dist/lib/core/index.js.map +0 -1
  37. package/dist/lib/core/parsers/array-name.parser.d.ts +0 -41
  38. package/dist/lib/core/parsers/array-name.parser.js +0 -86
  39. package/dist/lib/core/parsers/array-name.parser.js.map +0 -1
  40. package/dist/lib/core/parsers/array-string.parser.d.ts +0 -47
  41. package/dist/lib/core/parsers/array-string.parser.js +0 -95
  42. package/dist/lib/core/parsers/array-string.parser.js.map +0 -1
  43. package/dist/lib/core/parsers/index.d.ts +0 -11
  44. package/dist/lib/core/parsers/index.js +0 -11
  45. package/dist/lib/core/parsers/index.js.map +0 -1
  46. package/dist/lib/core/parsers/nama.parser.d.ts +0 -33
  47. package/dist/lib/core/parsers/nama.parser.js +0 -74
  48. package/dist/lib/core/parsers/nama.parser.js.map +0 -1
  49. package/dist/lib/core/parsers/parser.d.ts +0 -28
  50. package/dist/lib/core/parsers/parser.js +0 -3
  51. package/dist/lib/core/parsers/parser.js.map +0 -1
  52. package/dist/lib/core/parsers/string.parser.d.ts +0 -60
  53. package/dist/lib/core/parsers/string.parser.js +0 -62
  54. package/dist/lib/core/parsers/string.parser.js.map +0 -1
  55. package/dist/lib/core/utils.d.ts +0 -52
  56. package/dist/lib/core/utils.js +0 -178
  57. package/dist/lib/core/utils.js.map +0 -1
  58. package/dist/lib/index.d.ts +0 -10
  59. package/dist/lib/index.js.map +0 -1
  60. package/dist/lib/models/enums.d.ts +0 -106
  61. package/dist/lib/models/enums.js +0 -114
  62. package/dist/lib/models/enums.js.map +0 -1
  63. package/dist/lib/models/firstname.d.ts +0 -77
  64. package/dist/lib/models/firstname.js +0 -131
  65. package/dist/lib/models/firstname.js.map +0 -1
  66. package/dist/lib/models/fullname.d.ts +0 -73
  67. package/dist/lib/models/fullname.js +0 -99
  68. package/dist/lib/models/fullname.js.map +0 -1
  69. package/dist/lib/models/index.d.ts +0 -13
  70. package/dist/lib/models/index.js +0 -16
  71. package/dist/lib/models/index.js.map +0 -1
  72. package/dist/lib/models/lastname.d.ts +0 -80
  73. package/dist/lib/models/lastname.js +0 -157
  74. package/dist/lib/models/lastname.js.map +0 -1
  75. package/dist/lib/models/misc.d.ts +0 -108
  76. package/dist/lib/models/misc.js +0 -3
  77. package/dist/lib/models/misc.js.map +0 -1
  78. package/dist/lib/models/name.d.ts +0 -76
  79. package/dist/lib/models/name.js +0 -115
  80. package/dist/lib/models/name.js.map +0 -1
  81. package/dist/lib/models/summary.d.ts +0 -26
  82. package/dist/lib/models/summary.js +0 -61
  83. package/dist/lib/models/summary.js.map +0 -1
  84. package/dist/lib/namefully.d.ts +0 -302
  85. package/dist/lib/namefully.js.map +0 -1
  86. package/dist/lib/validators/array-name.validator.d.ts +0 -25
  87. package/dist/lib/validators/array-name.validator.js +0 -75
  88. package/dist/lib/validators/array-name.validator.js.map +0 -1
  89. package/dist/lib/validators/array-string.validator.d.ts +0 -43
  90. package/dist/lib/validators/array-string.validator.js +0 -76
  91. package/dist/lib/validators/array-string.validator.js.map +0 -1
  92. package/dist/lib/validators/common/validation-error.d.ts +0 -19
  93. package/dist/lib/validators/common/validation-error.js +0 -26
  94. package/dist/lib/validators/common/validation-error.js.map +0 -1
  95. package/dist/lib/validators/common/validation-rule.d.ts +0 -72
  96. package/dist/lib/validators/common/validation-rule.js +0 -76
  97. package/dist/lib/validators/common/validation-rule.js.map +0 -1
  98. package/dist/lib/validators/common/validation-type.d.ts +0 -24
  99. package/dist/lib/validators/common/validation-type.js +0 -28
  100. package/dist/lib/validators/common/validation-type.js.map +0 -1
  101. package/dist/lib/validators/firstname.validator.d.ts +0 -20
  102. package/dist/lib/validators/firstname.validator.js +0 -29
  103. package/dist/lib/validators/firstname.validator.js.map +0 -1
  104. package/dist/lib/validators/fullname.validator.d.ts +0 -21
  105. package/dist/lib/validators/fullname.validator.js +0 -38
  106. package/dist/lib/validators/fullname.validator.js.map +0 -1
  107. package/dist/lib/validators/index.d.ts +0 -21
  108. package/dist/lib/validators/index.js +0 -35
  109. package/dist/lib/validators/index.js.map +0 -1
  110. package/dist/lib/validators/lastname.validator.d.ts +0 -20
  111. package/dist/lib/validators/lastname.validator.js +0 -29
  112. package/dist/lib/validators/lastname.validator.js.map +0 -1
  113. package/dist/lib/validators/middlename.validator.d.ts +0 -20
  114. package/dist/lib/validators/middlename.validator.js +0 -38
  115. package/dist/lib/validators/middlename.validator.js.map +0 -1
  116. package/dist/lib/validators/nama.validator.d.ts +0 -21
  117. package/dist/lib/validators/nama.validator.js +0 -44
  118. package/dist/lib/validators/nama.validator.js.map +0 -1
  119. package/dist/lib/validators/namon.validator.d.ts +0 -20
  120. package/dist/lib/validators/namon.validator.js +0 -29
  121. package/dist/lib/validators/namon.validator.js.map +0 -1
  122. package/dist/lib/validators/prefix.validator.d.ts +0 -14
  123. package/dist/lib/validators/prefix.validator.js +0 -31
  124. package/dist/lib/validators/prefix.validator.js.map +0 -1
  125. package/dist/lib/validators/string-name.validator.d.ts +0 -20
  126. package/dist/lib/validators/string-name.validator.js +0 -29
  127. package/dist/lib/validators/string-name.validator.js.map +0 -1
  128. package/dist/lib/validators/suffix.validator.d.ts +0 -14
  129. package/dist/lib/validators/suffix.validator.js +0 -31
  130. package/dist/lib/validators/suffix.validator.js.map +0 -1
  131. package/dist/lib/validators/validator.d.ts +0 -13
  132. package/dist/lib/validators/validator.js +0 -9
  133. package/dist/lib/validators/validator.js.map +0 -1
  134. package/dist/umd/namefully.js.map +0 -1
  135. package/dist/umd/namefully.min.js.LICENSE.txt +0 -29
  136. package/dist/umd/namefully.min.js.map +0 -1
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
3
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
4
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
5
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
6
+ };
7
+ var _NamaParser_instances, _NamaParser_asNama;
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ArrayNameParser = exports.NamaParser = exports.ArrayStringParser = exports.StringParser = exports.Parser = void 0;
10
+ const full_name_1 = require("./full-name");
11
+ const config_1 = require("./config");
12
+ const utils_1 = require("./utils");
13
+ const validator_1 = require("./validator");
14
+ const name_1 = require("./name");
15
+ const types_1 = require("./types");
16
+ const error_1 = require("./error");
17
+ class Parser {
18
+ constructor(raw) {
19
+ this.raw = raw;
20
+ }
21
+ static build(text) {
22
+ const parts = text.trim().split(types_1.Separator.SPACE.token);
23
+ const length = parts.length;
24
+ if (length < 2) {
25
+ throw new error_1.InputError({
26
+ source: text,
27
+ message: 'cannot build from invalid input',
28
+ });
29
+ }
30
+ else if (length === 2 || length === 3) {
31
+ return new StringParser(text);
32
+ }
33
+ else {
34
+ const last = parts.pop();
35
+ const [first, ...middles] = parts;
36
+ return new ArrayStringParser([first, middles.join(' '), last]);
37
+ }
38
+ }
39
+ static buildAsync(text) {
40
+ try {
41
+ return Promise.resolve(Parser.build(text));
42
+ }
43
+ catch (error) {
44
+ return Promise.reject(error);
45
+ }
46
+ }
47
+ }
48
+ exports.Parser = Parser;
49
+ class StringParser extends Parser {
50
+ parse(options) {
51
+ const config = config_1.Config.merge(options);
52
+ const names = this.raw.split(config.separator.token);
53
+ return new ArrayStringParser(names).parse(options);
54
+ }
55
+ }
56
+ exports.StringParser = StringParser;
57
+ class ArrayStringParser extends Parser {
58
+ parse(options) {
59
+ const config = config_1.Config.merge(options);
60
+ const fullName = new full_name_1.FullName(config);
61
+ const raw = this.raw.map((n) => n.trim());
62
+ const index = utils_1.NameIndex.when(config.orderedBy, raw.length);
63
+ const validator = new validator_1.ArrayStringValidator(index);
64
+ if (config.bypass) {
65
+ validator.validateIndex(raw);
66
+ }
67
+ else {
68
+ validator.validate(raw);
69
+ }
70
+ const { firstName, lastName, middleName, prefix, suffix } = index;
71
+ fullName.setFirstName(new name_1.FirstName(raw[firstName]));
72
+ fullName.setLastName(new name_1.LastName(raw[lastName]));
73
+ if (raw.length >= 3)
74
+ fullName.setMiddleName(raw[middleName].split(config.separator.token));
75
+ if (raw.length >= 4)
76
+ fullName.setPrefix(name_1.Name.prefix(raw[prefix]));
77
+ if (raw.length === 5)
78
+ fullName.setSuffix(name_1.Name.suffix(raw[suffix]));
79
+ return fullName;
80
+ }
81
+ }
82
+ exports.ArrayStringParser = ArrayStringParser;
83
+ class NamaParser extends Parser {
84
+ constructor() {
85
+ super(...arguments);
86
+ _NamaParser_instances.add(this);
87
+ }
88
+ parse(options) {
89
+ const config = config_1.Config.merge(options);
90
+ if (config.bypass) {
91
+ validator_1.NamaValidator.create().validateKeys(__classPrivateFieldGet(this, _NamaParser_instances, "m", _NamaParser_asNama).call(this));
92
+ }
93
+ else {
94
+ validator_1.NamaValidator.create().validate(__classPrivateFieldGet(this, _NamaParser_instances, "m", _NamaParser_asNama).call(this));
95
+ }
96
+ return full_name_1.FullName.parse(this.raw, config);
97
+ }
98
+ }
99
+ exports.NamaParser = NamaParser;
100
+ _NamaParser_instances = new WeakSet(), _NamaParser_asNama = function _NamaParser_asNama() {
101
+ return new Map(Object.entries(this.raw).map(([key, value]) => {
102
+ const namon = types_1.Namon.cast(key);
103
+ if (!namon) {
104
+ throw new error_1.InputError({
105
+ source: Object.values(this.raw).join(' '),
106
+ message: `unsupported key "${key}"`,
107
+ });
108
+ }
109
+ return [namon, value];
110
+ }));
111
+ };
112
+ class ArrayNameParser extends Parser {
113
+ parse(options) {
114
+ const config = config_1.Config.merge(options);
115
+ const fullName = new full_name_1.FullName(config);
116
+ validator_1.ArrayNameValidator.create().validate(this.raw);
117
+ for (const name of this.raw) {
118
+ if (name.isPrefix) {
119
+ fullName.setPrefix(name);
120
+ }
121
+ else if (name.isSuffix) {
122
+ fullName.setSuffix(name);
123
+ }
124
+ else if (name.isFirstName) {
125
+ fullName.setFirstName(name instanceof name_1.FirstName ? name : new name_1.FirstName(name.value));
126
+ }
127
+ else if (name.isMiddleName) {
128
+ fullName.middleName.push(name);
129
+ }
130
+ else if (name.isLastName) {
131
+ const lastName = new name_1.LastName(name.value, name instanceof name_1.LastName ? name.mother : undefined, config.surname);
132
+ fullName.setLastName(lastName);
133
+ }
134
+ }
135
+ return fullName;
136
+ }
137
+ }
138
+ exports.ArrayNameParser = ArrayNameParser;
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Separator = exports.Namon = exports.CapsRange = exports.Flat = exports.NameType = exports.NameOrder = exports.Surname = exports.Title = void 0;
4
+ var Title;
5
+ (function (Title) {
6
+ Title["US"] = "US";
7
+ Title["UK"] = "UK";
8
+ })(Title || (exports.Title = Title = {}));
9
+ var Surname;
10
+ (function (Surname) {
11
+ Surname["FATHER"] = "father";
12
+ Surname["MOTHER"] = "mother";
13
+ Surname["HYPHENATED"] = "hyphenated";
14
+ Surname["ALL"] = "all";
15
+ })(Surname || (exports.Surname = Surname = {}));
16
+ var NameOrder;
17
+ (function (NameOrder) {
18
+ NameOrder["FIRST_NAME"] = "firstName";
19
+ NameOrder["LAST_NAME"] = "lastName";
20
+ })(NameOrder || (exports.NameOrder = NameOrder = {}));
21
+ var NameType;
22
+ (function (NameType) {
23
+ NameType["FIRST_NAME"] = "firstName";
24
+ NameType["MIDDLE_NAME"] = "middleName";
25
+ NameType["LAST_NAME"] = "lastName";
26
+ NameType["BIRTH_NAME"] = "birthName";
27
+ })(NameType || (exports.NameType = NameType = {}));
28
+ var Flat;
29
+ (function (Flat) {
30
+ Flat["FIRST_NAME"] = "firstName";
31
+ Flat["MIDDLE_NAME"] = "middleName";
32
+ Flat["LAST_NAME"] = "lastName";
33
+ Flat["FIRST_MID"] = "firstMid";
34
+ Flat["MID_LAST"] = "midLast";
35
+ Flat["ALL"] = "all";
36
+ })(Flat || (exports.Flat = Flat = {}));
37
+ var CapsRange;
38
+ (function (CapsRange) {
39
+ CapsRange[CapsRange["NONE"] = 0] = "NONE";
40
+ CapsRange[CapsRange["INITIAL"] = 1] = "INITIAL";
41
+ CapsRange[CapsRange["ALL"] = 2] = "ALL";
42
+ })(CapsRange || (exports.CapsRange = CapsRange = {}));
43
+ class Namon {
44
+ constructor(index, key) {
45
+ this.index = index;
46
+ this.key = key;
47
+ }
48
+ static has(key) {
49
+ return Namon.all.has(key);
50
+ }
51
+ static cast(key) {
52
+ return Namon.has(key) ? Namon.all.get(key) : undefined;
53
+ }
54
+ toString() {
55
+ return `Namon.${this.key}`;
56
+ }
57
+ equal(other) {
58
+ return other instanceof Namon && other.index === this.index && other.key === this.key;
59
+ }
60
+ }
61
+ exports.Namon = Namon;
62
+ Namon.PREFIX = new Namon(0, 'prefix');
63
+ Namon.FIRST_NAME = new Namon(1, 'firstName');
64
+ Namon.MIDDLE_NAME = new Namon(2, 'middleName');
65
+ Namon.LAST_NAME = new Namon(3, 'lastName');
66
+ Namon.SUFFIX = new Namon(4, 'suffix');
67
+ Namon.values = [Namon.PREFIX, Namon.FIRST_NAME, Namon.MIDDLE_NAME, Namon.LAST_NAME, Namon.SUFFIX];
68
+ Namon.all = new Map([
69
+ [Namon.PREFIX.key, Namon.PREFIX],
70
+ [Namon.FIRST_NAME.key, Namon.FIRST_NAME],
71
+ [Namon.MIDDLE_NAME.key, Namon.MIDDLE_NAME],
72
+ [Namon.LAST_NAME.key, Namon.LAST_NAME],
73
+ [Namon.SUFFIX.key, Namon.SUFFIX],
74
+ ]);
75
+ class Separator {
76
+ constructor(name, token) {
77
+ this.name = name;
78
+ this.token = token;
79
+ }
80
+ toString() {
81
+ return `Separator.${this.name}`;
82
+ }
83
+ }
84
+ exports.Separator = Separator;
85
+ Separator.COMMA = new Separator('comma', ',');
86
+ Separator.COLON = new Separator('colon', ':');
87
+ Separator.DOUBLE_QUOTE = new Separator('doubleQuote', '"');
88
+ Separator.EMPTY = new Separator('empty', '');
89
+ Separator.HYPHEN = new Separator('hyphen', '-');
90
+ Separator.PERIOD = new Separator('period', '.');
91
+ Separator.SEMI_COLON = new Separator('semiColon', ';');
92
+ Separator.SINGLE_QUOTE = new Separator('singleQuote', `'`);
93
+ Separator.SPACE = new Separator('space', ' ');
94
+ Separator.UNDERSCORE = new Separator('underscore', '_');
95
+ Separator.all = new Map([
96
+ [Separator.COMMA.name, Separator.COMMA],
97
+ [Separator.COLON.name, Separator.COLON],
98
+ [Separator.DOUBLE_QUOTE.name, Separator.DOUBLE_QUOTE],
99
+ [Separator.EMPTY.name, Separator.EMPTY],
100
+ [Separator.HYPHEN.name, Separator.HYPHEN],
101
+ [Separator.PERIOD.name, Separator.PERIOD],
102
+ [Separator.SEMI_COLON.name, Separator.SEMI_COLON],
103
+ [Separator.SINGLE_QUOTE.name, Separator.SINGLE_QUOTE],
104
+ [Separator.SPACE.name, Separator.SPACE],
105
+ [Separator.UNDERSCORE.name, Separator.UNDERSCORE],
106
+ ]);
107
+ Separator.tokens = [...Separator.all.values()].map((s) => s.token);
@@ -0,0 +1,92 @@
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
+ class NameIndex {
8
+ static get min() {
9
+ return constants_1.MIN_NUMBER_OF_NAME_PARTS;
10
+ }
11
+ static get max() {
12
+ return constants_1.MAX_NUMBER_OF_NAME_PARTS;
13
+ }
14
+ constructor(prefix, firstName, middleName, lastName, suffix) {
15
+ this.prefix = prefix;
16
+ this.firstName = firstName;
17
+ this.middleName = middleName;
18
+ this.lastName = lastName;
19
+ this.suffix = suffix;
20
+ }
21
+ static base() {
22
+ return new this(-1, 0, -1, 1, -1);
23
+ }
24
+ static when(order, count = 2) {
25
+ if (order === types_1.NameOrder.FIRST_NAME) {
26
+ switch (count) {
27
+ case 2:
28
+ return new this(-1, 0, -1, 1, -1);
29
+ case 3:
30
+ return new this(-1, 0, 1, 2, -1);
31
+ case 4:
32
+ return new this(0, 1, 2, 3, -1);
33
+ case 5:
34
+ return new this(0, 1, 2, 3, 4);
35
+ default:
36
+ return NameIndex.base();
37
+ }
38
+ }
39
+ else {
40
+ switch (count) {
41
+ case 2:
42
+ return new this(-1, 1, -1, 0, -1);
43
+ case 3:
44
+ return new this(-1, 1, 2, 0, -1);
45
+ case 4:
46
+ return new this(0, 2, 3, 1, -1);
47
+ case 5:
48
+ return new this(0, 2, 3, 1, 4);
49
+ default:
50
+ return NameIndex.base();
51
+ }
52
+ }
53
+ }
54
+ }
55
+ exports.NameIndex = NameIndex;
56
+ function capitalize(str, range = types_1.CapsRange.INITIAL) {
57
+ if (!str || range === types_1.CapsRange.NONE)
58
+ return str;
59
+ const initial = str[0].toUpperCase();
60
+ const rest = str.slice(1).toLowerCase();
61
+ return range === types_1.CapsRange.INITIAL ? initial.concat(rest) : str.toUpperCase();
62
+ }
63
+ exports.capitalize = capitalize;
64
+ function decapitalize(str, range = types_1.CapsRange.INITIAL) {
65
+ if (!str || range === types_1.CapsRange.NONE)
66
+ return str;
67
+ const initial = str[0].toLowerCase();
68
+ const rest = str.slice(1);
69
+ return range === types_1.CapsRange.INITIAL ? initial.concat(rest) : str.toLowerCase();
70
+ }
71
+ exports.decapitalize = decapitalize;
72
+ function toggleCase(str) {
73
+ const chars = [];
74
+ for (const c of str) {
75
+ if (c === c.toUpperCase()) {
76
+ chars.push(c.toLowerCase());
77
+ }
78
+ else {
79
+ chars.push(c.toUpperCase());
80
+ }
81
+ }
82
+ return chars.join('');
83
+ }
84
+ exports.toggleCase = toggleCase;
85
+ function isStringArray(value) {
86
+ return Array.isArray(value) && value.length > 0 && value.every((e) => typeof e === 'string');
87
+ }
88
+ exports.isStringArray = isStringArray;
89
+ function isNameArray(value) {
90
+ return Array.isArray(value) && value.length > 0 && value.every((e) => e instanceof name_1.Name);
91
+ }
92
+ exports.isNameArray = isNameArray;
@@ -0,0 +1,301 @@
1
+ "use strict";
2
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
3
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
4
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
5
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
6
+ };
7
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
8
+ if (kind === "m") throw new TypeError("Private method is not writable");
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
11
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
12
+ };
13
+ var _a, _NamonValidator_validator, _b, _FirstNameValidator_validator, _c, _MiddleNameValidator_validator, _d, _LastNameValidator_validator, _e, _NameValidator_validator, _f, _NamaValidator_validator, _ArrayNameValidator_instances, _g, _ArrayNameValidator_validator, _ArrayNameValidator_hasBasicNames;
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.Validators = exports.ArrayNameValidator = exports.ArrayStringValidator = exports.NamaValidator = void 0;
16
+ const constants_1 = require("./constants");
17
+ const error_1 = require("./error");
18
+ const name_1 = require("./name");
19
+ const types_1 = require("./types");
20
+ const utils_1 = require("./utils");
21
+ class ValidationRule {
22
+ }
23
+ ValidationRule.base = /[a-zA-Z\u00C0-\u00D6\u00D8-\u00f6\u00f8-\u00ff\u0400-\u04FFΆ-ωΑ-ώ]/;
24
+ ValidationRule.namon = new RegExp(`^${ValidationRule.base.source}+(([' -]${ValidationRule.base.source})?${ValidationRule.base.source}*)*$`);
25
+ ValidationRule.firstName = ValidationRule.namon;
26
+ ValidationRule.middleName = new RegExp(`^${ValidationRule.base.source}+(([' -]${ValidationRule.base.source})?${ValidationRule.base.source}*)*$`);
27
+ ValidationRule.lastName = ValidationRule.namon;
28
+ class ArrayValidator {
29
+ validate(values) {
30
+ if (values.length === 0 || values.length < constants_1.MIN_NUMBER_OF_NAME_PARTS || values.length > constants_1.MAX_NUMBER_OF_NAME_PARTS) {
31
+ throw new error_1.InputError({
32
+ source: values.map((n) => n.toString()),
33
+ message: `expecting a list of ${constants_1.MIN_NUMBER_OF_NAME_PARTS}-${constants_1.MIN_NUMBER_OF_NAME_PARTS} elements`,
34
+ });
35
+ }
36
+ }
37
+ }
38
+ class NamonValidator {
39
+ static create() {
40
+ return __classPrivateFieldGet(this, _a, "f", _NamonValidator_validator) || (__classPrivateFieldSet(this, _a, new this(), "f", _NamonValidator_validator));
41
+ }
42
+ validate(value, type) {
43
+ if (value instanceof name_1.Name) {
44
+ NameValidator.create().validate(value, type);
45
+ }
46
+ else if (typeof value === 'string') {
47
+ if (!ValidationRule.namon.test(value)) {
48
+ throw new error_1.ValidationError({
49
+ source: value,
50
+ nameType: 'namon',
51
+ message: 'invalid content',
52
+ });
53
+ }
54
+ }
55
+ else {
56
+ throw new error_1.InputError({
57
+ source: typeof value,
58
+ message: 'expecting types of string | Name',
59
+ });
60
+ }
61
+ }
62
+ }
63
+ _a = NamonValidator;
64
+ _NamonValidator_validator = { value: void 0 };
65
+ class FirstNameValidator {
66
+ static create() {
67
+ return __classPrivateFieldGet(this, _b, "f", _FirstNameValidator_validator) || (__classPrivateFieldSet(this, _b, new this(), "f", _FirstNameValidator_validator));
68
+ }
69
+ validate(value) {
70
+ if (value instanceof name_1.FirstName) {
71
+ value.asNames.forEach((name) => this.validate(name.value));
72
+ }
73
+ else if (typeof value === 'string') {
74
+ if (!ValidationRule.firstName.test(value)) {
75
+ throw new error_1.ValidationError({
76
+ source: value,
77
+ nameType: 'firstName',
78
+ message: 'invalid content',
79
+ });
80
+ }
81
+ }
82
+ else {
83
+ throw new error_1.InputError({
84
+ source: typeof value,
85
+ message: 'expecting types string | FirstName',
86
+ });
87
+ }
88
+ }
89
+ }
90
+ _b = FirstNameValidator;
91
+ _FirstNameValidator_validator = { value: void 0 };
92
+ class MiddleNameValidator {
93
+ static create() {
94
+ return __classPrivateFieldGet(this, _c, "f", _MiddleNameValidator_validator) || (__classPrivateFieldSet(this, _c, new this(), "f", _MiddleNameValidator_validator));
95
+ }
96
+ validate(value) {
97
+ if (typeof value === 'string') {
98
+ if (!ValidationRule.middleName.test(value)) {
99
+ throw new error_1.ValidationError({
100
+ source: value,
101
+ nameType: 'middleName',
102
+ message: 'invalid content',
103
+ });
104
+ }
105
+ }
106
+ else if (Array.isArray(value)) {
107
+ try {
108
+ const validator = NamonValidator.create();
109
+ for (const name of value)
110
+ validator.validate(name, types_1.Namon.MIDDLE_NAME);
111
+ }
112
+ catch (error) {
113
+ throw new error_1.ValidationError({
114
+ source: value,
115
+ nameType: 'middleName',
116
+ message: error === null || error === void 0 ? void 0 : error.message,
117
+ });
118
+ }
119
+ }
120
+ else {
121
+ throw new error_1.InputError({
122
+ source: typeof value,
123
+ message: 'expecting types of string | string[] | Name[]',
124
+ });
125
+ }
126
+ }
127
+ }
128
+ _c = MiddleNameValidator;
129
+ _MiddleNameValidator_validator = { value: void 0 };
130
+ class LastNameValidator {
131
+ static create() {
132
+ return __classPrivateFieldGet(this, _d, "f", _LastNameValidator_validator) || (__classPrivateFieldSet(this, _d, new this(), "f", _LastNameValidator_validator));
133
+ }
134
+ validate(value) {
135
+ if (value instanceof name_1.LastName) {
136
+ value.asNames.forEach((name) => this.validate(name.value));
137
+ }
138
+ else if (typeof value === 'string') {
139
+ if (!ValidationRule.lastName.test(value)) {
140
+ throw new error_1.ValidationError({
141
+ source: value,
142
+ nameType: 'lastName',
143
+ message: 'invalid content',
144
+ });
145
+ }
146
+ }
147
+ else {
148
+ throw new error_1.InputError({
149
+ source: typeof value,
150
+ message: 'expecting types string | LastName',
151
+ });
152
+ }
153
+ }
154
+ }
155
+ _d = LastNameValidator;
156
+ _LastNameValidator_validator = { value: void 0 };
157
+ class NameValidator {
158
+ static create() {
159
+ return __classPrivateFieldGet(this, _e, "f", _NameValidator_validator) || (__classPrivateFieldSet(this, _e, new this(), "f", _NameValidator_validator));
160
+ }
161
+ validate(name, type) {
162
+ if (type && name.type !== type) {
163
+ throw new error_1.ValidationError({
164
+ source: [name],
165
+ nameType: name.type.toString(),
166
+ message: 'wrong type',
167
+ });
168
+ }
169
+ if (!ValidationRule.namon.test(name.value)) {
170
+ throw new error_1.ValidationError({
171
+ source: [name],
172
+ nameType: name.type.toString(),
173
+ message: 'invalid content',
174
+ });
175
+ }
176
+ }
177
+ }
178
+ _e = NameValidator;
179
+ _NameValidator_validator = { value: void 0 };
180
+ class NamaValidator {
181
+ static create() {
182
+ return __classPrivateFieldGet(this, _f, "f", _NamaValidator_validator) || (__classPrivateFieldSet(this, _f, new this(), "f", _NamaValidator_validator));
183
+ }
184
+ validate(value) {
185
+ this.validateKeys(value);
186
+ Validators.firstName.validate(value.get(types_1.Namon.FIRST_NAME));
187
+ Validators.lastName.validate(value.get(types_1.Namon.LAST_NAME));
188
+ if (value.has(types_1.Namon.PREFIX)) {
189
+ Validators.namon.validate(value.get(types_1.Namon.PREFIX));
190
+ }
191
+ if (value.has(types_1.Namon.SUFFIX)) {
192
+ Validators.namon.validate(value.get(types_1.Namon.SUFFIX));
193
+ }
194
+ }
195
+ validateKeys(nama) {
196
+ if (!nama.size) {
197
+ throw new error_1.InputError({ source: undefined, message: 'Map<k,v> must not be empty' });
198
+ }
199
+ else if (nama.size < constants_1.MIN_NUMBER_OF_NAME_PARTS || nama.size > constants_1.MAX_NUMBER_OF_NAME_PARTS) {
200
+ throw new error_1.InputError({
201
+ source: [...nama.values()],
202
+ message: `expecting ${constants_1.MIN_NUMBER_OF_NAME_PARTS}-${constants_1.MIN_NUMBER_OF_NAME_PARTS} fields`,
203
+ });
204
+ }
205
+ if (!nama.has(types_1.Namon.FIRST_NAME)) {
206
+ throw new error_1.InputError({
207
+ source: [...nama.values()],
208
+ message: '"firstName" is a required key',
209
+ });
210
+ }
211
+ if (!nama.has(types_1.Namon.LAST_NAME)) {
212
+ throw new error_1.InputError({
213
+ source: [...nama.values()],
214
+ message: '"lastName" is a required key',
215
+ });
216
+ }
217
+ }
218
+ }
219
+ exports.NamaValidator = NamaValidator;
220
+ _f = NamaValidator;
221
+ _NamaValidator_validator = { value: void 0 };
222
+ class ArrayStringValidator extends ArrayValidator {
223
+ constructor(index = utils_1.NameIndex.base()) {
224
+ super();
225
+ this.index = index;
226
+ }
227
+ validate(values) {
228
+ this.validateIndex(values);
229
+ switch (values.length) {
230
+ case 2:
231
+ Validators.firstName.validate(values[this.index.firstName]);
232
+ Validators.lastName.validate(values[this.index.lastName]);
233
+ break;
234
+ case 3:
235
+ Validators.firstName.validate(values[this.index.firstName]);
236
+ Validators.middleName.validate(values[this.index.middleName]);
237
+ Validators.lastName.validate(values[this.index.lastName]);
238
+ break;
239
+ case 4:
240
+ Validators.namon.validate(values[this.index.prefix]);
241
+ Validators.firstName.validate(values[this.index.firstName]);
242
+ Validators.middleName.validate(values[this.index.middleName]);
243
+ Validators.lastName.validate(values[this.index.lastName]);
244
+ break;
245
+ case 5:
246
+ Validators.namon.validate(values[this.index.prefix]);
247
+ Validators.firstName.validate(values[this.index.firstName]);
248
+ Validators.middleName.validate(values[this.index.middleName]);
249
+ Validators.lastName.validate(values[this.index.lastName]);
250
+ Validators.namon.validate(values[this.index.suffix]);
251
+ break;
252
+ }
253
+ }
254
+ validateIndex(values) {
255
+ super.validate(values);
256
+ }
257
+ }
258
+ exports.ArrayStringValidator = ArrayStringValidator;
259
+ class ArrayNameValidator {
260
+ constructor() {
261
+ _ArrayNameValidator_instances.add(this);
262
+ }
263
+ static create() {
264
+ return __classPrivateFieldGet(this, _g, "f", _ArrayNameValidator_validator) || (__classPrivateFieldSet(this, _g, new this(), "f", _ArrayNameValidator_validator));
265
+ }
266
+ validate(value) {
267
+ if (value.length < constants_1.MIN_NUMBER_OF_NAME_PARTS) {
268
+ throw new error_1.InputError({
269
+ source: value,
270
+ message: `expecting at least ${constants_1.MIN_NUMBER_OF_NAME_PARTS} elements`,
271
+ });
272
+ }
273
+ if (!__classPrivateFieldGet(this, _ArrayNameValidator_instances, "m", _ArrayNameValidator_hasBasicNames).call(this, value)) {
274
+ throw new error_1.InputError({
275
+ source: value,
276
+ message: 'both first and last names are required',
277
+ });
278
+ }
279
+ }
280
+ }
281
+ exports.ArrayNameValidator = ArrayNameValidator;
282
+ _g = ArrayNameValidator, _ArrayNameValidator_instances = new WeakSet(), _ArrayNameValidator_hasBasicNames = function _ArrayNameValidator_hasBasicNames(names) {
283
+ const accumulator = {};
284
+ for (const name of names) {
285
+ if (name.isFirstName || name.isLastName) {
286
+ accumulator[name.type.key] = name.toString();
287
+ }
288
+ }
289
+ return Object.keys(accumulator).length === constants_1.MIN_NUMBER_OF_NAME_PARTS;
290
+ };
291
+ _ArrayNameValidator_validator = { value: void 0 };
292
+ class Validators {
293
+ }
294
+ exports.Validators = Validators;
295
+ Validators.namon = NamonValidator.create();
296
+ Validators.nama = NamaValidator.create();
297
+ Validators.prefix = NamonValidator.create();
298
+ Validators.firstName = FirstNameValidator.create();
299
+ Validators.middleName = MiddleNameValidator.create();
300
+ Validators.lastName = LastNameValidator.create();
301
+ Validators.suffix = NamonValidator.create();