parse-domain 3.0.4 → 6.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.
- package/LICENSE +17 -20
- package/README.md +181 -112
- package/bin/update.js +12 -15
- package/{build-cjs/src → build}/config.d.ts +0 -0
- package/{build-esm/src → build}/config.js +0 -0
- package/build/config.js.map +1 -0
- package/{build-cjs/src → build}/from-url.d.ts +0 -0
- package/{build-esm/src → build}/from-url.js +1 -1
- package/build/from-url.js.map +1 -0
- package/build/main.d.ts +3 -0
- package/build/main.js +6 -0
- package/build/main.js.map +1 -0
- package/{build-cjs/src → build}/parse-domain.d.ts +9 -3
- package/{build-esm/src → build}/parse-domain.js +6 -6
- package/build/parse-domain.js.map +1 -0
- package/build/psl/build-tries.d.ts +4 -0
- package/{build-esm/src → build}/psl/build-tries.js +5 -20
- package/build/psl/build-tries.js.map +1 -0
- package/{build-cjs/src → build}/psl/fetch-psl.d.ts +0 -0
- package/{build-esm/src → build}/psl/fetch-psl.js +1 -1
- package/build/psl/fetch-psl.js.map +1 -0
- package/build/punycode.d.ts +1 -0
- package/build/punycode.js +4 -0
- package/build/punycode.js.map +1 -0
- package/{build-cjs/src → build}/sanitize.d.ts +28 -6
- package/build/sanitize.js +194 -0
- package/build/sanitize.js.map +1 -0
- package/{build-cjs/src → build}/scripts/update-psl-fixture.d.ts +0 -0
- package/build/scripts/update-psl-fixture.js +20 -0
- package/build/scripts/update-psl-fixture.js.map +1 -0
- package/{build-cjs/src → build}/scripts/update-tries.d.ts +0 -0
- package/{build-cjs/src → build}/scripts/update-tries.js +15 -23
- package/build/scripts/update-tries.js.map +1 -0
- package/build/serialized-tries.d.ts +3 -0
- package/build/serialized-tries.js +4 -0
- package/build/serialized-tries.js.map +1 -0
- package/{build-cjs/src → build}/smoke-test.d.ts +0 -0
- package/{build-esm/src → build}/smoke-test.js +6 -8
- package/build/smoke-test.js.map +1 -0
- package/{build-cjs/src → build}/trie/characters.d.ts +0 -0
- package/{build-esm/src → build}/trie/characters.js +0 -0
- package/build/trie/characters.js.map +1 -0
- package/build/trie/create-trie.d.ts +1 -0
- package/{build-esm/src → build}/trie/create-trie.js +1 -1
- package/build/trie/create-trie.js.map +1 -0
- package/build/trie/look-up.d.ts +3 -0
- package/{build-esm/src → build}/trie/look-up.js +1 -1
- package/build/trie/look-up.js.map +1 -0
- package/{build-cjs/src → build}/trie/nodes.d.ts +0 -0
- package/{build-esm/src → build}/trie/nodes.js +0 -0
- package/build/trie/nodes.js.map +1 -0
- package/{build-cjs/src → build}/trie/parse-trie.d.ts +1 -1
- package/{build-esm/src → build}/trie/parse-trie.js +2 -2
- package/build/trie/parse-trie.js.map +1 -0
- package/{build-cjs/src → build}/trie/serialize-trie.d.ts +1 -1
- package/{build-esm/src → build}/trie/serialize-trie.js +1 -1
- package/build/trie/serialize-trie.js.map +1 -0
- package/build/type-util.d.ts +3 -0
- package/build/type-util.js +2 -0
- package/{build-cjs/src → build}/type-util.js.map +1 -1
- package/{build-cjs/src → build}/update-tries.d.ts +0 -0
- package/{build-esm/src → build}/update-tries.js +3 -3
- package/build/update-tries.js.map +1 -0
- package/package.json +83 -85
- package/serialized-tries/icann.d.ts +3 -0
- package/serialized-tries/icann.js +1 -0
- package/serialized-tries/info.json +1 -0
- package/serialized-tries/private.d.ts +3 -0
- package/serialized-tries/private.js +1 -0
- package/build-cjs/serialized-tries/icann.json +0 -1
- package/build-cjs/serialized-tries/info.json +0 -1
- package/build-cjs/serialized-tries/private.json +0 -1
- package/build-cjs/src/config.js +0 -9
- package/build-cjs/src/config.js.map +0 -1
- package/build-cjs/src/from-url.js +0 -30
- package/build-cjs/src/from-url.js.map +0 -1
- package/build-cjs/src/main.d.ts +0 -3
- package/build-cjs/src/main.js +0 -11
- package/build-cjs/src/main.js.map +0 -1
- package/build-cjs/src/main.mjs +0 -11
- package/build-cjs/src/parse-domain.js +0 -95
- package/build-cjs/src/parse-domain.js.map +0 -1
- package/build-cjs/src/psl/build-tries.d.ts +0 -4
- package/build-cjs/src/psl/build-tries.js +0 -57
- package/build-cjs/src/psl/build-tries.js.map +0 -1
- package/build-cjs/src/psl/fetch-psl.js +0 -25
- package/build-cjs/src/psl/fetch-psl.js.map +0 -1
- package/build-cjs/src/sanitize.js +0 -131
- package/build-cjs/src/sanitize.js.map +0 -1
- package/build-cjs/src/scripts/update-psl-fixture.js +0 -28
- package/build-cjs/src/scripts/update-psl-fixture.js.map +0 -1
- package/build-cjs/src/scripts/update-tries.js.map +0 -1
- package/build-cjs/src/serialized-tries.d.ts +0 -3
- package/build-cjs/src/serialized-tries.js +0 -10
- package/build-cjs/src/serialized-tries.js.map +0 -1
- package/build-cjs/src/smoke-test.js +0 -61
- package/build-cjs/src/smoke-test.js.map +0 -1
- package/build-cjs/src/trie/characters.js +0 -10
- package/build-cjs/src/trie/characters.js.map +0 -1
- package/build-cjs/src/trie/create-trie.d.ts +0 -1
- package/build-cjs/src/trie/create-trie.js +0 -14
- package/build-cjs/src/trie/create-trie.js.map +0 -1
- package/build-cjs/src/trie/look-up.d.ts +0 -2
- package/build-cjs/src/trie/look-up.js +0 -34
- package/build-cjs/src/trie/look-up.js.map +0 -1
- package/build-cjs/src/trie/nodes.js +0 -24
- package/build-cjs/src/trie/nodes.js.map +0 -1
- package/build-cjs/src/trie/parse-trie.js +0 -56
- package/build-cjs/src/trie/parse-trie.js.map +0 -1
- package/build-cjs/src/trie/serialize-trie.js +0 -29
- package/build-cjs/src/trie/serialize-trie.js.map +0 -1
- package/build-cjs/src/type-util.d.ts +0 -3
- package/build-cjs/src/type-util.js +0 -3
- package/build-cjs/src/update-tries.js +0 -25
- package/build-cjs/src/update-tries.js.map +0 -1
- package/build-esm/serialized-tries/icann.json +0 -1
- package/build-esm/serialized-tries/info.json +0 -1
- package/build-esm/serialized-tries/private.json +0 -1
- package/build-esm/src/config.d.ts +0 -6
- package/build-esm/src/config.js.map +0 -1
- package/build-esm/src/from-url.d.ts +0 -2
- package/build-esm/src/from-url.js.map +0 -1
- package/build-esm/src/main.d.ts +0 -3
- package/build-esm/src/main.js +0 -4
- package/build-esm/src/main.js.map +0 -1
- package/build-esm/src/parse-domain.d.ts +0 -79
- package/build-esm/src/parse-domain.js.map +0 -1
- package/build-esm/src/psl/build-tries.d.ts +0 -4
- package/build-esm/src/psl/build-tries.js.map +0 -1
- package/build-esm/src/psl/fetch-psl.d.ts +0 -1
- package/build-esm/src/psl/fetch-psl.js.map +0 -1
- package/build-esm/src/sanitize.d.ts +0 -36
- package/build-esm/src/sanitize.js +0 -126
- package/build-esm/src/sanitize.js.map +0 -1
- package/build-esm/src/serialized-tries.d.ts +0 -3
- package/build-esm/src/serialized-tries.js +0 -4
- package/build-esm/src/serialized-tries.js.map +0 -1
- package/build-esm/src/smoke-test.d.ts +0 -1
- package/build-esm/src/smoke-test.js.map +0 -1
- package/build-esm/src/trie/characters.d.ts +0 -6
- package/build-esm/src/trie/characters.js.map +0 -1
- package/build-esm/src/trie/create-trie.d.ts +0 -1
- package/build-esm/src/trie/create-trie.js.map +0 -1
- package/build-esm/src/trie/look-up.d.ts +0 -2
- package/build-esm/src/trie/look-up.js.map +0 -1
- package/build-esm/src/trie/nodes.d.ts +0 -15
- package/build-esm/src/trie/nodes.js.map +0 -1
- package/build-esm/src/trie/parse-trie.d.ts +0 -1
- package/build-esm/src/trie/parse-trie.js.map +0 -1
- package/build-esm/src/trie/serialize-trie.d.ts +0 -2
- package/build-esm/src/trie/serialize-trie.js.map +0 -1
- package/build-esm/src/type-util.d.ts +0 -3
- package/build-esm/src/type-util.js +0 -1
- package/build-esm/src/type-util.js.map +0 -1
- package/build-esm/src/update-tries.d.ts +0 -4
- package/build-esm/src/update-tries.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ValidationError, SanitizationResultValidIp } from "./sanitize";
|
|
2
|
-
import { NO_HOSTNAME } from "./from-url";
|
|
1
|
+
import { ValidationError, SanitizationResultValidIp, Validation } from "./sanitize.js";
|
|
2
|
+
import { NO_HOSTNAME } from "./from-url.js";
|
|
3
3
|
export declare const RESERVED_TOP_LEVEL_DOMAINS: string[];
|
|
4
4
|
export declare type Label = string;
|
|
5
5
|
export declare enum ParseResultType {
|
|
@@ -72,8 +72,14 @@ export declare type ParseResultListed = ParseResultCommon<ParseResultType.Listed
|
|
|
72
72
|
icann: ParseResultListedDomains;
|
|
73
73
|
};
|
|
74
74
|
export declare type ParseResult = ParseResultInvalid | ParseResultIp | ParseResultReserved | ParseResultNotListed | ParseResultListed;
|
|
75
|
+
export declare type ParseDomainOptions = {
|
|
76
|
+
/**
|
|
77
|
+
* If no validation is specified, Validation.Strict will be used.
|
|
78
|
+
**/
|
|
79
|
+
validation?: Validation;
|
|
80
|
+
};
|
|
75
81
|
/**
|
|
76
82
|
* Splits the given hostname in topLevelDomains, a domain and subDomains.
|
|
77
83
|
*/
|
|
78
|
-
export declare const parseDomain: (hostname: string | typeof NO_HOSTNAME) => ParseResult;
|
|
84
|
+
export declare const parseDomain: (hostname: string | typeof NO_HOSTNAME, options?: ParseDomainOptions | undefined) => ParseResult;
|
|
79
85
|
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { icannTrie, privateTrie } from "./serialized-tries";
|
|
2
|
-
import { lookUpTldsInTrie } from "./trie/look-up";
|
|
3
|
-
import { sanitize, SanitizationResultType, } from "./sanitize";
|
|
4
|
-
import { parseTrie } from "./trie/parse-trie";
|
|
1
|
+
import { icannTrie, privateTrie } from "./serialized-tries.js";
|
|
2
|
+
import { lookUpTldsInTrie } from "./trie/look-up.js";
|
|
3
|
+
import { sanitize, SanitizationResultType, } from "./sanitize.js";
|
|
4
|
+
import { parseTrie } from "./trie/parse-trie.js";
|
|
5
5
|
export const RESERVED_TOP_LEVEL_DOMAINS = [
|
|
6
6
|
"localhost",
|
|
7
7
|
"local",
|
|
@@ -49,8 +49,8 @@ let parsedPrivateTrie;
|
|
|
49
49
|
/**
|
|
50
50
|
* Splits the given hostname in topLevelDomains, a domain and subDomains.
|
|
51
51
|
*/
|
|
52
|
-
export const parseDomain = (hostname) => {
|
|
53
|
-
const sanitizationResult = sanitize(hostname);
|
|
52
|
+
export const parseDomain = (hostname, options) => {
|
|
53
|
+
const sanitizationResult = sanitize(hostname, options);
|
|
54
54
|
if (sanitizationResult.type === SanitizationResultType.Error) {
|
|
55
55
|
return {
|
|
56
56
|
type: ParseResultType.Invalid,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-domain.js","sourceRoot":"","sources":["../src/parse-domain.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { createTrieFromList } from "../trie/create-trie";
|
|
1
|
+
import { PUBLIC_SUFFIX_MARKER_ICANN_START, PUBLIC_SUFFIX_MARKER_ICANN_END, PUBLIC_SUFFIX_MARKER_PRIVATE_START, PUBLIC_SUFFIX_MARKER_PRIVATE_END, } from "../config.js";
|
|
2
|
+
import { toASCII } from "../punycode.js";
|
|
3
|
+
import { createTrieFromList } from "../trie/create-trie.js";
|
|
4
4
|
const matchNewLine = /\r?\n/u;
|
|
5
5
|
const matchComment = /^\s*\/\//u;
|
|
6
6
|
const matchWhitespace = /^\s*$/u;
|
|
@@ -16,31 +16,16 @@ const extractByMarkers = (listContent, startMarker, endMarker) => {
|
|
|
16
16
|
return listContent.slice(start, end);
|
|
17
17
|
};
|
|
18
18
|
const containsRule = (line) => matchComment.test(line) === false && matchWhitespace.test(line) === false;
|
|
19
|
-
const normalizeRule = (rule) =>
|
|
20
|
-
/*
|
|
21
|
-
Users of parse-domain should only pass parsed hostnames (e.g. via new URL("...").hostname)
|
|
22
|
-
to parseDomain(). This frees us from the burden of URL parsing.
|
|
23
|
-
See also https://github.com/peerigon/parse-domain/issues/14
|
|
24
|
-
|
|
25
|
-
The problem is that new URL("...").hostname will also translate all non-ASCII characters
|
|
26
|
-
into punycode (e.g. 大分.jp becomes xn--kbrq7o.jp). This means for us that our serialized
|
|
27
|
-
trie needs to use punyencoded hostnames.
|
|
28
|
-
|
|
29
|
-
The downside of this is that punycode hostnames are bigger in terms of file size.
|
|
30
|
-
However, that's still better than including a punycode library into the runtime code of parse-domain.
|
|
31
|
-
Gzip is also very effective in removing duplicate characters.
|
|
32
|
-
*/
|
|
33
|
-
toASCII(rule).toLowerCase();
|
|
34
19
|
const parsePsl = (listContent) => {
|
|
35
20
|
return {
|
|
36
21
|
icann: extractByMarkers(listContent, PUBLIC_SUFFIX_MARKER_ICANN_START, PUBLIC_SUFFIX_MARKER_ICANN_END)
|
|
37
22
|
.split(matchNewLine)
|
|
38
23
|
.filter(containsRule)
|
|
39
|
-
.map(
|
|
24
|
+
.map(toASCII),
|
|
40
25
|
private: extractByMarkers(listContent, PUBLIC_SUFFIX_MARKER_PRIVATE_START, PUBLIC_SUFFIX_MARKER_PRIVATE_END)
|
|
41
26
|
.split(matchNewLine)
|
|
42
27
|
.filter(containsRule)
|
|
43
|
-
.map(
|
|
28
|
+
.map(toASCII),
|
|
44
29
|
};
|
|
45
30
|
};
|
|
46
31
|
export const buildTries = (psl) => {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-tries.js","sourceRoot":"","sources":["../../src/psl/build-tries.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gCAAgC,EAChC,8BAA8B,EAC9B,kCAAkC,EAClC,gCAAgC,GACjC,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,MAAM,YAAY,GAAG,QAAQ,CAAC;AAC9B,MAAM,YAAY,GAAG,WAAW,CAAC;AACjC,MAAM,eAAe,GAAG,QAAQ,CAAC;AAEjC,MAAM,gBAAgB,GAAG,CACvB,WAAmB,EACnB,WAAmB,EACnB,SAAiB,EACjB,EAAE;IACF,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAE3C,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;QAChB,MAAM,IAAI,KAAK,CACb,wBAAwB,WAAW,wBAAwB,CAC5D,CAAC;KACH;IACD,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE;QACd,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,wBAAwB,CAAC,CAAC;KAC1E;IAED,OAAO,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,EAAE,CACpC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC;AAE5E,MAAM,QAAQ,GAAG,CAAC,WAAmB,EAAE,EAAE;IACvC,OAAO;QACL,KAAK,EAAE,gBAAgB,CACrB,WAAW,EACX,gCAAgC,EAChC,8BAA8B,CAC/B;aACE,KAAK,CAAC,YAAY,CAAC;aACnB,MAAM,CAAC,YAAY,CAAC;aACpB,GAAG,CAAC,OAAO,CAAC;QACf,OAAO,EAAE,gBAAgB,CACvB,WAAW,EACX,kCAAkC,EAClC,gCAAgC,CACjC;aACE,KAAK,CAAC,YAAY,CAAC;aACnB,MAAM,CAAC,YAAY,CAAC;aACpB,GAAG,CAAC,OAAO,CAAC;KAChB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,EAAE;IACxC,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,SAAS,GAAG,kBAAkB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,WAAW,GAAG,kBAAkB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAE1D,OAAO;QACL,SAAS;QACT,WAAW;KACZ,CAAC;AACJ,CAAC,CAAC"}
|
|
File without changes
|
|
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
};
|
|
10
10
|
import { ok } from "assert";
|
|
11
11
|
import fetch from "node-fetch";
|
|
12
|
-
import { FETCH_PSL_EXPECTED_MIN_LENGTH, PUBLIC_SUFFIX_URL } from "../config";
|
|
12
|
+
import { FETCH_PSL_EXPECTED_MIN_LENGTH, PUBLIC_SUFFIX_URL } from "../config.js";
|
|
13
13
|
export const fetchPsl = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
14
14
|
const response = yield fetch(PUBLIC_SUFFIX_URL);
|
|
15
15
|
const pslContent = yield response.text();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-psl.js","sourceRoot":"","sources":["../../src/psl/fetch-psl.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC5B,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,6BAA6B,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEhF,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAS,EAAE;IACjC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAEzC,eAAe;IACf,EAAE,CACA,UAAU,CAAC,MAAM,IAAI,6BAA6B,EAClD,6CAA6C,CAC9C,CAAC;IAEF,OAAO,UAAU,CAAC;AACpB,CAAC,CAAA,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const toASCII: (hostname: string) => string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"punycode.js","sourceRoot":"","sources":["../src/punycode.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,QAAgB,EAAE,EAAE;IAC1C,OAAO,IAAI,GAAG,CAAC,UAAU,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC;AAChD,CAAC,CAAC"}
|
|
@@ -1,12 +1,32 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { Label } from "./parse-domain";
|
|
3
|
-
import { NO_HOSTNAME } from "./from-url";
|
|
1
|
+
import { ipVersion } from "is-ip";
|
|
2
|
+
import { Label } from "./parse-domain.js";
|
|
3
|
+
import { NO_HOSTNAME } from "./from-url.js";
|
|
4
|
+
export declare enum Validation {
|
|
5
|
+
/**
|
|
6
|
+
* Allows any octets as labels
|
|
7
|
+
* but still restricts the length of labels and the overall domain.
|
|
8
|
+
*
|
|
9
|
+
* @see https://www.rfc-editor.org/rfc/rfc2181#section-11
|
|
10
|
+
**/
|
|
11
|
+
Lax = "LAX",
|
|
12
|
+
/**
|
|
13
|
+
* Only allows ASCII letters, digits and hyphens (aka LDH),
|
|
14
|
+
* forbids hyphens at the beginning or end of a label
|
|
15
|
+
* and requires top-level domain names not to be all-numeric.
|
|
16
|
+
*
|
|
17
|
+
* This is the default if no validation is configured.
|
|
18
|
+
*
|
|
19
|
+
* @see https://datatracker.ietf.org/doc/html/rfc3696#section-2
|
|
20
|
+
*/
|
|
21
|
+
Strict = "STRICT"
|
|
22
|
+
}
|
|
4
23
|
export declare enum ValidationErrorType {
|
|
5
24
|
NoHostname = "NO_HOSTNAME",
|
|
6
25
|
DomainMaxLength = "DOMAIN_MAX_LENGTH",
|
|
7
26
|
LabelMinLength = "LABEL_MIN_LENGTH",
|
|
8
27
|
LabelMaxLength = "LABEL_MAX_LENGTH",
|
|
9
|
-
LabelInvalidCharacter = "LABEL_INVALID_CHARACTER"
|
|
28
|
+
LabelInvalidCharacter = "LABEL_INVALID_CHARACTER",
|
|
29
|
+
LastLabelInvalid = "LAST_LABEL_INVALID"
|
|
10
30
|
}
|
|
11
31
|
export declare type ValidationError = {
|
|
12
32
|
type: ValidationErrorType;
|
|
@@ -21,7 +41,7 @@ export declare enum SanitizationResultType {
|
|
|
21
41
|
export declare type SanitizationResultValidIp = {
|
|
22
42
|
type: SanitizationResultType.ValidIp;
|
|
23
43
|
ip: string;
|
|
24
|
-
ipVersion: Exclude<ReturnType<typeof
|
|
44
|
+
ipVersion: Exclude<ReturnType<typeof ipVersion>, undefined>;
|
|
25
45
|
};
|
|
26
46
|
export declare type SanitizationResultValidDomain = {
|
|
27
47
|
type: SanitizationResultType.ValidDomain;
|
|
@@ -33,4 +53,6 @@ export declare type SanitizationResultError = {
|
|
|
33
53
|
errors: Array<ValidationError>;
|
|
34
54
|
};
|
|
35
55
|
export declare type SanitizationResult = SanitizationResultValidIp | SanitizationResultValidDomain | SanitizationResultError;
|
|
36
|
-
export declare const sanitize: (input: string | typeof NO_HOSTNAME
|
|
56
|
+
export declare const sanitize: (input: string | typeof NO_HOSTNAME, options?: {
|
|
57
|
+
validation?: Validation;
|
|
58
|
+
}) => SanitizationResult;
|
|
@@ -0,0 +1,194 @@
|
|
|
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
|
+
const inputTrimmed = input.trim();
|
|
101
|
+
if (inputTrimmed === "") {
|
|
102
|
+
return {
|
|
103
|
+
type: SanitizationResultType.ValidDomain,
|
|
104
|
+
domain: inputTrimmed,
|
|
105
|
+
labels: [],
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
// IPv6 addresses are surrounded by square brackets in URLs
|
|
109
|
+
// See https://tools.ietf.org/html/rfc3986#section-3.2.2
|
|
110
|
+
const inputTrimmedAsIp = inputTrimmed.replace(/^\[|]$/g, "");
|
|
111
|
+
const ipVersionOfInput = ipVersion(inputTrimmedAsIp);
|
|
112
|
+
if (ipVersionOfInput !== undefined) {
|
|
113
|
+
return {
|
|
114
|
+
type: SanitizationResultType.ValidIp,
|
|
115
|
+
ip: inputTrimmedAsIp,
|
|
116
|
+
ipVersion: ipVersionOfInput,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
const lastChar = inputTrimmed.charAt(inputTrimmed.length - 1);
|
|
120
|
+
const canonicalInput = lastChar === LABEL_SEPARATOR ? inputTrimmed.slice(0, -1) : inputTrimmed;
|
|
121
|
+
const octets = new TextEncoder().encode(canonicalInput);
|
|
122
|
+
if (octets.length > DOMAIN_LENGTH_MAX) {
|
|
123
|
+
return {
|
|
124
|
+
type: SanitizationResultType.Error,
|
|
125
|
+
errors: [createDomainMaxLengthError(inputTrimmed, octets.length)],
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
const labels = canonicalInput.split(LABEL_SEPARATOR);
|
|
129
|
+
const { validation = Validation.Strict } = options;
|
|
130
|
+
const labelValidationErrors = validateLabels[validation](labels);
|
|
131
|
+
if (labelValidationErrors.length > 0) {
|
|
132
|
+
return {
|
|
133
|
+
type: SanitizationResultType.Error,
|
|
134
|
+
errors: labelValidationErrors,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
return {
|
|
138
|
+
type: SanitizationResultType.ValidDomain,
|
|
139
|
+
domain: inputTrimmed,
|
|
140
|
+
labels,
|
|
141
|
+
};
|
|
142
|
+
};
|
|
143
|
+
const validateLabels = {
|
|
144
|
+
[Validation.Lax]: (labels) => {
|
|
145
|
+
const labelValidationErrors = [];
|
|
146
|
+
let column = 1;
|
|
147
|
+
for (const label of labels) {
|
|
148
|
+
const octets = textEncoder.encode(label);
|
|
149
|
+
if (octets.length < LABEL_LENGTH_MIN) {
|
|
150
|
+
labelValidationErrors.push(createLabelMinLengthError(label, column));
|
|
151
|
+
}
|
|
152
|
+
else if (octets.length > LABEL_LENGTH_MAX) {
|
|
153
|
+
labelValidationErrors.push(createLabelMaxLengthError(label, column));
|
|
154
|
+
}
|
|
155
|
+
column += label.length + LABEL_SEPARATOR.length;
|
|
156
|
+
}
|
|
157
|
+
return labelValidationErrors;
|
|
158
|
+
},
|
|
159
|
+
[Validation.Strict]: (labels) => {
|
|
160
|
+
const labelValidationErrors = [];
|
|
161
|
+
let column = 1;
|
|
162
|
+
let lastLabel;
|
|
163
|
+
for (const label of labels) {
|
|
164
|
+
// According to https://tools.ietf.org/html/rfc6761 labels should
|
|
165
|
+
// only contain ASCII letters, digits and hyphens (LDH).
|
|
166
|
+
const invalidCharacter = /[^\da-z-]/i.exec(label);
|
|
167
|
+
if (invalidCharacter) {
|
|
168
|
+
labelValidationErrors.push(createLabelInvalidCharacterError(label, invalidCharacter[0], invalidCharacter.index + 1));
|
|
169
|
+
}
|
|
170
|
+
if (label.startsWith("-")) {
|
|
171
|
+
labelValidationErrors.push(createLabelInvalidCharacterError(label, "-", column));
|
|
172
|
+
}
|
|
173
|
+
else if (label.endsWith("-")) {
|
|
174
|
+
labelValidationErrors.push(createLabelInvalidCharacterError(label, "-", column + label.length - 1));
|
|
175
|
+
}
|
|
176
|
+
if (
|
|
177
|
+
// We can use .length here to check for the octet size because
|
|
178
|
+
// label can only contain ASCII LDH characters at this point.
|
|
179
|
+
label.length < LABEL_LENGTH_MIN) {
|
|
180
|
+
labelValidationErrors.push(createLabelMinLengthError(label, column));
|
|
181
|
+
}
|
|
182
|
+
else if (label.length > LABEL_LENGTH_MAX) {
|
|
183
|
+
labelValidationErrors.push(createLabelMaxLengthError(label, column));
|
|
184
|
+
}
|
|
185
|
+
column += label.length + LABEL_SEPARATOR.length;
|
|
186
|
+
lastLabel = label;
|
|
187
|
+
}
|
|
188
|
+
if (lastLabel !== undefined && /[a-z-]/iu.test(lastLabel) === false) {
|
|
189
|
+
labelValidationErrors.push(createLastLabelInvalidError(lastLabel, column - lastLabel.length - LABEL_SEPARATOR.length));
|
|
190
|
+
}
|
|
191
|
+
return labelValidationErrors;
|
|
192
|
+
},
|
|
193
|
+
};
|
|
194
|
+
//# sourceMappingURL=sanitize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitize.js","sourceRoot":"","sources":["../src/sanitize.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|
|
@@ -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"}
|
|
File without changes
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
2
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
3
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -8,40 +7,33 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
8
|
});
|
|
10
9
|
};
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
const
|
|
17
|
-
const util_1 = require("util");
|
|
18
|
-
const update_tries_1 = require("../update-tries");
|
|
19
|
-
const config_1 = require("../config");
|
|
20
|
-
// TODO: Replace this with fs promises once we removed Node 8
|
|
21
|
-
const fs = {
|
|
22
|
-
writeFile: util_1.promisify(fs_1.default.writeFile),
|
|
23
|
-
};
|
|
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));
|
|
24
16
|
const writeTriesToFiles = ({ serializedIcannTrie, serializedPrivateTrie, }) => __awaiter(void 0, void 0, void 0, function* () {
|
|
25
17
|
const indexOfScriptArg = process.argv.lastIndexOf("--");
|
|
26
18
|
const targetDirectories = process.argv.slice(indexOfScriptArg + 1);
|
|
27
19
|
yield Promise.all(targetDirectories.map((targetDirectory) => __awaiter(void 0, void 0, void 0, function* () {
|
|
28
|
-
const pathToIcannTrie =
|
|
29
|
-
const pathToPrivateTrie =
|
|
30
|
-
const pathToTrieInfoFile =
|
|
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");
|
|
31
23
|
console.warn(`Writing ${pathToIcannTrie}...`);
|
|
32
24
|
console.warn(`Writing ${pathToPrivateTrie}...`);
|
|
33
25
|
console.warn(`Writing ${pathToTrieInfoFile}...`);
|
|
34
26
|
yield Promise.all([
|
|
35
|
-
fs.writeFile(pathToIcannTrie, JSON.stringify(serializedIcannTrie)),
|
|
36
|
-
fs.writeFile(pathToPrivateTrie, JSON.stringify(serializedPrivateTrie)),
|
|
37
|
-
fs.writeFile(pathToTrieInfoFile, JSON.stringify({
|
|
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({
|
|
38
30
|
updatedAt: new Date(),
|
|
39
31
|
})),
|
|
40
32
|
]);
|
|
41
33
|
})));
|
|
42
34
|
});
|
|
43
|
-
|
|
44
|
-
console.warn(`Fetching public suffix list from ${
|
|
45
|
-
yield writeTriesToFiles(yield
|
|
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());
|
|
46
38
|
}))();
|
|
47
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 @@
|
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const createTrieFromList: (list: Array<string>) => import("./nodes.js").TrieRootNode;
|
|
@@ -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"}
|
|
@@ -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;
|