MCPcopy Create free account
hub / github.com/Markonis/hndl / parsePathWithParams

Function parsePathWithParams

src/accept-path.ts:31–78  ·  view source on GitHub ↗
(url: string, pattern: string)

Source from the content-addressed store, hash-verified

29};
30
31export function parsePathWithParams(url: string, pattern: string) {
32 const data: Record<string, string> = {};
33
34 let urlIndex = 0;
35 let patternIndex = 0;
36
37 while (true) {
38 if (pattern[patternIndex] === ":") {
39 // Start of param
40 patternIndex++;
41 let paramName = "";
42 let paramValue = "";
43
44 // Consume param name
45 while (pattern[patternIndex] !== "/" && patternIndex <= pattern.length - 1) {
46 paramName += pattern[patternIndex++];
47 }
48
49 // Consume param value
50 while (url[urlIndex] !== "/" && url[urlIndex] !== "?" && urlIndex <= url.length - 1) {
51 paramValue += url[urlIndex++];
52 }
53
54 if (paramName.length && paramValue.length) {
55 data[paramName] = paramValue;
56 }
57 }
58
59 const urlEnd = urlIndex === url.length || url[urlIndex] === "?";
60 const patternEnd = patternIndex === pattern.length;
61
62 if (urlEnd && patternEnd) {
63 return data;
64 } else if (urlEnd !== patternEnd) {
65 // The length of pattern and url is different
66 return;
67 }
68
69 if (url[urlIndex] !== pattern[patternIndex]) {
70 // We are not parsing params and pattern and url are different
71 // means it's not a match
72 return;
73 }
74
75 urlIndex++;
76 patternIndex++;
77 }
78}

Callers 2

acceptPathTestsFunction · 0.90
acceptPathFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected