@neuledge/graph-router 0.2.1 → 0.3.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/dist/matcher.js CHANGED
@@ -19,11 +19,18 @@ export class NeuledgeGraphMatcher {
19
19
  };
20
20
  }
21
21
  static generateRegex(template) {
22
- // First escape regex special chars (dots, etc.)
23
- const escaped = template.replace(/\./g, "\\.");
24
- // Then convert {param} into named capture groups
25
- const regexString = escaped.replace(/\{(\w+)\}/g, (_, name) => `(?<${name}>[^.]+)`);
26
- return new RegExp(`^${regexString}$`);
22
+ try {
23
+ const escaped = template.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
24
+ const regexString = escaped.replace(/\\\{(\w+)\\\}/g, (_, name) => `(?<${name}>[^.]+?)`);
25
+ return new RegExp(`^${regexString}$`);
26
+ }
27
+ catch (err) {
28
+ if (err instanceof SyntaxError) {
29
+ const message = err.message.split(": ").at(-1) || "Syntax error";
30
+ throw new Error(`Invalid template "${template}": ${message}`);
31
+ }
32
+ throw err;
33
+ }
27
34
  }
28
35
  }
29
36
  //# sourceMappingURL=matcher.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"matcher.js","sourceRoot":"","sources":["../src/matcher.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAO5C,MAAM,OAAO,oBAAoB;IAGH;IAFX,KAAK,CAAS;IAE/B,YAA4B,QAAkB;QAAlB,aAAQ,GAAR,QAAQ,CAAU;QAC5C,IAAI,CAAC,KAAK,GAAG,oBAAoB,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,IAAsB;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAExB,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE,MAAM,CAAC,WAAW,CACxB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;gBACvD,GAAG;gBACH,cAAc,CAAC,KAAK,CAAC;aACtB,CAAC,CACsC;SAC3C,CAAC;IACJ,CAAC;IAEO,MAAM,CAAC,aAAa,CAAC,QAAgB;QAC3C,gDAAgD;QAChD,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAE/C,iDAAiD;QACjD,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CACjC,YAAY,EACZ,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,IAAI,SAAS,CACjC,CAAC;QAEF,OAAO,IAAI,MAAM,CAAC,IAAI,WAAW,GAAG,CAAC,CAAC;IACxC,CAAC;CACF"}
1
+ {"version":3,"file":"matcher.js","sourceRoot":"","sources":["../src/matcher.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAO5C,MAAM,OAAO,oBAAoB;IAGH;IAFX,KAAK,CAAS;IAE/B,YAA4B,QAAkB;QAAlB,aAAQ,GAAR,QAAQ,CAAU;QAC5C,IAAI,CAAC,KAAK,GAAG,oBAAoB,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,IAAsB;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAExB,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE,MAAM,CAAC,WAAW,CACxB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;gBACvD,GAAG;gBACH,cAAc,CAAC,KAAK,CAAC;aACtB,CAAC,CACsC;SAC3C,CAAC;IACJ,CAAC;IAEO,MAAM,CAAC,aAAa,CAAC,QAAgB;QAC3C,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;YAEhE,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CACjC,gBAAgB,EAChB,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,IAAI,UAAU,CAClC,CAAC;YAEF,OAAO,IAAI,MAAM,CAAC,IAAI,WAAW,GAAG,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,WAAW,EAAE,CAAC;gBAC/B,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC;gBACjE,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,MAAM,OAAO,EAAE,CAAC,CAAC;YAChE,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;CACF"}
package/dist/router.js CHANGED
@@ -8,43 +8,43 @@ export class NeuledgeGraphRouter {
8
8
  async lookup(params) {
9
9
  const path = normalizePath(params.query);
10
10
  const match = await this.registry.match({ path });
11
- if (match) {
12
- try {
13
- const value = await this.registry.resolve(match);
14
- return {
15
- status: "matched",
16
- match,
17
- value,
18
- };
19
- }
20
- catch (error) {
21
- if (!(error instanceof NeuledgeError)) {
22
- throw error;
23
- }
24
- const suggestions = await this.registry.suggestions({
25
- path: match.template,
26
- });
27
- return {
28
- status: "ambiguous",
29
- reasonCode: "INVALID_IDENTIFIER",
30
- reasonHint: error.message,
31
- suggestions: suggestions.map((r) => ({
32
- template: r.template,
33
- })),
34
- };
11
+ if (!match) {
12
+ const suggestions = await this.registry.suggestions({
13
+ path,
14
+ });
15
+ return {
16
+ status: "ambiguous",
17
+ reasonCode: "UNKNOWN_PATH",
18
+ reasonHint: "Try using one of the suggested templates",
19
+ suggestions: suggestions.map((r) => ({
20
+ template: r.template,
21
+ })),
22
+ };
23
+ }
24
+ try {
25
+ const value = await this.registry.resolve(match);
26
+ return {
27
+ status: "matched",
28
+ match,
29
+ value,
30
+ };
31
+ }
32
+ catch (error) {
33
+ if (!(error instanceof NeuledgeError)) {
34
+ throw error;
35
35
  }
36
+ const suggestions = await this.registry.suggestions({
37
+ path: match.template,
38
+ });
39
+ return {
40
+ status: "ambiguous",
41
+ reasonCode: "INVALID_IDENTIFIER",
42
+ reasonHint: error.message,
43
+ suggestions: suggestions.map((r) => ({
44
+ template: r.template,
45
+ })),
46
+ };
36
47
  }
37
- const suggestions = await this.registry.suggestions({
38
- path,
39
- });
40
- return {
41
- status: "ambiguous",
42
- reasonCode: "UNKNOWN_PATH",
43
- reasonHint: "Try using one of the suggested templates",
44
- suggestions: suggestions.map((r) => ({
45
- template: r.template,
46
- })),
47
- };
48
48
  }
49
49
  formatError(error) {
50
50
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,aAAa,GAGd,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,OAAO,mBAAmB;IACrB,QAAQ,CAAwB;IAEzC,YAAY,OAEX;QACC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,MAAM,CACV,MAAiC;QAEjC,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAElD,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACjD,OAAO;oBACL,MAAM,EAAE,SAAS;oBACjB,KAAK;oBACL,KAAK;iBACN,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,CAAC,KAAK,YAAY,aAAa,CAAC,EAAE,CAAC;oBACtC,MAAM,KAAK,CAAC;gBACd,CAAC;gBAED,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;oBAClD,IAAI,EAAE,KAAK,CAAC,QAAQ;iBACrB,CAAC,CAAC;gBAEH,OAAO;oBACL,MAAM,EAAE,WAAW;oBACnB,UAAU,EAAE,oBAAoB;oBAChC,UAAU,EAAE,KAAK,CAAC,OAAO;oBACzB,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBACnC,QAAQ,EAAE,CAAC,CAAC,QAAQ;qBACrB,CAAC,CAAC;iBACJ,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;YAClD,IAAI;SACL,CAAC,CAAC;QAEH,OAAO;YACL,MAAM,EAAE,WAAW;YACnB,UAAU,EAAE,cAAc;YAC1B,UAAU,EAAE,0CAA0C;YACtD,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACnC,QAAQ,EAAE,CAAC,CAAC,QAAQ;aACrB,CAAC,CAAC;SACJ,CAAC;IACJ,CAAC;IAED,WAAW,CAAC,KAAc;QACxB,OAAO;YACL,KAAK,EAAE;gBACL,OAAO,EAAE,MAAM,CAAE,KAAe,EAAE,OAAO,IAAI,KAAK,CAAC;aACpD;SACF,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,aAAa,GAGd,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,OAAO,mBAAmB;IACrB,QAAQ,CAAwB;IAEzC,YAAY,OAEX;QACC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,MAAM,CACV,MAAiC;QAEjC,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAElD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAClD,IAAI;aACL,CAAC,CAAC;YAEH,OAAO;gBACL,MAAM,EAAE,WAAW;gBACnB,UAAU,EAAE,cAAc;gBAC1B,UAAU,EAAE,0CAA0C;gBACtD,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACnC,QAAQ,EAAE,CAAC,CAAC,QAAQ;iBACrB,CAAC,CAAC;aACJ,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACjD,OAAO;gBACL,MAAM,EAAE,SAAS;gBACjB,KAAK;gBACL,KAAK;aACN,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,CAAC,KAAK,YAAY,aAAa,CAAC,EAAE,CAAC;gBACtC,MAAM,KAAK,CAAC;YACd,CAAC;YAED,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAClD,IAAI,EAAE,KAAK,CAAC,QAAQ;aACrB,CAAC,CAAC;YAEH,OAAO;gBACL,MAAM,EAAE,WAAW;gBACnB,UAAU,EAAE,oBAAoB;gBAChC,UAAU,EAAE,KAAK,CAAC,OAAO;gBACzB,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACnC,QAAQ,EAAE,CAAC,CAAC,QAAQ;iBACrB,CAAC,CAAC;aACJ,CAAC;QACJ,CAAC;IACH,CAAC;IAED,WAAW,CAAC,KAAc;QACxB,OAAO;YACL,KAAK,EAAE;gBACL,OAAO,EAAE,MAAM,CAAE,KAAe,EAAE,OAAO,IAAI,KAAK,CAAC;aACpD;SACF,CAAC;IACJ,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neuledge/graph-router",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "description": "Router for pattern matching and resolution of queries against data source registries.",
5
5
  "keywords": [
6
6
  "ai",
@@ -48,7 +48,7 @@
48
48
  "typescript": "^5.9.3",
49
49
  "vite-tsconfig-paths": "^5.1.4",
50
50
  "vitest": "^4.0.3",
51
- "@neuledge/graph": "0.2.0"
51
+ "@neuledge/graph": "0.3.0"
52
52
  },
53
53
  "tsx": {
54
54
  "require": [