@xapp/arachne-utils 1.9.0 → 1.9.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/lib/ArachneURLPattern.js +29 -20
- package/lib/ArachneURLPattern.js.map +1 -1
- package/package.json +7 -7
package/lib/ArachneURLPattern.js
CHANGED
|
@@ -13,40 +13,48 @@ exports.ArachneURLPattern = void 0;
|
|
|
13
13
|
function parsePurl(purl) {
|
|
14
14
|
const trimmedPurl = purl.trim();
|
|
15
15
|
if (trimmedPurl.length === 0)
|
|
16
|
-
throw new Error(`Cannot parse PURL '${trimmedPurl}': it must be
|
|
17
|
-
let regex =
|
|
16
|
+
throw new Error(`Cannot parse PURL '${trimmedPurl}': it must be a non-empty string`);
|
|
17
|
+
let regex = "^";
|
|
18
|
+
let openBrackets = 0;
|
|
19
|
+
let insideNegation = false;
|
|
20
|
+
let negationPattern = "";
|
|
18
21
|
try {
|
|
19
|
-
let openBrackets = 0;
|
|
20
22
|
for (let i = 0; i < trimmedPurl.length; i++) {
|
|
21
23
|
const ch = trimmedPurl.charAt(i);
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
regex += '(';
|
|
24
|
+
// console.log(`Inside loop char ${ch} insideNegation?${insideNegation}`);
|
|
25
|
+
if (ch === "[" && ++openBrackets === 1) {
|
|
26
|
+
regex += "("; // Start regex capture group
|
|
26
27
|
}
|
|
27
|
-
else if (ch ===
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
else if (ch === "]" && openBrackets > 0 && --openBrackets === 0) {
|
|
29
|
+
if (insideNegation) {
|
|
30
|
+
regex += `(?!${negationPattern})`; // Correct placement of negative lookahead
|
|
31
|
+
insideNegation = false;
|
|
32
|
+
negationPattern = "";
|
|
33
|
+
}
|
|
34
|
+
regex += ")";
|
|
30
35
|
}
|
|
31
36
|
else if (openBrackets > 0) {
|
|
32
|
-
|
|
33
|
-
|
|
37
|
+
if (ch === "!" && !insideNegation) {
|
|
38
|
+
insideNegation = true;
|
|
39
|
+
}
|
|
40
|
+
else if (insideNegation) {
|
|
41
|
+
negationPattern += ch;
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
regex += ch;
|
|
45
|
+
}
|
|
34
46
|
}
|
|
35
47
|
else {
|
|
36
|
-
// Outside '[regex]' section, parsing the URL part
|
|
37
48
|
const code = ch.charCodeAt(0);
|
|
38
49
|
if ((code >= 48 && code <= 57) || (code >= 65 && code <= 90) || (code >= 97 && code <= 122)) {
|
|
39
|
-
// Alphanumeric character => copy it.
|
|
40
50
|
regex += ch;
|
|
41
51
|
}
|
|
42
52
|
else {
|
|
43
|
-
|
|
44
|
-
const hex = code < 16 ? `0${code.toString(16)}` : code.toString(16);
|
|
45
|
-
regex += `\\x${hex}`;
|
|
53
|
+
regex += `\\x${code.toString(16).padStart(2, "0")}`;
|
|
46
54
|
}
|
|
47
55
|
}
|
|
48
56
|
}
|
|
49
|
-
regex +=
|
|
57
|
+
regex += "$";
|
|
50
58
|
}
|
|
51
59
|
catch (err) {
|
|
52
60
|
throw new Error(`Cannot parse PURL '${purl}': ${err}`);
|
|
@@ -64,10 +72,11 @@ class ArachneURLPattern {
|
|
|
64
72
|
this.regExp = url;
|
|
65
73
|
}
|
|
66
74
|
else if (typeof url === "string") {
|
|
67
|
-
this.regExp = new RegExp(parsePurl(url),
|
|
75
|
+
this.regExp = new RegExp(parsePurl(url), "i");
|
|
76
|
+
// console.log(this.regExp);
|
|
68
77
|
}
|
|
69
78
|
else {
|
|
70
|
-
throw new Error(
|
|
79
|
+
throw new Error("A URL is required to instantiate the URL pattern.");
|
|
71
80
|
}
|
|
72
81
|
}
|
|
73
82
|
matches(url) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArachneURLPattern.js","sourceRoot":"","sources":["../src/ArachneURLPattern.ts"],"names":[],"mappings":";AAAA,kCAAkC;;;AAElC;;;;;;;GAOG;AACH,SAAS,SAAS,CAAC,IAAY;IAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAChC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,WAAW,
|
|
1
|
+
{"version":3,"file":"ArachneURLPattern.js","sourceRoot":"","sources":["../src/ArachneURLPattern.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xapp/arachne-utils",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.2",
|
|
4
4
|
"types": "lib/index",
|
|
5
5
|
"main": "lib/index",
|
|
6
6
|
"files": [
|
|
@@ -11,14 +11,14 @@
|
|
|
11
11
|
"access": "public"
|
|
12
12
|
},
|
|
13
13
|
"engines": {
|
|
14
|
-
"node": "^14 || ^16 || ^18 || ^20
|
|
14
|
+
"node": "^14 || ^16 || ^18 || ^20 || ^22"
|
|
15
15
|
},
|
|
16
16
|
"devDependencies": {
|
|
17
|
-
"@microsoft/api-extractor": "7.
|
|
17
|
+
"@microsoft/api-extractor": "7.52.8",
|
|
18
18
|
"@types/chai": "4.3.20",
|
|
19
19
|
"@types/mocha": "10.0.10",
|
|
20
|
-
"@types/node": "
|
|
21
|
-
"@types/sinon": "17.0.
|
|
20
|
+
"@types/node": "22.16.0",
|
|
21
|
+
"@types/sinon": "17.0.4",
|
|
22
22
|
"@types/sinon-chai": "3.2.12",
|
|
23
23
|
"@xapp/config": "0.2.3",
|
|
24
24
|
"chai": "4.5.0",
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"sinon-chai": "3.7.0",
|
|
28
28
|
"ts-node": "10.9.2",
|
|
29
29
|
"tslib": "2.8.1",
|
|
30
|
-
"typescript": "5.
|
|
30
|
+
"typescript": "5.8.3"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"normalize-url": "6.1.0"
|
|
@@ -38,5 +38,5 @@
|
|
|
38
38
|
"clean": "rm -rf ./lib/*",
|
|
39
39
|
"test": "mocha --recursive -r ts-node/register \"./src/**/*.test.ts\""
|
|
40
40
|
},
|
|
41
|
-
"gitHead": "
|
|
41
|
+
"gitHead": "dea9830f19ca3df06a2b61997a18de08d4e01c92"
|
|
42
42
|
}
|