From 7c108a83d2e7c8f8649dce43895aed2703e3b24b Mon Sep 17 00:00:00 2001 From: Pete Crocker Date: Wed, 18 Jun 2025 18:46:11 +0200 Subject: [PATCH 01/24] add toc --- .metadata.yml | 19 + docs/docs/schema-library.mdx | 479 ++++++++++-------- experimental/circuit_service/README.md | 2 +- experimental/infiniband/README.md | 2 +- experimental/modules_linecards/README.md | 6 +- experimental/modules_routing_engine/README.md | 8 +- experimental/qos/README.md | 2 + experimental/tenancy/README.md | 2 +- experimental/vlan-translation/README.md | 2 +- extensions/circuit/README.md | 2 +- extensions/cluster/README.md | 2 +- extensions/dwdm/README.md | 12 +- extensions/firewall_policer/README.md | 2 + extensions/hosting_cluster/README.md | 2 +- extensions/patch_panel/README.md | 2 + extensions/peering_ixp/README.md | 2 +- extensions/qinq/README.md | 2 +- extensions/routing/README.md | 10 +- extensions/routing_aggregate/README.md | 2 +- extensions/routing_bgp/README.md | 2 +- extensions/routing_bgp_community/README.md | 2 +- extensions/routing_bgp_rr/README.md | 2 +- extensions/routing_ospf/README.md | 20 +- extensions/routing_pim/README.md | 16 +- .../routing_policies_aggregate/README.md | 20 +- extensions/routing_policies_bgp/README.md | 2 +- extensions/routing_policies_ospf/README.md | 2 +- extensions/routing_policies_pim/README.md | 2 +- extensions/snmp/README.md | 2 + extensions/vrrp/README.md | 6 +- tasks/schemas.py | 19 + 31 files changed, 367 insertions(+), 288 deletions(-) diff --git a/.metadata.yml b/.metadata.yml index f5574ce..8f4536e 100644 --- a/.metadata.yml +++ b/.metadata.yml @@ -35,6 +35,25 @@ experimental/location_extended: This schema extension is the most detailed when it comes to location, you'll find all the layers you can think of. name: Location Extended +experimental/modules_linecards: + dependencies: + - base + - extensions/modules + description: + This schema extension allows you to capture Linecard related information + like the version. You can insert the Linecard into a Dcim Physical Device + and leverage the Linecard type model. The Linecard can accept PIC to help + configure PORT information like breakout-capabilities and configurations. + name: Linecard Module +experimental/modules_routing_engine: + dependencies: + - base + - extensions/modules + description: + This schema extension allows you to capture Routing Engine related information + like the version. You can insert the Routing Engine into a Dcim Physical Device + and leverage the Routing Engine type model. + name: Routing Engine Module experimental/qos: dependencies: - base diff --git a/docs/docs/schema-library.mdx b/docs/docs/schema-library.mdx index 0df32fa..3f55687 100644 --- a/docs/docs/schema-library.mdx +++ b/docs/docs/schema-library.mdx @@ -3,6 +3,67 @@ title: Schema Library Documentation --- +# Table of Contents + +## Base + +- [dcim](#base-schemas) +- [ipam](#base-schemas) +- [location](#base-schemas) +- [organization](#base-schemas) + +## Extensions + +- [cable](#extension-cable) +- [circuit](#extension-circuit) +- [cluster](#extension-cluster) +- [compute](#extension-compute) +- [cross_connect](#extension-cross_connect) +- [dwdm](#extension-dwdm) +- [firewall_policer](#extension-firewall_policer) +- [hosting_cluster](#extension-hosting_cluster) +- [interface_breakout](#extension-interface_breakout) +- [lag](#extension-lag) +- [location_minimal](#extension-location_minimal) +- [modules](#extension-modules) +- [patch_panel](#extension-patch_panel) +- [peering_ixp](#extension-peering_ixp) +- [physical_disk](#extension-physical_disk) +- [qinq](#extension-qinq) +- [routing](#extension-routing) +- [routing_aggregate](#extension-routing_aggregate) +- [routing_bgp](#extension-routing_bgp) +- [routing_bgp_community](#extension-routing_bgp_community) +- [routing_bgp_rr](#extension-routing_bgp_rr) +- [routing_ospf](#extension-routing_ospf) +- [routing_pim](#extension-routing_pim) +- [routing_policies](#extension-routing_policies) +- [routing_policies_aggregate](#extension-routing_policies_aggregate) +- [routing_policies_bgp](#extension-routing_policies_bgp) +- [routing_policies_ospf](#extension-routing_policies_ospf) +- [routing_policies_pim](#extension-routing_policies_pim) +- [sfp](#extension-sfp) +- [snmp](#extension-snmp) +- [topology](#extension-topology) +- [users](#extension-users) +- [vlan](#extension-vlan) +- [vrf](#extension-vrf) +- [vrrp](#extension-vrrp) + +## Experimental + +- [azure](#experimental-azure) +- [circuit_service](#experimental-circuit_service) +- [infiniband](#experimental-infiniband) +- [location_extended](#experimental-location_extended) +- [modules_linecards](#experimental-modules_linecards) +- [modules_routing_engine](#experimental-modules_routing_engine) +- [qos](#experimental-qos) +- [security](#experimental-security) +- [tenancy](#experimental-tenancy) +- [topology](#experimental-topology) +- [vlan-translation](#experimental-vlan-translation) + # Base Schemas The base schemas serve as the foundation for every single schema extension you might want to use afterward. This one is mandatory and will unlock access to the extensions section. @@ -409,7 +470,7 @@ The base schemas serve as the foundation for every single schema extension you m This schema inherits the `RoutingPolicy` schema and removes `import_policies` and `export_policies` attributes. However it adds a number of relationships to `RoutingPIM`. -Dependencies: `base, extensions.routing, extensions.routing_policies, extensions.routing_pim` +Dependencies: `base, extensions/routing, extensions/routing_policies, extensions/routing_pim` ## routing_policies_pim @@ -477,7 +538,7 @@ Dependencies: `base` This schema extension contains the foundations to capture clusters. With this one in place you can unlock various clusters flavors (hosting cluster able to host VMs, firewall clusters built with specific appliances ...) -Dependencies: `base, extensions.compute` +Dependencies: `base, extensions/compute` ## cluster @@ -540,59 +601,12 @@ Dependencies: `base, extensions.compute` | ---- | ----- | ---- | ----------- | ---- | ----------- | -------- | | clusters | Clusters | ClusterGeneric | many | Component | All clusters available on that location\. | True | -# Routing Engine - -This schema extension allows you to capture Routing Engine related information like the version. You can insert the Routing Engine into a Dcim Physical Device and leverage the Routing Engine type model. - -Dependencies: `base, extensions.modules` - -## routing_engine - -- **Version:** 1.0 - -## Nodes - -### RoutingEngineType - -- **Description:** Routing Engine Type information, detailing specifications such as part number and manufacturer. -- **Label:** Routing Engine Type -- **Include in Menu:** ❌ - -#### Relationships - -| name | peer | cardinality | kind | description | -| ---- | ---- | ----------- | ---- | ----------- | -| routing\_engines | InfraRoutingEngine | many | Generic | Routing engines of this type\. | - -### RoutingEngine - -- **Description:** A Routing Engine (RE) installed in a device, responsible for routing functionalities. -- **Label:** Routing Engine -- **Icon:** mdi:cpu-64-bit -- **Include in Menu:** ❌ - -#### Ordering and Constraints - -- **Order By:**device__name__value, slot__value -- **Uniqueness Constraints:**serial_number__value - -#### Attributes - -| name | kind | description | order_weight | label | optional | -| ---- | ---- | ----------- | ------------ | ----- | -------- | -| slot | Number | The slot number where the Routing Engine is installed within the device | 1100 | | | -| version | Text | Firmware version of the Routing Engine\. | 1200 | Version | True | - -#### Relationships - -| name | label | peer | optional | cardinality | kind | order_weight | -| ---- | ----- | ---- | -------- | ----------- | ---- | ------------ | -| routing\_engine\_type | RE Type | InfraRoutingEngineType | False | one | Attribute | 1150 | - # SNMP This schema extension contains models for SNMP Communities and SNMP Clients. As you can see this extension is not linked to Tenancy or Device, as you could decide to link the Community to different models based on your use case. +Dependencies: `base` + ## snmp - **Version:** 1.0 @@ -696,104 +710,6 @@ This schema extension contains models for SNMP Communities and SNMP Clients. As | ---- | ---- | ----------- | ------------ | | community | SnmpCommunity | many | 1200 | -# Linecards - -This schema extension allows you to capture Linecard related information like the version. You can insert the Linecard into a Dcim Physical Device and leverage the Linecard type model. The Linecard can accept PIC to help configure PORT information like breakout-capabilities and configurations. - -Dependencies: `base, extensions.modules` - -## linecard - -- **Version:** 1.0 - -## Nodes - -### LinecardType - -- **Description:** Linecard Type information, detailing specifications such as part number and manufacturer. -- **Label:** Linecard Type -- **Include in Menu:** ❌ - -#### Relationships - -| name | peer | cardinality | kind | description | -| ---- | ---- | ----------- | ---- | ----------- | -| linecards | InfraLinecard | many | Generic | Linecards of this type\. | - -### Linecard - -- **Description:** A Linecard installed in a device, specifying slot, power status, and functionalities. -- **Label:** Linecard -- **Icon:** bi:pci-card -- **Include in Menu:** ❌ - -#### Ordering and Constraints - -- **Order By:**device__name__value, slot__value -- **Uniqueness Constraints:**serial_number__value - -#### Attributes - -| name | kind | description | order_weight | label | optional | default_value | -| ---- | ---- | ----------- | ------------ | ----- | -------- | ------------- | -| slot | Number | The slot number where the Linecard is installed within the device | 1050 | | | | -| bng\_enabled | Boolean | BNG activated or deactivated on the Linecard | 1400 | BNG Enabled | True | False | - -#### Relationships - -| name | label | peer | optional | cardinality | kind | order_weight | -| ---- | ----- | ---- | -------- | ----------- | ---- | ------------ | -| linecard\_type | Linecard Type | DeviceLinecardType | False | one | Attribute | 1150 | -| pics | PICs | DevicePic | True | many | Attribute | 1500 | - -### Pic - -- **Description:** Physical Interface Card (PIC) installed in the Linecard, containing multiple ports. -- **Label:** PIC -- **Include in Menu:** ❌ - -#### Ordering and Constraints - -- **Order By:**linecard__serial_number__value, slot__value -- **Uniqueness Constraints:**linecard + slot__value - -#### Attributes - -| name | kind | description | order_weight | -| ---- | ---- | ----------- | ------------ | -| slot | Number | Slot number of the PIC within the Linecard | 1200 | - -#### Relationships - -| name | label | peer | identifier | optional | cardinality | kind | order_weight | -| ---- | ----- | ---- | ---------- | -------- | ----------- | ---- | ------------ | -| linecard | Linecard | DeviceLinecard | linecard\_\_pics | False | one | Parent | 1000 | -| ports | Ports | InfraPort | | True | many | Component | 1100 | - -### Port - -- **Description:** A network port on a PIC, specifying speed and port number. -- **Label:** Port -- **Include in Menu:** ❌ - -#### Ordering and Constraints - -- **Order By:**pic__slot__value, port_number__value -- **Uniqueness Constraints:**pic + port_number__value - -#### Attributes - -| name | kind | description | order_weight | choices | -| ---- | ---- | ----------- | ------------ | ------- | -| port\_number | Number | Port number on the PIC | 1100 | \`\` | -| speed | Dropdown | Speed of the port | 1200 | \`10g, 100g\` | - -#### Relationships - -| name | label | peer | optional | cardinality | kind | order_weight | -| ---- | ----- | ---- | -------- | ----------- | ---- | ------------ | -| pic | PIC | DevicePic | False | one | Parent | 1000 | - # Interface Breakdown This schema extension introduces relationships to support breakout interfaces, enabling you to document the breakdown of a physical interface into smaller physical interfaces. @@ -825,7 +741,7 @@ Dependencies: `base` This extension is using the Routing Policies extensions and the Routing BGP one together. -Dependencies: `base, extensions.routing, extensions.routing_policies, extensions.routing_bgp` +Dependencies: `base, extensions/routing, extensions/routing_policies, extensions/routing_bgp` ## routing_policies_bgp @@ -878,7 +794,7 @@ Dependencies: `base, extensions.routing, extensions.routing_policies, extensions This schema extension extend the BGP extension to add BGP Route Reflector Clustering. -Dependencies: `base, extensions.routing, extensions.routing_bgp` +Dependencies: `base, extensions/routing, extensions/routing_bgp` ## bgp_rr @@ -1021,7 +937,7 @@ Dependencies: `base` This schema extension contains Circuits and ways to connect them with your infrastructure! The circuit could be a fiber connecting two sites, you would then have two endpoints, one on each site. -Dependencies: `base, extensions.location_minimal` +Dependencies: `base, extensions/location_minimal` ## circuit @@ -1108,7 +1024,7 @@ Dependencies: `base, extensions.location_minimal` This schema extension adds the BGP Communities models. -Dependencies: `base, extensions.routing` +Dependencies: `base, extensions/routing` ## bgp_community @@ -1186,7 +1102,7 @@ Dependencies: `base` This extension is using the Routing Policies extensions and the Routing Aggregate one together. -Dependencies: `base, extensions.routing, extensions.routing_policies, extensions.routing_aggregate` +Dependencies: `base, extensions/routing, extensions/routing_policies, extensions/routing_aggregate` ## routing_policies_aggregate @@ -1201,24 +1117,6 @@ Dependencies: `base, extensions.routing, extensions.routing_policies, extensions - **Icon:** carbon:deployment-policy - **Include in Menu:** ❌ -## Extensions - -### RoutingAggregate - -#### Attributes - -| name | kind | state | -| ---- | ---- | ----- | -| import\_policies | Text | absent | -| export\_policies | Text | absent | - -#### Relationships - -| name | label | peer | identifier | description | kind | cardinality | -| ---- | ----- | ---- | ---------- | ----------- | ---- | ----------- | -| import\_routing\_policies | Import Routing Policies | RoutingPolicyAggregate | aggregate\_\_import\_policies | The routing\-policies used by this instance for import\. | Generic | many | -| export\_routing\_policies | Export Routing Policies | RoutingPolicyAggregate | aggregate\_\_export\_policies | The routing\-policies used by this instance for export\. | Generic | many | - # Location Minimal This schema extension is minimal but will provide you with basic items to store location related data. @@ -1305,7 +1203,7 @@ Dependencies: `base` This schema extension contains models for VRRP. -Dependencies: `base, base.dcim, base.ipam` +Dependencies: `base` ## vrrp @@ -1364,11 +1262,11 @@ Dependencies: `base, base.dcim, base.ipam` | name | description | label | peer | optional | cardinality | kind | order_weight | | ---- | ----------- | ----- | ---- | -------- | ----------- | ---- | ------------ | | vrrp\_group | VRRP Group | VRRP Group | NetworkVRRPGroup | False | one | Attribute | 1200 | -| interface | Interface L3 | Interface | DcimInterfaceL3 | False | one | Attribute | 1300 | +| interface | Interface L3 | Interface | InterfaceLayer3 | False | one | Attribute | 1300 | ## Extensions -### DcimInterfaceL3 +### InterfaceLayer3 #### Relationships @@ -1388,7 +1286,7 @@ Dependencies: `base, base.dcim, base.ipam` This schema extension contains all you need to model anything revolving around internet peering (Exchange points ...)! -Dependencies: `base, extensions.routing, extensions.routing_bgp, extensions.routing_bgp_community` +Dependencies: `base, extensions/routing, extensions/routing_bgp, extensions/routing_bgp_community` ## peering_ixp @@ -1554,7 +1452,7 @@ Dependencies: `base` This extension is using the Routing Policies extensions and the Routing OSPF one together. -Dependencies: `base, extensions.routing, extensions.routing_policies, extensions.routing_ospf` +Dependencies: `base, extensions/routing, extensions/routing_policies, extensions/routing_ospf` ## routing_policies_ospf @@ -1713,7 +1611,7 @@ Dependencies: `base` This schema extension contains all you need to model the PIM Protocol. -Dependencies: `base, extensions.routing` +Dependencies: `base, extensions/routing` ## pim @@ -1762,19 +1660,19 @@ Dependencies: `base, extensions.routing` #### Attributes -| name | kind | optional | description | order_weight | choices | default_value | -| ---- | ---- | -------- | ----------- | ------------ | ------- | ------------- | -| description | Text | False | Description of the OSPF interface\. | 1100 | \`\` | | -| pim\_mode | Dropdown | | PIM mode used for multicast routing on this interface\. | 1150 | \`sparse, dense, bidirectional\` | | -| hello\_interval | Number | True | Interval for PIM hello messages \(in seconds\)\. | 1300 | \`\` | 30 | -| dr\_priority | Number | True | Designated Router priority on the interface\. | 1250 | \`\` | 1 | +| name | kind | optional | unique | description | order_weight | choices | default_value | +| ---- | ---- | -------- | ------ | ----------- | ------------ | ------- | ------------- | +| description | Text | False | True | Description of the OSPF interface\. | 1100 | \`\` | | +| pim\_mode | Dropdown | | | PIM mode used for multicast routing on this interface\. | 1150 | \`sparse, dense, bidirectional\` | | +| hello\_interval | Number | True | | Interval for PIM hello messages \(in seconds\)\. | 1300 | \`\` | 30 | +| dr\_priority | Number | True | | Designated Router priority on the interface\. | 1250 | \`\` | 1 | #### Relationships | name | label | peer | identifier | optional | cardinality | kind | order_weight | | ---- | ----- | ---- | ---------- | -------- | ----------- | ---- | ------------ | | pim | PIM | RoutingPIM | pim\_\_piminterfaces | False | one | Parent | | -| interface | | DcimInterfaceL3 | | False | one | Attribute | 1200 | +| interface | | InterfaceLayer3 | | False | one | Attribute | 1200 | # Cable @@ -1812,6 +1710,8 @@ This schema extension allows you to capture patch panel related information like > [!NOTE] > This extension is compatible with all sort of connectors, meaning you can plug cable, circuits, cross-connect to front & rear interfaces! +Dependencies: `base` + ## patch_panel - **Version:** 1.0 @@ -1931,7 +1831,7 @@ This schema extension allows you to capture patch panel related information like This schema extension contains all you need to model the Aggregate Routing Protocol. -Dependencies: `base, extensions.routing` +Dependencies: `base, extensions/routing` ## aggregate @@ -1964,7 +1864,7 @@ Dependencies: `base, extensions.routing` This schema extension contains models for OADM (Optical Add Drop Multiplexer) supporting various WDM (Wavelength Division Multiplexing) technologies such as DWDM (Dense Wavelength Division Multiplexing) or CWDM (Coarse Wavelength Division Multiplexing). With some vendors, the tunable optics are not configured via the channel number but via the wavelength and/or the frequency. This model provides a unique entry in Infrahub for those. -Dependencies: `base, extensions.sfp` +Dependencies: `base, extensions/sfp` ## dwdm @@ -2003,11 +1903,11 @@ Dependencies: `base, extensions.sfp` #### Attributes -| name | kind | order_weight | description | optional | choices | default_value | -| ---- | ---- | ------------ | ----------- | -------- | ------- | ------------- | -| name | Text | 1000 | | | \`\` | | -| wdm\_type | Dropdown | 1110 | Type of WDM \(e\.g CWDM\. DWDM\) | False | \`cwdm, dwdm\` | dwdm | -| description | Text | 2000 | | True | \`\` | | +| name | kind | unique | order_weight | description | optional | choices | default_value | +| ---- | ---- | ------ | ------------ | ----------- | -------- | ------- | ------------- | +| name | Text | True | 1000 | | | \`\` | | +| wdm\_type | Dropdown | | 1110 | Type of WDM \(e\.g CWDM\. DWDM\) | False | \`cwdm, dwdm\` | dwdm | +| description | Text | | 2000 | | True | \`\` | | #### Relationships @@ -2168,12 +2068,14 @@ Dependencies: `base` This schema extension brings extensions to VLAN model in order to support QinQ. -Dependencies: `base, extensions.vlan` +Dependencies: `base, extensions/vlan` # Firewall Policer This schema extension contains models for VMs. You might consider Cluster or/and Hypervisor extension to go with! +Dependencies: `base` + ## firewall_policer - **Version:** 1.0 @@ -2334,7 +2236,7 @@ Dependencies: `base` This schema extension contains generics to create Routing Protocol "Instance". The idea is to create one Routing Protocol instance per IpamVRF + DcimDevice pair. -Dependencies: `base, extensions.vlan` +Dependencies: `base, extensions/vlan` ## routing @@ -2351,10 +2253,10 @@ Dependencies: `base, extensions.vlan` #### Attributes -| name | kind | optional | description | order_weight | choices | -| ---- | ---- | -------- | ----------- | ------------ | ------- | -| description | Text | False | Description of the protocol | 1100 | \`\` | -| status | Dropdown | | Status of the Protocol Configuration\. | 1150 | \`active, disabled, deleted\` | +| name | kind | optional | unique | description | order_weight | choices | +| ---- | ---- | -------- | ------ | ----------- | ------------ | ------- | +| description | Text | False | True | Description of the protocol | 1100 | \`\` | +| status | Dropdown | | | Status of the Protocol Configuration\. | 1150 | \`active, disabled, deleted\` | #### Relationships @@ -2367,7 +2269,7 @@ Dependencies: `base, extensions.vlan` This schema extension contains all you need to model your BGP platform. -Dependencies: `base, extensions.routing` +Dependencies: `base, extensions/routing` ## bgp @@ -2599,7 +2501,7 @@ Dependencies: `base` A rather generic cluster built with compute units (e.g. servers) and able to host VMs. -Dependencies: `base, extensions.cluster, extensions.compute` +Dependencies: `base, extensions/cluster, extensions/compute` ## hosting_cluster @@ -2626,7 +2528,7 @@ Dependencies: `base, extensions.cluster, extensions.compute` This schema extension contains all you need to model the OSPF Routing Protocol. -Dependencies: `base, extensions.routing` +Dependencies: `base, extensions/routing` ## ospf @@ -2676,27 +2578,27 @@ Dependencies: `base, extensions.routing` #### Attributes -| name | kind | optional | description | order_weight | choices | default_value | -| ---- | ---- | -------- | ----------- | ------------ | ------- | ------------- | -| description | Text | False | Description of the OSPF interface\. | 1500 | \`\` | | -| metric | Number | True | OSPF metric for the interface\. | 1400 | \`\` | | -| mode | Dropdown | | Mode of the OSPF interface\. | 1300 | \`normal, passive, peer\_to\_peer\` | normal | -| authentication\_key | Password | True | Shared secret used to authenticate and secure routing messages between neighboring routers\. | 1250 | \`\` | | -| authentication\_mode | Dropdown | True | | 1225 | \`md5, sha1\` | | -| area | Text | | OSPF area associated with the interface\. | 1200 | \`\` | | +| name | kind | optional | unique | description | order_weight | choices | default_value | +| ---- | ---- | -------- | ------ | ----------- | ------------ | ------- | ------------- | +| description | Text | False | True | Description of the OSPF interface\. | 1500 | \`\` | | +| metric | Number | True | | OSPF metric for the interface\. | 1400 | \`\` | | +| mode | Dropdown | | | Mode of the OSPF interface\. | 1300 | \`normal, passive, peer\_to\_peer\` | normal | +| authentication\_key | Password | True | | Shared secret used to authenticate and secure routing messages between neighboring routers\. | 1250 | \`\` | | +| authentication\_mode | Dropdown | True | | | 1225 | \`md5, sha1\` | | +| area | Text | | | OSPF area associated with the interface\. | 1200 | \`\` | | #### Relationships | name | label | peer | identifier | optional | cardinality | kind | order_weight | | ---- | ----- | ---- | ---------- | -------- | ----------- | ---- | ------------ | | ospf | OSPF | RoutingOSPF | ospf\_\_ospfinterfaces | False | one | Parent | 1100 | -| interface | | DcimInterfaceL3 | | False | one | Attribute | 1200 | +| interface | | InterfaceLayer3 | | False | one | Attribute | 1200 | # Infiniband This schema extension adds support for InfiniBand switches. -Dependencies: `base, extensions.compute` +Dependencies: `base, extensions/compute` ## infiniband @@ -3328,6 +3230,153 @@ Dependencies: `base` | ---- | ----- | ---- | -------- | ----------- | ------------ | | network\_service | Network Service | TopologyNetworkService | True | one | 1400 | +# Routing Engine Module + +This schema extension allows you to capture Routing Engine related information like the version. You can insert the Routing Engine into a Dcim Physical Device and leverage the Routing Engine type model. + +Dependencies: `base, extensions/modules` + +## routing_engine + +- **Version:** 1.0 + +## Nodes + +### RoutingEngineType + +- **Description:** Routing Engine Type information, detailing specifications such as part number and manufacturer. +- **Label:** Routing Engine Type +- **Include in Menu:** ❌ + +#### Relationships + +| name | peer | cardinality | kind | description | +| ---- | ---- | ----------- | ---- | ----------- | +| routing\_engines | DeviceRoutingEngine | many | Generic | Routing engines of this type\. | + +### RoutingEngine + +- **Description:** A Routing Engine (RE) installed in a device, responsible for routing functionalities. +- **Label:** Routing Engine +- **Icon:** mdi:cpu-64-bit +- **Include in Menu:** ❌ + +#### Ordering and Constraints + +- **Order By:**device__name__value, slot__value +- **Uniqueness Constraints:**serial_number__value + +#### Attributes + +| name | kind | description | order_weight | label | optional | +| ---- | ---- | ----------- | ------------ | ----- | -------- | +| slot | Number | The slot number where the Routing Engine is installed within the device | 1100 | | | +| version | Text | Firmware version of the Routing Engine\. | 1200 | Version | True | + +#### Relationships + +| name | label | peer | optional | cardinality | kind | order_weight | +| ---- | ----- | ---- | -------- | ----------- | ---- | ------------ | +| routing\_engine\_type | RE Type | DeviceRoutingEngineType | False | one | Attribute | 1150 | + +# Linecard Module + +This schema extension allows you to capture Linecard related information like the version. You can insert the Linecard into a Dcim Physical Device and leverage the Linecard type model. The Linecard can accept PIC to help configure PORT information like breakout-capabilities and configurations. + +Dependencies: `base, extensions/modules` + +## linecard + +- **Version:** 1.0 + +## Nodes + +### LinecardType + +- **Description:** Linecard Type information, detailing specifications such as part number and manufacturer. +- **Label:** Linecard Type +- **Include in Menu:** ❌ + +#### Relationships + +| name | peer | cardinality | kind | description | +| ---- | ---- | ----------- | ---- | ----------- | +| linecards | DeviceLinecard | many | Generic | Linecards of this type\. | + +### Linecard + +- **Description:** A Linecard installed in a device, specifying slot, power status, and functionalities. +- **Label:** Linecard +- **Icon:** bi:pci-card +- **Include in Menu:** ❌ + +#### Ordering and Constraints + +- **Order By:**device__name__value, slot__value +- **Uniqueness Constraints:**serial_number__value + +#### Attributes + +| name | kind | description | order_weight | label | optional | default_value | +| ---- | ---- | ----------- | ------------ | ----- | -------- | ------------- | +| slot | Number | The slot number where the Linecard is installed within the device | 1050 | | | | +| bng\_enabled | Boolean | BNG activated or deactivated on the Linecard | 1400 | BNG Enabled | True | False | + +#### Relationships + +| name | label | peer | optional | cardinality | kind | order_weight | +| ---- | ----- | ---- | -------- | ----------- | ---- | ------------ | +| linecard\_type | Linecard Type | DeviceLinecardType | False | one | Attribute | 1150 | +| pics | PICs | DevicePic | True | many | Attribute | 1500 | + +### Pic + +- **Description:** Physical Interface Card (PIC) installed in the Linecard, containing multiple ports. +- **Label:** PIC +- **Include in Menu:** ❌ + +#### Ordering and Constraints + +- **Order By:**linecard__serial_number__value, slot__value +- **Uniqueness Constraints:**linecard + slot__value + +#### Attributes + +| name | kind | description | order_weight | +| ---- | ---- | ----------- | ------------ | +| slot | Number | Slot number of the PIC within the Linecard | 1200 | + +#### Relationships + +| name | label | peer | identifier | optional | cardinality | kind | order_weight | +| ---- | ----- | ---- | ---------- | -------- | ----------- | ---- | ------------ | +| linecard | Linecard | DeviceLinecard | linecard\_\_pics | False | one | Parent | 1000 | +| ports | Ports | InfraPort | | True | many | Component | 1100 | + +### Port + +- **Description:** A network port on a PIC, specifying speed and port number. +- **Label:** Port +- **Include in Menu:** ❌ + +#### Ordering and Constraints + +- **Order By:**pic__slot__value, port_number__value +- **Uniqueness Constraints:**pic + port_number__value + +#### Attributes + +| name | kind | description | order_weight | choices | +| ---- | ---- | ----------- | ------------ | ------- | +| port\_number | Number | Port number on the PIC | 1100 | \`\` | +| speed | Dropdown | Speed of the port | 1200 | \`10g, 100g\` | + +#### Relationships + +| name | label | peer | optional | cardinality | kind | order_weight | +| ---- | ----- | ---- | -------- | ----------- | ---- | ------------ | +| pic | PIC | DevicePic | False | one | Parent | 1000 | + # Security This schema extension contains models for implementing detailed security. @@ -3927,7 +3976,7 @@ Attribution: [Rowan Coleman](https://www.linkedin.com/in/rowan-coleman-6a147156/ This schema extension introduces tenancy for some of the schema nodes (circuits...) -Dependencies: `base, extensions.circuit, experimental.location_extended` +Dependencies: `base, extensions/circuit` ## tenancy @@ -3953,6 +4002,8 @@ Dependencies: `base, extensions.circuit, experimental.location_extended` This schema extension contains models for Quality of Service (QoS) +Dependencies: `base` + ## qos - **Version:** 1.0 @@ -4101,7 +4152,7 @@ For example you have a MPLS network supported by a provider connecting multiple - One single CircuitService would be needed to store MPLS related information (e.g. service id, provider ...) - On each site we would create a circuit connecting on one side our device and the CircuitService on the other side -Dependencies: `extensions.circuit` +Dependencies: `extensions/circuit` ## circuit_service @@ -4159,7 +4210,7 @@ Dependencies: `extensions.circuit` This schema extension is based on Juniper VLAN MAP, and not yet test out for other vendors. -Dependencies: `base.dcim` +Dependencies: `base` ## vlan-translation diff --git a/experimental/circuit_service/README.md b/experimental/circuit_service/README.md index 2721731..ab050f0 100644 --- a/experimental/circuit_service/README.md +++ b/experimental/circuit_service/README.md @@ -6,7 +6,7 @@ For example you have a MPLS network supported by a provider connecting multiple - One single CircuitService would be needed to store MPLS related information (e.g. service id, provider ...) - On each site we would create a circuit connecting on one side our device and the CircuitService on the other side -Dependencies: `extensions.circuit` +Dependencies: `extensions/circuit` ## circuit_service diff --git a/experimental/infiniband/README.md b/experimental/infiniband/README.md index 0e18e71..bfbd83e 100644 --- a/experimental/infiniband/README.md +++ b/experimental/infiniband/README.md @@ -2,7 +2,7 @@ This schema extension adds support for InfiniBand switches. -Dependencies: `base, extensions.compute` +Dependencies: `base, extensions/compute` ## infiniband diff --git a/experimental/modules_linecards/README.md b/experimental/modules_linecards/README.md index 5cf1fd8..c535271 100644 --- a/experimental/modules_linecards/README.md +++ b/experimental/modules_linecards/README.md @@ -1,8 +1,8 @@ -# Linecards +# Linecard Module This schema extension allows you to capture Linecard related information like the version. You can insert the Linecard into a Dcim Physical Device and leverage the Linecard type model. The Linecard can accept PIC to help configure PORT information like breakout-capabilities and configurations. -Dependencies: `base, extensions.modules` +Dependencies: `base, extensions/modules` ## linecard @@ -20,7 +20,7 @@ Dependencies: `base, extensions.modules` | name | peer | cardinality | kind | description | | ---- | ---- | ----------- | ---- | ----------- | -| linecards | InfraLinecard | many | Generic | Linecards of this type\. | +| linecards | DeviceLinecard | many | Generic | Linecards of this type\. | ### Linecard diff --git a/experimental/modules_routing_engine/README.md b/experimental/modules_routing_engine/README.md index d8ea156..d508970 100644 --- a/experimental/modules_routing_engine/README.md +++ b/experimental/modules_routing_engine/README.md @@ -1,8 +1,8 @@ -# Routing Engine +# Routing Engine Module This schema extension allows you to capture Routing Engine related information like the version. You can insert the Routing Engine into a Dcim Physical Device and leverage the Routing Engine type model. -Dependencies: `base, extensions.modules` +Dependencies: `base, extensions/modules` ## routing_engine @@ -20,7 +20,7 @@ Dependencies: `base, extensions.modules` | name | peer | cardinality | kind | description | | ---- | ---- | ----------- | ---- | ----------- | -| routing\_engines | InfraRoutingEngine | many | Generic | Routing engines of this type\. | +| routing\_engines | DeviceRoutingEngine | many | Generic | Routing engines of this type\. | ### RoutingEngine @@ -45,4 +45,4 @@ Dependencies: `base, extensions.modules` | name | label | peer | optional | cardinality | kind | order_weight | | ---- | ----- | ---- | -------- | ----------- | ---- | ------------ | -| routing\_engine\_type | RE Type | InfraRoutingEngineType | False | one | Attribute | 1150 | +| routing\_engine\_type | RE Type | DeviceRoutingEngineType | False | one | Attribute | 1150 | diff --git a/experimental/qos/README.md b/experimental/qos/README.md index c9aeb84..d7079a2 100644 --- a/experimental/qos/README.md +++ b/experimental/qos/README.md @@ -2,6 +2,8 @@ This schema extension contains models for Quality of Service (QoS) +Dependencies: `base` + ## qos - **Version:** 1.0 diff --git a/experimental/tenancy/README.md b/experimental/tenancy/README.md index 8fc86d6..b119231 100644 --- a/experimental/tenancy/README.md +++ b/experimental/tenancy/README.md @@ -2,7 +2,7 @@ This schema extension introduces tenancy for some of the schema nodes (circuits...) -Dependencies: `base, extensions.circuit, experimental.location_extended` +Dependencies: `base, extensions/circuit` ## tenancy diff --git a/experimental/vlan-translation/README.md b/experimental/vlan-translation/README.md index 2f3803f..04e8e30 100644 --- a/experimental/vlan-translation/README.md +++ b/experimental/vlan-translation/README.md @@ -2,7 +2,7 @@ This schema extension is based on Juniper VLAN MAP, and not yet test out for other vendors. -Dependencies: `base.dcim` +Dependencies: `base` ## vlan-translation diff --git a/extensions/circuit/README.md b/extensions/circuit/README.md index 67d5a92..fb05073 100644 --- a/extensions/circuit/README.md +++ b/extensions/circuit/README.md @@ -2,7 +2,7 @@ This schema extension contains Circuits and ways to connect them with your infrastructure! The circuit could be a fiber connecting two sites, you would then have two endpoints, one on each site. -Dependencies: `base, extensions.location_minimal` +Dependencies: `base, extensions/location_minimal` ## circuit diff --git a/extensions/cluster/README.md b/extensions/cluster/README.md index 5703b04..58028a1 100644 --- a/extensions/cluster/README.md +++ b/extensions/cluster/README.md @@ -2,7 +2,7 @@ This schema extension contains the foundations to capture clusters. With this one in place you can unlock various clusters flavors (hosting cluster able to host VMs, firewall clusters built with specific appliances ...) -Dependencies: `base, extensions.compute` +Dependencies: `base, extensions/compute` ## cluster diff --git a/extensions/dwdm/README.md b/extensions/dwdm/README.md index 3c2338b..93e1204 100644 --- a/extensions/dwdm/README.md +++ b/extensions/dwdm/README.md @@ -2,7 +2,7 @@ This schema extension contains models for OADM (Optical Add Drop Multiplexer) supporting various WDM (Wavelength Division Multiplexing) technologies such as DWDM (Dense Wavelength Division Multiplexing) or CWDM (Coarse Wavelength Division Multiplexing). With some vendors, the tunable optics are not configured via the channel number but via the wavelength and/or the frequency. This model provides a unique entry in Infrahub for those. -Dependencies: `base, extensions.sfp` +Dependencies: `base, extensions/sfp` ## dwdm @@ -41,11 +41,11 @@ Dependencies: `base, extensions.sfp` #### Attributes -| name | kind | order_weight | description | optional | choices | default_value | -| ---- | ---- | ------------ | ----------- | -------- | ------- | ------------- | -| name | Text | 1000 | | | \`\` | | -| wdm\_type | Dropdown | 1110 | Type of WDM \(e\.g CWDM\. DWDM\) | False | \`cwdm, dwdm\` | dwdm | -| description | Text | 2000 | | True | \`\` | | +| name | kind | unique | order_weight | description | optional | choices | default_value | +| ---- | ---- | ------ | ------------ | ----------- | -------- | ------- | ------------- | +| name | Text | True | 1000 | | | \`\` | | +| wdm\_type | Dropdown | | 1110 | Type of WDM \(e\.g CWDM\. DWDM\) | False | \`cwdm, dwdm\` | dwdm | +| description | Text | | 2000 | | True | \`\` | | #### Relationships diff --git a/extensions/firewall_policer/README.md b/extensions/firewall_policer/README.md index ed92890..0cfb731 100644 --- a/extensions/firewall_policer/README.md +++ b/extensions/firewall_policer/README.md @@ -2,6 +2,8 @@ This schema extension contains models for VMs. You might consider Cluster or/and Hypervisor extension to go with! +Dependencies: `base` + ## firewall_policer - **Version:** 1.0 diff --git a/extensions/hosting_cluster/README.md b/extensions/hosting_cluster/README.md index 0452619..06ccdb2 100644 --- a/extensions/hosting_cluster/README.md +++ b/extensions/hosting_cluster/README.md @@ -2,7 +2,7 @@ A rather generic cluster built with compute units (e.g. servers) and able to host VMs. -Dependencies: `base, extensions.cluster, extensions.compute` +Dependencies: `base, extensions/cluster, extensions/compute` ## hosting_cluster diff --git a/extensions/patch_panel/README.md b/extensions/patch_panel/README.md index 7508452..af236d7 100644 --- a/extensions/patch_panel/README.md +++ b/extensions/patch_panel/README.md @@ -5,6 +5,8 @@ This schema extension allows you to capture patch panel related information like > [!NOTE] > This extension is compatible with all sort of connectors, meaning you can plug cable, circuits, cross-connect to front & rear interfaces! +Dependencies: `base` + ## patch_panel - **Version:** 1.0 diff --git a/extensions/peering_ixp/README.md b/extensions/peering_ixp/README.md index 54e90e0..0203d7a 100644 --- a/extensions/peering_ixp/README.md +++ b/extensions/peering_ixp/README.md @@ -2,7 +2,7 @@ This schema extension contains all you need to model anything revolving around internet peering (Exchange points ...)! -Dependencies: `base, extensions.routing, extensions.routing_bgp, extensions.routing_bgp_community` +Dependencies: `base, extensions/routing, extensions/routing_bgp, extensions/routing_bgp_community` ## peering_ixp diff --git a/extensions/qinq/README.md b/extensions/qinq/README.md index 1d21030..8d305f2 100644 --- a/extensions/qinq/README.md +++ b/extensions/qinq/README.md @@ -2,4 +2,4 @@ This schema extension brings extensions to VLAN model in order to support QinQ. -Dependencies: `base, extensions.vlan` +Dependencies: `base, extensions/vlan` diff --git a/extensions/routing/README.md b/extensions/routing/README.md index d5714ac..018d7c3 100644 --- a/extensions/routing/README.md +++ b/extensions/routing/README.md @@ -2,7 +2,7 @@ This schema extension contains generics to create Routing Protocol "Instance". The idea is to create one Routing Protocol instance per IpamVRF + DcimDevice pair. -Dependencies: `base, extensions.vlan` +Dependencies: `base, extensions/vlan` ## routing @@ -19,10 +19,10 @@ Dependencies: `base, extensions.vlan` #### Attributes -| name | kind | optional | description | order_weight | choices | -| ---- | ---- | -------- | ----------- | ------------ | ------- | -| description | Text | False | Description of the protocol | 1100 | \`\` | -| status | Dropdown | | Status of the Protocol Configuration\. | 1150 | \`active, disabled, deleted\` | +| name | kind | optional | unique | description | order_weight | choices | +| ---- | ---- | -------- | ------ | ----------- | ------------ | ------- | +| description | Text | False | True | Description of the protocol | 1100 | \`\` | +| status | Dropdown | | | Status of the Protocol Configuration\. | 1150 | \`active, disabled, deleted\` | #### Relationships diff --git a/extensions/routing_aggregate/README.md b/extensions/routing_aggregate/README.md index 72e6eaf..c370b6c 100644 --- a/extensions/routing_aggregate/README.md +++ b/extensions/routing_aggregate/README.md @@ -2,7 +2,7 @@ This schema extension contains all you need to model the Aggregate Routing Protocol. -Dependencies: `base, extensions.routing` +Dependencies: `base, extensions/routing` ## aggregate diff --git a/extensions/routing_bgp/README.md b/extensions/routing_bgp/README.md index 6d670cc..af3945a 100644 --- a/extensions/routing_bgp/README.md +++ b/extensions/routing_bgp/README.md @@ -2,7 +2,7 @@ This schema extension contains all you need to model your BGP platform. -Dependencies: `base, extensions.routing` +Dependencies: `base, extensions/routing` ## bgp diff --git a/extensions/routing_bgp_community/README.md b/extensions/routing_bgp_community/README.md index 6604857..674fc36 100644 --- a/extensions/routing_bgp_community/README.md +++ b/extensions/routing_bgp_community/README.md @@ -2,7 +2,7 @@ This schema extension adds the BGP Communities models. -Dependencies: `base, extensions.routing` +Dependencies: `base, extensions/routing` ## bgp_community diff --git a/extensions/routing_bgp_rr/README.md b/extensions/routing_bgp_rr/README.md index 9903196..593143d 100644 --- a/extensions/routing_bgp_rr/README.md +++ b/extensions/routing_bgp_rr/README.md @@ -2,7 +2,7 @@ This schema extension extend the BGP extension to add BGP Route Reflector Clustering. -Dependencies: `base, extensions.routing, extensions.routing_bgp` +Dependencies: `base, extensions/routing, extensions/routing_bgp` ## bgp_rr diff --git a/extensions/routing_ospf/README.md b/extensions/routing_ospf/README.md index 27c1533..c0274a4 100644 --- a/extensions/routing_ospf/README.md +++ b/extensions/routing_ospf/README.md @@ -2,7 +2,7 @@ This schema extension contains all you need to model the OSPF Routing Protocol. -Dependencies: `base, extensions.routing` +Dependencies: `base, extensions/routing` ## ospf @@ -52,18 +52,18 @@ Dependencies: `base, extensions.routing` #### Attributes -| name | kind | optional | description | order_weight | choices | default_value | -| ---- | ---- | -------- | ----------- | ------------ | ------- | ------------- | -| description | Text | False | Description of the OSPF interface\. | 1500 | \`\` | | -| metric | Number | True | OSPF metric for the interface\. | 1400 | \`\` | | -| mode | Dropdown | | Mode of the OSPF interface\. | 1300 | \`normal, passive, peer\_to\_peer\` | normal | -| authentication\_key | Password | True | Shared secret used to authenticate and secure routing messages between neighboring routers\. | 1250 | \`\` | | -| authentication\_mode | Dropdown | True | | 1225 | \`md5, sha1\` | | -| area | Text | | OSPF area associated with the interface\. | 1200 | \`\` | | +| name | kind | optional | unique | description | order_weight | choices | default_value | +| ---- | ---- | -------- | ------ | ----------- | ------------ | ------- | ------------- | +| description | Text | False | True | Description of the OSPF interface\. | 1500 | \`\` | | +| metric | Number | True | | OSPF metric for the interface\. | 1400 | \`\` | | +| mode | Dropdown | | | Mode of the OSPF interface\. | 1300 | \`normal, passive, peer\_to\_peer\` | normal | +| authentication\_key | Password | True | | Shared secret used to authenticate and secure routing messages between neighboring routers\. | 1250 | \`\` | | +| authentication\_mode | Dropdown | True | | | 1225 | \`md5, sha1\` | | +| area | Text | | | OSPF area associated with the interface\. | 1200 | \`\` | | #### Relationships | name | label | peer | identifier | optional | cardinality | kind | order_weight | | ---- | ----- | ---- | ---------- | -------- | ----------- | ---- | ------------ | | ospf | OSPF | RoutingOSPF | ospf\_\_ospfinterfaces | False | one | Parent | 1100 | -| interface | | DcimInterfaceL3 | | False | one | Attribute | 1200 | +| interface | | InterfaceLayer3 | | False | one | Attribute | 1200 | diff --git a/extensions/routing_pim/README.md b/extensions/routing_pim/README.md index 4bdf228..fc1cd0b 100644 --- a/extensions/routing_pim/README.md +++ b/extensions/routing_pim/README.md @@ -2,7 +2,7 @@ This schema extension contains all you need to model the PIM Protocol. -Dependencies: `base, extensions.routing` +Dependencies: `base, extensions/routing` ## pim @@ -51,16 +51,16 @@ Dependencies: `base, extensions.routing` #### Attributes -| name | kind | optional | description | order_weight | choices | default_value | -| ---- | ---- | -------- | ----------- | ------------ | ------- | ------------- | -| description | Text | False | Description of the OSPF interface\. | 1100 | \`\` | | -| pim\_mode | Dropdown | | PIM mode used for multicast routing on this interface\. | 1150 | \`sparse, dense, bidirectional\` | | -| hello\_interval | Number | True | Interval for PIM hello messages \(in seconds\)\. | 1300 | \`\` | 30 | -| dr\_priority | Number | True | Designated Router priority on the interface\. | 1250 | \`\` | 1 | +| name | kind | optional | unique | description | order_weight | choices | default_value | +| ---- | ---- | -------- | ------ | ----------- | ------------ | ------- | ------------- | +| description | Text | False | True | Description of the OSPF interface\. | 1100 | \`\` | | +| pim\_mode | Dropdown | | | PIM mode used for multicast routing on this interface\. | 1150 | \`sparse, dense, bidirectional\` | | +| hello\_interval | Number | True | | Interval for PIM hello messages \(in seconds\)\. | 1300 | \`\` | 30 | +| dr\_priority | Number | True | | Designated Router priority on the interface\. | 1250 | \`\` | 1 | #### Relationships | name | label | peer | identifier | optional | cardinality | kind | order_weight | | ---- | ----- | ---- | ---------- | -------- | ----------- | ---- | ------------ | | pim | PIM | RoutingPIM | pim\_\_piminterfaces | False | one | Parent | | -| interface | | DcimInterfaceL3 | | False | one | Attribute | 1200 | +| interface | | InterfaceLayer3 | | False | one | Attribute | 1200 | diff --git a/extensions/routing_policies_aggregate/README.md b/extensions/routing_policies_aggregate/README.md index 2de2491..639a700 100644 --- a/extensions/routing_policies_aggregate/README.md +++ b/extensions/routing_policies_aggregate/README.md @@ -2,7 +2,7 @@ This extension is using the Routing Policies extensions and the Routing Aggregate one together. -Dependencies: `base, extensions.routing, extensions.routing_policies, extensions.routing_aggregate` +Dependencies: `base, extensions/routing, extensions/routing_policies, extensions/routing_aggregate` ## routing_policies_aggregate @@ -16,21 +16,3 @@ Dependencies: `base, extensions.routing, extensions.routing_policies, extensions - **Label:** Aggregate Routing Policies - **Icon:** carbon:deployment-policy - **Include in Menu:** ❌ - -## Extensions - -### RoutingAggregate - -#### Attributes - -| name | kind | state | -| ---- | ---- | ----- | -| import\_policies | Text | absent | -| export\_policies | Text | absent | - -#### Relationships - -| name | label | peer | identifier | description | kind | cardinality | -| ---- | ----- | ---- | ---------- | ----------- | ---- | ----------- | -| import\_routing\_policies | Import Routing Policies | RoutingPolicyAggregate | aggregate\_\_import\_policies | The routing\-policies used by this instance for import\. | Generic | many | -| export\_routing\_policies | Export Routing Policies | RoutingPolicyAggregate | aggregate\_\_export\_policies | The routing\-policies used by this instance for export\. | Generic | many | diff --git a/extensions/routing_policies_bgp/README.md b/extensions/routing_policies_bgp/README.md index 92cafca..00a1131 100644 --- a/extensions/routing_policies_bgp/README.md +++ b/extensions/routing_policies_bgp/README.md @@ -2,7 +2,7 @@ This extension is using the Routing Policies extensions and the Routing BGP one together. -Dependencies: `base, extensions.routing, extensions.routing_policies, extensions.routing_bgp` +Dependencies: `base, extensions/routing, extensions/routing_policies, extensions/routing_bgp` ## routing_policies_bgp diff --git a/extensions/routing_policies_ospf/README.md b/extensions/routing_policies_ospf/README.md index d49adc3..4115775 100644 --- a/extensions/routing_policies_ospf/README.md +++ b/extensions/routing_policies_ospf/README.md @@ -2,7 +2,7 @@ This extension is using the Routing Policies extensions and the Routing OSPF one together. -Dependencies: `base, extensions.routing, extensions.routing_policies, extensions.routing_ospf` +Dependencies: `base, extensions/routing, extensions/routing_policies, extensions/routing_ospf` ## routing_policies_ospf diff --git a/extensions/routing_policies_pim/README.md b/extensions/routing_policies_pim/README.md index 076478c..ac06c00 100644 --- a/extensions/routing_policies_pim/README.md +++ b/extensions/routing_policies_pim/README.md @@ -2,7 +2,7 @@ This schema inherits the `RoutingPolicy` schema and removes `import_policies` and `export_policies` attributes. However it adds a number of relationships to `RoutingPIM`. -Dependencies: `base, extensions.routing, extensions.routing_policies, extensions.routing_pim` +Dependencies: `base, extensions/routing, extensions/routing_policies, extensions/routing_pim` ## routing_policies_pim diff --git a/extensions/snmp/README.md b/extensions/snmp/README.md index f42a42b..4b21354 100644 --- a/extensions/snmp/README.md +++ b/extensions/snmp/README.md @@ -2,6 +2,8 @@ This schema extension contains models for SNMP Communities and SNMP Clients. As you can see this extension is not linked to Tenancy or Device, as you could decide to link the Community to different models based on your use case. +Dependencies: `base` + ## snmp - **Version:** 1.0 diff --git a/extensions/vrrp/README.md b/extensions/vrrp/README.md index e5452ee..b3f69b1 100644 --- a/extensions/vrrp/README.md +++ b/extensions/vrrp/README.md @@ -2,7 +2,7 @@ This schema extension contains models for VRRP. -Dependencies: `base, base.dcim, base.ipam` +Dependencies: `base` ## vrrp @@ -61,11 +61,11 @@ Dependencies: `base, base.dcim, base.ipam` | name | description | label | peer | optional | cardinality | kind | order_weight | | ---- | ----------- | ----- | ---- | -------- | ----------- | ---- | ------------ | | vrrp\_group | VRRP Group | VRRP Group | NetworkVRRPGroup | False | one | Attribute | 1200 | -| interface | Interface L3 | Interface | DcimInterfaceL3 | False | one | Attribute | 1300 | +| interface | Interface L3 | Interface | InterfaceLayer3 | False | one | Attribute | 1300 | ## Extensions -### DcimInterfaceL3 +### InterfaceLayer3 #### Relationships diff --git a/tasks/schemas.py b/tasks/schemas.py index 2c4683c..fa1fd11 100644 --- a/tasks/schemas.py +++ b/tasks/schemas.py @@ -301,6 +301,25 @@ def build(context: Context) -> None: content = generate_readme(schema[str(base_path)], base_path) all_content.extend(content) + # --- Table of Contents Generation --- + toc = ["# Table of Contents\n"] + toc.append("## Base\n") + for yml_file in sorted(base_path.glob("*.yml")): + name = yml_file.stem + toc.append(f"- [{name}](#base-schemas)") + toc.append("\n## Extensions\n") + for entry in sorted(os.listdir("./extensions")): + ext_path = Path("./extensions") / entry + if ext_path.is_dir(): + toc.append(f"- [{entry}](#extension-{entry})") + toc.append("\n## Experimental\n") + for entry in sorted(os.listdir("./experimental")): + exp_path = Path("./experimental") / entry + if exp_path.is_dir(): + toc.append(f"- [{entry}](#experimental-{entry})") + all_content.insert(1, "\n".join(toc) + "\n") + # --- End Table of Contents --- + for directory in directories_to_parse: for entry in os.listdir(directory): if os.path.isdir(directory / entry): From 243e112842daf73541367bb3ea612985fd8ed876 Mon Sep 17 00:00:00 2001 From: Pete Crocker Date: Wed, 18 Jun 2025 19:37:56 +0200 Subject: [PATCH 02/24] fix links --- base/README.md | 12 +- docs/docs/schema-library.mdx | 326 +- docs/package-lock.json | 3369 ++++++++--------- docs/package.json | 8 +- experimental/azure/README.md | 4 +- experimental/circuit_service/README.md | 8 +- experimental/infiniband/README.md | 2 +- experimental/location_extended/README.md | 6 +- experimental/modules_linecards/README.md | 2 +- experimental/modules_routing_engine/README.md | 2 +- experimental/qos/README.md | 2 +- experimental/security/README.md | 8 +- experimental/tenancy/README.md | 2 +- experimental/topology/README.md | 10 +- experimental/vlan-translation/README.md | 6 +- extensions/cable/README.md | 2 +- extensions/circuit/README.md | 8 +- extensions/cluster/README.md | 8 +- extensions/compute/README.md | 4 +- extensions/cross_connect/README.md | 2 +- extensions/dwdm/README.md | 4 +- extensions/firewall_policer/README.md | 2 +- extensions/hosting_cluster/README.md | 2 +- extensions/interface_breakout/README.md | 4 +- extensions/lag/README.md | 6 +- extensions/location_minimal/README.md | 6 +- extensions/modules/README.md | 6 +- extensions/patch_panel/README.md | 4 +- extensions/peering_ixp/README.md | 2 +- extensions/physical_disk/README.md | 4 +- extensions/routing/README.md | 2 +- extensions/routing_aggregate/README.md | 2 +- extensions/routing_bgp/README.md | 8 +- extensions/routing_bgp_community/README.md | 2 +- extensions/routing_bgp_rr/README.md | 6 +- extensions/routing_ospf/README.md | 2 +- extensions/routing_pim/README.md | 2 +- extensions/routing_policies/README.md | 2 +- .../routing_policies_aggregate/README.md | 2 +- extensions/routing_policies_bgp/README.md | 8 +- extensions/routing_policies_ospf/README.md | 6 +- extensions/routing_policies_pim/README.md | 6 +- extensions/sfp/README.md | 12 +- extensions/snmp/README.md | 4 +- extensions/topology/README.md | 2 +- extensions/users/README.md | 6 +- extensions/vlan/README.md | 10 +- extensions/vrf/README.md | 8 +- extensions/vrrp/README.md | 8 +- tasks/schemas.py | 33 +- 50 files changed, 1761 insertions(+), 2201 deletions(-) diff --git a/base/README.md b/base/README.md index 0dbb236..b7e7f9c 100644 --- a/base/README.md +++ b/base/README.md @@ -6,7 +6,7 @@ The base schemas serve as the foundation for every single schema extension you m - **Version:** 1.0 -## Generics +### Generics ### GenericDevice @@ -149,7 +149,7 @@ The base schemas serve as the foundation for every single schema extension you m | ---- | ----- | ---- | ---------- | -------- | ----------- | ---- | ----------- | ------------ | | sub\_interfaces | Sub\-interface\(s\) | InterfaceVirtual | sub\_\_interface | True | many | Attribute | Sub\-interfaces of this interface | 1750 | -## Nodes +### Nodes ### DeviceType @@ -249,7 +249,7 @@ The base schemas serve as the foundation for every single schema extension you m - **Version:** 1.0 -## Generics +### Generics ### Generic @@ -276,7 +276,7 @@ The base schemas serve as the foundation for every single schema extension you m | ---- | ---- | ----------- | ---- | -------- | ------------ | | tags | BuiltinTag | many | Attribute | True | 3000 | -## Nodes +### Nodes ### Manufacturer @@ -303,7 +303,7 @@ The base schemas serve as the foundation for every single schema extension you m - **Version:** 1.0 -## Generics +### Generics ### Generic @@ -347,7 +347,7 @@ The base schemas serve as the foundation for every single schema extension you m - **Version:** 1.0 -## Nodes +### Nodes ### IPAddress diff --git a/docs/docs/schema-library.mdx b/docs/docs/schema-library.mdx index 3f55687..9d715dc 100644 --- a/docs/docs/schema-library.mdx +++ b/docs/docs/schema-library.mdx @@ -7,62 +7,62 @@ title: Schema Library Documentation ## Base -- [dcim](#base-schemas) -- [ipam](#base-schemas) -- [location](#base-schemas) -- [organization](#base-schemas) +- [dcim](#dcim) +- [ipam](#ipam) +- [location](#location) +- [organization](#organization) ## Extensions -- [cable](#extension-cable) -- [circuit](#extension-circuit) -- [cluster](#extension-cluster) -- [compute](#extension-compute) -- [cross_connect](#extension-cross_connect) -- [dwdm](#extension-dwdm) -- [firewall_policer](#extension-firewall_policer) -- [hosting_cluster](#extension-hosting_cluster) -- [interface_breakout](#extension-interface_breakout) -- [lag](#extension-lag) -- [location_minimal](#extension-location_minimal) -- [modules](#extension-modules) -- [patch_panel](#extension-patch_panel) -- [peering_ixp](#extension-peering_ixp) -- [physical_disk](#extension-physical_disk) -- [qinq](#extension-qinq) -- [routing](#extension-routing) -- [routing_aggregate](#extension-routing_aggregate) -- [routing_bgp](#extension-routing_bgp) -- [routing_bgp_community](#extension-routing_bgp_community) -- [routing_bgp_rr](#extension-routing_bgp_rr) -- [routing_ospf](#extension-routing_ospf) -- [routing_pim](#extension-routing_pim) -- [routing_policies](#extension-routing_policies) -- [routing_policies_aggregate](#extension-routing_policies_aggregate) -- [routing_policies_bgp](#extension-routing_policies_bgp) -- [routing_policies_ospf](#extension-routing_policies_ospf) -- [routing_policies_pim](#extension-routing_policies_pim) -- [sfp](#extension-sfp) -- [snmp](#extension-snmp) -- [topology](#extension-topology) -- [users](#extension-users) -- [vlan](#extension-vlan) -- [vrf](#extension-vrf) -- [vrrp](#extension-vrrp) +- [cable](#cable) +- [circuit](#circuit) +- [cluster](#cluster) +- [compute](#compute) +- [cross_connect](#cross_connect) +- [dwdm](#dwdm) +- [firewall_policer](#firewall_policer) +- [hosting_cluster](#hosting_cluster) +- [interface_breakout](#interface_breakout) +- [lag](#lag) +- [location_minimal](#location_minimal) +- [modules](#modules) +- [patch_panel](#patch_panel) +- [peering_ixp](#peering_ixp) +- [physical_disk](#physical_disk) +- [qinq](#qinq) +- [routing](#routing) +- [routing_aggregate](#routing_aggregate) +- [routing_bgp](#routing_bgp) +- [routing_bgp_community](#routing_bgp_community) +- [routing_bgp_rr](#routing_bgp_rr) +- [routing_ospf](#routing_ospf) +- [routing_pim](#routing_pim) +- [routing_policies](#routing_policies) +- [routing_policies_aggregate](#routing_policies_aggregate) +- [routing_policies_bgp](#routing_policies_bgp) +- [routing_policies_ospf](#routing_policies_ospf) +- [routing_policies_pim](#routing_policies_pim) +- [sfp](#sfp) +- [snmp](#snmp) +- [topology](#topology) +- [users](#users) +- [vlan](#vlan) +- [vrf](#vrf) +- [vrrp](#vrrp) ## Experimental -- [azure](#experimental-azure) -- [circuit_service](#experimental-circuit_service) -- [infiniband](#experimental-infiniband) -- [location_extended](#experimental-location_extended) -- [modules_linecards](#experimental-modules_linecards) -- [modules_routing_engine](#experimental-modules_routing_engine) -- [qos](#experimental-qos) -- [security](#experimental-security) -- [tenancy](#experimental-tenancy) -- [topology](#experimental-topology) -- [vlan-translation](#experimental-vlan-translation) +- [azure](#azure) +- [circuit_service](#circuit_service) +- [infiniband](#infiniband) +- [location_extended](#location_extended) +- [modules_linecards](#modules_linecards) +- [modules_routing_engine](#modules_routing_engine) +- [qos](#qos) +- [security](#security) +- [tenancy](#tenancy) +- [topology](#topology) +- [vlan-translation](#vlan-translation) # Base Schemas @@ -72,7 +72,7 @@ The base schemas serve as the foundation for every single schema extension you m - **Version:** 1.0 -## Generics +### Generics ### GenericDevice @@ -215,7 +215,7 @@ The base schemas serve as the foundation for every single schema extension you m | ---- | ----- | ---- | ---------- | -------- | ----------- | ---- | ----------- | ------------ | | sub\_interfaces | Sub\-interface\(s\) | InterfaceVirtual | sub\_\_interface | True | many | Attribute | Sub\-interfaces of this interface | 1750 | -## Nodes +### Nodes ### DeviceType @@ -315,7 +315,7 @@ The base schemas serve as the foundation for every single schema extension you m - **Version:** 1.0 -## Generics +### Generics ### Generic @@ -342,7 +342,7 @@ The base schemas serve as the foundation for every single schema extension you m | ---- | ---- | ----------- | ---- | -------- | ------------ | | tags | BuiltinTag | many | Attribute | True | 3000 | -## Nodes +### Nodes ### Manufacturer @@ -369,7 +369,7 @@ The base schemas serve as the foundation for every single schema extension you m - **Version:** 1.0 -## Generics +### Generics ### Generic @@ -413,7 +413,7 @@ The base schemas serve as the foundation for every single schema extension you m - **Version:** 1.0 -## Nodes +### Nodes ### IPAddress @@ -476,7 +476,7 @@ Dependencies: `base, extensions/routing, extensions/routing_policies, extensions - **Version:** 1.0 -## Nodes +### Nodes ### PolicyPIM @@ -485,9 +485,9 @@ Dependencies: `base, extensions/routing, extensions/routing_policies, extensions - **Icon:** carbon:deployment-policy - **Include in Menu:** ❌ -## Extensions +### Extensions -### RoutingPIM +#### RoutingPIM #### Attributes @@ -513,7 +513,7 @@ Dependencies: `base` - **Version:** 1.0 -## Generics +### Generics ### Generic @@ -544,7 +544,7 @@ Dependencies: `base, extensions/compute` - **Version:** 1.0 -## Generics +### Generics ### Generic @@ -583,9 +583,9 @@ Dependencies: `base, extensions/compute` | ---- | ----- | ---------- | ----------- | ---- | ---- | | nodes | Nodes | worker\_in\_cluster | many | ComputeGenericUnit | Component | -## Extensions +### Extensions -### ComputeGenericUnit +#### ComputeGenericUnit #### Relationships @@ -593,7 +593,7 @@ Dependencies: `base, extensions/compute` | ---- | ---------- | ----- | ---- | ----------- | ----------- | -------- | | worker\_in\_cluster | worker\_in\_cluster | Worker in cluster | ClusterGenericComputeUnitNodes | one | This device is a worker node of the specified cluster\. | True | -### LocationGeneric +#### LocationGeneric #### Relationships @@ -611,7 +611,7 @@ Dependencies: `base` - **Version:** 1.0 -## Generics +### Generics ### Community @@ -638,7 +638,7 @@ Dependencies: `base` | ---- | ---- | ----------- | ---- | | clients | SnmpClient | many | Component | -## Nodes +### Nodes ### CommunityV2 @@ -720,9 +720,9 @@ Dependencies: `base` - **Version:** 1.0 -## Extensions +### Extensions -### InterfacePhysical +#### InterfacePhysical #### Attributes @@ -747,7 +747,7 @@ Dependencies: `base, extensions/routing, extensions/routing_policies, extensions - **Version:** 1.0 -## Nodes +### Nodes ### PolicyBGP @@ -756,9 +756,9 @@ Dependencies: `base, extensions/routing, extensions/routing_policies, extensions - **Icon:** carbon:deployment-policy - **Include in Menu:** ❌ -## Extensions +### Extensions -### RoutingBGPPeerGroup +#### RoutingBGPPeerGroup #### Attributes @@ -774,7 +774,7 @@ Dependencies: `base, extensions/routing, extensions/routing_policies, extensions | import\_routing\_policies | Import Routing Policies | RoutingPolicyBGP | bgp\_\_import\_policies | The routing\-policies used by this instance for import\. | Generic | many | | export\_routing\_policies | Export Routing Policies | RoutingPolicyBGP | bgp\_\_export\_policies | The routing\-policies used by this instance for export\. | Generic | many | -### RoutingBGPSession +#### RoutingBGPSession #### Attributes @@ -800,7 +800,7 @@ Dependencies: `base, extensions/routing, extensions/routing_bgp` - **Version:** 1.0 -## Nodes +### Nodes ### BGPRRCluster @@ -828,9 +828,9 @@ Dependencies: `base, extensions/routing, extensions/routing_bgp` | cluster\_id | Cluster ID | IpamIPAddress | Cluster ID represented as a reference to an IP Address | one | Attribute | False | 1200 | | peer\_groups | BGP Peer Groups | RoutingBGPPeerGroup | | many | Generic | True | | -## Extensions +### Extensions -### RoutingBGPPeerGroup +#### RoutingBGPPeerGroup #### Relationships @@ -856,7 +856,7 @@ Dependencies: `base` - **Version:** 1.0 -## Generics +### Generics ### GenericSFP @@ -882,7 +882,7 @@ Dependencies: `base` | spare\_location | LocationHosting | Attribute | True | one | 1500 | | manufacturer | OrganizationManufacturer | Attribute | True | one | 1350 | -## Nodes +### Nodes ### StandardSFP @@ -907,9 +907,9 @@ Dependencies: `base` | wavelength\_tx | Transmit Wavelength \(nm\) | Number | False | Transmit wavelength in nm\. | 1175 | | wavelength\_rx | Receive Wavelength \(nm\) | Number | False | Receive wavelength in nm\. | 1150 | -## Extensions +### Extensions -### DcimInterface +#### DcimInterface #### Relationships @@ -917,7 +917,7 @@ Dependencies: `base` | ---- | ---- | ----------- | -------- | | plugged\_sfp | DcimGenericSFP | one | True | -### LocationHosting +#### LocationHosting #### Relationships @@ -925,7 +925,7 @@ Dependencies: `base` | ---- | ---- | ----------- | -------- | | spare\_sfps | DcimGenericSFP | many | True | -### OrganizationManufacturer +#### OrganizationManufacturer #### Relationships @@ -943,7 +943,7 @@ Dependencies: `base, extensions/location_minimal` - **Version:** 1.0 -## Nodes +### Nodes ### Circuit @@ -1002,9 +1002,9 @@ Dependencies: `base, extensions/location_minimal` | circuit | DcimCircuit | 900 | False | one | Parent | | | location | LocationHosting | 1500 | False | one | Attribute | Location | -## Extensions +### Extensions -### OrganizationProvider +#### OrganizationProvider #### Relationships @@ -1012,7 +1012,7 @@ Dependencies: `base, extensions/location_minimal` | ---- | ---- | ----------- | -------- | | circuits | DcimCircuit | many | True | -### LocationHosting +#### LocationHosting #### Relationships @@ -1030,7 +1030,7 @@ Dependencies: `base, extensions/routing` - **Version:** 1.0 -## Nodes +### Nodes ### BGPCommunity @@ -1069,7 +1069,7 @@ Dependencies: `base` - **Version:** 1.0 -## Nodes +### Nodes ### CrossConnect @@ -1108,7 +1108,7 @@ Dependencies: `base, extensions/routing, extensions/routing_policies, extensions - **Version:** 1.0 -## Nodes +### Nodes ### PolicyAggregate @@ -1127,7 +1127,7 @@ Dependencies: `base` - **Version:** 1.0 -## Nodes +### Nodes ### Country @@ -1189,9 +1189,9 @@ Dependencies: `base` | ---- | ---- | -------- | ----------- | | owner | OrganizationGeneric | True | one | -## Extensions +### Extensions -### OrganizationProvider +#### OrganizationProvider #### Relationships @@ -1209,7 +1209,7 @@ Dependencies: `base` - **Version:** 1.0 -## Nodes +### Nodes ### VRRPGroup @@ -1264,9 +1264,9 @@ Dependencies: `base` | vrrp\_group | VRRP Group | VRRP Group | NetworkVRRPGroup | False | one | Attribute | 1200 | | interface | Interface L3 | Interface | InterfaceLayer3 | False | one | Attribute | 1300 | -## Extensions +### Extensions -### InterfaceLayer3 +#### InterfaceLayer3 #### Relationships @@ -1274,7 +1274,7 @@ Dependencies: `base` | ---- | ---- | ---- | ----------- | ----------- | ----- | ------------ | | vrrp | Component | NetworkVRRPInterface | VRRP Interface Configuration | one | VRRP | 1500 | -### IpamIPAddress +#### IpamIPAddress #### Relationships @@ -1292,7 +1292,7 @@ Dependencies: `base, extensions/routing, extensions/routing_bgp, extensions/rout - **Version:** 1.0 -## Nodes +### Nodes ### IXP @@ -1369,7 +1369,7 @@ Dependencies: `base` - **Version:** 1.0 -## Nodes +### Nodes ### VLAN @@ -1421,9 +1421,9 @@ Dependencies: `base` | ---- | ---- | -------- | ----------- | ---- | | vlans | IpamVLAN | True | many | Component | -## Extensions +### Extensions -### IpamPrefix +#### IpamPrefix #### Relationships @@ -1431,7 +1431,7 @@ Dependencies: `base` | ---- | ---- | -------- | ----------- | ---- | ------------ | | vlan | IpamVLAN | True | one | Attribute | 1400 | -### InterfaceLayer2 +#### InterfaceLayer2 #### Relationships @@ -1440,7 +1440,7 @@ Dependencies: `base` | untagged\_vlan | Untagged VLAN | IpamVLAN | True | one | Generic | interface\_l2\_\_untagged\_vlan | | tagged\_vlan | Tagged VLANs | IpamVLAN | True | many | Generic | interface\_l2\_\_tagged\_vlan | -### LocationHosting +#### LocationHosting #### Relationships @@ -1458,7 +1458,7 @@ Dependencies: `base, extensions/routing, extensions/routing_policies, extensions - **Version:** 1.0 -## Nodes +### Nodes ### PolicyOSPF @@ -1467,9 +1467,9 @@ Dependencies: `base, extensions/routing, extensions/routing_policies, extensions - **Icon:** carbon:deployment-policy - **Include in Menu:** ❌ -## Extensions +### Extensions -### RoutingOSPF +#### RoutingOSPF #### Attributes @@ -1498,7 +1498,7 @@ Dependencies: `base` - **Version:** 1.0 -## Generics +### Generics ### DeviceWithPhysicalDisks @@ -1511,7 +1511,7 @@ Dependencies: `base` | ---- | ----------- | ---- | -------- | ---- | | physical\_disks | many | DcimPhysicalDisk | True | Component | -## Nodes +### Nodes ### PhysicalDisk @@ -1552,7 +1552,7 @@ Dependencies: `base` - **Version:** 1.0 -## Generics +### Generics ### GenericUnit @@ -1570,7 +1570,7 @@ Dependencies: `base` | ---- | ----------- | ---- | ---- | -------- | | virtual\_machines | many | VirtualizationVirtualMachine | Component | True | -## Nodes +### Nodes ### PhysicalServer @@ -1617,7 +1617,7 @@ Dependencies: `base, extensions/routing` - **Version:** 1.0 -## Nodes +### Nodes ### PIM @@ -1684,7 +1684,7 @@ Dependencies: `base` - **Version:** 1.0 -## Nodes +### Nodes ### Cable @@ -1716,7 +1716,7 @@ Dependencies: `base` - **Version:** 1.0 -## Generics +### Generics ### GenericPatchPanelInterface @@ -1733,7 +1733,7 @@ Dependencies: `base` | description | Text | 2000 | True | \`\` | | connector\_type | Dropdown | 1100 | | \`FC, LC, LC\_PC, LC\_UPC, LC\_APC, LSH, LSH\_PC, LSH\_UPC, LSH\_APC, LX\_5, LX\_5\_PC, LX\_5\_UPC, LX\_5\_APC, MPO, MTRJ, SC, SC\_PC, SC\_UPC, SC\_APC, ST, CS, SN, SMA\_905, SMA\_906, URM\_P2\` | -## Nodes +### Nodes ### PatchPanel @@ -1837,7 +1837,7 @@ Dependencies: `base, extensions/routing` - **Version:** 1.0 -## Nodes +### Nodes ### AggregateRoute @@ -1870,7 +1870,7 @@ Dependencies: `base, extensions/sfp` - **Version:** 1.0 -## Generics +### Generics ### GenericOadmInterface @@ -1887,7 +1887,7 @@ Dependencies: `base, extensions/sfp` | description | Text | 2000 | True | \`\` | | connector\_type | Dropdown | 1100 | | \`FC, LC, LC\_PC, LC\_UPC, LC\_APC, LSH, LSH\_PC, LSH\_UPC, LSH\_APC, LX\_5, LX\_5\_PC, LX\_5\_UPC, LX\_5\_APC, MPO, MTRJ, SC, SC\_PC, SC\_UPC, SC\_APC, ST, CS, SN, SMA\_905, SMA\_906, URM\_P2\` | -## Nodes +### Nodes ### OpticalMultiplexer @@ -2002,7 +2002,7 @@ Dependencies: `base` - **Version:** 1.0 -## Nodes +### Nodes ### Group @@ -2054,9 +2054,9 @@ Dependencies: `base` | user\_group | UserGroup | one | False | Attribute | 1200 | | organization | OrganizationGeneric | one | False | Parent | | -## Extensions +### Extensions -### OrganizationGeneric +#### OrganizationGeneric #### Relationships @@ -2080,7 +2080,7 @@ Dependencies: `base` - **Version:** 1.0 -## Nodes +### Nodes ### Policer @@ -2117,7 +2117,7 @@ Dependencies: `base` - **Version:** 1.0 -## Nodes +### Nodes ### VRF @@ -2173,9 +2173,9 @@ Dependencies: `base` | ---- | ---- | -------- | ----------- | | vrf | IpamVRF | True | many | -## Extensions +### Extensions -### IpamPrefix +#### IpamPrefix #### Relationships @@ -2183,7 +2183,7 @@ Dependencies: `base` | ---- | ----- | ---- | -------- | ----------- | ---- | ------------ | | vrf | VRF | IpamVRF | True | one | Attribute | 1150 | -### IpamIPAddress +#### IpamIPAddress #### Relationships @@ -2201,7 +2201,7 @@ Dependencies: `base` - **Version:** 1.0 -## Nodes +### Nodes ### Lag @@ -2222,9 +2222,9 @@ Dependencies: `base` | ---- | ----- | ---- | ----------- | ---- | ----------- | ------------ | | lag\_members | Member\(s\) | InterfacePhysical | many | Attribute | Physical Interfaces that are members of this aggregate | 1800 | -## Extensions +### Extensions -### InterfacePhysical +#### InterfacePhysical #### Relationships @@ -2242,7 +2242,7 @@ Dependencies: `base, extensions/vlan` - **Version:** 1.0 -## Generics +### Generics ### Protocol @@ -2275,7 +2275,7 @@ Dependencies: `base, extensions/routing` - **Version:** 1.0 -## Nodes +### Nodes ### AutonomousSystem @@ -2372,9 +2372,9 @@ Dependencies: `base, extensions/routing` | peer\_group | | RoutingBGPPeerGroup | True | one | Attribute | | peer\_session | | RoutingBGPSession | True | one | Attribute | -## Extensions +### Extensions -### DcimGenericDevice +#### DcimGenericDevice #### Relationships @@ -2382,7 +2382,7 @@ Dependencies: `base, extensions/routing` | ---- | ---- | -------- | ----------- | ---- | ------------ | | asn | RoutingAutonomousSystem | True | one | Attribute | 1600 | -### OrganizationGeneric +#### OrganizationGeneric #### Relationships @@ -2403,7 +2403,7 @@ Dependencies: `base` - **Version:** 1.0 -## Generics +### Generics ### GenericModule @@ -2452,9 +2452,9 @@ Dependencies: `base` | manufacturer | OrganizationManufacturer | manufacturer\_\_moduletype | one | False | Attribute | Manufacturer of the module type\. | 1250 | | tags | BuiltinTag | | many | True | Attribute | Tags associated with the module type\. | 3000 | -## Extensions +### Extensions -### DcimPhysicalDevice +#### DcimPhysicalDevice #### Relationships @@ -2474,7 +2474,7 @@ Dependencies: `base` - **Version:** 1.0 -## Generics +### Generics ### Policy @@ -2507,7 +2507,7 @@ Dependencies: `base, extensions/cluster, extensions/compute` - **Version:** 1.0 -## Nodes +### Nodes ### Hosting @@ -2534,7 +2534,7 @@ Dependencies: `base, extensions/routing` - **Version:** 1.0 -## Nodes +### Nodes ### OSPF @@ -2604,7 +2604,7 @@ Dependencies: `base, extensions/compute` - **Version:** 1.0 -## Nodes +### Nodes ### Switch @@ -2790,7 +2790,7 @@ Dependencies: `base` - **Version:** 1.0 -## Nodes +### Nodes ### Continent @@ -2885,9 +2885,9 @@ Dependencies: `base` | ---- | ---- | -------- | ----------- | | owner | OrganizationGeneric | True | one | -## Extensions +### Extensions -### OrganizationProvider +#### OrganizationProvider #### Relationships @@ -2905,7 +2905,7 @@ Dependencies: `base` - **Version:** 1.0 -## Generics +### Generics ### ManagementServer @@ -2986,7 +2986,7 @@ Dependencies: `base` | ---- | ---- | -------- | ----------- | | topology | TopologyTopology | True | many | -## Nodes +### Nodes ### Topology @@ -3212,9 +3212,9 @@ Dependencies: `base` | vlan | InfraVLAN | one | Component | True | 1500 | | prefix | InfraPrefix | one | Component | True | 1400 | -## Extensions +### Extensions -### DcimGenericDevice +#### DcimGenericDevice #### Relationships @@ -3222,7 +3222,7 @@ Dependencies: `base` | ---- | ---- | -------- | ----------- | | topology | TopologyTopology | True | one | -### IpamPrefix +#### IpamPrefix #### Relationships @@ -3240,7 +3240,7 @@ Dependencies: `base, extensions/modules` - **Version:** 1.0 -## Nodes +### Nodes ### RoutingEngineType @@ -3289,7 +3289,7 @@ Dependencies: `base, extensions/modules` - **Version:** 1.0 -## Nodes +### Nodes ### LinecardType @@ -3387,7 +3387,7 @@ Dependencies: `base` - **Version:** 1.0 -## Generics +### Generics ### PolicyAssignment @@ -3467,7 +3467,7 @@ Dependencies: `base` | ---- | ----- | ---- | ----------- | -------- | | service\_groups | Service Groups | SecurityGenericServiceGroup | many | True | -## Nodes +### Nodes ### Zone @@ -3830,9 +3830,9 @@ Dependencies: `base` | ip\_addresses | InfraIPAddress | True | many | Component | | security\_zone | SecurityZone | False | one | Attribute | -## Extensions +### Extensions -### LocationGeneric +#### LocationGeneric #### Relationships @@ -3852,7 +3852,7 @@ Attribution: [Rowan Coleman](https://www.linkedin.com/in/rowan-coleman-6a147156/ - **Version:** 1.0 -## Generics +### Generics ### Resource @@ -3872,7 +3872,7 @@ Attribution: [Rowan Coleman](https://www.linkedin.com/in/rowan-coleman-6a147156/ | location | one | Attribute | AzureLocation | | | resourcegroup | one | Parent | AzureResourceGroup | False | -## Nodes +### Nodes ### Location @@ -3982,7 +3982,7 @@ Dependencies: `base, extensions/circuit` - **Version:** 1.0 -## Nodes +### Nodes ### Tenant @@ -4008,7 +4008,7 @@ Dependencies: `base` - **Version:** 1.0 -## Nodes +### Nodes ### ForwardingClass @@ -4158,7 +4158,7 @@ Dependencies: `extensions/circuit` - **Version:** 1.0 -## Nodes +### Nodes ### Service @@ -4188,9 +4188,9 @@ Dependencies: `extensions/circuit` | provider | OrganizationProvider | False | one | Attribute | | circuit\_endpoints | CircuitEndpoint | True | many | Component | -## Extensions +### Extensions -### OrganizationProvider +#### OrganizationProvider #### Relationships @@ -4198,7 +4198,7 @@ Dependencies: `extensions/circuit` | ---- | ---- | ----------- | -------- | | circuit\_services | CircuitService | many | True | -### CircuitEndpoint +#### CircuitEndpoint #### Relationships @@ -4216,7 +4216,7 @@ Dependencies: `base` - **Version:** 1.0 -## Nodes +### Nodes ### MapInOut @@ -4248,9 +4248,9 @@ Dependencies: `base` | ---- | ---- | ---- | ----------- | ----------- | -------- | ----- | ------------ | | interface | Parent | DcimInterface | Interface to which the Input/Output VLAN mapping is applied | one | False | Interface | 1000 | -## Extensions +### Extensions -### DcimInterface +#### DcimInterface #### Relationships diff --git a/docs/package-lock.json b/docs/package-lock.json index a8a959e..de881fb 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -8,8 +8,8 @@ "name": "docs", "version": "0.0.0", "dependencies": { - "@docusaurus/core": "^3.7.0", - "@docusaurus/preset-classic": "^3.7.0", + "@docusaurus/core": "^3.8.1", + "@docusaurus/preset-classic": "^3.8.1", "@mdx-js/react": "^3.0.0", "clsx": "^2.0.0", "prism-react-renderer": "^2.3.0", @@ -18,8 +18,8 @@ "react-dom": "^18.0.0" }, "devDependencies": { - "@docusaurus/module-type-aliases": "^3.7.0", - "@docusaurus/tsconfig": "^3.7.0", + "@docusaurus/module-type-aliases": "^3.8.1", + "@docusaurus/tsconfig": "^3.8.1", "@docusaurus/types": "3.5.2", "typescript": "~5.5.2" }, @@ -73,99 +73,99 @@ } }, "node_modules/@algolia/client-abtesting": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.20.0.tgz", - "integrity": "sha512-YaEoNc1Xf2Yk6oCfXXkZ4+dIPLulCx8Ivqj0OsdkHWnsI3aOJChY5qsfyHhDBNSOhqn2ilgHWxSfyZrjxBcAww==", + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.28.0.tgz", + "integrity": "sha512-oGMaBCIpvz3n+4rCz/73ldo/Dw95YFx6+MAQkNiCfsgolB2tduaiZvNOvdkm86eKqSKDDBGBo54GQXZ5YX6Bjg==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.20.0", - "@algolia/requester-browser-xhr": "5.20.0", - "@algolia/requester-fetch": "5.20.0", - "@algolia/requester-node-http": "5.20.0" + "@algolia/client-common": "5.28.0", + "@algolia/requester-browser-xhr": "5.28.0", + "@algolia/requester-fetch": "5.28.0", + "@algolia/requester-node-http": "5.28.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-analytics": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.20.0.tgz", - "integrity": "sha512-CIT9ni0+5sYwqehw+t5cesjho3ugKQjPVy/iPiJvtJX4g8Cdb6je6SPt2uX72cf2ISiXCAX9U3cY0nN0efnRDw==", + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.28.0.tgz", + "integrity": "sha512-G+TTdNnuwUSy8evolyNE3I74uSIXPU4LLDnJmB4d6TkLvvzMAjwsMBuHHjwYpw37+c4tH0dT4u+39cyxrZNojg==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.20.0", - "@algolia/requester-browser-xhr": "5.20.0", - "@algolia/requester-fetch": "5.20.0", - "@algolia/requester-node-http": "5.20.0" + "@algolia/client-common": "5.28.0", + "@algolia/requester-browser-xhr": "5.28.0", + "@algolia/requester-fetch": "5.28.0", + "@algolia/requester-node-http": "5.28.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-common": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.20.0.tgz", - "integrity": "sha512-iSTFT3IU8KNpbAHcBUJw2HUrPnMXeXLyGajmCL7gIzWOsYM4GabZDHXOFx93WGiXMti1dymz8k8R+bfHv1YZmA==", + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.28.0.tgz", + "integrity": "sha512-lqa0Km1/YWfPplNB8jX9kstaCl2LO6ziQAJEBtHxw2sJp/mlxJIAuudBUbEhoUrKQvI7N4erNYawl6ejic7gfw==", "license": "MIT", "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-insights": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.20.0.tgz", - "integrity": "sha512-w9RIojD45z1csvW1vZmAko82fqE/Dm+Ovsy2ElTsjFDB0HMAiLh2FO86hMHbEXDPz6GhHKgGNmBRiRP8dDPgJg==", + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.28.0.tgz", + "integrity": "sha512-pGsDrlnt0UMXDjQuIpKQSfl7PVx+KcqcwVgkgITwQ45akckTwmbpaV4rZF2k3wgIbOECFZGnpArWF5cSrE4T3g==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.20.0", - "@algolia/requester-browser-xhr": "5.20.0", - "@algolia/requester-fetch": "5.20.0", - "@algolia/requester-node-http": "5.20.0" + "@algolia/client-common": "5.28.0", + "@algolia/requester-browser-xhr": "5.28.0", + "@algolia/requester-fetch": "5.28.0", + "@algolia/requester-node-http": "5.28.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-personalization": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.20.0.tgz", - "integrity": "sha512-p/hftHhrbiHaEcxubYOzqVV4gUqYWLpTwK+nl2xN3eTrSW9SNuFlAvUBFqPXSVBqc6J5XL9dNKn3y8OA1KElSQ==", + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.28.0.tgz", + "integrity": "sha512-d/Uot/LH8YJeFyqpAmTN/LxueqV5mLD5K4aAKTDVP4CBNNubX4Z+0sveRcxWQZiORVLrs5zR1G5Buxmab2Xb9w==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.20.0", - "@algolia/requester-browser-xhr": "5.20.0", - "@algolia/requester-fetch": "5.20.0", - "@algolia/requester-node-http": "5.20.0" + "@algolia/client-common": "5.28.0", + "@algolia/requester-browser-xhr": "5.28.0", + "@algolia/requester-fetch": "5.28.0", + "@algolia/requester-node-http": "5.28.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-query-suggestions": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.20.0.tgz", - "integrity": "sha512-m4aAuis5vZi7P4gTfiEs6YPrk/9hNTESj3gEmGFgfJw3hO2ubdS4jSId1URd6dGdt0ax2QuapXufcrN58hPUcw==", + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.28.0.tgz", + "integrity": "sha512-XygCxyxJ5IwqsTrzpsAG2O/lr8GsnMA3ih7wzbXtot+ZyAhzDUFwlQSjCCmjACNbrBEaIvtiGbjX/z+HZd902Q==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.20.0", - "@algolia/requester-browser-xhr": "5.20.0", - "@algolia/requester-fetch": "5.20.0", - "@algolia/requester-node-http": "5.20.0" + "@algolia/client-common": "5.28.0", + "@algolia/requester-browser-xhr": "5.28.0", + "@algolia/requester-fetch": "5.28.0", + "@algolia/requester-node-http": "5.28.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-search": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.20.0.tgz", - "integrity": "sha512-KL1zWTzrlN4MSiaK1ea560iCA/UewMbS4ZsLQRPoDTWyrbDKVbztkPwwv764LAqgXk0fvkNZvJ3IelcK7DqhjQ==", + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.28.0.tgz", + "integrity": "sha512-zLEddu9TEwFT/YUJkA3oUwqQYHeGEj64fi0WyVRq+siJVfxt4AYkFfcMBcSr2iR1Wo9Mk10IPOhk3DUr0TSncg==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.20.0", - "@algolia/requester-browser-xhr": "5.20.0", - "@algolia/requester-fetch": "5.20.0", - "@algolia/requester-node-http": "5.20.0" + "@algolia/client-common": "5.28.0", + "@algolia/requester-browser-xhr": "5.28.0", + "@algolia/requester-fetch": "5.28.0", + "@algolia/requester-node-http": "5.28.0" }, "engines": { "node": ">= 14.0.0" @@ -178,81 +178,81 @@ "license": "MIT" }, "node_modules/@algolia/ingestion": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.20.0.tgz", - "integrity": "sha512-shj2lTdzl9un4XJblrgqg54DoK6JeKFO8K8qInMu4XhE2JuB8De6PUuXAQwiRigZupbI0xq8aM0LKdc9+qiLQA==", + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.28.0.tgz", + "integrity": "sha512-dmkoSQ+bzC5ryDu2J4MTRDxuh5rZg6sHNawgBfSC/iNttEzeogCyvdxg+uWMErJuSlZk9oENykhETMkSFurwpQ==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.20.0", - "@algolia/requester-browser-xhr": "5.20.0", - "@algolia/requester-fetch": "5.20.0", - "@algolia/requester-node-http": "5.20.0" + "@algolia/client-common": "5.28.0", + "@algolia/requester-browser-xhr": "5.28.0", + "@algolia/requester-fetch": "5.28.0", + "@algolia/requester-node-http": "5.28.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/monitoring": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.20.0.tgz", - "integrity": "sha512-aF9blPwOhKtWvkjyyXh9P5peqmhCA1XxLBRgItT+K6pbT0q4hBDQrCid+pQZJYy4HFUKjB/NDDwyzFhj/rwKhw==", + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.28.0.tgz", + "integrity": "sha512-XwVpkxc2my2rNUWbHo4Dk1Mx/JOrq6CLOAC3dmIrMt2Le2bIPMIDA6Iyjz4F4kXvp7H8q1R26cRMlYmhL31Jlg==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.20.0", - "@algolia/requester-browser-xhr": "5.20.0", - "@algolia/requester-fetch": "5.20.0", - "@algolia/requester-node-http": "5.20.0" + "@algolia/client-common": "5.28.0", + "@algolia/requester-browser-xhr": "5.28.0", + "@algolia/requester-fetch": "5.28.0", + "@algolia/requester-node-http": "5.28.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/recommend": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.20.0.tgz", - "integrity": "sha512-T6B/WPdZR3b89/F9Vvk6QCbt/wrLAtrGoL8z4qPXDFApQ8MuTFWbleN/4rHn6APWO3ps+BUePIEbue2rY5MlRw==", + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.28.0.tgz", + "integrity": "sha512-MVqY7zIw0TdQUExefGthydLXccbe5CHH/uOxIG8/QiSD0ZmAmg95UwfmJiJBfuXGGi/cmCrW3JQiDbAM9vx6PA==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.20.0", - "@algolia/requester-browser-xhr": "5.20.0", - "@algolia/requester-fetch": "5.20.0", - "@algolia/requester-node-http": "5.20.0" + "@algolia/client-common": "5.28.0", + "@algolia/requester-browser-xhr": "5.28.0", + "@algolia/requester-fetch": "5.28.0", + "@algolia/requester-node-http": "5.28.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-browser-xhr": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.20.0.tgz", - "integrity": "sha512-t6//lXsq8E85JMenHrI6mhViipUT5riNhEfCcvtRsTV+KIBpC6Od18eK864dmBhoc5MubM0f+sGpKOqJIlBSCg==", + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.28.0.tgz", + "integrity": "sha512-RfxbCinf+coQgxRkDKmRiB/ovOt3Fz0md84LmogsQIabrJVKoQrFON4Vc9YdK2bTTn6iBHtnezm0puNTk+n3SA==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.20.0" + "@algolia/client-common": "5.28.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-fetch": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.20.0.tgz", - "integrity": "sha512-FHxYGqRY+6bgjKsK4aUsTAg6xMs2S21elPe4Y50GB0Y041ihvw41Vlwy2QS6K9ldoftX4JvXodbKTcmuQxywdQ==", + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.28.0.tgz", + "integrity": "sha512-85ZBqPTQ5tjiZ925V89ttE/vUJXpJjy2cCF7PAWq9v32JGGF+v+mDm8NiEBRk9AS7+4klb/uR80KBdcg5bO7cA==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.20.0" + "@algolia/client-common": "5.28.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-node-http": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.20.0.tgz", - "integrity": "sha512-kmtQClq/w3vtPteDSPvaW9SPZL/xrIgMrxZyAgsFwrJk0vJxqyC5/hwHmrCraDnStnGSADnLpBf4SpZnwnkwWw==", + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.28.0.tgz", + "integrity": "sha512-U3F4WeExiKx1Ig6OxO9dDzzk04HKgtEn47TwjgKmGSDPFM7WZ5KyP1EAZEbfd3/nw6hp0z9RKdTfMql6Sd1/2Q==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.20.0" + "@algolia/client-common": "5.28.0" }, "engines": { "node": ">= 14.0.0" @@ -272,44 +272,44 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", + "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz", - "integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==", + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.5.tgz", + "integrity": "sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.7.tgz", - "integrity": "sha512-SRijHmF0PSPgLIBYlWnG0hyeJLwXE2CgpsXaMOrtt2yp9/86ALw6oUlj9KYuZ0JN07T4eBMVIW4li/9S1j2BGA==", + "version": "7.27.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.4.tgz", + "integrity": "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==", "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.5", - "@babel/helper-compilation-targets": "^7.26.5", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.7", - "@babel/parser": "^7.26.7", - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.26.7", - "@babel/types": "^7.26.7", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.27.3", + "@babel/helpers": "^7.27.4", + "@babel/parser": "^7.27.4", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.27.4", + "@babel/types": "^7.27.3", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -334,13 +334,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.5.tgz", - "integrity": "sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==", + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz", + "integrity": "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.26.5", - "@babel/types": "^7.26.5", + "@babel/parser": "^7.27.5", + "@babel/types": "^7.27.3", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" @@ -350,25 +350,25 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", - "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", "license": "MIT", "dependencies": { - "@babel/types": "^7.25.9" + "@babel/types": "^7.27.3" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", - "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.26.5", - "@babel/helper-validator-option": "^7.25.9", + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -387,17 +387,17 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", - "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz", + "integrity": "sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/traverse": "^7.25.9", + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.27.1", "semver": "^6.3.1" }, "engines": { @@ -417,12 +417,12 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz", - "integrity": "sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz", + "integrity": "sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-annotate-as-pure": "^7.27.1", "regexpu-core": "^6.2.0", "semver": "^6.3.1" }, @@ -443,9 +443,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz", - "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz", + "integrity": "sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==", "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", @@ -459,40 +459,40 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", - "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", + "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", + "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.3" }, "engines": { "node": ">=6.9.0" @@ -502,35 +502,35 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", - "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", "license": "MIT", "dependencies": { - "@babel/types": "^7.25.9" + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", - "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", - "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", + "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-wrap-function": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-wrap-function": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -540,14 +540,14 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz", - "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", + "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", "license": "MIT", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/traverse": "^7.26.5" + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -557,79 +557,79 @@ } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", - "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", - "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.27.1.tgz", + "integrity": "sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==", "license": "MIT", "dependencies": { - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/template": "^7.27.1", + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.7.tgz", - "integrity": "sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==", + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz", + "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==", "license": "MIT", "dependencies": { - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.7" + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.7.tgz", - "integrity": "sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==", + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", + "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", "license": "MIT", "dependencies": { - "@babel/types": "^7.26.7" + "@babel/types": "^7.27.3" }, "bin": { "parser": "bin/babel-parser.js" @@ -639,13 +639,13 @@ } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", - "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz", + "integrity": "sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -655,12 +655,12 @@ } }, "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", - "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", + "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -670,12 +670,12 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", - "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", + "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -685,14 +685,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", + "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -702,13 +702,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", - "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.27.1.tgz", + "integrity": "sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -742,12 +742,12 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", - "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", + "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -757,12 +757,12 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", - "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -772,12 +772,12 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", - "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -787,12 +787,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", - "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", + "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -818,12 +818,12 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", - "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", + "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -833,14 +833,14 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz", - "integrity": "sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.27.1.tgz", + "integrity": "sha512-eST9RrwlpaoJBDHShc+DS2SG4ATTi2MYNb4OxYkf3n+7eb49LWpnS+HSpVfW4x927qQwgk8A2hGNVaajAEw0EA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-remap-async-to-generator": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -850,14 +850,14 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", - "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", + "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-remap-async-to-generator": "^7.25.9" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -867,12 +867,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz", - "integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", + "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -882,12 +882,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", - "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.5.tgz", + "integrity": "sha512-JF6uE2s67f0y2RZcm2kpAUEbD50vH62TyWVebxwHAlbSdM49VqPz8t4a1uIjp4NIOIZ4xzLfjY5emt/RCyC7TQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -897,13 +897,13 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", - "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", + "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -913,13 +913,13 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", - "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.27.1.tgz", + "integrity": "sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==", "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -929,16 +929,16 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", - "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.27.1.tgz", + "integrity": "sha512-7iLhfFAubmpeJe/Wo2TVuDrykh/zlWXLzPNdL0Jqn/Xu8R3QQ8h9ff8FQoISZOsw74/HFqFI7NX63HN7QFIHKA==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9", - "@babel/traverse": "^7.25.9", + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/traverse": "^7.27.1", "globals": "^11.1.0" }, "engines": { @@ -949,13 +949,13 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", - "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", + "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/template": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/template": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -965,12 +965,12 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", - "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.27.3.tgz", + "integrity": "sha512-s4Jrok82JpiaIprtY2nHsYmrThKvvwgHwjgd7UMiYhZaN0asdXNLr0y+NjTfkA7SyQE5i2Fb7eawUOZmLvyqOA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -980,13 +980,13 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", - "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz", + "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -996,12 +996,12 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", - "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", + "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1011,13 +1011,13 @@ } }, "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1027,12 +1027,12 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", - "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", + "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1042,12 +1042,12 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", - "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz", + "integrity": "sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1057,12 +1057,12 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", - "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", + "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1072,13 +1072,13 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz", - "integrity": "sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", + "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1088,14 +1088,14 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", - "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", + "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1105,12 +1105,12 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", - "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz", + "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1120,12 +1120,12 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", - "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", + "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1135,12 +1135,12 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", - "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz", + "integrity": "sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1150,12 +1150,12 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", - "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", + "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1165,13 +1165,13 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", - "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", + "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1181,13 +1181,13 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", - "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", + "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1197,15 +1197,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", - "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz", + "integrity": "sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==", "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1215,13 +1215,13 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", - "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", + "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1231,13 +1231,13 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1247,12 +1247,12 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", - "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", + "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1262,12 +1262,12 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.26.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz", - "integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", + "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1277,12 +1277,12 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", - "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", + "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1292,14 +1292,15 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", - "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.27.3.tgz", + "integrity": "sha512-7ZZtznF9g4l2JCImCo5LNKFHB5eXnN39lLtLY5Tg+VkR0jwOt7TBciMckuiQIOIW7L5tkQOCh3bVGYeXgMx52Q==", "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9" + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.27.3", + "@babel/plugin-transform-parameters": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1309,13 +1310,13 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", - "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", + "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1325,12 +1326,12 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", - "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", + "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1340,13 +1341,13 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz", + "integrity": "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1356,12 +1357,12 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", - "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.1.tgz", + "integrity": "sha512-018KRk76HWKeZ5l4oTj2zPpSh+NbGdt0st5S6x0pga6HgrjBOJb24mMDHorFopOOd6YHkLgOZ+zaCjZGPO4aKg==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1371,13 +1372,13 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", - "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", + "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1387,14 +1388,14 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", - "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", + "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1404,12 +1405,12 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", - "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", + "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1419,12 +1420,12 @@ } }, "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.25.9.tgz", - "integrity": "sha512-Ncw2JFsJVuvfRsa2lSHiC55kETQVLSnsYGQ1JDDwkUeWGTL/8Tom8aLTnlqgoeuopWrbbGndrc9AlLYrIosrow==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.27.1.tgz", + "integrity": "sha512-edoidOjl/ZxvYo4lSBOQGDSyToYVkTAwyVoa2tkuYTSmjrB1+uAedoL5iROVLXkxH+vRgA7uP4tMg2pUJpZ3Ug==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1434,12 +1435,12 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz", - "integrity": "sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.27.1.tgz", + "integrity": "sha512-p9+Vl3yuHPmkirRrg021XiP+EETmPMQTLr6Ayjj85RLNEbb3Eya/4VI0vAdzQG9SEAl2Lnt7fy5lZyMzjYoZQQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1449,16 +1450,16 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz", - "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz", + "integrity": "sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-syntax-jsx": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1468,12 +1469,12 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz", - "integrity": "sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz", + "integrity": "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==", "license": "MIT", "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.25.9" + "@babel/plugin-transform-react-jsx": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1483,13 +1484,13 @@ } }, "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz", - "integrity": "sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz", + "integrity": "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1499,13 +1500,12 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", - "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.5.tgz", + "integrity": "sha512-uhB8yHerfe3MWnuLAhEbeQ4afVoqv8BQsPqrTv7e/jZ9y00kJL6l9a/f4OWaKxotmjzewfEyXE1vgDJenkQ2/Q==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "regenerator-transform": "^0.15.2" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1515,13 +1515,13 @@ } }, "node_modules/@babel/plugin-transform-regexp-modifiers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", - "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz", + "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1531,12 +1531,12 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", - "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", + "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1546,15 +1546,15 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.9.tgz", - "integrity": "sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ==", + "version": "7.27.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.27.4.tgz", + "integrity": "sha512-D68nR5zxU64EUzV8i7T3R5XP0Xhrou/amNnddsRQssx6GrTLdZl1rLxyjtVZBd+v/NVX4AbTPOB5aU8thAZV1A==", "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", + "babel-plugin-polyfill-corejs3": "^0.11.0", "babel-plugin-polyfill-regenerator": "^0.6.1", "semver": "^6.3.1" }, @@ -1575,12 +1575,12 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", - "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", + "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1590,13 +1590,13 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", - "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", + "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1606,12 +1606,12 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", - "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", + "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1621,12 +1621,12 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz", - "integrity": "sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", + "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1636,12 +1636,12 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.26.7.tgz", - "integrity": "sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", + "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1651,16 +1651,16 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.7.tgz", - "integrity": "sha512-5cJurntg+AT+cgelGP9Bt788DKiAw9gIMSMU2NJrLAilnj0m8WZWUNZPSLOmadYsujHutpgElO+50foX+ib/Wg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.27.1.tgz", + "integrity": "sha512-Q5sT5+O4QUebHdbwKedFBEwRLb02zJ7r4A5Gg2hUoLuU3FjdMcyqcywqUrLCaDsFCxzokf7u9kuy7qz51YUuAg==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/plugin-syntax-typescript": "^7.25.9" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1670,12 +1670,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", - "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", + "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1685,13 +1685,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", - "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz", + "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1701,13 +1701,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", - "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", + "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1717,13 +1717,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", - "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz", + "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1733,79 +1733,79 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.7.tgz", - "integrity": "sha512-Ycg2tnXwixaXOVb29rana8HNPgLVBof8qqtNQ9LE22IoyZboQbGSxI6ZySMdW3K5nAe6gu35IaJefUJflhUFTQ==", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.26.5", - "@babel/helper-compilation-targets": "^7.26.5", - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.27.2.tgz", + "integrity": "sha512-Ma4zSuYSlGNRlCLO+EAzLnCmJK2vdstgv+n7aUP+/IKZrOfWHOJVdSJtuub8RzHTj3ahD37k5OKJWvzf16TQyQ==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.27.1", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.27.1", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.26.0", - "@babel/plugin-syntax-import-attributes": "^7.26.0", + "@babel/plugin-syntax-import-assertions": "^7.27.1", + "@babel/plugin-syntax-import-attributes": "^7.27.1", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.25.9", - "@babel/plugin-transform-async-generator-functions": "^7.25.9", - "@babel/plugin-transform-async-to-generator": "^7.25.9", - "@babel/plugin-transform-block-scoped-functions": "^7.26.5", - "@babel/plugin-transform-block-scoping": "^7.25.9", - "@babel/plugin-transform-class-properties": "^7.25.9", - "@babel/plugin-transform-class-static-block": "^7.26.0", - "@babel/plugin-transform-classes": "^7.25.9", - "@babel/plugin-transform-computed-properties": "^7.25.9", - "@babel/plugin-transform-destructuring": "^7.25.9", - "@babel/plugin-transform-dotall-regex": "^7.25.9", - "@babel/plugin-transform-duplicate-keys": "^7.25.9", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-dynamic-import": "^7.25.9", - "@babel/plugin-transform-exponentiation-operator": "^7.26.3", - "@babel/plugin-transform-export-namespace-from": "^7.25.9", - "@babel/plugin-transform-for-of": "^7.25.9", - "@babel/plugin-transform-function-name": "^7.25.9", - "@babel/plugin-transform-json-strings": "^7.25.9", - "@babel/plugin-transform-literals": "^7.25.9", - "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", - "@babel/plugin-transform-member-expression-literals": "^7.25.9", - "@babel/plugin-transform-modules-amd": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.26.3", - "@babel/plugin-transform-modules-systemjs": "^7.25.9", - "@babel/plugin-transform-modules-umd": "^7.25.9", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-new-target": "^7.25.9", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6", - "@babel/plugin-transform-numeric-separator": "^7.25.9", - "@babel/plugin-transform-object-rest-spread": "^7.25.9", - "@babel/plugin-transform-object-super": "^7.25.9", - "@babel/plugin-transform-optional-catch-binding": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9", - "@babel/plugin-transform-private-methods": "^7.25.9", - "@babel/plugin-transform-private-property-in-object": "^7.25.9", - "@babel/plugin-transform-property-literals": "^7.25.9", - "@babel/plugin-transform-regenerator": "^7.25.9", - "@babel/plugin-transform-regexp-modifiers": "^7.26.0", - "@babel/plugin-transform-reserved-words": "^7.25.9", - "@babel/plugin-transform-shorthand-properties": "^7.25.9", - "@babel/plugin-transform-spread": "^7.25.9", - "@babel/plugin-transform-sticky-regex": "^7.25.9", - "@babel/plugin-transform-template-literals": "^7.25.9", - "@babel/plugin-transform-typeof-symbol": "^7.26.7", - "@babel/plugin-transform-unicode-escapes": "^7.25.9", - "@babel/plugin-transform-unicode-property-regex": "^7.25.9", - "@babel/plugin-transform-unicode-regex": "^7.25.9", - "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", + "@babel/plugin-transform-arrow-functions": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.27.1", + "@babel/plugin-transform-async-to-generator": "^7.27.1", + "@babel/plugin-transform-block-scoped-functions": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.27.1", + "@babel/plugin-transform-class-properties": "^7.27.1", + "@babel/plugin-transform-class-static-block": "^7.27.1", + "@babel/plugin-transform-classes": "^7.27.1", + "@babel/plugin-transform-computed-properties": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.27.1", + "@babel/plugin-transform-dotall-regex": "^7.27.1", + "@babel/plugin-transform-duplicate-keys": "^7.27.1", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-dynamic-import": "^7.27.1", + "@babel/plugin-transform-exponentiation-operator": "^7.27.1", + "@babel/plugin-transform-export-namespace-from": "^7.27.1", + "@babel/plugin-transform-for-of": "^7.27.1", + "@babel/plugin-transform-function-name": "^7.27.1", + "@babel/plugin-transform-json-strings": "^7.27.1", + "@babel/plugin-transform-literals": "^7.27.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.27.1", + "@babel/plugin-transform-member-expression-literals": "^7.27.1", + "@babel/plugin-transform-modules-amd": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-modules-systemjs": "^7.27.1", + "@babel/plugin-transform-modules-umd": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-new-target": "^7.27.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", + "@babel/plugin-transform-numeric-separator": "^7.27.1", + "@babel/plugin-transform-object-rest-spread": "^7.27.2", + "@babel/plugin-transform-object-super": "^7.27.1", + "@babel/plugin-transform-optional-catch-binding": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1", + "@babel/plugin-transform-parameters": "^7.27.1", + "@babel/plugin-transform-private-methods": "^7.27.1", + "@babel/plugin-transform-private-property-in-object": "^7.27.1", + "@babel/plugin-transform-property-literals": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.27.1", + "@babel/plugin-transform-regexp-modifiers": "^7.27.1", + "@babel/plugin-transform-reserved-words": "^7.27.1", + "@babel/plugin-transform-shorthand-properties": "^7.27.1", + "@babel/plugin-transform-spread": "^7.27.1", + "@babel/plugin-transform-sticky-regex": "^7.27.1", + "@babel/plugin-transform-template-literals": "^7.27.1", + "@babel/plugin-transform-typeof-symbol": "^7.27.1", + "@babel/plugin-transform-unicode-escapes": "^7.27.1", + "@babel/plugin-transform-unicode-property-regex": "^7.27.1", + "@babel/plugin-transform-unicode-regex": "^7.27.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", + "babel-plugin-polyfill-corejs3": "^0.11.0", "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.38.1", + "core-js-compat": "^3.40.0", "semver": "^6.3.1" }, "engines": { @@ -1839,17 +1839,17 @@ } }, "node_modules/@babel/preset-react": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.26.3.tgz", - "integrity": "sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.27.1.tgz", + "integrity": "sha512-oJHWh2gLhU9dW9HHr42q0cI0/iHHXTLGe39qvpAZZzagHy0MzYLCnCVV0symeRvzmjHyVU7mw2K06E6u/JwbhA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-transform-react-display-name": "^7.25.9", - "@babel/plugin-transform-react-jsx": "^7.25.9", - "@babel/plugin-transform-react-jsx-development": "^7.25.9", - "@babel/plugin-transform-react-pure-annotations": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-transform-react-display-name": "^7.27.1", + "@babel/plugin-transform-react-jsx": "^7.27.1", + "@babel/plugin-transform-react-jsx-development": "^7.27.1", + "@babel/plugin-transform-react-pure-annotations": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1859,16 +1859,16 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz", - "integrity": "sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz", + "integrity": "sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-syntax-jsx": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.25.9", - "@babel/plugin-transform-typescript": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-typescript": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1890,43 +1890,42 @@ } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.26.7.tgz", - "integrity": "sha512-55gRV8vGrCIYZnaQHQrD92Lo/hYE3Sj5tmbuf0hhHR7sj2CWhEhHU89hbq+UVDXvFG1zUVXJhUkEq1eAfqXtFw==", + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.27.6.tgz", + "integrity": "sha512-vDVrlmRAY8z9Ul/HxT+8ceAru95LQgkSKiXkSYZvqtbkPSfhZJgpRp45Cldbh1GJ1kxzQkI70AqyrTI58KpaWQ==", "license": "MIT", "dependencies": { - "core-js-pure": "^3.30.2", - "regenerator-runtime": "^0.14.0" + "core-js-pure": "^3.30.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", - "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.7.tgz", - "integrity": "sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA==", + "version": "7.27.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz", + "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.5", - "@babel/parser": "^7.26.7", - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.7", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.3", + "@babel/parser": "^7.27.4", + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.3", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1935,13 +1934,13 @@ } }, "node_modules/@babel/types": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.7.tgz", - "integrity": "sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==", + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz", + "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1958,9 +1957,9 @@ } }, "node_modules/@csstools/cascade-layer-name-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.4.tgz", - "integrity": "sha512-7DFHlPuIxviKYZrOiwVU/PiHLm3lLUR23OMuEEtfEOQTOp9hzQ2JjdY6X5H18RVuUPJqSCI+qNnD5iOLMVE0bA==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.5.tgz", + "integrity": "sha512-p1ko5eHgV+MgXFVa4STPKpvPxr6ReS8oS2jzTukjR74i5zJNyWO1ZM1m8YKBXnzDKWfBN1ztLYlHxbVemDD88A==", "funding": [ { "type": "github", @@ -1976,14 +1975,14 @@ "node": ">=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, "node_modules/@csstools/color-helpers": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.1.tgz", - "integrity": "sha512-MKtmkA0BX87PKaO1NFRTFH+UnkgnmySQOvNxJubsadusqPEC2aJ9MOQiMceZJJ6oitUl/i0L6u0M1IrmAOmgBA==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz", + "integrity": "sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==", "funding": [ { "type": "github", @@ -2000,9 +1999,9 @@ } }, "node_modules/@csstools/css-calc": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.1.tgz", - "integrity": "sha512-rL7kaUnTkL9K+Cvo2pnCieqNpTKgQzy5f+N+5Iuko9HAoasP+xgprVh7KN/MaJVvVL1l0EzQq2MoqBHKSrDrag==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", + "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", "funding": [ { "type": "github", @@ -2018,14 +2017,14 @@ "node": ">=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, "node_modules/@csstools/css-color-parser": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.7.tgz", - "integrity": "sha512-nkMp2mTICw32uE5NN+EsJ4f5N+IGFeCFu4bGpiKgb2Pq/7J/MpyLBeQ5ry4KKtRFZaYs6sTmcMYrSRIyj5DFKA==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.10.tgz", + "integrity": "sha512-TiJ5Ajr6WRd1r8HSiwJvZBiJOqtH86aHpUjq5aEKWHiII2Qfjqd/HCWKPOW8EP4vcspXbHnXrwIDlu5savQipg==", "funding": [ { "type": "github", @@ -2038,21 +2037,21 @@ ], "license": "MIT", "dependencies": { - "@csstools/color-helpers": "^5.0.1", - "@csstools/css-calc": "^2.1.1" + "@csstools/color-helpers": "^5.0.2", + "@csstools/css-calc": "^2.1.4" }, "engines": { "node": ">=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, "node_modules/@csstools/css-parser-algorithms": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz", - "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", "funding": [ { "type": "github", @@ -2068,13 +2067,13 @@ "node": ">=18" }, "peerDependencies": { - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-tokenizer": "^3.0.4" } }, "node_modules/@csstools/css-tokenizer": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz", - "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", "funding": [ { "type": "github", @@ -2091,9 +2090,9 @@ } }, "node_modules/@csstools/media-query-list-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.2.tgz", - "integrity": "sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz", + "integrity": "sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==", "funding": [ { "type": "github", @@ -2109,8 +2108,8 @@ "node": ">=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, "node_modules/@csstools/postcss-cascade-layers": { @@ -2162,9 +2161,9 @@ } }, "node_modules/@csstools/postcss-cascade-layers/node_modules/postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -2175,9 +2174,9 @@ } }, "node_modules/@csstools/postcss-color-function": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-4.0.7.tgz", - "integrity": "sha512-aDHYmhNIHR6iLw4ElWhf+tRqqaXwKnMl0YsQ/X105Zc4dQwe6yJpMrTN6BwOoESrkDjOYMOfORviSSLeDTJkdQ==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-4.0.10.tgz", + "integrity": "sha512-4dY0NBu7NVIpzxZRgh/Q/0GPSz/jLSw0i/u3LTUor0BkQcz/fNhN10mSWBDsL0p9nDb0Ky1PD6/dcGbhACuFTQ==", "funding": [ { "type": "github", @@ -2190,10 +2189,10 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-color-parser": "^3.0.7", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2204,9 +2203,9 @@ } }, "node_modules/@csstools/postcss-color-mix-function": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.7.tgz", - "integrity": "sha512-e68Nev4CxZYCLcrfWhHH4u/N1YocOfTmw67/kVX5Rb7rnguqqLyxPjhHWjSBX8o4bmyuukmNf3wrUSU3//kT7g==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.10.tgz", + "integrity": "sha512-P0lIbQW9I4ShE7uBgZRib/lMTf9XMjJkFl/d6w4EMNHu2qvQ6zljJGEcBkw/NsBtq/6q3WrmgxSS8kHtPMkK4Q==", "funding": [ { "type": "github", @@ -2219,10 +2218,39 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-color-parser": "^3.0.7", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-color-mix-variadic-function-arguments": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-variadic-function-arguments/-/postcss-color-mix-variadic-function-arguments-1.0.0.tgz", + "integrity": "sha512-Z5WhouTyD74dPFPrVE7KydgNS9VvnjB8qcdes9ARpCOItb4jTnm7cHp4FhxCRUoyhabD0WVv43wbkJ4p8hLAlQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2233,9 +2261,9 @@ } }, "node_modules/@csstools/postcss-content-alt-text": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.4.tgz", - "integrity": "sha512-YItlZUOuZJCBlRaCf8Aucc1lgN41qYGALMly0qQllrxYJhiyzlI6RxOTMUvtWk+KhS8GphMDsDhKQ7KTPfEMSw==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.6.tgz", + "integrity": "sha512-eRjLbOjblXq+byyaedQRSrAejKGNAFued+LcbzT+LCL78fabxHkxYjBbxkroONxHHYu2qxhFK2dBStTLPG3jpQ==", "funding": [ { "type": "github", @@ -2248,9 +2276,9 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2261,9 +2289,9 @@ } }, "node_modules/@csstools/postcss-exponential-functions": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.6.tgz", - "integrity": "sha512-IgJA5DQsQLu/upA3HcdvC6xEMR051ufebBTIXZ5E9/9iiaA7juXWz1ceYj814lnDYP/7eWjZnw0grRJlX4eI6g==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.9.tgz", + "integrity": "sha512-abg2W/PI3HXwS/CZshSa79kNWNZHdJPMBXeZNyPQFbbj8sKO3jXxOt/wF7juJVjyDTc6JrvaUZYFcSBZBhaxjw==", "funding": [ { "type": "github", @@ -2276,9 +2304,9 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-calc": "^2.1.1", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" }, "engines": { "node": ">=18" @@ -2314,9 +2342,9 @@ } }, "node_modules/@csstools/postcss-gamut-mapping": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.7.tgz", - "integrity": "sha512-gzFEZPoOkY0HqGdyeBXR3JP218Owr683u7KOZazTK7tQZBE8s2yhg06W1tshOqk7R7SWvw9gkw2TQogKpIW8Xw==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.10.tgz", + "integrity": "sha512-QDGqhJlvFnDlaPAfCYPsnwVA6ze+8hhrwevYWlnUeSjkkZfBpcCO42SaUD8jiLlq7niouyLgvup5lh+f1qessg==", "funding": [ { "type": "github", @@ -2329,9 +2357,9 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-color-parser": "^3.0.7", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" }, "engines": { "node": ">=18" @@ -2341,9 +2369,9 @@ } }, "node_modules/@csstools/postcss-gradients-interpolation-method": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.7.tgz", - "integrity": "sha512-WgEyBeg6glUeTdS2XT7qeTFBthTJuXlS9GFro/DVomj7W7WMTamAwpoP4oQCq/0Ki2gvfRYFi/uZtmRE14/DFA==", + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.10.tgz", + "integrity": "sha512-HHPauB2k7Oits02tKFUeVFEU2ox/H3OQVrP3fSOKDxvloOikSal+3dzlyTZmYsb9FlY9p5EUpBtz0//XBmy+aw==", "funding": [ { "type": "github", @@ -2356,10 +2384,10 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-color-parser": "^3.0.7", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2370,9 +2398,9 @@ } }, "node_modules/@csstools/postcss-hwb-function": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.7.tgz", - "integrity": "sha512-LKYqjO+wGwDCfNIEllessCBWfR4MS/sS1WXO+j00KKyOjm7jDW2L6jzUmqASEiv/kkJO39GcoIOvTTfB3yeBUA==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.10.tgz", + "integrity": "sha512-nOKKfp14SWcdEQ++S9/4TgRKchooLZL0TUFdun3nI4KPwCjETmhjta1QT4ICQcGVWQTvrsgMM/aLB5We+kMHhQ==", "funding": [ { "type": "github", @@ -2385,10 +2413,10 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-color-parser": "^3.0.7", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2399,9 +2427,9 @@ } }, "node_modules/@csstools/postcss-ic-unit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.0.tgz", - "integrity": "sha512-9QT5TDGgx7wD3EEMN3BSUG6ckb6Eh5gSPT5kZoVtUuAonfPmLDJyPhqR4ntPpMYhUKAMVKAg3I/AgzqHMSeLhA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.2.tgz", + "integrity": "sha512-lrK2jjyZwh7DbxaNnIUjkeDmU8Y6KyzRBk91ZkI5h8nb1ykEfZrtIVArdIjX4DHMIBGpdHrgP0n4qXDr7OHaKA==", "funding": [ { "type": "github", @@ -2414,7 +2442,7 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0", "postcss-value-parser": "^4.2.0" }, @@ -2426,9 +2454,9 @@ } }, "node_modules/@csstools/postcss-initial": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-initial/-/postcss-initial-2.0.0.tgz", - "integrity": "sha512-dv2lNUKR+JV+OOhZm9paWzYBXOCi+rJPqJ2cJuhh9xd8USVrd0cBEPczla81HNOyThMQWeCcdln3gZkQV2kYxA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-initial/-/postcss-initial-2.0.1.tgz", + "integrity": "sha512-L1wLVMSAZ4wovznquK0xmC7QSctzO4D0Is590bxpGqhqjboLXYA16dWZpfwImkdOgACdQ9PqXsuRroW6qPlEsg==", "funding": [ { "type": "github", @@ -2448,9 +2476,9 @@ } }, "node_modules/@csstools/postcss-is-pseudo-class": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.1.tgz", - "integrity": "sha512-JLp3POui4S1auhDR0n8wHd/zTOWmMsmK3nQd3hhL6FhWPaox5W7j1se6zXOG/aP07wV2ww0lxbKYGwbBszOtfQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.3.tgz", + "integrity": "sha512-jS/TY4SpG4gszAtIg7Qnf3AS2pjcUM5SzxpApOrlndMeGhIbaTzWBzzP/IApXoNWEW7OhcjkRT48jnAUIFXhAQ==", "funding": [ { "type": "github", @@ -2496,9 +2524,9 @@ } }, "node_modules/@csstools/postcss-is-pseudo-class/node_modules/postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -2509,9 +2537,9 @@ } }, "node_modules/@csstools/postcss-light-dark-function": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.7.tgz", - "integrity": "sha512-ZZ0rwlanYKOHekyIPaU+sVm3BEHCe+Ha0/px+bmHe62n0Uc1lL34vbwrLYn6ote8PHlsqzKeTQdIejQCJ05tfw==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.9.tgz", + "integrity": "sha512-1tCZH5bla0EAkFAI2r0H33CDnIBeLUaJh1p+hvvsylJ4svsv2wOmJjJn+OXwUZLXef37GYbRIVKX+X+g6m+3CQ==", "funding": [ { "type": "github", @@ -2524,9 +2552,9 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2628,9 +2656,9 @@ } }, "node_modules/@csstools/postcss-logical-viewport-units": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-3.0.3.tgz", - "integrity": "sha512-OC1IlG/yoGJdi0Y+7duz/kU/beCwO+Gua01sD6GtOtLi7ByQUpcIqs7UE/xuRPay4cHgOMatWdnDdsIDjnWpPw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-3.0.4.tgz", + "integrity": "sha512-q+eHV1haXA4w9xBwZLKjVKAWn3W2CMqmpNpZUk5kRprvSiBEGMgrNH3/sJZ8UA3JgyHaOt3jwT9uFa4wLX4EqQ==", "funding": [ { "type": "github", @@ -2643,7 +2671,7 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-tokenizer": "^3.0.3", + "@csstools/css-tokenizer": "^3.0.4", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2654,9 +2682,9 @@ } }, "node_modules/@csstools/postcss-media-minmax": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.6.tgz", - "integrity": "sha512-J1+4Fr2W3pLZsfxkFazK+9kr96LhEYqoeBszLmFjb6AjYs+g9oDAw3J5oQignLKk3rC9XHW+ebPTZ9FaW5u5pg==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.9.tgz", + "integrity": "sha512-af9Qw3uS3JhYLnCbqtZ9crTvvkR+0Se+bBqSr7ykAnl9yKhk6895z9rf+2F4dClIDJWxgn0iZZ1PSdkhrbs2ig==", "funding": [ { "type": "github", @@ -2669,10 +2697,10 @@ ], "license": "MIT", "dependencies": { - "@csstools/css-calc": "^2.1.1", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/media-query-list-parser": "^4.0.2" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/media-query-list-parser": "^4.0.3" }, "engines": { "node": ">=18" @@ -2682,9 +2710,9 @@ } }, "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-3.0.4.tgz", - "integrity": "sha512-AnGjVslHMm5xw9keusQYvjVWvuS7KWK+OJagaG0+m9QnIjZsrysD2kJP/tr/UJIyYtMCtu8OkUd+Rajb4DqtIQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-3.0.5.tgz", + "integrity": "sha512-zhAe31xaaXOY2Px8IYfoVTB3wglbJUVigGphFLj6exb7cjZRH9A6adyE22XfFK3P2PzwRk0VDeTJmaxpluyrDg==", "funding": [ { "type": "github", @@ -2697,9 +2725,9 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/media-query-list-parser": "^4.0.2" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/media-query-list-parser": "^4.0.3" }, "engines": { "node": ">=18" @@ -2760,9 +2788,9 @@ } }, "node_modules/@csstools/postcss-oklab-function": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.7.tgz", - "integrity": "sha512-I6WFQIbEKG2IO3vhaMGZDkucbCaUSXMxvHNzDdnfsTCF5tc0UlV3Oe2AhamatQoKFjBi75dSEMrgWq3+RegsOQ==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.10.tgz", + "integrity": "sha512-ZzZUTDd0fgNdhv8UUjGCtObPD8LYxMH+MJsW9xlZaWTV8Ppr4PtxlHYNMmF4vVWGl0T6f8tyWAKjoI6vePSgAg==", "funding": [ { "type": "github", @@ -2775,10 +2803,10 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-color-parser": "^3.0.7", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2789,9 +2817,9 @@ } }, "node_modules/@csstools/postcss-progressive-custom-properties": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.0.0.tgz", - "integrity": "sha512-XQPtROaQjomnvLUSy/bALTR5VCtTVUFwYs1SblvYgLSeTo2a/bMNwUwo2piXw5rTv/FEYiy5yPSXBqg9OKUx7Q==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.1.0.tgz", + "integrity": "sha512-YrkI9dx8U4R8Sz2EJaoeD9fI7s7kmeEBfmO+UURNeL6lQI7VxF6sBE+rSqdCBn4onwqmxFdBU3lTwyYb/lCmxA==", "funding": [ { "type": "github", @@ -2814,9 +2842,9 @@ } }, "node_modules/@csstools/postcss-random-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-random-function/-/postcss-random-function-1.0.2.tgz", - "integrity": "sha512-vBCT6JvgdEkvRc91NFoNrLjgGtkLWt47GKT6E2UDn3nd8ZkMBiziQ1Md1OiKoSsgzxsSnGKG3RVdhlbdZEkHjA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-random-function/-/postcss-random-function-2.0.1.tgz", + "integrity": "sha512-q+FQaNiRBhnoSNo+GzqGOIBKoHQ43lYz0ICrV+UudfWnEF6ksS6DsBIJSISKQT2Bvu3g4k6r7t0zYrk5pDlo8w==", "funding": [ { "type": "github", @@ -2829,9 +2857,9 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-calc": "^2.1.1", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" }, "engines": { "node": ">=18" @@ -2841,9 +2869,9 @@ } }, "node_modules/@csstools/postcss-relative-color-syntax": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.7.tgz", - "integrity": "sha512-apbT31vsJVd18MabfPOnE977xgct5B1I+Jpf+Munw3n6kKb1MMuUmGGH+PT9Hm/fFs6fe61Q/EWnkrb4bNoNQw==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.10.tgz", + "integrity": "sha512-8+0kQbQGg9yYG8hv0dtEpOMLwB9M+P7PhacgIzVzJpixxV4Eq9AUQtQw8adMmAJU1RBBmIlpmtmm3XTRd/T00g==", "funding": [ { "type": "github", @@ -2856,10 +2884,10 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-color-parser": "^3.0.7", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2895,9 +2923,9 @@ } }, "node_modules/@csstools/postcss-scope-pseudo-class/node_modules/postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -2908,9 +2936,9 @@ } }, "node_modules/@csstools/postcss-sign-functions": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.1.tgz", - "integrity": "sha512-MslYkZCeMQDxetNkfmmQYgKCy4c+w9pPDfgOBCJOo/RI1RveEUdZQYtOfrC6cIZB7sD7/PHr2VGOcMXlZawrnA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.4.tgz", + "integrity": "sha512-P97h1XqRPcfcJndFdG95Gv/6ZzxUBBISem0IDqPZ7WMvc/wlO+yU0c5D/OCpZ5TJoTt63Ok3knGk64N+o6L2Pg==", "funding": [ { "type": "github", @@ -2923,9 +2951,9 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-calc": "^2.1.1", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" }, "engines": { "node": ">=18" @@ -2935,9 +2963,9 @@ } }, "node_modules/@csstools/postcss-stepped-value-functions": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.6.tgz", - "integrity": "sha512-/dwlO9w8vfKgiADxpxUbZOWlL5zKoRIsCymYoh1IPuBsXODKanKnfuZRr32DEqT0//3Av1VjfNZU9yhxtEfIeA==", + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.9.tgz", + "integrity": "sha512-h9btycWrsex4dNLeQfyU3y3w40LMQooJWFMm/SK9lrKguHDcFl4VMkncKKoXi2z5rM9YGWbUQABI8BT2UydIcA==", "funding": [ { "type": "github", @@ -2950,9 +2978,9 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-calc": "^2.1.1", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" }, "engines": { "node": ">=18" @@ -2962,9 +2990,9 @@ } }, "node_modules/@csstools/postcss-text-decoration-shorthand": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.1.tgz", - "integrity": "sha512-xPZIikbx6jyzWvhms27uugIc0I4ykH4keRvoa3rxX5K7lEhkbd54rjj/dv60qOCTisoS+3bmwJTeyV1VNBrXaw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.2.tgz", + "integrity": "sha512-8XvCRrFNseBSAGxeaVTaNijAu+FzUvjwFXtcrynmazGb/9WUdsPCpBX+mHEHShVRq47Gy4peYAoxYs8ltUnmzA==", "funding": [ { "type": "github", @@ -2977,7 +3005,7 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/color-helpers": "^5.0.1", + "@csstools/color-helpers": "^5.0.2", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -2988,9 +3016,9 @@ } }, "node_modules/@csstools/postcss-trigonometric-functions": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.6.tgz", - "integrity": "sha512-c4Y1D2Why/PeccaSouXnTt6WcNHJkoJRidV2VW9s5gJ97cNxnLgQ4Qj8qOqkIR9VmTQKJyNcbF4hy79ZQnWD7A==", + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.9.tgz", + "integrity": "sha512-Hnh5zJUdpNrJqK9v1/E3BbrQhaDTj5YiX7P61TOvUhoDHnUmsNNxcDAgkQ32RrcWx9GVUvfUNPcUkn8R3vIX6A==", "funding": [ { "type": "github", @@ -3003,9 +3031,9 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-calc": "^2.1.1", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" }, "engines": { "node": ">=18" @@ -3068,26 +3096,26 @@ } }, "node_modules/@docsearch/css": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.8.3.tgz", - "integrity": "sha512-1nELpMV40JDLJ6rpVVFX48R1jsBFIQ6RnEQDsLFGmzOjPWTOMlZqUcXcvRx8VmYV/TqnS1l784Ofz+ZEb+wEOQ==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.9.0.tgz", + "integrity": "sha512-cQbnVbq0rrBwNAKegIac/t6a8nWoUAn8frnkLFW6YARaRmAQr5/Eoe6Ln2fqkUCZ40KpdrKbpSAmgrkviOxuWA==", "license": "MIT" }, "node_modules/@docsearch/react": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.8.3.tgz", - "integrity": "sha512-6UNrg88K7lJWmuS6zFPL/xgL+n326qXqZ7Ybyy4E8P/6Rcblk3GE8RXxeol4Pd5pFpKMhOhBhzABKKwHtbJCIg==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.9.0.tgz", + "integrity": "sha512-mb5FOZYZIkRQ6s/NWnM98k879vu5pscWqTLubLFBO87igYYT4VzVazh4h5o/zCvTIZgEt3PvsCOMOswOUo9yHQ==", "license": "MIT", "dependencies": { "@algolia/autocomplete-core": "1.17.9", "@algolia/autocomplete-preset-algolia": "1.17.9", - "@docsearch/css": "3.8.3", + "@docsearch/css": "3.9.0", "algoliasearch": "^5.14.2" }, "peerDependencies": { - "@types/react": ">= 16.8.0 < 19.0.0", - "react": ">= 16.8.0 < 19.0.0", - "react-dom": ">= 16.8.0 < 19.0.0", + "@types/react": ">= 16.8.0 < 20.0.0", + "react": ">= 16.8.0 < 20.0.0", + "react-dom": ">= 16.8.0 < 20.0.0", "search-insights": ">= 1 < 3" }, "peerDependenciesMeta": { @@ -3106,9 +3134,9 @@ } }, "node_modules/@docusaurus/babel": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.7.0.tgz", - "integrity": "sha512-0H5uoJLm14S/oKV3Keihxvh8RV+vrid+6Gv+2qhuzbqHanawga8tYnsdpjEyt36ucJjqlby2/Md2ObWjA02UXQ==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.8.1.tgz", + "integrity": "sha512-3brkJrml8vUbn9aeoZUlJfsI/GqyFcDgQJwQkmBtclJgWDEQBKKeagZfOgx0WfUQhagL1sQLNW0iBdxnI863Uw==", "license": "MIT", "dependencies": { "@babel/core": "^7.25.9", @@ -3121,8 +3149,8 @@ "@babel/runtime": "^7.25.9", "@babel/runtime-corejs3": "^7.25.9", "@babel/traverse": "^7.25.9", - "@docusaurus/logger": "3.7.0", - "@docusaurus/utils": "3.7.0", + "@docusaurus/logger": "3.8.1", + "@docusaurus/utils": "3.8.1", "babel-plugin-dynamic-import-node": "^2.3.3", "fs-extra": "^11.1.1", "tslib": "^2.6.0" @@ -3132,31 +3160,30 @@ } }, "node_modules/@docusaurus/bundler": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.7.0.tgz", - "integrity": "sha512-CUUT9VlSGukrCU5ctZucykvgCISivct+cby28wJwCC/fkQFgAHRp/GKv2tx38ZmXb7nacrKzFTcp++f9txUYGg==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.8.1.tgz", + "integrity": "sha512-/z4V0FRoQ0GuSLToNjOSGsk6m2lQUG4FRn8goOVoZSRsTrU8YR2aJacX5K3RG18EaX9b+52pN4m1sL3MQZVsQA==", "license": "MIT", "dependencies": { "@babel/core": "^7.25.9", - "@docusaurus/babel": "3.7.0", - "@docusaurus/cssnano-preset": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", + "@docusaurus/babel": "3.8.1", + "@docusaurus/cssnano-preset": "3.8.1", + "@docusaurus/logger": "3.8.1", + "@docusaurus/types": "3.8.1", + "@docusaurus/utils": "3.8.1", "babel-loader": "^9.2.1", - "clean-css": "^5.3.2", + "clean-css": "^5.3.3", "copy-webpack-plugin": "^11.0.0", - "css-loader": "^6.8.1", + "css-loader": "^6.11.0", "css-minimizer-webpack-plugin": "^5.0.1", "cssnano": "^6.1.2", "file-loader": "^6.2.0", "html-minifier-terser": "^7.2.0", - "mini-css-extract-plugin": "^2.9.1", + "mini-css-extract-plugin": "^2.9.2", "null-loader": "^4.0.1", - "postcss": "^8.4.26", - "postcss-loader": "^7.3.3", - "postcss-preset-env": "^10.1.0", - "react-dev-utils": "^12.0.1", + "postcss": "^8.5.4", + "postcss-loader": "^7.3.4", + "postcss-preset-env": "^10.2.1", "terser-webpack-plugin": "^5.3.9", "tslib": "^2.6.0", "url-loader": "^4.1.1", @@ -3176,9 +3203,9 @@ } }, "node_modules/@docusaurus/bundler/node_modules/@docusaurus/types": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.7.0.tgz", - "integrity": "sha512-kOmZg5RRqJfH31m+6ZpnwVbkqMJrPOG5t0IOl4i/+3ruXyNfWzZ0lVtVrD0u4ONc/0NOsS9sWYaxxWNkH1LdLQ==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.8.1.tgz", + "integrity": "sha512-ZPdW5AB+pBjiVrcLuw3dOS6BFlrG0XkS2lDGsj8TizcnREQg3J8cjsgfDviszOk4CweNfwo1AEELJkYaMUuOPg==", "license": "MIT", "dependencies": { "@mdx-js/mdx": "^3.0.0", @@ -3197,18 +3224,18 @@ } }, "node_modules/@docusaurus/core": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.7.0.tgz", - "integrity": "sha512-b0fUmaL+JbzDIQaamzpAFpTviiaU4cX3Qz8cuo14+HGBCwa0evEK0UYCBFY3n4cLzL8Op1BueeroUD2LYAIHbQ==", - "license": "MIT", - "dependencies": { - "@docusaurus/babel": "3.7.0", - "@docusaurus/bundler": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.8.1.tgz", + "integrity": "sha512-ENB01IyQSqI2FLtOzqSI3qxG2B/jP4gQPahl2C3XReiLebcVh5B5cB9KYFvdoOqOWPyr5gXK4sjgTKv7peXCrA==", + "license": "MIT", + "dependencies": { + "@docusaurus/babel": "3.8.1", + "@docusaurus/bundler": "3.8.1", + "@docusaurus/logger": "3.8.1", + "@docusaurus/mdx-loader": "3.8.1", + "@docusaurus/utils": "3.8.1", + "@docusaurus/utils-common": "3.8.1", + "@docusaurus/utils-validation": "3.8.1", "boxen": "^6.2.1", "chalk": "^4.1.2", "chokidar": "^3.5.3", @@ -3216,19 +3243,19 @@ "combine-promises": "^1.1.0", "commander": "^5.1.0", "core-js": "^3.31.1", - "del": "^6.1.1", "detect-port": "^1.5.1", "escape-html": "^1.0.3", "eta": "^2.2.0", "eval": "^0.1.8", + "execa": "5.1.1", "fs-extra": "^11.1.1", "html-tags": "^3.3.1", "html-webpack-plugin": "^5.6.0", "leven": "^3.1.0", "lodash": "^4.17.21", + "open": "^8.4.0", "p-map": "^4.0.0", "prompts": "^2.4.2", - "react-dev-utils": "^12.0.1", "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", "react-loadable": "npm:@docusaurus/react-loadable@6.0.0", "react-loadable-ssr-addon-v5-slorber": "^1.0.1", @@ -3237,7 +3264,7 @@ "react-router-dom": "^5.3.4", "semver": "^7.5.4", "serve-handler": "^6.1.6", - "shelljs": "^0.8.5", + "tinypool": "^1.0.2", "tslib": "^2.6.0", "update-notifier": "^6.0.2", "webpack": "^5.95.0", @@ -3272,13 +3299,13 @@ } }, "node_modules/@docusaurus/cssnano-preset": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.7.0.tgz", - "integrity": "sha512-X9GYgruZBSOozg4w4dzv9uOz8oK/EpPVQXkp0MM6Tsgp/nRIU9hJzJ0Pxg1aRa3xCeEQTOimZHcocQFlLwYajQ==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.8.1.tgz", + "integrity": "sha512-G7WyR2N6SpyUotqhGznERBK+x84uyhfMQM2MmDLs88bw4Flom6TY46HzkRkSEzaP9j80MbTN8naiL1fR17WQug==", "license": "MIT", "dependencies": { "cssnano-preset-advanced": "^6.1.2", - "postcss": "^8.4.38", + "postcss": "^8.5.4", "postcss-sort-media-queries": "^5.2.0", "tslib": "^2.6.0" }, @@ -3287,9 +3314,9 @@ } }, "node_modules/@docusaurus/logger": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.7.0.tgz", - "integrity": "sha512-z7g62X7bYxCYmeNNuO9jmzxLQG95q9QxINCwpboVcNff3SJiHJbGrarxxOVMVmAh1MsrSfxWkVGv4P41ktnFsA==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.8.1.tgz", + "integrity": "sha512-2wjeGDhKcExEmjX8k1N/MRDiPKXGF2Pg+df/bDDPnnJWHXnVEZxXj80d6jcxp1Gpnksl0hF8t/ZQw9elqj2+ww==", "license": "MIT", "dependencies": { "chalk": "^4.1.2", @@ -3300,21 +3327,21 @@ } }, "node_modules/@docusaurus/mdx-loader": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.7.0.tgz", - "integrity": "sha512-OFBG6oMjZzc78/U3WNPSHs2W9ZJ723ewAcvVJaqS0VgyeUfmzUV8f1sv+iUHA0DtwiR5T5FjOxj6nzEE8LY6VA==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.8.1.tgz", + "integrity": "sha512-DZRhagSFRcEq1cUtBMo4TKxSNo/W6/s44yhr8X+eoXqCLycFQUylebOMPseHi5tc4fkGJqwqpWJLz6JStU9L4w==", "license": "MIT", "dependencies": { - "@docusaurus/logger": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "@docusaurus/logger": "3.8.1", + "@docusaurus/utils": "3.8.1", + "@docusaurus/utils-validation": "3.8.1", "@mdx-js/mdx": "^3.0.0", "@slorber/remark-comment": "^1.0.0", "escape-html": "^1.0.3", "estree-util-value-to-estree": "^3.0.1", "file-loader": "^6.2.0", "fs-extra": "^11.1.1", - "image-size": "^1.0.2", + "image-size": "^2.0.2", "mdast-util-mdx": "^3.0.0", "mdast-util-to-string": "^4.0.0", "rehype-raw": "^7.0.0", @@ -3339,17 +3366,17 @@ } }, "node_modules/@docusaurus/module-type-aliases": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.7.0.tgz", - "integrity": "sha512-g7WdPqDNaqA60CmBrr0cORTrsOit77hbsTj7xE2l71YhBn79sxdm7WMK7wfhcaafkbpIh7jv5ef5TOpf1Xv9Lg==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.8.1.tgz", + "integrity": "sha512-6xhvAJiXzsaq3JdosS7wbRt/PwEPWHr9eM4YNYqVlbgG1hSK3uQDXTVvQktasp3VO6BmfYWPozueLWuj4gB+vg==", "license": "MIT", "dependencies": { - "@docusaurus/types": "3.7.0", + "@docusaurus/types": "3.8.1", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", "@types/react-router-dom": "*", - "react-helmet-async": "npm:@slorber/react-helmet-async@*", + "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", "react-loadable": "npm:@docusaurus/react-loadable@6.0.0" }, "peerDependencies": { @@ -3358,9 +3385,9 @@ } }, "node_modules/@docusaurus/module-type-aliases/node_modules/@docusaurus/types": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.7.0.tgz", - "integrity": "sha512-kOmZg5RRqJfH31m+6ZpnwVbkqMJrPOG5t0IOl4i/+3ruXyNfWzZ0lVtVrD0u4ONc/0NOsS9sWYaxxWNkH1LdLQ==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.8.1.tgz", + "integrity": "sha512-ZPdW5AB+pBjiVrcLuw3dOS6BFlrG0XkS2lDGsj8TizcnREQg3J8cjsgfDviszOk4CweNfwo1AEELJkYaMUuOPg==", "license": "MIT", "dependencies": { "@mdx-js/mdx": "^3.0.0", @@ -3379,24 +3406,24 @@ } }, "node_modules/@docusaurus/plugin-content-blog": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.7.0.tgz", - "integrity": "sha512-EFLgEz6tGHYWdPU0rK8tSscZwx+AsyuBW/r+tNig2kbccHYGUJmZtYN38GjAa3Fda4NU+6wqUO5kTXQSRBQD3g==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/theme-common": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.8.1.tgz", + "integrity": "sha512-vNTpMmlvNP9n3hGEcgPaXyvTljanAKIUkuG9URQ1DeuDup0OR7Ltvoc8yrmH+iMZJbcQGhUJF+WjHLwuk8HSdw==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.8.1", + "@docusaurus/logger": "3.8.1", + "@docusaurus/mdx-loader": "3.8.1", + "@docusaurus/theme-common": "3.8.1", + "@docusaurus/types": "3.8.1", + "@docusaurus/utils": "3.8.1", + "@docusaurus/utils-common": "3.8.1", + "@docusaurus/utils-validation": "3.8.1", "cheerio": "1.0.0-rc.12", "feed": "^4.2.2", "fs-extra": "^11.1.1", "lodash": "^4.17.21", - "reading-time": "^1.5.0", + "schema-dts": "^1.1.2", "srcset": "^4.0.0", "tslib": "^2.6.0", "unist-util-visit": "^5.0.0", @@ -3413,9 +3440,9 @@ } }, "node_modules/@docusaurus/plugin-content-blog/node_modules/@docusaurus/types": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.7.0.tgz", - "integrity": "sha512-kOmZg5RRqJfH31m+6ZpnwVbkqMJrPOG5t0IOl4i/+3ruXyNfWzZ0lVtVrD0u4ONc/0NOsS9sWYaxxWNkH1LdLQ==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.8.1.tgz", + "integrity": "sha512-ZPdW5AB+pBjiVrcLuw3dOS6BFlrG0XkS2lDGsj8TizcnREQg3J8cjsgfDviszOk4CweNfwo1AEELJkYaMUuOPg==", "license": "MIT", "dependencies": { "@mdx-js/mdx": "^3.0.0", @@ -3434,25 +3461,26 @@ } }, "node_modules/@docusaurus/plugin-content-docs": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.7.0.tgz", - "integrity": "sha512-GXg5V7kC9FZE4FkUZA8oo/NrlRb06UwuICzI6tcbzj0+TVgjq/mpUXXzSgKzMS82YByi4dY2Q808njcBCyy6tQ==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/module-type-aliases": "3.7.0", - "@docusaurus/theme-common": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.8.1.tgz", + "integrity": "sha512-oByRkSZzeGNQByCMaX+kif5Nl2vmtj2IHQI2fWjCfCootsdKZDPFLonhIp5s3IGJO7PLUfe0POyw0Xh/RrGXJA==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.8.1", + "@docusaurus/logger": "3.8.1", + "@docusaurus/mdx-loader": "3.8.1", + "@docusaurus/module-type-aliases": "3.8.1", + "@docusaurus/theme-common": "3.8.1", + "@docusaurus/types": "3.8.1", + "@docusaurus/utils": "3.8.1", + "@docusaurus/utils-common": "3.8.1", + "@docusaurus/utils-validation": "3.8.1", "@types/react-router-config": "^5.0.7", "combine-promises": "^1.1.0", "fs-extra": "^11.1.1", "js-yaml": "^4.1.0", "lodash": "^4.17.21", + "schema-dts": "^1.1.2", "tslib": "^2.6.0", "utility-types": "^3.10.0", "webpack": "^5.88.1" @@ -3466,9 +3494,9 @@ } }, "node_modules/@docusaurus/plugin-content-docs/node_modules/@docusaurus/types": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.7.0.tgz", - "integrity": "sha512-kOmZg5RRqJfH31m+6ZpnwVbkqMJrPOG5t0IOl4i/+3ruXyNfWzZ0lVtVrD0u4ONc/0NOsS9sWYaxxWNkH1LdLQ==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.8.1.tgz", + "integrity": "sha512-ZPdW5AB+pBjiVrcLuw3dOS6BFlrG0XkS2lDGsj8TizcnREQg3J8cjsgfDviszOk4CweNfwo1AEELJkYaMUuOPg==", "license": "MIT", "dependencies": { "@mdx-js/mdx": "^3.0.0", @@ -3487,16 +3515,16 @@ } }, "node_modules/@docusaurus/plugin-content-pages": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.7.0.tgz", - "integrity": "sha512-YJSU3tjIJf032/Aeao8SZjFOrXJbz/FACMveSMjLyMH4itQyZ2XgUIzt4y+1ISvvk5zrW4DABVT2awTCqBkx0Q==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.8.1.tgz", + "integrity": "sha512-a+V6MS2cIu37E/m7nDJn3dcxpvXb6TvgdNI22vJX8iUTp8eoMoPa0VArEbWvCxMY/xdC26WzNv4wZ6y0iIni/w==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "@docusaurus/core": "3.8.1", + "@docusaurus/mdx-loader": "3.8.1", + "@docusaurus/types": "3.8.1", + "@docusaurus/utils": "3.8.1", + "@docusaurus/utils-validation": "3.8.1", "fs-extra": "^11.1.1", "tslib": "^2.6.0", "webpack": "^5.88.1" @@ -3510,9 +3538,46 @@ } }, "node_modules/@docusaurus/plugin-content-pages/node_modules/@docusaurus/types": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.7.0.tgz", - "integrity": "sha512-kOmZg5RRqJfH31m+6ZpnwVbkqMJrPOG5t0IOl4i/+3ruXyNfWzZ0lVtVrD0u4ONc/0NOsS9sWYaxxWNkH1LdLQ==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.8.1.tgz", + "integrity": "sha512-ZPdW5AB+pBjiVrcLuw3dOS6BFlrG0XkS2lDGsj8TizcnREQg3J8cjsgfDviszOk4CweNfwo1AEELJkYaMUuOPg==", + "license": "MIT", + "dependencies": { + "@mdx-js/mdx": "^3.0.0", + "@types/history": "^4.7.11", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.9.2", + "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.95.0", + "webpack-merge": "^5.9.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/plugin-css-cascade-layers": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-css-cascade-layers/-/plugin-css-cascade-layers-3.8.1.tgz", + "integrity": "sha512-VQ47xRxfNKjHS5ItzaVXpxeTm7/wJLFMOPo1BkmoMG4Cuz4nuI+Hs62+RMk1OqVog68Swz66xVPK8g9XTrBKRw==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.8.1", + "@docusaurus/types": "3.8.1", + "@docusaurus/utils": "3.8.1", + "@docusaurus/utils-validation": "3.8.1", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=18.0" + } + }, + "node_modules/@docusaurus/plugin-css-cascade-layers/node_modules/@docusaurus/types": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.8.1.tgz", + "integrity": "sha512-ZPdW5AB+pBjiVrcLuw3dOS6BFlrG0XkS2lDGsj8TizcnREQg3J8cjsgfDviszOk4CweNfwo1AEELJkYaMUuOPg==", "license": "MIT", "dependencies": { "@mdx-js/mdx": "^3.0.0", @@ -3531,16 +3596,16 @@ } }, "node_modules/@docusaurus/plugin-debug": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.7.0.tgz", - "integrity": "sha512-Qgg+IjG/z4svtbCNyTocjIwvNTNEwgRjSXXSJkKVG0oWoH0eX/HAPiu+TS1HBwRPQV+tTYPWLrUypYFepfujZA==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.8.1.tgz", + "integrity": "sha512-nT3lN7TV5bi5hKMB7FK8gCffFTBSsBsAfV84/v293qAmnHOyg1nr9okEw8AiwcO3bl9vije5nsUvP0aRl2lpaw==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", + "@docusaurus/core": "3.8.1", + "@docusaurus/types": "3.8.1", + "@docusaurus/utils": "3.8.1", "fs-extra": "^11.1.1", - "react-json-view-lite": "^1.2.0", + "react-json-view-lite": "^2.3.0", "tslib": "^2.6.0" }, "engines": { @@ -3552,9 +3617,9 @@ } }, "node_modules/@docusaurus/plugin-debug/node_modules/@docusaurus/types": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.7.0.tgz", - "integrity": "sha512-kOmZg5RRqJfH31m+6ZpnwVbkqMJrPOG5t0IOl4i/+3ruXyNfWzZ0lVtVrD0u4ONc/0NOsS9sWYaxxWNkH1LdLQ==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.8.1.tgz", + "integrity": "sha512-ZPdW5AB+pBjiVrcLuw3dOS6BFlrG0XkS2lDGsj8TizcnREQg3J8cjsgfDviszOk4CweNfwo1AEELJkYaMUuOPg==", "license": "MIT", "dependencies": { "@mdx-js/mdx": "^3.0.0", @@ -3573,14 +3638,14 @@ } }, "node_modules/@docusaurus/plugin-google-analytics": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.7.0.tgz", - "integrity": "sha512-otIqiRV/jka6Snjf+AqB360XCeSv7lQC+DKYW+EUZf6XbuE8utz5PeUQ8VuOcD8Bk5zvT1MC4JKcd5zPfDuMWA==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.8.1.tgz", + "integrity": "sha512-Hrb/PurOJsmwHAsfMDH6oVpahkEGsx7F8CWMjyP/dw1qjqmdS9rcV1nYCGlM8nOtD3Wk/eaThzUB5TSZsGz+7Q==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "@docusaurus/core": "3.8.1", + "@docusaurus/types": "3.8.1", + "@docusaurus/utils-validation": "3.8.1", "tslib": "^2.6.0" }, "engines": { @@ -3592,9 +3657,9 @@ } }, "node_modules/@docusaurus/plugin-google-analytics/node_modules/@docusaurus/types": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.7.0.tgz", - "integrity": "sha512-kOmZg5RRqJfH31m+6ZpnwVbkqMJrPOG5t0IOl4i/+3ruXyNfWzZ0lVtVrD0u4ONc/0NOsS9sWYaxxWNkH1LdLQ==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.8.1.tgz", + "integrity": "sha512-ZPdW5AB+pBjiVrcLuw3dOS6BFlrG0XkS2lDGsj8TizcnREQg3J8cjsgfDviszOk4CweNfwo1AEELJkYaMUuOPg==", "license": "MIT", "dependencies": { "@mdx-js/mdx": "^3.0.0", @@ -3613,14 +3678,14 @@ } }, "node_modules/@docusaurus/plugin-google-gtag": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.7.0.tgz", - "integrity": "sha512-M3vrMct1tY65ModbyeDaMoA+fNJTSPe5qmchhAbtqhDD/iALri0g9LrEpIOwNaoLmm6lO88sfBUADQrSRSGSWA==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.8.1.tgz", + "integrity": "sha512-tKE8j1cEZCh8KZa4aa80zpSTxsC2/ZYqjx6AAfd8uA8VHZVw79+7OTEP2PoWi0uL5/1Is0LF5Vwxd+1fz5HlKg==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "@docusaurus/core": "3.8.1", + "@docusaurus/types": "3.8.1", + "@docusaurus/utils-validation": "3.8.1", "@types/gtag.js": "^0.0.12", "tslib": "^2.6.0" }, @@ -3633,9 +3698,9 @@ } }, "node_modules/@docusaurus/plugin-google-gtag/node_modules/@docusaurus/types": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.7.0.tgz", - "integrity": "sha512-kOmZg5RRqJfH31m+6ZpnwVbkqMJrPOG5t0IOl4i/+3ruXyNfWzZ0lVtVrD0u4ONc/0NOsS9sWYaxxWNkH1LdLQ==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.8.1.tgz", + "integrity": "sha512-ZPdW5AB+pBjiVrcLuw3dOS6BFlrG0XkS2lDGsj8TizcnREQg3J8cjsgfDviszOk4CweNfwo1AEELJkYaMUuOPg==", "license": "MIT", "dependencies": { "@mdx-js/mdx": "^3.0.0", @@ -3654,14 +3719,14 @@ } }, "node_modules/@docusaurus/plugin-google-tag-manager": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.7.0.tgz", - "integrity": "sha512-X8U78nb8eiMiPNg3jb9zDIVuuo/rE1LjGDGu+5m5CX4UBZzjMy+klOY2fNya6x8ACyE/L3K2erO1ErheP55W/w==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.8.1.tgz", + "integrity": "sha512-iqe3XKITBquZq+6UAXdb1vI0fPY5iIOitVjPQ581R1ZKpHr0qe+V6gVOrrcOHixPDD/BUKdYwkxFjpNiEN+vBw==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "@docusaurus/core": "3.8.1", + "@docusaurus/types": "3.8.1", + "@docusaurus/utils-validation": "3.8.1", "tslib": "^2.6.0" }, "engines": { @@ -3673,9 +3738,9 @@ } }, "node_modules/@docusaurus/plugin-google-tag-manager/node_modules/@docusaurus/types": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.7.0.tgz", - "integrity": "sha512-kOmZg5RRqJfH31m+6ZpnwVbkqMJrPOG5t0IOl4i/+3ruXyNfWzZ0lVtVrD0u4ONc/0NOsS9sWYaxxWNkH1LdLQ==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.8.1.tgz", + "integrity": "sha512-ZPdW5AB+pBjiVrcLuw3dOS6BFlrG0XkS2lDGsj8TizcnREQg3J8cjsgfDviszOk4CweNfwo1AEELJkYaMUuOPg==", "license": "MIT", "dependencies": { "@mdx-js/mdx": "^3.0.0", @@ -3694,17 +3759,17 @@ } }, "node_modules/@docusaurus/plugin-sitemap": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.7.0.tgz", - "integrity": "sha512-bTRT9YLZ/8I/wYWKMQke18+PF9MV8Qub34Sku6aw/vlZ/U+kuEuRpQ8bTcNOjaTSfYsWkK4tTwDMHK2p5S86cA==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.8.1.tgz", + "integrity": "sha512-+9YV/7VLbGTq8qNkjiugIelmfUEVkTyLe6X8bWq7K5qPvGXAjno27QAfFq63mYfFFbJc7z+pudL63acprbqGzw==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "@docusaurus/core": "3.8.1", + "@docusaurus/logger": "3.8.1", + "@docusaurus/types": "3.8.1", + "@docusaurus/utils": "3.8.1", + "@docusaurus/utils-common": "3.8.1", + "@docusaurus/utils-validation": "3.8.1", "fs-extra": "^11.1.1", "sitemap": "^7.1.1", "tslib": "^2.6.0" @@ -3718,9 +3783,9 @@ } }, "node_modules/@docusaurus/plugin-sitemap/node_modules/@docusaurus/types": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.7.0.tgz", - "integrity": "sha512-kOmZg5RRqJfH31m+6ZpnwVbkqMJrPOG5t0IOl4i/+3ruXyNfWzZ0lVtVrD0u4ONc/0NOsS9sWYaxxWNkH1LdLQ==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.8.1.tgz", + "integrity": "sha512-ZPdW5AB+pBjiVrcLuw3dOS6BFlrG0XkS2lDGsj8TizcnREQg3J8cjsgfDviszOk4CweNfwo1AEELJkYaMUuOPg==", "license": "MIT", "dependencies": { "@mdx-js/mdx": "^3.0.0", @@ -3739,15 +3804,15 @@ } }, "node_modules/@docusaurus/plugin-svgr": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-svgr/-/plugin-svgr-3.7.0.tgz", - "integrity": "sha512-HByXIZTbc4GV5VAUkZ2DXtXv1Qdlnpk3IpuImwSnEzCDBkUMYcec5282hPjn6skZqB25M1TYCmWS91UbhBGxQg==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-svgr/-/plugin-svgr-3.8.1.tgz", + "integrity": "sha512-rW0LWMDsdlsgowVwqiMb/7tANDodpy1wWPwCcamvhY7OECReN3feoFwLjd/U4tKjNY3encj0AJSTxJA+Fpe+Gw==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "@docusaurus/core": "3.8.1", + "@docusaurus/types": "3.8.1", + "@docusaurus/utils": "3.8.1", + "@docusaurus/utils-validation": "3.8.1", "@svgr/core": "8.1.0", "@svgr/webpack": "^8.1.0", "tslib": "^2.6.0", @@ -3762,9 +3827,9 @@ } }, "node_modules/@docusaurus/plugin-svgr/node_modules/@docusaurus/types": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.7.0.tgz", - "integrity": "sha512-kOmZg5RRqJfH31m+6ZpnwVbkqMJrPOG5t0IOl4i/+3ruXyNfWzZ0lVtVrD0u4ONc/0NOsS9sWYaxxWNkH1LdLQ==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.8.1.tgz", + "integrity": "sha512-ZPdW5AB+pBjiVrcLuw3dOS6BFlrG0XkS2lDGsj8TizcnREQg3J8cjsgfDviszOk4CweNfwo1AEELJkYaMUuOPg==", "license": "MIT", "dependencies": { "@mdx-js/mdx": "^3.0.0", @@ -3783,25 +3848,26 @@ } }, "node_modules/@docusaurus/preset-classic": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.7.0.tgz", - "integrity": "sha512-nPHj8AxDLAaQXs+O6+BwILFuhiWbjfQWrdw2tifOClQoNfuXDjfjogee6zfx6NGHWqshR23LrcN115DmkHC91Q==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/plugin-content-blog": "3.7.0", - "@docusaurus/plugin-content-docs": "3.7.0", - "@docusaurus/plugin-content-pages": "3.7.0", - "@docusaurus/plugin-debug": "3.7.0", - "@docusaurus/plugin-google-analytics": "3.7.0", - "@docusaurus/plugin-google-gtag": "3.7.0", - "@docusaurus/plugin-google-tag-manager": "3.7.0", - "@docusaurus/plugin-sitemap": "3.7.0", - "@docusaurus/plugin-svgr": "3.7.0", - "@docusaurus/theme-classic": "3.7.0", - "@docusaurus/theme-common": "3.7.0", - "@docusaurus/theme-search-algolia": "3.7.0", - "@docusaurus/types": "3.7.0" + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.8.1.tgz", + "integrity": "sha512-yJSjYNHXD8POMGc2mKQuj3ApPrN+eG0rO1UPgSx7jySpYU+n4WjBikbrA2ue5ad9A7aouEtMWUoiSRXTH/g7KQ==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.8.1", + "@docusaurus/plugin-content-blog": "3.8.1", + "@docusaurus/plugin-content-docs": "3.8.1", + "@docusaurus/plugin-content-pages": "3.8.1", + "@docusaurus/plugin-css-cascade-layers": "3.8.1", + "@docusaurus/plugin-debug": "3.8.1", + "@docusaurus/plugin-google-analytics": "3.8.1", + "@docusaurus/plugin-google-gtag": "3.8.1", + "@docusaurus/plugin-google-tag-manager": "3.8.1", + "@docusaurus/plugin-sitemap": "3.8.1", + "@docusaurus/plugin-svgr": "3.8.1", + "@docusaurus/theme-classic": "3.8.1", + "@docusaurus/theme-common": "3.8.1", + "@docusaurus/theme-search-algolia": "3.8.1", + "@docusaurus/types": "3.8.1" }, "engines": { "node": ">=18.0" @@ -3812,9 +3878,9 @@ } }, "node_modules/@docusaurus/preset-classic/node_modules/@docusaurus/types": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.7.0.tgz", - "integrity": "sha512-kOmZg5RRqJfH31m+6ZpnwVbkqMJrPOG5t0IOl4i/+3ruXyNfWzZ0lVtVrD0u4ONc/0NOsS9sWYaxxWNkH1LdLQ==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.8.1.tgz", + "integrity": "sha512-ZPdW5AB+pBjiVrcLuw3dOS6BFlrG0XkS2lDGsj8TizcnREQg3J8cjsgfDviszOk4CweNfwo1AEELJkYaMUuOPg==", "license": "MIT", "dependencies": { "@mdx-js/mdx": "^3.0.0", @@ -3833,31 +3899,31 @@ } }, "node_modules/@docusaurus/theme-classic": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.7.0.tgz", - "integrity": "sha512-MnLxG39WcvLCl4eUzHr0gNcpHQfWoGqzADCly54aqCofQX6UozOS9Th4RK3ARbM9m7zIRv3qbhggI53dQtx/hQ==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/module-type-aliases": "3.7.0", - "@docusaurus/plugin-content-blog": "3.7.0", - "@docusaurus/plugin-content-docs": "3.7.0", - "@docusaurus/plugin-content-pages": "3.7.0", - "@docusaurus/theme-common": "3.7.0", - "@docusaurus/theme-translations": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.8.1.tgz", + "integrity": "sha512-bqDUCNqXeYypMCsE1VcTXSI1QuO4KXfx8Cvl6rYfY0bhhqN6d2WZlRkyLg/p6pm+DzvanqHOyYlqdPyP0iz+iw==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.8.1", + "@docusaurus/logger": "3.8.1", + "@docusaurus/mdx-loader": "3.8.1", + "@docusaurus/module-type-aliases": "3.8.1", + "@docusaurus/plugin-content-blog": "3.8.1", + "@docusaurus/plugin-content-docs": "3.8.1", + "@docusaurus/plugin-content-pages": "3.8.1", + "@docusaurus/theme-common": "3.8.1", + "@docusaurus/theme-translations": "3.8.1", + "@docusaurus/types": "3.8.1", + "@docusaurus/utils": "3.8.1", + "@docusaurus/utils-common": "3.8.1", + "@docusaurus/utils-validation": "3.8.1", "@mdx-js/react": "^3.0.0", "clsx": "^2.0.0", "copy-text-to-clipboard": "^3.2.0", "infima": "0.2.0-alpha.45", "lodash": "^4.17.21", "nprogress": "^0.2.0", - "postcss": "^8.4.26", + "postcss": "^8.5.4", "prism-react-renderer": "^2.3.0", "prismjs": "^1.29.0", "react-router-dom": "^5.3.4", @@ -3874,9 +3940,9 @@ } }, "node_modules/@docusaurus/theme-classic/node_modules/@docusaurus/types": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.7.0.tgz", - "integrity": "sha512-kOmZg5RRqJfH31m+6ZpnwVbkqMJrPOG5t0IOl4i/+3ruXyNfWzZ0lVtVrD0u4ONc/0NOsS9sWYaxxWNkH1LdLQ==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.8.1.tgz", + "integrity": "sha512-ZPdW5AB+pBjiVrcLuw3dOS6BFlrG0XkS2lDGsj8TizcnREQg3J8cjsgfDviszOk4CweNfwo1AEELJkYaMUuOPg==", "license": "MIT", "dependencies": { "@mdx-js/mdx": "^3.0.0", @@ -3895,15 +3961,15 @@ } }, "node_modules/@docusaurus/theme-common": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.7.0.tgz", - "integrity": "sha512-8eJ5X0y+gWDsURZnBfH0WabdNm8XMCXHv8ENy/3Z/oQKwaB/EHt5lP9VsTDTf36lKEp0V6DjzjFyFIB+CetL0A==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.8.1.tgz", + "integrity": "sha512-UswMOyTnPEVRvN5Qzbo+l8k4xrd5fTFu2VPPfD6FcW/6qUtVLmJTQCktbAL3KJ0BVXGm5aJXz/ZrzqFuZERGPw==", "license": "MIT", "dependencies": { - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/module-type-aliases": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", + "@docusaurus/mdx-loader": "3.8.1", + "@docusaurus/module-type-aliases": "3.8.1", + "@docusaurus/utils": "3.8.1", + "@docusaurus/utils-common": "3.8.1", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", @@ -3923,19 +3989,19 @@ } }, "node_modules/@docusaurus/theme-search-algolia": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.7.0.tgz", - "integrity": "sha512-Al/j5OdzwRU1m3falm+sYy9AaB93S1XF1Lgk9Yc6amp80dNxJVplQdQTR4cYdzkGtuQqbzUA8+kaoYYO0RbK6g==", - "license": "MIT", - "dependencies": { - "@docsearch/react": "^3.8.1", - "@docusaurus/core": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/plugin-content-docs": "3.7.0", - "@docusaurus/theme-common": "3.7.0", - "@docusaurus/theme-translations": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.8.1.tgz", + "integrity": "sha512-NBFH5rZVQRAQM087aYSRKQ9yGEK9eHd+xOxQjqNpxMiV85OhJDD4ZGz6YJIod26Fbooy54UWVdzNU0TFeUUUzQ==", + "license": "MIT", + "dependencies": { + "@docsearch/react": "^3.9.0", + "@docusaurus/core": "3.8.1", + "@docusaurus/logger": "3.8.1", + "@docusaurus/plugin-content-docs": "3.8.1", + "@docusaurus/theme-common": "3.8.1", + "@docusaurus/theme-translations": "3.8.1", + "@docusaurus/utils": "3.8.1", + "@docusaurus/utils-validation": "3.8.1", "algoliasearch": "^5.17.1", "algoliasearch-helper": "^3.22.6", "clsx": "^2.0.0", @@ -3954,9 +4020,9 @@ } }, "node_modules/@docusaurus/theme-translations": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.7.0.tgz", - "integrity": "sha512-Ewq3bEraWDmienM6eaNK7fx+/lHMtGDHQyd1O+4+3EsDxxUmrzPkV7Ct3nBWTuE0MsoZr3yNwQVKjllzCMuU3g==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.8.1.tgz", + "integrity": "sha512-OTp6eebuMcf2rJt4bqnvuwmm3NVXfzfYejL+u/Y1qwKhZPrjPoKWfk1CbOP5xH5ZOPkiAsx4dHdQBRJszK3z2g==", "license": "MIT", "dependencies": { "fs-extra": "^11.1.1", @@ -3967,9 +4033,9 @@ } }, "node_modules/@docusaurus/tsconfig": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/tsconfig/-/tsconfig-3.7.0.tgz", - "integrity": "sha512-vRsyj3yUZCjscgfgcFYjIsTcAru/4h4YH2/XAE8Rs7wWdnng98PgWKvP5ovVc4rmRpRg2WChVW0uOy2xHDvDBQ==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/tsconfig/-/tsconfig-3.8.1.tgz", + "integrity": "sha512-XBWCcqhRHhkhfolnSolNL+N7gj3HVE3CoZVqnVjfsMzCoOsuQw2iCLxVVHtO+rePUUfouVZHURDgmqIySsF66A==", "dev": true, "license": "MIT" }, @@ -3996,15 +4062,16 @@ } }, "node_modules/@docusaurus/utils": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.7.0.tgz", - "integrity": "sha512-e7zcB6TPnVzyUaHMJyLSArKa2AG3h9+4CfvKXKKWNx6hRs+p0a+u7HHTJBgo6KW2m+vqDnuIHK4X+bhmoghAFA==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.8.1.tgz", + "integrity": "sha512-P1ml0nvOmEFdmu0smSXOqTS1sxU5tqvnc0dA4MTKV39kye+bhQnjkIKEE18fNOvxjyB86k8esoCIFM3x4RykOQ==", "license": "MIT", "dependencies": { - "@docusaurus/logger": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils-common": "3.7.0", + "@docusaurus/logger": "3.8.1", + "@docusaurus/types": "3.8.1", + "@docusaurus/utils-common": "3.8.1", "escape-string-regexp": "^4.0.0", + "execa": "5.1.1", "file-loader": "^6.2.0", "fs-extra": "^11.1.1", "github-slugger": "^1.5.0", @@ -4014,9 +4081,9 @@ "js-yaml": "^4.1.0", "lodash": "^4.17.21", "micromatch": "^4.0.5", + "p-queue": "^6.6.2", "prompts": "^2.4.2", "resolve-pathname": "^3.0.0", - "shelljs": "^0.8.5", "tslib": "^2.6.0", "url-loader": "^4.1.1", "utility-types": "^3.10.0", @@ -4027,12 +4094,12 @@ } }, "node_modules/@docusaurus/utils-common": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.7.0.tgz", - "integrity": "sha512-IZeyIfCfXy0Mevj6bWNg7DG7B8G+S6o6JVpddikZtWyxJguiQ7JYr0SIZ0qWd8pGNuMyVwriWmbWqMnK7Y5PwA==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.8.1.tgz", + "integrity": "sha512-zTZiDlvpvoJIrQEEd71c154DkcriBecm4z94OzEE9kz7ikS3J+iSlABhFXM45mZ0eN5pVqqr7cs60+ZlYLewtg==", "license": "MIT", "dependencies": { - "@docusaurus/types": "3.7.0", + "@docusaurus/types": "3.8.1", "tslib": "^2.6.0" }, "engines": { @@ -4040,9 +4107,9 @@ } }, "node_modules/@docusaurus/utils-common/node_modules/@docusaurus/types": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.7.0.tgz", - "integrity": "sha512-kOmZg5RRqJfH31m+6ZpnwVbkqMJrPOG5t0IOl4i/+3ruXyNfWzZ0lVtVrD0u4ONc/0NOsS9sWYaxxWNkH1LdLQ==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.8.1.tgz", + "integrity": "sha512-ZPdW5AB+pBjiVrcLuw3dOS6BFlrG0XkS2lDGsj8TizcnREQg3J8cjsgfDviszOk4CweNfwo1AEELJkYaMUuOPg==", "license": "MIT", "dependencies": { "@mdx-js/mdx": "^3.0.0", @@ -4061,14 +4128,14 @@ } }, "node_modules/@docusaurus/utils-validation": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.7.0.tgz", - "integrity": "sha512-w8eiKk8mRdN+bNfeZqC4nyFoxNyI1/VExMKAzD9tqpJfLLbsa46Wfn5wcKH761g9WkKh36RtFV49iL9lh1DYBA==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.8.1.tgz", + "integrity": "sha512-gs5bXIccxzEbyVecvxg6upTwaUbfa0KMmTj7HhHzc016AGyxH2o73k1/aOD0IFrdCsfJNt37MqNI47s2MgRZMA==", "license": "MIT", "dependencies": { - "@docusaurus/logger": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", + "@docusaurus/logger": "3.8.1", + "@docusaurus/utils": "3.8.1", + "@docusaurus/utils-common": "3.8.1", "fs-extra": "^11.2.0", "joi": "^17.9.2", "js-yaml": "^4.1.0", @@ -4080,9 +4147,9 @@ } }, "node_modules/@docusaurus/utils/node_modules/@docusaurus/types": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.7.0.tgz", - "integrity": "sha512-kOmZg5RRqJfH31m+6ZpnwVbkqMJrPOG5t0IOl4i/+3ruXyNfWzZ0lVtVrD0u4ONc/0NOsS9sWYaxxWNkH1LdLQ==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.8.1.tgz", + "integrity": "sha512-ZPdW5AB+pBjiVrcLuw3dOS6BFlrG0XkS2lDGsj8TizcnREQg3J8cjsgfDviszOk4CweNfwo1AEELJkYaMUuOPg==", "license": "MIT", "dependencies": { "@mdx-js/mdx": "^3.0.0", @@ -4921,12 +4988,6 @@ "@types/node": "*" } }, - "node_modules/@types/parse-json": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", - "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", - "license": "MIT" - }, "node_modules/@types/prismjs": { "version": "1.26.5", "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.5.tgz", @@ -5385,33 +5446,33 @@ } }, "node_modules/algoliasearch": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.20.0.tgz", - "integrity": "sha512-groO71Fvi5SWpxjI9Ia+chy0QBwT61mg6yxJV27f5YFf+Mw+STT75K6SHySpP8Co5LsCrtsbCH5dJZSRtkSKaQ==", - "license": "MIT", - "dependencies": { - "@algolia/client-abtesting": "5.20.0", - "@algolia/client-analytics": "5.20.0", - "@algolia/client-common": "5.20.0", - "@algolia/client-insights": "5.20.0", - "@algolia/client-personalization": "5.20.0", - "@algolia/client-query-suggestions": "5.20.0", - "@algolia/client-search": "5.20.0", - "@algolia/ingestion": "1.20.0", - "@algolia/monitoring": "1.20.0", - "@algolia/recommend": "5.20.0", - "@algolia/requester-browser-xhr": "5.20.0", - "@algolia/requester-fetch": "5.20.0", - "@algolia/requester-node-http": "5.20.0" + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.28.0.tgz", + "integrity": "sha512-FCRzwW+/TJFQIfo+DxObo2gfn4+0aGa7sVQgCN1/ojKqrhb/7Scnuyi4FBS0zvNCgOZBMms+Ci2hyQwsgAqIzg==", + "license": "MIT", + "dependencies": { + "@algolia/client-abtesting": "5.28.0", + "@algolia/client-analytics": "5.28.0", + "@algolia/client-common": "5.28.0", + "@algolia/client-insights": "5.28.0", + "@algolia/client-personalization": "5.28.0", + "@algolia/client-query-suggestions": "5.28.0", + "@algolia/client-search": "5.28.0", + "@algolia/ingestion": "1.28.0", + "@algolia/monitoring": "1.28.0", + "@algolia/recommend": "5.28.0", + "@algolia/requester-browser-xhr": "5.28.0", + "@algolia/requester-fetch": "5.28.0", + "@algolia/requester-node-http": "5.28.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/algoliasearch-helper": { - "version": "3.23.1", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.23.1.tgz", - "integrity": "sha512-j/dF2ZELJBm4SJTK5ECsMuCDJpBB8ITiWKRjd3S15bK2bqrXKLWqDiA5A96WhVvCpZ2NmgNlUYmFbKOfcqivbg==", + "version": "3.26.0", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.26.0.tgz", + "integrity": "sha512-Rv2x3GXleQ3ygwhkhJubhhYGsICmShLAiqtUuJTUkr9uOCOXyF2E71LVT4XDnVffbknv8XgScP4U0Oxtgm+hIw==", "license": "MIT", "dependencies": { "@algolia/events": "^4.0.1" @@ -5561,19 +5622,10 @@ "astring": "bin/astring" } }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "license": "ISC", - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/autoprefixer": { - "version": "10.4.20", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", - "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "version": "10.4.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", "funding": [ { "type": "opencollective", @@ -5590,11 +5642,11 @@ ], "license": "MIT", "dependencies": { - "browserslist": "^4.23.3", - "caniuse-lite": "^1.0.30001646", + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", - "picocolors": "^1.0.1", + "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "bin": { @@ -5634,13 +5686,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.12", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz", - "integrity": "sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==", + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz", + "integrity": "sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==", "license": "MIT", "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.3", + "@babel/helper-define-polyfill-provider": "^0.6.4", "semver": "^6.3.1" }, "peerDependencies": { @@ -5657,25 +5709,25 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", - "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", + "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2", - "core-js-compat": "^3.38.0" + "@babel/helper-define-polyfill-provider": "^0.6.3", + "core-js-compat": "^3.40.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz", - "integrity": "sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz", + "integrity": "sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==", "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.3" + "@babel/helper-define-polyfill-provider": "^0.6.4" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -5833,9 +5885,9 @@ } }, "node_modules/browserslist": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.0.tgz", + "integrity": "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==", "funding": [ { "type": "opencollective", @@ -5852,10 +5904,10 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", + "caniuse-lite": "^1.0.30001718", + "electron-to-chromium": "^1.5.160", "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" + "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" @@ -5925,9 +5977,9 @@ } }, "node_modules/call-bind-apply-helpers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", - "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -5938,13 +5990,13 @@ } }, "node_modules/call-bound": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", - "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "get-intrinsic": "^1.2.6" + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" }, "engines": { "node": ">= 0.4" @@ -5997,9 +6049,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001695", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001695.tgz", - "integrity": "sha512-vHyLade6wTgI2u1ec3WQBxv+2BrTERV28UXQu9LO6lZ9pYeMk34vjXFLOxo1A4UBA8XTL4njRQZdno/yYaSmWw==", + "version": "1.0.30001723", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001723.tgz", + "integrity": "sha512-1R/elMjtehrFejxwmexeXAtae5UO9iSyFn6G/I806CYC/BLyyBk1EPhrKBkWhy6wM6Xnm47dSJQec+tLJ39WHw==", "funding": [ { "type": "opencollective", @@ -6459,9 +6511,9 @@ } }, "node_modules/consola": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.0.tgz", - "integrity": "sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", "license": "MIT", "engines": { "node": "^14.18.0 || >=16.10.0" @@ -6597,12 +6649,12 @@ } }, "node_modules/core-js-compat": { - "version": "3.40.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.40.0.tgz", - "integrity": "sha512-0XEDpr5y5mijvw8Lbc6E5AkjrHfp7eEoPlu36SWeAbcL8fn1G1ANe8DBlo2XoNN89oVpxWwOjYIPVzR4ZvsKCQ==", + "version": "3.43.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.43.0.tgz", + "integrity": "sha512-2GML2ZsCc5LR7hZYz4AXmjQw8zuy2T//2QntwdnpuYI7jteT6GVYJL7F6C2C57R7gSYrcqVW3lAALefdbhBLDA==", "license": "MIT", "dependencies": { - "browserslist": "^4.24.3" + "browserslist": "^4.25.0" }, "funding": { "type": "opencollective", @@ -6610,9 +6662,9 @@ } }, "node_modules/core-js-pure": { - "version": "3.40.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.40.0.tgz", - "integrity": "sha512-AtDzVIgRrmRKQai62yuSIN5vNiQjcJakJb4fbhVw3ehxx7Lohphvw9SGNWKhLFqSxC4ilD0g/L1huAYFQU3Q6A==", + "version": "3.43.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.43.0.tgz", + "integrity": "sha512-i/AgxU2+A+BbJdMxh3v7/vxi2SbFqxiFmg6VsDwYB4jkucrd1BZNA9a9gphC0fYMG5IBSgQcbQnk865VCLe7xA==", "hasInstallScript": true, "license": "MIT", "funding": { @@ -6719,9 +6771,9 @@ } }, "node_modules/css-blank-pseudo/node_modules/postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -6793,9 +6845,9 @@ } }, "node_modules/css-has-pseudo/node_modules/postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -6948,9 +7000,9 @@ } }, "node_modules/cssdb": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.2.3.tgz", - "integrity": "sha512-9BDG5XmJrJQQnJ51VFxXCAtpZ5ebDlAREmO8sxMOVU0aSxN/gocbctjIG5LMh3WBUq+xTlb/jw2LoljBEqraTA==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.3.0.tgz", + "integrity": "sha512-c7bmItIg38DgGjSwDPZOYF/2o0QU/sSgkWOMyl8votOfgFuyiFKWPesmCGEsrGLxEA9uL540cp8LdaGEjUGsZQ==", "funding": [ { "type": "opencollective", @@ -7256,28 +7308,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", - "license": "MIT", - "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -7329,38 +7359,6 @@ "node": ">= 4.0.0" } }, - "node_modules/detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "license": "MIT", - "dependencies": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "bin": { - "detect": "bin/detect-port", - "detect-port": "bin/detect-port" - }, - "engines": { - "node": ">= 4.2.1" - } - }, - "node_modules/detect-port-alt/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/detect-port-alt/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, "node_modules/devlop": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", @@ -7529,9 +7527,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.88", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.88.tgz", - "integrity": "sha512-K3C2qf1o+bGzbilTDCTBhTQcMS9KW60yTAaTeeXsfvQuTDDwlokLam/AdqlqcSy9u4UainDgsHV23ksXAOgamw==", + "version": "1.5.170", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.170.tgz", + "integrity": "sha512-GP+M7aeluQo9uAyiTCxgIj/j+PrWhMlY7LFVj8prlsPljd0Fdg9AprlfUi+OCSFWy9Y5/2D/Jrj9HS8Z4rpKWA==", "license": "ISC" }, "node_modules/emoji-regex": { @@ -7840,9 +7838,9 @@ } }, "node_modules/estree-util-value-to-estree": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.2.1.tgz", - "integrity": "sha512-Vt2UOjyPbNQQgT5eJh+K5aATti0OjCIAGc9SgMdOFYbohuifsWclR74l0iZTJwePMgWYdX1hlVS+dedH9XV8kw==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.4.0.tgz", + "integrity": "sha512-Zlp+gxis+gCfK12d3Srl2PdX2ybsEA8ZYy6vQGVQTNNYLEGRQQ56XB64bjemN8kxIKXP1nC9ip4Z+ILy9LGzvQ==", "license": "MIT", "dependencies": { "@types/estree": "^1.0.0" @@ -8067,16 +8065,16 @@ "license": "MIT" }, "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "micromatch": "^4.0.8" }, "engines": { "node": ">=8.6.0" @@ -8095,9 +8093,9 @@ "license": "BSD-3-Clause" }, "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", "license": "ISC", "dependencies": { "reusify": "^1.0.4" @@ -8233,15 +8231,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/filesize": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", - "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", - "license": "BSD-3-Clause", - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -8348,134 +8337,6 @@ } } }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", - "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=10", - "yarn": ">=1.0.0" - }, - "peerDependencies": { - "eslint": ">= 6", - "typescript": ">= 2.7", - "vue-template-compiler": "*", - "webpack": ">= 4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - }, - "vue-template-compiler": { - "optional": true - } - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "license": "MIT", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "license": "MIT" - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/form-data-encoder": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", @@ -8583,17 +8444,17 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", - "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.1", + "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", + "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", - "get-proto": "^1.0.0", + "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", @@ -8706,44 +8567,6 @@ "node": ">=10" } }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "license": "MIT", - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "license": "MIT", - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -8944,16 +8767,16 @@ } }, "node_modules/hast-util-from-parse5": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.2.tgz", - "integrity": "sha512-SfMzfdAi/zAoZ1KkFEyyeXBn7u/ShQrfd675ZEE9M3qj+PMFX05xubzRyF76CCSJu8au9jgVxDV1+okFvgZU4A==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", + "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "devlop": "^1.0.0", "hastscript": "^9.0.0", - "property-information": "^6.0.0", + "property-information": "^7.0.0", "vfile": "^6.0.0", "vfile-location": "^5.0.0", "web-namespaces": "^2.0.0" @@ -8963,6 +8786,16 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/hast-util-from-parse5/node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/hast-util-parse-selector": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", @@ -9104,15 +8937,15 @@ } }, "node_modules/hastscript": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.0.tgz", - "integrity": "sha512-jzaLBGavEDKHrc5EfFImKN7nZKKBdSLIdGvCwDZ9TfzbF2ffXiov8CKE445L2Z1Ek2t/m4SKQ2j6Ipv7NyUolw==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz", + "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-parse-selector": "^4.0.0", - "property-information": "^6.0.0", + "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0" }, "funding": { @@ -9120,6 +8953,16 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/hastscript/node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -9495,13 +9338,10 @@ } }, "node_modules/image-size": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.2.0.tgz", - "integrity": "sha512-4S8fwbO6w3GeCVN6OPtA9I5IGKkcDMPcKndtUlpJuCwu7JLjtj7JZpwqLuyY2nrmQT3AWsCJLSKPsc2mPBSl3w==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-2.0.2.tgz", + "integrity": "sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==", "license": "MIT", - "dependencies": { - "queue": "6.0.2" - }, "bin": { "image-size": "bin/image-size.js" }, @@ -9509,20 +9349,10 @@ "node": ">=16.x" } }, - "node_modules/immer": { - "version": "9.0.21", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", - "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "license": "MIT", "dependencies": { "parent-module": "^1.0.0", @@ -9600,15 +9430,6 @@ "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==", "license": "MIT" }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, "node_modules/invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -9682,9 +9503,9 @@ } }, "node_modules/is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "license": "MIT", "dependencies": { "hasown": "^2.0.2" @@ -9816,15 +9637,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", @@ -9867,15 +9679,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -10421,9 +10224,9 @@ } }, "node_modules/mdast-util-gfm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz", - "integrity": "sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", "license": "MIT", "dependencies": { "mdast-util-from-markdown": "^2.0.0", @@ -10493,9 +10296,9 @@ "license": "MIT" }, "node_modules/mdast-util-gfm-footnote": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz", - "integrity": "sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -12692,9 +12495,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", - "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "funding": [ { "type": "github", @@ -13029,6 +12832,15 @@ "node": ">=12.20" } }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/p-limit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", @@ -13074,6 +12886,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/p-retry": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", @@ -13087,13 +12915,16 @@ "node": ">=8" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", "license": "MIT", + "dependencies": { + "p-finally": "^1.0.0" + }, "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/package-json": { @@ -13187,12 +13018,12 @@ "license": "ISC" }, "node_modules/parse5": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz", - "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", "license": "MIT", "dependencies": { - "entities": "^4.5.0" + "entities": "^6.0.0" }, "funding": { "url": "https://github.com/inikulin/parse5?sponsor=1" @@ -13211,6 +13042,18 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, + "node_modules/parse5/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -13320,83 +13163,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "license": "MIT", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "license": "MIT", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "license": "MIT", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "license": "MIT", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/postcss": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz", - "integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==", + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "funding": [ { "type": "opencollective", @@ -13413,7 +13183,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.8", + "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -13447,9 +13217,9 @@ } }, "node_modules/postcss-attribute-case-insensitive/node_modules/postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -13491,9 +13261,9 @@ } }, "node_modules/postcss-color-functional-notation": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.7.tgz", - "integrity": "sha512-EZvAHsvyASX63vXnyXOIynkxhaHRSsdb7z6yiXKIovGXAolW4cMZ3qoh7k3VdTsLBS6VGdksGfIo3r6+waLoOw==", + "version": "7.0.10", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.10.tgz", + "integrity": "sha512-k9qX+aXHBiLTRrWoCJuUFI6F1iF6QJQUXNVWJVSbqZgj57jDhBlOvD8gNUGl35tgqDivbGLhZeW3Ongz4feuKA==", "funding": [ { "type": "github", @@ -13506,10 +13276,10 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-color-parser": "^3.0.7", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -13606,9 +13376,9 @@ } }, "node_modules/postcss-custom-media": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-11.0.5.tgz", - "integrity": "sha512-SQHhayVNgDvSAdX9NQ/ygcDQGEY+aSF4b/96z7QUX6mqL5yl/JgG/DywcF6fW9XbnCRE+aVYk+9/nqGuzOPWeQ==", + "version": "11.0.6", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-11.0.6.tgz", + "integrity": "sha512-C4lD4b7mUIw+RZhtY7qUbf4eADmb7Ey8BFA2px9jUbwg7pjTZDl4KY4bvlUV+/vXQvzQRfiGEVJyAbtOsCMInw==", "funding": [ { "type": "github", @@ -13621,10 +13391,10 @@ ], "license": "MIT", "dependencies": { - "@csstools/cascade-layer-name-parser": "^2.0.4", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/media-query-list-parser": "^4.0.2" + "@csstools/cascade-layer-name-parser": "^2.0.5", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/media-query-list-parser": "^4.0.3" }, "engines": { "node": ">=18" @@ -13634,9 +13404,9 @@ } }, "node_modules/postcss-custom-properties": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-14.0.4.tgz", - "integrity": "sha512-QnW8FCCK6q+4ierwjnmXF9Y9KF8q0JkbgVfvQEMa93x1GT8FvOiUevWCN2YLaOWyByeDX8S6VFbZEeWoAoXs2A==", + "version": "14.0.6", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-14.0.6.tgz", + "integrity": "sha512-fTYSp3xuk4BUeVhxCSJdIPhDLpJfNakZKoiTDx7yRGCdlZrSJR7mWKVOBS4sBF+5poPQFMj2YdXx1VHItBGihQ==", "funding": [ { "type": "github", @@ -13649,9 +13419,9 @@ ], "license": "MIT", "dependencies": { - "@csstools/cascade-layer-name-parser": "^2.0.4", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", + "@csstools/cascade-layer-name-parser": "^2.0.5", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", "@csstools/utilities": "^2.0.0", "postcss-value-parser": "^4.2.0" }, @@ -13663,9 +13433,9 @@ } }, "node_modules/postcss-custom-selectors": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-8.0.4.tgz", - "integrity": "sha512-ASOXqNvDCE0dAJ/5qixxPeL1aOVGHGW2JwSy7HyjWNbnWTQCl+fDc968HY1jCmZI0+BaYT5CxsOiUhavpG/7eg==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-8.0.5.tgz", + "integrity": "sha512-9PGmckHQswiB2usSO6XMSswO2yFWVoCAuih1yl9FVcwkscLjRKjwsjM3t+NIWpSU2Jx3eOiK2+t4vVTQaoCHHg==", "funding": [ { "type": "github", @@ -13678,9 +13448,9 @@ ], "license": "MIT", "dependencies": { - "@csstools/cascade-layer-name-parser": "^2.0.4", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", + "@csstools/cascade-layer-name-parser": "^2.0.5", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", "postcss-selector-parser": "^7.0.0" }, "engines": { @@ -13691,9 +13461,9 @@ } }, "node_modules/postcss-custom-selectors/node_modules/postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -13729,9 +13499,9 @@ } }, "node_modules/postcss-dir-pseudo-class/node_modules/postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -13805,9 +13575,9 @@ } }, "node_modules/postcss-double-position-gradients": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.0.tgz", - "integrity": "sha512-JkIGah3RVbdSEIrcobqj4Gzq0h53GG4uqDPsho88SgY84WnpkTpI0k50MFK/sX7XqVisZ6OqUfFnoUO6m1WWdg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.2.tgz", + "integrity": "sha512-7qTqnL7nfLRyJK/AHSVrrXOuvDDzettC+wGoienURV8v2svNbu6zJC52ruZtHaO6mfcagFmuTGFdzRsJKB3k5Q==", "funding": [ { "type": "github", @@ -13820,7 +13590,7 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0", "postcss-value-parser": "^4.2.0" }, @@ -13857,9 +13627,9 @@ } }, "node_modules/postcss-focus-visible/node_modules/postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -13895,9 +13665,9 @@ } }, "node_modules/postcss-focus-within/node_modules/postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -13965,9 +13735,9 @@ } }, "node_modules/postcss-lab-function": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-7.0.7.tgz", - "integrity": "sha512-+ONj2bpOQfsCKZE2T9VGMyVVdGcGUpr7u3SVfvkJlvhTRmDCfY25k4Jc8fubB9DclAPR4+w8uVtDZmdRgdAHig==", + "version": "7.0.10", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-7.0.10.tgz", + "integrity": "sha512-tqs6TCEv9tC1Riq6fOzHuHcZyhg4k3gIAMB8GGY/zA1ssGdm6puHMVE7t75aOSoFg7UD2wyrFFhbldiCMyyFTQ==", "funding": [ { "type": "github", @@ -13980,10 +13750,10 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-color-parser": "^3.0.7", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -14016,9 +13786,9 @@ } }, "node_modules/postcss-logical": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-8.0.0.tgz", - "integrity": "sha512-HpIdsdieClTjXLOyYdUPAX/XQASNIwdKt5hoZW08ZOAiI+tbV0ta1oclkpVkW5ANU+xJvk3KkA0FejkjGLXUkg==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-8.1.0.tgz", + "integrity": "sha512-pL1hXFQ2fEXNKiNiAgtfA005T9FBxky5zkX6s4GZM2D8RkVgRqz3f4g1JUoq925zXv495qk8UNldDwh8uGEDoA==", "funding": [ { "type": "github", @@ -14184,9 +13954,9 @@ } }, "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -14212,9 +13982,9 @@ } }, "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -14240,9 +14010,9 @@ } }, "node_modules/postcss-nesting": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.1.tgz", - "integrity": "sha512-VbqqHkOBOt4Uu3G8Dm8n6lU5+9cJFxiuty9+4rcoyRPO9zZS1JIs6td49VIoix3qYqELHlJIn46Oih9SAKo+yQ==", + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.2.tgz", + "integrity": "sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ==", "funding": [ { "type": "github", @@ -14255,7 +14025,7 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/selector-resolve-nested": "^3.0.0", + "@csstools/selector-resolve-nested": "^3.1.0", "@csstools/selector-specificity": "^5.0.0", "postcss-selector-parser": "^7.0.0" }, @@ -14267,9 +14037,9 @@ } }, "node_modules/postcss-nesting/node_modules/@csstools/selector-resolve-nested": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.0.0.tgz", - "integrity": "sha512-ZoK24Yku6VJU1gS79a5PFmC8yn3wIapiKmPgun0hZgEI5AOqgH2kiPRsPz1qkGv4HL+wuDLH83yQyk6inMYrJQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.1.0.tgz", + "integrity": "sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g==", "funding": [ { "type": "github", @@ -14311,9 +14081,9 @@ } }, "node_modules/postcss-nesting/node_modules/postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -14554,9 +14324,9 @@ } }, "node_modules/postcss-preset-env": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.1.3.tgz", - "integrity": "sha512-9qzVhcMFU/MnwYHyYpJz4JhGku/4+xEiPTmhn0hj3IxnUYlEF9vbh7OC1KoLAnenS6Fgg43TKNp9xcuMeAi4Zw==", + "version": "10.2.3", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.2.3.tgz", + "integrity": "sha512-zlQN1yYmA7lFeM1wzQI14z97mKoM8qGng+198w1+h6sCud/XxOjcKtApY9jWr7pXNS3yHDEafPlClSsWnkY8ow==", "funding": [ { "type": "github", @@ -14570,61 +14340,62 @@ "license": "MIT-0", "dependencies": { "@csstools/postcss-cascade-layers": "^5.0.1", - "@csstools/postcss-color-function": "^4.0.7", - "@csstools/postcss-color-mix-function": "^3.0.7", - "@csstools/postcss-content-alt-text": "^2.0.4", - "@csstools/postcss-exponential-functions": "^2.0.6", + "@csstools/postcss-color-function": "^4.0.10", + "@csstools/postcss-color-mix-function": "^3.0.10", + "@csstools/postcss-color-mix-variadic-function-arguments": "^1.0.0", + "@csstools/postcss-content-alt-text": "^2.0.6", + "@csstools/postcss-exponential-functions": "^2.0.9", "@csstools/postcss-font-format-keywords": "^4.0.0", - "@csstools/postcss-gamut-mapping": "^2.0.7", - "@csstools/postcss-gradients-interpolation-method": "^5.0.7", - "@csstools/postcss-hwb-function": "^4.0.7", - "@csstools/postcss-ic-unit": "^4.0.0", - "@csstools/postcss-initial": "^2.0.0", - "@csstools/postcss-is-pseudo-class": "^5.0.1", - "@csstools/postcss-light-dark-function": "^2.0.7", + "@csstools/postcss-gamut-mapping": "^2.0.10", + "@csstools/postcss-gradients-interpolation-method": "^5.0.10", + "@csstools/postcss-hwb-function": "^4.0.10", + "@csstools/postcss-ic-unit": "^4.0.2", + "@csstools/postcss-initial": "^2.0.1", + "@csstools/postcss-is-pseudo-class": "^5.0.3", + "@csstools/postcss-light-dark-function": "^2.0.9", "@csstools/postcss-logical-float-and-clear": "^3.0.0", "@csstools/postcss-logical-overflow": "^2.0.0", "@csstools/postcss-logical-overscroll-behavior": "^2.0.0", "@csstools/postcss-logical-resize": "^3.0.0", - "@csstools/postcss-logical-viewport-units": "^3.0.3", - "@csstools/postcss-media-minmax": "^2.0.6", - "@csstools/postcss-media-queries-aspect-ratio-number-values": "^3.0.4", + "@csstools/postcss-logical-viewport-units": "^3.0.4", + "@csstools/postcss-media-minmax": "^2.0.9", + "@csstools/postcss-media-queries-aspect-ratio-number-values": "^3.0.5", "@csstools/postcss-nested-calc": "^4.0.0", "@csstools/postcss-normalize-display-values": "^4.0.0", - "@csstools/postcss-oklab-function": "^4.0.7", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/postcss-random-function": "^1.0.2", - "@csstools/postcss-relative-color-syntax": "^3.0.7", + "@csstools/postcss-oklab-function": "^4.0.10", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", + "@csstools/postcss-random-function": "^2.0.1", + "@csstools/postcss-relative-color-syntax": "^3.0.10", "@csstools/postcss-scope-pseudo-class": "^4.0.1", - "@csstools/postcss-sign-functions": "^1.1.1", - "@csstools/postcss-stepped-value-functions": "^4.0.6", - "@csstools/postcss-text-decoration-shorthand": "^4.0.1", - "@csstools/postcss-trigonometric-functions": "^4.0.6", + "@csstools/postcss-sign-functions": "^1.1.4", + "@csstools/postcss-stepped-value-functions": "^4.0.9", + "@csstools/postcss-text-decoration-shorthand": "^4.0.2", + "@csstools/postcss-trigonometric-functions": "^4.0.9", "@csstools/postcss-unset-value": "^4.0.0", - "autoprefixer": "^10.4.19", - "browserslist": "^4.23.1", + "autoprefixer": "^10.4.21", + "browserslist": "^4.25.0", "css-blank-pseudo": "^7.0.1", "css-has-pseudo": "^7.0.2", "css-prefers-color-scheme": "^10.0.0", - "cssdb": "^8.2.3", + "cssdb": "^8.3.0", "postcss-attribute-case-insensitive": "^7.0.1", "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^7.0.7", + "postcss-color-functional-notation": "^7.0.10", "postcss-color-hex-alpha": "^10.0.0", "postcss-color-rebeccapurple": "^10.0.0", - "postcss-custom-media": "^11.0.5", - "postcss-custom-properties": "^14.0.4", - "postcss-custom-selectors": "^8.0.4", + "postcss-custom-media": "^11.0.6", + "postcss-custom-properties": "^14.0.6", + "postcss-custom-selectors": "^8.0.5", "postcss-dir-pseudo-class": "^9.0.1", - "postcss-double-position-gradients": "^6.0.0", + "postcss-double-position-gradients": "^6.0.2", "postcss-focus-visible": "^10.0.1", "postcss-focus-within": "^9.0.1", "postcss-font-variant": "^5.0.0", "postcss-gap-properties": "^6.0.0", "postcss-image-set-function": "^7.0.0", - "postcss-lab-function": "^7.0.7", - "postcss-logical": "^8.0.0", - "postcss-nesting": "^13.0.1", + "postcss-lab-function": "^7.0.10", + "postcss-logical": "^8.1.0", + "postcss-nesting": "^13.0.2", "postcss-opacity-percentage": "^3.0.0", "postcss-overflow-shorthand": "^6.0.0", "postcss-page-break": "^3.0.4", @@ -14666,9 +14437,9 @@ } }, "node_modules/postcss-pseudo-class-any-link/node_modules/postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -14759,9 +14530,9 @@ } }, "node_modules/postcss-selector-not/node_modules/postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -14881,9 +14652,9 @@ } }, "node_modules/prismjs": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", "license": "MIT", "engines": { "node": ">=6" @@ -14996,15 +14767,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", - "license": "MIT", - "dependencies": { - "inherits": "~2.0.3" - } - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -15184,132 +14946,6 @@ "node": ">=0.10.0" } }, - "node_modules/react-dev-utils": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", - "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "address": "^1.1.2", - "browserslist": "^4.18.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "detect-port-alt": "^1.1.6", - "escape-string-regexp": "^4.0.0", - "filesize": "^8.0.6", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.5.0", - "global-modules": "^2.0.0", - "globby": "^11.0.4", - "gzip-size": "^6.0.0", - "immer": "^9.0.7", - "is-root": "^2.1.0", - "loader-utils": "^3.2.0", - "open": "^8.4.0", - "pkg-up": "^3.1.0", - "prompts": "^2.4.2", - "react-error-overlay": "^6.0.11", - "recursive-readdir": "^2.2.2", - "shell-quote": "^1.7.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/react-dev-utils/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/loader-utils": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", - "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", - "license": "MIT", - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/react-dev-utils/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dev-utils/node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/react-dom": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", @@ -15323,12 +14959,6 @@ "react": "^18.3.1" } }, - "node_modules/react-error-overlay": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", - "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==", - "license": "MIT" - }, "node_modules/react-fast-compare": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", @@ -15359,15 +14989,15 @@ "license": "MIT" }, "node_modules/react-json-view-lite": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/react-json-view-lite/-/react-json-view-lite-1.5.0.tgz", - "integrity": "sha512-nWqA1E4jKPklL2jvHWs6s+7Na0qNgw9HCP6xehdQJeg6nPBTFZgGwyko9Q0oj+jQWKTTVRS30u0toM5wiuL3iw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/react-json-view-lite/-/react-json-view-lite-2.4.1.tgz", + "integrity": "sha512-fwFYknRIBxjbFm0kBDrzgBy1xa5tDg2LyXXBepC5f1b+MY3BUClMCsvanMPn089JbV1Eg3nZcrp0VCuH43aXnA==", "license": "MIT", "engines": { - "node": ">=14" + "node": ">=18" }, "peerDependencies": { - "react": "^16.13.1 || ^17.0.0 || ^18.0.0" + "react": "^18.0.0 || ^19.0.0" } }, "node_modules/react-loadable": { @@ -15476,23 +15106,6 @@ "node": ">=8.10.0" } }, - "node_modules/reading-time": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", - "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==", - "license": "MIT" - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/recma-build-jsx": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz", @@ -15557,18 +15170,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "license": "MIT", - "dependencies": { - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -15593,15 +15194,6 @@ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", "license": "MIT" }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, "node_modules/regexpu-core": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", @@ -15764,9 +15356,9 @@ } }, "node_modules/remark-gfm": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.0.tgz", - "integrity": "sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -15976,18 +15568,21 @@ "license": "MIT" }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -16038,9 +15633,9 @@ } }, "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "license": "MIT", "engines": { "iojs": ">=1.0.0", @@ -16145,6 +15740,12 @@ "loose-envify": "^1.1.0" } }, + "node_modules/schema-dts": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/schema-dts/-/schema-dts-1.1.5.tgz", + "integrity": "sha512-RJr9EaCmsLzBX2NDiO5Z3ux2BVosNZN5jo0gWgsyKvxKIUL5R3swNvoorulAeL9kLB0iTSX7V6aokhla2m7xbg==", + "license": "Apache-2.0" + }, "node_modules/schema-utils": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", @@ -16481,23 +16082,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "license": "BSD-3-Clause", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/side-channel": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", @@ -16723,9 +16307,9 @@ } }, "node_modules/std-env": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.0.tgz", - "integrity": "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz", + "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==", "license": "MIT" }, "node_modules/string_decoder": { @@ -17085,12 +16669,6 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "license": "MIT" }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "license": "MIT" - }, "node_modules/thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", @@ -17109,6 +16687,15 @@ "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", "license": "MIT" }, + "node_modules/tinypool": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", + "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -17224,6 +16811,7 @@ "version": "5.5.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "devOptional": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -17422,9 +17010,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", - "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", "funding": [ { "type": "opencollective", @@ -17442,7 +17030,7 @@ "license": "MIT", "dependencies": { "escalade": "^3.2.0", - "picocolors": "^1.1.0" + "picocolors": "^1.1.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -18322,19 +17910,10 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "license": "ISC" }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, "node_modules/yocto-queue": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", - "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", + "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", "license": "MIT", "engines": { "node": ">=12.20" diff --git a/docs/package.json b/docs/package.json index 0cd9716..5a69aa6 100644 --- a/docs/package.json +++ b/docs/package.json @@ -15,8 +15,8 @@ "typecheck": "tsc" }, "dependencies": { - "@docusaurus/core": "^3.7.0", - "@docusaurus/preset-classic": "^3.7.0", + "@docusaurus/core": "^3.8.1", + "@docusaurus/preset-classic": "^3.8.1", "@mdx-js/react": "^3.0.0", "clsx": "^2.0.0", "prism-react-renderer": "^2.3.0", @@ -25,8 +25,8 @@ "react-dom": "^18.0.0" }, "devDependencies": { - "@docusaurus/module-type-aliases": "^3.7.0", - "@docusaurus/tsconfig": "^3.7.0", + "@docusaurus/module-type-aliases": "^3.8.1", + "@docusaurus/tsconfig": "^3.8.1", "@docusaurus/types": "3.5.2", "typescript": "~5.5.2" }, diff --git a/experimental/azure/README.md b/experimental/azure/README.md index eed01d2..d57b9a8 100644 --- a/experimental/azure/README.md +++ b/experimental/azure/README.md @@ -10,7 +10,7 @@ Attribution: [Rowan Coleman](https://www.linkedin.com/in/rowan-coleman-6a147156/ - **Version:** 1.0 -## Generics +### Generics ### Resource @@ -30,7 +30,7 @@ Attribution: [Rowan Coleman](https://www.linkedin.com/in/rowan-coleman-6a147156/ | location | one | Attribute | AzureLocation | | | resourcegroup | one | Parent | AzureResourceGroup | False | -## Nodes +### Nodes ### Location diff --git a/experimental/circuit_service/README.md b/experimental/circuit_service/README.md index ab050f0..d72ff87 100644 --- a/experimental/circuit_service/README.md +++ b/experimental/circuit_service/README.md @@ -12,7 +12,7 @@ Dependencies: `extensions/circuit` - **Version:** 1.0 -## Nodes +### Nodes ### Service @@ -42,9 +42,9 @@ Dependencies: `extensions/circuit` | provider | OrganizationProvider | False | one | Attribute | | circuit\_endpoints | CircuitEndpoint | True | many | Component | -## Extensions +### Extensions -### OrganizationProvider +#### OrganizationProvider #### Relationships @@ -52,7 +52,7 @@ Dependencies: `extensions/circuit` | ---- | ---- | ----------- | -------- | | circuit\_services | CircuitService | many | True | -### CircuitEndpoint +#### CircuitEndpoint #### Relationships diff --git a/experimental/infiniband/README.md b/experimental/infiniband/README.md index bfbd83e..1104272 100644 --- a/experimental/infiniband/README.md +++ b/experimental/infiniband/README.md @@ -8,7 +8,7 @@ Dependencies: `base, extensions/compute` - **Version:** 1.0 -## Nodes +### Nodes ### Switch diff --git a/experimental/location_extended/README.md b/experimental/location_extended/README.md index f3db0ea..4a4baa2 100644 --- a/experimental/location_extended/README.md +++ b/experimental/location_extended/README.md @@ -8,7 +8,7 @@ Dependencies: `base` - **Version:** 1.0 -## Nodes +### Nodes ### Continent @@ -103,9 +103,9 @@ Dependencies: `base` | ---- | ---- | -------- | ----------- | | owner | OrganizationGeneric | True | one | -## Extensions +### Extensions -### OrganizationProvider +#### OrganizationProvider #### Relationships diff --git a/experimental/modules_linecards/README.md b/experimental/modules_linecards/README.md index c535271..e1ec17c 100644 --- a/experimental/modules_linecards/README.md +++ b/experimental/modules_linecards/README.md @@ -8,7 +8,7 @@ Dependencies: `base, extensions/modules` - **Version:** 1.0 -## Nodes +### Nodes ### LinecardType diff --git a/experimental/modules_routing_engine/README.md b/experimental/modules_routing_engine/README.md index d508970..c056563 100644 --- a/experimental/modules_routing_engine/README.md +++ b/experimental/modules_routing_engine/README.md @@ -8,7 +8,7 @@ Dependencies: `base, extensions/modules` - **Version:** 1.0 -## Nodes +### Nodes ### RoutingEngineType diff --git a/experimental/qos/README.md b/experimental/qos/README.md index d7079a2..7a5b5cf 100644 --- a/experimental/qos/README.md +++ b/experimental/qos/README.md @@ -8,7 +8,7 @@ Dependencies: `base` - **Version:** 1.0 -## Nodes +### Nodes ### ForwardingClass diff --git a/experimental/security/README.md b/experimental/security/README.md index b56667f..67630a3 100644 --- a/experimental/security/README.md +++ b/experimental/security/README.md @@ -8,7 +8,7 @@ Dependencies: `base` - **Version:** 1.0 -## Generics +### Generics ### PolicyAssignment @@ -88,7 +88,7 @@ Dependencies: `base` | ---- | ----- | ---- | ----------- | -------- | | service\_groups | Service Groups | SecurityGenericServiceGroup | many | True | -## Nodes +### Nodes ### Zone @@ -451,9 +451,9 @@ Dependencies: `base` | ip\_addresses | InfraIPAddress | True | many | Component | | security\_zone | SecurityZone | False | one | Attribute | -## Extensions +### Extensions -### LocationGeneric +#### LocationGeneric #### Relationships diff --git a/experimental/tenancy/README.md b/experimental/tenancy/README.md index b119231..b8471a4 100644 --- a/experimental/tenancy/README.md +++ b/experimental/tenancy/README.md @@ -8,7 +8,7 @@ Dependencies: `base, extensions/circuit` - **Version:** 1.0 -## Nodes +### Nodes ### Tenant diff --git a/experimental/topology/README.md b/experimental/topology/README.md index 40eddf4..f6dfbdb 100644 --- a/experimental/topology/README.md +++ b/experimental/topology/README.md @@ -8,7 +8,7 @@ Dependencies: `base` - **Version:** 1.0 -## Generics +### Generics ### ManagementServer @@ -89,7 +89,7 @@ Dependencies: `base` | ---- | ---- | -------- | ----------- | | topology | TopologyTopology | True | many | -## Nodes +### Nodes ### Topology @@ -315,9 +315,9 @@ Dependencies: `base` | vlan | InfraVLAN | one | Component | True | 1500 | | prefix | InfraPrefix | one | Component | True | 1400 | -## Extensions +### Extensions -### DcimGenericDevice +#### DcimGenericDevice #### Relationships @@ -325,7 +325,7 @@ Dependencies: `base` | ---- | ---- | -------- | ----------- | | topology | TopologyTopology | True | one | -### IpamPrefix +#### IpamPrefix #### Relationships diff --git a/experimental/vlan-translation/README.md b/experimental/vlan-translation/README.md index 04e8e30..4626dc4 100644 --- a/experimental/vlan-translation/README.md +++ b/experimental/vlan-translation/README.md @@ -8,7 +8,7 @@ Dependencies: `base` - **Version:** 1.0 -## Nodes +### Nodes ### MapInOut @@ -40,9 +40,9 @@ Dependencies: `base` | ---- | ---- | ---- | ----------- | ----------- | -------- | ----- | ------------ | | interface | Parent | DcimInterface | Interface to which the Input/Output VLAN mapping is applied | one | False | Interface | 1000 | -## Extensions +### Extensions -### DcimInterface +#### DcimInterface #### Relationships diff --git a/extensions/cable/README.md b/extensions/cable/README.md index b8f7b5c..b9629d2 100644 --- a/extensions/cable/README.md +++ b/extensions/cable/README.md @@ -8,7 +8,7 @@ Dependencies: `base` - **Version:** 1.0 -## Nodes +### Nodes ### Cable diff --git a/extensions/circuit/README.md b/extensions/circuit/README.md index fb05073..624083a 100644 --- a/extensions/circuit/README.md +++ b/extensions/circuit/README.md @@ -8,7 +8,7 @@ Dependencies: `base, extensions/location_minimal` - **Version:** 1.0 -## Nodes +### Nodes ### Circuit @@ -67,9 +67,9 @@ Dependencies: `base, extensions/location_minimal` | circuit | DcimCircuit | 900 | False | one | Parent | | | location | LocationHosting | 1500 | False | one | Attribute | Location | -## Extensions +### Extensions -### OrganizationProvider +#### OrganizationProvider #### Relationships @@ -77,7 +77,7 @@ Dependencies: `base, extensions/location_minimal` | ---- | ---- | ----------- | -------- | | circuits | DcimCircuit | many | True | -### LocationHosting +#### LocationHosting #### Relationships diff --git a/extensions/cluster/README.md b/extensions/cluster/README.md index 58028a1..b95ba41 100644 --- a/extensions/cluster/README.md +++ b/extensions/cluster/README.md @@ -8,7 +8,7 @@ Dependencies: `base, extensions/compute` - **Version:** 1.0 -## Generics +### Generics ### Generic @@ -47,9 +47,9 @@ Dependencies: `base, extensions/compute` | ---- | ----- | ---------- | ----------- | ---- | ---- | | nodes | Nodes | worker\_in\_cluster | many | ComputeGenericUnit | Component | -## Extensions +### Extensions -### ComputeGenericUnit +#### ComputeGenericUnit #### Relationships @@ -57,7 +57,7 @@ Dependencies: `base, extensions/compute` | ---- | ---------- | ----- | ---- | ----------- | ----------- | -------- | | worker\_in\_cluster | worker\_in\_cluster | Worker in cluster | ClusterGenericComputeUnitNodes | one | This device is a worker node of the specified cluster\. | True | -### LocationGeneric +#### LocationGeneric #### Relationships diff --git a/extensions/compute/README.md b/extensions/compute/README.md index d168ac3..d305a6c 100644 --- a/extensions/compute/README.md +++ b/extensions/compute/README.md @@ -8,7 +8,7 @@ Dependencies: `base` - **Version:** 1.0 -## Generics +### Generics ### GenericUnit @@ -26,7 +26,7 @@ Dependencies: `base` | ---- | ----------- | ---- | ---- | -------- | | virtual\_machines | many | VirtualizationVirtualMachine | Component | True | -## Nodes +### Nodes ### PhysicalServer diff --git a/extensions/cross_connect/README.md b/extensions/cross_connect/README.md index 55c80f4..9e515b7 100644 --- a/extensions/cross_connect/README.md +++ b/extensions/cross_connect/README.md @@ -8,7 +8,7 @@ Dependencies: `base` - **Version:** 1.0 -## Nodes +### Nodes ### CrossConnect diff --git a/extensions/dwdm/README.md b/extensions/dwdm/README.md index 93e1204..2e65ab9 100644 --- a/extensions/dwdm/README.md +++ b/extensions/dwdm/README.md @@ -8,7 +8,7 @@ Dependencies: `base, extensions/sfp` - **Version:** 1.0 -## Generics +### Generics ### GenericOadmInterface @@ -25,7 +25,7 @@ Dependencies: `base, extensions/sfp` | description | Text | 2000 | True | \`\` | | connector\_type | Dropdown | 1100 | | \`FC, LC, LC\_PC, LC\_UPC, LC\_APC, LSH, LSH\_PC, LSH\_UPC, LSH\_APC, LX\_5, LX\_5\_PC, LX\_5\_UPC, LX\_5\_APC, MPO, MTRJ, SC, SC\_PC, SC\_UPC, SC\_APC, ST, CS, SN, SMA\_905, SMA\_906, URM\_P2\` | -## Nodes +### Nodes ### OpticalMultiplexer diff --git a/extensions/firewall_policer/README.md b/extensions/firewall_policer/README.md index 0cfb731..c6dce8f 100644 --- a/extensions/firewall_policer/README.md +++ b/extensions/firewall_policer/README.md @@ -8,7 +8,7 @@ Dependencies: `base` - **Version:** 1.0 -## Nodes +### Nodes ### Policer diff --git a/extensions/hosting_cluster/README.md b/extensions/hosting_cluster/README.md index 06ccdb2..12b82ed 100644 --- a/extensions/hosting_cluster/README.md +++ b/extensions/hosting_cluster/README.md @@ -8,7 +8,7 @@ Dependencies: `base, extensions/cluster, extensions/compute` - **Version:** 1.0 -## Nodes +### Nodes ### Hosting diff --git a/extensions/interface_breakout/README.md b/extensions/interface_breakout/README.md index 682a83f..5afedff 100644 --- a/extensions/interface_breakout/README.md +++ b/extensions/interface_breakout/README.md @@ -8,9 +8,9 @@ Dependencies: `base` - **Version:** 1.0 -## Extensions +### Extensions -### InterfacePhysical +#### InterfacePhysical #### Attributes diff --git a/extensions/lag/README.md b/extensions/lag/README.md index 000aec3..147cac0 100644 --- a/extensions/lag/README.md +++ b/extensions/lag/README.md @@ -8,7 +8,7 @@ Dependencies: `base` - **Version:** 1.0 -## Nodes +### Nodes ### Lag @@ -29,9 +29,9 @@ Dependencies: `base` | ---- | ----- | ---- | ----------- | ---- | ----------- | ------------ | | lag\_members | Member\(s\) | InterfacePhysical | many | Attribute | Physical Interfaces that are members of this aggregate | 1800 | -## Extensions +### Extensions -### InterfacePhysical +#### InterfacePhysical #### Relationships diff --git a/extensions/location_minimal/README.md b/extensions/location_minimal/README.md index 78b578b..b296955 100644 --- a/extensions/location_minimal/README.md +++ b/extensions/location_minimal/README.md @@ -8,7 +8,7 @@ Dependencies: `base` - **Version:** 1.0 -## Nodes +### Nodes ### Country @@ -70,9 +70,9 @@ Dependencies: `base` | ---- | ---- | -------- | ----------- | | owner | OrganizationGeneric | True | one | -## Extensions +### Extensions -### OrganizationProvider +#### OrganizationProvider #### Relationships diff --git a/extensions/modules/README.md b/extensions/modules/README.md index b17ab94..81f2b77 100644 --- a/extensions/modules/README.md +++ b/extensions/modules/README.md @@ -11,7 +11,7 @@ Dependencies: `base` - **Version:** 1.0 -## Generics +### Generics ### GenericModule @@ -60,9 +60,9 @@ Dependencies: `base` | manufacturer | OrganizationManufacturer | manufacturer\_\_moduletype | one | False | Attribute | Manufacturer of the module type\. | 1250 | | tags | BuiltinTag | | many | True | Attribute | Tags associated with the module type\. | 3000 | -## Extensions +### Extensions -### DcimPhysicalDevice +#### DcimPhysicalDevice #### Relationships diff --git a/extensions/patch_panel/README.md b/extensions/patch_panel/README.md index af236d7..ed92656 100644 --- a/extensions/patch_panel/README.md +++ b/extensions/patch_panel/README.md @@ -11,7 +11,7 @@ Dependencies: `base` - **Version:** 1.0 -## Generics +### Generics ### GenericPatchPanelInterface @@ -28,7 +28,7 @@ Dependencies: `base` | description | Text | 2000 | True | \`\` | | connector\_type | Dropdown | 1100 | | \`FC, LC, LC\_PC, LC\_UPC, LC\_APC, LSH, LSH\_PC, LSH\_UPC, LSH\_APC, LX\_5, LX\_5\_PC, LX\_5\_UPC, LX\_5\_APC, MPO, MTRJ, SC, SC\_PC, SC\_UPC, SC\_APC, ST, CS, SN, SMA\_905, SMA\_906, URM\_P2\` | -## Nodes +### Nodes ### PatchPanel diff --git a/extensions/peering_ixp/README.md b/extensions/peering_ixp/README.md index 0203d7a..e466e1c 100644 --- a/extensions/peering_ixp/README.md +++ b/extensions/peering_ixp/README.md @@ -8,7 +8,7 @@ Dependencies: `base, extensions/routing, extensions/routing_bgp, extensions/rout - **Version:** 1.0 -## Nodes +### Nodes ### IXP diff --git a/extensions/physical_disk/README.md b/extensions/physical_disk/README.md index 37ca8e8..8ea1432 100644 --- a/extensions/physical_disk/README.md +++ b/extensions/physical_disk/README.md @@ -11,7 +11,7 @@ Dependencies: `base` - **Version:** 1.0 -## Generics +### Generics ### DeviceWithPhysicalDisks @@ -24,7 +24,7 @@ Dependencies: `base` | ---- | ----------- | ---- | -------- | ---- | | physical\_disks | many | DcimPhysicalDisk | True | Component | -## Nodes +### Nodes ### PhysicalDisk diff --git a/extensions/routing/README.md b/extensions/routing/README.md index 018d7c3..fcf101b 100644 --- a/extensions/routing/README.md +++ b/extensions/routing/README.md @@ -8,7 +8,7 @@ Dependencies: `base, extensions/vlan` - **Version:** 1.0 -## Generics +### Generics ### Protocol diff --git a/extensions/routing_aggregate/README.md b/extensions/routing_aggregate/README.md index c370b6c..4c43eb3 100644 --- a/extensions/routing_aggregate/README.md +++ b/extensions/routing_aggregate/README.md @@ -8,7 +8,7 @@ Dependencies: `base, extensions/routing` - **Version:** 1.0 -## Nodes +### Nodes ### AggregateRoute diff --git a/extensions/routing_bgp/README.md b/extensions/routing_bgp/README.md index af3945a..9b0875c 100644 --- a/extensions/routing_bgp/README.md +++ b/extensions/routing_bgp/README.md @@ -8,7 +8,7 @@ Dependencies: `base, extensions/routing` - **Version:** 1.0 -## Nodes +### Nodes ### AutonomousSystem @@ -105,9 +105,9 @@ Dependencies: `base, extensions/routing` | peer\_group | | RoutingBGPPeerGroup | True | one | Attribute | | peer\_session | | RoutingBGPSession | True | one | Attribute | -## Extensions +### Extensions -### DcimGenericDevice +#### DcimGenericDevice #### Relationships @@ -115,7 +115,7 @@ Dependencies: `base, extensions/routing` | ---- | ---- | -------- | ----------- | ---- | ------------ | | asn | RoutingAutonomousSystem | True | one | Attribute | 1600 | -### OrganizationGeneric +#### OrganizationGeneric #### Relationships diff --git a/extensions/routing_bgp_community/README.md b/extensions/routing_bgp_community/README.md index 674fc36..570fc1e 100644 --- a/extensions/routing_bgp_community/README.md +++ b/extensions/routing_bgp_community/README.md @@ -8,7 +8,7 @@ Dependencies: `base, extensions/routing` - **Version:** 1.0 -## Nodes +### Nodes ### BGPCommunity diff --git a/extensions/routing_bgp_rr/README.md b/extensions/routing_bgp_rr/README.md index 593143d..3b5914f 100644 --- a/extensions/routing_bgp_rr/README.md +++ b/extensions/routing_bgp_rr/README.md @@ -8,7 +8,7 @@ Dependencies: `base, extensions/routing, extensions/routing_bgp` - **Version:** 1.0 -## Nodes +### Nodes ### BGPRRCluster @@ -36,9 +36,9 @@ Dependencies: `base, extensions/routing, extensions/routing_bgp` | cluster\_id | Cluster ID | IpamIPAddress | Cluster ID represented as a reference to an IP Address | one | Attribute | False | 1200 | | peer\_groups | BGP Peer Groups | RoutingBGPPeerGroup | | many | Generic | True | | -## Extensions +### Extensions -### RoutingBGPPeerGroup +#### RoutingBGPPeerGroup #### Relationships diff --git a/extensions/routing_ospf/README.md b/extensions/routing_ospf/README.md index c0274a4..d22cf47 100644 --- a/extensions/routing_ospf/README.md +++ b/extensions/routing_ospf/README.md @@ -8,7 +8,7 @@ Dependencies: `base, extensions/routing` - **Version:** 1.0 -## Nodes +### Nodes ### OSPF diff --git a/extensions/routing_pim/README.md b/extensions/routing_pim/README.md index fc1cd0b..500b0c4 100644 --- a/extensions/routing_pim/README.md +++ b/extensions/routing_pim/README.md @@ -8,7 +8,7 @@ Dependencies: `base, extensions/routing` - **Version:** 1.0 -## Nodes +### Nodes ### PIM diff --git a/extensions/routing_policies/README.md b/extensions/routing_policies/README.md index 7ea20aa..855a684 100644 --- a/extensions/routing_policies/README.md +++ b/extensions/routing_policies/README.md @@ -10,7 +10,7 @@ Dependencies: `base` - **Version:** 1.0 -## Generics +### Generics ### Policy diff --git a/extensions/routing_policies_aggregate/README.md b/extensions/routing_policies_aggregate/README.md index 639a700..0db7309 100644 --- a/extensions/routing_policies_aggregate/README.md +++ b/extensions/routing_policies_aggregate/README.md @@ -8,7 +8,7 @@ Dependencies: `base, extensions/routing, extensions/routing_policies, extensions - **Version:** 1.0 -## Nodes +### Nodes ### PolicyAggregate diff --git a/extensions/routing_policies_bgp/README.md b/extensions/routing_policies_bgp/README.md index 00a1131..06cfe0a 100644 --- a/extensions/routing_policies_bgp/README.md +++ b/extensions/routing_policies_bgp/README.md @@ -8,7 +8,7 @@ Dependencies: `base, extensions/routing, extensions/routing_policies, extensions - **Version:** 1.0 -## Nodes +### Nodes ### PolicyBGP @@ -17,9 +17,9 @@ Dependencies: `base, extensions/routing, extensions/routing_policies, extensions - **Icon:** carbon:deployment-policy - **Include in Menu:** ❌ -## Extensions +### Extensions -### RoutingBGPPeerGroup +#### RoutingBGPPeerGroup #### Attributes @@ -35,7 +35,7 @@ Dependencies: `base, extensions/routing, extensions/routing_policies, extensions | import\_routing\_policies | Import Routing Policies | RoutingPolicyBGP | bgp\_\_import\_policies | The routing\-policies used by this instance for import\. | Generic | many | | export\_routing\_policies | Export Routing Policies | RoutingPolicyBGP | bgp\_\_export\_policies | The routing\-policies used by this instance for export\. | Generic | many | -### RoutingBGPSession +#### RoutingBGPSession #### Attributes diff --git a/extensions/routing_policies_ospf/README.md b/extensions/routing_policies_ospf/README.md index 4115775..31d215b 100644 --- a/extensions/routing_policies_ospf/README.md +++ b/extensions/routing_policies_ospf/README.md @@ -8,7 +8,7 @@ Dependencies: `base, extensions/routing, extensions/routing_policies, extensions - **Version:** 1.0 -## Nodes +### Nodes ### PolicyOSPF @@ -17,9 +17,9 @@ Dependencies: `base, extensions/routing, extensions/routing_policies, extensions - **Icon:** carbon:deployment-policy - **Include in Menu:** ❌ -## Extensions +### Extensions -### RoutingOSPF +#### RoutingOSPF #### Attributes diff --git a/extensions/routing_policies_pim/README.md b/extensions/routing_policies_pim/README.md index ac06c00..75bc159 100644 --- a/extensions/routing_policies_pim/README.md +++ b/extensions/routing_policies_pim/README.md @@ -8,7 +8,7 @@ Dependencies: `base, extensions/routing, extensions/routing_policies, extensions - **Version:** 1.0 -## Nodes +### Nodes ### PolicyPIM @@ -17,9 +17,9 @@ Dependencies: `base, extensions/routing, extensions/routing_policies, extensions - **Icon:** carbon:deployment-policy - **Include in Menu:** ❌ -## Extensions +### Extensions -### RoutingPIM +#### RoutingPIM #### Attributes diff --git a/extensions/sfp/README.md b/extensions/sfp/README.md index 1d04268..fc71250 100644 --- a/extensions/sfp/README.md +++ b/extensions/sfp/README.md @@ -16,7 +16,7 @@ Dependencies: `base` - **Version:** 1.0 -## Generics +### Generics ### GenericSFP @@ -42,7 +42,7 @@ Dependencies: `base` | spare\_location | LocationHosting | Attribute | True | one | 1500 | | manufacturer | OrganizationManufacturer | Attribute | True | one | 1350 | -## Nodes +### Nodes ### StandardSFP @@ -67,9 +67,9 @@ Dependencies: `base` | wavelength\_tx | Transmit Wavelength \(nm\) | Number | False | Transmit wavelength in nm\. | 1175 | | wavelength\_rx | Receive Wavelength \(nm\) | Number | False | Receive wavelength in nm\. | 1150 | -## Extensions +### Extensions -### DcimInterface +#### DcimInterface #### Relationships @@ -77,7 +77,7 @@ Dependencies: `base` | ---- | ---- | ----------- | -------- | | plugged\_sfp | DcimGenericSFP | one | True | -### LocationHosting +#### LocationHosting #### Relationships @@ -85,7 +85,7 @@ Dependencies: `base` | ---- | ---- | ----------- | -------- | | spare\_sfps | DcimGenericSFP | many | True | -### OrganizationManufacturer +#### OrganizationManufacturer #### Relationships diff --git a/extensions/snmp/README.md b/extensions/snmp/README.md index 4b21354..0c0e85e 100644 --- a/extensions/snmp/README.md +++ b/extensions/snmp/README.md @@ -8,7 +8,7 @@ Dependencies: `base` - **Version:** 1.0 -## Generics +### Generics ### Community @@ -35,7 +35,7 @@ Dependencies: `base` | ---- | ---- | ----------- | ---- | | clients | SnmpClient | many | Component | -## Nodes +### Nodes ### CommunityV2 diff --git a/extensions/topology/README.md b/extensions/topology/README.md index 6a222f2..61bc258 100644 --- a/extensions/topology/README.md +++ b/extensions/topology/README.md @@ -8,7 +8,7 @@ Dependencies: `base` - **Version:** 1.0 -## Generics +### Generics ### Generic diff --git a/extensions/users/README.md b/extensions/users/README.md index 3f6b17a..ee2a7cf 100644 --- a/extensions/users/README.md +++ b/extensions/users/README.md @@ -8,7 +8,7 @@ Dependencies: `base` - **Version:** 1.0 -## Nodes +### Nodes ### Group @@ -60,9 +60,9 @@ Dependencies: `base` | user\_group | UserGroup | one | False | Attribute | 1200 | | organization | OrganizationGeneric | one | False | Parent | | -## Extensions +### Extensions -### OrganizationGeneric +#### OrganizationGeneric #### Relationships diff --git a/extensions/vlan/README.md b/extensions/vlan/README.md index 4ebfb5a..1b85108 100644 --- a/extensions/vlan/README.md +++ b/extensions/vlan/README.md @@ -8,7 +8,7 @@ Dependencies: `base` - **Version:** 1.0 -## Nodes +### Nodes ### VLAN @@ -60,9 +60,9 @@ Dependencies: `base` | ---- | ---- | -------- | ----------- | ---- | | vlans | IpamVLAN | True | many | Component | -## Extensions +### Extensions -### IpamPrefix +#### IpamPrefix #### Relationships @@ -70,7 +70,7 @@ Dependencies: `base` | ---- | ---- | -------- | ----------- | ---- | ------------ | | vlan | IpamVLAN | True | one | Attribute | 1400 | -### InterfaceLayer2 +#### InterfaceLayer2 #### Relationships @@ -79,7 +79,7 @@ Dependencies: `base` | untagged\_vlan | Untagged VLAN | IpamVLAN | True | one | Generic | interface\_l2\_\_untagged\_vlan | | tagged\_vlan | Tagged VLANs | IpamVLAN | True | many | Generic | interface\_l2\_\_tagged\_vlan | -### LocationHosting +#### LocationHosting #### Relationships diff --git a/extensions/vrf/README.md b/extensions/vrf/README.md index fda8138..3221026 100644 --- a/extensions/vrf/README.md +++ b/extensions/vrf/README.md @@ -8,7 +8,7 @@ Dependencies: `base` - **Version:** 1.0 -## Nodes +### Nodes ### VRF @@ -64,9 +64,9 @@ Dependencies: `base` | ---- | ---- | -------- | ----------- | | vrf | IpamVRF | True | many | -## Extensions +### Extensions -### IpamPrefix +#### IpamPrefix #### Relationships @@ -74,7 +74,7 @@ Dependencies: `base` | ---- | ----- | ---- | -------- | ----------- | ---- | ------------ | | vrf | VRF | IpamVRF | True | one | Attribute | 1150 | -### IpamIPAddress +#### IpamIPAddress #### Relationships diff --git a/extensions/vrrp/README.md b/extensions/vrrp/README.md index b3f69b1..9a24ef0 100644 --- a/extensions/vrrp/README.md +++ b/extensions/vrrp/README.md @@ -8,7 +8,7 @@ Dependencies: `base` - **Version:** 1.0 -## Nodes +### Nodes ### VRRPGroup @@ -63,9 +63,9 @@ Dependencies: `base` | vrrp\_group | VRRP Group | VRRP Group | NetworkVRRPGroup | False | one | Attribute | 1200 | | interface | Interface L3 | Interface | InterfaceLayer3 | False | one | Attribute | 1300 | -## Extensions +### Extensions -### InterfaceLayer3 +#### InterfaceLayer3 #### Relationships @@ -73,7 +73,7 @@ Dependencies: `base` | ---- | ---- | ---- | ----------- | ----------- | ----- | ------------ | | vrrp | Component | NetworkVRRPInterface | VRRP Interface Configuration | one | VRRP | 1500 | -### IpamIPAddress +#### IpamIPAddress #### Relationships diff --git a/tasks/schemas.py b/tasks/schemas.py index fa1fd11..a2f3da4 100644 --- a/tasks/schemas.py +++ b/tasks/schemas.py @@ -127,11 +127,6 @@ def generate_readme(schema, extension_dir: Path) -> list: with open(yml_file, "r", encoding="utf-8") as f: schema_definition_files[yml_file.stem] = yaml.safe_load(f) - # content = [ - # f"# {schema.get('name', '')}\n", - # f"{schema.get('description', '')}\n", - # ] - description = schema.get("description", "") content = [ f"# {schema.get('name', '')}\n", @@ -243,19 +238,19 @@ def generate_node_data(node: dict): content.append(f"- **Version:** {file_values['version']}\n") if generics := file_values.get("generics", []): - content.append("## Generics\n") + content.append("### Generics\n") for generic in generics: content.extend(generate_node_data(generic)) if nodes := file_values.get("nodes", []): - content.append("## Nodes\n") + content.append("### Nodes\n") for node in nodes: content.extend(generate_node_data(node)) if extensions := file_values.get("extensions", []): - content.append("## Extensions\n") + content.append("### Extensions\n") for node in extensions.get("nodes", []): - content.append(f"### {node.get('kind', '')}\n") + content.append(f"#### {node.get('kind', '')}\n") if attributes := node.get("attributes", []): content.append("#### Attributes") @@ -306,17 +301,17 @@ def build(context: Context) -> None: toc.append("## Base\n") for yml_file in sorted(base_path.glob("*.yml")): name = yml_file.stem - toc.append(f"- [{name}](#base-schemas)") + toc.append(f"- [{name}](#{name})") toc.append("\n## Extensions\n") for entry in sorted(os.listdir("./extensions")): ext_path = Path("./extensions") / entry if ext_path.is_dir(): - toc.append(f"- [{entry}](#extension-{entry})") + toc.append(f"- [{entry}](#{entry})") toc.append("\n## Experimental\n") for entry in sorted(os.listdir("./experimental")): exp_path = Path("./experimental") / entry if exp_path.is_dir(): - toc.append(f"- [{entry}](#experimental-{entry})") + toc.append(f"- [{entry}](#{entry})") all_content.insert(1, "\n".join(toc) + "\n") # --- End Table of Contents --- @@ -333,17 +328,3 @@ def build(context: Context) -> None: # Write consolidated documentation with open(consolidated_doc, "w", encoding="utf-8") as f: f.write("\n".join(all_content)) - - # Build Readme for base schemas - # base_path = Path("./base") - # generate_readme(schema[str(base_path)], base_path) - - # for directory in directories_to_parse: - # for entry in os.listdir(directory): - # if os.path.isdir(directory / entry): - # path = directory / entry - # # print(path) - # try: - # generate_readme(schema[str(path)], path) - # except KeyError: - # print(f"Schema `{path}` is not added to the {METADATA_FILE} file") From 4e645ad5b38a1cd4e3bd5df8de4d8dbba999cd9c Mon Sep 17 00:00:00 2001 From: Pete Crocker Date: Wed, 18 Jun 2025 19:58:19 +0200 Subject: [PATCH 03/24] fix markdown --- .github/workflows/ci.yml | 2 + base/README.md | 74 +- docs/docs/schema-library.mdx | 886 ++++++++---------- experimental/azure/README.md | 35 +- experimental/circuit_service/README.md | 11 +- experimental/infiniband/README.md | 31 +- experimental/location_extended/README.md | 29 +- experimental/modules_linecards/README.md | 21 +- experimental/modules_routing_engine/README.md | 13 +- experimental/qos/README.md | 31 +- experimental/security/README.md | 87 +- experimental/tenancy/README.md | 9 +- experimental/topology/README.md | 55 +- experimental/vlan-translation/README.md | 11 +- extensions/cable/README.md | 11 +- extensions/circuit/README.md | 15 +- extensions/cluster/README.md | 13 +- extensions/compute/README.md | 19 +- extensions/cross_connect/README.md | 11 +- extensions/dwdm/README.md | 27 +- extensions/firewall_policer/README.md | 11 +- extensions/hosting_cluster/README.md | 11 +- extensions/interface_breakout/README.md | 7 +- extensions/lag/README.md | 11 +- extensions/location_minimal/README.md | 21 +- extensions/modules/README.md | 15 +- extensions/patch_panel/README.md | 23 +- extensions/peering_ixp/README.md | 15 +- extensions/physical_disk/README.md | 13 +- extensions/qinq/README.md | 4 +- extensions/routing/README.md | 11 +- extensions/routing_aggregate/README.md | 11 +- extensions/routing_bgp/README.md | 19 +- extensions/routing_bgp_community/README.md | 11 +- extensions/routing_bgp_rr/README.md | 11 +- extensions/routing_ospf/README.md | 15 +- extensions/routing_pim/README.md | 15 +- extensions/routing_policies/README.md | 11 +- .../routing_policies_aggregate/README.md | 9 +- extensions/routing_policies_bgp/README.md | 9 +- extensions/routing_policies_ospf/README.md | 9 +- extensions/routing_policies_pim/README.md | 9 +- extensions/sfp/README.md | 17 +- extensions/snmp/README.md | 23 +- extensions/topology/README.md | 11 +- extensions/users/README.md | 15 +- extensions/vlan/README.md | 15 +- extensions/vrf/README.md | 15 +- extensions/vrrp/README.md | 15 +- tasks/schemas.py | 12 +- 50 files changed, 750 insertions(+), 1035 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0fdf22d..9092894 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -171,6 +171,8 @@ jobs: run: npm install - name: "Setup Python environment" run: "pip install invoke toml" + - name: "Create schema docs" + run: "invoke schemas.build" - name: "Build docs website" run: "invoke docusaurus.docs" diff --git a/base/README.md b/base/README.md index b7e7f9c..a5062ad 100644 --- a/base/README.md +++ b/base/README.md @@ -1,14 +1,12 @@ -# Base Schemas +## Base Schemas The base schemas serve as the foundation for every single schema extension you might want to use afterward. This one is mandatory and will unlock access to the extensions section. -## dcim - - **Version:** 1.0 ### Generics -### GenericDevice +#### GenericDevice - **Description:** Generic Device object. - **Label:** Device @@ -20,7 +18,7 @@ The base schemas serve as the foundation for every single schema extension you m - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | unique | order_weight | optional | | ---- | ---- | ------ | ------------ | -------- | @@ -37,12 +35,12 @@ The base schemas serve as the foundation for every single schema extension you m | primary\_address | IpamIPAddress | True | one | | Attribute | 1700 | Primary IP Address | | platform | DcimPlatform | True | one | | Attribute | 1250 | | -### PhysicalDevice +#### PhysicalDevice - **Description:** Generic holding attributes and relationships relevant for physical device. - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | label | description | kind | optional | order_weight | default_value | choices | | ---- | ----- | ----------- | ---- | -------- | ------------ | ------------- | ------- | @@ -57,7 +55,7 @@ The base schemas serve as the foundation for every single schema extension you m | device\_type | DcimDeviceType | True | one | Attribute | 1200 | | | location | LocationHosting | False | one | Attribute | 1500 | Location | -### Endpoint +#### Endpoint - **Description:** Generic Endpoint to receive a connector. - **Include in Menu:** ❌ @@ -68,7 +66,7 @@ The base schemas serve as the foundation for every single schema extension you m | ---- | ---- | -------- | ----------- | ------------ | ---- | | connector | DcimConnector | True | one | 1500 | Attribute | -### Connector +#### Connector - **Description:** Generic Connector to link two endpoints together. - **Include in Menu:** ❌ @@ -79,7 +77,7 @@ The base schemas serve as the foundation for every single schema extension you m | ---- | ---- | -------- | ----------- | ------------ | ---- | | connected\_endpoints | DcimEndpoint | True | many | 1500 | Generic | -### Interface +#### Interface - **Description:** Generic Network Interface - **Label:** Interface @@ -90,7 +88,7 @@ The base schemas serve as the foundation for every single schema extension you m - **Order By:**device__name__value, name__value - **Uniqueness Constraints:**device + name__value -#### Attributes +##### Attributes | name | kind | description | order_weight | optional | label | default_value | choices | | ---- | ---- | ----------- | ------------ | -------- | ----- | ------------- | ------- | @@ -107,25 +105,25 @@ The base schemas serve as the foundation for every single schema extension you m | device | DcimGenericDevice | device\_\_interface | False | one | Parent | 1025 | | tags | BuiltinTag | | True | many | Attribute | 3000 | -### Layer2 +#### Layer2 - **Description:** Layer 2 specific attributes for network interfaces - **Label:** Layer 2 Interface - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | label | kind | optional | choices | description | order_weight | | ---- | ----- | ---- | -------- | ------- | ----------- | ------------ | | l2\_mode | Layer2 Mode | Dropdown | True | \`access, trunk, trunk\_all\` | Layer 2 mode of the interface | 1500 | -### Layer3 +#### Layer3 - **Description:** Layer 3 specific attributes for network interfaces - **Label:** Layer 3 Interface - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | label | kind | description | order_weight | optional | | ---- | ----- | ---- | ----------- | ------------ | -------- | @@ -138,7 +136,7 @@ The base schemas serve as the foundation for every single schema extension you m | ---- | ----- | ---- | ----------- | ---- | -------- | ----------- | ------------ | | ip\_addresses | IP Addresses | IpamIPAddress | many | Attribute | True | List of IP addresses associated with the interface | 1150 | -### HasSubInterface +#### HasSubInterface - **Description:** A generic interface that can have sub-interfaces - **Include in Menu:** ❌ @@ -151,7 +149,7 @@ The base schemas serve as the foundation for every single schema extension you m ### Nodes -### DeviceType +#### DeviceType - **Description:** A model of device - **Label:** Device Type @@ -163,7 +161,7 @@ The base schemas serve as the foundation for every single schema extension you m - **Order By:**manufacturer__name__value, name__value - **Uniqueness Constraints:**manufacturer + name__value -#### Attributes +##### Attributes | name | kind | unique | order_weight | optional | label | default_value | | ---- | ---- | ------ | ------------ | -------- | ----- | ------------- | @@ -182,7 +180,7 @@ The base schemas serve as the foundation for every single schema extension you m | manufacturer | OrganizationManufacturer | one | Attribute | 1250 | False | | tags | BuiltinTag | many | Attribute | 2000 | True | -### Platform +#### Platform - **Description:** A Platform represent the type of software running on a device. - **Label:** Platform @@ -194,7 +192,7 @@ The base schemas serve as the foundation for every single schema extension you m - **Order By:**manufacturer__name__value, name__value - **Uniqueness Constraints:**name__value -#### Attributes +##### Attributes | name | kind | unique | order_weight | optional | | ---- | ---- | ------ | ------------ | -------- | @@ -213,27 +211,27 @@ The base schemas serve as the foundation for every single schema extension you m | devices | DcimGenericDevice | True | many | 1350 | | | manufacturer | OrganizationManufacturer | | one | 1300 | Attribute | -### Device +#### Device - **Description:** A configurable network device for managing and directing data traffic, including routers, switches... - **Label:** Network Device - **Icon:** clarity:network-switch-solid - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | optional | order_weight | choices | | ---- | ---- | -------- | ------------ | ------- | | status | Dropdown | False | 1100 | \`active, provisioning, maintenance, drained\` | | role | Dropdown | True | 1400 | \`core, edge, cpe, spine, leaf, tor\` | -### Physical +#### Physical - **Description:** Physical network port on a device - **Label:** Physical Interface - **Include in Menu:** ❌ -### Virtual +#### Virtual - **Description:** Virtual interface like VLAN or Loopback - **Label:** Virtual Interface @@ -245,13 +243,11 @@ The base schemas serve as the foundation for every single schema extension you m | ---- | ---- | ----------- | ---- | ---------- | ----------- | | parent\_interface | InterfaceHasSubInterface | one | Attribute | sub\_\_interface | Parent interface to which this sub\-interface belongs | -## organization - - **Version:** 1.0 ### Generics -### Generic +#### Generic - **Description:** An organization represent a legal entity, a company. - **Label:** Organization @@ -263,7 +259,7 @@ The base schemas serve as the foundation for every single schema extension you m - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | unique | order_weight | optional | | ---- | ---- | ------ | ------------ | -------- | @@ -278,7 +274,7 @@ The base schemas serve as the foundation for every single schema extension you m ### Nodes -### Manufacturer +#### Manufacturer - **Description:** Device Manufacturer - **Icon:** mdi:domain @@ -292,20 +288,18 @@ The base schemas serve as the foundation for every single schema extension you m | device\_type | DcimDeviceType | many | True | | platform | DcimPlatform | many | True | -### Provider +#### Provider - **Description:** Circuit or Location Provider - **Icon:** mdi:domain - **Menu Placement:** OrganizationGeneric - **Include in Menu:** ✅ -## location - - **Version:** 1.0 ### Generics -### Generic +#### Generic - **Description:** Generic Location, could be a country, city ... - **Label:** Location @@ -317,7 +311,7 @@ The base schemas serve as the foundation for every single schema extension you m - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | order_weight | unique | optional | | ---- | ---- | ------------ | ------ | -------- | @@ -331,7 +325,7 @@ The base schemas serve as the foundation for every single schema extension you m | ---- | ---- | ---- | -------- | ----------- | | tags | BuiltinTag | Attribute | True | many | -### Hosting +#### Hosting - **Description:** Location directly hosting device and services. - **Include in Menu:** ❌ @@ -343,13 +337,11 @@ The base schemas serve as the foundation for every single schema extension you m | prefixes | Prefixes | IpamPrefix | many | True | | devices | Devices | DcimPhysicalDevice | many | True | -## ipam - - **Version:** 1.0 ### Nodes -### IPAddress +#### IPAddress - **Description:** IP Address - **Label:** IP Address @@ -361,7 +353,7 @@ The base schemas serve as the foundation for every single schema extension you m - **Order By:**address__value - **Uniqueness Constraints:**ip_namespace + address__value -#### Attributes +##### Attributes | name | label | kind | optional | regex | | ---- | ----- | ---- | -------- | ----- | @@ -373,7 +365,7 @@ The base schemas serve as the foundation for every single schema extension you m | ---- | ---- | -------- | ----------- | | interface | InterfaceLayer3 | True | one | -### Prefix +#### Prefix - **Description:** IPv4 or IPv6 network (with mask) - **Label:** Prefix @@ -385,7 +377,7 @@ The base schemas serve as the foundation for every single schema extension you m - **Order By:**prefix__value - **Uniqueness Constraints:**ip_namespace + prefix__value -#### Attributes +##### Attributes | name | kind | choices | optional | | ---- | ---- | ------- | -------- | diff --git a/docs/docs/schema-library.mdx b/docs/docs/schema-library.mdx index 9d715dc..10b64b3 100644 --- a/docs/docs/schema-library.mdx +++ b/docs/docs/schema-library.mdx @@ -64,17 +64,15 @@ title: Schema Library Documentation - [topology](#topology) - [vlan-translation](#vlan-translation) -# Base Schemas +## Base Schemas The base schemas serve as the foundation for every single schema extension you might want to use afterward. This one is mandatory and will unlock access to the extensions section. -## dcim - - **Version:** 1.0 ### Generics -### GenericDevice +#### GenericDevice - **Description:** Generic Device object. - **Label:** Device @@ -86,7 +84,7 @@ The base schemas serve as the foundation for every single schema extension you m - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | unique | order_weight | optional | | ---- | ---- | ------ | ------------ | -------- | @@ -103,12 +101,12 @@ The base schemas serve as the foundation for every single schema extension you m | primary\_address | IpamIPAddress | True | one | | Attribute | 1700 | Primary IP Address | | platform | DcimPlatform | True | one | | Attribute | 1250 | | -### PhysicalDevice +#### PhysicalDevice - **Description:** Generic holding attributes and relationships relevant for physical device. - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | label | description | kind | optional | order_weight | default_value | choices | | ---- | ----- | ----------- | ---- | -------- | ------------ | ------------- | ------- | @@ -123,7 +121,7 @@ The base schemas serve as the foundation for every single schema extension you m | device\_type | DcimDeviceType | True | one | Attribute | 1200 | | | location | LocationHosting | False | one | Attribute | 1500 | Location | -### Endpoint +#### Endpoint - **Description:** Generic Endpoint to receive a connector. - **Include in Menu:** ❌ @@ -134,7 +132,7 @@ The base schemas serve as the foundation for every single schema extension you m | ---- | ---- | -------- | ----------- | ------------ | ---- | | connector | DcimConnector | True | one | 1500 | Attribute | -### Connector +#### Connector - **Description:** Generic Connector to link two endpoints together. - **Include in Menu:** ❌ @@ -145,7 +143,7 @@ The base schemas serve as the foundation for every single schema extension you m | ---- | ---- | -------- | ----------- | ------------ | ---- | | connected\_endpoints | DcimEndpoint | True | many | 1500 | Generic | -### Interface +#### Interface - **Description:** Generic Network Interface - **Label:** Interface @@ -156,7 +154,7 @@ The base schemas serve as the foundation for every single schema extension you m - **Order By:**device__name__value, name__value - **Uniqueness Constraints:**device + name__value -#### Attributes +##### Attributes | name | kind | description | order_weight | optional | label | default_value | choices | | ---- | ---- | ----------- | ------------ | -------- | ----- | ------------- | ------- | @@ -173,25 +171,25 @@ The base schemas serve as the foundation for every single schema extension you m | device | DcimGenericDevice | device\_\_interface | False | one | Parent | 1025 | | tags | BuiltinTag | | True | many | Attribute | 3000 | -### Layer2 +#### Layer2 - **Description:** Layer 2 specific attributes for network interfaces - **Label:** Layer 2 Interface - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | label | kind | optional | choices | description | order_weight | | ---- | ----- | ---- | -------- | ------- | ----------- | ------------ | | l2\_mode | Layer2 Mode | Dropdown | True | \`access, trunk, trunk\_all\` | Layer 2 mode of the interface | 1500 | -### Layer3 +#### Layer3 - **Description:** Layer 3 specific attributes for network interfaces - **Label:** Layer 3 Interface - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | label | kind | description | order_weight | optional | | ---- | ----- | ---- | ----------- | ------------ | -------- | @@ -204,7 +202,7 @@ The base schemas serve as the foundation for every single schema extension you m | ---- | ----- | ---- | ----------- | ---- | -------- | ----------- | ------------ | | ip\_addresses | IP Addresses | IpamIPAddress | many | Attribute | True | List of IP addresses associated with the interface | 1150 | -### HasSubInterface +#### HasSubInterface - **Description:** A generic interface that can have sub-interfaces - **Include in Menu:** ❌ @@ -217,7 +215,7 @@ The base schemas serve as the foundation for every single schema extension you m ### Nodes -### DeviceType +#### DeviceType - **Description:** A model of device - **Label:** Device Type @@ -229,7 +227,7 @@ The base schemas serve as the foundation for every single schema extension you m - **Order By:**manufacturer__name__value, name__value - **Uniqueness Constraints:**manufacturer + name__value -#### Attributes +##### Attributes | name | kind | unique | order_weight | optional | label | default_value | | ---- | ---- | ------ | ------------ | -------- | ----- | ------------- | @@ -248,7 +246,7 @@ The base schemas serve as the foundation for every single schema extension you m | manufacturer | OrganizationManufacturer | one | Attribute | 1250 | False | | tags | BuiltinTag | many | Attribute | 2000 | True | -### Platform +#### Platform - **Description:** A Platform represent the type of software running on a device. - **Label:** Platform @@ -260,7 +258,7 @@ The base schemas serve as the foundation for every single schema extension you m - **Order By:**manufacturer__name__value, name__value - **Uniqueness Constraints:**name__value -#### Attributes +##### Attributes | name | kind | unique | order_weight | optional | | ---- | ---- | ------ | ------------ | -------- | @@ -279,27 +277,27 @@ The base schemas serve as the foundation for every single schema extension you m | devices | DcimGenericDevice | True | many | 1350 | | | manufacturer | OrganizationManufacturer | | one | 1300 | Attribute | -### Device +#### Device - **Description:** A configurable network device for managing and directing data traffic, including routers, switches... - **Label:** Network Device - **Icon:** clarity:network-switch-solid - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | optional | order_weight | choices | | ---- | ---- | -------- | ------------ | ------- | | status | Dropdown | False | 1100 | \`active, provisioning, maintenance, drained\` | | role | Dropdown | True | 1400 | \`core, edge, cpe, spine, leaf, tor\` | -### Physical +#### Physical - **Description:** Physical network port on a device - **Label:** Physical Interface - **Include in Menu:** ❌ -### Virtual +#### Virtual - **Description:** Virtual interface like VLAN or Loopback - **Label:** Virtual Interface @@ -311,13 +309,11 @@ The base schemas serve as the foundation for every single schema extension you m | ---- | ---- | ----------- | ---- | ---------- | ----------- | | parent\_interface | InterfaceHasSubInterface | one | Attribute | sub\_\_interface | Parent interface to which this sub\-interface belongs | -## organization - - **Version:** 1.0 ### Generics -### Generic +#### Generic - **Description:** An organization represent a legal entity, a company. - **Label:** Organization @@ -329,7 +325,7 @@ The base schemas serve as the foundation for every single schema extension you m - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | unique | order_weight | optional | | ---- | ---- | ------ | ------------ | -------- | @@ -344,7 +340,7 @@ The base schemas serve as the foundation for every single schema extension you m ### Nodes -### Manufacturer +#### Manufacturer - **Description:** Device Manufacturer - **Icon:** mdi:domain @@ -358,20 +354,18 @@ The base schemas serve as the foundation for every single schema extension you m | device\_type | DcimDeviceType | many | True | | platform | DcimPlatform | many | True | -### Provider +#### Provider - **Description:** Circuit or Location Provider - **Icon:** mdi:domain - **Menu Placement:** OrganizationGeneric - **Include in Menu:** ✅ -## location - - **Version:** 1.0 ### Generics -### Generic +#### Generic - **Description:** Generic Location, could be a country, city ... - **Label:** Location @@ -383,7 +377,7 @@ The base schemas serve as the foundation for every single schema extension you m - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | order_weight | unique | optional | | ---- | ---- | ------------ | ------ | -------- | @@ -397,7 +391,7 @@ The base schemas serve as the foundation for every single schema extension you m | ---- | ---- | ---- | -------- | ----------- | | tags | BuiltinTag | Attribute | True | many | -### Hosting +#### Hosting - **Description:** Location directly hosting device and services. - **Include in Menu:** ❌ @@ -409,13 +403,11 @@ The base schemas serve as the foundation for every single schema extension you m | prefixes | Prefixes | IpamPrefix | many | True | | devices | Devices | DcimPhysicalDevice | many | True | -## ipam - - **Version:** 1.0 ### Nodes -### IPAddress +#### IPAddress - **Description:** IP Address - **Label:** IP Address @@ -427,7 +419,7 @@ The base schemas serve as the foundation for every single schema extension you m - **Order By:**address__value - **Uniqueness Constraints:**ip_namespace + address__value -#### Attributes +##### Attributes | name | label | kind | optional | regex | | ---- | ----- | ---- | -------- | ----- | @@ -439,7 +431,7 @@ The base schemas serve as the foundation for every single schema extension you m | ---- | ---- | -------- | ----------- | | interface | InterfaceLayer3 | True | one | -### Prefix +#### Prefix - **Description:** IPv4 or IPv6 network (with mask) - **Label:** Prefix @@ -451,7 +443,7 @@ The base schemas serve as the foundation for every single schema extension you m - **Order By:**prefix__value - **Uniqueness Constraints:**ip_namespace + prefix__value -#### Attributes +##### Attributes | name | kind | choices | optional | | ---- | ---- | ------- | -------- | @@ -466,19 +458,16 @@ The base schemas serve as the foundation for every single schema extension you m | location | LocationHosting | True | one | Attribute | 1300 | | | | gateway | IpamIPAddress | True | one | Attribute | 1500 | L3 Gateway | prefix\_\_gateway | -# Routing Policies (PIM) +## Routing Policies (PIM) This schema inherits the `RoutingPolicy` schema and removes `import_policies` and `export_policies` attributes. However it adds a number of relationships to `RoutingPIM`. -Dependencies: `base, extensions/routing, extensions/routing_policies, extensions/routing_pim` - -## routing_policies_pim - +- **Dependencies:** `base, extensions/routing, extensions/routing_policies, extensions/routing_pim` - **Version:** 1.0 ### Nodes -### PolicyPIM +#### PolicyPIM - **Description:** A routing policiers for PIM - **Label:** PIM Routing Policies @@ -503,26 +492,23 @@ Dependencies: `base, extensions/routing, extensions/routing_policies, extensions | import\_routing\_policies | Import Routing Policies | RoutingPolicyPIM | pim\_\_import\_policies | The routing\-policies used by this instance for import\. | Generic | many | | export\_routing\_policies | Export Routing Policies | RoutingPolicyPIM | pim\_\_export\_policies | The routing\-policies used by this instance for export\. | Generic | many | -# Topology +## Topology This schema extension introduces abstract network pods and services running in the pods, such as MPLS and EVPN. -Dependencies: `base` - -## topology - +- **Dependencies:** `base` - **Version:** 1.0 ### Generics -### Generic +#### Generic - **Description:** Generic model for topology. - **Label:** Topology - **Icon:** carbon:network-3 - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | order_weight | optional | | ---- | ---- | ------------ | -------- | @@ -534,19 +520,16 @@ Dependencies: `base` | ---- | ---- | -------- | ----------- | ---- | | location | LocationGeneric | True | one | Attribute | -# Cluster +## Cluster This schema extension contains the foundations to capture clusters. With this one in place you can unlock various clusters flavors (hosting cluster able to host VMs, firewall clusters built with specific appliances ...) -Dependencies: `base, extensions/compute` - -## cluster - +- **Dependencies:** `base, extensions/compute` - **Version:** 1.0 ### Generics -### Generic +#### Generic - **Description:** A cluster of machines hosting services or other machines. - **Label:** Clusters @@ -558,7 +541,7 @@ Dependencies: `base, extensions/compute` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | description | unique | order_weight | optional | | ---- | ---- | ----------- | ------ | ------------ | -------- | @@ -572,7 +555,7 @@ Dependencies: `base, extensions/compute` | location | Location | LocationGeneric | False | many | Attribute | 1400 | | tags | | BuiltinTag | True | many | Attribute | 2000 | -### GenericComputeUnitNodes +#### GenericComputeUnitNodes - **Description:** A generic to apply on clusters that can be built out of generic compute units. - **Include in Menu:** ❌ @@ -601,19 +584,16 @@ Dependencies: `base, extensions/compute` | ---- | ----- | ---- | ----------- | ---- | ----------- | -------- | | clusters | Clusters | ClusterGeneric | many | Component | All clusters available on that location\. | True | -# SNMP +## SNMP This schema extension contains models for SNMP Communities and SNMP Clients. As you can see this extension is not linked to Tenancy or Device, as you could decide to link the Community to different models based on your use case. -Dependencies: `base` - -## snmp - +- **Dependencies:** `base` - **Version:** 1.0 ### Generics -### Community +#### Community - **Description:** Generic model for SNMP community configurations. - **Label:** SNMP Community @@ -625,7 +605,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | order_weight | optional | | ---- | ---- | ------------ | -------- | @@ -640,7 +620,7 @@ Dependencies: `base` ### Nodes -### CommunityV2 +#### CommunityV2 - **Description:** SNMP v1/v2c community configuration. - **Label:** SNMP v1/v2c @@ -653,14 +633,14 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | order_weight | enum | | ---- | ---- | ------------ | ---- | | community\_string | Password | 1300 | | | access | Text | 1200 | \['Read\-Only', 'Read\-Write'\] | -### CommunityV3 +#### CommunityV3 - **Description:** SNMP version 3 configuration with enhanced security. - **Label:** SNMP v3 @@ -673,7 +653,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | order_weight | label | enum | optional | choices | | ---- | ---- | ------------ | ----- | ---- | -------- | ------- | @@ -684,7 +664,7 @@ Dependencies: `base` | privacy\_password | Password | 1700 | Privacy Password | | True | \`\` | | security\_level | Dropdown | 1200 | Security Level | | | \`noAuthNoPriv, authNoPriv, authPriv\` | -### Client +#### Client - **Description:** Represents an SNMP client that interacts with SNMP Community. - **Label:** SNMP Client @@ -697,7 +677,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | order_weight | label | optional | | ---- | ---- | ------------ | ----- | -------- | @@ -710,14 +690,11 @@ Dependencies: `base` | ---- | ---- | ----------- | ------------ | | community | SnmpCommunity | many | 1200 | -# Interface Breakdown +## Interface Breakdown This schema extension introduces relationships to support breakout interfaces, enabling you to document the breakdown of a physical interface into smaller physical interfaces. -Dependencies: `base` - -## interface_breakout - +- **Dependencies:** `base` - **Version:** 1.0 ### Extensions @@ -737,19 +714,16 @@ Dependencies: `base` | breakout\_child\_interfaces | InterfacePhysical | Breakout child interface\(s\) | True | many | Attribute | physical\_\_breakout | outbound | Interfaces resulting from the breakout | 1650 | | breakout\_parent\_interface | InterfacePhysical | Breakout parent interface | True | one | Attribute | physical\_\_breakout | inbound | Interface from which breakout is created | 1700 | -# Routing Policies BGP +## Routing Policies BGP This extension is using the Routing Policies extensions and the Routing BGP one together. -Dependencies: `base, extensions/routing, extensions/routing_policies, extensions/routing_bgp` - -## routing_policies_bgp - +- **Dependencies:** `base, extensions/routing, extensions/routing_policies, extensions/routing_bgp` - **Version:** 1.0 ### Nodes -### PolicyBGP +#### PolicyBGP - **Description:** A routing policiers for BGP - **Label:** BGP Routing Policies @@ -790,19 +764,16 @@ Dependencies: `base, extensions/routing, extensions/routing_policies, extensions | import\_routing\_policies | Import Routing Policies | RoutingPolicy | bgp\_\_import\_policies | The routing\-policies used by this instance for import\. | Generic | many | | export\_routing\_policies | Export Routing Policies | RoutingPolicy | bgp\_\_export\_policies | The routing\-policies used by this instance for export\. | Generic | many | -# BGP Route Reflector +## BGP Route Reflector This schema extension extend the BGP extension to add BGP Route Reflector Clustering. -Dependencies: `base, extensions/routing, extensions/routing_bgp` - -## bgp_rr - +- **Dependencies:** `base, extensions/routing, extensions/routing_bgp` - **Version:** 1.0 ### Nodes -### BGPRRCluster +#### BGPRRCluster - **Description:** A Route Reflector (RR) Cluster used for grouping internal peers - **Label:** Route Reflector Cluster @@ -814,7 +785,7 @@ Dependencies: `base, extensions/routing, extensions/routing_bgp` - **Order By:** - **Uniqueness Constraints:**name__value -#### Attributes +##### Attributes | name | kind | description | order_weight | optional | | ---- | ---- | ----------- | ------------ | -------- | @@ -838,7 +809,7 @@ Dependencies: `base, extensions/routing, extensions/routing_bgp` | ---- | ----- | ---- | ----------- | ---- | ------------ | | rr\_cluster | RR Cluster | RoutingBGPRRCluster | one | Attribute | 1600 | -# SFP +## SFP This schema extension gives you all the models you need to document Small Form-factor Pluggable (SFP). @@ -850,22 +821,19 @@ Improvements: - You could plug any SFP into any equipment interface (e.g. a virtual interface ...) - You could link a SFP to an interface AND a location ... -Dependencies: `base` - -## sfp - +- **Dependencies:** `base` - **Version:** 1.0 ### Generics -### GenericSFP +#### GenericSFP - **Description:** Generic base for all Small Form-factor Pluggable (SFP) transceivers. - **Label:** SFP - **Icon:** mdi:gpu - **Include in Menu:** ✅ -#### Attributes +##### Attributes | name | kind | optional | order_weight | description | choices | default_value | | ---- | ---- | -------- | ------------ | ----------- | ------- | ------------- | @@ -884,7 +852,7 @@ Dependencies: `base` ### Nodes -### StandardSFP +#### StandardSFP - **Description:** Standard SFP module for various types (e.g., LR, SR, T). - **Label:** Standard SFP @@ -892,7 +860,7 @@ Dependencies: `base` - **Menu Placement:** DcimGenericSFP - **Include in Menu:** ❌ -### BidiSFP +#### BidiSFP - **Description:** Bidirectional SFP supporting two wavelengths for single-fiber operation. - **Label:** Bidirectional SFP @@ -900,7 +868,7 @@ Dependencies: `base` - **Menu Placement:** DcimGenericSFP - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | label | kind | optional | description | order_weight | | ---- | ----- | ---- | -------- | ----------- | ------------ | @@ -933,19 +901,16 @@ Dependencies: `base` | ---- | ----- | ---- | ----------- | -------- | | sfps | SFPs | DcimGenericSFP | many | True | -# Circuit +## Circuit This schema extension contains Circuits and ways to connect them with your infrastructure! The circuit could be a fiber connecting two sites, you would then have two endpoints, one on each site. -Dependencies: `base, extensions/location_minimal` - -## circuit - +- **Dependencies:** `base, extensions/location_minimal` - **Version:** 1.0 ### Nodes -### Circuit +#### Circuit - **Description:** A Circuit represent service operated by a provider. - **Label:** Circuit @@ -957,7 +922,7 @@ Dependencies: `base, extensions/location_minimal` - **Order By:**circuit_id__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | unique | optional | description | choices | | ---- | ---- | ------ | -------- | ----------- | ------- | @@ -974,7 +939,7 @@ Dependencies: `base, extensions/location_minimal` | location | LocationHosting | True | one | Attribute | Location | 1500 | | enpoints | DcimCircuitEndpoint | True | many | Component | | | -### CircuitEndpoint +#### CircuitEndpoint - **Description:** A circuit endpoint, could be a position in a MMR... - **Label:** Circuit Endpoint @@ -987,7 +952,7 @@ Dependencies: `base, extensions/location_minimal` - **Order By:**name__value - **Uniqueness Constraints:**circuit + name__value -#### Attributes +##### Attributes | name | kind | description | order_weight | optional | choices | | ---- | ---- | ----------- | ------------ | -------- | ------- | @@ -1020,19 +985,16 @@ Dependencies: `base, extensions/location_minimal` | ---- | ---- | ----------- | -------- | | circuits | DcimCircuit | many | True | -# BGP Communities +## BGP Communities This schema extension adds the BGP Communities models. -Dependencies: `base, extensions/routing` - -## bgp_community - +- **Dependencies:** `base, extensions/routing` - **Version:** 1.0 ### Nodes -### BGPCommunity +#### BGPCommunity - **Description:** Defines a BGP community. - **Label:** BGP Community @@ -1044,7 +1006,7 @@ Dependencies: `base, extensions/routing` - **Order By:**name__value - **Uniqueness Constraints:**name__value, community__value -#### Attributes +##### Attributes | name | kind | description | order_weight | optional | | ---- | ---- | ----------- | ------------ | -------- | @@ -1059,19 +1021,16 @@ Dependencies: `base, extensions/routing` | routing\_policy | Routing Policies | RoutingPolicy | The BGP Policies using this BGP Community\. | Generic | many | | | | tags | | BuiltinTag | | Attribute | many | True | 3000 | -# Cross Connect +## Cross Connect This extension contains schema to capture Cross Connect. You can see it as "a cable operated by a provider". You will be able to attach it to a location and then connect endpoints to it (e.g. rear interface of a patch panel, circuit endpoint ...) -Dependencies: `base` - -## cross_connect - +- **Dependencies:** `base` - **Version:** 1.0 ### Nodes -### CrossConnect +#### CrossConnect - **Description:** Cross-connect between different endpoints within a datacenter. - **Label:** Cross-Connect @@ -1083,7 +1042,7 @@ Dependencies: `base` - **Order By:**provider__name__value - **Uniqueness Constraints:**provider + identifier__value -#### Attributes +##### Attributes | name | kind | order_weight | optional | choices | | ---- | ---- | ------------ | -------- | ------- | @@ -1098,65 +1057,59 @@ Dependencies: `base` | location | Location | LocationHosting | False | one | Attribute | 1100 | | provider | | OrganizationProvider | False | one | Attribute | 1000 | -# Routing Policies Aggregate +## Routing Policies Aggregate This extension is using the Routing Policies extensions and the Routing Aggregate one together. -Dependencies: `base, extensions/routing, extensions/routing_policies, extensions/routing_aggregate` - -## routing_policies_aggregate - +- **Dependencies:** `base, extensions/routing, extensions/routing_policies, extensions/routing_aggregate` - **Version:** 1.0 ### Nodes -### PolicyAggregate +#### PolicyAggregate - **Description:** A routing policiers for Aggregate - **Label:** Aggregate Routing Policies - **Icon:** carbon:deployment-policy - **Include in Menu:** ❌ -# Location Minimal +## Location Minimal This schema extension is minimal but will provide you with basic items to store location related data. -Dependencies: `base` - -## location_minimal - +- **Dependencies:** `base` - **Version:** 1.0 ### Nodes -### Country +#### Country - **Label:** Country - **Icon:** gis:search-country - **Menu Placement:** LocationGeneric - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | optional | order_weight | | ---- | ---- | -------- | ------------ | | timezone | Text | True | 1300 | -### Metro +#### Metro - **Label:** Metro - **Icon:** healthicons:city - **Menu Placement:** LocationGeneric - **Include in Menu:** ❌ -### Site +#### Site - **Label:** Site - **Icon:** ri:building-line - **Menu Placement:** LocationGeneric - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | unique | optional | order_weight | | ---- | ---- | ------ | -------- | ------------ | @@ -1169,14 +1122,14 @@ Dependencies: `base` | ---- | ---- | -------- | ----------- | | owner | OrganizationGeneric | True | one | -### Rack +#### Rack - **Label:** Rack - **Icon:** clarity:rack-server-line - **Menu Placement:** LocationGeneric - **Include in Menu:** ✅ -#### Attributes +##### Attributes | name | kind | unique | optional | order_weight | label | default_value | | ---- | ---- | ------ | -------- | ------------ | ----- | ------------- | @@ -1199,19 +1152,16 @@ Dependencies: `base` | ---- | ---- | ----------- | -------- | | sites | LocationSite | many | True | -# VRRP +## VRRP This schema extension contains models for VRRP. -Dependencies: `base` - -## vrrp - +- **Dependencies:** `base` - **Version:** 1.0 ### Nodes -### VRRPGroup +#### VRRPGroup - **Description:** VRRP Group configuration - **Label:** VRRP Group @@ -1223,7 +1173,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:**name__value -#### Attributes +##### Attributes | name | kind | label | unique | description | order_weight | optional | | ---- | ---- | ----- | ------ | ----------- | ------------ | -------- | @@ -1238,7 +1188,7 @@ Dependencies: `base` | ip\_address | cascade | VRRP IP \(v4 or v6\) | IP Address | IpamIPAddress | True | many | Attribute | 1200 | | vrrp\_interfaces | cascade | | VRRP Interfaces | NetworkVRRPInterface | | many | Component | 1300 | -### VRRPInterface +#### VRRPInterface - **Description:** VRRP Interface configuration - **Label:** VRRP Interface @@ -1251,7 +1201,7 @@ Dependencies: `base` - **Order By:**priority__value - **Uniqueness Constraints:**vrrp_group + interface -#### Attributes +##### Attributes | name | kind | label | description | regex | default_value | order_weight | | ---- | ---- | ----- | ----------- | ----- | ------------- | ------------ | @@ -1282,19 +1232,16 @@ Dependencies: `base` | ---- | ---- | ---- | ----------- | ----------- | ----- | ------------ | | vrrp | Component | NetworkVRRPGroup | Part of VRRP Group | one | VRRP Group | 1600 | -# Exchange Points (IXP) +## Exchange Points (IXP) This schema extension contains all you need to model anything revolving around internet peering (Exchange points ...)! -Dependencies: `base, extensions/routing, extensions/routing_bgp, extensions/routing_bgp_community` - -## peering_ixp - +- **Dependencies:** `base, extensions/routing, extensions/routing_bgp, extensions/routing_bgp_community` - **Version:** 1.0 ### Nodes -### IXP +#### IXP - **Description:** An Internet Exchange Point (IXP) for peering - **Label:** Internet Exchange @@ -1306,7 +1253,7 @@ Dependencies: `base, extensions/routing, extensions/routing_bgp, extensions/rout - **Order By:**name__value - **Uniqueness Constraints:**name__value -#### Attributes +##### Attributes | name | kind | unique | description | order_weight | optional | choices | default_value | | ---- | ---- | ------ | ----------- | ------------ | -------- | ------- | ------------- | @@ -1325,7 +1272,7 @@ Dependencies: `base, extensions/routing, extensions/routing_bgp, extensions/rout | bgp\_communities | RoutingBGPCommunity | True | many | Generic | BGP communities associated with the session | | BGP Communities | | | tags | BuiltinTag | True | many | Attribute | | 3000 | | | -### IXPConnection +#### IXPConnection - **Description:** A connection to an Internet Exchange Point (IXP) - **Label:** IXP Connection @@ -1338,7 +1285,7 @@ Dependencies: `base, extensions/routing, extensions/routing_bgp, extensions/rout - **Order By:**name__value - **Uniqueness Constraints:**name__value -#### Attributes +##### Attributes | name | kind | unique | description | order_weight | optional | label | choices | default_value | | ---- | ---- | ------ | ----------- | ------------ | -------- | ----- | ------- | ------------- | @@ -1359,19 +1306,16 @@ Dependencies: `base, extensions/routing, extensions/routing_bgp, extensions/rout | router | | The router this IXP connection is connected to | DcimDevice | | one | Attribute | 1400 | | | tags | | | BuiltinTag | | many | Attribute | 3000 | | -# VLAN +## VLAN This schema extension contains models to support VLANs in you network. -Dependencies: `base` - -## vlan - +- **Dependencies:** `base` - **Version:** 1.0 ### Nodes -### VLAN +#### VLAN - **Description:** A VLAN is isolated layer two domain - **Label:** VLAN @@ -1384,7 +1328,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:**l2domain + vlan_id__value -#### Attributes +##### Attributes | name | kind | optional | choices | | ---- | ---- | -------- | ------- | @@ -1402,14 +1346,14 @@ Dependencies: `base` | prefixes | IpamPrefix | True | many | | | | l2domain | IpamL2Domain | False | one | Attribute | 1200 | -### L2Domain +#### L2Domain - **Description:** Represents layer 2 domain. - **Label:** Layer 2 Domain - **Icon:** mdi:domain-switch - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | order_weight | | ---- | ---- | ------------ | @@ -1448,19 +1392,16 @@ Dependencies: `base` | ---- | ----- | ---- | ----------- | -------- | | vlans | VLANs | IpamVLAN | many | True | -# Routing Policies OSPF +## Routing Policies OSPF This extension is using the Routing Policies extensions and the Routing OSPF one together. -Dependencies: `base, extensions/routing, extensions/routing_policies, extensions/routing_ospf` - -## routing_policies_ospf - +- **Dependencies:** `base, extensions/routing, extensions/routing_policies, extensions/routing_ospf` - **Version:** 1.0 ### Nodes -### PolicyOSPF +#### PolicyOSPF - **Description:** A routing policiers for OSPF - **Label:** OSPF Routing Policies @@ -1485,22 +1426,19 @@ Dependencies: `base, extensions/routing, extensions/routing_policies, extensions | import\_routing\_policies | Import Routing Policies | RoutingPolicyOSPF | ospf\_\_import\_policies | The routing\-policies used by this instance for import\. | Generic | many | | export\_routing\_policies | Export Routing Policies | RoutingPolicyOSPF | ospf\_\_export\_policies | The routing\-policies used by this instance for export\. | Generic | many | -# Physical Disks +## Physical Disks Simple schema allowing you to capture physical disks information for the sake of inventory and lifecycle management. > [!NOTE] > This extension is compatible with all sort of device. You can apply the generic "DeviceWithPhysicalDisks" to particular model to enable disks tracking. You might also link that schema to location for instance to capture spares. -Dependencies: `base` - -## physical_disk - +- **Dependencies:** `base` - **Version:** 1.0 ### Generics -### DeviceWithPhysicalDisks +#### DeviceWithPhysicalDisks - **Description:** Generic that hold relationship toward physical disks. To apply on device that can have physical disks. - **Include in Menu:** ❌ @@ -1513,7 +1451,7 @@ Dependencies: `base` ### Nodes -### PhysicalDisk +#### PhysicalDisk - **Description:** Physical Disk - **Label:** Physical Disk @@ -1525,7 +1463,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:**name__value + device -#### Attributes +##### Attributes | name | kind | unique | optional | order_weight | description | choices | label | | ---- | ---- | ------ | -------- | ------------ | ----------- | ------- | ----- | @@ -1542,24 +1480,21 @@ Dependencies: `base` | ---- | ---- | -------- | ----------- | ---- | ------------ | | device | DcimDeviceWithPhysicalDisks | False | one | Parent | 800 | -# Compute +## Compute With this schema extension in place you will be able to capture all your physical servers. It also gives you the baseline to build virtualization. You might consider HostingCluster extension to go with! -Dependencies: `base` - -## compute - +- **Dependencies:** `base` - **Version:** 1.0 ### Generics -### GenericUnit +#### GenericUnit - **Description:** A generic unit that can compute (e.g. server, vm ...). - **Include in Menu:** ❌ -### HostVirtualMachine +#### HostVirtualMachine - **Description:** A generic unit that can host VM - **Include in Menu:** ❌ @@ -1572,27 +1507,27 @@ Dependencies: `base` ### Nodes -### PhysicalServer +#### PhysicalServer - **Description:** A physical server with fixed resources and specific hardware characteristics. - **Label:** Physical Server - **Icon:** mdi:server - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | optional | order_weight | choices | | ---- | ---- | -------- | ------------ | ------- | | status | Dropdown | False | 1100 | \`active, provisioning, maintenance, drained\` | -### VirtualMachine +#### VirtualMachine - **Description:** A virtual machine hosted on a server or a cluster. - **Label:** Virtual Machine - **Icon:** carbon:virtual-machine - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | optional | description | order_weight | choices | | ---- | ---- | -------- | ----------- | ------------ | ------- | @@ -1607,19 +1542,16 @@ Dependencies: `base` | ---- | ---- | -------- | ----------- | ---- | ------------ | | host | VirtualizationHostVirtualMachine | False | one | Attribute | 1500 | -# PIM +## PIM This schema extension contains all you need to model the PIM Protocol. -Dependencies: `base, extensions/routing` - -## pim - +- **Dependencies:** `base, extensions/routing` - **Version:** 1.0 ### Nodes -### PIM +#### PIM - **Description:** Protocol Independent Multicast (PIM) instance on a Virtual Router. - **Label:** PIM @@ -1631,7 +1563,7 @@ Dependencies: `base, extensions/routing` - **Order By:**vrf__name__value, device__name__value - **Uniqueness Constraints:**device + vrf -#### Attributes +##### Attributes | name | kind | optional | default_value | description | order_weight | | ---- | ---- | -------- | ------------- | ----------- | ------------ | @@ -1646,7 +1578,7 @@ Dependencies: `base, extensions/routing` | rp\_address | IpamIPAddress | True | Rendezvous Point \(RP\) address for PIM\. | one | Attribute | | | | pim\_interfaces | RoutingPIMInterface | True | | many | Component | PIM Interfaces | pim\_\_piminterfaces | -### PIMInterface +#### PIMInterface - **Description:** Interface configuration for PIM. - **Label:** PIM Interface @@ -1658,7 +1590,7 @@ Dependencies: `base, extensions/routing` - **Order By:**description__value - **Uniqueness Constraints:**pim + interface -#### Attributes +##### Attributes | name | kind | optional | unique | description | order_weight | choices | default_value | | ---- | ---- | -------- | ------ | ----------- | ------------ | ------- | ------------- | @@ -1674,26 +1606,23 @@ Dependencies: `base, extensions/routing` | pim | PIM | RoutingPIM | pim\_\_piminterfaces | False | one | Parent | | | interface | | InterfaceLayer3 | | False | one | Attribute | 1200 | -# Cable +## Cable This schema extension contains a basic Cable model allowing you to connect two endpoints. -Dependencies: `base` - -## cable - +- **Dependencies:** `base` - **Version:** 1.0 ### Nodes -### Cable +#### Cable - **Description:** Physical cable connecting two endpoints - **Label:** Cable - **Icon:** mdi:cable-data - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | optional | order_weight | choices | label | | ---- | ---- | -------- | ------------ | ------- | ----- | @@ -1703,29 +1632,26 @@ Dependencies: `base` | label | Text | True | 1200 | \`\` | | | length | Number | True | 1350 | \`\` | Length \(in cm\) | -# Patch Panel +## Patch Panel This schema extension allows you to capture patch panel related information like rear/front interfaces and mapping between them. You can insert the patch panel into a rack and leverage the device type model. Finally you can also capture information about potential modules you would insert into your patch panel. > [!NOTE] > This extension is compatible with all sort of connectors, meaning you can plug cable, circuits, cross-connect to front & rear interfaces! -Dependencies: `base` - -## patch_panel - +- **Dependencies:** `base` - **Version:** 1.0 ### Generics -### GenericPatchPanelInterface +#### GenericPatchPanelInterface - **Label:** Patch Panel Interfaces - **Icon:** mdi:ethernet - **Menu Placement:** DcimPatchPanel - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | order_weight | optional | choices | | ---- | ---- | ------------ | -------- | ------- | @@ -1735,7 +1661,7 @@ Dependencies: `base` ### Nodes -### PatchPanel +#### PatchPanel - **Description:** A Patch Panel used for managing network cable connections in a data center or telecom setup. - **Label:** Patch Panel @@ -1747,7 +1673,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | unique | order_weight | label | optional | description | | ---- | ---- | ------ | ------------ | ----- | -------- | ----------- | @@ -1763,7 +1689,7 @@ Dependencies: `base` | rear\_interfaces | DcimRearPatchPanelInterface | rear\_interfaces | True | many | Component | | modules | DcimPatchPanelModule | | True | many | Component | -### FrontPatchPanelInterface +#### FrontPatchPanelInterface - **Label:** Patch Panel Front Interfaces - **Menu Placement:** DcimGenericPatchPanelInterface @@ -1781,7 +1707,7 @@ Dependencies: `base` | corresponding\_front\_rear | Corresponding rear interface | DcimRearPatchPanelInterface | 1200 | True | one | Attribute | | | patch\_panel | | DcimPatchPanel | 900 | False | one | Parent | front\_interfaces | -### RearPatchPanelInterface +#### RearPatchPanelInterface - **Label:** Patch Panel Rear Interfaces - **Menu Placement:** DcimGenericPatchPanelInterface @@ -1799,7 +1725,7 @@ Dependencies: `base` | corresponding\_front\_rear | Corresponding front interfaces | DcimFrontPatchPanelInterface | 1200 | True | many | Attribute | | | patch\_panel | | DcimPatchPanel | 900 | False | one | Parent | rear\_interfaces | -### PatchPanelModule +#### PatchPanelModule - **Label:** Patch Panel Module - **Icon:** mdi:expansion-card @@ -1811,7 +1737,7 @@ Dependencies: `base` - **Order By:**patch_panel__name__value, position__value - **Uniqueness Constraints:**patch_panel + position__value -#### Attributes +##### Attributes | name | kind | order_weight | description | label | optional | choices | | ---- | ---- | ------------ | ----------- | ----- | -------- | ------- | @@ -1827,26 +1753,23 @@ Dependencies: `base` | ---- | ---- | -------- | ------------ | ----------- | ---- | | patch\_panel | DcimPatchPanel | False | 900 | one | Parent | -# Aggregate +## Aggregate This schema extension contains all you need to model the Aggregate Routing Protocol. -Dependencies: `base, extensions/routing` - -## aggregate - +- **Dependencies:** `base, extensions/routing` - **Version:** 1.0 ### Nodes -### AggregateRoute +#### AggregateRoute - **Description:** Aggregate Protocol with action and BGP communities - **Label:** Aggregate Routes - **Icon:** grommet-icons:aggregate - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | label | kind | optional | default_value | order_weight | | ---- | ----- | ---- | -------- | ------------- | ------------ | @@ -1860,26 +1783,23 @@ Dependencies: `base, extensions/routing` | ---- | ---- | ---- | ----------- | ------------ | | destination | Attribute | IpamPrefix | Destination network for the static route\. | 1200 | -# DWDM +## DWDM This schema extension contains models for OADM (Optical Add Drop Multiplexer) supporting various WDM (Wavelength Division Multiplexing) technologies such as DWDM (Dense Wavelength Division Multiplexing) or CWDM (Coarse Wavelength Division Multiplexing). With some vendors, the tunable optics are not configured via the channel number but via the wavelength and/or the frequency. This model provides a unique entry in Infrahub for those. -Dependencies: `base, extensions/sfp` - -## dwdm - +- **Dependencies:** `base, extensions/sfp` - **Version:** 1.0 ### Generics -### GenericOadmInterface +#### GenericOadmInterface - **Label:** Optical Multiplexer Interfaces - **Icon:** mdi:ethernet - **Menu Placement:** DcimOpticalMultiplexer - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | order_weight | optional | choices | | ---- | ---- | ------------ | -------- | ------- | @@ -1889,7 +1809,7 @@ Dependencies: `base, extensions/sfp` ### Nodes -### OpticalMultiplexer +#### OpticalMultiplexer - **Description:** An OADM (Optical Add Drop Multiplexer) supporting various WDM (Wavelength Division Multiplexing) technologies. - **Label:** Optical Multiplexer @@ -1901,7 +1821,7 @@ Dependencies: `base, extensions/sfp` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | unique | order_weight | description | optional | choices | default_value | | ---- | ---- | ------ | ------------ | ----------- | -------- | ------- | ------------- | @@ -1916,7 +1836,7 @@ Dependencies: `base, extensions/sfp` | front\_interfaces | DcimOadmFrontInterface | front\_interfaces | True | many | Component | | rear\_interface | DcimOadmRearInterface | rear\_interfaces | True | one | Component | -### OadmFrontInterface +#### OadmFrontInterface - **Label:** Optical Multiplexer Front Interfaces - **Menu Placement:** DcimGenericOadmInterface @@ -1934,7 +1854,7 @@ Dependencies: `base, extensions/sfp` | optical\_multiplexer | DcimOpticalMultiplexer | 900 | front\_interfaces | False | one | Parent | | channels | DcimWdmChannel | 1200 | | True | many | Attribute | -### OadmRearInterface +#### OadmRearInterface - **Label:** Optical Multiplexer Rear Interfaces - **Menu Placement:** DcimGenericOadmInterface @@ -1951,7 +1871,7 @@ Dependencies: `base, extensions/sfp` | ---- | ---- | ------------ | ---------- | -------- | ----------- | ---- | | optical\_multiplexer | DcimOpticalMultiplexer | 900 | rear\_interface | False | one | Parent | -### WdmChannel +#### WdmChannel - **Description:** A WDM channel with its wavelength and frequency. - **Label:** WDM Channel @@ -1963,7 +1883,7 @@ Dependencies: `base, extensions/sfp` - **Order By:**wdm_type__value, channel__value - **Uniqueness Constraints:**wdm_type__value + channel__value + wavelength__value + frequency__value, wdm_type__value + channel__value -#### Attributes +##### Attributes | name | kind | description | order_weight | optional | choices | default_value | label | | ---- | ---- | ----------- | ------------ | -------- | ------- | ------------- | ----- | @@ -1972,7 +1892,7 @@ Dependencies: `base, extensions/sfp` | wavelength | Text | Wavelength of the channel in nm\. | | | \`\` | | Wavelength \(nm\) | | frequency | Text | Frequency of the channel in GHz\. | | | \`\` | | Frequency \(GHz\) | -### WdmSFP +#### WdmSFP - **Description:** SFP with configuration for Wavelength Division Multiplexing. - **Label:** WDM SFP @@ -1980,7 +1900,7 @@ Dependencies: `base, extensions/sfp` - **Menu Placement:** DcimGenericSFP - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | description | order_weight | optional | choices | default_value | | ---- | ---- | ----------- | ------------ | -------- | ------- | ------------- | @@ -1992,19 +1912,16 @@ Dependencies: `base, extensions/sfp` | ---- | ----- | ---- | ---- | ----------- | -------- | ------------ | | wdm\_channel | WDM Channel | DcimWdmChannel | Attribute | one | False | 1150 | -# Accounts Management +## Accounts Management This schema extension contains models for Accounts management. -Dependencies: `base` - -## users - +- **Dependencies:** `base` - **Version:** 1.0 ### Nodes -### Group +#### Group - **Description:** User Group - **Label:** User Groups @@ -2016,7 +1933,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:**name__value -#### Attributes +##### Attributes | name | kind | order_weight | optional | label | choices | | ---- | ---- | ------------ | -------- | ----- | ------- | @@ -2025,7 +1942,7 @@ Dependencies: `base` | idle\_timeout | Number | 1300 | | Idle Timeout \(s\) | \`\` | | permissions | Dropdown | 1200 | False | | \`admin, operator, read\-only\` | -### Account +#### Account - **Description:** User login and authentication - **Label:** User Account @@ -2037,7 +1954,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:**name__value -#### Attributes +##### Attributes | name | label | kind | optional | description | order_weight | default_value | | ---- | ----- | ---- | -------- | ----------- | ------------ | ------------- | @@ -2064,25 +1981,21 @@ Dependencies: `base` | ---- | ---- | ---- | ----------- | ----------- | | accounts | Component | UserAccount | List of Accounts under this organization | many | -# QinQ +## QinQ This schema extension brings extensions to VLAN model in order to support QinQ. -Dependencies: `base, extensions/vlan` - -# Firewall Policer +- **Dependencies:** `base, extensions/vlan` +## Firewall Policer This schema extension contains models for VMs. You might consider Cluster or/and Hypervisor extension to go with! -Dependencies: `base` - -## firewall_policer - +- **Dependencies:** `base` - **Version:** 1.0 ### Nodes -### Policer +#### Policer - **Description:** A generic policer configuration. - **Label:** Network Policer @@ -2094,7 +2007,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:**name__value -#### Attributes +##### Attributes | name | kind | label | description | order_weight | unique | optional | choices | | ---- | ---- | ----- | ----------- | ------------ | ------ | -------- | ------- | @@ -2107,19 +2020,16 @@ Dependencies: `base` | packet\_burst | Dropdown | Packet Burst | Packet burst size for the policer\. | 1350 | | True | \`1k, 5k, 10k\` | | action | Dropdown | Action | Action to take when limits are exceeded\. | 1400 | | | \`discard, drop, accept\` | -# VRF +## VRF This schema extension contains models to support VRF in your network. -Dependencies: `base` - -## vrf - +- **Dependencies:** `base` - **Version:** 1.0 ### Nodes -### VRF +#### VRF - **Description:** A VRF is isolated layer three domain - **Label:** VRF @@ -2131,7 +2041,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | optional | unique | label | order_weight | | ---- | ---- | -------- | ------ | ----- | ------------ | @@ -2147,7 +2057,7 @@ Dependencies: `base` | import\_rt | IpamRouteTarget | True | one | Attribute | vrf\_\_import | Import Targets | | export\_rt | IpamRouteTarget | True | one | Attribute | vrf\_\_export | Export Targets | -### RouteTarget +#### RouteTarget - **Description:** Route Target (RFC 4360) - **Label:** Route Target @@ -2160,7 +2070,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | unique | optional | | ---- | ---- | ------ | -------- | @@ -2191,25 +2101,22 @@ Dependencies: `base` | ---- | ----- | ---- | -------- | ----------- | ---- | ------------ | | vrf | VRF | IpamVRF | True | one | Attribute | 1150 | -# Lag +## Lag This schema extension includes models for Link Aggregation Groups (LAGs), enabling you to link physical interfaces as building blocs of your LAG interface. It can be used in standard networking environments as well as in compute scenarios, such as capturing bond interfaces. -Dependencies: `base` - -## lag - +- **Dependencies:** `base` - **Version:** 1.0 ### Nodes -### Lag +#### Lag - **Description:** LAG interface - **Label:** LAG Interface - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | label | kind | choices | default_value | description | order_weight | | ---- | ----- | ---- | ------- | ------------- | ----------- | ------------ | @@ -2232,26 +2139,23 @@ Dependencies: `base` | ---- | ----- | ---- | -------- | ----------- | ---- | ----------- | ------------ | | lag\_parent | LAG | InterfaceLag | True | one | Attribute | LAG Interface using this Physical Interface | 1800 | -# Routing +## Routing This schema extension contains generics to create Routing Protocol "Instance". The idea is to create one Routing Protocol instance per IpamVRF + DcimDevice pair. -Dependencies: `base, extensions/vlan` - -## routing - +- **Dependencies:** `base, extensions/vlan` - **Version:** 1.0 ### Generics -### Protocol +#### Protocol - **Description:** Generic protocol model for routing protocols - **Label:** Protocol - **Icon:** carbon:router - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | optional | unique | description | order_weight | choices | | ---- | ---- | -------- | ------ | ----------- | ------------ | ------- | @@ -2265,19 +2169,16 @@ Dependencies: `base, extensions/vlan` | device | DcimDevice | False | one | Parent | 1050 | | | vrf | IpamVRF | False | one | Attribute | 1075 | VRF | -# BGP +## BGP This schema extension contains all you need to model your BGP platform. -Dependencies: `base, extensions/routing` - -## bgp - +- **Dependencies:** `base, extensions/routing` - **Version:** 1.0 ### Nodes -### AutonomousSystem +#### AutonomousSystem - **Description:** An Autonomous System (AS) is a set of Internet routable IP prefixes belonging to a network - **Label:** Autonomous System @@ -2290,7 +2191,7 @@ Dependencies: `base, extensions/routing` - **Order By:**asn__value, name__value - **Uniqueness Constraints:**asn__value, name__value -#### Attributes +##### Attributes | name | kind | description | order_weight | optional | | ---- | ---- | ----------- | ------------ | -------- | @@ -2306,7 +2207,7 @@ Dependencies: `base, extensions/routing` | location | LocationGeneric | True | one | Attribute | | devices | DcimDevice | True | many | Attribute | -### BGPPeerGroup +#### BGPPeerGroup - **Description:** A BGP Peer Group is used to regroup parameters that are shared across multiple peers - **Label:** BGP Peer Group @@ -2319,7 +2220,7 @@ Dependencies: `base, extensions/routing` - **Order By:**name__value - **Uniqueness Constraints:**name__value -#### Attributes +##### Attributes | name | kind | optional | description | order_weight | regex | choices | default_value | | ---- | ---- | -------- | ----------- | ------------ | ----- | ------- | ------------- | @@ -2338,7 +2239,7 @@ Dependencies: `base, extensions/routing` | local\_as | bgppeergroup\_\_local\_as | RoutingAutonomousSystem | True | one | Attribute | | remote\_as | bgppeergroup\_\_remote\_as | RoutingAutonomousSystem | True | one | Attribute | -### BGPSession +#### BGPSession - **Description:** A BGP Session represent a point to point connection between two routers - **Label:** BGP Session @@ -2350,7 +2251,7 @@ Dependencies: `base, extensions/routing` - **Order By:**remote_as__asn__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | optional | enum | description | order_weight | choices | regex | | ---- | ---- | -------- | ---- | ----------- | ------------ | ------- | ----- | @@ -2390,28 +2291,25 @@ Dependencies: `base, extensions/routing` | ---- | ----- | ----------- | -------- | ---- | ------------ | | asn | Autonomous System | many | True | RoutingAutonomousSystem | 2000 | -# Modules +## Modules This schema extension allows you to capture Device Modules related information like the serial number or the status. You can insert the Module into a Dcim Physical Device. > [!NOTE] > This extension doesn't contain any Node, you can use the extension module_linecards or modules_routing_engine to use it -Dependencies: `base` - -## modules - +- **Dependencies:** `base` - **Version:** 1.0 ### Generics -### GenericModule +#### GenericModule - **Description:** A generic module, such as a Linecard or Routing Engine, installed in a device. - **Label:** Module - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | unique | description | order_weight | optional | choices | default_value | | ---- | ---- | ------ | ----------- | ------------ | -------- | ------- | ------------- | @@ -2426,7 +2324,7 @@ Dependencies: `base` | module\_type | DeviceGenericModuleType | False | one | Attribute | 1150 | | | | device | DcimPhysicalDevice | True | one | Attribute | 1000 | Device | device\_\_modules | -### GenericModuleType +#### GenericModuleType - **Description:** A generic module type, with common specifications like part number and manufacturer. - **Label:** Module Type @@ -2437,7 +2335,7 @@ Dependencies: `base` - **Order By:**manufacturer__name__value, name__value - **Uniqueness Constraints:**part_number__value, name__value + manufacturer -#### Attributes +##### Attributes | name | kind | unique | description | order_weight | optional | label | | ---- | ---- | ------ | ----------- | ------------ | -------- | ----- | @@ -2462,21 +2360,18 @@ Dependencies: `base` | ---- | ---- | ---------- | ----------- | ---- | | modules | DeviceGenericModule | device\_\_modules | many | Component | -# Routing Policies +## Routing Policies This schema extension contains a generic to create Routing Policies. This Generic can be extend for each Routing Protocols you may want to use. -Dependencies: `base` - -## routing_policies - +- **Dependencies:** `base` - **Version:** 1.0 ### Generics -### Policy +#### Policy - **Description:** Policy defining the rules for routing traffic in a network. - **Icon:** carbon:deployment-policy @@ -2487,7 +2382,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:**name__value -#### Attributes +##### Attributes | name | kind | description | unique | optional | order_weight | label | choices | default_value | | ---- | ---- | ----------- | ------ | -------- | ------------ | ----- | ------- | ------------- | @@ -2497,19 +2392,16 @@ Dependencies: `base` | weight | Number | Priority of the routing policy\. The higher the number, the higher the priority\. | | True | 1400 | | \`\` | 1000 | | address\_family | Dropdown | The address family for the routing policy indicating the type of IP address\. | | | 1150 | | \`ipv4, ipv6, all\` | all | -# Hosting Cluster +## Hosting Cluster A rather generic cluster built with compute units (e.g. servers) and able to host VMs. -Dependencies: `base, extensions/cluster, extensions/compute` - -## hosting_cluster - +- **Dependencies:** `base, extensions/cluster, extensions/compute` - **Version:** 1.0 ### Nodes -### Hosting +#### Hosting - **Description:** A cluster hosting virtual machines. - **Label:** Hosting Cluster @@ -2517,26 +2409,23 @@ Dependencies: `base, extensions/cluster, extensions/compute` - **Menu Placement:** ClusterGeneric - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | order_weight | description | choices | optional | | ---- | ---- | ------------ | ----------- | ------- | -------- | | cluster\_type | Dropdown | 1200 | Type of the cluster\. | \`aws, kvm, gcp, vmware\` | | | status | Dropdown | 1300 | | \`active, provisioning, maintenance, drained\` | False | -# OSPF +## OSPF This schema extension contains all you need to model the OSPF Routing Protocol. -Dependencies: `base, extensions/routing` - -## ospf - +- **Dependencies:** `base, extensions/routing` - **Version:** 1.0 ### Nodes -### OSPF +#### OSPF - **Description:** OSPF (Open Shortest Path First) instance on a Virtual Router. - **Label:** OSPF @@ -2548,7 +2437,7 @@ Dependencies: `base, extensions/routing` - **Order By:**router_id__address__value, vrf__name__value, device__name__value - **Uniqueness Constraints:**device + vrf + version__value -#### Attributes +##### Attributes | name | kind | optional | default_value | description | order_weight | choices | | ---- | ---- | -------- | ------------- | ----------- | ------------ | ------- | @@ -2564,7 +2453,7 @@ Dependencies: `base, extensions/routing` | router\_id | IpamIPAddress | True | one | Attribute | | | | ospf\_interfaces | RoutingOSPFInterface | True | many | Component | OSPF Interfaces | ospf\_\_ospfinterfaces | -### OSPFInterface +#### OSPFInterface - **Description:** Pivot table linking OSPF configuration to an interface. - **Label:** OSPF Interface @@ -2576,7 +2465,7 @@ Dependencies: `base, extensions/routing` - **Order By:**description__value - **Uniqueness Constraints:**ospf + interface -#### Attributes +##### Attributes | name | kind | optional | unique | description | order_weight | choices | default_value | | ---- | ---- | -------- | ------ | ----------- | ------------ | ------- | ------------- | @@ -2594,19 +2483,16 @@ Dependencies: `base, extensions/routing` | ospf | OSPF | RoutingOSPF | ospf\_\_ospfinterfaces | False | one | Parent | 1100 | | interface | | InterfaceLayer3 | | False | one | Attribute | 1200 | -# Infiniband +## Infiniband This schema extension adds support for InfiniBand switches. -Dependencies: `base, extensions/compute` - -## infiniband - +- **Dependencies:** `base, extensions/compute` - **Version:** 1.0 ### Nodes -### Switch +#### Switch - **Description:** InfiniBand Switch - **Label:** InfiniBand Switch @@ -2618,7 +2504,7 @@ Dependencies: `base, extensions/compute` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | unique | order_weight | optional | label | description | default_value | choices | | ---- | ---- | ------ | ------------ | -------- | ----- | ----------- | ------------- | ------- | @@ -2645,7 +2531,7 @@ Dependencies: `base, extensions/compute` | mgmt\_interface | Component | one | InfinibandSwitchMgmtInterface | True | | rsu | Attribute | one | InfinibandRSU | True | -### SwitchInterface +#### SwitchInterface - **Description:** InfiniBand Switch Interface - **Label:** InfiniBand Switch Interface @@ -2657,7 +2543,7 @@ Dependencies: `base, extensions/compute` - **Order By:**name__value - **Uniqueness Constraints:**switch + name__value -#### Attributes +##### Attributes | name | kind | order_weight | optional | default_value | label | description | enum | choices | | ---- | ---- | ------------ | -------- | ------------- | ----- | ----------- | ---- | ------- | @@ -2681,7 +2567,7 @@ Dependencies: `base, extensions/compute` | speed\_option | InfinibandSwitchIntfSpeedOptions | True | many | Attribute | 6 | | switch | InfinibandSwitch | False | one | Parent | | -### SwitchMgmtInterface +#### SwitchMgmtInterface - **Description:** InfiniBand Switch Management Interface - **Label:** InfiniBand Mgmt Interface @@ -2693,7 +2579,7 @@ Dependencies: `base, extensions/compute` - **Order By:**name__value - **Uniqueness Constraints:**switch + name__value -#### Attributes +##### Attributes | name | kind | order_weight | optional | label | default_value | description | | ---- | ---- | ------------ | -------- | ----- | ------------- | ----------- | @@ -2711,7 +2597,7 @@ Dependencies: `base, extensions/compute` | switch | InfinibandSwitch | False | one | Parent | | ipv4\_address | IpamIPAddress | True | one | | -### SwitchIntfSpeedOptions +#### SwitchIntfSpeedOptions - **Description:** InfiniBand Interface Speed Options - **Label:** InfiniBand Interface Speed Options @@ -2723,7 +2609,7 @@ Dependencies: `base, extensions/compute` - **Order By:**speed__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | label | description | choices | unique | | ---- | ---- | ----- | ----------- | ------- | ------ | @@ -2736,7 +2622,7 @@ Dependencies: `base, extensions/compute` | ---- | ---- | -------- | ----------- | ---- | | switch | InfinibandSwitchInterface | False | one | Parent | -### RSU +#### RSU - **Description:** InfiniBand Rail-Optimized Scalable Unit - **Label:** InfiniBand RSU @@ -2748,7 +2634,7 @@ Dependencies: `base, extensions/compute` - **Order By:**identifier__value - **Uniqueness Constraints:**identifier__value -#### Attributes +##### Attributes | name | kind | label | description | regex | optional | | ---- | ---- | ----- | ----------- | ----- | -------- | @@ -2762,7 +2648,7 @@ Dependencies: `base, extensions/compute` | switches | InfinibandSwitch | True | many | Attribute | | interfaces | InfinibandSwitchInterface | True | many | Attribute | -### Fabric +#### Fabric - **Description:** InfiniBand Network Fabric - **Label:** InfiniBand Network Fabric @@ -2774,60 +2660,57 @@ Dependencies: `base, extensions/compute` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | label | description | unique | | ---- | ---- | ----- | ----------- | ------ | | name | Text | Name | InfiniBand Network Fabric Name | True | -# Location Extended +## Location Extended This schema extension is the most detailed when it comes to location, you'll find all the layers you can think of. -Dependencies: `base` - -## location_extended - +- **Dependencies:** `base` - **Version:** 1.0 ### Nodes -### Continent +#### Continent - **Label:** Continent - **Icon:** jam:world - **Menu Placement:** LocationGeneric - **Include in Menu:** ✅ -### Country +#### Country - **Label:** Country - **Icon:** gis:search-country - **Menu Placement:** LocationGeneric - **Include in Menu:** ✅ -### Region +#### Region - **Label:** Region - **Icon:** carbon:cics-region-target - **Menu Placement:** LocationGeneric - **Include in Menu:** ✅ -### Metro +#### Metro - **Label:** Metro - **Icon:** healthicons:city - **Menu Placement:** LocationGeneric - **Include in Menu:** ✅ -### Building +#### Building - **Label:** Building - **Icon:** ri:building-line - **Menu Placement:** LocationGeneric - **Include in Menu:** ✅ -#### Attributes +##### Attributes | name | kind | unique | optional | order_weight | | ---- | ---- | ------ | -------- | ------------ | @@ -2840,21 +2723,21 @@ Dependencies: `base` | ---- | ---- | -------- | ----------- | | owner | OrganizationGeneric | True | one | -### Floor +#### Floor - **Label:** Floor - **Icon:** mdi:home-floor-0 - **Menu Placement:** LocationGeneric - **Include in Menu:** ✅ -### Suite +#### Suite - **Label:** Suite - **Icon:** game-icons:cage - **Menu Placement:** LocationGeneric - **Include in Menu:** ✅ -#### Attributes +##### Attributes | name | kind | unique | optional | order_weight | | ---- | ---- | ------ | -------- | ------------ | @@ -2866,14 +2749,14 @@ Dependencies: `base` | ---- | ---- | -------- | ----------- | | owner | OrganizationGeneric | True | one | -### Rack +#### Rack - **Label:** Rack - **Icon:** clarity:rack-server-line - **Menu Placement:** LocationGeneric - **Include in Menu:** ✅ -#### Attributes +##### Attributes | name | kind | unique | optional | order_weight | | ---- | ---- | ------ | -------- | ------------ | @@ -2895,19 +2778,16 @@ Dependencies: `base` | ---- | ---- | ----------- | -------- | | location | LocationBuilding | many | True | -# Topology +## Topology A schema for defining and managing network topology, strategies, and services. -Dependencies: `base` - -## topology - +- **Dependencies:** `base` - **Version:** 1.0 ### Generics -### ManagementServer +#### ManagementServer - **Description:** Generic model for network management server (dns, ntp, and dhcp). - **Label:** Network Management Servers @@ -2918,7 +2798,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | order_weight | optional | choices | | ---- | ---- | ------------ | -------- | ------- | @@ -2933,7 +2813,7 @@ Dependencies: `base` | location | LocationGeneric | True | many | | | ip\_addresses | InfraIPAddress | True | many | Component | -### GenericElement +#### GenericElement - **Description:** Base model for elements - **Label:** Generic Topology Element @@ -2946,7 +2826,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | order_weight | optional | | ---- | ---- | ------------ | -------- | @@ -2960,7 +2840,7 @@ Dependencies: `base` | ---- | ---- | ----------- | ---- | -------- | | topology | TopologyTopology | one | Parent | False | -### NetworkStrategy +#### NetworkStrategy - **Description:** Generic model for network strategies (underlays and overlays). - **Label:** Network Strategy @@ -2973,7 +2853,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | order_weight | optional | | ---- | ---- | ------------ | -------- | @@ -2988,7 +2868,7 @@ Dependencies: `base` ### Nodes -### Topology +#### Topology - **Description:** A Topology represents the entire network pod. - **Label:** Topology @@ -3000,7 +2880,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | unique | order_weight | optional | | ---- | ---- | ------ | ------------ | -------- | @@ -3017,7 +2897,7 @@ Dependencies: `base` | devices | DcimGenericDevice | True | many | Component | | network\_services | TopologyNetworkService | True | many | Component | -### MPLSStrategy +#### MPLSStrategy - **Description:** Specific strategy attributes for MPLS. - **Label:** MPLS Strategy @@ -3030,14 +2910,14 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | choices | | ---- | ---- | ------- | | underlay | Dropdown | \`ospf, isis, bgp\` | | overlay | Dropdown | \`ldp, rsvp, segment\_routing\` | -### EVPNStrategy +#### EVPNStrategy - **Description:** Specific strategy attributes for EVPN. - **Label:** EVPN Strategy @@ -3050,14 +2930,14 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | choices | | ---- | ---- | ------- | | underlay | Dropdown | \`ebgp, ospf, isis\` | | overlay | Dropdown | \`ebgp, ibgp\` | -### PhysicalElement +#### PhysicalElement - **Description:** Physical aspect of topology elements. - **Label:** Physical Topology Element @@ -3070,7 +2950,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | default_value | order_weight | label | choices | | ---- | ---- | ------------- | ------------ | ----- | ------- | @@ -3085,7 +2965,7 @@ Dependencies: `base` | ---- | ----- | ---- | -------- | ----------- | ---- | ------------ | | device\_type | Type | DcimDeviceType | True | one | Attribute | 1400 | -### DhcpOption +#### DhcpOption - **Description:** Represents a configurable option within a Dhcp server. - **Label:** Dhcp Option @@ -3098,7 +2978,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | order_weight | optional | | ---- | ---- | ------------ | -------- | @@ -3107,7 +2987,7 @@ Dependencies: `base` | option\_code | Number | 2000 | | | content | Text | 2100 | | -### DhcpServer +#### DhcpServer - **Description:** Represents a Dhcp server in the network. - **Label:** Dhcp Server @@ -3120,7 +3000,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | order_weight | | ---- | ---- | ------------ | @@ -3132,7 +3012,7 @@ Dependencies: `base` | ---- | ---- | -------- | ----------- | ---- | | dhcp\_options | NetworkDhcpOption | True | many | Component | -### NameServer +#### NameServer - **Description:** Represents a DNS server in the network. - **Label:** DNS Server @@ -3145,7 +3025,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -### NTPServer +#### NTPServer - **Description:** Represents a NTP server in the network. - **Label:** NTP Server @@ -3158,7 +3038,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -### NetworkServiceIdentifier +#### NetworkServiceIdentifier - **Description:** Generic model for different types of identifiers used in network services. - **Label:** Network Service Identifier @@ -3171,7 +3051,7 @@ Dependencies: `base` - **Order By:**identifier__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | | ---- | ---- | @@ -3183,7 +3063,7 @@ Dependencies: `base` | ---- | ----- | ---- | ----------- | -------- | | service | Network Service | TopologyNetworkService | one | True | -### NetworkService +#### NetworkService - **Description:** Network services attached to a Topology. - **Label:** Network Service @@ -3195,7 +3075,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | label | kind | order_weight | enum | | ---- | ----- | ---- | ------------ | ---- | @@ -3230,19 +3110,16 @@ Dependencies: `base` | ---- | ----- | ---- | -------- | ----------- | ------------ | | network\_service | Network Service | TopologyNetworkService | True | one | 1400 | -# Routing Engine Module +## Routing Engine Module This schema extension allows you to capture Routing Engine related information like the version. You can insert the Routing Engine into a Dcim Physical Device and leverage the Routing Engine type model. -Dependencies: `base, extensions/modules` - -## routing_engine - +- **Dependencies:** `base, extensions/modules` - **Version:** 1.0 ### Nodes -### RoutingEngineType +#### RoutingEngineType - **Description:** Routing Engine Type information, detailing specifications such as part number and manufacturer. - **Label:** Routing Engine Type @@ -3254,7 +3131,7 @@ Dependencies: `base, extensions/modules` | ---- | ---- | ----------- | ---- | ----------- | | routing\_engines | DeviceRoutingEngine | many | Generic | Routing engines of this type\. | -### RoutingEngine +#### RoutingEngine - **Description:** A Routing Engine (RE) installed in a device, responsible for routing functionalities. - **Label:** Routing Engine @@ -3266,7 +3143,7 @@ Dependencies: `base, extensions/modules` - **Order By:**device__name__value, slot__value - **Uniqueness Constraints:**serial_number__value -#### Attributes +##### Attributes | name | kind | description | order_weight | label | optional | | ---- | ---- | ----------- | ------------ | ----- | -------- | @@ -3279,19 +3156,16 @@ Dependencies: `base, extensions/modules` | ---- | ----- | ---- | -------- | ----------- | ---- | ------------ | | routing\_engine\_type | RE Type | DeviceRoutingEngineType | False | one | Attribute | 1150 | -# Linecard Module +## Linecard Module This schema extension allows you to capture Linecard related information like the version. You can insert the Linecard into a Dcim Physical Device and leverage the Linecard type model. The Linecard can accept PIC to help configure PORT information like breakout-capabilities and configurations. -Dependencies: `base, extensions/modules` - -## linecard - +- **Dependencies:** `base, extensions/modules` - **Version:** 1.0 ### Nodes -### LinecardType +#### LinecardType - **Description:** Linecard Type information, detailing specifications such as part number and manufacturer. - **Label:** Linecard Type @@ -3303,7 +3177,7 @@ Dependencies: `base, extensions/modules` | ---- | ---- | ----------- | ---- | ----------- | | linecards | DeviceLinecard | many | Generic | Linecards of this type\. | -### Linecard +#### Linecard - **Description:** A Linecard installed in a device, specifying slot, power status, and functionalities. - **Label:** Linecard @@ -3315,7 +3189,7 @@ Dependencies: `base, extensions/modules` - **Order By:**device__name__value, slot__value - **Uniqueness Constraints:**serial_number__value -#### Attributes +##### Attributes | name | kind | description | order_weight | label | optional | default_value | | ---- | ---- | ----------- | ------------ | ----- | -------- | ------------- | @@ -3329,7 +3203,7 @@ Dependencies: `base, extensions/modules` | linecard\_type | Linecard Type | DeviceLinecardType | False | one | Attribute | 1150 | | pics | PICs | DevicePic | True | many | Attribute | 1500 | -### Pic +#### Pic - **Description:** Physical Interface Card (PIC) installed in the Linecard, containing multiple ports. - **Label:** PIC @@ -3340,7 +3214,7 @@ Dependencies: `base, extensions/modules` - **Order By:**linecard__serial_number__value, slot__value - **Uniqueness Constraints:**linecard + slot__value -#### Attributes +##### Attributes | name | kind | description | order_weight | | ---- | ---- | ----------- | ------------ | @@ -3353,7 +3227,7 @@ Dependencies: `base, extensions/modules` | linecard | Linecard | DeviceLinecard | linecard\_\_pics | False | one | Parent | 1000 | | ports | Ports | InfraPort | | True | many | Component | 1100 | -### Port +#### Port - **Description:** A network port on a PIC, specifying speed and port number. - **Label:** Port @@ -3364,7 +3238,7 @@ Dependencies: `base, extensions/modules` - **Order By:**pic__slot__value, port_number__value - **Uniqueness Constraints:**pic + port_number__value -#### Attributes +##### Attributes | name | kind | description | order_weight | choices | | ---- | ---- | ----------- | ------------ | ------- | @@ -3377,19 +3251,16 @@ Dependencies: `base, extensions/modules` | ---- | ----- | ---- | -------- | ----------- | ---- | ------------ | | pic | PIC | DevicePic | False | one | Parent | 1000 | -# Security +## Security This schema extension contains models for implementing detailed security. -Dependencies: `base` - -## security - +- **Dependencies:** `base` - **Version:** 1.0 ### Generics -### PolicyAssignment +#### PolicyAssignment - **Label:** Security Policy - **Include in Menu:** ❌ @@ -3400,11 +3271,11 @@ Dependencies: `base` | ---- | ----- | ---- | ---- | ----------- | -------- | | rules | Policy | SecurityRenderedPolicyRule | Component | many | True | -### GenericAddressGroup +#### GenericAddressGroup - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | label | optional | unique | | ---- | ---- | ----- | -------- | ------ | @@ -3417,11 +3288,11 @@ Dependencies: `base` | ---- | ---- | ----------- | ---- | -------- | | addresses | SecurityGenericAddress | many | Component | True | -### GenericAddress +#### GenericAddress - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | optional | unique | | ---- | ---- | -------- | ------ | @@ -3433,11 +3304,11 @@ Dependencies: `base` | ---- | ----- | ---- | ----------- | -------- | | address\_groups | Address Groups | SecurityGenericAddressGroup | many | True | -### GenericServiceGroup +#### GenericServiceGroup - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | label | kind | optional | | ---- | ----- | ---- | -------- | @@ -3450,11 +3321,11 @@ Dependencies: `base` | ---- | ---- | ----- | ----------- | ---- | -------- | | services | SecurityGenericService | Services | many | Component | True | -### GenericService +#### GenericService - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | label | kind | optional | | ---- | ----- | ---- | -------- | @@ -3469,7 +3340,7 @@ Dependencies: `base` ### Nodes -### Zone +#### Zone - **Description:** Security zones - **Label:** Security zone @@ -3477,7 +3348,7 @@ Dependencies: `base` - **Menu Placement:** SecurityPolicy - **Include in Menu:** ✅ -#### Attributes +##### Attributes | name | kind | unique | optional | | ---- | ---- | ------ | -------- | @@ -3489,7 +3360,7 @@ Dependencies: `base` | ---- | ----- | ---- | -------- | ---- | | interfaces | Interfaces | Attribute | True | SecurityFirewallInterface | -### IPAMIPAddress +#### IPAMIPAddress - **Description:** Infrahub IPv4/6 address - **Label:** IPAM IP Address @@ -3497,7 +3368,7 @@ Dependencies: `base` - **Menu Placement:** SecurityPolicy - **Include in Menu:** ✅ -#### Attributes +##### Attributes | name | kind | optional | | ---- | ---- | -------- | @@ -3509,7 +3380,7 @@ Dependencies: `base` | ---- | ---- | ----------- | ---- | -------- | | ip\_address | InfraIPAddress | one | Attribute | False | -### IPAMIPPrefix +#### IPAMIPPrefix - **Description:** Infrahub IPv4/6 prefix - **Label:** IPAM IP Prefix @@ -3517,7 +3388,7 @@ Dependencies: `base` - **Menu Placement:** SecurityPolicy - **Include in Menu:** ✅ -#### Attributes +##### Attributes | name | kind | optional | | ---- | ---- | -------- | @@ -3529,7 +3400,7 @@ Dependencies: `base` | ---- | ---- | ----------- | ---- | -------- | | ip\_prefix | InfraPrefix | one | Attribute | False | -### IPAddress +#### IPAddress - **Description:** IPv4/6 address - **Label:** IP Address @@ -3542,14 +3413,14 @@ Dependencies: `base` - **Order By:**address__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | optional | | ---- | ---- | -------- | | address | IPHost | | | description | Text | True | -### Prefix +#### Prefix - **Description:** IPv4/6 prefix - **Label:** Prefix @@ -3562,14 +3433,14 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | optional | unique | | ---- | ---- | -------- | ------ | | prefix | IPNetwork | False | True | | description | Text | True | | -### IPRange +#### IPRange - **Description:** IPv4/6 Range - **Label:** IP Range @@ -3582,14 +3453,14 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | label | kind | optional | | ---- | ----- | ---- | -------- | | start | Start IP Address | IPHost | False | | end | End IP Address | IPHost | False | -### FQDN +#### FQDN - **Description:** Full Qualified Domain Name - **Label:** FQDN @@ -3602,13 +3473,13 @@ Dependencies: `base` - **Order By:**name__value, fqdn__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | label | kind | optional | regex | | ---- | ----- | ---- | -------- | ----- | | fqdn | FQDN | Text | False | \(?=^\.{1,253}\$\)\(^\(\(\(?\!\-\)\[a\-zA\-Z0\-9\-\]{1,63}\(?\<\!\-\)\)\|\(\(?\!\-\)\[a\-zA\-Z0\-9\-\]{1,63}\(?\<\!\-\)\\.\)\+\[a\-zA\-Z\]{2,63}\)\$\) | -### AddressGroup +#### AddressGroup - **Description:** Group of addresses - **Label:** Address Group @@ -3616,7 +3487,7 @@ Dependencies: `base` - **Menu Placement:** SecurityPolicy - **Include in Menu:** ✅ -### IPProtocol +#### IPProtocol - **Description:** IP protocol - **Label:** IP Protocols @@ -3629,13 +3500,13 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | optional | | ---- | ---- | -------- | | protocol | Number | True | -### Service +#### Service - **Description:** Service - **Label:** Service @@ -3648,7 +3519,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | | ---- | ---- | @@ -3660,7 +3531,7 @@ Dependencies: `base` | ---- | ---- | -------- | ----------- | ---- | | ip\_protocol | SecurityIPProtocol | True | one | Attribute | -### ServiceRange +#### ServiceRange - **Description:** Service range - **Label:** Service range @@ -3673,7 +3544,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | optional | | ---- | ---- | -------- | @@ -3686,7 +3557,7 @@ Dependencies: `base` | ---- | ---- | -------- | ----------- | ---- | | ip\_protocol | SecurityIPProtocol | False | one | Attribute | -### ServiceGroup +#### ServiceGroup - **Description:** Group of services - **Label:** Service group @@ -3699,7 +3570,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -### Policy +#### Policy - **Label:** Security Policy - **Include in Menu:** ❌ @@ -3709,7 +3580,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | label | kind | optional | | ---- | ----- | ---- | -------- | @@ -3724,7 +3595,7 @@ Dependencies: `base` | location\_target | LocationGeneric | one | Attribute | True | | device\_target | SecurityFirewall | one | Attribute | True | -### PolicyRule +#### PolicyRule - **Description:** Policy rule - **Label:** Policy rule @@ -3737,7 +3608,7 @@ Dependencies: `base` - **Order By:**source_zone__name__value, destination_zone__name__value, index__value - **Uniqueness Constraints:**index__value + source_zone + destination_zone + policy -#### Attributes +##### Attributes | name | label | kind | optional | order_weight | enum | default_value | | ---- | ----- | ---- | -------- | ------------ | ---- | ------------- | @@ -3762,13 +3633,13 @@ Dependencies: `base` | destination\_services | SecurityGenericService | Attribute | many | True | | policy\_rule\_\_destination\_service | | destination\_service\_groups | SecurityGenericServiceGroup | Attribute | many | True | | policy\_rule\_\_destination\_service\_group | -### Firewall +#### Firewall - **Icon:** mdi:firewall - **Menu Placement:** InfraGenericDevice - **Include in Menu:** ✅ -#### Attributes +##### Attributes | name | kind | optional | choices | | ---- | ---- | -------- | ------- | @@ -3780,7 +3651,7 @@ Dependencies: `base` | ---- | ---- | ----- | ----------- | ---- | | policy | SecurityPolicy | Security Policy | one | Attribute | -### RenderedPolicyRule +#### RenderedPolicyRule - **Description:** Policy rule - **Label:** Policy rule @@ -3791,7 +3662,7 @@ Dependencies: `base` - **Order By:**source_zone__name__value, destination_zone__name__value, index__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | label | kind | optional | order_weight | enum | default_value | | ---- | ----- | ---- | -------- | ------------ | ---- | ------------- | @@ -3816,7 +3687,7 @@ Dependencies: `base` | destination\_services | SecurityGenericService | Attribute | many | True | rendered\_policy\_rule\_\_destination\_service | | | destination\_service\_groups | SecurityGenericServiceGroup | Attribute | many | True | rendered\_policy\_rule\_\_destination\_service\_group | | -### FirewallInterface +#### FirewallInterface - **Label:** Firewall Interface - **Icon:** mdi:ethernet @@ -3840,26 +3711,23 @@ Dependencies: `base` | ---- | ---- | ----------- | ---- | | policy | SecurityPolicy | one | Attribute | -# Azure +## Azure This schema extension introduces cloud support for Microsoft Azure. -Dependencies: `base` - -Attribution: [Rowan Coleman](https://www.linkedin.com/in/rowan-coleman-6a147156/) - -## azure +- **Dependencies:** `base` +- **Attribution**: [Rowan Coleman](https://www.linkedin.com/in/rowan-coleman-6a147156/) - **Version:** 1.0 ### Generics -### Resource +#### Resource - **Label:** Azure - **Include in Menu:** ✅ -#### Attributes +##### Attributes | name | kind | | ---- | ---- | @@ -3874,23 +3742,23 @@ Attribution: [Rowan Coleman](https://www.linkedin.com/in/rowan-coleman-6a147156/ ### Nodes -### Location +#### Location - **Menu Placement:** AzureResource - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | | ---- | ---- | | name | Text | -### Tenant +#### Tenant - **Menu Placement:** AzureResource - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | | ---- | ---- | @@ -3903,12 +3771,12 @@ Attribution: [Rowan Coleman](https://www.linkedin.com/in/rowan-coleman-6a147156/ | ---- | ----------- | ---- | ---- | | subscriptions | many | AzureSubscription | Component | -### Subscription +#### Subscription - **Menu Placement:** AzureResource - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | | ---- | ---- | @@ -3922,12 +3790,12 @@ Attribution: [Rowan Coleman](https://www.linkedin.com/in/rowan-coleman-6a147156/ | tenant | one | AzureTenant | Parent | False | | resourcegroups | many | AzureResourceGroup | Component | | -### ResourceGroup +#### ResourceGroup - **Menu Placement:** AzureResource - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | | ---- | ---- | @@ -3940,7 +3808,7 @@ Attribution: [Rowan Coleman](https://www.linkedin.com/in/rowan-coleman-6a147156/ | location | one | Attribute | AzureLocation | | | subscription | one | Parent | AzureSubscription | False | -### VirtualNetwork +#### VirtualNetwork - **Label:** Virtual Networks - **Menu Placement:** AzureResource @@ -3953,13 +3821,13 @@ Attribution: [Rowan Coleman](https://www.linkedin.com/in/rowan-coleman-6a147156/ | address\_space | many | Attribute | BuiltinIPPrefix | | subnets | many | Component | AzureVirtualNetworkSubnet | -### VirtualNetworkSubnet +#### VirtualNetworkSubnet - **Label:** Subnets - **Menu Placement:** AzureResource - **Include in Menu:** ✅ -#### Attributes +##### Attributes | name | kind | | ---- | ---- | @@ -3972,19 +3840,16 @@ Attribution: [Rowan Coleman](https://www.linkedin.com/in/rowan-coleman-6a147156/ | virtualnetwork | one | AzureVirtualNetwork | Parent | False | | address\_prefixes | many | BuiltinIPPrefix | Attribute | | -# Tenancy +## Tenancy This schema extension introduces tenancy for some of the schema nodes (circuits...) -Dependencies: `base, extensions/circuit` - -## tenancy - +- **Dependencies:** `base, extensions/circuit` - **Version:** 1.0 ### Nodes -### Tenant +#### Tenant - **Description:** A tenant is owning the corresponding entity - **Icon:** mdi:domain @@ -3998,19 +3863,16 @@ Dependencies: `base, extensions/circuit` | location | LocationBuilding | many | | True | | | circuit | DcimCircuit | many | | True | | -# Quality of Service (QoS) +## Quality of Service (QoS) This schema extension contains models for Quality of Service (QoS) -Dependencies: `base` - -## qos - +- **Dependencies:** `base` - **Version:** 1.0 ### Nodes -### ForwardingClass +#### ForwardingClass - **Description:** Represents a forwarding class in QoS with distinct loss priorities. - **Label:** Forwarding Class @@ -4022,7 +3884,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:**name__value -#### Attributes +##### Attributes | name | kind | description | unique | order_weight | optional | | ---- | ---- | ----------- | ------ | ------------ | -------- | @@ -4030,7 +3892,7 @@ Dependencies: `base` | high\_loss\_priority\_code | List | List of code points for high loss priority\. | | 1200 | True | | low\_loss\_priority\_code | List | List of code points for low loss priority\. | | 1300 | True | -### ClassOfService +#### ClassOfService - **Description:** Defines a Class of Service configuration. - **Label:** Class of Service @@ -4041,7 +3903,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:**name__value -#### Attributes +##### Attributes | name | kind | description | unique | order_weight | | ---- | ---- | ----------- | ------ | ------------ | @@ -4053,7 +3915,7 @@ Dependencies: `base` | ---- | ---- | ----------- | ----------- | -------- | ------------ | | traffic\_control\_profiles | QosTrafficControlProfile | List of traffic control profiles\. | many | True | 1200 | -### TrafficControlProfile +#### TrafficControlProfile - **Description:** Defines a traffic control profile with an active/inactive state. - **Label:** Traffic Control Profile @@ -4065,14 +3927,14 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:**name__value -#### Attributes +##### Attributes | name | kind | description | unique | order_weight | choices | default_value | | ---- | ---- | ----------- | ------ | ------------ | ------- | ------------- | | name | Text | Name of the traffic control profile\. | True | 1000 | \`\` | | | status | Dropdown | Status of the traffic control profile \(active/inactive\)\. | | 1200 | \`active, inactive\` | inactive | -### Classifier +#### Classifier - **Description:** Represents a classifier mapping DSCP or EXP values to forwarding classes. - **Label:** Classifier @@ -4084,7 +3946,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:**name__value -#### Attributes +##### Attributes | name | kind | description | unique | order_weight | choices | | ---- | ---- | ----------- | ------ | ------------ | ------- | @@ -4097,7 +3959,7 @@ Dependencies: `base` | ---- | ---- | ----------- | ----------- | -------- | ------------ | | forwarding\_classes | QosForwardingClass | List of forwarding classes defined in the classifier\. | many | True | 1300 | -### Scheduler +#### Scheduler - **Description:** Represents a scheduler configuration. - **Label:** Scheduler @@ -4109,7 +3971,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:**name__value -#### Attributes +##### Attributes | name | kind | description | unique | order_weight | label | choices | optional | | ---- | ---- | ----------- | ------ | ------------ | ----- | ------- | -------- | @@ -4119,7 +3981,7 @@ Dependencies: `base` | priority | Dropdown | Priority of the scheduler\. | | 1400 | | \`low, high, strict\-high\` | True | | excess\_priority | Dropdown | Excess priority when applicable\. | | 1500 | | \`low, high\` | True | -### SchedulerMap +#### SchedulerMap - **Description:** Defines mappings of schedulers to forwarding classes. - **Label:** Scheduler Map @@ -4131,7 +3993,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:**name__value -#### Attributes +##### Attributes | name | kind | description | unique | order_weight | | ---- | ---- | ----------- | ------ | ------------ | @@ -4144,7 +4006,7 @@ Dependencies: `base` | schedulers | QosScheduler | List of schedulers defined in the map\. | many | True | 1200 | | forwarding\_classes | QosForwardingClass | List of forwarding classes associated with schedulers\. | many | True | 1300 | -# Circuit Service +## Circuit Service This schema extension contains model coming on top of circuit to capture a single service shared across multiple circuits. For example you have a MPLS network supported by a provider connecting multiple locations: @@ -4152,15 +4014,12 @@ For example you have a MPLS network supported by a provider connecting multiple - One single CircuitService would be needed to store MPLS related information (e.g. service id, provider ...) - On each site we would create a circuit connecting on one side our device and the CircuitService on the other side -Dependencies: `extensions/circuit` - -## circuit_service - +- **Dependencies:** `extensions/circuit` - **Version:** 1.0 ### Nodes -### Service +#### Service - **Description:** Represent the boundary of a provider network, the details of which are unknown or unimportant - **Label:** Circuit Service @@ -4173,7 +4032,7 @@ Dependencies: `extensions/circuit` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | unique | optional | | ---- | ---- | ------ | -------- | @@ -4206,19 +4065,16 @@ Dependencies: `extensions/circuit` | ---- | ---- | ----------- | -------- | | circuit\_service | CircuitService | one | True | -# VLAN Translation +## VLAN Translation This schema extension is based on Juniper VLAN MAP, and not yet test out for other vendors. -Dependencies: `base` - -## vlan-translation - +- **Dependencies:** `base` - **Version:** 1.0 ### Nodes -### MapInOut +#### MapInOut - **Description:** VLAN Mapping for In/Out operations - **Label:** VLAN Map In/Out @@ -4231,7 +4087,7 @@ Dependencies: `base` - **Order By:**interface__name__value, direction__value, operation__value - **Uniqueness Constraints:**interface + direction__value -#### Attributes +##### Attributes | name | kind | description | label | order_weight | choices | optional | | ---- | ---- | ----------- | ----- | ------------ | ------- | -------- | diff --git a/experimental/azure/README.md b/experimental/azure/README.md index d57b9a8..a36d835 100644 --- a/experimental/azure/README.md +++ b/experimental/azure/README.md @@ -1,23 +1,20 @@ -# Azure +## Azure This schema extension introduces cloud support for Microsoft Azure. -Dependencies: `base` - -Attribution: [Rowan Coleman](https://www.linkedin.com/in/rowan-coleman-6a147156/) - -## azure +- **Dependencies:** `base` +- **Attribution**: [Rowan Coleman](https://www.linkedin.com/in/rowan-coleman-6a147156/) - **Version:** 1.0 ### Generics -### Resource +#### Resource - **Label:** Azure - **Include in Menu:** ✅ -#### Attributes +##### Attributes | name | kind | | ---- | ---- | @@ -32,23 +29,23 @@ Attribution: [Rowan Coleman](https://www.linkedin.com/in/rowan-coleman-6a147156/ ### Nodes -### Location +#### Location - **Menu Placement:** AzureResource - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | | ---- | ---- | | name | Text | -### Tenant +#### Tenant - **Menu Placement:** AzureResource - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | | ---- | ---- | @@ -61,12 +58,12 @@ Attribution: [Rowan Coleman](https://www.linkedin.com/in/rowan-coleman-6a147156/ | ---- | ----------- | ---- | ---- | | subscriptions | many | AzureSubscription | Component | -### Subscription +#### Subscription - **Menu Placement:** AzureResource - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | | ---- | ---- | @@ -80,12 +77,12 @@ Attribution: [Rowan Coleman](https://www.linkedin.com/in/rowan-coleman-6a147156/ | tenant | one | AzureTenant | Parent | False | | resourcegroups | many | AzureResourceGroup | Component | | -### ResourceGroup +#### ResourceGroup - **Menu Placement:** AzureResource - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | | ---- | ---- | @@ -98,7 +95,7 @@ Attribution: [Rowan Coleman](https://www.linkedin.com/in/rowan-coleman-6a147156/ | location | one | Attribute | AzureLocation | | | subscription | one | Parent | AzureSubscription | False | -### VirtualNetwork +#### VirtualNetwork - **Label:** Virtual Networks - **Menu Placement:** AzureResource @@ -111,13 +108,13 @@ Attribution: [Rowan Coleman](https://www.linkedin.com/in/rowan-coleman-6a147156/ | address\_space | many | Attribute | BuiltinIPPrefix | | subnets | many | Component | AzureVirtualNetworkSubnet | -### VirtualNetworkSubnet +#### VirtualNetworkSubnet - **Label:** Subnets - **Menu Placement:** AzureResource - **Include in Menu:** ✅ -#### Attributes +##### Attributes | name | kind | | ---- | ---- | diff --git a/experimental/circuit_service/README.md b/experimental/circuit_service/README.md index d72ff87..80f3d4a 100644 --- a/experimental/circuit_service/README.md +++ b/experimental/circuit_service/README.md @@ -1,4 +1,4 @@ -# Circuit Service +## Circuit Service This schema extension contains model coming on top of circuit to capture a single service shared across multiple circuits. For example you have a MPLS network supported by a provider connecting multiple locations: @@ -6,15 +6,12 @@ For example you have a MPLS network supported by a provider connecting multiple - One single CircuitService would be needed to store MPLS related information (e.g. service id, provider ...) - On each site we would create a circuit connecting on one side our device and the CircuitService on the other side -Dependencies: `extensions/circuit` - -## circuit_service - +- **Dependencies:** `extensions/circuit` - **Version:** 1.0 ### Nodes -### Service +#### Service - **Description:** Represent the boundary of a provider network, the details of which are unknown or unimportant - **Label:** Circuit Service @@ -27,7 +24,7 @@ Dependencies: `extensions/circuit` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | unique | optional | | ---- | ---- | ------ | -------- | diff --git a/experimental/infiniband/README.md b/experimental/infiniband/README.md index 1104272..5ef4669 100644 --- a/experimental/infiniband/README.md +++ b/experimental/infiniband/README.md @@ -1,16 +1,13 @@ -# Infiniband +## Infiniband This schema extension adds support for InfiniBand switches. -Dependencies: `base, extensions/compute` - -## infiniband - +- **Dependencies:** `base, extensions/compute` - **Version:** 1.0 ### Nodes -### Switch +#### Switch - **Description:** InfiniBand Switch - **Label:** InfiniBand Switch @@ -22,7 +19,7 @@ Dependencies: `base, extensions/compute` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | unique | order_weight | optional | label | description | default_value | choices | | ---- | ---- | ------ | ------------ | -------- | ----- | ----------- | ------------- | ------- | @@ -49,7 +46,7 @@ Dependencies: `base, extensions/compute` | mgmt\_interface | Component | one | InfinibandSwitchMgmtInterface | True | | rsu | Attribute | one | InfinibandRSU | True | -### SwitchInterface +#### SwitchInterface - **Description:** InfiniBand Switch Interface - **Label:** InfiniBand Switch Interface @@ -61,7 +58,7 @@ Dependencies: `base, extensions/compute` - **Order By:**name__value - **Uniqueness Constraints:**switch + name__value -#### Attributes +##### Attributes | name | kind | order_weight | optional | default_value | label | description | enum | choices | | ---- | ---- | ------------ | -------- | ------------- | ----- | ----------- | ---- | ------- | @@ -85,7 +82,7 @@ Dependencies: `base, extensions/compute` | speed\_option | InfinibandSwitchIntfSpeedOptions | True | many | Attribute | 6 | | switch | InfinibandSwitch | False | one | Parent | | -### SwitchMgmtInterface +#### SwitchMgmtInterface - **Description:** InfiniBand Switch Management Interface - **Label:** InfiniBand Mgmt Interface @@ -97,7 +94,7 @@ Dependencies: `base, extensions/compute` - **Order By:**name__value - **Uniqueness Constraints:**switch + name__value -#### Attributes +##### Attributes | name | kind | order_weight | optional | label | default_value | description | | ---- | ---- | ------------ | -------- | ----- | ------------- | ----------- | @@ -115,7 +112,7 @@ Dependencies: `base, extensions/compute` | switch | InfinibandSwitch | False | one | Parent | | ipv4\_address | IpamIPAddress | True | one | | -### SwitchIntfSpeedOptions +#### SwitchIntfSpeedOptions - **Description:** InfiniBand Interface Speed Options - **Label:** InfiniBand Interface Speed Options @@ -127,7 +124,7 @@ Dependencies: `base, extensions/compute` - **Order By:**speed__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | label | description | choices | unique | | ---- | ---- | ----- | ----------- | ------- | ------ | @@ -140,7 +137,7 @@ Dependencies: `base, extensions/compute` | ---- | ---- | -------- | ----------- | ---- | | switch | InfinibandSwitchInterface | False | one | Parent | -### RSU +#### RSU - **Description:** InfiniBand Rail-Optimized Scalable Unit - **Label:** InfiniBand RSU @@ -152,7 +149,7 @@ Dependencies: `base, extensions/compute` - **Order By:**identifier__value - **Uniqueness Constraints:**identifier__value -#### Attributes +##### Attributes | name | kind | label | description | regex | optional | | ---- | ---- | ----- | ----------- | ----- | -------- | @@ -166,7 +163,7 @@ Dependencies: `base, extensions/compute` | switches | InfinibandSwitch | True | many | Attribute | | interfaces | InfinibandSwitchInterface | True | many | Attribute | -### Fabric +#### Fabric - **Description:** InfiniBand Network Fabric - **Label:** InfiniBand Network Fabric @@ -178,7 +175,7 @@ Dependencies: `base, extensions/compute` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | label | description | unique | | ---- | ---- | ----- | ----------- | ------ | diff --git a/experimental/location_extended/README.md b/experimental/location_extended/README.md index 4a4baa2..127dc46 100644 --- a/experimental/location_extended/README.md +++ b/experimental/location_extended/README.md @@ -1,51 +1,48 @@ -# Location Extended +## Location Extended This schema extension is the most detailed when it comes to location, you'll find all the layers you can think of. -Dependencies: `base` - -## location_extended - +- **Dependencies:** `base` - **Version:** 1.0 ### Nodes -### Continent +#### Continent - **Label:** Continent - **Icon:** jam:world - **Menu Placement:** LocationGeneric - **Include in Menu:** ✅ -### Country +#### Country - **Label:** Country - **Icon:** gis:search-country - **Menu Placement:** LocationGeneric - **Include in Menu:** ✅ -### Region +#### Region - **Label:** Region - **Icon:** carbon:cics-region-target - **Menu Placement:** LocationGeneric - **Include in Menu:** ✅ -### Metro +#### Metro - **Label:** Metro - **Icon:** healthicons:city - **Menu Placement:** LocationGeneric - **Include in Menu:** ✅ -### Building +#### Building - **Label:** Building - **Icon:** ri:building-line - **Menu Placement:** LocationGeneric - **Include in Menu:** ✅ -#### Attributes +##### Attributes | name | kind | unique | optional | order_weight | | ---- | ---- | ------ | -------- | ------------ | @@ -58,21 +55,21 @@ Dependencies: `base` | ---- | ---- | -------- | ----------- | | owner | OrganizationGeneric | True | one | -### Floor +#### Floor - **Label:** Floor - **Icon:** mdi:home-floor-0 - **Menu Placement:** LocationGeneric - **Include in Menu:** ✅ -### Suite +#### Suite - **Label:** Suite - **Icon:** game-icons:cage - **Menu Placement:** LocationGeneric - **Include in Menu:** ✅ -#### Attributes +##### Attributes | name | kind | unique | optional | order_weight | | ---- | ---- | ------ | -------- | ------------ | @@ -84,14 +81,14 @@ Dependencies: `base` | ---- | ---- | -------- | ----------- | | owner | OrganizationGeneric | True | one | -### Rack +#### Rack - **Label:** Rack - **Icon:** clarity:rack-server-line - **Menu Placement:** LocationGeneric - **Include in Menu:** ✅ -#### Attributes +##### Attributes | name | kind | unique | optional | order_weight | | ---- | ---- | ------ | -------- | ------------ | diff --git a/experimental/modules_linecards/README.md b/experimental/modules_linecards/README.md index e1ec17c..e60ebc8 100644 --- a/experimental/modules_linecards/README.md +++ b/experimental/modules_linecards/README.md @@ -1,16 +1,13 @@ -# Linecard Module +## Linecard Module This schema extension allows you to capture Linecard related information like the version. You can insert the Linecard into a Dcim Physical Device and leverage the Linecard type model. The Linecard can accept PIC to help configure PORT information like breakout-capabilities and configurations. -Dependencies: `base, extensions/modules` - -## linecard - +- **Dependencies:** `base, extensions/modules` - **Version:** 1.0 ### Nodes -### LinecardType +#### LinecardType - **Description:** Linecard Type information, detailing specifications such as part number and manufacturer. - **Label:** Linecard Type @@ -22,7 +19,7 @@ Dependencies: `base, extensions/modules` | ---- | ---- | ----------- | ---- | ----------- | | linecards | DeviceLinecard | many | Generic | Linecards of this type\. | -### Linecard +#### Linecard - **Description:** A Linecard installed in a device, specifying slot, power status, and functionalities. - **Label:** Linecard @@ -34,7 +31,7 @@ Dependencies: `base, extensions/modules` - **Order By:**device__name__value, slot__value - **Uniqueness Constraints:**serial_number__value -#### Attributes +##### Attributes | name | kind | description | order_weight | label | optional | default_value | | ---- | ---- | ----------- | ------------ | ----- | -------- | ------------- | @@ -48,7 +45,7 @@ Dependencies: `base, extensions/modules` | linecard\_type | Linecard Type | DeviceLinecardType | False | one | Attribute | 1150 | | pics | PICs | DevicePic | True | many | Attribute | 1500 | -### Pic +#### Pic - **Description:** Physical Interface Card (PIC) installed in the Linecard, containing multiple ports. - **Label:** PIC @@ -59,7 +56,7 @@ Dependencies: `base, extensions/modules` - **Order By:**linecard__serial_number__value, slot__value - **Uniqueness Constraints:**linecard + slot__value -#### Attributes +##### Attributes | name | kind | description | order_weight | | ---- | ---- | ----------- | ------------ | @@ -72,7 +69,7 @@ Dependencies: `base, extensions/modules` | linecard | Linecard | DeviceLinecard | linecard\_\_pics | False | one | Parent | 1000 | | ports | Ports | InfraPort | | True | many | Component | 1100 | -### Port +#### Port - **Description:** A network port on a PIC, specifying speed and port number. - **Label:** Port @@ -83,7 +80,7 @@ Dependencies: `base, extensions/modules` - **Order By:**pic__slot__value, port_number__value - **Uniqueness Constraints:**pic + port_number__value -#### Attributes +##### Attributes | name | kind | description | order_weight | choices | | ---- | ---- | ----------- | ------------ | ------- | diff --git a/experimental/modules_routing_engine/README.md b/experimental/modules_routing_engine/README.md index c056563..61eb5ed 100644 --- a/experimental/modules_routing_engine/README.md +++ b/experimental/modules_routing_engine/README.md @@ -1,16 +1,13 @@ -# Routing Engine Module +## Routing Engine Module This schema extension allows you to capture Routing Engine related information like the version. You can insert the Routing Engine into a Dcim Physical Device and leverage the Routing Engine type model. -Dependencies: `base, extensions/modules` - -## routing_engine - +- **Dependencies:** `base, extensions/modules` - **Version:** 1.0 ### Nodes -### RoutingEngineType +#### RoutingEngineType - **Description:** Routing Engine Type information, detailing specifications such as part number and manufacturer. - **Label:** Routing Engine Type @@ -22,7 +19,7 @@ Dependencies: `base, extensions/modules` | ---- | ---- | ----------- | ---- | ----------- | | routing\_engines | DeviceRoutingEngine | many | Generic | Routing engines of this type\. | -### RoutingEngine +#### RoutingEngine - **Description:** A Routing Engine (RE) installed in a device, responsible for routing functionalities. - **Label:** Routing Engine @@ -34,7 +31,7 @@ Dependencies: `base, extensions/modules` - **Order By:**device__name__value, slot__value - **Uniqueness Constraints:**serial_number__value -#### Attributes +##### Attributes | name | kind | description | order_weight | label | optional | | ---- | ---- | ----------- | ------------ | ----- | -------- | diff --git a/experimental/qos/README.md b/experimental/qos/README.md index 7a5b5cf..681adf9 100644 --- a/experimental/qos/README.md +++ b/experimental/qos/README.md @@ -1,16 +1,13 @@ -# Quality of Service (QoS) +## Quality of Service (QoS) This schema extension contains models for Quality of Service (QoS) -Dependencies: `base` - -## qos - +- **Dependencies:** `base` - **Version:** 1.0 ### Nodes -### ForwardingClass +#### ForwardingClass - **Description:** Represents a forwarding class in QoS with distinct loss priorities. - **Label:** Forwarding Class @@ -22,7 +19,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:**name__value -#### Attributes +##### Attributes | name | kind | description | unique | order_weight | optional | | ---- | ---- | ----------- | ------ | ------------ | -------- | @@ -30,7 +27,7 @@ Dependencies: `base` | high\_loss\_priority\_code | List | List of code points for high loss priority\. | | 1200 | True | | low\_loss\_priority\_code | List | List of code points for low loss priority\. | | 1300 | True | -### ClassOfService +#### ClassOfService - **Description:** Defines a Class of Service configuration. - **Label:** Class of Service @@ -41,7 +38,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:**name__value -#### Attributes +##### Attributes | name | kind | description | unique | order_weight | | ---- | ---- | ----------- | ------ | ------------ | @@ -53,7 +50,7 @@ Dependencies: `base` | ---- | ---- | ----------- | ----------- | -------- | ------------ | | traffic\_control\_profiles | QosTrafficControlProfile | List of traffic control profiles\. | many | True | 1200 | -### TrafficControlProfile +#### TrafficControlProfile - **Description:** Defines a traffic control profile with an active/inactive state. - **Label:** Traffic Control Profile @@ -65,14 +62,14 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:**name__value -#### Attributes +##### Attributes | name | kind | description | unique | order_weight | choices | default_value | | ---- | ---- | ----------- | ------ | ------------ | ------- | ------------- | | name | Text | Name of the traffic control profile\. | True | 1000 | \`\` | | | status | Dropdown | Status of the traffic control profile \(active/inactive\)\. | | 1200 | \`active, inactive\` | inactive | -### Classifier +#### Classifier - **Description:** Represents a classifier mapping DSCP or EXP values to forwarding classes. - **Label:** Classifier @@ -84,7 +81,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:**name__value -#### Attributes +##### Attributes | name | kind | description | unique | order_weight | choices | | ---- | ---- | ----------- | ------ | ------------ | ------- | @@ -97,7 +94,7 @@ Dependencies: `base` | ---- | ---- | ----------- | ----------- | -------- | ------------ | | forwarding\_classes | QosForwardingClass | List of forwarding classes defined in the classifier\. | many | True | 1300 | -### Scheduler +#### Scheduler - **Description:** Represents a scheduler configuration. - **Label:** Scheduler @@ -109,7 +106,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:**name__value -#### Attributes +##### Attributes | name | kind | description | unique | order_weight | label | choices | optional | | ---- | ---- | ----------- | ------ | ------------ | ----- | ------- | -------- | @@ -119,7 +116,7 @@ Dependencies: `base` | priority | Dropdown | Priority of the scheduler\. | | 1400 | | \`low, high, strict\-high\` | True | | excess\_priority | Dropdown | Excess priority when applicable\. | | 1500 | | \`low, high\` | True | -### SchedulerMap +#### SchedulerMap - **Description:** Defines mappings of schedulers to forwarding classes. - **Label:** Scheduler Map @@ -131,7 +128,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:**name__value -#### Attributes +##### Attributes | name | kind | description | unique | order_weight | | ---- | ---- | ----------- | ------ | ------------ | diff --git a/experimental/security/README.md b/experimental/security/README.md index 67630a3..c927b70 100644 --- a/experimental/security/README.md +++ b/experimental/security/README.md @@ -1,16 +1,13 @@ -# Security +## Security This schema extension contains models for implementing detailed security. -Dependencies: `base` - -## security - +- **Dependencies:** `base` - **Version:** 1.0 ### Generics -### PolicyAssignment +#### PolicyAssignment - **Label:** Security Policy - **Include in Menu:** ❌ @@ -21,11 +18,11 @@ Dependencies: `base` | ---- | ----- | ---- | ---- | ----------- | -------- | | rules | Policy | SecurityRenderedPolicyRule | Component | many | True | -### GenericAddressGroup +#### GenericAddressGroup - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | label | optional | unique | | ---- | ---- | ----- | -------- | ------ | @@ -38,11 +35,11 @@ Dependencies: `base` | ---- | ---- | ----------- | ---- | -------- | | addresses | SecurityGenericAddress | many | Component | True | -### GenericAddress +#### GenericAddress - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | optional | unique | | ---- | ---- | -------- | ------ | @@ -54,11 +51,11 @@ Dependencies: `base` | ---- | ----- | ---- | ----------- | -------- | | address\_groups | Address Groups | SecurityGenericAddressGroup | many | True | -### GenericServiceGroup +#### GenericServiceGroup - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | label | kind | optional | | ---- | ----- | ---- | -------- | @@ -71,11 +68,11 @@ Dependencies: `base` | ---- | ---- | ----- | ----------- | ---- | -------- | | services | SecurityGenericService | Services | many | Component | True | -### GenericService +#### GenericService - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | label | kind | optional | | ---- | ----- | ---- | -------- | @@ -90,7 +87,7 @@ Dependencies: `base` ### Nodes -### Zone +#### Zone - **Description:** Security zones - **Label:** Security zone @@ -98,7 +95,7 @@ Dependencies: `base` - **Menu Placement:** SecurityPolicy - **Include in Menu:** ✅ -#### Attributes +##### Attributes | name | kind | unique | optional | | ---- | ---- | ------ | -------- | @@ -110,7 +107,7 @@ Dependencies: `base` | ---- | ----- | ---- | -------- | ---- | | interfaces | Interfaces | Attribute | True | SecurityFirewallInterface | -### IPAMIPAddress +#### IPAMIPAddress - **Description:** Infrahub IPv4/6 address - **Label:** IPAM IP Address @@ -118,7 +115,7 @@ Dependencies: `base` - **Menu Placement:** SecurityPolicy - **Include in Menu:** ✅ -#### Attributes +##### Attributes | name | kind | optional | | ---- | ---- | -------- | @@ -130,7 +127,7 @@ Dependencies: `base` | ---- | ---- | ----------- | ---- | -------- | | ip\_address | InfraIPAddress | one | Attribute | False | -### IPAMIPPrefix +#### IPAMIPPrefix - **Description:** Infrahub IPv4/6 prefix - **Label:** IPAM IP Prefix @@ -138,7 +135,7 @@ Dependencies: `base` - **Menu Placement:** SecurityPolicy - **Include in Menu:** ✅ -#### Attributes +##### Attributes | name | kind | optional | | ---- | ---- | -------- | @@ -150,7 +147,7 @@ Dependencies: `base` | ---- | ---- | ----------- | ---- | -------- | | ip\_prefix | InfraPrefix | one | Attribute | False | -### IPAddress +#### IPAddress - **Description:** IPv4/6 address - **Label:** IP Address @@ -163,14 +160,14 @@ Dependencies: `base` - **Order By:**address__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | optional | | ---- | ---- | -------- | | address | IPHost | | | description | Text | True | -### Prefix +#### Prefix - **Description:** IPv4/6 prefix - **Label:** Prefix @@ -183,14 +180,14 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | optional | unique | | ---- | ---- | -------- | ------ | | prefix | IPNetwork | False | True | | description | Text | True | | -### IPRange +#### IPRange - **Description:** IPv4/6 Range - **Label:** IP Range @@ -203,14 +200,14 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | label | kind | optional | | ---- | ----- | ---- | -------- | | start | Start IP Address | IPHost | False | | end | End IP Address | IPHost | False | -### FQDN +#### FQDN - **Description:** Full Qualified Domain Name - **Label:** FQDN @@ -223,13 +220,13 @@ Dependencies: `base` - **Order By:**name__value, fqdn__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | label | kind | optional | regex | | ---- | ----- | ---- | -------- | ----- | | fqdn | FQDN | Text | False | \(?=^\.{1,253}\$\)\(^\(\(\(?\!\-\)\[a\-zA\-Z0\-9\-\]{1,63}\(?\<\!\-\)\)\|\(\(?\!\-\)\[a\-zA\-Z0\-9\-\]{1,63}\(?\<\!\-\)\\.\)\+\[a\-zA\-Z\]{2,63}\)\$\) | -### AddressGroup +#### AddressGroup - **Description:** Group of addresses - **Label:** Address Group @@ -237,7 +234,7 @@ Dependencies: `base` - **Menu Placement:** SecurityPolicy - **Include in Menu:** ✅ -### IPProtocol +#### IPProtocol - **Description:** IP protocol - **Label:** IP Protocols @@ -250,13 +247,13 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | optional | | ---- | ---- | -------- | | protocol | Number | True | -### Service +#### Service - **Description:** Service - **Label:** Service @@ -269,7 +266,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | | ---- | ---- | @@ -281,7 +278,7 @@ Dependencies: `base` | ---- | ---- | -------- | ----------- | ---- | | ip\_protocol | SecurityIPProtocol | True | one | Attribute | -### ServiceRange +#### ServiceRange - **Description:** Service range - **Label:** Service range @@ -294,7 +291,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | optional | | ---- | ---- | -------- | @@ -307,7 +304,7 @@ Dependencies: `base` | ---- | ---- | -------- | ----------- | ---- | | ip\_protocol | SecurityIPProtocol | False | one | Attribute | -### ServiceGroup +#### ServiceGroup - **Description:** Group of services - **Label:** Service group @@ -320,7 +317,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -### Policy +#### Policy - **Label:** Security Policy - **Include in Menu:** ❌ @@ -330,7 +327,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | label | kind | optional | | ---- | ----- | ---- | -------- | @@ -345,7 +342,7 @@ Dependencies: `base` | location\_target | LocationGeneric | one | Attribute | True | | device\_target | SecurityFirewall | one | Attribute | True | -### PolicyRule +#### PolicyRule - **Description:** Policy rule - **Label:** Policy rule @@ -358,7 +355,7 @@ Dependencies: `base` - **Order By:**source_zone__name__value, destination_zone__name__value, index__value - **Uniqueness Constraints:**index__value + source_zone + destination_zone + policy -#### Attributes +##### Attributes | name | label | kind | optional | order_weight | enum | default_value | | ---- | ----- | ---- | -------- | ------------ | ---- | ------------- | @@ -383,13 +380,13 @@ Dependencies: `base` | destination\_services | SecurityGenericService | Attribute | many | True | | policy\_rule\_\_destination\_service | | destination\_service\_groups | SecurityGenericServiceGroup | Attribute | many | True | | policy\_rule\_\_destination\_service\_group | -### Firewall +#### Firewall - **Icon:** mdi:firewall - **Menu Placement:** InfraGenericDevice - **Include in Menu:** ✅ -#### Attributes +##### Attributes | name | kind | optional | choices | | ---- | ---- | -------- | ------- | @@ -401,7 +398,7 @@ Dependencies: `base` | ---- | ---- | ----- | ----------- | ---- | | policy | SecurityPolicy | Security Policy | one | Attribute | -### RenderedPolicyRule +#### RenderedPolicyRule - **Description:** Policy rule - **Label:** Policy rule @@ -412,7 +409,7 @@ Dependencies: `base` - **Order By:**source_zone__name__value, destination_zone__name__value, index__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | label | kind | optional | order_weight | enum | default_value | | ---- | ----- | ---- | -------- | ------------ | ---- | ------------- | @@ -437,7 +434,7 @@ Dependencies: `base` | destination\_services | SecurityGenericService | Attribute | many | True | rendered\_policy\_rule\_\_destination\_service | | | destination\_service\_groups | SecurityGenericServiceGroup | Attribute | many | True | rendered\_policy\_rule\_\_destination\_service\_group | | -### FirewallInterface +#### FirewallInterface - **Label:** Firewall Interface - **Icon:** mdi:ethernet diff --git a/experimental/tenancy/README.md b/experimental/tenancy/README.md index b8471a4..1ad5a70 100644 --- a/experimental/tenancy/README.md +++ b/experimental/tenancy/README.md @@ -1,16 +1,13 @@ -# Tenancy +## Tenancy This schema extension introduces tenancy for some of the schema nodes (circuits...) -Dependencies: `base, extensions/circuit` - -## tenancy - +- **Dependencies:** `base, extensions/circuit` - **Version:** 1.0 ### Nodes -### Tenant +#### Tenant - **Description:** A tenant is owning the corresponding entity - **Icon:** mdi:domain diff --git a/experimental/topology/README.md b/experimental/topology/README.md index f6dfbdb..5712253 100644 --- a/experimental/topology/README.md +++ b/experimental/topology/README.md @@ -1,16 +1,13 @@ -# Topology +## Topology A schema for defining and managing network topology, strategies, and services. -Dependencies: `base` - -## topology - +- **Dependencies:** `base` - **Version:** 1.0 ### Generics -### ManagementServer +#### ManagementServer - **Description:** Generic model for network management server (dns, ntp, and dhcp). - **Label:** Network Management Servers @@ -21,7 +18,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | order_weight | optional | choices | | ---- | ---- | ------------ | -------- | ------- | @@ -36,7 +33,7 @@ Dependencies: `base` | location | LocationGeneric | True | many | | | ip\_addresses | InfraIPAddress | True | many | Component | -### GenericElement +#### GenericElement - **Description:** Base model for elements - **Label:** Generic Topology Element @@ -49,7 +46,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | order_weight | optional | | ---- | ---- | ------------ | -------- | @@ -63,7 +60,7 @@ Dependencies: `base` | ---- | ---- | ----------- | ---- | -------- | | topology | TopologyTopology | one | Parent | False | -### NetworkStrategy +#### NetworkStrategy - **Description:** Generic model for network strategies (underlays and overlays). - **Label:** Network Strategy @@ -76,7 +73,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | order_weight | optional | | ---- | ---- | ------------ | -------- | @@ -91,7 +88,7 @@ Dependencies: `base` ### Nodes -### Topology +#### Topology - **Description:** A Topology represents the entire network pod. - **Label:** Topology @@ -103,7 +100,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | unique | order_weight | optional | | ---- | ---- | ------ | ------------ | -------- | @@ -120,7 +117,7 @@ Dependencies: `base` | devices | DcimGenericDevice | True | many | Component | | network\_services | TopologyNetworkService | True | many | Component | -### MPLSStrategy +#### MPLSStrategy - **Description:** Specific strategy attributes for MPLS. - **Label:** MPLS Strategy @@ -133,14 +130,14 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | choices | | ---- | ---- | ------- | | underlay | Dropdown | \`ospf, isis, bgp\` | | overlay | Dropdown | \`ldp, rsvp, segment\_routing\` | -### EVPNStrategy +#### EVPNStrategy - **Description:** Specific strategy attributes for EVPN. - **Label:** EVPN Strategy @@ -153,14 +150,14 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | choices | | ---- | ---- | ------- | | underlay | Dropdown | \`ebgp, ospf, isis\` | | overlay | Dropdown | \`ebgp, ibgp\` | -### PhysicalElement +#### PhysicalElement - **Description:** Physical aspect of topology elements. - **Label:** Physical Topology Element @@ -173,7 +170,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | default_value | order_weight | label | choices | | ---- | ---- | ------------- | ------------ | ----- | ------- | @@ -188,7 +185,7 @@ Dependencies: `base` | ---- | ----- | ---- | -------- | ----------- | ---- | ------------ | | device\_type | Type | DcimDeviceType | True | one | Attribute | 1400 | -### DhcpOption +#### DhcpOption - **Description:** Represents a configurable option within a Dhcp server. - **Label:** Dhcp Option @@ -201,7 +198,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | order_weight | optional | | ---- | ---- | ------------ | -------- | @@ -210,7 +207,7 @@ Dependencies: `base` | option\_code | Number | 2000 | | | content | Text | 2100 | | -### DhcpServer +#### DhcpServer - **Description:** Represents a Dhcp server in the network. - **Label:** Dhcp Server @@ -223,7 +220,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | order_weight | | ---- | ---- | ------------ | @@ -235,7 +232,7 @@ Dependencies: `base` | ---- | ---- | -------- | ----------- | ---- | | dhcp\_options | NetworkDhcpOption | True | many | Component | -### NameServer +#### NameServer - **Description:** Represents a DNS server in the network. - **Label:** DNS Server @@ -248,7 +245,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -### NTPServer +#### NTPServer - **Description:** Represents a NTP server in the network. - **Label:** NTP Server @@ -261,7 +258,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -### NetworkServiceIdentifier +#### NetworkServiceIdentifier - **Description:** Generic model for different types of identifiers used in network services. - **Label:** Network Service Identifier @@ -274,7 +271,7 @@ Dependencies: `base` - **Order By:**identifier__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | | ---- | ---- | @@ -286,7 +283,7 @@ Dependencies: `base` | ---- | ----- | ---- | ----------- | -------- | | service | Network Service | TopologyNetworkService | one | True | -### NetworkService +#### NetworkService - **Description:** Network services attached to a Topology. - **Label:** Network Service @@ -298,7 +295,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | label | kind | order_weight | enum | | ---- | ----- | ---- | ------------ | ---- | diff --git a/experimental/vlan-translation/README.md b/experimental/vlan-translation/README.md index 4626dc4..5634a6a 100644 --- a/experimental/vlan-translation/README.md +++ b/experimental/vlan-translation/README.md @@ -1,16 +1,13 @@ -# VLAN Translation +## VLAN Translation This schema extension is based on Juniper VLAN MAP, and not yet test out for other vendors. -Dependencies: `base` - -## vlan-translation - +- **Dependencies:** `base` - **Version:** 1.0 ### Nodes -### MapInOut +#### MapInOut - **Description:** VLAN Mapping for In/Out operations - **Label:** VLAN Map In/Out @@ -23,7 +20,7 @@ Dependencies: `base` - **Order By:**interface__name__value, direction__value, operation__value - **Uniqueness Constraints:**interface + direction__value -#### Attributes +##### Attributes | name | kind | description | label | order_weight | choices | optional | | ---- | ---- | ----------- | ----- | ------------ | ------- | -------- | diff --git a/extensions/cable/README.md b/extensions/cable/README.md index b9629d2..4130597 100644 --- a/extensions/cable/README.md +++ b/extensions/cable/README.md @@ -1,23 +1,20 @@ -# Cable +## Cable This schema extension contains a basic Cable model allowing you to connect two endpoints. -Dependencies: `base` - -## cable - +- **Dependencies:** `base` - **Version:** 1.0 ### Nodes -### Cable +#### Cable - **Description:** Physical cable connecting two endpoints - **Label:** Cable - **Icon:** mdi:cable-data - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | optional | order_weight | choices | label | | ---- | ---- | -------- | ------------ | ------- | ----- | diff --git a/extensions/circuit/README.md b/extensions/circuit/README.md index 624083a..284cdda 100644 --- a/extensions/circuit/README.md +++ b/extensions/circuit/README.md @@ -1,16 +1,13 @@ -# Circuit +## Circuit This schema extension contains Circuits and ways to connect them with your infrastructure! The circuit could be a fiber connecting two sites, you would then have two endpoints, one on each site. -Dependencies: `base, extensions/location_minimal` - -## circuit - +- **Dependencies:** `base, extensions/location_minimal` - **Version:** 1.0 ### Nodes -### Circuit +#### Circuit - **Description:** A Circuit represent service operated by a provider. - **Label:** Circuit @@ -22,7 +19,7 @@ Dependencies: `base, extensions/location_minimal` - **Order By:**circuit_id__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | unique | optional | description | choices | | ---- | ---- | ------ | -------- | ----------- | ------- | @@ -39,7 +36,7 @@ Dependencies: `base, extensions/location_minimal` | location | LocationHosting | True | one | Attribute | Location | 1500 | | enpoints | DcimCircuitEndpoint | True | many | Component | | | -### CircuitEndpoint +#### CircuitEndpoint - **Description:** A circuit endpoint, could be a position in a MMR... - **Label:** Circuit Endpoint @@ -52,7 +49,7 @@ Dependencies: `base, extensions/location_minimal` - **Order By:**name__value - **Uniqueness Constraints:**circuit + name__value -#### Attributes +##### Attributes | name | kind | description | order_weight | optional | choices | | ---- | ---- | ----------- | ------------ | -------- | ------- | diff --git a/extensions/cluster/README.md b/extensions/cluster/README.md index b95ba41..68f8cf8 100644 --- a/extensions/cluster/README.md +++ b/extensions/cluster/README.md @@ -1,16 +1,13 @@ -# Cluster +## Cluster This schema extension contains the foundations to capture clusters. With this one in place you can unlock various clusters flavors (hosting cluster able to host VMs, firewall clusters built with specific appliances ...) -Dependencies: `base, extensions/compute` - -## cluster - +- **Dependencies:** `base, extensions/compute` - **Version:** 1.0 ### Generics -### Generic +#### Generic - **Description:** A cluster of machines hosting services or other machines. - **Label:** Clusters @@ -22,7 +19,7 @@ Dependencies: `base, extensions/compute` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | description | unique | order_weight | optional | | ---- | ---- | ----------- | ------ | ------------ | -------- | @@ -36,7 +33,7 @@ Dependencies: `base, extensions/compute` | location | Location | LocationGeneric | False | many | Attribute | 1400 | | tags | | BuiltinTag | True | many | Attribute | 2000 | -### GenericComputeUnitNodes +#### GenericComputeUnitNodes - **Description:** A generic to apply on clusters that can be built out of generic compute units. - **Include in Menu:** ❌ diff --git a/extensions/compute/README.md b/extensions/compute/README.md index d305a6c..7400d8d 100644 --- a/extensions/compute/README.md +++ b/extensions/compute/README.md @@ -1,21 +1,18 @@ -# Compute +## Compute With this schema extension in place you will be able to capture all your physical servers. It also gives you the baseline to build virtualization. You might consider HostingCluster extension to go with! -Dependencies: `base` - -## compute - +- **Dependencies:** `base` - **Version:** 1.0 ### Generics -### GenericUnit +#### GenericUnit - **Description:** A generic unit that can compute (e.g. server, vm ...). - **Include in Menu:** ❌ -### HostVirtualMachine +#### HostVirtualMachine - **Description:** A generic unit that can host VM - **Include in Menu:** ❌ @@ -28,27 +25,27 @@ Dependencies: `base` ### Nodes -### PhysicalServer +#### PhysicalServer - **Description:** A physical server with fixed resources and specific hardware characteristics. - **Label:** Physical Server - **Icon:** mdi:server - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | optional | order_weight | choices | | ---- | ---- | -------- | ------------ | ------- | | status | Dropdown | False | 1100 | \`active, provisioning, maintenance, drained\` | -### VirtualMachine +#### VirtualMachine - **Description:** A virtual machine hosted on a server or a cluster. - **Label:** Virtual Machine - **Icon:** carbon:virtual-machine - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | optional | description | order_weight | choices | | ---- | ---- | -------- | ----------- | ------------ | ------- | diff --git a/extensions/cross_connect/README.md b/extensions/cross_connect/README.md index 9e515b7..386aa81 100644 --- a/extensions/cross_connect/README.md +++ b/extensions/cross_connect/README.md @@ -1,16 +1,13 @@ -# Cross Connect +## Cross Connect This extension contains schema to capture Cross Connect. You can see it as "a cable operated by a provider". You will be able to attach it to a location and then connect endpoints to it (e.g. rear interface of a patch panel, circuit endpoint ...) -Dependencies: `base` - -## cross_connect - +- **Dependencies:** `base` - **Version:** 1.0 ### Nodes -### CrossConnect +#### CrossConnect - **Description:** Cross-connect between different endpoints within a datacenter. - **Label:** Cross-Connect @@ -22,7 +19,7 @@ Dependencies: `base` - **Order By:**provider__name__value - **Uniqueness Constraints:**provider + identifier__value -#### Attributes +##### Attributes | name | kind | order_weight | optional | choices | | ---- | ---- | ------------ | -------- | ------- | diff --git a/extensions/dwdm/README.md b/extensions/dwdm/README.md index 2e65ab9..d94c7ec 100644 --- a/extensions/dwdm/README.md +++ b/extensions/dwdm/README.md @@ -1,23 +1,20 @@ -# DWDM +## DWDM This schema extension contains models for OADM (Optical Add Drop Multiplexer) supporting various WDM (Wavelength Division Multiplexing) technologies such as DWDM (Dense Wavelength Division Multiplexing) or CWDM (Coarse Wavelength Division Multiplexing). With some vendors, the tunable optics are not configured via the channel number but via the wavelength and/or the frequency. This model provides a unique entry in Infrahub for those. -Dependencies: `base, extensions/sfp` - -## dwdm - +- **Dependencies:** `base, extensions/sfp` - **Version:** 1.0 ### Generics -### GenericOadmInterface +#### GenericOadmInterface - **Label:** Optical Multiplexer Interfaces - **Icon:** mdi:ethernet - **Menu Placement:** DcimOpticalMultiplexer - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | order_weight | optional | choices | | ---- | ---- | ------------ | -------- | ------- | @@ -27,7 +24,7 @@ Dependencies: `base, extensions/sfp` ### Nodes -### OpticalMultiplexer +#### OpticalMultiplexer - **Description:** An OADM (Optical Add Drop Multiplexer) supporting various WDM (Wavelength Division Multiplexing) technologies. - **Label:** Optical Multiplexer @@ -39,7 +36,7 @@ Dependencies: `base, extensions/sfp` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | unique | order_weight | description | optional | choices | default_value | | ---- | ---- | ------ | ------------ | ----------- | -------- | ------- | ------------- | @@ -54,7 +51,7 @@ Dependencies: `base, extensions/sfp` | front\_interfaces | DcimOadmFrontInterface | front\_interfaces | True | many | Component | | rear\_interface | DcimOadmRearInterface | rear\_interfaces | True | one | Component | -### OadmFrontInterface +#### OadmFrontInterface - **Label:** Optical Multiplexer Front Interfaces - **Menu Placement:** DcimGenericOadmInterface @@ -72,7 +69,7 @@ Dependencies: `base, extensions/sfp` | optical\_multiplexer | DcimOpticalMultiplexer | 900 | front\_interfaces | False | one | Parent | | channels | DcimWdmChannel | 1200 | | True | many | Attribute | -### OadmRearInterface +#### OadmRearInterface - **Label:** Optical Multiplexer Rear Interfaces - **Menu Placement:** DcimGenericOadmInterface @@ -89,7 +86,7 @@ Dependencies: `base, extensions/sfp` | ---- | ---- | ------------ | ---------- | -------- | ----------- | ---- | | optical\_multiplexer | DcimOpticalMultiplexer | 900 | rear\_interface | False | one | Parent | -### WdmChannel +#### WdmChannel - **Description:** A WDM channel with its wavelength and frequency. - **Label:** WDM Channel @@ -101,7 +98,7 @@ Dependencies: `base, extensions/sfp` - **Order By:**wdm_type__value, channel__value - **Uniqueness Constraints:**wdm_type__value + channel__value + wavelength__value + frequency__value, wdm_type__value + channel__value -#### Attributes +##### Attributes | name | kind | description | order_weight | optional | choices | default_value | label | | ---- | ---- | ----------- | ------------ | -------- | ------- | ------------- | ----- | @@ -110,7 +107,7 @@ Dependencies: `base, extensions/sfp` | wavelength | Text | Wavelength of the channel in nm\. | | | \`\` | | Wavelength \(nm\) | | frequency | Text | Frequency of the channel in GHz\. | | | \`\` | | Frequency \(GHz\) | -### WdmSFP +#### WdmSFP - **Description:** SFP with configuration for Wavelength Division Multiplexing. - **Label:** WDM SFP @@ -118,7 +115,7 @@ Dependencies: `base, extensions/sfp` - **Menu Placement:** DcimGenericSFP - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | description | order_weight | optional | choices | default_value | | ---- | ---- | ----------- | ------------ | -------- | ------- | ------------- | diff --git a/extensions/firewall_policer/README.md b/extensions/firewall_policer/README.md index c6dce8f..7f4dd90 100644 --- a/extensions/firewall_policer/README.md +++ b/extensions/firewall_policer/README.md @@ -1,16 +1,13 @@ -# Firewall Policer +## Firewall Policer This schema extension contains models for VMs. You might consider Cluster or/and Hypervisor extension to go with! -Dependencies: `base` - -## firewall_policer - +- **Dependencies:** `base` - **Version:** 1.0 ### Nodes -### Policer +#### Policer - **Description:** A generic policer configuration. - **Label:** Network Policer @@ -22,7 +19,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:**name__value -#### Attributes +##### Attributes | name | kind | label | description | order_weight | unique | optional | choices | | ---- | ---- | ----- | ----------- | ------------ | ------ | -------- | ------- | diff --git a/extensions/hosting_cluster/README.md b/extensions/hosting_cluster/README.md index 12b82ed..f00877d 100644 --- a/extensions/hosting_cluster/README.md +++ b/extensions/hosting_cluster/README.md @@ -1,16 +1,13 @@ -# Hosting Cluster +## Hosting Cluster A rather generic cluster built with compute units (e.g. servers) and able to host VMs. -Dependencies: `base, extensions/cluster, extensions/compute` - -## hosting_cluster - +- **Dependencies:** `base, extensions/cluster, extensions/compute` - **Version:** 1.0 ### Nodes -### Hosting +#### Hosting - **Description:** A cluster hosting virtual machines. - **Label:** Hosting Cluster @@ -18,7 +15,7 @@ Dependencies: `base, extensions/cluster, extensions/compute` - **Menu Placement:** ClusterGeneric - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | order_weight | description | choices | optional | | ---- | ---- | ------------ | ----------- | ------- | -------- | diff --git a/extensions/interface_breakout/README.md b/extensions/interface_breakout/README.md index 5afedff..fed84e2 100644 --- a/extensions/interface_breakout/README.md +++ b/extensions/interface_breakout/README.md @@ -1,11 +1,8 @@ -# Interface Breakdown +## Interface Breakdown This schema extension introduces relationships to support breakout interfaces, enabling you to document the breakdown of a physical interface into smaller physical interfaces. -Dependencies: `base` - -## interface_breakout - +- **Dependencies:** `base` - **Version:** 1.0 ### Extensions diff --git a/extensions/lag/README.md b/extensions/lag/README.md index 147cac0..6c26bfe 100644 --- a/extensions/lag/README.md +++ b/extensions/lag/README.md @@ -1,22 +1,19 @@ -# Lag +## Lag This schema extension includes models for Link Aggregation Groups (LAGs), enabling you to link physical interfaces as building blocs of your LAG interface. It can be used in standard networking environments as well as in compute scenarios, such as capturing bond interfaces. -Dependencies: `base` - -## lag - +- **Dependencies:** `base` - **Version:** 1.0 ### Nodes -### Lag +#### Lag - **Description:** LAG interface - **Label:** LAG Interface - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | label | kind | choices | default_value | description | order_weight | | ---- | ----- | ---- | ------- | ------------- | ----------- | ------------ | diff --git a/extensions/location_minimal/README.md b/extensions/location_minimal/README.md index b296955..a2668cd 100644 --- a/extensions/location_minimal/README.md +++ b/extensions/location_minimal/README.md @@ -1,43 +1,40 @@ -# Location Minimal +## Location Minimal This schema extension is minimal but will provide you with basic items to store location related data. -Dependencies: `base` - -## location_minimal - +- **Dependencies:** `base` - **Version:** 1.0 ### Nodes -### Country +#### Country - **Label:** Country - **Icon:** gis:search-country - **Menu Placement:** LocationGeneric - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | optional | order_weight | | ---- | ---- | -------- | ------------ | | timezone | Text | True | 1300 | -### Metro +#### Metro - **Label:** Metro - **Icon:** healthicons:city - **Menu Placement:** LocationGeneric - **Include in Menu:** ❌ -### Site +#### Site - **Label:** Site - **Icon:** ri:building-line - **Menu Placement:** LocationGeneric - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | unique | optional | order_weight | | ---- | ---- | ------ | -------- | ------------ | @@ -50,14 +47,14 @@ Dependencies: `base` | ---- | ---- | -------- | ----------- | | owner | OrganizationGeneric | True | one | -### Rack +#### Rack - **Label:** Rack - **Icon:** clarity:rack-server-line - **Menu Placement:** LocationGeneric - **Include in Menu:** ✅ -#### Attributes +##### Attributes | name | kind | unique | optional | order_weight | label | default_value | | ---- | ---- | ------ | -------- | ------------ | ----- | ------------- | diff --git a/extensions/modules/README.md b/extensions/modules/README.md index 81f2b77..a7bdec1 100644 --- a/extensions/modules/README.md +++ b/extensions/modules/README.md @@ -1,25 +1,22 @@ -# Modules +## Modules This schema extension allows you to capture Device Modules related information like the serial number or the status. You can insert the Module into a Dcim Physical Device. > [!NOTE] > This extension doesn't contain any Node, you can use the extension module_linecards or modules_routing_engine to use it -Dependencies: `base` - -## modules - +- **Dependencies:** `base` - **Version:** 1.0 ### Generics -### GenericModule +#### GenericModule - **Description:** A generic module, such as a Linecard or Routing Engine, installed in a device. - **Label:** Module - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | unique | description | order_weight | optional | choices | default_value | | ---- | ---- | ------ | ----------- | ------------ | -------- | ------- | ------------- | @@ -34,7 +31,7 @@ Dependencies: `base` | module\_type | DeviceGenericModuleType | False | one | Attribute | 1150 | | | | device | DcimPhysicalDevice | True | one | Attribute | 1000 | Device | device\_\_modules | -### GenericModuleType +#### GenericModuleType - **Description:** A generic module type, with common specifications like part number and manufacturer. - **Label:** Module Type @@ -45,7 +42,7 @@ Dependencies: `base` - **Order By:**manufacturer__name__value, name__value - **Uniqueness Constraints:**part_number__value, name__value + manufacturer -#### Attributes +##### Attributes | name | kind | unique | description | order_weight | optional | label | | ---- | ---- | ------ | ----------- | ------------ | -------- | ----- | diff --git a/extensions/patch_panel/README.md b/extensions/patch_panel/README.md index ed92656..a1625d4 100644 --- a/extensions/patch_panel/README.md +++ b/extensions/patch_panel/README.md @@ -1,26 +1,23 @@ -# Patch Panel +## Patch Panel This schema extension allows you to capture patch panel related information like rear/front interfaces and mapping between them. You can insert the patch panel into a rack and leverage the device type model. Finally you can also capture information about potential modules you would insert into your patch panel. > [!NOTE] > This extension is compatible with all sort of connectors, meaning you can plug cable, circuits, cross-connect to front & rear interfaces! -Dependencies: `base` - -## patch_panel - +- **Dependencies:** `base` - **Version:** 1.0 ### Generics -### GenericPatchPanelInterface +#### GenericPatchPanelInterface - **Label:** Patch Panel Interfaces - **Icon:** mdi:ethernet - **Menu Placement:** DcimPatchPanel - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | order_weight | optional | choices | | ---- | ---- | ------------ | -------- | ------- | @@ -30,7 +27,7 @@ Dependencies: `base` ### Nodes -### PatchPanel +#### PatchPanel - **Description:** A Patch Panel used for managing network cable connections in a data center or telecom setup. - **Label:** Patch Panel @@ -42,7 +39,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | unique | order_weight | label | optional | description | | ---- | ---- | ------ | ------------ | ----- | -------- | ----------- | @@ -58,7 +55,7 @@ Dependencies: `base` | rear\_interfaces | DcimRearPatchPanelInterface | rear\_interfaces | True | many | Component | | modules | DcimPatchPanelModule | | True | many | Component | -### FrontPatchPanelInterface +#### FrontPatchPanelInterface - **Label:** Patch Panel Front Interfaces - **Menu Placement:** DcimGenericPatchPanelInterface @@ -76,7 +73,7 @@ Dependencies: `base` | corresponding\_front\_rear | Corresponding rear interface | DcimRearPatchPanelInterface | 1200 | True | one | Attribute | | | patch\_panel | | DcimPatchPanel | 900 | False | one | Parent | front\_interfaces | -### RearPatchPanelInterface +#### RearPatchPanelInterface - **Label:** Patch Panel Rear Interfaces - **Menu Placement:** DcimGenericPatchPanelInterface @@ -94,7 +91,7 @@ Dependencies: `base` | corresponding\_front\_rear | Corresponding front interfaces | DcimFrontPatchPanelInterface | 1200 | True | many | Attribute | | | patch\_panel | | DcimPatchPanel | 900 | False | one | Parent | rear\_interfaces | -### PatchPanelModule +#### PatchPanelModule - **Label:** Patch Panel Module - **Icon:** mdi:expansion-card @@ -106,7 +103,7 @@ Dependencies: `base` - **Order By:**patch_panel__name__value, position__value - **Uniqueness Constraints:**patch_panel + position__value -#### Attributes +##### Attributes | name | kind | order_weight | description | label | optional | choices | | ---- | ---- | ------------ | ----------- | ----- | -------- | ------- | diff --git a/extensions/peering_ixp/README.md b/extensions/peering_ixp/README.md index e466e1c..1ca83f5 100644 --- a/extensions/peering_ixp/README.md +++ b/extensions/peering_ixp/README.md @@ -1,16 +1,13 @@ -# Exchange Points (IXP) +## Exchange Points (IXP) This schema extension contains all you need to model anything revolving around internet peering (Exchange points ...)! -Dependencies: `base, extensions/routing, extensions/routing_bgp, extensions/routing_bgp_community` - -## peering_ixp - +- **Dependencies:** `base, extensions/routing, extensions/routing_bgp, extensions/routing_bgp_community` - **Version:** 1.0 ### Nodes -### IXP +#### IXP - **Description:** An Internet Exchange Point (IXP) for peering - **Label:** Internet Exchange @@ -22,7 +19,7 @@ Dependencies: `base, extensions/routing, extensions/routing_bgp, extensions/rout - **Order By:**name__value - **Uniqueness Constraints:**name__value -#### Attributes +##### Attributes | name | kind | unique | description | order_weight | optional | choices | default_value | | ---- | ---- | ------ | ----------- | ------------ | -------- | ------- | ------------- | @@ -41,7 +38,7 @@ Dependencies: `base, extensions/routing, extensions/routing_bgp, extensions/rout | bgp\_communities | RoutingBGPCommunity | True | many | Generic | BGP communities associated with the session | | BGP Communities | | | tags | BuiltinTag | True | many | Attribute | | 3000 | | | -### IXPConnection +#### IXPConnection - **Description:** A connection to an Internet Exchange Point (IXP) - **Label:** IXP Connection @@ -54,7 +51,7 @@ Dependencies: `base, extensions/routing, extensions/routing_bgp, extensions/rout - **Order By:**name__value - **Uniqueness Constraints:**name__value -#### Attributes +##### Attributes | name | kind | unique | description | order_weight | optional | label | choices | default_value | | ---- | ---- | ------ | ----------- | ------------ | -------- | ----- | ------- | ------------- | diff --git a/extensions/physical_disk/README.md b/extensions/physical_disk/README.md index 8ea1432..5e3aab9 100644 --- a/extensions/physical_disk/README.md +++ b/extensions/physical_disk/README.md @@ -1,19 +1,16 @@ -# Physical Disks +## Physical Disks Simple schema allowing you to capture physical disks information for the sake of inventory and lifecycle management. > [!NOTE] > This extension is compatible with all sort of device. You can apply the generic "DeviceWithPhysicalDisks" to particular model to enable disks tracking. You might also link that schema to location for instance to capture spares. -Dependencies: `base` - -## physical_disk - +- **Dependencies:** `base` - **Version:** 1.0 ### Generics -### DeviceWithPhysicalDisks +#### DeviceWithPhysicalDisks - **Description:** Generic that hold relationship toward physical disks. To apply on device that can have physical disks. - **Include in Menu:** ❌ @@ -26,7 +23,7 @@ Dependencies: `base` ### Nodes -### PhysicalDisk +#### PhysicalDisk - **Description:** Physical Disk - **Label:** Physical Disk @@ -38,7 +35,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:**name__value + device -#### Attributes +##### Attributes | name | kind | unique | optional | order_weight | description | choices | label | | ---- | ---- | ------ | -------- | ------------ | ----------- | ------- | ----- | diff --git a/extensions/qinq/README.md b/extensions/qinq/README.md index 8d305f2..0282db4 100644 --- a/extensions/qinq/README.md +++ b/extensions/qinq/README.md @@ -1,5 +1,5 @@ -# QinQ +## QinQ This schema extension brings extensions to VLAN model in order to support QinQ. -Dependencies: `base, extensions/vlan` +- **Dependencies:** `base, extensions/vlan` \ No newline at end of file diff --git a/extensions/routing/README.md b/extensions/routing/README.md index fcf101b..69b35be 100644 --- a/extensions/routing/README.md +++ b/extensions/routing/README.md @@ -1,23 +1,20 @@ -# Routing +## Routing This schema extension contains generics to create Routing Protocol "Instance". The idea is to create one Routing Protocol instance per IpamVRF + DcimDevice pair. -Dependencies: `base, extensions/vlan` - -## routing - +- **Dependencies:** `base, extensions/vlan` - **Version:** 1.0 ### Generics -### Protocol +#### Protocol - **Description:** Generic protocol model for routing protocols - **Label:** Protocol - **Icon:** carbon:router - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | optional | unique | description | order_weight | choices | | ---- | ---- | -------- | ------ | ----------- | ------------ | ------- | diff --git a/extensions/routing_aggregate/README.md b/extensions/routing_aggregate/README.md index 4c43eb3..d95e83d 100644 --- a/extensions/routing_aggregate/README.md +++ b/extensions/routing_aggregate/README.md @@ -1,23 +1,20 @@ -# Aggregate +## Aggregate This schema extension contains all you need to model the Aggregate Routing Protocol. -Dependencies: `base, extensions/routing` - -## aggregate - +- **Dependencies:** `base, extensions/routing` - **Version:** 1.0 ### Nodes -### AggregateRoute +#### AggregateRoute - **Description:** Aggregate Protocol with action and BGP communities - **Label:** Aggregate Routes - **Icon:** grommet-icons:aggregate - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | label | kind | optional | default_value | order_weight | | ---- | ----- | ---- | -------- | ------------- | ------------ | diff --git a/extensions/routing_bgp/README.md b/extensions/routing_bgp/README.md index 9b0875c..e2b2ea2 100644 --- a/extensions/routing_bgp/README.md +++ b/extensions/routing_bgp/README.md @@ -1,16 +1,13 @@ -# BGP +## BGP This schema extension contains all you need to model your BGP platform. -Dependencies: `base, extensions/routing` - -## bgp - +- **Dependencies:** `base, extensions/routing` - **Version:** 1.0 ### Nodes -### AutonomousSystem +#### AutonomousSystem - **Description:** An Autonomous System (AS) is a set of Internet routable IP prefixes belonging to a network - **Label:** Autonomous System @@ -23,7 +20,7 @@ Dependencies: `base, extensions/routing` - **Order By:**asn__value, name__value - **Uniqueness Constraints:**asn__value, name__value -#### Attributes +##### Attributes | name | kind | description | order_weight | optional | | ---- | ---- | ----------- | ------------ | -------- | @@ -39,7 +36,7 @@ Dependencies: `base, extensions/routing` | location | LocationGeneric | True | one | Attribute | | devices | DcimDevice | True | many | Attribute | -### BGPPeerGroup +#### BGPPeerGroup - **Description:** A BGP Peer Group is used to regroup parameters that are shared across multiple peers - **Label:** BGP Peer Group @@ -52,7 +49,7 @@ Dependencies: `base, extensions/routing` - **Order By:**name__value - **Uniqueness Constraints:**name__value -#### Attributes +##### Attributes | name | kind | optional | description | order_weight | regex | choices | default_value | | ---- | ---- | -------- | ----------- | ------------ | ----- | ------- | ------------- | @@ -71,7 +68,7 @@ Dependencies: `base, extensions/routing` | local\_as | bgppeergroup\_\_local\_as | RoutingAutonomousSystem | True | one | Attribute | | remote\_as | bgppeergroup\_\_remote\_as | RoutingAutonomousSystem | True | one | Attribute | -### BGPSession +#### BGPSession - **Description:** A BGP Session represent a point to point connection between two routers - **Label:** BGP Session @@ -83,7 +80,7 @@ Dependencies: `base, extensions/routing` - **Order By:**remote_as__asn__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | optional | enum | description | order_weight | choices | regex | | ---- | ---- | -------- | ---- | ----------- | ------------ | ------- | ----- | diff --git a/extensions/routing_bgp_community/README.md b/extensions/routing_bgp_community/README.md index 570fc1e..459fb5c 100644 --- a/extensions/routing_bgp_community/README.md +++ b/extensions/routing_bgp_community/README.md @@ -1,16 +1,13 @@ -# BGP Communities +## BGP Communities This schema extension adds the BGP Communities models. -Dependencies: `base, extensions/routing` - -## bgp_community - +- **Dependencies:** `base, extensions/routing` - **Version:** 1.0 ### Nodes -### BGPCommunity +#### BGPCommunity - **Description:** Defines a BGP community. - **Label:** BGP Community @@ -22,7 +19,7 @@ Dependencies: `base, extensions/routing` - **Order By:**name__value - **Uniqueness Constraints:**name__value, community__value -#### Attributes +##### Attributes | name | kind | description | order_weight | optional | | ---- | ---- | ----------- | ------------ | -------- | diff --git a/extensions/routing_bgp_rr/README.md b/extensions/routing_bgp_rr/README.md index 3b5914f..0bd3211 100644 --- a/extensions/routing_bgp_rr/README.md +++ b/extensions/routing_bgp_rr/README.md @@ -1,16 +1,13 @@ -# BGP Route Reflector +## BGP Route Reflector This schema extension extend the BGP extension to add BGP Route Reflector Clustering. -Dependencies: `base, extensions/routing, extensions/routing_bgp` - -## bgp_rr - +- **Dependencies:** `base, extensions/routing, extensions/routing_bgp` - **Version:** 1.0 ### Nodes -### BGPRRCluster +#### BGPRRCluster - **Description:** A Route Reflector (RR) Cluster used for grouping internal peers - **Label:** Route Reflector Cluster @@ -22,7 +19,7 @@ Dependencies: `base, extensions/routing, extensions/routing_bgp` - **Order By:** - **Uniqueness Constraints:**name__value -#### Attributes +##### Attributes | name | kind | description | order_weight | optional | | ---- | ---- | ----------- | ------------ | -------- | diff --git a/extensions/routing_ospf/README.md b/extensions/routing_ospf/README.md index d22cf47..3fbbfba 100644 --- a/extensions/routing_ospf/README.md +++ b/extensions/routing_ospf/README.md @@ -1,16 +1,13 @@ -# OSPF +## OSPF This schema extension contains all you need to model the OSPF Routing Protocol. -Dependencies: `base, extensions/routing` - -## ospf - +- **Dependencies:** `base, extensions/routing` - **Version:** 1.0 ### Nodes -### OSPF +#### OSPF - **Description:** OSPF (Open Shortest Path First) instance on a Virtual Router. - **Label:** OSPF @@ -22,7 +19,7 @@ Dependencies: `base, extensions/routing` - **Order By:**router_id__address__value, vrf__name__value, device__name__value - **Uniqueness Constraints:**device + vrf + version__value -#### Attributes +##### Attributes | name | kind | optional | default_value | description | order_weight | choices | | ---- | ---- | -------- | ------------- | ----------- | ------------ | ------- | @@ -38,7 +35,7 @@ Dependencies: `base, extensions/routing` | router\_id | IpamIPAddress | True | one | Attribute | | | | ospf\_interfaces | RoutingOSPFInterface | True | many | Component | OSPF Interfaces | ospf\_\_ospfinterfaces | -### OSPFInterface +#### OSPFInterface - **Description:** Pivot table linking OSPF configuration to an interface. - **Label:** OSPF Interface @@ -50,7 +47,7 @@ Dependencies: `base, extensions/routing` - **Order By:**description__value - **Uniqueness Constraints:**ospf + interface -#### Attributes +##### Attributes | name | kind | optional | unique | description | order_weight | choices | default_value | | ---- | ---- | -------- | ------ | ----------- | ------------ | ------- | ------------- | diff --git a/extensions/routing_pim/README.md b/extensions/routing_pim/README.md index 500b0c4..1f77029 100644 --- a/extensions/routing_pim/README.md +++ b/extensions/routing_pim/README.md @@ -1,16 +1,13 @@ -# PIM +## PIM This schema extension contains all you need to model the PIM Protocol. -Dependencies: `base, extensions/routing` - -## pim - +- **Dependencies:** `base, extensions/routing` - **Version:** 1.0 ### Nodes -### PIM +#### PIM - **Description:** Protocol Independent Multicast (PIM) instance on a Virtual Router. - **Label:** PIM @@ -22,7 +19,7 @@ Dependencies: `base, extensions/routing` - **Order By:**vrf__name__value, device__name__value - **Uniqueness Constraints:**device + vrf -#### Attributes +##### Attributes | name | kind | optional | default_value | description | order_weight | | ---- | ---- | -------- | ------------- | ----------- | ------------ | @@ -37,7 +34,7 @@ Dependencies: `base, extensions/routing` | rp\_address | IpamIPAddress | True | Rendezvous Point \(RP\) address for PIM\. | one | Attribute | | | | pim\_interfaces | RoutingPIMInterface | True | | many | Component | PIM Interfaces | pim\_\_piminterfaces | -### PIMInterface +#### PIMInterface - **Description:** Interface configuration for PIM. - **Label:** PIM Interface @@ -49,7 +46,7 @@ Dependencies: `base, extensions/routing` - **Order By:**description__value - **Uniqueness Constraints:**pim + interface -#### Attributes +##### Attributes | name | kind | optional | unique | description | order_weight | choices | default_value | | ---- | ---- | -------- | ------ | ----------- | ------------ | ------- | ------------- | diff --git a/extensions/routing_policies/README.md b/extensions/routing_policies/README.md index 855a684..5f76ee8 100644 --- a/extensions/routing_policies/README.md +++ b/extensions/routing_policies/README.md @@ -1,18 +1,15 @@ -# Routing Policies +## Routing Policies This schema extension contains a generic to create Routing Policies. This Generic can be extend for each Routing Protocols you may want to use. -Dependencies: `base` - -## routing_policies - +- **Dependencies:** `base` - **Version:** 1.0 ### Generics -### Policy +#### Policy - **Description:** Policy defining the rules for routing traffic in a network. - **Icon:** carbon:deployment-policy @@ -23,7 +20,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:**name__value -#### Attributes +##### Attributes | name | kind | description | unique | optional | order_weight | label | choices | default_value | | ---- | ---- | ----------- | ------ | -------- | ------------ | ----- | ------- | ------------- | diff --git a/extensions/routing_policies_aggregate/README.md b/extensions/routing_policies_aggregate/README.md index 0db7309..ae5a981 100644 --- a/extensions/routing_policies_aggregate/README.md +++ b/extensions/routing_policies_aggregate/README.md @@ -1,16 +1,13 @@ -# Routing Policies Aggregate +## Routing Policies Aggregate This extension is using the Routing Policies extensions and the Routing Aggregate one together. -Dependencies: `base, extensions/routing, extensions/routing_policies, extensions/routing_aggregate` - -## routing_policies_aggregate - +- **Dependencies:** `base, extensions/routing, extensions/routing_policies, extensions/routing_aggregate` - **Version:** 1.0 ### Nodes -### PolicyAggregate +#### PolicyAggregate - **Description:** A routing policiers for Aggregate - **Label:** Aggregate Routing Policies diff --git a/extensions/routing_policies_bgp/README.md b/extensions/routing_policies_bgp/README.md index 06cfe0a..181a4b8 100644 --- a/extensions/routing_policies_bgp/README.md +++ b/extensions/routing_policies_bgp/README.md @@ -1,16 +1,13 @@ -# Routing Policies BGP +## Routing Policies BGP This extension is using the Routing Policies extensions and the Routing BGP one together. -Dependencies: `base, extensions/routing, extensions/routing_policies, extensions/routing_bgp` - -## routing_policies_bgp - +- **Dependencies:** `base, extensions/routing, extensions/routing_policies, extensions/routing_bgp` - **Version:** 1.0 ### Nodes -### PolicyBGP +#### PolicyBGP - **Description:** A routing policiers for BGP - **Label:** BGP Routing Policies diff --git a/extensions/routing_policies_ospf/README.md b/extensions/routing_policies_ospf/README.md index 31d215b..6743544 100644 --- a/extensions/routing_policies_ospf/README.md +++ b/extensions/routing_policies_ospf/README.md @@ -1,16 +1,13 @@ -# Routing Policies OSPF +## Routing Policies OSPF This extension is using the Routing Policies extensions and the Routing OSPF one together. -Dependencies: `base, extensions/routing, extensions/routing_policies, extensions/routing_ospf` - -## routing_policies_ospf - +- **Dependencies:** `base, extensions/routing, extensions/routing_policies, extensions/routing_ospf` - **Version:** 1.0 ### Nodes -### PolicyOSPF +#### PolicyOSPF - **Description:** A routing policiers for OSPF - **Label:** OSPF Routing Policies diff --git a/extensions/routing_policies_pim/README.md b/extensions/routing_policies_pim/README.md index 75bc159..190241b 100644 --- a/extensions/routing_policies_pim/README.md +++ b/extensions/routing_policies_pim/README.md @@ -1,16 +1,13 @@ -# Routing Policies (PIM) +## Routing Policies (PIM) This schema inherits the `RoutingPolicy` schema and removes `import_policies` and `export_policies` attributes. However it adds a number of relationships to `RoutingPIM`. -Dependencies: `base, extensions/routing, extensions/routing_policies, extensions/routing_pim` - -## routing_policies_pim - +- **Dependencies:** `base, extensions/routing, extensions/routing_policies, extensions/routing_pim` - **Version:** 1.0 ### Nodes -### PolicyPIM +#### PolicyPIM - **Description:** A routing policiers for PIM - **Label:** PIM Routing Policies diff --git a/extensions/sfp/README.md b/extensions/sfp/README.md index fc71250..879f903 100644 --- a/extensions/sfp/README.md +++ b/extensions/sfp/README.md @@ -1,4 +1,4 @@ -# SFP +## SFP This schema extension gives you all the models you need to document Small Form-factor Pluggable (SFP). @@ -10,22 +10,19 @@ Improvements: - You could plug any SFP into any equipment interface (e.g. a virtual interface ...) - You could link a SFP to an interface AND a location ... -Dependencies: `base` - -## sfp - +- **Dependencies:** `base` - **Version:** 1.0 ### Generics -### GenericSFP +#### GenericSFP - **Description:** Generic base for all Small Form-factor Pluggable (SFP) transceivers. - **Label:** SFP - **Icon:** mdi:gpu - **Include in Menu:** ✅ -#### Attributes +##### Attributes | name | kind | optional | order_weight | description | choices | default_value | | ---- | ---- | -------- | ------------ | ----------- | ------- | ------------- | @@ -44,7 +41,7 @@ Dependencies: `base` ### Nodes -### StandardSFP +#### StandardSFP - **Description:** Standard SFP module for various types (e.g., LR, SR, T). - **Label:** Standard SFP @@ -52,7 +49,7 @@ Dependencies: `base` - **Menu Placement:** DcimGenericSFP - **Include in Menu:** ❌ -### BidiSFP +#### BidiSFP - **Description:** Bidirectional SFP supporting two wavelengths for single-fiber operation. - **Label:** Bidirectional SFP @@ -60,7 +57,7 @@ Dependencies: `base` - **Menu Placement:** DcimGenericSFP - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | label | kind | optional | description | order_weight | | ---- | ----- | ---- | -------- | ----------- | ------------ | diff --git a/extensions/snmp/README.md b/extensions/snmp/README.md index 0c0e85e..b8bd8c2 100644 --- a/extensions/snmp/README.md +++ b/extensions/snmp/README.md @@ -1,16 +1,13 @@ -# SNMP +## SNMP This schema extension contains models for SNMP Communities and SNMP Clients. As you can see this extension is not linked to Tenancy or Device, as you could decide to link the Community to different models based on your use case. -Dependencies: `base` - -## snmp - +- **Dependencies:** `base` - **Version:** 1.0 ### Generics -### Community +#### Community - **Description:** Generic model for SNMP community configurations. - **Label:** SNMP Community @@ -22,7 +19,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | order_weight | optional | | ---- | ---- | ------------ | -------- | @@ -37,7 +34,7 @@ Dependencies: `base` ### Nodes -### CommunityV2 +#### CommunityV2 - **Description:** SNMP v1/v2c community configuration. - **Label:** SNMP v1/v2c @@ -50,14 +47,14 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | order_weight | enum | | ---- | ---- | ------------ | ---- | | community\_string | Password | 1300 | | | access | Text | 1200 | \['Read\-Only', 'Read\-Write'\] | -### CommunityV3 +#### CommunityV3 - **Description:** SNMP version 3 configuration with enhanced security. - **Label:** SNMP v3 @@ -70,7 +67,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | order_weight | label | enum | optional | choices | | ---- | ---- | ------------ | ----- | ---- | -------- | ------- | @@ -81,7 +78,7 @@ Dependencies: `base` | privacy\_password | Password | 1700 | Privacy Password | | True | \`\` | | security\_level | Dropdown | 1200 | Security Level | | | \`noAuthNoPriv, authNoPriv, authPriv\` | -### Client +#### Client - **Description:** Represents an SNMP client that interacts with SNMP Community. - **Label:** SNMP Client @@ -94,7 +91,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | order_weight | label | optional | | ---- | ---- | ------------ | ----- | -------- | diff --git a/extensions/topology/README.md b/extensions/topology/README.md index 61bc258..ef4e43c 100644 --- a/extensions/topology/README.md +++ b/extensions/topology/README.md @@ -1,23 +1,20 @@ -# Topology +## Topology This schema extension introduces abstract network pods and services running in the pods, such as MPLS and EVPN. -Dependencies: `base` - -## topology - +- **Dependencies:** `base` - **Version:** 1.0 ### Generics -### Generic +#### Generic - **Description:** Generic model for topology. - **Label:** Topology - **Icon:** carbon:network-3 - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | order_weight | optional | | ---- | ---- | ------------ | -------- | diff --git a/extensions/users/README.md b/extensions/users/README.md index ee2a7cf..986f67c 100644 --- a/extensions/users/README.md +++ b/extensions/users/README.md @@ -1,16 +1,13 @@ -# Accounts Management +## Accounts Management This schema extension contains models for Accounts management. -Dependencies: `base` - -## users - +- **Dependencies:** `base` - **Version:** 1.0 ### Nodes -### Group +#### Group - **Description:** User Group - **Label:** User Groups @@ -22,7 +19,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:**name__value -#### Attributes +##### Attributes | name | kind | order_weight | optional | label | choices | | ---- | ---- | ------------ | -------- | ----- | ------- | @@ -31,7 +28,7 @@ Dependencies: `base` | idle\_timeout | Number | 1300 | | Idle Timeout \(s\) | \`\` | | permissions | Dropdown | 1200 | False | | \`admin, operator, read\-only\` | -### Account +#### Account - **Description:** User login and authentication - **Label:** User Account @@ -43,7 +40,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:**name__value -#### Attributes +##### Attributes | name | label | kind | optional | description | order_weight | default_value | | ---- | ----- | ---- | -------- | ----------- | ------------ | ------------- | diff --git a/extensions/vlan/README.md b/extensions/vlan/README.md index 1b85108..d9a68e3 100644 --- a/extensions/vlan/README.md +++ b/extensions/vlan/README.md @@ -1,16 +1,13 @@ -# VLAN +## VLAN This schema extension contains models to support VLANs in you network. -Dependencies: `base` - -## vlan - +- **Dependencies:** `base` - **Version:** 1.0 ### Nodes -### VLAN +#### VLAN - **Description:** A VLAN is isolated layer two domain - **Label:** VLAN @@ -23,7 +20,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:**l2domain + vlan_id__value -#### Attributes +##### Attributes | name | kind | optional | choices | | ---- | ---- | -------- | ------- | @@ -41,14 +38,14 @@ Dependencies: `base` | prefixes | IpamPrefix | True | many | | | | l2domain | IpamL2Domain | False | one | Attribute | 1200 | -### L2Domain +#### L2Domain - **Description:** Represents layer 2 domain. - **Label:** Layer 2 Domain - **Icon:** mdi:domain-switch - **Include in Menu:** ❌ -#### Attributes +##### Attributes | name | kind | order_weight | | ---- | ---- | ------------ | diff --git a/extensions/vrf/README.md b/extensions/vrf/README.md index 3221026..016e63b 100644 --- a/extensions/vrf/README.md +++ b/extensions/vrf/README.md @@ -1,16 +1,13 @@ -# VRF +## VRF This schema extension contains models to support VRF in your network. -Dependencies: `base` - -## vrf - +- **Dependencies:** `base` - **Version:** 1.0 ### Nodes -### VRF +#### VRF - **Description:** A VRF is isolated layer three domain - **Label:** VRF @@ -22,7 +19,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | optional | unique | label | order_weight | | ---- | ---- | -------- | ------ | ----- | ------------ | @@ -38,7 +35,7 @@ Dependencies: `base` | import\_rt | IpamRouteTarget | True | one | Attribute | vrf\_\_import | Import Targets | | export\_rt | IpamRouteTarget | True | one | Attribute | vrf\_\_export | Export Targets | -### RouteTarget +#### RouteTarget - **Description:** Route Target (RFC 4360) - **Label:** Route Target @@ -51,7 +48,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:** -#### Attributes +##### Attributes | name | kind | unique | optional | | ---- | ---- | ------ | -------- | diff --git a/extensions/vrrp/README.md b/extensions/vrrp/README.md index 9a24ef0..08b2fd9 100644 --- a/extensions/vrrp/README.md +++ b/extensions/vrrp/README.md @@ -1,16 +1,13 @@ -# VRRP +## VRRP This schema extension contains models for VRRP. -Dependencies: `base` - -## vrrp - +- **Dependencies:** `base` - **Version:** 1.0 ### Nodes -### VRRPGroup +#### VRRPGroup - **Description:** VRRP Group configuration - **Label:** VRRP Group @@ -22,7 +19,7 @@ Dependencies: `base` - **Order By:**name__value - **Uniqueness Constraints:**name__value -#### Attributes +##### Attributes | name | kind | label | unique | description | order_weight | optional | | ---- | ---- | ----- | ------ | ----------- | ------------ | -------- | @@ -37,7 +34,7 @@ Dependencies: `base` | ip\_address | cascade | VRRP IP \(v4 or v6\) | IP Address | IpamIPAddress | True | many | Attribute | 1200 | | vrrp\_interfaces | cascade | | VRRP Interfaces | NetworkVRRPInterface | | many | Component | 1300 | -### VRRPInterface +#### VRRPInterface - **Description:** VRRP Interface configuration - **Label:** VRRP Interface @@ -50,7 +47,7 @@ Dependencies: `base` - **Order By:**priority__value - **Uniqueness Constraints:**vrrp_group + interface -#### Attributes +##### Attributes | name | kind | label | description | regex | default_value | order_weight | | ---- | ---- | ----- | ----------- | ----- | ------------- | ------------ | diff --git a/tasks/schemas.py b/tasks/schemas.py index a2f3da4..d02d944 100644 --- a/tasks/schemas.py +++ b/tasks/schemas.py @@ -129,15 +129,15 @@ def generate_readme(schema, extension_dir: Path) -> list: description = schema.get("description", "") content = [ - f"# {schema.get('name', '')}\n", + f"## {schema.get('name', '')}\n", f"{description}\n" if not description.endswith("\n") else description, ] if dependencies := schema.get("dependencies", []): - content.append(f"Dependencies: `{', '.join(dependencies)}`\n") + content.append(f"- **Dependencies:** `{', '.join(dependencies)}`") if attribution := schema.get("attribution", []): - content.append(f"Attribution: {attribution}\n") + content.append(f"- **Attribution**: {attribution}\n") def format_table(headers: list, rows: list): """Generate a Markdown table.""" @@ -198,7 +198,7 @@ def generate_table_data(data: list): def generate_node_data(node: dict): node_markdown = [] - node_markdown.append(f"### {node.get('name')}\n") + node_markdown.append(f"#### {node.get('name')}\n") if node.get("description"): node_markdown.append(f"- **Description:** {node.get('description')}") if node.get("label"): @@ -222,7 +222,7 @@ def generate_node_data(node: dict): ) if attributes := node.get("attributes", []): - node_markdown.append("#### Attributes") + node_markdown.append("##### Attributes") attribute_headers, attribute_rows = generate_table_data(attributes) node_markdown.append(format_table(attribute_headers, attribute_rows)) @@ -234,7 +234,7 @@ def generate_node_data(node: dict): for _, file_values in schema_definition_files.items(): # content.append(f"## {_}\n") - content.append(f"## {_}\n") + # content.append(f"## {_}\n") content.append(f"- **Version:** {file_values['version']}\n") if generics := file_values.get("generics", []): From 16b56c210afdf057c01dd784ce398ddcb4a5fcd9 Mon Sep 17 00:00:00 2001 From: Pete Crocker Date: Wed, 18 Jun 2025 20:32:13 +0200 Subject: [PATCH 04/24] toc in table --- docs/docs/schema-library.mdx | 137 ++++++++++++++++++++++------------- tasks/schemas.py | 24 +++++- 2 files changed, 106 insertions(+), 55 deletions(-) diff --git a/docs/docs/schema-library.mdx b/docs/docs/schema-library.mdx index 10b64b3..6720ba4 100644 --- a/docs/docs/schema-library.mdx +++ b/docs/docs/schema-library.mdx @@ -3,66 +3,101 @@ title: Schema Library Documentation --- -# Table of Contents +# Schema Library Documentation ## Base -- [dcim](#dcim) -- [ipam](#ipam) -- [location](#location) -- [organization](#organization) +| name | description | +| ---- | ----------- | +| [dcim](#dcim) | | +| [ipam](#ipam) | | +| [location](#location) | | +| [organization](#organization) | | ## Extensions -- [cable](#cable) -- [circuit](#circuit) -- [cluster](#cluster) -- [compute](#compute) -- [cross_connect](#cross_connect) -- [dwdm](#dwdm) -- [firewall_policer](#firewall_policer) -- [hosting_cluster](#hosting_cluster) -- [interface_breakout](#interface_breakout) -- [lag](#lag) -- [location_minimal](#location_minimal) -- [modules](#modules) -- [patch_panel](#patch_panel) -- [peering_ixp](#peering_ixp) -- [physical_disk](#physical_disk) -- [qinq](#qinq) -- [routing](#routing) -- [routing_aggregate](#routing_aggregate) -- [routing_bgp](#routing_bgp) -- [routing_bgp_community](#routing_bgp_community) -- [routing_bgp_rr](#routing_bgp_rr) -- [routing_ospf](#routing_ospf) -- [routing_pim](#routing_pim) -- [routing_policies](#routing_policies) -- [routing_policies_aggregate](#routing_policies_aggregate) -- [routing_policies_bgp](#routing_policies_bgp) -- [routing_policies_ospf](#routing_policies_ospf) -- [routing_policies_pim](#routing_policies_pim) -- [sfp](#sfp) -- [snmp](#snmp) -- [topology](#topology) -- [users](#users) -- [vlan](#vlan) -- [vrf](#vrf) -- [vrrp](#vrrp) +| name | description | +| ---- | ----------- | +| [cable](#cable) | This schema extension contains a basic Cable model allowing you to connect two endpoints. | +| [circuit](#circuit) | This schema extension contains Circuits and ways to connect them with your infrastructure! The circuit could be a fiber connecting two sites, you would then have two endpoints, one on each site. | +| [cluster](#cluster) | This schema extension contains the foundations to capture clusters. With this one in place you can unlock various clusters flavors (hosting cluster able to host VMs, firewall clusters built with specific appliances ...) | +| [compute](#compute) | With this schema extension in place you will be able to capture all your physical servers. It also gives you the baseline to build virtualization. You might consider HostingCluster extension to go with! | +| [cross_connect](#cross_connect) | This extension contains schema to capture Cross Connect. You can see it as "a cable operated by a provider". You will be able to attach it to a location and then connect endpoints to it (e.g. rear interface of a patch panel, circuit endpoint ...) | +| [dwdm](#dwdm) | This schema extension contains models for OADM (Optical Add Drop Multiplexer) supporting various WDM (Wavelength Division Multiplexing) technologies such as DWDM (Dense Wavelength Division Multiplexing) or CWDM (Coarse Wavelength Division Multiplexing). With some vendors, the tunable optics are not configured via the channel number but via the wavelength and/or the frequency. This model provides a unique entry in Infrahub for those. | +| [firewall_policer](#firewall_policer) | This schema extension contains models for VMs. You might consider Cluster or/and Hypervisor extension to go with! | +| [hosting_cluster](#hosting_cluster) | A rather generic cluster built with compute units (e.g. servers) and able to host VMs. | +| [interface_breakout](#interface_breakout) | This schema extension introduces relationships to support breakout interfaces, enabling you to document the breakdown of a physical interface into smaller physical interfaces. | +| [lag](#lag) | This schema extension includes models for Link Aggregation Groups (LAGs), enabling you to link physical interfaces as building blocs of your LAG interface. It can be used in standard networking environments as well as in compute scenarios, such as capturing bond interfaces. | +| [location_minimal](#location_minimal) | This schema extension is minimal but will provide you with basic items to store location related data. | +| [modules](#modules) | This schema extension allows you to capture Device Modules related information like the serial number or the status. You can insert the Module into a Dcim Physical Device. + +> [!NOTE] +> This extension doesn't contain any Node, you can use the extension module_linecards or modules_routing_engine to use it + | +| [patch_panel](#patch_panel) | This schema extension allows you to capture patch panel related information like rear/front interfaces and mapping between them. You can insert the patch panel into a rack and leverage the device type model. Finally you can also capture information about potential modules you would insert into your patch panel. + +> [!NOTE] +> This extension is compatible with all sort of connectors, meaning you can plug cable, circuits, cross-connect to front & rear interfaces! + | +| [peering_ixp](#peering_ixp) | This schema extension contains all you need to model anything revolving around internet peering (Exchange points ...)! | +| [physical_disk](#physical_disk) | Simple schema allowing you to capture physical disks information for the sake of inventory and lifecycle management. + +> [!NOTE] +> This extension is compatible with all sort of device. You can apply the generic "DeviceWithPhysicalDisks" to particular model to enable disks tracking. You might also link that schema to location for instance to capture spares. + | +| [qinq](#qinq) | This schema extension brings extensions to VLAN model in order to support QinQ. | +| [routing](#routing) | This schema extension contains generics to create Routing Protocol "Instance". The idea is to create one Routing Protocol instance per IpamVRF + DcimDevice pair. | +| [routing_aggregate](#routing_aggregate) | This schema extension contains all you need to model the Aggregate Routing Protocol. | +| [routing_bgp](#routing_bgp) | This schema extension contains all you need to model your BGP platform. | +| [routing_bgp_community](#routing_bgp_community) | This schema extension adds the BGP Communities models. | +| [routing_bgp_rr](#routing_bgp_rr) | This schema extension extend the BGP extension to add BGP Route Reflector Clustering. | +| [routing_ospf](#routing_ospf) | This schema extension contains all you need to model the OSPF Routing Protocol. | +| [routing_pim](#routing_pim) | This schema extension contains all you need to model the PIM Protocol. | +| [routing_policies](#routing_policies) | This schema extension contains a generic to create Routing Policies. + +This Generic can be extend for each Routing Protocols you may want to use. + | +| [routing_policies_aggregate](#routing_policies_aggregate) | This extension is using the Routing Policies extensions and the Routing Aggregate one together. | +| [routing_policies_bgp](#routing_policies_bgp) | This extension is using the Routing Policies extensions and the Routing BGP one together. | +| [routing_policies_ospf](#routing_policies_ospf) | This extension is using the Routing Policies extensions and the Routing OSPF one together. | +| [routing_policies_pim](#routing_policies_pim) | This schema inherits the `RoutingPolicy` schema and removes `import_policies` and `export_policies` attributes. However it adds a number of relationships to `RoutingPIM`. | +| [sfp](#sfp) | This schema extension gives you all the models you need to document Small Form-factor Pluggable (SFP). + +You can either plug it into an interface or attach it to a location (e.g. it's a spare SFP stored in a rack). + +Improvements: + +- As of now there is no verification with type / form factor / protocol / distance ... +- You could plug any SFP into any equipment interface (e.g. a virtual interface ...) +- You could link a SFP to an interface AND a location ... + | +| [snmp](#snmp) | This schema extension contains models for SNMP Communities and SNMP Clients. As you can see this extension is not linked to Tenancy or Device, as you could decide to link the Community to different models based on your use case. | +| [topology](#topology) | This schema extension introduces abstract network pods and services running in the pods, such as MPLS and EVPN. | +| [users](#users) | This schema extension contains models for Accounts management. | +| [vlan](#vlan) | This schema extension contains models to support VLANs in you network. | +| [vrf](#vrf) | This schema extension contains models to support VRF in your network. | +| [vrrp](#vrrp) | This schema extension contains models for VRRP. | ## Experimental -- [azure](#azure) -- [circuit_service](#circuit_service) -- [infiniband](#infiniband) -- [location_extended](#location_extended) -- [modules_linecards](#modules_linecards) -- [modules_routing_engine](#modules_routing_engine) -- [qos](#qos) -- [security](#security) -- [tenancy](#tenancy) -- [topology](#topology) -- [vlan-translation](#vlan-translation) +| name | description | +| ---- | ----------- | +| [azure](#azure) | This schema extension introduces cloud support for Microsoft Azure. | +| [circuit_service](#circuit_service) | This schema extension contains model coming on top of circuit to capture a single service shared across multiple circuits. +For example you have a MPLS network supported by a provider connecting multiple locations: + +- One single CircuitService would be needed to store MPLS related information (e.g. service id, provider ...) +- On each site we would create a circuit connecting on one side our device and the CircuitService on the other side + | +| [infiniband](#infiniband) | This schema extension adds support for InfiniBand switches. | +| [location_extended](#location_extended) | This schema extension is the most detailed when it comes to location, you'll find all the layers you can think of. | +| [modules_linecards](#modules_linecards) | This schema extension allows you to capture Linecard related information like the version. You can insert the Linecard into a Dcim Physical Device and leverage the Linecard type model. The Linecard can accept PIC to help configure PORT information like breakout-capabilities and configurations. | +| [modules_routing_engine](#modules_routing_engine) | This schema extension allows you to capture Routing Engine related information like the version. You can insert the Routing Engine into a Dcim Physical Device and leverage the Routing Engine type model. | +| [qos](#qos) | This schema extension contains models for Quality of Service (QoS) | +| [security](#security) | This schema extension contains models for implementing detailed security. | +| [tenancy](#tenancy) | This schema extension introduces tenancy for some of the schema nodes (circuits...) | +| [topology](#topology) | A schema for defining and managing network topology, strategies, and services. | +| [vlan-translation](#vlan-translation) | This schema extension is based on Juniper VLAN MAP, and not yet test out for other vendors. | ## Base Schemas diff --git a/tasks/schemas.py b/tasks/schemas.py index d02d944..fe323b9 100644 --- a/tasks/schemas.py +++ b/tasks/schemas.py @@ -297,21 +297,37 @@ def build(context: Context) -> None: all_content.extend(content) # --- Table of Contents Generation --- - toc = ["# Table of Contents\n"] + toc = ["# Schema Library Documentation\n"] toc.append("## Base\n") + toc.append("| name | description |") + toc.append("| ---- | ----------- |") for yml_file in sorted(base_path.glob("*.yml")): name = yml_file.stem - toc.append(f"- [{name}](#{name})") + # Try to get description from schema if available + desc = '' + if name in schema[str(base_path)]: + desc = schema[str(base_path)][name].get('description', '') + toc.append(f"| [{name}](#{name}) | {desc} |") toc.append("\n## Extensions\n") + toc.append("| name | description |") + toc.append("| ---- | ----------- |") for entry in sorted(os.listdir("./extensions")): ext_path = Path("./extensions") / entry if ext_path.is_dir(): - toc.append(f"- [{entry}](#{entry})") + desc = '' + if str(ext_path) in schema and 'description' in schema[str(ext_path)]: + desc = schema[str(ext_path)]['description'] + toc.append(f"| [{entry}](#{entry}) | {desc} |") toc.append("\n## Experimental\n") + toc.append("| name | description |") + toc.append("| ---- | ----------- |") for entry in sorted(os.listdir("./experimental")): exp_path = Path("./experimental") / entry if exp_path.is_dir(): - toc.append(f"- [{entry}](#{entry})") + desc = '' + if str(exp_path) in schema and 'description' in schema[str(exp_path)]: + desc = schema[str(exp_path)]['description'] + toc.append(f"| [{entry}](#{entry}) | {desc} |") all_content.insert(1, "\n".join(toc) + "\n") # --- End Table of Contents --- From 053bdefe4c687864bbb52df1131b96901f35c2b2 Mon Sep 17 00:00:00 2001 From: Pete Crocker Date: Wed, 18 Jun 2025 20:33:35 +0200 Subject: [PATCH 05/24] ruff --- tasks/schemas.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tasks/schemas.py b/tasks/schemas.py index fe323b9..ed7343a 100644 --- a/tasks/schemas.py +++ b/tasks/schemas.py @@ -304,9 +304,9 @@ def build(context: Context) -> None: for yml_file in sorted(base_path.glob("*.yml")): name = yml_file.stem # Try to get description from schema if available - desc = '' + desc = "" if name in schema[str(base_path)]: - desc = schema[str(base_path)][name].get('description', '') + desc = schema[str(base_path)][name].get("description", "") toc.append(f"| [{name}](#{name}) | {desc} |") toc.append("\n## Extensions\n") toc.append("| name | description |") @@ -314,9 +314,9 @@ def build(context: Context) -> None: for entry in sorted(os.listdir("./extensions")): ext_path = Path("./extensions") / entry if ext_path.is_dir(): - desc = '' - if str(ext_path) in schema and 'description' in schema[str(ext_path)]: - desc = schema[str(ext_path)]['description'] + desc = "" + if str(ext_path) in schema and "description" in schema[str(ext_path)]: + desc = schema[str(ext_path)]["description"] toc.append(f"| [{entry}](#{entry}) | {desc} |") toc.append("\n## Experimental\n") toc.append("| name | description |") @@ -324,9 +324,9 @@ def build(context: Context) -> None: for entry in sorted(os.listdir("./experimental")): exp_path = Path("./experimental") / entry if exp_path.is_dir(): - desc = '' - if str(exp_path) in schema and 'description' in schema[str(exp_path)]: - desc = schema[str(exp_path)]['description'] + desc = "" + if str(exp_path) in schema and "description" in schema[str(exp_path)]: + desc = schema[str(exp_path)]["description"] toc.append(f"| [{entry}](#{entry}) | {desc} |") all_content.insert(1, "\n".join(toc) + "\n") # --- End Table of Contents --- From b6a480d2bc7152e8a3bb6ceec3b9a935da5eabea Mon Sep 17 00:00:00 2001 From: Pete Crocker Date: Wed, 18 Jun 2025 21:39:22 +0200 Subject: [PATCH 06/24] fixes --- .metadata.yml | 20 +- base/README.md | 4 +- docs/docs/schema-library.mdx | 1194 +++++++++++++++++++++++++++++++++- tasks/schemas.py | 21 +- 4 files changed, 1217 insertions(+), 22 deletions(-) diff --git a/.metadata.yml b/.metadata.yml index 8f4536e..aff9d6b 100644 --- a/.metadata.yml +++ b/.metadata.yml @@ -1,11 +1,21 @@ --- # yamllint disable rule:line-length -base: +base/dcim: description: - The base schemas serve as the foundation for every single schema extension - you might want to use afterward. This one is mandatory and will unlock access - to the extensions section. - name: Base Schemas + Basic DCIM schema to capture devices, racks, interfaces, and related information. + name: Base DCIM +base/ipam: + description: + Basic IPAM schema to capture IP addresses, subnets, and related information. + name: Base IPAM +base/location: + description: + Basic Location schema to capture locations, sites, and related information. + name: Base Locations +base/organization: + description: + Basic Organization schema to capture organizations, vendors, and related information. + name: Base Organizations experimental/azure: attribution: "[Rowan Coleman](https://www.linkedin.com/in/rowan-coleman-6a147156/)" dependencies: diff --git a/base/README.md b/base/README.md index a5062ad..bdd1343 100644 --- a/base/README.md +++ b/base/README.md @@ -1,6 +1,6 @@ -## Base Schemas +## Base Organizations -The base schemas serve as the foundation for every single schema extension you might want to use afterward. This one is mandatory and will unlock access to the extensions section. +Basic Organization schema to capture organizations, vendors, and related information. - **Version:** 1.0 diff --git a/docs/docs/schema-library.mdx b/docs/docs/schema-library.mdx index 6720ba4..ac15e64 100644 --- a/docs/docs/schema-library.mdx +++ b/docs/docs/schema-library.mdx @@ -9,10 +9,10 @@ title: Schema Library Documentation | name | description | | ---- | ----------- | -| [dcim](#dcim) | | -| [ipam](#ipam) | | -| [location](#location) | | -| [organization](#organization) | | +| [dcim](#dcim) | Basic DCIM schema to capture devices, racks, interfaces, and related information. | +| [ipam](#ipam) | Basic IPAM schema to capture IP addresses, subnets, and related information. | +| [location](#location) | Basic Location schema to capture locations, sites, and related information. | +| [organization](#organization) | Basic Organization schema to capture organizations, vendors, and related information. | ## Extensions @@ -99,9 +99,1191 @@ For example you have a MPLS network supported by a provider connecting multiple | [topology](#topology) | A schema for defining and managing network topology, strategies, and services. | | [vlan-translation](#vlan-translation) | This schema extension is based on Juniper VLAN MAP, and not yet test out for other vendors. | -## Base Schemas +## Base DCIM -The base schemas serve as the foundation for every single schema extension you might want to use afterward. This one is mandatory and will unlock access to the extensions section. +Basic DCIM schema to capture devices, racks, interfaces, and related information. + +- **Version:** 1.0 + +### Generics + +#### GenericDevice + +- **Description:** Generic Device object. +- **Label:** Device +- **Icon:** mdi:server +- **Include in Menu:** ❌ + +#### Ordering and Constraints + +- **Order By:**name__value +- **Uniqueness Constraints:** + +##### Attributes + +| name | kind | unique | order_weight | optional | +| ---- | ---- | ------ | ------------ | -------- | +| name | Text | True | 1000 | | +| description | Text | | 2000 | True | +| os\_version | Text | | 2200 | True | + +#### Relationships + +| name | peer | optional | cardinality | identifier | kind | order_weight | label | +| ---- | ---- | -------- | ----------- | ---------- | ---- | ------------ | ----- | +| interfaces | DcimInterface | True | many | device\_\_interface | Component | | | +| tags | BuiltinTag | True | many | | Attribute | 2000 | | +| primary\_address | IpamIPAddress | True | one | | Attribute | 1700 | Primary IP Address | +| platform | DcimPlatform | True | one | | Attribute | 1250 | | + +#### PhysicalDevice + +- **Description:** Generic holding attributes and relationships relevant for physical device. +- **Include in Menu:** ❌ + +##### Attributes + +| name | label | description | kind | optional | order_weight | default_value | choices | +| ---- | ----- | ----------- | ---- | -------- | ------------ | ------------- | ------- | +| position | Position \(U\) | Lowest unit\. | Number | True | 1500 | | \`\` | +| serial | | | Text | True | 1500 | | \`\` | +| rack\_face | Rack Face | On which face of the rack the device is mounted\. | Dropdown | False | 1515 | front | \`front, rear\` | + +#### Relationships + +| name | peer | optional | cardinality | kind | order_weight | label | +| ---- | ---- | -------- | ----------- | ---- | ------------ | ----- | +| device\_type | DcimDeviceType | True | one | Attribute | 1200 | | +| location | LocationHosting | False | one | Attribute | 1500 | Location | + +#### Endpoint + +- **Description:** Generic Endpoint to receive a connector. +- **Include in Menu:** ❌ + +#### Relationships + +| name | peer | optional | cardinality | order_weight | kind | +| ---- | ---- | -------- | ----------- | ------------ | ---- | +| connector | DcimConnector | True | one | 1500 | Attribute | + +#### Connector + +- **Description:** Generic Connector to link two endpoints together. +- **Include in Menu:** ❌ + +#### Relationships + +| name | peer | optional | cardinality | order_weight | kind | +| ---- | ---- | -------- | ----------- | ------------ | ---- | +| connected\_endpoints | DcimEndpoint | True | many | 1500 | Generic | + +#### Interface + +- **Description:** Generic Network Interface +- **Label:** Interface +- **Include in Menu:** ❌ + +#### Ordering and Constraints + +- **Order By:**device__name__value, name__value +- **Uniqueness Constraints:**device + name__value + +##### Attributes + +| name | kind | description | order_weight | optional | label | default_value | choices | +| ---- | ---- | ----------- | ------------ | -------- | ----- | ------------- | ------- | +| name | Text | Name of the interface | 1000 | | | | \`\` | +| description | Text | A brief description of the interface | 1100 | True | | | \`\` | +| mtu | Number | | 1300 | | MTU | 1514 | \`\` | +| status | Dropdown | The status of the interface | 1200 | | | active | \`provisioning, free, active, maintenance, disabled, deleted, outage\` | +| role | Dropdown | The role of the interface in the network | 1250 | True | | | \`lag, core, cust, access, management, peering, upstream\` | + +#### Relationships + +| name | peer | identifier | optional | cardinality | kind | order_weight | +| ---- | ---- | ---------- | -------- | ----------- | ---- | ------------ | +| device | DcimGenericDevice | device\_\_interface | False | one | Parent | 1025 | +| tags | BuiltinTag | | True | many | Attribute | 3000 | + +#### Layer2 + +- **Description:** Layer 2 specific attributes for network interfaces +- **Label:** Layer 2 Interface +- **Include in Menu:** ❌ + +##### Attributes + +| name | label | kind | optional | choices | description | order_weight | +| ---- | ----- | ---- | -------- | ------- | ----------- | ------------ | +| l2\_mode | Layer2 Mode | Dropdown | True | \`access, trunk, trunk\_all\` | Layer 2 mode of the interface | 1500 | + +#### Layer3 + +- **Description:** Layer 3 specific attributes for network interfaces +- **Label:** Layer 3 Interface +- **Include in Menu:** ❌ + +##### Attributes + +| name | label | kind | description | order_weight | optional | +| ---- | ----- | ---- | ----------- | ------------ | -------- | +| dot1q\_id | VLAN ID \(dot1q\) | Number | Dot1Q VLAN ID | 1600 | True | +| mac\_address | Mac Address | Text | | 1550 | True | + +#### Relationships + +| name | label | peer | cardinality | kind | optional | description | order_weight | +| ---- | ----- | ---- | ----------- | ---- | -------- | ----------- | ------------ | +| ip\_addresses | IP Addresses | IpamIPAddress | many | Attribute | True | List of IP addresses associated with the interface | 1150 | + +#### HasSubInterface + +- **Description:** A generic interface that can have sub-interfaces +- **Include in Menu:** ❌ + +#### Relationships + +| name | label | peer | identifier | optional | cardinality | kind | description | order_weight | +| ---- | ----- | ---- | ---------- | -------- | ----------- | ---- | ----------- | ------------ | +| sub\_interfaces | Sub\-interface\(s\) | InterfaceVirtual | sub\_\_interface | True | many | Attribute | Sub\-interfaces of this interface | 1750 | + +### Nodes + +#### DeviceType + +- **Description:** A model of device +- **Label:** Device Type +- **Icon:** mdi:poll +- **Include in Menu:** ❌ + +#### Ordering and Constraints + +- **Order By:**manufacturer__name__value, name__value +- **Uniqueness Constraints:**manufacturer + name__value + +##### Attributes + +| name | kind | unique | order_weight | optional | label | default_value | +| ---- | ---- | ------ | ------------ | -------- | ----- | ------------- | +| name | Text | True | 1000 | | | | +| description | Text | | 1100 | True | | | +| part\_number | Text | | 1200 | True | Part Number | | +| height | Number | | 1400 | False | Height \(U\) | 1 | +| full\_depth | Boolean | | 1500 | | Full Depth | True | +| weight | Number | | 1600 | True | Weight \(kg\) | | + +#### Relationships + +| name | peer | cardinality | kind | order_weight | optional | +| ---- | ---- | ----------- | ---- | ------------ | -------- | +| platform | DcimPlatform | one | Attribute | 1300 | | +| manufacturer | OrganizationManufacturer | one | Attribute | 1250 | False | +| tags | BuiltinTag | many | Attribute | 2000 | True | + +#### Platform + +- **Description:** A Platform represent the type of software running on a device. +- **Label:** Platform +- **Icon:** mdi:application-cog-outline +- **Include in Menu:** ❌ + +#### Ordering and Constraints + +- **Order By:**manufacturer__name__value, name__value +- **Uniqueness Constraints:**name__value + +##### Attributes + +| name | kind | unique | order_weight | optional | +| ---- | ---- | ------ | ------------ | -------- | +| name | Text | True | 1000 | | +| description | Text | | 1200 | True | +| nornir\_platform | Text | | 1500 | True | +| napalm\_driver | Text | | 1600 | True | +| netmiko\_device\_type | Text | | 1700 | True | +| ansible\_network\_os | Text | | 1800 | True | +| containerlab\_os | Text | | 1900 | True | + +#### Relationships + +| name | peer | optional | cardinality | order_weight | kind | +| ---- | ---- | -------- | ----------- | ------------ | ---- | +| devices | DcimGenericDevice | True | many | 1350 | | +| manufacturer | OrganizationManufacturer | | one | 1300 | Attribute | + +#### Device + +- **Description:** A configurable network device for managing and directing data traffic, including routers, switches... +- **Label:** Network Device +- **Icon:** clarity:network-switch-solid +- **Include in Menu:** ❌ + +##### Attributes + +| name | kind | optional | order_weight | choices | +| ---- | ---- | -------- | ------------ | ------- | +| status | Dropdown | False | 1100 | \`active, provisioning, maintenance, drained\` | +| role | Dropdown | True | 1400 | \`core, edge, cpe, spine, leaf, tor\` | + +#### Physical + +- **Description:** Physical network port on a device +- **Label:** Physical Interface +- **Include in Menu:** ❌ + +#### Virtual + +- **Description:** Virtual interface like VLAN or Loopback +- **Label:** Virtual Interface +- **Include in Menu:** ❌ + +#### Relationships + +| name | peer | cardinality | kind | identifier | description | +| ---- | ---- | ----------- | ---- | ---------- | ----------- | +| parent\_interface | InterfaceHasSubInterface | one | Attribute | sub\_\_interface | Parent interface to which this sub\-interface belongs | + +- **Version:** 1.0 + +### Generics + +#### Generic + +- **Description:** An organization represent a legal entity, a company. +- **Label:** Organization +- **Icon:** mdi:domain +- **Include in Menu:** ✅ + +#### Ordering and Constraints + +- **Order By:**name__value +- **Uniqueness Constraints:** + +##### Attributes + +| name | kind | unique | order_weight | optional | +| ---- | ---- | ------ | ------------ | -------- | +| name | Text | True | 1000 | | +| description | Text | | 1200 | True | + +#### Relationships + +| name | peer | cardinality | kind | optional | order_weight | +| ---- | ---- | ----------- | ---- | -------- | ------------ | +| tags | BuiltinTag | many | Attribute | True | 3000 | + +### Nodes + +#### Manufacturer + +- **Description:** Device Manufacturer +- **Icon:** mdi:domain +- **Menu Placement:** OrganizationGeneric +- **Include in Menu:** ✅ + +#### Relationships + +| name | peer | cardinality | optional | +| ---- | ---- | ----------- | -------- | +| device\_type | DcimDeviceType | many | True | +| platform | DcimPlatform | many | True | + +#### Provider + +- **Description:** Circuit or Location Provider +- **Icon:** mdi:domain +- **Menu Placement:** OrganizationGeneric +- **Include in Menu:** ✅ + +- **Version:** 1.0 + +### Generics + +#### Generic + +- **Description:** Generic Location, could be a country, city ... +- **Label:** Location +- **Icon:** mingcute:location-line +- **Include in Menu:** ✅ + +#### Ordering and Constraints + +- **Order By:**name__value +- **Uniqueness Constraints:** + +##### Attributes + +| name | kind | order_weight | unique | optional | +| ---- | ---- | ------------ | ------ | -------- | +| name | Text | 1000 | | | +| shortname | Text | 1100 | True | | +| description | Text | 1200 | | True | + +#### Relationships + +| name | peer | kind | optional | cardinality | +| ---- | ---- | ---- | -------- | ----------- | +| tags | BuiltinTag | Attribute | True | many | + +#### Hosting + +- **Description:** Location directly hosting device and services. +- **Include in Menu:** ❌ + +#### Relationships + +| name | label | peer | cardinality | optional | +| ---- | ----- | ---- | ----------- | -------- | +| prefixes | Prefixes | IpamPrefix | many | True | +| devices | Devices | DcimPhysicalDevice | many | True | + +- **Version:** 1.0 + +### Nodes + +#### IPAddress + +- **Description:** IP Address +- **Label:** IP Address +- **Icon:** mdi:ip +- **Include in Menu:** ❌ + +#### Ordering and Constraints + +- **Order By:**address__value +- **Uniqueness Constraints:**ip_namespace + address__value + +##### Attributes + +| name | label | kind | optional | regex | +| ---- | ----- | ---- | -------- | ----- | +| fqdn | FQDN | Text | True | \(?=^\.{1,253}\$\)\(^\(\(\(?\!\-\)\[a\-zA\-Z0\-9\-\]{1,63}\(?\<\!\-\)\)\|\(\(?\!\-\)\[a\-zA\-Z0\-9\-\]{1,63}\(?\<\!\-\)\\.\)\+\[a\-zA\-Z\]{2,63}\)\$\) | + +#### Relationships + +| name | peer | optional | cardinality | +| ---- | ---- | -------- | ----------- | +| interface | InterfaceLayer3 | True | one | + +#### Prefix + +- **Description:** IPv4 or IPv6 network (with mask) +- **Label:** Prefix +- **Icon:** mdi:ip-network +- **Include in Menu:** ❌ + +#### Ordering and Constraints + +- **Order By:**prefix__value +- **Uniqueness Constraints:**ip_namespace + prefix__value + +##### Attributes + +| name | kind | choices | optional | +| ---- | ---- | ------- | -------- | +| status | Dropdown | \`active, deprecated, reserved\` | | +| role | Dropdown | \`loopback, management, public, server, supernet, technical, loopback\-vtep\` | True | + +#### Relationships + +| name | peer | optional | cardinality | kind | order_weight | label | identifier | +| ---- | ---- | -------- | ----------- | ---- | ------------ | ----- | ---------- | +| organization | OrganizationGeneric | True | one | Attribute | 1200 | | | +| location | LocationHosting | True | one | Attribute | 1300 | | | +| gateway | IpamIPAddress | True | one | Attribute | 1500 | L3 Gateway | prefix\_\_gateway | + +## Base IPAM + +Basic IPAM schema to capture IP addresses, subnets, and related information. + +- **Version:** 1.0 + +### Generics + +#### GenericDevice + +- **Description:** Generic Device object. +- **Label:** Device +- **Icon:** mdi:server +- **Include in Menu:** ❌ + +#### Ordering and Constraints + +- **Order By:**name__value +- **Uniqueness Constraints:** + +##### Attributes + +| name | kind | unique | order_weight | optional | +| ---- | ---- | ------ | ------------ | -------- | +| name | Text | True | 1000 | | +| description | Text | | 2000 | True | +| os\_version | Text | | 2200 | True | + +#### Relationships + +| name | peer | optional | cardinality | identifier | kind | order_weight | label | +| ---- | ---- | -------- | ----------- | ---------- | ---- | ------------ | ----- | +| interfaces | DcimInterface | True | many | device\_\_interface | Component | | | +| tags | BuiltinTag | True | many | | Attribute | 2000 | | +| primary\_address | IpamIPAddress | True | one | | Attribute | 1700 | Primary IP Address | +| platform | DcimPlatform | True | one | | Attribute | 1250 | | + +#### PhysicalDevice + +- **Description:** Generic holding attributes and relationships relevant for physical device. +- **Include in Menu:** ❌ + +##### Attributes + +| name | label | description | kind | optional | order_weight | default_value | choices | +| ---- | ----- | ----------- | ---- | -------- | ------------ | ------------- | ------- | +| position | Position \(U\) | Lowest unit\. | Number | True | 1500 | | \`\` | +| serial | | | Text | True | 1500 | | \`\` | +| rack\_face | Rack Face | On which face of the rack the device is mounted\. | Dropdown | False | 1515 | front | \`front, rear\` | + +#### Relationships + +| name | peer | optional | cardinality | kind | order_weight | label | +| ---- | ---- | -------- | ----------- | ---- | ------------ | ----- | +| device\_type | DcimDeviceType | True | one | Attribute | 1200 | | +| location | LocationHosting | False | one | Attribute | 1500 | Location | + +#### Endpoint + +- **Description:** Generic Endpoint to receive a connector. +- **Include in Menu:** ❌ + +#### Relationships + +| name | peer | optional | cardinality | order_weight | kind | +| ---- | ---- | -------- | ----------- | ------------ | ---- | +| connector | DcimConnector | True | one | 1500 | Attribute | + +#### Connector + +- **Description:** Generic Connector to link two endpoints together. +- **Include in Menu:** ❌ + +#### Relationships + +| name | peer | optional | cardinality | order_weight | kind | +| ---- | ---- | -------- | ----------- | ------------ | ---- | +| connected\_endpoints | DcimEndpoint | True | many | 1500 | Generic | + +#### Interface + +- **Description:** Generic Network Interface +- **Label:** Interface +- **Include in Menu:** ❌ + +#### Ordering and Constraints + +- **Order By:**device__name__value, name__value +- **Uniqueness Constraints:**device + name__value + +##### Attributes + +| name | kind | description | order_weight | optional | label | default_value | choices | +| ---- | ---- | ----------- | ------------ | -------- | ----- | ------------- | ------- | +| name | Text | Name of the interface | 1000 | | | | \`\` | +| description | Text | A brief description of the interface | 1100 | True | | | \`\` | +| mtu | Number | | 1300 | | MTU | 1514 | \`\` | +| status | Dropdown | The status of the interface | 1200 | | | active | \`provisioning, free, active, maintenance, disabled, deleted, outage\` | +| role | Dropdown | The role of the interface in the network | 1250 | True | | | \`lag, core, cust, access, management, peering, upstream\` | + +#### Relationships + +| name | peer | identifier | optional | cardinality | kind | order_weight | +| ---- | ---- | ---------- | -------- | ----------- | ---- | ------------ | +| device | DcimGenericDevice | device\_\_interface | False | one | Parent | 1025 | +| tags | BuiltinTag | | True | many | Attribute | 3000 | + +#### Layer2 + +- **Description:** Layer 2 specific attributes for network interfaces +- **Label:** Layer 2 Interface +- **Include in Menu:** ❌ + +##### Attributes + +| name | label | kind | optional | choices | description | order_weight | +| ---- | ----- | ---- | -------- | ------- | ----------- | ------------ | +| l2\_mode | Layer2 Mode | Dropdown | True | \`access, trunk, trunk\_all\` | Layer 2 mode of the interface | 1500 | + +#### Layer3 + +- **Description:** Layer 3 specific attributes for network interfaces +- **Label:** Layer 3 Interface +- **Include in Menu:** ❌ + +##### Attributes + +| name | label | kind | description | order_weight | optional | +| ---- | ----- | ---- | ----------- | ------------ | -------- | +| dot1q\_id | VLAN ID \(dot1q\) | Number | Dot1Q VLAN ID | 1600 | True | +| mac\_address | Mac Address | Text | | 1550 | True | + +#### Relationships + +| name | label | peer | cardinality | kind | optional | description | order_weight | +| ---- | ----- | ---- | ----------- | ---- | -------- | ----------- | ------------ | +| ip\_addresses | IP Addresses | IpamIPAddress | many | Attribute | True | List of IP addresses associated with the interface | 1150 | + +#### HasSubInterface + +- **Description:** A generic interface that can have sub-interfaces +- **Include in Menu:** ❌ + +#### Relationships + +| name | label | peer | identifier | optional | cardinality | kind | description | order_weight | +| ---- | ----- | ---- | ---------- | -------- | ----------- | ---- | ----------- | ------------ | +| sub\_interfaces | Sub\-interface\(s\) | InterfaceVirtual | sub\_\_interface | True | many | Attribute | Sub\-interfaces of this interface | 1750 | + +### Nodes + +#### DeviceType + +- **Description:** A model of device +- **Label:** Device Type +- **Icon:** mdi:poll +- **Include in Menu:** ❌ + +#### Ordering and Constraints + +- **Order By:**manufacturer__name__value, name__value +- **Uniqueness Constraints:**manufacturer + name__value + +##### Attributes + +| name | kind | unique | order_weight | optional | label | default_value | +| ---- | ---- | ------ | ------------ | -------- | ----- | ------------- | +| name | Text | True | 1000 | | | | +| description | Text | | 1100 | True | | | +| part\_number | Text | | 1200 | True | Part Number | | +| height | Number | | 1400 | False | Height \(U\) | 1 | +| full\_depth | Boolean | | 1500 | | Full Depth | True | +| weight | Number | | 1600 | True | Weight \(kg\) | | + +#### Relationships + +| name | peer | cardinality | kind | order_weight | optional | +| ---- | ---- | ----------- | ---- | ------------ | -------- | +| platform | DcimPlatform | one | Attribute | 1300 | | +| manufacturer | OrganizationManufacturer | one | Attribute | 1250 | False | +| tags | BuiltinTag | many | Attribute | 2000 | True | + +#### Platform + +- **Description:** A Platform represent the type of software running on a device. +- **Label:** Platform +- **Icon:** mdi:application-cog-outline +- **Include in Menu:** ❌ + +#### Ordering and Constraints + +- **Order By:**manufacturer__name__value, name__value +- **Uniqueness Constraints:**name__value + +##### Attributes + +| name | kind | unique | order_weight | optional | +| ---- | ---- | ------ | ------------ | -------- | +| name | Text | True | 1000 | | +| description | Text | | 1200 | True | +| nornir\_platform | Text | | 1500 | True | +| napalm\_driver | Text | | 1600 | True | +| netmiko\_device\_type | Text | | 1700 | True | +| ansible\_network\_os | Text | | 1800 | True | +| containerlab\_os | Text | | 1900 | True | + +#### Relationships + +| name | peer | optional | cardinality | order_weight | kind | +| ---- | ---- | -------- | ----------- | ------------ | ---- | +| devices | DcimGenericDevice | True | many | 1350 | | +| manufacturer | OrganizationManufacturer | | one | 1300 | Attribute | + +#### Device + +- **Description:** A configurable network device for managing and directing data traffic, including routers, switches... +- **Label:** Network Device +- **Icon:** clarity:network-switch-solid +- **Include in Menu:** ❌ + +##### Attributes + +| name | kind | optional | order_weight | choices | +| ---- | ---- | -------- | ------------ | ------- | +| status | Dropdown | False | 1100 | \`active, provisioning, maintenance, drained\` | +| role | Dropdown | True | 1400 | \`core, edge, cpe, spine, leaf, tor\` | + +#### Physical + +- **Description:** Physical network port on a device +- **Label:** Physical Interface +- **Include in Menu:** ❌ + +#### Virtual + +- **Description:** Virtual interface like VLAN or Loopback +- **Label:** Virtual Interface +- **Include in Menu:** ❌ + +#### Relationships + +| name | peer | cardinality | kind | identifier | description | +| ---- | ---- | ----------- | ---- | ---------- | ----------- | +| parent\_interface | InterfaceHasSubInterface | one | Attribute | sub\_\_interface | Parent interface to which this sub\-interface belongs | + +- **Version:** 1.0 + +### Generics + +#### Generic + +- **Description:** An organization represent a legal entity, a company. +- **Label:** Organization +- **Icon:** mdi:domain +- **Include in Menu:** ✅ + +#### Ordering and Constraints + +- **Order By:**name__value +- **Uniqueness Constraints:** + +##### Attributes + +| name | kind | unique | order_weight | optional | +| ---- | ---- | ------ | ------------ | -------- | +| name | Text | True | 1000 | | +| description | Text | | 1200 | True | + +#### Relationships + +| name | peer | cardinality | kind | optional | order_weight | +| ---- | ---- | ----------- | ---- | -------- | ------------ | +| tags | BuiltinTag | many | Attribute | True | 3000 | + +### Nodes + +#### Manufacturer + +- **Description:** Device Manufacturer +- **Icon:** mdi:domain +- **Menu Placement:** OrganizationGeneric +- **Include in Menu:** ✅ + +#### Relationships + +| name | peer | cardinality | optional | +| ---- | ---- | ----------- | -------- | +| device\_type | DcimDeviceType | many | True | +| platform | DcimPlatform | many | True | + +#### Provider + +- **Description:** Circuit or Location Provider +- **Icon:** mdi:domain +- **Menu Placement:** OrganizationGeneric +- **Include in Menu:** ✅ + +- **Version:** 1.0 + +### Generics + +#### Generic + +- **Description:** Generic Location, could be a country, city ... +- **Label:** Location +- **Icon:** mingcute:location-line +- **Include in Menu:** ✅ + +#### Ordering and Constraints + +- **Order By:**name__value +- **Uniqueness Constraints:** + +##### Attributes + +| name | kind | order_weight | unique | optional | +| ---- | ---- | ------------ | ------ | -------- | +| name | Text | 1000 | | | +| shortname | Text | 1100 | True | | +| description | Text | 1200 | | True | + +#### Relationships + +| name | peer | kind | optional | cardinality | +| ---- | ---- | ---- | -------- | ----------- | +| tags | BuiltinTag | Attribute | True | many | + +#### Hosting + +- **Description:** Location directly hosting device and services. +- **Include in Menu:** ❌ + +#### Relationships + +| name | label | peer | cardinality | optional | +| ---- | ----- | ---- | ----------- | -------- | +| prefixes | Prefixes | IpamPrefix | many | True | +| devices | Devices | DcimPhysicalDevice | many | True | + +- **Version:** 1.0 + +### Nodes + +#### IPAddress + +- **Description:** IP Address +- **Label:** IP Address +- **Icon:** mdi:ip +- **Include in Menu:** ❌ + +#### Ordering and Constraints + +- **Order By:**address__value +- **Uniqueness Constraints:**ip_namespace + address__value + +##### Attributes + +| name | label | kind | optional | regex | +| ---- | ----- | ---- | -------- | ----- | +| fqdn | FQDN | Text | True | \(?=^\.{1,253}\$\)\(^\(\(\(?\!\-\)\[a\-zA\-Z0\-9\-\]{1,63}\(?\<\!\-\)\)\|\(\(?\!\-\)\[a\-zA\-Z0\-9\-\]{1,63}\(?\<\!\-\)\\.\)\+\[a\-zA\-Z\]{2,63}\)\$\) | + +#### Relationships + +| name | peer | optional | cardinality | +| ---- | ---- | -------- | ----------- | +| interface | InterfaceLayer3 | True | one | + +#### Prefix + +- **Description:** IPv4 or IPv6 network (with mask) +- **Label:** Prefix +- **Icon:** mdi:ip-network +- **Include in Menu:** ❌ + +#### Ordering and Constraints + +- **Order By:**prefix__value +- **Uniqueness Constraints:**ip_namespace + prefix__value + +##### Attributes + +| name | kind | choices | optional | +| ---- | ---- | ------- | -------- | +| status | Dropdown | \`active, deprecated, reserved\` | | +| role | Dropdown | \`loopback, management, public, server, supernet, technical, loopback\-vtep\` | True | + +#### Relationships + +| name | peer | optional | cardinality | kind | order_weight | label | identifier | +| ---- | ---- | -------- | ----------- | ---- | ------------ | ----- | ---------- | +| organization | OrganizationGeneric | True | one | Attribute | 1200 | | | +| location | LocationHosting | True | one | Attribute | 1300 | | | +| gateway | IpamIPAddress | True | one | Attribute | 1500 | L3 Gateway | prefix\_\_gateway | + +## Base Locations + +Basic Location schema to capture locations, sites, and related information. + +- **Version:** 1.0 + +### Generics + +#### GenericDevice + +- **Description:** Generic Device object. +- **Label:** Device +- **Icon:** mdi:server +- **Include in Menu:** ❌ + +#### Ordering and Constraints + +- **Order By:**name__value +- **Uniqueness Constraints:** + +##### Attributes + +| name | kind | unique | order_weight | optional | +| ---- | ---- | ------ | ------------ | -------- | +| name | Text | True | 1000 | | +| description | Text | | 2000 | True | +| os\_version | Text | | 2200 | True | + +#### Relationships + +| name | peer | optional | cardinality | identifier | kind | order_weight | label | +| ---- | ---- | -------- | ----------- | ---------- | ---- | ------------ | ----- | +| interfaces | DcimInterface | True | many | device\_\_interface | Component | | | +| tags | BuiltinTag | True | many | | Attribute | 2000 | | +| primary\_address | IpamIPAddress | True | one | | Attribute | 1700 | Primary IP Address | +| platform | DcimPlatform | True | one | | Attribute | 1250 | | + +#### PhysicalDevice + +- **Description:** Generic holding attributes and relationships relevant for physical device. +- **Include in Menu:** ❌ + +##### Attributes + +| name | label | description | kind | optional | order_weight | default_value | choices | +| ---- | ----- | ----------- | ---- | -------- | ------------ | ------------- | ------- | +| position | Position \(U\) | Lowest unit\. | Number | True | 1500 | | \`\` | +| serial | | | Text | True | 1500 | | \`\` | +| rack\_face | Rack Face | On which face of the rack the device is mounted\. | Dropdown | False | 1515 | front | \`front, rear\` | + +#### Relationships + +| name | peer | optional | cardinality | kind | order_weight | label | +| ---- | ---- | -------- | ----------- | ---- | ------------ | ----- | +| device\_type | DcimDeviceType | True | one | Attribute | 1200 | | +| location | LocationHosting | False | one | Attribute | 1500 | Location | + +#### Endpoint + +- **Description:** Generic Endpoint to receive a connector. +- **Include in Menu:** ❌ + +#### Relationships + +| name | peer | optional | cardinality | order_weight | kind | +| ---- | ---- | -------- | ----------- | ------------ | ---- | +| connector | DcimConnector | True | one | 1500 | Attribute | + +#### Connector + +- **Description:** Generic Connector to link two endpoints together. +- **Include in Menu:** ❌ + +#### Relationships + +| name | peer | optional | cardinality | order_weight | kind | +| ---- | ---- | -------- | ----------- | ------------ | ---- | +| connected\_endpoints | DcimEndpoint | True | many | 1500 | Generic | + +#### Interface + +- **Description:** Generic Network Interface +- **Label:** Interface +- **Include in Menu:** ❌ + +#### Ordering and Constraints + +- **Order By:**device__name__value, name__value +- **Uniqueness Constraints:**device + name__value + +##### Attributes + +| name | kind | description | order_weight | optional | label | default_value | choices | +| ---- | ---- | ----------- | ------------ | -------- | ----- | ------------- | ------- | +| name | Text | Name of the interface | 1000 | | | | \`\` | +| description | Text | A brief description of the interface | 1100 | True | | | \`\` | +| mtu | Number | | 1300 | | MTU | 1514 | \`\` | +| status | Dropdown | The status of the interface | 1200 | | | active | \`provisioning, free, active, maintenance, disabled, deleted, outage\` | +| role | Dropdown | The role of the interface in the network | 1250 | True | | | \`lag, core, cust, access, management, peering, upstream\` | + +#### Relationships + +| name | peer | identifier | optional | cardinality | kind | order_weight | +| ---- | ---- | ---------- | -------- | ----------- | ---- | ------------ | +| device | DcimGenericDevice | device\_\_interface | False | one | Parent | 1025 | +| tags | BuiltinTag | | True | many | Attribute | 3000 | + +#### Layer2 + +- **Description:** Layer 2 specific attributes for network interfaces +- **Label:** Layer 2 Interface +- **Include in Menu:** ❌ + +##### Attributes + +| name | label | kind | optional | choices | description | order_weight | +| ---- | ----- | ---- | -------- | ------- | ----------- | ------------ | +| l2\_mode | Layer2 Mode | Dropdown | True | \`access, trunk, trunk\_all\` | Layer 2 mode of the interface | 1500 | + +#### Layer3 + +- **Description:** Layer 3 specific attributes for network interfaces +- **Label:** Layer 3 Interface +- **Include in Menu:** ❌ + +##### Attributes + +| name | label | kind | description | order_weight | optional | +| ---- | ----- | ---- | ----------- | ------------ | -------- | +| dot1q\_id | VLAN ID \(dot1q\) | Number | Dot1Q VLAN ID | 1600 | True | +| mac\_address | Mac Address | Text | | 1550 | True | + +#### Relationships + +| name | label | peer | cardinality | kind | optional | description | order_weight | +| ---- | ----- | ---- | ----------- | ---- | -------- | ----------- | ------------ | +| ip\_addresses | IP Addresses | IpamIPAddress | many | Attribute | True | List of IP addresses associated with the interface | 1150 | + +#### HasSubInterface + +- **Description:** A generic interface that can have sub-interfaces +- **Include in Menu:** ❌ + +#### Relationships + +| name | label | peer | identifier | optional | cardinality | kind | description | order_weight | +| ---- | ----- | ---- | ---------- | -------- | ----------- | ---- | ----------- | ------------ | +| sub\_interfaces | Sub\-interface\(s\) | InterfaceVirtual | sub\_\_interface | True | many | Attribute | Sub\-interfaces of this interface | 1750 | + +### Nodes + +#### DeviceType + +- **Description:** A model of device +- **Label:** Device Type +- **Icon:** mdi:poll +- **Include in Menu:** ❌ + +#### Ordering and Constraints + +- **Order By:**manufacturer__name__value, name__value +- **Uniqueness Constraints:**manufacturer + name__value + +##### Attributes + +| name | kind | unique | order_weight | optional | label | default_value | +| ---- | ---- | ------ | ------------ | -------- | ----- | ------------- | +| name | Text | True | 1000 | | | | +| description | Text | | 1100 | True | | | +| part\_number | Text | | 1200 | True | Part Number | | +| height | Number | | 1400 | False | Height \(U\) | 1 | +| full\_depth | Boolean | | 1500 | | Full Depth | True | +| weight | Number | | 1600 | True | Weight \(kg\) | | + +#### Relationships + +| name | peer | cardinality | kind | order_weight | optional | +| ---- | ---- | ----------- | ---- | ------------ | -------- | +| platform | DcimPlatform | one | Attribute | 1300 | | +| manufacturer | OrganizationManufacturer | one | Attribute | 1250 | False | +| tags | BuiltinTag | many | Attribute | 2000 | True | + +#### Platform + +- **Description:** A Platform represent the type of software running on a device. +- **Label:** Platform +- **Icon:** mdi:application-cog-outline +- **Include in Menu:** ❌ + +#### Ordering and Constraints + +- **Order By:**manufacturer__name__value, name__value +- **Uniqueness Constraints:**name__value + +##### Attributes + +| name | kind | unique | order_weight | optional | +| ---- | ---- | ------ | ------------ | -------- | +| name | Text | True | 1000 | | +| description | Text | | 1200 | True | +| nornir\_platform | Text | | 1500 | True | +| napalm\_driver | Text | | 1600 | True | +| netmiko\_device\_type | Text | | 1700 | True | +| ansible\_network\_os | Text | | 1800 | True | +| containerlab\_os | Text | | 1900 | True | + +#### Relationships + +| name | peer | optional | cardinality | order_weight | kind | +| ---- | ---- | -------- | ----------- | ------------ | ---- | +| devices | DcimGenericDevice | True | many | 1350 | | +| manufacturer | OrganizationManufacturer | | one | 1300 | Attribute | + +#### Device + +- **Description:** A configurable network device for managing and directing data traffic, including routers, switches... +- **Label:** Network Device +- **Icon:** clarity:network-switch-solid +- **Include in Menu:** ❌ + +##### Attributes + +| name | kind | optional | order_weight | choices | +| ---- | ---- | -------- | ------------ | ------- | +| status | Dropdown | False | 1100 | \`active, provisioning, maintenance, drained\` | +| role | Dropdown | True | 1400 | \`core, edge, cpe, spine, leaf, tor\` | + +#### Physical + +- **Description:** Physical network port on a device +- **Label:** Physical Interface +- **Include in Menu:** ❌ + +#### Virtual + +- **Description:** Virtual interface like VLAN or Loopback +- **Label:** Virtual Interface +- **Include in Menu:** ❌ + +#### Relationships + +| name | peer | cardinality | kind | identifier | description | +| ---- | ---- | ----------- | ---- | ---------- | ----------- | +| parent\_interface | InterfaceHasSubInterface | one | Attribute | sub\_\_interface | Parent interface to which this sub\-interface belongs | + +- **Version:** 1.0 + +### Generics + +#### Generic + +- **Description:** An organization represent a legal entity, a company. +- **Label:** Organization +- **Icon:** mdi:domain +- **Include in Menu:** ✅ + +#### Ordering and Constraints + +- **Order By:**name__value +- **Uniqueness Constraints:** + +##### Attributes + +| name | kind | unique | order_weight | optional | +| ---- | ---- | ------ | ------------ | -------- | +| name | Text | True | 1000 | | +| description | Text | | 1200 | True | + +#### Relationships + +| name | peer | cardinality | kind | optional | order_weight | +| ---- | ---- | ----------- | ---- | -------- | ------------ | +| tags | BuiltinTag | many | Attribute | True | 3000 | + +### Nodes + +#### Manufacturer + +- **Description:** Device Manufacturer +- **Icon:** mdi:domain +- **Menu Placement:** OrganizationGeneric +- **Include in Menu:** ✅ + +#### Relationships + +| name | peer | cardinality | optional | +| ---- | ---- | ----------- | -------- | +| device\_type | DcimDeviceType | many | True | +| platform | DcimPlatform | many | True | + +#### Provider + +- **Description:** Circuit or Location Provider +- **Icon:** mdi:domain +- **Menu Placement:** OrganizationGeneric +- **Include in Menu:** ✅ + +- **Version:** 1.0 + +### Generics + +#### Generic + +- **Description:** Generic Location, could be a country, city ... +- **Label:** Location +- **Icon:** mingcute:location-line +- **Include in Menu:** ✅ + +#### Ordering and Constraints + +- **Order By:**name__value +- **Uniqueness Constraints:** + +##### Attributes + +| name | kind | order_weight | unique | optional | +| ---- | ---- | ------------ | ------ | -------- | +| name | Text | 1000 | | | +| shortname | Text | 1100 | True | | +| description | Text | 1200 | | True | + +#### Relationships + +| name | peer | kind | optional | cardinality | +| ---- | ---- | ---- | -------- | ----------- | +| tags | BuiltinTag | Attribute | True | many | + +#### Hosting + +- **Description:** Location directly hosting device and services. +- **Include in Menu:** ❌ + +#### Relationships + +| name | label | peer | cardinality | optional | +| ---- | ----- | ---- | ----------- | -------- | +| prefixes | Prefixes | IpamPrefix | many | True | +| devices | Devices | DcimPhysicalDevice | many | True | + +- **Version:** 1.0 + +### Nodes + +#### IPAddress + +- **Description:** IP Address +- **Label:** IP Address +- **Icon:** mdi:ip +- **Include in Menu:** ❌ + +#### Ordering and Constraints + +- **Order By:**address__value +- **Uniqueness Constraints:**ip_namespace + address__value + +##### Attributes + +| name | label | kind | optional | regex | +| ---- | ----- | ---- | -------- | ----- | +| fqdn | FQDN | Text | True | \(?=^\.{1,253}\$\)\(^\(\(\(?\!\-\)\[a\-zA\-Z0\-9\-\]{1,63}\(?\<\!\-\)\)\|\(\(?\!\-\)\[a\-zA\-Z0\-9\-\]{1,63}\(?\<\!\-\)\\.\)\+\[a\-zA\-Z\]{2,63}\)\$\) | + +#### Relationships + +| name | peer | optional | cardinality | +| ---- | ---- | -------- | ----------- | +| interface | InterfaceLayer3 | True | one | + +#### Prefix + +- **Description:** IPv4 or IPv6 network (with mask) +- **Label:** Prefix +- **Icon:** mdi:ip-network +- **Include in Menu:** ❌ + +#### Ordering and Constraints + +- **Order By:**prefix__value +- **Uniqueness Constraints:**ip_namespace + prefix__value + +##### Attributes + +| name | kind | choices | optional | +| ---- | ---- | ------- | -------- | +| status | Dropdown | \`active, deprecated, reserved\` | | +| role | Dropdown | \`loopback, management, public, server, supernet, technical, loopback\-vtep\` | True | + +#### Relationships + +| name | peer | optional | cardinality | kind | order_weight | label | identifier | +| ---- | ---- | -------- | ----------- | ---- | ------------ | ----- | ---------- | +| organization | OrganizationGeneric | True | one | Attribute | 1200 | | | +| location | LocationHosting | True | one | Attribute | 1300 | | | +| gateway | IpamIPAddress | True | one | Attribute | 1500 | L3 Gateway | prefix\_\_gateway | + +## Base Organizations + +Basic Organization schema to capture organizations, vendors, and related information. - **Version:** 1.0 diff --git a/tasks/schemas.py b/tasks/schemas.py index ed7343a..03dd175 100644 --- a/tasks/schemas.py +++ b/tasks/schemas.py @@ -293,21 +293,24 @@ def build(context: Context) -> None: # Build Readme for base schemas base_path = Path("./base") - content = generate_readme(schema[str(base_path)], base_path) - all_content.extend(content) + for key in sorted(schema.keys()): + if key.startswith("base/"): + name = key.split("/", 1)[1] + yml_path = base_path / f"{name}.yml" + if yml_path.exists(): + content = generate_readme(schema[key], base_path) + all_content.extend(content) # --- Table of Contents Generation --- toc = ["# Schema Library Documentation\n"] toc.append("## Base\n") toc.append("| name | description |") toc.append("| ---- | ----------- |") - for yml_file in sorted(base_path.glob("*.yml")): - name = yml_file.stem - # Try to get description from schema if available - desc = "" - if name in schema[str(base_path)]: - desc = schema[str(base_path)][name].get("description", "") - toc.append(f"| [{name}](#{name}) | {desc} |") + for key in sorted(schema.keys()): + if key.startswith("base/"): + name = key.split("/", 1)[1] + desc = schema[key].get("description", "") + toc.append(f"| [{name}](#{name}) | {desc} |") toc.append("\n## Extensions\n") toc.append("| name | description |") toc.append("| ---- | ----------- |") From 33db388c51bf80e05bce03d39a1abac28c9ee51c Mon Sep 17 00:00:00 2001 From: Pete Crocker Date: Wed, 18 Jun 2025 21:41:32 +0200 Subject: [PATCH 07/24] fix CI --- tasks/schemas.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tasks/schemas.py b/tasks/schemas.py index 03dd175..bdba172 100644 --- a/tasks/schemas.py +++ b/tasks/schemas.py @@ -264,6 +264,10 @@ def generate_node_data(node: dict): # Write README.md readme_path = extension_dir / "README.md" + # Ensure the parent directory exists + import os + + os.makedirs(readme_path.parent, exist_ok=True) with open(readme_path, "w", encoding="utf-8") as f: f.writelines("\n".join(content)) From 4c91b01e53432a4032a2ae7d2196ccb9c16b856e Mon Sep 17 00:00:00 2001 From: Pete Crocker Date: Wed, 18 Jun 2025 21:47:26 +0200 Subject: [PATCH 08/24] vibe coding session end --- tasks/schemas.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/tasks/schemas.py b/tasks/schemas.py index bdba172..c56b34b 100644 --- a/tasks/schemas.py +++ b/tasks/schemas.py @@ -233,8 +233,6 @@ def generate_node_data(node: dict): return node_markdown for _, file_values in schema_definition_files.items(): - # content.append(f"## {_}\n") - # content.append(f"## {_}\n") content.append(f"- **Version:** {file_values['version']}\n") if generics := file_values.get("generics", []): From 14abafb9dfc57398bf48c9f0190d1d71fc7566f9 Mon Sep 17 00:00:00 2001 From: Pete Crocker Date: Sun, 22 Jun 2025 10:37:38 +0100 Subject: [PATCH 09/24] fix import --- tasks/schemas.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tasks/schemas.py b/tasks/schemas.py index c56b34b..580cfe4 100644 --- a/tasks/schemas.py +++ b/tasks/schemas.py @@ -263,7 +263,6 @@ def generate_node_data(node: dict): # Write README.md readme_path = extension_dir / "README.md" # Ensure the parent directory exists - import os os.makedirs(readme_path.parent, exist_ok=True) with open(readme_path, "w", encoding="utf-8") as f: From 0a8286331ef25f8788942f5d087745eb7170332c Mon Sep 17 00:00:00 2001 From: Pete Crocker Date: Sun, 22 Jun 2025 10:45:13 +0100 Subject: [PATCH 10/24] fix branching --- tasks/schemas.py | 241 +++++++++++++++++++++++++---------------------- 1 file changed, 129 insertions(+), 112 deletions(-) diff --git a/tasks/schemas.py b/tasks/schemas.py index 580cfe4..3eba73d 100644 --- a/tasks/schemas.py +++ b/tasks/schemas.py @@ -121,6 +121,132 @@ def stop(context: Context) -> None: context.run(f"{COMPOSE_COMMAND} down") +def format_table(headers: list, rows: list): + """Generate a Markdown table.""" + + def escape_markdown(text: str) -> str: + # Escape special markdown characters + special_chars = [ + "|", + "_", + "*", + "`", + "[", + "]", + "(", + ")", + "#", + "+", + "-", + ".", + "!", + "$", + "<", + ">", + ] + + for char in special_chars: + text = text.replace(char, f"\\{char}") + return text + + table = f"\n| {' | '.join(headers)} |\n" + table += f"| {' | '.join(['-' * len(header) for header in headers])} |\n" + for row in rows: + escaped_row = [escape_markdown(cell) for cell in row] + table += f"| {' | '.join(escaped_row)} |\n" + return table + + +def format_data(header: str, data: dict): + if header == "choices": + choices = [choice.get("name", "") for choice in data.get(header, [])] + choices_str = ", ".join(choices) + return f"`{choices_str}`" + + return str(data.get(header, "")) + + +def generate_table_data(data: list): + headers = [] + for attr in data: + for k in attr.keys(): + if k not in headers: + headers.append(k) + + rows = [] + for attr in data: + row = [format_data(header, attr) for header in headers] + rows.append(row) + + return headers, rows + + +def generate_node_data(node: dict): + node_markdown = [] + node_markdown.append(f"#### {node.get('name')}\n") + if node.get("description"): + node_markdown.append(f"- **Description:** {node.get('description')}") + if node.get("label"): + node_markdown.append(f"- **Label:** {node.get('label', '')}") + if node.get("icon"): + node_markdown.append(f"- **Icon:** {node.get('icon', '')}") + if node.get("menu_placement"): + node_markdown.append( + f"- **Menu Placement:** {node.get('menu_placement', '')}" + ) + node_markdown.append( + f"- **Include in Menu:** {'✅' if node.get('include_in_menu') else '❌'}\n" + ) + if node.get("order_by") or node.get("uniqueness_constraints"): + node_markdown.append("#### Ordering and Constraints\n") + node_markdown.append( + f"- **Order By:**{', '.join(node.get('order_by', []))}" + ) + node_markdown.append( + f"- **Uniqueness Constraints:**{', '.join([' + '.join(c) for c in node.get('uniqueness_constraints', [])])}\n" + ) + + if attributes := node.get("attributes", []): + node_markdown.append("##### Attributes") + attribute_headers, attribute_rows = generate_table_data(attributes) + node_markdown.append(format_table(attribute_headers, attribute_rows)) + + if relationships := node.get("relationships", []): + node_markdown.append("#### Relationships") + relationship_headers, relationship_rows = generate_table_data(relationships) + node_markdown.append(format_table(relationship_headers, relationship_rows)) + return node_markdown + + +def handle_generics(generics): + content = ["### Generics\n"] + for generic in generics: + content.extend(generate_node_data(generic)) + return content + + +def handle_nodes(nodes): + content = ["### Nodes\n"] + for node in nodes: + content.extend(generate_node_data(node)) + return content + + +def handle_extensions(extensions): + content = ["### Extensions\n"] + for node in extensions.get("nodes", []): + content.append(f"#### {node.get('kind', '')}\n") + if attributes := node.get("attributes", []): + content.append("#### Attributes") + headers, rows = generate_table_data(attributes) + content.append(format_table(headers, rows)) + if relationships := node.get("relationships", []): + content.append("#### Relationships") + headers, rows = generate_table_data(relationships) + content.append(format_table(headers, rows)) + return content + + def generate_readme(schema, extension_dir: Path) -> list: schema_definition_files = {} for yml_file in extension_dir.glob("*.yml"): @@ -139,126 +265,17 @@ def generate_readme(schema, extension_dir: Path) -> list: if attribution := schema.get("attribution", []): content.append(f"- **Attribution**: {attribution}\n") - def format_table(headers: list, rows: list): - """Generate a Markdown table.""" - - def escape_markdown(text: str) -> str: - # Escape special markdown characters - special_chars = [ - "|", - "_", - "*", - "`", - "[", - "]", - "(", - ")", - "#", - "+", - "-", - ".", - "!", - "$", - "<", - ">", - ] - - for char in special_chars: - text = text.replace(char, f"\\{char}") - return text - - table = f"\n| {' | '.join(headers)} |\n" - table += f"| {' | '.join(['-' * len(header) for header in headers])} |\n" - for row in rows: - escaped_row = [escape_markdown(cell) for cell in row] - table += f"| {' | '.join(escaped_row)} |\n" - return table - - def format_data(header: str, data: dict): - if header == "choices": - choices = [choice.get("name", "") for choice in data.get(header, [])] - choices_str = ", ".join(choices) - return f"`{choices_str}`" - - return str(data.get(header, "")) - - def generate_table_data(data: list): - headers = [] - for attr in data: - for k in attr.keys(): - if k not in headers: - headers.append(k) - - rows = [] - for attr in data: - row = [format_data(header, attr) for header in headers] - rows.append(row) - - return headers, rows - - def generate_node_data(node: dict): - node_markdown = [] - node_markdown.append(f"#### {node.get('name')}\n") - if node.get("description"): - node_markdown.append(f"- **Description:** {node.get('description')}") - if node.get("label"): - node_markdown.append(f"- **Label:** {node.get('label', '')}") - if node.get("icon"): - node_markdown.append(f"- **Icon:** {node.get('icon', '')}") - if node.get("menu_placement"): - node_markdown.append( - f"- **Menu Placement:** {node.get('menu_placement', '')}" - ) - node_markdown.append( - f"- **Include in Menu:** {'✅' if node.get('include_in_menu') else '❌'}\n" - ) - if node.get("order_by") or node.get("uniqueness_constraints"): - node_markdown.append("#### Ordering and Constraints\n") - node_markdown.append( - f"- **Order By:**{', '.join(node.get('order_by', []))}" - ) - node_markdown.append( - f"- **Uniqueness Constraints:**{', '.join([' + '.join(c) for c in node.get('uniqueness_constraints', [])])}\n" - ) - - if attributes := node.get("attributes", []): - node_markdown.append("##### Attributes") - attribute_headers, attribute_rows = generate_table_data(attributes) - node_markdown.append(format_table(attribute_headers, attribute_rows)) - - if relationships := node.get("relationships", []): - node_markdown.append("#### Relationships") - relationship_headers, relationship_rows = generate_table_data(relationships) - node_markdown.append(format_table(relationship_headers, relationship_rows)) - return node_markdown - for _, file_values in schema_definition_files.items(): content.append(f"- **Version:** {file_values['version']}\n") if generics := file_values.get("generics", []): - content.append("### Generics\n") - for generic in generics: - content.extend(generate_node_data(generic)) + content.extend(handle_generics(generics)) if nodes := file_values.get("nodes", []): - content.append("### Nodes\n") - for node in nodes: - content.extend(generate_node_data(node)) + content.extend(handle_nodes(nodes)) if extensions := file_values.get("extensions", []): - content.append("### Extensions\n") - for node in extensions.get("nodes", []): - content.append(f"#### {node.get('kind', '')}\n") - - if attributes := node.get("attributes", []): - content.append("#### Attributes") - headers, rows = generate_table_data(attributes) - content.append(format_table(headers, rows)) - - if relationships := node.get("relationships", []): - content.append("#### Relationships") - headers, rows = generate_table_data(relationships) - content.append(format_table(headers, rows)) + content.extend(handle_extensions(extensions)) # Write README.md readme_path = extension_dir / "README.md" From 99d6935f17e8a1beb11edb36d1882af4bdf822da Mon Sep 17 00:00:00 2001 From: Pete Crocker Date: Sun, 22 Jun 2025 10:47:23 +0100 Subject: [PATCH 11/24] fix pylint again --- tasks/schemas.py | 79 ++++++++++++++++++++++++------------------------ 1 file changed, 39 insertions(+), 40 deletions(-) diff --git a/tasks/schemas.py b/tasks/schemas.py index 3eba73d..d41386f 100644 --- a/tasks/schemas.py +++ b/tasks/schemas.py @@ -288,38 +288,7 @@ def generate_readme(schema, extension_dir: Path) -> list: return content -@task -def build(context: Context) -> None: - """Generate README.md files for all schema extensions""" - print("Building schema README.md files...") - directories_to_parse = [ - Path("./extensions"), - Path("./experimental"), - ] - - # Create docs directory if it doesn't exist - schema_docs_dir = DOCUMENTATION_DIRECTORY / "docs" - consolidated_doc = schema_docs_dir / "schema-library.mdx" - - all_content = [] - all_content.append( - "---\ntitle: Schema Library Documentation\n---\n\n" - ) - - with open(METADATA_FILE, "r", encoding="utf-8") as f: - schema = yaml.safe_load(f) - - # Build Readme for base schemas - base_path = Path("./base") - for key in sorted(schema.keys()): - if key.startswith("base/"): - name = key.split("/", 1)[1] - yml_path = base_path / f"{name}.yml" - if yml_path.exists(): - content = generate_readme(schema[key], base_path) - all_content.extend(content) - - # --- Table of Contents Generation --- +def generate_toc(schema, base_path, extensions_path, experimental_path): toc = ["# Schema Library Documentation\n"] toc.append("## Base\n") toc.append("| name | description |") @@ -332,8 +301,8 @@ def build(context: Context) -> None: toc.append("\n## Extensions\n") toc.append("| name | description |") toc.append("| ---- | ----------- |") - for entry in sorted(os.listdir("./extensions")): - ext_path = Path("./extensions") / entry + for entry in sorted(os.listdir(extensions_path)): + ext_path = Path(extensions_path) / entry if ext_path.is_dir(): desc = "" if str(ext_path) in schema and "description" in schema[str(ext_path)]: @@ -342,16 +311,18 @@ def build(context: Context) -> None: toc.append("\n## Experimental\n") toc.append("| name | description |") toc.append("| ---- | ----------- |") - for entry in sorted(os.listdir("./experimental")): - exp_path = Path("./experimental") / entry + for entry in sorted(os.listdir(experimental_path)): + exp_path = Path(experimental_path) / entry if exp_path.is_dir(): desc = "" if str(exp_path) in schema and "description" in schema[str(exp_path)]: desc = schema[str(exp_path)]["description"] toc.append(f"| [{entry}](#{entry}) | {desc} |") - all_content.insert(1, "\n".join(toc) + "\n") - # --- End Table of Contents --- + return "\n".join(toc) + "\n" + +def process_schema_directories(schema, directories_to_parse): + all_content = [] for directory in directories_to_parse: for entry in os.listdir(directory): if os.path.isdir(directory / entry): @@ -360,8 +331,36 @@ def build(context: Context) -> None: content = generate_readme(schema[str(path)], path) all_content.extend(content) except KeyError: - print(f"Schema `{path}` is not added to the {METADATA_FILE} file") + print(f"Schema `{path}` is not added to the .metadata.yml file") + return all_content + - # Write consolidated documentation +@task +def build(context: Context) -> None: + """Generate README.md files for all schema extensions""" + print("Building schema README.md files...") + directories_to_parse = [ + Path("./extensions"), + Path("./experimental"), + ] + schema_docs_dir = DOCUMENTATION_DIRECTORY / "docs" + consolidated_doc = schema_docs_dir / "schema-library.mdx" + all_content = [] + all_content.append( + "---\ntitle: Schema Library Documentation\n---\n\n" + ) + with open(METADATA_FILE, "r", encoding="utf-8") as f: + schema = yaml.safe_load(f) + base_path = Path("./base") + for key in sorted(schema.keys()): + if key.startswith("base/"): + name = key.split("/", 1)[1] + yml_path = base_path / f"{name}.yml" + if yml_path.exists(): + content = generate_readme(schema[key], base_path) + all_content.extend(content) + toc = generate_toc(schema, base_path, "./extensions", "./experimental") + all_content.insert(1, toc) + all_content.extend(process_schema_directories(schema, directories_to_parse)) with open(consolidated_doc, "w", encoding="utf-8") as f: f.write("\n".join(all_content)) From 8ebcbb46b9ff4fcc53cf34fcdf324a0781566af9 Mon Sep 17 00:00:00 2001 From: Pete Crocker Date: Sun, 22 Jun 2025 10:49:18 +0100 Subject: [PATCH 12/24] ruff --- tasks/schemas.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/tasks/schemas.py b/tasks/schemas.py index d41386f..736b484 100644 --- a/tasks/schemas.py +++ b/tasks/schemas.py @@ -191,17 +191,13 @@ def generate_node_data(node: dict): if node.get("icon"): node_markdown.append(f"- **Icon:** {node.get('icon', '')}") if node.get("menu_placement"): - node_markdown.append( - f"- **Menu Placement:** {node.get('menu_placement', '')}" - ) + node_markdown.append(f"- **Menu Placement:** {node.get('menu_placement', '')}") node_markdown.append( f"- **Include in Menu:** {'✅' if node.get('include_in_menu') else '❌'}\n" ) if node.get("order_by") or node.get("uniqueness_constraints"): node_markdown.append("#### Ordering and Constraints\n") - node_markdown.append( - f"- **Order By:**{', '.join(node.get('order_by', []))}" - ) + node_markdown.append(f"- **Order By:**{', '.join(node.get('order_by', []))}") node_markdown.append( f"- **Uniqueness Constraints:**{', '.join([' + '.join(c) for c in node.get('uniqueness_constraints', [])])}\n" ) From a687c4db832747c480acb0bb78f8de4481c68c62 Mon Sep 17 00:00:00 2001 From: Pete Crocker Date: Sun, 22 Jun 2025 11:16:15 +0100 Subject: [PATCH 13/24] fix dependency code --- .metadata.yml | 21 +------------- find_cycles.py | 73 ++++++++++++++++++++++++++++++++++++++++++++++++ tasks/schemas.py | 65 +++++++++++++++++++++++++++++------------- 3 files changed, 120 insertions(+), 39 deletions(-) create mode 100644 find_cycles.py diff --git a/.metadata.yml b/.metadata.yml index aff9d6b..95e220c 100644 --- a/.metadata.yml +++ b/.metadata.yml @@ -198,25 +198,6 @@ extensions/modules: > [!NOTE] > This extension doesn't contain any Node, you can use the extension module_linecards or modules_routing_engine to use it name: Modules -extensions/modules_linecards: - dependencies: - - base - - extensions/modules - description: - This schema extension allows you to capture Linecard related information - like the version. You can insert the Linecard into a Dcim Physical Device and - leverage the Linecard type model. The Linecard can accept PIC to help configure - PORT information like breakout-capabilities and configurations. - name: Linecards -extensions/modules_routing_engine: - dependencies: - - base - - extensions/modules - description: - This schema extension allows you to capture Routing Engine related - information like the version. You can insert the Routing Engine into a Dcim Physical - Device and leverage the Routing Engine type model. - name: Routing Engine extensions/patch_panel: dependencies: - base @@ -256,7 +237,7 @@ extensions/qinq: extensions/routing: dependencies: - base - - extensions/vlan + # - extensions/vlan description: This schema extension contains generics to create Routing Protocol "Instance". The idea is to create one Routing Protocol instance per IpamVRF + diff --git a/find_cycles.py b/find_cycles.py new file mode 100644 index 0000000..4bf18e5 --- /dev/null +++ b/find_cycles.py @@ -0,0 +1,73 @@ +import yaml +from collections import defaultdict +import sys + +def load_metadata(path): + with open(path, 'r', encoding='utf-8') as f: + return yaml.safe_load(f) + +def build_dependency_graph(metadata): + graph = defaultdict(list) + for key, value in metadata.items(): + for dep in value.get('dependencies', []): + graph[key].append(dep) + return graph + +def build_reverse_graph(graph): + reverse = defaultdict(list) + for node, deps in graph.items(): + for dep in deps: + reverse[dep].append(node) + return reverse + +def find_cycles(graph): + visited = set() + cycles = [] + def dfs(node, path): + if node in path: + cycle_start = path.index(node) + cycles.append(path[cycle_start:] + [node]) + return + if node in visited: + return + visited.add(node) + path.append(node) + for dep in graph.get(node, []): + dfs(dep, path) + path.pop() + for node in graph: + dfs(node, []) + return cycles + +def print_graph(graph, title): + print(f"\n{title}") + for k, v in graph.items(): + print(f" {k}: {v}") + +def main(): + if len(sys.argv) < 2: + print("Usage: python find_cycles.py ") + sys.exit(1) + metadata_path = sys.argv[1] + metadata = load_metadata(metadata_path) + graph = build_dependency_graph(metadata) + reverse_graph = build_reverse_graph(graph) + print_graph(graph, "Dependency graph (who each node depends on):") + print_graph(reverse_graph, "Reverse dependency graph (who depends on each node):") + cycles = find_cycles(graph) + rev_cycles = find_cycles(reverse_graph) + if cycles: + print("\nCycles found in dependency graph:") + for cycle in cycles: + print(" -> ".join(cycle)) + else: + print("\nNo cycles found in dependency graph.") + if rev_cycles: + print("\nCycles found in reverse dependency graph:") + for cycle in rev_cycles: + print(" -> ".join(cycle)) + else: + print("\nNo cycles found in reverse dependency graph.") + +if __name__ == "__main__": + main() diff --git a/tasks/schemas.py b/tasks/schemas.py index 736b484..8d4e0b2 100644 --- a/tasks/schemas.py +++ b/tasks/schemas.py @@ -1,6 +1,7 @@ import os from collections import defaultdict, deque from pathlib import Path +import copy import yaml # type: ignore from invoke import Context, task # type: ignore @@ -47,19 +48,43 @@ def _build_dependency_graph(metadata): # Parse the metadata list for key, value in metadata.items(): dependencies = value.get("dependencies", []) - for dep in dependencies: - graph[dep].append(key) - all_extensions[key] = dependencies - + graph[key] = list(dependencies) # key: [dependencies] + all_extensions[key] = list(dependencies) + # Ensure 'base' is present as a dummy node + if "base" not in graph: + graph["base"] = [] + all_extensions["base"] = [] return graph, all_extensions # Topological sort to determine a safe load order def _resolve_load_order(graph, all_extensions): + all_exts = copy.deepcopy(all_extensions) load_order = [] # List to store the final load order - - # Queue here is used to keep track of extension to proceed - queue = deque(["base"]) # Start with base anyway + queue = deque([node for node, deps in all_exts.items() if not deps]) + + # For cycle detection + def find_cycle(): + # Improved DFS to print all cycles + visited_nodes = set() + cycles = [] + + def dfs(node, stack): + if node in stack: + cycle_start = stack.index(node) + cycles.append(stack[cycle_start:] + [node]) + return + if node in visited_nodes: + return + visited_nodes.add(node) + stack.append(node) + for dep in graph[node]: + dfs(dep, stack) + stack.pop() + + for n in all_extensions: + dfs(n, []) + return cycles # While we have something to proceed while queue: @@ -67,18 +92,20 @@ def _resolve_load_order(graph, all_extensions): current = queue.popleft() load_order.append(current) - # We will update dependencies that we cleared an extension - for dependency in graph[current]: - # As we loaded current, remove it from the dependency list - all_extensions[dependency].remove(current) - - # If it happens the current was the last needed for a given - if len(all_extensions[dependency]) == 0: - # We add it to the queue to be proceed! - queue.append(dependency) - - if len(load_order) != len(all_extensions): - # If not all nodes are processed, there's a cycle + # Remove 'current' from the dependencies of all other nodes + for node in all_exts: + if current in all_exts[node]: + all_exts[node].remove(current) + # If it happens the current was the last needed for a given + if not all_exts[node]: + # We add it to the queue to be proceed! + queue.append(node) + + if len(load_order) != len(all_exts): + print("\n[Dependency Graph Debug] Unresolved nodes and their dependencies:") + for node, deps in all_exts.items(): + if deps: + print(f" {node}: {deps}") raise ValueError("Cycle detected in dependency graph!") return load_order From 15f623eed3fcdb7d303e0f00b8e5385ff85f728f Mon Sep 17 00:00:00 2001 From: Pete Crocker Date: Sun, 22 Jun 2025 11:17:56 +0100 Subject: [PATCH 14/24] ruff --- find_cycles.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/find_cycles.py b/find_cycles.py index 4bf18e5..3908ca9 100644 --- a/find_cycles.py +++ b/find_cycles.py @@ -2,17 +2,20 @@ from collections import defaultdict import sys + def load_metadata(path): - with open(path, 'r', encoding='utf-8') as f: + with open(path, "r", encoding="utf-8") as f: return yaml.safe_load(f) + def build_dependency_graph(metadata): graph = defaultdict(list) for key, value in metadata.items(): - for dep in value.get('dependencies', []): + for dep in value.get("dependencies", []): graph[key].append(dep) return graph + def build_reverse_graph(graph): reverse = defaultdict(list) for node, deps in graph.items(): @@ -20,9 +23,11 @@ def build_reverse_graph(graph): reverse[dep].append(node) return reverse + def find_cycles(graph): visited = set() cycles = [] + def dfs(node, path): if node in path: cycle_start = path.index(node) @@ -35,15 +40,18 @@ def dfs(node, path): for dep in graph.get(node, []): dfs(dep, path) path.pop() + for node in graph: dfs(node, []) return cycles + def print_graph(graph, title): print(f"\n{title}") for k, v in graph.items(): print(f" {k}: {v}") + def main(): if len(sys.argv) < 2: print("Usage: python find_cycles.py ") @@ -69,5 +77,6 @@ def main(): else: print("\nNo cycles found in reverse dependency graph.") + if __name__ == "__main__": main() From cab17cbda869b553e749e39366a53816b3f343f5 Mon Sep 17 00:00:00 2001 From: Pete Crocker Date: Sun, 22 Jun 2025 12:37:03 +0100 Subject: [PATCH 15/24] more fixes --- .metadata.yml | 2 +- poetry.lock | 36 ++++++++++++++++++++++++------------ pyproject.toml | 1 + 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/.metadata.yml b/.metadata.yml index 95e220c..717c76d 100644 --- a/.metadata.yml +++ b/.metadata.yml @@ -237,7 +237,7 @@ extensions/qinq: extensions/routing: dependencies: - base - # - extensions/vlan + - extensions/vlan description: This schema extension contains generics to create Routing Protocol "Instance". The idea is to create one Routing Protocol instance per IpamVRF + diff --git a/poetry.lock b/poetry.lock index f799101..20ea96a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 2.0.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.1.1 and should not be changed by hand. [[package]] name = "annotated-types" @@ -32,7 +32,7 @@ typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""} [package.extras] doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx_rtd_theme"] -test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "trustme", "truststore (>=0.9.1)", "uvloop (>=0.21)"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "trustme", "truststore (>=0.9.1) ; python_version >= \"3.10\"", "uvloop (>=0.21) ; platform_python_implementation == \"CPython\" and platform_system != \"Windows\" and python_version < \"3.14\""] trio = ["trio (>=0.26.1)"] [[package]] @@ -154,7 +154,7 @@ gitdb = ">=4.0.1,<5" [package.extras] doc = ["sphinx (>=7.1.2,<7.2)", "sphinx-autodoc-typehints", "sphinx_rtd_theme"] -test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "typing-extensions"] +test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock ; python_version < \"3.8\"", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "typing-extensions ; python_version < \"3.11\""] [[package]] name = "graphql-core" @@ -221,7 +221,7 @@ httpcore = "==1.*" idna = "*" [package.extras] -brotli = ["brotli", "brotlicffi"] +brotli = ["brotli ; platform_python_implementation == \"CPython\"", "brotlicffi ; platform_python_implementation != \"CPython\""] cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] @@ -263,8 +263,8 @@ httpx = [ ] Jinja2 = {version = ">=3,<4", optional = true, markers = "extra == \"ctl\" or extra == \"tests\" or extra == \"all\""} numpy = [ - {version = ">=1.24.2,<2.0.0", optional = true, markers = "python_version >= \"3.9\" and python_version < \"3.12\" and extra == \"ctl\" or python_version >= \"3.9\" and python_version < \"3.12\" and extra == \"all\""}, - {version = ">=1.26.2,<2.0.0", optional = true, markers = "python_version >= \"3.12\" and extra == \"ctl\" or python_version >= \"3.12\" and extra == \"all\""}, + {version = ">=1.24.2,<2.0.0", optional = true, markers = "python_version >= \"3.9\" and python_version < \"3.12\" and (extra == \"ctl\" or extra == \"all\")"}, + {version = ">=1.26.2,<2.0.0", optional = true, markers = "python_version >= \"3.12\" and (extra == \"ctl\" or extra == \"all\")"}, ] pendulum = [ {version = ">=2", markers = "python_version >= \"3.9\" and python_version < \"3.12\""}, @@ -281,8 +281,8 @@ typer = {version = ">=0.12.3,<0.13.0", optional = true, markers = "extra == \"ct ujson = ">=5,<6" [package.extras] -all = ["Jinja2 (>=3,<4)", "numpy (>=1.24.2,<2.0.0)", "numpy (>=1.26.2,<2.0.0)", "pyarrow (>=14)", "pytest", "pyyaml (>=6,<7)", "rich (>=13,<14)", "toml (>=0.10,<0.11)", "typer (>=0.12.3,<0.13.0)"] -ctl = ["Jinja2 (>=3,<4)", "numpy (>=1.24.2,<2.0.0)", "numpy (>=1.26.2,<2.0.0)", "pyarrow (>=14)", "pyyaml (>=6,<7)", "rich (>=13,<14)", "toml (>=0.10,<0.11)", "typer (>=0.12.3,<0.13.0)"] +all = ["Jinja2 (>=3,<4)", "numpy (>=1.24.2,<2.0.0) ; python_version >= \"3.9\" and python_version < \"3.12\"", "numpy (>=1.26.2,<2.0.0) ; python_version >= \"3.12\"", "pyarrow (>=14)", "pytest", "pyyaml (>=6,<7)", "rich (>=13,<14)", "toml (>=0.10,<0.11)", "typer (>=0.12.3,<0.13.0)"] +ctl = ["Jinja2 (>=3,<4)", "numpy (>=1.24.2,<2.0.0) ; python_version >= \"3.9\" and python_version < \"3.12\"", "numpy (>=1.26.2,<2.0.0) ; python_version >= \"3.12\"", "pyarrow (>=14)", "pyyaml (>=6,<7)", "rich (>=13,<14)", "toml (>=0.10,<0.11)", "typer (>=0.12.3,<0.13.0)"] tests = ["Jinja2 (>=3,<4)", "pytest", "pyyaml (>=6,<7)", "rich (>=13,<14)"] [[package]] @@ -703,7 +703,7 @@ python-dateutil = ">=2.6" tzdata = ">=2020.1" [package.extras] -test = ["time-machine (>=2.6.0)"] +test = ["time-machine (>=2.6.0) ; implementation_name != \"pypy\""] [[package]] name = "platformdirs" @@ -812,7 +812,7 @@ typing-extensions = ">=4.12.2" [package.extras] email = ["email-validator (>=2.0.0)"] -timezone = ["tzdata"] +timezone = ["tzdata ; python_version >= \"3.9\" and platform_system == \"Windows\""] [[package]] name = "pydantic-core" @@ -981,7 +981,7 @@ colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = [ {version = ">=0.2", markers = "python_version < \"3.11\""}, {version = ">=0.3.7", markers = "python_version >= \"3.12\""}, - {version = ">=0.3.6", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, + {version = ">=0.3.6", markers = "python_version == \"3.11\""}, ] isort = ">=4.2.5,<5.13.0 || >5.13.0,<7" mccabe = ">=0.6,<0.8" @@ -1290,6 +1290,18 @@ rich = ">=10.11.0" shellingham = ">=1.3.0" typing-extensions = ">=3.7.4.3" +[[package]] +name = "types-pyyaml" +version = "6.0.12.20250516" +description = "Typing stubs for PyYAML" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "types_pyyaml-6.0.12.20250516-py3-none-any.whl", hash = "sha256:8478208feaeb53a34cb5d970c56a7cd76b72659442e733e268a94dc72b2d0530"}, + {file = "types_pyyaml-6.0.12.20250516.tar.gz", hash = "sha256:9f21a70216fc0fa1b216a8176db5f9e0af6eb35d2f2932acb87689d03a5bf6ba"}, +] + [[package]] name = "typing-extensions" version = "4.12.2" @@ -1436,4 +1448,4 @@ dev = ["doc8", "flake8", "flake8-import-order", "rstcheck[sphinx]", "sphinx"] [metadata] lock-version = "2.1" python-versions = "^3.10, < 3.13" -content-hash = "75a81f435cef5d4882ddc14778df94d0bfa94e56a5024421ac0fa3c1127ebb98" +content-hash = "7d86ad17bc903bb2d04b508d2e20c0285cef1ef2a697b0de8c6b74b1f6d9e2c1" diff --git a/pyproject.toml b/pyproject.toml index 22017e9..78da41a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,6 +16,7 @@ yamllint = "^1.35.1" mypy = "^1.14.1" pylint = "^3.3.4" vale = "^3.9.4.0" +types-pyyaml = "^6.0.12.20250516" [tool.pylint.messages_control] # Line length is enforced by Black, so pylint doesn't need to check it. From 3b2ed18e04f1613eb5d1e2a59b7ecd5de535f5e2 Mon Sep 17 00:00:00 2001 From: Pete Crocker Date: Sun, 22 Jun 2025 12:40:22 +0100 Subject: [PATCH 16/24] remove debugging lines --- tasks/schemas.py | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/tasks/schemas.py b/tasks/schemas.py index 8d4e0b2..004d222 100644 --- a/tasks/schemas.py +++ b/tasks/schemas.py @@ -41,11 +41,8 @@ def _load_yaml_metadata(): # Build `all_extensions` list # i.e. `extension_abc` => list of all dependencies def _build_dependency_graph(metadata): - print("🌱 Building dependency graph...") graph = defaultdict(list) # Graph of dependencies all_extensions = defaultdict(dict) # Dict of all extension with dependencies - - # Parse the metadata list for key, value in metadata.items(): dependencies = value.get("dependencies", []) graph[key] = list(dependencies) # key: [dependencies] @@ -102,10 +99,7 @@ def dfs(node, stack): queue.append(node) if len(load_order) != len(all_exts): - print("\n[Dependency Graph Debug] Unresolved nodes and their dependencies:") - for node, deps in all_exts.items(): - if deps: - print(f" {node}: {deps}") + # Remove debugging output, just raise error raise ValueError("Cycle detected in dependency graph!") return load_order From 49c3528a07f20a52233b1acce23e12011929fe49 Mon Sep 17 00:00:00 2001 From: Pete Crocker Date: Sun, 22 Jun 2025 14:37:21 +0100 Subject: [PATCH 17/24] fix unused code --- tasks/schemas.py | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/tasks/schemas.py b/tasks/schemas.py index 004d222..8c6f210 100644 --- a/tasks/schemas.py +++ b/tasks/schemas.py @@ -60,29 +60,6 @@ def _resolve_load_order(graph, all_extensions): load_order = [] # List to store the final load order queue = deque([node for node, deps in all_exts.items() if not deps]) - # For cycle detection - def find_cycle(): - # Improved DFS to print all cycles - visited_nodes = set() - cycles = [] - - def dfs(node, stack): - if node in stack: - cycle_start = stack.index(node) - cycles.append(stack[cycle_start:] + [node]) - return - if node in visited_nodes: - return - visited_nodes.add(node) - stack.append(node) - for dep in graph[node]: - dfs(dep, stack) - stack.pop() - - for n in all_extensions: - dfs(n, []) - return cycles - # While we have something to proceed while queue: # Pick first element in the queue and add it to the result From 857759585824c76cf83f0d0130e91c2abaf10a5d Mon Sep 17 00:00:00 2001 From: Pete Crocker Date: Sun, 22 Jun 2025 14:58:31 +0100 Subject: [PATCH 18/24] fix path --- .github/workflows/ci.yml | 1 + tasks/schemas.py | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9092894..b0dc3ee 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -173,6 +173,7 @@ jobs: run: "pip install invoke toml" - name: "Create schema docs" run: "invoke schemas.build" + working-directory: ./ - name: "Build docs website" run: "invoke docusaurus.docs" diff --git a/tasks/schemas.py b/tasks/schemas.py index 8c6f210..cf9f278 100644 --- a/tasks/schemas.py +++ b/tasks/schemas.py @@ -282,7 +282,7 @@ def generate_readme(schema, extension_dir: Path) -> list: return content -def generate_toc(schema, base_path, extensions_path, experimental_path): +def generate_toc(schema, extensions_path, experimental_path): toc = ["# Schema Library Documentation\n"] toc.append("## Base\n") toc.append("| name | description |") @@ -353,7 +353,7 @@ def build(context: Context) -> None: if yml_path.exists(): content = generate_readme(schema[key], base_path) all_content.extend(content) - toc = generate_toc(schema, base_path, "./extensions", "./experimental") + toc = generate_toc(schema, "./extensions", "./experimental") all_content.insert(1, toc) all_content.extend(process_schema_directories(schema, directories_to_parse)) with open(consolidated_doc, "w", encoding="utf-8") as f: From 839b08a86ac9aed4fbda261441a3fb7b37876c9b Mon Sep 17 00:00:00 2001 From: Pete Crocker Date: Sun, 22 Jun 2025 15:14:36 +0100 Subject: [PATCH 19/24] fix markdown rendering --- .metadata.yml | 12 +++---- docs/docs/schema-library.mdx | 53 +++++++----------------------- extensions/modules/README.md | 4 +-- extensions/patch_panel/README.md | 4 +-- extensions/physical_disk/README.md | 4 +-- tasks/schemas.py | 12 +++++-- 6 files changed, 33 insertions(+), 56 deletions(-) diff --git a/.metadata.yml b/.metadata.yml index 717c76d..fc387b2 100644 --- a/.metadata.yml +++ b/.metadata.yml @@ -195,8 +195,8 @@ extensions/modules: description: | This schema extension allows you to capture Device Modules related information like the serial number or the status. You can insert the Module into a Dcim Physical Device. - > [!NOTE] - > This extension doesn't contain any Node, you can use the extension module_linecards or modules_routing_engine to use it + [!NOTE] + This extension doesn't contain any Node, you can use the extension module_linecards or modules_routing_engine to use it name: Modules extensions/patch_panel: dependencies: @@ -204,8 +204,8 @@ extensions/patch_panel: description: | This schema extension allows you to capture patch panel related information like rear/front interfaces and mapping between them. You can insert the patch panel into a rack and leverage the device type model. Finally you can also capture information about potential modules you would insert into your patch panel. - > [!NOTE] - > This extension is compatible with all sort of connectors, meaning you can plug cable, circuits, cross-connect to front & rear interfaces! + [!NOTE] + This extension is compatible with all sort of connectors, meaning you can plug cable, circuits, cross-connect to front & rear interfaces! name: Patch Panel extensions/peering_ixp: dependencies: @@ -223,8 +223,8 @@ extensions/physical_disk: description: | Simple schema allowing you to capture physical disks information for the sake of inventory and lifecycle management. - > [!NOTE] - > This extension is compatible with all sort of device. You can apply the generic "DeviceWithPhysicalDisks" to particular model to enable disks tracking. You might also link that schema to location for instance to capture spares. + [!NOTE] + This extension is compatible with all sort of device. You can apply the generic "DeviceWithPhysicalDisks" to particular model to enable disks tracking. You might also link that schema to location for instance to capture spares. name: Physical Disks extensions/qinq: dependencies: diff --git a/docs/docs/schema-library.mdx b/docs/docs/schema-library.mdx index ac15e64..d4d8106 100644 --- a/docs/docs/schema-library.mdx +++ b/docs/docs/schema-library.mdx @@ -29,22 +29,10 @@ title: Schema Library Documentation | [interface_breakout](#interface_breakout) | This schema extension introduces relationships to support breakout interfaces, enabling you to document the breakdown of a physical interface into smaller physical interfaces. | | [lag](#lag) | This schema extension includes models for Link Aggregation Groups (LAGs), enabling you to link physical interfaces as building blocs of your LAG interface. It can be used in standard networking environments as well as in compute scenarios, such as capturing bond interfaces. | | [location_minimal](#location_minimal) | This schema extension is minimal but will provide you with basic items to store location related data. | -| [modules](#modules) | This schema extension allows you to capture Device Modules related information like the serial number or the status. You can insert the Module into a Dcim Physical Device. - -> [!NOTE] -> This extension doesn't contain any Node, you can use the extension module_linecards or modules_routing_engine to use it - | -| [patch_panel](#patch_panel) | This schema extension allows you to capture patch panel related information like rear/front interfaces and mapping between them. You can insert the patch panel into a rack and leverage the device type model. Finally you can also capture information about potential modules you would insert into your patch panel. - -> [!NOTE] -> This extension is compatible with all sort of connectors, meaning you can plug cable, circuits, cross-connect to front & rear interfaces! - | +| [modules](#modules) | This schema extension allows you to capture Device Modules related information like the serial number or the status. You can insert the Module into a Dcim Physical Device. [!NOTE] This extension doesn't contain any Node, you can use the extension module_linecards or modules_routing_engine to use it | +| [patch_panel](#patch_panel) | This schema extension allows you to capture patch panel related information like rear/front interfaces and mapping between them. You can insert the patch panel into a rack and leverage the device type model. Finally you can also capture information about potential modules you would insert into your patch panel. [!NOTE] This extension is compatible with all sort of connectors, meaning you can plug cable, circuits, cross-connect to front & rear interfaces! | | [peering_ixp](#peering_ixp) | This schema extension contains all you need to model anything revolving around internet peering (Exchange points ...)! | -| [physical_disk](#physical_disk) | Simple schema allowing you to capture physical disks information for the sake of inventory and lifecycle management. - -> [!NOTE] -> This extension is compatible with all sort of device. You can apply the generic "DeviceWithPhysicalDisks" to particular model to enable disks tracking. You might also link that schema to location for instance to capture spares. - | +| [physical_disk](#physical_disk) | Simple schema allowing you to capture physical disks information for the sake of inventory and lifecycle management. [!NOTE] This extension is compatible with all sort of device. You can apply the generic "DeviceWithPhysicalDisks" to particular model to enable disks tracking. You might also link that schema to location for instance to capture spares. | | [qinq](#qinq) | This schema extension brings extensions to VLAN model in order to support QinQ. | | [routing](#routing) | This schema extension contains generics to create Routing Protocol "Instance". The idea is to create one Routing Protocol instance per IpamVRF + DcimDevice pair. | | [routing_aggregate](#routing_aggregate) | This schema extension contains all you need to model the Aggregate Routing Protocol. | @@ -53,24 +41,12 @@ title: Schema Library Documentation | [routing_bgp_rr](#routing_bgp_rr) | This schema extension extend the BGP extension to add BGP Route Reflector Clustering. | | [routing_ospf](#routing_ospf) | This schema extension contains all you need to model the OSPF Routing Protocol. | | [routing_pim](#routing_pim) | This schema extension contains all you need to model the PIM Protocol. | -| [routing_policies](#routing_policies) | This schema extension contains a generic to create Routing Policies. - -This Generic can be extend for each Routing Protocols you may want to use. - | +| [routing_policies](#routing_policies) | This schema extension contains a generic to create Routing Policies. This Generic can be extend for each Routing Protocols you may want to use. | | [routing_policies_aggregate](#routing_policies_aggregate) | This extension is using the Routing Policies extensions and the Routing Aggregate one together. | | [routing_policies_bgp](#routing_policies_bgp) | This extension is using the Routing Policies extensions and the Routing BGP one together. | | [routing_policies_ospf](#routing_policies_ospf) | This extension is using the Routing Policies extensions and the Routing OSPF one together. | | [routing_policies_pim](#routing_policies_pim) | This schema inherits the `RoutingPolicy` schema and removes `import_policies` and `export_policies` attributes. However it adds a number of relationships to `RoutingPIM`. | -| [sfp](#sfp) | This schema extension gives you all the models you need to document Small Form-factor Pluggable (SFP). - -You can either plug it into an interface or attach it to a location (e.g. it's a spare SFP stored in a rack). - -Improvements: - -- As of now there is no verification with type / form factor / protocol / distance ... -- You could plug any SFP into any equipment interface (e.g. a virtual interface ...) -- You could link a SFP to an interface AND a location ... - | +| [sfp](#sfp) | This schema extension gives you all the models you need to document Small Form-factor Pluggable (SFP). You can either plug it into an interface or attach it to a location (e.g. it's a spare SFP stored in a rack). Improvements: - As of now there is no verification with type / form factor / protocol / distance ... - You could plug any SFP into any equipment interface (e.g. a virtual interface ...) - You could link a SFP to an interface AND a location ... | | [snmp](#snmp) | This schema extension contains models for SNMP Communities and SNMP Clients. As you can see this extension is not linked to Tenancy or Device, as you could decide to link the Community to different models based on your use case. | | [topology](#topology) | This schema extension introduces abstract network pods and services running in the pods, such as MPLS and EVPN. | | [users](#users) | This schema extension contains models for Accounts management. | @@ -83,12 +59,7 @@ Improvements: | name | description | | ---- | ----------- | | [azure](#azure) | This schema extension introduces cloud support for Microsoft Azure. | -| [circuit_service](#circuit_service) | This schema extension contains model coming on top of circuit to capture a single service shared across multiple circuits. -For example you have a MPLS network supported by a provider connecting multiple locations: - -- One single CircuitService would be needed to store MPLS related information (e.g. service id, provider ...) -- On each site we would create a circuit connecting on one side our device and the CircuitService on the other side - | +| [circuit_service](#circuit_service) | This schema extension contains model coming on top of circuit to capture a single service shared across multiple circuits. For example you have a MPLS network supported by a provider connecting multiple locations: - One single CircuitService would be needed to store MPLS related information (e.g. service id, provider ...) - On each site we would create a circuit connecting on one side our device and the CircuitService on the other side | | [infiniband](#infiniband) | This schema extension adds support for InfiniBand switches. | | [location_extended](#location_extended) | This schema extension is the most detailed when it comes to location, you'll find all the layers you can think of. | | [modules_linecards](#modules_linecards) | This schema extension allows you to capture Linecard related information like the version. You can insert the Linecard into a Dcim Physical Device and leverage the Linecard type model. The Linecard can accept PIC to help configure PORT information like breakout-capabilities and configurations. | @@ -2647,8 +2618,8 @@ This extension is using the Routing Policies extensions and the Routing OSPF one Simple schema allowing you to capture physical disks information for the sake of inventory and lifecycle management. -> [!NOTE] -> This extension is compatible with all sort of device. You can apply the generic "DeviceWithPhysicalDisks" to particular model to enable disks tracking. You might also link that schema to location for instance to capture spares. +[!NOTE] +This extension is compatible with all sort of device. You can apply the generic "DeviceWithPhysicalDisks" to particular model to enable disks tracking. You might also link that schema to location for instance to capture spares. - **Dependencies:** `base` - **Version:** 1.0 @@ -2853,8 +2824,8 @@ This schema extension contains a basic Cable model allowing you to connect two e This schema extension allows you to capture patch panel related information like rear/front interfaces and mapping between them. You can insert the patch panel into a rack and leverage the device type model. Finally you can also capture information about potential modules you would insert into your patch panel. -> [!NOTE] -> This extension is compatible with all sort of connectors, meaning you can plug cable, circuits, cross-connect to front & rear interfaces! +[!NOTE] +This extension is compatible with all sort of connectors, meaning you can plug cable, circuits, cross-connect to front & rear interfaces! - **Dependencies:** `base` - **Version:** 1.0 @@ -3512,8 +3483,8 @@ This schema extension contains all you need to model your BGP platform. This schema extension allows you to capture Device Modules related information like the serial number or the status. You can insert the Module into a Dcim Physical Device. -> [!NOTE] -> This extension doesn't contain any Node, you can use the extension module_linecards or modules_routing_engine to use it +[!NOTE] +This extension doesn't contain any Node, you can use the extension module_linecards or modules_routing_engine to use it - **Dependencies:** `base` - **Version:** 1.0 diff --git a/extensions/modules/README.md b/extensions/modules/README.md index a7bdec1..8cf8a1c 100644 --- a/extensions/modules/README.md +++ b/extensions/modules/README.md @@ -2,8 +2,8 @@ This schema extension allows you to capture Device Modules related information like the serial number or the status. You can insert the Module into a Dcim Physical Device. -> [!NOTE] -> This extension doesn't contain any Node, you can use the extension module_linecards or modules_routing_engine to use it +[!NOTE] +This extension doesn't contain any Node, you can use the extension module_linecards or modules_routing_engine to use it - **Dependencies:** `base` - **Version:** 1.0 diff --git a/extensions/patch_panel/README.md b/extensions/patch_panel/README.md index a1625d4..b332c20 100644 --- a/extensions/patch_panel/README.md +++ b/extensions/patch_panel/README.md @@ -2,8 +2,8 @@ This schema extension allows you to capture patch panel related information like rear/front interfaces and mapping between them. You can insert the patch panel into a rack and leverage the device type model. Finally you can also capture information about potential modules you would insert into your patch panel. -> [!NOTE] -> This extension is compatible with all sort of connectors, meaning you can plug cable, circuits, cross-connect to front & rear interfaces! +[!NOTE] +This extension is compatible with all sort of connectors, meaning you can plug cable, circuits, cross-connect to front & rear interfaces! - **Dependencies:** `base` - **Version:** 1.0 diff --git a/extensions/physical_disk/README.md b/extensions/physical_disk/README.md index 5e3aab9..e8bf768 100644 --- a/extensions/physical_disk/README.md +++ b/extensions/physical_disk/README.md @@ -2,8 +2,8 @@ Simple schema allowing you to capture physical disks information for the sake of inventory and lifecycle management. -> [!NOTE] -> This extension is compatible with all sort of device. You can apply the generic "DeviceWithPhysicalDisks" to particular model to enable disks tracking. You might also link that schema to location for instance to capture spares. +[!NOTE] +This extension is compatible with all sort of device. You can apply the generic "DeviceWithPhysicalDisks" to particular model to enable disks tracking. You might also link that schema to location for instance to capture spares. - **Dependencies:** `base` - **Version:** 1.0 diff --git a/tasks/schemas.py b/tasks/schemas.py index cf9f278..20b141d 100644 --- a/tasks/schemas.py +++ b/tasks/schemas.py @@ -282,6 +282,12 @@ def generate_readme(schema, extension_dir: Path) -> list: return content +def sanitize_description(desc): + if not isinstance(desc, str): + return desc + return desc.replace('\n', ' ').replace(' ', ' ').strip() + + def generate_toc(schema, extensions_path, experimental_path): toc = ["# Schema Library Documentation\n"] toc.append("## Base\n") @@ -290,7 +296,7 @@ def generate_toc(schema, extensions_path, experimental_path): for key in sorted(schema.keys()): if key.startswith("base/"): name = key.split("/", 1)[1] - desc = schema[key].get("description", "") + desc = sanitize_description(schema[key].get("description", "")) toc.append(f"| [{name}](#{name}) | {desc} |") toc.append("\n## Extensions\n") toc.append("| name | description |") @@ -300,7 +306,7 @@ def generate_toc(schema, extensions_path, experimental_path): if ext_path.is_dir(): desc = "" if str(ext_path) in schema and "description" in schema[str(ext_path)]: - desc = schema[str(ext_path)]["description"] + desc = sanitize_description(schema[str(ext_path)]["description"]) toc.append(f"| [{entry}](#{entry}) | {desc} |") toc.append("\n## Experimental\n") toc.append("| name | description |") @@ -310,7 +316,7 @@ def generate_toc(schema, extensions_path, experimental_path): if exp_path.is_dir(): desc = "" if str(exp_path) in schema and "description" in schema[str(exp_path)]: - desc = schema[str(exp_path)]["description"] + desc = sanitize_description(schema[str(exp_path)]["description"]) toc.append(f"| [{entry}](#{entry}) | {desc} |") return "\n".join(toc) + "\n" From cd47a10cd2f11a93993a6b7d001d063f6dc43363 Mon Sep 17 00:00:00 2001 From: Pete Crocker Date: Sun, 22 Jun 2025 15:15:47 +0100 Subject: [PATCH 20/24] ruff --- tasks/schemas.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tasks/schemas.py b/tasks/schemas.py index 20b141d..2d5b3d5 100644 --- a/tasks/schemas.py +++ b/tasks/schemas.py @@ -285,7 +285,7 @@ def generate_readme(schema, extension_dir: Path) -> list: def sanitize_description(desc): if not isinstance(desc, str): return desc - return desc.replace('\n', ' ').replace(' ', ' ').strip() + return desc.replace("\n", " ").replace(" ", " ").strip() def generate_toc(schema, extensions_path, experimental_path): From f1e435f1fd52b5e06f3610983a943e3932316cef Mon Sep 17 00:00:00 2001 From: Pete Crocker Date: Sun, 22 Jun 2025 15:35:33 +0100 Subject: [PATCH 21/24] fix markdown links --- .metadata.yml | 49 +++++----- base/README.md | 2 +- docs/docs/schema-library.mdx | 90 +++++++++---------- experimental/modules_linecards/README.md | 2 +- experimental/modules_routing_engine/README.md | 2 +- experimental/qos/README.md | 2 +- extensions/interface_breakout/README.md | 4 +- extensions/peering_ixp/README.md | 2 +- extensions/physical_disk/README.md | 2 +- extensions/routing_aggregate/README.md | 2 +- extensions/routing_bgp/README.md | 2 +- extensions/routing_bgp_community/README.md | 2 +- extensions/routing_bgp_rr/README.md | 2 +- extensions/routing_ospf/README.md | 2 +- extensions/routing_pim/README.md | 2 +- extensions/routing_policies/README.md | 4 +- extensions/users/README.md | 4 +- tasks/schemas.py | 19 +++- 18 files changed, 99 insertions(+), 95 deletions(-) diff --git a/.metadata.yml b/.metadata.yml index fc387b2..c2f8e17 100644 --- a/.metadata.yml +++ b/.metadata.yml @@ -3,19 +3,19 @@ base/dcim: description: Basic DCIM schema to capture devices, racks, interfaces, and related information. - name: Base DCIM + name: DCIM base/ipam: description: Basic IPAM schema to capture IP addresses, subnets, and related information. - name: Base IPAM + name: IPAM base/location: description: Basic Location schema to capture locations, sites, and related information. - name: Base Locations + name: Locations base/organization: description: Basic Organization schema to capture organizations, vendors, and related information. - name: Base Organizations + name: Organization experimental/azure: attribution: "[Rowan Coleman](https://www.linkedin.com/in/rowan-coleman-6a147156/)" dependencies: @@ -54,7 +54,7 @@ experimental/modules_linecards: like the version. You can insert the Linecard into a Dcim Physical Device and leverage the Linecard type model. The Linecard can accept PIC to help configure PORT information like breakout-capabilities and configurations. - name: Linecard Module + name: Modules Linecards experimental/modules_routing_engine: dependencies: - base @@ -63,12 +63,12 @@ experimental/modules_routing_engine: This schema extension allows you to capture Routing Engine related information like the version. You can insert the Routing Engine into a Dcim Physical Device and leverage the Routing Engine type model. - name: Routing Engine Module + name: Modules Routing Engine experimental/qos: dependencies: - base description: This schema extension contains models for Quality of Service (QoS) - name: Quality of Service (QoS) + name: QoS experimental/security: dependencies: - base @@ -135,8 +135,8 @@ extensions/interface_breakout: - base description: This schema extension introduces relationships to support breakout interfaces, - enabling you to document the breakdown of a physical interface into smaller physical interfaces. - name: Interface Breakdown + enabling you to document the breakout of a physical interface into smaller physical interfaces. + name: Interface Breakout extensions/compute: dependencies: - base @@ -214,9 +214,8 @@ extensions/peering_ixp: - extensions/routing_bgp - extensions/routing_bgp_community description: - This schema extension contains all you need to model anything revolving - around internet peering (Exchange points ...)! - name: Exchange Points (IXP) + This schema extension contains all you need to model anything revolving around internet peering (Exchange points ...)! + name: Peering IXP extensions/physical_disk: dependencies: - base @@ -225,14 +224,13 @@ extensions/physical_disk: [!NOTE] This extension is compatible with all sort of device. You can apply the generic "DeviceWithPhysicalDisks" to particular model to enable disks tracking. You might also link that schema to location for instance to capture spares. - name: Physical Disks + name: Physical Disk extensions/qinq: dependencies: - base - extensions/vlan description: - This schema extension brings extensions to VLAN model in order to support - QinQ. + This schema extension brings extensions to VLAN model in order to support QinQ. name: QinQ extensions/routing: dependencies: @@ -250,19 +248,19 @@ extensions/routing_aggregate: description: This schema extension contains all you need to model the Aggregate Routing Protocol. - name: Aggregate + name: Routing Aggregate extensions/routing_bgp: dependencies: - base - extensions/routing description: This schema extension contains all you need to model your BGP platform. - name: BGP + name: Routing BGP extensions/routing_bgp_community: dependencies: - base - extensions/routing description: This schema extension adds the BGP Communities models. - name: BGP Communities + name: Routing BGP Community extensions/routing_bgp_rr: dependencies: - base @@ -271,7 +269,7 @@ extensions/routing_bgp_rr: description: This schema extension extend the BGP extension to add BGP Route Reflector Clustering. - name: BGP Route Reflector + name: Routing BGP RR extensions/routing_ospf: dependencies: - base @@ -279,20 +277,17 @@ extensions/routing_ospf: description: This schema extension contains all you need to model the OSPF Routing Protocol. - name: OSPF + name: Routing OSPF extensions/routing_pim: dependencies: - base - extensions/routing description: This schema extension contains all you need to model the PIM Protocol. - name: PIM + name: Routing PIM extensions/routing_policies: dependencies: - base - description: | - This schema extension contains a generic to create Routing Policies. - - This Generic can be extend for each Routing Protocols you may want to use. + description: This schema extension contains a generic to create Routing Policies. This Generic can be extend for each Routing Protocols you may want to use. name: Routing Policies extensions/routing_policies_aggregate: dependencies: @@ -367,8 +362,8 @@ extensions/topology: extensions/users: dependencies: - base - description: This schema extension contains models for Accounts management. - name: Accounts Management + description: This schema extension contains models for account management. + name: Users extensions/vlan: dependencies: - base diff --git a/base/README.md b/base/README.md index bdd1343..a3e1938 100644 --- a/base/README.md +++ b/base/README.md @@ -1,4 +1,4 @@ -## Base Organizations +## Organization Basic Organization schema to capture organizations, vendors, and related information. diff --git a/docs/docs/schema-library.mdx b/docs/docs/schema-library.mdx index d4d8106..f9bd2d0 100644 --- a/docs/docs/schema-library.mdx +++ b/docs/docs/schema-library.mdx @@ -22,34 +22,34 @@ title: Schema Library Documentation | [circuit](#circuit) | This schema extension contains Circuits and ways to connect them with your infrastructure! The circuit could be a fiber connecting two sites, you would then have two endpoints, one on each site. | | [cluster](#cluster) | This schema extension contains the foundations to capture clusters. With this one in place you can unlock various clusters flavors (hosting cluster able to host VMs, firewall clusters built with specific appliances ...) | | [compute](#compute) | With this schema extension in place you will be able to capture all your physical servers. It also gives you the baseline to build virtualization. You might consider HostingCluster extension to go with! | -| [cross_connect](#cross_connect) | This extension contains schema to capture Cross Connect. You can see it as "a cable operated by a provider". You will be able to attach it to a location and then connect endpoints to it (e.g. rear interface of a patch panel, circuit endpoint ...) | +| [cross_connect](#cross-connect) | This extension contains schema to capture Cross Connect. You can see it as "a cable operated by a provider". You will be able to attach it to a location and then connect endpoints to it (e.g. rear interface of a patch panel, circuit endpoint ...) | | [dwdm](#dwdm) | This schema extension contains models for OADM (Optical Add Drop Multiplexer) supporting various WDM (Wavelength Division Multiplexing) technologies such as DWDM (Dense Wavelength Division Multiplexing) or CWDM (Coarse Wavelength Division Multiplexing). With some vendors, the tunable optics are not configured via the channel number but via the wavelength and/or the frequency. This model provides a unique entry in Infrahub for those. | -| [firewall_policer](#firewall_policer) | This schema extension contains models for VMs. You might consider Cluster or/and Hypervisor extension to go with! | -| [hosting_cluster](#hosting_cluster) | A rather generic cluster built with compute units (e.g. servers) and able to host VMs. | -| [interface_breakout](#interface_breakout) | This schema extension introduces relationships to support breakout interfaces, enabling you to document the breakdown of a physical interface into smaller physical interfaces. | +| [firewall_policer](#firewall-policer) | This schema extension contains models for VMs. You might consider Cluster or/and Hypervisor extension to go with! | +| [hosting_cluster](#hosting-cluster) | A rather generic cluster built with compute units (e.g. servers) and able to host VMs. | +| [interface_breakout](#interface-breakout) | This schema extension introduces relationships to support breakout interfaces, enabling you to document the breakout of a physical interface into smaller physical interfaces. | | [lag](#lag) | This schema extension includes models for Link Aggregation Groups (LAGs), enabling you to link physical interfaces as building blocs of your LAG interface. It can be used in standard networking environments as well as in compute scenarios, such as capturing bond interfaces. | -| [location_minimal](#location_minimal) | This schema extension is minimal but will provide you with basic items to store location related data. | +| [location_minimal](#location-minimal) | This schema extension is minimal but will provide you with basic items to store location related data. | | [modules](#modules) | This schema extension allows you to capture Device Modules related information like the serial number or the status. You can insert the Module into a Dcim Physical Device. [!NOTE] This extension doesn't contain any Node, you can use the extension module_linecards or modules_routing_engine to use it | -| [patch_panel](#patch_panel) | This schema extension allows you to capture patch panel related information like rear/front interfaces and mapping between them. You can insert the patch panel into a rack and leverage the device type model. Finally you can also capture information about potential modules you would insert into your patch panel. [!NOTE] This extension is compatible with all sort of connectors, meaning you can plug cable, circuits, cross-connect to front & rear interfaces! | -| [peering_ixp](#peering_ixp) | This schema extension contains all you need to model anything revolving around internet peering (Exchange points ...)! | -| [physical_disk](#physical_disk) | Simple schema allowing you to capture physical disks information for the sake of inventory and lifecycle management. [!NOTE] This extension is compatible with all sort of device. You can apply the generic "DeviceWithPhysicalDisks" to particular model to enable disks tracking. You might also link that schema to location for instance to capture spares. | +| [patch_panel](#patch-panel) | This schema extension allows you to capture patch panel related information like rear/front interfaces and mapping between them. You can insert the patch panel into a rack and leverage the device type model. Finally you can also capture information about potential modules you would insert into your patch panel. [!NOTE] This extension is compatible with all sort of connectors, meaning you can plug cable, circuits, cross-connect to front & rear interfaces! | +| [peering_ixp](#peering-ixp) | This schema extension contains all you need to model anything revolving around internet peering (Exchange points ...)! | +| [physical_disk](#physical-disk) | Simple schema allowing you to capture physical disks information for the sake of inventory and lifecycle management. [!NOTE] This extension is compatible with all sort of device. You can apply the generic "DeviceWithPhysicalDisks" to particular model to enable disks tracking. You might also link that schema to location for instance to capture spares. | | [qinq](#qinq) | This schema extension brings extensions to VLAN model in order to support QinQ. | | [routing](#routing) | This schema extension contains generics to create Routing Protocol "Instance". The idea is to create one Routing Protocol instance per IpamVRF + DcimDevice pair. | -| [routing_aggregate](#routing_aggregate) | This schema extension contains all you need to model the Aggregate Routing Protocol. | -| [routing_bgp](#routing_bgp) | This schema extension contains all you need to model your BGP platform. | -| [routing_bgp_community](#routing_bgp_community) | This schema extension adds the BGP Communities models. | -| [routing_bgp_rr](#routing_bgp_rr) | This schema extension extend the BGP extension to add BGP Route Reflector Clustering. | -| [routing_ospf](#routing_ospf) | This schema extension contains all you need to model the OSPF Routing Protocol. | -| [routing_pim](#routing_pim) | This schema extension contains all you need to model the PIM Protocol. | -| [routing_policies](#routing_policies) | This schema extension contains a generic to create Routing Policies. This Generic can be extend for each Routing Protocols you may want to use. | -| [routing_policies_aggregate](#routing_policies_aggregate) | This extension is using the Routing Policies extensions and the Routing Aggregate one together. | -| [routing_policies_bgp](#routing_policies_bgp) | This extension is using the Routing Policies extensions and the Routing BGP one together. | -| [routing_policies_ospf](#routing_policies_ospf) | This extension is using the Routing Policies extensions and the Routing OSPF one together. | -| [routing_policies_pim](#routing_policies_pim) | This schema inherits the `RoutingPolicy` schema and removes `import_policies` and `export_policies` attributes. However it adds a number of relationships to `RoutingPIM`. | +| [routing_aggregate](#routing-aggregate) | This schema extension contains all you need to model the Aggregate Routing Protocol. | +| [routing_bgp](#routing-bgp) | This schema extension contains all you need to model your BGP platform. | +| [routing_bgp_community](#routing-bgp-community) | This schema extension adds the BGP Communities models. | +| [routing_bgp_rr](#routing-bgp-rr) | This schema extension extend the BGP extension to add BGP Route Reflector Clustering. | +| [routing_ospf](#routing-ospf) | This schema extension contains all you need to model the OSPF Routing Protocol. | +| [routing_pim](#routing-pim) | This schema extension contains all you need to model the PIM Protocol. | +| [routing_policies](#routing-policies) | This schema extension contains a generic to create Routing Policies. This Generic can be extend for each Routing Protocols you may want to use. | +| [routing_policies_aggregate](#routing-policies-aggregate) | This extension is using the Routing Policies extensions and the Routing Aggregate one together. | +| [routing_policies_bgp](#routing-policies-bgp) | This extension is using the Routing Policies extensions and the Routing BGP one together. | +| [routing_policies_ospf](#routing-policies-ospf) | This extension is using the Routing Policies extensions and the Routing OSPF one together. | +| [routing_policies_pim](#routing-policies-pim) | This schema inherits the `RoutingPolicy` schema and removes `import_policies` and `export_policies` attributes. However it adds a number of relationships to `RoutingPIM`. | | [sfp](#sfp) | This schema extension gives you all the models you need to document Small Form-factor Pluggable (SFP). You can either plug it into an interface or attach it to a location (e.g. it's a spare SFP stored in a rack). Improvements: - As of now there is no verification with type / form factor / protocol / distance ... - You could plug any SFP into any equipment interface (e.g. a virtual interface ...) - You could link a SFP to an interface AND a location ... | | [snmp](#snmp) | This schema extension contains models for SNMP Communities and SNMP Clients. As you can see this extension is not linked to Tenancy or Device, as you could decide to link the Community to different models based on your use case. | | [topology](#topology) | This schema extension introduces abstract network pods and services running in the pods, such as MPLS and EVPN. | -| [users](#users) | This schema extension contains models for Accounts management. | +| [users](#users) | This schema extension contains models for account management. | | [vlan](#vlan) | This schema extension contains models to support VLANs in you network. | | [vrf](#vrf) | This schema extension contains models to support VRF in your network. | | [vrrp](#vrrp) | This schema extension contains models for VRRP. | @@ -59,18 +59,18 @@ title: Schema Library Documentation | name | description | | ---- | ----------- | | [azure](#azure) | This schema extension introduces cloud support for Microsoft Azure. | -| [circuit_service](#circuit_service) | This schema extension contains model coming on top of circuit to capture a single service shared across multiple circuits. For example you have a MPLS network supported by a provider connecting multiple locations: - One single CircuitService would be needed to store MPLS related information (e.g. service id, provider ...) - On each site we would create a circuit connecting on one side our device and the CircuitService on the other side | +| [circuit_service](#circuit-service) | This schema extension contains model coming on top of circuit to capture a single service shared across multiple circuits. For example you have a MPLS network supported by a provider connecting multiple locations: - One single CircuitService would be needed to store MPLS related information (e.g. service id, provider ...) - On each site we would create a circuit connecting on one side our device and the CircuitService on the other side | | [infiniband](#infiniband) | This schema extension adds support for InfiniBand switches. | -| [location_extended](#location_extended) | This schema extension is the most detailed when it comes to location, you'll find all the layers you can think of. | -| [modules_linecards](#modules_linecards) | This schema extension allows you to capture Linecard related information like the version. You can insert the Linecard into a Dcim Physical Device and leverage the Linecard type model. The Linecard can accept PIC to help configure PORT information like breakout-capabilities and configurations. | -| [modules_routing_engine](#modules_routing_engine) | This schema extension allows you to capture Routing Engine related information like the version. You can insert the Routing Engine into a Dcim Physical Device and leverage the Routing Engine type model. | +| [location_extended](#location-extended) | This schema extension is the most detailed when it comes to location, you'll find all the layers you can think of. | +| [modules_linecards](#modules-linecards) | This schema extension allows you to capture Linecard related information like the version. You can insert the Linecard into a Dcim Physical Device and leverage the Linecard type model. The Linecard can accept PIC to help configure PORT information like breakout-capabilities and configurations. | +| [modules_routing_engine](#modules-routing-engine) | This schema extension allows you to capture Routing Engine related information like the version. You can insert the Routing Engine into a Dcim Physical Device and leverage the Routing Engine type model. | | [qos](#qos) | This schema extension contains models for Quality of Service (QoS) | | [security](#security) | This schema extension contains models for implementing detailed security. | | [tenancy](#tenancy) | This schema extension introduces tenancy for some of the schema nodes (circuits...) | | [topology](#topology) | A schema for defining and managing network topology, strategies, and services. | | [vlan-translation](#vlan-translation) | This schema extension is based on Juniper VLAN MAP, and not yet test out for other vendors. | -## Base DCIM +## DCIM Basic DCIM schema to capture devices, racks, interfaces, and related information. @@ -464,7 +464,7 @@ Basic DCIM schema to capture devices, racks, interfaces, and related information | location | LocationHosting | True | one | Attribute | 1300 | | | | gateway | IpamIPAddress | True | one | Attribute | 1500 | L3 Gateway | prefix\_\_gateway | -## Base IPAM +## IPAM Basic IPAM schema to capture IP addresses, subnets, and related information. @@ -858,7 +858,7 @@ Basic IPAM schema to capture IP addresses, subnets, and related information. | location | LocationHosting | True | one | Attribute | 1300 | | | | gateway | IpamIPAddress | True | one | Attribute | 1500 | L3 Gateway | prefix\_\_gateway | -## Base Locations +## Locations Basic Location schema to capture locations, sites, and related information. @@ -1252,7 +1252,7 @@ Basic Location schema to capture locations, sites, and related information. | location | LocationHosting | True | one | Attribute | 1300 | | | | gateway | IpamIPAddress | True | one | Attribute | 1500 | L3 Gateway | prefix\_\_gateway | -## Base Organizations +## Organization Basic Organization schema to capture organizations, vendors, and related information. @@ -1878,9 +1878,9 @@ This schema extension contains models for SNMP Communities and SNMP Clients. As | ---- | ---- | ----------- | ------------ | | community | SnmpCommunity | many | 1200 | -## Interface Breakdown +## Interface Breakout -This schema extension introduces relationships to support breakout interfaces, enabling you to document the breakdown of a physical interface into smaller physical interfaces. +This schema extension introduces relationships to support breakout interfaces, enabling you to document the breakout of a physical interface into smaller physical interfaces. - **Dependencies:** `base` - **Version:** 1.0 @@ -1952,7 +1952,7 @@ This extension is using the Routing Policies extensions and the Routing BGP one | import\_routing\_policies | Import Routing Policies | RoutingPolicy | bgp\_\_import\_policies | The routing\-policies used by this instance for import\. | Generic | many | | export\_routing\_policies | Export Routing Policies | RoutingPolicy | bgp\_\_export\_policies | The routing\-policies used by this instance for export\. | Generic | many | -## BGP Route Reflector +## Routing BGP RR This schema extension extend the BGP extension to add BGP Route Reflector Clustering. @@ -2173,7 +2173,7 @@ This schema extension contains Circuits and ways to connect them with your infra | ---- | ---- | ----------- | -------- | | circuits | DcimCircuit | many | True | -## BGP Communities +## Routing BGP Community This schema extension adds the BGP Communities models. @@ -2420,7 +2420,7 @@ This schema extension contains models for VRRP. | ---- | ---- | ---- | ----------- | ----------- | ----- | ------------ | | vrrp | Component | NetworkVRRPGroup | Part of VRRP Group | one | VRRP Group | 1600 | -## Exchange Points (IXP) +## Peering IXP This schema extension contains all you need to model anything revolving around internet peering (Exchange points ...)! @@ -2614,7 +2614,7 @@ This extension is using the Routing Policies extensions and the Routing OSPF one | import\_routing\_policies | Import Routing Policies | RoutingPolicyOSPF | ospf\_\_import\_policies | The routing\-policies used by this instance for import\. | Generic | many | | export\_routing\_policies | Export Routing Policies | RoutingPolicyOSPF | ospf\_\_export\_policies | The routing\-policies used by this instance for export\. | Generic | many | -## Physical Disks +## Physical Disk Simple schema allowing you to capture physical disks information for the sake of inventory and lifecycle management. @@ -2730,7 +2730,7 @@ With this schema extension in place you will be able to capture all your physica | ---- | ---- | -------- | ----------- | ---- | ------------ | | host | VirtualizationHostVirtualMachine | False | one | Attribute | 1500 | -## PIM +## Routing PIM This schema extension contains all you need to model the PIM Protocol. @@ -2941,7 +2941,7 @@ This extension is compatible with all sort of connectors, meaning you can plug c | ---- | ---- | -------- | ------------ | ----------- | ---- | | patch\_panel | DcimPatchPanel | False | 900 | one | Parent | -## Aggregate +## Routing Aggregate This schema extension contains all you need to model the Aggregate Routing Protocol. @@ -3100,9 +3100,9 @@ This schema extension contains models for OADM (Optical Add Drop Multiplexer) su | ---- | ----- | ---- | ---- | ----------- | -------- | ------------ | | wdm\_channel | WDM Channel | DcimWdmChannel | Attribute | one | False | 1150 | -## Accounts Management +## Users -This schema extension contains models for Accounts management. +This schema extension contains models for account management. - **Dependencies:** `base` - **Version:** 1.0 @@ -3357,7 +3357,7 @@ This schema extension contains generics to create Routing Protocol "Instance". T | device | DcimDevice | False | one | Parent | 1050 | | | vrf | IpamVRF | False | one | Attribute | 1075 | VRF | -## BGP +## Routing BGP This schema extension contains all you need to model your BGP platform. @@ -3550,9 +3550,7 @@ This extension doesn't contain any Node, you can use the extension module_lineca ## Routing Policies -This schema extension contains a generic to create Routing Policies. - -This Generic can be extend for each Routing Protocols you may want to use. +This schema extension contains a generic to create Routing Policies. This Generic can be extend for each Routing Protocols you may want to use. - **Dependencies:** `base` - **Version:** 1.0 @@ -3604,7 +3602,7 @@ A rather generic cluster built with compute units (e.g. servers) and able to hos | cluster\_type | Dropdown | 1200 | Type of the cluster\. | \`aws, kvm, gcp, vmware\` | | | status | Dropdown | 1300 | | \`active, provisioning, maintenance, drained\` | False | -## OSPF +## Routing OSPF This schema extension contains all you need to model the OSPF Routing Protocol. @@ -4298,7 +4296,7 @@ A schema for defining and managing network topology, strategies, and services. | ---- | ----- | ---- | -------- | ----------- | ------------ | | network\_service | Network Service | TopologyNetworkService | True | one | 1400 | -## Routing Engine Module +## Modules Routing Engine This schema extension allows you to capture Routing Engine related information like the version. You can insert the Routing Engine into a Dcim Physical Device and leverage the Routing Engine type model. @@ -4344,7 +4342,7 @@ This schema extension allows you to capture Routing Engine related information l | ---- | ----- | ---- | -------- | ----------- | ---- | ------------ | | routing\_engine\_type | RE Type | DeviceRoutingEngineType | False | one | Attribute | 1150 | -## Linecard Module +## Modules Linecards This schema extension allows you to capture Linecard related information like the version. You can insert the Linecard into a Dcim Physical Device and leverage the Linecard type model. The Linecard can accept PIC to help configure PORT information like breakout-capabilities and configurations. @@ -5051,7 +5049,7 @@ This schema extension introduces tenancy for some of the schema nodes (circuits. | location | LocationBuilding | many | | True | | | circuit | DcimCircuit | many | | True | | -## Quality of Service (QoS) +## QoS This schema extension contains models for Quality of Service (QoS) diff --git a/experimental/modules_linecards/README.md b/experimental/modules_linecards/README.md index e60ebc8..5bebe57 100644 --- a/experimental/modules_linecards/README.md +++ b/experimental/modules_linecards/README.md @@ -1,4 +1,4 @@ -## Linecard Module +## Modules Linecards This schema extension allows you to capture Linecard related information like the version. You can insert the Linecard into a Dcim Physical Device and leverage the Linecard type model. The Linecard can accept PIC to help configure PORT information like breakout-capabilities and configurations. diff --git a/experimental/modules_routing_engine/README.md b/experimental/modules_routing_engine/README.md index 61eb5ed..116b88b 100644 --- a/experimental/modules_routing_engine/README.md +++ b/experimental/modules_routing_engine/README.md @@ -1,4 +1,4 @@ -## Routing Engine Module +## Modules Routing Engine This schema extension allows you to capture Routing Engine related information like the version. You can insert the Routing Engine into a Dcim Physical Device and leverage the Routing Engine type model. diff --git a/experimental/qos/README.md b/experimental/qos/README.md index 681adf9..80f8552 100644 --- a/experimental/qos/README.md +++ b/experimental/qos/README.md @@ -1,4 +1,4 @@ -## Quality of Service (QoS) +## QoS This schema extension contains models for Quality of Service (QoS) diff --git a/extensions/interface_breakout/README.md b/extensions/interface_breakout/README.md index fed84e2..8361acb 100644 --- a/extensions/interface_breakout/README.md +++ b/extensions/interface_breakout/README.md @@ -1,6 +1,6 @@ -## Interface Breakdown +## Interface Breakout -This schema extension introduces relationships to support breakout interfaces, enabling you to document the breakdown of a physical interface into smaller physical interfaces. +This schema extension introduces relationships to support breakout interfaces, enabling you to document the breakout of a physical interface into smaller physical interfaces. - **Dependencies:** `base` - **Version:** 1.0 diff --git a/extensions/peering_ixp/README.md b/extensions/peering_ixp/README.md index 1ca83f5..b54a347 100644 --- a/extensions/peering_ixp/README.md +++ b/extensions/peering_ixp/README.md @@ -1,4 +1,4 @@ -## Exchange Points (IXP) +## Peering IXP This schema extension contains all you need to model anything revolving around internet peering (Exchange points ...)! diff --git a/extensions/physical_disk/README.md b/extensions/physical_disk/README.md index e8bf768..dc196a2 100644 --- a/extensions/physical_disk/README.md +++ b/extensions/physical_disk/README.md @@ -1,4 +1,4 @@ -## Physical Disks +## Physical Disk Simple schema allowing you to capture physical disks information for the sake of inventory and lifecycle management. diff --git a/extensions/routing_aggregate/README.md b/extensions/routing_aggregate/README.md index d95e83d..5446aa8 100644 --- a/extensions/routing_aggregate/README.md +++ b/extensions/routing_aggregate/README.md @@ -1,4 +1,4 @@ -## Aggregate +## Routing Aggregate This schema extension contains all you need to model the Aggregate Routing Protocol. diff --git a/extensions/routing_bgp/README.md b/extensions/routing_bgp/README.md index e2b2ea2..cc8df77 100644 --- a/extensions/routing_bgp/README.md +++ b/extensions/routing_bgp/README.md @@ -1,4 +1,4 @@ -## BGP +## Routing BGP This schema extension contains all you need to model your BGP platform. diff --git a/extensions/routing_bgp_community/README.md b/extensions/routing_bgp_community/README.md index 459fb5c..2a3ab5b 100644 --- a/extensions/routing_bgp_community/README.md +++ b/extensions/routing_bgp_community/README.md @@ -1,4 +1,4 @@ -## BGP Communities +## Routing BGP Community This schema extension adds the BGP Communities models. diff --git a/extensions/routing_bgp_rr/README.md b/extensions/routing_bgp_rr/README.md index 0bd3211..c6d7f1e 100644 --- a/extensions/routing_bgp_rr/README.md +++ b/extensions/routing_bgp_rr/README.md @@ -1,4 +1,4 @@ -## BGP Route Reflector +## Routing BGP RR This schema extension extend the BGP extension to add BGP Route Reflector Clustering. diff --git a/extensions/routing_ospf/README.md b/extensions/routing_ospf/README.md index 3fbbfba..a779db3 100644 --- a/extensions/routing_ospf/README.md +++ b/extensions/routing_ospf/README.md @@ -1,4 +1,4 @@ -## OSPF +## Routing OSPF This schema extension contains all you need to model the OSPF Routing Protocol. diff --git a/extensions/routing_pim/README.md b/extensions/routing_pim/README.md index 1f77029..d51f14d 100644 --- a/extensions/routing_pim/README.md +++ b/extensions/routing_pim/README.md @@ -1,4 +1,4 @@ -## PIM +## Routing PIM This schema extension contains all you need to model the PIM Protocol. diff --git a/extensions/routing_policies/README.md b/extensions/routing_policies/README.md index 5f76ee8..f8828e5 100644 --- a/extensions/routing_policies/README.md +++ b/extensions/routing_policies/README.md @@ -1,8 +1,6 @@ ## Routing Policies -This schema extension contains a generic to create Routing Policies. - -This Generic can be extend for each Routing Protocols you may want to use. +This schema extension contains a generic to create Routing Policies. This Generic can be extend for each Routing Protocols you may want to use. - **Dependencies:** `base` - **Version:** 1.0 diff --git a/extensions/users/README.md b/extensions/users/README.md index 986f67c..822b2c0 100644 --- a/extensions/users/README.md +++ b/extensions/users/README.md @@ -1,6 +1,6 @@ -## Accounts Management +## Users -This schema extension contains models for Accounts management. +This schema extension contains models for account management. - **Dependencies:** `base` - **Version:** 1.0 diff --git a/tasks/schemas.py b/tasks/schemas.py index 2d5b3d5..ff161e6 100644 --- a/tasks/schemas.py +++ b/tasks/schemas.py @@ -288,6 +288,16 @@ def sanitize_description(desc): return desc.replace("\n", " ").replace(" ", " ").strip() +def normalize_anchor(name: str) -> str: + """Normalize a string to match Docusaurus/GitHub anchor links.""" + import re + + anchor = name.strip().lower() + anchor = anchor.replace("_", "-").replace(" ", "-") + anchor = re.sub(r"[^a-z0-9\-]", "", anchor) + return anchor + + def generate_toc(schema, extensions_path, experimental_path): toc = ["# Schema Library Documentation\n"] toc.append("## Base\n") @@ -297,7 +307,8 @@ def generate_toc(schema, extensions_path, experimental_path): if key.startswith("base/"): name = key.split("/", 1)[1] desc = sanitize_description(schema[key].get("description", "")) - toc.append(f"| [{name}](#{name}) | {desc} |") + anchor = normalize_anchor(name) + toc.append(f"| [{name}](#{anchor}) | {desc} |") toc.append("\n## Extensions\n") toc.append("| name | description |") toc.append("| ---- | ----------- |") @@ -307,7 +318,8 @@ def generate_toc(schema, extensions_path, experimental_path): desc = "" if str(ext_path) in schema and "description" in schema[str(ext_path)]: desc = sanitize_description(schema[str(ext_path)]["description"]) - toc.append(f"| [{entry}](#{entry}) | {desc} |") + anchor = normalize_anchor(entry) + toc.append(f"| [{entry}](#{anchor}) | {desc} |") toc.append("\n## Experimental\n") toc.append("| name | description |") toc.append("| ---- | ----------- |") @@ -317,7 +329,8 @@ def generate_toc(schema, extensions_path, experimental_path): desc = "" if str(exp_path) in schema and "description" in schema[str(exp_path)]: desc = sanitize_description(schema[str(exp_path)]["description"]) - toc.append(f"| [{entry}](#{entry}) | {desc} |") + anchor = normalize_anchor(entry) + toc.append(f"| [{entry}](#{anchor}) | {desc} |") return "\n".join(toc) + "\n" From 2b48f9eebaac411dc0d4aab46afbdd406fe2fbae Mon Sep 17 00:00:00 2001 From: Pete Crocker Date: Sun, 22 Jun 2025 15:37:49 +0100 Subject: [PATCH 22/24] ruff --- tasks/schemas.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tasks/schemas.py b/tasks/schemas.py index ff161e6..5c3ef23 100644 --- a/tasks/schemas.py +++ b/tasks/schemas.py @@ -2,6 +2,7 @@ from collections import defaultdict, deque from pathlib import Path import copy +import re import yaml # type: ignore from invoke import Context, task # type: ignore @@ -290,7 +291,6 @@ def sanitize_description(desc): def normalize_anchor(name: str) -> str: """Normalize a string to match Docusaurus/GitHub anchor links.""" - import re anchor = name.strip().lower() anchor = anchor.replace("_", "-").replace(" ", "-") From 60528e7c134a9baf19d2f2afced2a0368c343228 Mon Sep 17 00:00:00 2001 From: Pete Crocker Date: Sun, 22 Jun 2025 15:47:09 +0100 Subject: [PATCH 23/24] fix NOTE --- .metadata.yml | 9 +++------ docs/docs/schema-library.mdx | 15 ++++++--------- extensions/modules/README.md | 3 +-- extensions/patch_panel/README.md | 3 +-- extensions/physical_disk/README.md | 3 +-- 5 files changed, 12 insertions(+), 21 deletions(-) diff --git a/.metadata.yml b/.metadata.yml index c2f8e17..9c52be1 100644 --- a/.metadata.yml +++ b/.metadata.yml @@ -195,8 +195,7 @@ extensions/modules: description: | This schema extension allows you to capture Device Modules related information like the serial number or the status. You can insert the Module into a Dcim Physical Device. - [!NOTE] - This extension doesn't contain any Node, you can use the extension module_linecards or modules_routing_engine to use it + NOTE: This extension doesn't contain any Nodes, you can use the extension module_linecards or modules_routing_engine to use it name: Modules extensions/patch_panel: dependencies: @@ -204,8 +203,7 @@ extensions/patch_panel: description: | This schema extension allows you to capture patch panel related information like rear/front interfaces and mapping between them. You can insert the patch panel into a rack and leverage the device type model. Finally you can also capture information about potential modules you would insert into your patch panel. - [!NOTE] - This extension is compatible with all sort of connectors, meaning you can plug cable, circuits, cross-connect to front & rear interfaces! + NOTE: This extension is compatible with all sort of connectors, meaning you can plug cable, circuits, cross-connect to front & rear interfaces! name: Patch Panel extensions/peering_ixp: dependencies: @@ -222,8 +220,7 @@ extensions/physical_disk: description: | Simple schema allowing you to capture physical disks information for the sake of inventory and lifecycle management. - [!NOTE] - This extension is compatible with all sort of device. You can apply the generic "DeviceWithPhysicalDisks" to particular model to enable disks tracking. You might also link that schema to location for instance to capture spares. + NOTE: This extension is compatible with all sort of device. You can apply the generic "DeviceWithPhysicalDisks" to particular model to enable disks tracking. You might also link that schema to location for instance to capture spares. name: Physical Disk extensions/qinq: dependencies: diff --git a/docs/docs/schema-library.mdx b/docs/docs/schema-library.mdx index f9bd2d0..af2e729 100644 --- a/docs/docs/schema-library.mdx +++ b/docs/docs/schema-library.mdx @@ -29,10 +29,10 @@ title: Schema Library Documentation | [interface_breakout](#interface-breakout) | This schema extension introduces relationships to support breakout interfaces, enabling you to document the breakout of a physical interface into smaller physical interfaces. | | [lag](#lag) | This schema extension includes models for Link Aggregation Groups (LAGs), enabling you to link physical interfaces as building blocs of your LAG interface. It can be used in standard networking environments as well as in compute scenarios, such as capturing bond interfaces. | | [location_minimal](#location-minimal) | This schema extension is minimal but will provide you with basic items to store location related data. | -| [modules](#modules) | This schema extension allows you to capture Device Modules related information like the serial number or the status. You can insert the Module into a Dcim Physical Device. [!NOTE] This extension doesn't contain any Node, you can use the extension module_linecards or modules_routing_engine to use it | -| [patch_panel](#patch-panel) | This schema extension allows you to capture patch panel related information like rear/front interfaces and mapping between them. You can insert the patch panel into a rack and leverage the device type model. Finally you can also capture information about potential modules you would insert into your patch panel. [!NOTE] This extension is compatible with all sort of connectors, meaning you can plug cable, circuits, cross-connect to front & rear interfaces! | +| [modules](#modules) | This schema extension allows you to capture Device Modules related information like the serial number or the status. You can insert the Module into a Dcim Physical Device. NOTE: This extension doesn't contain any Nodes, you can use the extension module_linecards or modules_routing_engine to use it | +| [patch_panel](#patch-panel) | This schema extension allows you to capture patch panel related information like rear/front interfaces and mapping between them. You can insert the patch panel into a rack and leverage the device type model. Finally you can also capture information about potential modules you would insert into your patch panel. NOTE: This extension is compatible with all sort of connectors, meaning you can plug cable, circuits, cross-connect to front & rear interfaces! | | [peering_ixp](#peering-ixp) | This schema extension contains all you need to model anything revolving around internet peering (Exchange points ...)! | -| [physical_disk](#physical-disk) | Simple schema allowing you to capture physical disks information for the sake of inventory and lifecycle management. [!NOTE] This extension is compatible with all sort of device. You can apply the generic "DeviceWithPhysicalDisks" to particular model to enable disks tracking. You might also link that schema to location for instance to capture spares. | +| [physical_disk](#physical-disk) | Simple schema allowing you to capture physical disks information for the sake of inventory and lifecycle management. NOTE: This extension is compatible with all sort of device. You can apply the generic "DeviceWithPhysicalDisks" to particular model to enable disks tracking. You might also link that schema to location for instance to capture spares. | | [qinq](#qinq) | This schema extension brings extensions to VLAN model in order to support QinQ. | | [routing](#routing) | This schema extension contains generics to create Routing Protocol "Instance". The idea is to create one Routing Protocol instance per IpamVRF + DcimDevice pair. | | [routing_aggregate](#routing-aggregate) | This schema extension contains all you need to model the Aggregate Routing Protocol. | @@ -2618,8 +2618,7 @@ This extension is using the Routing Policies extensions and the Routing OSPF one Simple schema allowing you to capture physical disks information for the sake of inventory and lifecycle management. -[!NOTE] -This extension is compatible with all sort of device. You can apply the generic "DeviceWithPhysicalDisks" to particular model to enable disks tracking. You might also link that schema to location for instance to capture spares. +NOTE: This extension is compatible with all sort of device. You can apply the generic "DeviceWithPhysicalDisks" to particular model to enable disks tracking. You might also link that schema to location for instance to capture spares. - **Dependencies:** `base` - **Version:** 1.0 @@ -2824,8 +2823,7 @@ This schema extension contains a basic Cable model allowing you to connect two e This schema extension allows you to capture patch panel related information like rear/front interfaces and mapping between them. You can insert the patch panel into a rack and leverage the device type model. Finally you can also capture information about potential modules you would insert into your patch panel. -[!NOTE] -This extension is compatible with all sort of connectors, meaning you can plug cable, circuits, cross-connect to front & rear interfaces! +NOTE: This extension is compatible with all sort of connectors, meaning you can plug cable, circuits, cross-connect to front & rear interfaces! - **Dependencies:** `base` - **Version:** 1.0 @@ -3483,8 +3481,7 @@ This schema extension contains all you need to model your BGP platform. This schema extension allows you to capture Device Modules related information like the serial number or the status. You can insert the Module into a Dcim Physical Device. -[!NOTE] -This extension doesn't contain any Node, you can use the extension module_linecards or modules_routing_engine to use it +NOTE: This extension doesn't contain any Nodes, you can use the extension module_linecards or modules_routing_engine to use it - **Dependencies:** `base` - **Version:** 1.0 diff --git a/extensions/modules/README.md b/extensions/modules/README.md index 8cf8a1c..ad12f74 100644 --- a/extensions/modules/README.md +++ b/extensions/modules/README.md @@ -2,8 +2,7 @@ This schema extension allows you to capture Device Modules related information like the serial number or the status. You can insert the Module into a Dcim Physical Device. -[!NOTE] -This extension doesn't contain any Node, you can use the extension module_linecards or modules_routing_engine to use it +NOTE: This extension doesn't contain any Nodes, you can use the extension module_linecards or modules_routing_engine to use it - **Dependencies:** `base` - **Version:** 1.0 diff --git a/extensions/patch_panel/README.md b/extensions/patch_panel/README.md index b332c20..f54b554 100644 --- a/extensions/patch_panel/README.md +++ b/extensions/patch_panel/README.md @@ -2,8 +2,7 @@ This schema extension allows you to capture patch panel related information like rear/front interfaces and mapping between them. You can insert the patch panel into a rack and leverage the device type model. Finally you can also capture information about potential modules you would insert into your patch panel. -[!NOTE] -This extension is compatible with all sort of connectors, meaning you can plug cable, circuits, cross-connect to front & rear interfaces! +NOTE: This extension is compatible with all sort of connectors, meaning you can plug cable, circuits, cross-connect to front & rear interfaces! - **Dependencies:** `base` - **Version:** 1.0 diff --git a/extensions/physical_disk/README.md b/extensions/physical_disk/README.md index dc196a2..8b16ba2 100644 --- a/extensions/physical_disk/README.md +++ b/extensions/physical_disk/README.md @@ -2,8 +2,7 @@ Simple schema allowing you to capture physical disks information for the sake of inventory and lifecycle management. -[!NOTE] -This extension is compatible with all sort of device. You can apply the generic "DeviceWithPhysicalDisks" to particular model to enable disks tracking. You might also link that schema to location for instance to capture spares. +NOTE: This extension is compatible with all sort of device. You can apply the generic "DeviceWithPhysicalDisks" to particular model to enable disks tracking. You might also link that schema to location for instance to capture spares. - **Dependencies:** `base` - **Version:** 1.0 From 71441a4531ef6891fc5cd634f2d75b834f96ff38 Mon Sep 17 00:00:00 2001 From: Pete Crocker Date: Sun, 22 Jun 2025 20:15:52 +0100 Subject: [PATCH 24/24] fix readme docs link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index af12b77..1dd6af0 100644 --- a/README.md +++ b/README.md @@ -7,4 +7,4 @@ Welcome to the Schema Library for Infrahub! This repository offers a collection ## Using the schema library -Documentation for using the Schema Library is available [here](https://docs.infrahub.app/schema-library/schema-library/) +Documentation for using the Schema Library is available in the [Schema Library docs](https://docs.infrahub.app/schema-library) site.