@compas-oscd/open-scd 0.34.21 → 0.34.23

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 (241) hide show
  1. package/dist/WizardDivider.d.ts +1 -0
  2. package/dist/WizardDivider.d.ts.map +1 -0
  3. package/dist/Wizarding.d.ts +20 -0
  4. package/dist/Wizarding.d.ts.map +1 -0
  5. package/dist/Wizarding.js +4 -1
  6. package/dist/Wizarding.js.map +1 -1
  7. package/dist/action-icon.d.ts +1 -0
  8. package/dist/action-icon.d.ts.map +1 -0
  9. package/dist/action-pane.d.ts +1 -0
  10. package/dist/action-pane.d.ts.map +1 -0
  11. package/dist/addons/Editor.d.ts +1 -0
  12. package/dist/addons/Editor.d.ts.map +1 -0
  13. package/dist/addons/History.d.ts +11 -0
  14. package/dist/addons/History.d.ts.map +1 -0
  15. package/dist/addons/History.js +10 -0
  16. package/dist/addons/History.js.map +1 -1
  17. package/dist/addons/Layout.d.ts +1 -0
  18. package/dist/addons/Layout.d.ts.map +1 -0
  19. package/dist/addons/Settings.d.ts +1 -0
  20. package/dist/addons/Settings.d.ts.map +1 -0
  21. package/dist/addons/Waiter.d.ts +1 -0
  22. package/dist/addons/Waiter.d.ts.map +1 -0
  23. package/dist/addons/Wizards.d.ts +1 -0
  24. package/dist/addons/Wizards.d.ts.map +1 -0
  25. package/dist/addons/editor/edit-action-to-v1-converter.d.ts +1 -0
  26. package/dist/addons/editor/edit-action-to-v1-converter.d.ts.map +1 -0
  27. package/dist/addons/editor/edit-v1-to-v2-converter.d.ts +1 -0
  28. package/dist/addons/editor/edit-v1-to-v2-converter.d.ts.map +1 -0
  29. package/dist/addons/history/get-log-text.d.ts +1 -0
  30. package/dist/addons/history/get-log-text.d.ts.map +1 -0
  31. package/dist/addons/menu-tabs/menu-tabs.d.ts +1 -0
  32. package/dist/addons/menu-tabs/menu-tabs.d.ts.map +1 -0
  33. package/dist/addons/plugin-manager/custom-plugin-dialog.d.ts +1 -0
  34. package/dist/addons/plugin-manager/custom-plugin-dialog.d.ts.map +1 -0
  35. package/dist/addons/plugin-manager/plugin-manager.d.ts +1 -0
  36. package/dist/addons/plugin-manager/plugin-manager.d.ts.map +1 -0
  37. package/dist/filtered-list.d.ts +1 -0
  38. package/dist/filtered-list.d.ts.map +1 -0
  39. package/dist/finder-list.d.ts +1 -0
  40. package/dist/finder-list.d.ts.map +1 -0
  41. package/dist/foundation/compare.d.ts +1 -0
  42. package/dist/foundation/compare.d.ts.map +1 -0
  43. package/dist/foundation/dai.d.ts +1 -0
  44. package/dist/foundation/dai.d.ts.map +1 -0
  45. package/dist/foundation/generators.d.ts +1 -0
  46. package/dist/foundation/generators.d.ts.map +1 -0
  47. package/dist/foundation/ied.d.ts +1 -0
  48. package/dist/foundation/ied.d.ts.map +1 -0
  49. package/dist/foundation/nsd.d.ts +1 -0
  50. package/dist/foundation/nsd.d.ts.map +1 -0
  51. package/dist/foundation/nsdoc.d.ts +1 -0
  52. package/dist/foundation/nsdoc.d.ts.map +1 -0
  53. package/dist/foundation/scl.d.ts +1 -0
  54. package/dist/foundation/scl.d.ts.map +1 -0
  55. package/dist/foundation.d.ts +1 -0
  56. package/dist/foundation.d.ts.map +1 -0
  57. package/dist/icons/compare.d.ts +1 -0
  58. package/dist/icons/compare.d.ts.map +1 -0
  59. package/dist/icons/icons.d.ts +1 -0
  60. package/dist/icons/icons.d.ts.map +1 -0
  61. package/dist/icons/ied-icons.d.ts +1 -0
  62. package/dist/icons/ied-icons.d.ts.map +1 -0
  63. package/dist/icons/lnode.d.ts +1 -0
  64. package/dist/icons/lnode.d.ts.map +1 -0
  65. package/dist/index.d.ts +22 -0
  66. package/dist/index.d.ts.map +1 -0
  67. package/dist/index.js +24 -0
  68. package/dist/index.js.map +1 -0
  69. package/dist/open-scd.d.ts +1 -0
  70. package/dist/open-scd.d.ts.map +1 -0
  71. package/dist/oscd-filter-button.d.ts +1 -0
  72. package/dist/oscd-filter-button.d.ts.map +1 -0
  73. package/dist/plain-compare-list.d.ts +1 -0
  74. package/dist/plain-compare-list.d.ts.map +1 -0
  75. package/dist/plugin-tag.d.ts +1 -0
  76. package/dist/plugin-tag.d.ts.map +1 -0
  77. package/dist/plugin.d.ts +1 -0
  78. package/dist/plugin.d.ts.map +1 -0
  79. package/dist/plugin.events.d.ts +1 -0
  80. package/dist/plugin.events.d.ts.map +1 -0
  81. package/dist/plugins.d.ts +1 -0
  82. package/dist/plugins.d.ts.map +1 -0
  83. package/dist/schemas.d.ts +1 -0
  84. package/dist/schemas.d.ts.map +1 -0
  85. package/dist/themes.d.ts +1 -0
  86. package/dist/themes.d.ts.map +1 -0
  87. package/dist/translations/de.d.ts +1 -0
  88. package/dist/translations/de.d.ts.map +1 -0
  89. package/dist/translations/en.d.ts +1 -0
  90. package/dist/translations/en.d.ts.map +1 -0
  91. package/dist/translations/loader.d.ts +1 -0
  92. package/dist/translations/loader.d.ts.map +1 -0
  93. package/dist/wizard-checkbox.d.ts +1 -0
  94. package/dist/wizard-checkbox.d.ts.map +1 -0
  95. package/dist/wizard-dialog.d.ts +1 -0
  96. package/dist/wizard-dialog.d.ts.map +1 -0
  97. package/dist/wizard-select.d.ts +1 -0
  98. package/dist/wizard-select.d.ts.map +1 -0
  99. package/dist/wizard-textfield.d.ts +2 -1
  100. package/dist/wizard-textfield.d.ts.map +1 -0
  101. package/dist/wizards.d.ts +1 -0
  102. package/dist/wizards.d.ts.map +1 -0
  103. package/package.json +317 -47
  104. package/dist/core/api/api.js +0 -7
  105. package/dist/core/api/api.js.map +0 -1
  106. package/dist/core/api/editor/subject.js +0 -22
  107. package/dist/core/api/editor/subject.js.map +0 -1
  108. package/dist/core/api/editor/xml-editor.js +0 -82
  109. package/dist/core/api/editor/xml-editor.js.map +0 -1
  110. package/dist/core/api/plugin-state-api.js +0 -27
  111. package/dist/core/api/plugin-state-api.js.map +0 -1
  112. package/dist/core/foundation/cyrb64.js +0 -26
  113. package/dist/core/foundation/cyrb64.js.map +0 -1
  114. package/dist/core/foundation/deprecated/edit-event.js +0 -44
  115. package/dist/core/foundation/deprecated/edit-event.js.map +0 -1
  116. package/dist/core/foundation/deprecated/editor.js +0 -94
  117. package/dist/core/foundation/deprecated/editor.js.map +0 -1
  118. package/dist/core/foundation/deprecated/history.js +0 -17
  119. package/dist/core/foundation/deprecated/history.js.map +0 -1
  120. package/dist/core/foundation/deprecated/open-event.js +0 -9
  121. package/dist/core/foundation/deprecated/open-event.js.map +0 -1
  122. package/dist/core/foundation/deprecated/settings.js +0 -19
  123. package/dist/core/foundation/deprecated/settings.js.map +0 -1
  124. package/dist/core/foundation/deprecated/validation.js +0 -8
  125. package/dist/core/foundation/deprecated/validation.js.map +0 -1
  126. package/dist/core/foundation/deprecated/waiter.js +0 -12
  127. package/dist/core/foundation/deprecated/waiter.js.map +0 -1
  128. package/dist/core/foundation/edit-completed-event.js +0 -11
  129. package/dist/core/foundation/edit-completed-event.js.map +0 -1
  130. package/dist/core/foundation/edit-event.js +0 -8
  131. package/dist/core/foundation/edit-event.js.map +0 -1
  132. package/dist/core/foundation/edit.js +0 -31
  133. package/dist/core/foundation/edit.js.map +0 -1
  134. package/dist/core/foundation/handle-edit.js +0 -151
  135. package/dist/core/foundation/handle-edit.js.map +0 -1
  136. package/dist/core/foundation/open-event.js +0 -8
  137. package/dist/core/foundation/open-event.js.map +0 -1
  138. package/dist/core/foundation/plugin.js +0 -2
  139. package/dist/core/foundation/plugin.js.map +0 -1
  140. package/dist/core/foundation.js +0 -14
  141. package/dist/core/foundation.js.map +0 -1
  142. package/dist/core/locales.js +0 -21
  143. package/dist/core/locales.js.map +0 -1
  144. package/dist/openscd/src/WizardDivider.js +0 -37
  145. package/dist/openscd/src/WizardDivider.js.map +0 -1
  146. package/dist/openscd/src/Wizarding.js +0 -38
  147. package/dist/openscd/src/Wizarding.js.map +0 -1
  148. package/dist/openscd/src/action-icon.js +0 -220
  149. package/dist/openscd/src/action-icon.js.map +0 -1
  150. package/dist/openscd/src/action-pane.js +0 -176
  151. package/dist/openscd/src/action-pane.js.map +0 -1
  152. package/dist/openscd/src/addons/Editor.js +0 -106
  153. package/dist/openscd/src/addons/Editor.js.map +0 -1
  154. package/dist/openscd/src/addons/History.js +0 -490
  155. package/dist/openscd/src/addons/History.js.map +0 -1
  156. package/dist/openscd/src/addons/Layout.js +0 -619
  157. package/dist/openscd/src/addons/Layout.js.map +0 -1
  158. package/dist/openscd/src/addons/Settings.js +0 -465
  159. package/dist/openscd/src/addons/Settings.js.map +0 -1
  160. package/dist/openscd/src/addons/Waiter.js +0 -45
  161. package/dist/openscd/src/addons/Waiter.js.map +0 -1
  162. package/dist/openscd/src/addons/Wizards.js +0 -48
  163. package/dist/openscd/src/addons/Wizards.js.map +0 -1
  164. package/dist/openscd/src/addons/editor/edit-action-to-v1-converter.js +0 -96
  165. package/dist/openscd/src/addons/editor/edit-action-to-v1-converter.js.map +0 -1
  166. package/dist/openscd/src/addons/editor/edit-v1-to-v2-converter.js +0 -37
  167. package/dist/openscd/src/addons/editor/edit-v1-to-v2-converter.js.map +0 -1
  168. package/dist/openscd/src/addons/history/get-log-text.js +0 -26
  169. package/dist/openscd/src/addons/history/get-log-text.js.map +0 -1
  170. package/dist/openscd/src/addons/menu-tabs/menu-tabs.js +0 -74
  171. package/dist/openscd/src/addons/menu-tabs/menu-tabs.js.map +0 -1
  172. package/dist/openscd/src/addons/plugin-manager/custom-plugin-dialog.js +0 -177
  173. package/dist/openscd/src/addons/plugin-manager/custom-plugin-dialog.js.map +0 -1
  174. package/dist/openscd/src/addons/plugin-manager/plugin-manager.js +0 -165
  175. package/dist/openscd/src/addons/plugin-manager/plugin-manager.js.map +0 -1
  176. package/dist/openscd/src/filtered-list.js +0 -168
  177. package/dist/openscd/src/filtered-list.js.map +0 -1
  178. package/dist/openscd/src/finder-list.js +0 -207
  179. package/dist/openscd/src/finder-list.js.map +0 -1
  180. package/dist/openscd/src/foundation/compare.js +0 -273
  181. package/dist/openscd/src/foundation/compare.js.map +0 -1
  182. package/dist/openscd/src/foundation/dai.js +0 -127
  183. package/dist/openscd/src/foundation/dai.js.map +0 -1
  184. package/dist/openscd/src/foundation/generators.js +0 -67
  185. package/dist/openscd/src/foundation/generators.js.map +0 -1
  186. package/dist/openscd/src/foundation/ied.js +0 -84
  187. package/dist/openscd/src/foundation/ied.js.map +0 -1
  188. package/dist/openscd/src/foundation/nsd.js +0 -13
  189. package/dist/openscd/src/foundation/nsd.js.map +0 -1
  190. package/dist/openscd/src/foundation/nsdoc.js +0 -180
  191. package/dist/openscd/src/foundation/nsdoc.js.map +0 -1
  192. package/dist/openscd/src/foundation/scl.js +0 -64
  193. package/dist/openscd/src/foundation/scl.js.map +0 -1
  194. package/dist/openscd/src/foundation.js +0 -1922
  195. package/dist/openscd/src/foundation.js.map +0 -1
  196. package/dist/openscd/src/icons/compare.js +0 -11
  197. package/dist/openscd/src/icons/compare.js.map +0 -1
  198. package/dist/openscd/src/icons/icons.js +0 -611
  199. package/dist/openscd/src/icons/icons.js.map +0 -1
  200. package/dist/openscd/src/icons/ied-icons.js +0 -11
  201. package/dist/openscd/src/icons/ied-icons.js.map +0 -1
  202. package/dist/openscd/src/icons/lnode.js +0 -50
  203. package/dist/openscd/src/icons/lnode.js.map +0 -1
  204. package/dist/openscd/src/open-scd.js +0 -483
  205. package/dist/openscd/src/open-scd.js.map +0 -1
  206. package/dist/openscd/src/oscd-filter-button.js +0 -89
  207. package/dist/openscd/src/oscd-filter-button.js.map +0 -1
  208. package/dist/openscd/src/plain-compare-list.js +0 -132
  209. package/dist/openscd/src/plain-compare-list.js.map +0 -1
  210. package/dist/openscd/src/plugin-tag.js +0 -23
  211. package/dist/openscd/src/plugin-tag.js.map +0 -1
  212. package/dist/openscd/src/plugin.events.js +0 -12
  213. package/dist/openscd/src/plugin.events.js.map +0 -1
  214. package/dist/openscd/src/plugin.js +0 -2
  215. package/dist/openscd/src/plugin.js.map +0 -1
  216. package/dist/openscd/src/plugins.js +0 -256
  217. package/dist/openscd/src/plugins.js.map +0 -1
  218. package/dist/openscd/src/schemas.js +0 -9325
  219. package/dist/openscd/src/schemas.js.map +0 -1
  220. package/dist/openscd/src/themes.js +0 -122
  221. package/dist/openscd/src/themes.js.map +0 -1
  222. package/dist/openscd/src/translations/de.js +0 -954
  223. package/dist/openscd/src/translations/de.js.map +0 -1
  224. package/dist/openscd/src/translations/en.js +0 -950
  225. package/dist/openscd/src/translations/en.js.map +0 -1
  226. package/dist/openscd/src/translations/loader.js +0 -10
  227. package/dist/openscd/src/translations/loader.js.map +0 -1
  228. package/dist/openscd/src/wizard-checkbox.js +0 -152
  229. package/dist/openscd/src/wizard-checkbox.js.map +0 -1
  230. package/dist/openscd/src/wizard-dialog.js +0 -374
  231. package/dist/openscd/src/wizard-dialog.js.map +0 -1
  232. package/dist/openscd/src/wizard-select.js +0 -115
  233. package/dist/openscd/src/wizard-select.js.map +0 -1
  234. package/dist/openscd/src/wizard-textfield.js +0 -191
  235. package/dist/openscd/src/wizard-textfield.js.map +0 -1
  236. package/dist/openscd/src/wizards.js +0 -196
  237. package/dist/openscd/src/wizards.js.map +0 -1
  238. package/dist/xml/src/foundation.js +0 -67
  239. package/dist/xml/src/foundation.js.map +0 -1
  240. package/dist/xml/src/index.js +0 -2
  241. package/dist/xml/src/index.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"ied.js","sourceRoot":"","sources":["../../../../src/foundation/ied.ts"],"names":[],"mappings":"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","sourcesContent":["import { find, identity } from '../foundation.js';\nimport { Delete } from '@openscd/core/foundation/deprecated/editor.js';\n\n/**\n * All available FCDA references that are used to link ExtRefs.\n */\nconst fcdaReferences = [\n 'ldInst',\n 'lnClass',\n 'lnInst',\n 'prefix',\n 'doName',\n 'daName',\n];\n\n/**\n * Get all the FCDA attributes containing values from a specific element.\n *\n * @param elementContainingFcdaReferences - The element to use\n * @returns FCDA references\n */\nexport function getFcdaReferences(\n elementContainingFcdaReferences: Element\n): string {\n return fcdaReferences\n .map(fcdaRef =>\n elementContainingFcdaReferences.getAttribute(fcdaRef)\n ? `[${fcdaRef}=\"${elementContainingFcdaReferences.getAttribute(\n fcdaRef\n )}\"]`\n : ''\n )\n .join('');\n}\n\n/**\n * All available Control references that are used to link ExtRefs.\n */\nconst controlReferences = ['srcLDInst', 'srcLNClass', 'srcLNInst', 'srcCBName'];\n\n/**\n * Get all the Control attributes containing values from a specific element.\n *\n * @param extRef - The element to use\n * @returns Control references\n */\nexport function getControlReferences(extRef: Element): string {\n return controlReferences\n .map(controlRef =>\n extRef.getAttribute(controlRef)\n ? `[${controlRef}=\"${extRef.getAttribute(controlRef)}\"]`\n : ''\n )\n .join('');\n}\n\n/**\n * Creating Delete actions in case Inputs elements are empty.\n *\n * @param extRefDeleteActions - All Delete actions for ExtRefs.\n * @returns Possible delete actions for empty Inputs elements.\n */\nexport function emptyInputsDeleteActions(\n extRefDeleteActions: Delete[]\n): Delete[] {\n if (!extRefDeleteActions.length) return [];\n\n const inputDeleteActions: Delete[] = [];\n const inputsMap: Record<string, Element> = {};\n\n for (const extRefDeleteAction of extRefDeleteActions) {\n const extRef = <Element>extRefDeleteAction.old.element;\n const inputsElement = <Element>extRefDeleteAction.old.parent;\n\n const id = identity(inputsElement);\n if (!inputsMap[id]) inputsMap[id] = <Element>inputsElement.cloneNode(true);\n\n // Search the ExtRef in the Cloned Inputs Element\n const linkedExtRef = inputsMap[id].querySelector(\n `ExtRef${\n extRef.getAttribute('iedName')\n ? `[iedName=\"${extRef.getAttribute('iedName')}\"]`\n : ''\n }${getFcdaReferences(extRef)}${\n extRef.getAttribute('serviceType')\n ? `[serviceType=\"${extRef.getAttribute('serviceType')}\"]`\n : ''\n }${getControlReferences(extRef)}`\n );\n // And if found remove it as child from the Cloned Inputs Element\n if (linkedExtRef) inputsMap[id].removeChild(linkedExtRef);\n }\n\n // Create delete action for each empty inputs\n Object.entries(inputsMap).forEach(([key, value]) => {\n if (value.children.length! == 0) {\n const doc = extRefDeleteActions[0].old.parent.ownerDocument!;\n const inputs = find(doc, 'Inputs', key);\n\n if (inputs && inputs.parentElement) {\n inputDeleteActions.push({\n old: { parent: inputs.parentElement, element: inputs },\n });\n }\n }\n });\n\n return inputDeleteActions;\n}\n"]}
@@ -1,13 +0,0 @@
1
- export const iec6185074 = fetch('public/xml/IEC_61850-7-4_2007B5.nsd')
2
- .then(response => response.text())
3
- .then(str => new DOMParser().parseFromString(str, 'application/xml'));
4
- export const iec6185073 = fetch('public/xml/IEC_61850-7-3_2007B5.nsd')
5
- .then(response => response.text())
6
- .then(str => new DOMParser().parseFromString(str, 'application/xml'));
7
- export const iec6185072 = fetch('public/xml/IEC_61850-7-2_2007B5.nsd')
8
- .then(response => response.text())
9
- .then(str => new DOMParser().parseFromString(str, 'application/xml'));
10
- export const iec6185081 = fetch('public/xml/IEC_61850-8-1_2003A2.nsd')
11
- .then(response => response.text())
12
- .then(str => new DOMParser().parseFromString(str, 'application/xml'));
13
- //# sourceMappingURL=nsd.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nsd.js","sourceRoot":"","sources":["../../../../src/foundation/nsd.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,CAAC,qCAAqC,CAAC;KACnE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;KACjC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC;AAExE,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,CAAC,qCAAqC,CAAC;KACnE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;KACjC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC;AAExE,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,CAAC,qCAAqC,CAAC;KACnE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;KACjC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC;AAExE,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,CAAC,qCAAqC,CAAC;KACnE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;KACjC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC","sourcesContent":["export const iec6185074 = fetch('public/xml/IEC_61850-7-4_2007B5.nsd')\n .then(response => response.text())\n .then(str => new DOMParser().parseFromString(str, 'application/xml'));\n\nexport const iec6185073 = fetch('public/xml/IEC_61850-7-3_2007B5.nsd')\n .then(response => response.text())\n .then(str => new DOMParser().parseFromString(str, 'application/xml'));\n\nexport const iec6185072 = fetch('public/xml/IEC_61850-7-2_2007B5.nsd')\n .then(response => response.text())\n .then(str => new DOMParser().parseFromString(str, 'application/xml'));\n\nexport const iec6185081 = fetch('public/xml/IEC_61850-8-1_2003A2.nsd')\n .then(response => response.text())\n .then(str => new DOMParser().parseFromString(str, 'application/xml'));\n"]}
@@ -1,180 +0,0 @@
1
- import { iec6185072, iec6185073, iec6185074, iec6185081 } from "./nsd.js";
2
- const [nsd72, nsd73, nsd74, nsd81] = await Promise.all([iec6185072, iec6185073, iec6185074, iec6185081]);
3
- let nsdoc72 = undefined;
4
- let nsdoc73 = undefined;
5
- let nsdoc74 = undefined;
6
- let nsdoc81 = undefined;
7
- /**
8
- * Initialize the full Nsdoc object.
9
- * @returns A fully initialized Nsdoc object for wizards/editors to use.
10
- */
11
- export function initializeNsdoc() {
12
- [nsdoc72, nsdoc73, nsdoc74, nsdoc81] = [
13
- localStorage.getItem('IEC 61850-7-2') ? new DOMParser().parseFromString(localStorage.getItem('IEC 61850-7-2'), 'application/xml') : undefined,
14
- localStorage.getItem('IEC 61850-7-3') ? new DOMParser().parseFromString(localStorage.getItem('IEC 61850-7-3'), 'application/xml') : undefined,
15
- localStorage.getItem('IEC 61850-7-4') ? new DOMParser().parseFromString(localStorage.getItem('IEC 61850-7-4'), 'application/xml') : undefined,
16
- localStorage.getItem('IEC 61850-8-1') ? new DOMParser().parseFromString(localStorage.getItem('IEC 61850-8-1'), 'application/xml') : undefined
17
- ];
18
- const iedElementTagNames = ['LN', 'LN0', 'DO', 'SDO', 'DOI', 'DA', 'BDA', 'DAI'];
19
- const getDataDescriptions = {
20
- LN: {
21
- getDataDescription: getLNDataDescription
22
- },
23
- LN0: {
24
- getDataDescription: getLNDataDescription
25
- },
26
- DO: {
27
- getDataDescription: getDODataDescription
28
- },
29
- SDO: {
30
- getDataDescription: getSDODataDescription
31
- },
32
- DOI: {
33
- getDataDescription: getDODataDescription
34
- },
35
- DA: {
36
- getDataDescription: getDADataDescription
37
- },
38
- BDA: {
39
- getDataDescription: getBDADataDescription
40
- },
41
- DAI: {
42
- getDataDescription: getDADataDescription
43
- }
44
- };
45
- /**
46
- * Getting data descriptions for LN(0) elements out of the IEC 61850-7-4 .nsdoc file.
47
- * @param element - The element to use for searching the LN description.
48
- * @returns Documentation from the .nsdoc file for this LN(0) file, or the lnClass attribute in case no description can be found.
49
- */
50
- function getLNDataDescription(element) {
51
- const lnClassAttribute = element.getAttribute('lnClass');
52
- const lnClass = nsd74.querySelector(`NS > LNClasses > LNClass[name="${lnClassAttribute}"]`);
53
- const lnClassDescription = getNsdocDocumentation(nsdoc74, lnClass?.getAttribute('titleID'));
54
- return {
55
- label: lnClassDescription ? lnClassDescription + ' (' + lnClassAttribute + ')' : lnClassAttribute
56
- };
57
- }
58
- /**
59
- * Getting data descriptions for DO(I) elements out of the IEC 61850-7-4 .nsdoc file.
60
- * @param element - The element to use for searching the DO description.
61
- * @returns Documentation from the .nsdoc file for this DO(I) file, or the name attribute in case no description can be found.
62
- */
63
- function getDODataDescription(element) {
64
- const doName = element.getAttribute('name');
65
- const lnClass = nsd74.querySelector(`NS > LNClasses > LNClass[name="${element.parentElement?.getAttribute('lnClass')}"]`);
66
- const base = lnClass?.getAttribute('base');
67
- const dObject = lnClass?.querySelector(`DataObject[name="${doName}"]`) ?? getInheritedDataObject(base, doName);
68
- return {
69
- label: getNsdocDocumentation(nsdoc74, dObject?.getAttribute('descID')) ?? doName
70
- };
71
- }
72
- /**
73
- * Getting data descriptions for SDO elements out of the IEC 61850-7-3 .nsdoc file.
74
- * @param element - The element to use for searching the SDO description.
75
- * @returns Documentation from the .nsdoc file for this SDO element, or the name attribute in case no description can be found.
76
- */
77
- function getSDODataDescription(element) {
78
- const sdoName = element.getAttribute('name');
79
- const subDataObject = nsd73.querySelector(`CDCs > CDC[name="${element.parentElement?.getAttribute('cdc')}"] > SubDataObject[name="${sdoName}"]`);
80
- return {
81
- label: getNsdocDocumentation(nsdoc73, subDataObject?.getAttribute('descID')) ?? sdoName
82
- };
83
- }
84
- /**
85
- * Getting data descriptions for DA(I) elements out of the IEC 61850-7-3 and IEC 61850-8-1 .nsdoc file.
86
- * @param element - The element to use for searching the DA description.
87
- * @returns Documentation from the .nsdoc file for this DA(I) element, or the name attribute in case no description can be found.
88
- */
89
- function getDADataDescription(element) {
90
- const daElementName = element.getAttribute('name');
91
- const cdcName = element.closest('DOType').getAttribute('cdc');
92
- const serviceDataAttr = nsd81.querySelector(`ServiceCDCs > ServiceCDC[cdc="${cdcName}"] > ServiceDataAttribute[name="${daElementName}"]`);
93
- if (serviceDataAttr) {
94
- const id = serviceDataAttr?.getAttribute('descID') ??
95
- nsd81.querySelector(`ServiceConstructedAttributes > ServiceConstructedAttribute[name="${daElementName}"]`)?.getAttribute('titleID') ?? '';
96
- return {
97
- label: getNsdocDocumentation(nsdoc81, id) ?? daElementName
98
- };
99
- }
100
- else {
101
- const dataAttr = nsd73.querySelector(`NS > CDCs > CDC[name="${cdcName}"] > DataAttribute[name="${daElementName}"]`);
102
- return {
103
- label: getNsdocDocumentation(nsdoc73, dataAttr?.getAttribute('descID')) ?? daElementName
104
- };
105
- }
106
- }
107
- /**
108
- * Getting data descriptions for BDA elements out of the IEC 61850-7-3 and IEC 61850-8-1 .nsdoc file.
109
- * @param element - The element to use for searching the BDA description.
110
- * @param ancestors - In this function, we need an ancestor to get a 'CDC' attribute.
111
- * @returns Documentation from the .nsdoc file for this BDA element, or the name attribute in case no description can be found.
112
- */
113
- function getBDADataDescription(element, ancestors) {
114
- const bdaElementName = element.getAttribute('name');
115
- const daParent = ancestors?.filter(x => x.tagName === 'DA')[0];
116
- const serviceDataAttr = nsd81.querySelector(`ServiceConstructedAttributes > ServiceConstructedAttribute[name="${daParent.getAttribute('name')}"]`);
117
- if (serviceDataAttr) {
118
- if (serviceDataAttr.querySelector(`SubDataAttribute[name="${ancestors[0].getAttribute('name')}"]`)?.getAttribute('type') == 'Originator') {
119
- const subDataAttr = nsd72.querySelector(`ConstructedAttributes > ConstructedAttribute[name="Originator"] > SubDataAttribute[name="${bdaElementName}"]`);
120
- return {
121
- label: getNsdocDocumentation(nsdoc72, subDataAttr?.getAttribute('descID')) ?? bdaElementName
122
- };
123
- }
124
- return {
125
- label: getNsdocDocumentation(nsdoc81, serviceDataAttr.querySelector(`SubDataAttribute[name="${bdaElementName}"]`)?.getAttribute('descID')) ?? bdaElementName
126
- };
127
- }
128
- else {
129
- const dataAttrParent = nsd73.querySelector(`NS > CDCs > CDC[name="${daParent.closest('DOType')?.getAttribute('cdc')}"] >
130
- DataAttribute[name="${daParent.getAttribute('name')}"]`);
131
- return {
132
- label: getNsdocDocumentation(nsdoc73, getSubDataAttribute(dataAttrParent, bdaElementName)?.getAttribute('descID')) ?? bdaElementName
133
- };
134
- }
135
- }
136
- /**
137
- * Get the SubDataAttribute from the IEC-61850-7-3.
138
- * @param parent - The parent element in which to search for a SubDataAttribute.
139
- * @param bdaElementName - The name of the element to search.
140
- * @returns A SubDataAttribute, or null.
141
- */
142
- function getSubDataAttribute(parent, bdaElementName) {
143
- if (!parent)
144
- return null;
145
- const subDataAttr = nsd73.querySelector(`ConstructedAttributes > ConstructedAttribute[name="${parent?.getAttribute('type')}"] > SubDataAttribute[name="${bdaElementName}"]`);
146
- return subDataAttr ?? getSubDataAttribute(nsd73.querySelector(`ConstructedAttributes > ConstructedAttribute[name="${parent?.getAttribute('type')}"] > SubDataAttribute`), bdaElementName);
147
- }
148
- /**
149
- * Get the potential inherited data object based on a LNClass base.
150
- * @param lnClassBase - The base of a LNClass element.
151
- * @param doName - The name of the DO(I) to search for.
152
- * @returns the DataObject in case found, otherwise null.
153
- */
154
- function getInheritedDataObject(lnClassBase, doName) {
155
- if (!lnClassBase)
156
- return null;
157
- const lnClass = nsd74.querySelector(`NS > LNClasses > AbstractLNClass[name="${lnClassBase}"]`);
158
- const base = lnClass?.getAttribute('base');
159
- return lnClass?.querySelector(`DataObject[name="${doName}"]`) ?? getInheritedDataObject(base, doName);
160
- }
161
- return {
162
- nsdoc72: nsdoc72,
163
- nsdoc73: nsdoc73,
164
- nsdoc74: nsdoc74,
165
- nsdoc81: nsdoc81,
166
- getDataDescription: function getDataDescription(element, ancestors) {
167
- return getDataDescriptions[element.tagName].getDataDescription(element, ancestors);
168
- }
169
- };
170
- }
171
- /**
172
- * Get the documentation from a given nsdoc file.
173
- * @param nsdoc - The .nsdoc file to use for searching
174
- * @param id - The id of the doc to search for.
175
- * @returns - The documentation belonging to the id.
176
- */
177
- function getNsdocDocumentation(nsdoc, id) {
178
- return nsdoc?.querySelector(`NSDoc > Doc[id="${id ?? ''}"]`)?.textContent;
179
- }
180
- //# sourceMappingURL=nsdoc.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nsdoc.js","sourceRoot":"","sources":["../../../../src/foundation/nsdoc.ts"],"names":[],"mappings":"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","sourcesContent":["import { iec6185072, iec6185073, iec6185074, iec6185081 } from \"./nsd.js\";\n\nexport interface Nsdoc {\n nsdoc72?: XMLDocument;\n nsdoc73?: XMLDocument;\n nsdoc74?: XMLDocument;\n nsdoc81?: XMLDocument;\n getDataDescription: (element: Element, ancestors?: Element[]) => { label: string; }\n}\n\nconst [nsd72, nsd73, nsd74, nsd81] = await Promise.all([iec6185072, iec6185073, iec6185074, iec6185081]);\n\nlet nsdoc72: Document | undefined = undefined;\nlet nsdoc73: Document | undefined = undefined;\nlet nsdoc74: Document | undefined = undefined;\nlet nsdoc81: Document | undefined = undefined;\n\n/**\n * Initialize the full Nsdoc object.\n * @returns A fully initialized Nsdoc object for wizards/editors to use.\n */\nexport function initializeNsdoc(): Nsdoc {\n [nsdoc72, nsdoc73, nsdoc74, nsdoc81] = [\n localStorage.getItem('IEC 61850-7-2') ? new DOMParser().parseFromString(localStorage.getItem('IEC 61850-7-2')!, 'application/xml') : undefined,\n localStorage.getItem('IEC 61850-7-3') ? new DOMParser().parseFromString(localStorage.getItem('IEC 61850-7-3')!, 'application/xml') : undefined,\n localStorage.getItem('IEC 61850-7-4') ? new DOMParser().parseFromString(localStorage.getItem('IEC 61850-7-4')!, 'application/xml') : undefined,\n localStorage.getItem('IEC 61850-8-1') ? new DOMParser().parseFromString(localStorage.getItem('IEC 61850-8-1')!, 'application/xml') : undefined\n ]\n\n const iedElementTagNames = ['LN', 'LN0', 'DO', 'SDO', 'DOI', 'DA', 'BDA', 'DAI'] as const;\n type IEDElementTagNames = typeof iedElementTagNames[number];\n type GetDataDescription = (element: Element, ancestors?: Element[]) => { label: string; };\n\n const getDataDescriptions: Record<\n IEDElementTagNames,\n {\n getDataDescription: GetDataDescription;\n }\n > = {\n LN: {\n getDataDescription: getLNDataDescription\n },\n LN0: {\n getDataDescription: getLNDataDescription\n },\n DO: {\n getDataDescription: getDODataDescription\n },\n SDO: {\n getDataDescription: getSDODataDescription\n },\n DOI: {\n getDataDescription: getDODataDescription\n },\n DA: {\n getDataDescription: getDADataDescription\n },\n BDA: {\n getDataDescription: getBDADataDescription\n },\n DAI: {\n getDataDescription: getDADataDescription\n }\n };\n\n /**\n * Getting data descriptions for LN(0) elements out of the IEC 61850-7-4 .nsdoc file.\n * @param element - The element to use for searching the LN description.\n * @returns Documentation from the .nsdoc file for this LN(0) file, or the lnClass attribute in case no description can be found.\n */\n function getLNDataDescription(element: Element): { label: string; } {\n const lnClassAttribute = element.getAttribute('lnClass')!;\n const lnClass = nsd74.querySelector(`NS > LNClasses > LNClass[name=\"${lnClassAttribute}\"]`);\n const lnClassDescription = getNsdocDocumentation(nsdoc74!, lnClass?.getAttribute('titleID'));\n\n return {\n label: lnClassDescription ? lnClassDescription + ' (' + lnClassAttribute + ')' : lnClassAttribute\n };\n }\n\n /**\n * Getting data descriptions for DO(I) elements out of the IEC 61850-7-4 .nsdoc file.\n * @param element - The element to use for searching the DO description.\n * @returns Documentation from the .nsdoc file for this DO(I) file, or the name attribute in case no description can be found.\n */\n function getDODataDescription(element: Element): { label: string; } {\n const doName = element.getAttribute('name')!;\n const lnClass = nsd74.querySelector(`NS > LNClasses > LNClass[name=\"${element.parentElement?.getAttribute('lnClass')}\"]`);\n const base = lnClass?.getAttribute('base');\n const dObject = lnClass?.querySelector(`DataObject[name=\"${doName}\"]`) ?? getInheritedDataObject(base!, doName);\n\n return {\n label: getNsdocDocumentation(nsdoc74!, dObject?.getAttribute('descID')) ?? doName\n };\n }\n\n /**\n * Getting data descriptions for SDO elements out of the IEC 61850-7-3 .nsdoc file.\n * @param element - The element to use for searching the SDO description.\n * @returns Documentation from the .nsdoc file for this SDO element, or the name attribute in case no description can be found.\n */\n function getSDODataDescription(element: Element): { label: string; } {\n const sdoName = element.getAttribute('name')!;\n const subDataObject = nsd73.querySelector(`CDCs > CDC[name=\"${element.parentElement?.getAttribute('cdc')}\"] > SubDataObject[name=\"${sdoName}\"]`);\n\n return {\n label: getNsdocDocumentation(nsdoc73!, subDataObject?.getAttribute('descID')) ?? sdoName\n };\n }\n\n /**\n * Getting data descriptions for DA(I) elements out of the IEC 61850-7-3 and IEC 61850-8-1 .nsdoc file.\n * @param element - The element to use for searching the DA description.\n * @returns Documentation from the .nsdoc file for this DA(I) element, or the name attribute in case no description can be found.\n */\n function getDADataDescription(element: Element): { label: string; } {\n const daElementName = element.getAttribute('name')!;\n const cdcName = element.closest('DOType')!.getAttribute('cdc');\n const serviceDataAttr = nsd81.querySelector(`ServiceCDCs > ServiceCDC[cdc=\"${cdcName}\"] > ServiceDataAttribute[name=\"${daElementName}\"]`);\n\n if (serviceDataAttr) {\n const id = serviceDataAttr?.getAttribute('descID') ??\n nsd81.querySelector(`ServiceConstructedAttributes > ServiceConstructedAttribute[name=\"${daElementName}\"]`)?.getAttribute('titleID') ?? '';\n return {\n label: getNsdocDocumentation(nsdoc81!, id) ?? daElementName\n };\n } else {\n const dataAttr = nsd73.querySelector(`NS > CDCs > CDC[name=\"${cdcName}\"] > DataAttribute[name=\"${daElementName}\"]`);\n return {\n label: getNsdocDocumentation(nsdoc73!, dataAttr?.getAttribute('descID')) ?? daElementName\n };\n }\n }\n\n /**\n * Getting data descriptions for BDA elements out of the IEC 61850-7-3 and IEC 61850-8-1 .nsdoc file.\n * @param element - The element to use for searching the BDA description.\n * @param ancestors - In this function, we need an ancestor to get a 'CDC' attribute.\n * @returns Documentation from the .nsdoc file for this BDA element, or the name attribute in case no description can be found.\n */\n function getBDADataDescription(element: Element, ancestors?: Element[]): { label: string; } {\n const bdaElementName = element.getAttribute('name')!;\n const daParent = ancestors?.filter(x => x.tagName === 'DA')[0];\n const serviceDataAttr = nsd81.querySelector(`ServiceConstructedAttributes > ServiceConstructedAttribute[name=\"${daParent!.getAttribute('name')}\"]`);\n\n if (serviceDataAttr) {\n if (serviceDataAttr.querySelector(`SubDataAttribute[name=\"${ancestors![0].getAttribute('name')}\"]`)?.getAttribute('type') == 'Originator') {\n const subDataAttr = nsd72.querySelector(`ConstructedAttributes > ConstructedAttribute[name=\"Originator\"] > SubDataAttribute[name=\"${bdaElementName}\"]`);\n return {\n label: getNsdocDocumentation(nsdoc72!, subDataAttr?.getAttribute('descID')) ?? bdaElementName\n };\n }\n return {\n label: getNsdocDocumentation(nsdoc81!,\n serviceDataAttr.querySelector(`SubDataAttribute[name=\"${bdaElementName}\"]`)?.getAttribute('descID')) ?? bdaElementName\n };\n } else {\n const dataAttrParent = nsd73.querySelector(`NS > CDCs > CDC[name=\"${daParent!.closest('DOType')?.getAttribute('cdc')}\"] >\n DataAttribute[name=\"${daParent!.getAttribute('name')}\"]`);\n return {\n label: getNsdocDocumentation(nsdoc73!, getSubDataAttribute(dataAttrParent!, bdaElementName)?.getAttribute('descID')) ?? bdaElementName\n };\n }\n }\n\n /**\n * Get the SubDataAttribute from the IEC-61850-7-3.\n * @param parent - The parent element in which to search for a SubDataAttribute.\n * @param bdaElementName - The name of the element to search.\n * @returns A SubDataAttribute, or null.\n */\n function getSubDataAttribute(parent: Element | undefined, bdaElementName: string): Element | null {\n if (!parent) return null;\n const subDataAttr = nsd73.querySelector(`ConstructedAttributes > ConstructedAttribute[name=\"${parent?.getAttribute('type')}\"] > SubDataAttribute[name=\"${bdaElementName}\"]`);\n return subDataAttr ?? getSubDataAttribute(nsd73.querySelector(`ConstructedAttributes > ConstructedAttribute[name=\"${parent?.getAttribute('type')}\"] > SubDataAttribute`)!, bdaElementName);\n }\n\n /**\n * Get the potential inherited data object based on a LNClass base.\n * @param lnClassBase - The base of a LNClass element.\n * @param doName - The name of the DO(I) to search for.\n * @returns the DataObject in case found, otherwise null.\n */\n function getInheritedDataObject(lnClassBase: string, doName: string): Element | null {\n if (!lnClassBase) return null;\n const lnClass = nsd74.querySelector(`NS > LNClasses > AbstractLNClass[name=\"${lnClassBase}\"]`);\n const base = lnClass?.getAttribute('base');\n\n return lnClass?.querySelector(`DataObject[name=\"${doName}\"]`) ?? getInheritedDataObject(base!, doName);\n }\n\n return {\n nsdoc72: nsdoc72,\n nsdoc73: nsdoc73,\n nsdoc74: nsdoc74,\n nsdoc81: nsdoc81,\n getDataDescription: function getDataDescription(element: Element, ancestors?: Element[]): { label: string; } {\n return getDataDescriptions[element.tagName as keyof Record<IEDElementTagNames,\n {\n getDataDescription: GetDataDescription;\n }\n >].getDataDescription(element, ancestors);\n }\n\n }\n}\n\n/**\n * Get the documentation from a given nsdoc file.\n * @param nsdoc - The .nsdoc file to use for searching\n * @param id - The id of the doc to search for.\n * @returns - The documentation belonging to the id.\n */\nfunction getNsdocDocumentation(nsdoc: XMLDocument, id: string | null | undefined): string | null | undefined {\n return nsdoc?.querySelector(`NSDoc > Doc[id=\"${id ?? ''}\"]`)?.textContent;\n}\n"]}
@@ -1,64 +0,0 @@
1
- import { crossProduct } from '../foundation.js';
2
- function getDataModelChildren(parent) {
3
- if (['LDevice', 'Server'].includes(parent.tagName))
4
- return Array.from(parent.children).filter(child => child.tagName === 'LDevice' ||
5
- child.tagName === 'LN0' ||
6
- child.tagName === 'LN');
7
- const id = parent.tagName === 'LN' || parent.tagName === 'LN0'
8
- ? parent.getAttribute('lnType')
9
- : parent.getAttribute('type');
10
- return Array.from(parent.ownerDocument.querySelectorAll(`LNodeType[id="${id}"] > DO, DOType[id="${id}"] > SDO, DOType[id="${id}"] > DA, DAType[id="${id}"] > BDA`));
11
- }
12
- export function existFcdaReference(fcda, ied) {
13
- const [ldInst, prefix, lnClass, lnInst, doName, daName, fc] = [
14
- 'ldInst',
15
- 'prefix',
16
- 'lnClass',
17
- 'lnInst',
18
- 'doName',
19
- 'daName',
20
- 'fc',
21
- ].map(attr => fcda.getAttribute(attr));
22
- const sinkLdInst = ied.querySelector(`LDevice[inst="${ldInst}"]`);
23
- if (!sinkLdInst)
24
- return false;
25
- const prefixSelctors = prefix
26
- ? [`[prefix="${prefix}"]`]
27
- : ['[prefix=""]', ':not([prefix])'];
28
- const lnInstSelectors = lnInst
29
- ? [`[inst="${lnInst}"]`]
30
- : ['[inst=""]', ':not([inst])'];
31
- const anyLnSelector = crossProduct(['LN0', 'LN'], prefixSelctors, [`[lnClass="${lnClass}"]`], lnInstSelectors)
32
- .map(strings => strings.join(''))
33
- .join(',');
34
- const sinkAnyLn = ied.querySelector(anyLnSelector);
35
- if (!sinkAnyLn)
36
- return false;
37
- const doNames = doName?.split('.');
38
- if (!doNames)
39
- return false;
40
- let parent = sinkAnyLn;
41
- for (const doNameAttr of doNames) {
42
- parent = getDataModelChildren(parent).find(child => child.getAttribute('name') === doNameAttr);
43
- if (!parent)
44
- return false;
45
- }
46
- const daNames = daName?.split('.');
47
- const someFcInSink = getDataModelChildren(parent).some(da => da.getAttribute('fc') === fc);
48
- if (!daNames && someFcInSink)
49
- return true;
50
- if (!daNames)
51
- return false;
52
- let sinkFc = '';
53
- for (const daNameAttr of daNames) {
54
- parent = getDataModelChildren(parent).find(child => child.getAttribute('name') === daNameAttr);
55
- if (parent?.getAttribute('fc'))
56
- sinkFc = parent.getAttribute('fc');
57
- if (!parent)
58
- return false;
59
- }
60
- if (sinkFc !== fc)
61
- return false;
62
- return true;
63
- }
64
- //# sourceMappingURL=scl.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scl.js","sourceRoot":"","sources":["../../../../src/foundation/scl.ts"],"names":[],"mappings":"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","sourcesContent":["import { crossProduct } from '../foundation.js';\n\nfunction getDataModelChildren(parent: Element): Element[] {\n if (['LDevice', 'Server'].includes(parent.tagName))\n return Array.from(parent.children).filter(\n child =>\n child.tagName === 'LDevice' ||\n child.tagName === 'LN0' ||\n child.tagName === 'LN'\n );\n\n const id =\n parent.tagName === 'LN' || parent.tagName === 'LN0'\n ? parent.getAttribute('lnType')\n : parent.getAttribute('type');\n\n return Array.from(\n parent.ownerDocument.querySelectorAll(\n `LNodeType[id=\"${id}\"] > DO, DOType[id=\"${id}\"] > SDO, DOType[id=\"${id}\"] > DA, DAType[id=\"${id}\"] > BDA`\n )\n );\n}\n\nexport function existFcdaReference(fcda: Element, ied: Element): boolean {\n const [ldInst, prefix, lnClass, lnInst, doName, daName, fc] = [\n 'ldInst',\n 'prefix',\n 'lnClass',\n 'lnInst',\n 'doName',\n 'daName',\n 'fc',\n ].map(attr => fcda.getAttribute(attr));\n\n const sinkLdInst = ied.querySelector(`LDevice[inst=\"${ldInst}\"]`);\n if (!sinkLdInst) return false;\n\n const prefixSelctors = prefix\n ? [`[prefix=\"${prefix}\"]`]\n : ['[prefix=\"\"]', ':not([prefix])'];\n const lnInstSelectors = lnInst\n ? [`[inst=\"${lnInst}\"]`]\n : ['[inst=\"\"]', ':not([inst])'];\n\n const anyLnSelector = crossProduct(\n ['LN0', 'LN'],\n prefixSelctors,\n [`[lnClass=\"${lnClass}\"]`],\n lnInstSelectors\n )\n .map(strings => strings.join(''))\n .join(',');\n\n const sinkAnyLn = ied.querySelector(anyLnSelector);\n if (!sinkAnyLn) return false;\n\n const doNames = doName?.split('.');\n if (!doNames) return false;\n\n let parent: Element | undefined = sinkAnyLn;\n for (const doNameAttr of doNames) {\n parent = getDataModelChildren(parent).find(\n child => child.getAttribute('name') === doNameAttr\n );\n if (!parent) return false;\n }\n\n const daNames = daName?.split('.');\n const someFcInSink = getDataModelChildren(parent).some(\n da => da.getAttribute('fc') === fc\n );\n if (!daNames && someFcInSink) return true;\n if (!daNames) return false;\n\n let sinkFc = '';\n for (const daNameAttr of daNames) {\n parent = getDataModelChildren(parent).find(\n child => child.getAttribute('name') === daNameAttr\n );\n\n if (parent?.getAttribute('fc')) sinkFc = parent.getAttribute('fc')!;\n\n if (!parent) return false;\n }\n\n if (sinkFc !== fc) return false;\n\n return true;\n}\n"]}