@anlyx/core 0.1.3 → 0.1.5

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/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # @anlyx/core
2
2
 
3
- Core data contracts, runtime schemas, config normalization, fixture validation, and report aggregation for Anlyx.
3
+ Core Project JSON schemas, validation, normalization, and local viewer data
4
+ contracts for Anlyx.
4
5
 
5
- See the root Anlyx README for v0.1 usage and scope.
6
+ The public product path is `anlyx.project.json -> validate -> import -> local
7
+ 4777 viewer`.
@@ -0,0 +1,7 @@
1
+ import type { ReportData, ScanResult } from "../schema.js";
2
+ import type { AnlyxFlowFile } from "./schema.js";
3
+ export type NormalizeFlowFileToScanResult = (file: AnlyxFlowFile) => ScanResult;
4
+ export type NormalizeFlowFileToReportData = (file: AnlyxFlowFile) => ReportData;
5
+ export declare function normalizeFlowFileToScanResult(file: AnlyxFlowFile): ScanResult;
6
+ export declare function normalizeFlowFileToReportData(file: AnlyxFlowFile): ReportData;
7
+ //# sourceMappingURL=normalize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../src/flow-spec/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAMV,UAAU,EACV,UAAU,EACX,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EACV,aAAa,EAMd,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,6BAA6B,GAAG,CAAC,IAAI,EAAE,aAAa,KAAK,UAAU,CAAC;AAChF,MAAM,MAAM,6BAA6B,GAAG,CAAC,IAAI,EAAE,aAAa,KAAK,UAAU,CAAC;AAIhF,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,aAAa,GAAG,UAAU,CAU7E;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,aAAa,GAAG,UAAU,CAE7E"}
@@ -0,0 +1,153 @@
1
+ const API_NODE_TYPES = new Set(["api.request", "api.route"]);
2
+ export function normalizeFlowFileToScanResult(file) {
3
+ return {
4
+ projectName: file.project.name,
5
+ generatedAt: file.snapshot?.createdAt ?? new Date().toISOString(),
6
+ schemaVersion: "0.1",
7
+ endpoints: file.flows.flatMap((flow) => flow.nodes.filter(isApiNode).map(toEndpoint)),
8
+ flows: file.flows.map((flow) => toEndpointFlow(flow, file)),
9
+ pages: [],
10
+ warnings: []
11
+ };
12
+ }
13
+ export function normalizeFlowFileToReportData(file) {
14
+ return normalizeFlowFileToScanResult(file);
15
+ }
16
+ function toEndpoint(node) {
17
+ const endpoint = parseEndpointLabel(node.label);
18
+ return {
19
+ id: node.id,
20
+ method: endpoint.method,
21
+ path: endpoint.path,
22
+ supportLevel: "basic",
23
+ confidence: confidenceFromStatus(node.status),
24
+ ...(node.request ? { requestSchema: "Flow JSON request" } : {}),
25
+ ...(node.response ? { responseSchema: "Flow JSON response" } : {})
26
+ };
27
+ }
28
+ function toEndpointFlow(flow, file) {
29
+ const endpointId = flow.nodes.find(isApiNode)?.id ?? flow.nodes[0]?.id ?? flow.id;
30
+ return {
31
+ endpointId,
32
+ nodes: flow.nodes.map((node) => toViewerNode(node, file)),
33
+ edges: flow.edges.map(toViewerEdge),
34
+ mainPath: buildMainPath(flow),
35
+ subFlows: []
36
+ };
37
+ }
38
+ function toViewerNode(node, file) {
39
+ const metadata = {
40
+ ...(node.metadata ?? {}),
41
+ flowJsonType: node.type
42
+ };
43
+ if (file.generatedBy) {
44
+ metadata.generatedBy = file.generatedBy;
45
+ }
46
+ if (file.snapshot) {
47
+ metadata.snapshot = file.snapshot;
48
+ }
49
+ return {
50
+ id: node.id,
51
+ type: toViewerNodeType(node.type),
52
+ label: node.label,
53
+ confidence: confidenceFromStatus(node.status),
54
+ status: node.status,
55
+ ...(node.timing ? { timing: node.timing } : {}),
56
+ ...(node.evidenceIds ? { evidenceIds: node.evidenceIds } : {}),
57
+ ...(node.request ? { request: node.request } : {}),
58
+ ...(node.response ? { response: node.response } : {}),
59
+ metadata
60
+ };
61
+ }
62
+ function toViewerEdge(edge, index) {
63
+ return {
64
+ id: edge.id ?? `edge:${edge.from}:${edge.to}:${index}`,
65
+ from: edge.from,
66
+ to: edge.to,
67
+ kind: "main",
68
+ ...(edge.label ? { label: edge.label } : {}),
69
+ confidence: confidenceFromStatus(edge.status),
70
+ status: edge.status,
71
+ ...(edge.timing ? { timing: edge.timing } : {}),
72
+ ...(edge.evidenceIds ? { evidenceIds: edge.evidenceIds } : {}),
73
+ ...(edge.metadata ? { metadata: edge.metadata } : {})
74
+ };
75
+ }
76
+ function buildMainPath(flow) {
77
+ const firstNode = flow.nodes[0];
78
+ if (!firstNode) {
79
+ return [];
80
+ }
81
+ const nodeIds = new Set(flow.nodes.map((node) => node.id));
82
+ const path = [firstNode.id];
83
+ const visited = new Set(path);
84
+ let current = firstNode.id;
85
+ for (let step = 0; step < flow.edges.length; step += 1) {
86
+ const nextEdge = flow.edges.find((edge) => edge.from === current);
87
+ if (!nextEdge || visited.has(nextEdge.to) || !nodeIds.has(nextEdge.to)) {
88
+ break;
89
+ }
90
+ path.push(nextEdge.to);
91
+ visited.add(nextEdge.to);
92
+ current = nextEdge.to;
93
+ }
94
+ return path;
95
+ }
96
+ function parseEndpointLabel(label) {
97
+ const match = /^(GET|POST|PUT|PATCH|DELETE)\s+(\S+)/.exec(label.trim());
98
+ if (!match) {
99
+ return {
100
+ method: "GET",
101
+ path: label
102
+ };
103
+ }
104
+ return {
105
+ method: match[1],
106
+ path: match[2]
107
+ };
108
+ }
109
+ function confidenceFromStatus(status) {
110
+ if (status === "observed" || status === "measured" || status === "source-matched") {
111
+ return "high";
112
+ }
113
+ if (status === "manual") {
114
+ return "medium";
115
+ }
116
+ if (status === "agent-inferred" || status === "not-proven") {
117
+ return "low";
118
+ }
119
+ return "unknown";
120
+ }
121
+ function isApiNode(node) {
122
+ return API_NODE_TYPES.has(node.type);
123
+ }
124
+ function toViewerNodeType(type) {
125
+ switch (type) {
126
+ case "ui.page":
127
+ case "ui.action":
128
+ case "ui.component":
129
+ return "page";
130
+ case "api.request":
131
+ case "api.route":
132
+ return "endpoint";
133
+ case "external":
134
+ return "externalApi";
135
+ case "response":
136
+ case "result":
137
+ return "schema";
138
+ case "middleware":
139
+ case "auth.session":
140
+ case "queue":
141
+ case "job":
142
+ return "utility";
143
+ case "controller":
144
+ case "service":
145
+ case "repository":
146
+ case "database":
147
+ case "unknown":
148
+ return type;
149
+ default:
150
+ return "unknown";
151
+ }
152
+ }
153
+ //# sourceMappingURL=normalize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/flow-spec/normalize.ts"],"names":[],"mappings":"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"}