stack-scribe-mcp 0.1.0 → 0.1.2
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/icons.d.ts +7 -0
- package/dist/icons.d.ts.map +1 -0
- package/dist/icons.js +59 -0
- package/dist/icons.js.map +1 -0
- package/dist/index.d.ts +11 -20
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +250 -2942
- package/dist/index.js.map +1 -1
- package/dist/layout.d.ts +11 -0
- package/dist/layout.d.ts.map +1 -0
- package/dist/layout.js +335 -0
- package/dist/layout.js.map +1 -0
- package/dist/node-type-resolution.d.ts +4 -0
- package/dist/node-type-resolution.d.ts.map +1 -0
- package/dist/node-type-resolution.js +125 -0
- package/dist/node-type-resolution.js.map +1 -0
- package/dist/node-types.d.ts +6 -0
- package/dist/node-types.d.ts.map +1 -0
- package/dist/node-types.js +1628 -0
- package/dist/node-types.js.map +1 -0
- package/dist/renderer.d.ts +9 -0
- package/dist/renderer.d.ts.map +1 -0
- package/dist/renderer.js +360 -0
- package/dist/renderer.js.map +1 -0
- package/dist/schema.d.ts +282 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +70 -0
- package/dist/schema.js.map +1 -0
- package/dist/validator.d.ts +14 -0
- package/dist/validator.d.ts.map +1 -0
- package/dist/validator.js +132 -0
- package/dist/validator.js.map +1 -0
- package/package.json +6 -4
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/layout.ts","../src/icons.ts","../src/node-types.ts","../src/node-type-resolution.ts","../src/renderer.ts","../src/schema.ts","../src/validator.ts"],"sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport { writeFileSync } from \"node:fs\";\nimport { McpServer, ResourceTemplate } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport { toJsonSchemaCompat } from \"@modelcontextprotocol/sdk/server/zod-json-schema-compat.js\";\nimport { z } from \"zod\";\nimport { layoutDiagram } from \"./layout.js\";\nimport { renderDiagram, renderDiagramDocument } from \"./renderer.js\";\nimport { DiagramSchema } from \"./schema.js\";\nimport { validate } from \"./validator.js\";\n\nconst SERVER_NAME = \"stack-scribe\";\nconst SERVER_VERSION = \"0.1.0\";\nconst DIAGRAM_SCHEMA_URI = \"stack-scribe://schema/diagram\";\nconst RENDER_RESOURCE_TEMPLATE = \"stack-scribe://render/{renderId}.svg\";\nconst RENDER_RESOURCE_PREFIX = \"stack-scribe://render/\";\nconst RENDER_ARTIFACT_MIME_TYPE = \"image/svg+xml\";\nconst MAX_RENDER_ARTIFACTS = 100;\nconst RENDER_ARTIFACT_TTL_MS = 1000 * 60 * 30;\n\nconst ToolInputSchema = z.object({\n\tdiagram: DiagramSchema,\n});\n\nconst ValidateToolOutputSchema = z.object({\n\tvalid: z.boolean(),\n\terrors: z.array(\n\t\tz.object({\n\t\t\tpath: z.string(),\n\t\t\tmessage: z.string(),\n\t\t})\n\t),\n});\n\nconst RenderToolOutputSchema = z.object({\n\turi: z.string(),\n\tmimeType: z.literal(RENDER_ARTIFACT_MIME_TYPE),\n\twidth: z.number().int().positive(),\n\theight: z.number().int().positive(),\n\texpiresAt: z.string(),\n});\n\nconst JsonValueSchema: z.ZodTypeAny = z.lazy(() =>\n\tz.union([\n\t\tz.string(),\n\t\tz.number(),\n\t\tz.boolean(),\n\t\tz.null(),\n\t\tz.array(JsonValueSchema),\n\t\tz.record(JsonValueSchema),\n\t])\n);\n\nconst SchemaToolOutputSchema = z.object({\n\tschema: z.record(JsonValueSchema),\n});\n\nexport type DiagramJsonSchema = Record<string, unknown>;\n\ninterface RenderArtifact {\n\tcreatedAt: number;\n\theight: number;\n\tmimeType: typeof RENDER_ARTIFACT_MIME_TYPE;\n\tsvg: string;\n\turi: string;\n\twidth: number;\n}\n\nexport interface RenderDiagramArtifact extends RenderArtifact {\n\texpiresAt: string;\n}\n\nconst renderArtifactCache = new Map<string, RenderArtifact>();\n\nfunction createRenderResourceUri(renderId: string): string {\n\treturn `${RENDER_RESOURCE_PREFIX}${renderId}.svg`;\n}\n\nfunction purgeExpiredRenderArtifacts(now = Date.now()): void {\n\tfor (const [renderId, artifact] of renderArtifactCache) {\n\t\tif (artifact.createdAt + RENDER_ARTIFACT_TTL_MS <= now) {\n\t\t\trenderArtifactCache.delete(renderId);\n\t\t}\n\t}\n}\n\nfunction trimRenderArtifacts(): void {\n\tif (renderArtifactCache.size <= MAX_RENDER_ARTIFACTS) {\n\t\treturn;\n\t}\n\n\tconst artifacts = [...renderArtifactCache.entries()].sort((left, right) => left[1].createdAt - right[1].createdAt);\n\tconst excessCount = renderArtifactCache.size - MAX_RENDER_ARTIFACTS;\n\n\tfor (const [renderId] of artifacts.slice(0, excessCount)) {\n\t\trenderArtifactCache.delete(renderId);\n\t}\n}\n\nfunction storeRenderArtifact(artifact: Omit<RenderArtifact, \"uri\">): RenderDiagramArtifact {\n\tpurgeExpiredRenderArtifacts();\n\tconst renderId = randomUUID();\n\tconst uri = createRenderResourceUri(renderId);\n\tconst cachedArtifact: RenderArtifact = {\n\t\t...artifact,\n\t\turi,\n\t};\n\trenderArtifactCache.set(renderId, cachedArtifact);\n\ttrimRenderArtifacts();\n\n\treturn {\n\t\t...cachedArtifact,\n\t\texpiresAt: new Date(cachedArtifact.createdAt + RENDER_ARTIFACT_TTL_MS).toISOString(),\n\t};\n}\n\nfunction getRenderArtifact(renderId: string): RenderArtifact | undefined {\n\tpurgeExpiredRenderArtifacts();\n\treturn renderArtifactCache.get(renderId);\n}\n\nfunction parseRenderId(value: string): string | undefined {\n\tconst cleanedValue = value.replace(/^\\/+/, \"\");\n\tif (!cleanedValue) {\n\t\treturn undefined;\n\t}\n\n\tif (cleanedValue.endsWith(\".svg\")) {\n\t\treturn cleanedValue.slice(0, -4);\n\t}\n\n\treturn cleanedValue;\n}\n\nexport function getDiagramJsonSchema(): DiagramJsonSchema {\n\treturn toJsonSchemaCompat(DiagramSchema, {\n\t\ttarget: \"draft-2020-12\",\n\t\tstrictUnions: true,\n\t}) as DiagramJsonSchema;\n}\n\nexport function validateDiagram(input: unknown) {\n\treturn validate(input);\n}\n\nexport async function renderDiagramFromInput(input: unknown): Promise<{ svg: string; width: number; height: number }> {\n\tconst validation = validateDiagram(input);\n\tif (!validation.valid) {\n\t\tconst detail = validation.errors.map((error) => `${error.path}: ${error.message}`).join(\"\\n\");\n\t\tthrow new Error(`Diagram validation failed\\n${detail}`);\n\t}\n\n\tconst parsed = DiagramSchema.parse(input);\n\tconst positioned = await layoutDiagram(parsed);\n\treturn renderDiagramDocument(positioned);\n}\n\nexport function createServer(): McpServer {\n\tconst server = new McpServer({\n\t\tname: SERVER_NAME,\n\t\tversion: SERVER_VERSION,\n\t});\n\n\tserver.registerTool(\n\t\t\"validate_diagram\",\n\t\t{\n\t\t\ttitle: \"Validate Diagram\",\n\t\t\tdescription: \"Validate a diagram against the stack-scribe schema and semantic rules.\",\n\t\t\tinputSchema: ToolInputSchema,\n\t\t\toutputSchema: ValidateToolOutputSchema,\n\t\t},\n\t\tasync ({ diagram }) => {\n\t\t\tconst result = validateDiagram(diagram);\n\t\t\tconst structuredContent = {\n\t\t\t\tvalid: result.valid,\n\t\t\t\terrors: result.errors.map((error) => ({\n\t\t\t\t\tpath: error.path,\n\t\t\t\t\tmessage: error.message,\n\t\t\t\t})),\n\t\t\t};\n\n\t\t\treturn {\n\t\t\t\tcontent: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\ttext: JSON.stringify(structuredContent, null, 2),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tstructuredContent,\n\t\t\t};\n\t\t}\n\t);\n\n\tserver.registerTool(\n\t\t\"render_diagram\",\n\t\t{\n\t\t\ttitle: \"Render Diagram\",\n\t\t\tdescription: \"Validate, lay out, and render a diagram to an SVG resource.\",\n\t\t\tinputSchema: ToolInputSchema,\n\t\t\toutputSchema: RenderToolOutputSchema,\n\t\t},\n\t\tasync ({ diagram }) => {\n\t\t\tconst rendered = await renderDiagramFromInput(diagram);\n\t\t\tconst artifact = storeRenderArtifact({\n\t\t\t\tcreatedAt: Date.now(),\n\t\t\t\theight: rendered.height,\n\t\t\t\tmimeType: RENDER_ARTIFACT_MIME_TYPE,\n\t\t\t\tsvg: rendered.svg,\n\t\t\t\twidth: rendered.width,\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\tcontent: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\ttext: `Rendered diagram available at ${artifact.uri}`,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"resource_link\",\n\t\t\t\t\t\turi: artifact.uri,\n\t\t\t\t\t\tname: diagram.title ?? \"Rendered Diagram\",\n\t\t\t\t\t\tmimeType: artifact.mimeType,\n\t\t\t\t\t\tdescription: \"Rendered stack-scribe SVG artifact\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tstructuredContent: {\n\t\t\t\t\turi: artifact.uri,\n\t\t\t\t\tmimeType: artifact.mimeType,\n\t\t\t\t\twidth: artifact.width,\n\t\t\t\t\theight: artifact.height,\n\t\t\t\t\texpiresAt: artifact.expiresAt,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t);\n\n\tserver.registerTool(\n\t\t\"save_diagram\",\n\t\t{\n\t\t\ttitle: \"Save Diagram\",\n\t\t\tdescription: \"Write a previously rendered SVG diagram from the in-memory cache directly to disk without passing SVG content through the LLM context.\",\n\t\t\tinputSchema: z.object({\n\t\t\t\turi: z.string().min(1),\n\t\t\t\toutputPath: z.string().min(1),\n\t\t\t}),\n\t\t},\n\t\tasync ({ uri, outputPath }) => {\n\t\t\tconst renderId = parseRenderId(uri.replace(RENDER_RESOURCE_PREFIX, \"\"));\n\t\t\tif (!renderId) {\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: `Render not found or expired: ${uri}` }],\n\t\t\t\t\tisError: true,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst artifact = getRenderArtifact(renderId);\n\t\t\tif (!artifact) {\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: `Render not found or expired: ${uri}` }],\n\t\t\t\t\tisError: true,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\twriteFileSync(outputPath, artifact.svg, \"utf8\");\n\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: `Saved SVG to ${outputPath} (${artifact.svg.length} bytes)` }],\n\t\t\t};\n\t\t}\n\t);\n\n\tserver.registerTool(\n\t\t\"get_diagram_schema\",\n\t\t{\n\t\t\ttitle: \"Get Diagram Schema\",\n\t\t\tdescription: \"Return the JSON Schema that describes the stack-scribe Diagram format.\",\n\t\t\toutputSchema: SchemaToolOutputSchema,\n\t\t},\n\t\tasync () => {\n\t\t\tconst schema = getDiagramJsonSchema();\n\n\t\t\treturn {\n\t\t\t\tcontent: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\ttext: JSON.stringify(schema, null, 2),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tstructuredContent: { schema },\n\t\t\t};\n\t\t}\n\t);\n\n\tserver.registerResource(\n\t\t\"diagram-schema\",\n\t\tDIAGRAM_SCHEMA_URI,\n\t\t{\n\t\t\ttitle: \"Diagram Schema\",\n\t\t\tdescription: \"JSON Schema for the stack-scribe Diagram format.\",\n\t\t\tmimeType: \"application/schema+json\",\n\t\t},\n\t\tasync () => {\n\t\t\tconst schema = getDiagramJsonSchema();\n\n\t\t\treturn {\n\t\t\t\tcontents: [\n\t\t\t\t\t{\n\t\t\t\t\t\turi: DIAGRAM_SCHEMA_URI,\n\t\t\t\t\t\tmimeType: \"application/schema+json\",\n\t\t\t\t\t\ttext: JSON.stringify(schema, null, 2),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t}\n\t);\n\n\tserver.registerResource(\n\t\t\"rendered-diagram\",\n\t\tnew ResourceTemplate(RENDER_RESOURCE_TEMPLATE, { list: undefined }),\n\t\t{\n\t\t\ttitle: \"Rendered Diagram\",\n\t\t\tdescription: \"Session-scoped SVG render artifact produced by stack-scribe.\",\n\t\t\tmimeType: RENDER_ARTIFACT_MIME_TYPE,\n\t\t},\n\t\tasync (uri, variables) => {\n\t\t\tconst renderIdValue = variables.renderId;\n\t\t\tconst renderId = Array.isArray(renderIdValue)\n\t\t\t\t? parseRenderId(renderIdValue[0] ?? \"\")\n\t\t\t\t: parseRenderId(String(renderIdValue ?? \"\")) ?? parseRenderId(uri.pathname);\n\n\t\t\tif (!renderId) {\n\t\t\t\tthrow new Error(`Invalid render artifact URI: ${uri.href}`);\n\t\t\t}\n\n\t\t\tconst artifact = getRenderArtifact(renderId);\n\t\t\tif (!artifact) {\n\t\t\t\tthrow new Error(`Render artifact not found or expired: ${uri.href}`);\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tcontents: [\n\t\t\t\t\t{\n\t\t\t\t\t\turi: artifact.uri,\n\t\t\t\t\t\tmimeType: artifact.mimeType,\n\t\t\t\t\t\ttext: artifact.svg,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t}\n\t);\n\n\treturn server;\n}\n\nexport async function startServer(): Promise<McpServer> {\n\tconst server = createServer();\n\tconst transport = new StdioServerTransport();\n\tawait server.connect(transport);\n\treturn server;\n}\n\nasync function main(): Promise<void> {\n\tawait startServer();\n}\n\nconst isEntrypoint = process.argv[1] && import.meta.url === new URL(process.argv[1], \"file:\").href;\n\nif (isEntrypoint) {\n\tmain().catch((error) => {\n\t\tconsole.error(\"Server error:\", error);\n\t\tprocess.exit(1);\n\t});\n}\n","import ELK from \"elkjs/lib/elk.bundled.js\";\nimport type {\n Diagram,\n Group,\n LayoutDirection,\n LayoutMode,\n Node,\n Position,\n} from \"./schema.js\";\n\nconst DEFAULT_NODE_WIDTH = 120;\nconst DEFAULT_NODE_HEIGHT = 98;\nconst DEFAULT_NODE_SPACING = 120;\nconst DEFAULT_LAYER_SPACING = 180;\nconst DEFAULT_DIRECTION: LayoutDirection = \"RIGHT\";\nconst ICON_SIZE = 64;\nconst ICON_X_OFFSET = Math.round((DEFAULT_NODE_WIDTH - ICON_SIZE) / 2);\n\ninterface ElkLayoutEngine {\n layout(graph: ElkNodeLike): Promise<ElkNodeLike>;\n}\n\nconst ElkConstructor = ELK as unknown as {\n new (): ElkLayoutEngine;\n};\n\nconst elk = new ElkConstructor();\n\ntype PositionedNode = Node & { position: Position };\nexport type PositionedDiagram = Omit<Diagram, \"nodes\"> & {\n nodes: PositionedNode[];\n};\n\ninterface ElkEdgeLike {\n id: string;\n sources: string[];\n targets: string[];\n}\n\ninterface ElkNodeLike {\n id: string;\n width?: number;\n height?: number;\n x?: number;\n y?: number;\n children?: ElkNodeLike[];\n edges?: ElkEdgeLike[];\n layoutOptions?: Record<string, string>;\n}\n\ninterface GraphStats {\n indegree: Map<string, number>;\n outdegree: Map<string, number>;\n adjacency: Map<string, string[]>;\n depth: Map<string, number>;\n maxDepth: number;\n}\n\nfunction compareStrings(left: string, right: string): number {\n return left.localeCompare(right);\n}\n\nfunction getLayoutMode(diagram: Diagram): LayoutMode {\n return diagram.layout?.mode ?? \"hybrid\";\n}\n\nfunction clonePosition(position: Position): Position {\n return { x: position.x, y: position.y };\n}\n\nfunction fallbackPosition(\n index: number,\n direction: LayoutDirection,\n layerSpacing: number\n): Position {\n const distance = index * layerSpacing;\n\n switch (direction) {\n case \"LEFT\":\n return { x: -distance, y: 0 };\n case \"UP\":\n return { x: 0, y: -distance };\n case \"DOWN\":\n return { x: 0, y: distance };\n case \"RIGHT\":\n default:\n return { x: distance, y: 0 };\n }\n}\n\nfunction inferLayoutDirection(diagram: Diagram): LayoutDirection {\n if (diagram.layout?.direction) {\n return diagram.layout.direction;\n }\n\n const nodeById = new Map(diagram.nodes.map((node) => [node.id, node]));\n let horizontalWeight = 0;\n let verticalWeight = 0;\n\n for (const edge of diagram.edges) {\n const source = nodeById.get(edge.from);\n const target = nodeById.get(edge.to);\n\n if (!source?.position || !target?.position) {\n continue;\n }\n\n horizontalWeight += Math.abs(target.position.x - source.position.x);\n verticalWeight += Math.abs(target.position.y - source.position.y);\n }\n\n if (verticalWeight > horizontalWeight) {\n return \"DOWN\";\n }\n\n return DEFAULT_DIRECTION;\n}\n\nfunction buildGraphStats(diagram: Diagram): GraphStats {\n const nodeIds = diagram.nodes.map((node) => node.id).sort(compareStrings);\n const indegree = new Map<string, number>();\n const outdegree = new Map<string, number>();\n const adjacency = new Map<string, string[]>();\n const depth = new Map<string, number>();\n\n for (const nodeId of nodeIds) {\n indegree.set(nodeId, 0);\n outdegree.set(nodeId, 0);\n adjacency.set(nodeId, []);\n depth.set(nodeId, 0);\n }\n\n for (const edge of diagram.edges) {\n if (!adjacency.has(edge.from) || !indegree.has(edge.to)) {\n continue;\n }\n\n adjacency.get(edge.from)?.push(edge.to);\n outdegree.set(edge.from, (outdegree.get(edge.from) ?? 0) + 1);\n indegree.set(edge.to, (indegree.get(edge.to) ?? 0) + 1);\n }\n\n for (const neighbours of adjacency.values()) {\n neighbours.sort(compareStrings);\n }\n\n const indegreeCopy = new Map(indegree);\n const queue = nodeIds.filter((nodeId) => (indegreeCopy.get(nodeId) ?? 0) === 0);\n queue.sort(compareStrings);\n\n while (queue.length > 0) {\n const current = queue.shift();\n if (!current) {\n break;\n }\n\n const currentDepth = depth.get(current) ?? 0;\n for (const next of adjacency.get(current) ?? []) {\n depth.set(next, Math.max(depth.get(next) ?? 0, currentDepth + 1));\n const remaining = (indegreeCopy.get(next) ?? 0) - 1;\n indegreeCopy.set(next, remaining);\n if (remaining === 0) {\n queue.push(next);\n queue.sort(compareStrings);\n }\n }\n }\n\n let maxDepth = 0;\n for (const value of depth.values()) {\n maxDepth = Math.max(maxDepth, value);\n }\n\n return { indegree, outdegree, adjacency, depth, maxDepth };\n}\n\nfunction axisValue(position: Position, direction: LayoutDirection): number {\n switch (direction) {\n case \"LEFT\":\n return -position.x;\n case \"UP\":\n return -position.y;\n case \"DOWN\":\n return position.y;\n case \"RIGHT\":\n default:\n return position.x;\n }\n}\n\nfunction crossAxisValue(position: Position, direction: LayoutDirection): number {\n switch (direction) {\n case \"LEFT\":\n case \"RIGHT\":\n return position.y;\n case \"UP\":\n case \"DOWN\":\n default:\n return position.x;\n }\n}\n\nfunction buildLayerAssignments(\n diagram: Diagram,\n direction: LayoutDirection,\n mode: LayoutMode,\n layerSpacing: number,\n stats: GraphStats\n): Map<string, number> {\n const assignments = new Map<string, number>();\n const nodeById = new Map(diagram.nodes.map((node) => [node.id, node]));\n const rawValues: number[] = [];\n\n for (const node of diagram.nodes) {\n const indegree = stats.indegree.get(node.id) ?? 0;\n const outdegree = stats.outdegree.get(node.id) ?? 0;\n let partition = stats.depth.get(node.id) ?? 0;\n\n if (indegree === 0 && outdegree === 0) {\n partition = stats.maxDepth + 2;\n } else if (outdegree === 0 && indegree > 0) {\n partition = stats.maxDepth + 1;\n }\n\n if (mode === \"hybrid\" && node.position) {\n partition = Math.round(axisValue(node.position, direction) / layerSpacing);\n }\n\n assignments.set(node.id, partition);\n rawValues.push(partition);\n }\n\n const minPartition = rawValues.length > 0 ? Math.min(...rawValues) : 0;\n if (minPartition < 0) {\n for (const nodeId of nodeById.keys()) {\n assignments.set(nodeId, (assignments.get(nodeId) ?? 0) - minPartition);\n }\n }\n\n return assignments;\n}\n\nfunction createParentMap(groups: Group[]): Map<string, string> {\n const parentByChild = new Map<string, string>();\n\n for (const group of [...groups].sort((left, right) => compareStrings(left.id, right.id))) {\n for (const childId of group.children) {\n if (!parentByChild.has(childId)) {\n parentByChild.set(childId, group.id);\n }\n }\n }\n\n return parentByChild;\n}\n\nfunction collectGroupNodeIds(\n groupId: string,\n groupById: Map<string, Group>,\n nodeById: Map<string, Node>\n): string[] {\n const group = groupById.get(groupId);\n if (!group) {\n return [];\n }\n\n const nodeIds: string[] = [];\n for (const childId of group.children) {\n if (nodeById.has(childId)) {\n nodeIds.push(childId);\n continue;\n }\n\n nodeIds.push(...collectGroupNodeIds(childId, groupById, nodeById));\n }\n\n return nodeIds;\n}\n\nfunction buildNodeSortData(\n diagram: Diagram,\n direction: LayoutDirection,\n layerAssignments: Map<string, number>\n): Map<string, { layer: number; cross: number; id: string }> {\n const sortData = new Map<string, { layer: number; cross: number; id: string }>();\n\n for (const node of diagram.nodes) {\n sortData.set(node.id, {\n layer: layerAssignments.get(node.id) ?? 0,\n cross: node.position ? crossAxisValue(node.position, direction) : 0,\n id: node.id,\n });\n }\n\n return sortData;\n}\n\nfunction buildGroupSortData(\n groups: Group[],\n groupById: Map<string, Group>,\n nodeById: Map<string, Node>,\n nodeSortData: Map<string, { layer: number; cross: number; id: string }>\n): Map<string, { layer: number; cross: number; id: string }> {\n const groupSortData = new Map<string, { layer: number; cross: number; id: string }>();\n\n for (const group of groups) {\n const descendantNodeIds = collectGroupNodeIds(group.id, groupById, nodeById);\n if (descendantNodeIds.length === 0) {\n groupSortData.set(group.id, { layer: Number.MAX_SAFE_INTEGER, cross: 0, id: group.id });\n continue;\n }\n\n const descendantData = descendantNodeIds\n .map((nodeId) => nodeSortData.get(nodeId))\n .filter((entry): entry is { layer: number; cross: number; id: string } => Boolean(entry));\n\n descendantData.sort((left, right) => {\n if (left.layer !== right.layer) {\n return left.layer - right.layer;\n }\n if (left.cross !== right.cross) {\n return left.cross - right.cross;\n }\n return compareStrings(left.id, right.id);\n });\n\n const first = descendantData[0] ?? { layer: Number.MAX_SAFE_INTEGER, cross: 0, id: group.id };\n groupSortData.set(group.id, { layer: first.layer, cross: first.cross, id: group.id });\n }\n\n return groupSortData;\n}\n\nfunction sortElementIds(\n ids: string[],\n nodeSortData: Map<string, { layer: number; cross: number; id: string }>,\n groupSortData: Map<string, { layer: number; cross: number; id: string }>\n): string[] {\n return [...ids].sort((leftId, rightId) => {\n const left = nodeSortData.get(leftId) ?? groupSortData.get(leftId);\n const right = nodeSortData.get(rightId) ?? groupSortData.get(rightId);\n\n if (!left || !right) {\n return compareStrings(leftId, rightId);\n }\n if (left.layer !== right.layer) {\n return left.layer - right.layer;\n }\n if (left.cross !== right.cross) {\n return left.cross - right.cross;\n }\n return compareStrings(left.id, right.id);\n });\n}\n\nfunction collectAbsolutePositions(\n elkNode: ElkNodeLike,\n nodeIds: Set<string>,\n positions: Map<string, Position>,\n offsetX = 0,\n offsetY = 0\n): void {\n const absoluteX = offsetX + (elkNode.x ?? 0);\n const absoluteY = offsetY + (elkNode.y ?? 0);\n\n if (nodeIds.has(elkNode.id)) {\n positions.set(elkNode.id, { x: absoluteX + ICON_X_OFFSET, y: absoluteY });\n }\n\n for (const child of elkNode.children ?? []) {\n collectAbsolutePositions(child, nodeIds, positions, absoluteX, absoluteY);\n }\n}\n\nfunction cloneDiagramWithPositions(\n diagram: Diagram,\n positions: Map<string, Position>,\n direction: LayoutDirection,\n layerSpacing: number\n): PositionedDiagram {\n return {\n ...diagram,\n nodes: diagram.nodes.map((node, index) => ({\n ...node,\n position: positions.get(node.id)\n ?? (node.position ? clonePosition(node.position) : fallbackPosition(index, direction, layerSpacing)),\n })),\n };\n}\n\nexport async function layoutDiagram(diagram: Diagram): Promise<PositionedDiagram> {\n const mode = getLayoutMode(diagram);\n const direction = inferLayoutDirection(diagram);\n const nodeSpacing = diagram.layout?.nodeSpacing ?? DEFAULT_NODE_SPACING;\n const layerSpacing = diagram.layout?.layerSpacing ?? DEFAULT_LAYER_SPACING;\n\n if (mode === \"manual\") {\n const positions = new Map<string, Position>();\n for (const [index, node] of diagram.nodes.entries()) {\n if (!node.position) {\n throw new Error(`Manual layout mode requires node \\\"${node.id}\\\" to define position`);\n }\n positions.set(node.id, node.position ? clonePosition(node.position) : fallbackPosition(index, direction, layerSpacing));\n }\n return cloneDiagramWithPositions(diagram, positions, direction, layerSpacing);\n }\n\n const nodeById = new Map(diagram.nodes.map((node) => [node.id, node]));\n const groups = diagram.groups ?? [];\n const groupById = new Map(groups.map((group) => [group.id, group]));\n const stats = buildGraphStats(diagram);\n const layerAssignments = buildLayerAssignments(diagram, direction, mode, layerSpacing, stats);\n const parentByChild = createParentMap(groups);\n const nodeSortData = buildNodeSortData(diagram, direction, layerAssignments);\n const groupSortData = buildGroupSortData(groups, groupById, nodeById, nodeSortData);\n\n const buildLeafNode = (nodeId: string): ElkNodeLike => {\n const layoutOptions: Record<string, string> = {\n \"elk.partitioning.partition\": String(layerAssignments.get(nodeId) ?? 0),\n };\n\n return {\n id: nodeId,\n width: DEFAULT_NODE_WIDTH,\n height: DEFAULT_NODE_HEIGHT,\n layoutOptions,\n };\n };\n\n const buildGroupNode = (groupId: string): ElkNodeLike => {\n const group = groupById.get(groupId);\n if (!group) {\n throw new Error(`Unknown group \\\"${groupId}\\\"`);\n }\n\n const sortedChildren = sortElementIds(group.children, nodeSortData, groupSortData);\n\n return {\n id: group.id,\n layoutOptions: {\n \"elk.padding\": \"[top=40,left=20,bottom=20,right=20]\",\n },\n children: sortedChildren.map((childId) => {\n if (nodeById.has(childId)) {\n return buildLeafNode(childId);\n }\n return buildGroupNode(childId);\n }),\n };\n };\n\n const topLevelIds = sortElementIds(\n [\n ...diagram.nodes.map((node) => node.id).filter((nodeId) => !parentByChild.has(nodeId)),\n ...groups.map((group) => group.id).filter((groupId) => !parentByChild.has(groupId)),\n ],\n nodeSortData,\n groupSortData\n );\n\n const elkGraph: ElkNodeLike = {\n id: \"root\",\n layoutOptions: {\n \"elk.algorithm\": \"layered\",\n \"elk.direction\": direction,\n \"elk.spacing.nodeNode\": String(nodeSpacing),\n \"elk.layered.spacing.nodeNodeBetweenLayers\": String(layerSpacing),\n \"elk.partitioning.activate\": \"true\",\n \"elk.layered.considerModelOrder.strategy\": \"NODES_AND_EDGES\",\n \"elk.layered.crossingMinimization.forceNodeModelOrder\": \"true\",\n \"elk.hierarchyHandling\": \"INCLUDE_CHILDREN\",\n },\n children: topLevelIds.map((id) => (nodeById.has(id) ? buildLeafNode(id) : buildGroupNode(id))),\n edges: diagram.edges.map((edge, index) => ({\n id: `edge-${index}`,\n sources: [edge.from],\n targets: [edge.to],\n })),\n };\n\n const laidOut = await elk.layout(elkGraph);\n const positions = new Map<string, Position>();\n collectAbsolutePositions(laidOut, new Set(nodeById.keys()), positions);\n\n return cloneDiagramWithPositions(diagram, positions, direction, layerSpacing);\n}\n\nexport const layout = layoutDiagram;","import { existsSync, readFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { resolveNodeType } from \"./node-type-resolution.js\";\nimport type { NodeType } from \"./node-types.js\";\nimport { nodeTypeToIcon } from \"./node-types.js\";\n\nconst moduleDir = fileURLToPath(new URL(\".\", import.meta.url));\nconst iconDirectoryCandidates: [string, string, string] = [\n resolve(moduleDir, \"icons\"),\n resolve(moduleDir, \"icons\", \"icons\"),\n resolve(moduleDir, \"..\", \"icons\"),\n];\n\nfunction resolveIconsDirectory(): string {\n for (const candidate of iconDirectoryCandidates) {\n if (existsSync(candidate)) {\n return candidate;\n }\n }\n\n return iconDirectoryCandidates[0];\n}\n\nconst iconsDir = resolveIconsDirectory();\n\nconst iconCache = new Map<string, string>();\n\nexport const fallbackIconSvg = [\n '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"64\" height=\"64\" viewBox=\"0 0 64 64\" role=\"img\" aria-label=\"fallback icon\">',\n '<rect x=\"8\" y=\"8\" width=\"48\" height=\"48\" rx=\"10\" fill=\"#f3f4f6\" stroke=\"#6b7280\" stroke-width=\"2\"/>',\n '<path d=\"M20 24h24M20 32h24M20 40h16\" stroke=\"#6b7280\" stroke-width=\"2.5\" stroke-linecap=\"round\"/>',\n '</svg>',\n].join(\"\");\n\nexport function getIconsDirectory(): string {\n return iconsDir;\n}\n\nexport function getIconPath(type: NodeType | string): string | undefined {\n const resolvedType = resolveNodeType(type);\n if (!resolvedType) {\n return undefined;\n }\n\n return resolve(iconsDir, nodeTypeToIcon[resolvedType]);\n}\n\nexport function getIcon(type: NodeType | string): string {\n const iconPath = getIconPath(type);\n if (!iconPath) {\n return fallbackIconSvg;\n }\n\n const cached = iconCache.get(iconPath);\n if (cached) {\n return cached;\n }\n\n try {\n const svg = readFileSync(iconPath, \"utf8\");\n iconCache.set(iconPath, svg);\n return svg;\n } catch {\n return fallbackIconSvg;\n }\n}\n\nexport function clearIconCache(): void {\n iconCache.clear();\n}","// !! AUTO-GENERATED — do not edit by hand.\n// Run `npm run generate` to regenerate from icons/ directory.\n// Generated: 2026-03-18T22:09:55.627Z\n\nimport { z } from \"zod\";\n\nexport const NodeTypeSchema = z.enum([\n \"aws.analytics.athena\",\n \"aws.analytics.clean-rooms\",\n \"aws.analytics.cloudsearch\",\n \"aws.analytics.data-exchange\",\n \"aws.analytics.data-firehose\",\n \"aws.analytics.datazone\",\n \"aws.analytics.emr\",\n \"aws.analytics.entity-resolution\",\n \"aws.analytics.finspace\",\n \"aws.analytics.glue-databrew\",\n \"aws.analytics.glue\",\n \"aws.analytics.kinesis-data-streams\",\n \"aws.analytics.kinesis-video-streams\",\n \"aws.analytics.kinesis\",\n \"aws.analytics.lake-formation\",\n \"aws.analytics.managed-service-for-apache-flink\",\n \"aws.analytics.managed-streaming-for-apache-kafka\",\n \"aws.analytics.opensearch-service\",\n \"aws.analytics.redshift\",\n \"aws.analytics.sagemaker\",\n \"aws.application-integration.appflow\",\n \"aws.application-integration.appsync\",\n \"aws.application-integration.b2b-data-interchange\",\n \"aws.application-integration.eventbridge\",\n \"aws.application-integration.express-workflows\",\n \"aws.application-integration.managed-workflows-for-apache-airflow\",\n \"aws.application-integration.mq\",\n \"aws.application-integration.simple-notification-service\",\n \"aws.application-integration.simple-queue-service\",\n \"aws.application-integration.step-functions\",\n \"aws.artificial-intelligence.apache-mxnet-on-aws\",\n \"aws.artificial-intelligence.app-studio\",\n \"aws.artificial-intelligence.augmented-ai-a2i\",\n \"aws.artificial-intelligence.bedrock-agentcore\",\n \"aws.artificial-intelligence.bedrock\",\n \"aws.artificial-intelligence.codeguru\",\n \"aws.artificial-intelligence.codewhisperer\",\n \"aws.artificial-intelligence.comprehend-medical\",\n \"aws.artificial-intelligence.comprehend\",\n \"aws.artificial-intelligence.deep-learning-amis\",\n \"aws.artificial-intelligence.deep-learning-containers\",\n \"aws.artificial-intelligence.deepracer\",\n \"aws.artificial-intelligence.devops-guru\",\n \"aws.artificial-intelligence.elastic-inference\",\n \"aws.artificial-intelligence.forecast\",\n \"aws.artificial-intelligence.fraud-detector\",\n \"aws.artificial-intelligence.healthimaging\",\n \"aws.artificial-intelligence.healthlake\",\n \"aws.artificial-intelligence.healthomics\",\n \"aws.artificial-intelligence.healthscribe\",\n \"aws.artificial-intelligence.kendra\",\n \"aws.artificial-intelligence.lex\",\n \"aws.artificial-intelligence.lookout-for-equipment\",\n \"aws.artificial-intelligence.lookout-for-vision\",\n \"aws.artificial-intelligence.monitron\",\n \"aws.artificial-intelligence.neuron\",\n \"aws.artificial-intelligence.nova\",\n \"aws.artificial-intelligence.panorama\",\n \"aws.artificial-intelligence.personalize\",\n \"aws.artificial-intelligence.polly\",\n \"aws.artificial-intelligence.pytorch-on-aws\",\n \"aws.artificial-intelligence.q\",\n \"aws.artificial-intelligence.rekognition\",\n \"aws.artificial-intelligence.sagemaker-ai\",\n \"aws.artificial-intelligence.sagemaker-ground-truth\",\n \"aws.artificial-intelligence.sagemaker-studio-lab\",\n \"aws.artificial-intelligence.tensorflow-on-aws\",\n \"aws.artificial-intelligence.textract\",\n \"aws.artificial-intelligence.transcribe\",\n \"aws.artificial-intelligence.translate\",\n \"aws.blockchain.managed-blockchain\",\n \"aws.business-applications.appfabric\",\n \"aws.business-applications.chime-sdk\",\n \"aws.business-applications.chime\",\n \"aws.business-applications.connect\",\n \"aws.business-applications.end-user-messaging\",\n \"aws.business-applications.pinpoint-apis\",\n \"aws.business-applications.pinpoint\",\n \"aws.business-applications.quick-suite\",\n \"aws.business-applications.simple-email-service\",\n \"aws.business-applications.supply-chain\",\n \"aws.business-applications.wickr\",\n \"aws.business-applications.workdocs-sdk\",\n \"aws.business-applications.workdocs\",\n \"aws.business-applications.workmail\",\n \"aws.cloud-financial-management.billing-conductor\",\n \"aws.cloud-financial-management.budgets\",\n \"aws.cloud-financial-management.cost-and-usage-report\",\n \"aws.cloud-financial-management.cost-explorer\",\n \"aws.cloud-financial-management.reserved-instance-reporting\",\n \"aws.cloud-financial-management.savings-plans\",\n \"aws.compute.app-runner\",\n \"aws.compute.batch\",\n \"aws.compute.bottlerocket\",\n \"aws.compute.compute-optimizer\",\n \"aws.compute.dcv\",\n \"aws.compute.ec2-auto-scaling\",\n \"aws.compute.ec2-image-builder\",\n \"aws.compute.ec2\",\n \"aws.compute.elastic-beanstalk\",\n \"aws.compute.elastic-fabric-adapter\",\n \"aws.compute.elastic-vmware-service\",\n \"aws.compute.lambda\",\n \"aws.compute.lightsail-for-research\",\n \"aws.compute.lightsail\",\n \"aws.compute.local-zones\",\n \"aws.compute.nitro-enclaves\",\n \"aws.compute.outposts-family\",\n \"aws.compute.outposts-rack\",\n \"aws.compute.outposts-servers\",\n \"aws.compute.parallel-cluster\",\n \"aws.compute.parallel-computing-service\",\n \"aws.compute.serverless-application-repository\",\n \"aws.compute.simspace-weaver\",\n \"aws.compute.wavelength\",\n \"aws.containers.ecs-anywhere\",\n \"aws.containers.eks-anywhere\",\n \"aws.containers.eks-distro\",\n \"aws.containers.elastic-container-registry\",\n \"aws.containers.elastic-container-service\",\n \"aws.containers.elastic-kubernetes-service\",\n \"aws.containers.fargate\",\n \"aws.containers.red-hat-openshift-service-on-aws\",\n \"aws.customer-enablement.activate\",\n \"aws.customer-enablement.iq\",\n \"aws.customer-enablement.managed-services\",\n \"aws.customer-enablement.professional-services\",\n \"aws.customer-enablement.repost-private\",\n \"aws.customer-enablement.repost\",\n \"aws.customer-enablement.support\",\n \"aws.customer-enablement.training-certification\",\n \"aws.databases.aurora\",\n \"aws.databases.database-migration-service\",\n \"aws.databases.documentdb\",\n \"aws.databases.dynamodb\",\n \"aws.databases.elasticache\",\n \"aws.databases.keyspaces\",\n \"aws.databases.memorydb\",\n \"aws.databases.neptune\",\n \"aws.databases.oracle-database-at-aws\",\n \"aws.databases.rds\",\n \"aws.databases.timestream\",\n \"aws.developer-tools.cloud-control-api\",\n \"aws.developer-tools.cloud-development-kit\",\n \"aws.developer-tools.cloud9\",\n \"aws.developer-tools.cloudshell\",\n \"aws.developer-tools.codeartifact\",\n \"aws.developer-tools.codebuild\",\n \"aws.developer-tools.codecatalyst\",\n \"aws.developer-tools.codecommit\",\n \"aws.developer-tools.codedeploy\",\n \"aws.developer-tools.codepipeline\",\n \"aws.developer-tools.command-line-interface\",\n \"aws.developer-tools.corretto\",\n \"aws.developer-tools.fault-injection-service\",\n \"aws.developer-tools.infrastructure-composer\",\n \"aws.developer-tools.tools-and-sdks\",\n \"aws.developer-tools.x-ray\",\n \"aws.end-user-computing.workspaces\",\n \"aws.front-end-web-mobile.amplify\",\n \"aws.front-end-web-mobile.device-farm\",\n \"aws.front-end-web-mobile.location-service\",\n \"aws.games.gamelift-servers\",\n \"aws.games.gamelift-streams\",\n \"aws.games.open-3d-engine\",\n \"aws.general-icons.marketplace_dark\",\n \"aws.general-icons.marketplace_light\",\n \"aws.internet-of-things.freertos\",\n \"aws.internet-of-things.iot-core\",\n \"aws.internet-of-things.iot-device-defender\",\n \"aws.internet-of-things.iot-device-management\",\n \"aws.internet-of-things.iot-events\",\n \"aws.internet-of-things.iot-expresslink\",\n \"aws.internet-of-things.iot-fleetwise\",\n \"aws.internet-of-things.iot-greengrass\",\n \"aws.internet-of-things.iot-sitewise\",\n \"aws.internet-of-things.iot-twinmaker\",\n \"aws.management-tools.appconfig\",\n \"aws.management-tools.application-auto-scaling\",\n \"aws.management-tools.auto-scaling\",\n \"aws.management-tools.backint-agent\",\n \"aws.management-tools.chatbot\",\n \"aws.management-tools.cloudformation\",\n \"aws.management-tools.cloudtrail\",\n \"aws.management-tools.cloudwatch\",\n \"aws.management-tools.compute-optimizer\",\n \"aws.management-tools.config\",\n \"aws.management-tools.console-mobile-application\",\n \"aws.management-tools.control-tower\",\n \"aws.management-tools.devops-agent\",\n \"aws.management-tools.distro-for-opentelemetry\",\n \"aws.management-tools.health-dashboard\",\n \"aws.management-tools.launch-wizard\",\n \"aws.management-tools.license-manager\",\n \"aws.management-tools.managed-grafana\",\n \"aws.management-tools.managed-service-for-prometheus\",\n \"aws.management-tools.management-console\",\n \"aws.management-tools.organizations\",\n \"aws.management-tools.partner-central\",\n \"aws.management-tools.proton\",\n \"aws.management-tools.resilience-hub\",\n \"aws.management-tools.resource-explorer\",\n \"aws.management-tools.service-catalog\",\n \"aws.management-tools.service-management-connector\",\n \"aws.management-tools.systems-manager\",\n \"aws.management-tools.telco-network-builder\",\n \"aws.management-tools.trusted-advisor\",\n \"aws.management-tools.user-notifications\",\n \"aws.management-tools.well-architected-tool\",\n \"aws.media-services.deadline-cloud\",\n \"aws.media-services.elemental-appliances-&-software\",\n \"aws.media-services.elemental-conductor\",\n \"aws.media-services.elemental-delta\",\n \"aws.media-services.elemental-link\",\n \"aws.media-services.elemental-live\",\n \"aws.media-services.elemental-mediaconnect\",\n \"aws.media-services.elemental-mediaconvert\",\n \"aws.media-services.elemental-medialive\",\n \"aws.media-services.elemental-mediapackage\",\n \"aws.media-services.elemental-mediastore\",\n \"aws.media-services.elemental-mediatailor\",\n \"aws.media-services.elemental-server\",\n \"aws.media-services.interactive-video-service\",\n \"aws.media-services.kinesis-video-streams\",\n \"aws.media-services.thinkbox-deadline\",\n \"aws.media-services.thinkbox-frost\",\n \"aws.media-services.thinkbox-krakatoa\",\n \"aws.media-services.thinkbox-stoke\",\n \"aws.media-services.thinkbox-xmesh\",\n \"aws.migration-modernization.application-discovery-service\",\n \"aws.migration-modernization.application-migration-service\",\n \"aws.migration-modernization.data-transfer-terminal\",\n \"aws.migration-modernization.datasync\",\n \"aws.migration-modernization.mainframe-modernization\",\n \"aws.migration-modernization.migration-evaluator\",\n \"aws.migration-modernization.migration-hub\",\n \"aws.migration-modernization.transfer-family\",\n \"aws.migration-modernization.transform\",\n \"aws.networking-content-delivery.api-gateway\",\n \"aws.networking-content-delivery.app-mesh\",\n \"aws.networking-content-delivery.application-recovery-controller\",\n \"aws.networking-content-delivery.client-vpn\",\n \"aws.networking-content-delivery.cloud-map\",\n \"aws.networking-content-delivery.cloud-wan\",\n \"aws.networking-content-delivery.cloudfront\",\n \"aws.networking-content-delivery.direct-connect\",\n \"aws.networking-content-delivery.elastic-load-balancing\",\n \"aws.networking-content-delivery.global-accelerator\",\n \"aws.networking-content-delivery.privatelink\",\n \"aws.networking-content-delivery.route-53\",\n \"aws.networking-content-delivery.rtb-fabric\",\n \"aws.networking-content-delivery.site-to-site-vpn\",\n \"aws.networking-content-delivery.transit-gateway\",\n \"aws.networking-content-delivery.verified-access\",\n \"aws.networking-content-delivery.virtual-private-cloud\",\n \"aws.networking-content-delivery.vpc-lattice\",\n \"aws.quantum-technologies.braket\",\n \"aws.satellite.ground-station\",\n \"aws.security-identity.artifact\",\n \"aws.security-identity.audit-manager\",\n \"aws.security-identity.certificate-manager\",\n \"aws.security-identity.cloud-directory\",\n \"aws.security-identity.cloudhsm\",\n \"aws.security-identity.cognito\",\n \"aws.security-identity.detective\",\n \"aws.security-identity.directory-service\",\n \"aws.security-identity.firewall-manager\",\n \"aws.security-identity.guardduty\",\n \"aws.security-identity.iam-identity-center\",\n \"aws.security-identity.identity-and-access-management\",\n \"aws.security-identity.inspector\",\n \"aws.security-identity.key-management-service\",\n \"aws.security-identity.macie\",\n \"aws.security-identity.network-firewall\",\n \"aws.security-identity.payment-cryptography\",\n \"aws.security-identity.private-certificate-authority\",\n \"aws.security-identity.resource-access-manager\",\n \"aws.security-identity.secrets-manager\",\n \"aws.security-identity.security-agent\",\n \"aws.security-identity.security-hub\",\n \"aws.security-identity.security-incident-response\",\n \"aws.security-identity.security-lake\",\n \"aws.security-identity.shield\",\n \"aws.security-identity.signer\",\n \"aws.security-identity.verified-permissions\",\n \"aws.security-identity.waf\",\n \"aws.storage.backup\",\n \"aws.storage.efs\",\n \"aws.storage.elastic-block-store\",\n \"aws.storage.elastic-disaster-recovery\",\n \"aws.storage.file-cache\",\n \"aws.storage.fsx-for-lustre\",\n \"aws.storage.fsx-for-netapp-ontap\",\n \"aws.storage.fsx-for-openzfs\",\n \"aws.storage.fsx-for-wfs\",\n \"aws.storage.fsx\",\n \"aws.storage.s3-on-outposts\",\n \"aws.storage.simple-storage-service-glacier\",\n \"aws.storage.simple-storage-service\",\n \"aws.storage.snowball-edge\",\n \"aws.storage.snowball\",\n \"aws.storage.storage-gateway\",\n \"aws.analytics.athena.data-source-connectors\",\n \"aws.analytics.cloudsearch.search-documents\",\n \"aws.analytics.data-exchange-for-apis.data-exchange-for-apis\",\n \"aws.analytics.datazone.business-data-catalog\",\n \"aws.analytics.datazone.data-portal\",\n \"aws.analytics.datazone.data-projects\",\n \"aws.analytics.emr.cluster\",\n \"aws.analytics.emr.emr-engine\",\n \"aws.analytics.emr.hdfs-cluster\",\n \"aws.analytics.glue.aws-glue-for-ray\",\n \"aws.analytics.glue.crawler\",\n \"aws.analytics.glue.data-catalog\",\n \"aws.analytics.glue.data-quality\",\n \"aws.analytics.lake-formation.data-lake\",\n \"aws.analytics.msk.amazon-msk-connect\",\n \"aws.analytics.opensearch-service.cluster-administrator-node\",\n \"aws.analytics.opensearch-service.data-node\",\n \"aws.analytics.opensearch-service.index\",\n \"aws.analytics.opensearch-service.observability\",\n \"aws.analytics.opensearch-service.opensearch-dashboards\",\n \"aws.analytics.opensearch-service.opensearch-ingestion\",\n \"aws.analytics.opensearch-service.traces\",\n \"aws.analytics.opensearch-service.ultrawarm-node\",\n \"aws.analytics.redshift.auto-copy\",\n \"aws.analytics.redshift.data-sharing-governance\",\n \"aws.analytics.redshift.dense-compute-node\",\n \"aws.analytics.redshift.dense-storage-node\",\n \"aws.analytics.redshift.ml\",\n \"aws.analytics.redshift.query-editor-v2.0\",\n \"aws.analytics.redshift.ra3\",\n \"aws.analytics.redshift.streaming-ingestion\",\n \"aws.application-integration.eventbridge-event.eventbridge-event\",\n \"aws.application-integration.eventbridge.custom-event-bus\",\n \"aws.application-integration.eventbridge.default-event-bus\",\n \"aws.application-integration.eventbridge.pipes\",\n \"aws.application-integration.eventbridge.rule\",\n \"aws.application-integration.eventbridge.saas-partner-event\",\n \"aws.application-integration.eventbridge.scheduler\",\n \"aws.application-integration.eventbridge.schema-registry\",\n \"aws.application-integration.eventbridge.schema\",\n \"aws.application-integration.mq.broker\",\n \"aws.application-integration.simple-notification-service.email-notification\",\n \"aws.application-integration.simple-notification-service.http-notification\",\n \"aws.application-integration.simple-notification-service.topic\",\n \"aws.application-integration.simple-queue-service.message\",\n \"aws.application-integration.simple-queue-service.queue\",\n \"aws.artificial-intelligence.devops-guru.insights\",\n \"aws.artificial-intelligence.rekognition.image\",\n \"aws.artificial-intelligence.rekognition.video\",\n \"aws.artificial-intelligence.sagemaker-ai.canvas\",\n \"aws.artificial-intelligence.sagemaker-ai.geospatial-ml\",\n \"aws.artificial-intelligence.sagemaker-ai.model\",\n \"aws.artificial-intelligence.sagemaker-ai.notebook\",\n \"aws.artificial-intelligence.sagemaker-ai.shadow-testing\",\n \"aws.artificial-intelligence.sagemaker-ai.train\",\n \"aws.artificial-intelligence.textract.analyze-lending\",\n \"aws.blockchain.managed-blockchain.blockchain\",\n \"aws.business-applications.pinpoint.journey\",\n \"aws.business-applications.simple-email-service.email\",\n \"aws.compute.ec2.ami\",\n \"aws.compute.ec2.auto-scaling\",\n \"aws.compute.ec2.aws-microservice-extractor-for-.net\",\n \"aws.compute.ec2.db-instance\",\n \"aws.compute.ec2.elastic-ip-address\",\n \"aws.compute.ec2.instance-with-cloudwatch\",\n \"aws.compute.ec2.instance\",\n \"aws.compute.ec2.instances\",\n \"aws.compute.ec2.rescue\",\n \"aws.compute.ec2.spot-instance\",\n \"aws.compute.elastic-beanstalk.application\",\n \"aws.compute.elastic-beanstalk.deployment\",\n \"aws.compute.lambda.lambda-function\",\n \"aws.containers.elastic-container-registry.image\",\n \"aws.containers.elastic-container-registry.registry\",\n \"aws.containers.elastic-container-service.container-1\",\n \"aws.containers.elastic-container-service.container-2\",\n \"aws.containers.elastic-container-service.container-3\",\n \"aws.containers.elastic-container-service.copiiot-cli\",\n \"aws.containers.elastic-container-service.ecs-service-connect\",\n \"aws.containers.elastic-container-service.service\",\n \"aws.containers.elastic-container-service.task\",\n \"aws.containers.elastic-kubernetes-service.eks-on-outposts\",\n \"aws.databases.aurora-instance.aurora-instance\",\n \"aws.databases.aurora-mariadb-instance-alternate.aurora-mariadb-instance-alternate\",\n \"aws.databases.aurora-mariadb-instance.aurora-mariadb-instance\",\n \"aws.databases.aurora-mysql-instance-alternate.aurora-mysql-instance-alternate\",\n \"aws.databases.aurora-mysql-instance.aurora-mysql-instance\",\n \"aws.databases.aurora-oracle-instance-alternate.aurora-oracle-instance-alternate\",\n \"aws.databases.aurora-oracle-instance.aurora-oracle-instance\",\n \"aws.databases.aurora-piops-instance.aurora-piops-instance\",\n \"aws.databases.aurora-postgresql-instance-alternate.aurora-postgresql-instance-alternate\",\n \"aws.databases.aurora-postgresql-instance.aurora-postgresql-instance\",\n \"aws.databases.aurora-sql-server-instance-alternate.aurora-sql-server-instance-alternate\",\n \"aws.databases.aurora-sql-server-instance.aurora-sql-server-instance\",\n \"aws.databases.aurora.amazon-aurora-instance-alternate\",\n \"aws.databases.aurora.amazon-rds-instance-aternate\",\n \"aws.databases.aurora.amazon-rds-instance\",\n \"aws.databases.aurora.trusted-language-extensions-for-postgresql\",\n \"aws.databases.database-migration-service.database-migration-workflow-or-job\",\n \"aws.databases.documentdb.elastic-clusters\",\n \"aws.databases.dynamodb.amazon-dynamodb-accelerator\",\n \"aws.databases.dynamodb.attribute\",\n \"aws.databases.dynamodb.attributes\",\n \"aws.databases.dynamodb.global-secondary-index\",\n \"aws.databases.dynamodb.item\",\n \"aws.databases.dynamodb.items\",\n \"aws.databases.dynamodb.standard-access-table-class\",\n \"aws.databases.dynamodb.standard-infrequent-access-table-class\",\n \"aws.databases.dynamodb.stream\",\n \"aws.databases.dynamodb.table\",\n \"aws.databases.elasticache.cache-node\",\n \"aws.databases.elasticache.elasticache-for-memcached\",\n \"aws.databases.elasticache.elasticache-for-redis\",\n \"aws.databases.elasticache.elasticache-for-valkey\",\n \"aws.databases.rds-proxy-instance-alternate.rds-proxy-instance-alternate\",\n \"aws.databases.rds-proxy-instance.rds-proxy-instance\",\n \"aws.databases.rds.blue-green-deployments\",\n \"aws.databases.rds.multi-az-db-cluster\",\n \"aws.databases.rds.multi-az\",\n \"aws.databases.rds.optimized-writes\",\n \"aws.databases.rds.trusted-language-extensions-for-postgresql\",\n \"aws.developer-tools.cloud9.cloud9\",\n \"aws.front-end-web-mobile.amplify.aws-amplify-studio\",\n \"aws.front-end-web-mobile.location-service.geofence\",\n \"aws.front-end-web-mobile.location-service.map \",\n \"aws.front-end-web-mobile.location-service.place\",\n \"aws.front-end-web-mobile.location-service.routes\",\n \"aws.front-end-web-mobile.location-service.track \",\n \"aws.general.alert.alert\",\n \"aws.general.authenticated-user.authenticated-user\",\n \"aws.general.camera.camera\",\n \"aws.general.chat.chat\",\n \"aws.general.client.client\",\n \"aws.general.cold-storage.cold-storage\",\n \"aws.general.credentials.credentials\",\n \"aws.general.data-stream.data-stream\",\n \"aws.general.data-table.data-table\",\n \"aws.general.database.database\",\n \"aws.general.disk.disk\",\n \"aws.general.document.document\",\n \"aws.general.documents.documents\",\n \"aws.general.email.email\",\n \"aws.general.firewall.firewall\",\n \"aws.general.folder.folder\",\n \"aws.general.folders.folders\",\n \"aws.general.forums.forums\",\n \"aws.general.gear.gear\",\n \"aws.general.generic-application.generic-application\",\n \"aws.general.git-repository.git-repository\",\n \"aws.general.globe.globe\",\n \"aws.general.internet-alt1.internet-alt1\",\n \"aws.general.internet-alt2.internet-alt2\",\n \"aws.general.internet.internet\",\n \"aws.general.json-script.json-script\",\n \"aws.general.logs.logs\",\n \"aws.general.magnifying-glass.magnifying-glass\",\n \"aws.general.management-console.management-console\",\n \"aws.general.metrics.metrics\",\n \"aws.general.mobile-client.mobile-client\",\n \"aws.general.multimedia.multimedia\",\n \"aws.general.office-building.office-building\",\n \"aws.general.programming-language.programming-language\",\n \"aws.general.question.question\",\n \"aws.general.recover.recover\",\n \"aws.general.saml-token.saml-token\",\n \"aws.general.sdk.sdk\",\n \"aws.general.server.server\",\n \"aws.general.servers.servers\",\n \"aws.general.shield.shield\",\n \"aws.general.source-code.source-code\",\n \"aws.general.ssl-padlock.ssl-padlock\",\n \"aws.general.tape-storage.tape-storage\",\n \"aws.general.toolkit.toolkit\",\n \"aws.general.user.user\",\n \"aws.general.users.users\",\n \"aws.iot.iot-core.device-advisor\",\n \"aws.iot.iot-core.device-location\",\n \"aws.iot.iot-device-defender.iot-device-jobs\",\n \"aws.iot.iot-device-management.fleet-hub\",\n \"aws.iot.iot-device-tester.iot-device-tester\",\n \"aws.iot.iot-greengrass.artifact\",\n \"aws.iot.iot-greengrass.component-machine-learning\",\n \"aws.iot.iot-greengrass.component-nucleus\",\n \"aws.iot.iot-greengrass.component-private\",\n \"aws.iot.iot-greengrass.component-public\",\n \"aws.iot.iot-greengrass.component\",\n \"aws.iot.iot-greengrass.connector\",\n \"aws.iot.iot-greengrass.interprocess-communication\",\n \"aws.iot.iot-greengrass.protocol\",\n \"aws.iot.iot-greengrass.recipe\",\n \"aws.iot.iot-greengrass.stream-manager\",\n \"aws.iot.iot-hardware-board.iot-hardware-board\",\n \"aws.iot.iot-rule.iot-rule\",\n \"aws.iot.iot-sitewise.asset-hierarchy\",\n \"aws.iot.iot-sitewise.asset-model\",\n \"aws.iot.iot-sitewise.asset-properties\",\n \"aws.iot.iot-sitewise.asset\",\n \"aws.iot.iot-sitewise.data-streams\",\n \"aws.iot.iot.action\",\n \"aws.iot.iot.actuator\",\n \"aws.iot.iot.alexa_enabled-device\",\n \"aws.iot.iot.alexa_skill\",\n \"aws.iot.iot.alexa_voice-service\",\n \"aws.iot.iot.certificate\",\n \"aws.iot.iot.desired-state\",\n \"aws.iot.iot.device-gateway\",\n \"aws.iot.iot.echo\",\n \"aws.iot.iot.fire-tv_stick\",\n \"aws.iot.iot.fire_tv\",\n \"aws.iot.iot.http2-protocol\",\n \"aws.iot.iot.http_protocol\",\n \"aws.iot.iot.lambda_function\",\n \"aws.iot.iot.lorawan-protocol\",\n \"aws.iot.iot.mqtt_protocol\",\n \"aws.iot.iot.over-air-update\",\n \"aws.iot.iot.policy\",\n \"aws.iot.iot.reported-state\",\n \"aws.iot.iot.sailboat\",\n \"aws.iot.iot.sensor\",\n \"aws.iot.iot.servo\",\n \"aws.iot.iot.shadow\",\n \"aws.iot.iot.simulator\",\n \"aws.iot.iot.thing_bank\",\n \"aws.iot.iot.thing_bicycle\",\n \"aws.iot.iot.thing_camera\",\n \"aws.iot.iot.thing_car\",\n \"aws.iot.iot.thing_cart\",\n \"aws.iot.iot.thing_coffee-pot\",\n \"aws.iot.iot.thing_door-lock\",\n \"aws.iot.iot.thing_factory\",\n \"aws.iot.iot.thing_freertos-device\",\n \"aws.iot.iot.thing_generic\",\n \"aws.iot.iot.thing_house\",\n \"aws.iot.iot.thing_humidity-sensor\",\n \"aws.iot.iot.thing_industrial-pc\",\n \"aws.iot.iot.thing_lightbulb\",\n \"aws.iot.iot.thing_medical-emergency\",\n \"aws.iot.iot.thing_plc\",\n \"aws.iot.iot.thing_police-emergency\",\n \"aws.iot.iot.thing_relay\",\n \"aws.iot.iot.thing_stacklight\",\n \"aws.iot.iot.thing_temperature-humidity-sensor\",\n \"aws.iot.iot.thing_temperature-sensor\",\n \"aws.iot.iot.thing_temperature-vibration-sensor\",\n \"aws.iot.iot.thing_thermostat\",\n \"aws.iot.iot.thing_travel\",\n \"aws.iot.iot.thing_utility\",\n \"aws.iot.iot.thing_vibration-sensor\",\n \"aws.iot.iot.thing_windfarm\",\n \"aws.iot.iot.topic\",\n \"aws.management-governance.cloudformation.change-set\",\n \"aws.management-governance.cloudformation.stack\",\n \"aws.management-governance.cloudformation.template\",\n \"aws.management-governance.cloudtrail.cloudtrail-lake\",\n \"aws.management-governance.cloudwatch.alarm\",\n \"aws.management-governance.cloudwatch.cross-account-observability\",\n \"aws.management-governance.cloudwatch.data-protection\",\n \"aws.management-governance.cloudwatch.event-event-based\",\n \"aws.management-governance.cloudwatch.event-time-based\",\n \"aws.management-governance.cloudwatch.evidently\",\n \"aws.management-governance.cloudwatch.logs\",\n \"aws.management-governance.cloudwatch.metrics-insights\",\n \"aws.management-governance.cloudwatch.rule\",\n \"aws.management-governance.cloudwatch.rum\",\n \"aws.management-governance.cloudwatch.synthetics\",\n \"aws.management-governance.license-manager.application-discovery\",\n \"aws.management-governance.license-manager.license-blending\",\n \"aws.management-governance.organizations.account\",\n \"aws.management-governance.organizations.management-account\",\n \"aws.management-governance.organizations.organizational-unit\",\n \"aws.management-governance.systems-manager.application-manager\",\n \"aws.management-governance.systems-manager.automation\",\n \"aws.management-governance.systems-manager.change-calendar\",\n \"aws.management-governance.systems-manager.change-manager\",\n \"aws.management-governance.systems-manager.compliance\",\n \"aws.management-governance.systems-manager.distributor\",\n \"aws.management-governance.systems-manager.documents\",\n \"aws.management-governance.systems-manager.incident-manager\",\n \"aws.management-governance.systems-manager.inventory\",\n \"aws.management-governance.systems-manager.maintenance-windows\",\n \"aws.management-governance.systems-manager.opscenter\",\n \"aws.management-governance.systems-manager.parameter-store\",\n \"aws.management-governance.systems-manager.patch-manager\",\n \"aws.management-governance.systems-manager.run-command\",\n \"aws.management-governance.systems-manager.session-manager\",\n \"aws.management-governance.systems-manager.state-manager\",\n \"aws.management-governance.trusted-advisor.checklist-cost\",\n \"aws.management-governance.trusted-advisor.checklist-fault-tolerant\",\n \"aws.management-governance.trusted-advisor.checklist-performance\",\n \"aws.management-governance.trusted-advisor.checklist-security\",\n \"aws.management-governance.trusted-advisor.checklist\",\n \"aws.media-services.cloud-digital-interface.cloud-digital-interface\",\n \"aws.media-services.elemental-mediaconnect.mediaconnect-gateway\",\n \"aws.migration-modernization.application-discovery-service.aws-agentless-collector\",\n \"aws.migration-modernization.application-discovery-service.aws-discovery-agent\",\n \"aws.migration-modernization.application-discovery-service.migration-evaluator-collector\",\n \"aws.migration-modernization.datasync.agent\",\n \"aws.migration-modernization.datasync.discovery\",\n \"aws.migration-modernization.mainframe-modernization.analyzer\",\n \"aws.migration-modernization.mainframe-modernization.compiler\",\n \"aws.migration-modernization.mainframe-modernization.converter\",\n \"aws.migration-modernization.mainframe-modernization.developer\",\n \"aws.migration-modernization.mainframe-modernization.runtime\",\n \"aws.migration-modernization.migration-hub.refactor-spaces-applications\",\n \"aws.migration-modernization.migration-hub.refactor-spaces-environments\",\n \"aws.migration-modernization.migration-hub.refactor-spaces-services\",\n \"aws.migration-modernization.transfer-family.aws-as2\",\n \"aws.migration-modernization.transfer-family.aws-ftp\",\n \"aws.migration-modernization.transfer-family.aws-ftps\",\n \"aws.migration-modernization.transfer-family.aws-sftp\",\n \"aws.networking-content-delivery.api-gateway.endpoint\",\n \"aws.networking-content-delivery.app-mesh.mesh\",\n \"aws.networking-content-delivery.app-mesh.virtual-gateway\",\n \"aws.networking-content-delivery.app-mesh.virtual-node\",\n \"aws.networking-content-delivery.app-mesh.virtual-router\",\n \"aws.networking-content-delivery.app-mesh.virtual-service\",\n \"aws.networking-content-delivery.cloud-map.namespace\",\n \"aws.networking-content-delivery.cloud-map.resource\",\n \"aws.networking-content-delivery.cloud-map.service\",\n \"aws.networking-content-delivery.cloud-wan.core-network-edge\",\n \"aws.networking-content-delivery.cloud-wan.segment-network\",\n \"aws.networking-content-delivery.cloud-wan.transit-gateway-route-table-attachment\",\n \"aws.networking-content-delivery.cloudfront.download-distribution\",\n \"aws.networking-content-delivery.cloudfront.edge-location\",\n \"aws.networking-content-delivery.cloudfront.functions\",\n \"aws.networking-content-delivery.cloudfront.streaming-distribution\",\n \"aws.networking-content-delivery.direct-connect.gateway\",\n \"aws.networking-content-delivery.elastic-load-balancing.application-load-balancer\",\n \"aws.networking-content-delivery.elastic-load-balancing.classic-load-balancer\",\n \"aws.networking-content-delivery.elastic-load-balancing.gateway-load-balancer\",\n \"aws.networking-content-delivery.elastic-load-balancing.network-load-balancer\",\n \"aws.networking-content-delivery.route-53-hosted-zone.route-53-hosted-zone\",\n \"aws.networking-content-delivery.route-53.readiness-checks\",\n \"aws.networking-content-delivery.route-53.resolver-dns-firewall\",\n \"aws.networking-content-delivery.route-53.resolver-query-logging\",\n \"aws.networking-content-delivery.route-53.resolver\",\n \"aws.networking-content-delivery.route-53.route-table\",\n \"aws.networking-content-delivery.route-53.routing-controls\",\n \"aws.networking-content-delivery.transit-gateway.attachment\",\n \"aws.networking-content-delivery.vpc.carrier-gateway\",\n \"aws.networking-content-delivery.vpc.customer-gateway\",\n \"aws.networking-content-delivery.vpc.elastic-network-adapter\",\n \"aws.networking-content-delivery.vpc.elastic-network-interface\",\n \"aws.networking-content-delivery.vpc.endpoints\",\n \"aws.networking-content-delivery.vpc.flow-logs\",\n \"aws.networking-content-delivery.vpc.internet-gateway\",\n \"aws.networking-content-delivery.vpc.nat-gateway\",\n \"aws.networking-content-delivery.vpc.network-access-analyzer\",\n \"aws.networking-content-delivery.vpc.network-access-control-list\",\n \"aws.networking-content-delivery.vpc.peering-connection\",\n \"aws.networking-content-delivery.vpc.reachability-analyzer\",\n \"aws.networking-content-delivery.vpc.router\",\n \"aws.networking-content-delivery.vpc.traffic-mirroring\",\n \"aws.networking-content-delivery.vpc.virtual-private-cloud-vpc\",\n \"aws.networking-content-delivery.vpc.vpn-connection\",\n \"aws.networking-content-delivery.vpc.vpn-gateway\",\n \"aws.quantum-technologies.braket.chandelier\",\n \"aws.quantum-technologies.braket.chip\",\n \"aws.quantum-technologies.braket.embedded-simulator\",\n \"aws.quantum-technologies.braket.managed-simulator\",\n \"aws.quantum-technologies.braket.noise-simulator\",\n \"aws.quantum-technologies.braket.qpu\",\n \"aws.quantum-technologies.braket.simulator-1\",\n \"aws.quantum-technologies.braket.simulator-2\",\n \"aws.quantum-technologies.braket.simulator-3\",\n \"aws.quantum-technologies.braket.simulator-4\",\n \"aws.quantum-technologies.braket.simulator\",\n \"aws.quantum-technologies.braket.state-vector\",\n \"aws.quantum-technologies.braket.tensor-network\",\n \"aws.security-identity.certificate-manager.certificate-authority\",\n \"aws.security-identity.directory-service.ad-connector\",\n \"aws.security-identity.directory-service.aws-managed-microsoft-ad\",\n \"aws.security-identity.directory-service.simple-ad\",\n \"aws.security-identity.identity-access-management.add-on\",\n \"aws.security-identity.identity-access-management.aws-sts-alternate\",\n \"aws.security-identity.identity-access-management.aws-sts\",\n \"aws.security-identity.identity-access-management.data-encryption-key\",\n \"aws.security-identity.identity-access-management.encrypted-data\",\n \"aws.security-identity.identity-access-management.iam-access-analyzer\",\n \"aws.security-identity.identity-access-management.iam-roles-anywhere\",\n \"aws.security-identity.identity-access-management.long-term-security-credential\",\n \"aws.security-identity.identity-access-management.mfa-token\",\n \"aws.security-identity.identity-access-management.permissions\",\n \"aws.security-identity.identity-access-management.role\",\n \"aws.security-identity.identity-access-management.temporary-security-credential\",\n \"aws.security-identity.inspector.agent\",\n \"aws.security-identity.key-management-service.external-key-store\",\n \"aws.security-identity.network-firewall.endpoints\",\n \"aws.security-identity.security-hub.finding\",\n \"aws.security-identity.shield.aws-shield-advanced\",\n \"aws.security-identity.waf.bad-bot\",\n \"aws.security-identity.waf.bot-control\",\n \"aws.security-identity.waf.bot\",\n \"aws.security-identity.waf.filtering-rule\",\n \"aws.security-identity.waf.labels\",\n \"aws.security-identity.waf.managed-rule\",\n \"aws.security-identity.waf.rule\",\n \"aws.storage.backup.audit-manager\",\n \"aws.storage.backup.aws-backup-for-aws-cloudformation\",\n \"aws.storage.backup.aws-backup-support-for-amazon-fsx-for-netapp-ontap\",\n \"aws.storage.backup.aws-backup-support-for-amazon-s3\",\n \"aws.storage.backup.aws-backup-support-for-vmware-workloads\",\n \"aws.storage.backup.backup-plan\",\n \"aws.storage.backup.backup-restore\",\n \"aws.storage.backup.backup-vault\",\n \"aws.storage.backup.compliance-reporting\",\n \"aws.storage.backup.compute\",\n \"aws.storage.backup.database\",\n \"aws.storage.backup.gateway\",\n \"aws.storage.backup.legal-hold\",\n \"aws.storage.backup.recovery-point-objective\",\n \"aws.storage.backup.recovery-time-objective\",\n \"aws.storage.backup.storage\",\n \"aws.storage.backup.vault-lock\",\n \"aws.storage.backup.virtual-machine-monitor\",\n \"aws.storage.backup.virtual-machine\",\n \"aws.storage.elastic-block-store.amazon-data-lifecycle-manager\",\n \"aws.storage.elastic-block-store.multiple-volumes\",\n \"aws.storage.elastic-block-store.snapshot\",\n \"aws.storage.elastic-block-store.volume-gp3\",\n \"aws.storage.elastic-block-store.volume\",\n \"aws.storage.elastic-file-system.efs-intelligent-tiering\",\n \"aws.storage.elastic-file-system.efs-one-zone-infrequent-access\",\n \"aws.storage.elastic-file-system.efs-one-zone\",\n \"aws.storage.elastic-file-system.efs-standard-infrequent-access\",\n \"aws.storage.elastic-file-system.efs-standard\",\n \"aws.storage.elastic-file-system.elastic-throughput\",\n \"aws.storage.elastic-file-system.file-system\",\n \"aws.storage.file-cache.hybrid-nfs-linked-datasets\",\n \"aws.storage.file-cache.on-premises-nfs-linked-datasets\",\n \"aws.storage.file-cache.s3-linked-datasets\",\n \"aws.storage.simple-storage-service-glacier.archive\",\n \"aws.storage.simple-storage-service-glacier.vault\",\n \"aws.storage.simple-storage-service.bucket-with-objects\",\n \"aws.storage.simple-storage-service.bucket\",\n \"aws.storage.simple-storage-service.directory-bucket\",\n \"aws.storage.simple-storage-service.general-access-points\",\n \"aws.storage.simple-storage-service.object\",\n \"aws.storage.simple-storage-service.s3-batch-operations\",\n \"aws.storage.simple-storage-service.s3-express-one-zone\",\n \"aws.storage.simple-storage-service.s3-glacier-deep-archive\",\n \"aws.storage.simple-storage-service.s3-glacier-flexible-retrieval\",\n \"aws.storage.simple-storage-service.s3-glacier-instant-retrieval\",\n \"aws.storage.simple-storage-service.s3-intelligent-tiering\",\n \"aws.storage.simple-storage-service.s3-multi-region-access-points\",\n \"aws.storage.simple-storage-service.s3-object-lambda-access-points\",\n \"aws.storage.simple-storage-service.s3-object-lambda\",\n \"aws.storage.simple-storage-service.s3-object-lock\",\n \"aws.storage.simple-storage-service.s3-on-outposts\",\n \"aws.storage.simple-storage-service.s3-one-zone-ia\",\n \"aws.storage.simple-storage-service.s3-replication-time-control\",\n \"aws.storage.simple-storage-service.s3-replication\",\n \"aws.storage.simple-storage-service.s3-select\",\n \"aws.storage.simple-storage-service.s3-standard-ia\",\n \"aws.storage.simple-storage-service.s3-standard\",\n \"aws.storage.simple-storage-service.s3-storage-lens\",\n \"aws.storage.simple-storage-service.s3-tables\",\n \"aws.storage.simple-storage-service.s3-vectors\",\n \"aws.storage.simple-storage-service.vpc-access-points\",\n \"aws.storage.snowball.snowball-import-export\",\n \"aws.storage.storage-gateway.amazon-fsx-file-gateway\",\n \"aws.storage.storage-gateway.amazon-s3-file-gateway\",\n \"aws.storage.storage-gateway.cached-volume\",\n \"aws.storage.storage-gateway.file-gateway\",\n \"aws.storage.storage-gateway.noncached-volume\",\n \"aws.storage.storage-gateway.tape-gateway\",\n \"aws.storage.storage-gateway.virtual-tape-library\",\n \"aws.storage.storage-gateway.volume-gateway\",\n \"aws.category.analytics\",\n \"aws.category.application-integration\",\n \"aws.category.artificial-intelligence\",\n \"aws.category.blockchain\",\n \"aws.category.business-applications\",\n \"aws.category.cloud-financial-management\",\n \"aws.category.compute\",\n \"aws.category.containers\",\n \"aws.category.customer-enablement\",\n \"aws.category.customer-experience\",\n \"aws.category.databases\",\n \"aws.category.developer-tools\",\n \"aws.category.end-user-computing\",\n \"aws.category.front-end-web-mobile\",\n \"aws.category.games\",\n \"aws.category.internet-of-things\",\n \"aws.category.management-tools\",\n \"aws.category.media-services\",\n \"aws.category.migration-modernization\",\n \"aws.category.multicloud-and-hybrid\",\n \"aws.category.networking-content-delivery\",\n \"aws.category.quantum-technologies\",\n \"aws.category.satellite\",\n \"aws.category.security-identity\",\n \"aws.category.serverless\",\n \"aws.category.storage\",\n \"aws.group.account\",\n \"aws.group.auto-scaling-group\",\n \"aws.group.cloud-logo\",\n \"aws.group.cloud\",\n \"aws.group.corporate-data-center\",\n \"aws.group.ec2-instance-contents\",\n \"aws.group.iot-greengrass-deployment\",\n \"aws.group.private-subnet\",\n \"aws.group.public-subnet\",\n \"aws.group.region\",\n \"aws.group.server-contents\",\n \"aws.group.spot-fleet\",\n \"aws.group.virtual-private-cloud-vpc\",\n]);\n\nexport type NodeType = z.infer<typeof NodeTypeSchema>;\n\n/** Maps every NodeType key to its icon path relative to the icons/ directory. */\nexport const nodeTypeToIcon: Record<NodeType, string> = {\n \"aws.analytics.athena\": \"architecture/analytics/athena_64.svg\",\n \"aws.analytics.clean-rooms\": \"architecture/analytics/clean-rooms_64.svg\",\n \"aws.analytics.cloudsearch\": \"architecture/analytics/cloudsearch_64.svg\",\n \"aws.analytics.data-exchange\": \"architecture/analytics/data-exchange_64.svg\",\n \"aws.analytics.data-firehose\": \"architecture/analytics/data-firehose_64.svg\",\n \"aws.analytics.datazone\": \"architecture/analytics/datazone_64.svg\",\n \"aws.analytics.emr\": \"architecture/analytics/emr_64.svg\",\n \"aws.analytics.entity-resolution\": \"architecture/analytics/entity-resolution_64.svg\",\n \"aws.analytics.finspace\": \"architecture/analytics/finspace_64.svg\",\n \"aws.analytics.glue-databrew\": \"architecture/analytics/glue-databrew_64.svg\",\n \"aws.analytics.glue\": \"architecture/analytics/glue_64.svg\",\n \"aws.analytics.kinesis-data-streams\": \"architecture/analytics/kinesis-data-streams_64.svg\",\n \"aws.analytics.kinesis-video-streams\": \"architecture/analytics/kinesis-video-streams_64.svg\",\n \"aws.analytics.kinesis\": \"architecture/analytics/kinesis_64.svg\",\n \"aws.analytics.lake-formation\": \"architecture/analytics/lake-formation_64.svg\",\n \"aws.analytics.managed-service-for-apache-flink\": \"architecture/analytics/managed-service-for-apache-flink_64.svg\",\n \"aws.analytics.managed-streaming-for-apache-kafka\": \"architecture/analytics/managed-streaming-for-apache-kafka_64.svg\",\n \"aws.analytics.opensearch-service\": \"architecture/analytics/opensearch-service_64.svg\",\n \"aws.analytics.redshift\": \"architecture/analytics/redshift_64.svg\",\n \"aws.analytics.sagemaker\": \"architecture/analytics/sagemaker_64.svg\",\n \"aws.application-integration.appflow\": \"architecture/application-integration/appflow_64.svg\",\n \"aws.application-integration.appsync\": \"architecture/application-integration/appsync_64.svg\",\n \"aws.application-integration.b2b-data-interchange\": \"architecture/application-integration/b2b-data-interchange_64.svg\",\n \"aws.application-integration.eventbridge\": \"architecture/application-integration/eventbridge_64.svg\",\n \"aws.application-integration.express-workflows\": \"architecture/application-integration/express-workflows_64.svg\",\n \"aws.application-integration.managed-workflows-for-apache-airflow\": \"architecture/application-integration/managed-workflows-for-apache-airflow_64.svg\",\n \"aws.application-integration.mq\": \"architecture/application-integration/mq_64.svg\",\n \"aws.application-integration.simple-notification-service\": \"architecture/application-integration/simple-notification-service_64.svg\",\n \"aws.application-integration.simple-queue-service\": \"architecture/application-integration/simple-queue-service_64.svg\",\n \"aws.application-integration.step-functions\": \"architecture/application-integration/step-functions_64.svg\",\n \"aws.artificial-intelligence.apache-mxnet-on-aws\": \"architecture/artificial-intelligence/apache-mxnet-on-aws_64.svg\",\n \"aws.artificial-intelligence.app-studio\": \"architecture/artificial-intelligence/app-studio_64.svg\",\n \"aws.artificial-intelligence.augmented-ai-a2i\": \"architecture/artificial-intelligence/augmented-ai-a2i_64.svg\",\n \"aws.artificial-intelligence.bedrock-agentcore\": \"architecture/artificial-intelligence/bedrock-agentcore_64.svg\",\n \"aws.artificial-intelligence.bedrock\": \"architecture/artificial-intelligence/bedrock_64.svg\",\n \"aws.artificial-intelligence.codeguru\": \"architecture/artificial-intelligence/codeguru_64.svg\",\n \"aws.artificial-intelligence.codewhisperer\": \"architecture/artificial-intelligence/codewhisperer_64.svg\",\n \"aws.artificial-intelligence.comprehend-medical\": \"architecture/artificial-intelligence/comprehend-medical_64.svg\",\n \"aws.artificial-intelligence.comprehend\": \"architecture/artificial-intelligence/comprehend_64.svg\",\n \"aws.artificial-intelligence.deep-learning-amis\": \"architecture/artificial-intelligence/deep-learning-amis_64.svg\",\n \"aws.artificial-intelligence.deep-learning-containers\": \"architecture/artificial-intelligence/deep-learning-containers_64.svg\",\n \"aws.artificial-intelligence.deepracer\": \"architecture/artificial-intelligence/deepracer_64.svg\",\n \"aws.artificial-intelligence.devops-guru\": \"architecture/artificial-intelligence/devops-guru_64.svg\",\n \"aws.artificial-intelligence.elastic-inference\": \"architecture/artificial-intelligence/elastic-inference_64.svg\",\n \"aws.artificial-intelligence.forecast\": \"architecture/artificial-intelligence/forecast_64.svg\",\n \"aws.artificial-intelligence.fraud-detector\": \"architecture/artificial-intelligence/fraud-detector_64.svg\",\n \"aws.artificial-intelligence.healthimaging\": \"architecture/artificial-intelligence/healthimaging_64.svg\",\n \"aws.artificial-intelligence.healthlake\": \"architecture/artificial-intelligence/healthlake_64.svg\",\n \"aws.artificial-intelligence.healthomics\": \"architecture/artificial-intelligence/healthomics_64.svg\",\n \"aws.artificial-intelligence.healthscribe\": \"architecture/artificial-intelligence/healthscribe_64.svg\",\n \"aws.artificial-intelligence.kendra\": \"architecture/artificial-intelligence/kendra_64.svg\",\n \"aws.artificial-intelligence.lex\": \"architecture/artificial-intelligence/lex_64.svg\",\n \"aws.artificial-intelligence.lookout-for-equipment\": \"architecture/artificial-intelligence/lookout-for-equipment_64.svg\",\n \"aws.artificial-intelligence.lookout-for-vision\": \"architecture/artificial-intelligence/lookout-for-vision_64.svg\",\n \"aws.artificial-intelligence.monitron\": \"architecture/artificial-intelligence/monitron_64.svg\",\n \"aws.artificial-intelligence.neuron\": \"architecture/artificial-intelligence/neuron_64.svg\",\n \"aws.artificial-intelligence.nova\": \"architecture/artificial-intelligence/nova_64.svg\",\n \"aws.artificial-intelligence.panorama\": \"architecture/artificial-intelligence/panorama_64.svg\",\n \"aws.artificial-intelligence.personalize\": \"architecture/artificial-intelligence/personalize_64.svg\",\n \"aws.artificial-intelligence.polly\": \"architecture/artificial-intelligence/polly_64.svg\",\n \"aws.artificial-intelligence.pytorch-on-aws\": \"architecture/artificial-intelligence/pytorch-on-aws_64.svg\",\n \"aws.artificial-intelligence.q\": \"architecture/artificial-intelligence/q_64.svg\",\n \"aws.artificial-intelligence.rekognition\": \"architecture/artificial-intelligence/rekognition_64.svg\",\n \"aws.artificial-intelligence.sagemaker-ai\": \"architecture/artificial-intelligence/sagemaker-ai_64.svg\",\n \"aws.artificial-intelligence.sagemaker-ground-truth\": \"architecture/artificial-intelligence/sagemaker-ground-truth_64.svg\",\n \"aws.artificial-intelligence.sagemaker-studio-lab\": \"architecture/artificial-intelligence/sagemaker-studio-lab_64.svg\",\n \"aws.artificial-intelligence.tensorflow-on-aws\": \"architecture/artificial-intelligence/tensorflow-on-aws_64.svg\",\n \"aws.artificial-intelligence.textract\": \"architecture/artificial-intelligence/textract_64.svg\",\n \"aws.artificial-intelligence.transcribe\": \"architecture/artificial-intelligence/transcribe_64.svg\",\n \"aws.artificial-intelligence.translate\": \"architecture/artificial-intelligence/translate_64.svg\",\n \"aws.blockchain.managed-blockchain\": \"architecture/blockchain/managed-blockchain_64.svg\",\n \"aws.business-applications.appfabric\": \"architecture/business-applications/appfabric_64.svg\",\n \"aws.business-applications.chime-sdk\": \"architecture/business-applications/chime-sdk_64.svg\",\n \"aws.business-applications.chime\": \"architecture/business-applications/chime_64.svg\",\n \"aws.business-applications.connect\": \"architecture/business-applications/connect_64.svg\",\n \"aws.business-applications.end-user-messaging\": \"architecture/business-applications/end-user-messaging_64.svg\",\n \"aws.business-applications.pinpoint-apis\": \"architecture/business-applications/pinpoint-apis_64.svg\",\n \"aws.business-applications.pinpoint\": \"architecture/business-applications/pinpoint_64.svg\",\n \"aws.business-applications.quick-suite\": \"architecture/business-applications/quick-suite_64.svg\",\n \"aws.business-applications.simple-email-service\": \"architecture/business-applications/simple-email-service_64.svg\",\n \"aws.business-applications.supply-chain\": \"architecture/business-applications/supply-chain_64.svg\",\n \"aws.business-applications.wickr\": \"architecture/business-applications/wickr_64.svg\",\n \"aws.business-applications.workdocs-sdk\": \"architecture/business-applications/workdocs-sdk_64.svg\",\n \"aws.business-applications.workdocs\": \"architecture/business-applications/workdocs_64.svg\",\n \"aws.business-applications.workmail\": \"architecture/business-applications/workmail_64.svg\",\n \"aws.cloud-financial-management.billing-conductor\": \"architecture/cloud-financial-management/billing-conductor_64.svg\",\n \"aws.cloud-financial-management.budgets\": \"architecture/cloud-financial-management/budgets_64.svg\",\n \"aws.cloud-financial-management.cost-and-usage-report\": \"architecture/cloud-financial-management/cost-and-usage-report_64.svg\",\n \"aws.cloud-financial-management.cost-explorer\": \"architecture/cloud-financial-management/cost-explorer_64.svg\",\n \"aws.cloud-financial-management.reserved-instance-reporting\": \"architecture/cloud-financial-management/reserved-instance-reporting_64.svg\",\n \"aws.cloud-financial-management.savings-plans\": \"architecture/cloud-financial-management/savings-plans_64.svg\",\n \"aws.compute.app-runner\": \"architecture/compute/app-runner_64.svg\",\n \"aws.compute.batch\": \"architecture/compute/batch_64.svg\",\n \"aws.compute.bottlerocket\": \"architecture/compute/bottlerocket_64.svg\",\n \"aws.compute.compute-optimizer\": \"architecture/compute/compute-optimizer_64.svg\",\n \"aws.compute.dcv\": \"architecture/compute/dcv_64.svg\",\n \"aws.compute.ec2-auto-scaling\": \"architecture/compute/ec2-auto-scaling_64.svg\",\n \"aws.compute.ec2-image-builder\": \"architecture/compute/ec2-image-builder_64.svg\",\n \"aws.compute.ec2\": \"architecture/compute/ec2_64.svg\",\n \"aws.compute.elastic-beanstalk\": \"architecture/compute/elastic-beanstalk_64.svg\",\n \"aws.compute.elastic-fabric-adapter\": \"architecture/compute/elastic-fabric-adapter_64.svg\",\n \"aws.compute.elastic-vmware-service\": \"architecture/compute/elastic-vmware-service_64.svg\",\n \"aws.compute.lambda\": \"architecture/compute/lambda_64.svg\",\n \"aws.compute.lightsail-for-research\": \"architecture/compute/lightsail-for-research_64.svg\",\n \"aws.compute.lightsail\": \"architecture/compute/lightsail_64.svg\",\n \"aws.compute.local-zones\": \"architecture/compute/local-zones_64.svg\",\n \"aws.compute.nitro-enclaves\": \"architecture/compute/nitro-enclaves_64.svg\",\n \"aws.compute.outposts-family\": \"architecture/compute/outposts-family_64.svg\",\n \"aws.compute.outposts-rack\": \"architecture/compute/outposts-rack_64.svg\",\n \"aws.compute.outposts-servers\": \"architecture/compute/outposts-servers_64.svg\",\n \"aws.compute.parallel-cluster\": \"architecture/compute/parallel-cluster_64.svg\",\n \"aws.compute.parallel-computing-service\": \"architecture/compute/parallel-computing-service_64.svg\",\n \"aws.compute.serverless-application-repository\": \"architecture/compute/serverless-application-repository_64.svg\",\n \"aws.compute.simspace-weaver\": \"architecture/compute/simspace-weaver_64.svg\",\n \"aws.compute.wavelength\": \"architecture/compute/wavelength_64.svg\",\n \"aws.containers.ecs-anywhere\": \"architecture/containers/ecs-anywhere_64.svg\",\n \"aws.containers.eks-anywhere\": \"architecture/containers/eks-anywhere_64.svg\",\n \"aws.containers.eks-distro\": \"architecture/containers/eks-distro_64.svg\",\n \"aws.containers.elastic-container-registry\": \"architecture/containers/elastic-container-registry_64.svg\",\n \"aws.containers.elastic-container-service\": \"architecture/containers/elastic-container-service_64.svg\",\n \"aws.containers.elastic-kubernetes-service\": \"architecture/containers/elastic-kubernetes-service_64.svg\",\n \"aws.containers.fargate\": \"architecture/containers/fargate_64.svg\",\n \"aws.containers.red-hat-openshift-service-on-aws\": \"architecture/containers/red-hat-openshift-service-on-aws_64.svg\",\n \"aws.customer-enablement.activate\": \"architecture/customer-enablement/activate_64.svg\",\n \"aws.customer-enablement.iq\": \"architecture/customer-enablement/iq_64.svg\",\n \"aws.customer-enablement.managed-services\": \"architecture/customer-enablement/managed-services_64.svg\",\n \"aws.customer-enablement.professional-services\": \"architecture/customer-enablement/professional-services_64.svg\",\n \"aws.customer-enablement.repost-private\": \"architecture/customer-enablement/repost-private_64.svg\",\n \"aws.customer-enablement.repost\": \"architecture/customer-enablement/repost_64.svg\",\n \"aws.customer-enablement.support\": \"architecture/customer-enablement/support_64.svg\",\n \"aws.customer-enablement.training-certification\": \"architecture/customer-enablement/training-certification_64.svg\",\n \"aws.databases.aurora\": \"architecture/databases/aurora_64.svg\",\n \"aws.databases.database-migration-service\": \"architecture/databases/database-migration-service_64.svg\",\n \"aws.databases.documentdb\": \"architecture/databases/documentdb_64.svg\",\n \"aws.databases.dynamodb\": \"architecture/databases/dynamodb_64.svg\",\n \"aws.databases.elasticache\": \"architecture/databases/elasticache_64.svg\",\n \"aws.databases.keyspaces\": \"architecture/databases/keyspaces_64.svg\",\n \"aws.databases.memorydb\": \"architecture/databases/memorydb_64.svg\",\n \"aws.databases.neptune\": \"architecture/databases/neptune_64.svg\",\n \"aws.databases.oracle-database-at-aws\": \"architecture/databases/oracle-database-at-aws_64.svg\",\n \"aws.databases.rds\": \"architecture/databases/rds_64.svg\",\n \"aws.databases.timestream\": \"architecture/databases/timestream_64.svg\",\n \"aws.developer-tools.cloud-control-api\": \"architecture/developer-tools/cloud-control-api_64.svg\",\n \"aws.developer-tools.cloud-development-kit\": \"architecture/developer-tools/cloud-development-kit_64.svg\",\n \"aws.developer-tools.cloud9\": \"architecture/developer-tools/cloud9_64.svg\",\n \"aws.developer-tools.cloudshell\": \"architecture/developer-tools/cloudshell_64.svg\",\n \"aws.developer-tools.codeartifact\": \"architecture/developer-tools/codeartifact_64.svg\",\n \"aws.developer-tools.codebuild\": \"architecture/developer-tools/codebuild_64.svg\",\n \"aws.developer-tools.codecatalyst\": \"architecture/developer-tools/codecatalyst_64.svg\",\n \"aws.developer-tools.codecommit\": \"architecture/developer-tools/codecommit_64.svg\",\n \"aws.developer-tools.codedeploy\": \"architecture/developer-tools/codedeploy_64.svg\",\n \"aws.developer-tools.codepipeline\": \"architecture/developer-tools/codepipeline_64.svg\",\n \"aws.developer-tools.command-line-interface\": \"architecture/developer-tools/command-line-interface_64.svg\",\n \"aws.developer-tools.corretto\": \"architecture/developer-tools/corretto_64.svg\",\n \"aws.developer-tools.fault-injection-service\": \"architecture/developer-tools/fault-injection-service_64.svg\",\n \"aws.developer-tools.infrastructure-composer\": \"architecture/developer-tools/infrastructure-composer_64.svg\",\n \"aws.developer-tools.tools-and-sdks\": \"architecture/developer-tools/tools-and-sdks_64.svg\",\n \"aws.developer-tools.x-ray\": \"architecture/developer-tools/x-ray_64.svg\",\n \"aws.end-user-computing.workspaces\": \"architecture/end-user-computing/workspaces_64.svg\",\n \"aws.front-end-web-mobile.amplify\": \"architecture/front-end-web-mobile/amplify_64.svg\",\n \"aws.front-end-web-mobile.device-farm\": \"architecture/front-end-web-mobile/device-farm_64.svg\",\n \"aws.front-end-web-mobile.location-service\": \"architecture/front-end-web-mobile/location-service_64.svg\",\n \"aws.games.gamelift-servers\": \"architecture/games/gamelift-servers_64.svg\",\n \"aws.games.gamelift-streams\": \"architecture/games/gamelift-streams_64.svg\",\n \"aws.games.open-3d-engine\": \"architecture/games/open-3d-engine_64.svg\",\n \"aws.general-icons.marketplace_dark\": \"architecture/general-icons/marketplace_dark_64.svg\",\n \"aws.general-icons.marketplace_light\": \"architecture/general-icons/marketplace_light_64.svg\",\n \"aws.internet-of-things.freertos\": \"architecture/internet-of-things/freertos_64.svg\",\n \"aws.internet-of-things.iot-core\": \"architecture/internet-of-things/iot-core_64.svg\",\n \"aws.internet-of-things.iot-device-defender\": \"architecture/internet-of-things/iot-device-defender_64.svg\",\n \"aws.internet-of-things.iot-device-management\": \"architecture/internet-of-things/iot-device-management_64.svg\",\n \"aws.internet-of-things.iot-events\": \"architecture/internet-of-things/iot-events_64.svg\",\n \"aws.internet-of-things.iot-expresslink\": \"architecture/internet-of-things/iot-expresslink_64.svg\",\n \"aws.internet-of-things.iot-fleetwise\": \"architecture/internet-of-things/iot-fleetwise_64.svg\",\n \"aws.internet-of-things.iot-greengrass\": \"architecture/internet-of-things/iot-greengrass_64.svg\",\n \"aws.internet-of-things.iot-sitewise\": \"architecture/internet-of-things/iot-sitewise_64.svg\",\n \"aws.internet-of-things.iot-twinmaker\": \"architecture/internet-of-things/iot-twinmaker_64.svg\",\n \"aws.management-tools.appconfig\": \"architecture/management-tools/appconfig_64.svg\",\n \"aws.management-tools.application-auto-scaling\": \"architecture/management-tools/application-auto-scaling_64.svg\",\n \"aws.management-tools.auto-scaling\": \"architecture/management-tools/auto-scaling_64.svg\",\n \"aws.management-tools.backint-agent\": \"architecture/management-tools/backint-agent_64.svg\",\n \"aws.management-tools.chatbot\": \"architecture/management-tools/chatbot_64.svg\",\n \"aws.management-tools.cloudformation\": \"architecture/management-tools/cloudformation_64.svg\",\n \"aws.management-tools.cloudtrail\": \"architecture/management-tools/cloudtrail_64.svg\",\n \"aws.management-tools.cloudwatch\": \"architecture/management-tools/cloudwatch_64.svg\",\n \"aws.management-tools.compute-optimizer\": \"architecture/management-tools/compute-optimizer_64.svg\",\n \"aws.management-tools.config\": \"architecture/management-tools/config_64.svg\",\n \"aws.management-tools.console-mobile-application\": \"architecture/management-tools/console-mobile-application_64.svg\",\n \"aws.management-tools.control-tower\": \"architecture/management-tools/control-tower_64.svg\",\n \"aws.management-tools.devops-agent\": \"architecture/management-tools/devops-agent_64.svg\",\n \"aws.management-tools.distro-for-opentelemetry\": \"architecture/management-tools/distro-for-opentelemetry_64.svg\",\n \"aws.management-tools.health-dashboard\": \"architecture/management-tools/health-dashboard_64.svg\",\n \"aws.management-tools.launch-wizard\": \"architecture/management-tools/launch-wizard_64.svg\",\n \"aws.management-tools.license-manager\": \"architecture/management-tools/license-manager_64.svg\",\n \"aws.management-tools.managed-grafana\": \"architecture/management-tools/managed-grafana_64.svg\",\n \"aws.management-tools.managed-service-for-prometheus\": \"architecture/management-tools/managed-service-for-prometheus_64.svg\",\n \"aws.management-tools.management-console\": \"architecture/management-tools/management-console_64.svg\",\n \"aws.management-tools.organizations\": \"architecture/management-tools/organizations_64.svg\",\n \"aws.management-tools.partner-central\": \"architecture/management-tools/partner-central_64.svg\",\n \"aws.management-tools.proton\": \"architecture/management-tools/proton_64.svg\",\n \"aws.management-tools.resilience-hub\": \"architecture/management-tools/resilience-hub_64.svg\",\n \"aws.management-tools.resource-explorer\": \"architecture/management-tools/resource-explorer_64.svg\",\n \"aws.management-tools.service-catalog\": \"architecture/management-tools/service-catalog_64.svg\",\n \"aws.management-tools.service-management-connector\": \"architecture/management-tools/service-management-connector_64.svg\",\n \"aws.management-tools.systems-manager\": \"architecture/management-tools/systems-manager_64.svg\",\n \"aws.management-tools.telco-network-builder\": \"architecture/management-tools/telco-network-builder_64.svg\",\n \"aws.management-tools.trusted-advisor\": \"architecture/management-tools/trusted-advisor_64.svg\",\n \"aws.management-tools.user-notifications\": \"architecture/management-tools/user-notifications_64.svg\",\n \"aws.management-tools.well-architected-tool\": \"architecture/management-tools/well-architected-tool_64.svg\",\n \"aws.media-services.deadline-cloud\": \"architecture/media-services/deadline-cloud_64.svg\",\n \"aws.media-services.elemental-appliances-&-software\": \"architecture/media-services/elemental-appliances-&-software_64.svg\",\n \"aws.media-services.elemental-conductor\": \"architecture/media-services/elemental-conductor_64.svg\",\n \"aws.media-services.elemental-delta\": \"architecture/media-services/elemental-delta_64.svg\",\n \"aws.media-services.elemental-link\": \"architecture/media-services/elemental-link_64.svg\",\n \"aws.media-services.elemental-live\": \"architecture/media-services/elemental-live_64.svg\",\n \"aws.media-services.elemental-mediaconnect\": \"architecture/media-services/elemental-mediaconnect_64.svg\",\n \"aws.media-services.elemental-mediaconvert\": \"architecture/media-services/elemental-mediaconvert_64.svg\",\n \"aws.media-services.elemental-medialive\": \"architecture/media-services/elemental-medialive_64.svg\",\n \"aws.media-services.elemental-mediapackage\": \"architecture/media-services/elemental-mediapackage_64.svg\",\n \"aws.media-services.elemental-mediastore\": \"architecture/media-services/elemental-mediastore_64.svg\",\n \"aws.media-services.elemental-mediatailor\": \"architecture/media-services/elemental-mediatailor_64.svg\",\n \"aws.media-services.elemental-server\": \"architecture/media-services/elemental-server_64.svg\",\n \"aws.media-services.interactive-video-service\": \"architecture/media-services/interactive-video-service_64.svg\",\n \"aws.media-services.kinesis-video-streams\": \"architecture/media-services/kinesis-video-streams_64.svg\",\n \"aws.media-services.thinkbox-deadline\": \"architecture/media-services/thinkbox-deadline_64.svg\",\n \"aws.media-services.thinkbox-frost\": \"architecture/media-services/thinkbox-frost_64.svg\",\n \"aws.media-services.thinkbox-krakatoa\": \"architecture/media-services/thinkbox-krakatoa_64.svg\",\n \"aws.media-services.thinkbox-stoke\": \"architecture/media-services/thinkbox-stoke_64.svg\",\n \"aws.media-services.thinkbox-xmesh\": \"architecture/media-services/thinkbox-xmesh_64.svg\",\n \"aws.migration-modernization.application-discovery-service\": \"architecture/migration-modernization/application-discovery-service_64.svg\",\n \"aws.migration-modernization.application-migration-service\": \"architecture/migration-modernization/application-migration-service_64.svg\",\n \"aws.migration-modernization.data-transfer-terminal\": \"architecture/migration-modernization/data-transfer-terminal_64.svg\",\n \"aws.migration-modernization.datasync\": \"architecture/migration-modernization/datasync_64.svg\",\n \"aws.migration-modernization.mainframe-modernization\": \"architecture/migration-modernization/mainframe-modernization_64.svg\",\n \"aws.migration-modernization.migration-evaluator\": \"architecture/migration-modernization/migration-evaluator_64.svg\",\n \"aws.migration-modernization.migration-hub\": \"architecture/migration-modernization/migration-hub_64.svg\",\n \"aws.migration-modernization.transfer-family\": \"architecture/migration-modernization/transfer-family_64.svg\",\n \"aws.migration-modernization.transform\": \"architecture/migration-modernization/transform_64.svg\",\n \"aws.networking-content-delivery.api-gateway\": \"architecture/networking-content-delivery/api-gateway_64.svg\",\n \"aws.networking-content-delivery.app-mesh\": \"architecture/networking-content-delivery/app-mesh_64.svg\",\n \"aws.networking-content-delivery.application-recovery-controller\": \"architecture/networking-content-delivery/application-recovery-controller_64.svg\",\n \"aws.networking-content-delivery.client-vpn\": \"architecture/networking-content-delivery/client-vpn_64.svg\",\n \"aws.networking-content-delivery.cloud-map\": \"architecture/networking-content-delivery/cloud-map_64.svg\",\n \"aws.networking-content-delivery.cloud-wan\": \"architecture/networking-content-delivery/cloud-wan_64.svg\",\n \"aws.networking-content-delivery.cloudfront\": \"architecture/networking-content-delivery/cloudfront_64.svg\",\n \"aws.networking-content-delivery.direct-connect\": \"architecture/networking-content-delivery/direct-connect_64.svg\",\n \"aws.networking-content-delivery.elastic-load-balancing\": \"architecture/networking-content-delivery/elastic-load-balancing_64.svg\",\n \"aws.networking-content-delivery.global-accelerator\": \"architecture/networking-content-delivery/global-accelerator_64.svg\",\n \"aws.networking-content-delivery.privatelink\": \"architecture/networking-content-delivery/privatelink_64.svg\",\n \"aws.networking-content-delivery.route-53\": \"architecture/networking-content-delivery/route-53_64.svg\",\n \"aws.networking-content-delivery.rtb-fabric\": \"architecture/networking-content-delivery/rtb-fabric_64.svg\",\n \"aws.networking-content-delivery.site-to-site-vpn\": \"architecture/networking-content-delivery/site-to-site-vpn_64.svg\",\n \"aws.networking-content-delivery.transit-gateway\": \"architecture/networking-content-delivery/transit-gateway_64.svg\",\n \"aws.networking-content-delivery.verified-access\": \"architecture/networking-content-delivery/verified-access_64.svg\",\n \"aws.networking-content-delivery.virtual-private-cloud\": \"architecture/networking-content-delivery/virtual-private-cloud_64.svg\",\n \"aws.networking-content-delivery.vpc-lattice\": \"architecture/networking-content-delivery/vpc-lattice_64.svg\",\n \"aws.quantum-technologies.braket\": \"architecture/quantum-technologies/braket_64.svg\",\n \"aws.satellite.ground-station\": \"architecture/satellite/ground-station_64.svg\",\n \"aws.security-identity.artifact\": \"architecture/security-identity/artifact_64.svg\",\n \"aws.security-identity.audit-manager\": \"architecture/security-identity/audit-manager_64.svg\",\n \"aws.security-identity.certificate-manager\": \"architecture/security-identity/certificate-manager_64.svg\",\n \"aws.security-identity.cloud-directory\": \"architecture/security-identity/cloud-directory_64.svg\",\n \"aws.security-identity.cloudhsm\": \"architecture/security-identity/cloudhsm_64.svg\",\n \"aws.security-identity.cognito\": \"architecture/security-identity/cognito_64.svg\",\n \"aws.security-identity.detective\": \"architecture/security-identity/detective_64.svg\",\n \"aws.security-identity.directory-service\": \"architecture/security-identity/directory-service_64.svg\",\n \"aws.security-identity.firewall-manager\": \"architecture/security-identity/firewall-manager_64.svg\",\n \"aws.security-identity.guardduty\": \"architecture/security-identity/guardduty_64.svg\",\n \"aws.security-identity.iam-identity-center\": \"architecture/security-identity/iam-identity-center_64.svg\",\n \"aws.security-identity.identity-and-access-management\": \"architecture/security-identity/identity-and-access-management_64.svg\",\n \"aws.security-identity.inspector\": \"architecture/security-identity/inspector_64.svg\",\n \"aws.security-identity.key-management-service\": \"architecture/security-identity/key-management-service_64.svg\",\n \"aws.security-identity.macie\": \"architecture/security-identity/macie_64.svg\",\n \"aws.security-identity.network-firewall\": \"architecture/security-identity/network-firewall_64.svg\",\n \"aws.security-identity.payment-cryptography\": \"architecture/security-identity/payment-cryptography_64.svg\",\n \"aws.security-identity.private-certificate-authority\": \"architecture/security-identity/private-certificate-authority_64.svg\",\n \"aws.security-identity.resource-access-manager\": \"architecture/security-identity/resource-access-manager_64.svg\",\n \"aws.security-identity.secrets-manager\": \"architecture/security-identity/secrets-manager_64.svg\",\n \"aws.security-identity.security-agent\": \"architecture/security-identity/security-agent_64.svg\",\n \"aws.security-identity.security-hub\": \"architecture/security-identity/security-hub_64.svg\",\n \"aws.security-identity.security-incident-response\": \"architecture/security-identity/security-incident-response_64.svg\",\n \"aws.security-identity.security-lake\": \"architecture/security-identity/security-lake_64.svg\",\n \"aws.security-identity.shield\": \"architecture/security-identity/shield_64.svg\",\n \"aws.security-identity.signer\": \"architecture/security-identity/signer_64.svg\",\n \"aws.security-identity.verified-permissions\": \"architecture/security-identity/verified-permissions_64.svg\",\n \"aws.security-identity.waf\": \"architecture/security-identity/waf_64.svg\",\n \"aws.storage.backup\": \"architecture/storage/backup_64.svg\",\n \"aws.storage.efs\": \"architecture/storage/efs_64.svg\",\n \"aws.storage.elastic-block-store\": \"architecture/storage/elastic-block-store_64.svg\",\n \"aws.storage.elastic-disaster-recovery\": \"architecture/storage/elastic-disaster-recovery_64.svg\",\n \"aws.storage.file-cache\": \"architecture/storage/file-cache_64.svg\",\n \"aws.storage.fsx-for-lustre\": \"architecture/storage/fsx-for-lustre_64.svg\",\n \"aws.storage.fsx-for-netapp-ontap\": \"architecture/storage/fsx-for-netapp-ontap_64.svg\",\n \"aws.storage.fsx-for-openzfs\": \"architecture/storage/fsx-for-openzfs_64.svg\",\n \"aws.storage.fsx-for-wfs\": \"architecture/storage/fsx-for-wfs_64.svg\",\n \"aws.storage.fsx\": \"architecture/storage/fsx_64.svg\",\n \"aws.storage.s3-on-outposts\": \"architecture/storage/s3-on-outposts_64.svg\",\n \"aws.storage.simple-storage-service-glacier\": \"architecture/storage/simple-storage-service-glacier_64.svg\",\n \"aws.storage.simple-storage-service\": \"architecture/storage/simple-storage-service_64.svg\",\n \"aws.storage.snowball-edge\": \"architecture/storage/snowball-edge_64.svg\",\n \"aws.storage.snowball\": \"architecture/storage/snowball_64.svg\",\n \"aws.storage.storage-gateway\": \"architecture/storage/storage-gateway_64.svg\",\n \"aws.analytics.athena.data-source-connectors\": \"resource/analytics/athena_data-source-connectors_48.svg\",\n \"aws.analytics.cloudsearch.search-documents\": \"resource/analytics/cloudsearch_search-documents_48.svg\",\n \"aws.analytics.data-exchange-for-apis.data-exchange-for-apis\": \"resource/analytics/data-exchange-for-apis_48.svg\",\n \"aws.analytics.datazone.business-data-catalog\": \"resource/analytics/datazone_business-data-catalog_48.svg\",\n \"aws.analytics.datazone.data-portal\": \"resource/analytics/datazone_data-portal_48.svg\",\n \"aws.analytics.datazone.data-projects\": \"resource/analytics/datazone_data-projects_48.svg\",\n \"aws.analytics.emr.cluster\": \"resource/analytics/emr_cluster_48.svg\",\n \"aws.analytics.emr.emr-engine\": \"resource/analytics/emr_emr-engine_48.svg\",\n \"aws.analytics.emr.hdfs-cluster\": \"resource/analytics/emr_hdfs-cluster_48.svg\",\n \"aws.analytics.glue.aws-glue-for-ray\": \"resource/analytics/glue_aws-glue-for-ray_48.svg\",\n \"aws.analytics.glue.crawler\": \"resource/analytics/glue_crawler_48.svg\",\n \"aws.analytics.glue.data-catalog\": \"resource/analytics/glue_data-catalog_48.svg\",\n \"aws.analytics.glue.data-quality\": \"resource/analytics/glue_data-quality_48.svg\",\n \"aws.analytics.lake-formation.data-lake\": \"resource/analytics/lake-formation_data-lake_48.svg\",\n \"aws.analytics.msk.amazon-msk-connect\": \"resource/analytics/msk_amazon-msk-connect_48.svg\",\n \"aws.analytics.opensearch-service.cluster-administrator-node\": \"resource/analytics/opensearch-service_cluster-administrator-node_48.svg\",\n \"aws.analytics.opensearch-service.data-node\": \"resource/analytics/opensearch-service_data-node_48.svg\",\n \"aws.analytics.opensearch-service.index\": \"resource/analytics/opensearch-service_index_48.svg\",\n \"aws.analytics.opensearch-service.observability\": \"resource/analytics/opensearch-service_observability_48.svg\",\n \"aws.analytics.opensearch-service.opensearch-dashboards\": \"resource/analytics/opensearch-service_opensearch-dashboards_48.svg\",\n \"aws.analytics.opensearch-service.opensearch-ingestion\": \"resource/analytics/opensearch-service_opensearch-ingestion_48.svg\",\n \"aws.analytics.opensearch-service.traces\": \"resource/analytics/opensearch-service_traces_48.svg\",\n \"aws.analytics.opensearch-service.ultrawarm-node\": \"resource/analytics/opensearch-service_ultrawarm-node_48.svg\",\n \"aws.analytics.redshift.auto-copy\": \"resource/analytics/redshift_auto-copy_48.svg\",\n \"aws.analytics.redshift.data-sharing-governance\": \"resource/analytics/redshift_data-sharing-governance_48.svg\",\n \"aws.analytics.redshift.dense-compute-node\": \"resource/analytics/redshift_dense-compute-node_48.svg\",\n \"aws.analytics.redshift.dense-storage-node\": \"resource/analytics/redshift_dense-storage-node_48.svg\",\n \"aws.analytics.redshift.ml\": \"resource/analytics/redshift_ml_48.svg\",\n \"aws.analytics.redshift.query-editor-v2.0\": \"resource/analytics/redshift_query-editor-v2.0_48.svg\",\n \"aws.analytics.redshift.ra3\": \"resource/analytics/redshift_ra3_48.svg\",\n \"aws.analytics.redshift.streaming-ingestion\": \"resource/analytics/redshift_streaming-ingestion_48.svg\",\n \"aws.application-integration.eventbridge-event.eventbridge-event\": \"resource/application-integration/eventbridge-event_48.svg\",\n \"aws.application-integration.eventbridge.custom-event-bus\": \"resource/application-integration/eventbridge_custom-event-bus_48.svg\",\n \"aws.application-integration.eventbridge.default-event-bus\": \"resource/application-integration/eventbridge_default-event-bus_48.svg\",\n \"aws.application-integration.eventbridge.pipes\": \"resource/application-integration/eventbridge_pipes_48.svg\",\n \"aws.application-integration.eventbridge.rule\": \"resource/application-integration/eventbridge_rule_48.svg\",\n \"aws.application-integration.eventbridge.saas-partner-event\": \"resource/application-integration/eventbridge_saas-partner-event_48.svg\",\n \"aws.application-integration.eventbridge.scheduler\": \"resource/application-integration/eventbridge_scheduler_48.svg\",\n \"aws.application-integration.eventbridge.schema-registry\": \"resource/application-integration/eventbridge_schema-registry_48.svg\",\n \"aws.application-integration.eventbridge.schema\": \"resource/application-integration/eventbridge_schema_48.svg\",\n \"aws.application-integration.mq.broker\": \"resource/application-integration/mq_broker_48.svg\",\n \"aws.application-integration.simple-notification-service.email-notification\": \"resource/application-integration/simple-notification-service_email-notification_48.svg\",\n \"aws.application-integration.simple-notification-service.http-notification\": \"resource/application-integration/simple-notification-service_http-notification_48.svg\",\n \"aws.application-integration.simple-notification-service.topic\": \"resource/application-integration/simple-notification-service_topic_48.svg\",\n \"aws.application-integration.simple-queue-service.message\": \"resource/application-integration/simple-queue-service_message_48.svg\",\n \"aws.application-integration.simple-queue-service.queue\": \"resource/application-integration/simple-queue-service_queue_48.svg\",\n \"aws.artificial-intelligence.devops-guru.insights\": \"resource/artificial-intelligence/devops-guru_insights_48.svg\",\n \"aws.artificial-intelligence.rekognition.image\": \"resource/artificial-intelligence/rekognition_image_48.svg\",\n \"aws.artificial-intelligence.rekognition.video\": \"resource/artificial-intelligence/rekognition_video_48.svg\",\n \"aws.artificial-intelligence.sagemaker-ai.canvas\": \"resource/artificial-intelligence/sagemaker-ai_canvas_48.svg\",\n \"aws.artificial-intelligence.sagemaker-ai.geospatial-ml\": \"resource/artificial-intelligence/sagemaker-ai_geospatial-ml_48.svg\",\n \"aws.artificial-intelligence.sagemaker-ai.model\": \"resource/artificial-intelligence/sagemaker-ai_model_48.svg\",\n \"aws.artificial-intelligence.sagemaker-ai.notebook\": \"resource/artificial-intelligence/sagemaker-ai_notebook_48.svg\",\n \"aws.artificial-intelligence.sagemaker-ai.shadow-testing\": \"resource/artificial-intelligence/sagemaker-ai_shadow-testing_48.svg\",\n \"aws.artificial-intelligence.sagemaker-ai.train\": \"resource/artificial-intelligence/sagemaker-ai_train_48.svg\",\n \"aws.artificial-intelligence.textract.analyze-lending\": \"resource/artificial-intelligence/textract_analyze-lending_48.svg\",\n \"aws.blockchain.managed-blockchain.blockchain\": \"resource/blockchain/managed-blockchain_blockchain_48.svg\",\n \"aws.business-applications.pinpoint.journey\": \"resource/business-applications/pinpoint_journey_48.svg\",\n \"aws.business-applications.simple-email-service.email\": \"resource/business-applications/simple-email-service_email_48.svg\",\n \"aws.compute.ec2.ami\": \"resource/compute/ec2_ami_48.svg\",\n \"aws.compute.ec2.auto-scaling\": \"resource/compute/ec2_auto-scaling_48.svg\",\n \"aws.compute.ec2.aws-microservice-extractor-for-.net\": \"resource/compute/ec2_aws-microservice-extractor-for-.net_48.svg\",\n \"aws.compute.ec2.db-instance\": \"resource/compute/ec2_db-instance_48.svg\",\n \"aws.compute.ec2.elastic-ip-address\": \"resource/compute/ec2_elastic-ip-address_48.svg\",\n \"aws.compute.ec2.instance-with-cloudwatch\": \"resource/compute/ec2_instance-with-cloudwatch_48.svg\",\n \"aws.compute.ec2.instance\": \"resource/compute/ec2_instance_48.svg\",\n \"aws.compute.ec2.instances\": \"resource/compute/ec2_instances_48.svg\",\n \"aws.compute.ec2.rescue\": \"resource/compute/ec2_rescue_48.svg\",\n \"aws.compute.ec2.spot-instance\": \"resource/compute/ec2_spot-instance_48.svg\",\n \"aws.compute.elastic-beanstalk.application\": \"resource/compute/elastic-beanstalk_application_48.svg\",\n \"aws.compute.elastic-beanstalk.deployment\": \"resource/compute/elastic-beanstalk_deployment_48.svg\",\n \"aws.compute.lambda.lambda-function\": \"resource/compute/lambda_lambda-function_48.svg\",\n \"aws.containers.elastic-container-registry.image\": \"resource/containers/elastic-container-registry_image_48.svg\",\n \"aws.containers.elastic-container-registry.registry\": \"resource/containers/elastic-container-registry_registry_48.svg\",\n \"aws.containers.elastic-container-service.container-1\": \"resource/containers/elastic-container-service_container-1_48.svg\",\n \"aws.containers.elastic-container-service.container-2\": \"resource/containers/elastic-container-service_container-2_48.svg\",\n \"aws.containers.elastic-container-service.container-3\": \"resource/containers/elastic-container-service_container-3_48.svg\",\n \"aws.containers.elastic-container-service.copiiot-cli\": \"resource/containers/elastic-container-service_copiiot-cli_48.svg\",\n \"aws.containers.elastic-container-service.ecs-service-connect\": \"resource/containers/elastic-container-service_ecs-service-connect_48.svg\",\n \"aws.containers.elastic-container-service.service\": \"resource/containers/elastic-container-service_service_48.svg\",\n \"aws.containers.elastic-container-service.task\": \"resource/containers/elastic-container-service_task_48.svg\",\n \"aws.containers.elastic-kubernetes-service.eks-on-outposts\": \"resource/containers/elastic-kubernetes-service_eks-on-outposts_48.svg\",\n \"aws.databases.aurora-instance.aurora-instance\": \"resource/databases/aurora-instance_48.svg\",\n \"aws.databases.aurora-mariadb-instance-alternate.aurora-mariadb-instance-alternate\": \"resource/databases/aurora-mariadb-instance-alternate_48.svg\",\n \"aws.databases.aurora-mariadb-instance.aurora-mariadb-instance\": \"resource/databases/aurora-mariadb-instance_48.svg\",\n \"aws.databases.aurora-mysql-instance-alternate.aurora-mysql-instance-alternate\": \"resource/databases/aurora-mysql-instance-alternate_48.svg\",\n \"aws.databases.aurora-mysql-instance.aurora-mysql-instance\": \"resource/databases/aurora-mysql-instance_48.svg\",\n \"aws.databases.aurora-oracle-instance-alternate.aurora-oracle-instance-alternate\": \"resource/databases/aurora-oracle-instance-alternate_48.svg\",\n \"aws.databases.aurora-oracle-instance.aurora-oracle-instance\": \"resource/databases/aurora-oracle-instance_48.svg\",\n \"aws.databases.aurora-piops-instance.aurora-piops-instance\": \"resource/databases/aurora-piops-instance_48.svg\",\n \"aws.databases.aurora-postgresql-instance-alternate.aurora-postgresql-instance-alternate\": \"resource/databases/aurora-postgresql-instance-alternate_48.svg\",\n \"aws.databases.aurora-postgresql-instance.aurora-postgresql-instance\": \"resource/databases/aurora-postgresql-instance_48.svg\",\n \"aws.databases.aurora-sql-server-instance-alternate.aurora-sql-server-instance-alternate\": \"resource/databases/aurora-sql-server-instance-alternate_48.svg\",\n \"aws.databases.aurora-sql-server-instance.aurora-sql-server-instance\": \"resource/databases/aurora-sql-server-instance_48.svg\",\n \"aws.databases.aurora.amazon-aurora-instance-alternate\": \"resource/databases/aurora_amazon-aurora-instance-alternate_48.svg\",\n \"aws.databases.aurora.amazon-rds-instance-aternate\": \"resource/databases/aurora_amazon-rds-instance-aternate_48.svg\",\n \"aws.databases.aurora.amazon-rds-instance\": \"resource/databases/aurora_amazon-rds-instance_48.svg\",\n \"aws.databases.aurora.trusted-language-extensions-for-postgresql\": \"resource/databases/aurora_trusted-language-extensions-for-postgresql_48.svg\",\n \"aws.databases.database-migration-service.database-migration-workflow-or-job\": \"resource/databases/database-migration-service_database-migration-workflow-or-job_48.svg\",\n \"aws.databases.documentdb.elastic-clusters\": \"resource/databases/documentdb_elastic-clusters_48.svg\",\n \"aws.databases.dynamodb.amazon-dynamodb-accelerator\": \"resource/databases/dynamodb_amazon-dynamodb-accelerator_48.svg\",\n \"aws.databases.dynamodb.attribute\": \"resource/databases/dynamodb_attribute_48.svg\",\n \"aws.databases.dynamodb.attributes\": \"resource/databases/dynamodb_attributes_48.svg\",\n \"aws.databases.dynamodb.global-secondary-index\": \"resource/databases/dynamodb_global-secondary-index_48.svg\",\n \"aws.databases.dynamodb.item\": \"resource/databases/dynamodb_item_48.svg\",\n \"aws.databases.dynamodb.items\": \"resource/databases/dynamodb_items_48.svg\",\n \"aws.databases.dynamodb.standard-access-table-class\": \"resource/databases/dynamodb_standard-access-table-class_48.svg\",\n \"aws.databases.dynamodb.standard-infrequent-access-table-class\": \"resource/databases/dynamodb_standard-infrequent-access-table-class_48.svg\",\n \"aws.databases.dynamodb.stream\": \"resource/databases/dynamodb_stream_48.svg\",\n \"aws.databases.dynamodb.table\": \"resource/databases/dynamodb_table_48.svg\",\n \"aws.databases.elasticache.cache-node\": \"resource/databases/elasticache_cache-node_48.svg\",\n \"aws.databases.elasticache.elasticache-for-memcached\": \"resource/databases/elasticache_elasticache-for-memcached_48.svg\",\n \"aws.databases.elasticache.elasticache-for-redis\": \"resource/databases/elasticache_elasticache-for-redis_48.svg\",\n \"aws.databases.elasticache.elasticache-for-valkey\": \"resource/databases/elasticache_elasticache-for-valkey_48.svg\",\n \"aws.databases.rds-proxy-instance-alternate.rds-proxy-instance-alternate\": \"resource/databases/rds-proxy-instance-alternate_48.svg\",\n \"aws.databases.rds-proxy-instance.rds-proxy-instance\": \"resource/databases/rds-proxy-instance_48.svg\",\n \"aws.databases.rds.blue-green-deployments\": \"resource/databases/rds_blue-green-deployments_48.svg\",\n \"aws.databases.rds.multi-az-db-cluster\": \"resource/databases/rds_multi-az-db-cluster_48.svg\",\n \"aws.databases.rds.multi-az\": \"resource/databases/rds_multi-az_48.svg\",\n \"aws.databases.rds.optimized-writes\": \"resource/databases/rds_optimized-writes_48.svg\",\n \"aws.databases.rds.trusted-language-extensions-for-postgresql\": \"resource/databases/rds_trusted-language-extensions-for-postgresql_48.svg\",\n \"aws.developer-tools.cloud9.cloud9\": \"resource/developer-tools/cloud9_cloud9_48.svg\",\n \"aws.front-end-web-mobile.amplify.aws-amplify-studio\": \"resource/front-end-web-mobile/amplify_aws-amplify-studio_48.svg\",\n \"aws.front-end-web-mobile.location-service.geofence\": \"resource/front-end-web-mobile/location-service_geofence_48.svg\",\n \"aws.front-end-web-mobile.location-service.map \": \"resource/front-end-web-mobile/location-service_map _48.svg\",\n \"aws.front-end-web-mobile.location-service.place\": \"resource/front-end-web-mobile/location-service_place_48.svg\",\n \"aws.front-end-web-mobile.location-service.routes\": \"resource/front-end-web-mobile/location-service_routes_48.svg\",\n \"aws.front-end-web-mobile.location-service.track \": \"resource/front-end-web-mobile/location-service_track _48.svg\",\n \"aws.general.alert.alert\": \"resource/general/alert_48_light.svg\",\n \"aws.general.authenticated-user.authenticated-user\": \"resource/general/authenticated-user_48_light.svg\",\n \"aws.general.camera.camera\": \"resource/general/camera_48_light.svg\",\n \"aws.general.chat.chat\": \"resource/general/chat_48_light.svg\",\n \"aws.general.client.client\": \"resource/general/client_48_light.svg\",\n \"aws.general.cold-storage.cold-storage\": \"resource/general/cold-storage_48_light.svg\",\n \"aws.general.credentials.credentials\": \"resource/general/credentials_48_light.svg\",\n \"aws.general.data-stream.data-stream\": \"resource/general/data-stream_48_light.svg\",\n \"aws.general.data-table.data-table\": \"resource/general/data-table_48_light.svg\",\n \"aws.general.database.database\": \"resource/general/database_48_light.svg\",\n \"aws.general.disk.disk\": \"resource/general/disk_48_light.svg\",\n \"aws.general.document.document\": \"resource/general/document_48_light.svg\",\n \"aws.general.documents.documents\": \"resource/general/documents_48_light.svg\",\n \"aws.general.email.email\": \"resource/general/email_48_light.svg\",\n \"aws.general.firewall.firewall\": \"resource/general/firewall_48_light.svg\",\n \"aws.general.folder.folder\": \"resource/general/folder_48_light.svg\",\n \"aws.general.folders.folders\": \"resource/general/folders_48_light.svg\",\n \"aws.general.forums.forums\": \"resource/general/forums_48_light.svg\",\n \"aws.general.gear.gear\": \"resource/general/gear_48_light.svg\",\n \"aws.general.generic-application.generic-application\": \"resource/general/generic-application_48_light.svg\",\n \"aws.general.git-repository.git-repository\": \"resource/general/git-repository_48_light.svg\",\n \"aws.general.globe.globe\": \"resource/general/globe_48_light.svg\",\n \"aws.general.internet-alt1.internet-alt1\": \"resource/general/internet-alt1_48_light.svg\",\n \"aws.general.internet-alt2.internet-alt2\": \"resource/general/internet-alt2_48_light.svg\",\n \"aws.general.internet.internet\": \"resource/general/internet_48_light.svg\",\n \"aws.general.json-script.json-script\": \"resource/general/json-script_48_light.svg\",\n \"aws.general.logs.logs\": \"resource/general/logs_48_light.svg\",\n \"aws.general.magnifying-glass.magnifying-glass\": \"resource/general/magnifying-glass_48_light.svg\",\n \"aws.general.management-console.management-console\": \"resource/general/management-console_48_light.svg\",\n \"aws.general.metrics.metrics\": \"resource/general/metrics_48_light.svg\",\n \"aws.general.mobile-client.mobile-client\": \"resource/general/mobile-client_48_light.svg\",\n \"aws.general.multimedia.multimedia\": \"resource/general/multimedia_48_light.svg\",\n \"aws.general.office-building.office-building\": \"resource/general/office-building_48_light.svg\",\n \"aws.general.programming-language.programming-language\": \"resource/general/programming-language_48_light.svg\",\n \"aws.general.question.question\": \"resource/general/question_48_light.svg\",\n \"aws.general.recover.recover\": \"resource/general/recover_48_light.svg\",\n \"aws.general.saml-token.saml-token\": \"resource/general/saml-token_48_light.svg\",\n \"aws.general.sdk.sdk\": \"resource/general/sdk_48_light.svg\",\n \"aws.general.server.server\": \"resource/general/server_48_light.svg\",\n \"aws.general.servers.servers\": \"resource/general/servers_48_light.svg\",\n \"aws.general.shield.shield\": \"resource/general/shield_48_light.svg\",\n \"aws.general.source-code.source-code\": \"resource/general/source-code_48_light.svg\",\n \"aws.general.ssl-padlock.ssl-padlock\": \"resource/general/ssl-padlock_48_light.svg\",\n \"aws.general.tape-storage.tape-storage\": \"resource/general/tape-storage_48_light.svg\",\n \"aws.general.toolkit.toolkit\": \"resource/general/toolkit_48_light.svg\",\n \"aws.general.user.user\": \"resource/general/user_48_light.svg\",\n \"aws.general.users.users\": \"resource/general/users_48_light.svg\",\n \"aws.iot.iot-core.device-advisor\": \"resource/iot/iot-core_device-advisor_48.svg\",\n \"aws.iot.iot-core.device-location\": \"resource/iot/iot-core_device-location_48.svg\",\n \"aws.iot.iot-device-defender.iot-device-jobs\": \"resource/iot/iot-device-defender_iot-device-jobs_48.svg\",\n \"aws.iot.iot-device-management.fleet-hub\": \"resource/iot/iot-device-management_fleet-hub_48.svg\",\n \"aws.iot.iot-device-tester.iot-device-tester\": \"resource/iot/iot-device-tester_48.svg\",\n \"aws.iot.iot-greengrass.artifact\": \"resource/iot/iot-greengrass_artifact_48.svg\",\n \"aws.iot.iot-greengrass.component-machine-learning\": \"resource/iot/iot-greengrass_component-machine-learning_48.svg\",\n \"aws.iot.iot-greengrass.component-nucleus\": \"resource/iot/iot-greengrass_component-nucleus_48.svg\",\n \"aws.iot.iot-greengrass.component-private\": \"resource/iot/iot-greengrass_component-private_48.svg\",\n \"aws.iot.iot-greengrass.component-public\": \"resource/iot/iot-greengrass_component-public_48.svg\",\n \"aws.iot.iot-greengrass.component\": \"resource/iot/iot-greengrass_component_48.svg\",\n \"aws.iot.iot-greengrass.connector\": \"resource/iot/iot-greengrass_connector_48.svg\",\n \"aws.iot.iot-greengrass.interprocess-communication\": \"resource/iot/iot-greengrass_interprocess-communication_48.svg\",\n \"aws.iot.iot-greengrass.protocol\": \"resource/iot/iot-greengrass_protocol_48.svg\",\n \"aws.iot.iot-greengrass.recipe\": \"resource/iot/iot-greengrass_recipe_48.svg\",\n \"aws.iot.iot-greengrass.stream-manager\": \"resource/iot/iot-greengrass_stream-manager_48.svg\",\n \"aws.iot.iot-hardware-board.iot-hardware-board\": \"resource/iot/iot-hardware-board_48.svg\",\n \"aws.iot.iot-rule.iot-rule\": \"resource/iot/iot-rule_48.svg\",\n \"aws.iot.iot-sitewise.asset-hierarchy\": \"resource/iot/iot-sitewise_asset-hierarchy_48.svg\",\n \"aws.iot.iot-sitewise.asset-model\": \"resource/iot/iot-sitewise_asset-model_48.svg\",\n \"aws.iot.iot-sitewise.asset-properties\": \"resource/iot/iot-sitewise_asset-properties_48.svg\",\n \"aws.iot.iot-sitewise.asset\": \"resource/iot/iot-sitewise_asset_48.svg\",\n \"aws.iot.iot-sitewise.data-streams\": \"resource/iot/iot-sitewise_data-streams_48.svg\",\n \"aws.iot.iot.action\": \"resource/iot/iot_action_48.svg\",\n \"aws.iot.iot.actuator\": \"resource/iot/iot_actuator_48.svg\",\n \"aws.iot.iot.alexa_enabled-device\": \"resource/iot/iot_alexa_enabled-device_48.svg\",\n \"aws.iot.iot.alexa_skill\": \"resource/iot/iot_alexa_skill_48.svg\",\n \"aws.iot.iot.alexa_voice-service\": \"resource/iot/iot_alexa_voice-service_48.svg\",\n \"aws.iot.iot.certificate\": \"resource/iot/iot_certificate_48.svg\",\n \"aws.iot.iot.desired-state\": \"resource/iot/iot_desired-state_48.svg\",\n \"aws.iot.iot.device-gateway\": \"resource/iot/iot_device-gateway_48.svg\",\n \"aws.iot.iot.echo\": \"resource/iot/iot_echo_48.svg\",\n \"aws.iot.iot.fire-tv_stick\": \"resource/iot/iot_fire-tv_stick_48.svg\",\n \"aws.iot.iot.fire_tv\": \"resource/iot/iot_fire_tv_48.svg\",\n \"aws.iot.iot.http2-protocol\": \"resource/iot/iot_http2-protocol_48.svg\",\n \"aws.iot.iot.http_protocol\": \"resource/iot/iot_http_protocol_48.svg\",\n \"aws.iot.iot.lambda_function\": \"resource/iot/iot_lambda_function_48.svg\",\n \"aws.iot.iot.lorawan-protocol\": \"resource/iot/iot_lorawan-protocol_48.svg\",\n \"aws.iot.iot.mqtt_protocol\": \"resource/iot/iot_mqtt_protocol_48.svg\",\n \"aws.iot.iot.over-air-update\": \"resource/iot/iot_over-air-update_48.svg\",\n \"aws.iot.iot.policy\": \"resource/iot/iot_policy_48.svg\",\n \"aws.iot.iot.reported-state\": \"resource/iot/iot_reported-state_48.svg\",\n \"aws.iot.iot.sailboat\": \"resource/iot/iot_sailboat_48.svg\",\n \"aws.iot.iot.sensor\": \"resource/iot/iot_sensor_48.svg\",\n \"aws.iot.iot.servo\": \"resource/iot/iot_servo_48.svg\",\n \"aws.iot.iot.shadow\": \"resource/iot/iot_shadow_48.svg\",\n \"aws.iot.iot.simulator\": \"resource/iot/iot_simulator_48.svg\",\n \"aws.iot.iot.thing_bank\": \"resource/iot/iot_thing_bank_48.svg\",\n \"aws.iot.iot.thing_bicycle\": \"resource/iot/iot_thing_bicycle_48.svg\",\n \"aws.iot.iot.thing_camera\": \"resource/iot/iot_thing_camera_48.svg\",\n \"aws.iot.iot.thing_car\": \"resource/iot/iot_thing_car_48.svg\",\n \"aws.iot.iot.thing_cart\": \"resource/iot/iot_thing_cart_48.svg\",\n \"aws.iot.iot.thing_coffee-pot\": \"resource/iot/iot_thing_coffee-pot_48.svg\",\n \"aws.iot.iot.thing_door-lock\": \"resource/iot/iot_thing_door-lock_48.svg\",\n \"aws.iot.iot.thing_factory\": \"resource/iot/iot_thing_factory_48.svg\",\n \"aws.iot.iot.thing_freertos-device\": \"resource/iot/iot_thing_freertos-device_48.svg\",\n \"aws.iot.iot.thing_generic\": \"resource/iot/iot_thing_generic_48.svg\",\n \"aws.iot.iot.thing_house\": \"resource/iot/iot_thing_house_48.svg\",\n \"aws.iot.iot.thing_humidity-sensor\": \"resource/iot/iot_thing_humidity-sensor_48.svg\",\n \"aws.iot.iot.thing_industrial-pc\": \"resource/iot/iot_thing_industrial-pc_48.svg\",\n \"aws.iot.iot.thing_lightbulb\": \"resource/iot/iot_thing_lightbulb_48.svg\",\n \"aws.iot.iot.thing_medical-emergency\": \"resource/iot/iot_thing_medical-emergency_48.svg\",\n \"aws.iot.iot.thing_plc\": \"resource/iot/iot_thing_plc_48.svg\",\n \"aws.iot.iot.thing_police-emergency\": \"resource/iot/iot_thing_police-emergency_48.svg\",\n \"aws.iot.iot.thing_relay\": \"resource/iot/iot_thing_relay_48.svg\",\n \"aws.iot.iot.thing_stacklight\": \"resource/iot/iot_thing_stacklight_48.svg\",\n \"aws.iot.iot.thing_temperature-humidity-sensor\": \"resource/iot/iot_thing_temperature-humidity-sensor_48.svg\",\n \"aws.iot.iot.thing_temperature-sensor\": \"resource/iot/iot_thing_temperature-sensor_48.svg\",\n \"aws.iot.iot.thing_temperature-vibration-sensor\": \"resource/iot/iot_thing_temperature-vibration-sensor_48.svg\",\n \"aws.iot.iot.thing_thermostat\": \"resource/iot/iot_thing_thermostat_48.svg\",\n \"aws.iot.iot.thing_travel\": \"resource/iot/iot_thing_travel_48.svg\",\n \"aws.iot.iot.thing_utility\": \"resource/iot/iot_thing_utility_48.svg\",\n \"aws.iot.iot.thing_vibration-sensor\": \"resource/iot/iot_thing_vibration-sensor_48.svg\",\n \"aws.iot.iot.thing_windfarm\": \"resource/iot/iot_thing_windfarm_48.svg\",\n \"aws.iot.iot.topic\": \"resource/iot/iot_topic_48.svg\",\n \"aws.management-governance.cloudformation.change-set\": \"resource/management-governance/cloudformation_change-set_48.svg\",\n \"aws.management-governance.cloudformation.stack\": \"resource/management-governance/cloudformation_stack_48.svg\",\n \"aws.management-governance.cloudformation.template\": \"resource/management-governance/cloudformation_template_48.svg\",\n \"aws.management-governance.cloudtrail.cloudtrail-lake\": \"resource/management-governance/cloudtrail_cloudtrail-lake_48.svg\",\n \"aws.management-governance.cloudwatch.alarm\": \"resource/management-governance/cloudwatch_alarm_48.svg\",\n \"aws.management-governance.cloudwatch.cross-account-observability\": \"resource/management-governance/cloudwatch_cross-account-observability_48.svg\",\n \"aws.management-governance.cloudwatch.data-protection\": \"resource/management-governance/cloudwatch_data-protection_48.svg\",\n \"aws.management-governance.cloudwatch.event-event-based\": \"resource/management-governance/cloudwatch_event-event-based_48.svg\",\n \"aws.management-governance.cloudwatch.event-time-based\": \"resource/management-governance/cloudwatch_event-time-based_48.svg\",\n \"aws.management-governance.cloudwatch.evidently\": \"resource/management-governance/cloudwatch_evidently_48.svg\",\n \"aws.management-governance.cloudwatch.logs\": \"resource/management-governance/cloudwatch_logs_48.svg\",\n \"aws.management-governance.cloudwatch.metrics-insights\": \"resource/management-governance/cloudwatch_metrics-insights_48.svg\",\n \"aws.management-governance.cloudwatch.rule\": \"resource/management-governance/cloudwatch_rule_48.svg\",\n \"aws.management-governance.cloudwatch.rum\": \"resource/management-governance/cloudwatch_rum_48.svg\",\n \"aws.management-governance.cloudwatch.synthetics\": \"resource/management-governance/cloudwatch_synthetics_48.svg\",\n \"aws.management-governance.license-manager.application-discovery\": \"resource/management-governance/license-manager_application-discovery_48.svg\",\n \"aws.management-governance.license-manager.license-blending\": \"resource/management-governance/license-manager_license-blending_48.svg\",\n \"aws.management-governance.organizations.account\": \"resource/management-governance/organizations_account_48.svg\",\n \"aws.management-governance.organizations.management-account\": \"resource/management-governance/organizations_management-account_48.svg\",\n \"aws.management-governance.organizations.organizational-unit\": \"resource/management-governance/organizations_organizational-unit_48.svg\",\n \"aws.management-governance.systems-manager.application-manager\": \"resource/management-governance/systems-manager_application-manager_48.svg\",\n \"aws.management-governance.systems-manager.automation\": \"resource/management-governance/systems-manager_automation_48.svg\",\n \"aws.management-governance.systems-manager.change-calendar\": \"resource/management-governance/systems-manager_change-calendar_48.svg\",\n \"aws.management-governance.systems-manager.change-manager\": \"resource/management-governance/systems-manager_change-manager_48.svg\",\n \"aws.management-governance.systems-manager.compliance\": \"resource/management-governance/systems-manager_compliance_48.svg\",\n \"aws.management-governance.systems-manager.distributor\": \"resource/management-governance/systems-manager_distributor_48.svg\",\n \"aws.management-governance.systems-manager.documents\": \"resource/management-governance/systems-manager_documents_48.svg\",\n \"aws.management-governance.systems-manager.incident-manager\": \"resource/management-governance/systems-manager_incident-manager_48.svg\",\n \"aws.management-governance.systems-manager.inventory\": \"resource/management-governance/systems-manager_inventory_48.svg\",\n \"aws.management-governance.systems-manager.maintenance-windows\": \"resource/management-governance/systems-manager_maintenance-windows_48.svg\",\n \"aws.management-governance.systems-manager.opscenter\": \"resource/management-governance/systems-manager_opscenter_48.svg\",\n \"aws.management-governance.systems-manager.parameter-store\": \"resource/management-governance/systems-manager_parameter-store_48.svg\",\n \"aws.management-governance.systems-manager.patch-manager\": \"resource/management-governance/systems-manager_patch-manager_48.svg\",\n \"aws.management-governance.systems-manager.run-command\": \"resource/management-governance/systems-manager_run-command_48.svg\",\n \"aws.management-governance.systems-manager.session-manager\": \"resource/management-governance/systems-manager_session-manager_48.svg\",\n \"aws.management-governance.systems-manager.state-manager\": \"resource/management-governance/systems-manager_state-manager_48.svg\",\n \"aws.management-governance.trusted-advisor.checklist-cost\": \"resource/management-governance/trusted-advisor_checklist-cost_48.svg\",\n \"aws.management-governance.trusted-advisor.checklist-fault-tolerant\": \"resource/management-governance/trusted-advisor_checklist-fault-tolerant_48.svg\",\n \"aws.management-governance.trusted-advisor.checklist-performance\": \"resource/management-governance/trusted-advisor_checklist-performance_48.svg\",\n \"aws.management-governance.trusted-advisor.checklist-security\": \"resource/management-governance/trusted-advisor_checklist-security_48.svg\",\n \"aws.management-governance.trusted-advisor.checklist\": \"resource/management-governance/trusted-advisor_checklist_48.svg\",\n \"aws.media-services.cloud-digital-interface.cloud-digital-interface\": \"resource/media-services/cloud-digital-interface_48.svg\",\n \"aws.media-services.elemental-mediaconnect.mediaconnect-gateway\": \"resource/media-services/elemental-mediaconnect_mediaconnect-gateway_48.svg\",\n \"aws.migration-modernization.application-discovery-service.aws-agentless-collector\": \"resource/migration-modernization/application-discovery-service_aws-agentless-collector_48.svg\",\n \"aws.migration-modernization.application-discovery-service.aws-discovery-agent\": \"resource/migration-modernization/application-discovery-service_aws-discovery-agent_48.svg\",\n \"aws.migration-modernization.application-discovery-service.migration-evaluator-collector\": \"resource/migration-modernization/application-discovery-service_migration-evaluator-collector_48.svg\",\n \"aws.migration-modernization.datasync.agent\": \"resource/migration-modernization/datasync_agent_48.svg\",\n \"aws.migration-modernization.datasync.discovery\": \"resource/migration-modernization/datasync_discovery_48.svg\",\n \"aws.migration-modernization.mainframe-modernization.analyzer\": \"resource/migration-modernization/mainframe-modernization_analyzer_48.svg\",\n \"aws.migration-modernization.mainframe-modernization.compiler\": \"resource/migration-modernization/mainframe-modernization_compiler_48.svg\",\n \"aws.migration-modernization.mainframe-modernization.converter\": \"resource/migration-modernization/mainframe-modernization_converter_48.svg\",\n \"aws.migration-modernization.mainframe-modernization.developer\": \"resource/migration-modernization/mainframe-modernization_developer_48.svg\",\n \"aws.migration-modernization.mainframe-modernization.runtime\": \"resource/migration-modernization/mainframe-modernization_runtime_48.svg\",\n \"aws.migration-modernization.migration-hub.refactor-spaces-applications\": \"resource/migration-modernization/migration-hub_refactor-spaces-applications_48.svg\",\n \"aws.migration-modernization.migration-hub.refactor-spaces-environments\": \"resource/migration-modernization/migration-hub_refactor-spaces-environments_48.svg\",\n \"aws.migration-modernization.migration-hub.refactor-spaces-services\": \"resource/migration-modernization/migration-hub_refactor-spaces-services_48.svg\",\n \"aws.migration-modernization.transfer-family.aws-as2\": \"resource/migration-modernization/transfer-family_aws-as2_48.svg\",\n \"aws.migration-modernization.transfer-family.aws-ftp\": \"resource/migration-modernization/transfer-family_aws-ftp_48.svg\",\n \"aws.migration-modernization.transfer-family.aws-ftps\": \"resource/migration-modernization/transfer-family_aws-ftps_48.svg\",\n \"aws.migration-modernization.transfer-family.aws-sftp\": \"resource/migration-modernization/transfer-family_aws-sftp_48.svg\",\n \"aws.networking-content-delivery.api-gateway.endpoint\": \"resource/networking-content-delivery/api-gateway_endpoint_48.svg\",\n \"aws.networking-content-delivery.app-mesh.mesh\": \"resource/networking-content-delivery/app-mesh_mesh_48.svg\",\n \"aws.networking-content-delivery.app-mesh.virtual-gateway\": \"resource/networking-content-delivery/app-mesh_virtual-gateway_48.svg\",\n \"aws.networking-content-delivery.app-mesh.virtual-node\": \"resource/networking-content-delivery/app-mesh_virtual-node_48.svg\",\n \"aws.networking-content-delivery.app-mesh.virtual-router\": \"resource/networking-content-delivery/app-mesh_virtual-router_48.svg\",\n \"aws.networking-content-delivery.app-mesh.virtual-service\": \"resource/networking-content-delivery/app-mesh_virtual-service_48.svg\",\n \"aws.networking-content-delivery.cloud-map.namespace\": \"resource/networking-content-delivery/cloud-map_namespace_48.svg\",\n \"aws.networking-content-delivery.cloud-map.resource\": \"resource/networking-content-delivery/cloud-map_resource_48.svg\",\n \"aws.networking-content-delivery.cloud-map.service\": \"resource/networking-content-delivery/cloud-map_service_48.svg\",\n \"aws.networking-content-delivery.cloud-wan.core-network-edge\": \"resource/networking-content-delivery/cloud-wan_core-network-edge_48.svg\",\n \"aws.networking-content-delivery.cloud-wan.segment-network\": \"resource/networking-content-delivery/cloud-wan_segment-network_48.svg\",\n \"aws.networking-content-delivery.cloud-wan.transit-gateway-route-table-attachment\": \"resource/networking-content-delivery/cloud-wan_transit-gateway-route-table-attachment_48.svg\",\n \"aws.networking-content-delivery.cloudfront.download-distribution\": \"resource/networking-content-delivery/cloudfront_download-distribution_48.svg\",\n \"aws.networking-content-delivery.cloudfront.edge-location\": \"resource/networking-content-delivery/cloudfront_edge-location_48.svg\",\n \"aws.networking-content-delivery.cloudfront.functions\": \"resource/networking-content-delivery/cloudfront_functions_48.svg\",\n \"aws.networking-content-delivery.cloudfront.streaming-distribution\": \"resource/networking-content-delivery/cloudfront_streaming-distribution_48.svg\",\n \"aws.networking-content-delivery.direct-connect.gateway\": \"resource/networking-content-delivery/direct-connect_gateway_48.svg\",\n \"aws.networking-content-delivery.elastic-load-balancing.application-load-balancer\": \"resource/networking-content-delivery/elastic-load-balancing_application-load-balancer_48.svg\",\n \"aws.networking-content-delivery.elastic-load-balancing.classic-load-balancer\": \"resource/networking-content-delivery/elastic-load-balancing_classic-load-balancer_48.svg\",\n \"aws.networking-content-delivery.elastic-load-balancing.gateway-load-balancer\": \"resource/networking-content-delivery/elastic-load-balancing_gateway-load-balancer_48.svg\",\n \"aws.networking-content-delivery.elastic-load-balancing.network-load-balancer\": \"resource/networking-content-delivery/elastic-load-balancing_network-load-balancer_48.svg\",\n \"aws.networking-content-delivery.route-53-hosted-zone.route-53-hosted-zone\": \"resource/networking-content-delivery/route-53-hosted-zone_48.svg\",\n \"aws.networking-content-delivery.route-53.readiness-checks\": \"resource/networking-content-delivery/route-53_readiness-checks_48.svg\",\n \"aws.networking-content-delivery.route-53.resolver-dns-firewall\": \"resource/networking-content-delivery/route-53_resolver-dns-firewall_48.svg\",\n \"aws.networking-content-delivery.route-53.resolver-query-logging\": \"resource/networking-content-delivery/route-53_resolver-query-logging_48.svg\",\n \"aws.networking-content-delivery.route-53.resolver\": \"resource/networking-content-delivery/route-53_resolver_48.svg\",\n \"aws.networking-content-delivery.route-53.route-table\": \"resource/networking-content-delivery/route-53_route-table_48.svg\",\n \"aws.networking-content-delivery.route-53.routing-controls\": \"resource/networking-content-delivery/route-53_routing-controls_48.svg\",\n \"aws.networking-content-delivery.transit-gateway.attachment\": \"resource/networking-content-delivery/transit-gateway_attachment_48.svg\",\n \"aws.networking-content-delivery.vpc.carrier-gateway\": \"resource/networking-content-delivery/vpc_carrier-gateway_48.svg\",\n \"aws.networking-content-delivery.vpc.customer-gateway\": \"resource/networking-content-delivery/vpc_customer-gateway_48.svg\",\n \"aws.networking-content-delivery.vpc.elastic-network-adapter\": \"resource/networking-content-delivery/vpc_elastic-network-adapter_48.svg\",\n \"aws.networking-content-delivery.vpc.elastic-network-interface\": \"resource/networking-content-delivery/vpc_elastic-network-interface_48.svg\",\n \"aws.networking-content-delivery.vpc.endpoints\": \"resource/networking-content-delivery/vpc_endpoints_48.svg\",\n \"aws.networking-content-delivery.vpc.flow-logs\": \"resource/networking-content-delivery/vpc_flow-logs_48.svg\",\n \"aws.networking-content-delivery.vpc.internet-gateway\": \"resource/networking-content-delivery/vpc_internet-gateway_48.svg\",\n \"aws.networking-content-delivery.vpc.nat-gateway\": \"resource/networking-content-delivery/vpc_nat-gateway_48.svg\",\n \"aws.networking-content-delivery.vpc.network-access-analyzer\": \"resource/networking-content-delivery/vpc_network-access-analyzer_48.svg\",\n \"aws.networking-content-delivery.vpc.network-access-control-list\": \"resource/networking-content-delivery/vpc_network-access-control-list_48.svg\",\n \"aws.networking-content-delivery.vpc.peering-connection\": \"resource/networking-content-delivery/vpc_peering-connection_48.svg\",\n \"aws.networking-content-delivery.vpc.reachability-analyzer\": \"resource/networking-content-delivery/vpc_reachability-analyzer_48.svg\",\n \"aws.networking-content-delivery.vpc.router\": \"resource/networking-content-delivery/vpc_router_48.svg\",\n \"aws.networking-content-delivery.vpc.traffic-mirroring\": \"resource/networking-content-delivery/vpc_traffic-mirroring_48.svg\",\n \"aws.networking-content-delivery.vpc.virtual-private-cloud-vpc\": \"resource/networking-content-delivery/vpc_virtual-private-cloud-vpc_48.svg\",\n \"aws.networking-content-delivery.vpc.vpn-connection\": \"resource/networking-content-delivery/vpc_vpn-connection_48.svg\",\n \"aws.networking-content-delivery.vpc.vpn-gateway\": \"resource/networking-content-delivery/vpc_vpn-gateway_48.svg\",\n \"aws.quantum-technologies.braket.chandelier\": \"resource/quantum-technologies/braket_chandelier_48.svg\",\n \"aws.quantum-technologies.braket.chip\": \"resource/quantum-technologies/braket_chip_48.svg\",\n \"aws.quantum-technologies.braket.embedded-simulator\": \"resource/quantum-technologies/braket_embedded-simulator_48.svg\",\n \"aws.quantum-technologies.braket.managed-simulator\": \"resource/quantum-technologies/braket_managed-simulator_48.svg\",\n \"aws.quantum-technologies.braket.noise-simulator\": \"resource/quantum-technologies/braket_noise-simulator_48.svg\",\n \"aws.quantum-technologies.braket.qpu\": \"resource/quantum-technologies/braket_qpu_48.svg\",\n \"aws.quantum-technologies.braket.simulator-1\": \"resource/quantum-technologies/braket_simulator-1_48.svg\",\n \"aws.quantum-technologies.braket.simulator-2\": \"resource/quantum-technologies/braket_simulator-2_48.svg\",\n \"aws.quantum-technologies.braket.simulator-3\": \"resource/quantum-technologies/braket_simulator-3_48.svg\",\n \"aws.quantum-technologies.braket.simulator-4\": \"resource/quantum-technologies/braket_simulator-4_48.svg\",\n \"aws.quantum-technologies.braket.simulator\": \"resource/quantum-technologies/braket_simulator_48.svg\",\n \"aws.quantum-technologies.braket.state-vector\": \"resource/quantum-technologies/braket_state-vector_48.svg\",\n \"aws.quantum-technologies.braket.tensor-network\": \"resource/quantum-technologies/braket_tensor-network_48.svg\",\n \"aws.security-identity.certificate-manager.certificate-authority\": \"resource/security-identity/certificate-manager_certificate-authority_48.svg\",\n \"aws.security-identity.directory-service.ad-connector\": \"resource/security-identity/directory-service_ad-connector_48.svg\",\n \"aws.security-identity.directory-service.aws-managed-microsoft-ad\": \"resource/security-identity/directory-service_aws-managed-microsoft-ad_48.svg\",\n \"aws.security-identity.directory-service.simple-ad\": \"resource/security-identity/directory-service_simple-ad_48.svg\",\n \"aws.security-identity.identity-access-management.add-on\": \"resource/security-identity/identity-access-management_add-on_48.svg\",\n \"aws.security-identity.identity-access-management.aws-sts-alternate\": \"resource/security-identity/identity-access-management_aws-sts-alternate_48.svg\",\n \"aws.security-identity.identity-access-management.aws-sts\": \"resource/security-identity/identity-access-management_aws-sts_48.svg\",\n \"aws.security-identity.identity-access-management.data-encryption-key\": \"resource/security-identity/identity-access-management_data-encryption-key_48.svg\",\n \"aws.security-identity.identity-access-management.encrypted-data\": \"resource/security-identity/identity-access-management_encrypted-data_48.svg\",\n \"aws.security-identity.identity-access-management.iam-access-analyzer\": \"resource/security-identity/identity-access-management_iam-access-analyzer_48.svg\",\n \"aws.security-identity.identity-access-management.iam-roles-anywhere\": \"resource/security-identity/identity-access-management_iam-roles-anywhere_48.svg\",\n \"aws.security-identity.identity-access-management.long-term-security-credential\": \"resource/security-identity/identity-access-management_long-term-security-credential_48.svg\",\n \"aws.security-identity.identity-access-management.mfa-token\": \"resource/security-identity/identity-access-management_mfa-token_48.svg\",\n \"aws.security-identity.identity-access-management.permissions\": \"resource/security-identity/identity-access-management_permissions_48.svg\",\n \"aws.security-identity.identity-access-management.role\": \"resource/security-identity/identity-access-management_role_48.svg\",\n \"aws.security-identity.identity-access-management.temporary-security-credential\": \"resource/security-identity/identity-access-management_temporary-security-credential_48.svg\",\n \"aws.security-identity.inspector.agent\": \"resource/security-identity/inspector_agent_48.svg\",\n \"aws.security-identity.key-management-service.external-key-store\": \"resource/security-identity/key-management-service_external-key-store_48.svg\",\n \"aws.security-identity.network-firewall.endpoints\": \"resource/security-identity/network-firewall_endpoints_48.svg\",\n \"aws.security-identity.security-hub.finding\": \"resource/security-identity/security-hub_finding_48.svg\",\n \"aws.security-identity.shield.aws-shield-advanced\": \"resource/security-identity/shield_aws-shield-advanced_48.svg\",\n \"aws.security-identity.waf.bad-bot\": \"resource/security-identity/waf_bad-bot_48.svg\",\n \"aws.security-identity.waf.bot-control\": \"resource/security-identity/waf_bot-control_48.svg\",\n \"aws.security-identity.waf.bot\": \"resource/security-identity/waf_bot_48.svg\",\n \"aws.security-identity.waf.filtering-rule\": \"resource/security-identity/waf_filtering-rule_48.svg\",\n \"aws.security-identity.waf.labels\": \"resource/security-identity/waf_labels_48.svg\",\n \"aws.security-identity.waf.managed-rule\": \"resource/security-identity/waf_managed-rule_48.svg\",\n \"aws.security-identity.waf.rule\": \"resource/security-identity/waf_rule_48.svg\",\n \"aws.storage.backup.audit-manager\": \"resource/storage/backup_audit-manager_48.svg\",\n \"aws.storage.backup.aws-backup-for-aws-cloudformation\": \"resource/storage/backup_aws-backup-for-aws-cloudformation_48.svg\",\n \"aws.storage.backup.aws-backup-support-for-amazon-fsx-for-netapp-ontap\": \"resource/storage/backup_aws-backup-support-for-amazon-fsx-for-netapp-ontap_48.svg\",\n \"aws.storage.backup.aws-backup-support-for-amazon-s3\": \"resource/storage/backup_aws-backup-support-for-amazon-s3_48.svg\",\n \"aws.storage.backup.aws-backup-support-for-vmware-workloads\": \"resource/storage/backup_aws-backup-support-for-vmware-workloads_48.svg\",\n \"aws.storage.backup.backup-plan\": \"resource/storage/backup_backup-plan_48.svg\",\n \"aws.storage.backup.backup-restore\": \"resource/storage/backup_backup-restore_48.svg\",\n \"aws.storage.backup.backup-vault\": \"resource/storage/backup_backup-vault_48.svg\",\n \"aws.storage.backup.compliance-reporting\": \"resource/storage/backup_compliance-reporting_48.svg\",\n \"aws.storage.backup.compute\": \"resource/storage/backup_compute_48.svg\",\n \"aws.storage.backup.database\": \"resource/storage/backup_database_48.svg\",\n \"aws.storage.backup.gateway\": \"resource/storage/backup_gateway_48.svg\",\n \"aws.storage.backup.legal-hold\": \"resource/storage/backup_legal-hold_48.svg\",\n \"aws.storage.backup.recovery-point-objective\": \"resource/storage/backup_recovery-point-objective_48.svg\",\n \"aws.storage.backup.recovery-time-objective\": \"resource/storage/backup_recovery-time-objective_48.svg\",\n \"aws.storage.backup.storage\": \"resource/storage/backup_storage_48.svg\",\n \"aws.storage.backup.vault-lock\": \"resource/storage/backup_vault-lock_48.svg\",\n \"aws.storage.backup.virtual-machine-monitor\": \"resource/storage/backup_virtual-machine-monitor_48.svg\",\n \"aws.storage.backup.virtual-machine\": \"resource/storage/backup_virtual-machine_48.svg\",\n \"aws.storage.elastic-block-store.amazon-data-lifecycle-manager\": \"resource/storage/elastic-block-store_amazon-data-lifecycle-manager_48.svg\",\n \"aws.storage.elastic-block-store.multiple-volumes\": \"resource/storage/elastic-block-store_multiple-volumes_48.svg\",\n \"aws.storage.elastic-block-store.snapshot\": \"resource/storage/elastic-block-store_snapshot_48.svg\",\n \"aws.storage.elastic-block-store.volume-gp3\": \"resource/storage/elastic-block-store_volume-gp3_48.svg\",\n \"aws.storage.elastic-block-store.volume\": \"resource/storage/elastic-block-store_volume_48.svg\",\n \"aws.storage.elastic-file-system.efs-intelligent-tiering\": \"resource/storage/elastic-file-system_efs-intelligent-tiering_48.svg\",\n \"aws.storage.elastic-file-system.efs-one-zone-infrequent-access\": \"resource/storage/elastic-file-system_efs-one-zone-infrequent-access_48.svg\",\n \"aws.storage.elastic-file-system.efs-one-zone\": \"resource/storage/elastic-file-system_efs-one-zone_48.svg\",\n \"aws.storage.elastic-file-system.efs-standard-infrequent-access\": \"resource/storage/elastic-file-system_efs-standard-infrequent-access_48.svg\",\n \"aws.storage.elastic-file-system.efs-standard\": \"resource/storage/elastic-file-system_efs-standard_48.svg\",\n \"aws.storage.elastic-file-system.elastic-throughput\": \"resource/storage/elastic-file-system_elastic-throughput_48.svg\",\n \"aws.storage.elastic-file-system.file-system\": \"resource/storage/elastic-file-system_file-system_48.svg\",\n \"aws.storage.file-cache.hybrid-nfs-linked-datasets\": \"resource/storage/file-cache_hybrid-nfs-linked-datasets_48.svg\",\n \"aws.storage.file-cache.on-premises-nfs-linked-datasets\": \"resource/storage/file-cache_on-premises-nfs-linked-datasets_48.svg\",\n \"aws.storage.file-cache.s3-linked-datasets\": \"resource/storage/file-cache_s3-linked-datasets_48.svg\",\n \"aws.storage.simple-storage-service-glacier.archive\": \"resource/storage/simple-storage-service-glacier_archive_48.svg\",\n \"aws.storage.simple-storage-service-glacier.vault\": \"resource/storage/simple-storage-service-glacier_vault_48.svg\",\n \"aws.storage.simple-storage-service.bucket-with-objects\": \"resource/storage/simple-storage-service_bucket-with-objects_48.svg\",\n \"aws.storage.simple-storage-service.bucket\": \"resource/storage/simple-storage-service_bucket_48.svg\",\n \"aws.storage.simple-storage-service.directory-bucket\": \"resource/storage/simple-storage-service_directory-bucket_48.svg\",\n \"aws.storage.simple-storage-service.general-access-points\": \"resource/storage/simple-storage-service_general-access-points_48.svg\",\n \"aws.storage.simple-storage-service.object\": \"resource/storage/simple-storage-service_object_48.svg\",\n \"aws.storage.simple-storage-service.s3-batch-operations\": \"resource/storage/simple-storage-service_s3-batch-operations_48.svg\",\n \"aws.storage.simple-storage-service.s3-express-one-zone\": \"resource/storage/simple-storage-service_s3-express-one-zone_48.svg\",\n \"aws.storage.simple-storage-service.s3-glacier-deep-archive\": \"resource/storage/simple-storage-service_s3-glacier-deep-archive_48.svg\",\n \"aws.storage.simple-storage-service.s3-glacier-flexible-retrieval\": \"resource/storage/simple-storage-service_s3-glacier-flexible-retrieval_48.svg\",\n \"aws.storage.simple-storage-service.s3-glacier-instant-retrieval\": \"resource/storage/simple-storage-service_s3-glacier-instant-retrieval_48.svg\",\n \"aws.storage.simple-storage-service.s3-intelligent-tiering\": \"resource/storage/simple-storage-service_s3-intelligent-tiering_48.svg\",\n \"aws.storage.simple-storage-service.s3-multi-region-access-points\": \"resource/storage/simple-storage-service_s3-multi-region-access-points_48.svg\",\n \"aws.storage.simple-storage-service.s3-object-lambda-access-points\": \"resource/storage/simple-storage-service_s3-object-lambda-access-points_48.svg\",\n \"aws.storage.simple-storage-service.s3-object-lambda\": \"resource/storage/simple-storage-service_s3-object-lambda_48.svg\",\n \"aws.storage.simple-storage-service.s3-object-lock\": \"resource/storage/simple-storage-service_s3-object-lock_48.svg\",\n \"aws.storage.simple-storage-service.s3-on-outposts\": \"resource/storage/simple-storage-service_s3-on-outposts_48.svg\",\n \"aws.storage.simple-storage-service.s3-one-zone-ia\": \"resource/storage/simple-storage-service_s3-one-zone-ia_48.svg\",\n \"aws.storage.simple-storage-service.s3-replication-time-control\": \"resource/storage/simple-storage-service_s3-replication-time-control_48.svg\",\n \"aws.storage.simple-storage-service.s3-replication\": \"resource/storage/simple-storage-service_s3-replication_48.svg\",\n \"aws.storage.simple-storage-service.s3-select\": \"resource/storage/simple-storage-service_s3-select_48.svg\",\n \"aws.storage.simple-storage-service.s3-standard-ia\": \"resource/storage/simple-storage-service_s3-standard-ia_48.svg\",\n \"aws.storage.simple-storage-service.s3-standard\": \"resource/storage/simple-storage-service_s3-standard_48.svg\",\n \"aws.storage.simple-storage-service.s3-storage-lens\": \"resource/storage/simple-storage-service_s3-storage-lens_48.svg\",\n \"aws.storage.simple-storage-service.s3-tables\": \"resource/storage/simple-storage-service_s3-tables_48.svg\",\n \"aws.storage.simple-storage-service.s3-vectors\": \"resource/storage/simple-storage-service_s3-vectors_48.svg\",\n \"aws.storage.simple-storage-service.vpc-access-points\": \"resource/storage/simple-storage-service_vpc-access-points_48.svg\",\n \"aws.storage.snowball.snowball-import-export\": \"resource/storage/snowball_snowball-import-export_48.svg\",\n \"aws.storage.storage-gateway.amazon-fsx-file-gateway\": \"resource/storage/storage-gateway_amazon-fsx-file-gateway_48.svg\",\n \"aws.storage.storage-gateway.amazon-s3-file-gateway\": \"resource/storage/storage-gateway_amazon-s3-file-gateway_48.svg\",\n \"aws.storage.storage-gateway.cached-volume\": \"resource/storage/storage-gateway_cached-volume_48.svg\",\n \"aws.storage.storage-gateway.file-gateway\": \"resource/storage/storage-gateway_file-gateway_48.svg\",\n \"aws.storage.storage-gateway.noncached-volume\": \"resource/storage/storage-gateway_noncached-volume_48.svg\",\n \"aws.storage.storage-gateway.tape-gateway\": \"resource/storage/storage-gateway_tape-gateway_48.svg\",\n \"aws.storage.storage-gateway.virtual-tape-library\": \"resource/storage/storage-gateway_virtual-tape-library_48.svg\",\n \"aws.storage.storage-gateway.volume-gateway\": \"resource/storage/storage-gateway_volume-gateway_48.svg\",\n \"aws.category.analytics\": \"category/analytics_64.svg\",\n \"aws.category.application-integration\": \"category/application-integration_64.svg\",\n \"aws.category.artificial-intelligence\": \"category/artificial-intelligence_64.svg\",\n \"aws.category.blockchain\": \"category/blockchain_64.svg\",\n \"aws.category.business-applications\": \"category/business-applications_64.svg\",\n \"aws.category.cloud-financial-management\": \"category/cloud-financial-management_64.svg\",\n \"aws.category.compute\": \"category/compute_64.svg\",\n \"aws.category.containers\": \"category/containers_64.svg\",\n \"aws.category.customer-enablement\": \"category/customer-enablement_64.svg\",\n \"aws.category.customer-experience\": \"category/customer-experience_64.svg\",\n \"aws.category.databases\": \"category/databases_64.svg\",\n \"aws.category.developer-tools\": \"category/developer-tools_64.svg\",\n \"aws.category.end-user-computing\": \"category/end-user-computing_64.svg\",\n \"aws.category.front-end-web-mobile\": \"category/front-end-web-mobile_64.svg\",\n \"aws.category.games\": \"category/games_64.svg\",\n \"aws.category.internet-of-things\": \"category/internet-of-things_64.svg\",\n \"aws.category.management-tools\": \"category/management-tools_64.svg\",\n \"aws.category.media-services\": \"category/media-services_64.svg\",\n \"aws.category.migration-modernization\": \"category/migration-modernization_64.svg\",\n \"aws.category.multicloud-and-hybrid\": \"category/multicloud-and-hybrid_64.svg\",\n \"aws.category.networking-content-delivery\": \"category/networking-content-delivery_64.svg\",\n \"aws.category.quantum-technologies\": \"category/quantum-technologies_64.svg\",\n \"aws.category.satellite\": \"category/satellite_64.svg\",\n \"aws.category.security-identity\": \"category/security-identity_64.svg\",\n \"aws.category.serverless\": \"category/serverless_64.svg\",\n \"aws.category.storage\": \"category/storage_64.svg\",\n \"aws.group.account\": \"group/account_32.svg\",\n \"aws.group.auto-scaling-group\": \"group/auto-scaling-group_32.svg\",\n \"aws.group.cloud-logo\": \"group/cloud-logo_32.svg\",\n \"aws.group.cloud\": \"group/cloud_32.svg\",\n \"aws.group.corporate-data-center\": \"group/corporate-data-center_32.svg\",\n \"aws.group.ec2-instance-contents\": \"group/ec2-instance-contents_32.svg\",\n \"aws.group.iot-greengrass-deployment\": \"group/iot-greengrass-deployment_32.svg\",\n \"aws.group.private-subnet\": \"group/private-subnet_32.svg\",\n \"aws.group.public-subnet\": \"group/public-subnet_32.svg\",\n \"aws.group.region\": \"group/region_32.svg\",\n \"aws.group.server-contents\": \"group/server-contents_32.svg\",\n \"aws.group.spot-fleet\": \"group/spot-fleet_32.svg\",\n \"aws.group.virtual-private-cloud-vpc\": \"group/virtual-private-cloud-vpc_32.svg\",\n};\n","import type { NodeType } from \"./node-types.js\";\nimport { nodeTypeToIcon } from \"./node-types.js\";\n\nconst nodeTypes = Object.keys(nodeTypeToIcon) as NodeType[];\nconst nodeTypeSet = new Set<string>(nodeTypes);\nconst nodeTypeAliases = new Map<string, NodeType>();\nconst uniqueAliases = new Map<string, NodeType | null>();\n\nfunction normalizeLookupKey(value: string): string {\n return value\n .trim()\n .toLowerCase()\n .replace(/&/g, \"and\")\n .replace(/[_\\s/]+/g, \"-\")\n .replace(/-?\\.-?/g, \".\")\n .replace(/\\.{2,}/g, \".\")\n .replace(/-{2,}/g, \"-\")\n .replace(/^[-.]+|[-.]+$/g, \"\");\n}\n\nfunction isNodeType(value: string): value is NodeType {\n return nodeTypeSet.has(value);\n}\n\nfunction registerAlias(alias: string, type: NodeType): void {\n const normalizedAlias = normalizeLookupKey(alias);\n if (!normalizedAlias || nodeTypeAliases.has(normalizedAlias)) {\n return;\n }\n\n nodeTypeAliases.set(normalizedAlias, type);\n}\n\nfunction registerUniqueAlias(alias: string, type: NodeType): void {\n const normalizedAlias = normalizeLookupKey(alias);\n if (!normalizedAlias) {\n return;\n }\n\n const existing = uniqueAliases.get(normalizedAlias);\n if (existing === undefined) {\n uniqueAliases.set(normalizedAlias, type);\n return;\n }\n\n if (existing !== type) {\n uniqueAliases.set(normalizedAlias, null);\n }\n}\n\nfor (const type of nodeTypes) {\n const segments = type.split(\".\");\n registerAlias(type, type);\n registerAlias(type.replace(/^aws\\./, \"\"), type);\n\n const lastSegment = segments[segments.length - 1];\n if (lastSegment) {\n registerUniqueAlias(lastSegment, type);\n }\n\n if (segments.length >= 4) {\n const parentAndChild = `${segments[segments.length - 2]}.${segments[segments.length - 1]}`;\n registerUniqueAlias(parentAndChild, type);\n }\n\n const repeatedSegment = segments.length === 4 ? segments[2] : undefined;\n if (repeatedSegment && repeatedSegment === segments[3]) {\n registerAlias(segments.slice(0, 3).join(\".\"), type);\n registerUniqueAlias(repeatedSegment, type);\n }\n}\n\nfor (const [alias, type] of uniqueAliases) {\n if (type) {\n registerAlias(alias, type);\n }\n}\n\nconst manualAliases: Record<string, NodeType> = {\n \"acm\": \"aws.security-identity.certificate-manager\",\n \"api-gateway\": \"aws.networking-content-delivery.api-gateway\",\n \"apigateway\": \"aws.networking-content-delivery.api-gateway\",\n \"aws.general.user\": \"aws.general.user.user\",\n \"aws.general.users\": \"aws.general.users.users\",\n \"bucket\": \"aws.storage.simple-storage-service.bucket\",\n \"cloudfront\": \"aws.networking-content-delivery.cloudfront\",\n \"dynamodb\": \"aws.databases.dynamodb\",\n \"iam\": \"aws.security-identity.identity-and-access-management\",\n \"lambda\": \"aws.compute.lambda\",\n \"oac\": \"aws.security-identity.identity-and-access-management\",\n \"origin-access-control\": \"aws.security-identity.identity-and-access-management\",\n \"origin-access-identity\": \"aws.security-identity.identity-and-access-management\",\n \"route53\": \"aws.networking-content-delivery.route-53\",\n \"route-53\": \"aws.networking-content-delivery.route-53\",\n \"s3\": \"aws.storage.simple-storage-service\",\n \"s3-bucket\": \"aws.storage.simple-storage-service.bucket\",\n \"user\": \"aws.general.user.user\",\n \"users\": \"aws.general.users.users\",\n \"waf\": \"aws.security-identity.waf\",\n};\n\nfor (const [alias, type] of Object.entries(manualAliases)) {\n registerAlias(alias, type);\n}\n\nfunction resolveRepeatedSuffix(normalizedValue: string): NodeType | undefined {\n const segments = normalizedValue.split(\".\").filter(Boolean);\n if (segments.length < 3) {\n return undefined;\n }\n\n const repeated = `${segments.join(\".\")}.${segments[segments.length - 1]}`;\n return isNodeType(repeated) ? repeated : undefined;\n}\n\nexport function resolveNodeType(value: NodeType | string): NodeType | undefined {\n if (isNodeType(value)) {\n return value;\n }\n\n const normalizedValue = normalizeLookupKey(value);\n if (!normalizedValue) {\n return undefined;\n }\n\n if (isNodeType(normalizedValue)) {\n return normalizedValue;\n }\n\n const directMatch = nodeTypeAliases.get(normalizedValue);\n if (directMatch) {\n return directMatch;\n }\n\n const repeatedMatch = resolveRepeatedSuffix(normalizedValue);\n if (repeatedMatch) {\n return repeatedMatch;\n }\n\n const awsPrefixedValue = normalizedValue.startsWith(\"aws.\") ? normalizedValue : `aws.${normalizedValue}`;\n if (isNodeType(awsPrefixedValue)) {\n return awsPrefixedValue;\n }\n\n return nodeTypeAliases.get(awsPrefixedValue) ?? resolveRepeatedSuffix(awsPrefixedValue);\n}\n\nexport function normalizeNodeTypeInput(value: string): string {\n return resolveNodeType(value) ?? normalizeLookupKey(value);\n}","import { getIcon } from \"./icons.js\";\nimport type { PositionedDiagram } from \"./layout.js\";\nimport type { Group, GroupStyle } from \"./schema.js\";\n\nconst ICON_SIZE = 64;\nconst LABEL_GAP = 16;\nconst LABEL_HEIGHT = 18;\nconst TITLE_HEIGHT = 30;\nconst TITLE_MARGIN = 16;\nconst GROUP_PADDING_X = 24;\nconst GROUP_PADDING_Y = 20;\nconst GROUP_TITLE_BAND = 32;\nconst EDGE_LABEL_FONT_SIZE = 11;\nconst EDGE_LABEL_OFFSET = 12;\nconst MARKER_WIDTH = 7;\nconst MARKER_HEIGHT = 5;\nconst MARKER_REF_END = 6.2;\nconst MARKER_REF_START = 0.8;\n\ninterface Bounds {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\ninterface GroupBounds extends Bounds {\n id: string;\n depth: number;\n}\n\ninterface Point {\n x: number;\n y: number;\n}\n\ninterface EdgeRoute {\n labelPoint: Point;\n points: Point[];\n}\n\ninterface IconSvg {\n viewBox: string;\n body: string;\n}\n\ninterface GroupStyleToken {\n fill: string;\n stroke: string;\n text: string;\n}\n\nconst defaultGroupStyle: GroupStyleToken = {\n fill: \"#f8fafc\",\n stroke: \"#94a3b8\",\n text: \"#0f172a\",\n};\n\nconst groupStyleMap: Partial<Record<GroupStyle, GroupStyleToken>> = {\n account: { fill: \"#f8fafc\", stroke: \"#64748b\", text: \"#0f172a\" },\n \"auto-scaling-group\": { fill: \"#eef2ff\", stroke: \"#6366f1\", text: \"#312e81\" },\n cloud: { fill: \"#eff6ff\", stroke: \"#3b82f6\", text: \"#1d4ed8\" },\n \"cloud-logo\": { fill: \"#eff6ff\", stroke: \"#2563eb\", text: \"#1d4ed8\" },\n \"corporate-data-center\": { fill: \"#f1f5f9\", stroke: \"#475569\", text: \"#1e293b\" },\n \"ec2-instance-contents\": { fill: \"#f8fafc\", stroke: \"#7c3aed\", text: \"#4c1d95\" },\n \"iot-greengrass-deployment\": { fill: \"#ecfdf5\", stroke: \"#059669\", text: \"#065f46\" },\n \"private-subnet\": { fill: \"#ecfdf5\", stroke: \"#16a34a\", text: \"#166534\" },\n \"public-subnet\": { fill: \"#fff7ed\", stroke: \"#ea580c\", text: \"#9a3412\" },\n region: { fill: \"#eff6ff\", stroke: \"#0284c7\", text: \"#075985\" },\n \"server-contents\": { fill: \"#f8fafc\", stroke: \"#334155\", text: \"#0f172a\" },\n \"spot-fleet\": { fill: \"#fefce8\", stroke: \"#ca8a04\", text: \"#854d0e\" },\n vpc: { fill: \"#eff6ff\", stroke: \"#2563eb\", text: \"#1d4ed8\" },\n custom: defaultGroupStyle,\n};\n\nfunction escapeXml(value: string): string {\n return value\n .replaceAll(\"&\", \"&\")\n .replaceAll(\"<\", \"<\")\n .replaceAll(\">\", \">\")\n .replaceAll('\"', \""\")\n .replaceAll(\"'\", \"'\");\n}\n\nfunction nodeLabelBounds(x: number, y: number): Bounds {\n return {\n x,\n y,\n width: ICON_SIZE,\n height: ICON_SIZE + LABEL_GAP + LABEL_HEIGHT,\n };\n}\n\nfunction nodeIconBounds(x: number, y: number): Bounds {\n return {\n x,\n y,\n width: ICON_SIZE,\n height: ICON_SIZE,\n };\n}\n\nfunction mergeBounds(boundsList: Bounds[]): Bounds {\n const minX = Math.min(...boundsList.map((bounds) => bounds.x));\n const minY = Math.min(...boundsList.map((bounds) => bounds.y));\n const maxX = Math.max(...boundsList.map((bounds) => bounds.x + bounds.width));\n const maxY = Math.max(...boundsList.map((bounds) => bounds.y + bounds.height));\n\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY,\n };\n}\n\nfunction expandBounds(bounds: Bounds, left: number, top: number, right: number, bottom: number): Bounds {\n return {\n x: bounds.x - left,\n y: bounds.y - top,\n width: bounds.width + left + right,\n height: bounds.height + top + bottom,\n };\n}\n\nfunction extractIconSvg(markup: string): IconSvg {\n const cleaned = markup.replace(/<\\?xml[\\s\\S]*?\\?>/gi, \"\").replace(/<!DOCTYPE[\\s\\S]*?>/gi, \"\").trim();\n const match = cleaned.match(/<svg\\b([^>]*)>([\\s\\S]*?)<\\/svg>/i);\n\n if (!match) {\n return { viewBox: \"0 0 64 64\", body: cleaned };\n }\n\n const attrs = match[1] ?? \"\";\n const body = match[2] ?? \"\";\n const viewBox = attrs.match(/viewBox\\s*=\\s*['\\\"]([^'\\\"]+)['\\\"]/i)?.[1];\n const width = attrs.match(/width\\s*=\\s*['\\\"]([^'\\\"]+)['\\\"]/i)?.[1];\n const height = attrs.match(/height\\s*=\\s*['\\\"]([^'\\\"]+)['\\\"]/i)?.[1];\n\n if (viewBox) {\n return { viewBox, body };\n }\n\n const numericWidth = width ? Number.parseFloat(width) : Number.NaN;\n const numericHeight = height ? Number.parseFloat(height) : Number.NaN;\n if (Number.isFinite(numericWidth) && Number.isFinite(numericHeight)) {\n return { viewBox: `0 0 ${numericWidth} ${numericHeight}`, body };\n }\n\n return { viewBox: \"0 0 64 64\", body };\n}\n\nfunction groupVisualStyle(group: Group): GroupStyleToken {\n if (group.style === \"custom\") {\n return {\n fill: group.color ?? defaultGroupStyle.fill,\n stroke: group.borderColor ?? defaultGroupStyle.stroke,\n text: defaultGroupStyle.text,\n };\n }\n\n return groupStyleMap[group.style ?? \"custom\"] ?? defaultGroupStyle;\n}\n\nfunction getNodeCenter(bounds: Bounds): Point {\n return {\n x: bounds.x + bounds.width / 2,\n y: bounds.y + ICON_SIZE / 2,\n };\n}\n\nfunction dedupePoints(points: Point[]): Point[] {\n const deduped: Point[] = [];\n\n for (const point of points) {\n const previous = deduped[deduped.length - 1];\n if (!previous || previous.x !== point.x || previous.y !== point.y) {\n deduped.push(point);\n }\n }\n\n return deduped;\n}\n\nfunction pathData(points: Point[]): string {\n return points.map((point, index) => `${index === 0 ? \"M\" : \"L\"} ${point.x} ${point.y}`).join(\" \");\n}\n\nfunction routeLabelPoint(points: Point[]): Point {\n let selectedMidpoint: Point = points[0] ?? { x: 0, y: 0 };\n let longestSegment = -1;\n\n for (let index = 0; index < points.length - 1; index += 1) {\n const current = points[index];\n const next = points[index + 1];\n if (!current || !next) {\n continue;\n }\n\n const segmentLength = Math.abs(next.x - current.x) + Math.abs(next.y - current.y);\n if (segmentLength > longestSegment) {\n longestSegment = segmentLength;\n selectedMidpoint = {\n x: (current.x + next.x) / 2,\n y: (current.y + next.y) / 2,\n };\n }\n }\n\n return {\n x: selectedMidpoint.x,\n y: selectedMidpoint.y - EDGE_LABEL_OFFSET,\n };\n}\n\nfunction routeOrthogonalEdge(source: Bounds, target: Bounds, edgeIndex: number): EdgeRoute {\n const sourceCenter = getNodeCenter(source);\n const targetCenter = getNodeCenter(target);\n const dx = targetCenter.x - sourceCenter.x;\n const dy = targetCenter.y - sourceCenter.y;\n const laneOffset = ((edgeIndex % 3) - 1) * 12;\n const preferHorizontal = Math.abs(dx) >= Math.abs(dy);\n\n if (preferHorizontal) {\n const start = {\n x: dx >= 0 ? source.x + source.width : source.x,\n y: sourceCenter.y,\n };\n const end = {\n x: dx >= 0 ? target.x : target.x + target.width,\n y: targetCenter.y,\n };\n\n const midX = Math.round((start.x + end.x) / 2 + laneOffset);\n const points = dedupePoints([\n start,\n { x: midX, y: start.y },\n { x: midX, y: end.y },\n end,\n ]);\n\n return {\n labelPoint: routeLabelPoint(points),\n points,\n };\n }\n\n const start = {\n x: sourceCenter.x,\n y: dy >= 0 ? source.y + source.height : source.y,\n };\n const end = {\n x: targetCenter.x,\n y: dy >= 0 ? target.y : target.y + target.height,\n };\n const midY = Math.round((start.y + end.y) / 2 + laneOffset);\n const points = dedupePoints([\n start,\n { x: start.x, y: midY },\n { x: end.x, y: midY },\n end,\n ]);\n\n return {\n labelPoint: routeLabelPoint(points),\n points,\n };\n}\n\nfunction buildGroupBounds(diagram: PositionedDiagram): GroupBounds[] {\n const groups = diagram.groups ?? [];\n const groupById = new Map(groups.map((group) => [group.id, group]));\n const nodeBounds = new Map(diagram.nodes.map((node) => [node.id, nodeLabelBounds(node.position.x, node.position.y)]));\n const cache = new Map<string, GroupBounds>();\n\n function compute(groupId: string, depth: number): GroupBounds {\n const existing = cache.get(groupId);\n if (existing) {\n return existing;\n }\n\n const group = groupById.get(groupId);\n if (!group) {\n throw new Error(`Unknown group \\\"${groupId}\\\"`);\n }\n\n const childBounds: Bounds[] = [];\n for (const childId of group.children) {\n const node = nodeBounds.get(childId);\n if (node) {\n childBounds.push(node);\n continue;\n }\n\n if (groupById.has(childId)) {\n childBounds.push(compute(childId, depth + 1));\n }\n }\n\n const merged = childBounds.length > 0\n ? mergeBounds(childBounds)\n : { x: 0, y: 0, width: ICON_SIZE + GROUP_PADDING_X * 2, height: ICON_SIZE + GROUP_PADDING_Y * 2 };\n const expanded = expandBounds(merged, GROUP_PADDING_X, GROUP_TITLE_BAND, GROUP_PADDING_X, GROUP_PADDING_Y);\n const result: GroupBounds = { ...expanded, id: groupId, depth };\n cache.set(groupId, result);\n return result;\n }\n\n const roots = new Set(groups.map((group) => group.id));\n for (const group of groups) {\n for (const childId of group.children) {\n if (groupById.has(childId)) {\n roots.delete(childId);\n }\n }\n }\n\n for (const rootId of [...roots].sort()) {\n compute(rootId, 0);\n }\n\n return [...cache.values()].sort((left, right) => left.depth - right.depth || left.id.localeCompare(right.id));\n}\n\nfunction diagramBounds(diagram: PositionedDiagram, groups: GroupBounds[]): Bounds {\n const nodeBounds = diagram.nodes.map((node) => nodeLabelBounds(node.position.x, node.position.y));\n const allBounds = [...nodeBounds, ...groups];\n\n if (allBounds.length === 0) {\n return { x: 0, y: 0, width: 320, height: 180 };\n }\n\n return mergeBounds(allBounds);\n}\n\nfunction renderGroup(group: Group, bounds: GroupBounds, offset: Point): string {\n const style = groupVisualStyle(group);\n const x = bounds.x + offset.x;\n const y = bounds.y + offset.y;\n\n return [\n `<g class=\"group\" data-group-id=\"${escapeXml(group.id)}\">`,\n `<rect x=\"${x}\" y=\"${y}\" width=\"${bounds.width}\" height=\"${bounds.height}\" rx=\"18\" fill=\"${style.fill}\" fill-opacity=\"0.42\" stroke=\"${style.stroke}\" stroke-width=\"2\" stroke-dasharray=\"${group.style === \"custom\" ? \"6 4\" : \"none\"}\"/>`,\n `<text x=\"${x + GROUP_PADDING_X}\" y=\"${y + 22}\" font-family=\"ui-sans-serif, system-ui, sans-serif\" font-size=\"14\" font-weight=\"700\" fill=\"${style.text}\">${escapeXml(group.label)}</text>`,\n `</g>`,\n ].join(\"\");\n}\n\nfunction renderEdge(diagram: PositionedDiagram, edgeIndex: number, offset: Point): string {\n const edge = diagram.edges[edgeIndex];\n if (!edge) {\n return \"\";\n }\n\n const source = diagram.nodes.find((node) => node.id === edge.from);\n const target = diagram.nodes.find((node) => node.id === edge.to);\n if (!source || !target) {\n return \"\";\n }\n\n const sourceBounds = nodeIconBounds(source.position.x, source.position.y);\n const targetBounds = nodeIconBounds(target.position.x, target.position.y);\n const route = routeOrthogonalEdge(sourceBounds, targetBounds, edgeIndex);\n const shiftedPoints = route.points.map((point) => ({\n x: point.x + offset.x,\n y: point.y + offset.y,\n }));\n const shiftedLabelPoint = {\n x: route.labelPoint.x + offset.x,\n y: route.labelPoint.y + offset.y,\n };\n const markerEnd = edge.direction !== \"two-way\" ? ' marker-end=\"url(#arrowhead)\"' : ' marker-end=\"url(#arrowhead)\" marker-start=\"url(#arrowhead-reverse)\"';\n const label = edge.label ? `<text class=\"edge-label\" x=\"${shiftedLabelPoint.x}\" y=\"${shiftedLabelPoint.y}\" text-anchor=\"middle\" font-family=\"ui-sans-serif, system-ui, sans-serif\" font-size=\"${EDGE_LABEL_FONT_SIZE}\" fill=\"#334155\">${escapeXml(edge.label)}</text>` : \"\";\n\n return [\n `<g class=\"edge\" data-edge-index=\"${edgeIndex}\">`,\n `<path d=\"${pathData(shiftedPoints)}\" fill=\"none\" stroke=\"#475569\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"${markerEnd}/>`,\n label,\n `</g>`,\n ].join(\"\");\n}\n\nfunction renderNode(nodeId: string, diagram: PositionedDiagram, offset: Point): string {\n const node = diagram.nodes.find((candidate) => candidate.id === nodeId);\n if (!node) {\n return \"\";\n }\n\n const icon = extractIconSvg(getIcon(node.type));\n const x = node.position.x + offset.x;\n const y = node.position.y + offset.y;\n const label = node.label ?? node.id;\n\n return [\n `<g class=\"node\" data-node-id=\"${escapeXml(node.id)}\">`,\n `<svg x=\"${x}\" y=\"${y}\" width=\"${ICON_SIZE}\" height=\"${ICON_SIZE}\" viewBox=\"${escapeXml(icon.viewBox)}\" overflow=\"visible\" preserveAspectRatio=\"xMidYMid meet\">${icon.body}</svg>`,\n `<text x=\"${x + ICON_SIZE / 2}\" y=\"${y + ICON_SIZE + LABEL_GAP}\" text-anchor=\"middle\" font-family=\"ui-sans-serif, system-ui, sans-serif\" font-size=\"12\" font-weight=\"600\" fill=\"#0f172a\">${escapeXml(label)}</text>`,\n `</g>`,\n ].join(\"\");\n}\n\nexport function renderDiagram(diagram: PositionedDiagram): string {\n return renderDiagramDocument(diagram).svg;\n}\n\nexport function renderDiagramDocument(diagram: PositionedDiagram): { svg: string; width: number; height: number } {\n const groups = buildGroupBounds(diagram);\n const contentBounds = diagramBounds(diagram, groups);\n const horizontalPadding = 32;\n const verticalPadding = 28;\n const titleOffset = diagram.title ? TITLE_HEIGHT + TITLE_MARGIN : 0;\n const offset = {\n x: horizontalPadding - contentBounds.x,\n y: verticalPadding - contentBounds.y + titleOffset,\n };\n const width = Math.max(320, Math.ceil(contentBounds.width + horizontalPadding * 2));\n const height = Math.max(200, Math.ceil(contentBounds.height + verticalPadding * 2 + titleOffset));\n const titleMarkup = diagram.title\n ? `<text x=\"${horizontalPadding}\" y=\"32\" font-family=\"ui-sans-serif, system-ui, sans-serif\" font-size=\"22\" font-weight=\"700\" fill=\"#0f172a\">${escapeXml(diagram.title)}</text>`\n : \"\";\n const groupById = new Map((diagram.groups ?? []).map((group) => [group.id, group]));\n\n const groupMarkup = groups\n .map((bounds) => {\n const group = groupById.get(bounds.id);\n return group ? renderGroup(group, bounds, offset) : \"\";\n })\n .join(\"\");\n\n const edgeMarkup = diagram.edges.map((_, index) => renderEdge(diagram, index, offset)).join(\"\");\n const nodeMarkup = diagram.nodes.map((node) => renderNode(node.id, diagram, offset)).join(\"\");\n\n const svg = [\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${width}\" height=\"${height}\" viewBox=\"0 0 ${width} ${height}\" role=\"img\">`,\n `<defs>`,\n `<marker id=\"arrowhead\" markerWidth=\"${MARKER_WIDTH}\" markerHeight=\"${MARKER_HEIGHT}\" refX=\"${MARKER_REF_END}\" refY=\"${MARKER_HEIGHT / 2}\" orient=\"auto\" markerUnits=\"strokeWidth\">`,\n `<polygon points=\"0 0, ${MARKER_WIDTH} ${MARKER_HEIGHT / 2}, 0 ${MARKER_HEIGHT}\" fill=\"#475569\"/>`,\n `</marker>`,\n `<marker id=\"arrowhead-reverse\" markerWidth=\"${MARKER_WIDTH}\" markerHeight=\"${MARKER_HEIGHT}\" refX=\"${MARKER_REF_START}\" refY=\"${MARKER_HEIGHT / 2}\" orient=\"auto-start-reverse\" markerUnits=\"strokeWidth\">`,\n `<polygon points=\"${MARKER_WIDTH} 0, 0 ${MARKER_HEIGHT / 2}, ${MARKER_WIDTH} ${MARKER_HEIGHT}\" fill=\"#475569\"/>`,\n `</marker>`,\n `</defs>`,\n `<rect width=\"100%\" height=\"100%\" fill=\"#ffffff\"/>`,\n titleMarkup,\n groupMarkup,\n edgeMarkup,\n nodeMarkup,\n `</svg>`,\n ].join(\"\");\n\n return { svg, width, height };\n}\n\nexport const render = renderDiagram;","import { z } from \"zod\";\nimport { normalizeNodeTypeInput } from \"./node-type-resolution.js\";\nimport { NodeTypeSchema } from \"./node-types.js\";\n\nexport { NodeTypeSchema };\nexport type { NodeType } from \"./node-types.js\";\n\n// ── Group style ───────────────────────────────────────────────────────────────\n\nexport const GroupStyleSchema = z.enum([\n \"account\",\n \"auto-scaling-group\",\n \"cloud\",\n \"cloud-logo\",\n \"corporate-data-center\",\n \"ec2-instance-contents\",\n \"iot-greengrass-deployment\",\n \"private-subnet\",\n \"public-subnet\",\n \"region\",\n \"server-contents\",\n \"spot-fleet\",\n \"vpc\",\n \"custom\",\n]);\n\nexport type GroupStyle = z.infer<typeof GroupStyleSchema>;\n\n// ── Position ──────────────────────────────────────────────────────────────────\n\nexport const PositionSchema = z.object({\n x: z.number(),\n y: z.number(),\n});\n\nexport type Position = z.infer<typeof PositionSchema>;\n\nexport const LayoutModeSchema = z.enum([\"auto\", \"manual\", \"hybrid\"]);\n\nexport type LayoutMode = z.infer<typeof LayoutModeSchema>;\n\nexport const LayoutDirectionSchema = z.enum([\"LEFT\", \"RIGHT\", \"UP\", \"DOWN\"]);\n\nexport type LayoutDirection = z.infer<typeof LayoutDirectionSchema>;\n\nexport const LayoutSchema = z.object({\n mode: LayoutModeSchema.optional(),\n direction: LayoutDirectionSchema.optional(),\n nodeSpacing: z.number().nonnegative().optional(),\n layerSpacing: z.number().nonnegative().optional(),\n});\n\nexport type LayoutConfig = z.infer<typeof LayoutSchema>;\n\n// ── Node ──────────────────────────────────────────────────────────────────────\n\nexport const NodeSchema = z.object({\n id: z.string().min(1),\n type: z.preprocess(\n (value) => (typeof value === \"string\" ? normalizeNodeTypeInput(value) : value),\n NodeTypeSchema\n ),\n label: z.string().optional(),\n description: z.string().optional(),\n position: PositionSchema.optional(),\n});\n\nexport type Node = z.infer<typeof NodeSchema>;\n\n// ── Edge ──────────────────────────────────────────────────────────────────────\n\nexport const EdgeSchema = z.object({\n from: z.string().min(1),\n to: z.string().min(1),\n label: z.string().optional(),\n description: z.string().optional(),\n direction: z.enum([\"one-way\", \"two-way\"]).optional(),\n});\n\nexport type Edge = z.infer<typeof EdgeSchema>;\n\n// ── Group ─────────────────────────────────────────────────────────────────────\n\nexport const GroupSchema = z.object({\n id: z.string().min(1),\n label: z.string(),\n /** Node IDs and/or nested group IDs contained within this group. */\n children: z.array(z.string().min(1)),\n style: GroupStyleSchema.optional(),\n /** Only applies when style is \"custom\". */\n color: z.string().optional(),\n borderColor: z.string().optional(),\n});\n\nexport type Group = z.infer<typeof GroupSchema>;\n\n// ── Diagram ───────────────────────────────────────────────────────────────────\n\nexport const DiagramSchema = z.object({\n title: z.string().optional(),\n nodes: z.array(NodeSchema),\n edges: z.array(EdgeSchema),\n groups: z.array(GroupSchema).optional(),\n layout: LayoutSchema.optional(),\n});\n\nexport type Diagram = z.infer<typeof DiagramSchema>;\n","import type { ZodError } from \"zod\";\nimport { DiagramSchema, type Diagram } from \"./schema.js\";\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\nexport interface ValidationError {\n path: string;\n message: string;\n}\n\nexport interface ValidationResult {\n valid: boolean;\n errors: ValidationError[];\n}\n\n// ── Helpers ───────────────────────────────────────────────────────────────────\n\nfunction zodToErrors(error: ZodError): ValidationError[] {\n return error.issues.map((issue) => ({\n path: issue.path.join(\".\") || \"(root)\",\n message: issue.message,\n }));\n}\n\n// ── Semantic checks ───────────────────────────────────────────────────────────\n\nfunction semanticErrors(diagram: Diagram): ValidationError[] {\n const errors: ValidationError[] = [];\n const nodeIds = new Set(diagram.nodes.map((n) => n.id));\n const groupIds = new Set((diagram.groups ?? []).map((g) => g.id));\n const allIds = new Set([...nodeIds, ...groupIds]);\n\n // Duplicate IDs\n const seen = new Set<string>();\n for (const node of diagram.nodes) {\n if (seen.has(node.id)) {\n errors.push({ path: `nodes`, message: `Duplicate id \"${node.id}\"` });\n }\n seen.add(node.id);\n }\n for (const group of diagram.groups ?? []) {\n if (seen.has(group.id)) {\n errors.push({\n path: `groups`,\n message: `Duplicate id \"${group.id}\" (conflicts with a node or group id)`,\n });\n }\n seen.add(group.id);\n }\n\n // Edge references\n diagram.edges.forEach((edge, i) => {\n if (!nodeIds.has(edge.from)) {\n errors.push({\n path: `edges[${i}].from`,\n message: `Node \"${edge.from}\" does not exist`,\n });\n }\n if (!nodeIds.has(edge.to)) {\n errors.push({\n path: `edges[${i}].to`,\n message: `Node \"${edge.to}\" does not exist`,\n });\n }\n });\n\n // Group children references\n for (const group of diagram.groups ?? []) {\n group.children.forEach((childId, i) => {\n if (!allIds.has(childId)) {\n errors.push({\n path: `groups[id=${group.id}].children[${i}]`,\n message: `\"${childId}\" does not exist as a node or group id`,\n });\n }\n });\n }\n\n // Circular group nesting\n const childrenOf = new Map<string, string[]>();\n for (const group of diagram.groups ?? []) {\n childrenOf.set(group.id, group.children.filter((c) => groupIds.has(c)));\n }\n\n function hasCycle(groupId: string, visited: Set<string>): boolean {\n if (visited.has(groupId)) return true;\n visited.add(groupId);\n for (const child of childrenOf.get(groupId) ?? []) {\n if (hasCycle(child, new Set(visited))) return true;\n }\n return false;\n }\n\n for (const group of diagram.groups ?? []) {\n if (hasCycle(group.id, new Set())) {\n errors.push({\n path: `groups[id=${group.id}]`,\n message: `Circular group nesting detected`,\n });\n }\n }\n\n // Manual layout requires explicit positions for every node.\n if (diagram.layout?.mode === \"manual\") {\n for (const node of diagram.nodes) {\n if (!node.position) {\n errors.push({\n path: `nodes[id=${node.id}].position`,\n message: `Manual layout mode requires all nodes to define position`,\n });\n }\n }\n }\n\n return errors;\n}\n\n// ── Orphan warnings ───────────────────────────────────────────────────────────\n\nfunction orphanWarnings(diagram: Diagram): ValidationError[] {\n const warnings: ValidationError[] = [];\n const referenced = new Set<string>();\n\n for (const edge of diagram.edges) {\n referenced.add(edge.from);\n referenced.add(edge.to);\n }\n for (const group of diagram.groups ?? []) {\n for (const child of group.children) referenced.add(child);\n }\n\n for (const node of diagram.nodes) {\n if (!referenced.has(node.id)) {\n warnings.push({\n path: `nodes[id=${node.id}]`,\n message: `Node \"${node.id}\" is not referenced by any edge or group (orphan)`,\n });\n }\n }\n return warnings;\n}\n\n// ── Public API ────────────────────────────────────────────────────────────────\n\nexport interface ValidateOptions {\n /** Include orphan-node warnings in the result errors array. Default: true. */\n warnOrphans?: boolean;\n}\n\nexport function validate(\n input: unknown,\n options: ValidateOptions = {}\n): ValidationResult {\n const { warnOrphans = true } = options;\n\n // Pass 1: structural (zod)\n const parsed = DiagramSchema.safeParse(input);\n if (!parsed.success) {\n return { valid: false, errors: zodToErrors(parsed.error) };\n }\n\n // Pass 2: semantic\n const errors = semanticErrors(parsed.data);\n if (errors.length > 0) {\n return { valid: false, errors };\n }\n\n // Orphan warnings (non-blocking)\n const warnings = warnOrphans ? orphanWarnings(parsed.data) : [];\n\n return { valid: true, errors: warnings };\n}\n"],"mappings":"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ACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,E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","names":["z","positions","ICON_SIZE","start","end","points","z","z","z"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|