parse-domain 4.1.0 → 7.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 (152) hide show
  1. package/README.md +131 -58
  2. package/bin/update.js +8 -11
  3. package/{build-cjs/src → build}/config.d.ts +0 -0
  4. package/{build-esm/src → build}/config.js +0 -0
  5. package/build/config.js.map +1 -0
  6. package/{build-cjs/src → build}/from-url.d.ts +0 -0
  7. package/{build-esm/src → build}/from-url.js +3 -1
  8. package/build/from-url.js.map +1 -0
  9. package/build/main.d.ts +3 -0
  10. package/build/main.js +6 -0
  11. package/build/main.js.map +1 -0
  12. package/{build-cjs/src → build}/parse-domain.d.ts +9 -3
  13. package/{build-esm/src → build}/parse-domain.js +6 -6
  14. package/build/parse-domain.js.map +1 -0
  15. package/build/psl/build-tries.d.ts +4 -0
  16. package/{build-esm/src → build}/psl/build-tries.js +5 -20
  17. package/build/psl/build-tries.js.map +1 -0
  18. package/{build-cjs/src → build}/psl/fetch-psl.d.ts +0 -0
  19. package/{build-esm/src → build}/psl/fetch-psl.js +1 -1
  20. package/build/psl/fetch-psl.js.map +1 -0
  21. package/build/punycode.d.ts +1 -0
  22. package/build/punycode.js +4 -0
  23. package/build/punycode.js.map +1 -0
  24. package/{build-cjs/src → build}/sanitize.d.ts +28 -6
  25. package/build/sanitize.js +193 -0
  26. package/build/sanitize.js.map +1 -0
  27. package/{build-cjs/src → build}/scripts/update-psl-fixture.d.ts +0 -0
  28. package/build/scripts/update-psl-fixture.js +20 -0
  29. package/build/scripts/update-psl-fixture.js.map +1 -0
  30. package/{build-cjs/src → build}/scripts/update-tries.d.ts +0 -0
  31. package/build/scripts/update-tries.js +39 -0
  32. package/build/scripts/update-tries.js.map +1 -0
  33. package/build/serialized-tries.d.ts +3 -0
  34. package/build/serialized-tries.js +4 -0
  35. package/build/serialized-tries.js.map +1 -0
  36. package/{build-cjs/src → build}/smoke-test.d.ts +0 -0
  37. package/{build-esm/src → build}/smoke-test.js +6 -8
  38. package/build/smoke-test.js.map +1 -0
  39. package/{build-cjs/src → build}/trie/characters.d.ts +0 -0
  40. package/{build-esm/src → build}/trie/characters.js +0 -0
  41. package/build/trie/characters.js.map +1 -0
  42. package/{build-cjs/src → build}/trie/create-trie.d.ts +1 -1
  43. package/{build-esm/src → build}/trie/create-trie.js +1 -1
  44. package/build/trie/create-trie.js.map +1 -0
  45. package/{build-cjs/src → build}/trie/look-up.d.ts +2 -2
  46. package/{build-esm/src → build}/trie/look-up.js +1 -1
  47. package/build/trie/look-up.js.map +1 -0
  48. package/{build-cjs/src → build}/trie/nodes.d.ts +0 -0
  49. package/{build-esm/src → build}/trie/nodes.js +0 -0
  50. package/build/trie/nodes.js.map +1 -0
  51. package/{build-cjs/src → build}/trie/parse-trie.d.ts +1 -1
  52. package/{build-esm/src → build}/trie/parse-trie.js +2 -2
  53. package/build/trie/parse-trie.js.map +1 -0
  54. package/{build-cjs/src → build}/trie/serialize-trie.d.ts +1 -1
  55. package/{build-esm/src → build}/trie/serialize-trie.js +1 -1
  56. package/build/trie/serialize-trie.js.map +1 -0
  57. package/{build-cjs/src → build}/type-util.d.ts +0 -0
  58. package/{build-esm/src → build}/type-util.js +0 -0
  59. package/{build-cjs/src → build}/type-util.js.map +1 -1
  60. package/{build-cjs/src → build}/update-tries.d.ts +0 -0
  61. package/{build-esm/src → build}/update-tries.js +3 -3
  62. package/build/update-tries.js.map +1 -0
  63. package/package.json +34 -43
  64. package/serialized-tries/icann.d.ts +3 -0
  65. package/serialized-tries/icann.js +1 -0
  66. package/serialized-tries/info.json +1 -0
  67. package/serialized-tries/private.d.ts +3 -0
  68. package/serialized-tries/private.js +1 -0
  69. package/build-cjs/serialized-tries/icann.json +0 -1
  70. package/build-cjs/serialized-tries/info.json +0 -1
  71. package/build-cjs/serialized-tries/private.json +0 -1
  72. package/build-cjs/src/config.js +0 -10
  73. package/build-cjs/src/config.js.map +0 -1
  74. package/build-cjs/src/from-url.js +0 -32
  75. package/build-cjs/src/from-url.js.map +0 -1
  76. package/build-cjs/src/main.d.ts +0 -3
  77. package/build-cjs/src/main.js +0 -14
  78. package/build-cjs/src/main.js.map +0 -1
  79. package/build-cjs/src/main.mjs +0 -11
  80. package/build-cjs/src/parse-domain.js +0 -97
  81. package/build-cjs/src/parse-domain.js.map +0 -1
  82. package/build-cjs/src/psl/build-tries.d.ts +0 -4
  83. package/build-cjs/src/psl/build-tries.js +0 -59
  84. package/build-cjs/src/psl/build-tries.js.map +0 -1
  85. package/build-cjs/src/psl/fetch-psl.js +0 -27
  86. package/build-cjs/src/psl/fetch-psl.js.map +0 -1
  87. package/build-cjs/src/sanitize.js +0 -132
  88. package/build-cjs/src/sanitize.js.map +0 -1
  89. package/build-cjs/src/scripts/update-psl-fixture.js +0 -29
  90. package/build-cjs/src/scripts/update-psl-fixture.js.map +0 -1
  91. package/build-cjs/src/scripts/update-tries.js +0 -48
  92. package/build-cjs/src/scripts/update-tries.js.map +0 -1
  93. package/build-cjs/src/serialized-tries.d.ts +0 -3
  94. package/build-cjs/src/serialized-tries.js +0 -11
  95. package/build-cjs/src/serialized-tries.js.map +0 -1
  96. package/build-cjs/src/smoke-test.js +0 -63
  97. package/build-cjs/src/smoke-test.js.map +0 -1
  98. package/build-cjs/src/trie/characters.js +0 -11
  99. package/build-cjs/src/trie/characters.js.map +0 -1
  100. package/build-cjs/src/trie/create-trie.js +0 -16
  101. package/build-cjs/src/trie/create-trie.js.map +0 -1
  102. package/build-cjs/src/trie/look-up.js +0 -48
  103. package/build-cjs/src/trie/look-up.js.map +0 -1
  104. package/build-cjs/src/trie/nodes.js +0 -27
  105. package/build-cjs/src/trie/nodes.js.map +0 -1
  106. package/build-cjs/src/trie/parse-trie.js +0 -70
  107. package/build-cjs/src/trie/parse-trie.js.map +0 -1
  108. package/build-cjs/src/trie/serialize-trie.js +0 -31
  109. package/build-cjs/src/trie/serialize-trie.js.map +0 -1
  110. package/build-cjs/src/type-util.js +0 -3
  111. package/build-cjs/src/update-tries.js +0 -27
  112. package/build-cjs/src/update-tries.js.map +0 -1
  113. package/build-esm/serialized-tries/icann.json +0 -1
  114. package/build-esm/serialized-tries/info.json +0 -1
  115. package/build-esm/serialized-tries/private.json +0 -1
  116. package/build-esm/src/config.d.ts +0 -6
  117. package/build-esm/src/config.js.map +0 -1
  118. package/build-esm/src/from-url.d.ts +0 -2
  119. package/build-esm/src/from-url.js.map +0 -1
  120. package/build-esm/src/main.d.ts +0 -3
  121. package/build-esm/src/main.js +0 -6
  122. package/build-esm/src/main.js.map +0 -1
  123. package/build-esm/src/parse-domain.d.ts +0 -79
  124. package/build-esm/src/parse-domain.js.map +0 -1
  125. package/build-esm/src/psl/build-tries.d.ts +0 -4
  126. package/build-esm/src/psl/build-tries.js.map +0 -1
  127. package/build-esm/src/psl/fetch-psl.d.ts +0 -1
  128. package/build-esm/src/psl/fetch-psl.js.map +0 -1
  129. package/build-esm/src/sanitize.d.ts +0 -36
  130. package/build-esm/src/sanitize.js +0 -125
  131. package/build-esm/src/sanitize.js.map +0 -1
  132. package/build-esm/src/serialized-tries.d.ts +0 -3
  133. package/build-esm/src/serialized-tries.js +0 -4
  134. package/build-esm/src/serialized-tries.js.map +0 -1
  135. package/build-esm/src/smoke-test.d.ts +0 -1
  136. package/build-esm/src/smoke-test.js.map +0 -1
  137. package/build-esm/src/trie/characters.d.ts +0 -6
  138. package/build-esm/src/trie/characters.js.map +0 -1
  139. package/build-esm/src/trie/create-trie.d.ts +0 -1
  140. package/build-esm/src/trie/create-trie.js.map +0 -1
  141. package/build-esm/src/trie/look-up.d.ts +0 -3
  142. package/build-esm/src/trie/look-up.js.map +0 -1
  143. package/build-esm/src/trie/nodes.d.ts +0 -15
  144. package/build-esm/src/trie/nodes.js.map +0 -1
  145. package/build-esm/src/trie/parse-trie.d.ts +0 -1
  146. package/build-esm/src/trie/parse-trie.js.map +0 -1
  147. package/build-esm/src/trie/serialize-trie.d.ts +0 -2
  148. package/build-esm/src/trie/serialize-trie.js.map +0 -1
  149. package/build-esm/src/type-util.d.ts +0 -3
  150. package/build-esm/src/type-util.js.map +0 -1
  151. package/build-esm/src/update-tries.d.ts +0 -4
  152. package/build-esm/src/update-tries.js.map +0 -1
@@ -0,0 +1,193 @@
1
+ import { ipVersion } from "is-ip";
2
+ // See https://en.wikipedia.org/wiki/Domain_name
3
+ // See https://tools.ietf.org/html/rfc1034
4
+ const LABEL_SEPARATOR = ".";
5
+ const LABEL_LENGTH_MIN = 1;
6
+ const LABEL_LENGTH_MAX = 63;
7
+ /**
8
+ * 255 octets - 2 octets if you remove the last dot
9
+ * @see https://devblogs.microsoft.com/oldnewthing/20120412-00/?p=7873
10
+ */
11
+ const DOMAIN_LENGTH_MAX = 253;
12
+ const textEncoder = new TextEncoder();
13
+ export var Validation;
14
+ (function (Validation) {
15
+ /**
16
+ * Allows any octets as labels
17
+ * but still restricts the length of labels and the overall domain.
18
+ *
19
+ * @see https://www.rfc-editor.org/rfc/rfc2181#section-11
20
+ **/
21
+ Validation["Lax"] = "LAX";
22
+ /**
23
+ * Only allows ASCII letters, digits and hyphens (aka LDH),
24
+ * forbids hyphens at the beginning or end of a label
25
+ * and requires top-level domain names not to be all-numeric.
26
+ *
27
+ * This is the default if no validation is configured.
28
+ *
29
+ * @see https://datatracker.ietf.org/doc/html/rfc3696#section-2
30
+ */
31
+ Validation["Strict"] = "STRICT";
32
+ })(Validation || (Validation = {}));
33
+ export var ValidationErrorType;
34
+ (function (ValidationErrorType) {
35
+ ValidationErrorType["NoHostname"] = "NO_HOSTNAME";
36
+ ValidationErrorType["DomainMaxLength"] = "DOMAIN_MAX_LENGTH";
37
+ ValidationErrorType["LabelMinLength"] = "LABEL_MIN_LENGTH";
38
+ ValidationErrorType["LabelMaxLength"] = "LABEL_MAX_LENGTH";
39
+ ValidationErrorType["LabelInvalidCharacter"] = "LABEL_INVALID_CHARACTER";
40
+ ValidationErrorType["LastLabelInvalid"] = "LAST_LABEL_INVALID";
41
+ })(ValidationErrorType || (ValidationErrorType = {}));
42
+ export var SanitizationResultType;
43
+ (function (SanitizationResultType) {
44
+ SanitizationResultType["ValidIp"] = "VALID_IP";
45
+ SanitizationResultType["ValidDomain"] = "VALID_DOMAIN";
46
+ SanitizationResultType["Error"] = "ERROR";
47
+ })(SanitizationResultType || (SanitizationResultType = {}));
48
+ const createNoHostnameError = (input) => {
49
+ return {
50
+ type: ValidationErrorType.NoHostname,
51
+ message: `The given input ${String(input)} does not look like a hostname.`,
52
+ column: 1,
53
+ };
54
+ };
55
+ const createDomainMaxLengthError = (domain, length) => {
56
+ return {
57
+ type: ValidationErrorType.DomainMaxLength,
58
+ message: `Domain "${domain}" is too long. Domain is ${length} octets long but should not be longer than ${DOMAIN_LENGTH_MAX}.`,
59
+ column: length,
60
+ };
61
+ };
62
+ const createLabelMinLengthError = (label, column) => {
63
+ const length = label.length;
64
+ return {
65
+ type: ValidationErrorType.LabelMinLength,
66
+ message: `Label "${label}" is too short. Label is ${length} octets long but should be at least ${LABEL_LENGTH_MIN}.`,
67
+ column,
68
+ };
69
+ };
70
+ const createLabelMaxLengthError = (label, column) => {
71
+ const length = label.length;
72
+ return {
73
+ type: ValidationErrorType.LabelMaxLength,
74
+ message: `Label "${label}" is too long. Label is ${length} octets long but should not be longer than ${LABEL_LENGTH_MAX}.`,
75
+ column,
76
+ };
77
+ };
78
+ const createLabelInvalidCharacterError = (label, invalidCharacter, column) => {
79
+ return {
80
+ type: ValidationErrorType.LabelInvalidCharacter,
81
+ message: `Label "${label}" contains invalid character "${invalidCharacter}" at column ${column}.`,
82
+ column,
83
+ };
84
+ };
85
+ const createLastLabelInvalidError = (label, column) => {
86
+ return {
87
+ type: ValidationErrorType.LabelInvalidCharacter,
88
+ message: `Last label "${label}" must not be all-numeric.`,
89
+ column,
90
+ };
91
+ };
92
+ export const sanitize = (input, options = {}) => {
93
+ // Extra check for non-TypeScript users
94
+ if (typeof input !== "string") {
95
+ return {
96
+ type: SanitizationResultType.Error,
97
+ errors: [createNoHostnameError(input)],
98
+ };
99
+ }
100
+ if (input === "") {
101
+ return {
102
+ type: SanitizationResultType.ValidDomain,
103
+ domain: input,
104
+ labels: [],
105
+ };
106
+ }
107
+ // IPv6 addresses are surrounded by square brackets in URLs
108
+ // See https://tools.ietf.org/html/rfc3986#section-3.2.2
109
+ const inputTrimmedAsIp = input.replace(/^\[|]$/g, "");
110
+ const ipVersionOfInput = ipVersion(inputTrimmedAsIp);
111
+ if (ipVersionOfInput !== undefined) {
112
+ return {
113
+ type: SanitizationResultType.ValidIp,
114
+ ip: inputTrimmedAsIp,
115
+ ipVersion: ipVersionOfInput,
116
+ };
117
+ }
118
+ const lastChar = input.charAt(input.length - 1);
119
+ const canonicalInput = lastChar === LABEL_SEPARATOR ? input.slice(0, -1) : input;
120
+ const octets = new TextEncoder().encode(canonicalInput);
121
+ if (octets.length > DOMAIN_LENGTH_MAX) {
122
+ return {
123
+ type: SanitizationResultType.Error,
124
+ errors: [createDomainMaxLengthError(input, octets.length)],
125
+ };
126
+ }
127
+ const labels = canonicalInput.split(LABEL_SEPARATOR);
128
+ const { validation = Validation.Strict } = options;
129
+ const labelValidationErrors = validateLabels[validation](labels);
130
+ if (labelValidationErrors.length > 0) {
131
+ return {
132
+ type: SanitizationResultType.Error,
133
+ errors: labelValidationErrors,
134
+ };
135
+ }
136
+ return {
137
+ type: SanitizationResultType.ValidDomain,
138
+ domain: input,
139
+ labels,
140
+ };
141
+ };
142
+ const validateLabels = {
143
+ [Validation.Lax]: (labels) => {
144
+ const labelValidationErrors = [];
145
+ let column = 1;
146
+ for (const label of labels) {
147
+ const octets = textEncoder.encode(label);
148
+ if (octets.length < LABEL_LENGTH_MIN) {
149
+ labelValidationErrors.push(createLabelMinLengthError(label, column));
150
+ }
151
+ else if (octets.length > LABEL_LENGTH_MAX) {
152
+ labelValidationErrors.push(createLabelMaxLengthError(label, column));
153
+ }
154
+ column += label.length + LABEL_SEPARATOR.length;
155
+ }
156
+ return labelValidationErrors;
157
+ },
158
+ [Validation.Strict]: (labels) => {
159
+ const labelValidationErrors = [];
160
+ let column = 1;
161
+ let lastLabel;
162
+ for (const label of labels) {
163
+ // According to https://tools.ietf.org/html/rfc6761 labels should
164
+ // only contain ASCII letters, digits and hyphens (LDH).
165
+ const invalidCharacter = /[^\da-z-]/i.exec(label);
166
+ if (invalidCharacter) {
167
+ labelValidationErrors.push(createLabelInvalidCharacterError(label, invalidCharacter[0], invalidCharacter.index + 1));
168
+ }
169
+ if (label.startsWith("-")) {
170
+ labelValidationErrors.push(createLabelInvalidCharacterError(label, "-", column));
171
+ }
172
+ else if (label.endsWith("-")) {
173
+ labelValidationErrors.push(createLabelInvalidCharacterError(label, "-", column + label.length - 1));
174
+ }
175
+ if (
176
+ // We can use .length here to check for the octet size because
177
+ // label can only contain ASCII LDH characters at this point.
178
+ label.length < LABEL_LENGTH_MIN) {
179
+ labelValidationErrors.push(createLabelMinLengthError(label, column));
180
+ }
181
+ else if (label.length > LABEL_LENGTH_MAX) {
182
+ labelValidationErrors.push(createLabelMaxLengthError(label, column));
183
+ }
184
+ column += label.length + LABEL_SEPARATOR.length;
185
+ lastLabel = label;
186
+ }
187
+ if (lastLabel !== undefined && /[a-z-]/iu.test(lastLabel) === false) {
188
+ labelValidationErrors.push(createLastLabelInvalidError(lastLabel, column - lastLabel.length - LABEL_SEPARATOR.length));
189
+ }
190
+ return labelValidationErrors;
191
+ },
192
+ };
193
+ //# sourceMappingURL=sanitize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitize.js","sourceRoot":"","sources":["../src/sanitize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import * as path from "path";
11
+ import * as url from "url";
12
+ import * as fs from "fs";
13
+ import { fetchPsl } from "../psl/fetch-psl.js";
14
+ const __dirname = path.dirname(url.fileURLToPath(import.meta.url));
15
+ export const done = (() => __awaiter(void 0, void 0, void 0, function* () {
16
+ const pathToPslFixture = path.resolve(__dirname, "..", "tests", "fixtures", "public-suffix-list.txt");
17
+ const psl = yield fetchPsl();
18
+ yield fs.promises.writeFile(pathToPslFixture, psl);
19
+ }))();
20
+ //# sourceMappingURL=update-psl-fixture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-psl-fixture.js","sourceRoot":"","sources":["../../src/scripts/update-psl-fixture.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAC3B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAEnE,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,GAAS,EAAE;IAC9B,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CACnC,SAAS,EACT,IAAI,EACJ,OAAO,EACP,UAAU,EACV,wBAAwB,CACzB,CAAC;IAEF,MAAM,GAAG,GAAG,MAAM,QAAQ,EAAE,CAAC;IAE7B,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;AACrD,CAAC,CAAA,CAAC,EAAE,CAAC"}
@@ -0,0 +1,39 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import * as path from "path";
11
+ import * as url from "url";
12
+ import * as fs from "fs";
13
+ import { fetchBuildSerializeTries } from "../update-tries.js";
14
+ import { PUBLIC_SUFFIX_URL } from "../config.js";
15
+ const __dirname = path.dirname(url.fileURLToPath(import.meta.url));
16
+ const writeTriesToFiles = ({ serializedIcannTrie, serializedPrivateTrie, }) => __awaiter(void 0, void 0, void 0, function* () {
17
+ const indexOfScriptArg = process.argv.lastIndexOf("--");
18
+ const targetDirectories = process.argv.slice(indexOfScriptArg + 1);
19
+ yield Promise.all(targetDirectories.map((targetDirectory) => __awaiter(void 0, void 0, void 0, function* () {
20
+ const pathToIcannTrie = path.resolve(__dirname, targetDirectory, "icann.js");
21
+ const pathToPrivateTrie = path.resolve(__dirname, targetDirectory, "private.js");
22
+ const pathToTrieInfoFile = path.resolve(__dirname, targetDirectory, "info.json");
23
+ console.warn(`Writing ${pathToIcannTrie}...`);
24
+ console.warn(`Writing ${pathToPrivateTrie}...`);
25
+ console.warn(`Writing ${pathToTrieInfoFile}...`);
26
+ yield Promise.all([
27
+ fs.promises.writeFile(pathToIcannTrie, `export default ${JSON.stringify(serializedIcannTrie)};`),
28
+ fs.promises.writeFile(pathToPrivateTrie, `export default ${JSON.stringify(serializedPrivateTrie)};`),
29
+ fs.promises.writeFile(pathToTrieInfoFile, JSON.stringify({
30
+ updatedAt: new Date(),
31
+ })),
32
+ ]);
33
+ })));
34
+ });
35
+ export const done = (() => __awaiter(void 0, void 0, void 0, function* () {
36
+ console.warn(`Fetching public suffix list from ${PUBLIC_SUFFIX_URL}...`);
37
+ yield writeTriesToFiles(yield fetchBuildSerializeTries());
38
+ }))();
39
+ //# sourceMappingURL=update-tries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-tries.js","sourceRoot":"","sources":["../../src/scripts/update-tries.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAC3B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGjD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAEnE,MAAM,iBAAiB,GAAG,CAAO,EAC/B,mBAAmB,EACnB,qBAAqB,GAC8B,EAAE,EAAE;IACvD,MAAM,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;IAEnE,MAAM,OAAO,CAAC,GAAG,CACf,iBAAiB,CAAC,GAAG,CAAC,CAAO,eAAe,EAAE,EAAE;QAC9C,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAClC,SAAS,EACT,eAAe,EACf,UAAU,CACX,CAAC;QACF,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CACpC,SAAS,EACT,eAAe,EACf,YAAY,CACb,CAAC;QACF,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CACrC,SAAS,EACT,eAAe,EACf,WAAW,CACZ,CAAC;QAEF,OAAO,CAAC,IAAI,CAAC,WAAW,eAAe,KAAK,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,WAAW,iBAAiB,KAAK,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,WAAW,kBAAkB,KAAK,CAAC,CAAC;QAEjD,MAAM,OAAO,CAAC,GAAG,CAAC;YAChB,EAAE,CAAC,QAAQ,CAAC,SAAS,CACnB,eAAe,EACf,kBAAkB,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,GAAG,CACzD;YACD,EAAE,CAAC,QAAQ,CAAC,SAAS,CACnB,iBAAiB,EACjB,kBAAkB,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,GAAG,CAC3D;YACD,EAAE,CAAC,QAAQ,CAAC,SAAS,CACnB,kBAAkB,EAClB,IAAI,CAAC,SAAS,CAAC;gBACb,SAAS,EAAE,IAAI,IAAI,EAAE;aACtB,CAAC,CACH;SACF,CAAC,CAAC;IACL,CAAC,CAAA,CAAC,CACH,CAAC;AACJ,CAAC,CAAA,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,GAAS,EAAE;IAC9B,OAAO,CAAC,IAAI,CAAC,oCAAoC,iBAAiB,KAAK,CAAC,CAAC;IAEzE,MAAM,iBAAiB,CAAC,MAAM,wBAAwB,EAAE,CAAC,CAAC;AAC5D,CAAC,CAAA,CAAC,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import icannTrie from "../serialized-tries/icann.js";
2
+ import privateTrie from "../serialized-tries/private.js";
3
+ export { icannTrie, privateTrie };
@@ -0,0 +1,4 @@
1
+ import icannTrie from "../serialized-tries/icann.js";
2
+ import privateTrie from "../serialized-tries/private.js";
3
+ export { icannTrie, privateTrie };
4
+ //# sourceMappingURL=serialized-tries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialized-tries.js","sourceRoot":"","sources":["../src/serialized-tries.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,8BAA8B,CAAC;AACrD,OAAO,WAAW,MAAM,gCAAgC,CAAC;AAEzD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC"}
File without changes
@@ -1,9 +1,9 @@
1
1
  import { deepStrictEqual } from "assert";
2
- import { parseDomain } from "./main";
2
+ import { fromUrl, parseDomain, ParseResultType } from "./main.js";
3
3
  export const runSmokeTest = () => {
4
4
  deepStrictEqual(parseDomain("www.example.com"), {
5
5
  hostname: "www.example.com",
6
- type: "LISTED",
6
+ type: ParseResultType.Listed,
7
7
  labels: ["www", "example", "com"],
8
8
  subDomains: ["www"],
9
9
  domain: "example",
@@ -16,7 +16,7 @@ export const runSmokeTest = () => {
16
16
  });
17
17
  deepStrictEqual(parseDomain("www.example.co.uk"), {
18
18
  hostname: "www.example.co.uk",
19
- type: "LISTED",
19
+ type: ParseResultType.Listed,
20
20
  labels: ["www", "example", "co", "uk"],
21
21
  subDomains: ["www"],
22
22
  domain: "example",
@@ -29,7 +29,7 @@ export const runSmokeTest = () => {
29
29
  });
30
30
  deepStrictEqual(parseDomain("www.example.cloudfront.net"), {
31
31
  hostname: "www.example.cloudfront.net",
32
- type: "LISTED",
32
+ type: ParseResultType.Listed,
33
33
  labels: ["www", "example", "cloudfront", "net"],
34
34
  subDomains: ["www"],
35
35
  domain: "example",
@@ -40,11 +40,9 @@ export const runSmokeTest = () => {
40
40
  topLevelDomains: ["net"],
41
41
  },
42
42
  });
43
- // TODO: Use fromUrl once we dropped Node v8 support
44
- // deepStrictEqual(parseDomain(fromUrl("www.食狮.公司.cn")), {
45
- deepStrictEqual(parseDomain("www.xn--85x722f.xn--55qx5d.cn"), {
43
+ deepStrictEqual(parseDomain(fromUrl("www.食狮.公司.cn")), {
46
44
  hostname: "www.xn--85x722f.xn--55qx5d.cn",
47
- type: "LISTED",
45
+ type: ParseResultType.Listed,
48
46
  labels: ["www", "xn--85x722f", "xn--55qx5d", "cn"],
49
47
  subDomains: ["www"],
50
48
  domain: "xn--85x722f",
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smoke-test.js","sourceRoot":"","sources":["../src/smoke-test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAElE,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,EAAE;IAC/B,eAAe,CAAC,WAAW,CAAC,iBAAiB,CAAC,EAAE;QAC9C,QAAQ,EAAE,iBAAiB;QAC3B,IAAI,EAAE,eAAe,CAAC,MAAM;QAC5B,MAAM,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC;QACjC,UAAU,EAAE,CAAC,KAAK,CAAC;QACnB,MAAM,EAAE,SAAS;QACjB,eAAe,EAAE,CAAC,KAAK,CAAC;QACxB,KAAK,EAAE;YACL,UAAU,EAAE,CAAC,KAAK,CAAC;YACnB,MAAM,EAAE,SAAS;YACjB,eAAe,EAAE,CAAC,KAAK,CAAC;SACzB;KACF,CAAC,CAAC;IACH,eAAe,CAAC,WAAW,CAAC,mBAAmB,CAAC,EAAE;QAChD,QAAQ,EAAE,mBAAmB;QAC7B,IAAI,EAAE,eAAe,CAAC,MAAM;QAC5B,MAAM,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC;QACtC,UAAU,EAAE,CAAC,KAAK,CAAC;QACnB,MAAM,EAAE,SAAS;QACjB,eAAe,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;QAC7B,KAAK,EAAE;YACL,UAAU,EAAE,CAAC,KAAK,CAAC;YACnB,MAAM,EAAE,SAAS;YACjB,eAAe,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;SAC9B;KACF,CAAC,CAAC;IACH,eAAe,CAAC,WAAW,CAAC,4BAA4B,CAAC,EAAE;QACzD,QAAQ,EAAE,4BAA4B;QACtC,IAAI,EAAE,eAAe,CAAC,MAAM;QAC5B,MAAM,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,CAAC;QAC/C,UAAU,EAAE,CAAC,KAAK,CAAC;QACnB,MAAM,EAAE,SAAS;QACjB,eAAe,EAAE,CAAC,YAAY,EAAE,KAAK,CAAC;QACtC,KAAK,EAAE;YACL,UAAU,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC;YAC9B,MAAM,EAAE,YAAY;YACpB,eAAe,EAAE,CAAC,KAAK,CAAC;SACzB;KACF,CAAC,CAAC;IACH,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,EAAE;QACpD,QAAQ,EAAE,+BAA+B;QACzC,IAAI,EAAE,eAAe,CAAC,MAAM;QAC5B,MAAM,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,IAAI,CAAC;QAClD,UAAU,EAAE,CAAC,KAAK,CAAC;QACnB,MAAM,EAAE,aAAa;QACrB,eAAe,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC;QACrC,KAAK,EAAE;YACL,UAAU,EAAE,CAAC,KAAK,CAAC;YACnB,MAAM,EAAE,aAAa;YACrB,eAAe,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC;SACtC;KACF,CAAC,CAAC;AACL,CAAC,CAAC"}
File without changes
File without changes
@@ -0,0 +1 @@
1
+ {"version":3,"file":"characters.js","sourceRoot":"","sources":["../../src/trie/characters.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,MAAM,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,eAAe;AACtC,MAAM,CAAC,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,aAAa;AACtC,MAAM,CAAC,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,iBAAiB;AAC1C,MAAM,CAAC,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,kCAAkC;AAC5D,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,iCAAiC;AAC9D,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,iCAAiC"}
@@ -1 +1 @@
1
- export declare const createTrieFromList: (list: Array<string>) => import("./nodes").TrieRootNode;
1
+ export declare const createTrieFromList: (list: Array<string>) => import("./nodes.js").TrieRootNode;
@@ -1,4 +1,4 @@
1
- import { createRootNode, createOrGetChild } from "./nodes";
1
+ import { createRootNode, createOrGetChild } from "./nodes.js";
2
2
  export const createTrieFromList = (list) => {
3
3
  const root = createRootNode();
4
4
  for (const rule of list) {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-trie.js","sourceRoot":"","sources":["../../src/trie/create-trie.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAY,MAAM,YAAY,CAAC;AAExE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,IAAmB,EAAE,EAAE;IACxD,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC;IAE9B,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;QACvB,IAAI,IAAI,GAAa,IAAI,CAAC;QAE1B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7C,IAAI,GAAG,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SACtC;KACF;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC"}
@@ -1,3 +1,3 @@
1
- import { TrieNode } from "./nodes";
2
- import { Label } from "../parse-domain";
1
+ import { TrieNode } from "./nodes.js";
2
+ import { Label } from "../parse-domain.js";
3
3
  export declare const lookUpTldsInTrie: (labels: Array<Label>, trie: TrieNode) => string[];
@@ -1,4 +1,4 @@
1
- import * as characters from "./characters";
1
+ import * as characters from "./characters.js";
2
2
  export const lookUpTldsInTrie = (labels, trie) => {
3
3
  const labelsToCheck = labels.slice();
4
4
  const tlds = [];
@@ -0,0 +1 @@
1
+ {"version":3,"file":"look-up.js","sourceRoot":"","sources":["../../src/trie/look-up.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAI9C,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAoB,EAAE,IAAc,EAAE,EAAE;IACvE,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;IACrC,MAAM,IAAI,GAAiB,EAAE,CAAC;IAC9B,IAAI,IAAI,GAAG,IAAI,CAAC;IAEhB,OAAO,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;QACjC,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,EAAG,CAAC;QACnC,MAAM,cAAc,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAE3C,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;YAC1C,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,GAAG,cAAc,CAAC,EAAE;gBAC5D,MAAM;aACP;YACD,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAa,CAAC;SAC3D;aAAM;YACL,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,KAAK,EAAE;gBAC/C,MAAM;aACP;YACD,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAa,CAAC;SACtD;QAED,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;KACrB;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC"}
File without changes
File without changes
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodes.js","sourceRoot":"","sources":["../../src/trie/nodes.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AAC7C,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AAe/C,MAAM,CAAC,MAAM,cAAc,GAAG,GAAiB,EAAE;IAC/C,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,QAAQ,EAAE,IAAI,GAAG,EAAE;KACpB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAgB,EAAE,KAAa,EAAE,EAAE;IAClE,IAAI,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAEvC,IAAI,KAAK,KAAK,SAAS,EAAE;QACvB,KAAK,GAAG;YACN,IAAI,EAAE,eAAe;YACrB,KAAK;YACL,QAAQ,EAAE,IAAI,GAAG,EAAE;YACnB,MAAM;SACP,CAAC;QACF,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;KACnC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC"}
@@ -1 +1 @@
1
- export declare const parseTrie: (serializedTrie: string) => import("./nodes").TrieRootNode;
1
+ export declare const parseTrie: (serializedTrie: string) => import("./nodes.js").TrieRootNode;
@@ -1,5 +1,5 @@
1
- import * as characters from "./characters";
2
- import { createRootNode, createOrGetChild, NODE_TYPE_ROOT, } from "./nodes";
1
+ import * as characters from "./characters.js";
2
+ import { createRootNode, createOrGetChild, NODE_TYPE_ROOT, } from "./nodes.js";
3
3
  export const parseTrie = (serializedTrie) => {
4
4
  const rootNode = createRootNode();
5
5
  let domain = "";
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-trie.js","sourceRoot":"","sources":["../../src/trie/parse-trie.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EACL,cAAc,EACd,gBAAgB,EAEhB,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,cAAsB,EAAE,EAAE;IAClD,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAClC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,UAAU,GAAa,QAAQ,CAAC;IACpC,gEAAgE;IAChE,6EAA6E;IAC7E,IAAI,IAAI,GAAG,QAAoB,CAAC;IAEhC,MAAM,SAAS,GAAG,GAAG,EAAE;QACrB,IAAI,GAAG,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC5C,MAAM,GAAG,EAAE,CAAC;IACd,CAAC,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC9C,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAEtC,QAAQ,IAAI,EAAE;YACZ,KAAK,UAAU,CAAC,IAAI,CAAC,CAAC;gBACpB,SAAS,EAAE,CAAC;gBACZ,SAAS;aACV;YACD,KAAK,UAAU,CAAC,IAAI,CAAC,CAAC;gBACpB,SAAS,EAAE,CAAC;gBACZ,UAAU,GAAG,IAAI,CAAC;gBAClB,SAAS;aACV;YACD,KAAK,UAAU,CAAC,KAAK,CAAC,CAAC;gBACrB,SAAS,EAAE,CAAC;gBACZ,UAAU,GAAG,QAAQ,CAAC;gBACtB,SAAS;aACV;YACD,KAAK,UAAU,CAAC,EAAE,CAAC,CAAC;gBAClB,IAAI,UAAU,CAAC,IAAI,KAAK,cAAc,EAAE;oBACtC,MAAM,IAAI,KAAK,CACb,wCAAwC,CAAC,qDAAqD,CAC/F,CAAC;iBACH;gBACD,SAAS,EAAE,CAAC;gBACZ,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC;gBAC/B,SAAS;aACV;SACF;QACD,MAAM,IAAI,IAAI,CAAC;KAChB;IAED,IAAI,MAAM,KAAK,EAAE,EAAE;QACjB,SAAS,EAAE,CAAC;KACb;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC"}
@@ -1,2 +1,2 @@
1
- import { TrieRootNode } from "./nodes";
1
+ import { TrieRootNode } from "./nodes.js";
2
2
  export declare const serializeTrie: (root: TrieRootNode) => string;
@@ -1,4 +1,4 @@
1
- import { DOWN, UP, SAME } from "./characters";
1
+ import { DOWN, UP, SAME } from "./characters.js";
2
2
  export const serializeTrie = (root) => {
3
3
  let serialized = "";
4
4
  const queue = Array.from(root.children.values());
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialize-trie.js","sourceRoot":"","sources":["../../src/trie/serialize-trie.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAkB,EAAU,EAAE;IAkB1D,IAAI,UAAU,GAAG,EAAE,CAAC;IACpB,MAAM,KAAK,GAAqB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACnE,IAAI,OAA8B,CAAC;IAEnC,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,SAAS,EAAE;QAC9C,IAAI,OAAO,KAAK,EAAE,EAAE;YAClB,UAAU,IAAI,EAAE,CAAC;YACjB,SAAS;SACV;QACD,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC;QAC5B,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE;YAC/B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE;gBACvC,UAAU,IAAI,IAAI,CAAC;aACpB;YACD,SAAS;SACV;QACD,UAAU,IAAI,IAAI,CAAC;QAEnB,MAAM,QAAQ,GAAqB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAEzE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SACnB;QACD,KAAK,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC;KAC5B;IAED,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC"}
File without changes
File without changes
@@ -1 +1 @@
1
- {"version":3,"file":"type-util.js","sourceRoot":"","sources":["../../src/type-util.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"type-util.js","sourceRoot":"","sources":["../src/type-util.ts"],"names":[],"mappings":""}
File without changes
@@ -7,9 +7,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
- import { fetchPsl } from "./psl/fetch-psl";
11
- import { buildTries } from "./psl/build-tries";
12
- import { serializeTrie } from "./trie/serialize-trie";
10
+ import { fetchPsl } from "./psl/fetch-psl.js";
11
+ import { buildTries } from "./psl/build-tries.js";
12
+ import { serializeTrie } from "./trie/serialize-trie.js";
13
13
  export const fetchBuildSerializeTries = () => __awaiter(void 0, void 0, void 0, function* () {
14
14
  const psl = yield fetchPsl();
15
15
  const { icannTrie, privateTrie } = buildTries(psl);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-tries.js","sourceRoot":"","sources":["../src/update-tries.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAS,EAAE;IACjD,MAAM,GAAG,GAAG,MAAM,QAAQ,EAAE,CAAC;IAC7B,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IACnD,MAAM,mBAAmB,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IACrD,MAAM,qBAAqB,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAEzD,OAAO;QACL,mBAAmB;QACnB,qBAAqB;KACtB,CAAC;AACJ,CAAC,CAAA,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "parse-domain",
3
- "version": "4.1.0",
3
+ "version": "7.0.0",
4
4
  "description": "Splits a hostname into subdomains, domain and (effective) top-level domains",
5
5
  "keywords": [
6
6
  "domain",
@@ -11,29 +11,23 @@
11
11
  "sanitize",
12
12
  "top-level"
13
13
  ],
14
- "main": "./build-cjs/src/main.js",
15
- "module": "./build-esm/src/main.js",
16
- "types": "./build-esm/src/main.d.ts",
17
- "exports": {
18
- "require": "./build-cjs/src/main.js",
19
- "node": "./build-cjs/src/main.mjs",
20
- "import": "./build-esm/src/main.js"
21
- },
14
+ "type": "module",
15
+ "main": "./build/main.js",
16
+ "types": "./build/main.d.ts",
22
17
  "scripts": {
23
- "test": "jest",
24
- "posttest": "run-s build posttest:*",
25
- "posttest:lint": "eslint --cache --ext js,ts *.js src bin",
18
+ "test": "run-p test:*",
19
+ "test:suite": "node --no-warnings --experimental-vm-modules ./node_modules/jest/bin/jest.js",
20
+ "test:lint": "eslint --max-warnings 0 --cache --ext js,ts --ignore-path .gitignore .",
26
21
  "build": "run-s build:*",
27
- "build:cleanup": "rimraf build-cjs build-esm",
28
- "build:tsc": "run-p build:tsc:cjs build:tsc:esm",
29
- "build:tsc:cjs": "tsc -p ./tsconfig.build-cjs.json",
30
- "build:tsc:esm": "tsc -p ./tsconfig.build-esm.json",
31
- "build:cpy": "cpy ./src/main.mjs ./build-cjs/src",
22
+ "build:cleanup": "rimraf build",
23
+ "build:tsc": "tsc -p ./tsconfig.build.json",
32
24
  "build:update": "./bin/update.js",
33
- "prepare": "husky install",
34
- "update:psl-fixture": "ts-node --transpile-only ./src/scripts/update-psl-fixture.ts",
35
- "update:tries": "ts-node --transpile-only ./src/scripts/update-tries.ts -- ../../serialized-tries",
36
- "update:dependencies": "updtr"
25
+ "prepare": "run-s prepare:*",
26
+ "prepare:husky": "husky install",
27
+ "prepare:build": "npm run build",
28
+ "update:psl-fixture": "npm run node -- ./src/scripts/update-psl-fixture.ts",
29
+ "update:dependencies": "updtr",
30
+ "node": "node --no-warnings --loader ts-node/esm/transpile-only"
37
31
  },
38
32
  "bin": {
39
33
  "parse-domain-update": "./bin/update.js"
@@ -46,8 +40,8 @@
46
40
  "license": "MIT",
47
41
  "files": [
48
42
  "bin",
49
- "build-cjs",
50
- "build-esm"
43
+ "build",
44
+ "serialized-tries"
51
45
  ],
52
46
  "sideEffects": false,
53
47
  "lint-staged": {
@@ -62,33 +56,30 @@
62
56
  "*.{json,css,md,yml,yaml}": "prettier --write"
63
57
  },
64
58
  "dependencies": {
65
- "is-ip": "^3.1.0",
66
- "node-fetch": "^2.6.1",
67
- "punycode": "^2.1.1"
59
+ "is-ip": "^4.0.0",
60
+ "node-fetch": "^3.2.0"
68
61
  },
69
62
  "devDependencies": {
70
- "@types/jest": "^27.0.1",
71
- "@types/node": "^16.7.10",
72
- "@types/node-fetch": "^2.5.12",
63
+ "@types/jest": "^27.4.0",
64
+ "@types/node": "^17.0.10",
73
65
  "@types/punycode": "^2.1.0",
74
- "@typescript-eslint/eslint-plugin": "^4.30.0",
75
- "@typescript-eslint/parser": "^4.30.0",
76
- "cpy-cli": "^3.1.1",
77
- "eslint": "^7.32.0",
78
- "eslint-config-peerigon": "^31.0.2",
66
+ "@typescript-eslint/eslint-plugin": "^5.10.0",
67
+ "@typescript-eslint/parser": "^5.10.0",
68
+ "eslint": "^8.7.0",
69
+ "eslint-config-peerigon": "^33.2.4",
79
70
  "eslint-plugin-no-null": "^1.0.2",
80
71
  "eslint-plugin-node": "^11.1.0",
81
- "husky": "^7.0.2",
82
- "jest": "^27.1.0",
83
- "lint-staged": "^11.1.2",
84
- "nock": "^13.1.3",
72
+ "husky": "^7.0.4",
73
+ "jest": "^27.4.7",
74
+ "lint-staged": "^12.3.1",
75
+ "nock": "^13.2.2",
85
76
  "npm-run-all": "^4.1.5",
86
- "pin-github-action": "^1.4.0",
87
- "prettier": "^2.3.2",
77
+ "pin-github-action": "^1.5.0",
78
+ "prettier": "^2.5.1",
88
79
  "rimraf": "^3.0.2",
89
- "ts-jest": "^27.0.5",
90
- "ts-node": "^10.2.1",
91
- "typescript": "^4.4.2",
80
+ "ts-jest": "^27.1.3",
81
+ "ts-node": "^10.4.0",
82
+ "typescript": "^4.5.5",
92
83
  "updtr": "^4.0.0"
93
84
  }
94
85
  }
@@ -0,0 +1,3 @@
1
+ declare const trie: string;
2
+
3
+ export default trie;