@monoes/monograph 1.5.7 → 1.5.8

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 (118) hide show
  1. package/README.md +9 -9
  2. package/dist/src/analysis/changed-files.d.ts +3 -0
  3. package/dist/src/analysis/changed-files.d.ts.map +1 -1
  4. package/dist/src/analysis/changed-files.js +11 -9
  5. package/dist/src/analysis/changed-files.js.map +1 -1
  6. package/dist/src/analysis/changed-workspaces.d.ts.map +1 -1
  7. package/dist/src/analysis/changed-workspaces.js +2 -9
  8. package/dist/src/analysis/changed-workspaces.js.map +1 -1
  9. package/dist/src/analysis/git-changed-files.d.ts +3 -0
  10. package/dist/src/analysis/git-changed-files.d.ts.map +1 -1
  11. package/dist/src/analysis/git-changed-files.js +17 -12
  12. package/dist/src/analysis/git-changed-files.js.map +1 -1
  13. package/dist/src/analysis/git-ref.d.ts +33 -0
  14. package/dist/src/analysis/git-ref.d.ts.map +1 -0
  15. package/dist/src/analysis/git-ref.js +54 -0
  16. package/dist/src/analysis/git-ref.js.map +1 -0
  17. package/dist/src/analyze/boundary-analysis.d.ts.map +1 -1
  18. package/dist/src/analyze/boundary-analysis.js +42 -42
  19. package/dist/src/analyze/boundary-analysis.js.map +1 -1
  20. package/dist/src/index.d.ts +1 -0
  21. package/dist/src/index.d.ts.map +1 -1
  22. package/dist/src/index.js +1 -0
  23. package/dist/src/index.js.map +1 -1
  24. package/dist/src/lsp/server.d.ts +1 -1
  25. package/dist/src/lsp/server.d.ts.map +1 -1
  26. package/dist/src/lsp/server.js +48 -13
  27. package/dist/src/lsp/server.js.map +1 -1
  28. package/dist/src/mcp-tools/api-impact.d.ts.map +1 -1
  29. package/dist/src/mcp-tools/api-impact.js +1 -16
  30. package/dist/src/mcp-tools/api-impact.js.map +1 -1
  31. package/dist/src/mcp-tools/context.d.ts.map +1 -1
  32. package/dist/src/mcp-tools/context.js +12 -23
  33. package/dist/src/mcp-tools/context.js.map +1 -1
  34. package/dist/src/mcp-tools/explain.d.ts.map +1 -1
  35. package/dist/src/mcp-tools/explain.js +15 -20
  36. package/dist/src/mcp-tools/explain.js.map +1 -1
  37. package/dist/src/mcp-tools/graph-query.d.ts.map +1 -1
  38. package/dist/src/mcp-tools/graph-query.js +10 -19
  39. package/dist/src/mcp-tools/graph-query.js.map +1 -1
  40. package/dist/src/mcp-tools/impact.d.ts.map +1 -1
  41. package/dist/src/mcp-tools/impact.js +38 -32
  42. package/dist/src/mcp-tools/impact.js.map +1 -1
  43. package/dist/src/mcp-tools/neighbors.d.ts.map +1 -1
  44. package/dist/src/mcp-tools/neighbors.js +4 -22
  45. package/dist/src/mcp-tools/neighbors.js.map +1 -1
  46. package/dist/src/mcp-tools/query.d.ts.map +1 -1
  47. package/dist/src/mcp-tools/query.js +14 -9
  48. package/dist/src/mcp-tools/query.js.map +1 -1
  49. package/dist/src/mcp-tools/rename.d.ts.map +1 -1
  50. package/dist/src/mcp-tools/rename.js +3 -20
  51. package/dist/src/mcp-tools/rename.js.map +1 -1
  52. package/dist/src/parsers/c.d.ts.map +1 -1
  53. package/dist/src/parsers/c.js +12 -0
  54. package/dist/src/parsers/c.js.map +1 -1
  55. package/dist/src/parsers/extractor.d.ts.map +1 -1
  56. package/dist/src/parsers/extractor.js +2 -1
  57. package/dist/src/parsers/extractor.js.map +1 -1
  58. package/dist/src/parsers/go.d.ts.map +1 -1
  59. package/dist/src/parsers/go.js +19 -1
  60. package/dist/src/parsers/go.js.map +1 -1
  61. package/dist/src/parsers/language-config.d.ts +4 -0
  62. package/dist/src/parsers/language-config.d.ts.map +1 -1
  63. package/dist/src/parsers/language-parsers.d.ts.map +1 -1
  64. package/dist/src/parsers/language-parsers.js +3 -1
  65. package/dist/src/parsers/language-parsers.js.map +1 -1
  66. package/dist/src/parsers/loader.d.ts +1 -0
  67. package/dist/src/parsers/loader.d.ts.map +1 -1
  68. package/dist/src/parsers/loader.js +161 -20
  69. package/dist/src/parsers/loader.js.map +1 -1
  70. package/dist/src/parsers/python.d.ts.map +1 -1
  71. package/dist/src/parsers/python.js +6 -0
  72. package/dist/src/parsers/python.js.map +1 -1
  73. package/dist/src/parsers/rust.d.ts.map +1 -1
  74. package/dist/src/parsers/rust.js +10 -0
  75. package/dist/src/parsers/rust.js.map +1 -1
  76. package/dist/src/pipeline/orchestrator.d.ts.map +1 -1
  77. package/dist/src/pipeline/orchestrator.js +17 -0
  78. package/dist/src/pipeline/orchestrator.js.map +1 -1
  79. package/dist/src/pipeline/phases/pdf-parse.d.ts.map +1 -1
  80. package/dist/src/pipeline/phases/pdf-parse.js +10 -11
  81. package/dist/src/pipeline/phases/pdf-parse.js.map +1 -1
  82. package/dist/src/storage/edge-store.d.ts +1 -0
  83. package/dist/src/storage/edge-store.d.ts.map +1 -1
  84. package/dist/src/storage/edge-store.js +5 -8
  85. package/dist/src/storage/edge-store.js.map +1 -1
  86. package/dist/src/storage/node-store.d.ts +1 -0
  87. package/dist/src/storage/node-store.d.ts.map +1 -1
  88. package/dist/src/storage/node-store.js +11 -12
  89. package/dist/src/storage/node-store.js.map +1 -1
  90. package/dist/src/storage/schema.d.ts.map +1 -1
  91. package/dist/src/storage/schema.js +6 -0
  92. package/dist/src/storage/schema.js.map +1 -1
  93. package/dist/src/storage/utils.d.ts +11 -0
  94. package/dist/src/storage/utils.d.ts.map +1 -0
  95. package/dist/src/storage/utils.js +24 -0
  96. package/dist/src/storage/utils.js.map +1 -0
  97. package/dist/tsconfig.tsbuildinfo +1 -1
  98. package/package.json +1 -1
  99. package/dist/src/fix/deps.d.ts +0 -14
  100. package/dist/src/fix/deps.d.ts.map +0 -1
  101. package/dist/src/fix/deps.js +0 -47
  102. package/dist/src/fix/deps.js.map +0 -1
  103. package/dist/src/fix/enum-members.d.ts +0 -20
  104. package/dist/src/fix/enum-members.d.ts.map +0 -1
  105. package/dist/src/fix/enum-members.js +0 -95
  106. package/dist/src/fix/enum-members.js.map +0 -1
  107. package/dist/src/fix/export-surgery.d.ts +0 -14
  108. package/dist/src/fix/export-surgery.d.ts.map +0 -1
  109. package/dist/src/fix/export-surgery.js +0 -140
  110. package/dist/src/fix/export-surgery.js.map +0 -1
  111. package/dist/src/fix/exports.d.ts +0 -16
  112. package/dist/src/fix/exports.d.ts.map +0 -1
  113. package/dist/src/fix/exports.js +0 -65
  114. package/dist/src/fix/exports.js.map +0 -1
  115. package/dist/src/fix/orchestrator.d.ts +0 -28
  116. package/dist/src/fix/orchestrator.d.ts.map +0 -1
  117. package/dist/src/fix/orchestrator.js +0 -39
  118. package/dist/src/fix/orchestrator.js.map +0 -1
@@ -1,4 +1,5 @@
1
1
  import { toNormLabel, MonographError } from '../types.js';
2
+ import { safeJsonParse } from './utils.js';
2
3
  export function insertNode(db, node) {
3
4
  db.prepare(`
4
5
  INSERT OR REPLACE INTO nodes
@@ -43,15 +44,11 @@ export function getNodesByIds(db, ids) {
43
44
  return results;
44
45
  }
45
46
  export function getNode(db, id) {
46
- const row = db
47
- .prepare('SELECT * FROM nodes WHERE id = ?')
48
- .get(id);
47
+ const row = db.prepare('SELECT * FROM nodes WHERE id = ?').get(id);
49
48
  return row ? rowToNode(row) : undefined;
50
49
  }
51
50
  export function getNodesForFile(db, filePath) {
52
- const rows = db
53
- .prepare('SELECT * FROM nodes WHERE file_path = ?')
54
- .all(filePath);
51
+ const rows = db.prepare('SELECT * FROM nodes WHERE file_path = ?').all(filePath);
55
52
  return rows.map(rowToNode);
56
53
  }
57
54
  export function deleteNodesForFile(db, filePath) {
@@ -67,7 +64,7 @@ function rowToPropDef(row) {
67
64
  type: row.type,
68
65
  cardinality: row.cardinality,
69
66
  viewContext: row.view_context,
70
- closedValues: row.closed_values ? JSON.parse(row.closed_values) : null,
67
+ closedValues: safeJsonParse(row.closed_values, null),
71
68
  description: row.description ?? null,
72
69
  queryable: row.queryable === 1,
73
70
  };
@@ -112,14 +109,16 @@ export function queryByProperty(db, ident, value, comparator = '=', limit = 100)
112
109
  throw new MonographError(`Property '${ident}' is not queryable (view_context may be 'never' or queryable=false).`);
113
110
  }
114
111
  const extractExpr = `json_extract(properties, '$.${ident}')`;
115
- const rows = db.prepare(`
112
+ const rows = db
113
+ .prepare(`
116
114
  SELECT id, name, label, file_path, ${extractExpr} AS property_value
117
115
  FROM nodes
118
116
  WHERE properties IS NOT NULL
119
117
  AND ${extractExpr} ${comparator} ?
120
118
  LIMIT ?
121
- `).all(value, limit);
122
- return rows.map(r => ({
119
+ `)
120
+ .all(value, limit);
121
+ return rows.map((r) => ({
123
122
  id: r.id,
124
123
  name: r.name,
125
124
  label: r.label,
@@ -127,7 +126,7 @@ export function queryByProperty(db, ident, value, comparator = '=', limit = 100)
127
126
  propertyValue: r.property_value,
128
127
  }));
129
128
  }
130
- function rowToNode(row) {
129
+ export function rowToNode(row) {
131
130
  return {
132
131
  id: row.id,
133
132
  label: row.label,
@@ -139,7 +138,7 @@ function rowToNode(row) {
139
138
  communityId: row.community_id,
140
139
  isExported: row.is_exported === 1,
141
140
  language: row.language,
142
- properties: row.properties ? JSON.parse(row.properties) : undefined,
141
+ properties: safeJsonParse(row.properties, undefined),
143
142
  };
144
143
  }
145
144
  //# sourceMappingURL=node-store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"node-store.js","sourceRoot":"","sources":["../../../src/storage/node-store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE1D,MAAM,UAAU,UAAU,CAAC,EAAqB,EAAE,IAAmB;IACnE,EAAE,CAAC,OAAO,CAAC;;;;;GAKV,CAAC,CAAC,GAAG,CACJ,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,SAAS,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EACxC,IAAI,CAAC,QAAQ,IAAI,IAAI,EACrB,IAAI,CAAC,SAAS,IAAI,IAAI,EACtB,IAAI,CAAC,OAAO,IAAI,IAAI,EACpB,IAAI,CAAC,WAAW,IAAI,IAAI,EACxB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACvB,IAAI,CAAC,QAAQ,IAAI,IAAI,EACrB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CACzD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,GAAG;;;;;GAKhB,CAAC;AAEJ,MAAM,UAAU,WAAW,CAAC,EAAqB,EAAE,KAAsB;IACvE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC/B,4EAA4E;IAC5E,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACpC,MAAM,UAAU,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,IAAqB,EAAE,EAAE;QAC1D,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,IAAI,CAAC,GAAG,CACN,CAAC,CAAC,EAAE,EACJ,CAAC,CAAC,KAAK,EACP,CAAC,CAAC,IAAI,EACN,CAAC,CAAC,SAAS,IAAI,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,EAClC,CAAC,CAAC,QAAQ,IAAI,IAAI,EAClB,CAAC,CAAC,SAAS,IAAI,IAAI,EACnB,CAAC,CAAC,OAAO,IAAI,IAAI,EACjB,CAAC,CAAC,WAAW,IAAI,IAAI,EACrB,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACpB,CAAC,CAAC,QAAQ,IAAI,IAAI,EAClB,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CACnD,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IACH,UAAU,CAAC,KAAK,CAAC,CAAC;AACpB,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,aAAa,CAAC,EAAqB,EAAE,GAAa;IAChE,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAChC,MAAM,KAAK,GAAG,EAAE,CAAC;IACjB,MAAM,OAAO,GAAoB,EAAE,CAAC;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;QACtC,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,EAAE;aACZ,OAAO,CAAC,oCAAoC,YAAY,GAAG,CAAC;aAC5D,GAAG,CAAC,GAAG,KAAK,CAA8B,CAAC;QAC9C,KAAK,MAAM,GAAG,IAAI,IAAI;YAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,EAAqB,EAAE,EAAU;IACvD,MAAM,GAAG,GAAG,EAAE;SACX,OAAO,CAAC,kCAAkC,CAAC;SAC3C,GAAG,CAAC,EAAE,CAAwC,CAAC;IAClD,OAAO,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAqB,EAAE,QAAgB;IACrE,MAAM,IAAI,GAAG,EAAE;SACZ,OAAO,CAAC,yCAAyC,CAAC;SAClD,GAAG,CAAC,QAAQ,CAA8B,CAAC;IAC9C,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,EAAqB,EAAE,QAAgB;IACxE,EAAE,CAAC,OAAO,CAAC,uCAAuC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAqB;IAC9C,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC,GAAG,EAAmB,CAAC;IACjF,OAAO,GAAG,CAAC,CAAC,CAAC;AACf,CAAC;AAcD,SAAS,YAAY,CAAC,GAA4B;IAChD,OAAO;QACL,KAAK,EAAE,GAAG,CAAC,KAAe;QAC1B,IAAI,EAAE,GAAG,CAAC,IAAc;QACxB,WAAW,EAAE,GAAG,CAAC,WAAqB;QACtC,WAAW,EAAE,GAAG,CAAC,YAAsB;QACvC,YAAY,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAuB,CAAC,CAAC,CAAC,CAAC,IAAI;QAChF,WAAW,EAAG,GAAG,CAAC,WAA6B,IAAI,IAAI;QACvD,SAAS,EAAG,GAAG,CAAC,SAAoB,KAAK,CAAC;KAC3C,CAAC;AACJ,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,cAAc,CAAC,EAAqB;IAClD,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,8CAA8C,CAAC,CAAC,GAAG,EAA+B,CAAC;IAC3G,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAChC,CAAC;AAED,uCAAuC;AACvC,MAAM,UAAU,WAAW,CAAC,EAAqB,EAAE,KAAa;IAC9D,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,+CAA+C,CAAC,CAAC,GAAG,CAAC,KAAK,CAAwC,CAAC;IAC1H,OAAO,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACxC,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,cAAc,CAAC,EAAqB,EAAE,GAAgB;IACpE,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;GAUV,CAAC,CAAC,GAAG,CACJ,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,IAAI,EACR,GAAG,CAAC,WAAW,EACf,GAAG,CAAC,WAAW,EACf,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAClE,GAAG,CAAC,WAAW,IAAI,IAAI,EACvB,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACtB,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,EAAqB,EACrB,KAAa,EACb,KAAgC,EAChC,UAAU,GAA6B,GAAG,EAC1C,KAAK,GAAG,GAAG;IAEX,MAAM,OAAO,GAAG,WAAW,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACvC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,cAAc,CAAC,sBAAsB,KAAK,2CAA2C,CAAC,CAAC;IACnG,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QACvB,MAAM,IAAI,cAAc,CAAC,aAAa,KAAK,sEAAsE,CAAC,CAAC;IACrH,CAAC;IAED,MAAM,WAAW,GAAG,+BAA+B,KAAK,IAAI,CAAC;IAC7D,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;yCACe,WAAW;;;YAGxC,WAAW,IAAI,UAAU;;GAElC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAmC,CAAC;IAEvD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpB,EAAE,EAAE,CAAC,CAAC,EAAY;QAClB,IAAI,EAAE,CAAC,CAAC,IAAc;QACtB,KAAK,EAAE,CAAC,CAAC,KAAe;QACxB,QAAQ,EAAG,CAAC,CAAC,SAA2B,IAAI,IAAI;QAChD,aAAa,EAAE,CAAC,CAAC,cAAc;KAChC,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,SAAS,CAAC,GAA4B;IAC7C,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAY;QACpB,KAAK,EAAE,GAAG,CAAC,KAA+B;QAC1C,IAAI,EAAE,GAAG,CAAC,IAAc;QACxB,SAAS,EAAE,GAAG,CAAC,UAAoB;QACnC,QAAQ,EAAE,GAAG,CAAC,SAA+B;QAC7C,SAAS,EAAE,GAAG,CAAC,UAAgC;QAC/C,OAAO,EAAE,GAAG,CAAC,QAA8B;QAC3C,WAAW,EAAE,GAAG,CAAC,YAAkC;QACnD,UAAU,EAAG,GAAG,CAAC,WAAsB,KAAK,CAAC;QAC7C,QAAQ,EAAE,GAAG,CAAC,QAA8B;QAC5C,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAoB,CAAC,CAAC,CAAC,CAAC,SAAS;KAC9E,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"node-store.js","sourceRoot":"","sources":["../../../src/storage/node-store.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/storage/schema.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,sVAcvB,CAAC;AAEH,eAAO,MAAM,YAAY,+ZAavB,CAAC;AAEH,eAAO,MAAM,kBAAkB,4KAM7B,CAAC;AAEH,eAAO,MAAM,iBAAiB,iGAI5B,CAAC;AAEH,eAAO,MAAM,gBAAgB,iNAU3B,CAAC;AAEH,eAAO,MAAM,iBAAiB,sGAI5B,CAAC;AAEH,eAAO,MAAM,iBAAiB,2IAK5B,CAAC;AAEH,eAAO,MAAM,cAAc,UAY1B,CAAC;AAEF,eAAO,MAAM,sBAAsB,ubASjC,CAAC;AAEH,eAAO,MAAM,oBAAoB,21BAS0D,CAAC;AAE5F,eAAO,MAAM,mBAAmB,kNAQ9B,CAAC;AAEH,eAAO,MAAM,iBAAiB,mPAQ7B,CAAC;AAEF,eAAO,MAAM,yBAAyB,6dAgBpC,CAAC;AAEH,eAAO,MAAM,6BAA6B,kGACkD,CAAC;AAE7F,eAAO,MAAM,iCAAiC,4FACwC,CAAC;AAEvF,eAAO,MAAM,kCAAkC,+FAC0C,CAAC;AAE1F,eAAO,MAAM,gCAAgC,4FACyC,CAAC;AAEvF,eAAO,MAAM,iBAAiB,64BAc1B,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/storage/schema.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,sVAcvB,CAAC;AAEH,eAAO,MAAM,YAAY,+ZAavB,CAAC;AAEH,eAAO,MAAM,kBAAkB,4KAM7B,CAAC;AAEH,eAAO,MAAM,iBAAiB,iGAI5B,CAAC;AAEH,eAAO,MAAM,gBAAgB,iNAU3B,CAAC;AAEH,eAAO,MAAM,iBAAiB,sGAI5B,CAAC;AAEH,eAAO,MAAM,iBAAiB,2IAK5B,CAAC;AAEH,eAAO,MAAM,cAAc,UAkB1B,CAAC;AAEF,eAAO,MAAM,sBAAsB,ubASjC,CAAC;AAEH,eAAO,MAAM,oBAAoB,21BAS0D,CAAC;AAE5F,eAAO,MAAM,mBAAmB,kNAQ9B,CAAC;AAEH,eAAO,MAAM,iBAAiB,mPAQ7B,CAAC;AAEF,eAAO,MAAM,yBAAyB,6dAgBpC,CAAC;AAEH,eAAO,MAAM,6BAA6B,kGACkD,CAAC;AAE7F,eAAO,MAAM,iCAAiC,4FACwC,CAAC;AAEvF,eAAO,MAAM,kCAAkC,+FAC0C,CAAC;AAE1F,eAAO,MAAM,gCAAgC,4FACyC,CAAC;AAEvF,eAAO,MAAM,iBAAiB,64BAc1B,CAAC"}
@@ -72,6 +72,12 @@ export const CREATE_INDEXES = [
72
72
  `CREATE INDEX IF NOT EXISTS idx_edges_target ON edges(target_id)`,
73
73
  `CREATE INDEX IF NOT EXISTS idx_edges_relation ON edges(relation)`,
74
74
  `CREATE INDEX IF NOT EXISTS idx_edges_confidence ON edges(confidence)`,
75
+ // MONO-6: compound (target_id, relation) index — hottest path for blast-radius
76
+ // queries (reverseBfs in impact.ts:70-72 filters on `target_id + relation IN (...)`).
77
+ // The partial idx_edges_calls_lookup only helps `relation='CALLS'`; this compound
78
+ // index covers the default `['CALLS','IMPORTS','REFERENCES','EXTENDS','RE_EXPORTS']`
79
+ // set. Idempotent — safe on pre-existing DBs (CREATE INDEX IF NOT EXISTS).
80
+ `CREATE INDEX IF NOT EXISTS idx_edges_target_relation ON edges(target_id, relation)`,
75
81
  `CREATE INDEX IF NOT EXISTS idx_edges_calls_lookup ON edges(source_id, target_id, relation) WHERE relation = 'CALLS'`,
76
82
  ];
77
83
  export const CREATE_NODE_PROPERTIES = `
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/storage/schema.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;EAc1B,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;EAa1B,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG;;;;;;EAMhC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;EAI/B,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;EAU9B,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;EAI/B,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;EAK/B,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,+DAA+D;IAC/D,4DAA4D;IAC5D,gEAAgE;IAChE,0DAA0D;IAC1D,gFAAgF;IAChF,mGAAmG;IACnG,iEAAiE;IACjE,iEAAiE;IACjE,kEAAkE;IAClE,sEAAsE;IACtE,qHAAqH;CACtH,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;;;;;;EASpC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;2FASuD,CAAC;AAE5F,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;EAQjC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;CAQhC,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG;;;;;;;;;;;;;;;;EAgBvC,CAAC;AAEH,MAAM,CAAC,MAAM,6BAA6B,GAAG;4FAC+C,CAAC;AAE7F,MAAM,CAAC,MAAM,iCAAiC,GAAG;sFACqC,CAAC;AAEvF,MAAM,CAAC,MAAM,kCAAkC,GAAG;yFACuC,CAAC;AAE1F,MAAM,CAAC,MAAM,gCAAgC,GAAG;sFACsC,CAAC;AAEvF,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;IAc7B,CAAC"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/storage/schema.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;EAc1B,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;EAa1B,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG;;;;;;EAMhC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;EAI/B,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;EAU9B,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;EAI/B,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;EAK/B,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,+DAA+D;IAC/D,4DAA4D;IAC5D,gEAAgE;IAChE,0DAA0D;IAC1D,gFAAgF;IAChF,mGAAmG;IACnG,iEAAiE;IACjE,iEAAiE;IACjE,kEAAkE;IAClE,sEAAsE;IACtE,+EAA+E;IAC/E,sFAAsF;IACtF,kFAAkF;IAClF,qFAAqF;IACrF,2EAA2E;IAC3E,oFAAoF;IACpF,qHAAqH;CACtH,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;;;;;;EASpC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;2FASuD,CAAC;AAE5F,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;EAQjC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;CAQhC,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG;;;;;;;;;;;;;;;;EAgBvC,CAAC;AAEH,MAAM,CAAC,MAAM,6BAA6B,GAAG;4FAC+C,CAAC;AAE7F,MAAM,CAAC,MAAM,iCAAiC,GAAG;sFACqC,CAAC;AAEvF,MAAM,CAAC,MAAM,kCAAkC,GAAG;yFACuC,CAAC;AAE1F,MAAM,CAAC,MAAM,gCAAgC,GAAG;sFACsC,CAAC;AAEvF,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;IAc7B,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Parse a JSON string from a DB column (or any string source) without throwing.
3
+ * Returns `fallback` for null/undefined/empty input or any parse error.
4
+ *
5
+ * Used to guard the 9+ sites that read `properties` / `evidence` / `closed_values`
6
+ * blobs — a single corrupted row would otherwise crash the entire query response.
7
+ * Failures are logged to stderr when MONOMIND_DEBUG is set, so poisoned blobs are
8
+ * discoverable without taking down the request.
9
+ */
10
+ export declare function safeJsonParse<T>(s: string | null | undefined, fallback: T): T;
11
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/storage/utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAa7E"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Parse a JSON string from a DB column (or any string source) without throwing.
3
+ * Returns `fallback` for null/undefined/empty input or any parse error.
4
+ *
5
+ * Used to guard the 9+ sites that read `properties` / `evidence` / `closed_values`
6
+ * blobs — a single corrupted row would otherwise crash the entire query response.
7
+ * Failures are logged to stderr when MONOMIND_DEBUG is set, so poisoned blobs are
8
+ * discoverable without taking down the request.
9
+ */
10
+ export function safeJsonParse(s, fallback) {
11
+ if (s == null || s === '')
12
+ return fallback;
13
+ try {
14
+ return JSON.parse(s);
15
+ }
16
+ catch (err) {
17
+ if (process.env.MONOMIND_DEBUG) {
18
+ // eslint-disable-next-line no-console
19
+ console.error(`[monograph] safeJsonParse: failed to parse (${String(err)}); input length=${s.length}`);
20
+ }
21
+ return fallback;
22
+ }
23
+ }
24
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/storage/utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAI,CAA4B,EAAE,QAAW;IACxE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;QAAE,OAAO,QAAQ,CAAC;IAC3C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAM,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;YAC/B,sCAAsC;YACtC,OAAO,CAAC,KAAK,CACX,+CAA+C,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,MAAM,EAAE,CACxF,CAAC;QACJ,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC"}