@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 +4 -2
- package/dist/flow-spec/normalize.d.ts +7 -0
- package/dist/flow-spec/normalize.d.ts.map +1 -0
- package/dist/flow-spec/normalize.js +153 -0
- package/dist/flow-spec/normalize.js.map +1 -0
- package/dist/flow-spec/schema.d.ts +502 -0
- package/dist/flow-spec/schema.d.ts.map +1 -0
- package/dist/flow-spec/schema.js +186 -0
- package/dist/flow-spec/schema.js.map +1 -0
- package/dist/flow-spec/validate.d.ts +17 -0
- package/dist/flow-spec/validate.d.ts.map +1 -0
- package/dist/flow-spec/validate.js +231 -0
- package/dist/flow-spec/validate.js.map +1 -0
- package/dist/index.d.ts +14 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/live-flow.d.ts +103 -0
- package/dist/live-flow.d.ts.map +1 -0
- package/dist/live-flow.js +325 -0
- package/dist/live-flow.js.map +1 -0
- package/dist/project-normalize.d.ts +21 -0
- package/dist/project-normalize.d.ts.map +1 -0
- package/dist/project-normalize.js +27 -0
- package/dist/project-normalize.js.map +1 -0
- package/dist/project-schema.d.ts +885 -0
- package/dist/project-schema.d.ts.map +1 -0
- package/dist/project-schema.js +253 -0
- package/dist/project-schema.js.map +1 -0
- package/dist/schema.d.ts +1299 -49
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +161 -1
- package/dist/schema.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
const BLOCKED_DECISION_STATUSES = new Set([401, 403, 409]);
|
|
2
|
+
export function normalizeBrowserEventPath(urlOrPath) {
|
|
3
|
+
try {
|
|
4
|
+
const parsed = new URL(urlOrPath, "http://anlyx.local");
|
|
5
|
+
return `${decodeURIComponent(parsed.pathname)}${parsed.search}`;
|
|
6
|
+
}
|
|
7
|
+
catch {
|
|
8
|
+
const withoutHash = urlOrPath.split("#")[0] ?? urlOrPath;
|
|
9
|
+
return withoutHash.startsWith("/") ? withoutHash : `/${withoutHash}`;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export function buildFlowRecordFromBrowserEvent(event, scanResult) {
|
|
13
|
+
const method = event.method.toUpperCase();
|
|
14
|
+
const path = normalizeBrowserEventPath(event.path ?? event.url);
|
|
15
|
+
const match = matchBrowserRequest(event, scanResult);
|
|
16
|
+
const status = event.status;
|
|
17
|
+
const duration = event.durationMs;
|
|
18
|
+
const layers = buildLayers({ event, method, path, status, duration, match });
|
|
19
|
+
const label = `${method} ${path}${status === undefined ? "" : ` -> ${status}`}`;
|
|
20
|
+
const record = {
|
|
21
|
+
id: `flow:${event.id}`,
|
|
22
|
+
requestId: event.id,
|
|
23
|
+
method,
|
|
24
|
+
path,
|
|
25
|
+
trigger: event.action ? "user_action" : "background",
|
|
26
|
+
priority: event.priority ?? (event.action ? "primary" : "primary"),
|
|
27
|
+
runtimeSource: event.runtimeSource ?? "browser",
|
|
28
|
+
matchState: match.state,
|
|
29
|
+
confidence: confidenceForMatch(match),
|
|
30
|
+
layers,
|
|
31
|
+
evidence: collectRecordEvidence(match),
|
|
32
|
+
createdAt: event.observedAt,
|
|
33
|
+
label
|
|
34
|
+
};
|
|
35
|
+
if (event.contextId) {
|
|
36
|
+
record.contextId = event.contextId;
|
|
37
|
+
}
|
|
38
|
+
if (event.pageUrl) {
|
|
39
|
+
record.pageUrl = event.pageUrl;
|
|
40
|
+
}
|
|
41
|
+
if (status !== undefined) {
|
|
42
|
+
record.status = status;
|
|
43
|
+
}
|
|
44
|
+
if (duration !== undefined) {
|
|
45
|
+
record.duration = duration;
|
|
46
|
+
record.durationMs = duration;
|
|
47
|
+
}
|
|
48
|
+
if (event.action) {
|
|
49
|
+
record.action = event.action;
|
|
50
|
+
}
|
|
51
|
+
if (match.state === "matched") {
|
|
52
|
+
record.endpoint = match.endpoint;
|
|
53
|
+
record.endpointId = match.endpoint.id;
|
|
54
|
+
record.endpointPath = match.endpoint.path;
|
|
55
|
+
if (match.flow) {
|
|
56
|
+
record.flow = match.flow;
|
|
57
|
+
record.flowId = match.flow.endpointId;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return record;
|
|
61
|
+
}
|
|
62
|
+
export function mergeBackendSpansIntoFlowRecord(record, backendSpans) {
|
|
63
|
+
if (backendSpans.length === 0) {
|
|
64
|
+
return record;
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
...record,
|
|
68
|
+
backendSpans,
|
|
69
|
+
evidence: [
|
|
70
|
+
...record.evidence,
|
|
71
|
+
"backend_observed: development runtime reported server-side method spans"
|
|
72
|
+
]
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
function matchBrowserRequest(event, scanResult) {
|
|
76
|
+
const method = event.method.toUpperCase();
|
|
77
|
+
const path = endpointMatchPath(normalizeBrowserEventPath(event.path ?? event.url));
|
|
78
|
+
const endpoints = scanResult.endpoints.filter((endpoint) => endpoint.method === method && endpointPathMatchesRequestPath(endpoint.path, path));
|
|
79
|
+
if (endpoints.length === 0) {
|
|
80
|
+
return { state: "unmatched" };
|
|
81
|
+
}
|
|
82
|
+
if (endpoints.length > 1) {
|
|
83
|
+
return { state: "ambiguous" };
|
|
84
|
+
}
|
|
85
|
+
const endpoint = endpoints[0];
|
|
86
|
+
return {
|
|
87
|
+
state: "matched",
|
|
88
|
+
endpoint,
|
|
89
|
+
flow: scanResult.flows.find((flow) => flow.endpointId === endpoint.id)
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
function buildLayers(options) {
|
|
93
|
+
const layers = [];
|
|
94
|
+
if (options.event.action) {
|
|
95
|
+
layers.push({
|
|
96
|
+
id: `${options.event.id}:action`,
|
|
97
|
+
type: "action",
|
|
98
|
+
label: options.event.action.label,
|
|
99
|
+
execution: "executed",
|
|
100
|
+
evidenceLevel: "browser_observed",
|
|
101
|
+
evidence: ["browser_observed: user action captured by the browser runtime"],
|
|
102
|
+
...(options.duration !== undefined ? { durationMs: options.duration } : {})
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
layers.push({
|
|
106
|
+
id: `${options.event.id}:api`,
|
|
107
|
+
type: "api",
|
|
108
|
+
label: `${options.method} ${options.path}`,
|
|
109
|
+
execution: "executed",
|
|
110
|
+
evidenceLevel: "browser_observed",
|
|
111
|
+
evidence: ["browser_observed: fetch/XMLHttpRequest observed in the browser"],
|
|
112
|
+
...(options.duration !== undefined ? { durationMs: options.duration } : {}),
|
|
113
|
+
...(options.status !== undefined ? { status: options.status } : {})
|
|
114
|
+
});
|
|
115
|
+
if (options.match.state === "matched" && options.match.flow) {
|
|
116
|
+
layers.push(...buildScannedFlowLayers({
|
|
117
|
+
eventId: options.event.id,
|
|
118
|
+
flow: options.match.flow,
|
|
119
|
+
status: options.status
|
|
120
|
+
}));
|
|
121
|
+
}
|
|
122
|
+
else if (options.status !== undefined && BLOCKED_DECISION_STATUSES.has(options.status)) {
|
|
123
|
+
layers.push(buildBlockedDecisionLayer(options.event.id, options.status));
|
|
124
|
+
}
|
|
125
|
+
layers.push(buildResultLayer(options.event.id, options.status));
|
|
126
|
+
return layers;
|
|
127
|
+
}
|
|
128
|
+
function buildScannedFlowLayers(options) {
|
|
129
|
+
const nodeById = new Map(options.flow.nodes.map((node) => [node.id, node]));
|
|
130
|
+
const pathNodes = options.flow.mainPath
|
|
131
|
+
.map((nodeId) => nodeById.get(nodeId))
|
|
132
|
+
.filter((node) => Boolean(node));
|
|
133
|
+
const blocked = options.status !== undefined && BLOCKED_DECISION_STATUSES.has(options.status);
|
|
134
|
+
const decisionIndex = blocked ? likelyDecisionIndex(pathNodes, options.status) : -1;
|
|
135
|
+
const blockedDecisionLayer = blocked && options.status !== undefined
|
|
136
|
+
? buildBlockedDecisionLayer(options.eventId, options.status)
|
|
137
|
+
: undefined;
|
|
138
|
+
const layers = pathNodes.flatMap((node, index) => {
|
|
139
|
+
const type = layerTypeForNode(node);
|
|
140
|
+
if (type === "api") {
|
|
141
|
+
return [];
|
|
142
|
+
}
|
|
143
|
+
return [
|
|
144
|
+
{
|
|
145
|
+
id: `${options.eventId}:${node.id}`,
|
|
146
|
+
type,
|
|
147
|
+
label: node.label,
|
|
148
|
+
execution: executionForScannedNode({ node, index, blocked, decisionIndex }),
|
|
149
|
+
evidenceLevel: evidenceForScannedNode({ node, index, blocked, decisionIndex }),
|
|
150
|
+
evidence: evidenceTextForScannedNode({ node, index, blocked, decisionIndex }),
|
|
151
|
+
nodeId: node.id,
|
|
152
|
+
...(node.filePath ? { filePath: node.filePath } : {}),
|
|
153
|
+
...(node.lineNumber !== undefined ? { lineNumber: node.lineNumber } : {}),
|
|
154
|
+
...(node.confidence ? { confidence: node.confidence } : {})
|
|
155
|
+
}
|
|
156
|
+
];
|
|
157
|
+
});
|
|
158
|
+
if (blockedDecisionLayer) {
|
|
159
|
+
const insertAfter = lastLayerIndexForNodeIndex({ layers, pathNodes, nodeIndex: decisionIndex });
|
|
160
|
+
layers.splice(insertAfter + 1, 0, blockedDecisionLayer);
|
|
161
|
+
}
|
|
162
|
+
return layers;
|
|
163
|
+
}
|
|
164
|
+
function buildResultLayer(eventId, status) {
|
|
165
|
+
const blocked = status !== undefined && BLOCKED_DECISION_STATUSES.has(status);
|
|
166
|
+
const failed = status !== undefined && status >= 400 && !blocked;
|
|
167
|
+
return {
|
|
168
|
+
id: `${eventId}:result`,
|
|
169
|
+
type: "result",
|
|
170
|
+
label: status === undefined ? "Response pending" : `${status} response`,
|
|
171
|
+
execution: blocked ? "blocked" : "executed",
|
|
172
|
+
evidenceLevel: status === undefined ? "inferred" : "browser_observed",
|
|
173
|
+
evidence: [
|
|
174
|
+
status === undefined
|
|
175
|
+
? "inferred: response status was not reported by the browser runtime"
|
|
176
|
+
: `browser_observed: browser received ${status}${failed ? " error" : ""} response`
|
|
177
|
+
],
|
|
178
|
+
...(status !== undefined ? { status } : {})
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
function buildBlockedDecisionLayer(eventId, status) {
|
|
182
|
+
if (status === 409) {
|
|
183
|
+
return {
|
|
184
|
+
id: `${eventId}:decision:${status}`,
|
|
185
|
+
type: "decision",
|
|
186
|
+
label: "Business decision blocked response",
|
|
187
|
+
execution: "blocked",
|
|
188
|
+
evidenceLevel: "inferred",
|
|
189
|
+
evidence: [
|
|
190
|
+
"inferred: 409 response suggests a business decision stop along the source-matched path",
|
|
191
|
+
"browser_observed: response status was captured by the browser",
|
|
192
|
+
"No server runtime trace is available for this request"
|
|
193
|
+
],
|
|
194
|
+
status
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
return {
|
|
198
|
+
id: `${eventId}:auth:${status}`,
|
|
199
|
+
type: "auth",
|
|
200
|
+
label: status === 401 ? "Authentication blocked response" : "Authorization blocked response",
|
|
201
|
+
execution: "blocked",
|
|
202
|
+
evidenceLevel: "inferred",
|
|
203
|
+
evidence: [
|
|
204
|
+
`inferred: ${status} response suggests an auth or policy stop along the source-matched path`,
|
|
205
|
+
"browser_observed: response status was captured by the browser",
|
|
206
|
+
"No server runtime trace is available for this request"
|
|
207
|
+
],
|
|
208
|
+
status
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
function lastLayerIndexForNodeIndex(options) {
|
|
212
|
+
const node = options.pathNodes[options.nodeIndex];
|
|
213
|
+
if (!node || node.type === "endpoint") {
|
|
214
|
+
return -1;
|
|
215
|
+
}
|
|
216
|
+
return options.layers.findIndex((layer) => layer.nodeId === node.id);
|
|
217
|
+
}
|
|
218
|
+
function executionForScannedNode(options) {
|
|
219
|
+
if (options.blocked &&
|
|
220
|
+
options.index > options.decisionIndex &&
|
|
221
|
+
isDownstreamServerLayer(options.node.type)) {
|
|
222
|
+
return "not_proven";
|
|
223
|
+
}
|
|
224
|
+
return "scanned";
|
|
225
|
+
}
|
|
226
|
+
function evidenceForScannedNode(options) {
|
|
227
|
+
if (options.blocked &&
|
|
228
|
+
options.index > options.decisionIndex &&
|
|
229
|
+
isDownstreamServerLayer(options.node.type)) {
|
|
230
|
+
return "not_proven";
|
|
231
|
+
}
|
|
232
|
+
if (options.node.confidence === "low" || options.node.confidence === "unknown") {
|
|
233
|
+
return "inferred";
|
|
234
|
+
}
|
|
235
|
+
return "source_derived";
|
|
236
|
+
}
|
|
237
|
+
function evidenceTextForScannedNode(options) {
|
|
238
|
+
if (options.blocked &&
|
|
239
|
+
options.index > options.decisionIndex &&
|
|
240
|
+
isDownstreamServerLayer(options.node.type)) {
|
|
241
|
+
return [
|
|
242
|
+
"not_proven: this downstream source-derived layer is after the likely decision point",
|
|
243
|
+
"No server runtime trace is available for this request"
|
|
244
|
+
];
|
|
245
|
+
}
|
|
246
|
+
const level = options.node.confidence === "low" || options.node.confidence === "unknown"
|
|
247
|
+
? "inferred"
|
|
248
|
+
: "source_derived";
|
|
249
|
+
return [`${level}: layer came from imported project source, not server runtime tracing`];
|
|
250
|
+
}
|
|
251
|
+
function likelyDecisionIndex(nodes, status) {
|
|
252
|
+
if (status === 409) {
|
|
253
|
+
const serviceIndex = nodes.findIndex((node) => node.type === "service");
|
|
254
|
+
return serviceIndex === -1 ? firstControllerIndex(nodes) : serviceIndex;
|
|
255
|
+
}
|
|
256
|
+
return firstControllerIndex(nodes);
|
|
257
|
+
}
|
|
258
|
+
function firstControllerIndex(nodes) {
|
|
259
|
+
const controllerIndex = nodes.findIndex((node) => node.type === "controller");
|
|
260
|
+
return controllerIndex === -1 ? 0 : controllerIndex;
|
|
261
|
+
}
|
|
262
|
+
function layerTypeForNode(node) {
|
|
263
|
+
if (node.type === "endpoint") {
|
|
264
|
+
return "api";
|
|
265
|
+
}
|
|
266
|
+
return node.type;
|
|
267
|
+
}
|
|
268
|
+
function isDownstreamServerLayer(type) {
|
|
269
|
+
return type === "service" || type === "repository" || type === "database";
|
|
270
|
+
}
|
|
271
|
+
function confidenceForMatch(match) {
|
|
272
|
+
if (match.state !== "matched") {
|
|
273
|
+
return "low";
|
|
274
|
+
}
|
|
275
|
+
return match.endpoint.confidence ?? "medium";
|
|
276
|
+
}
|
|
277
|
+
function collectRecordEvidence(match) {
|
|
278
|
+
if (match.state === "matched") {
|
|
279
|
+
return [
|
|
280
|
+
"browser_observed: request was captured from the local browser",
|
|
281
|
+
"source_derived: endpoint match and backend flow came from imported report data"
|
|
282
|
+
];
|
|
283
|
+
}
|
|
284
|
+
if (match.state === "ambiguous") {
|
|
285
|
+
return [
|
|
286
|
+
"browser_observed: request was captured from the local browser",
|
|
287
|
+
"not_proven: multiple imported endpoints matched the request shape"
|
|
288
|
+
];
|
|
289
|
+
}
|
|
290
|
+
return [
|
|
291
|
+
"browser_observed: request was captured from the local browser",
|
|
292
|
+
"not_proven: no imported endpoint matched the request"
|
|
293
|
+
];
|
|
294
|
+
}
|
|
295
|
+
function endpointPathMatchesRequestPath(endpointPath, requestPath) {
|
|
296
|
+
const endpointSegments = splitEndpointPath(endpointPath);
|
|
297
|
+
const requestSegments = splitEndpointPath(requestPath);
|
|
298
|
+
if (endpointSegments.length !== requestSegments.length) {
|
|
299
|
+
return false;
|
|
300
|
+
}
|
|
301
|
+
return endpointSegments.every((endpointSegment, index) => {
|
|
302
|
+
const requestSegment = requestSegments[index];
|
|
303
|
+
if (requestSegment === undefined || requestSegment.length === 0) {
|
|
304
|
+
return false;
|
|
305
|
+
}
|
|
306
|
+
if (isDynamicPathSegment(endpointSegment)) {
|
|
307
|
+
return !requestSegment.includes("/");
|
|
308
|
+
}
|
|
309
|
+
return endpointSegment === requestSegment;
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
function splitEndpointPath(path) {
|
|
313
|
+
const pathname = endpointMatchPath(normalizeBrowserEventPath(path));
|
|
314
|
+
if (pathname === "/") {
|
|
315
|
+
return [];
|
|
316
|
+
}
|
|
317
|
+
return pathname.replace(/^\/+|\/+$/g, "").split("/");
|
|
318
|
+
}
|
|
319
|
+
function endpointMatchPath(path) {
|
|
320
|
+
return path.split("?")[0] ?? path;
|
|
321
|
+
}
|
|
322
|
+
function isDynamicPathSegment(segment) {
|
|
323
|
+
return /^\{[^/{}:]+\}$/.test(segment) || /^:[^/{}:]+$/.test(segment);
|
|
324
|
+
}
|
|
325
|
+
//# sourceMappingURL=live-flow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-flow.js","sourceRoot":"","sources":["../src/live-flow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { architectureGraphSchema, projectAreaSchema, projectDataSchema, projectDictionarySchema, projectEvidenceSchema, projectFeatureSchema, projectFlowSchema, projectInfoSchema, projectMeasurementSchema, projectPageSchema, projectRequestSchema, projectSchemaVersionSchema, type ProjectData } from "./project-schema.js";
|
|
3
|
+
export type SplitProjectInput = {
|
|
4
|
+
index: {
|
|
5
|
+
schemaVersion: z.input<typeof projectSchemaVersionSchema>;
|
|
6
|
+
project: z.input<typeof projectInfoSchema>;
|
|
7
|
+
dictionary?: z.input<typeof projectDictionarySchema>;
|
|
8
|
+
};
|
|
9
|
+
areas?: Array<z.input<typeof projectAreaSchema>>;
|
|
10
|
+
pages?: Array<z.input<typeof projectPageSchema>>;
|
|
11
|
+
features?: Array<z.input<typeof projectFeatureSchema>>;
|
|
12
|
+
requests?: Array<z.input<typeof projectRequestSchema>>;
|
|
13
|
+
flows?: Array<z.input<typeof projectFlowSchema>>;
|
|
14
|
+
architecture?: z.input<typeof architectureGraphSchema>;
|
|
15
|
+
evidence?: Array<z.input<typeof projectEvidenceSchema>>;
|
|
16
|
+
measurements?: Array<z.input<typeof projectMeasurementSchema>>;
|
|
17
|
+
dictionary?: z.input<typeof projectDictionarySchema>;
|
|
18
|
+
};
|
|
19
|
+
export type ProjectInput = z.input<typeof projectDataSchema> | SplitProjectInput;
|
|
20
|
+
export declare function normalizeProjectInput(input: unknown): ProjectData;
|
|
21
|
+
//# sourceMappingURL=project-normalize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-normalize.d.ts","sourceRoot":"","sources":["../src/project-normalize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,EACvB,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,wBAAwB,EACxB,iBAAiB,EACjB,oBAAoB,EACpB,0BAA0B,EAC1B,KAAK,WAAW,EACjB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE;QACL,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;QAC1D,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;QAC3C,UAAU,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;KACtD,CAAC;IACF,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC,CAAC;IACjD,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC,CAAC;IACjD,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAC;IACvD,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAC;IACvD,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC,CAAC;IACjD,YAAY,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;IACvD,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC,CAAC;IACxD,YAAY,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC,CAAC;IAC/D,UAAU,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;CACtD,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,GAAG,iBAAiB,CAAC;AAEjF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAkBjE"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { projectDataSchema } from "./project-schema.js";
|
|
2
|
+
export function normalizeProjectInput(input) {
|
|
3
|
+
if (isSplitProjectInput(input)) {
|
|
4
|
+
return projectDataSchema.parse({
|
|
5
|
+
schemaVersion: input.index.schemaVersion,
|
|
6
|
+
project: input.index.project,
|
|
7
|
+
areas: input.areas ?? [],
|
|
8
|
+
pages: input.pages ?? [],
|
|
9
|
+
features: input.features ?? [],
|
|
10
|
+
requests: input.requests ?? [],
|
|
11
|
+
flows: input.flows ?? [],
|
|
12
|
+
architecture: input.architecture ?? { nodes: [], edges: [] },
|
|
13
|
+
evidence: input.evidence ?? [],
|
|
14
|
+
measurements: input.measurements ?? [],
|
|
15
|
+
dictionary: input.dictionary ?? input.index.dictionary ?? { defaultLanguage: "en", terms: [] }
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
return projectDataSchema.parse(input);
|
|
19
|
+
}
|
|
20
|
+
function isSplitProjectInput(input) {
|
|
21
|
+
return (typeof input === "object" &&
|
|
22
|
+
input !== null &&
|
|
23
|
+
"index" in input &&
|
|
24
|
+
typeof input.index === "object" &&
|
|
25
|
+
input.index !== null);
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=project-normalize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-normalize.js","sourceRoot":"","sources":["../src/project-normalize.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,iBAAiB,EAWlB,MAAM,qBAAqB,CAAC;AAqB7B,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,iBAAiB,CAAC,KAAK,CAAC;YAC7B,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,aAAa;YACxC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO;YAC5B,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE;YACxB,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE;YACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE;YAC9B,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE;YAC9B,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE;YACxB,YAAY,EAAE,KAAK,CAAC,YAAY,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC5D,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE;YAC9B,YAAY,EAAE,KAAK,CAAC,YAAY,IAAI,EAAE;YACtC,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;SAC/F,CAAC,CAAC;IACL,CAAC;IAED,OAAO,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACzC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,OAAO,IAAI,KAAK;QAChB,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;QAC/B,KAAK,CAAC,KAAK,KAAK,IAAI,CACrB,CAAC;AACJ,CAAC"}
|