ai-spector 0.2.9 → 0.3.1
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/config/load.d.ts +1 -0
- package/dist/config/load.d.ts.map +1 -1
- package/dist/config/load.js +8 -0
- package/dist/config/load.js.map +1 -1
- package/dist/graph/defaults.d.ts +2 -0
- package/dist/graph/defaults.d.ts.map +1 -1
- package/dist/graph/defaults.js +4 -0
- package/dist/graph/defaults.js.map +1 -1
- package/dist/graph/detail-sections.d.ts +10 -0
- package/dist/graph/detail-sections.d.ts.map +1 -1
- package/dist/graph/detail-sections.js +45 -1
- package/dist/graph/detail-sections.js.map +1 -1
- package/dist/graph/doc-extract.d.ts +24 -7
- package/dist/graph/doc-extract.d.ts.map +1 -1
- package/dist/graph/doc-extract.js +167 -79
- package/dist/graph/doc-extract.js.map +1 -1
- package/dist/graph/merge.js +2 -2
- package/dist/graph/merge.js.map +1 -1
- package/dist/index/doc-semantics.d.ts.map +1 -1
- package/dist/index/doc-semantics.js +13 -5
- package/dist/index/doc-semantics.js.map +1 -1
- package/dist/registry/build.d.ts +3 -1
- package/dist/registry/build.d.ts.map +1 -1
- package/dist/registry/build.js +31 -6
- package/dist/registry/build.js.map +1 -1
- package/dist/registry/structure-patch.d.ts +6 -0
- package/dist/registry/structure-patch.d.ts.map +1 -0
- package/dist/registry/structure-patch.js +49 -0
- package/dist/registry/structure-patch.js.map +1 -0
- package/documents-basic-design.json +22 -0
- package/package.json +2 -1
- package/scaffold/.ai-spector/.docflow/config/dag.basic-design.graph-seeds.json +11 -7
- package/scaffold/.ai-spector/.docflow/config/dag.basic-design.json +1 -1
- package/scaffold/.cursor/commands/_cli-failures.md +5 -0
- package/scaffold/.cursor/commands/_generate-graph.md +10 -2
- package/scaffold/.cursor/commands/generate-basic-design.md +27 -17
- package/templates/basic_design/detail-api-template.md +2 -2
- package/templates/basic_design/detail-screen-template.md +2 -2
package/dist/config/load.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAKnE,mEAAmE;AACnE,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,sDAAsD;AACtD,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,eAAe,CAAC,KAAK,SAAgB,GAAG,MAAM,CAkB7D;AAgBD,wBAAsB,iBAAiB,CACrC,IAAI,SAAoB,GACvB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,aAAa,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAYtE;AAED,mFAAmF;AACnF,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,aAAa,GACpB,MAAM,CAER;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,4BAA4B,IAAI,MAAM,CAErD;AAED,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAsB,qBAAqB,IAAI,OAAO,CAAC;IACrD,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,iBAAiB,CAAC;CAC7B,CAAC,CASD"}
|
|
1
|
+
{"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAKnE,mEAAmE;AACnE,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,sDAAsD;AACtD,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,eAAe,CAAC,KAAK,SAAgB,GAAG,MAAM,CAkB7D;AAgBD,wBAAsB,iBAAiB,CACrC,IAAI,SAAoB,GACvB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,aAAa,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAYtE;AAED,mFAAmF;AACnF,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,aAAa,GACpB,MAAM,CAER;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,4BAA4B,IAAI,MAAM,CAErD;AAED,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAsB,qBAAqB,IAAI,OAAO,CAAC;IACrD,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,iBAAiB,CAAC;CAC7B,CAAC,CASD;AAED,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAS9E"}
|
package/dist/config/load.js
CHANGED
|
@@ -80,4 +80,12 @@ export async function loadDocumentsManifest() {
|
|
|
80
80
|
}
|
|
81
81
|
return { bundleRoot, manifest };
|
|
82
82
|
}
|
|
83
|
+
export async function loadBasicDesignListManifest() {
|
|
84
|
+
const bundleRoot = packageBundleRoot();
|
|
85
|
+
const manifest = await readJson(join(bundleRoot, "documents-basic-design.json"));
|
|
86
|
+
if (!manifest.templatesDir || !Array.isArray(manifest.documents)) {
|
|
87
|
+
throw new Error(`Invalid documents-basic-design.json in ${bundleRoot}`);
|
|
88
|
+
}
|
|
89
|
+
return manifest;
|
|
90
|
+
}
|
|
83
91
|
//# sourceMappingURL=load.js.map
|
package/dist/config/load.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"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"}
|
package/dist/graph/defaults.d.ts
CHANGED
|
@@ -13,6 +13,8 @@ export declare const DEFAULT_BD_LIST_DOC: {
|
|
|
13
13
|
readonly screenList: "doc.bd.list-screen";
|
|
14
14
|
readonly dbDesign: "doc.bd.db-design";
|
|
15
15
|
};
|
|
16
|
+
export declare const BASIC_DESIGN_LIST_DOCUMENT_IDS: ReadonlySet<string>;
|
|
17
|
+
export declare function isBasicDesignListChapterDocumentId(id: string): boolean;
|
|
16
18
|
/** Template document ids for per-domain basic-design detail (DAG / graph-seeds). */
|
|
17
19
|
export declare const PER_DOMAIN_TEMPLATE_DOC_BD: {
|
|
18
20
|
readonly api: "doc.bd.detail-api";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/graph/defaults.ts"],"names":[],"mappings":"AAAA,sFAAsF;AACtF,eAAO,MAAM,iBAAiB;;;;;;;CAOpB,CAAC;AAEX,+EAA+E;AAC/E,eAAO,MAAM,mBAAmB;;;;CAItB,CAAC;AAEX,oFAAoF;AACpF,eAAO,MAAM,0BAA0B;;;CAG7B,CAAC"}
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/graph/defaults.ts"],"names":[],"mappings":"AAAA,sFAAsF;AACtF,eAAO,MAAM,iBAAiB;;;;;;;CAOpB,CAAC;AAEX,+EAA+E;AAC/E,eAAO,MAAM,mBAAmB;;;;CAItB,CAAC;AAEX,eAAO,MAAM,8BAA8B,EAAE,WAAW,CAAC,MAAM,CAE9D,CAAC;AAEF,wBAAgB,kCAAkC,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEtE;AAED,oFAAoF;AACpF,eAAO,MAAM,0BAA0B;;;CAG7B,CAAC"}
|
package/dist/graph/defaults.js
CHANGED
|
@@ -13,6 +13,10 @@ export const DEFAULT_BD_LIST_DOC = {
|
|
|
13
13
|
screenList: "doc.bd.list-screen",
|
|
14
14
|
dbDesign: "doc.bd.db-design",
|
|
15
15
|
};
|
|
16
|
+
export const BASIC_DESIGN_LIST_DOCUMENT_IDS = new Set(Object.values(DEFAULT_BD_LIST_DOC));
|
|
17
|
+
export function isBasicDesignListChapterDocumentId(id) {
|
|
18
|
+
return BASIC_DESIGN_LIST_DOCUMENT_IDS.has(id);
|
|
19
|
+
}
|
|
16
20
|
/** Template document ids for per-domain basic-design detail (DAG / graph-seeds). */
|
|
17
21
|
export const PER_DOMAIN_TEMPLATE_DOC_BD = {
|
|
18
22
|
api: "doc.bd.detail-api",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/graph/defaults.ts"],"names":[],"mappings":"AAAA,sFAAsF;AACtF,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,KAAK,EAAE,wEAAwE;IAC/E,OAAO,EAAE,2CAA2C;IACpD,OAAO,EAAE,2DAA2D;IACpE,qBAAqB,EAAE,2DAA2D;IAClF,GAAG,EAAE,oFAAoF;IACzF,UAAU,EAAE,wDAAwD;CAC5D,CAAC;AAEX,+EAA+E;AAC/E,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,OAAO,EAAE,iBAAiB;IAC1B,UAAU,EAAE,oBAAoB;IAChC,QAAQ,EAAE,kBAAkB;CACpB,CAAC;AAEX,oFAAoF;AACpF,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,GAAG,EAAE,mBAAmB;IACxB,MAAM,EAAE,sBAAsB;CACtB,CAAC"}
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/graph/defaults.ts"],"names":[],"mappings":"AAAA,sFAAsF;AACtF,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,KAAK,EAAE,wEAAwE;IAC/E,OAAO,EAAE,2CAA2C;IACpD,OAAO,EAAE,2DAA2D;IACpE,qBAAqB,EAAE,2DAA2D;IAClF,GAAG,EAAE,oFAAoF;IACzF,UAAU,EAAE,wDAAwD;CAC5D,CAAC;AAEX,+EAA+E;AAC/E,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,OAAO,EAAE,iBAAiB;IAC1B,UAAU,EAAE,oBAAoB;IAChC,QAAQ,EAAE,kBAAkB;CACpB,CAAC;AAEX,MAAM,CAAC,MAAM,8BAA8B,GAAwB,IAAI,GAAG,CACxE,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CACnC,CAAC;AAEF,MAAM,UAAU,kCAAkC,CAAC,EAAU;IAC3D,OAAO,8BAA8B,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,oFAAoF;AACpF,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,GAAG,EAAE,mBAAmB;IACxB,MAAM,EAAE,sBAAsB;CACtB,CAAC"}
|
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
import type { GraphNode } from "../types.js";
|
|
2
2
|
import type { ExtractPatch } from "./knowledge.js";
|
|
3
|
+
import { BASIC_DESIGN_LIST_DOCUMENT_IDS } from "./defaults.js";
|
|
3
4
|
export interface ParsedDetailSection {
|
|
4
5
|
id: string;
|
|
5
6
|
heading: string;
|
|
6
7
|
level: number;
|
|
7
8
|
order: number;
|
|
8
9
|
}
|
|
10
|
+
/** List-chapter basic-design documents (api-list, screen map, db-design). */
|
|
11
|
+
export declare function isBasicDesignListChapterDocument(node: GraphNode): boolean;
|
|
12
|
+
/** Whether doc-extract may upsert `section` nodes under this document parent. */
|
|
13
|
+
export declare function allowsSectionUpsertParent(parentDoc: GraphNode): boolean;
|
|
9
14
|
/** Per-domain detail markdown instance (not a template document from bootstrap). */
|
|
10
15
|
export declare function isPerDomainInstanceDocument(node: GraphNode): boolean;
|
|
11
16
|
/** First paragraph of prose after a heading (skips fields, blockquotes, tables). */
|
|
@@ -15,4 +20,9 @@ export declare function sectionSnippetsFromContent(content: string, sections: Pa
|
|
|
15
20
|
/** Parse `##`–`####` headings and optional `<!-- section:sec.... -->` anchors from detail markdown. */
|
|
16
21
|
export declare function parseDetailSections(content: string, documentId: string): ParsedDetailSection[];
|
|
17
22
|
export declare function detailSectionsToPatch(documentId: string, sections: ParsedDetailSection[], content?: string): ExtractPatch;
|
|
23
|
+
/** Map list-chapter markdown paths to graph document ids (includes common wrong paths). */
|
|
24
|
+
export declare function basicDesignListChapterDocumentId(relativePath: string): string | null;
|
|
25
|
+
/** Parse headings from generated list-chapter basic-design files into section nodes. */
|
|
26
|
+
export declare function basicDesignListChapterFileToPatch(relativePath: string, content: string): ExtractPatch;
|
|
27
|
+
export { BASIC_DESIGN_LIST_DOCUMENT_IDS };
|
|
18
28
|
//# sourceMappingURL=detail-sections.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detail-sections.d.ts","sourceRoot":"","sources":["../../src/graph/detail-sections.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,SAAS,EAAE,MAAM,aAAa,CAAC;AAExD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"detail-sections.d.ts","sourceRoot":"","sources":["../../src/graph/detail-sections.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,SAAS,EAAE,MAAM,aAAa,CAAC;AAExD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EACL,8BAA8B,EAG/B,MAAM,eAAe,CAAC;AASvB,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAKD,6EAA6E;AAC7E,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAEzE;AAED,iFAAiF;AACjF,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAKvE;AAED,oFAAoF;AACpF,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAmBpE;AAsCD,oFAAoF;AACpF,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CA+CxF;AAED,4EAA4E;AAC5E,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,mBAAmB,EAAE,GAC9B,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CASrB;AAED,uGAAuG;AACvG,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,mBAAmB,EAAE,CA2BvB;AAED,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,mBAAmB,EAAE,EAC/B,OAAO,CAAC,EAAE,MAAM,GACf,YAAY,CAoCd;AAMD,2FAA2F;AAC3F,wBAAgB,gCAAgC,CAC9C,YAAY,EAAE,MAAM,GACnB,MAAM,GAAG,IAAI,CAgBf;AAED,wFAAwF;AACxF,wBAAgB,iCAAiC,CAC/C,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,GACd,YAAY,CAUd;AAED,OAAO,EAAE,8BAA8B,EAAE,CAAC"}
|
|
@@ -1,11 +1,23 @@
|
|
|
1
1
|
import { sectionIdFromHeading } from "../registry/slug.js";
|
|
2
|
+
import { BASIC_DESIGN_LIST_DOCUMENT_IDS, DEFAULT_BD_LIST_DOC, isBasicDesignListChapterDocumentId, } from "./defaults.js";
|
|
2
3
|
const HEADING_RE = /^(#{2,4})\s+(.+)$/;
|
|
3
4
|
const SECTION_ANCHOR_RE = /<!--\s*section:\s*([^\s>]+)\s*-->/;
|
|
4
5
|
const BLOCKQUOTE_LINE_RE = /^\s*>/;
|
|
5
6
|
const FIELD_LINE_RE = /^\s*\*\*[^*]+:\*\*/;
|
|
6
7
|
const TABLE_LINE_RE = /^\s*\|/;
|
|
7
8
|
const HR_RE = /^---+\s*$/;
|
|
8
|
-
const BD_INSTANCE_PATH_RE = /docs\/basic-design\/(?:api\/|screens\/
|
|
9
|
+
const BD_INSTANCE_PATH_RE = /docs\/basic-design\/(?:api\/|screens\/)/i;
|
|
10
|
+
/** List-chapter basic-design documents (api-list, screen map, db-design). */
|
|
11
|
+
export function isBasicDesignListChapterDocument(node) {
|
|
12
|
+
return node.type === "document" && isBasicDesignListChapterDocumentId(node.id);
|
|
13
|
+
}
|
|
14
|
+
/** Whether doc-extract may upsert `section` nodes under this document parent. */
|
|
15
|
+
export function allowsSectionUpsertParent(parentDoc) {
|
|
16
|
+
if (isPerDomainInstanceDocument(parentDoc)) {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
return isBasicDesignListChapterDocument(parentDoc);
|
|
20
|
+
}
|
|
9
21
|
/** Per-domain detail markdown instance (not a template document from bootstrap). */
|
|
10
22
|
export function isPerDomainInstanceDocument(node) {
|
|
11
23
|
if (node.type !== "document" || node.outputPattern) {
|
|
@@ -173,4 +185,36 @@ export function detailSectionsToPatch(documentId, sections, content) {
|
|
|
173
185
|
}
|
|
174
186
|
return { version: 1, nodes, edges };
|
|
175
187
|
}
|
|
188
|
+
function normalizeDocPath(relativePath) {
|
|
189
|
+
return relativePath.replace(/\\/g, "/").toLowerCase();
|
|
190
|
+
}
|
|
191
|
+
/** Map list-chapter markdown paths to graph document ids (includes common wrong paths). */
|
|
192
|
+
export function basicDesignListChapterDocumentId(relativePath) {
|
|
193
|
+
const p = normalizeDocPath(relativePath);
|
|
194
|
+
if (p === "docs/basic-design/api-list.md" || p.endsWith("/api-list.md")) {
|
|
195
|
+
return DEFAULT_BD_LIST_DOC.apiList;
|
|
196
|
+
}
|
|
197
|
+
if (p === "docs/basic-design/db-design.md" || p.endsWith("/db-design.md")) {
|
|
198
|
+
return DEFAULT_BD_LIST_DOC.dbDesign;
|
|
199
|
+
}
|
|
200
|
+
if (p === "docs/basic-design/screens/list-screens.md" ||
|
|
201
|
+
p === "docs/basic-design/list-screens.md" ||
|
|
202
|
+
p.endsWith("/list-screens.md")) {
|
|
203
|
+
return DEFAULT_BD_LIST_DOC.screenList;
|
|
204
|
+
}
|
|
205
|
+
return null;
|
|
206
|
+
}
|
|
207
|
+
/** Parse headings from generated list-chapter basic-design files into section nodes. */
|
|
208
|
+
export function basicDesignListChapterFileToPatch(relativePath, content) {
|
|
209
|
+
const documentId = basicDesignListChapterDocumentId(relativePath);
|
|
210
|
+
if (!documentId) {
|
|
211
|
+
return { version: 1, nodes: [], edges: [] };
|
|
212
|
+
}
|
|
213
|
+
const sections = parseDetailSections(content, documentId);
|
|
214
|
+
if (sections.length === 0) {
|
|
215
|
+
return { version: 1, nodes: [], edges: [] };
|
|
216
|
+
}
|
|
217
|
+
return detailSectionsToPatch(documentId, sections, content);
|
|
218
|
+
}
|
|
219
|
+
export { BASIC_DESIGN_LIST_DOCUMENT_IDS };
|
|
176
220
|
//# sourceMappingURL=detail-sections.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detail-sections.js","sourceRoot":"","sources":["../../src/graph/detail-sections.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"detail-sections.js","sourceRoot":"","sources":["../../src/graph/detail-sections.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { GraphNode } from "../types.js";
|
|
2
|
+
import type { InMemoryGraph } from "./InMemoryGraph.js";
|
|
2
3
|
import type { ExtractPatch } from "./knowledge.js";
|
|
3
4
|
export interface DocExtractEntry {
|
|
4
5
|
relativePath: string;
|
|
@@ -25,10 +26,16 @@ export type DetailFileKind = "useCaseDetail" | "featureDetail";
|
|
|
25
26
|
export type BasicDesignDetailKind = "apiDetail" | "screenDetail";
|
|
26
27
|
/** Classify markdown under docs/srs as list chapter vs per-domain detail file. */
|
|
27
28
|
export declare function classifySrsDetailFile(relativePath: string): DetailFileKind | null;
|
|
28
|
-
/** Classify markdown under docs/basic-design as list chapter vs per-
|
|
29
|
+
/** Classify markdown under docs/basic-design as list chapter vs per-endpoint/per-screen detail. */
|
|
29
30
|
export declare function classifyBasicDesignDetailFile(relativePath: string): BasicDesignDetailKind | null;
|
|
30
31
|
export declare function documentIdForDomainDetail(kind: DetailFileKind, domainId: string): string;
|
|
31
|
-
export declare function documentIdForBasicDesignDetail(kind: BasicDesignDetailKind,
|
|
32
|
+
export declare function documentIdForBasicDesignDetail(kind: BasicDesignDetailKind, relativePath: string): string;
|
|
33
|
+
export interface BasicDesignDetailMeta {
|
|
34
|
+
title: string;
|
|
35
|
+
featureIds: string[];
|
|
36
|
+
}
|
|
37
|
+
/** Title and optional related features from per-endpoint / per-screen detail markdown. */
|
|
38
|
+
export declare function extractBasicDesignDetailMeta(content: string, kind: BasicDesignDetailKind, relativePath: string): BasicDesignDetailMeta;
|
|
32
39
|
export interface DetailDomainMeta {
|
|
33
40
|
title?: string;
|
|
34
41
|
description?: string;
|
|
@@ -56,14 +63,24 @@ interface ParsedDomain {
|
|
|
56
63
|
}
|
|
57
64
|
export declare function extractDomainFromMarkdown(content: string, relativePath: string): ParsedDomain;
|
|
58
65
|
export declare function parsedDomainToPatch(parsed: ParsedDomain, relativePath: string): ExtractPatch;
|
|
59
|
-
/** Document nodes + sections for per-UC/F SRS or per-
|
|
60
|
-
export declare function detailFileToPatch(relativePath: string, content: string): ExtractPatch;
|
|
66
|
+
/** Document nodes + sections for per-UC/F SRS or per-endpoint/per-screen basic-design files. */
|
|
67
|
+
export declare function detailFileToPatch(relativePath: string, content: string, options?: BuildDocExtractPatchOptions): ExtractPatch;
|
|
61
68
|
export declare function mergeParsedDomains(domains: ParsedDomain[]): ParsedDomain;
|
|
62
|
-
/**
|
|
69
|
+
/** Per-domain template shells (outputPattern — no section coverage required). */
|
|
70
|
+
export declare function basicDesignPerDomainTemplateNodes(): GraphNode[];
|
|
71
|
+
/** @deprecated Prefer {@link basicDesignAnchorStructurePatch} — documents only, no sections. */
|
|
63
72
|
export declare function basicDesignAnchorDocumentNodes(): GraphNode[];
|
|
64
|
-
|
|
73
|
+
/** True when any basic-design list chapter document has no child sections in the graph. */
|
|
74
|
+
export declare function basicDesignListChaptersNeedSections(graph: InMemoryGraph): boolean;
|
|
75
|
+
/** List chapters + section trees from templates; used when bootstrap omitted basic-design registry docs. */
|
|
76
|
+
export declare function basicDesignAnchorStructurePatch(projectRoot: string): Promise<ExtractPatch>;
|
|
77
|
+
export interface BuildDocExtractPatchOptions {
|
|
78
|
+
/** When false, do not re-parse api-list / list-screens / db-design bodies (avoids duplicate section trees after bootstrap). */
|
|
79
|
+
includeListChapterMarkdown?: boolean;
|
|
80
|
+
}
|
|
81
|
+
export declare function buildDocExtractPatch(entries: DocExtractEntry[], _projectRoot?: string, options?: BuildDocExtractPatchOptions): Promise<{
|
|
65
82
|
patch: ExtractPatch;
|
|
66
83
|
stats: DocExtractResult;
|
|
67
|
-
}
|
|
84
|
+
}>;
|
|
68
85
|
export {};
|
|
69
86
|
//# sourceMappingURL=doc-extract.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doc-extract.d.ts","sourceRoot":"","sources":["../../src/graph/doc-extract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,SAAS,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"doc-extract.d.ts","sourceRoot":"","sources":["../../src/graph/doc-extract.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { detailSectionsToPatch, parseDetailSections, snippetAfterHeading, } from "./detail-sections.js";
|
|
2
|
-
import { DEFAULT_BD_LIST_DOC, DEFAULT_LISTED_IN, PER_DOMAIN_TEMPLATE_DOC_BD, } from "./defaults.js";
|
|
1
|
+
import { basicDesignListChapterDocumentId, basicDesignListChapterFileToPatch, detailSectionsToPatch, parseDetailSections, snippetAfterHeading, } from "./detail-sections.js";
|
|
2
|
+
import { BASIC_DESIGN_LIST_DOCUMENT_IDS, DEFAULT_BD_LIST_DOC, DEFAULT_LISTED_IN, PER_DOMAIN_TEMPLATE_DOC_BD, } from "./defaults.js";
|
|
3
|
+
import { scanBasicDesignListDocuments } from "../registry/build.js";
|
|
4
|
+
import { mergeStructurePatches, registryDocumentToStructurePatch, } from "../registry/structure-patch.js";
|
|
3
5
|
/** Registry template ids for per-domain SRS detail (see documents.json). */
|
|
4
6
|
export const PER_DOMAIN_TEMPLATE_DOC = {
|
|
5
7
|
useCase: "doc.srs.uc-detail",
|
|
@@ -58,20 +60,22 @@ export function classifySrsDetailFile(relativePath) {
|
|
|
58
60
|
}
|
|
59
61
|
return null;
|
|
60
62
|
}
|
|
61
|
-
/** Classify markdown under docs/basic-design as list chapter vs per-
|
|
63
|
+
/** Classify markdown under docs/basic-design as list chapter vs per-endpoint/per-screen detail. */
|
|
62
64
|
export function classifyBasicDesignDetailFile(relativePath) {
|
|
63
65
|
const p = normalizeRelativePath(relativePath).toLowerCase();
|
|
64
66
|
if (p === "docs/basic-design/api-list.md" ||
|
|
65
67
|
p.endsWith("/api-list.md") ||
|
|
66
68
|
p === "docs/basic-design/db-design.md" ||
|
|
67
69
|
p.endsWith("/db-design.md") ||
|
|
70
|
+
p === "docs/basic-design/list-screens.md" ||
|
|
71
|
+
p.endsWith("/list-screens.md") ||
|
|
68
72
|
p.includes("/screens/list-screens.md")) {
|
|
69
73
|
return null;
|
|
70
74
|
}
|
|
71
|
-
if (/\/api\/
|
|
75
|
+
if (/\/api\/[^/]+\.md$/.test(p)) {
|
|
72
76
|
return "apiDetail";
|
|
73
77
|
}
|
|
74
|
-
if (/\/screens
|
|
78
|
+
if (/\/screens\/[^/]+\.md$/.test(p)) {
|
|
75
79
|
return "screenDetail";
|
|
76
80
|
}
|
|
77
81
|
return null;
|
|
@@ -82,51 +86,89 @@ export function documentIdForDomainDetail(kind, domainId) {
|
|
|
82
86
|
? `doc.srs.uc-${norm}`
|
|
83
87
|
: `doc.srs.f-${norm}`;
|
|
84
88
|
}
|
|
85
|
-
|
|
86
|
-
const norm = normalizeDomainId(featureId);
|
|
87
|
-
if (kind === "apiDetail") {
|
|
88
|
-
return `doc.bd.api-${norm}`;
|
|
89
|
-
}
|
|
89
|
+
function slugFromFilename(relativePath) {
|
|
90
90
|
const base = normalizeRelativePath(relativePath)
|
|
91
91
|
.split("/")
|
|
92
92
|
.pop()
|
|
93
|
-
?.replace(/\.md$/i, "") ?? "
|
|
94
|
-
|
|
93
|
+
?.replace(/\.md$/i, "") ?? "unknown";
|
|
94
|
+
return base
|
|
95
95
|
.toLowerCase()
|
|
96
96
|
.replace(/[^a-z0-9]+/g, "-")
|
|
97
97
|
.replace(/^-|-$/g, "")
|
|
98
98
|
.slice(0, 64);
|
|
99
|
-
return `doc.bd.screen-${slug}`;
|
|
100
99
|
}
|
|
101
|
-
function
|
|
102
|
-
const
|
|
103
|
-
|
|
104
|
-
const m = p.match(/\/api\/f-(\d+)/i);
|
|
105
|
-
return m?.[1] ? normalizeDomainId(`F-${m[1]}`) : null;
|
|
106
|
-
}
|
|
107
|
-
const fromPath = p.match(/f-(\d+)/i);
|
|
108
|
-
if (fromPath?.[1]) {
|
|
109
|
-
return normalizeDomainId(`F-${fromPath[1]}`);
|
|
110
|
-
}
|
|
111
|
-
return null;
|
|
100
|
+
export function documentIdForBasicDesignDetail(kind, relativePath) {
|
|
101
|
+
const slug = slugFromFilename(relativePath);
|
|
102
|
+
return kind === "apiDetail" ? `doc.bd.api-${slug}` : `doc.bd.screen-${slug}`;
|
|
112
103
|
}
|
|
113
|
-
|
|
114
|
-
|
|
104
|
+
const ENDPOINT_SPEC_HEADING = /###\s*\d+(?:\.\d+)?\s*`([A-Z]+)\s+([^`]+)`/i;
|
|
105
|
+
const API_DETAIL_TITLE = /^#\s*API Detail:\s*(.+)/im;
|
|
106
|
+
const SCREEN_SECTION_HEADING = /^##\s*\d+\.\s*Screen:\s*(.+)/im;
|
|
107
|
+
/** Title and optional related features from per-endpoint / per-screen detail markdown. */
|
|
108
|
+
export function extractBasicDesignDetailMeta(content, kind, relativePath) {
|
|
109
|
+
const featureIds = new Set();
|
|
110
|
+
for (const m of content.matchAll(/\bF-\d+\b/gi)) {
|
|
111
|
+
const id = normalizeDomainId(m[0]);
|
|
112
|
+
if (isRealDomainId(id)) {
|
|
113
|
+
featureIds.add(id);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
115
116
|
const idLine = content.match(FEATURE_ID_LINE);
|
|
116
117
|
if (idLine?.[1] && isRealDomainId(idLine[1])) {
|
|
117
|
-
|
|
118
|
-
id: normalizeDomainId(idLine[1]),
|
|
119
|
-
title: content.match(FEATURE_NAME_HEADING)?.[2]?.trim(),
|
|
120
|
-
};
|
|
118
|
+
featureIds.add(normalizeDomainId(idLine[1]));
|
|
121
119
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
120
|
+
if (kind === "apiDetail") {
|
|
121
|
+
const endpoint = content.match(ENDPOINT_SPEC_HEADING);
|
|
122
|
+
if (endpoint) {
|
|
123
|
+
return {
|
|
124
|
+
title: `${endpoint[1]} ${endpoint[2]}`.trim(),
|
|
125
|
+
featureIds: [...featureIds],
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
const titleLine = content.match(API_DETAIL_TITLE);
|
|
129
|
+
if (titleLine?.[1]?.trim()) {
|
|
130
|
+
return { title: titleLine[1].trim(), featureIds: [...featureIds] };
|
|
131
|
+
}
|
|
132
|
+
return { title: slugFromFilename(relativePath), featureIds: [...featureIds] };
|
|
125
133
|
}
|
|
126
|
-
|
|
127
|
-
|
|
134
|
+
const screen = content.match(SCREEN_SECTION_HEADING);
|
|
135
|
+
if (screen?.[1]?.trim()) {
|
|
136
|
+
return { title: screen[1].trim(), featureIds: [...featureIds] };
|
|
128
137
|
}
|
|
129
|
-
return
|
|
138
|
+
return { title: slugFromFilename(relativePath), featureIds: [...featureIds] };
|
|
139
|
+
}
|
|
140
|
+
function buildBasicDesignDetailInstancePatch(opts) {
|
|
141
|
+
const path = normalizeRelativePath(opts.relativePath);
|
|
142
|
+
const templateDocId = opts.kind === "apiDetail"
|
|
143
|
+
? PER_DOMAIN_TEMPLATE_DOC_BD.api
|
|
144
|
+
: PER_DOMAIN_TEMPLATE_DOC_BD.screen;
|
|
145
|
+
const listAnchorId = opts.kind === "apiDetail"
|
|
146
|
+
? DEFAULT_BD_LIST_DOC.apiList
|
|
147
|
+
: DEFAULT_BD_LIST_DOC.screenList;
|
|
148
|
+
const nodes = [
|
|
149
|
+
{
|
|
150
|
+
id: opts.docId,
|
|
151
|
+
type: "document",
|
|
152
|
+
output: path,
|
|
153
|
+
perDomain: opts.kind,
|
|
154
|
+
title: opts.title,
|
|
155
|
+
...(opts.description ? { description: opts.description } : {}),
|
|
156
|
+
},
|
|
157
|
+
];
|
|
158
|
+
const edges = [
|
|
159
|
+
{ type: "rendersTo", from: opts.docId, to: path },
|
|
160
|
+
{ type: "rendersTo", from: templateDocId, to: path },
|
|
161
|
+
{ type: "partOf", from: opts.docId, to: templateDocId },
|
|
162
|
+
{ type: "contains", from: listAnchorId, to: opts.docId },
|
|
163
|
+
];
|
|
164
|
+
for (const featureId of opts.featureIds) {
|
|
165
|
+
edges.push({ type: "tracesTo", from: featureId, to: opts.docId });
|
|
166
|
+
}
|
|
167
|
+
const sections = parseDetailSections(opts.content, opts.docId);
|
|
168
|
+
const sectionPatch = detailSectionsToPatch(opts.docId, sections, opts.content);
|
|
169
|
+
nodes.push(...sectionPatch.nodes);
|
|
170
|
+
edges.push(...sectionPatch.edges);
|
|
171
|
+
return { version: 1, nodes, edges };
|
|
130
172
|
}
|
|
131
173
|
function primaryDomainIdFromDetailContent(content, kind) {
|
|
132
174
|
if (kind === "useCaseDetail") {
|
|
@@ -368,10 +410,9 @@ export function extractDomainFromMarkdown(content, relativePath) {
|
|
|
368
410
|
}
|
|
369
411
|
const bdKind = classifyBasicDesignDetailFile(relativePath);
|
|
370
412
|
if (bdKind) {
|
|
371
|
-
const
|
|
372
|
-
|
|
373
|
-
addFeature(parsed,
|
|
374
|
-
title: primary.title,
|
|
413
|
+
const meta = extractBasicDesignDetailMeta(content, bdKind, relativePath);
|
|
414
|
+
for (const featureId of meta.featureIds) {
|
|
415
|
+
addFeature(parsed, featureId, {
|
|
375
416
|
description: extractBasicDesignDetailDescription(content, bdKind),
|
|
376
417
|
});
|
|
377
418
|
}
|
|
@@ -536,30 +577,28 @@ function basicDesignDetailFileToPatch(relativePath, content) {
|
|
|
536
577
|
if (!kind) {
|
|
537
578
|
return { version: 1, nodes: [], edges: [] };
|
|
538
579
|
}
|
|
539
|
-
const
|
|
540
|
-
|
|
541
|
-
return { version: 1, nodes: [], edges: [] };
|
|
542
|
-
}
|
|
543
|
-
const description = extractBasicDesignDetailDescription(content, kind);
|
|
544
|
-
const listAnchorId = kind === "apiDetail" ? DEFAULT_BD_LIST_DOC.apiList : DEFAULT_BD_LIST_DOC.screenList;
|
|
545
|
-
const templateDocId = kind === "apiDetail"
|
|
546
|
-
? PER_DOMAIN_TEMPLATE_DOC_BD.api
|
|
547
|
-
: PER_DOMAIN_TEMPLATE_DOC_BD.screen;
|
|
548
|
-
return buildDetailInstancePatch({
|
|
580
|
+
const meta = extractBasicDesignDetailMeta(content, kind, relativePath);
|
|
581
|
+
return buildBasicDesignDetailInstancePatch({
|
|
549
582
|
relativePath,
|
|
550
583
|
content,
|
|
551
|
-
docId: documentIdForBasicDesignDetail(kind,
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
listAnchorId,
|
|
557
|
-
title: primary.title ?? primary.id,
|
|
558
|
-
description,
|
|
584
|
+
docId: documentIdForBasicDesignDetail(kind, relativePath),
|
|
585
|
+
kind,
|
|
586
|
+
title: meta.title,
|
|
587
|
+
description: extractBasicDesignDetailDescription(content, kind),
|
|
588
|
+
featureIds: meta.featureIds,
|
|
559
589
|
});
|
|
560
590
|
}
|
|
561
|
-
/** Document nodes + sections for per-UC/F SRS or per-
|
|
562
|
-
export function detailFileToPatch(relativePath, content) {
|
|
591
|
+
/** Document nodes + sections for per-UC/F SRS or per-endpoint/per-screen basic-design files. */
|
|
592
|
+
export function detailFileToPatch(relativePath, content, options) {
|
|
593
|
+
if (options?.includeListChapterMarkdown !== false) {
|
|
594
|
+
const listChapter = basicDesignListChapterFileToPatch(relativePath, content);
|
|
595
|
+
if (listChapter.nodes.length > 0 || listChapter.edges.length > 0) {
|
|
596
|
+
return listChapter;
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
else if (basicDesignListChapterDocumentId(relativePath)) {
|
|
600
|
+
return { version: 1, nodes: [], edges: [] };
|
|
601
|
+
}
|
|
563
602
|
const srs = srsDetailFileToPatch(relativePath, content);
|
|
564
603
|
if (srs.nodes.length > 0 || srs.edges.length > 0) {
|
|
565
604
|
return srs;
|
|
@@ -582,7 +621,26 @@ export function mergeParsedDomains(domains) {
|
|
|
582
621
|
}
|
|
583
622
|
return out;
|
|
584
623
|
}
|
|
585
|
-
/**
|
|
624
|
+
/** Per-domain template shells (outputPattern — no section coverage required). */
|
|
625
|
+
export function basicDesignPerDomainTemplateNodes() {
|
|
626
|
+
return [
|
|
627
|
+
{
|
|
628
|
+
id: PER_DOMAIN_TEMPLATE_DOC_BD.api,
|
|
629
|
+
type: "document",
|
|
630
|
+
outputPattern: "docs/basic-design/api/",
|
|
631
|
+
perDomain: "apiDetail",
|
|
632
|
+
title: "API Detail (template)",
|
|
633
|
+
},
|
|
634
|
+
{
|
|
635
|
+
id: PER_DOMAIN_TEMPLATE_DOC_BD.screen,
|
|
636
|
+
type: "document",
|
|
637
|
+
outputPattern: "docs/basic-design/screens/",
|
|
638
|
+
perDomain: "screenDetail",
|
|
639
|
+
title: "Screen Detail (template)",
|
|
640
|
+
},
|
|
641
|
+
];
|
|
642
|
+
}
|
|
643
|
+
/** @deprecated Prefer {@link basicDesignAnchorStructurePatch} — documents only, no sections. */
|
|
586
644
|
export function basicDesignAnchorDocumentNodes() {
|
|
587
645
|
return [
|
|
588
646
|
{
|
|
@@ -594,7 +652,7 @@ export function basicDesignAnchorDocumentNodes() {
|
|
|
594
652
|
{
|
|
595
653
|
id: DEFAULT_BD_LIST_DOC.screenList,
|
|
596
654
|
type: "document",
|
|
597
|
-
output: "docs/basic-design/
|
|
655
|
+
output: "docs/basic-design/list-screens.md",
|
|
598
656
|
title: "Screen Map",
|
|
599
657
|
},
|
|
600
658
|
{
|
|
@@ -603,23 +661,48 @@ export function basicDesignAnchorDocumentNodes() {
|
|
|
603
661
|
output: "docs/basic-design/db-design.md",
|
|
604
662
|
title: "Database Design",
|
|
605
663
|
},
|
|
606
|
-
{
|
|
607
|
-
id: PER_DOMAIN_TEMPLATE_DOC_BD.api,
|
|
608
|
-
type: "document",
|
|
609
|
-
outputPattern: "docs/basic-design/api/",
|
|
610
|
-
perDomain: "apiDetail",
|
|
611
|
-
title: "API Detail (template)",
|
|
612
|
-
},
|
|
613
|
-
{
|
|
614
|
-
id: PER_DOMAIN_TEMPLATE_DOC_BD.screen,
|
|
615
|
-
type: "document",
|
|
616
|
-
outputPattern: "docs/basic-design/screens/",
|
|
617
|
-
perDomain: "screenDetail",
|
|
618
|
-
title: "Screen Detail (template)",
|
|
619
|
-
},
|
|
620
664
|
];
|
|
621
665
|
}
|
|
622
|
-
|
|
666
|
+
/** True when any basic-design list chapter document has no child sections in the graph. */
|
|
667
|
+
export function basicDesignListChaptersNeedSections(graph) {
|
|
668
|
+
for (const docId of BASIC_DESIGN_LIST_DOCUMENT_IDS) {
|
|
669
|
+
const doc = graph.nodesById.get(docId);
|
|
670
|
+
if (!doc || doc.type !== "document") {
|
|
671
|
+
continue;
|
|
672
|
+
}
|
|
673
|
+
const hasSection = (graph.outEdges.get(docId) ?? []).some((e) => e.type === "contains" &&
|
|
674
|
+
graph.nodesById.get(e.to)?.type === "section");
|
|
675
|
+
if (!hasSection) {
|
|
676
|
+
return true;
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
return false;
|
|
680
|
+
}
|
|
681
|
+
/** List chapters + section trees from templates; used when bootstrap omitted basic-design registry docs. */
|
|
682
|
+
export async function basicDesignAnchorStructurePatch(projectRoot) {
|
|
683
|
+
try {
|
|
684
|
+
const listDocs = await scanBasicDesignListDocuments(projectRoot);
|
|
685
|
+
const listPatches = listDocs.map((d) => registryDocumentToStructurePatch(d));
|
|
686
|
+
const templatePatch = {
|
|
687
|
+
version: 1,
|
|
688
|
+
nodes: basicDesignPerDomainTemplateNodes(),
|
|
689
|
+
edges: [],
|
|
690
|
+
};
|
|
691
|
+
return mergeStructurePatches([...listPatches, templatePatch]);
|
|
692
|
+
}
|
|
693
|
+
catch {
|
|
694
|
+
return {
|
|
695
|
+
version: 1,
|
|
696
|
+
nodes: [
|
|
697
|
+
...basicDesignAnchorDocumentNodes(),
|
|
698
|
+
...basicDesignPerDomainTemplateNodes(),
|
|
699
|
+
],
|
|
700
|
+
edges: [],
|
|
701
|
+
};
|
|
702
|
+
}
|
|
703
|
+
}
|
|
704
|
+
export async function buildDocExtractPatch(entries, _projectRoot, options) {
|
|
705
|
+
const includeListChapterMarkdown = options?.includeListChapterMarkdown !== false;
|
|
623
706
|
const perFile = [];
|
|
624
707
|
for (const e of entries) {
|
|
625
708
|
perFile.push(extractDomainFromMarkdown(e.content, e.relativePath));
|
|
@@ -686,14 +769,19 @@ export function buildDocExtractPatch(entries) {
|
|
|
686
769
|
if (hasBasicDesignFiles) {
|
|
687
770
|
mergePatchInto({
|
|
688
771
|
version: 1,
|
|
689
|
-
nodes:
|
|
772
|
+
nodes: [
|
|
773
|
+
...basicDesignAnchorDocumentNodes(),
|
|
774
|
+
...basicDesignPerDomainTemplateNodes(),
|
|
775
|
+
],
|
|
690
776
|
edges: [],
|
|
691
777
|
});
|
|
692
778
|
}
|
|
693
779
|
for (const e of entries) {
|
|
694
780
|
const single = extractDomainFromMarkdown(e.content, e.relativePath);
|
|
695
781
|
mergePatchInto(parsedDomainToPatch(single, e.relativePath));
|
|
696
|
-
mergePatchInto(detailFileToPatch(e.relativePath, e.content
|
|
782
|
+
mergePatchInto(detailFileToPatch(e.relativePath, e.content, {
|
|
783
|
+
includeListChapterMarkdown,
|
|
784
|
+
}));
|
|
697
785
|
}
|
|
698
786
|
return {
|
|
699
787
|
patch: { version: 1, nodes: allNodes, edges: allEdges },
|