stack-scribe-mcp 0.1.1 → 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 -2944
- 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 +3 -4
package/dist/index.js
CHANGED
|
@@ -1,2980 +1,286 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import { randomUUID } from "crypto";
|
|
5
|
-
import { writeFileSync } from "fs";
|
|
1
|
+
#! /usr/bin/env node
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
3
|
+
import { writeFileSync } from "node:fs";
|
|
6
4
|
import { McpServer, ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
7
5
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
8
6
|
import { toJsonSchemaCompat } from "@modelcontextprotocol/sdk/server/zod-json-schema-compat.js";
|
|
9
|
-
import { z as z3 } from "zod";
|
|
10
|
-
|
|
11
|
-
// src/layout.ts
|
|
12
|
-
import ELK from "elkjs/lib/elk.bundled.js";
|
|
13
|
-
var DEFAULT_NODE_WIDTH = 120;
|
|
14
|
-
var DEFAULT_NODE_HEIGHT = 98;
|
|
15
|
-
var DEFAULT_NODE_SPACING = 120;
|
|
16
|
-
var DEFAULT_LAYER_SPACING = 180;
|
|
17
|
-
var DEFAULT_DIRECTION = "RIGHT";
|
|
18
|
-
var ICON_SIZE = 64;
|
|
19
|
-
var ICON_X_OFFSET = Math.round((DEFAULT_NODE_WIDTH - ICON_SIZE) / 2);
|
|
20
|
-
var ElkConstructor = ELK;
|
|
21
|
-
var elk = new ElkConstructor();
|
|
22
|
-
function compareStrings(left, right) {
|
|
23
|
-
return left.localeCompare(right);
|
|
24
|
-
}
|
|
25
|
-
function getLayoutMode(diagram) {
|
|
26
|
-
return diagram.layout?.mode ?? "hybrid";
|
|
27
|
-
}
|
|
28
|
-
function clonePosition(position) {
|
|
29
|
-
return { x: position.x, y: position.y };
|
|
30
|
-
}
|
|
31
|
-
function fallbackPosition(index, direction, layerSpacing) {
|
|
32
|
-
const distance = index * layerSpacing;
|
|
33
|
-
switch (direction) {
|
|
34
|
-
case "LEFT":
|
|
35
|
-
return { x: -distance, y: 0 };
|
|
36
|
-
case "UP":
|
|
37
|
-
return { x: 0, y: -distance };
|
|
38
|
-
case "DOWN":
|
|
39
|
-
return { x: 0, y: distance };
|
|
40
|
-
case "RIGHT":
|
|
41
|
-
default:
|
|
42
|
-
return { x: distance, y: 0 };
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
function inferLayoutDirection(diagram) {
|
|
46
|
-
if (diagram.layout?.direction) {
|
|
47
|
-
return diagram.layout.direction;
|
|
48
|
-
}
|
|
49
|
-
const nodeById = new Map(diagram.nodes.map((node) => [node.id, node]));
|
|
50
|
-
let horizontalWeight = 0;
|
|
51
|
-
let verticalWeight = 0;
|
|
52
|
-
for (const edge of diagram.edges) {
|
|
53
|
-
const source = nodeById.get(edge.from);
|
|
54
|
-
const target = nodeById.get(edge.to);
|
|
55
|
-
if (!source?.position || !target?.position) {
|
|
56
|
-
continue;
|
|
57
|
-
}
|
|
58
|
-
horizontalWeight += Math.abs(target.position.x - source.position.x);
|
|
59
|
-
verticalWeight += Math.abs(target.position.y - source.position.y);
|
|
60
|
-
}
|
|
61
|
-
if (verticalWeight > horizontalWeight) {
|
|
62
|
-
return "DOWN";
|
|
63
|
-
}
|
|
64
|
-
return DEFAULT_DIRECTION;
|
|
65
|
-
}
|
|
66
|
-
function buildGraphStats(diagram) {
|
|
67
|
-
const nodeIds = diagram.nodes.map((node) => node.id).sort(compareStrings);
|
|
68
|
-
const indegree = /* @__PURE__ */ new Map();
|
|
69
|
-
const outdegree = /* @__PURE__ */ new Map();
|
|
70
|
-
const adjacency = /* @__PURE__ */ new Map();
|
|
71
|
-
const depth = /* @__PURE__ */ new Map();
|
|
72
|
-
for (const nodeId of nodeIds) {
|
|
73
|
-
indegree.set(nodeId, 0);
|
|
74
|
-
outdegree.set(nodeId, 0);
|
|
75
|
-
adjacency.set(nodeId, []);
|
|
76
|
-
depth.set(nodeId, 0);
|
|
77
|
-
}
|
|
78
|
-
for (const edge of diagram.edges) {
|
|
79
|
-
if (!adjacency.has(edge.from) || !indegree.has(edge.to)) {
|
|
80
|
-
continue;
|
|
81
|
-
}
|
|
82
|
-
adjacency.get(edge.from)?.push(edge.to);
|
|
83
|
-
outdegree.set(edge.from, (outdegree.get(edge.from) ?? 0) + 1);
|
|
84
|
-
indegree.set(edge.to, (indegree.get(edge.to) ?? 0) + 1);
|
|
85
|
-
}
|
|
86
|
-
for (const neighbours of adjacency.values()) {
|
|
87
|
-
neighbours.sort(compareStrings);
|
|
88
|
-
}
|
|
89
|
-
const indegreeCopy = new Map(indegree);
|
|
90
|
-
const queue = nodeIds.filter((nodeId) => (indegreeCopy.get(nodeId) ?? 0) === 0);
|
|
91
|
-
queue.sort(compareStrings);
|
|
92
|
-
while (queue.length > 0) {
|
|
93
|
-
const current = queue.shift();
|
|
94
|
-
if (!current) {
|
|
95
|
-
break;
|
|
96
|
-
}
|
|
97
|
-
const currentDepth = depth.get(current) ?? 0;
|
|
98
|
-
for (const next of adjacency.get(current) ?? []) {
|
|
99
|
-
depth.set(next, Math.max(depth.get(next) ?? 0, currentDepth + 1));
|
|
100
|
-
const remaining = (indegreeCopy.get(next) ?? 0) - 1;
|
|
101
|
-
indegreeCopy.set(next, remaining);
|
|
102
|
-
if (remaining === 0) {
|
|
103
|
-
queue.push(next);
|
|
104
|
-
queue.sort(compareStrings);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
let maxDepth = 0;
|
|
109
|
-
for (const value of depth.values()) {
|
|
110
|
-
maxDepth = Math.max(maxDepth, value);
|
|
111
|
-
}
|
|
112
|
-
return { indegree, outdegree, adjacency, depth, maxDepth };
|
|
113
|
-
}
|
|
114
|
-
function axisValue(position, direction) {
|
|
115
|
-
switch (direction) {
|
|
116
|
-
case "LEFT":
|
|
117
|
-
return -position.x;
|
|
118
|
-
case "UP":
|
|
119
|
-
return -position.y;
|
|
120
|
-
case "DOWN":
|
|
121
|
-
return position.y;
|
|
122
|
-
case "RIGHT":
|
|
123
|
-
default:
|
|
124
|
-
return position.x;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
function crossAxisValue(position, direction) {
|
|
128
|
-
switch (direction) {
|
|
129
|
-
case "LEFT":
|
|
130
|
-
case "RIGHT":
|
|
131
|
-
return position.y;
|
|
132
|
-
case "UP":
|
|
133
|
-
case "DOWN":
|
|
134
|
-
default:
|
|
135
|
-
return position.x;
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
function buildLayerAssignments(diagram, direction, mode, layerSpacing, stats) {
|
|
139
|
-
const assignments = /* @__PURE__ */ new Map();
|
|
140
|
-
const nodeById = new Map(diagram.nodes.map((node) => [node.id, node]));
|
|
141
|
-
const rawValues = [];
|
|
142
|
-
for (const node of diagram.nodes) {
|
|
143
|
-
const indegree = stats.indegree.get(node.id) ?? 0;
|
|
144
|
-
const outdegree = stats.outdegree.get(node.id) ?? 0;
|
|
145
|
-
let partition = stats.depth.get(node.id) ?? 0;
|
|
146
|
-
if (indegree === 0 && outdegree === 0) {
|
|
147
|
-
partition = stats.maxDepth + 2;
|
|
148
|
-
} else if (outdegree === 0 && indegree > 0) {
|
|
149
|
-
partition = stats.maxDepth + 1;
|
|
150
|
-
}
|
|
151
|
-
if (mode === "hybrid" && node.position) {
|
|
152
|
-
partition = Math.round(axisValue(node.position, direction) / layerSpacing);
|
|
153
|
-
}
|
|
154
|
-
assignments.set(node.id, partition);
|
|
155
|
-
rawValues.push(partition);
|
|
156
|
-
}
|
|
157
|
-
const minPartition = rawValues.length > 0 ? Math.min(...rawValues) : 0;
|
|
158
|
-
if (minPartition < 0) {
|
|
159
|
-
for (const nodeId of nodeById.keys()) {
|
|
160
|
-
assignments.set(nodeId, (assignments.get(nodeId) ?? 0) - minPartition);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
return assignments;
|
|
164
|
-
}
|
|
165
|
-
function createParentMap(groups) {
|
|
166
|
-
const parentByChild = /* @__PURE__ */ new Map();
|
|
167
|
-
for (const group of [...groups].sort((left, right) => compareStrings(left.id, right.id))) {
|
|
168
|
-
for (const childId of group.children) {
|
|
169
|
-
if (!parentByChild.has(childId)) {
|
|
170
|
-
parentByChild.set(childId, group.id);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
return parentByChild;
|
|
175
|
-
}
|
|
176
|
-
function collectGroupNodeIds(groupId, groupById, nodeById) {
|
|
177
|
-
const group = groupById.get(groupId);
|
|
178
|
-
if (!group) {
|
|
179
|
-
return [];
|
|
180
|
-
}
|
|
181
|
-
const nodeIds = [];
|
|
182
|
-
for (const childId of group.children) {
|
|
183
|
-
if (nodeById.has(childId)) {
|
|
184
|
-
nodeIds.push(childId);
|
|
185
|
-
continue;
|
|
186
|
-
}
|
|
187
|
-
nodeIds.push(...collectGroupNodeIds(childId, groupById, nodeById));
|
|
188
|
-
}
|
|
189
|
-
return nodeIds;
|
|
190
|
-
}
|
|
191
|
-
function buildNodeSortData(diagram, direction, layerAssignments) {
|
|
192
|
-
const sortData = /* @__PURE__ */ new Map();
|
|
193
|
-
for (const node of diagram.nodes) {
|
|
194
|
-
sortData.set(node.id, {
|
|
195
|
-
layer: layerAssignments.get(node.id) ?? 0,
|
|
196
|
-
cross: node.position ? crossAxisValue(node.position, direction) : 0,
|
|
197
|
-
id: node.id
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
return sortData;
|
|
201
|
-
}
|
|
202
|
-
function buildGroupSortData(groups, groupById, nodeById, nodeSortData) {
|
|
203
|
-
const groupSortData = /* @__PURE__ */ new Map();
|
|
204
|
-
for (const group of groups) {
|
|
205
|
-
const descendantNodeIds = collectGroupNodeIds(group.id, groupById, nodeById);
|
|
206
|
-
if (descendantNodeIds.length === 0) {
|
|
207
|
-
groupSortData.set(group.id, { layer: Number.MAX_SAFE_INTEGER, cross: 0, id: group.id });
|
|
208
|
-
continue;
|
|
209
|
-
}
|
|
210
|
-
const descendantData = descendantNodeIds.map((nodeId) => nodeSortData.get(nodeId)).filter((entry) => Boolean(entry));
|
|
211
|
-
descendantData.sort((left, right) => {
|
|
212
|
-
if (left.layer !== right.layer) {
|
|
213
|
-
return left.layer - right.layer;
|
|
214
|
-
}
|
|
215
|
-
if (left.cross !== right.cross) {
|
|
216
|
-
return left.cross - right.cross;
|
|
217
|
-
}
|
|
218
|
-
return compareStrings(left.id, right.id);
|
|
219
|
-
});
|
|
220
|
-
const first = descendantData[0] ?? { layer: Number.MAX_SAFE_INTEGER, cross: 0, id: group.id };
|
|
221
|
-
groupSortData.set(group.id, { layer: first.layer, cross: first.cross, id: group.id });
|
|
222
|
-
}
|
|
223
|
-
return groupSortData;
|
|
224
|
-
}
|
|
225
|
-
function sortElementIds(ids, nodeSortData, groupSortData) {
|
|
226
|
-
return [...ids].sort((leftId, rightId) => {
|
|
227
|
-
const left = nodeSortData.get(leftId) ?? groupSortData.get(leftId);
|
|
228
|
-
const right = nodeSortData.get(rightId) ?? groupSortData.get(rightId);
|
|
229
|
-
if (!left || !right) {
|
|
230
|
-
return compareStrings(leftId, rightId);
|
|
231
|
-
}
|
|
232
|
-
if (left.layer !== right.layer) {
|
|
233
|
-
return left.layer - right.layer;
|
|
234
|
-
}
|
|
235
|
-
if (left.cross !== right.cross) {
|
|
236
|
-
return left.cross - right.cross;
|
|
237
|
-
}
|
|
238
|
-
return compareStrings(left.id, right.id);
|
|
239
|
-
});
|
|
240
|
-
}
|
|
241
|
-
function collectAbsolutePositions(elkNode, nodeIds, positions, offsetX = 0, offsetY = 0) {
|
|
242
|
-
const absoluteX = offsetX + (elkNode.x ?? 0);
|
|
243
|
-
const absoluteY = offsetY + (elkNode.y ?? 0);
|
|
244
|
-
if (nodeIds.has(elkNode.id)) {
|
|
245
|
-
positions.set(elkNode.id, { x: absoluteX + ICON_X_OFFSET, y: absoluteY });
|
|
246
|
-
}
|
|
247
|
-
for (const child of elkNode.children ?? []) {
|
|
248
|
-
collectAbsolutePositions(child, nodeIds, positions, absoluteX, absoluteY);
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
function cloneDiagramWithPositions(diagram, positions, direction, layerSpacing) {
|
|
252
|
-
return {
|
|
253
|
-
...diagram,
|
|
254
|
-
nodes: diagram.nodes.map((node, index) => ({
|
|
255
|
-
...node,
|
|
256
|
-
position: positions.get(node.id) ?? (node.position ? clonePosition(node.position) : fallbackPosition(index, direction, layerSpacing))
|
|
257
|
-
}))
|
|
258
|
-
};
|
|
259
|
-
}
|
|
260
|
-
async function layoutDiagram(diagram) {
|
|
261
|
-
const mode = getLayoutMode(diagram);
|
|
262
|
-
const direction = inferLayoutDirection(diagram);
|
|
263
|
-
const nodeSpacing = diagram.layout?.nodeSpacing ?? DEFAULT_NODE_SPACING;
|
|
264
|
-
const layerSpacing = diagram.layout?.layerSpacing ?? DEFAULT_LAYER_SPACING;
|
|
265
|
-
if (mode === "manual") {
|
|
266
|
-
const positions2 = /* @__PURE__ */ new Map();
|
|
267
|
-
for (const [index, node] of diagram.nodes.entries()) {
|
|
268
|
-
if (!node.position) {
|
|
269
|
-
throw new Error(`Manual layout mode requires node "${node.id}" to define position`);
|
|
270
|
-
}
|
|
271
|
-
positions2.set(node.id, node.position ? clonePosition(node.position) : fallbackPosition(index, direction, layerSpacing));
|
|
272
|
-
}
|
|
273
|
-
return cloneDiagramWithPositions(diagram, positions2, direction, layerSpacing);
|
|
274
|
-
}
|
|
275
|
-
const nodeById = new Map(diagram.nodes.map((node) => [node.id, node]));
|
|
276
|
-
const groups = diagram.groups ?? [];
|
|
277
|
-
const groupById = new Map(groups.map((group) => [group.id, group]));
|
|
278
|
-
const stats = buildGraphStats(diagram);
|
|
279
|
-
const layerAssignments = buildLayerAssignments(diagram, direction, mode, layerSpacing, stats);
|
|
280
|
-
const parentByChild = createParentMap(groups);
|
|
281
|
-
const nodeSortData = buildNodeSortData(diagram, direction, layerAssignments);
|
|
282
|
-
const groupSortData = buildGroupSortData(groups, groupById, nodeById, nodeSortData);
|
|
283
|
-
const buildLeafNode = (nodeId) => {
|
|
284
|
-
const layoutOptions = {
|
|
285
|
-
"elk.partitioning.partition": String(layerAssignments.get(nodeId) ?? 0)
|
|
286
|
-
};
|
|
287
|
-
return {
|
|
288
|
-
id: nodeId,
|
|
289
|
-
width: DEFAULT_NODE_WIDTH,
|
|
290
|
-
height: DEFAULT_NODE_HEIGHT,
|
|
291
|
-
layoutOptions
|
|
292
|
-
};
|
|
293
|
-
};
|
|
294
|
-
const buildGroupNode = (groupId) => {
|
|
295
|
-
const group = groupById.get(groupId);
|
|
296
|
-
if (!group) {
|
|
297
|
-
throw new Error(`Unknown group "${groupId}"`);
|
|
298
|
-
}
|
|
299
|
-
const sortedChildren = sortElementIds(group.children, nodeSortData, groupSortData);
|
|
300
|
-
return {
|
|
301
|
-
id: group.id,
|
|
302
|
-
layoutOptions: {
|
|
303
|
-
"elk.padding": "[top=40,left=20,bottom=20,right=20]"
|
|
304
|
-
},
|
|
305
|
-
children: sortedChildren.map((childId) => {
|
|
306
|
-
if (nodeById.has(childId)) {
|
|
307
|
-
return buildLeafNode(childId);
|
|
308
|
-
}
|
|
309
|
-
return buildGroupNode(childId);
|
|
310
|
-
})
|
|
311
|
-
};
|
|
312
|
-
};
|
|
313
|
-
const topLevelIds = sortElementIds(
|
|
314
|
-
[
|
|
315
|
-
...diagram.nodes.map((node) => node.id).filter((nodeId) => !parentByChild.has(nodeId)),
|
|
316
|
-
...groups.map((group) => group.id).filter((groupId) => !parentByChild.has(groupId))
|
|
317
|
-
],
|
|
318
|
-
nodeSortData,
|
|
319
|
-
groupSortData
|
|
320
|
-
);
|
|
321
|
-
const elkGraph = {
|
|
322
|
-
id: "root",
|
|
323
|
-
layoutOptions: {
|
|
324
|
-
"elk.algorithm": "layered",
|
|
325
|
-
"elk.direction": direction,
|
|
326
|
-
"elk.spacing.nodeNode": String(nodeSpacing),
|
|
327
|
-
"elk.layered.spacing.nodeNodeBetweenLayers": String(layerSpacing),
|
|
328
|
-
"elk.partitioning.activate": "true",
|
|
329
|
-
"elk.layered.considerModelOrder.strategy": "NODES_AND_EDGES",
|
|
330
|
-
"elk.layered.crossingMinimization.forceNodeModelOrder": "true",
|
|
331
|
-
"elk.hierarchyHandling": "INCLUDE_CHILDREN"
|
|
332
|
-
},
|
|
333
|
-
children: topLevelIds.map((id) => nodeById.has(id) ? buildLeafNode(id) : buildGroupNode(id)),
|
|
334
|
-
edges: diagram.edges.map((edge, index) => ({
|
|
335
|
-
id: `edge-${index}`,
|
|
336
|
-
sources: [edge.from],
|
|
337
|
-
targets: [edge.to]
|
|
338
|
-
}))
|
|
339
|
-
};
|
|
340
|
-
const laidOut = await elk.layout(elkGraph);
|
|
341
|
-
const positions = /* @__PURE__ */ new Map();
|
|
342
|
-
collectAbsolutePositions(laidOut, new Set(nodeById.keys()), positions);
|
|
343
|
-
return cloneDiagramWithPositions(diagram, positions, direction, layerSpacing);
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
// src/icons.ts
|
|
347
|
-
import { existsSync, readFileSync } from "fs";
|
|
348
|
-
import { resolve } from "path";
|
|
349
|
-
import { fileURLToPath } from "url";
|
|
350
|
-
|
|
351
|
-
// src/node-types.ts
|
|
352
7
|
import { z } from "zod";
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
"aws.analytics.kinesis",
|
|
368
|
-
"aws.analytics.lake-formation",
|
|
369
|
-
"aws.analytics.managed-service-for-apache-flink",
|
|
370
|
-
"aws.analytics.managed-streaming-for-apache-kafka",
|
|
371
|
-
"aws.analytics.opensearch-service",
|
|
372
|
-
"aws.analytics.redshift",
|
|
373
|
-
"aws.analytics.sagemaker",
|
|
374
|
-
"aws.application-integration.appflow",
|
|
375
|
-
"aws.application-integration.appsync",
|
|
376
|
-
"aws.application-integration.b2b-data-interchange",
|
|
377
|
-
"aws.application-integration.eventbridge",
|
|
378
|
-
"aws.application-integration.express-workflows",
|
|
379
|
-
"aws.application-integration.managed-workflows-for-apache-airflow",
|
|
380
|
-
"aws.application-integration.mq",
|
|
381
|
-
"aws.application-integration.simple-notification-service",
|
|
382
|
-
"aws.application-integration.simple-queue-service",
|
|
383
|
-
"aws.application-integration.step-functions",
|
|
384
|
-
"aws.artificial-intelligence.apache-mxnet-on-aws",
|
|
385
|
-
"aws.artificial-intelligence.app-studio",
|
|
386
|
-
"aws.artificial-intelligence.augmented-ai-a2i",
|
|
387
|
-
"aws.artificial-intelligence.bedrock-agentcore",
|
|
388
|
-
"aws.artificial-intelligence.bedrock",
|
|
389
|
-
"aws.artificial-intelligence.codeguru",
|
|
390
|
-
"aws.artificial-intelligence.codewhisperer",
|
|
391
|
-
"aws.artificial-intelligence.comprehend-medical",
|
|
392
|
-
"aws.artificial-intelligence.comprehend",
|
|
393
|
-
"aws.artificial-intelligence.deep-learning-amis",
|
|
394
|
-
"aws.artificial-intelligence.deep-learning-containers",
|
|
395
|
-
"aws.artificial-intelligence.deepracer",
|
|
396
|
-
"aws.artificial-intelligence.devops-guru",
|
|
397
|
-
"aws.artificial-intelligence.elastic-inference",
|
|
398
|
-
"aws.artificial-intelligence.forecast",
|
|
399
|
-
"aws.artificial-intelligence.fraud-detector",
|
|
400
|
-
"aws.artificial-intelligence.healthimaging",
|
|
401
|
-
"aws.artificial-intelligence.healthlake",
|
|
402
|
-
"aws.artificial-intelligence.healthomics",
|
|
403
|
-
"aws.artificial-intelligence.healthscribe",
|
|
404
|
-
"aws.artificial-intelligence.kendra",
|
|
405
|
-
"aws.artificial-intelligence.lex",
|
|
406
|
-
"aws.artificial-intelligence.lookout-for-equipment",
|
|
407
|
-
"aws.artificial-intelligence.lookout-for-vision",
|
|
408
|
-
"aws.artificial-intelligence.monitron",
|
|
409
|
-
"aws.artificial-intelligence.neuron",
|
|
410
|
-
"aws.artificial-intelligence.nova",
|
|
411
|
-
"aws.artificial-intelligence.panorama",
|
|
412
|
-
"aws.artificial-intelligence.personalize",
|
|
413
|
-
"aws.artificial-intelligence.polly",
|
|
414
|
-
"aws.artificial-intelligence.pytorch-on-aws",
|
|
415
|
-
"aws.artificial-intelligence.q",
|
|
416
|
-
"aws.artificial-intelligence.rekognition",
|
|
417
|
-
"aws.artificial-intelligence.sagemaker-ai",
|
|
418
|
-
"aws.artificial-intelligence.sagemaker-ground-truth",
|
|
419
|
-
"aws.artificial-intelligence.sagemaker-studio-lab",
|
|
420
|
-
"aws.artificial-intelligence.tensorflow-on-aws",
|
|
421
|
-
"aws.artificial-intelligence.textract",
|
|
422
|
-
"aws.artificial-intelligence.transcribe",
|
|
423
|
-
"aws.artificial-intelligence.translate",
|
|
424
|
-
"aws.blockchain.managed-blockchain",
|
|
425
|
-
"aws.business-applications.appfabric",
|
|
426
|
-
"aws.business-applications.chime-sdk",
|
|
427
|
-
"aws.business-applications.chime",
|
|
428
|
-
"aws.business-applications.connect",
|
|
429
|
-
"aws.business-applications.end-user-messaging",
|
|
430
|
-
"aws.business-applications.pinpoint-apis",
|
|
431
|
-
"aws.business-applications.pinpoint",
|
|
432
|
-
"aws.business-applications.quick-suite",
|
|
433
|
-
"aws.business-applications.simple-email-service",
|
|
434
|
-
"aws.business-applications.supply-chain",
|
|
435
|
-
"aws.business-applications.wickr",
|
|
436
|
-
"aws.business-applications.workdocs-sdk",
|
|
437
|
-
"aws.business-applications.workdocs",
|
|
438
|
-
"aws.business-applications.workmail",
|
|
439
|
-
"aws.cloud-financial-management.billing-conductor",
|
|
440
|
-
"aws.cloud-financial-management.budgets",
|
|
441
|
-
"aws.cloud-financial-management.cost-and-usage-report",
|
|
442
|
-
"aws.cloud-financial-management.cost-explorer",
|
|
443
|
-
"aws.cloud-financial-management.reserved-instance-reporting",
|
|
444
|
-
"aws.cloud-financial-management.savings-plans",
|
|
445
|
-
"aws.compute.app-runner",
|
|
446
|
-
"aws.compute.batch",
|
|
447
|
-
"aws.compute.bottlerocket",
|
|
448
|
-
"aws.compute.compute-optimizer",
|
|
449
|
-
"aws.compute.dcv",
|
|
450
|
-
"aws.compute.ec2-auto-scaling",
|
|
451
|
-
"aws.compute.ec2-image-builder",
|
|
452
|
-
"aws.compute.ec2",
|
|
453
|
-
"aws.compute.elastic-beanstalk",
|
|
454
|
-
"aws.compute.elastic-fabric-adapter",
|
|
455
|
-
"aws.compute.elastic-vmware-service",
|
|
456
|
-
"aws.compute.lambda",
|
|
457
|
-
"aws.compute.lightsail-for-research",
|
|
458
|
-
"aws.compute.lightsail",
|
|
459
|
-
"aws.compute.local-zones",
|
|
460
|
-
"aws.compute.nitro-enclaves",
|
|
461
|
-
"aws.compute.outposts-family",
|
|
462
|
-
"aws.compute.outposts-rack",
|
|
463
|
-
"aws.compute.outposts-servers",
|
|
464
|
-
"aws.compute.parallel-cluster",
|
|
465
|
-
"aws.compute.parallel-computing-service",
|
|
466
|
-
"aws.compute.serverless-application-repository",
|
|
467
|
-
"aws.compute.simspace-weaver",
|
|
468
|
-
"aws.compute.wavelength",
|
|
469
|
-
"aws.containers.ecs-anywhere",
|
|
470
|
-
"aws.containers.eks-anywhere",
|
|
471
|
-
"aws.containers.eks-distro",
|
|
472
|
-
"aws.containers.elastic-container-registry",
|
|
473
|
-
"aws.containers.elastic-container-service",
|
|
474
|
-
"aws.containers.elastic-kubernetes-service",
|
|
475
|
-
"aws.containers.fargate",
|
|
476
|
-
"aws.containers.red-hat-openshift-service-on-aws",
|
|
477
|
-
"aws.customer-enablement.activate",
|
|
478
|
-
"aws.customer-enablement.iq",
|
|
479
|
-
"aws.customer-enablement.managed-services",
|
|
480
|
-
"aws.customer-enablement.professional-services",
|
|
481
|
-
"aws.customer-enablement.repost-private",
|
|
482
|
-
"aws.customer-enablement.repost",
|
|
483
|
-
"aws.customer-enablement.support",
|
|
484
|
-
"aws.customer-enablement.training-certification",
|
|
485
|
-
"aws.databases.aurora",
|
|
486
|
-
"aws.databases.database-migration-service",
|
|
487
|
-
"aws.databases.documentdb",
|
|
488
|
-
"aws.databases.dynamodb",
|
|
489
|
-
"aws.databases.elasticache",
|
|
490
|
-
"aws.databases.keyspaces",
|
|
491
|
-
"aws.databases.memorydb",
|
|
492
|
-
"aws.databases.neptune",
|
|
493
|
-
"aws.databases.oracle-database-at-aws",
|
|
494
|
-
"aws.databases.rds",
|
|
495
|
-
"aws.databases.timestream",
|
|
496
|
-
"aws.developer-tools.cloud-control-api",
|
|
497
|
-
"aws.developer-tools.cloud-development-kit",
|
|
498
|
-
"aws.developer-tools.cloud9",
|
|
499
|
-
"aws.developer-tools.cloudshell",
|
|
500
|
-
"aws.developer-tools.codeartifact",
|
|
501
|
-
"aws.developer-tools.codebuild",
|
|
502
|
-
"aws.developer-tools.codecatalyst",
|
|
503
|
-
"aws.developer-tools.codecommit",
|
|
504
|
-
"aws.developer-tools.codedeploy",
|
|
505
|
-
"aws.developer-tools.codepipeline",
|
|
506
|
-
"aws.developer-tools.command-line-interface",
|
|
507
|
-
"aws.developer-tools.corretto",
|
|
508
|
-
"aws.developer-tools.fault-injection-service",
|
|
509
|
-
"aws.developer-tools.infrastructure-composer",
|
|
510
|
-
"aws.developer-tools.tools-and-sdks",
|
|
511
|
-
"aws.developer-tools.x-ray",
|
|
512
|
-
"aws.end-user-computing.workspaces",
|
|
513
|
-
"aws.front-end-web-mobile.amplify",
|
|
514
|
-
"aws.front-end-web-mobile.device-farm",
|
|
515
|
-
"aws.front-end-web-mobile.location-service",
|
|
516
|
-
"aws.games.gamelift-servers",
|
|
517
|
-
"aws.games.gamelift-streams",
|
|
518
|
-
"aws.games.open-3d-engine",
|
|
519
|
-
"aws.general-icons.marketplace_dark",
|
|
520
|
-
"aws.general-icons.marketplace_light",
|
|
521
|
-
"aws.internet-of-things.freertos",
|
|
522
|
-
"aws.internet-of-things.iot-core",
|
|
523
|
-
"aws.internet-of-things.iot-device-defender",
|
|
524
|
-
"aws.internet-of-things.iot-device-management",
|
|
525
|
-
"aws.internet-of-things.iot-events",
|
|
526
|
-
"aws.internet-of-things.iot-expresslink",
|
|
527
|
-
"aws.internet-of-things.iot-fleetwise",
|
|
528
|
-
"aws.internet-of-things.iot-greengrass",
|
|
529
|
-
"aws.internet-of-things.iot-sitewise",
|
|
530
|
-
"aws.internet-of-things.iot-twinmaker",
|
|
531
|
-
"aws.management-tools.appconfig",
|
|
532
|
-
"aws.management-tools.application-auto-scaling",
|
|
533
|
-
"aws.management-tools.auto-scaling",
|
|
534
|
-
"aws.management-tools.backint-agent",
|
|
535
|
-
"aws.management-tools.chatbot",
|
|
536
|
-
"aws.management-tools.cloudformation",
|
|
537
|
-
"aws.management-tools.cloudtrail",
|
|
538
|
-
"aws.management-tools.cloudwatch",
|
|
539
|
-
"aws.management-tools.compute-optimizer",
|
|
540
|
-
"aws.management-tools.config",
|
|
541
|
-
"aws.management-tools.console-mobile-application",
|
|
542
|
-
"aws.management-tools.control-tower",
|
|
543
|
-
"aws.management-tools.devops-agent",
|
|
544
|
-
"aws.management-tools.distro-for-opentelemetry",
|
|
545
|
-
"aws.management-tools.health-dashboard",
|
|
546
|
-
"aws.management-tools.launch-wizard",
|
|
547
|
-
"aws.management-tools.license-manager",
|
|
548
|
-
"aws.management-tools.managed-grafana",
|
|
549
|
-
"aws.management-tools.managed-service-for-prometheus",
|
|
550
|
-
"aws.management-tools.management-console",
|
|
551
|
-
"aws.management-tools.organizations",
|
|
552
|
-
"aws.management-tools.partner-central",
|
|
553
|
-
"aws.management-tools.proton",
|
|
554
|
-
"aws.management-tools.resilience-hub",
|
|
555
|
-
"aws.management-tools.resource-explorer",
|
|
556
|
-
"aws.management-tools.service-catalog",
|
|
557
|
-
"aws.management-tools.service-management-connector",
|
|
558
|
-
"aws.management-tools.systems-manager",
|
|
559
|
-
"aws.management-tools.telco-network-builder",
|
|
560
|
-
"aws.management-tools.trusted-advisor",
|
|
561
|
-
"aws.management-tools.user-notifications",
|
|
562
|
-
"aws.management-tools.well-architected-tool",
|
|
563
|
-
"aws.media-services.deadline-cloud",
|
|
564
|
-
"aws.media-services.elemental-appliances-&-software",
|
|
565
|
-
"aws.media-services.elemental-conductor",
|
|
566
|
-
"aws.media-services.elemental-delta",
|
|
567
|
-
"aws.media-services.elemental-link",
|
|
568
|
-
"aws.media-services.elemental-live",
|
|
569
|
-
"aws.media-services.elemental-mediaconnect",
|
|
570
|
-
"aws.media-services.elemental-mediaconvert",
|
|
571
|
-
"aws.media-services.elemental-medialive",
|
|
572
|
-
"aws.media-services.elemental-mediapackage",
|
|
573
|
-
"aws.media-services.elemental-mediastore",
|
|
574
|
-
"aws.media-services.elemental-mediatailor",
|
|
575
|
-
"aws.media-services.elemental-server",
|
|
576
|
-
"aws.media-services.interactive-video-service",
|
|
577
|
-
"aws.media-services.kinesis-video-streams",
|
|
578
|
-
"aws.media-services.thinkbox-deadline",
|
|
579
|
-
"aws.media-services.thinkbox-frost",
|
|
580
|
-
"aws.media-services.thinkbox-krakatoa",
|
|
581
|
-
"aws.media-services.thinkbox-stoke",
|
|
582
|
-
"aws.media-services.thinkbox-xmesh",
|
|
583
|
-
"aws.migration-modernization.application-discovery-service",
|
|
584
|
-
"aws.migration-modernization.application-migration-service",
|
|
585
|
-
"aws.migration-modernization.data-transfer-terminal",
|
|
586
|
-
"aws.migration-modernization.datasync",
|
|
587
|
-
"aws.migration-modernization.mainframe-modernization",
|
|
588
|
-
"aws.migration-modernization.migration-evaluator",
|
|
589
|
-
"aws.migration-modernization.migration-hub",
|
|
590
|
-
"aws.migration-modernization.transfer-family",
|
|
591
|
-
"aws.migration-modernization.transform",
|
|
592
|
-
"aws.networking-content-delivery.api-gateway",
|
|
593
|
-
"aws.networking-content-delivery.app-mesh",
|
|
594
|
-
"aws.networking-content-delivery.application-recovery-controller",
|
|
595
|
-
"aws.networking-content-delivery.client-vpn",
|
|
596
|
-
"aws.networking-content-delivery.cloud-map",
|
|
597
|
-
"aws.networking-content-delivery.cloud-wan",
|
|
598
|
-
"aws.networking-content-delivery.cloudfront",
|
|
599
|
-
"aws.networking-content-delivery.direct-connect",
|
|
600
|
-
"aws.networking-content-delivery.elastic-load-balancing",
|
|
601
|
-
"aws.networking-content-delivery.global-accelerator",
|
|
602
|
-
"aws.networking-content-delivery.privatelink",
|
|
603
|
-
"aws.networking-content-delivery.route-53",
|
|
604
|
-
"aws.networking-content-delivery.rtb-fabric",
|
|
605
|
-
"aws.networking-content-delivery.site-to-site-vpn",
|
|
606
|
-
"aws.networking-content-delivery.transit-gateway",
|
|
607
|
-
"aws.networking-content-delivery.verified-access",
|
|
608
|
-
"aws.networking-content-delivery.virtual-private-cloud",
|
|
609
|
-
"aws.networking-content-delivery.vpc-lattice",
|
|
610
|
-
"aws.quantum-technologies.braket",
|
|
611
|
-
"aws.satellite.ground-station",
|
|
612
|
-
"aws.security-identity.artifact",
|
|
613
|
-
"aws.security-identity.audit-manager",
|
|
614
|
-
"aws.security-identity.certificate-manager",
|
|
615
|
-
"aws.security-identity.cloud-directory",
|
|
616
|
-
"aws.security-identity.cloudhsm",
|
|
617
|
-
"aws.security-identity.cognito",
|
|
618
|
-
"aws.security-identity.detective",
|
|
619
|
-
"aws.security-identity.directory-service",
|
|
620
|
-
"aws.security-identity.firewall-manager",
|
|
621
|
-
"aws.security-identity.guardduty",
|
|
622
|
-
"aws.security-identity.iam-identity-center",
|
|
623
|
-
"aws.security-identity.identity-and-access-management",
|
|
624
|
-
"aws.security-identity.inspector",
|
|
625
|
-
"aws.security-identity.key-management-service",
|
|
626
|
-
"aws.security-identity.macie",
|
|
627
|
-
"aws.security-identity.network-firewall",
|
|
628
|
-
"aws.security-identity.payment-cryptography",
|
|
629
|
-
"aws.security-identity.private-certificate-authority",
|
|
630
|
-
"aws.security-identity.resource-access-manager",
|
|
631
|
-
"aws.security-identity.secrets-manager",
|
|
632
|
-
"aws.security-identity.security-agent",
|
|
633
|
-
"aws.security-identity.security-hub",
|
|
634
|
-
"aws.security-identity.security-incident-response",
|
|
635
|
-
"aws.security-identity.security-lake",
|
|
636
|
-
"aws.security-identity.shield",
|
|
637
|
-
"aws.security-identity.signer",
|
|
638
|
-
"aws.security-identity.verified-permissions",
|
|
639
|
-
"aws.security-identity.waf",
|
|
640
|
-
"aws.storage.backup",
|
|
641
|
-
"aws.storage.efs",
|
|
642
|
-
"aws.storage.elastic-block-store",
|
|
643
|
-
"aws.storage.elastic-disaster-recovery",
|
|
644
|
-
"aws.storage.file-cache",
|
|
645
|
-
"aws.storage.fsx-for-lustre",
|
|
646
|
-
"aws.storage.fsx-for-netapp-ontap",
|
|
647
|
-
"aws.storage.fsx-for-openzfs",
|
|
648
|
-
"aws.storage.fsx-for-wfs",
|
|
649
|
-
"aws.storage.fsx",
|
|
650
|
-
"aws.storage.s3-on-outposts",
|
|
651
|
-
"aws.storage.simple-storage-service-glacier",
|
|
652
|
-
"aws.storage.simple-storage-service",
|
|
653
|
-
"aws.storage.snowball-edge",
|
|
654
|
-
"aws.storage.snowball",
|
|
655
|
-
"aws.storage.storage-gateway",
|
|
656
|
-
"aws.analytics.athena.data-source-connectors",
|
|
657
|
-
"aws.analytics.cloudsearch.search-documents",
|
|
658
|
-
"aws.analytics.data-exchange-for-apis.data-exchange-for-apis",
|
|
659
|
-
"aws.analytics.datazone.business-data-catalog",
|
|
660
|
-
"aws.analytics.datazone.data-portal",
|
|
661
|
-
"aws.analytics.datazone.data-projects",
|
|
662
|
-
"aws.analytics.emr.cluster",
|
|
663
|
-
"aws.analytics.emr.emr-engine",
|
|
664
|
-
"aws.analytics.emr.hdfs-cluster",
|
|
665
|
-
"aws.analytics.glue.aws-glue-for-ray",
|
|
666
|
-
"aws.analytics.glue.crawler",
|
|
667
|
-
"aws.analytics.glue.data-catalog",
|
|
668
|
-
"aws.analytics.glue.data-quality",
|
|
669
|
-
"aws.analytics.lake-formation.data-lake",
|
|
670
|
-
"aws.analytics.msk.amazon-msk-connect",
|
|
671
|
-
"aws.analytics.opensearch-service.cluster-administrator-node",
|
|
672
|
-
"aws.analytics.opensearch-service.data-node",
|
|
673
|
-
"aws.analytics.opensearch-service.index",
|
|
674
|
-
"aws.analytics.opensearch-service.observability",
|
|
675
|
-
"aws.analytics.opensearch-service.opensearch-dashboards",
|
|
676
|
-
"aws.analytics.opensearch-service.opensearch-ingestion",
|
|
677
|
-
"aws.analytics.opensearch-service.traces",
|
|
678
|
-
"aws.analytics.opensearch-service.ultrawarm-node",
|
|
679
|
-
"aws.analytics.redshift.auto-copy",
|
|
680
|
-
"aws.analytics.redshift.data-sharing-governance",
|
|
681
|
-
"aws.analytics.redshift.dense-compute-node",
|
|
682
|
-
"aws.analytics.redshift.dense-storage-node",
|
|
683
|
-
"aws.analytics.redshift.ml",
|
|
684
|
-
"aws.analytics.redshift.query-editor-v2.0",
|
|
685
|
-
"aws.analytics.redshift.ra3",
|
|
686
|
-
"aws.analytics.redshift.streaming-ingestion",
|
|
687
|
-
"aws.application-integration.eventbridge-event.eventbridge-event",
|
|
688
|
-
"aws.application-integration.eventbridge.custom-event-bus",
|
|
689
|
-
"aws.application-integration.eventbridge.default-event-bus",
|
|
690
|
-
"aws.application-integration.eventbridge.pipes",
|
|
691
|
-
"aws.application-integration.eventbridge.rule",
|
|
692
|
-
"aws.application-integration.eventbridge.saas-partner-event",
|
|
693
|
-
"aws.application-integration.eventbridge.scheduler",
|
|
694
|
-
"aws.application-integration.eventbridge.schema-registry",
|
|
695
|
-
"aws.application-integration.eventbridge.schema",
|
|
696
|
-
"aws.application-integration.mq.broker",
|
|
697
|
-
"aws.application-integration.simple-notification-service.email-notification",
|
|
698
|
-
"aws.application-integration.simple-notification-service.http-notification",
|
|
699
|
-
"aws.application-integration.simple-notification-service.topic",
|
|
700
|
-
"aws.application-integration.simple-queue-service.message",
|
|
701
|
-
"aws.application-integration.simple-queue-service.queue",
|
|
702
|
-
"aws.artificial-intelligence.devops-guru.insights",
|
|
703
|
-
"aws.artificial-intelligence.rekognition.image",
|
|
704
|
-
"aws.artificial-intelligence.rekognition.video",
|
|
705
|
-
"aws.artificial-intelligence.sagemaker-ai.canvas",
|
|
706
|
-
"aws.artificial-intelligence.sagemaker-ai.geospatial-ml",
|
|
707
|
-
"aws.artificial-intelligence.sagemaker-ai.model",
|
|
708
|
-
"aws.artificial-intelligence.sagemaker-ai.notebook",
|
|
709
|
-
"aws.artificial-intelligence.sagemaker-ai.shadow-testing",
|
|
710
|
-
"aws.artificial-intelligence.sagemaker-ai.train",
|
|
711
|
-
"aws.artificial-intelligence.textract.analyze-lending",
|
|
712
|
-
"aws.blockchain.managed-blockchain.blockchain",
|
|
713
|
-
"aws.business-applications.pinpoint.journey",
|
|
714
|
-
"aws.business-applications.simple-email-service.email",
|
|
715
|
-
"aws.compute.ec2.ami",
|
|
716
|
-
"aws.compute.ec2.auto-scaling",
|
|
717
|
-
"aws.compute.ec2.aws-microservice-extractor-for-.net",
|
|
718
|
-
"aws.compute.ec2.db-instance",
|
|
719
|
-
"aws.compute.ec2.elastic-ip-address",
|
|
720
|
-
"aws.compute.ec2.instance-with-cloudwatch",
|
|
721
|
-
"aws.compute.ec2.instance",
|
|
722
|
-
"aws.compute.ec2.instances",
|
|
723
|
-
"aws.compute.ec2.rescue",
|
|
724
|
-
"aws.compute.ec2.spot-instance",
|
|
725
|
-
"aws.compute.elastic-beanstalk.application",
|
|
726
|
-
"aws.compute.elastic-beanstalk.deployment",
|
|
727
|
-
"aws.compute.lambda.lambda-function",
|
|
728
|
-
"aws.containers.elastic-container-registry.image",
|
|
729
|
-
"aws.containers.elastic-container-registry.registry",
|
|
730
|
-
"aws.containers.elastic-container-service.container-1",
|
|
731
|
-
"aws.containers.elastic-container-service.container-2",
|
|
732
|
-
"aws.containers.elastic-container-service.container-3",
|
|
733
|
-
"aws.containers.elastic-container-service.copiiot-cli",
|
|
734
|
-
"aws.containers.elastic-container-service.ecs-service-connect",
|
|
735
|
-
"aws.containers.elastic-container-service.service",
|
|
736
|
-
"aws.containers.elastic-container-service.task",
|
|
737
|
-
"aws.containers.elastic-kubernetes-service.eks-on-outposts",
|
|
738
|
-
"aws.databases.aurora-instance.aurora-instance",
|
|
739
|
-
"aws.databases.aurora-mariadb-instance-alternate.aurora-mariadb-instance-alternate",
|
|
740
|
-
"aws.databases.aurora-mariadb-instance.aurora-mariadb-instance",
|
|
741
|
-
"aws.databases.aurora-mysql-instance-alternate.aurora-mysql-instance-alternate",
|
|
742
|
-
"aws.databases.aurora-mysql-instance.aurora-mysql-instance",
|
|
743
|
-
"aws.databases.aurora-oracle-instance-alternate.aurora-oracle-instance-alternate",
|
|
744
|
-
"aws.databases.aurora-oracle-instance.aurora-oracle-instance",
|
|
745
|
-
"aws.databases.aurora-piops-instance.aurora-piops-instance",
|
|
746
|
-
"aws.databases.aurora-postgresql-instance-alternate.aurora-postgresql-instance-alternate",
|
|
747
|
-
"aws.databases.aurora-postgresql-instance.aurora-postgresql-instance",
|
|
748
|
-
"aws.databases.aurora-sql-server-instance-alternate.aurora-sql-server-instance-alternate",
|
|
749
|
-
"aws.databases.aurora-sql-server-instance.aurora-sql-server-instance",
|
|
750
|
-
"aws.databases.aurora.amazon-aurora-instance-alternate",
|
|
751
|
-
"aws.databases.aurora.amazon-rds-instance-aternate",
|
|
752
|
-
"aws.databases.aurora.amazon-rds-instance",
|
|
753
|
-
"aws.databases.aurora.trusted-language-extensions-for-postgresql",
|
|
754
|
-
"aws.databases.database-migration-service.database-migration-workflow-or-job",
|
|
755
|
-
"aws.databases.documentdb.elastic-clusters",
|
|
756
|
-
"aws.databases.dynamodb.amazon-dynamodb-accelerator",
|
|
757
|
-
"aws.databases.dynamodb.attribute",
|
|
758
|
-
"aws.databases.dynamodb.attributes",
|
|
759
|
-
"aws.databases.dynamodb.global-secondary-index",
|
|
760
|
-
"aws.databases.dynamodb.item",
|
|
761
|
-
"aws.databases.dynamodb.items",
|
|
762
|
-
"aws.databases.dynamodb.standard-access-table-class",
|
|
763
|
-
"aws.databases.dynamodb.standard-infrequent-access-table-class",
|
|
764
|
-
"aws.databases.dynamodb.stream",
|
|
765
|
-
"aws.databases.dynamodb.table",
|
|
766
|
-
"aws.databases.elasticache.cache-node",
|
|
767
|
-
"aws.databases.elasticache.elasticache-for-memcached",
|
|
768
|
-
"aws.databases.elasticache.elasticache-for-redis",
|
|
769
|
-
"aws.databases.elasticache.elasticache-for-valkey",
|
|
770
|
-
"aws.databases.rds-proxy-instance-alternate.rds-proxy-instance-alternate",
|
|
771
|
-
"aws.databases.rds-proxy-instance.rds-proxy-instance",
|
|
772
|
-
"aws.databases.rds.blue-green-deployments",
|
|
773
|
-
"aws.databases.rds.multi-az-db-cluster",
|
|
774
|
-
"aws.databases.rds.multi-az",
|
|
775
|
-
"aws.databases.rds.optimized-writes",
|
|
776
|
-
"aws.databases.rds.trusted-language-extensions-for-postgresql",
|
|
777
|
-
"aws.developer-tools.cloud9.cloud9",
|
|
778
|
-
"aws.front-end-web-mobile.amplify.aws-amplify-studio",
|
|
779
|
-
"aws.front-end-web-mobile.location-service.geofence",
|
|
780
|
-
"aws.front-end-web-mobile.location-service.map ",
|
|
781
|
-
"aws.front-end-web-mobile.location-service.place",
|
|
782
|
-
"aws.front-end-web-mobile.location-service.routes",
|
|
783
|
-
"aws.front-end-web-mobile.location-service.track ",
|
|
784
|
-
"aws.general.alert.alert",
|
|
785
|
-
"aws.general.authenticated-user.authenticated-user",
|
|
786
|
-
"aws.general.camera.camera",
|
|
787
|
-
"aws.general.chat.chat",
|
|
788
|
-
"aws.general.client.client",
|
|
789
|
-
"aws.general.cold-storage.cold-storage",
|
|
790
|
-
"aws.general.credentials.credentials",
|
|
791
|
-
"aws.general.data-stream.data-stream",
|
|
792
|
-
"aws.general.data-table.data-table",
|
|
793
|
-
"aws.general.database.database",
|
|
794
|
-
"aws.general.disk.disk",
|
|
795
|
-
"aws.general.document.document",
|
|
796
|
-
"aws.general.documents.documents",
|
|
797
|
-
"aws.general.email.email",
|
|
798
|
-
"aws.general.firewall.firewall",
|
|
799
|
-
"aws.general.folder.folder",
|
|
800
|
-
"aws.general.folders.folders",
|
|
801
|
-
"aws.general.forums.forums",
|
|
802
|
-
"aws.general.gear.gear",
|
|
803
|
-
"aws.general.generic-application.generic-application",
|
|
804
|
-
"aws.general.git-repository.git-repository",
|
|
805
|
-
"aws.general.globe.globe",
|
|
806
|
-
"aws.general.internet-alt1.internet-alt1",
|
|
807
|
-
"aws.general.internet-alt2.internet-alt2",
|
|
808
|
-
"aws.general.internet.internet",
|
|
809
|
-
"aws.general.json-script.json-script",
|
|
810
|
-
"aws.general.logs.logs",
|
|
811
|
-
"aws.general.magnifying-glass.magnifying-glass",
|
|
812
|
-
"aws.general.management-console.management-console",
|
|
813
|
-
"aws.general.metrics.metrics",
|
|
814
|
-
"aws.general.mobile-client.mobile-client",
|
|
815
|
-
"aws.general.multimedia.multimedia",
|
|
816
|
-
"aws.general.office-building.office-building",
|
|
817
|
-
"aws.general.programming-language.programming-language",
|
|
818
|
-
"aws.general.question.question",
|
|
819
|
-
"aws.general.recover.recover",
|
|
820
|
-
"aws.general.saml-token.saml-token",
|
|
821
|
-
"aws.general.sdk.sdk",
|
|
822
|
-
"aws.general.server.server",
|
|
823
|
-
"aws.general.servers.servers",
|
|
824
|
-
"aws.general.shield.shield",
|
|
825
|
-
"aws.general.source-code.source-code",
|
|
826
|
-
"aws.general.ssl-padlock.ssl-padlock",
|
|
827
|
-
"aws.general.tape-storage.tape-storage",
|
|
828
|
-
"aws.general.toolkit.toolkit",
|
|
829
|
-
"aws.general.user.user",
|
|
830
|
-
"aws.general.users.users",
|
|
831
|
-
"aws.iot.iot-core.device-advisor",
|
|
832
|
-
"aws.iot.iot-core.device-location",
|
|
833
|
-
"aws.iot.iot-device-defender.iot-device-jobs",
|
|
834
|
-
"aws.iot.iot-device-management.fleet-hub",
|
|
835
|
-
"aws.iot.iot-device-tester.iot-device-tester",
|
|
836
|
-
"aws.iot.iot-greengrass.artifact",
|
|
837
|
-
"aws.iot.iot-greengrass.component-machine-learning",
|
|
838
|
-
"aws.iot.iot-greengrass.component-nucleus",
|
|
839
|
-
"aws.iot.iot-greengrass.component-private",
|
|
840
|
-
"aws.iot.iot-greengrass.component-public",
|
|
841
|
-
"aws.iot.iot-greengrass.component",
|
|
842
|
-
"aws.iot.iot-greengrass.connector",
|
|
843
|
-
"aws.iot.iot-greengrass.interprocess-communication",
|
|
844
|
-
"aws.iot.iot-greengrass.protocol",
|
|
845
|
-
"aws.iot.iot-greengrass.recipe",
|
|
846
|
-
"aws.iot.iot-greengrass.stream-manager",
|
|
847
|
-
"aws.iot.iot-hardware-board.iot-hardware-board",
|
|
848
|
-
"aws.iot.iot-rule.iot-rule",
|
|
849
|
-
"aws.iot.iot-sitewise.asset-hierarchy",
|
|
850
|
-
"aws.iot.iot-sitewise.asset-model",
|
|
851
|
-
"aws.iot.iot-sitewise.asset-properties",
|
|
852
|
-
"aws.iot.iot-sitewise.asset",
|
|
853
|
-
"aws.iot.iot-sitewise.data-streams",
|
|
854
|
-
"aws.iot.iot.action",
|
|
855
|
-
"aws.iot.iot.actuator",
|
|
856
|
-
"aws.iot.iot.alexa_enabled-device",
|
|
857
|
-
"aws.iot.iot.alexa_skill",
|
|
858
|
-
"aws.iot.iot.alexa_voice-service",
|
|
859
|
-
"aws.iot.iot.certificate",
|
|
860
|
-
"aws.iot.iot.desired-state",
|
|
861
|
-
"aws.iot.iot.device-gateway",
|
|
862
|
-
"aws.iot.iot.echo",
|
|
863
|
-
"aws.iot.iot.fire-tv_stick",
|
|
864
|
-
"aws.iot.iot.fire_tv",
|
|
865
|
-
"aws.iot.iot.http2-protocol",
|
|
866
|
-
"aws.iot.iot.http_protocol",
|
|
867
|
-
"aws.iot.iot.lambda_function",
|
|
868
|
-
"aws.iot.iot.lorawan-protocol",
|
|
869
|
-
"aws.iot.iot.mqtt_protocol",
|
|
870
|
-
"aws.iot.iot.over-air-update",
|
|
871
|
-
"aws.iot.iot.policy",
|
|
872
|
-
"aws.iot.iot.reported-state",
|
|
873
|
-
"aws.iot.iot.sailboat",
|
|
874
|
-
"aws.iot.iot.sensor",
|
|
875
|
-
"aws.iot.iot.servo",
|
|
876
|
-
"aws.iot.iot.shadow",
|
|
877
|
-
"aws.iot.iot.simulator",
|
|
878
|
-
"aws.iot.iot.thing_bank",
|
|
879
|
-
"aws.iot.iot.thing_bicycle",
|
|
880
|
-
"aws.iot.iot.thing_camera",
|
|
881
|
-
"aws.iot.iot.thing_car",
|
|
882
|
-
"aws.iot.iot.thing_cart",
|
|
883
|
-
"aws.iot.iot.thing_coffee-pot",
|
|
884
|
-
"aws.iot.iot.thing_door-lock",
|
|
885
|
-
"aws.iot.iot.thing_factory",
|
|
886
|
-
"aws.iot.iot.thing_freertos-device",
|
|
887
|
-
"aws.iot.iot.thing_generic",
|
|
888
|
-
"aws.iot.iot.thing_house",
|
|
889
|
-
"aws.iot.iot.thing_humidity-sensor",
|
|
890
|
-
"aws.iot.iot.thing_industrial-pc",
|
|
891
|
-
"aws.iot.iot.thing_lightbulb",
|
|
892
|
-
"aws.iot.iot.thing_medical-emergency",
|
|
893
|
-
"aws.iot.iot.thing_plc",
|
|
894
|
-
"aws.iot.iot.thing_police-emergency",
|
|
895
|
-
"aws.iot.iot.thing_relay",
|
|
896
|
-
"aws.iot.iot.thing_stacklight",
|
|
897
|
-
"aws.iot.iot.thing_temperature-humidity-sensor",
|
|
898
|
-
"aws.iot.iot.thing_temperature-sensor",
|
|
899
|
-
"aws.iot.iot.thing_temperature-vibration-sensor",
|
|
900
|
-
"aws.iot.iot.thing_thermostat",
|
|
901
|
-
"aws.iot.iot.thing_travel",
|
|
902
|
-
"aws.iot.iot.thing_utility",
|
|
903
|
-
"aws.iot.iot.thing_vibration-sensor",
|
|
904
|
-
"aws.iot.iot.thing_windfarm",
|
|
905
|
-
"aws.iot.iot.topic",
|
|
906
|
-
"aws.management-governance.cloudformation.change-set",
|
|
907
|
-
"aws.management-governance.cloudformation.stack",
|
|
908
|
-
"aws.management-governance.cloudformation.template",
|
|
909
|
-
"aws.management-governance.cloudtrail.cloudtrail-lake",
|
|
910
|
-
"aws.management-governance.cloudwatch.alarm",
|
|
911
|
-
"aws.management-governance.cloudwatch.cross-account-observability",
|
|
912
|
-
"aws.management-governance.cloudwatch.data-protection",
|
|
913
|
-
"aws.management-governance.cloudwatch.event-event-based",
|
|
914
|
-
"aws.management-governance.cloudwatch.event-time-based",
|
|
915
|
-
"aws.management-governance.cloudwatch.evidently",
|
|
916
|
-
"aws.management-governance.cloudwatch.logs",
|
|
917
|
-
"aws.management-governance.cloudwatch.metrics-insights",
|
|
918
|
-
"aws.management-governance.cloudwatch.rule",
|
|
919
|
-
"aws.management-governance.cloudwatch.rum",
|
|
920
|
-
"aws.management-governance.cloudwatch.synthetics",
|
|
921
|
-
"aws.management-governance.license-manager.application-discovery",
|
|
922
|
-
"aws.management-governance.license-manager.license-blending",
|
|
923
|
-
"aws.management-governance.organizations.account",
|
|
924
|
-
"aws.management-governance.organizations.management-account",
|
|
925
|
-
"aws.management-governance.organizations.organizational-unit",
|
|
926
|
-
"aws.management-governance.systems-manager.application-manager",
|
|
927
|
-
"aws.management-governance.systems-manager.automation",
|
|
928
|
-
"aws.management-governance.systems-manager.change-calendar",
|
|
929
|
-
"aws.management-governance.systems-manager.change-manager",
|
|
930
|
-
"aws.management-governance.systems-manager.compliance",
|
|
931
|
-
"aws.management-governance.systems-manager.distributor",
|
|
932
|
-
"aws.management-governance.systems-manager.documents",
|
|
933
|
-
"aws.management-governance.systems-manager.incident-manager",
|
|
934
|
-
"aws.management-governance.systems-manager.inventory",
|
|
935
|
-
"aws.management-governance.systems-manager.maintenance-windows",
|
|
936
|
-
"aws.management-governance.systems-manager.opscenter",
|
|
937
|
-
"aws.management-governance.systems-manager.parameter-store",
|
|
938
|
-
"aws.management-governance.systems-manager.patch-manager",
|
|
939
|
-
"aws.management-governance.systems-manager.run-command",
|
|
940
|
-
"aws.management-governance.systems-manager.session-manager",
|
|
941
|
-
"aws.management-governance.systems-manager.state-manager",
|
|
942
|
-
"aws.management-governance.trusted-advisor.checklist-cost",
|
|
943
|
-
"aws.management-governance.trusted-advisor.checklist-fault-tolerant",
|
|
944
|
-
"aws.management-governance.trusted-advisor.checklist-performance",
|
|
945
|
-
"aws.management-governance.trusted-advisor.checklist-security",
|
|
946
|
-
"aws.management-governance.trusted-advisor.checklist",
|
|
947
|
-
"aws.media-services.cloud-digital-interface.cloud-digital-interface",
|
|
948
|
-
"aws.media-services.elemental-mediaconnect.mediaconnect-gateway",
|
|
949
|
-
"aws.migration-modernization.application-discovery-service.aws-agentless-collector",
|
|
950
|
-
"aws.migration-modernization.application-discovery-service.aws-discovery-agent",
|
|
951
|
-
"aws.migration-modernization.application-discovery-service.migration-evaluator-collector",
|
|
952
|
-
"aws.migration-modernization.datasync.agent",
|
|
953
|
-
"aws.migration-modernization.datasync.discovery",
|
|
954
|
-
"aws.migration-modernization.mainframe-modernization.analyzer",
|
|
955
|
-
"aws.migration-modernization.mainframe-modernization.compiler",
|
|
956
|
-
"aws.migration-modernization.mainframe-modernization.converter",
|
|
957
|
-
"aws.migration-modernization.mainframe-modernization.developer",
|
|
958
|
-
"aws.migration-modernization.mainframe-modernization.runtime",
|
|
959
|
-
"aws.migration-modernization.migration-hub.refactor-spaces-applications",
|
|
960
|
-
"aws.migration-modernization.migration-hub.refactor-spaces-environments",
|
|
961
|
-
"aws.migration-modernization.migration-hub.refactor-spaces-services",
|
|
962
|
-
"aws.migration-modernization.transfer-family.aws-as2",
|
|
963
|
-
"aws.migration-modernization.transfer-family.aws-ftp",
|
|
964
|
-
"aws.migration-modernization.transfer-family.aws-ftps",
|
|
965
|
-
"aws.migration-modernization.transfer-family.aws-sftp",
|
|
966
|
-
"aws.networking-content-delivery.api-gateway.endpoint",
|
|
967
|
-
"aws.networking-content-delivery.app-mesh.mesh",
|
|
968
|
-
"aws.networking-content-delivery.app-mesh.virtual-gateway",
|
|
969
|
-
"aws.networking-content-delivery.app-mesh.virtual-node",
|
|
970
|
-
"aws.networking-content-delivery.app-mesh.virtual-router",
|
|
971
|
-
"aws.networking-content-delivery.app-mesh.virtual-service",
|
|
972
|
-
"aws.networking-content-delivery.cloud-map.namespace",
|
|
973
|
-
"aws.networking-content-delivery.cloud-map.resource",
|
|
974
|
-
"aws.networking-content-delivery.cloud-map.service",
|
|
975
|
-
"aws.networking-content-delivery.cloud-wan.core-network-edge",
|
|
976
|
-
"aws.networking-content-delivery.cloud-wan.segment-network",
|
|
977
|
-
"aws.networking-content-delivery.cloud-wan.transit-gateway-route-table-attachment",
|
|
978
|
-
"aws.networking-content-delivery.cloudfront.download-distribution",
|
|
979
|
-
"aws.networking-content-delivery.cloudfront.edge-location",
|
|
980
|
-
"aws.networking-content-delivery.cloudfront.functions",
|
|
981
|
-
"aws.networking-content-delivery.cloudfront.streaming-distribution",
|
|
982
|
-
"aws.networking-content-delivery.direct-connect.gateway",
|
|
983
|
-
"aws.networking-content-delivery.elastic-load-balancing.application-load-balancer",
|
|
984
|
-
"aws.networking-content-delivery.elastic-load-balancing.classic-load-balancer",
|
|
985
|
-
"aws.networking-content-delivery.elastic-load-balancing.gateway-load-balancer",
|
|
986
|
-
"aws.networking-content-delivery.elastic-load-balancing.network-load-balancer",
|
|
987
|
-
"aws.networking-content-delivery.route-53-hosted-zone.route-53-hosted-zone",
|
|
988
|
-
"aws.networking-content-delivery.route-53.readiness-checks",
|
|
989
|
-
"aws.networking-content-delivery.route-53.resolver-dns-firewall",
|
|
990
|
-
"aws.networking-content-delivery.route-53.resolver-query-logging",
|
|
991
|
-
"aws.networking-content-delivery.route-53.resolver",
|
|
992
|
-
"aws.networking-content-delivery.route-53.route-table",
|
|
993
|
-
"aws.networking-content-delivery.route-53.routing-controls",
|
|
994
|
-
"aws.networking-content-delivery.transit-gateway.attachment",
|
|
995
|
-
"aws.networking-content-delivery.vpc.carrier-gateway",
|
|
996
|
-
"aws.networking-content-delivery.vpc.customer-gateway",
|
|
997
|
-
"aws.networking-content-delivery.vpc.elastic-network-adapter",
|
|
998
|
-
"aws.networking-content-delivery.vpc.elastic-network-interface",
|
|
999
|
-
"aws.networking-content-delivery.vpc.endpoints",
|
|
1000
|
-
"aws.networking-content-delivery.vpc.flow-logs",
|
|
1001
|
-
"aws.networking-content-delivery.vpc.internet-gateway",
|
|
1002
|
-
"aws.networking-content-delivery.vpc.nat-gateway",
|
|
1003
|
-
"aws.networking-content-delivery.vpc.network-access-analyzer",
|
|
1004
|
-
"aws.networking-content-delivery.vpc.network-access-control-list",
|
|
1005
|
-
"aws.networking-content-delivery.vpc.peering-connection",
|
|
1006
|
-
"aws.networking-content-delivery.vpc.reachability-analyzer",
|
|
1007
|
-
"aws.networking-content-delivery.vpc.router",
|
|
1008
|
-
"aws.networking-content-delivery.vpc.traffic-mirroring",
|
|
1009
|
-
"aws.networking-content-delivery.vpc.virtual-private-cloud-vpc",
|
|
1010
|
-
"aws.networking-content-delivery.vpc.vpn-connection",
|
|
1011
|
-
"aws.networking-content-delivery.vpc.vpn-gateway",
|
|
1012
|
-
"aws.quantum-technologies.braket.chandelier",
|
|
1013
|
-
"aws.quantum-technologies.braket.chip",
|
|
1014
|
-
"aws.quantum-technologies.braket.embedded-simulator",
|
|
1015
|
-
"aws.quantum-technologies.braket.managed-simulator",
|
|
1016
|
-
"aws.quantum-technologies.braket.noise-simulator",
|
|
1017
|
-
"aws.quantum-technologies.braket.qpu",
|
|
1018
|
-
"aws.quantum-technologies.braket.simulator-1",
|
|
1019
|
-
"aws.quantum-technologies.braket.simulator-2",
|
|
1020
|
-
"aws.quantum-technologies.braket.simulator-3",
|
|
1021
|
-
"aws.quantum-technologies.braket.simulator-4",
|
|
1022
|
-
"aws.quantum-technologies.braket.simulator",
|
|
1023
|
-
"aws.quantum-technologies.braket.state-vector",
|
|
1024
|
-
"aws.quantum-technologies.braket.tensor-network",
|
|
1025
|
-
"aws.security-identity.certificate-manager.certificate-authority",
|
|
1026
|
-
"aws.security-identity.directory-service.ad-connector",
|
|
1027
|
-
"aws.security-identity.directory-service.aws-managed-microsoft-ad",
|
|
1028
|
-
"aws.security-identity.directory-service.simple-ad",
|
|
1029
|
-
"aws.security-identity.identity-access-management.add-on",
|
|
1030
|
-
"aws.security-identity.identity-access-management.aws-sts-alternate",
|
|
1031
|
-
"aws.security-identity.identity-access-management.aws-sts",
|
|
1032
|
-
"aws.security-identity.identity-access-management.data-encryption-key",
|
|
1033
|
-
"aws.security-identity.identity-access-management.encrypted-data",
|
|
1034
|
-
"aws.security-identity.identity-access-management.iam-access-analyzer",
|
|
1035
|
-
"aws.security-identity.identity-access-management.iam-roles-anywhere",
|
|
1036
|
-
"aws.security-identity.identity-access-management.long-term-security-credential",
|
|
1037
|
-
"aws.security-identity.identity-access-management.mfa-token",
|
|
1038
|
-
"aws.security-identity.identity-access-management.permissions",
|
|
1039
|
-
"aws.security-identity.identity-access-management.role",
|
|
1040
|
-
"aws.security-identity.identity-access-management.temporary-security-credential",
|
|
1041
|
-
"aws.security-identity.inspector.agent",
|
|
1042
|
-
"aws.security-identity.key-management-service.external-key-store",
|
|
1043
|
-
"aws.security-identity.network-firewall.endpoints",
|
|
1044
|
-
"aws.security-identity.security-hub.finding",
|
|
1045
|
-
"aws.security-identity.shield.aws-shield-advanced",
|
|
1046
|
-
"aws.security-identity.waf.bad-bot",
|
|
1047
|
-
"aws.security-identity.waf.bot-control",
|
|
1048
|
-
"aws.security-identity.waf.bot",
|
|
1049
|
-
"aws.security-identity.waf.filtering-rule",
|
|
1050
|
-
"aws.security-identity.waf.labels",
|
|
1051
|
-
"aws.security-identity.waf.managed-rule",
|
|
1052
|
-
"aws.security-identity.waf.rule",
|
|
1053
|
-
"aws.storage.backup.audit-manager",
|
|
1054
|
-
"aws.storage.backup.aws-backup-for-aws-cloudformation",
|
|
1055
|
-
"aws.storage.backup.aws-backup-support-for-amazon-fsx-for-netapp-ontap",
|
|
1056
|
-
"aws.storage.backup.aws-backup-support-for-amazon-s3",
|
|
1057
|
-
"aws.storage.backup.aws-backup-support-for-vmware-workloads",
|
|
1058
|
-
"aws.storage.backup.backup-plan",
|
|
1059
|
-
"aws.storage.backup.backup-restore",
|
|
1060
|
-
"aws.storage.backup.backup-vault",
|
|
1061
|
-
"aws.storage.backup.compliance-reporting",
|
|
1062
|
-
"aws.storage.backup.compute",
|
|
1063
|
-
"aws.storage.backup.database",
|
|
1064
|
-
"aws.storage.backup.gateway",
|
|
1065
|
-
"aws.storage.backup.legal-hold",
|
|
1066
|
-
"aws.storage.backup.recovery-point-objective",
|
|
1067
|
-
"aws.storage.backup.recovery-time-objective",
|
|
1068
|
-
"aws.storage.backup.storage",
|
|
1069
|
-
"aws.storage.backup.vault-lock",
|
|
1070
|
-
"aws.storage.backup.virtual-machine-monitor",
|
|
1071
|
-
"aws.storage.backup.virtual-machine",
|
|
1072
|
-
"aws.storage.elastic-block-store.amazon-data-lifecycle-manager",
|
|
1073
|
-
"aws.storage.elastic-block-store.multiple-volumes",
|
|
1074
|
-
"aws.storage.elastic-block-store.snapshot",
|
|
1075
|
-
"aws.storage.elastic-block-store.volume-gp3",
|
|
1076
|
-
"aws.storage.elastic-block-store.volume",
|
|
1077
|
-
"aws.storage.elastic-file-system.efs-intelligent-tiering",
|
|
1078
|
-
"aws.storage.elastic-file-system.efs-one-zone-infrequent-access",
|
|
1079
|
-
"aws.storage.elastic-file-system.efs-one-zone",
|
|
1080
|
-
"aws.storage.elastic-file-system.efs-standard-infrequent-access",
|
|
1081
|
-
"aws.storage.elastic-file-system.efs-standard",
|
|
1082
|
-
"aws.storage.elastic-file-system.elastic-throughput",
|
|
1083
|
-
"aws.storage.elastic-file-system.file-system",
|
|
1084
|
-
"aws.storage.file-cache.hybrid-nfs-linked-datasets",
|
|
1085
|
-
"aws.storage.file-cache.on-premises-nfs-linked-datasets",
|
|
1086
|
-
"aws.storage.file-cache.s3-linked-datasets",
|
|
1087
|
-
"aws.storage.simple-storage-service-glacier.archive",
|
|
1088
|
-
"aws.storage.simple-storage-service-glacier.vault",
|
|
1089
|
-
"aws.storage.simple-storage-service.bucket-with-objects",
|
|
1090
|
-
"aws.storage.simple-storage-service.bucket",
|
|
1091
|
-
"aws.storage.simple-storage-service.directory-bucket",
|
|
1092
|
-
"aws.storage.simple-storage-service.general-access-points",
|
|
1093
|
-
"aws.storage.simple-storage-service.object",
|
|
1094
|
-
"aws.storage.simple-storage-service.s3-batch-operations",
|
|
1095
|
-
"aws.storage.simple-storage-service.s3-express-one-zone",
|
|
1096
|
-
"aws.storage.simple-storage-service.s3-glacier-deep-archive",
|
|
1097
|
-
"aws.storage.simple-storage-service.s3-glacier-flexible-retrieval",
|
|
1098
|
-
"aws.storage.simple-storage-service.s3-glacier-instant-retrieval",
|
|
1099
|
-
"aws.storage.simple-storage-service.s3-intelligent-tiering",
|
|
1100
|
-
"aws.storage.simple-storage-service.s3-multi-region-access-points",
|
|
1101
|
-
"aws.storage.simple-storage-service.s3-object-lambda-access-points",
|
|
1102
|
-
"aws.storage.simple-storage-service.s3-object-lambda",
|
|
1103
|
-
"aws.storage.simple-storage-service.s3-object-lock",
|
|
1104
|
-
"aws.storage.simple-storage-service.s3-on-outposts",
|
|
1105
|
-
"aws.storage.simple-storage-service.s3-one-zone-ia",
|
|
1106
|
-
"aws.storage.simple-storage-service.s3-replication-time-control",
|
|
1107
|
-
"aws.storage.simple-storage-service.s3-replication",
|
|
1108
|
-
"aws.storage.simple-storage-service.s3-select",
|
|
1109
|
-
"aws.storage.simple-storage-service.s3-standard-ia",
|
|
1110
|
-
"aws.storage.simple-storage-service.s3-standard",
|
|
1111
|
-
"aws.storage.simple-storage-service.s3-storage-lens",
|
|
1112
|
-
"aws.storage.simple-storage-service.s3-tables",
|
|
1113
|
-
"aws.storage.simple-storage-service.s3-vectors",
|
|
1114
|
-
"aws.storage.simple-storage-service.vpc-access-points",
|
|
1115
|
-
"aws.storage.snowball.snowball-import-export",
|
|
1116
|
-
"aws.storage.storage-gateway.amazon-fsx-file-gateway",
|
|
1117
|
-
"aws.storage.storage-gateway.amazon-s3-file-gateway",
|
|
1118
|
-
"aws.storage.storage-gateway.cached-volume",
|
|
1119
|
-
"aws.storage.storage-gateway.file-gateway",
|
|
1120
|
-
"aws.storage.storage-gateway.noncached-volume",
|
|
1121
|
-
"aws.storage.storage-gateway.tape-gateway",
|
|
1122
|
-
"aws.storage.storage-gateway.virtual-tape-library",
|
|
1123
|
-
"aws.storage.storage-gateway.volume-gateway",
|
|
1124
|
-
"aws.category.analytics",
|
|
1125
|
-
"aws.category.application-integration",
|
|
1126
|
-
"aws.category.artificial-intelligence",
|
|
1127
|
-
"aws.category.blockchain",
|
|
1128
|
-
"aws.category.business-applications",
|
|
1129
|
-
"aws.category.cloud-financial-management",
|
|
1130
|
-
"aws.category.compute",
|
|
1131
|
-
"aws.category.containers",
|
|
1132
|
-
"aws.category.customer-enablement",
|
|
1133
|
-
"aws.category.customer-experience",
|
|
1134
|
-
"aws.category.databases",
|
|
1135
|
-
"aws.category.developer-tools",
|
|
1136
|
-
"aws.category.end-user-computing",
|
|
1137
|
-
"aws.category.front-end-web-mobile",
|
|
1138
|
-
"aws.category.games",
|
|
1139
|
-
"aws.category.internet-of-things",
|
|
1140
|
-
"aws.category.management-tools",
|
|
1141
|
-
"aws.category.media-services",
|
|
1142
|
-
"aws.category.migration-modernization",
|
|
1143
|
-
"aws.category.multicloud-and-hybrid",
|
|
1144
|
-
"aws.category.networking-content-delivery",
|
|
1145
|
-
"aws.category.quantum-technologies",
|
|
1146
|
-
"aws.category.satellite",
|
|
1147
|
-
"aws.category.security-identity",
|
|
1148
|
-
"aws.category.serverless",
|
|
1149
|
-
"aws.category.storage",
|
|
1150
|
-
"aws.group.account",
|
|
1151
|
-
"aws.group.auto-scaling-group",
|
|
1152
|
-
"aws.group.cloud-logo",
|
|
1153
|
-
"aws.group.cloud",
|
|
1154
|
-
"aws.group.corporate-data-center",
|
|
1155
|
-
"aws.group.ec2-instance-contents",
|
|
1156
|
-
"aws.group.iot-greengrass-deployment",
|
|
1157
|
-
"aws.group.private-subnet",
|
|
1158
|
-
"aws.group.public-subnet",
|
|
1159
|
-
"aws.group.region",
|
|
1160
|
-
"aws.group.server-contents",
|
|
1161
|
-
"aws.group.spot-fleet",
|
|
1162
|
-
"aws.group.virtual-private-cloud-vpc"
|
|
1163
|
-
]);
|
|
1164
|
-
var nodeTypeToIcon = {
|
|
1165
|
-
"aws.analytics.athena": "architecture/analytics/athena_64.svg",
|
|
1166
|
-
"aws.analytics.clean-rooms": "architecture/analytics/clean-rooms_64.svg",
|
|
1167
|
-
"aws.analytics.cloudsearch": "architecture/analytics/cloudsearch_64.svg",
|
|
1168
|
-
"aws.analytics.data-exchange": "architecture/analytics/data-exchange_64.svg",
|
|
1169
|
-
"aws.analytics.data-firehose": "architecture/analytics/data-firehose_64.svg",
|
|
1170
|
-
"aws.analytics.datazone": "architecture/analytics/datazone_64.svg",
|
|
1171
|
-
"aws.analytics.emr": "architecture/analytics/emr_64.svg",
|
|
1172
|
-
"aws.analytics.entity-resolution": "architecture/analytics/entity-resolution_64.svg",
|
|
1173
|
-
"aws.analytics.finspace": "architecture/analytics/finspace_64.svg",
|
|
1174
|
-
"aws.analytics.glue-databrew": "architecture/analytics/glue-databrew_64.svg",
|
|
1175
|
-
"aws.analytics.glue": "architecture/analytics/glue_64.svg",
|
|
1176
|
-
"aws.analytics.kinesis-data-streams": "architecture/analytics/kinesis-data-streams_64.svg",
|
|
1177
|
-
"aws.analytics.kinesis-video-streams": "architecture/analytics/kinesis-video-streams_64.svg",
|
|
1178
|
-
"aws.analytics.kinesis": "architecture/analytics/kinesis_64.svg",
|
|
1179
|
-
"aws.analytics.lake-formation": "architecture/analytics/lake-formation_64.svg",
|
|
1180
|
-
"aws.analytics.managed-service-for-apache-flink": "architecture/analytics/managed-service-for-apache-flink_64.svg",
|
|
1181
|
-
"aws.analytics.managed-streaming-for-apache-kafka": "architecture/analytics/managed-streaming-for-apache-kafka_64.svg",
|
|
1182
|
-
"aws.analytics.opensearch-service": "architecture/analytics/opensearch-service_64.svg",
|
|
1183
|
-
"aws.analytics.redshift": "architecture/analytics/redshift_64.svg",
|
|
1184
|
-
"aws.analytics.sagemaker": "architecture/analytics/sagemaker_64.svg",
|
|
1185
|
-
"aws.application-integration.appflow": "architecture/application-integration/appflow_64.svg",
|
|
1186
|
-
"aws.application-integration.appsync": "architecture/application-integration/appsync_64.svg",
|
|
1187
|
-
"aws.application-integration.b2b-data-interchange": "architecture/application-integration/b2b-data-interchange_64.svg",
|
|
1188
|
-
"aws.application-integration.eventbridge": "architecture/application-integration/eventbridge_64.svg",
|
|
1189
|
-
"aws.application-integration.express-workflows": "architecture/application-integration/express-workflows_64.svg",
|
|
1190
|
-
"aws.application-integration.managed-workflows-for-apache-airflow": "architecture/application-integration/managed-workflows-for-apache-airflow_64.svg",
|
|
1191
|
-
"aws.application-integration.mq": "architecture/application-integration/mq_64.svg",
|
|
1192
|
-
"aws.application-integration.simple-notification-service": "architecture/application-integration/simple-notification-service_64.svg",
|
|
1193
|
-
"aws.application-integration.simple-queue-service": "architecture/application-integration/simple-queue-service_64.svg",
|
|
1194
|
-
"aws.application-integration.step-functions": "architecture/application-integration/step-functions_64.svg",
|
|
1195
|
-
"aws.artificial-intelligence.apache-mxnet-on-aws": "architecture/artificial-intelligence/apache-mxnet-on-aws_64.svg",
|
|
1196
|
-
"aws.artificial-intelligence.app-studio": "architecture/artificial-intelligence/app-studio_64.svg",
|
|
1197
|
-
"aws.artificial-intelligence.augmented-ai-a2i": "architecture/artificial-intelligence/augmented-ai-a2i_64.svg",
|
|
1198
|
-
"aws.artificial-intelligence.bedrock-agentcore": "architecture/artificial-intelligence/bedrock-agentcore_64.svg",
|
|
1199
|
-
"aws.artificial-intelligence.bedrock": "architecture/artificial-intelligence/bedrock_64.svg",
|
|
1200
|
-
"aws.artificial-intelligence.codeguru": "architecture/artificial-intelligence/codeguru_64.svg",
|
|
1201
|
-
"aws.artificial-intelligence.codewhisperer": "architecture/artificial-intelligence/codewhisperer_64.svg",
|
|
1202
|
-
"aws.artificial-intelligence.comprehend-medical": "architecture/artificial-intelligence/comprehend-medical_64.svg",
|
|
1203
|
-
"aws.artificial-intelligence.comprehend": "architecture/artificial-intelligence/comprehend_64.svg",
|
|
1204
|
-
"aws.artificial-intelligence.deep-learning-amis": "architecture/artificial-intelligence/deep-learning-amis_64.svg",
|
|
1205
|
-
"aws.artificial-intelligence.deep-learning-containers": "architecture/artificial-intelligence/deep-learning-containers_64.svg",
|
|
1206
|
-
"aws.artificial-intelligence.deepracer": "architecture/artificial-intelligence/deepracer_64.svg",
|
|
1207
|
-
"aws.artificial-intelligence.devops-guru": "architecture/artificial-intelligence/devops-guru_64.svg",
|
|
1208
|
-
"aws.artificial-intelligence.elastic-inference": "architecture/artificial-intelligence/elastic-inference_64.svg",
|
|
1209
|
-
"aws.artificial-intelligence.forecast": "architecture/artificial-intelligence/forecast_64.svg",
|
|
1210
|
-
"aws.artificial-intelligence.fraud-detector": "architecture/artificial-intelligence/fraud-detector_64.svg",
|
|
1211
|
-
"aws.artificial-intelligence.healthimaging": "architecture/artificial-intelligence/healthimaging_64.svg",
|
|
1212
|
-
"aws.artificial-intelligence.healthlake": "architecture/artificial-intelligence/healthlake_64.svg",
|
|
1213
|
-
"aws.artificial-intelligence.healthomics": "architecture/artificial-intelligence/healthomics_64.svg",
|
|
1214
|
-
"aws.artificial-intelligence.healthscribe": "architecture/artificial-intelligence/healthscribe_64.svg",
|
|
1215
|
-
"aws.artificial-intelligence.kendra": "architecture/artificial-intelligence/kendra_64.svg",
|
|
1216
|
-
"aws.artificial-intelligence.lex": "architecture/artificial-intelligence/lex_64.svg",
|
|
1217
|
-
"aws.artificial-intelligence.lookout-for-equipment": "architecture/artificial-intelligence/lookout-for-equipment_64.svg",
|
|
1218
|
-
"aws.artificial-intelligence.lookout-for-vision": "architecture/artificial-intelligence/lookout-for-vision_64.svg",
|
|
1219
|
-
"aws.artificial-intelligence.monitron": "architecture/artificial-intelligence/monitron_64.svg",
|
|
1220
|
-
"aws.artificial-intelligence.neuron": "architecture/artificial-intelligence/neuron_64.svg",
|
|
1221
|
-
"aws.artificial-intelligence.nova": "architecture/artificial-intelligence/nova_64.svg",
|
|
1222
|
-
"aws.artificial-intelligence.panorama": "architecture/artificial-intelligence/panorama_64.svg",
|
|
1223
|
-
"aws.artificial-intelligence.personalize": "architecture/artificial-intelligence/personalize_64.svg",
|
|
1224
|
-
"aws.artificial-intelligence.polly": "architecture/artificial-intelligence/polly_64.svg",
|
|
1225
|
-
"aws.artificial-intelligence.pytorch-on-aws": "architecture/artificial-intelligence/pytorch-on-aws_64.svg",
|
|
1226
|
-
"aws.artificial-intelligence.q": "architecture/artificial-intelligence/q_64.svg",
|
|
1227
|
-
"aws.artificial-intelligence.rekognition": "architecture/artificial-intelligence/rekognition_64.svg",
|
|
1228
|
-
"aws.artificial-intelligence.sagemaker-ai": "architecture/artificial-intelligence/sagemaker-ai_64.svg",
|
|
1229
|
-
"aws.artificial-intelligence.sagemaker-ground-truth": "architecture/artificial-intelligence/sagemaker-ground-truth_64.svg",
|
|
1230
|
-
"aws.artificial-intelligence.sagemaker-studio-lab": "architecture/artificial-intelligence/sagemaker-studio-lab_64.svg",
|
|
1231
|
-
"aws.artificial-intelligence.tensorflow-on-aws": "architecture/artificial-intelligence/tensorflow-on-aws_64.svg",
|
|
1232
|
-
"aws.artificial-intelligence.textract": "architecture/artificial-intelligence/textract_64.svg",
|
|
1233
|
-
"aws.artificial-intelligence.transcribe": "architecture/artificial-intelligence/transcribe_64.svg",
|
|
1234
|
-
"aws.artificial-intelligence.translate": "architecture/artificial-intelligence/translate_64.svg",
|
|
1235
|
-
"aws.blockchain.managed-blockchain": "architecture/blockchain/managed-blockchain_64.svg",
|
|
1236
|
-
"aws.business-applications.appfabric": "architecture/business-applications/appfabric_64.svg",
|
|
1237
|
-
"aws.business-applications.chime-sdk": "architecture/business-applications/chime-sdk_64.svg",
|
|
1238
|
-
"aws.business-applications.chime": "architecture/business-applications/chime_64.svg",
|
|
1239
|
-
"aws.business-applications.connect": "architecture/business-applications/connect_64.svg",
|
|
1240
|
-
"aws.business-applications.end-user-messaging": "architecture/business-applications/end-user-messaging_64.svg",
|
|
1241
|
-
"aws.business-applications.pinpoint-apis": "architecture/business-applications/pinpoint-apis_64.svg",
|
|
1242
|
-
"aws.business-applications.pinpoint": "architecture/business-applications/pinpoint_64.svg",
|
|
1243
|
-
"aws.business-applications.quick-suite": "architecture/business-applications/quick-suite_64.svg",
|
|
1244
|
-
"aws.business-applications.simple-email-service": "architecture/business-applications/simple-email-service_64.svg",
|
|
1245
|
-
"aws.business-applications.supply-chain": "architecture/business-applications/supply-chain_64.svg",
|
|
1246
|
-
"aws.business-applications.wickr": "architecture/business-applications/wickr_64.svg",
|
|
1247
|
-
"aws.business-applications.workdocs-sdk": "architecture/business-applications/workdocs-sdk_64.svg",
|
|
1248
|
-
"aws.business-applications.workdocs": "architecture/business-applications/workdocs_64.svg",
|
|
1249
|
-
"aws.business-applications.workmail": "architecture/business-applications/workmail_64.svg",
|
|
1250
|
-
"aws.cloud-financial-management.billing-conductor": "architecture/cloud-financial-management/billing-conductor_64.svg",
|
|
1251
|
-
"aws.cloud-financial-management.budgets": "architecture/cloud-financial-management/budgets_64.svg",
|
|
1252
|
-
"aws.cloud-financial-management.cost-and-usage-report": "architecture/cloud-financial-management/cost-and-usage-report_64.svg",
|
|
1253
|
-
"aws.cloud-financial-management.cost-explorer": "architecture/cloud-financial-management/cost-explorer_64.svg",
|
|
1254
|
-
"aws.cloud-financial-management.reserved-instance-reporting": "architecture/cloud-financial-management/reserved-instance-reporting_64.svg",
|
|
1255
|
-
"aws.cloud-financial-management.savings-plans": "architecture/cloud-financial-management/savings-plans_64.svg",
|
|
1256
|
-
"aws.compute.app-runner": "architecture/compute/app-runner_64.svg",
|
|
1257
|
-
"aws.compute.batch": "architecture/compute/batch_64.svg",
|
|
1258
|
-
"aws.compute.bottlerocket": "architecture/compute/bottlerocket_64.svg",
|
|
1259
|
-
"aws.compute.compute-optimizer": "architecture/compute/compute-optimizer_64.svg",
|
|
1260
|
-
"aws.compute.dcv": "architecture/compute/dcv_64.svg",
|
|
1261
|
-
"aws.compute.ec2-auto-scaling": "architecture/compute/ec2-auto-scaling_64.svg",
|
|
1262
|
-
"aws.compute.ec2-image-builder": "architecture/compute/ec2-image-builder_64.svg",
|
|
1263
|
-
"aws.compute.ec2": "architecture/compute/ec2_64.svg",
|
|
1264
|
-
"aws.compute.elastic-beanstalk": "architecture/compute/elastic-beanstalk_64.svg",
|
|
1265
|
-
"aws.compute.elastic-fabric-adapter": "architecture/compute/elastic-fabric-adapter_64.svg",
|
|
1266
|
-
"aws.compute.elastic-vmware-service": "architecture/compute/elastic-vmware-service_64.svg",
|
|
1267
|
-
"aws.compute.lambda": "architecture/compute/lambda_64.svg",
|
|
1268
|
-
"aws.compute.lightsail-for-research": "architecture/compute/lightsail-for-research_64.svg",
|
|
1269
|
-
"aws.compute.lightsail": "architecture/compute/lightsail_64.svg",
|
|
1270
|
-
"aws.compute.local-zones": "architecture/compute/local-zones_64.svg",
|
|
1271
|
-
"aws.compute.nitro-enclaves": "architecture/compute/nitro-enclaves_64.svg",
|
|
1272
|
-
"aws.compute.outposts-family": "architecture/compute/outposts-family_64.svg",
|
|
1273
|
-
"aws.compute.outposts-rack": "architecture/compute/outposts-rack_64.svg",
|
|
1274
|
-
"aws.compute.outposts-servers": "architecture/compute/outposts-servers_64.svg",
|
|
1275
|
-
"aws.compute.parallel-cluster": "architecture/compute/parallel-cluster_64.svg",
|
|
1276
|
-
"aws.compute.parallel-computing-service": "architecture/compute/parallel-computing-service_64.svg",
|
|
1277
|
-
"aws.compute.serverless-application-repository": "architecture/compute/serverless-application-repository_64.svg",
|
|
1278
|
-
"aws.compute.simspace-weaver": "architecture/compute/simspace-weaver_64.svg",
|
|
1279
|
-
"aws.compute.wavelength": "architecture/compute/wavelength_64.svg",
|
|
1280
|
-
"aws.containers.ecs-anywhere": "architecture/containers/ecs-anywhere_64.svg",
|
|
1281
|
-
"aws.containers.eks-anywhere": "architecture/containers/eks-anywhere_64.svg",
|
|
1282
|
-
"aws.containers.eks-distro": "architecture/containers/eks-distro_64.svg",
|
|
1283
|
-
"aws.containers.elastic-container-registry": "architecture/containers/elastic-container-registry_64.svg",
|
|
1284
|
-
"aws.containers.elastic-container-service": "architecture/containers/elastic-container-service_64.svg",
|
|
1285
|
-
"aws.containers.elastic-kubernetes-service": "architecture/containers/elastic-kubernetes-service_64.svg",
|
|
1286
|
-
"aws.containers.fargate": "architecture/containers/fargate_64.svg",
|
|
1287
|
-
"aws.containers.red-hat-openshift-service-on-aws": "architecture/containers/red-hat-openshift-service-on-aws_64.svg",
|
|
1288
|
-
"aws.customer-enablement.activate": "architecture/customer-enablement/activate_64.svg",
|
|
1289
|
-
"aws.customer-enablement.iq": "architecture/customer-enablement/iq_64.svg",
|
|
1290
|
-
"aws.customer-enablement.managed-services": "architecture/customer-enablement/managed-services_64.svg",
|
|
1291
|
-
"aws.customer-enablement.professional-services": "architecture/customer-enablement/professional-services_64.svg",
|
|
1292
|
-
"aws.customer-enablement.repost-private": "architecture/customer-enablement/repost-private_64.svg",
|
|
1293
|
-
"aws.customer-enablement.repost": "architecture/customer-enablement/repost_64.svg",
|
|
1294
|
-
"aws.customer-enablement.support": "architecture/customer-enablement/support_64.svg",
|
|
1295
|
-
"aws.customer-enablement.training-certification": "architecture/customer-enablement/training-certification_64.svg",
|
|
1296
|
-
"aws.databases.aurora": "architecture/databases/aurora_64.svg",
|
|
1297
|
-
"aws.databases.database-migration-service": "architecture/databases/database-migration-service_64.svg",
|
|
1298
|
-
"aws.databases.documentdb": "architecture/databases/documentdb_64.svg",
|
|
1299
|
-
"aws.databases.dynamodb": "architecture/databases/dynamodb_64.svg",
|
|
1300
|
-
"aws.databases.elasticache": "architecture/databases/elasticache_64.svg",
|
|
1301
|
-
"aws.databases.keyspaces": "architecture/databases/keyspaces_64.svg",
|
|
1302
|
-
"aws.databases.memorydb": "architecture/databases/memorydb_64.svg",
|
|
1303
|
-
"aws.databases.neptune": "architecture/databases/neptune_64.svg",
|
|
1304
|
-
"aws.databases.oracle-database-at-aws": "architecture/databases/oracle-database-at-aws_64.svg",
|
|
1305
|
-
"aws.databases.rds": "architecture/databases/rds_64.svg",
|
|
1306
|
-
"aws.databases.timestream": "architecture/databases/timestream_64.svg",
|
|
1307
|
-
"aws.developer-tools.cloud-control-api": "architecture/developer-tools/cloud-control-api_64.svg",
|
|
1308
|
-
"aws.developer-tools.cloud-development-kit": "architecture/developer-tools/cloud-development-kit_64.svg",
|
|
1309
|
-
"aws.developer-tools.cloud9": "architecture/developer-tools/cloud9_64.svg",
|
|
1310
|
-
"aws.developer-tools.cloudshell": "architecture/developer-tools/cloudshell_64.svg",
|
|
1311
|
-
"aws.developer-tools.codeartifact": "architecture/developer-tools/codeartifact_64.svg",
|
|
1312
|
-
"aws.developer-tools.codebuild": "architecture/developer-tools/codebuild_64.svg",
|
|
1313
|
-
"aws.developer-tools.codecatalyst": "architecture/developer-tools/codecatalyst_64.svg",
|
|
1314
|
-
"aws.developer-tools.codecommit": "architecture/developer-tools/codecommit_64.svg",
|
|
1315
|
-
"aws.developer-tools.codedeploy": "architecture/developer-tools/codedeploy_64.svg",
|
|
1316
|
-
"aws.developer-tools.codepipeline": "architecture/developer-tools/codepipeline_64.svg",
|
|
1317
|
-
"aws.developer-tools.command-line-interface": "architecture/developer-tools/command-line-interface_64.svg",
|
|
1318
|
-
"aws.developer-tools.corretto": "architecture/developer-tools/corretto_64.svg",
|
|
1319
|
-
"aws.developer-tools.fault-injection-service": "architecture/developer-tools/fault-injection-service_64.svg",
|
|
1320
|
-
"aws.developer-tools.infrastructure-composer": "architecture/developer-tools/infrastructure-composer_64.svg",
|
|
1321
|
-
"aws.developer-tools.tools-and-sdks": "architecture/developer-tools/tools-and-sdks_64.svg",
|
|
1322
|
-
"aws.developer-tools.x-ray": "architecture/developer-tools/x-ray_64.svg",
|
|
1323
|
-
"aws.end-user-computing.workspaces": "architecture/end-user-computing/workspaces_64.svg",
|
|
1324
|
-
"aws.front-end-web-mobile.amplify": "architecture/front-end-web-mobile/amplify_64.svg",
|
|
1325
|
-
"aws.front-end-web-mobile.device-farm": "architecture/front-end-web-mobile/device-farm_64.svg",
|
|
1326
|
-
"aws.front-end-web-mobile.location-service": "architecture/front-end-web-mobile/location-service_64.svg",
|
|
1327
|
-
"aws.games.gamelift-servers": "architecture/games/gamelift-servers_64.svg",
|
|
1328
|
-
"aws.games.gamelift-streams": "architecture/games/gamelift-streams_64.svg",
|
|
1329
|
-
"aws.games.open-3d-engine": "architecture/games/open-3d-engine_64.svg",
|
|
1330
|
-
"aws.general-icons.marketplace_dark": "architecture/general-icons/marketplace_dark_64.svg",
|
|
1331
|
-
"aws.general-icons.marketplace_light": "architecture/general-icons/marketplace_light_64.svg",
|
|
1332
|
-
"aws.internet-of-things.freertos": "architecture/internet-of-things/freertos_64.svg",
|
|
1333
|
-
"aws.internet-of-things.iot-core": "architecture/internet-of-things/iot-core_64.svg",
|
|
1334
|
-
"aws.internet-of-things.iot-device-defender": "architecture/internet-of-things/iot-device-defender_64.svg",
|
|
1335
|
-
"aws.internet-of-things.iot-device-management": "architecture/internet-of-things/iot-device-management_64.svg",
|
|
1336
|
-
"aws.internet-of-things.iot-events": "architecture/internet-of-things/iot-events_64.svg",
|
|
1337
|
-
"aws.internet-of-things.iot-expresslink": "architecture/internet-of-things/iot-expresslink_64.svg",
|
|
1338
|
-
"aws.internet-of-things.iot-fleetwise": "architecture/internet-of-things/iot-fleetwise_64.svg",
|
|
1339
|
-
"aws.internet-of-things.iot-greengrass": "architecture/internet-of-things/iot-greengrass_64.svg",
|
|
1340
|
-
"aws.internet-of-things.iot-sitewise": "architecture/internet-of-things/iot-sitewise_64.svg",
|
|
1341
|
-
"aws.internet-of-things.iot-twinmaker": "architecture/internet-of-things/iot-twinmaker_64.svg",
|
|
1342
|
-
"aws.management-tools.appconfig": "architecture/management-tools/appconfig_64.svg",
|
|
1343
|
-
"aws.management-tools.application-auto-scaling": "architecture/management-tools/application-auto-scaling_64.svg",
|
|
1344
|
-
"aws.management-tools.auto-scaling": "architecture/management-tools/auto-scaling_64.svg",
|
|
1345
|
-
"aws.management-tools.backint-agent": "architecture/management-tools/backint-agent_64.svg",
|
|
1346
|
-
"aws.management-tools.chatbot": "architecture/management-tools/chatbot_64.svg",
|
|
1347
|
-
"aws.management-tools.cloudformation": "architecture/management-tools/cloudformation_64.svg",
|
|
1348
|
-
"aws.management-tools.cloudtrail": "architecture/management-tools/cloudtrail_64.svg",
|
|
1349
|
-
"aws.management-tools.cloudwatch": "architecture/management-tools/cloudwatch_64.svg",
|
|
1350
|
-
"aws.management-tools.compute-optimizer": "architecture/management-tools/compute-optimizer_64.svg",
|
|
1351
|
-
"aws.management-tools.config": "architecture/management-tools/config_64.svg",
|
|
1352
|
-
"aws.management-tools.console-mobile-application": "architecture/management-tools/console-mobile-application_64.svg",
|
|
1353
|
-
"aws.management-tools.control-tower": "architecture/management-tools/control-tower_64.svg",
|
|
1354
|
-
"aws.management-tools.devops-agent": "architecture/management-tools/devops-agent_64.svg",
|
|
1355
|
-
"aws.management-tools.distro-for-opentelemetry": "architecture/management-tools/distro-for-opentelemetry_64.svg",
|
|
1356
|
-
"aws.management-tools.health-dashboard": "architecture/management-tools/health-dashboard_64.svg",
|
|
1357
|
-
"aws.management-tools.launch-wizard": "architecture/management-tools/launch-wizard_64.svg",
|
|
1358
|
-
"aws.management-tools.license-manager": "architecture/management-tools/license-manager_64.svg",
|
|
1359
|
-
"aws.management-tools.managed-grafana": "architecture/management-tools/managed-grafana_64.svg",
|
|
1360
|
-
"aws.management-tools.managed-service-for-prometheus": "architecture/management-tools/managed-service-for-prometheus_64.svg",
|
|
1361
|
-
"aws.management-tools.management-console": "architecture/management-tools/management-console_64.svg",
|
|
1362
|
-
"aws.management-tools.organizations": "architecture/management-tools/organizations_64.svg",
|
|
1363
|
-
"aws.management-tools.partner-central": "architecture/management-tools/partner-central_64.svg",
|
|
1364
|
-
"aws.management-tools.proton": "architecture/management-tools/proton_64.svg",
|
|
1365
|
-
"aws.management-tools.resilience-hub": "architecture/management-tools/resilience-hub_64.svg",
|
|
1366
|
-
"aws.management-tools.resource-explorer": "architecture/management-tools/resource-explorer_64.svg",
|
|
1367
|
-
"aws.management-tools.service-catalog": "architecture/management-tools/service-catalog_64.svg",
|
|
1368
|
-
"aws.management-tools.service-management-connector": "architecture/management-tools/service-management-connector_64.svg",
|
|
1369
|
-
"aws.management-tools.systems-manager": "architecture/management-tools/systems-manager_64.svg",
|
|
1370
|
-
"aws.management-tools.telco-network-builder": "architecture/management-tools/telco-network-builder_64.svg",
|
|
1371
|
-
"aws.management-tools.trusted-advisor": "architecture/management-tools/trusted-advisor_64.svg",
|
|
1372
|
-
"aws.management-tools.user-notifications": "architecture/management-tools/user-notifications_64.svg",
|
|
1373
|
-
"aws.management-tools.well-architected-tool": "architecture/management-tools/well-architected-tool_64.svg",
|
|
1374
|
-
"aws.media-services.deadline-cloud": "architecture/media-services/deadline-cloud_64.svg",
|
|
1375
|
-
"aws.media-services.elemental-appliances-&-software": "architecture/media-services/elemental-appliances-&-software_64.svg",
|
|
1376
|
-
"aws.media-services.elemental-conductor": "architecture/media-services/elemental-conductor_64.svg",
|
|
1377
|
-
"aws.media-services.elemental-delta": "architecture/media-services/elemental-delta_64.svg",
|
|
1378
|
-
"aws.media-services.elemental-link": "architecture/media-services/elemental-link_64.svg",
|
|
1379
|
-
"aws.media-services.elemental-live": "architecture/media-services/elemental-live_64.svg",
|
|
1380
|
-
"aws.media-services.elemental-mediaconnect": "architecture/media-services/elemental-mediaconnect_64.svg",
|
|
1381
|
-
"aws.media-services.elemental-mediaconvert": "architecture/media-services/elemental-mediaconvert_64.svg",
|
|
1382
|
-
"aws.media-services.elemental-medialive": "architecture/media-services/elemental-medialive_64.svg",
|
|
1383
|
-
"aws.media-services.elemental-mediapackage": "architecture/media-services/elemental-mediapackage_64.svg",
|
|
1384
|
-
"aws.media-services.elemental-mediastore": "architecture/media-services/elemental-mediastore_64.svg",
|
|
1385
|
-
"aws.media-services.elemental-mediatailor": "architecture/media-services/elemental-mediatailor_64.svg",
|
|
1386
|
-
"aws.media-services.elemental-server": "architecture/media-services/elemental-server_64.svg",
|
|
1387
|
-
"aws.media-services.interactive-video-service": "architecture/media-services/interactive-video-service_64.svg",
|
|
1388
|
-
"aws.media-services.kinesis-video-streams": "architecture/media-services/kinesis-video-streams_64.svg",
|
|
1389
|
-
"aws.media-services.thinkbox-deadline": "architecture/media-services/thinkbox-deadline_64.svg",
|
|
1390
|
-
"aws.media-services.thinkbox-frost": "architecture/media-services/thinkbox-frost_64.svg",
|
|
1391
|
-
"aws.media-services.thinkbox-krakatoa": "architecture/media-services/thinkbox-krakatoa_64.svg",
|
|
1392
|
-
"aws.media-services.thinkbox-stoke": "architecture/media-services/thinkbox-stoke_64.svg",
|
|
1393
|
-
"aws.media-services.thinkbox-xmesh": "architecture/media-services/thinkbox-xmesh_64.svg",
|
|
1394
|
-
"aws.migration-modernization.application-discovery-service": "architecture/migration-modernization/application-discovery-service_64.svg",
|
|
1395
|
-
"aws.migration-modernization.application-migration-service": "architecture/migration-modernization/application-migration-service_64.svg",
|
|
1396
|
-
"aws.migration-modernization.data-transfer-terminal": "architecture/migration-modernization/data-transfer-terminal_64.svg",
|
|
1397
|
-
"aws.migration-modernization.datasync": "architecture/migration-modernization/datasync_64.svg",
|
|
1398
|
-
"aws.migration-modernization.mainframe-modernization": "architecture/migration-modernization/mainframe-modernization_64.svg",
|
|
1399
|
-
"aws.migration-modernization.migration-evaluator": "architecture/migration-modernization/migration-evaluator_64.svg",
|
|
1400
|
-
"aws.migration-modernization.migration-hub": "architecture/migration-modernization/migration-hub_64.svg",
|
|
1401
|
-
"aws.migration-modernization.transfer-family": "architecture/migration-modernization/transfer-family_64.svg",
|
|
1402
|
-
"aws.migration-modernization.transform": "architecture/migration-modernization/transform_64.svg",
|
|
1403
|
-
"aws.networking-content-delivery.api-gateway": "architecture/networking-content-delivery/api-gateway_64.svg",
|
|
1404
|
-
"aws.networking-content-delivery.app-mesh": "architecture/networking-content-delivery/app-mesh_64.svg",
|
|
1405
|
-
"aws.networking-content-delivery.application-recovery-controller": "architecture/networking-content-delivery/application-recovery-controller_64.svg",
|
|
1406
|
-
"aws.networking-content-delivery.client-vpn": "architecture/networking-content-delivery/client-vpn_64.svg",
|
|
1407
|
-
"aws.networking-content-delivery.cloud-map": "architecture/networking-content-delivery/cloud-map_64.svg",
|
|
1408
|
-
"aws.networking-content-delivery.cloud-wan": "architecture/networking-content-delivery/cloud-wan_64.svg",
|
|
1409
|
-
"aws.networking-content-delivery.cloudfront": "architecture/networking-content-delivery/cloudfront_64.svg",
|
|
1410
|
-
"aws.networking-content-delivery.direct-connect": "architecture/networking-content-delivery/direct-connect_64.svg",
|
|
1411
|
-
"aws.networking-content-delivery.elastic-load-balancing": "architecture/networking-content-delivery/elastic-load-balancing_64.svg",
|
|
1412
|
-
"aws.networking-content-delivery.global-accelerator": "architecture/networking-content-delivery/global-accelerator_64.svg",
|
|
1413
|
-
"aws.networking-content-delivery.privatelink": "architecture/networking-content-delivery/privatelink_64.svg",
|
|
1414
|
-
"aws.networking-content-delivery.route-53": "architecture/networking-content-delivery/route-53_64.svg",
|
|
1415
|
-
"aws.networking-content-delivery.rtb-fabric": "architecture/networking-content-delivery/rtb-fabric_64.svg",
|
|
1416
|
-
"aws.networking-content-delivery.site-to-site-vpn": "architecture/networking-content-delivery/site-to-site-vpn_64.svg",
|
|
1417
|
-
"aws.networking-content-delivery.transit-gateway": "architecture/networking-content-delivery/transit-gateway_64.svg",
|
|
1418
|
-
"aws.networking-content-delivery.verified-access": "architecture/networking-content-delivery/verified-access_64.svg",
|
|
1419
|
-
"aws.networking-content-delivery.virtual-private-cloud": "architecture/networking-content-delivery/virtual-private-cloud_64.svg",
|
|
1420
|
-
"aws.networking-content-delivery.vpc-lattice": "architecture/networking-content-delivery/vpc-lattice_64.svg",
|
|
1421
|
-
"aws.quantum-technologies.braket": "architecture/quantum-technologies/braket_64.svg",
|
|
1422
|
-
"aws.satellite.ground-station": "architecture/satellite/ground-station_64.svg",
|
|
1423
|
-
"aws.security-identity.artifact": "architecture/security-identity/artifact_64.svg",
|
|
1424
|
-
"aws.security-identity.audit-manager": "architecture/security-identity/audit-manager_64.svg",
|
|
1425
|
-
"aws.security-identity.certificate-manager": "architecture/security-identity/certificate-manager_64.svg",
|
|
1426
|
-
"aws.security-identity.cloud-directory": "architecture/security-identity/cloud-directory_64.svg",
|
|
1427
|
-
"aws.security-identity.cloudhsm": "architecture/security-identity/cloudhsm_64.svg",
|
|
1428
|
-
"aws.security-identity.cognito": "architecture/security-identity/cognito_64.svg",
|
|
1429
|
-
"aws.security-identity.detective": "architecture/security-identity/detective_64.svg",
|
|
1430
|
-
"aws.security-identity.directory-service": "architecture/security-identity/directory-service_64.svg",
|
|
1431
|
-
"aws.security-identity.firewall-manager": "architecture/security-identity/firewall-manager_64.svg",
|
|
1432
|
-
"aws.security-identity.guardduty": "architecture/security-identity/guardduty_64.svg",
|
|
1433
|
-
"aws.security-identity.iam-identity-center": "architecture/security-identity/iam-identity-center_64.svg",
|
|
1434
|
-
"aws.security-identity.identity-and-access-management": "architecture/security-identity/identity-and-access-management_64.svg",
|
|
1435
|
-
"aws.security-identity.inspector": "architecture/security-identity/inspector_64.svg",
|
|
1436
|
-
"aws.security-identity.key-management-service": "architecture/security-identity/key-management-service_64.svg",
|
|
1437
|
-
"aws.security-identity.macie": "architecture/security-identity/macie_64.svg",
|
|
1438
|
-
"aws.security-identity.network-firewall": "architecture/security-identity/network-firewall_64.svg",
|
|
1439
|
-
"aws.security-identity.payment-cryptography": "architecture/security-identity/payment-cryptography_64.svg",
|
|
1440
|
-
"aws.security-identity.private-certificate-authority": "architecture/security-identity/private-certificate-authority_64.svg",
|
|
1441
|
-
"aws.security-identity.resource-access-manager": "architecture/security-identity/resource-access-manager_64.svg",
|
|
1442
|
-
"aws.security-identity.secrets-manager": "architecture/security-identity/secrets-manager_64.svg",
|
|
1443
|
-
"aws.security-identity.security-agent": "architecture/security-identity/security-agent_64.svg",
|
|
1444
|
-
"aws.security-identity.security-hub": "architecture/security-identity/security-hub_64.svg",
|
|
1445
|
-
"aws.security-identity.security-incident-response": "architecture/security-identity/security-incident-response_64.svg",
|
|
1446
|
-
"aws.security-identity.security-lake": "architecture/security-identity/security-lake_64.svg",
|
|
1447
|
-
"aws.security-identity.shield": "architecture/security-identity/shield_64.svg",
|
|
1448
|
-
"aws.security-identity.signer": "architecture/security-identity/signer_64.svg",
|
|
1449
|
-
"aws.security-identity.verified-permissions": "architecture/security-identity/verified-permissions_64.svg",
|
|
1450
|
-
"aws.security-identity.waf": "architecture/security-identity/waf_64.svg",
|
|
1451
|
-
"aws.storage.backup": "architecture/storage/backup_64.svg",
|
|
1452
|
-
"aws.storage.efs": "architecture/storage/efs_64.svg",
|
|
1453
|
-
"aws.storage.elastic-block-store": "architecture/storage/elastic-block-store_64.svg",
|
|
1454
|
-
"aws.storage.elastic-disaster-recovery": "architecture/storage/elastic-disaster-recovery_64.svg",
|
|
1455
|
-
"aws.storage.file-cache": "architecture/storage/file-cache_64.svg",
|
|
1456
|
-
"aws.storage.fsx-for-lustre": "architecture/storage/fsx-for-lustre_64.svg",
|
|
1457
|
-
"aws.storage.fsx-for-netapp-ontap": "architecture/storage/fsx-for-netapp-ontap_64.svg",
|
|
1458
|
-
"aws.storage.fsx-for-openzfs": "architecture/storage/fsx-for-openzfs_64.svg",
|
|
1459
|
-
"aws.storage.fsx-for-wfs": "architecture/storage/fsx-for-wfs_64.svg",
|
|
1460
|
-
"aws.storage.fsx": "architecture/storage/fsx_64.svg",
|
|
1461
|
-
"aws.storage.s3-on-outposts": "architecture/storage/s3-on-outposts_64.svg",
|
|
1462
|
-
"aws.storage.simple-storage-service-glacier": "architecture/storage/simple-storage-service-glacier_64.svg",
|
|
1463
|
-
"aws.storage.simple-storage-service": "architecture/storage/simple-storage-service_64.svg",
|
|
1464
|
-
"aws.storage.snowball-edge": "architecture/storage/snowball-edge_64.svg",
|
|
1465
|
-
"aws.storage.snowball": "architecture/storage/snowball_64.svg",
|
|
1466
|
-
"aws.storage.storage-gateway": "architecture/storage/storage-gateway_64.svg",
|
|
1467
|
-
"aws.analytics.athena.data-source-connectors": "resource/analytics/athena_data-source-connectors_48.svg",
|
|
1468
|
-
"aws.analytics.cloudsearch.search-documents": "resource/analytics/cloudsearch_search-documents_48.svg",
|
|
1469
|
-
"aws.analytics.data-exchange-for-apis.data-exchange-for-apis": "resource/analytics/data-exchange-for-apis_48.svg",
|
|
1470
|
-
"aws.analytics.datazone.business-data-catalog": "resource/analytics/datazone_business-data-catalog_48.svg",
|
|
1471
|
-
"aws.analytics.datazone.data-portal": "resource/analytics/datazone_data-portal_48.svg",
|
|
1472
|
-
"aws.analytics.datazone.data-projects": "resource/analytics/datazone_data-projects_48.svg",
|
|
1473
|
-
"aws.analytics.emr.cluster": "resource/analytics/emr_cluster_48.svg",
|
|
1474
|
-
"aws.analytics.emr.emr-engine": "resource/analytics/emr_emr-engine_48.svg",
|
|
1475
|
-
"aws.analytics.emr.hdfs-cluster": "resource/analytics/emr_hdfs-cluster_48.svg",
|
|
1476
|
-
"aws.analytics.glue.aws-glue-for-ray": "resource/analytics/glue_aws-glue-for-ray_48.svg",
|
|
1477
|
-
"aws.analytics.glue.crawler": "resource/analytics/glue_crawler_48.svg",
|
|
1478
|
-
"aws.analytics.glue.data-catalog": "resource/analytics/glue_data-catalog_48.svg",
|
|
1479
|
-
"aws.analytics.glue.data-quality": "resource/analytics/glue_data-quality_48.svg",
|
|
1480
|
-
"aws.analytics.lake-formation.data-lake": "resource/analytics/lake-formation_data-lake_48.svg",
|
|
1481
|
-
"aws.analytics.msk.amazon-msk-connect": "resource/analytics/msk_amazon-msk-connect_48.svg",
|
|
1482
|
-
"aws.analytics.opensearch-service.cluster-administrator-node": "resource/analytics/opensearch-service_cluster-administrator-node_48.svg",
|
|
1483
|
-
"aws.analytics.opensearch-service.data-node": "resource/analytics/opensearch-service_data-node_48.svg",
|
|
1484
|
-
"aws.analytics.opensearch-service.index": "resource/analytics/opensearch-service_index_48.svg",
|
|
1485
|
-
"aws.analytics.opensearch-service.observability": "resource/analytics/opensearch-service_observability_48.svg",
|
|
1486
|
-
"aws.analytics.opensearch-service.opensearch-dashboards": "resource/analytics/opensearch-service_opensearch-dashboards_48.svg",
|
|
1487
|
-
"aws.analytics.opensearch-service.opensearch-ingestion": "resource/analytics/opensearch-service_opensearch-ingestion_48.svg",
|
|
1488
|
-
"aws.analytics.opensearch-service.traces": "resource/analytics/opensearch-service_traces_48.svg",
|
|
1489
|
-
"aws.analytics.opensearch-service.ultrawarm-node": "resource/analytics/opensearch-service_ultrawarm-node_48.svg",
|
|
1490
|
-
"aws.analytics.redshift.auto-copy": "resource/analytics/redshift_auto-copy_48.svg",
|
|
1491
|
-
"aws.analytics.redshift.data-sharing-governance": "resource/analytics/redshift_data-sharing-governance_48.svg",
|
|
1492
|
-
"aws.analytics.redshift.dense-compute-node": "resource/analytics/redshift_dense-compute-node_48.svg",
|
|
1493
|
-
"aws.analytics.redshift.dense-storage-node": "resource/analytics/redshift_dense-storage-node_48.svg",
|
|
1494
|
-
"aws.analytics.redshift.ml": "resource/analytics/redshift_ml_48.svg",
|
|
1495
|
-
"aws.analytics.redshift.query-editor-v2.0": "resource/analytics/redshift_query-editor-v2.0_48.svg",
|
|
1496
|
-
"aws.analytics.redshift.ra3": "resource/analytics/redshift_ra3_48.svg",
|
|
1497
|
-
"aws.analytics.redshift.streaming-ingestion": "resource/analytics/redshift_streaming-ingestion_48.svg",
|
|
1498
|
-
"aws.application-integration.eventbridge-event.eventbridge-event": "resource/application-integration/eventbridge-event_48.svg",
|
|
1499
|
-
"aws.application-integration.eventbridge.custom-event-bus": "resource/application-integration/eventbridge_custom-event-bus_48.svg",
|
|
1500
|
-
"aws.application-integration.eventbridge.default-event-bus": "resource/application-integration/eventbridge_default-event-bus_48.svg",
|
|
1501
|
-
"aws.application-integration.eventbridge.pipes": "resource/application-integration/eventbridge_pipes_48.svg",
|
|
1502
|
-
"aws.application-integration.eventbridge.rule": "resource/application-integration/eventbridge_rule_48.svg",
|
|
1503
|
-
"aws.application-integration.eventbridge.saas-partner-event": "resource/application-integration/eventbridge_saas-partner-event_48.svg",
|
|
1504
|
-
"aws.application-integration.eventbridge.scheduler": "resource/application-integration/eventbridge_scheduler_48.svg",
|
|
1505
|
-
"aws.application-integration.eventbridge.schema-registry": "resource/application-integration/eventbridge_schema-registry_48.svg",
|
|
1506
|
-
"aws.application-integration.eventbridge.schema": "resource/application-integration/eventbridge_schema_48.svg",
|
|
1507
|
-
"aws.application-integration.mq.broker": "resource/application-integration/mq_broker_48.svg",
|
|
1508
|
-
"aws.application-integration.simple-notification-service.email-notification": "resource/application-integration/simple-notification-service_email-notification_48.svg",
|
|
1509
|
-
"aws.application-integration.simple-notification-service.http-notification": "resource/application-integration/simple-notification-service_http-notification_48.svg",
|
|
1510
|
-
"aws.application-integration.simple-notification-service.topic": "resource/application-integration/simple-notification-service_topic_48.svg",
|
|
1511
|
-
"aws.application-integration.simple-queue-service.message": "resource/application-integration/simple-queue-service_message_48.svg",
|
|
1512
|
-
"aws.application-integration.simple-queue-service.queue": "resource/application-integration/simple-queue-service_queue_48.svg",
|
|
1513
|
-
"aws.artificial-intelligence.devops-guru.insights": "resource/artificial-intelligence/devops-guru_insights_48.svg",
|
|
1514
|
-
"aws.artificial-intelligence.rekognition.image": "resource/artificial-intelligence/rekognition_image_48.svg",
|
|
1515
|
-
"aws.artificial-intelligence.rekognition.video": "resource/artificial-intelligence/rekognition_video_48.svg",
|
|
1516
|
-
"aws.artificial-intelligence.sagemaker-ai.canvas": "resource/artificial-intelligence/sagemaker-ai_canvas_48.svg",
|
|
1517
|
-
"aws.artificial-intelligence.sagemaker-ai.geospatial-ml": "resource/artificial-intelligence/sagemaker-ai_geospatial-ml_48.svg",
|
|
1518
|
-
"aws.artificial-intelligence.sagemaker-ai.model": "resource/artificial-intelligence/sagemaker-ai_model_48.svg",
|
|
1519
|
-
"aws.artificial-intelligence.sagemaker-ai.notebook": "resource/artificial-intelligence/sagemaker-ai_notebook_48.svg",
|
|
1520
|
-
"aws.artificial-intelligence.sagemaker-ai.shadow-testing": "resource/artificial-intelligence/sagemaker-ai_shadow-testing_48.svg",
|
|
1521
|
-
"aws.artificial-intelligence.sagemaker-ai.train": "resource/artificial-intelligence/sagemaker-ai_train_48.svg",
|
|
1522
|
-
"aws.artificial-intelligence.textract.analyze-lending": "resource/artificial-intelligence/textract_analyze-lending_48.svg",
|
|
1523
|
-
"aws.blockchain.managed-blockchain.blockchain": "resource/blockchain/managed-blockchain_blockchain_48.svg",
|
|
1524
|
-
"aws.business-applications.pinpoint.journey": "resource/business-applications/pinpoint_journey_48.svg",
|
|
1525
|
-
"aws.business-applications.simple-email-service.email": "resource/business-applications/simple-email-service_email_48.svg",
|
|
1526
|
-
"aws.compute.ec2.ami": "resource/compute/ec2_ami_48.svg",
|
|
1527
|
-
"aws.compute.ec2.auto-scaling": "resource/compute/ec2_auto-scaling_48.svg",
|
|
1528
|
-
"aws.compute.ec2.aws-microservice-extractor-for-.net": "resource/compute/ec2_aws-microservice-extractor-for-.net_48.svg",
|
|
1529
|
-
"aws.compute.ec2.db-instance": "resource/compute/ec2_db-instance_48.svg",
|
|
1530
|
-
"aws.compute.ec2.elastic-ip-address": "resource/compute/ec2_elastic-ip-address_48.svg",
|
|
1531
|
-
"aws.compute.ec2.instance-with-cloudwatch": "resource/compute/ec2_instance-with-cloudwatch_48.svg",
|
|
1532
|
-
"aws.compute.ec2.instance": "resource/compute/ec2_instance_48.svg",
|
|
1533
|
-
"aws.compute.ec2.instances": "resource/compute/ec2_instances_48.svg",
|
|
1534
|
-
"aws.compute.ec2.rescue": "resource/compute/ec2_rescue_48.svg",
|
|
1535
|
-
"aws.compute.ec2.spot-instance": "resource/compute/ec2_spot-instance_48.svg",
|
|
1536
|
-
"aws.compute.elastic-beanstalk.application": "resource/compute/elastic-beanstalk_application_48.svg",
|
|
1537
|
-
"aws.compute.elastic-beanstalk.deployment": "resource/compute/elastic-beanstalk_deployment_48.svg",
|
|
1538
|
-
"aws.compute.lambda.lambda-function": "resource/compute/lambda_lambda-function_48.svg",
|
|
1539
|
-
"aws.containers.elastic-container-registry.image": "resource/containers/elastic-container-registry_image_48.svg",
|
|
1540
|
-
"aws.containers.elastic-container-registry.registry": "resource/containers/elastic-container-registry_registry_48.svg",
|
|
1541
|
-
"aws.containers.elastic-container-service.container-1": "resource/containers/elastic-container-service_container-1_48.svg",
|
|
1542
|
-
"aws.containers.elastic-container-service.container-2": "resource/containers/elastic-container-service_container-2_48.svg",
|
|
1543
|
-
"aws.containers.elastic-container-service.container-3": "resource/containers/elastic-container-service_container-3_48.svg",
|
|
1544
|
-
"aws.containers.elastic-container-service.copiiot-cli": "resource/containers/elastic-container-service_copiiot-cli_48.svg",
|
|
1545
|
-
"aws.containers.elastic-container-service.ecs-service-connect": "resource/containers/elastic-container-service_ecs-service-connect_48.svg",
|
|
1546
|
-
"aws.containers.elastic-container-service.service": "resource/containers/elastic-container-service_service_48.svg",
|
|
1547
|
-
"aws.containers.elastic-container-service.task": "resource/containers/elastic-container-service_task_48.svg",
|
|
1548
|
-
"aws.containers.elastic-kubernetes-service.eks-on-outposts": "resource/containers/elastic-kubernetes-service_eks-on-outposts_48.svg",
|
|
1549
|
-
"aws.databases.aurora-instance.aurora-instance": "resource/databases/aurora-instance_48.svg",
|
|
1550
|
-
"aws.databases.aurora-mariadb-instance-alternate.aurora-mariadb-instance-alternate": "resource/databases/aurora-mariadb-instance-alternate_48.svg",
|
|
1551
|
-
"aws.databases.aurora-mariadb-instance.aurora-mariadb-instance": "resource/databases/aurora-mariadb-instance_48.svg",
|
|
1552
|
-
"aws.databases.aurora-mysql-instance-alternate.aurora-mysql-instance-alternate": "resource/databases/aurora-mysql-instance-alternate_48.svg",
|
|
1553
|
-
"aws.databases.aurora-mysql-instance.aurora-mysql-instance": "resource/databases/aurora-mysql-instance_48.svg",
|
|
1554
|
-
"aws.databases.aurora-oracle-instance-alternate.aurora-oracle-instance-alternate": "resource/databases/aurora-oracle-instance-alternate_48.svg",
|
|
1555
|
-
"aws.databases.aurora-oracle-instance.aurora-oracle-instance": "resource/databases/aurora-oracle-instance_48.svg",
|
|
1556
|
-
"aws.databases.aurora-piops-instance.aurora-piops-instance": "resource/databases/aurora-piops-instance_48.svg",
|
|
1557
|
-
"aws.databases.aurora-postgresql-instance-alternate.aurora-postgresql-instance-alternate": "resource/databases/aurora-postgresql-instance-alternate_48.svg",
|
|
1558
|
-
"aws.databases.aurora-postgresql-instance.aurora-postgresql-instance": "resource/databases/aurora-postgresql-instance_48.svg",
|
|
1559
|
-
"aws.databases.aurora-sql-server-instance-alternate.aurora-sql-server-instance-alternate": "resource/databases/aurora-sql-server-instance-alternate_48.svg",
|
|
1560
|
-
"aws.databases.aurora-sql-server-instance.aurora-sql-server-instance": "resource/databases/aurora-sql-server-instance_48.svg",
|
|
1561
|
-
"aws.databases.aurora.amazon-aurora-instance-alternate": "resource/databases/aurora_amazon-aurora-instance-alternate_48.svg",
|
|
1562
|
-
"aws.databases.aurora.amazon-rds-instance-aternate": "resource/databases/aurora_amazon-rds-instance-aternate_48.svg",
|
|
1563
|
-
"aws.databases.aurora.amazon-rds-instance": "resource/databases/aurora_amazon-rds-instance_48.svg",
|
|
1564
|
-
"aws.databases.aurora.trusted-language-extensions-for-postgresql": "resource/databases/aurora_trusted-language-extensions-for-postgresql_48.svg",
|
|
1565
|
-
"aws.databases.database-migration-service.database-migration-workflow-or-job": "resource/databases/database-migration-service_database-migration-workflow-or-job_48.svg",
|
|
1566
|
-
"aws.databases.documentdb.elastic-clusters": "resource/databases/documentdb_elastic-clusters_48.svg",
|
|
1567
|
-
"aws.databases.dynamodb.amazon-dynamodb-accelerator": "resource/databases/dynamodb_amazon-dynamodb-accelerator_48.svg",
|
|
1568
|
-
"aws.databases.dynamodb.attribute": "resource/databases/dynamodb_attribute_48.svg",
|
|
1569
|
-
"aws.databases.dynamodb.attributes": "resource/databases/dynamodb_attributes_48.svg",
|
|
1570
|
-
"aws.databases.dynamodb.global-secondary-index": "resource/databases/dynamodb_global-secondary-index_48.svg",
|
|
1571
|
-
"aws.databases.dynamodb.item": "resource/databases/dynamodb_item_48.svg",
|
|
1572
|
-
"aws.databases.dynamodb.items": "resource/databases/dynamodb_items_48.svg",
|
|
1573
|
-
"aws.databases.dynamodb.standard-access-table-class": "resource/databases/dynamodb_standard-access-table-class_48.svg",
|
|
1574
|
-
"aws.databases.dynamodb.standard-infrequent-access-table-class": "resource/databases/dynamodb_standard-infrequent-access-table-class_48.svg",
|
|
1575
|
-
"aws.databases.dynamodb.stream": "resource/databases/dynamodb_stream_48.svg",
|
|
1576
|
-
"aws.databases.dynamodb.table": "resource/databases/dynamodb_table_48.svg",
|
|
1577
|
-
"aws.databases.elasticache.cache-node": "resource/databases/elasticache_cache-node_48.svg",
|
|
1578
|
-
"aws.databases.elasticache.elasticache-for-memcached": "resource/databases/elasticache_elasticache-for-memcached_48.svg",
|
|
1579
|
-
"aws.databases.elasticache.elasticache-for-redis": "resource/databases/elasticache_elasticache-for-redis_48.svg",
|
|
1580
|
-
"aws.databases.elasticache.elasticache-for-valkey": "resource/databases/elasticache_elasticache-for-valkey_48.svg",
|
|
1581
|
-
"aws.databases.rds-proxy-instance-alternate.rds-proxy-instance-alternate": "resource/databases/rds-proxy-instance-alternate_48.svg",
|
|
1582
|
-
"aws.databases.rds-proxy-instance.rds-proxy-instance": "resource/databases/rds-proxy-instance_48.svg",
|
|
1583
|
-
"aws.databases.rds.blue-green-deployments": "resource/databases/rds_blue-green-deployments_48.svg",
|
|
1584
|
-
"aws.databases.rds.multi-az-db-cluster": "resource/databases/rds_multi-az-db-cluster_48.svg",
|
|
1585
|
-
"aws.databases.rds.multi-az": "resource/databases/rds_multi-az_48.svg",
|
|
1586
|
-
"aws.databases.rds.optimized-writes": "resource/databases/rds_optimized-writes_48.svg",
|
|
1587
|
-
"aws.databases.rds.trusted-language-extensions-for-postgresql": "resource/databases/rds_trusted-language-extensions-for-postgresql_48.svg",
|
|
1588
|
-
"aws.developer-tools.cloud9.cloud9": "resource/developer-tools/cloud9_cloud9_48.svg",
|
|
1589
|
-
"aws.front-end-web-mobile.amplify.aws-amplify-studio": "resource/front-end-web-mobile/amplify_aws-amplify-studio_48.svg",
|
|
1590
|
-
"aws.front-end-web-mobile.location-service.geofence": "resource/front-end-web-mobile/location-service_geofence_48.svg",
|
|
1591
|
-
"aws.front-end-web-mobile.location-service.map ": "resource/front-end-web-mobile/location-service_map _48.svg",
|
|
1592
|
-
"aws.front-end-web-mobile.location-service.place": "resource/front-end-web-mobile/location-service_place_48.svg",
|
|
1593
|
-
"aws.front-end-web-mobile.location-service.routes": "resource/front-end-web-mobile/location-service_routes_48.svg",
|
|
1594
|
-
"aws.front-end-web-mobile.location-service.track ": "resource/front-end-web-mobile/location-service_track _48.svg",
|
|
1595
|
-
"aws.general.alert.alert": "resource/general/alert_48_light.svg",
|
|
1596
|
-
"aws.general.authenticated-user.authenticated-user": "resource/general/authenticated-user_48_light.svg",
|
|
1597
|
-
"aws.general.camera.camera": "resource/general/camera_48_light.svg",
|
|
1598
|
-
"aws.general.chat.chat": "resource/general/chat_48_light.svg",
|
|
1599
|
-
"aws.general.client.client": "resource/general/client_48_light.svg",
|
|
1600
|
-
"aws.general.cold-storage.cold-storage": "resource/general/cold-storage_48_light.svg",
|
|
1601
|
-
"aws.general.credentials.credentials": "resource/general/credentials_48_light.svg",
|
|
1602
|
-
"aws.general.data-stream.data-stream": "resource/general/data-stream_48_light.svg",
|
|
1603
|
-
"aws.general.data-table.data-table": "resource/general/data-table_48_light.svg",
|
|
1604
|
-
"aws.general.database.database": "resource/general/database_48_light.svg",
|
|
1605
|
-
"aws.general.disk.disk": "resource/general/disk_48_light.svg",
|
|
1606
|
-
"aws.general.document.document": "resource/general/document_48_light.svg",
|
|
1607
|
-
"aws.general.documents.documents": "resource/general/documents_48_light.svg",
|
|
1608
|
-
"aws.general.email.email": "resource/general/email_48_light.svg",
|
|
1609
|
-
"aws.general.firewall.firewall": "resource/general/firewall_48_light.svg",
|
|
1610
|
-
"aws.general.folder.folder": "resource/general/folder_48_light.svg",
|
|
1611
|
-
"aws.general.folders.folders": "resource/general/folders_48_light.svg",
|
|
1612
|
-
"aws.general.forums.forums": "resource/general/forums_48_light.svg",
|
|
1613
|
-
"aws.general.gear.gear": "resource/general/gear_48_light.svg",
|
|
1614
|
-
"aws.general.generic-application.generic-application": "resource/general/generic-application_48_light.svg",
|
|
1615
|
-
"aws.general.git-repository.git-repository": "resource/general/git-repository_48_light.svg",
|
|
1616
|
-
"aws.general.globe.globe": "resource/general/globe_48_light.svg",
|
|
1617
|
-
"aws.general.internet-alt1.internet-alt1": "resource/general/internet-alt1_48_light.svg",
|
|
1618
|
-
"aws.general.internet-alt2.internet-alt2": "resource/general/internet-alt2_48_light.svg",
|
|
1619
|
-
"aws.general.internet.internet": "resource/general/internet_48_light.svg",
|
|
1620
|
-
"aws.general.json-script.json-script": "resource/general/json-script_48_light.svg",
|
|
1621
|
-
"aws.general.logs.logs": "resource/general/logs_48_light.svg",
|
|
1622
|
-
"aws.general.magnifying-glass.magnifying-glass": "resource/general/magnifying-glass_48_light.svg",
|
|
1623
|
-
"aws.general.management-console.management-console": "resource/general/management-console_48_light.svg",
|
|
1624
|
-
"aws.general.metrics.metrics": "resource/general/metrics_48_light.svg",
|
|
1625
|
-
"aws.general.mobile-client.mobile-client": "resource/general/mobile-client_48_light.svg",
|
|
1626
|
-
"aws.general.multimedia.multimedia": "resource/general/multimedia_48_light.svg",
|
|
1627
|
-
"aws.general.office-building.office-building": "resource/general/office-building_48_light.svg",
|
|
1628
|
-
"aws.general.programming-language.programming-language": "resource/general/programming-language_48_light.svg",
|
|
1629
|
-
"aws.general.question.question": "resource/general/question_48_light.svg",
|
|
1630
|
-
"aws.general.recover.recover": "resource/general/recover_48_light.svg",
|
|
1631
|
-
"aws.general.saml-token.saml-token": "resource/general/saml-token_48_light.svg",
|
|
1632
|
-
"aws.general.sdk.sdk": "resource/general/sdk_48_light.svg",
|
|
1633
|
-
"aws.general.server.server": "resource/general/server_48_light.svg",
|
|
1634
|
-
"aws.general.servers.servers": "resource/general/servers_48_light.svg",
|
|
1635
|
-
"aws.general.shield.shield": "resource/general/shield_48_light.svg",
|
|
1636
|
-
"aws.general.source-code.source-code": "resource/general/source-code_48_light.svg",
|
|
1637
|
-
"aws.general.ssl-padlock.ssl-padlock": "resource/general/ssl-padlock_48_light.svg",
|
|
1638
|
-
"aws.general.tape-storage.tape-storage": "resource/general/tape-storage_48_light.svg",
|
|
1639
|
-
"aws.general.toolkit.toolkit": "resource/general/toolkit_48_light.svg",
|
|
1640
|
-
"aws.general.user.user": "resource/general/user_48_light.svg",
|
|
1641
|
-
"aws.general.users.users": "resource/general/users_48_light.svg",
|
|
1642
|
-
"aws.iot.iot-core.device-advisor": "resource/iot/iot-core_device-advisor_48.svg",
|
|
1643
|
-
"aws.iot.iot-core.device-location": "resource/iot/iot-core_device-location_48.svg",
|
|
1644
|
-
"aws.iot.iot-device-defender.iot-device-jobs": "resource/iot/iot-device-defender_iot-device-jobs_48.svg",
|
|
1645
|
-
"aws.iot.iot-device-management.fleet-hub": "resource/iot/iot-device-management_fleet-hub_48.svg",
|
|
1646
|
-
"aws.iot.iot-device-tester.iot-device-tester": "resource/iot/iot-device-tester_48.svg",
|
|
1647
|
-
"aws.iot.iot-greengrass.artifact": "resource/iot/iot-greengrass_artifact_48.svg",
|
|
1648
|
-
"aws.iot.iot-greengrass.component-machine-learning": "resource/iot/iot-greengrass_component-machine-learning_48.svg",
|
|
1649
|
-
"aws.iot.iot-greengrass.component-nucleus": "resource/iot/iot-greengrass_component-nucleus_48.svg",
|
|
1650
|
-
"aws.iot.iot-greengrass.component-private": "resource/iot/iot-greengrass_component-private_48.svg",
|
|
1651
|
-
"aws.iot.iot-greengrass.component-public": "resource/iot/iot-greengrass_component-public_48.svg",
|
|
1652
|
-
"aws.iot.iot-greengrass.component": "resource/iot/iot-greengrass_component_48.svg",
|
|
1653
|
-
"aws.iot.iot-greengrass.connector": "resource/iot/iot-greengrass_connector_48.svg",
|
|
1654
|
-
"aws.iot.iot-greengrass.interprocess-communication": "resource/iot/iot-greengrass_interprocess-communication_48.svg",
|
|
1655
|
-
"aws.iot.iot-greengrass.protocol": "resource/iot/iot-greengrass_protocol_48.svg",
|
|
1656
|
-
"aws.iot.iot-greengrass.recipe": "resource/iot/iot-greengrass_recipe_48.svg",
|
|
1657
|
-
"aws.iot.iot-greengrass.stream-manager": "resource/iot/iot-greengrass_stream-manager_48.svg",
|
|
1658
|
-
"aws.iot.iot-hardware-board.iot-hardware-board": "resource/iot/iot-hardware-board_48.svg",
|
|
1659
|
-
"aws.iot.iot-rule.iot-rule": "resource/iot/iot-rule_48.svg",
|
|
1660
|
-
"aws.iot.iot-sitewise.asset-hierarchy": "resource/iot/iot-sitewise_asset-hierarchy_48.svg",
|
|
1661
|
-
"aws.iot.iot-sitewise.asset-model": "resource/iot/iot-sitewise_asset-model_48.svg",
|
|
1662
|
-
"aws.iot.iot-sitewise.asset-properties": "resource/iot/iot-sitewise_asset-properties_48.svg",
|
|
1663
|
-
"aws.iot.iot-sitewise.asset": "resource/iot/iot-sitewise_asset_48.svg",
|
|
1664
|
-
"aws.iot.iot-sitewise.data-streams": "resource/iot/iot-sitewise_data-streams_48.svg",
|
|
1665
|
-
"aws.iot.iot.action": "resource/iot/iot_action_48.svg",
|
|
1666
|
-
"aws.iot.iot.actuator": "resource/iot/iot_actuator_48.svg",
|
|
1667
|
-
"aws.iot.iot.alexa_enabled-device": "resource/iot/iot_alexa_enabled-device_48.svg",
|
|
1668
|
-
"aws.iot.iot.alexa_skill": "resource/iot/iot_alexa_skill_48.svg",
|
|
1669
|
-
"aws.iot.iot.alexa_voice-service": "resource/iot/iot_alexa_voice-service_48.svg",
|
|
1670
|
-
"aws.iot.iot.certificate": "resource/iot/iot_certificate_48.svg",
|
|
1671
|
-
"aws.iot.iot.desired-state": "resource/iot/iot_desired-state_48.svg",
|
|
1672
|
-
"aws.iot.iot.device-gateway": "resource/iot/iot_device-gateway_48.svg",
|
|
1673
|
-
"aws.iot.iot.echo": "resource/iot/iot_echo_48.svg",
|
|
1674
|
-
"aws.iot.iot.fire-tv_stick": "resource/iot/iot_fire-tv_stick_48.svg",
|
|
1675
|
-
"aws.iot.iot.fire_tv": "resource/iot/iot_fire_tv_48.svg",
|
|
1676
|
-
"aws.iot.iot.http2-protocol": "resource/iot/iot_http2-protocol_48.svg",
|
|
1677
|
-
"aws.iot.iot.http_protocol": "resource/iot/iot_http_protocol_48.svg",
|
|
1678
|
-
"aws.iot.iot.lambda_function": "resource/iot/iot_lambda_function_48.svg",
|
|
1679
|
-
"aws.iot.iot.lorawan-protocol": "resource/iot/iot_lorawan-protocol_48.svg",
|
|
1680
|
-
"aws.iot.iot.mqtt_protocol": "resource/iot/iot_mqtt_protocol_48.svg",
|
|
1681
|
-
"aws.iot.iot.over-air-update": "resource/iot/iot_over-air-update_48.svg",
|
|
1682
|
-
"aws.iot.iot.policy": "resource/iot/iot_policy_48.svg",
|
|
1683
|
-
"aws.iot.iot.reported-state": "resource/iot/iot_reported-state_48.svg",
|
|
1684
|
-
"aws.iot.iot.sailboat": "resource/iot/iot_sailboat_48.svg",
|
|
1685
|
-
"aws.iot.iot.sensor": "resource/iot/iot_sensor_48.svg",
|
|
1686
|
-
"aws.iot.iot.servo": "resource/iot/iot_servo_48.svg",
|
|
1687
|
-
"aws.iot.iot.shadow": "resource/iot/iot_shadow_48.svg",
|
|
1688
|
-
"aws.iot.iot.simulator": "resource/iot/iot_simulator_48.svg",
|
|
1689
|
-
"aws.iot.iot.thing_bank": "resource/iot/iot_thing_bank_48.svg",
|
|
1690
|
-
"aws.iot.iot.thing_bicycle": "resource/iot/iot_thing_bicycle_48.svg",
|
|
1691
|
-
"aws.iot.iot.thing_camera": "resource/iot/iot_thing_camera_48.svg",
|
|
1692
|
-
"aws.iot.iot.thing_car": "resource/iot/iot_thing_car_48.svg",
|
|
1693
|
-
"aws.iot.iot.thing_cart": "resource/iot/iot_thing_cart_48.svg",
|
|
1694
|
-
"aws.iot.iot.thing_coffee-pot": "resource/iot/iot_thing_coffee-pot_48.svg",
|
|
1695
|
-
"aws.iot.iot.thing_door-lock": "resource/iot/iot_thing_door-lock_48.svg",
|
|
1696
|
-
"aws.iot.iot.thing_factory": "resource/iot/iot_thing_factory_48.svg",
|
|
1697
|
-
"aws.iot.iot.thing_freertos-device": "resource/iot/iot_thing_freertos-device_48.svg",
|
|
1698
|
-
"aws.iot.iot.thing_generic": "resource/iot/iot_thing_generic_48.svg",
|
|
1699
|
-
"aws.iot.iot.thing_house": "resource/iot/iot_thing_house_48.svg",
|
|
1700
|
-
"aws.iot.iot.thing_humidity-sensor": "resource/iot/iot_thing_humidity-sensor_48.svg",
|
|
1701
|
-
"aws.iot.iot.thing_industrial-pc": "resource/iot/iot_thing_industrial-pc_48.svg",
|
|
1702
|
-
"aws.iot.iot.thing_lightbulb": "resource/iot/iot_thing_lightbulb_48.svg",
|
|
1703
|
-
"aws.iot.iot.thing_medical-emergency": "resource/iot/iot_thing_medical-emergency_48.svg",
|
|
1704
|
-
"aws.iot.iot.thing_plc": "resource/iot/iot_thing_plc_48.svg",
|
|
1705
|
-
"aws.iot.iot.thing_police-emergency": "resource/iot/iot_thing_police-emergency_48.svg",
|
|
1706
|
-
"aws.iot.iot.thing_relay": "resource/iot/iot_thing_relay_48.svg",
|
|
1707
|
-
"aws.iot.iot.thing_stacklight": "resource/iot/iot_thing_stacklight_48.svg",
|
|
1708
|
-
"aws.iot.iot.thing_temperature-humidity-sensor": "resource/iot/iot_thing_temperature-humidity-sensor_48.svg",
|
|
1709
|
-
"aws.iot.iot.thing_temperature-sensor": "resource/iot/iot_thing_temperature-sensor_48.svg",
|
|
1710
|
-
"aws.iot.iot.thing_temperature-vibration-sensor": "resource/iot/iot_thing_temperature-vibration-sensor_48.svg",
|
|
1711
|
-
"aws.iot.iot.thing_thermostat": "resource/iot/iot_thing_thermostat_48.svg",
|
|
1712
|
-
"aws.iot.iot.thing_travel": "resource/iot/iot_thing_travel_48.svg",
|
|
1713
|
-
"aws.iot.iot.thing_utility": "resource/iot/iot_thing_utility_48.svg",
|
|
1714
|
-
"aws.iot.iot.thing_vibration-sensor": "resource/iot/iot_thing_vibration-sensor_48.svg",
|
|
1715
|
-
"aws.iot.iot.thing_windfarm": "resource/iot/iot_thing_windfarm_48.svg",
|
|
1716
|
-
"aws.iot.iot.topic": "resource/iot/iot_topic_48.svg",
|
|
1717
|
-
"aws.management-governance.cloudformation.change-set": "resource/management-governance/cloudformation_change-set_48.svg",
|
|
1718
|
-
"aws.management-governance.cloudformation.stack": "resource/management-governance/cloudformation_stack_48.svg",
|
|
1719
|
-
"aws.management-governance.cloudformation.template": "resource/management-governance/cloudformation_template_48.svg",
|
|
1720
|
-
"aws.management-governance.cloudtrail.cloudtrail-lake": "resource/management-governance/cloudtrail_cloudtrail-lake_48.svg",
|
|
1721
|
-
"aws.management-governance.cloudwatch.alarm": "resource/management-governance/cloudwatch_alarm_48.svg",
|
|
1722
|
-
"aws.management-governance.cloudwatch.cross-account-observability": "resource/management-governance/cloudwatch_cross-account-observability_48.svg",
|
|
1723
|
-
"aws.management-governance.cloudwatch.data-protection": "resource/management-governance/cloudwatch_data-protection_48.svg",
|
|
1724
|
-
"aws.management-governance.cloudwatch.event-event-based": "resource/management-governance/cloudwatch_event-event-based_48.svg",
|
|
1725
|
-
"aws.management-governance.cloudwatch.event-time-based": "resource/management-governance/cloudwatch_event-time-based_48.svg",
|
|
1726
|
-
"aws.management-governance.cloudwatch.evidently": "resource/management-governance/cloudwatch_evidently_48.svg",
|
|
1727
|
-
"aws.management-governance.cloudwatch.logs": "resource/management-governance/cloudwatch_logs_48.svg",
|
|
1728
|
-
"aws.management-governance.cloudwatch.metrics-insights": "resource/management-governance/cloudwatch_metrics-insights_48.svg",
|
|
1729
|
-
"aws.management-governance.cloudwatch.rule": "resource/management-governance/cloudwatch_rule_48.svg",
|
|
1730
|
-
"aws.management-governance.cloudwatch.rum": "resource/management-governance/cloudwatch_rum_48.svg",
|
|
1731
|
-
"aws.management-governance.cloudwatch.synthetics": "resource/management-governance/cloudwatch_synthetics_48.svg",
|
|
1732
|
-
"aws.management-governance.license-manager.application-discovery": "resource/management-governance/license-manager_application-discovery_48.svg",
|
|
1733
|
-
"aws.management-governance.license-manager.license-blending": "resource/management-governance/license-manager_license-blending_48.svg",
|
|
1734
|
-
"aws.management-governance.organizations.account": "resource/management-governance/organizations_account_48.svg",
|
|
1735
|
-
"aws.management-governance.organizations.management-account": "resource/management-governance/organizations_management-account_48.svg",
|
|
1736
|
-
"aws.management-governance.organizations.organizational-unit": "resource/management-governance/organizations_organizational-unit_48.svg",
|
|
1737
|
-
"aws.management-governance.systems-manager.application-manager": "resource/management-governance/systems-manager_application-manager_48.svg",
|
|
1738
|
-
"aws.management-governance.systems-manager.automation": "resource/management-governance/systems-manager_automation_48.svg",
|
|
1739
|
-
"aws.management-governance.systems-manager.change-calendar": "resource/management-governance/systems-manager_change-calendar_48.svg",
|
|
1740
|
-
"aws.management-governance.systems-manager.change-manager": "resource/management-governance/systems-manager_change-manager_48.svg",
|
|
1741
|
-
"aws.management-governance.systems-manager.compliance": "resource/management-governance/systems-manager_compliance_48.svg",
|
|
1742
|
-
"aws.management-governance.systems-manager.distributor": "resource/management-governance/systems-manager_distributor_48.svg",
|
|
1743
|
-
"aws.management-governance.systems-manager.documents": "resource/management-governance/systems-manager_documents_48.svg",
|
|
1744
|
-
"aws.management-governance.systems-manager.incident-manager": "resource/management-governance/systems-manager_incident-manager_48.svg",
|
|
1745
|
-
"aws.management-governance.systems-manager.inventory": "resource/management-governance/systems-manager_inventory_48.svg",
|
|
1746
|
-
"aws.management-governance.systems-manager.maintenance-windows": "resource/management-governance/systems-manager_maintenance-windows_48.svg",
|
|
1747
|
-
"aws.management-governance.systems-manager.opscenter": "resource/management-governance/systems-manager_opscenter_48.svg",
|
|
1748
|
-
"aws.management-governance.systems-manager.parameter-store": "resource/management-governance/systems-manager_parameter-store_48.svg",
|
|
1749
|
-
"aws.management-governance.systems-manager.patch-manager": "resource/management-governance/systems-manager_patch-manager_48.svg",
|
|
1750
|
-
"aws.management-governance.systems-manager.run-command": "resource/management-governance/systems-manager_run-command_48.svg",
|
|
1751
|
-
"aws.management-governance.systems-manager.session-manager": "resource/management-governance/systems-manager_session-manager_48.svg",
|
|
1752
|
-
"aws.management-governance.systems-manager.state-manager": "resource/management-governance/systems-manager_state-manager_48.svg",
|
|
1753
|
-
"aws.management-governance.trusted-advisor.checklist-cost": "resource/management-governance/trusted-advisor_checklist-cost_48.svg",
|
|
1754
|
-
"aws.management-governance.trusted-advisor.checklist-fault-tolerant": "resource/management-governance/trusted-advisor_checklist-fault-tolerant_48.svg",
|
|
1755
|
-
"aws.management-governance.trusted-advisor.checklist-performance": "resource/management-governance/trusted-advisor_checklist-performance_48.svg",
|
|
1756
|
-
"aws.management-governance.trusted-advisor.checklist-security": "resource/management-governance/trusted-advisor_checklist-security_48.svg",
|
|
1757
|
-
"aws.management-governance.trusted-advisor.checklist": "resource/management-governance/trusted-advisor_checklist_48.svg",
|
|
1758
|
-
"aws.media-services.cloud-digital-interface.cloud-digital-interface": "resource/media-services/cloud-digital-interface_48.svg",
|
|
1759
|
-
"aws.media-services.elemental-mediaconnect.mediaconnect-gateway": "resource/media-services/elemental-mediaconnect_mediaconnect-gateway_48.svg",
|
|
1760
|
-
"aws.migration-modernization.application-discovery-service.aws-agentless-collector": "resource/migration-modernization/application-discovery-service_aws-agentless-collector_48.svg",
|
|
1761
|
-
"aws.migration-modernization.application-discovery-service.aws-discovery-agent": "resource/migration-modernization/application-discovery-service_aws-discovery-agent_48.svg",
|
|
1762
|
-
"aws.migration-modernization.application-discovery-service.migration-evaluator-collector": "resource/migration-modernization/application-discovery-service_migration-evaluator-collector_48.svg",
|
|
1763
|
-
"aws.migration-modernization.datasync.agent": "resource/migration-modernization/datasync_agent_48.svg",
|
|
1764
|
-
"aws.migration-modernization.datasync.discovery": "resource/migration-modernization/datasync_discovery_48.svg",
|
|
1765
|
-
"aws.migration-modernization.mainframe-modernization.analyzer": "resource/migration-modernization/mainframe-modernization_analyzer_48.svg",
|
|
1766
|
-
"aws.migration-modernization.mainframe-modernization.compiler": "resource/migration-modernization/mainframe-modernization_compiler_48.svg",
|
|
1767
|
-
"aws.migration-modernization.mainframe-modernization.converter": "resource/migration-modernization/mainframe-modernization_converter_48.svg",
|
|
1768
|
-
"aws.migration-modernization.mainframe-modernization.developer": "resource/migration-modernization/mainframe-modernization_developer_48.svg",
|
|
1769
|
-
"aws.migration-modernization.mainframe-modernization.runtime": "resource/migration-modernization/mainframe-modernization_runtime_48.svg",
|
|
1770
|
-
"aws.migration-modernization.migration-hub.refactor-spaces-applications": "resource/migration-modernization/migration-hub_refactor-spaces-applications_48.svg",
|
|
1771
|
-
"aws.migration-modernization.migration-hub.refactor-spaces-environments": "resource/migration-modernization/migration-hub_refactor-spaces-environments_48.svg",
|
|
1772
|
-
"aws.migration-modernization.migration-hub.refactor-spaces-services": "resource/migration-modernization/migration-hub_refactor-spaces-services_48.svg",
|
|
1773
|
-
"aws.migration-modernization.transfer-family.aws-as2": "resource/migration-modernization/transfer-family_aws-as2_48.svg",
|
|
1774
|
-
"aws.migration-modernization.transfer-family.aws-ftp": "resource/migration-modernization/transfer-family_aws-ftp_48.svg",
|
|
1775
|
-
"aws.migration-modernization.transfer-family.aws-ftps": "resource/migration-modernization/transfer-family_aws-ftps_48.svg",
|
|
1776
|
-
"aws.migration-modernization.transfer-family.aws-sftp": "resource/migration-modernization/transfer-family_aws-sftp_48.svg",
|
|
1777
|
-
"aws.networking-content-delivery.api-gateway.endpoint": "resource/networking-content-delivery/api-gateway_endpoint_48.svg",
|
|
1778
|
-
"aws.networking-content-delivery.app-mesh.mesh": "resource/networking-content-delivery/app-mesh_mesh_48.svg",
|
|
1779
|
-
"aws.networking-content-delivery.app-mesh.virtual-gateway": "resource/networking-content-delivery/app-mesh_virtual-gateway_48.svg",
|
|
1780
|
-
"aws.networking-content-delivery.app-mesh.virtual-node": "resource/networking-content-delivery/app-mesh_virtual-node_48.svg",
|
|
1781
|
-
"aws.networking-content-delivery.app-mesh.virtual-router": "resource/networking-content-delivery/app-mesh_virtual-router_48.svg",
|
|
1782
|
-
"aws.networking-content-delivery.app-mesh.virtual-service": "resource/networking-content-delivery/app-mesh_virtual-service_48.svg",
|
|
1783
|
-
"aws.networking-content-delivery.cloud-map.namespace": "resource/networking-content-delivery/cloud-map_namespace_48.svg",
|
|
1784
|
-
"aws.networking-content-delivery.cloud-map.resource": "resource/networking-content-delivery/cloud-map_resource_48.svg",
|
|
1785
|
-
"aws.networking-content-delivery.cloud-map.service": "resource/networking-content-delivery/cloud-map_service_48.svg",
|
|
1786
|
-
"aws.networking-content-delivery.cloud-wan.core-network-edge": "resource/networking-content-delivery/cloud-wan_core-network-edge_48.svg",
|
|
1787
|
-
"aws.networking-content-delivery.cloud-wan.segment-network": "resource/networking-content-delivery/cloud-wan_segment-network_48.svg",
|
|
1788
|
-
"aws.networking-content-delivery.cloud-wan.transit-gateway-route-table-attachment": "resource/networking-content-delivery/cloud-wan_transit-gateway-route-table-attachment_48.svg",
|
|
1789
|
-
"aws.networking-content-delivery.cloudfront.download-distribution": "resource/networking-content-delivery/cloudfront_download-distribution_48.svg",
|
|
1790
|
-
"aws.networking-content-delivery.cloudfront.edge-location": "resource/networking-content-delivery/cloudfront_edge-location_48.svg",
|
|
1791
|
-
"aws.networking-content-delivery.cloudfront.functions": "resource/networking-content-delivery/cloudfront_functions_48.svg",
|
|
1792
|
-
"aws.networking-content-delivery.cloudfront.streaming-distribution": "resource/networking-content-delivery/cloudfront_streaming-distribution_48.svg",
|
|
1793
|
-
"aws.networking-content-delivery.direct-connect.gateway": "resource/networking-content-delivery/direct-connect_gateway_48.svg",
|
|
1794
|
-
"aws.networking-content-delivery.elastic-load-balancing.application-load-balancer": "resource/networking-content-delivery/elastic-load-balancing_application-load-balancer_48.svg",
|
|
1795
|
-
"aws.networking-content-delivery.elastic-load-balancing.classic-load-balancer": "resource/networking-content-delivery/elastic-load-balancing_classic-load-balancer_48.svg",
|
|
1796
|
-
"aws.networking-content-delivery.elastic-load-balancing.gateway-load-balancer": "resource/networking-content-delivery/elastic-load-balancing_gateway-load-balancer_48.svg",
|
|
1797
|
-
"aws.networking-content-delivery.elastic-load-balancing.network-load-balancer": "resource/networking-content-delivery/elastic-load-balancing_network-load-balancer_48.svg",
|
|
1798
|
-
"aws.networking-content-delivery.route-53-hosted-zone.route-53-hosted-zone": "resource/networking-content-delivery/route-53-hosted-zone_48.svg",
|
|
1799
|
-
"aws.networking-content-delivery.route-53.readiness-checks": "resource/networking-content-delivery/route-53_readiness-checks_48.svg",
|
|
1800
|
-
"aws.networking-content-delivery.route-53.resolver-dns-firewall": "resource/networking-content-delivery/route-53_resolver-dns-firewall_48.svg",
|
|
1801
|
-
"aws.networking-content-delivery.route-53.resolver-query-logging": "resource/networking-content-delivery/route-53_resolver-query-logging_48.svg",
|
|
1802
|
-
"aws.networking-content-delivery.route-53.resolver": "resource/networking-content-delivery/route-53_resolver_48.svg",
|
|
1803
|
-
"aws.networking-content-delivery.route-53.route-table": "resource/networking-content-delivery/route-53_route-table_48.svg",
|
|
1804
|
-
"aws.networking-content-delivery.route-53.routing-controls": "resource/networking-content-delivery/route-53_routing-controls_48.svg",
|
|
1805
|
-
"aws.networking-content-delivery.transit-gateway.attachment": "resource/networking-content-delivery/transit-gateway_attachment_48.svg",
|
|
1806
|
-
"aws.networking-content-delivery.vpc.carrier-gateway": "resource/networking-content-delivery/vpc_carrier-gateway_48.svg",
|
|
1807
|
-
"aws.networking-content-delivery.vpc.customer-gateway": "resource/networking-content-delivery/vpc_customer-gateway_48.svg",
|
|
1808
|
-
"aws.networking-content-delivery.vpc.elastic-network-adapter": "resource/networking-content-delivery/vpc_elastic-network-adapter_48.svg",
|
|
1809
|
-
"aws.networking-content-delivery.vpc.elastic-network-interface": "resource/networking-content-delivery/vpc_elastic-network-interface_48.svg",
|
|
1810
|
-
"aws.networking-content-delivery.vpc.endpoints": "resource/networking-content-delivery/vpc_endpoints_48.svg",
|
|
1811
|
-
"aws.networking-content-delivery.vpc.flow-logs": "resource/networking-content-delivery/vpc_flow-logs_48.svg",
|
|
1812
|
-
"aws.networking-content-delivery.vpc.internet-gateway": "resource/networking-content-delivery/vpc_internet-gateway_48.svg",
|
|
1813
|
-
"aws.networking-content-delivery.vpc.nat-gateway": "resource/networking-content-delivery/vpc_nat-gateway_48.svg",
|
|
1814
|
-
"aws.networking-content-delivery.vpc.network-access-analyzer": "resource/networking-content-delivery/vpc_network-access-analyzer_48.svg",
|
|
1815
|
-
"aws.networking-content-delivery.vpc.network-access-control-list": "resource/networking-content-delivery/vpc_network-access-control-list_48.svg",
|
|
1816
|
-
"aws.networking-content-delivery.vpc.peering-connection": "resource/networking-content-delivery/vpc_peering-connection_48.svg",
|
|
1817
|
-
"aws.networking-content-delivery.vpc.reachability-analyzer": "resource/networking-content-delivery/vpc_reachability-analyzer_48.svg",
|
|
1818
|
-
"aws.networking-content-delivery.vpc.router": "resource/networking-content-delivery/vpc_router_48.svg",
|
|
1819
|
-
"aws.networking-content-delivery.vpc.traffic-mirroring": "resource/networking-content-delivery/vpc_traffic-mirroring_48.svg",
|
|
1820
|
-
"aws.networking-content-delivery.vpc.virtual-private-cloud-vpc": "resource/networking-content-delivery/vpc_virtual-private-cloud-vpc_48.svg",
|
|
1821
|
-
"aws.networking-content-delivery.vpc.vpn-connection": "resource/networking-content-delivery/vpc_vpn-connection_48.svg",
|
|
1822
|
-
"aws.networking-content-delivery.vpc.vpn-gateway": "resource/networking-content-delivery/vpc_vpn-gateway_48.svg",
|
|
1823
|
-
"aws.quantum-technologies.braket.chandelier": "resource/quantum-technologies/braket_chandelier_48.svg",
|
|
1824
|
-
"aws.quantum-technologies.braket.chip": "resource/quantum-technologies/braket_chip_48.svg",
|
|
1825
|
-
"aws.quantum-technologies.braket.embedded-simulator": "resource/quantum-technologies/braket_embedded-simulator_48.svg",
|
|
1826
|
-
"aws.quantum-technologies.braket.managed-simulator": "resource/quantum-technologies/braket_managed-simulator_48.svg",
|
|
1827
|
-
"aws.quantum-technologies.braket.noise-simulator": "resource/quantum-technologies/braket_noise-simulator_48.svg",
|
|
1828
|
-
"aws.quantum-technologies.braket.qpu": "resource/quantum-technologies/braket_qpu_48.svg",
|
|
1829
|
-
"aws.quantum-technologies.braket.simulator-1": "resource/quantum-technologies/braket_simulator-1_48.svg",
|
|
1830
|
-
"aws.quantum-technologies.braket.simulator-2": "resource/quantum-technologies/braket_simulator-2_48.svg",
|
|
1831
|
-
"aws.quantum-technologies.braket.simulator-3": "resource/quantum-technologies/braket_simulator-3_48.svg",
|
|
1832
|
-
"aws.quantum-technologies.braket.simulator-4": "resource/quantum-technologies/braket_simulator-4_48.svg",
|
|
1833
|
-
"aws.quantum-technologies.braket.simulator": "resource/quantum-technologies/braket_simulator_48.svg",
|
|
1834
|
-
"aws.quantum-technologies.braket.state-vector": "resource/quantum-technologies/braket_state-vector_48.svg",
|
|
1835
|
-
"aws.quantum-technologies.braket.tensor-network": "resource/quantum-technologies/braket_tensor-network_48.svg",
|
|
1836
|
-
"aws.security-identity.certificate-manager.certificate-authority": "resource/security-identity/certificate-manager_certificate-authority_48.svg",
|
|
1837
|
-
"aws.security-identity.directory-service.ad-connector": "resource/security-identity/directory-service_ad-connector_48.svg",
|
|
1838
|
-
"aws.security-identity.directory-service.aws-managed-microsoft-ad": "resource/security-identity/directory-service_aws-managed-microsoft-ad_48.svg",
|
|
1839
|
-
"aws.security-identity.directory-service.simple-ad": "resource/security-identity/directory-service_simple-ad_48.svg",
|
|
1840
|
-
"aws.security-identity.identity-access-management.add-on": "resource/security-identity/identity-access-management_add-on_48.svg",
|
|
1841
|
-
"aws.security-identity.identity-access-management.aws-sts-alternate": "resource/security-identity/identity-access-management_aws-sts-alternate_48.svg",
|
|
1842
|
-
"aws.security-identity.identity-access-management.aws-sts": "resource/security-identity/identity-access-management_aws-sts_48.svg",
|
|
1843
|
-
"aws.security-identity.identity-access-management.data-encryption-key": "resource/security-identity/identity-access-management_data-encryption-key_48.svg",
|
|
1844
|
-
"aws.security-identity.identity-access-management.encrypted-data": "resource/security-identity/identity-access-management_encrypted-data_48.svg",
|
|
1845
|
-
"aws.security-identity.identity-access-management.iam-access-analyzer": "resource/security-identity/identity-access-management_iam-access-analyzer_48.svg",
|
|
1846
|
-
"aws.security-identity.identity-access-management.iam-roles-anywhere": "resource/security-identity/identity-access-management_iam-roles-anywhere_48.svg",
|
|
1847
|
-
"aws.security-identity.identity-access-management.long-term-security-credential": "resource/security-identity/identity-access-management_long-term-security-credential_48.svg",
|
|
1848
|
-
"aws.security-identity.identity-access-management.mfa-token": "resource/security-identity/identity-access-management_mfa-token_48.svg",
|
|
1849
|
-
"aws.security-identity.identity-access-management.permissions": "resource/security-identity/identity-access-management_permissions_48.svg",
|
|
1850
|
-
"aws.security-identity.identity-access-management.role": "resource/security-identity/identity-access-management_role_48.svg",
|
|
1851
|
-
"aws.security-identity.identity-access-management.temporary-security-credential": "resource/security-identity/identity-access-management_temporary-security-credential_48.svg",
|
|
1852
|
-
"aws.security-identity.inspector.agent": "resource/security-identity/inspector_agent_48.svg",
|
|
1853
|
-
"aws.security-identity.key-management-service.external-key-store": "resource/security-identity/key-management-service_external-key-store_48.svg",
|
|
1854
|
-
"aws.security-identity.network-firewall.endpoints": "resource/security-identity/network-firewall_endpoints_48.svg",
|
|
1855
|
-
"aws.security-identity.security-hub.finding": "resource/security-identity/security-hub_finding_48.svg",
|
|
1856
|
-
"aws.security-identity.shield.aws-shield-advanced": "resource/security-identity/shield_aws-shield-advanced_48.svg",
|
|
1857
|
-
"aws.security-identity.waf.bad-bot": "resource/security-identity/waf_bad-bot_48.svg",
|
|
1858
|
-
"aws.security-identity.waf.bot-control": "resource/security-identity/waf_bot-control_48.svg",
|
|
1859
|
-
"aws.security-identity.waf.bot": "resource/security-identity/waf_bot_48.svg",
|
|
1860
|
-
"aws.security-identity.waf.filtering-rule": "resource/security-identity/waf_filtering-rule_48.svg",
|
|
1861
|
-
"aws.security-identity.waf.labels": "resource/security-identity/waf_labels_48.svg",
|
|
1862
|
-
"aws.security-identity.waf.managed-rule": "resource/security-identity/waf_managed-rule_48.svg",
|
|
1863
|
-
"aws.security-identity.waf.rule": "resource/security-identity/waf_rule_48.svg",
|
|
1864
|
-
"aws.storage.backup.audit-manager": "resource/storage/backup_audit-manager_48.svg",
|
|
1865
|
-
"aws.storage.backup.aws-backup-for-aws-cloudformation": "resource/storage/backup_aws-backup-for-aws-cloudformation_48.svg",
|
|
1866
|
-
"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",
|
|
1867
|
-
"aws.storage.backup.aws-backup-support-for-amazon-s3": "resource/storage/backup_aws-backup-support-for-amazon-s3_48.svg",
|
|
1868
|
-
"aws.storage.backup.aws-backup-support-for-vmware-workloads": "resource/storage/backup_aws-backup-support-for-vmware-workloads_48.svg",
|
|
1869
|
-
"aws.storage.backup.backup-plan": "resource/storage/backup_backup-plan_48.svg",
|
|
1870
|
-
"aws.storage.backup.backup-restore": "resource/storage/backup_backup-restore_48.svg",
|
|
1871
|
-
"aws.storage.backup.backup-vault": "resource/storage/backup_backup-vault_48.svg",
|
|
1872
|
-
"aws.storage.backup.compliance-reporting": "resource/storage/backup_compliance-reporting_48.svg",
|
|
1873
|
-
"aws.storage.backup.compute": "resource/storage/backup_compute_48.svg",
|
|
1874
|
-
"aws.storage.backup.database": "resource/storage/backup_database_48.svg",
|
|
1875
|
-
"aws.storage.backup.gateway": "resource/storage/backup_gateway_48.svg",
|
|
1876
|
-
"aws.storage.backup.legal-hold": "resource/storage/backup_legal-hold_48.svg",
|
|
1877
|
-
"aws.storage.backup.recovery-point-objective": "resource/storage/backup_recovery-point-objective_48.svg",
|
|
1878
|
-
"aws.storage.backup.recovery-time-objective": "resource/storage/backup_recovery-time-objective_48.svg",
|
|
1879
|
-
"aws.storage.backup.storage": "resource/storage/backup_storage_48.svg",
|
|
1880
|
-
"aws.storage.backup.vault-lock": "resource/storage/backup_vault-lock_48.svg",
|
|
1881
|
-
"aws.storage.backup.virtual-machine-monitor": "resource/storage/backup_virtual-machine-monitor_48.svg",
|
|
1882
|
-
"aws.storage.backup.virtual-machine": "resource/storage/backup_virtual-machine_48.svg",
|
|
1883
|
-
"aws.storage.elastic-block-store.amazon-data-lifecycle-manager": "resource/storage/elastic-block-store_amazon-data-lifecycle-manager_48.svg",
|
|
1884
|
-
"aws.storage.elastic-block-store.multiple-volumes": "resource/storage/elastic-block-store_multiple-volumes_48.svg",
|
|
1885
|
-
"aws.storage.elastic-block-store.snapshot": "resource/storage/elastic-block-store_snapshot_48.svg",
|
|
1886
|
-
"aws.storage.elastic-block-store.volume-gp3": "resource/storage/elastic-block-store_volume-gp3_48.svg",
|
|
1887
|
-
"aws.storage.elastic-block-store.volume": "resource/storage/elastic-block-store_volume_48.svg",
|
|
1888
|
-
"aws.storage.elastic-file-system.efs-intelligent-tiering": "resource/storage/elastic-file-system_efs-intelligent-tiering_48.svg",
|
|
1889
|
-
"aws.storage.elastic-file-system.efs-one-zone-infrequent-access": "resource/storage/elastic-file-system_efs-one-zone-infrequent-access_48.svg",
|
|
1890
|
-
"aws.storage.elastic-file-system.efs-one-zone": "resource/storage/elastic-file-system_efs-one-zone_48.svg",
|
|
1891
|
-
"aws.storage.elastic-file-system.efs-standard-infrequent-access": "resource/storage/elastic-file-system_efs-standard-infrequent-access_48.svg",
|
|
1892
|
-
"aws.storage.elastic-file-system.efs-standard": "resource/storage/elastic-file-system_efs-standard_48.svg",
|
|
1893
|
-
"aws.storage.elastic-file-system.elastic-throughput": "resource/storage/elastic-file-system_elastic-throughput_48.svg",
|
|
1894
|
-
"aws.storage.elastic-file-system.file-system": "resource/storage/elastic-file-system_file-system_48.svg",
|
|
1895
|
-
"aws.storage.file-cache.hybrid-nfs-linked-datasets": "resource/storage/file-cache_hybrid-nfs-linked-datasets_48.svg",
|
|
1896
|
-
"aws.storage.file-cache.on-premises-nfs-linked-datasets": "resource/storage/file-cache_on-premises-nfs-linked-datasets_48.svg",
|
|
1897
|
-
"aws.storage.file-cache.s3-linked-datasets": "resource/storage/file-cache_s3-linked-datasets_48.svg",
|
|
1898
|
-
"aws.storage.simple-storage-service-glacier.archive": "resource/storage/simple-storage-service-glacier_archive_48.svg",
|
|
1899
|
-
"aws.storage.simple-storage-service-glacier.vault": "resource/storage/simple-storage-service-glacier_vault_48.svg",
|
|
1900
|
-
"aws.storage.simple-storage-service.bucket-with-objects": "resource/storage/simple-storage-service_bucket-with-objects_48.svg",
|
|
1901
|
-
"aws.storage.simple-storage-service.bucket": "resource/storage/simple-storage-service_bucket_48.svg",
|
|
1902
|
-
"aws.storage.simple-storage-service.directory-bucket": "resource/storage/simple-storage-service_directory-bucket_48.svg",
|
|
1903
|
-
"aws.storage.simple-storage-service.general-access-points": "resource/storage/simple-storage-service_general-access-points_48.svg",
|
|
1904
|
-
"aws.storage.simple-storage-service.object": "resource/storage/simple-storage-service_object_48.svg",
|
|
1905
|
-
"aws.storage.simple-storage-service.s3-batch-operations": "resource/storage/simple-storage-service_s3-batch-operations_48.svg",
|
|
1906
|
-
"aws.storage.simple-storage-service.s3-express-one-zone": "resource/storage/simple-storage-service_s3-express-one-zone_48.svg",
|
|
1907
|
-
"aws.storage.simple-storage-service.s3-glacier-deep-archive": "resource/storage/simple-storage-service_s3-glacier-deep-archive_48.svg",
|
|
1908
|
-
"aws.storage.simple-storage-service.s3-glacier-flexible-retrieval": "resource/storage/simple-storage-service_s3-glacier-flexible-retrieval_48.svg",
|
|
1909
|
-
"aws.storage.simple-storage-service.s3-glacier-instant-retrieval": "resource/storage/simple-storage-service_s3-glacier-instant-retrieval_48.svg",
|
|
1910
|
-
"aws.storage.simple-storage-service.s3-intelligent-tiering": "resource/storage/simple-storage-service_s3-intelligent-tiering_48.svg",
|
|
1911
|
-
"aws.storage.simple-storage-service.s3-multi-region-access-points": "resource/storage/simple-storage-service_s3-multi-region-access-points_48.svg",
|
|
1912
|
-
"aws.storage.simple-storage-service.s3-object-lambda-access-points": "resource/storage/simple-storage-service_s3-object-lambda-access-points_48.svg",
|
|
1913
|
-
"aws.storage.simple-storage-service.s3-object-lambda": "resource/storage/simple-storage-service_s3-object-lambda_48.svg",
|
|
1914
|
-
"aws.storage.simple-storage-service.s3-object-lock": "resource/storage/simple-storage-service_s3-object-lock_48.svg",
|
|
1915
|
-
"aws.storage.simple-storage-service.s3-on-outposts": "resource/storage/simple-storage-service_s3-on-outposts_48.svg",
|
|
1916
|
-
"aws.storage.simple-storage-service.s3-one-zone-ia": "resource/storage/simple-storage-service_s3-one-zone-ia_48.svg",
|
|
1917
|
-
"aws.storage.simple-storage-service.s3-replication-time-control": "resource/storage/simple-storage-service_s3-replication-time-control_48.svg",
|
|
1918
|
-
"aws.storage.simple-storage-service.s3-replication": "resource/storage/simple-storage-service_s3-replication_48.svg",
|
|
1919
|
-
"aws.storage.simple-storage-service.s3-select": "resource/storage/simple-storage-service_s3-select_48.svg",
|
|
1920
|
-
"aws.storage.simple-storage-service.s3-standard-ia": "resource/storage/simple-storage-service_s3-standard-ia_48.svg",
|
|
1921
|
-
"aws.storage.simple-storage-service.s3-standard": "resource/storage/simple-storage-service_s3-standard_48.svg",
|
|
1922
|
-
"aws.storage.simple-storage-service.s3-storage-lens": "resource/storage/simple-storage-service_s3-storage-lens_48.svg",
|
|
1923
|
-
"aws.storage.simple-storage-service.s3-tables": "resource/storage/simple-storage-service_s3-tables_48.svg",
|
|
1924
|
-
"aws.storage.simple-storage-service.s3-vectors": "resource/storage/simple-storage-service_s3-vectors_48.svg",
|
|
1925
|
-
"aws.storage.simple-storage-service.vpc-access-points": "resource/storage/simple-storage-service_vpc-access-points_48.svg",
|
|
1926
|
-
"aws.storage.snowball.snowball-import-export": "resource/storage/snowball_snowball-import-export_48.svg",
|
|
1927
|
-
"aws.storage.storage-gateway.amazon-fsx-file-gateway": "resource/storage/storage-gateway_amazon-fsx-file-gateway_48.svg",
|
|
1928
|
-
"aws.storage.storage-gateway.amazon-s3-file-gateway": "resource/storage/storage-gateway_amazon-s3-file-gateway_48.svg",
|
|
1929
|
-
"aws.storage.storage-gateway.cached-volume": "resource/storage/storage-gateway_cached-volume_48.svg",
|
|
1930
|
-
"aws.storage.storage-gateway.file-gateway": "resource/storage/storage-gateway_file-gateway_48.svg",
|
|
1931
|
-
"aws.storage.storage-gateway.noncached-volume": "resource/storage/storage-gateway_noncached-volume_48.svg",
|
|
1932
|
-
"aws.storage.storage-gateway.tape-gateway": "resource/storage/storage-gateway_tape-gateway_48.svg",
|
|
1933
|
-
"aws.storage.storage-gateway.virtual-tape-library": "resource/storage/storage-gateway_virtual-tape-library_48.svg",
|
|
1934
|
-
"aws.storage.storage-gateway.volume-gateway": "resource/storage/storage-gateway_volume-gateway_48.svg",
|
|
1935
|
-
"aws.category.analytics": "category/analytics_64.svg",
|
|
1936
|
-
"aws.category.application-integration": "category/application-integration_64.svg",
|
|
1937
|
-
"aws.category.artificial-intelligence": "category/artificial-intelligence_64.svg",
|
|
1938
|
-
"aws.category.blockchain": "category/blockchain_64.svg",
|
|
1939
|
-
"aws.category.business-applications": "category/business-applications_64.svg",
|
|
1940
|
-
"aws.category.cloud-financial-management": "category/cloud-financial-management_64.svg",
|
|
1941
|
-
"aws.category.compute": "category/compute_64.svg",
|
|
1942
|
-
"aws.category.containers": "category/containers_64.svg",
|
|
1943
|
-
"aws.category.customer-enablement": "category/customer-enablement_64.svg",
|
|
1944
|
-
"aws.category.customer-experience": "category/customer-experience_64.svg",
|
|
1945
|
-
"aws.category.databases": "category/databases_64.svg",
|
|
1946
|
-
"aws.category.developer-tools": "category/developer-tools_64.svg",
|
|
1947
|
-
"aws.category.end-user-computing": "category/end-user-computing_64.svg",
|
|
1948
|
-
"aws.category.front-end-web-mobile": "category/front-end-web-mobile_64.svg",
|
|
1949
|
-
"aws.category.games": "category/games_64.svg",
|
|
1950
|
-
"aws.category.internet-of-things": "category/internet-of-things_64.svg",
|
|
1951
|
-
"aws.category.management-tools": "category/management-tools_64.svg",
|
|
1952
|
-
"aws.category.media-services": "category/media-services_64.svg",
|
|
1953
|
-
"aws.category.migration-modernization": "category/migration-modernization_64.svg",
|
|
1954
|
-
"aws.category.multicloud-and-hybrid": "category/multicloud-and-hybrid_64.svg",
|
|
1955
|
-
"aws.category.networking-content-delivery": "category/networking-content-delivery_64.svg",
|
|
1956
|
-
"aws.category.quantum-technologies": "category/quantum-technologies_64.svg",
|
|
1957
|
-
"aws.category.satellite": "category/satellite_64.svg",
|
|
1958
|
-
"aws.category.security-identity": "category/security-identity_64.svg",
|
|
1959
|
-
"aws.category.serverless": "category/serverless_64.svg",
|
|
1960
|
-
"aws.category.storage": "category/storage_64.svg",
|
|
1961
|
-
"aws.group.account": "group/account_32.svg",
|
|
1962
|
-
"aws.group.auto-scaling-group": "group/auto-scaling-group_32.svg",
|
|
1963
|
-
"aws.group.cloud-logo": "group/cloud-logo_32.svg",
|
|
1964
|
-
"aws.group.cloud": "group/cloud_32.svg",
|
|
1965
|
-
"aws.group.corporate-data-center": "group/corporate-data-center_32.svg",
|
|
1966
|
-
"aws.group.ec2-instance-contents": "group/ec2-instance-contents_32.svg",
|
|
1967
|
-
"aws.group.iot-greengrass-deployment": "group/iot-greengrass-deployment_32.svg",
|
|
1968
|
-
"aws.group.private-subnet": "group/private-subnet_32.svg",
|
|
1969
|
-
"aws.group.public-subnet": "group/public-subnet_32.svg",
|
|
1970
|
-
"aws.group.region": "group/region_32.svg",
|
|
1971
|
-
"aws.group.server-contents": "group/server-contents_32.svg",
|
|
1972
|
-
"aws.group.spot-fleet": "group/spot-fleet_32.svg",
|
|
1973
|
-
"aws.group.virtual-private-cloud-vpc": "group/virtual-private-cloud-vpc_32.svg"
|
|
1974
|
-
};
|
|
1975
|
-
|
|
1976
|
-
// src/node-type-resolution.ts
|
|
1977
|
-
var nodeTypes = Object.keys(nodeTypeToIcon);
|
|
1978
|
-
var nodeTypeSet = new Set(nodeTypes);
|
|
1979
|
-
var nodeTypeAliases = /* @__PURE__ */ new Map();
|
|
1980
|
-
var uniqueAliases = /* @__PURE__ */ new Map();
|
|
1981
|
-
function normalizeLookupKey(value) {
|
|
1982
|
-
return value.trim().toLowerCase().replace(/&/g, "and").replace(/[_\s/]+/g, "-").replace(/-?\.-?/g, ".").replace(/\.{2,}/g, ".").replace(/-{2,}/g, "-").replace(/^[-.]+|[-.]+$/g, "");
|
|
1983
|
-
}
|
|
1984
|
-
function isNodeType(value) {
|
|
1985
|
-
return nodeTypeSet.has(value);
|
|
1986
|
-
}
|
|
1987
|
-
function registerAlias(alias, type) {
|
|
1988
|
-
const normalizedAlias = normalizeLookupKey(alias);
|
|
1989
|
-
if (!normalizedAlias || nodeTypeAliases.has(normalizedAlias)) {
|
|
1990
|
-
return;
|
|
1991
|
-
}
|
|
1992
|
-
nodeTypeAliases.set(normalizedAlias, type);
|
|
1993
|
-
}
|
|
1994
|
-
function registerUniqueAlias(alias, type) {
|
|
1995
|
-
const normalizedAlias = normalizeLookupKey(alias);
|
|
1996
|
-
if (!normalizedAlias) {
|
|
1997
|
-
return;
|
|
1998
|
-
}
|
|
1999
|
-
const existing = uniqueAliases.get(normalizedAlias);
|
|
2000
|
-
if (existing === void 0) {
|
|
2001
|
-
uniqueAliases.set(normalizedAlias, type);
|
|
2002
|
-
return;
|
|
2003
|
-
}
|
|
2004
|
-
if (existing !== type) {
|
|
2005
|
-
uniqueAliases.set(normalizedAlias, null);
|
|
2006
|
-
}
|
|
2007
|
-
}
|
|
2008
|
-
for (const type of nodeTypes) {
|
|
2009
|
-
const segments = type.split(".");
|
|
2010
|
-
registerAlias(type, type);
|
|
2011
|
-
registerAlias(type.replace(/^aws\./, ""), type);
|
|
2012
|
-
const lastSegment = segments[segments.length - 1];
|
|
2013
|
-
if (lastSegment) {
|
|
2014
|
-
registerUniqueAlias(lastSegment, type);
|
|
2015
|
-
}
|
|
2016
|
-
if (segments.length >= 4) {
|
|
2017
|
-
const parentAndChild = `${segments[segments.length - 2]}.${segments[segments.length - 1]}`;
|
|
2018
|
-
registerUniqueAlias(parentAndChild, type);
|
|
2019
|
-
}
|
|
2020
|
-
const repeatedSegment = segments.length === 4 ? segments[2] : void 0;
|
|
2021
|
-
if (repeatedSegment && repeatedSegment === segments[3]) {
|
|
2022
|
-
registerAlias(segments.slice(0, 3).join("."), type);
|
|
2023
|
-
registerUniqueAlias(repeatedSegment, type);
|
|
2024
|
-
}
|
|
2025
|
-
}
|
|
2026
|
-
for (const [alias, type] of uniqueAliases) {
|
|
2027
|
-
if (type) {
|
|
2028
|
-
registerAlias(alias, type);
|
|
2029
|
-
}
|
|
2030
|
-
}
|
|
2031
|
-
var manualAliases = {
|
|
2032
|
-
"acm": "aws.security-identity.certificate-manager",
|
|
2033
|
-
"api-gateway": "aws.networking-content-delivery.api-gateway",
|
|
2034
|
-
"apigateway": "aws.networking-content-delivery.api-gateway",
|
|
2035
|
-
"aws.general.user": "aws.general.user.user",
|
|
2036
|
-
"aws.general.users": "aws.general.users.users",
|
|
2037
|
-
"bucket": "aws.storage.simple-storage-service.bucket",
|
|
2038
|
-
"cloudfront": "aws.networking-content-delivery.cloudfront",
|
|
2039
|
-
"dynamodb": "aws.databases.dynamodb",
|
|
2040
|
-
"iam": "aws.security-identity.identity-and-access-management",
|
|
2041
|
-
"lambda": "aws.compute.lambda",
|
|
2042
|
-
"oac": "aws.security-identity.identity-and-access-management",
|
|
2043
|
-
"origin-access-control": "aws.security-identity.identity-and-access-management",
|
|
2044
|
-
"origin-access-identity": "aws.security-identity.identity-and-access-management",
|
|
2045
|
-
"route53": "aws.networking-content-delivery.route-53",
|
|
2046
|
-
"route-53": "aws.networking-content-delivery.route-53",
|
|
2047
|
-
"s3": "aws.storage.simple-storage-service",
|
|
2048
|
-
"s3-bucket": "aws.storage.simple-storage-service.bucket",
|
|
2049
|
-
"user": "aws.general.user.user",
|
|
2050
|
-
"users": "aws.general.users.users",
|
|
2051
|
-
"waf": "aws.security-identity.waf"
|
|
2052
|
-
};
|
|
2053
|
-
for (const [alias, type] of Object.entries(manualAliases)) {
|
|
2054
|
-
registerAlias(alias, type);
|
|
2055
|
-
}
|
|
2056
|
-
function resolveRepeatedSuffix(normalizedValue) {
|
|
2057
|
-
const segments = normalizedValue.split(".").filter(Boolean);
|
|
2058
|
-
if (segments.length < 3) {
|
|
2059
|
-
return void 0;
|
|
2060
|
-
}
|
|
2061
|
-
const repeated = `${segments.join(".")}.${segments[segments.length - 1]}`;
|
|
2062
|
-
return isNodeType(repeated) ? repeated : void 0;
|
|
2063
|
-
}
|
|
2064
|
-
function resolveNodeType(value) {
|
|
2065
|
-
if (isNodeType(value)) {
|
|
2066
|
-
return value;
|
|
2067
|
-
}
|
|
2068
|
-
const normalizedValue = normalizeLookupKey(value);
|
|
2069
|
-
if (!normalizedValue) {
|
|
2070
|
-
return void 0;
|
|
2071
|
-
}
|
|
2072
|
-
if (isNodeType(normalizedValue)) {
|
|
2073
|
-
return normalizedValue;
|
|
2074
|
-
}
|
|
2075
|
-
const directMatch = nodeTypeAliases.get(normalizedValue);
|
|
2076
|
-
if (directMatch) {
|
|
2077
|
-
return directMatch;
|
|
2078
|
-
}
|
|
2079
|
-
const repeatedMatch = resolveRepeatedSuffix(normalizedValue);
|
|
2080
|
-
if (repeatedMatch) {
|
|
2081
|
-
return repeatedMatch;
|
|
2082
|
-
}
|
|
2083
|
-
const awsPrefixedValue = normalizedValue.startsWith("aws.") ? normalizedValue : `aws.${normalizedValue}`;
|
|
2084
|
-
if (isNodeType(awsPrefixedValue)) {
|
|
2085
|
-
return awsPrefixedValue;
|
|
2086
|
-
}
|
|
2087
|
-
return nodeTypeAliases.get(awsPrefixedValue) ?? resolveRepeatedSuffix(awsPrefixedValue);
|
|
2088
|
-
}
|
|
2089
|
-
function normalizeNodeTypeInput(value) {
|
|
2090
|
-
return resolveNodeType(value) ?? normalizeLookupKey(value);
|
|
2091
|
-
}
|
|
2092
|
-
|
|
2093
|
-
// src/icons.ts
|
|
2094
|
-
var moduleDir = fileURLToPath(new URL(".", import.meta.url));
|
|
2095
|
-
var iconDirectoryCandidates = [
|
|
2096
|
-
resolve(moduleDir, "icons"),
|
|
2097
|
-
resolve(moduleDir, "icons", "icons"),
|
|
2098
|
-
resolve(moduleDir, "..", "icons")
|
|
2099
|
-
];
|
|
2100
|
-
function resolveIconsDirectory() {
|
|
2101
|
-
for (const candidate of iconDirectoryCandidates) {
|
|
2102
|
-
if (existsSync(candidate)) {
|
|
2103
|
-
return candidate;
|
|
2104
|
-
}
|
|
2105
|
-
}
|
|
2106
|
-
return iconDirectoryCandidates[0];
|
|
2107
|
-
}
|
|
2108
|
-
var iconsDir = resolveIconsDirectory();
|
|
2109
|
-
var iconCache = /* @__PURE__ */ new Map();
|
|
2110
|
-
var fallbackIconSvg = [
|
|
2111
|
-
'<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64" role="img" aria-label="fallback icon">',
|
|
2112
|
-
'<rect x="8" y="8" width="48" height="48" rx="10" fill="#f3f4f6" stroke="#6b7280" stroke-width="2"/>',
|
|
2113
|
-
'<path d="M20 24h24M20 32h24M20 40h16" stroke="#6b7280" stroke-width="2.5" stroke-linecap="round"/>',
|
|
2114
|
-
"</svg>"
|
|
2115
|
-
].join("");
|
|
2116
|
-
function getIconPath(type) {
|
|
2117
|
-
const resolvedType = resolveNodeType(type);
|
|
2118
|
-
if (!resolvedType) {
|
|
2119
|
-
return void 0;
|
|
2120
|
-
}
|
|
2121
|
-
return resolve(iconsDir, nodeTypeToIcon[resolvedType]);
|
|
2122
|
-
}
|
|
2123
|
-
function getIcon(type) {
|
|
2124
|
-
const iconPath = getIconPath(type);
|
|
2125
|
-
if (!iconPath) {
|
|
2126
|
-
return fallbackIconSvg;
|
|
2127
|
-
}
|
|
2128
|
-
const cached = iconCache.get(iconPath);
|
|
2129
|
-
if (cached) {
|
|
2130
|
-
return cached;
|
|
2131
|
-
}
|
|
2132
|
-
try {
|
|
2133
|
-
const svg = readFileSync(iconPath, "utf8");
|
|
2134
|
-
iconCache.set(iconPath, svg);
|
|
2135
|
-
return svg;
|
|
2136
|
-
} catch {
|
|
2137
|
-
return fallbackIconSvg;
|
|
2138
|
-
}
|
|
2139
|
-
}
|
|
2140
|
-
|
|
2141
|
-
// src/renderer.ts
|
|
2142
|
-
var ICON_SIZE2 = 64;
|
|
2143
|
-
var LABEL_GAP = 16;
|
|
2144
|
-
var LABEL_HEIGHT = 18;
|
|
2145
|
-
var TITLE_HEIGHT = 30;
|
|
2146
|
-
var TITLE_MARGIN = 16;
|
|
2147
|
-
var GROUP_PADDING_X = 24;
|
|
2148
|
-
var GROUP_PADDING_Y = 20;
|
|
2149
|
-
var GROUP_TITLE_BAND = 32;
|
|
2150
|
-
var EDGE_LABEL_FONT_SIZE = 11;
|
|
2151
|
-
var EDGE_LABEL_OFFSET = 12;
|
|
2152
|
-
var MARKER_WIDTH = 7;
|
|
2153
|
-
var MARKER_HEIGHT = 5;
|
|
2154
|
-
var MARKER_REF_END = 6.2;
|
|
2155
|
-
var MARKER_REF_START = 0.8;
|
|
2156
|
-
var defaultGroupStyle = {
|
|
2157
|
-
fill: "#f8fafc",
|
|
2158
|
-
stroke: "#94a3b8",
|
|
2159
|
-
text: "#0f172a"
|
|
2160
|
-
};
|
|
2161
|
-
var groupStyleMap = {
|
|
2162
|
-
account: { fill: "#f8fafc", stroke: "#64748b", text: "#0f172a" },
|
|
2163
|
-
"auto-scaling-group": { fill: "#eef2ff", stroke: "#6366f1", text: "#312e81" },
|
|
2164
|
-
cloud: { fill: "#eff6ff", stroke: "#3b82f6", text: "#1d4ed8" },
|
|
2165
|
-
"cloud-logo": { fill: "#eff6ff", stroke: "#2563eb", text: "#1d4ed8" },
|
|
2166
|
-
"corporate-data-center": { fill: "#f1f5f9", stroke: "#475569", text: "#1e293b" },
|
|
2167
|
-
"ec2-instance-contents": { fill: "#f8fafc", stroke: "#7c3aed", text: "#4c1d95" },
|
|
2168
|
-
"iot-greengrass-deployment": { fill: "#ecfdf5", stroke: "#059669", text: "#065f46" },
|
|
2169
|
-
"private-subnet": { fill: "#ecfdf5", stroke: "#16a34a", text: "#166534" },
|
|
2170
|
-
"public-subnet": { fill: "#fff7ed", stroke: "#ea580c", text: "#9a3412" },
|
|
2171
|
-
region: { fill: "#eff6ff", stroke: "#0284c7", text: "#075985" },
|
|
2172
|
-
"server-contents": { fill: "#f8fafc", stroke: "#334155", text: "#0f172a" },
|
|
2173
|
-
"spot-fleet": { fill: "#fefce8", stroke: "#ca8a04", text: "#854d0e" },
|
|
2174
|
-
vpc: { fill: "#eff6ff", stroke: "#2563eb", text: "#1d4ed8" },
|
|
2175
|
-
custom: defaultGroupStyle
|
|
2176
|
-
};
|
|
2177
|
-
function escapeXml(value) {
|
|
2178
|
-
return value.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll('"', """).replaceAll("'", "'");
|
|
2179
|
-
}
|
|
2180
|
-
function nodeLabelBounds(x, y) {
|
|
2181
|
-
return {
|
|
2182
|
-
x,
|
|
2183
|
-
y,
|
|
2184
|
-
width: ICON_SIZE2,
|
|
2185
|
-
height: ICON_SIZE2 + LABEL_GAP + LABEL_HEIGHT
|
|
2186
|
-
};
|
|
2187
|
-
}
|
|
2188
|
-
function nodeIconBounds(x, y) {
|
|
2189
|
-
return {
|
|
2190
|
-
x,
|
|
2191
|
-
y,
|
|
2192
|
-
width: ICON_SIZE2,
|
|
2193
|
-
height: ICON_SIZE2
|
|
2194
|
-
};
|
|
2195
|
-
}
|
|
2196
|
-
function mergeBounds(boundsList) {
|
|
2197
|
-
const minX = Math.min(...boundsList.map((bounds) => bounds.x));
|
|
2198
|
-
const minY = Math.min(...boundsList.map((bounds) => bounds.y));
|
|
2199
|
-
const maxX = Math.max(...boundsList.map((bounds) => bounds.x + bounds.width));
|
|
2200
|
-
const maxY = Math.max(...boundsList.map((bounds) => bounds.y + bounds.height));
|
|
2201
|
-
return {
|
|
2202
|
-
x: minX,
|
|
2203
|
-
y: minY,
|
|
2204
|
-
width: maxX - minX,
|
|
2205
|
-
height: maxY - minY
|
|
2206
|
-
};
|
|
2207
|
-
}
|
|
2208
|
-
function expandBounds(bounds, left, top, right, bottom) {
|
|
2209
|
-
return {
|
|
2210
|
-
x: bounds.x - left,
|
|
2211
|
-
y: bounds.y - top,
|
|
2212
|
-
width: bounds.width + left + right,
|
|
2213
|
-
height: bounds.height + top + bottom
|
|
2214
|
-
};
|
|
2215
|
-
}
|
|
2216
|
-
function extractIconSvg(markup) {
|
|
2217
|
-
const cleaned = markup.replace(/<\?xml[\s\S]*?\?>/gi, "").replace(/<!DOCTYPE[\s\S]*?>/gi, "").trim();
|
|
2218
|
-
const match = cleaned.match(/<svg\b([^>]*)>([\s\S]*?)<\/svg>/i);
|
|
2219
|
-
if (!match) {
|
|
2220
|
-
return { viewBox: "0 0 64 64", body: cleaned };
|
|
2221
|
-
}
|
|
2222
|
-
const attrs = match[1] ?? "";
|
|
2223
|
-
const body = match[2] ?? "";
|
|
2224
|
-
const viewBox = attrs.match(/viewBox\s*=\s*['\"]([^'\"]+)['\"]/i)?.[1];
|
|
2225
|
-
const width = attrs.match(/width\s*=\s*['\"]([^'\"]+)['\"]/i)?.[1];
|
|
2226
|
-
const height = attrs.match(/height\s*=\s*['\"]([^'\"]+)['\"]/i)?.[1];
|
|
2227
|
-
if (viewBox) {
|
|
2228
|
-
return { viewBox, body };
|
|
2229
|
-
}
|
|
2230
|
-
const numericWidth = width ? Number.parseFloat(width) : Number.NaN;
|
|
2231
|
-
const numericHeight = height ? Number.parseFloat(height) : Number.NaN;
|
|
2232
|
-
if (Number.isFinite(numericWidth) && Number.isFinite(numericHeight)) {
|
|
2233
|
-
return { viewBox: `0 0 ${numericWidth} ${numericHeight}`, body };
|
|
2234
|
-
}
|
|
2235
|
-
return { viewBox: "0 0 64 64", body };
|
|
2236
|
-
}
|
|
2237
|
-
function groupVisualStyle(group) {
|
|
2238
|
-
if (group.style === "custom") {
|
|
2239
|
-
return {
|
|
2240
|
-
fill: group.color ?? defaultGroupStyle.fill,
|
|
2241
|
-
stroke: group.borderColor ?? defaultGroupStyle.stroke,
|
|
2242
|
-
text: defaultGroupStyle.text
|
|
2243
|
-
};
|
|
2244
|
-
}
|
|
2245
|
-
return groupStyleMap[group.style ?? "custom"] ?? defaultGroupStyle;
|
|
2246
|
-
}
|
|
2247
|
-
function getNodeCenter(bounds) {
|
|
2248
|
-
return {
|
|
2249
|
-
x: bounds.x + bounds.width / 2,
|
|
2250
|
-
y: bounds.y + ICON_SIZE2 / 2
|
|
2251
|
-
};
|
|
2252
|
-
}
|
|
2253
|
-
function dedupePoints(points) {
|
|
2254
|
-
const deduped = [];
|
|
2255
|
-
for (const point of points) {
|
|
2256
|
-
const previous = deduped[deduped.length - 1];
|
|
2257
|
-
if (!previous || previous.x !== point.x || previous.y !== point.y) {
|
|
2258
|
-
deduped.push(point);
|
|
2259
|
-
}
|
|
2260
|
-
}
|
|
2261
|
-
return deduped;
|
|
2262
|
-
}
|
|
2263
|
-
function pathData(points) {
|
|
2264
|
-
return points.map((point, index) => `${index === 0 ? "M" : "L"} ${point.x} ${point.y}`).join(" ");
|
|
2265
|
-
}
|
|
2266
|
-
function routeLabelPoint(points) {
|
|
2267
|
-
let selectedMidpoint = points[0] ?? { x: 0, y: 0 };
|
|
2268
|
-
let longestSegment = -1;
|
|
2269
|
-
for (let index = 0; index < points.length - 1; index += 1) {
|
|
2270
|
-
const current = points[index];
|
|
2271
|
-
const next = points[index + 1];
|
|
2272
|
-
if (!current || !next) {
|
|
2273
|
-
continue;
|
|
2274
|
-
}
|
|
2275
|
-
const segmentLength = Math.abs(next.x - current.x) + Math.abs(next.y - current.y);
|
|
2276
|
-
if (segmentLength > longestSegment) {
|
|
2277
|
-
longestSegment = segmentLength;
|
|
2278
|
-
selectedMidpoint = {
|
|
2279
|
-
x: (current.x + next.x) / 2,
|
|
2280
|
-
y: (current.y + next.y) / 2
|
|
2281
|
-
};
|
|
2282
|
-
}
|
|
2283
|
-
}
|
|
2284
|
-
return {
|
|
2285
|
-
x: selectedMidpoint.x,
|
|
2286
|
-
y: selectedMidpoint.y - EDGE_LABEL_OFFSET
|
|
2287
|
-
};
|
|
2288
|
-
}
|
|
2289
|
-
function routeOrthogonalEdge(source, target, edgeIndex) {
|
|
2290
|
-
const sourceCenter = getNodeCenter(source);
|
|
2291
|
-
const targetCenter = getNodeCenter(target);
|
|
2292
|
-
const dx = targetCenter.x - sourceCenter.x;
|
|
2293
|
-
const dy = targetCenter.y - sourceCenter.y;
|
|
2294
|
-
const laneOffset = (edgeIndex % 3 - 1) * 12;
|
|
2295
|
-
const preferHorizontal = Math.abs(dx) >= Math.abs(dy);
|
|
2296
|
-
if (preferHorizontal) {
|
|
2297
|
-
const start2 = {
|
|
2298
|
-
x: dx >= 0 ? source.x + source.width : source.x,
|
|
2299
|
-
y: sourceCenter.y
|
|
2300
|
-
};
|
|
2301
|
-
const end2 = {
|
|
2302
|
-
x: dx >= 0 ? target.x : target.x + target.width,
|
|
2303
|
-
y: targetCenter.y
|
|
2304
|
-
};
|
|
2305
|
-
const midX = Math.round((start2.x + end2.x) / 2 + laneOffset);
|
|
2306
|
-
const points2 = dedupePoints([
|
|
2307
|
-
start2,
|
|
2308
|
-
{ x: midX, y: start2.y },
|
|
2309
|
-
{ x: midX, y: end2.y },
|
|
2310
|
-
end2
|
|
2311
|
-
]);
|
|
2312
|
-
return {
|
|
2313
|
-
labelPoint: routeLabelPoint(points2),
|
|
2314
|
-
points: points2
|
|
2315
|
-
};
|
|
2316
|
-
}
|
|
2317
|
-
const start = {
|
|
2318
|
-
x: sourceCenter.x,
|
|
2319
|
-
y: dy >= 0 ? source.y + source.height : source.y
|
|
2320
|
-
};
|
|
2321
|
-
const end = {
|
|
2322
|
-
x: targetCenter.x,
|
|
2323
|
-
y: dy >= 0 ? target.y : target.y + target.height
|
|
2324
|
-
};
|
|
2325
|
-
const midY = Math.round((start.y + end.y) / 2 + laneOffset);
|
|
2326
|
-
const points = dedupePoints([
|
|
2327
|
-
start,
|
|
2328
|
-
{ x: start.x, y: midY },
|
|
2329
|
-
{ x: end.x, y: midY },
|
|
2330
|
-
end
|
|
2331
|
-
]);
|
|
2332
|
-
return {
|
|
2333
|
-
labelPoint: routeLabelPoint(points),
|
|
2334
|
-
points
|
|
2335
|
-
};
|
|
2336
|
-
}
|
|
2337
|
-
function buildGroupBounds(diagram) {
|
|
2338
|
-
const groups = diagram.groups ?? [];
|
|
2339
|
-
const groupById = new Map(groups.map((group) => [group.id, group]));
|
|
2340
|
-
const nodeBounds = new Map(diagram.nodes.map((node) => [node.id, nodeLabelBounds(node.position.x, node.position.y)]));
|
|
2341
|
-
const cache = /* @__PURE__ */ new Map();
|
|
2342
|
-
function compute(groupId, depth) {
|
|
2343
|
-
const existing = cache.get(groupId);
|
|
2344
|
-
if (existing) {
|
|
2345
|
-
return existing;
|
|
2346
|
-
}
|
|
2347
|
-
const group = groupById.get(groupId);
|
|
2348
|
-
if (!group) {
|
|
2349
|
-
throw new Error(`Unknown group "${groupId}"`);
|
|
2350
|
-
}
|
|
2351
|
-
const childBounds = [];
|
|
2352
|
-
for (const childId of group.children) {
|
|
2353
|
-
const node = nodeBounds.get(childId);
|
|
2354
|
-
if (node) {
|
|
2355
|
-
childBounds.push(node);
|
|
2356
|
-
continue;
|
|
2357
|
-
}
|
|
2358
|
-
if (groupById.has(childId)) {
|
|
2359
|
-
childBounds.push(compute(childId, depth + 1));
|
|
2360
|
-
}
|
|
2361
|
-
}
|
|
2362
|
-
const merged = childBounds.length > 0 ? mergeBounds(childBounds) : { x: 0, y: 0, width: ICON_SIZE2 + GROUP_PADDING_X * 2, height: ICON_SIZE2 + GROUP_PADDING_Y * 2 };
|
|
2363
|
-
const expanded = expandBounds(merged, GROUP_PADDING_X, GROUP_TITLE_BAND, GROUP_PADDING_X, GROUP_PADDING_Y);
|
|
2364
|
-
const result = { ...expanded, id: groupId, depth };
|
|
2365
|
-
cache.set(groupId, result);
|
|
2366
|
-
return result;
|
|
2367
|
-
}
|
|
2368
|
-
const roots = new Set(groups.map((group) => group.id));
|
|
2369
|
-
for (const group of groups) {
|
|
2370
|
-
for (const childId of group.children) {
|
|
2371
|
-
if (groupById.has(childId)) {
|
|
2372
|
-
roots.delete(childId);
|
|
2373
|
-
}
|
|
2374
|
-
}
|
|
2375
|
-
}
|
|
2376
|
-
for (const rootId of [...roots].sort()) {
|
|
2377
|
-
compute(rootId, 0);
|
|
2378
|
-
}
|
|
2379
|
-
return [...cache.values()].sort((left, right) => left.depth - right.depth || left.id.localeCompare(right.id));
|
|
2380
|
-
}
|
|
2381
|
-
function diagramBounds(diagram, groups) {
|
|
2382
|
-
const nodeBounds = diagram.nodes.map((node) => nodeLabelBounds(node.position.x, node.position.y));
|
|
2383
|
-
const allBounds = [...nodeBounds, ...groups];
|
|
2384
|
-
if (allBounds.length === 0) {
|
|
2385
|
-
return { x: 0, y: 0, width: 320, height: 180 };
|
|
2386
|
-
}
|
|
2387
|
-
return mergeBounds(allBounds);
|
|
2388
|
-
}
|
|
2389
|
-
function renderGroup(group, bounds, offset) {
|
|
2390
|
-
const style = groupVisualStyle(group);
|
|
2391
|
-
const x = bounds.x + offset.x;
|
|
2392
|
-
const y = bounds.y + offset.y;
|
|
2393
|
-
return [
|
|
2394
|
-
`<g class="group" data-group-id="${escapeXml(group.id)}">`,
|
|
2395
|
-
`<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"}"/>`,
|
|
2396
|
-
`<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>`,
|
|
2397
|
-
`</g>`
|
|
2398
|
-
].join("");
|
|
2399
|
-
}
|
|
2400
|
-
function renderEdge(diagram, edgeIndex, offset) {
|
|
2401
|
-
const edge = diagram.edges[edgeIndex];
|
|
2402
|
-
if (!edge) {
|
|
2403
|
-
return "";
|
|
2404
|
-
}
|
|
2405
|
-
const source = diagram.nodes.find((node) => node.id === edge.from);
|
|
2406
|
-
const target = diagram.nodes.find((node) => node.id === edge.to);
|
|
2407
|
-
if (!source || !target) {
|
|
2408
|
-
return "";
|
|
2409
|
-
}
|
|
2410
|
-
const sourceBounds = nodeIconBounds(source.position.x, source.position.y);
|
|
2411
|
-
const targetBounds = nodeIconBounds(target.position.x, target.position.y);
|
|
2412
|
-
const route = routeOrthogonalEdge(sourceBounds, targetBounds, edgeIndex);
|
|
2413
|
-
const shiftedPoints = route.points.map((point) => ({
|
|
2414
|
-
x: point.x + offset.x,
|
|
2415
|
-
y: point.y + offset.y
|
|
2416
|
-
}));
|
|
2417
|
-
const shiftedLabelPoint = {
|
|
2418
|
-
x: route.labelPoint.x + offset.x,
|
|
2419
|
-
y: route.labelPoint.y + offset.y
|
|
2420
|
-
};
|
|
2421
|
-
const markerEnd = edge.direction !== "two-way" ? ' marker-end="url(#arrowhead)"' : ' marker-end="url(#arrowhead)" marker-start="url(#arrowhead-reverse)"';
|
|
2422
|
-
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>` : "";
|
|
2423
|
-
return [
|
|
2424
|
-
`<g class="edge" data-edge-index="${edgeIndex}">`,
|
|
2425
|
-
`<path d="${pathData(shiftedPoints)}" fill="none" stroke="#475569" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"${markerEnd}/>`,
|
|
2426
|
-
label,
|
|
2427
|
-
`</g>`
|
|
2428
|
-
].join("");
|
|
2429
|
-
}
|
|
2430
|
-
function renderNode(nodeId, diagram, offset) {
|
|
2431
|
-
const node = diagram.nodes.find((candidate) => candidate.id === nodeId);
|
|
2432
|
-
if (!node) {
|
|
2433
|
-
return "";
|
|
2434
|
-
}
|
|
2435
|
-
const icon = extractIconSvg(getIcon(node.type));
|
|
2436
|
-
const x = node.position.x + offset.x;
|
|
2437
|
-
const y = node.position.y + offset.y;
|
|
2438
|
-
const label = node.label ?? node.id;
|
|
2439
|
-
return [
|
|
2440
|
-
`<g class="node" data-node-id="${escapeXml(node.id)}">`,
|
|
2441
|
-
`<svg x="${x}" y="${y}" width="${ICON_SIZE2}" height="${ICON_SIZE2}" viewBox="${escapeXml(icon.viewBox)}" overflow="visible" preserveAspectRatio="xMidYMid meet">${icon.body}</svg>`,
|
|
2442
|
-
`<text x="${x + ICON_SIZE2 / 2}" y="${y + ICON_SIZE2 + 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>`,
|
|
2443
|
-
`</g>`
|
|
2444
|
-
].join("");
|
|
2445
|
-
}
|
|
2446
|
-
function renderDiagramDocument(diagram) {
|
|
2447
|
-
const groups = buildGroupBounds(diagram);
|
|
2448
|
-
const contentBounds = diagramBounds(diagram, groups);
|
|
2449
|
-
const horizontalPadding = 32;
|
|
2450
|
-
const verticalPadding = 28;
|
|
2451
|
-
const titleOffset = diagram.title ? TITLE_HEIGHT + TITLE_MARGIN : 0;
|
|
2452
|
-
const offset = {
|
|
2453
|
-
x: horizontalPadding - contentBounds.x,
|
|
2454
|
-
y: verticalPadding - contentBounds.y + titleOffset
|
|
2455
|
-
};
|
|
2456
|
-
const width = Math.max(320, Math.ceil(contentBounds.width + horizontalPadding * 2));
|
|
2457
|
-
const height = Math.max(200, Math.ceil(contentBounds.height + verticalPadding * 2 + titleOffset));
|
|
2458
|
-
const titleMarkup = diagram.title ? `<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>` : "";
|
|
2459
|
-
const groupById = new Map((diagram.groups ?? []).map((group) => [group.id, group]));
|
|
2460
|
-
const groupMarkup = groups.map((bounds) => {
|
|
2461
|
-
const group = groupById.get(bounds.id);
|
|
2462
|
-
return group ? renderGroup(group, bounds, offset) : "";
|
|
2463
|
-
}).join("");
|
|
2464
|
-
const edgeMarkup = diagram.edges.map((_, index) => renderEdge(diagram, index, offset)).join("");
|
|
2465
|
-
const nodeMarkup = diagram.nodes.map((node) => renderNode(node.id, diagram, offset)).join("");
|
|
2466
|
-
const svg = [
|
|
2467
|
-
`<svg xmlns="http://www.w3.org/2000/svg" width="${width}" height="${height}" viewBox="0 0 ${width} ${height}" role="img">`,
|
|
2468
|
-
`<defs>`,
|
|
2469
|
-
`<marker id="arrowhead" markerWidth="${MARKER_WIDTH}" markerHeight="${MARKER_HEIGHT}" refX="${MARKER_REF_END}" refY="${MARKER_HEIGHT / 2}" orient="auto" markerUnits="strokeWidth">`,
|
|
2470
|
-
`<polygon points="0 0, ${MARKER_WIDTH} ${MARKER_HEIGHT / 2}, 0 ${MARKER_HEIGHT}" fill="#475569"/>`,
|
|
2471
|
-
`</marker>`,
|
|
2472
|
-
`<marker id="arrowhead-reverse" markerWidth="${MARKER_WIDTH}" markerHeight="${MARKER_HEIGHT}" refX="${MARKER_REF_START}" refY="${MARKER_HEIGHT / 2}" orient="auto-start-reverse" markerUnits="strokeWidth">`,
|
|
2473
|
-
`<polygon points="${MARKER_WIDTH} 0, 0 ${MARKER_HEIGHT / 2}, ${MARKER_WIDTH} ${MARKER_HEIGHT}" fill="#475569"/>`,
|
|
2474
|
-
`</marker>`,
|
|
2475
|
-
`</defs>`,
|
|
2476
|
-
`<rect width="100%" height="100%" fill="#ffffff"/>`,
|
|
2477
|
-
titleMarkup,
|
|
2478
|
-
groupMarkup,
|
|
2479
|
-
edgeMarkup,
|
|
2480
|
-
nodeMarkup,
|
|
2481
|
-
`</svg>`
|
|
2482
|
-
].join("");
|
|
2483
|
-
return { svg, width, height };
|
|
2484
|
-
}
|
|
2485
|
-
|
|
2486
|
-
// src/schema.ts
|
|
2487
|
-
import { z as z2 } from "zod";
|
|
2488
|
-
var GroupStyleSchema = z2.enum([
|
|
2489
|
-
"account",
|
|
2490
|
-
"auto-scaling-group",
|
|
2491
|
-
"cloud",
|
|
2492
|
-
"cloud-logo",
|
|
2493
|
-
"corporate-data-center",
|
|
2494
|
-
"ec2-instance-contents",
|
|
2495
|
-
"iot-greengrass-deployment",
|
|
2496
|
-
"private-subnet",
|
|
2497
|
-
"public-subnet",
|
|
2498
|
-
"region",
|
|
2499
|
-
"server-contents",
|
|
2500
|
-
"spot-fleet",
|
|
2501
|
-
"vpc",
|
|
2502
|
-
"custom"
|
|
2503
|
-
]);
|
|
2504
|
-
var PositionSchema = z2.object({
|
|
2505
|
-
x: z2.number(),
|
|
2506
|
-
y: z2.number()
|
|
2507
|
-
});
|
|
2508
|
-
var LayoutModeSchema = z2.enum(["auto", "manual", "hybrid"]);
|
|
2509
|
-
var LayoutDirectionSchema = z2.enum(["LEFT", "RIGHT", "UP", "DOWN"]);
|
|
2510
|
-
var LayoutSchema = z2.object({
|
|
2511
|
-
mode: LayoutModeSchema.optional(),
|
|
2512
|
-
direction: LayoutDirectionSchema.optional(),
|
|
2513
|
-
nodeSpacing: z2.number().nonnegative().optional(),
|
|
2514
|
-
layerSpacing: z2.number().nonnegative().optional()
|
|
2515
|
-
});
|
|
2516
|
-
var NodeSchema = z2.object({
|
|
2517
|
-
id: z2.string().min(1),
|
|
2518
|
-
type: z2.preprocess(
|
|
2519
|
-
(value) => typeof value === "string" ? normalizeNodeTypeInput(value) : value,
|
|
2520
|
-
NodeTypeSchema
|
|
2521
|
-
),
|
|
2522
|
-
label: z2.string().optional(),
|
|
2523
|
-
description: z2.string().optional(),
|
|
2524
|
-
position: PositionSchema.optional()
|
|
2525
|
-
});
|
|
2526
|
-
var EdgeSchema = z2.object({
|
|
2527
|
-
from: z2.string().min(1),
|
|
2528
|
-
to: z2.string().min(1),
|
|
2529
|
-
label: z2.string().optional(),
|
|
2530
|
-
description: z2.string().optional(),
|
|
2531
|
-
direction: z2.enum(["one-way", "two-way"]).optional()
|
|
2532
|
-
});
|
|
2533
|
-
var GroupSchema = z2.object({
|
|
2534
|
-
id: z2.string().min(1),
|
|
2535
|
-
label: z2.string(),
|
|
2536
|
-
/** Node IDs and/or nested group IDs contained within this group. */
|
|
2537
|
-
children: z2.array(z2.string().min(1)),
|
|
2538
|
-
style: GroupStyleSchema.optional(),
|
|
2539
|
-
/** Only applies when style is "custom". */
|
|
2540
|
-
color: z2.string().optional(),
|
|
2541
|
-
borderColor: z2.string().optional()
|
|
2542
|
-
});
|
|
2543
|
-
var DiagramSchema = z2.object({
|
|
2544
|
-
title: z2.string().optional(),
|
|
2545
|
-
nodes: z2.array(NodeSchema),
|
|
2546
|
-
edges: z2.array(EdgeSchema),
|
|
2547
|
-
groups: z2.array(GroupSchema).optional(),
|
|
2548
|
-
layout: LayoutSchema.optional()
|
|
2549
|
-
});
|
|
2550
|
-
|
|
2551
|
-
// src/validator.ts
|
|
2552
|
-
function zodToErrors(error) {
|
|
2553
|
-
return error.issues.map((issue) => ({
|
|
2554
|
-
path: issue.path.join(".") || "(root)",
|
|
2555
|
-
message: issue.message
|
|
2556
|
-
}));
|
|
2557
|
-
}
|
|
2558
|
-
function semanticErrors(diagram) {
|
|
2559
|
-
const errors = [];
|
|
2560
|
-
const nodeIds = new Set(diagram.nodes.map((n) => n.id));
|
|
2561
|
-
const groupIds = new Set((diagram.groups ?? []).map((g) => g.id));
|
|
2562
|
-
const allIds = /* @__PURE__ */ new Set([...nodeIds, ...groupIds]);
|
|
2563
|
-
const seen = /* @__PURE__ */ new Set();
|
|
2564
|
-
for (const node of diagram.nodes) {
|
|
2565
|
-
if (seen.has(node.id)) {
|
|
2566
|
-
errors.push({ path: `nodes`, message: `Duplicate id "${node.id}"` });
|
|
2567
|
-
}
|
|
2568
|
-
seen.add(node.id);
|
|
2569
|
-
}
|
|
2570
|
-
for (const group of diagram.groups ?? []) {
|
|
2571
|
-
if (seen.has(group.id)) {
|
|
2572
|
-
errors.push({
|
|
2573
|
-
path: `groups`,
|
|
2574
|
-
message: `Duplicate id "${group.id}" (conflicts with a node or group id)`
|
|
2575
|
-
});
|
|
2576
|
-
}
|
|
2577
|
-
seen.add(group.id);
|
|
2578
|
-
}
|
|
2579
|
-
diagram.edges.forEach((edge, i) => {
|
|
2580
|
-
if (!nodeIds.has(edge.from)) {
|
|
2581
|
-
errors.push({
|
|
2582
|
-
path: `edges[${i}].from`,
|
|
2583
|
-
message: `Node "${edge.from}" does not exist`
|
|
2584
|
-
});
|
|
2585
|
-
}
|
|
2586
|
-
if (!nodeIds.has(edge.to)) {
|
|
2587
|
-
errors.push({
|
|
2588
|
-
path: `edges[${i}].to`,
|
|
2589
|
-
message: `Node "${edge.to}" does not exist`
|
|
2590
|
-
});
|
|
2591
|
-
}
|
|
2592
|
-
});
|
|
2593
|
-
for (const group of diagram.groups ?? []) {
|
|
2594
|
-
group.children.forEach((childId, i) => {
|
|
2595
|
-
if (!allIds.has(childId)) {
|
|
2596
|
-
errors.push({
|
|
2597
|
-
path: `groups[id=${group.id}].children[${i}]`,
|
|
2598
|
-
message: `"${childId}" does not exist as a node or group id`
|
|
2599
|
-
});
|
|
2600
|
-
}
|
|
2601
|
-
});
|
|
2602
|
-
}
|
|
2603
|
-
const childrenOf = /* @__PURE__ */ new Map();
|
|
2604
|
-
for (const group of diagram.groups ?? []) {
|
|
2605
|
-
childrenOf.set(group.id, group.children.filter((c) => groupIds.has(c)));
|
|
2606
|
-
}
|
|
2607
|
-
function hasCycle(groupId, visited) {
|
|
2608
|
-
if (visited.has(groupId)) return true;
|
|
2609
|
-
visited.add(groupId);
|
|
2610
|
-
for (const child of childrenOf.get(groupId) ?? []) {
|
|
2611
|
-
if (hasCycle(child, new Set(visited))) return true;
|
|
2612
|
-
}
|
|
2613
|
-
return false;
|
|
2614
|
-
}
|
|
2615
|
-
for (const group of diagram.groups ?? []) {
|
|
2616
|
-
if (hasCycle(group.id, /* @__PURE__ */ new Set())) {
|
|
2617
|
-
errors.push({
|
|
2618
|
-
path: `groups[id=${group.id}]`,
|
|
2619
|
-
message: `Circular group nesting detected`
|
|
2620
|
-
});
|
|
2621
|
-
}
|
|
2622
|
-
}
|
|
2623
|
-
if (diagram.layout?.mode === "manual") {
|
|
2624
|
-
for (const node of diagram.nodes) {
|
|
2625
|
-
if (!node.position) {
|
|
2626
|
-
errors.push({
|
|
2627
|
-
path: `nodes[id=${node.id}].position`,
|
|
2628
|
-
message: `Manual layout mode requires all nodes to define position`
|
|
2629
|
-
});
|
|
2630
|
-
}
|
|
2631
|
-
}
|
|
2632
|
-
}
|
|
2633
|
-
return errors;
|
|
2634
|
-
}
|
|
2635
|
-
function orphanWarnings(diagram) {
|
|
2636
|
-
const warnings = [];
|
|
2637
|
-
const referenced = /* @__PURE__ */ new Set();
|
|
2638
|
-
for (const edge of diagram.edges) {
|
|
2639
|
-
referenced.add(edge.from);
|
|
2640
|
-
referenced.add(edge.to);
|
|
2641
|
-
}
|
|
2642
|
-
for (const group of diagram.groups ?? []) {
|
|
2643
|
-
for (const child of group.children) referenced.add(child);
|
|
2644
|
-
}
|
|
2645
|
-
for (const node of diagram.nodes) {
|
|
2646
|
-
if (!referenced.has(node.id)) {
|
|
2647
|
-
warnings.push({
|
|
2648
|
-
path: `nodes[id=${node.id}]`,
|
|
2649
|
-
message: `Node "${node.id}" is not referenced by any edge or group (orphan)`
|
|
2650
|
-
});
|
|
2651
|
-
}
|
|
2652
|
-
}
|
|
2653
|
-
return warnings;
|
|
2654
|
-
}
|
|
2655
|
-
function validate(input, options = {}) {
|
|
2656
|
-
const { warnOrphans = true } = options;
|
|
2657
|
-
const parsed = DiagramSchema.safeParse(input);
|
|
2658
|
-
if (!parsed.success) {
|
|
2659
|
-
return { valid: false, errors: zodToErrors(parsed.error) };
|
|
2660
|
-
}
|
|
2661
|
-
const errors = semanticErrors(parsed.data);
|
|
2662
|
-
if (errors.length > 0) {
|
|
2663
|
-
return { valid: false, errors };
|
|
2664
|
-
}
|
|
2665
|
-
const warnings = warnOrphans ? orphanWarnings(parsed.data) : [];
|
|
2666
|
-
return { valid: true, errors: warnings };
|
|
2667
|
-
}
|
|
2668
|
-
|
|
2669
|
-
// src/index.ts
|
|
2670
|
-
var SERVER_NAME = "stack-scribe";
|
|
2671
|
-
var SERVER_VERSION = "0.1.0";
|
|
2672
|
-
var DIAGRAM_SCHEMA_URI = "stack-scribe://schema/diagram";
|
|
2673
|
-
var RENDER_RESOURCE_TEMPLATE = "stack-scribe://render/{renderId}.svg";
|
|
2674
|
-
var RENDER_RESOURCE_PREFIX = "stack-scribe://render/";
|
|
2675
|
-
var RENDER_ARTIFACT_MIME_TYPE = "image/svg+xml";
|
|
2676
|
-
var MAX_RENDER_ARTIFACTS = 100;
|
|
2677
|
-
var RENDER_ARTIFACT_TTL_MS = 1e3 * 60 * 30;
|
|
2678
|
-
var ToolInputSchema = z3.object({
|
|
2679
|
-
diagram: DiagramSchema
|
|
8
|
+
import { layoutDiagram } from "./layout.js";
|
|
9
|
+
import { renderDiagramDocument } from "./renderer.js";
|
|
10
|
+
import { DiagramSchema } from "./schema.js";
|
|
11
|
+
import { validate } from "./validator.js";
|
|
12
|
+
const SERVER_NAME = "stack-scribe";
|
|
13
|
+
const SERVER_VERSION = "0.1.0";
|
|
14
|
+
const DIAGRAM_SCHEMA_URI = "stack-scribe://schema/diagram";
|
|
15
|
+
const RENDER_RESOURCE_TEMPLATE = "stack-scribe://render/{renderId}.svg";
|
|
16
|
+
const RENDER_RESOURCE_PREFIX = "stack-scribe://render/";
|
|
17
|
+
const RENDER_ARTIFACT_MIME_TYPE = "image/svg+xml";
|
|
18
|
+
const MAX_RENDER_ARTIFACTS = 100;
|
|
19
|
+
const RENDER_ARTIFACT_TTL_MS = 1000 * 60 * 30;
|
|
20
|
+
const ToolInputSchema = z.object({
|
|
21
|
+
diagram: DiagramSchema,
|
|
2680
22
|
});
|
|
2681
|
-
|
|
2682
|
-
|
|
2683
|
-
|
|
2684
|
-
|
|
2685
|
-
|
|
2686
|
-
|
|
2687
|
-
})
|
|
2688
|
-
)
|
|
23
|
+
const ValidateToolOutputSchema = z.object({
|
|
24
|
+
valid: z.boolean(),
|
|
25
|
+
errors: z.array(z.object({
|
|
26
|
+
path: z.string(),
|
|
27
|
+
message: z.string(),
|
|
28
|
+
})),
|
|
2689
29
|
});
|
|
2690
|
-
|
|
2691
|
-
|
|
2692
|
-
|
|
2693
|
-
|
|
2694
|
-
|
|
2695
|
-
|
|
30
|
+
const RenderToolOutputSchema = z.object({
|
|
31
|
+
uri: z.string(),
|
|
32
|
+
mimeType: z.literal(RENDER_ARTIFACT_MIME_TYPE),
|
|
33
|
+
width: z.number().int().positive(),
|
|
34
|
+
height: z.number().int().positive(),
|
|
35
|
+
expiresAt: z.string(),
|
|
2696
36
|
});
|
|
2697
|
-
|
|
2698
|
-
|
|
2699
|
-
|
|
2700
|
-
|
|
2701
|
-
|
|
2702
|
-
|
|
2703
|
-
|
|
2704
|
-
|
|
2705
|
-
|
|
2706
|
-
)
|
|
2707
|
-
var SchemaToolOutputSchema = z3.object({
|
|
2708
|
-
schema: z3.record(JsonValueSchema)
|
|
37
|
+
const JsonValueSchema = z.lazy(() => z.union([
|
|
38
|
+
z.string(),
|
|
39
|
+
z.number(),
|
|
40
|
+
z.boolean(),
|
|
41
|
+
z.null(),
|
|
42
|
+
z.array(JsonValueSchema),
|
|
43
|
+
z.record(JsonValueSchema),
|
|
44
|
+
]));
|
|
45
|
+
const SchemaToolOutputSchema = z.object({
|
|
46
|
+
schema: z.record(JsonValueSchema),
|
|
2709
47
|
});
|
|
2710
|
-
|
|
48
|
+
const renderArtifactCache = new Map();
|
|
2711
49
|
function createRenderResourceUri(renderId) {
|
|
2712
|
-
|
|
50
|
+
return `${RENDER_RESOURCE_PREFIX}${renderId}.svg`;
|
|
2713
51
|
}
|
|
2714
52
|
function purgeExpiredRenderArtifacts(now = Date.now()) {
|
|
2715
|
-
|
|
2716
|
-
|
|
2717
|
-
|
|
53
|
+
for (const [renderId, artifact] of renderArtifactCache) {
|
|
54
|
+
if (artifact.createdAt + RENDER_ARTIFACT_TTL_MS <= now) {
|
|
55
|
+
renderArtifactCache.delete(renderId);
|
|
56
|
+
}
|
|
2718
57
|
}
|
|
2719
|
-
}
|
|
2720
58
|
}
|
|
2721
59
|
function trimRenderArtifacts() {
|
|
2722
|
-
|
|
2723
|
-
|
|
2724
|
-
|
|
2725
|
-
|
|
2726
|
-
|
|
2727
|
-
|
|
2728
|
-
|
|
2729
|
-
|
|
60
|
+
if (renderArtifactCache.size <= MAX_RENDER_ARTIFACTS) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const artifacts = [...renderArtifactCache.entries()].sort((left, right) => left[1].createdAt - right[1].createdAt);
|
|
64
|
+
const excessCount = renderArtifactCache.size - MAX_RENDER_ARTIFACTS;
|
|
65
|
+
for (const [renderId] of artifacts.slice(0, excessCount)) {
|
|
66
|
+
renderArtifactCache.delete(renderId);
|
|
67
|
+
}
|
|
2730
68
|
}
|
|
2731
69
|
function storeRenderArtifact(artifact) {
|
|
2732
|
-
|
|
2733
|
-
|
|
2734
|
-
|
|
2735
|
-
|
|
2736
|
-
|
|
2737
|
-
|
|
2738
|
-
|
|
2739
|
-
|
|
2740
|
-
|
|
2741
|
-
|
|
2742
|
-
|
|
2743
|
-
|
|
2744
|
-
|
|
70
|
+
purgeExpiredRenderArtifacts();
|
|
71
|
+
const renderId = randomUUID();
|
|
72
|
+
const uri = createRenderResourceUri(renderId);
|
|
73
|
+
const cachedArtifact = {
|
|
74
|
+
...artifact,
|
|
75
|
+
uri,
|
|
76
|
+
};
|
|
77
|
+
renderArtifactCache.set(renderId, cachedArtifact);
|
|
78
|
+
trimRenderArtifacts();
|
|
79
|
+
return {
|
|
80
|
+
...cachedArtifact,
|
|
81
|
+
expiresAt: new Date(cachedArtifact.createdAt + RENDER_ARTIFACT_TTL_MS).toISOString(),
|
|
82
|
+
};
|
|
2745
83
|
}
|
|
2746
84
|
function getRenderArtifact(renderId) {
|
|
2747
|
-
|
|
2748
|
-
|
|
85
|
+
purgeExpiredRenderArtifacts();
|
|
86
|
+
return renderArtifactCache.get(renderId);
|
|
2749
87
|
}
|
|
2750
88
|
function parseRenderId(value) {
|
|
2751
|
-
|
|
2752
|
-
|
|
2753
|
-
|
|
2754
|
-
|
|
2755
|
-
|
|
2756
|
-
|
|
2757
|
-
|
|
2758
|
-
|
|
2759
|
-
}
|
|
2760
|
-
function getDiagramJsonSchema() {
|
|
2761
|
-
return toJsonSchemaCompat(DiagramSchema, {
|
|
2762
|
-
target: "draft-2020-12",
|
|
2763
|
-
strictUnions: true
|
|
2764
|
-
});
|
|
89
|
+
const cleanedValue = value.replace(/^\/+/, "");
|
|
90
|
+
if (!cleanedValue) {
|
|
91
|
+
return undefined;
|
|
92
|
+
}
|
|
93
|
+
if (cleanedValue.endsWith(".svg")) {
|
|
94
|
+
return cleanedValue.slice(0, -4);
|
|
95
|
+
}
|
|
96
|
+
return cleanedValue;
|
|
2765
97
|
}
|
|
2766
|
-
function
|
|
2767
|
-
|
|
98
|
+
export function getDiagramJsonSchema() {
|
|
99
|
+
return toJsonSchemaCompat(DiagramSchema, {
|
|
100
|
+
target: "draft-2020-12",
|
|
101
|
+
strictUnions: true,
|
|
102
|
+
});
|
|
2768
103
|
}
|
|
2769
|
-
|
|
2770
|
-
|
|
2771
|
-
if (!validation.valid) {
|
|
2772
|
-
const detail = validation.errors.map((error) => `${error.path}: ${error.message}`).join("\n");
|
|
2773
|
-
throw new Error(`Diagram validation failed
|
|
2774
|
-
${detail}`);
|
|
2775
|
-
}
|
|
2776
|
-
const parsed = DiagramSchema.parse(input);
|
|
2777
|
-
const positioned = await layoutDiagram(parsed);
|
|
2778
|
-
return renderDiagramDocument(positioned);
|
|
104
|
+
export function validateDiagram(input) {
|
|
105
|
+
return validate(input);
|
|
2779
106
|
}
|
|
2780
|
-
function
|
|
2781
|
-
|
|
2782
|
-
|
|
2783
|
-
|
|
2784
|
-
|
|
2785
|
-
server.registerTool(
|
|
2786
|
-
"validate_diagram",
|
|
2787
|
-
{
|
|
2788
|
-
title: "Validate Diagram",
|
|
2789
|
-
description: "Validate a diagram against the stack-scribe schema and semantic rules.",
|
|
2790
|
-
inputSchema: ToolInputSchema,
|
|
2791
|
-
outputSchema: ValidateToolOutputSchema
|
|
2792
|
-
},
|
|
2793
|
-
async ({ diagram }) => {
|
|
2794
|
-
const result = validateDiagram(diagram);
|
|
2795
|
-
const structuredContent = {
|
|
2796
|
-
valid: result.valid,
|
|
2797
|
-
errors: result.errors.map((error) => ({
|
|
2798
|
-
path: error.path,
|
|
2799
|
-
message: error.message
|
|
2800
|
-
}))
|
|
2801
|
-
};
|
|
2802
|
-
return {
|
|
2803
|
-
content: [
|
|
2804
|
-
{
|
|
2805
|
-
type: "text",
|
|
2806
|
-
text: JSON.stringify(structuredContent, null, 2)
|
|
2807
|
-
}
|
|
2808
|
-
],
|
|
2809
|
-
structuredContent
|
|
2810
|
-
};
|
|
107
|
+
export async function renderDiagramFromInput(input) {
|
|
108
|
+
const validation = validateDiagram(input);
|
|
109
|
+
if (!validation.valid) {
|
|
110
|
+
const detail = validation.errors.map((error) => `${error.path}: ${error.message}`).join("\n");
|
|
111
|
+
throw new Error(`Diagram validation failed\n${detail}`);
|
|
2811
112
|
}
|
|
2812
|
-
|
|
2813
|
-
|
|
2814
|
-
|
|
2815
|
-
|
|
2816
|
-
|
|
2817
|
-
|
|
2818
|
-
|
|
2819
|
-
|
|
2820
|
-
}
|
|
2821
|
-
|
|
2822
|
-
|
|
2823
|
-
|
|
2824
|
-
|
|
2825
|
-
|
|
2826
|
-
|
|
2827
|
-
|
|
2828
|
-
|
|
2829
|
-
|
|
2830
|
-
|
|
2831
|
-
|
|
2832
|
-
|
|
2833
|
-
|
|
2834
|
-
|
|
2835
|
-
|
|
2836
|
-
|
|
2837
|
-
|
|
2838
|
-
|
|
2839
|
-
|
|
2840
|
-
|
|
2841
|
-
|
|
2842
|
-
|
|
2843
|
-
|
|
2844
|
-
|
|
2845
|
-
|
|
2846
|
-
|
|
2847
|
-
|
|
2848
|
-
|
|
2849
|
-
|
|
113
|
+
const parsed = DiagramSchema.parse(input);
|
|
114
|
+
const positioned = await layoutDiagram(parsed);
|
|
115
|
+
return renderDiagramDocument(positioned);
|
|
116
|
+
}
|
|
117
|
+
export function createServer() {
|
|
118
|
+
const server = new McpServer({
|
|
119
|
+
name: SERVER_NAME,
|
|
120
|
+
version: SERVER_VERSION,
|
|
121
|
+
});
|
|
122
|
+
server.registerTool("validate_diagram", {
|
|
123
|
+
title: "Validate Diagram",
|
|
124
|
+
description: "Validate a diagram against the stack-scribe schema and semantic rules.",
|
|
125
|
+
inputSchema: ToolInputSchema,
|
|
126
|
+
outputSchema: ValidateToolOutputSchema,
|
|
127
|
+
}, async ({ diagram }) => {
|
|
128
|
+
const result = validateDiagram(diagram);
|
|
129
|
+
const structuredContent = {
|
|
130
|
+
valid: result.valid,
|
|
131
|
+
errors: result.errors.map((error) => ({
|
|
132
|
+
path: error.path,
|
|
133
|
+
message: error.message,
|
|
134
|
+
})),
|
|
135
|
+
};
|
|
136
|
+
return {
|
|
137
|
+
content: [
|
|
138
|
+
{
|
|
139
|
+
type: "text",
|
|
140
|
+
text: JSON.stringify(structuredContent, null, 2),
|
|
141
|
+
},
|
|
142
|
+
],
|
|
143
|
+
structuredContent,
|
|
144
|
+
};
|
|
145
|
+
});
|
|
146
|
+
server.registerTool("render_diagram", {
|
|
147
|
+
title: "Render Diagram",
|
|
148
|
+
description: "Validate, lay out, and render a diagram to an SVG resource.",
|
|
149
|
+
inputSchema: ToolInputSchema,
|
|
150
|
+
outputSchema: RenderToolOutputSchema,
|
|
151
|
+
}, async ({ diagram }) => {
|
|
152
|
+
const rendered = await renderDiagramFromInput(diagram);
|
|
153
|
+
const artifact = storeRenderArtifact({
|
|
154
|
+
createdAt: Date.now(),
|
|
155
|
+
height: rendered.height,
|
|
156
|
+
mimeType: RENDER_ARTIFACT_MIME_TYPE,
|
|
157
|
+
svg: rendered.svg,
|
|
158
|
+
width: rendered.width,
|
|
159
|
+
});
|
|
160
|
+
return {
|
|
161
|
+
content: [
|
|
162
|
+
{
|
|
163
|
+
type: "text",
|
|
164
|
+
text: `Rendered diagram available at ${artifact.uri}`,
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
type: "resource_link",
|
|
168
|
+
uri: artifact.uri,
|
|
169
|
+
name: diagram.title ?? "Rendered Diagram",
|
|
170
|
+
mimeType: artifact.mimeType,
|
|
171
|
+
description: "Rendered stack-scribe SVG artifact",
|
|
172
|
+
},
|
|
173
|
+
],
|
|
174
|
+
structuredContent: {
|
|
175
|
+
uri: artifact.uri,
|
|
176
|
+
mimeType: artifact.mimeType,
|
|
177
|
+
width: artifact.width,
|
|
178
|
+
height: artifact.height,
|
|
179
|
+
expiresAt: artifact.expiresAt,
|
|
180
|
+
},
|
|
181
|
+
};
|
|
182
|
+
});
|
|
183
|
+
server.registerTool("save_diagram", {
|
|
184
|
+
title: "Save Diagram",
|
|
185
|
+
description: "Write a previously rendered SVG diagram from the in-memory cache directly to disk without passing SVG content through the LLM context.",
|
|
186
|
+
inputSchema: z.object({
|
|
187
|
+
uri: z.string().min(1),
|
|
188
|
+
outputPath: z.string().min(1),
|
|
189
|
+
}),
|
|
190
|
+
}, async ({ uri, outputPath }) => {
|
|
191
|
+
const renderId = parseRenderId(uri.replace(RENDER_RESOURCE_PREFIX, ""));
|
|
192
|
+
if (!renderId) {
|
|
193
|
+
return {
|
|
194
|
+
content: [{ type: "text", text: `Render not found or expired: ${uri}` }],
|
|
195
|
+
isError: true,
|
|
196
|
+
};
|
|
2850
197
|
}
|
|
2851
|
-
|
|
2852
|
-
|
|
2853
|
-
|
|
2854
|
-
|
|
2855
|
-
|
|
2856
|
-
|
|
2857
|
-
|
|
2858
|
-
|
|
2859
|
-
inputSchema: z3.object({
|
|
2860
|
-
uri: z3.string().min(1),
|
|
2861
|
-
outputPath: z3.string().min(1)
|
|
2862
|
-
})
|
|
2863
|
-
},
|
|
2864
|
-
async ({ uri, outputPath }) => {
|
|
2865
|
-
const renderId = parseRenderId(uri.replace(RENDER_RESOURCE_PREFIX, ""));
|
|
2866
|
-
if (!renderId) {
|
|
198
|
+
const artifact = getRenderArtifact(renderId);
|
|
199
|
+
if (!artifact) {
|
|
200
|
+
return {
|
|
201
|
+
content: [{ type: "text", text: `Render not found or expired: ${uri}` }],
|
|
202
|
+
isError: true,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
writeFileSync(outputPath, artifact.svg, "utf8");
|
|
2867
206
|
return {
|
|
2868
|
-
|
|
2869
|
-
isError: true
|
|
207
|
+
content: [{ type: "text", text: `Saved SVG to ${outputPath} (${artifact.svg.length} bytes)` }],
|
|
2870
208
|
};
|
|
2871
|
-
|
|
2872
|
-
|
|
2873
|
-
|
|
209
|
+
});
|
|
210
|
+
server.registerTool("get_diagram_schema", {
|
|
211
|
+
title: "Get Diagram Schema",
|
|
212
|
+
description: "Return the JSON Schema that describes the stack-scribe Diagram format.",
|
|
213
|
+
outputSchema: SchemaToolOutputSchema,
|
|
214
|
+
}, async () => {
|
|
215
|
+
const schema = getDiagramJsonSchema();
|
|
2874
216
|
return {
|
|
2875
|
-
|
|
2876
|
-
|
|
217
|
+
content: [
|
|
218
|
+
{
|
|
219
|
+
type: "text",
|
|
220
|
+
text: JSON.stringify(schema, null, 2),
|
|
221
|
+
},
|
|
222
|
+
],
|
|
223
|
+
structuredContent: { schema },
|
|
2877
224
|
};
|
|
2878
|
-
|
|
2879
|
-
|
|
2880
|
-
|
|
2881
|
-
|
|
2882
|
-
|
|
2883
|
-
}
|
|
2884
|
-
|
|
2885
|
-
|
|
2886
|
-
|
|
2887
|
-
|
|
2888
|
-
|
|
2889
|
-
|
|
2890
|
-
|
|
2891
|
-
|
|
2892
|
-
|
|
2893
|
-
|
|
2894
|
-
|
|
2895
|
-
|
|
2896
|
-
|
|
2897
|
-
|
|
2898
|
-
|
|
2899
|
-
|
|
2900
|
-
|
|
2901
|
-
|
|
2902
|
-
|
|
2903
|
-
|
|
2904
|
-
|
|
2905
|
-
|
|
2906
|
-
|
|
2907
|
-
|
|
2908
|
-
|
|
2909
|
-
|
|
2910
|
-
|
|
2911
|
-
|
|
2912
|
-
|
|
2913
|
-
|
|
2914
|
-
|
|
2915
|
-
|
|
2916
|
-
|
|
2917
|
-
|
|
2918
|
-
|
|
2919
|
-
|
|
2920
|
-
|
|
2921
|
-
|
|
2922
|
-
]
|
|
2923
|
-
};
|
|
2924
|
-
}
|
|
2925
|
-
);
|
|
2926
|
-
server.registerResource(
|
|
2927
|
-
"rendered-diagram",
|
|
2928
|
-
new ResourceTemplate(RENDER_RESOURCE_TEMPLATE, { list: void 0 }),
|
|
2929
|
-
{
|
|
2930
|
-
title: "Rendered Diagram",
|
|
2931
|
-
description: "Session-scoped SVG render artifact produced by stack-scribe.",
|
|
2932
|
-
mimeType: RENDER_ARTIFACT_MIME_TYPE
|
|
2933
|
-
},
|
|
2934
|
-
async (uri, variables) => {
|
|
2935
|
-
const renderIdValue = variables.renderId;
|
|
2936
|
-
const renderId = Array.isArray(renderIdValue) ? parseRenderId(renderIdValue[0] ?? "") : parseRenderId(String(renderIdValue ?? "")) ?? parseRenderId(uri.pathname);
|
|
2937
|
-
if (!renderId) {
|
|
2938
|
-
throw new Error(`Invalid render artifact URI: ${uri.href}`);
|
|
2939
|
-
}
|
|
2940
|
-
const artifact = getRenderArtifact(renderId);
|
|
2941
|
-
if (!artifact) {
|
|
2942
|
-
throw new Error(`Render artifact not found or expired: ${uri.href}`);
|
|
2943
|
-
}
|
|
2944
|
-
return {
|
|
2945
|
-
contents: [
|
|
2946
|
-
{
|
|
2947
|
-
uri: artifact.uri,
|
|
2948
|
-
mimeType: artifact.mimeType,
|
|
2949
|
-
text: artifact.svg
|
|
2950
|
-
}
|
|
2951
|
-
]
|
|
2952
|
-
};
|
|
2953
|
-
}
|
|
2954
|
-
);
|
|
2955
|
-
return server;
|
|
225
|
+
});
|
|
226
|
+
server.registerResource("diagram-schema", DIAGRAM_SCHEMA_URI, {
|
|
227
|
+
title: "Diagram Schema",
|
|
228
|
+
description: "JSON Schema for the stack-scribe Diagram format.",
|
|
229
|
+
mimeType: "application/schema+json",
|
|
230
|
+
}, async () => {
|
|
231
|
+
const schema = getDiagramJsonSchema();
|
|
232
|
+
return {
|
|
233
|
+
contents: [
|
|
234
|
+
{
|
|
235
|
+
uri: DIAGRAM_SCHEMA_URI,
|
|
236
|
+
mimeType: "application/schema+json",
|
|
237
|
+
text: JSON.stringify(schema, null, 2),
|
|
238
|
+
},
|
|
239
|
+
],
|
|
240
|
+
};
|
|
241
|
+
});
|
|
242
|
+
server.registerResource("rendered-diagram", new ResourceTemplate(RENDER_RESOURCE_TEMPLATE, { list: undefined }), {
|
|
243
|
+
title: "Rendered Diagram",
|
|
244
|
+
description: "Session-scoped SVG render artifact produced by stack-scribe.",
|
|
245
|
+
mimeType: RENDER_ARTIFACT_MIME_TYPE,
|
|
246
|
+
}, async (uri, variables) => {
|
|
247
|
+
const renderIdValue = variables.renderId;
|
|
248
|
+
const renderId = Array.isArray(renderIdValue)
|
|
249
|
+
? parseRenderId(renderIdValue[0] ?? "")
|
|
250
|
+
: parseRenderId(String(renderIdValue ?? "")) ?? parseRenderId(uri.pathname);
|
|
251
|
+
if (!renderId) {
|
|
252
|
+
throw new Error(`Invalid render artifact URI: ${uri.href}`);
|
|
253
|
+
}
|
|
254
|
+
const artifact = getRenderArtifact(renderId);
|
|
255
|
+
if (!artifact) {
|
|
256
|
+
throw new Error(`Render artifact not found or expired: ${uri.href}`);
|
|
257
|
+
}
|
|
258
|
+
return {
|
|
259
|
+
contents: [
|
|
260
|
+
{
|
|
261
|
+
uri: artifact.uri,
|
|
262
|
+
mimeType: artifact.mimeType,
|
|
263
|
+
text: artifact.svg,
|
|
264
|
+
},
|
|
265
|
+
],
|
|
266
|
+
};
|
|
267
|
+
});
|
|
268
|
+
return server;
|
|
2956
269
|
}
|
|
2957
|
-
async function startServer() {
|
|
2958
|
-
|
|
2959
|
-
|
|
2960
|
-
|
|
2961
|
-
|
|
270
|
+
export async function startServer() {
|
|
271
|
+
const server = createServer();
|
|
272
|
+
const transport = new StdioServerTransport();
|
|
273
|
+
await server.connect(transport);
|
|
274
|
+
return server;
|
|
2962
275
|
}
|
|
2963
276
|
async function main() {
|
|
2964
|
-
|
|
277
|
+
await startServer();
|
|
2965
278
|
}
|
|
2966
|
-
|
|
279
|
+
const isEntrypoint = process.argv[1] && import.meta.url === new URL(process.argv[1], "file:").href;
|
|
2967
280
|
if (isEntrypoint) {
|
|
2968
|
-
|
|
2969
|
-
|
|
2970
|
-
|
|
2971
|
-
|
|
281
|
+
main().catch((error) => {
|
|
282
|
+
console.error("Server error:", error);
|
|
283
|
+
process.exit(1);
|
|
284
|
+
});
|
|
2972
285
|
}
|
|
2973
|
-
export {
|
|
2974
|
-
createServer,
|
|
2975
|
-
getDiagramJsonSchema,
|
|
2976
|
-
renderDiagramFromInput,
|
|
2977
|
-
startServer,
|
|
2978
|
-
validateDiagram
|
|
2979
|
-
};
|
|
2980
286
|
//# sourceMappingURL=index.js.map
|