@openscd/scl-lib 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (238) hide show
  1. package/LICENCE +201 -0
  2. package/README.md +20 -0
  3. package/dist/foundation/codecomponents/nsds.d.ts +5 -0
  4. package/dist/foundation/codecomponents/nsds.js +22435 -0
  5. package/dist/foundation/codecomponents/nsds.js.map +1 -0
  6. package/dist/foundation/nsd.json +137748 -0
  7. package/dist/foundation/uniqueElementName.d.ts +2 -0
  8. package/dist/foundation/uniqueElementName.js +18 -0
  9. package/dist/foundation/uniqueElementName.js.map +1 -0
  10. package/dist/foundation/utils.d.ts +20 -0
  11. package/dist/foundation/utils.js +14 -0
  12. package/dist/foundation/utils.js.map +1 -0
  13. package/dist/generator/appIdGenerator.d.ts +21 -0
  14. package/dist/generator/appIdGenerator.js +53 -0
  15. package/dist/generator/appIdGenerator.js.map +1 -0
  16. package/dist/generator/lnInstGenerator.d.ts +16 -0
  17. package/dist/generator/lnInstGenerator.js +41 -0
  18. package/dist/generator/lnInstGenerator.js.map +1 -0
  19. package/dist/generator/macAddressGenerator.d.ts +14 -0
  20. package/dist/generator/macAddressGenerator.js +39 -0
  21. package/dist/generator/macAddressGenerator.js.map +1 -0
  22. package/dist/index.d.ts +61 -0
  23. package/dist/index.js +55 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/tAddress/changeGseOrSmvAddress.d.ts +14 -0
  26. package/dist/tAddress/changeGseOrSmvAddress.js +43 -0
  27. package/dist/tAddress/changeGseOrSmvAddress.js.map +1 -0
  28. package/dist/tBaseElement/find.d.ts +6 -0
  29. package/dist/tBaseElement/find.js +529 -0
  30. package/dist/tBaseElement/find.js.map +1 -0
  31. package/dist/tBaseElement/getChildren.d.ts +5 -0
  32. package/dist/tBaseElement/getChildren.js +12 -0
  33. package/dist/tBaseElement/getChildren.js.map +1 -0
  34. package/dist/tBaseElement/getReference.d.ts +9 -0
  35. package/dist/tBaseElement/getReference.js +31 -0
  36. package/dist/tBaseElement/getReference.js.map +1 -0
  37. package/dist/tBaseElement/identity.d.ts +2 -0
  38. package/dist/tBaseElement/identity.js +566 -0
  39. package/dist/tBaseElement/identity.js.map +1 -0
  40. package/dist/tBaseElement/isPublic.d.ts +2 -0
  41. package/dist/tBaseElement/isPublic.js +5 -0
  42. package/dist/tBaseElement/isPublic.js.map +1 -0
  43. package/dist/tBaseElement/parentTags.d.ts +3 -0
  44. package/dist/tBaseElement/parentTags.js +8 -0
  45. package/dist/tBaseElement/parentTags.js.map +1 -0
  46. package/dist/tBaseElement/tags.d.ts +8 -0
  47. package/dist/tBaseElement/tags.js +807 -0
  48. package/dist/tBaseElement/tags.js.map +1 -0
  49. package/dist/tBay/updateBay.d.ts +5 -0
  50. package/dist/tBay/updateBay.js +81 -0
  51. package/dist/tBay/updateBay.js.map +1 -0
  52. package/dist/tControl/controlBlockGseOrSmv.d.ts +7 -0
  53. package/dist/tControl/controlBlockGseOrSmv.js +26 -0
  54. package/dist/tControl/controlBlockGseOrSmv.js.map +1 -0
  55. package/dist/tControl/controlBlockObjRef.d.ts +2 -0
  56. package/dist/tControl/controlBlockObjRef.js +14 -0
  57. package/dist/tControl/controlBlockObjRef.js.map +1 -0
  58. package/dist/tControl/controlBlocks.d.ts +2 -0
  59. package/dist/tControl/controlBlocks.js +9 -0
  60. package/dist/tControl/controlBlocks.js.map +1 -0
  61. package/dist/tControl/findControlSubscription.d.ts +2 -0
  62. package/dist/tControl/findControlSubscription.js +8 -0
  63. package/dist/tControl/findControlSubscription.js.map +1 -0
  64. package/dist/tControl/pathId.d.ts +1 -0
  65. package/dist/tControl/pathId.js +9 -0
  66. package/dist/tControl/pathId.js.map +1 -0
  67. package/dist/tControl/removeControlBlock.d.ts +14 -0
  68. package/dist/tControl/removeControlBlock.js +35 -0
  69. package/dist/tControl/removeControlBlock.js.map +1 -0
  70. package/dist/tControl/updateConfRev.d.ts +2 -0
  71. package/dist/tControl/updateConfRev.js +8 -0
  72. package/dist/tControl/updateConfRev.js.map +1 -0
  73. package/dist/tControl/updateDatSet.d.ts +6 -0
  74. package/dist/tControl/updateDatSet.js +22 -0
  75. package/dist/tControl/updateDatSet.js.map +1 -0
  76. package/dist/tControlWithIEDName/connctedAp.d.ts +2 -0
  77. package/dist/tControlWithIEDName/connctedAp.js +7 -0
  78. package/dist/tControlWithIEDName/connctedAp.js.map +1 -0
  79. package/dist/tDataSet/canAddDataSet.d.ts +4 -0
  80. package/dist/tDataSet/canAddDataSet.js +44 -0
  81. package/dist/tDataSet/canAddDataSet.js.map +1 -0
  82. package/dist/tDataSet/createDataSet.d.ts +9 -0
  83. package/dist/tDataSet/createDataSet.js +33 -0
  84. package/dist/tDataSet/createDataSet.js.map +1 -0
  85. package/dist/tDataSet/removeDataSet.d.ts +10 -0
  86. package/dist/tDataSet/removeDataSet.js +27 -0
  87. package/dist/tDataSet/removeDataSet.js.map +1 -0
  88. package/dist/tDataSet/updateDataSet.d.ts +7 -0
  89. package/dist/tDataSet/updateDataSet.js +28 -0
  90. package/dist/tDataSet/updateDataSet.js.map +1 -0
  91. package/dist/tDataTypeTemplates/foundation.d.ts +2 -0
  92. package/dist/tDataTypeTemplates/foundation.js +118 -0
  93. package/dist/tDataTypeTemplates/foundation.js.map +1 -0
  94. package/dist/tDataTypeTemplates/importLNodeType.d.ts +13 -0
  95. package/dist/tDataTypeTemplates/importLNodeType.js +88 -0
  96. package/dist/tDataTypeTemplates/importLNodeType.js.map +1 -0
  97. package/dist/tDataTypeTemplates/insertSelectedLNodeType.d.ts +20 -0
  98. package/dist/tDataTypeTemplates/insertSelectedLNodeType.js +187 -0
  99. package/dist/tDataTypeTemplates/insertSelectedLNodeType.js.map +1 -0
  100. package/dist/tDataTypeTemplates/lNodeTypeToSelection.d.ts +8 -0
  101. package/dist/tDataTypeTemplates/lNodeTypeToSelection.js +67 -0
  102. package/dist/tDataTypeTemplates/lNodeTypeToSelection.js.map +1 -0
  103. package/dist/tDataTypeTemplates/nsdToJson.d.ts +101 -0
  104. package/dist/tDataTypeTemplates/nsdToJson.js +433 -0
  105. package/dist/tDataTypeTemplates/nsdToJson.js.map +1 -0
  106. package/dist/tDataTypeTemplates/removeDataType.d.ts +12 -0
  107. package/dist/tDataTypeTemplates/removeDataType.js +62 -0
  108. package/dist/tDataTypeTemplates/removeDataType.js.map +1 -0
  109. package/dist/tDataTypeTemplates/updateLNodeType.d.ts +2 -0
  110. package/dist/tDataTypeTemplates/updateLNodeType.js +22 -0
  111. package/dist/tDataTypeTemplates/updateLNodeType.js.map +1 -0
  112. package/dist/tExtRef/doesFcdaMeetExtRefRestrictions.d.ts +16 -0
  113. package/dist/tExtRef/doesFcdaMeetExtRefRestrictions.js +52 -0
  114. package/dist/tExtRef/doesFcdaMeetExtRefRestrictions.js.map +1 -0
  115. package/dist/tExtRef/extRefTypeRestrictions.d.ts +17 -0
  116. package/dist/tExtRef/extRefTypeRestrictions.js +32 -0
  117. package/dist/tExtRef/extRefTypeRestrictions.js.map +1 -0
  118. package/dist/tExtRef/isSubscribed.d.ts +7 -0
  119. package/dist/tExtRef/isSubscribed.js +23 -0
  120. package/dist/tExtRef/isSubscribed.js.map +1 -0
  121. package/dist/tExtRef/matchDataAttributes.d.ts +2 -0
  122. package/dist/tExtRef/matchDataAttributes.js +13 -0
  123. package/dist/tExtRef/matchDataAttributes.js.map +1 -0
  124. package/dist/tExtRef/matchSrcAttributes.d.ts +2 -0
  125. package/dist/tExtRef/matchSrcAttributes.js +28 -0
  126. package/dist/tExtRef/matchSrcAttributes.js.map +1 -0
  127. package/dist/tExtRef/sourceControlBlock.d.ts +8 -0
  128. package/dist/tExtRef/sourceControlBlock.js +52 -0
  129. package/dist/tExtRef/sourceControlBlock.js.map +1 -0
  130. package/dist/tExtRef/subscribe.d.ts +47 -0
  131. package/dist/tExtRef/subscribe.js +187 -0
  132. package/dist/tExtRef/subscribe.js.map +1 -0
  133. package/dist/tExtRef/unsubscribe.d.ts +27 -0
  134. package/dist/tExtRef/unsubscribe.js +55 -0
  135. package/dist/tExtRef/unsubscribe.js.map +1 -0
  136. package/dist/tFCDA/canAddFCDA.d.ts +10 -0
  137. package/dist/tFCDA/canAddFCDA.js +42 -0
  138. package/dist/tFCDA/canAddFCDA.js.map +1 -0
  139. package/dist/tFCDA/fcdaBaseTypes.d.ts +11 -0
  140. package/dist/tFCDA/fcdaBaseTypes.js +56 -0
  141. package/dist/tFCDA/fcdaBaseTypes.js.map +1 -0
  142. package/dist/tFCDA/removeFCDA.d.ts +8 -0
  143. package/dist/tFCDA/removeFCDA.js +33 -0
  144. package/dist/tFCDA/removeFCDA.js.map +1 -0
  145. package/dist/tGSE/changeGSEContent.d.ts +17 -0
  146. package/dist/tGSE/changeGSEContent.js +53 -0
  147. package/dist/tGSE/changeGSEContent.js.map +1 -0
  148. package/dist/tGSE/createGSE.d.ts +20 -0
  149. package/dist/tGSE/createGSE.js +44 -0
  150. package/dist/tGSE/createGSE.js.map +1 -0
  151. package/dist/tGSEControl/canAddGSEControl.d.ts +4 -0
  152. package/dist/tGSEControl/canAddGSEControl.js +27 -0
  153. package/dist/tGSEControl/canAddGSEControl.js.map +1 -0
  154. package/dist/tGSEControl/createGSEControl.d.ts +49 -0
  155. package/dist/tGSEControl/createGSEControl.js +65 -0
  156. package/dist/tGSEControl/createGSEControl.js.map +1 -0
  157. package/dist/tGSEControl/updateGSEControl.d.ts +15 -0
  158. package/dist/tGSEControl/updateGSEControl.js +61 -0
  159. package/dist/tGSEControl/updateGSEControl.js.map +1 -0
  160. package/dist/tIED/insertIED.d.ts +13 -0
  161. package/dist/tIED/insertIED.js +245 -0
  162. package/dist/tIED/insertIED.js.map +1 -0
  163. package/dist/tIED/removeIED.d.ts +14 -0
  164. package/dist/tIED/removeIED.js +70 -0
  165. package/dist/tIED/removeIED.js.map +1 -0
  166. package/dist/tIED/updateIED.d.ts +17 -0
  167. package/dist/tIED/updateIED.js +185 -0
  168. package/dist/tIED/updateIED.js.map +1 -0
  169. package/dist/tInputs/removeInputs.d.ts +7 -0
  170. package/dist/tInputs/removeInputs.js +25 -0
  171. package/dist/tInputs/removeInputs.js.map +1 -0
  172. package/dist/tLN/removeSubscriptionSupervision.d.ts +7 -0
  173. package/dist/tLN/removeSubscriptionSupervision.js +94 -0
  174. package/dist/tLN/removeSubscriptionSupervision.js.map +1 -0
  175. package/dist/tLN/supervision/canInstantiateSubscriptionSupervision.d.ts +13 -0
  176. package/dist/tLN/supervision/canInstantiateSubscriptionSupervision.js +116 -0
  177. package/dist/tLN/supervision/canInstantiateSubscriptionSupervision.js.map +1 -0
  178. package/dist/tLN/supervision/createSupervisionEdit.d.ts +20 -0
  179. package/dist/tLN/supervision/createSupervisionEdit.js +129 -0
  180. package/dist/tLN/supervision/createSupervisionEdit.js.map +1 -0
  181. package/dist/tLN/supervision/findControlBlockOnSrcAttributes.d.ts +10 -0
  182. package/dist/tLN/supervision/findControlBlockOnSrcAttributes.js +13 -0
  183. package/dist/tLN/supervision/findControlBlockOnSrcAttributes.js.map +1 -0
  184. package/dist/tLN/supervision/foundation.d.ts +37 -0
  185. package/dist/tLN/supervision/foundation.js +43 -0
  186. package/dist/tLN/supervision/foundation.js.map +1 -0
  187. package/dist/tLN/supervision/insertSubscriptionSupervisions.d.ts +11 -0
  188. package/dist/tLN/supervision/insertSubscriptionSupervisions.js +98 -0
  189. package/dist/tLN/supervision/insertSubscriptionSupervisions.js.map +1 -0
  190. package/dist/tLN/supervision/instantiateSubscriptionSupervision.d.ts +10 -0
  191. package/dist/tLN/supervision/instantiateSubscriptionSupervision.js +36 -0
  192. package/dist/tLN/supervision/instantiateSubscriptionSupervision.js.map +1 -0
  193. package/dist/tLN/supervision/removeSupervision.d.ts +7 -0
  194. package/dist/tLN/supervision/removeSupervision.js +39 -0
  195. package/dist/tLN/supervision/removeSupervision.js.map +1 -0
  196. package/dist/tReportControl/canAddReportControl.d.ts +11 -0
  197. package/dist/tReportControl/canAddReportControl.js +24 -0
  198. package/dist/tReportControl/canAddReportControl.js.map +1 -0
  199. package/dist/tReportControl/createReportControl.d.ts +68 -0
  200. package/dist/tReportControl/createReportControl.js +78 -0
  201. package/dist/tReportControl/createReportControl.js.map +1 -0
  202. package/dist/tReportControl/numberReportControlInstances.d.ts +5 -0
  203. package/dist/tReportControl/numberReportControlInstances.js +19 -0
  204. package/dist/tReportControl/numberReportControlInstances.js.map +1 -0
  205. package/dist/tReportControl/updateReportControl.d.ts +5 -0
  206. package/dist/tReportControl/updateReportControl.js +24 -0
  207. package/dist/tReportControl/updateReportControl.js.map +1 -0
  208. package/dist/tSMV/changeSMVContent.d.ts +3 -0
  209. package/dist/tSMV/changeSMVContent.js +5 -0
  210. package/dist/tSMV/changeSMVContent.js.map +1 -0
  211. package/dist/tSMV/createSMV.d.ts +16 -0
  212. package/dist/tSMV/createSMV.js +32 -0
  213. package/dist/tSMV/createSMV.js.map +1 -0
  214. package/dist/tSampledValueControl/canAddSampledValueControl.d.ts +4 -0
  215. package/dist/tSampledValueControl/canAddSampledValueControl.js +27 -0
  216. package/dist/tSampledValueControl/canAddSampledValueControl.js.map +1 -0
  217. package/dist/tSampledValueControl/createSampledValueControl.d.ts +66 -0
  218. package/dist/tSampledValueControl/createSampledValueControl.js +74 -0
  219. package/dist/tSampledValueControl/createSampledValueControl.js.map +1 -0
  220. package/dist/tSampledValueControl/updateSampledValueControl.d.ts +14 -0
  221. package/dist/tSampledValueControl/updateSampledValueControl.js +60 -0
  222. package/dist/tSampledValueControl/updateSampledValueControl.js.map +1 -0
  223. package/dist/tServices/tConfReportControl/maxReportControl.d.ts +9 -0
  224. package/dist/tServices/tConfReportControl/maxReportControl.js +14 -0
  225. package/dist/tServices/tConfReportControl/maxReportControl.js.map +1 -0
  226. package/dist/tSubstation/removeProcessElement.d.ts +9 -0
  227. package/dist/tSubstation/removeProcessElement.js +50 -0
  228. package/dist/tSubstation/removeProcessElement.js.map +1 -0
  229. package/dist/tSubstation/updateLnType.d.ts +8 -0
  230. package/dist/tSubstation/updateLnType.js +96 -0
  231. package/dist/tSubstation/updateLnType.js.map +1 -0
  232. package/dist/tSubstation/updateSubstation.d.ts +5 -0
  233. package/dist/tSubstation/updateSubstation.js +75 -0
  234. package/dist/tSubstation/updateSubstation.js.map +1 -0
  235. package/dist/tVoltageLevel/updateVoltageLevel.d.ts +5 -0
  236. package/dist/tVoltageLevel/updateVoltageLevel.js +83 -0
  237. package/dist/tVoltageLevel/updateVoltageLevel.js.map +1 -0
  238. package/package.json +43 -0
@@ -0,0 +1,245 @@
1
+ import { createElement } from "../foundation/utils.js";
2
+ import { getReference } from "../tBaseElement/getReference.js";
3
+ /**
4
+ * Copies an SCL SubNetwork element but without its ConnectedAP children.
5
+ * @param subNetwork - SCL SubNetwork element.
6
+ * @returns cloned SubNetwork without Element children.
7
+ */
8
+ function getNewSubNetwork(subNetwork) {
9
+ const newSubNetwork = subNetwork.cloneNode(true);
10
+ newSubNetwork.childNodes.forEach((childNode) => {
11
+ if (childNode.nodeType === Node.ELEMENT_NODE &&
12
+ childNode.nodeName === "ConnectedAP")
13
+ newSubNetwork.removeChild(childNode);
14
+ });
15
+ return newSubNetwork;
16
+ }
17
+ function addCommunicationElements(newIed, scl) {
18
+ const edits = [];
19
+ const existingCommunication = scl.querySelector(":root > Communication");
20
+ const communication = existingCommunication
21
+ ? existingCommunication
22
+ : createElement(scl.ownerDocument, "Communication", {});
23
+ if (!existingCommunication)
24
+ edits.push({
25
+ parent: scl,
26
+ node: communication,
27
+ reference: getReference(scl, "Communication"),
28
+ });
29
+ const subNetworks = Array.from(newIed.ownerDocument.querySelectorAll(":root > Communication > SubNetwork")).filter((subNetwork) => subNetwork.querySelector(`:scope > ConnectedAP[iedName="${newIed.getAttribute("name")}"]`));
30
+ subNetworks.forEach((subNetwork) => {
31
+ const connectedAps = Array.from(subNetwork.querySelectorAll(`:scope > ConnectedAP[iedName="${newIed.getAttribute("name")}"]`));
32
+ const existingSubNetwork = communication.querySelector(`:root > Communication > SubNetwork[name="${subNetwork?.getAttribute("name")}"]`);
33
+ const usedSubNetwork = existingSubNetwork
34
+ ? existingSubNetwork
35
+ : getNewSubNetwork(subNetwork);
36
+ if (!existingSubNetwork)
37
+ edits.push({
38
+ parent: communication,
39
+ node: usedSubNetwork,
40
+ reference: getReference(communication, "SubNetwork"),
41
+ });
42
+ connectedAps.forEach((connectedAp) => {
43
+ const iedName = newIed.getAttribute("name");
44
+ const apName = connectedAp.getAttribute("apName");
45
+ const existingConnectedAp = existingSubNetwork?.querySelector(`:scope > ConnectedAP[iedName="${iedName}"][apName="${apName}"]`);
46
+ if (!existingConnectedAp) {
47
+ const connectedAP = connectedAp.cloneNode(true);
48
+ edits.push({
49
+ parent: usedSubNetwork,
50
+ node: connectedAP,
51
+ reference: getReference(usedSubNetwork, "ConnectedAP"),
52
+ });
53
+ }
54
+ });
55
+ });
56
+ return edits;
57
+ }
58
+ function isDataTypeConnectionToIed(dataType, newIed) {
59
+ const dataTypeTemplates = dataType.parentElement;
60
+ const id = dataType.getAttribute("id");
61
+ if (!dataTypeTemplates || !id)
62
+ return false;
63
+ if (dataType.tagName === "EnumType")
64
+ return Array.from(dataTypeTemplates.querySelectorAll(`DOType > DA[type="${id}"],DAType > BDA[type="${id}"]`)).some((typeChild) => isDataTypeConnectionToIed(typeChild.parentElement, newIed));
65
+ if (dataType.tagName === "DAType")
66
+ return Array.from(dataTypeTemplates.querySelectorAll(`DOType > DA[type="${id}"],DAType > BDA[type="${id}"]`)).some((typeChild) => isDataTypeConnectionToIed(typeChild.parentElement, newIed));
67
+ if (dataType.tagName === "DOType")
68
+ return Array.from(dataTypeTemplates.querySelectorAll(`LNodeType > DO[type="${id}"], DOType > SDO[type="${id}"]`)).some((typeChild) => isDataTypeConnectionToIed(typeChild.parentElement, newIed));
69
+ return Array.from(newIed.getElementsByTagName("LN0"))
70
+ .concat(Array.from(newIed.getElementsByTagName("LN")))
71
+ .some((anyLn) => anyLn.getAttribute("lnType") === id);
72
+ }
73
+ /**
74
+ * Generates a new DTT section id in case of a collision by adding a number in hex
75
+ * prefixed with an underscore to the existing id.
76
+ *
77
+ * @param existingId - Existing string for id attribute.
78
+ * @param existingLNodeType - Existing LNodeType for which a new ID is required.
79
+ * @param dataTypeTemplates - Existing Element of DTTs from the SCL file.
80
+ * @returns New string which is unique in the DTT section.
81
+ */
82
+ function generateNewId(existingId, newIed, existingLNodeType, dataTypeTemplates) {
83
+ const iedName = newIed.getAttribute("name");
84
+ const tagType = existingLNodeType.tagName;
85
+ const duplicatesFound = function (counter) {
86
+ return !!dataTypeTemplates.querySelector(`${tagType}[id="${existingId}@${iedName}#${counter.toString(10)}"]`);
87
+ };
88
+ let counter = 1;
89
+ // 2,000 limit reasonable way to avoid infinite loop
90
+ while (duplicatesFound(counter) && counter < 2000) {
91
+ counter += 1;
92
+ }
93
+ return `${existingId}@${iedName}#${counter.toString(10)}`;
94
+ }
95
+ function addEnumType(newIed, newEnumType, oldDataTypeTemplates) {
96
+ if (!isDataTypeConnectionToIed(newEnumType, newIed))
97
+ return;
98
+ const existEnumType = oldDataTypeTemplates.querySelector(`EnumType[id="${newEnumType.getAttribute("id")}"]`);
99
+ if (existEnumType && newEnumType.isEqualNode(existEnumType))
100
+ return;
101
+ if (existEnumType) {
102
+ // There is an `id` conflict in the project that must be resolved by
103
+ // concatenating the IED name with the id
104
+ const data = newEnumType.parentElement;
105
+ const idOld = newEnumType.getAttribute("id");
106
+ const idNew = generateNewId(idOld, newIed, existEnumType, oldDataTypeTemplates);
107
+ newEnumType.setAttribute("id", idNew);
108
+ data
109
+ .querySelectorAll(`DOType > DA[type="${idOld}"],DAType > BDA[type="${idOld}"]`)
110
+ .forEach((type) => type.setAttribute("type", idNew));
111
+ }
112
+ return {
113
+ parent: oldDataTypeTemplates,
114
+ node: newEnumType,
115
+ reference: getReference(oldDataTypeTemplates, "EnumType"),
116
+ };
117
+ }
118
+ function addDAType(newIed, newDAType, oldDataTypeTemplates) {
119
+ if (!isDataTypeConnectionToIed(newDAType, newIed))
120
+ return;
121
+ const existDAType = oldDataTypeTemplates.querySelector(`DAType[id="${newDAType.getAttribute("id")}"]`);
122
+ if (existDAType && newDAType.isEqualNode(existDAType))
123
+ return;
124
+ if (existDAType) {
125
+ // There is an `id` conflict in the project that must be resolved by
126
+ // concatenating the IED name with the id
127
+ const data = newDAType.parentElement;
128
+ const idOld = newDAType.getAttribute("id");
129
+ const idNew = generateNewId(idOld, newIed, existDAType, oldDataTypeTemplates);
130
+ newDAType.setAttribute("id", idNew);
131
+ data
132
+ .querySelectorAll(`DOType > DA[type="${idOld}"],DAType > BDA[type="${idOld}"]`)
133
+ .forEach((type) => type.setAttribute("type", idNew));
134
+ }
135
+ return {
136
+ parent: oldDataTypeTemplates,
137
+ node: newDAType,
138
+ reference: getReference(oldDataTypeTemplates, "DAType"),
139
+ };
140
+ }
141
+ function addDOType(newIed, newDOType, oldDataTypeTemplates) {
142
+ if (!isDataTypeConnectionToIed(newDOType, newIed))
143
+ return;
144
+ const existDOType = oldDataTypeTemplates.querySelector(`DOType[id="${newDOType.getAttribute("id")}"]`);
145
+ if (existDOType && newDOType.isEqualNode(existDOType))
146
+ return;
147
+ if (existDOType) {
148
+ // There is an `id` conflict in the project that must be resolved by
149
+ // concatenating the IED name with the id
150
+ const data = newDOType.parentElement;
151
+ const idOld = newDOType.getAttribute("id");
152
+ const idNew = generateNewId(idOld, newIed, existDOType, oldDataTypeTemplates);
153
+ newDOType.setAttribute("id", idNew);
154
+ data
155
+ .querySelectorAll(`LNodeType > DO[type="${idOld}"], DOType > SDO[type="${idOld}"]`)
156
+ .forEach((type) => type.setAttribute("type", idNew));
157
+ }
158
+ return {
159
+ parent: oldDataTypeTemplates,
160
+ node: newDOType,
161
+ reference: getReference(oldDataTypeTemplates, "DOType"),
162
+ };
163
+ }
164
+ function addLNodeType(newIed, newLNodeType, oldDataTypeTemplates) {
165
+ if (!isDataTypeConnectionToIed(newLNodeType, newIed))
166
+ return;
167
+ const existLNodeType = oldDataTypeTemplates.querySelector(`LNodeType[id="${newLNodeType.getAttribute("id")}"]`);
168
+ if (existLNodeType && newLNodeType.isEqualNode(existLNodeType))
169
+ return;
170
+ if (existLNodeType) {
171
+ // There is an `id` conflict in the project that must be resolved by
172
+ // concatenating the IED name with the id
173
+ const idOld = newLNodeType.getAttribute("id");
174
+ const idNew = generateNewId(idOld, newIed, existLNodeType, oldDataTypeTemplates);
175
+ newLNodeType.setAttribute("id", idNew);
176
+ Array.from(newIed.querySelectorAll(`LN0[lnType="${idOld}"],LN[lnType="${idOld}"]`))
177
+ .filter((anyLn) => !anyLn.closest("Private"))
178
+ .forEach((ln) => ln.setAttribute("lnType", idNew));
179
+ }
180
+ return {
181
+ parent: oldDataTypeTemplates,
182
+ node: newLNodeType,
183
+ reference: getReference(oldDataTypeTemplates, "LNodeType"),
184
+ };
185
+ }
186
+ function addDataTypeTemplates(newIed, scl) {
187
+ const dataTypeEdit = [];
188
+ const dataTypeTemplates = scl.querySelector(":root > DataTypeTemplates")
189
+ ? scl.querySelector(":root > DataTypeTemplates")
190
+ : createElement(scl.ownerDocument, "DataTypeTemplates", {});
191
+ if (!dataTypeTemplates.parentElement) {
192
+ dataTypeEdit.push({
193
+ parent: scl,
194
+ node: dataTypeTemplates,
195
+ reference: getReference(scl, "DataTypeTemplates"),
196
+ });
197
+ }
198
+ const typeEdits = [];
199
+ newIed.ownerDocument
200
+ .querySelectorAll(":root > DataTypeTemplates > EnumType")
201
+ .forEach((enumType) => typeEdits.push(addEnumType(newIed, enumType, dataTypeTemplates)));
202
+ newIed.ownerDocument
203
+ .querySelectorAll(":root > DataTypeTemplates > DAType")
204
+ .forEach((daType) => typeEdits.push(addDAType(newIed, daType, dataTypeTemplates)));
205
+ newIed.ownerDocument
206
+ .querySelectorAll(":root > DataTypeTemplates > DOType")
207
+ .forEach((doType) => typeEdits.push(addDOType(newIed, doType, dataTypeTemplates)));
208
+ newIed.ownerDocument
209
+ .querySelectorAll(":root > DataTypeTemplates > LNodeType")
210
+ .forEach((lNodeType) => typeEdits.push(addLNodeType(newIed, lNodeType, dataTypeTemplates)));
211
+ return dataTypeEdit.concat(typeEdits.reverse().filter((item) => item !== undefined));
212
+ }
213
+ function isNameUnique(scl, ied) {
214
+ return !!scl.querySelector(`IED[name="${ied.getAttribute("name")}"]`);
215
+ }
216
+ function isIED(node) {
217
+ return node.tagName === "IED";
218
+ }
219
+ function isSCL(node) {
220
+ return node.tagName === "SCL";
221
+ }
222
+ /** Function to import !single IEDs with its `DataTypeTemplates` and
223
+ * optionally linked `Communication`section elements.
224
+ * >NOTE: Element are MOVED from ied document to the project not copied
225
+ * @param scl - the parent SCL element to insert the IED to
226
+ * @param ied - the new IED to be added to the project (SCL)
227
+ * @param options
228
+ * @returns An array containing diff objects representing an import IED edit
229
+ * section */
230
+ export function insertIed(scl, ied, options = { addCommunicationSection: true }) {
231
+ if (!isSCL(scl) || !isIED(ied) || isNameUnique(scl, ied))
232
+ return [];
233
+ const insertCommunication = [];
234
+ if (options.addCommunicationSection)
235
+ insertCommunication.push(...addCommunicationElements(ied, scl));
236
+ const insertDataTypes = [];
237
+ insertDataTypes.push(...addDataTypeTemplates(ied, scl));
238
+ const insertIed = {
239
+ parent: scl,
240
+ node: ied,
241
+ reference: getReference(scl, "IED"),
242
+ };
243
+ return [...insertCommunication, insertIed, ...insertDataTypes];
244
+ }
245
+ //# sourceMappingURL=insertIED.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insertIED.js","sourceRoot":"","sources":["../../tIED/insertIED.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { Remove, SetAttributes } from "@openscd/oscd-api";
2
+ /**
3
+ * Function to remove an IED.
4
+ * ```md
5
+ * The function makes sure to also:
6
+ * 1. Remove all elements which should no longer exist including ClientLN,
7
+ * KDC, Association, ConnectedAP and IEDName
8
+ * 2. Remove subscriptions and supervisions
9
+ * 2. Update LNodes to an iedName of None
10
+ * ```
11
+ * @param remove - IED element as a Remove edit
12
+ * @returns - Set of additional edits to relevant SCL elements
13
+ */
14
+ export declare function removeIED(remove: Remove): (SetAttributes | Remove)[];
@@ -0,0 +1,70 @@
1
+ import { isPublic } from "../tBaseElement/isPublic.js";
2
+ import { unsubscribe } from "../tExtRef/unsubscribe.js";
3
+ import { removeSubscriptionSupervision } from "../tLN/removeSubscriptionSupervision.js";
4
+ const elementsToRemove = ["Association", "ClientLN", "ConnectedAP", "KDC"];
5
+ const elementsToReplaceWithNone = ["LNode"];
6
+ function removeIEDNameTextContent(ied, iedName) {
7
+ return Array.from(ied.ownerDocument.getElementsByTagName("IEDName"))
8
+ .filter(isPublic)
9
+ .filter((iedNameElement) => iedNameElement.textContent === iedName)
10
+ .map((iedNameElement) => {
11
+ return { node: iedNameElement };
12
+ });
13
+ }
14
+ function removeWithIedName(ied, iedName) {
15
+ const selector = elementsToRemove
16
+ .map((iedNameElement) => `${iedNameElement}[iedName="${iedName}"]`)
17
+ .join(",");
18
+ return Array.from(ied.ownerDocument.querySelectorAll(selector))
19
+ .filter(isPublic)
20
+ .map((element) => {
21
+ return { node: element };
22
+ });
23
+ }
24
+ function removeIedSubscriptionsAndSupervisions(ied, iedName) {
25
+ const extRefs = Array.from(ied.ownerDocument.querySelectorAll(":root > IED"))
26
+ .filter((ied) => ied.getAttribute("name") !== iedName)
27
+ .flatMap((ied) => Array.from(ied.querySelectorAll(`:scope > AccessPoint > Server > LDevice > LN0 > Inputs > ExtRef[iedName="${iedName}"],
28
+ :scope > AccessPoint > Server > LDevice > LN > Inputs > ExtRef[iedName="${iedName}"]`)));
29
+ const supervisionRemovals = removeSubscriptionSupervision(extRefs);
30
+ const extRefRemovals = unsubscribe(extRefs, { ignoreSupervision: true });
31
+ return [...extRefRemovals, ...supervisionRemovals];
32
+ }
33
+ function updateIedNameToNone(ied, iedName) {
34
+ const selector = elementsToReplaceWithNone
35
+ .map((iedNameElement) => `${iedNameElement}[iedName="${iedName}"]`)
36
+ .join(",");
37
+ return Array.from(ied.ownerDocument.querySelectorAll(selector))
38
+ .filter(isPublic)
39
+ .map((element) => {
40
+ return { element, attributes: { iedName: "None" } };
41
+ });
42
+ }
43
+ /**
44
+ * Function to remove an IED.
45
+ * ```md
46
+ * The function makes sure to also:
47
+ * 1. Remove all elements which should no longer exist including ClientLN,
48
+ * KDC, Association, ConnectedAP and IEDName
49
+ * 2. Remove subscriptions and supervisions
50
+ * 2. Update LNodes to an iedName of None
51
+ * ```
52
+ * @param remove - IED element as a Remove edit
53
+ * @returns - Set of additional edits to relevant SCL elements
54
+ */
55
+ export function removeIED(remove) {
56
+ if (remove.node.nodeType !== Node.ELEMENT_NODE ||
57
+ remove.node.nodeName !== "IED" ||
58
+ !remove.node.hasAttribute("name"))
59
+ return [];
60
+ const ied = remove.node;
61
+ const name = ied.getAttribute("name");
62
+ return [
63
+ remove,
64
+ ...removeIEDNameTextContent(ied, name),
65
+ ...removeWithIedName(ied, name),
66
+ ...removeIedSubscriptionsAndSupervisions(ied, name),
67
+ ...updateIedNameToNone(ied, name),
68
+ ];
69
+ }
70
+ //# sourceMappingURL=removeIED.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"removeIED.js","sourceRoot":"","sources":["../../tIED/removeIED.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { EditV2, SetAttributes } from "@openscd/oscd-api";
2
+ /**
3
+ * Function to schema valid update name and other attribute(s) in IED element
4
+ * (rename IED)
5
+ * ```md
6
+ * The function makes sure to also
7
+ * 1. Update all elements with iedName attribute referenced to the IED.name
8
+ * attribute such as LNode, ClientLN, ExtRef, KDC, Association, ConnectedAP
9
+ * 2. Update all control block object references pointing to the IED
10
+ * 3. Updates IEDName elements text content
11
+ * ```
12
+ * @param setAttributes - IED element and attributes to be changed in the IED element
13
+ * @param checkPermission - Check permission before changing object references
14
+ * (other than supervision node GoCBRef values).
15
+ * @returns - Set of addition edits updating all references SCL elements
16
+ */
17
+ export declare function updateIED(setAttributes: SetAttributes, checkPermission?: boolean): EditV2[];
@@ -0,0 +1,185 @@
1
+ import { createElement } from "../foundation/utils.js";
2
+ import { controlBlockObjRef } from "../tControl/controlBlockObjRef.js";
3
+ function isPublic(element) {
4
+ return !element.closest("Private");
5
+ }
6
+ const elementsWithIedNameAttribute = [
7
+ "LNode",
8
+ "ConnectedAP",
9
+ "KDC",
10
+ "ExtRef",
11
+ "ClientLN",
12
+ "Association",
13
+ ];
14
+ function updateIEDNameTextContent(ied, oldIedName, newIedName) {
15
+ return Array.from(ied.ownerDocument.getElementsByTagName("IEDName"))
16
+ .filter(isPublic)
17
+ .filter((iedName) => iedName.textContent === oldIedName)
18
+ .flatMap((iedName) => {
19
+ const node = Array.from(iedName.childNodes).find((node) => node.nodeType === Node.TEXT_NODE);
20
+ return [
21
+ { node },
22
+ {
23
+ parent: iedName,
24
+ node: document.createTextNode(newIedName),
25
+ reference: null,
26
+ },
27
+ ];
28
+ });
29
+ }
30
+ /** Valid is:
31
+ * 1. there is an control block in the IED with the name change (ied)
32
+ * 2. this control block is subscribed in otherIED (iedName, srcLDInst and srcCBName match)
33
+ * 3. there is a LGOS/LSVS > ... > setSrcRef holding this control block object reference
34
+ */
35
+ function validSubscriptionSupervision(ied, otherIED, oldIedName) {
36
+ // for GSEControl elements
37
+ const lgosVals = Array.from(ied.querySelectorAll("GSEControl"))
38
+ .filter((srcCB) => {
39
+ //filter out all control blocks that are not subscribed in otherIED
40
+ const srcLDInst = srcCB.closest("LDevice")?.getAttribute("inst");
41
+ return !!otherIED.querySelector(`:scope > AccessPoint > Server > LDevice
42
+ ExtRef[iedName="${oldIedName}"][srcLDInst="${srcLDInst}"][srcCBName="${srcCB.getAttribute("name")}"]`);
43
+ })
44
+ .map((srcCB) => {
45
+ const objRef = controlBlockObjRef(srcCB);
46
+ return Array.from(otherIED.querySelectorAll(`:scope > AccessPoint > Server > LDevice > LN[lnClass="LGOS"] >
47
+ DOI[name="GoCBRef"] > DAI[name="setSrcRef"] > Val`)).find((val) => val.textContent === objRef);
48
+ })
49
+ .filter((val) => val);
50
+ // for SampledValueControl elements
51
+ const lsvsVals = Array.from(ied.querySelectorAll("SampledValueControl"))
52
+ .filter((srcCB) => {
53
+ //filter out all control blocks that are not subscribed in otherIED
54
+ const srcLDInst = srcCB.closest("LDevice")?.getAttribute("inst");
55
+ return !!otherIED.querySelector(`:scope > AccessPoint > Server > LDevice
56
+ ExtRef[iedName="${oldIedName}"][srcLDInst="${srcLDInst}"][srcCBName="${srcCB.getAttribute("name")}"]`);
57
+ })
58
+ .map((srcCB) => {
59
+ const objRef = controlBlockObjRef(srcCB);
60
+ return Array.from(otherIED.querySelectorAll(`:scope > AccessPoint > Server > LDevice > LN[lnClass="LSVS"] >
61
+ DOI[name="SvCBRef"] > DAI[name="setSrcRef"] > Val`)).find((val) => val.textContent === objRef);
62
+ })
63
+ .filter((val) => val);
64
+ return [...lgosVals, ...lsvsVals];
65
+ }
66
+ function updateSubscriptionSupervision(ied, oldIedName, newIedName) {
67
+ const vals = Array.from(ied.ownerDocument.querySelectorAll(":root > IED")).flatMap((otherIED) => validSubscriptionSupervision(ied, otherIED, oldIedName));
68
+ return vals.flatMap((val) => {
69
+ const oldContent = val.textContent;
70
+ const newContent = oldContent.replace(oldIedName, newIedName);
71
+ const newTextNode = document.createTextNode(newContent);
72
+ const node = Array.from(val.childNodes).find((childNode) => childNode.nodeType === Node.TEXT_NODE);
73
+ return [{ node }, { parent: val, node: newTextNode, reference: null }];
74
+ });
75
+ }
76
+ function updateIedNameAttributes(ied, oldIedName, newIedName) {
77
+ const selector = elementsWithIedNameAttribute
78
+ .map((iedNameElement) => `${iedNameElement}[iedName="${oldIedName}"]`)
79
+ .join(",");
80
+ return Array.from(ied.ownerDocument.querySelectorAll(selector))
81
+ .filter(isPublic)
82
+ .map((element) => {
83
+ return { element, attributes: { iedName: newIedName } };
84
+ });
85
+ }
86
+ function objectReferenceToIed(dai, oldIedName) {
87
+ const val = dai.querySelector(":scope > Val");
88
+ const valContent = val.textContent;
89
+ if (!valContent || !valContent?.startsWith(oldIedName))
90
+ return false;
91
+ const lDeviceName = valContent.slice(oldIedName.length).split("/")[0];
92
+ const ied = dai.closest("IED");
93
+ const hasLDevice = ied?.querySelector(`:scope > AccessPoint > Server > LDevice[inst="${lDeviceName}"]`);
94
+ if (!hasLDevice)
95
+ return false;
96
+ return true;
97
+ }
98
+ function canModifyDA(daiOrdaType) {
99
+ const valImport = daiOrdaType.getAttribute("valImport");
100
+ const valKind = daiOrdaType.getAttribute("valKind");
101
+ return (valImport === "true" && valKind !== null && ["Conf", "RO"].includes(valKind));
102
+ }
103
+ function objRefDetails(anyLn, doName, daName) {
104
+ const doc = anyLn.ownerDocument;
105
+ const lNodeType = doc.querySelector(`:root > DataTypeTemplates > LNodeType[id="${anyLn.getAttribute("lnType")}"]`);
106
+ let leaf = lNodeType;
107
+ const dO = leaf?.querySelector(`DO[name="${doName}"], SDO[name="${doName}"]`);
108
+ leaf = doc.querySelector(`:root > DataTypeTemplates > DOType[id="${dO?.getAttribute("type")}"]`);
109
+ const dA = leaf?.querySelector(`DA[name="${daName}"]`);
110
+ if (!dA)
111
+ return undefined;
112
+ const bType = dA.getAttribute("bType");
113
+ const canModify = canModifyDA(dA);
114
+ return { bType, canModify };
115
+ }
116
+ /** Find references used by the IED with the basic type of object reference.
117
+ * Then check if they require replacement.
118
+ * This function does not process LGOS and LSVS GoCBRef as these are
119
+ * handled separately.
120
+ */
121
+ function updateObjectReferences(ied, oldIedName, newIedName, checkPermission = false) {
122
+ const objRefCandidates = Array.from(ied.querySelectorAll("LN DAI > Val, LN0 DAI > Val")).filter((val) => {
123
+ const dai = val.parentElement;
124
+ const ln = dai.closest("LN, LN0");
125
+ const lnClass = ln?.getAttribute("lnClass");
126
+ const doiName = dai.closest("DOI, SDI")?.getAttribute("name");
127
+ const daiName = dai.getAttribute("name");
128
+ const isSupervision = lnClass &&
129
+ doiName &&
130
+ ["LGOS", "LSVS"].includes(lnClass) &&
131
+ ["GoCBRef", "SvCBRef"].includes(doiName);
132
+ if (!ln || !doiName || !daiName || isSupervision)
133
+ return false;
134
+ const objRefInfo = objRefDetails(ln, doiName, daiName);
135
+ return (objRefInfo?.bType === "ObjRef" &&
136
+ (checkPermission === false ||
137
+ objRefInfo?.canModify ||
138
+ canModifyDA(dai)) &&
139
+ objectReferenceToIed(dai, oldIedName));
140
+ });
141
+ return objRefCandidates.flatMap((val) => {
142
+ const objRef = val.textContent;
143
+ const textContent = `${newIedName}${objRef.slice(oldIedName.length)}`;
144
+ const newVal = createElement(val.ownerDocument, "Val", {});
145
+ newVal.textContent = textContent;
146
+ return [
147
+ { node: val },
148
+ { parent: val.parentElement, node: newVal, reference: null },
149
+ ];
150
+ });
151
+ }
152
+ /**
153
+ * Function to schema valid update name and other attribute(s) in IED element
154
+ * (rename IED)
155
+ * ```md
156
+ * The function makes sure to also
157
+ * 1. Update all elements with iedName attribute referenced to the IED.name
158
+ * attribute such as LNode, ClientLN, ExtRef, KDC, Association, ConnectedAP
159
+ * 2. Update all control block object references pointing to the IED
160
+ * 3. Updates IEDName elements text content
161
+ * ```
162
+ * @param setAttributes - IED element and attributes to be changed in the IED element
163
+ * @param checkPermission - Check permission before changing object references
164
+ * (other than supervision node GoCBRef values).
165
+ * @returns - Set of addition edits updating all references SCL elements
166
+ */
167
+ export function updateIED(setAttributes, checkPermission = false) {
168
+ if (setAttributes.element.tagName !== "IED")
169
+ return [];
170
+ if (!setAttributes.attributes?.name)
171
+ return [setAttributes];
172
+ const ied = setAttributes.element;
173
+ const oldIedName = ied.getAttribute("name");
174
+ const newIedName = setAttributes.attributes.name;
175
+ if (!oldIedName)
176
+ return [];
177
+ return [
178
+ setAttributes,
179
+ ...updateIedNameAttributes(ied, oldIedName, newIedName),
180
+ ...updateSubscriptionSupervision(ied, oldIedName, newIedName),
181
+ ...updateIEDNameTextContent(ied, oldIedName, newIedName),
182
+ ...updateObjectReferences(ied, oldIedName, newIedName, checkPermission),
183
+ ];
184
+ }
185
+ //# sourceMappingURL=updateIED.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateIED.js","sourceRoot":"","sources":["../../tIED/updateIED.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { Remove } from "@openscd/oscd-api";
2
+ /**
3
+ * Makes sure to not leave empty `Inputs` element after removing
4
+ * its child `ExtRef` elements using [[`extRefedits`]]
5
+ * @returns edits to remove `Inputs` when empty
6
+ * */
7
+ export declare function removeInputs(extRefs: Remove[]): Remove[];
@@ -0,0 +1,25 @@
1
+ function isInputLeaf(input, allInputs) {
2
+ let sameInputs = 0;
3
+ for (const value of allInputs)
4
+ if (value === input)
5
+ sameInputs++;
6
+ return input.querySelectorAll("ExtRef").length === sameInputs;
7
+ }
8
+ /**
9
+ * Makes sure to not leave empty `Inputs` element after removing
10
+ * its child `ExtRef` elements using [[`extRefedits`]]
11
+ * @returns edits to remove `Inputs` when empty
12
+ * */
13
+ export function removeInputs(extRefs) {
14
+ const removeInputs = [];
15
+ const parentInputs = extRefs
16
+ .map((remove) => remove.node.parentElement)
17
+ .filter((input) => input);
18
+ parentInputs.forEach((input, _index, inputs) => {
19
+ const inputNotRemovedYet = !removeInputs.some((removeInput) => removeInput.node === input);
20
+ if (isInputLeaf(input, inputs) && inputNotRemovedYet)
21
+ removeInputs.push({ node: input });
22
+ });
23
+ return extRefs.concat(removeInputs);
24
+ }
25
+ //# sourceMappingURL=removeInputs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"removeInputs.js","sourceRoot":"","sources":["../../tInputs/removeInputs.ts"],"names":[],"mappings":"AAEA,SAAS,WAAW,CAAC,KAAc,EAAE,SAAoB;IACvD,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,MAAM,KAAK,IAAI,SAAS;QAAE,IAAI,KAAK,KAAK,KAAK;YAAE,UAAU,EAAE,CAAC;IAEjE,OAAO,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC;AAChE,CAAC;AAED;;;;KAIK;AACL,MAAM,UAAU,YAAY,CAAC,OAAiB;IAC5C,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,MAAM,YAAY,GAAG,OAAO;SACzB,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAE,MAAM,CAAC,IAAgB,CAAC,aAAa,CAAC;SACvD,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAc,CAAC;IAEzC,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;QAC7C,MAAM,kBAAkB,GAAG,CAAC,YAAY,CAAC,IAAI,CAC3C,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,KAAK,KAAK,CAC5C,CAAC;QAEF,IAAI,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,kBAAkB;YAClD,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AACtC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { Remove } from "@openscd/oscd-api";
2
+ /** Removes subscription supervision - `LGOS` or `LSVS` - when no other data
3
+ * of a given `GSEControl` or `SampledValueControl`
4
+ * @param extRefs - An array of external reference elements
5
+ * @returns edits to remove subscription supervision `LGOS` or `LSVS`
6
+ */
7
+ export declare function removeSubscriptionSupervision(extRefs: Element[]): Remove[];