@email-utils/validator-syntax 0.0.1-9 → 1.0.0-rc.2

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.
package/Readme.old.md DELETED
@@ -1,103 +0,0 @@
1
- # Email Syntax Validator
2
-
3
- ## A Robust Tool for Validating Emails
4
-
5
- [ ![Codeship Status for ssmith-wombatweb/is-valid-email](https://app.codeship.com/projects/7f59b370-6794-0136-94ad-6607b51510b1/status?branch=master)](https://app.codeship.com/projects/297684)
6
- [![Code Coverage](https://codecov.io/gh/ssmith-wombatweb/is-valid-email/branch/master/graph/badge.svg)](https://codecov.io/gh/ssmith-wombatweb/is-valid-email/branch/master)
7
- [![Dependencies](https://david-dm.org/ssmith-wombatweb/is-valid-email.svg)](https://david-dm.org/ssmith-wombatweb/is-valid-email.svg)
8
- [![npm version](https://badge.fury.io/js/ssmith-is-valid-email.svg)](https://badge.fury.io/js/ssmith-is-valid-email)
9
-
10
- [Project Repo](https://github.com/ssmith-wombatweb/is-valid-email)
11
-
12
- This script checks the validity of a wide range of email types. It follows most of the rules outlined here: [Email Address - Wikipedia](https://en.wikipedia.org/wiki/Email_address). It was created because of performance issues with RegEx when working with emails in React.
13
-
14
- ### Author
15
- Written by Simeon Smith.
16
-
17
- [Portfolio](https://www.simeonsmith.me) | [Resume](https://resume.simeonsmith.me) | [Github](https://github.com/ssmith-wombatweb)
18
-
19
- ## Installation
20
-
21
- ```
22
- npm i -S ssmith-is-valid-email
23
- ```
24
-
25
- ## Using the Function
26
-
27
- This function supports all modern browser including IE9+.
28
-
29
- ### Importing
30
-
31
- #### ES6 JS
32
-
33
- ```javascript
34
- import isValidEmail from 'ssmith-is-valid-email';
35
- ```
36
-
37
- #### Common JS Import
38
- ```javascript
39
- const isValidEmail = require('ssmith-is-valid-email');
40
- ```
41
-
42
- ### Calling the Function
43
-
44
- ```javascript
45
- isValidEmail('test@google.com');
46
- // Returns true or false.
47
- ```
48
-
49
- ## Testing
50
-
51
- The following emails were tested. It follows most of the rules outlined here: [Email Address - Wikipedia](https://en.wikipedia.org/wiki/Email_address).
52
-
53
- ### Valid Emails
54
-
55
- ```
56
- simple@example.com
57
- very.common@example.com
58
- disposable.style.email.with+symbol@example.com
59
- other.email-with-hyphen@example.com
60
- user.name+tag+sorting@example.com
61
- x@example.com
62
- example-indeed@strange-example.com
63
- example@s.example
64
- admin@test.co
65
- " "@example.org
66
- ```
67
-
68
- ### Invalid Emails
69
-
70
- ```
71
- Abc.example.com
72
- @Abc.example.com
73
- james@google
74
- james@google.c
75
- james richards@google.com
76
- james" richards@google.com
77
- james@cb$.com
78
- A@b@c@example.com
79
- a"b(c)d,e:f;g<h>i[j\\k]l@example.com
80
- just"not"right@example.com
81
- just."not"right@example.com
82
- 1234567890123456789012345678901234567890123456789012345678901234+x@example.com
83
- john..doe@example.com
84
- john.doe@example..com
85
- ```
86
-
87
- ### Not Yet Supported
88
-
89
- #### Should Be Valid
90
-
91
- ```
92
- "very.(),:;<>[]\".VERY.\"very@\\ \"very\".unusual"@strange.example.com
93
- ```
94
-
95
- #### Not Useful to Support
96
-
97
- ```
98
- admin@mailserver1
99
- ```
100
-
101
- ## Performance
102
-
103
- This script will run 1000 times on a valid or invalid email in less than 20 milliseconds.
package/bin/tag.sh DELETED
@@ -1,21 +0,0 @@
1
- #!/bin/bash
2
-
3
- if [ $1 ]; then
4
- echo "Creating a new $1 version."
5
-
6
- npm version $1
7
- version=`node -e "console.log(require('./package.json').version);"`
8
-
9
- npm run build
10
- git add -A
11
- git commit -m "Build for $version."
12
-
13
- echo "Publishing version $version."
14
-
15
- git push
16
- git push --tags
17
- npm publish --access public
18
- else
19
- echo "No version type provided. (ie. ./bin/tag.sh version)";
20
- fi
21
-
package/dist/index.js DELETED
@@ -1,272 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- const tlds = require("tlds/index.json");
13
- class EmailSyntaxValidator {
14
- constructor(configParam = {}) {
15
- this.defaultConfig = {
16
- local: {
17
- alphaUpper: true,
18
- alphaLower: true,
19
- numeric: true,
20
- period: true,
21
- printable: true,
22
- quote: true,
23
- hyphen: true,
24
- spaces: true,
25
- },
26
- domain: {
27
- alphaUpper: true,
28
- alphaLower: true,
29
- numeric: true,
30
- period: true,
31
- hyphen: true,
32
- tld: true,
33
- localhost: false,
34
- charsBeforeDot: 1,
35
- charsAfterDot: 2,
36
- },
37
- };
38
- this.config = this.defaultConfig;
39
- this.chars = {
40
- alphaLower: 'abcdefghijklmnopqrstuvwxyz',
41
- alphaUpper: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
42
- numeric: '0123456789',
43
- dot: ',',
44
- printable: "!#$%&'*+/=?^_`{|}~",
45
- space: ' ',
46
- quote: '"',
47
- hyphen: '-',
48
- period: '.',
49
- };
50
- this.email = '';
51
- this.originalEmail = '';
52
- let key;
53
- for (key in configParam) {
54
- const configGroup = configParam[key];
55
- for (const subKey in configGroup) {
56
- const subKeyType = subKey;
57
- this.config[key][subKeyType] = configGroup[subKeyType];
58
- }
59
- }
60
- }
61
- gatherChars(charConfig) {
62
- let characters = '';
63
- if (charConfig.alphaUpper === true) {
64
- characters += this.chars.alphaUpper;
65
- }
66
- if (charConfig.alphaLower === true) {
67
- characters += this.chars.alphaLower;
68
- }
69
- if (charConfig.numeric === true) {
70
- characters += this.chars.numeric;
71
- }
72
- if (charConfig.hyphen === true) {
73
- characters += this.chars.hyphen;
74
- }
75
- if ('printable' in charConfig && charConfig.printable === true) {
76
- characters += this.chars.printable;
77
- }
78
- if ('spaces' in charConfig && charConfig.spaces === true) {
79
- characters += this.chars.space;
80
- }
81
- if ('quote' in charConfig && charConfig.quote === true) {
82
- characters += this.chars.quote;
83
- }
84
- if (charConfig.period === true) {
85
- characters += this.chars.period;
86
- }
87
- return characters.split('');
88
- }
89
- validateGeneral() {
90
- const atSymbolIndex = this.email.indexOf('@');
91
- if (atSymbolIndex < 1) {
92
- return false;
93
- }
94
- return true;
95
- }
96
- validateChars(chars, charsToValidate) {
97
- let quoteOpen = false;
98
- for (let l = 0; l < charsToValidate.length; l++) {
99
- const letter = charsToValidate[l];
100
- if (this.config.local.quote) {
101
- if (letter === '"') {
102
- quoteOpen = !quoteOpen;
103
- if (l !== 0 && l !== charsToValidate.length - 1) {
104
- if (quoteOpen && !(charsToValidate[l - 1] === '.')) {
105
- return false;
106
- }
107
- else if (!quoteOpen && !(charsToValidate[l + 1] === '.')) {
108
- return false;
109
- }
110
- }
111
- }
112
- }
113
- const letterInAllowed = chars.indexOf(letter) !== -1;
114
- if (!letterInAllowed) {
115
- return false;
116
- }
117
- }
118
- return true;
119
- }
120
- validateLocal() {
121
- const validChars = this.gatherChars(this.config.local);
122
- let localLetters = this.email.slice(0, this.email.indexOf('@')).split('');
123
- if (this.config.local.printable) {
124
- const percentInLocalIndex = localLetters.indexOf('%');
125
- if (percentInLocalIndex !== -1) {
126
- localLetters = localLetters.slice(0, percentInLocalIndex);
127
- }
128
- const bangInLocalIndex = localLetters.indexOf('!');
129
- if (bangInLocalIndex !== -1) {
130
- localLetters = localLetters.slice(bangInLocalIndex);
131
- }
132
- }
133
- if (localLetters.length > 64) {
134
- return false;
135
- }
136
- const charsValid = this.validateChars(validChars, localLetters);
137
- if (!charsValid) {
138
- return false;
139
- }
140
- const indexOfDoublePeriods = this.email.indexOf('..');
141
- if (indexOfDoublePeriods !== -1) {
142
- const atSymbolIndex = this.email.indexOf('@');
143
- if (indexOfDoublePeriods > atSymbolIndex) {
144
- return false;
145
- }
146
- const indexOfFirstQuoteInLocal = localLetters.indexOf('"');
147
- const indexOfLastQuoteInLocal = localLetters.length -
148
- `${localLetters}`.split('').reverse().join('').indexOf('"') -
149
- 1;
150
- if (indexOfFirstQuoteInLocal < 0 || indexOfLastQuoteInLocal < 0) {
151
- return false;
152
- }
153
- if (indexOfFirstQuoteInLocal >= indexOfDoublePeriods ||
154
- indexOfDoublePeriods >= indexOfLastQuoteInLocal) {
155
- return false;
156
- }
157
- }
158
- const indexOfSpace = localLetters.indexOf(' ');
159
- if (indexOfSpace !== -1 &&
160
- (localLetters[indexOfSpace + 1] !== '"' ||
161
- localLetters[indexOfSpace - 1] !== '"')) {
162
- return false;
163
- }
164
- return true;
165
- }
166
- validateDomainParts(domain) {
167
- const dotIndex = domain.lastIndexOf('.');
168
- if (dotIndex === -1 && this.config.domain.localhost === false) {
169
- return false;
170
- }
171
- if (dotIndex !== -1) {
172
- if (this.config.domain.charsBeforeDot !== -1) {
173
- if (dotIndex <= this.config.domain.charsBeforeDot) {
174
- return false;
175
- }
176
- }
177
- if (this.config.domain.charsAfterDot !== -1) {
178
- if (dotIndex === domain.length - this.config.domain.charsAfterDot) {
179
- return false;
180
- }
181
- }
182
- if (this.config.domain.tld) {
183
- const tld = domain.slice(dotIndex + 1);
184
- let tldExists = false;
185
- for (let t = 0; t < tlds.length; t++) {
186
- const currentTld = tlds[t];
187
- if (tld.toLowerCase() === currentTld) {
188
- tldExists = true;
189
- }
190
- if (tldExists) {
191
- break;
192
- }
193
- }
194
- if (!tldExists) {
195
- return false;
196
- }
197
- }
198
- }
199
- return true;
200
- }
201
- validateDomain() {
202
- const domain = this.email.slice(this.email.indexOf('@') + 1);
203
- const domainPartsValid = this.validateDomainParts(domain);
204
- if (!domainPartsValid) {
205
- return false;
206
- }
207
- const validChars = this.gatherChars(this.config.domain);
208
- const domainLetters = domain.split('');
209
- if (this.config.local.printable) {
210
- const localLetters = this.email
211
- .slice(0, this.email.indexOf('@'))
212
- .split('');
213
- const percentInLocalIndex = localLetters.indexOf('%');
214
- if (percentInLocalIndex !== -1) {
215
- const relayDomain = localLetters.slice(percentInLocalIndex + 1);
216
- const relayDomainPartsValid = this.validateDomainParts(relayDomain.join(''));
217
- if (!relayDomainPartsValid) {
218
- return false;
219
- }
220
- const charsValid = this.validateChars(validChars, relayDomain);
221
- if (!charsValid) {
222
- return false;
223
- }
224
- }
225
- const bangInLocalIndex = localLetters.indexOf('!');
226
- if (bangInLocalIndex !== -1) {
227
- const relayDomain = localLetters.slice(0, bangInLocalIndex);
228
- const relayDomainPartsValid = this.validateDomainParts(relayDomain.join(''));
229
- if (!relayDomainPartsValid) {
230
- return false;
231
- }
232
- const charsValid = this.validateChars(validChars, relayDomain);
233
- if (!charsValid) {
234
- return false;
235
- }
236
- }
237
- }
238
- const charsValid = this.validateChars(validChars, domainLetters);
239
- if (!charsValid) {
240
- return false;
241
- }
242
- return true;
243
- }
244
- validate(email) {
245
- return __awaiter(this, void 0, void 0, function* () {
246
- if (typeof email !== 'string') {
247
- console.error('Email not a string.', email);
248
- return false;
249
- }
250
- else if (!email) {
251
- console.error('Email not provided.', email);
252
- return false;
253
- }
254
- this.email = email;
255
- const generalValid = this.validateGeneral();
256
- if (!generalValid) {
257
- return false;
258
- }
259
- const localValid = this.validateLocal();
260
- if (!localValid) {
261
- return false;
262
- }
263
- const domainValid = this.validateDomain();
264
- if (!domainValid) {
265
- return false;
266
- }
267
- return true;
268
- });
269
- }
270
- }
271
- exports.default = EmailSyntaxValidator;
272
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}