@tienne/gestalt 0.88.0 → 0.89.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/CLAUDE.md +6 -2
- package/README.ko.md +2 -1
- package/README.md +3 -1
- package/dist/package.json +2 -1
- package/dist/plugin/skills/_shared/proactive-routing.md +1 -0
- package/dist/plugin/skills/architecture/SKILL.md +913 -0
- package/dist/schemas/architecture-ir.schema.json +596 -0
- package/dist/src/architecture/canvas-geometry.d.ts +40 -0
- package/dist/src/architecture/canvas-geometry.d.ts.map +1 -0
- package/dist/src/architecture/canvas-geometry.js +212 -0
- package/dist/src/architecture/canvas-geometry.js.map +1 -0
- package/dist/src/architecture/codeowners.d.ts +16 -0
- package/dist/src/architecture/codeowners.d.ts.map +1 -0
- package/dist/src/architecture/codeowners.js +58 -0
- package/dist/src/architecture/codeowners.js.map +1 -0
- package/dist/src/architecture/compare-layout.d.ts +27 -0
- package/dist/src/architecture/compare-layout.d.ts.map +1 -0
- package/dist/src/architecture/compare-layout.js +72 -0
- package/dist/src/architecture/compare-layout.js.map +1 -0
- package/dist/src/architecture/dataflow-layout.d.ts +29 -0
- package/dist/src/architecture/dataflow-layout.d.ts.map +1 -0
- package/dist/src/architecture/dataflow-layout.js +229 -0
- package/dist/src/architecture/dataflow-layout.js.map +1 -0
- package/dist/src/architecture/doc-fresh.d.ts +31 -0
- package/dist/src/architecture/doc-fresh.d.ts.map +1 -0
- package/dist/src/architecture/doc-fresh.js +84 -0
- package/dist/src/architecture/doc-fresh.js.map +1 -0
- package/dist/src/architecture/doc-link.d.ts +84 -0
- package/dist/src/architecture/doc-link.d.ts.map +1 -0
- package/dist/src/architecture/doc-link.js +396 -0
- package/dist/src/architecture/doc-link.js.map +1 -0
- package/dist/src/architecture/doc-routes.d.ts +39 -0
- package/dist/src/architecture/doc-routes.d.ts.map +1 -0
- package/dist/src/architecture/doc-routes.js +123 -0
- package/dist/src/architecture/doc-routes.js.map +1 -0
- package/dist/src/architecture/doc-scan.d.ts +107 -0
- package/dist/src/architecture/doc-scan.d.ts.map +1 -0
- package/dist/src/architecture/doc-scan.js +617 -0
- package/dist/src/architecture/doc-scan.js.map +1 -0
- package/dist/src/architecture/doc-stale.d.ts +32 -0
- package/dist/src/architecture/doc-stale.d.ts.map +1 -0
- package/dist/src/architecture/doc-stale.js +60 -0
- package/dist/src/architecture/doc-stale.js.map +1 -0
- package/dist/src/architecture/drilldown.d.ts +51 -0
- package/dist/src/architecture/drilldown.d.ts.map +1 -0
- package/dist/src/architecture/drilldown.js +1160 -0
- package/dist/src/architecture/drilldown.js.map +1 -0
- package/dist/src/architecture/endpoint-match.d.ts +43 -0
- package/dist/src/architecture/endpoint-match.d.ts.map +1 -0
- package/dist/src/architecture/endpoint-match.js +133 -0
- package/dist/src/architecture/endpoint-match.js.map +1 -0
- package/dist/src/architecture/flow-layout.d.ts +79 -0
- package/dist/src/architecture/flow-layout.d.ts.map +1 -0
- package/dist/src/architecture/flow-layout.js +519 -0
- package/dist/src/architecture/flow-layout.js.map +1 -0
- package/dist/src/architecture/focus.d.ts +14 -0
- package/dist/src/architecture/focus.d.ts.map +1 -0
- package/dist/src/architecture/focus.js +107 -0
- package/dist/src/architecture/focus.js.map +1 -0
- package/dist/src/architecture/global-context.d.ts +23 -0
- package/dist/src/architecture/global-context.d.ts.map +1 -0
- package/dist/src/architecture/global-context.js +67 -0
- package/dist/src/architecture/global-context.js.map +1 -0
- package/dist/src/architecture/html-client.d.ts +35 -0
- package/dist/src/architecture/html-client.d.ts.map +1 -0
- package/dist/src/architecture/html-client.js +1852 -0
- package/dist/src/architecture/html-client.js.map +1 -0
- package/dist/src/architecture/html-renderer.d.ts +22 -0
- package/dist/src/architecture/html-renderer.d.ts.map +1 -0
- package/dist/src/architecture/html-renderer.js +1290 -0
- package/dist/src/architecture/html-renderer.js.map +1 -0
- package/dist/src/architecture/html-theme.d.ts +25 -0
- package/dist/src/architecture/html-theme.d.ts.map +1 -0
- package/dist/src/architecture/html-theme.js +681 -0
- package/dist/src/architecture/html-theme.js.map +1 -0
- package/dist/src/architecture/index.d.ts +9 -0
- package/dist/src/architecture/index.d.ts.map +1 -0
- package/dist/src/architecture/index.js +9 -0
- package/dist/src/architecture/index.js.map +1 -0
- package/dist/src/architecture/ir-schema.d.ts +1832 -0
- package/dist/src/architecture/ir-schema.d.ts.map +1 -0
- package/dist/src/architecture/ir-schema.js +343 -0
- package/dist/src/architecture/ir-schema.js.map +1 -0
- package/dist/src/architecture/kind-text.d.ts +21 -0
- package/dist/src/architecture/kind-text.d.ts.map +1 -0
- package/dist/src/architecture/kind-text.js +42 -0
- package/dist/src/architecture/kind-text.js.map +1 -0
- package/dist/src/architecture/layout.d.ts +227 -0
- package/dist/src/architecture/layout.d.ts.map +1 -0
- package/dist/src/architecture/layout.js +627 -0
- package/dist/src/architecture/layout.js.map +1 -0
- package/dist/src/architecture/mcp-tool-match.d.ts +49 -0
- package/dist/src/architecture/mcp-tool-match.d.ts.map +1 -0
- package/dist/src/architecture/mcp-tool-match.js +53 -0
- package/dist/src/architecture/mcp-tool-match.js.map +1 -0
- package/dist/src/architecture/merge.d.ts +54 -0
- package/dist/src/architecture/merge.d.ts.map +1 -0
- package/dist/src/architecture/merge.js +681 -0
- package/dist/src/architecture/merge.js.map +1 -0
- package/dist/src/architecture/micro-app.d.ts +20 -0
- package/dist/src/architecture/micro-app.d.ts.map +1 -0
- package/dist/src/architecture/micro-app.js +41 -0
- package/dist/src/architecture/micro-app.js.map +1 -0
- package/dist/src/architecture/name-ref-match.d.ts +43 -0
- package/dist/src/architecture/name-ref-match.d.ts.map +1 -0
- package/dist/src/architecture/name-ref-match.js +127 -0
- package/dist/src/architecture/name-ref-match.js.map +1 -0
- package/dist/src/architecture/packs/data.d.ts +109 -0
- package/dist/src/architecture/packs/data.d.ts.map +1 -0
- package/dist/src/architecture/packs/data.js +64 -0
- package/dist/src/architecture/packs/data.js.map +1 -0
- package/dist/src/architecture/packs/generic.d.ts +47 -0
- package/dist/src/architecture/packs/generic.d.ts.map +1 -0
- package/dist/src/architecture/packs/generic.js +35 -0
- package/dist/src/architecture/packs/generic.js.map +1 -0
- package/dist/src/architecture/packs/harness.d.ts +96 -0
- package/dist/src/architecture/packs/harness.d.ts.map +1 -0
- package/dist/src/architecture/packs/harness.js +66 -0
- package/dist/src/architecture/packs/harness.js.map +1 -0
- package/dist/src/architecture/packs/index.d.ts +840 -0
- package/dist/src/architecture/packs/index.d.ts.map +1 -0
- package/dist/src/architecture/packs/index.js +87 -0
- package/dist/src/architecture/packs/index.js.map +1 -0
- package/dist/src/architecture/packs/infra.d.ts +91 -0
- package/dist/src/architecture/packs/infra.d.ts.map +1 -0
- package/dist/src/architecture/packs/infra.js +57 -0
- package/dist/src/architecture/packs/infra.js.map +1 -0
- package/dist/src/architecture/packs/knowledge.d.ts +72 -0
- package/dist/src/architecture/packs/knowledge.d.ts.map +1 -0
- package/dist/src/architecture/packs/knowledge.js +58 -0
- package/dist/src/architecture/packs/knowledge.js.map +1 -0
- package/dist/src/architecture/packs/process.d.ts +87 -0
- package/dist/src/architecture/packs/process.d.ts.map +1 -0
- package/dist/src/architecture/packs/process.js +52 -0
- package/dist/src/architecture/packs/process.js.map +1 -0
- package/dist/src/architecture/packs/render-classes.d.ts +11 -0
- package/dist/src/architecture/packs/render-classes.d.ts.map +1 -0
- package/dist/src/architecture/packs/render-classes.js +92 -0
- package/dist/src/architecture/packs/render-classes.js.map +1 -0
- package/dist/src/architecture/packs/types.d.ts +66 -0
- package/dist/src/architecture/packs/types.d.ts.map +1 -0
- package/dist/src/architecture/packs/types.js +18 -0
- package/dist/src/architecture/packs/types.js.map +1 -0
- package/dist/src/architecture/packs/web-product.d.ts +348 -0
- package/dist/src/architecture/packs/web-product.d.ts.map +1 -0
- package/dist/src/architecture/packs/web-product.js +226 -0
- package/dist/src/architecture/packs/web-product.js.map +1 -0
- package/dist/src/architecture/sequence-layout.d.ts +50 -0
- package/dist/src/architecture/sequence-layout.d.ts.map +1 -0
- package/dist/src/architecture/sequence-layout.js +140 -0
- package/dist/src/architecture/sequence-layout.js.map +1 -0
- package/dist/src/architecture/service-facts.d.ts +30 -0
- package/dist/src/architecture/service-facts.d.ts.map +1 -0
- package/dist/src/architecture/service-facts.js +88 -0
- package/dist/src/architecture/service-facts.js.map +1 -0
- package/dist/src/architecture/store.d.ts +50 -0
- package/dist/src/architecture/store.d.ts.map +1 -0
- package/dist/src/architecture/store.js +320 -0
- package/dist/src/architecture/store.js.map +1 -0
- package/dist/src/architecture/types.d.ts +400 -0
- package/dist/src/architecture/types.d.ts.map +1 -0
- package/dist/src/architecture/types.js +75 -0
- package/dist/src/architecture/types.js.map +1 -0
- package/dist/src/architecture/validator.d.ts +65 -0
- package/dist/src/architecture/validator.d.ts.map +1 -0
- package/dist/src/architecture/validator.js +1249 -0
- package/dist/src/architecture/validator.js.map +1 -0
- package/dist/src/core/errors.d.ts +4 -0
- package/dist/src/core/errors.d.ts.map +1 -1
- package/dist/src/core/errors.js +8 -0
- package/dist/src/core/errors.js.map +1 -1
- package/dist/src/mcp/schemas.d.ts +317 -0
- package/dist/src/mcp/schemas.d.ts.map +1 -1
- package/dist/src/mcp/schemas.js +151 -0
- package/dist/src/mcp/schemas.js.map +1 -1
- package/dist/src/mcp/server.d.ts.map +1 -1
- package/dist/src/mcp/server.js +7 -1
- package/dist/src/mcp/server.js.map +1 -1
- package/dist/src/mcp/tools/architecture-passthrough.d.ts +9 -0
- package/dist/src/mcp/tools/architecture-passthrough.d.ts.map +1 -0
- package/dist/src/mcp/tools/architecture-passthrough.js +587 -0
- package/dist/src/mcp/tools/architecture-passthrough.js.map +1 -0
- package/dist/src/utils/claude-projects.d.ts +19 -0
- package/dist/src/utils/claude-projects.d.ts.map +1 -0
- package/dist/src/utils/claude-projects.js +157 -0
- package/dist/src/utils/claude-projects.js.map +1 -0
- package/dist/src/utils/read-only-tools.d.ts +19 -0
- package/dist/src/utils/read-only-tools.d.ts.map +1 -0
- package/dist/src/utils/read-only-tools.js +132 -0
- package/dist/src/utils/read-only-tools.js.map +1 -0
- package/package.json +2 -1
- package/plugin/.codex-plugin/plugin.json +1 -1
- package/plugin/.mcp.json +1 -1
- package/plugin/mcp.json +1 -1
- package/plugin/skills/_shared/proactive-routing.md +1 -0
- package/plugin/skills/architecture/SKILL.md +913 -0
- package/schemas/architecture-ir.schema.json +596 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { ArchitectureIr } from './types.js';
|
|
2
|
+
import type { ScannedDoc } from './doc-scan.js';
|
|
3
|
+
export interface ChangedFile {
|
|
4
|
+
/** 기술 IR의 repo id나 레포 이름, 또는 문서가 적은 레포 이름 */
|
|
5
|
+
repo: string;
|
|
6
|
+
path: string;
|
|
7
|
+
}
|
|
8
|
+
export interface StaleReason {
|
|
9
|
+
/** code-ref는 문서가 직접 가리킨 파일, node는 문서가 설명하는 기술 노드의 근거 파일이 바뀌었다 */
|
|
10
|
+
kind: 'code-ref' | 'node';
|
|
11
|
+
file: string;
|
|
12
|
+
node?: string;
|
|
13
|
+
line?: number;
|
|
14
|
+
}
|
|
15
|
+
export interface StaleDoc {
|
|
16
|
+
/** `<repoId>/<path>` */
|
|
17
|
+
doc: string;
|
|
18
|
+
title?: string;
|
|
19
|
+
reasons: StaleReason[];
|
|
20
|
+
}
|
|
21
|
+
export interface StaleDocsOptions {
|
|
22
|
+
/** 문서가 적은 레포 이름 → 기술 IR의 repo id */
|
|
23
|
+
repoAliases?: Record<string, string>;
|
|
24
|
+
/** link_docs가 쓴 knowledge-link IR. 없으면 문서가 직접 가리킨 파일만 본다 */
|
|
25
|
+
linkIr?: ArchitectureIr;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* 바뀐 파일 목록으로 손봐야 할 문서를 고른다. 문서가 직접 가리킨 파일이 바뀌었거나,
|
|
29
|
+
* 문서가 설명한다고 이어진 기술 노드의 근거 파일이 바뀐 문서다
|
|
30
|
+
*/
|
|
31
|
+
export declare function findStaleDocs(scanned: readonly ScannedDoc[], changed: readonly ChangedFile[], options?: StaleDocsOptions): StaleDoc[];
|
|
32
|
+
//# sourceMappingURL=doc-stale.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doc-stale.d.ts","sourceRoot":"","sources":["../../../src/architecture/doc-stale.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGhD,MAAM,WAAW,WAAW;IAC1B,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,iEAAiE;IACjE,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,QAAQ;IACvB,wBAAwB;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,4DAA4D;IAC5D,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AAMD;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,SAAS,UAAU,EAAE,EAC9B,OAAO,EAAE,SAAS,WAAW,EAAE,EAC/B,OAAO,GAAE,gBAAqB,GAC7B,QAAQ,EAAE,CAqDZ"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { splitCodeLocation } from './doc-link.js';
|
|
2
|
+
/** 근거가 폴더를 가리켰으면 그 아래 파일이 바뀐 것도 문서에 닿는다 */
|
|
3
|
+
const covers = (ref, changed) => ref === changed || changed.startsWith(ref.endsWith('/') ? ref : `${ref}/`);
|
|
4
|
+
/**
|
|
5
|
+
* 바뀐 파일 목록으로 손봐야 할 문서를 고른다. 문서가 직접 가리킨 파일이 바뀌었거나,
|
|
6
|
+
* 문서가 설명한다고 이어진 기술 노드의 근거 파일이 바뀐 문서다
|
|
7
|
+
*/
|
|
8
|
+
export function findStaleDocs(scanned, changed, options = {}) {
|
|
9
|
+
const ir = options.linkIr;
|
|
10
|
+
const aliases = options.repoAliases ?? {};
|
|
11
|
+
// 레포 이름과 id를 모두 id 하나로 모아 같은 레포를 다르게 불러도 맞게 한다
|
|
12
|
+
const canon = (name) => aliases[name] ?? ir?.repos.find((r) => r.name === name || r.id === name)?.id ?? name;
|
|
13
|
+
const changes = changed.map((c) => ({ repo: canon(c.repo), path: c.path.replace(/^\.?\//, '') }));
|
|
14
|
+
const hit = (repo, path) => changes.find((c) => c.repo === canon(repo) && covers(path, c.path))?.path;
|
|
15
|
+
const out = new Map();
|
|
16
|
+
const add = (key, title, reason) => {
|
|
17
|
+
const cur = out.get(key) ?? {
|
|
18
|
+
doc: key,
|
|
19
|
+
...(title !== undefined ? { title } : {}),
|
|
20
|
+
reasons: [],
|
|
21
|
+
};
|
|
22
|
+
const dup = cur.reasons.some((r) => r.kind === reason.kind && r.file === reason.file && r.node === reason.node);
|
|
23
|
+
if (!dup)
|
|
24
|
+
cur.reasons.push(reason);
|
|
25
|
+
out.set(key, cur);
|
|
26
|
+
};
|
|
27
|
+
for (const d of scanned) {
|
|
28
|
+
for (const ref of d.codeRefs) {
|
|
29
|
+
const file = hit(ref.repo, ref.path);
|
|
30
|
+
if (file !== undefined)
|
|
31
|
+
add(`${d.repoId}/${d.path}`, d.title, { kind: 'code-ref', file, line: ref.line });
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (ir !== undefined) {
|
|
35
|
+
const changedByNode = new Map();
|
|
36
|
+
for (const n of ir.nodes) {
|
|
37
|
+
for (const e of n.evidence) {
|
|
38
|
+
if (e.type !== 'code')
|
|
39
|
+
continue;
|
|
40
|
+
const loc = splitCodeLocation(e.location);
|
|
41
|
+
const file = loc && hit(loc.repo, loc.path);
|
|
42
|
+
if (file !== undefined && !changedByNode.has(n.id))
|
|
43
|
+
changedByNode.set(n.id, file);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const byId = new Map(ir.nodes.map((n) => [n.id, n]));
|
|
47
|
+
for (const e of ir.edges) {
|
|
48
|
+
if (e.kind !== 'describes')
|
|
49
|
+
continue;
|
|
50
|
+
const file = changedByNode.get(e.to);
|
|
51
|
+
const src = byId.get(e.from);
|
|
52
|
+
if (file === undefined || src?.repo === undefined || src.doc === undefined)
|
|
53
|
+
continue;
|
|
54
|
+
const key = `${src.repo}/${src.doc.path.replace(/#.*$/, '')}`;
|
|
55
|
+
add(key, src.displayName, { kind: 'node', file, node: e.to });
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return [...out.values()].sort((a, b) => (a.doc < b.doc ? -1 : 1));
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=doc-stale.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doc-stale.js","sourceRoot":"","sources":["../../../src/architecture/doc-stale.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { type LayoutResult } from './layout.js';
|
|
2
|
+
import { type FlowLevel } from './flow-layout.js';
|
|
3
|
+
import type { EdgeKind, LineStyle } from './types.js';
|
|
4
|
+
import type { ValidatedIr } from './validator.js';
|
|
5
|
+
export type DrillLevelKind = 'root' | 'service' | 'app' | 'server' | 'feature' | 'group';
|
|
6
|
+
/**
|
|
7
|
+
* 레벨에 그리는 선. 세부 엣지를 그대로 옮긴 것이면 count가 1이고 kind가 원래 엣지 kind다.
|
|
8
|
+
* contains는 서비스 카드에서 그 안 기능 영역으로 가는 포함 선이고 IR 엣지가 아니라 parent에서 나온다
|
|
9
|
+
*/
|
|
10
|
+
export interface DrillEdge {
|
|
11
|
+
id: string;
|
|
12
|
+
from: string;
|
|
13
|
+
to: string;
|
|
14
|
+
kind: EdgeKind | 'bundle' | 'contains';
|
|
15
|
+
count: number;
|
|
16
|
+
memberEdgeIds: string[];
|
|
17
|
+
lineStyle: LineStyle;
|
|
18
|
+
/** 묶음 안에 코드 근거와 문서나 사용자 근거가 섞였을 때만 붙는다. memberEdgeIds 중 점선인 고리 수다 */
|
|
19
|
+
inferred?: number;
|
|
20
|
+
}
|
|
21
|
+
export interface DrillLevel {
|
|
22
|
+
/** `root`, `service:<id>`, `app:<id>`, `server:<id>`, `feature:<id>`, `group:<id>` */
|
|
23
|
+
id: string;
|
|
24
|
+
kind: DrillLevelKind;
|
|
25
|
+
focusId?: string;
|
|
26
|
+
title: string;
|
|
27
|
+
/** root부터 이 레벨까지의 레벨 id. 빵부스러기가 이 순서로 그린다 */
|
|
28
|
+
trail: string[];
|
|
29
|
+
nodeIds: string[];
|
|
30
|
+
edges: DrillEdge[];
|
|
31
|
+
layout: LayoutResult;
|
|
32
|
+
}
|
|
33
|
+
export interface Drilldown {
|
|
34
|
+
/** root가 맨 앞이고 나머지는 id 순이다 */
|
|
35
|
+
levels: DrillLevel[];
|
|
36
|
+
/** 노드 id → 그 노드를 눌러 들어갈 레벨 id */
|
|
37
|
+
enter: Record<string, string>;
|
|
38
|
+
/** 도메인 흐름 레벨. 노드 그래프가 아니라 행위자 줄 격자라 levels와 따로 싣는다 */
|
|
39
|
+
flows: FlowLevel[];
|
|
40
|
+
}
|
|
41
|
+
export declare const ROOT_LEVEL_ID = "root";
|
|
42
|
+
/** service 노드가 하나라도 그려지면 드릴다운으로 그린다 */
|
|
43
|
+
export declare function shouldDrillDown(validated: ValidatedIr): boolean;
|
|
44
|
+
/**
|
|
45
|
+
* 검증된 IR에서 드릴다운 레벨과 묶음 엣지를 계산하고 레벨마다 elkjs 좌표를 미리 낸다.
|
|
46
|
+
* 정렬은 전부 id 기준이라 같은 입력이면 같은 결과가 나온다.
|
|
47
|
+
*/
|
|
48
|
+
/** 서비스 id → 그린 흐름 수. 카드 배지 폭과 글자가 같은 수를 써야 한다 */
|
|
49
|
+
export declare function flowCountByService(flows: readonly FlowLevel[]): Record<string, number>;
|
|
50
|
+
export declare function computeDrilldown(validated: ValidatedIr): Promise<Drilldown>;
|
|
51
|
+
//# sourceMappingURL=drilldown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drilldown.d.ts","sourceRoot":"","sources":["../../../src/architecture/drilldown.ts"],"names":[],"mappings":"AAAA,OAAO,EAiBL,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAIrE,OAAO,KAAK,EAAsC,QAAQ,EAAE,SAAS,EAAY,MAAM,YAAY,CAAC;AAEpG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;AAEzF;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,EAAE,SAAS,CAAC;IACrB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,sFAAsF;IACtF,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,8BAA8B;IAC9B,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,sDAAsD;IACtD,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB;AAED,eAAO,MAAM,aAAa,SAAS,CAAC;AA6kCpC,uCAAuC;AACvC,wBAAgB,eAAe,CAAC,SAAS,EAAE,WAAW,GAAG,OAAO,CAgB/D;AAED;;;GAGG;AACH,iDAAiD;AACjD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAItF;AAED,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAuJjF"}
|