@takodotid/circuit 0.34.3 → 0.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (240) hide show
  1. package/README.md +14 -15
  2. package/dist/chunks/index-20kcjxjg.js +174 -0
  3. package/dist/chunks/index-2r4bbhac.js +977 -0
  4. package/dist/chunks/index-n7w3tg5y.js +149 -0
  5. package/dist/chunks/new-w3zys5y4.js +172 -0
  6. package/dist/chunks/server-gzsf5me5.js +259 -0
  7. package/dist/cli/index.js +11345 -9024
  8. package/dist/helpers/index.js +594 -0
  9. package/dist/index.js +9 -28
  10. package/dist/types/core/{addresses.d.ts → address-space.d.ts} +23 -7
  11. package/dist/types/core/address.d.ts +44 -0
  12. package/dist/types/core/cabling.d.ts +41 -0
  13. package/dist/types/core/cross-checks.d.ts +28 -0
  14. package/dist/types/core/define.d.ts +25 -3
  15. package/dist/types/core/project-files.d.ts +12 -0
  16. package/dist/types/core/schema-docs.d.ts +13 -4
  17. package/dist/types/core/secrets.d.ts +62 -21
  18. package/dist/types/core/{graph.d.ts → topology.d.ts} +32 -12
  19. package/dist/types/core/utils.d.ts +8 -0
  20. package/dist/types/core/validator.d.ts +19 -0
  21. package/dist/types/helpers/bgp.d.ts +97 -0
  22. package/dist/types/helpers/checks.d.ts +32 -0
  23. package/dist/types/helpers/exchange.d.ts +49 -0
  24. package/dist/types/helpers/filters.d.ts +51 -0
  25. package/dist/types/helpers/index.d.ts +10 -0
  26. package/dist/types/helpers/route-server.d.ts +52 -0
  27. package/dist/types/index.d.ts +5 -3
  28. package/dist/types/integrations/librenms.d.ts +60 -0
  29. package/dist/types/integrations/netbox.d.ts +89 -0
  30. package/dist/types/integrations/peeringdb.d.ts +24 -0
  31. package/dist/types/integrations/prometheus.d.ts +24 -0
  32. package/dist/types/integrations/registries.d.ts +8 -0
  33. package/dist/types/platforms/bgp-wait.d.ts +18 -0
  34. package/dist/types/platforms/catalog.d.ts +109 -0
  35. package/dist/types/platforms/derive.d.ts +17 -0
  36. package/dist/types/platforms/fortios/firewall.d.ts +45 -0
  37. package/dist/types/platforms/fortios/index.d.ts +134 -0
  38. package/dist/types/platforms/fortios/names.d.ts +52 -0
  39. package/dist/types/platforms/fortios/plan.d.ts +104 -0
  40. package/dist/types/platforms/fortios/render.d.ts +75 -0
  41. package/dist/types/platforms/fortios/routing.d.ts +56 -0
  42. package/dist/types/platforms/fortios/tree.d.ts +37 -0
  43. package/dist/types/platforms/index.d.ts +13 -0
  44. package/dist/types/platforms/junos/bgp.d.ts +44 -0
  45. package/dist/types/platforms/junos/index.d.ts +114 -0
  46. package/dist/types/platforms/junos/render.d.ts +154 -0
  47. package/dist/types/platforms/line-diff.d.ts +67 -0
  48. package/dist/types/platforms/platform.d.ts +120 -0
  49. package/dist/types/platforms/raisecom-ros/index.d.ts +71 -0
  50. package/dist/types/platforms/raisecom-ros/render.d.ts +41 -0
  51. package/dist/types/platforms/routeros/export.d.ts +59 -0
  52. package/dist/types/platforms/routeros/index.d.ts +96 -0
  53. package/dist/types/{adapters/devices → platforms}/routeros/models.d.ts +4 -0
  54. package/dist/types/platforms/routeros/plan.d.ts +54 -0
  55. package/dist/types/platforms/routeros/render.d.ts +240 -0
  56. package/dist/types/platforms/vrp/index.d.ts +83 -0
  57. package/dist/types/platforms/vrp/render.d.ts +96 -0
  58. package/dist/types/schema/common.d.ts +12 -6
  59. package/dist/types/schema/index.d.ts +1 -0
  60. package/dist/types/schema/interfaces.d.ts +14 -6
  61. package/dist/types/schema/policy.d.ts +18 -10
  62. package/dist/types/schema/routing.d.ts +14 -1
  63. package/dist/types/schema/system.d.ts +16 -6
  64. package/dist/types/schema/time-zones.d.ts +2 -0
  65. package/dist/types/transport/console.d.ts +79 -23
  66. package/dist/types/transport/path-check.d.ts +32 -0
  67. package/dist/types/transport/ssh.d.ts +17 -15
  68. package/package.json +18 -12
  69. package/src/cli/graph-format.ts +91 -0
  70. package/src/cli/index.ts +1074 -484
  71. package/src/cli/new.ts +208 -175
  72. package/src/cli/rename.ts +97 -91
  73. package/src/core/address-space.ts +320 -0
  74. package/src/core/address.ts +202 -0
  75. package/src/core/cabling.ts +154 -0
  76. package/src/core/cross-checks.ts +364 -0
  77. package/src/core/define.ts +26 -3
  78. package/src/core/project-files.ts +35 -0
  79. package/src/core/schema-docs.ts +138 -130
  80. package/src/core/secrets.ts +170 -76
  81. package/src/core/topology.ts +656 -0
  82. package/src/core/utils.ts +37 -0
  83. package/src/core/validator.ts +407 -0
  84. package/src/helpers/bgp.ts +301 -0
  85. package/src/helpers/checks.ts +178 -0
  86. package/src/helpers/exchange.ts +117 -0
  87. package/src/helpers/filters.ts +107 -0
  88. package/src/helpers/index.ts +12 -0
  89. package/src/helpers/route-server.ts +212 -0
  90. package/src/index.ts +6 -3
  91. package/src/integrations/librenms.ts +291 -0
  92. package/src/integrations/netbox.ts +620 -0
  93. package/src/integrations/peeringdb.ts +173 -0
  94. package/src/integrations/prometheus.ts +90 -0
  95. package/src/integrations/registries.ts +25 -0
  96. package/src/platforms/bgp-wait.ts +41 -0
  97. package/src/platforms/catalog.ts +69 -0
  98. package/src/platforms/derive.ts +117 -0
  99. package/src/{adapters/devices → platforms}/fortios/TRAPS.md +6 -0
  100. package/src/platforms/fortios/firewall.ts +377 -0
  101. package/src/platforms/fortios/index.ts +1060 -0
  102. package/src/platforms/fortios/names.ts +130 -0
  103. package/src/platforms/fortios/plan.ts +929 -0
  104. package/src/platforms/fortios/render.ts +779 -0
  105. package/src/platforms/fortios/routing.ts +476 -0
  106. package/src/platforms/fortios/tree.ts +129 -0
  107. package/src/platforms/index.ts +36 -0
  108. package/src/{adapters/devices → platforms}/junos/TRAPS.md +8 -0
  109. package/src/platforms/junos/bgp.ts +293 -0
  110. package/src/platforms/junos/index.ts +1006 -0
  111. package/src/platforms/junos/render.ts +967 -0
  112. package/src/platforms/line-diff.ts +244 -0
  113. package/src/platforms/platform.ts +122 -0
  114. package/src/platforms/raisecom-ros/TRAPS.md +40 -0
  115. package/src/platforms/raisecom-ros/index.ts +731 -0
  116. package/src/platforms/raisecom-ros/render.ts +328 -0
  117. package/src/{adapters/devices → platforms}/routeros/TRAPS.md +16 -2
  118. package/src/platforms/routeros/export.ts +342 -0
  119. package/src/platforms/routeros/index.ts +636 -0
  120. package/src/{adapters/devices → platforms}/routeros/models.ts +2 -0
  121. package/src/platforms/routeros/plan.ts +444 -0
  122. package/src/platforms/routeros/render.ts +1483 -0
  123. package/src/platforms/vrp/TRAPS.md +45 -0
  124. package/src/platforms/vrp/index.ts +652 -0
  125. package/src/platforms/vrp/render.ts +615 -0
  126. package/src/schema/common.ts +15 -6
  127. package/src/schema/index.ts +1 -0
  128. package/src/schema/interfaces.ts +15 -5
  129. package/src/schema/policy.ts +22 -10
  130. package/src/schema/routing.ts +16 -1
  131. package/src/schema/system.ts +16 -6
  132. package/src/schema/time-zones.ts +482 -0
  133. package/src/studio/data.ts +172 -168
  134. package/src/studio/git.ts +95 -90
  135. package/src/studio/public/app.js +161 -150
  136. package/src/studio/public/compare.js +219 -212
  137. package/src/studio/public/diff.js +77 -75
  138. package/src/studio/public/dom.js +118 -108
  139. package/src/studio/public/evaluate.js +584 -545
  140. package/src/studio/public/export.js +120 -118
  141. package/src/studio/public/graph.js +1343 -1266
  142. package/src/studio/public/net.js +115 -109
  143. package/src/studio/public/tables.js +1135 -1083
  144. package/src/studio/public/tools.js +561 -529
  145. package/src/studio/server.ts +202 -196
  146. package/src/transport/console.ts +363 -271
  147. package/src/transport/path-check.ts +91 -0
  148. package/src/transport/ssh.ts +98 -94
  149. package/templates/colocation/checks.ts +11 -6
  150. package/templates/colocation/edge-01.ts +9 -9
  151. package/templates/colocation/routing.ts +2 -2
  152. package/templates/colocation/tenancy.ts +3 -3
  153. package/templates/colocation/tor-01.ts +3 -3
  154. package/templates/edge-router/checks.ts +4 -4
  155. package/templates/edge-router/edge-01.ts +5 -5
  156. package/templates/edge-router/routing.ts +2 -2
  157. package/templates/project/AGENTS.md +5 -1
  158. package/templates/single-site/checks.ts +2 -2
  159. package/dist/chunks/index-47debt16.js +0 -956
  160. package/dist/chunks/index-v8zgr7wm.js +0 -128
  161. package/dist/chunks/new-ny89s7y7.js +0 -166
  162. package/dist/chunks/server-tjbb3rqc.js +0 -251
  163. package/dist/presets/index.js +0 -394
  164. package/dist/types/adapters/devices/catalog.d.ts +0 -86
  165. package/dist/types/adapters/devices/derive.d.ts +0 -7
  166. package/dist/types/adapters/devices/fortios/firewall.d.ts +0 -23
  167. package/dist/types/adapters/devices/fortios/index.d.ts +0 -58
  168. package/dist/types/adapters/devices/fortios/names.d.ts +0 -48
  169. package/dist/types/adapters/devices/fortios/plan.d.ts +0 -28
  170. package/dist/types/adapters/devices/fortios/render.d.ts +0 -38
  171. package/dist/types/adapters/devices/fortios/routing.d.ts +0 -32
  172. package/dist/types/adapters/devices/fortios/tree.d.ts +0 -33
  173. package/dist/types/adapters/devices/index.d.ts +0 -3
  174. package/dist/types/adapters/devices/junos/bgp.d.ts +0 -11
  175. package/dist/types/adapters/devices/junos/index.d.ts +0 -42
  176. package/dist/types/adapters/devices/junos/render.d.ts +0 -52
  177. package/dist/types/adapters/devices/lines.d.ts +0 -56
  178. package/dist/types/adapters/devices/raisecom-ros/index.d.ts +0 -28
  179. package/dist/types/adapters/devices/routeros/export.d.ts +0 -39
  180. package/dist/types/adapters/devices/routeros/index.d.ts +0 -30
  181. package/dist/types/adapters/devices/routeros/plan.d.ts +0 -4
  182. package/dist/types/adapters/devices/routeros/render.d.ts +0 -100
  183. package/dist/types/adapters/devices/types.d.ts +0 -40
  184. package/dist/types/adapters/devices/vrp/index.d.ts +0 -27
  185. package/dist/types/adapters/registries/index.d.ts +0 -3
  186. package/dist/types/adapters/registries/librenms.d.ts +0 -15
  187. package/dist/types/adapters/registries/peeringdb.d.ts +0 -16
  188. package/dist/types/adapters/registries/prometheus.d.ts +0 -16
  189. package/dist/types/core/across.d.ts +0 -4
  190. package/dist/types/core/addr.d.ts +0 -34
  191. package/dist/types/core/files.d.ts +0 -6
  192. package/dist/types/core/merge.d.ts +0 -4
  193. package/dist/types/core/time.d.ts +0 -2
  194. package/dist/types/core/validate.d.ts +0 -2
  195. package/dist/types/presets/index.d.ts +0 -183
  196. package/src/adapters/devices/catalog.ts +0 -41
  197. package/src/adapters/devices/derive.ts +0 -59
  198. package/src/adapters/devices/fortios/firewall.ts +0 -362
  199. package/src/adapters/devices/fortios/index.ts +0 -923
  200. package/src/adapters/devices/fortios/names.ts +0 -115
  201. package/src/adapters/devices/fortios/plan.ts +0 -888
  202. package/src/adapters/devices/fortios/render.ts +0 -768
  203. package/src/adapters/devices/fortios/routing.ts +0 -444
  204. package/src/adapters/devices/fortios/tree.ts +0 -121
  205. package/src/adapters/devices/index.ts +0 -9
  206. package/src/adapters/devices/junos/bgp.ts +0 -269
  207. package/src/adapters/devices/junos/index.ts +0 -862
  208. package/src/adapters/devices/junos/render.ts +0 -872
  209. package/src/adapters/devices/lines.ts +0 -212
  210. package/src/adapters/devices/raisecom-ros/TRAPS.md +0 -26
  211. package/src/adapters/devices/raisecom-ros/index.ts +0 -700
  212. package/src/adapters/devices/routeros/export.ts +0 -321
  213. package/src/adapters/devices/routeros/index.ts +0 -346
  214. package/src/adapters/devices/routeros/plan.ts +0 -398
  215. package/src/adapters/devices/routeros/render.ts +0 -1490
  216. package/src/adapters/devices/types.ts +0 -38
  217. package/src/adapters/devices/vrp/TRAPS.md +0 -26
  218. package/src/adapters/devices/vrp/index.ts +0 -865
  219. package/src/adapters/registries/index.ts +0 -19
  220. package/src/adapters/registries/librenms.ts +0 -92
  221. package/src/adapters/registries/peeringdb.ts +0 -169
  222. package/src/adapters/registries/prometheus.ts +0 -71
  223. package/src/cli/graph.ts +0 -89
  224. package/src/core/across.ts +0 -350
  225. package/src/core/addr.ts +0 -174
  226. package/src/core/addresses.ts +0 -316
  227. package/src/core/files.ts +0 -32
  228. package/src/core/graph.ts +0 -640
  229. package/src/core/merge.ts +0 -19
  230. package/src/core/time.ts +0 -15
  231. package/src/core/validate.ts +0 -348
  232. package/src/presets/index.ts +0 -579
  233. /package/dist/types/{adapters/devices → platforms}/fortios/models.d.ts +0 -0
  234. /package/dist/types/{adapters/devices → platforms}/junos/models.d.ts +0 -0
  235. /package/dist/types/{adapters/devices → platforms}/raisecom-ros/models.d.ts +0 -0
  236. /package/dist/types/{adapters/devices → platforms}/vrp/models.d.ts +0 -0
  237. /package/src/{adapters/devices → platforms}/fortios/models.ts +0 -0
  238. /package/src/{adapters/devices → platforms}/junos/models.ts +0 -0
  239. /package/src/{adapters/devices → platforms}/raisecom-ros/models.ts +0 -0
  240. /package/src/{adapters/devices → platforms}/vrp/models.ts +0 -0
@@ -2,127 +2,137 @@
2
2
  /// <reference lib="dom" />
3
3
  // Small helpers every part of Studio's page uses: making elements, links that act, and browser storage that may be missing.
4
4
 
5
- const SVG = "http://www.w3.org/2000/svg";
6
-
7
5
  /** @typedef {Node | string | undefined | false} Child */
8
6
 
9
- /**
10
- * An element with attributes and children. Text is always set as text, never parsed as HTML.
11
- *
12
- * @template {keyof HTMLElementTagNameMap} K
13
- * @param {K} tag
14
- * @param {Record<string, string>} [attributes]
15
- * @param {...Child} children
16
- * @returns {HTMLElementTagNameMap[K]}
17
- */
18
- export function h(tag, attributes = {}, ...children) {
19
- const element = document.createElement(tag);
20
- for (const [name, value] of Object.entries(attributes)) element.setAttribute(name, value);
21
- for (const child of children) if (child !== undefined && child !== false) element.append(child);
22
- return element;
23
- }
24
-
25
- /**
26
- * An SVG element with attributes.
27
- *
28
- * @template {keyof SVGElementTagNameMap} K
29
- * @param {K} tag
30
- * @param {Record<string, string | number>} [attributes]
31
- * @returns {SVGElementTagNameMap[K]}
32
- */
33
- export function s(tag, attributes = {}) {
34
- const element = document.createElementNS(SVG, tag);
35
- for (const [name, value] of Object.entries(attributes)) element.setAttribute(name, String(value));
36
- return element;
37
- }
7
+ export class Dom {
8
+ static #SVG = /** @type {const} */ ("http://www.w3.org/2000/svg");
38
9
 
39
- /**
40
- * A link that runs an action, by mouse or keyboard.
41
- *
42
- * @param {string} text
43
- * @param {() => void} action
44
- */
45
- export function link(text, action) {
46
- const anchor = h("a", { role: "button", tabindex: "0" }, text);
47
- anchor.addEventListener("click", action);
48
- anchor.addEventListener("keydown", (event) => event.key === "Enter" && action());
49
- return anchor;
50
- }
10
+ /**
11
+ * An element with attributes and children. Text is always set as text, never parsed as HTML.
12
+ *
13
+ * @template {keyof HTMLElementTagNameMap} K
14
+ * @param {K} tag
15
+ * @param {Record<string, string>} [attributes]
16
+ * @param {...Child} children
17
+ * @returns {HTMLElementTagNameMap[K]}
18
+ */
19
+ static h(tag, attributes = {}, ...children) {
20
+ const element = document.createElement(tag);
21
+ for (const [name, value] of Object.entries(attributes)) element.setAttribute(name, value);
22
+ for (const child of children) if (child !== undefined && child !== false) element.append(child);
23
+ return element;
24
+ }
51
25
 
52
- /**
53
- * The element with this id, which index.html always has.
54
- *
55
- * @param {string} id
56
- */
57
- export function byId(id) {
58
- const element = document.getElementById(id);
59
- if (!(element instanceof HTMLElement)) throw new Error(`index.html has no element ${id}`);
60
- return element;
61
- }
26
+ /**
27
+ * An SVG element with attributes.
28
+ *
29
+ * @template {keyof SVGElementTagNameMap} K
30
+ * @param {K} tag
31
+ * @param {Record<string, string | number>} [attributes]
32
+ * @returns {SVGElementTagNameMap[K]}
33
+ */
34
+ static s(tag, attributes = {}) {
35
+ const element = document.createElementNS(Dom.#SVG, tag);
36
+ for (const [name, value] of Object.entries(attributes)) element.setAttribute(name, String(value));
37
+ return element;
38
+ }
62
39
 
63
- /**
64
- * The SVG element with this id, which index.html always has.
65
- *
66
- * @param {string} id
67
- */
68
- export function svgById(id) {
69
- const element = document.getElementById(id);
70
- if (!(element instanceof SVGElement)) throw new Error(`index.html has no SVG element ${id}`);
71
- return element;
72
- }
40
+ /**
41
+ * A link that runs an action, by mouse or keyboard.
42
+ *
43
+ * @param {string} text
44
+ * @param {() => void} action
45
+ */
46
+ static link(text, action) {
47
+ const anchor = Dom.h("a", { role: "button", tabindex: "0" }, text);
48
+ anchor.addEventListener("click", action);
49
+ anchor.addEventListener("keydown", (event) => event.key === "Enter" && action());
50
+ return anchor;
51
+ }
73
52
 
74
- /** The reader's system asks for less motion: nothing moves for show, and changes happen at once. */
75
- export const still = matchMedia("(prefers-reduced-motion: reduce)");
53
+ /**
54
+ * The element with this id, which index.html always has.
55
+ *
56
+ * @param {string} id
57
+ */
58
+ static byId(id) {
59
+ const element = document.getElementById(id);
60
+ if (!(element instanceof HTMLElement)) throw new Error(`index.html has no element ${id}`);
61
+ return element;
62
+ }
76
63
 
77
- /**
78
- * Bring a part of the page in as it changes: it fades in and rises a little.
79
- *
80
- * @param {Element} element
81
- */
82
- export function enter(element) {
83
- if (still.matches) return;
64
+ /**
65
+ * The SVG element with this id, which index.html always has.
66
+ *
67
+ * @param {string} id
68
+ */
69
+ static svgById(id) {
70
+ const element = document.getElementById(id);
71
+ if (!(element instanceof SVGElement)) throw new Error(`index.html has no SVG element ${id}`);
72
+ return element;
73
+ }
84
74
 
85
- element.animate(
86
- [
87
- { opacity: 0, transform: "translateY(6px)" },
88
- { opacity: 1, transform: "none" },
89
- ],
90
- { duration: 240, easing: "cubic-bezier(0.16, 1, 0.3, 1)" }
91
- );
92
- }
75
+ /**
76
+ * The reader's system asks for less motion: nothing moves for show, and changes happen at once.
77
+ *
78
+ * @readonly
79
+ */
80
+ static still = matchMedia("(prefers-reduced-motion: reduce)");
93
81
 
94
- /** Browser storage can be missing or refuse, in a private window for example. The page works without it. */
95
- export const store = {
96
82
  /**
97
- * @template T
98
- * @param {string} key
99
- * @returns {T | undefined}
83
+ * Bring a part of the page in as it changes: it fades in and rises a little.
84
+ *
85
+ * @param {Element} element
100
86
  */
101
- get(key) {
102
- try {
103
- const value = localStorage.getItem(`circuit-studio:${key}`);
104
- return value === null ? undefined : /** @type {T} */ (JSON.parse(value));
105
- } catch {
106
- return undefined;
107
- }
108
- },
87
+ static enter(element) {
88
+ if (Dom.still.matches) return;
89
+
90
+ element.animate(
91
+ [
92
+ { opacity: 0, transform: "translateY(6px)" },
93
+ { opacity: 1, transform: "none" },
94
+ ],
95
+ { duration: 240, easing: "cubic-bezier(0.16, 1, 0.3, 1)" }
96
+ );
97
+ }
109
98
 
110
99
  /**
111
- * @param {string} key
112
- * @param {unknown} value
100
+ * Browser storage can be missing or refuse, in a private window for example. The page works without it.
101
+ *
102
+ * @readonly
113
103
  */
114
- set(key, value) {
115
- try {
116
- localStorage.setItem(`circuit-studio:${key}`, JSON.stringify(value));
117
- } catch {}
118
- },
119
- };
104
+ static store = {
105
+ /**
106
+ * @template T
107
+ * @param {string} key
108
+ * @returns {T | undefined}
109
+ */
110
+ get(key) {
111
+ try {
112
+ const value = localStorage.getItem(`circuit-studio:${key}`);
113
+ return value === null ? undefined : /** @type {T} */ (JSON.parse(value));
114
+ } catch {
115
+ return undefined;
116
+ }
117
+ },
120
118
 
121
- /**
122
- * Go to a place in Studio, such as `graph/bgp` or `devices/edge-01/ports`. The place is the address's fragment, so the back button and a bookmark work.
123
- *
124
- * @param {string} route
125
- */
126
- export function go(route) {
127
- location.hash = route;
119
+ /**
120
+ * @param {string} key
121
+ * @param {unknown} value
122
+ */
123
+ set(key, value) {
124
+ try {
125
+ localStorage.setItem(`circuit-studio:${key}`, JSON.stringify(value));
126
+ } catch {}
127
+ },
128
+ };
129
+
130
+ /**
131
+ * Go to a place in Studio, such as `graph/bgp` or `devices/edge-01/ports`. The place is the address's fragment, so the back button and a bookmark work.
132
+ *
133
+ * @param {string} route
134
+ */
135
+ static go(route) {
136
+ location.hash = route;
137
+ }
128
138
  }