@nanonets/graft 0.1.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 +21 -0
- package/README.md +228 -0
- package/dist/ai/crux.d.ts +31 -0
- package/dist/ai/crux.d.ts.map +1 -0
- package/dist/ai/crux.js +91 -0
- package/dist/ai/crux.js.map +1 -0
- package/dist/ai/providers.d.ts +37 -0
- package/dist/ai/providers.d.ts.map +1 -0
- package/dist/ai/providers.js +17 -0
- package/dist/ai/providers.js.map +1 -0
- package/dist/ai/summarize.d.ts +25 -0
- package/dist/ai/summarize.d.ts.map +1 -0
- package/dist/ai/summarize.js +41 -0
- package/dist/ai/summarize.js.map +1 -0
- package/dist/ai/synthesize.d.ts +32 -0
- package/dist/ai/synthesize.d.ts.map +1 -0
- package/dist/ai/synthesize.js +132 -0
- package/dist/ai/synthesize.js.map +1 -0
- package/dist/cli.d.ts +13 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +131 -0
- package/dist/cli.js.map +1 -0
- package/dist/context/build.d.ts +33 -0
- package/dist/context/build.d.ts.map +1 -0
- package/dist/context/build.js +265 -0
- package/dist/context/build.js.map +1 -0
- package/dist/context/check.d.ts +21 -0
- package/dist/context/check.d.ts.map +1 -0
- package/dist/context/check.js +127 -0
- package/dist/context/check.js.map +1 -0
- package/dist/context/node-file.d.ts +80 -0
- package/dist/context/node-file.d.ts.map +1 -0
- package/dist/context/node-file.js +165 -0
- package/dist/context/node-file.js.map +1 -0
- package/dist/engine.d.ts +58 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +87 -0
- package/dist/engine.js.map +1 -0
- package/dist/graph/build.d.ts +33 -0
- package/dist/graph/build.d.ts.map +1 -0
- package/dist/graph/build.js +95 -0
- package/dist/graph/build.js.map +1 -0
- package/dist/graph/check.d.ts +18 -0
- package/dist/graph/check.d.ts.map +1 -0
- package/dist/graph/check.js +126 -0
- package/dist/graph/check.js.map +1 -0
- package/dist/graph/enrich.d.ts +42 -0
- package/dist/graph/enrich.d.ts.map +1 -0
- package/dist/graph/enrich.js +141 -0
- package/dist/graph/enrich.js.map +1 -0
- package/dist/graph/extract.d.ts +23 -0
- package/dist/graph/extract.d.ts.map +1 -0
- package/dist/graph/extract.js +249 -0
- package/dist/graph/extract.js.map +1 -0
- package/dist/graph/resolve.d.ts +4 -0
- package/dist/graph/resolve.d.ts.map +1 -0
- package/dist/graph/resolve.js +0 -0
- package/dist/graph/resolve.js.map +1 -0
- package/dist/graph/types.d.ts +56 -0
- package/dist/graph/types.d.ts.map +1 -0
- package/dist/graph/types.js +14 -0
- package/dist/graph/types.js.map +1 -0
- package/dist/graph/write.d.ts +9 -0
- package/dist/graph/write.d.ts.map +1 -0
- package/dist/graph/write.js +39 -0
- package/dist/graph/write.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -0
- package/dist/ingest/fs.d.ts +10 -0
- package/dist/ingest/fs.d.ts.map +1 -0
- package/dist/ingest/fs.js +48 -0
- package/dist/ingest/fs.js.map +1 -0
- package/dist/util/id.d.ts +7 -0
- package/dist/util/id.d.ts.map +1 -0
- package/dist/util/id.js +14 -0
- package/dist/util/id.js.map +1 -0
- package/dist/viewer/app.js +1 -0
- package/dist/viewer/index.html +48 -0
- package/dist/viewer/style.css +119 -0
- package/dist/viz/assemble.d.ts +33 -0
- package/dist/viz/assemble.d.ts.map +1 -0
- package/dist/viz/assemble.js +101 -0
- package/dist/viz/assemble.js.map +1 -0
- package/dist/viz/serve.d.ts +12 -0
- package/dist/viz/serve.d.ts.map +1 -0
- package/dist/viz/serve.js +128 -0
- package/dist/viz/serve.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tier-1 extraction: source file → {@link NodeV1}[] + raw edges, via tree-sitter.
|
|
3
|
+
*
|
|
4
|
+
* Deterministic and dependency-only (no LLM, no network). Emits one node per
|
|
5
|
+
* definition (file, class, function, method, interface, type, enum, and TS
|
|
6
|
+
* arrow-function consts) plus unresolved edge intents. Edge *targets* are
|
|
7
|
+
* resolved against the whole-repo node index later, in build.ts.
|
|
8
|
+
*/
|
|
9
|
+
import Parser from "tree-sitter";
|
|
10
|
+
import TypeScript from "tree-sitter-typescript";
|
|
11
|
+
import Python from "tree-sitter-python";
|
|
12
|
+
import { basename } from "node:path";
|
|
13
|
+
import { contentHash } from "../util/id.js";
|
|
14
|
+
/** Map a file path to a supported language, or null if unsupported. */
|
|
15
|
+
export function languageOf(path) {
|
|
16
|
+
const p = path.toLowerCase();
|
|
17
|
+
if (p.endsWith(".tsx") || p.endsWith(".jsx"))
|
|
18
|
+
return "tsx";
|
|
19
|
+
if (/\.(ts|mts|cts|js|mjs|cjs)$/.test(p))
|
|
20
|
+
return "typescript";
|
|
21
|
+
if (p.endsWith(".py") || p.endsWith(".pyi"))
|
|
22
|
+
return "python";
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
const TS_KINDS = {
|
|
26
|
+
class_declaration: "class",
|
|
27
|
+
abstract_class_declaration: "class",
|
|
28
|
+
function_declaration: "function",
|
|
29
|
+
generator_function_declaration: "function",
|
|
30
|
+
method_definition: "method",
|
|
31
|
+
interface_declaration: "interface",
|
|
32
|
+
type_alias_declaration: "type",
|
|
33
|
+
enum_declaration: "enum",
|
|
34
|
+
};
|
|
35
|
+
const PY_KINDS = {
|
|
36
|
+
class_definition: "class",
|
|
37
|
+
function_definition: "function", // → "method" inside a class (resolved in the walk)
|
|
38
|
+
};
|
|
39
|
+
const FUNCTION_VALUE_TYPES = new Set([
|
|
40
|
+
"arrow_function",
|
|
41
|
+
"function",
|
|
42
|
+
"function_expression",
|
|
43
|
+
"generator_function",
|
|
44
|
+
]);
|
|
45
|
+
const parser = new Parser();
|
|
46
|
+
const GRAMMARS = {
|
|
47
|
+
typescript: TypeScript.typescript,
|
|
48
|
+
tsx: TypeScript.tsx,
|
|
49
|
+
python: Python,
|
|
50
|
+
};
|
|
51
|
+
export function extractFile(rel, source, lang) {
|
|
52
|
+
parser.setLanguage(GRAMMARS[lang]);
|
|
53
|
+
const root = parser.parse(source).rootNode;
|
|
54
|
+
const nodes = [
|
|
55
|
+
{
|
|
56
|
+
id: rel,
|
|
57
|
+
name: basename(rel),
|
|
58
|
+
kind: "file",
|
|
59
|
+
path: rel,
|
|
60
|
+
span: `L1-L${root.endPosition.row + 1}`,
|
|
61
|
+
signature: null,
|
|
62
|
+
exported: true,
|
|
63
|
+
origin: "ast",
|
|
64
|
+
body_hash: contentHash(source),
|
|
65
|
+
summary_state: "pending",
|
|
66
|
+
summary: null,
|
|
67
|
+
crux: null,
|
|
68
|
+
},
|
|
69
|
+
];
|
|
70
|
+
const rawEdges = [];
|
|
71
|
+
const ctx = {
|
|
72
|
+
rel,
|
|
73
|
+
source,
|
|
74
|
+
lang,
|
|
75
|
+
kinds: lang === "python" ? PY_KINDS : TS_KINDS,
|
|
76
|
+
scope: [],
|
|
77
|
+
enclosingKind: null,
|
|
78
|
+
parentId: rel,
|
|
79
|
+
};
|
|
80
|
+
for (const child of root.namedChildren)
|
|
81
|
+
walk(child, ctx, nodes, rawEdges);
|
|
82
|
+
return { nodes, rawEdges };
|
|
83
|
+
}
|
|
84
|
+
function walk(node, ctx, out, edges) {
|
|
85
|
+
const desc = describe(node, ctx);
|
|
86
|
+
if (desc) {
|
|
87
|
+
const id = `${ctx.rel}#${[...ctx.scope, desc.name].join(".")}`;
|
|
88
|
+
out.push({
|
|
89
|
+
id,
|
|
90
|
+
name: desc.name,
|
|
91
|
+
kind: desc.kind,
|
|
92
|
+
path: ctx.rel,
|
|
93
|
+
span: `L${desc.hashNode.startPosition.row + 1}-L${desc.hashNode.endPosition.row + 1}`,
|
|
94
|
+
signature: clean(ctx.source.slice(desc.hashNode.startIndex, desc.headerEnd)),
|
|
95
|
+
exported: ctx.lang === "python" ? !desc.name.startsWith("_") : tsExported(node),
|
|
96
|
+
origin: "ast",
|
|
97
|
+
body_hash: contentHash(desc.hashNode.text),
|
|
98
|
+
summary_state: "pending",
|
|
99
|
+
summary: null,
|
|
100
|
+
crux: null,
|
|
101
|
+
});
|
|
102
|
+
// structural containment
|
|
103
|
+
edges.push({ source: ctx.parentId, relation: "contains", targetId: id, file: ctx.rel });
|
|
104
|
+
// class heritage
|
|
105
|
+
if (desc.kind === "class")
|
|
106
|
+
edges.push(...heritageEdges(node, id, ctx));
|
|
107
|
+
const childCtx = {
|
|
108
|
+
...ctx,
|
|
109
|
+
scope: [...ctx.scope, desc.name],
|
|
110
|
+
enclosingKind: desc.kind,
|
|
111
|
+
parentId: id,
|
|
112
|
+
};
|
|
113
|
+
for (const child of node.namedChildren)
|
|
114
|
+
walk(child, childCtx, out, edges);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
// not a definition — capture calls/imports, then descend with the same context
|
|
118
|
+
const callType = ctx.lang === "python" ? "call" : "call_expression";
|
|
119
|
+
if (node.type === callType) {
|
|
120
|
+
const callee = calleeName(node, ctx.lang);
|
|
121
|
+
if (callee) {
|
|
122
|
+
edges.push({
|
|
123
|
+
source: ctx.parentId,
|
|
124
|
+
relation: "calls",
|
|
125
|
+
name: callee.name,
|
|
126
|
+
viaMember: callee.viaMember,
|
|
127
|
+
file: ctx.rel,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
else if (isImport(node)) {
|
|
132
|
+
const spec = importSpecifier(node, ctx.lang);
|
|
133
|
+
if (spec)
|
|
134
|
+
edges.push({ source: ctx.rel, relation: "imports", specifier: spec, file: ctx.rel });
|
|
135
|
+
}
|
|
136
|
+
for (const child of node.namedChildren)
|
|
137
|
+
walk(child, ctx, out, edges);
|
|
138
|
+
}
|
|
139
|
+
/** Recognize the two definition shapes: mapped node types, and TS arrow-consts. */
|
|
140
|
+
function describe(node, ctx) {
|
|
141
|
+
const mapped = ctx.kinds[node.type];
|
|
142
|
+
if (mapped) {
|
|
143
|
+
const name = node.childForFieldName("name")?.text;
|
|
144
|
+
if (!name)
|
|
145
|
+
return null;
|
|
146
|
+
let kind = mapped;
|
|
147
|
+
if (ctx.lang === "python" && mapped === "function" && ctx.enclosingKind === "class") {
|
|
148
|
+
kind = "method";
|
|
149
|
+
}
|
|
150
|
+
const body = node.childForFieldName("body");
|
|
151
|
+
return { name, kind, headerEnd: body ? body.startIndex : node.endIndex, hashNode: node };
|
|
152
|
+
}
|
|
153
|
+
// TS: `const foo = (…) => …` / `const foo = function () {}`
|
|
154
|
+
if (ctx.lang !== "python" && node.type === "variable_declarator") {
|
|
155
|
+
const value = node.childForFieldName("value");
|
|
156
|
+
if (value && FUNCTION_VALUE_TYPES.has(value.type)) {
|
|
157
|
+
const name = node.childForFieldName("name")?.text;
|
|
158
|
+
if (!name)
|
|
159
|
+
return null;
|
|
160
|
+
const vbody = value.childForFieldName("body");
|
|
161
|
+
return {
|
|
162
|
+
name,
|
|
163
|
+
kind: "function",
|
|
164
|
+
headerEnd: vbody ? vbody.startIndex : node.endIndex,
|
|
165
|
+
hashNode: node,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return null;
|
|
170
|
+
}
|
|
171
|
+
function heritageEdges(node, classId, ctx) {
|
|
172
|
+
const edges = [];
|
|
173
|
+
if (ctx.lang === "python") {
|
|
174
|
+
const supers = node.childForFieldName("superclasses"); // argument_list
|
|
175
|
+
for (const c of supers?.namedChildren ?? []) {
|
|
176
|
+
if (c.type === "identifier") {
|
|
177
|
+
edges.push({ source: classId, relation: "extends", name: c.text, file: ctx.rel });
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return edges;
|
|
181
|
+
}
|
|
182
|
+
const heritage = node.namedChildren.find((c) => c.type === "class_heritage");
|
|
183
|
+
for (const clause of heritage?.namedChildren ?? []) {
|
|
184
|
+
const relation = clause.type === "implements_clause"
|
|
185
|
+
? "implements"
|
|
186
|
+
: clause.type === "extends_clause"
|
|
187
|
+
? "extends"
|
|
188
|
+
: null;
|
|
189
|
+
if (!relation)
|
|
190
|
+
continue;
|
|
191
|
+
for (const t of clause.namedChildren) {
|
|
192
|
+
if (t.type === "identifier" || t.type === "type_identifier") {
|
|
193
|
+
edges.push({ source: classId, relation, name: t.text, file: ctx.rel });
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return edges;
|
|
198
|
+
}
|
|
199
|
+
function calleeName(node, lang) {
|
|
200
|
+
const fn = node.childForFieldName("function");
|
|
201
|
+
if (!fn)
|
|
202
|
+
return null;
|
|
203
|
+
if (fn.type === "identifier")
|
|
204
|
+
return { name: fn.text, viaMember: false };
|
|
205
|
+
if (lang === "python" && fn.type === "attribute") {
|
|
206
|
+
const a = fn.childForFieldName("attribute") ?? fn.namedChildren.at(-1);
|
|
207
|
+
return a ? { name: a.text, viaMember: true } : null;
|
|
208
|
+
}
|
|
209
|
+
if (lang !== "python" && fn.type === "member_expression") {
|
|
210
|
+
const p = fn.childForFieldName("property") ?? fn.namedChildren.at(-1);
|
|
211
|
+
return p ? { name: p.text, viaMember: true } : null;
|
|
212
|
+
}
|
|
213
|
+
return null;
|
|
214
|
+
}
|
|
215
|
+
function isImport(node) {
|
|
216
|
+
return node.type === "import_statement" || node.type === "import_from_statement";
|
|
217
|
+
}
|
|
218
|
+
function importSpecifier(node, lang) {
|
|
219
|
+
if (lang === "python") {
|
|
220
|
+
const m = node.childForFieldName("module_name") ??
|
|
221
|
+
node.namedChildren.find((c) => c.type === "dotted_name" || c.type === "relative_import");
|
|
222
|
+
return m?.text ?? null;
|
|
223
|
+
}
|
|
224
|
+
const str = node.namedChildren.find((c) => c.type === "string");
|
|
225
|
+
if (!str)
|
|
226
|
+
return null;
|
|
227
|
+
const frag = str.namedChildren.find((c) => c.type === "string_fragment");
|
|
228
|
+
return frag?.text ?? str.text.replace(/^['"]|['"]$/g, "");
|
|
229
|
+
}
|
|
230
|
+
/** Signature = the definition header, whitespace-collapsed, trailing punctuation stripped. */
|
|
231
|
+
function clean(raw) {
|
|
232
|
+
const sig = raw
|
|
233
|
+
.replace(/\s+/g, " ")
|
|
234
|
+
.trim()
|
|
235
|
+
.replace(/(=>|[{:=])\s*$/, "")
|
|
236
|
+
.trim();
|
|
237
|
+
return sig || null;
|
|
238
|
+
}
|
|
239
|
+
/** TS: a definition is exported if any ancestor is an `export` statement. */
|
|
240
|
+
function tsExported(node) {
|
|
241
|
+
let p = node.parent;
|
|
242
|
+
while (p) {
|
|
243
|
+
if (p.type === "export_statement")
|
|
244
|
+
return true;
|
|
245
|
+
p = p.parent;
|
|
246
|
+
}
|
|
247
|
+
return false;
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=extract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/graph/extract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/graph/resolve.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,MAAM,EAAQ,MAAM,EAAY,MAAM,YAAY,CAAC;AACjE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAI5C,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,CAsC3E"}
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/graph/resolve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `graph.json` — the code graph schema (v1).
|
|
3
|
+
*
|
|
4
|
+
* One node per definition (file, class, function, method, interface, type, enum),
|
|
5
|
+
* wired by edges (contains, imports, calls, ...). Field names follow the LSP /
|
|
6
|
+
* SCIP vocabulary (`name`, `kind`, ...) rather than any one tool's conventions.
|
|
7
|
+
*
|
|
8
|
+
* Two tiers of data live on a node:
|
|
9
|
+
* - Tier-1 (deterministic, $0): everything from the AST. Rebuilt on every run.
|
|
10
|
+
* - Tier-2 (one LLM call, cached on `body_hash`): `summary` + `crux`.
|
|
11
|
+
* M1 populates Tier-1 only; Tier-2 fields ship as `pending`/null.
|
|
12
|
+
*/
|
|
13
|
+
/** What a node represents. LSP SymbolKind, narrowed to what TS + Python produce. */
|
|
14
|
+
export type Kind = "file" | "class" | "function" | "method" | "interface" | "type" | "enum";
|
|
15
|
+
/** How confident we are an edge is true. */
|
|
16
|
+
export type Confidence = "extracted" | "inferred";
|
|
17
|
+
/** Whether the LLM meaning-layer has been computed for a node. */
|
|
18
|
+
export type SummaryState = "pending" | "ready" | "stale";
|
|
19
|
+
/** The LLM-chosen business-logic excerpt. `code` is the source of truth; `span`
|
|
20
|
+
* is a best-effort pointer that may drift and is never used to re-slice. */
|
|
21
|
+
export interface Crux {
|
|
22
|
+
code: string;
|
|
23
|
+
span: string;
|
|
24
|
+
}
|
|
25
|
+
export interface NodeV1 {
|
|
26
|
+
id: string;
|
|
27
|
+
name: string;
|
|
28
|
+
kind: Kind;
|
|
29
|
+
path: string;
|
|
30
|
+
span: string;
|
|
31
|
+
signature: string | null;
|
|
32
|
+
exported: boolean;
|
|
33
|
+
origin: "ast";
|
|
34
|
+
body_hash: string;
|
|
35
|
+
summary_state: SummaryState;
|
|
36
|
+
summary: string | null;
|
|
37
|
+
crux: Crux | null;
|
|
38
|
+
}
|
|
39
|
+
export type Relation = "contains" | "calls" | "imports" | "references" | "implements" | "extends";
|
|
40
|
+
export interface EdgeV1 {
|
|
41
|
+
source: string;
|
|
42
|
+
target: string;
|
|
43
|
+
relation: Relation;
|
|
44
|
+
confidence: Confidence;
|
|
45
|
+
}
|
|
46
|
+
export interface GraphV1 {
|
|
47
|
+
meta: {
|
|
48
|
+
version: 1;
|
|
49
|
+
nodeCount: number;
|
|
50
|
+
edgeCount: number;
|
|
51
|
+
languages: string[];
|
|
52
|
+
};
|
|
53
|
+
nodes: NodeV1[];
|
|
54
|
+
edges: EdgeV1[];
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/graph/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,oFAAoF;AACpF,MAAM,MAAM,IAAI,GACZ,MAAM,GACN,OAAO,GACP,UAAU,GACV,QAAQ,GACR,WAAW,GACX,MAAM,GACN,MAAM,CAAC;AAEX,4CAA4C;AAC5C,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,UAAU,CAAC;AAElD,kEAAkE;AAClE,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAEzD;4EAC4E;AAC5E,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,MAAM;IAErB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,IAAI,CAAC;IAGX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,KAAK,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAGlB,aAAa,EAAE,YAAY,CAAC;IAC5B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;CACnB;AAED,MAAM,MAAM,QAAQ,GAChB,UAAU,GACV,OAAO,GACP,SAAS,GACT,YAAY,GACZ,YAAY,GACZ,SAAS,CAAC;AAEd,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE;QACJ,OAAO,EAAE,CAAC,CAAC;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;IACF,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `graph.json` — the code graph schema (v1).
|
|
3
|
+
*
|
|
4
|
+
* One node per definition (file, class, function, method, interface, type, enum),
|
|
5
|
+
* wired by edges (contains, imports, calls, ...). Field names follow the LSP /
|
|
6
|
+
* SCIP vocabulary (`name`, `kind`, ...) rather than any one tool's conventions.
|
|
7
|
+
*
|
|
8
|
+
* Two tiers of data live on a node:
|
|
9
|
+
* - Tier-1 (deterministic, $0): everything from the AST. Rebuilt on every run.
|
|
10
|
+
* - Tier-2 (one LLM call, cached on `body_hash`): `summary` + `crux`.
|
|
11
|
+
* M1 populates Tier-1 only; Tier-2 fields ship as `pending`/null.
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/graph/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { GraphV1 } from "./types.js";
|
|
2
|
+
export declare const GRAPH_FILE = "graph.json";
|
|
3
|
+
/**
|
|
4
|
+
* Read an existing graph.json for use as the Tier-2 cache. Returns null when the
|
|
5
|
+
* file is absent or unparseable (a fresh build, or a corrupt file we'll replace).
|
|
6
|
+
*/
|
|
7
|
+
export declare function readGraph(path: string): GraphV1 | null;
|
|
8
|
+
export declare function writeGraph(graph: GraphV1, outDir: string): string;
|
|
9
|
+
//# sourceMappingURL=write.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/graph/write.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAU,OAAO,EAAE,MAAM,YAAY,CAAC;AAElD,eAAO,MAAM,UAAU,eAAe,CAAC;AAEvC;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAMtD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAUjE"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serialize a {@link GraphV1} to `<contextDir>/graph.json`.
|
|
3
|
+
*
|
|
4
|
+
* Output is sorted (nodes by id, edges by source/relation/target) and carries no
|
|
5
|
+
* timestamps, so rebuilding an unchanged repo produces a byte-identical file and
|
|
6
|
+
* git diffs stay minimal.
|
|
7
|
+
*/
|
|
8
|
+
import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
9
|
+
import { join } from "node:path";
|
|
10
|
+
export const GRAPH_FILE = "graph.json";
|
|
11
|
+
/**
|
|
12
|
+
* Read an existing graph.json for use as the Tier-2 cache. Returns null when the
|
|
13
|
+
* file is absent or unparseable (a fresh build, or a corrupt file we'll replace).
|
|
14
|
+
*/
|
|
15
|
+
export function readGraph(path) {
|
|
16
|
+
try {
|
|
17
|
+
return JSON.parse(readFileSync(path, "utf8"));
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export function writeGraph(graph, outDir) {
|
|
24
|
+
const sorted = {
|
|
25
|
+
...graph,
|
|
26
|
+
nodes: [...graph.nodes].sort((a, b) => a.id.localeCompare(b.id)),
|
|
27
|
+
edges: [...graph.edges].sort(edgeOrder),
|
|
28
|
+
};
|
|
29
|
+
mkdirSync(outDir, { recursive: true });
|
|
30
|
+
const path = join(outDir, GRAPH_FILE);
|
|
31
|
+
writeFileSync(path, JSON.stringify(sorted, null, 2) + "\n");
|
|
32
|
+
return path;
|
|
33
|
+
}
|
|
34
|
+
function edgeOrder(a, b) {
|
|
35
|
+
return (a.source.localeCompare(b.source) ||
|
|
36
|
+
a.relation.localeCompare(b.relation) ||
|
|
37
|
+
a.target.localeCompare(b.target));
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=write.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/graph/write.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,MAAM,CAAC,MAAM,UAAU,GAAG,YAAY,CAAC;AAEvC;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAY,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAc,EAAE,MAAc;IACvD,MAAM,MAAM,GAAY;QACtB,GAAG,KAAK;QACR,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAChE,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;KACxC,CAAC;IACF,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACtC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC5D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,SAAS,CAAC,CAAS,EAAE,CAAS;IACrC,OAAO,CACL,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC;QAChC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC;QACpC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CACjC,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Graft — public API.
|
|
3
|
+
*
|
|
4
|
+
* The graph is a folder of linked markdown files (`.context/`) committed to the
|
|
5
|
+
* repo. Build it from code, then check it stays in sync.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* import { Graft } from "@nanonets/graft";
|
|
10
|
+
*
|
|
11
|
+
* const engine = new Graft();
|
|
12
|
+
* await engine.init("."); // writes .context/*.md + manifest.json
|
|
13
|
+
*
|
|
14
|
+
* const result = engine.check("."); // { ok: boolean, ...drift }
|
|
15
|
+
* if (!result.ok) process.exitCode = 1;
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export { Graft, CODE_EXTENSIONS } from "./engine.js";
|
|
19
|
+
export type { InitOptions, CheckRunOptions, BuildResult, BuildProgress, CheckResult } from "./engine.js";
|
|
20
|
+
export { buildContext } from "./context/build.js";
|
|
21
|
+
export type { BuildOptions } from "./context/build.js";
|
|
22
|
+
export { checkContext, formatCheckReport } from "./context/check.js";
|
|
23
|
+
export type { CheckOptions } from "./context/check.js";
|
|
24
|
+
export { checkGraph, formatGraphCheckReport } from "./graph/check.js";
|
|
25
|
+
export type { GraphCheckResult, GraphCheckOptions } from "./graph/check.js";
|
|
26
|
+
export type { ContextNode, NodeLink, SourceRef, Manifest } from "./context/node-file.js";
|
|
27
|
+
export type { EngineConfig, ResolvedConfig } from "./ai/providers.js";
|
|
28
|
+
export { resolveConfig, DEFAULTS } from "./ai/providers.js";
|
|
29
|
+
export { OpenRouterSynthesizer } from "./ai/synthesize.js";
|
|
30
|
+
export type { Synthesizer, SynthNode, SynthLink, FileSummary } from "./ai/synthesize.js";
|
|
31
|
+
export { OpenRouterSummarizer } from "./ai/summarize.js";
|
|
32
|
+
export type { Summarizer } from "./ai/summarize.js";
|
|
33
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACrD,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzG,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACrE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AACtE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC5E,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEzF,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACzF,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Graft — public API.
|
|
3
|
+
*
|
|
4
|
+
* The graph is a folder of linked markdown files (`.context/`) committed to the
|
|
5
|
+
* repo. Build it from code, then check it stays in sync.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* import { Graft } from "@nanonets/graft";
|
|
10
|
+
*
|
|
11
|
+
* const engine = new Graft();
|
|
12
|
+
* await engine.init("."); // writes .context/*.md + manifest.json
|
|
13
|
+
*
|
|
14
|
+
* const result = engine.check("."); // { ok: boolean, ...drift }
|
|
15
|
+
* if (!result.ok) process.exitCode = 1;
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export { Graft, CODE_EXTENSIONS } from "./engine.js";
|
|
19
|
+
export { buildContext } from "./context/build.js";
|
|
20
|
+
export { checkContext, formatCheckReport } from "./context/check.js";
|
|
21
|
+
export { checkGraph, formatGraphCheckReport } from "./graph/check.js";
|
|
22
|
+
export { resolveConfig, DEFAULTS } from "./ai/providers.js";
|
|
23
|
+
// Providers, for advanced/custom setups.
|
|
24
|
+
export { OpenRouterSynthesizer } from "./ai/synthesize.js";
|
|
25
|
+
export { OpenRouterSummarizer } from "./ai/summarize.js";
|
|
26
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGrD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAErE,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAKtE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE5D,yCAAyC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Directories that are dependency/build output, never source. */
|
|
2
|
+
export declare const SKIP_DIRS: Set<string>;
|
|
3
|
+
/** Files above this size are generated/vendored in practice, not hand-written code. */
|
|
4
|
+
export declare const MAX_FILE_BYTES = 1000000;
|
|
5
|
+
/**
|
|
6
|
+
* Recursively list all files under a directory. Skips dot-directories,
|
|
7
|
+
* dependency/build directories (node_modules, dist, …), and files over 1 MB.
|
|
8
|
+
*/
|
|
9
|
+
export declare function walkDir(dir: string): string[];
|
|
10
|
+
//# sourceMappingURL=fs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/ingest/fs.ts"],"names":[],"mappings":"AAMA,kEAAkE;AAClE,eAAO,MAAM,SAAS,aAUpB,CAAC;AAEH,uFAAuF;AACvF,eAAO,MAAM,cAAc,UAAY,CAAC;AAExC;;;GAGG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAkB7C"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filesystem walking used by `init`/`check` to enumerate a repo's source files.
|
|
3
|
+
*/
|
|
4
|
+
import { readdirSync, statSync } from "node:fs";
|
|
5
|
+
import { join } from "node:path";
|
|
6
|
+
/** Directories that are dependency/build output, never source. */
|
|
7
|
+
export const SKIP_DIRS = new Set([
|
|
8
|
+
"node_modules",
|
|
9
|
+
"dist",
|
|
10
|
+
"build",
|
|
11
|
+
"out",
|
|
12
|
+
"target",
|
|
13
|
+
"vendor",
|
|
14
|
+
"coverage",
|
|
15
|
+
"__pycache__",
|
|
16
|
+
"venv",
|
|
17
|
+
]);
|
|
18
|
+
/** Files above this size are generated/vendored in practice, not hand-written code. */
|
|
19
|
+
export const MAX_FILE_BYTES = 1_000_000;
|
|
20
|
+
/**
|
|
21
|
+
* Recursively list all files under a directory. Skips dot-directories,
|
|
22
|
+
* dependency/build directories (node_modules, dist, …), and files over 1 MB.
|
|
23
|
+
*/
|
|
24
|
+
export function walkDir(dir) {
|
|
25
|
+
const out = [];
|
|
26
|
+
for (const entry of readdirSync(dir, { withFileTypes: true })) {
|
|
27
|
+
if (entry.name.startsWith("."))
|
|
28
|
+
continue;
|
|
29
|
+
const full = join(dir, entry.name);
|
|
30
|
+
if (entry.isDirectory()) {
|
|
31
|
+
if (SKIP_DIRS.has(entry.name))
|
|
32
|
+
continue;
|
|
33
|
+
out.push(...walkDir(full));
|
|
34
|
+
}
|
|
35
|
+
else if (entry.isFile()) {
|
|
36
|
+
try {
|
|
37
|
+
if (statSync(full).size > MAX_FILE_BYTES)
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
out.push(full);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return out;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=fs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/ingest/fs.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,kEAAkE;AAClE,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC;IAC/B,cAAc;IACd,MAAM;IACN,OAAO;IACP,KAAK;IACL,QAAQ;IACR,QAAQ;IACR,UAAU;IACV,aAAa;IACb,MAAM;CACP,CAAC,CAAC;AAEH,uFAAuF;AACvF,MAAM,CAAC,MAAM,cAAc,GAAG,SAAS,CAAC;AAExC;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,GAAW;IACjC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC9D,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE,SAAS;YACxC,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7B,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1B,IAAI,CAAC;gBACH,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,cAAc;oBAAE,SAAS;YACrD,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Generate a random unique id with a short type prefix, e.g. "node_ab12…". */
|
|
2
|
+
export declare function newId(prefix: string): string;
|
|
3
|
+
/** Stable content hash (sha256, hex) used for document dedup. */
|
|
4
|
+
export declare function contentHash(input: string): string;
|
|
5
|
+
/** Normalize a name/alias for case- and whitespace-insensitive matching. */
|
|
6
|
+
export declare function normalizeName(name: string): string;
|
|
7
|
+
//# sourceMappingURL=id.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"id.d.ts","sourceRoot":"","sources":["../../src/util/id.ts"],"names":[],"mappings":"AAEA,+EAA+E;AAC/E,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,iEAAiE;AACjE,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,4EAA4E;AAC5E,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD"}
|
package/dist/util/id.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { randomUUID, createHash } from "node:crypto";
|
|
2
|
+
/** Generate a random unique id with a short type prefix, e.g. "node_ab12…". */
|
|
3
|
+
export function newId(prefix) {
|
|
4
|
+
return `${prefix}_${randomUUID().replace(/-/g, "").slice(0, 20)}`;
|
|
5
|
+
}
|
|
6
|
+
/** Stable content hash (sha256, hex) used for document dedup. */
|
|
7
|
+
export function contentHash(input) {
|
|
8
|
+
return createHash("sha256").update(input).digest("hex");
|
|
9
|
+
}
|
|
10
|
+
/** Normalize a name/alias for case- and whitespace-insensitive matching. */
|
|
11
|
+
export function normalizeName(name) {
|
|
12
|
+
return name.trim().toLowerCase().replace(/\s+/g, " ");
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"id.js","sourceRoot":"","sources":["../../src/util/id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAErD,+EAA+E;AAC/E,MAAM,UAAU,KAAK,CAAC,MAAc;IAClC,OAAO,GAAG,MAAM,IAAI,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AACpE,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1D,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACxD,CAAC"}
|